Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 1 addition & 19 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "deepgrade-marketplace",
"description": "Developer toolkit for codebase auditing, AI-readiness scanning, structured planning, and operational readiness. Four plugins, one lockstep release. Works on any stack.",
"description": "Developer toolkit for codebase auditing, AI-readiness scanning, structured planning, and operational readiness. Three plugins, one lockstep release. Works on any stack.",
"owner": {
"name": "Kyle Whynot"
},
Expand Down Expand Up @@ -57,24 +57,6 @@
"ref": "v8.0.0",
"sha": "bc75c7861953b5481efaf6928086b69f966d6c67"
}
},
{
"name": "deepgrade-guard",
"description": "Always-on safety hooks: force-push and DB-deploy blocking, migration protection, change/test tracking, session summaries.",
"category": "development",
"tags": [
"safety",
"hooks",
"git-guard",
"migration-guard"
],
"source": {
"source": "git-subdir",
"url": "https://github.com/krwhynot/deepgrade.git",
"path": "plugins/deepgrade-guard",
"ref": "v8.0.0",
"sha": "bc75c7861953b5481efaf6928086b69f966d6c67"
}
}
]
}
2 changes: 1 addition & 1 deletion .github/workflows/suite.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,4 @@ jobs:
claude plugin validate "$p" --strict
n=$((n + 1))
done
[ "$n" -eq 4 ] || { echo "validated $n plugin dirs, expected 4"; exit 1; }
[ "$n" -eq 3 ] || { echo "validated $n plugin dirs, expected 3"; exit 1; }
46 changes: 46 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,51 @@
# Changelog

## Unreleased (next: 9.0.0)

### BREAKING

- **`deepgrade-guard` is retired.** The always-on safety plugin (force-push and
hard-reset guard, migration guard, DB deploy guard, change and test trackers,
session summary) is removed from the marketplace and the tree. Claude Code
permission rules cover every blocking behavior with no runtime dependency and
no second enforcement layer silently overriding a project's own `ask` rules;
the recommended `settings.json` baseline is in METHODOLOGY.md §6. Installed
copies keep working from the plugin cache but receive no further updates.
With it go `tests/run-hook-corpus.js`, `tests/fixtures/hook-corpus.json`, the
guard rows of `tests/layer2-ledger-rows.js`, and the `$TMPDIR/dg-*` session
marker bus. Three plugins remain in lockstep.

### Added

- **Document skeletons in every documentation template.** `adr`, `brd`, `prd`,
and `readme` templates now carry a fill-in document body; the PRD template
previously pointed at a "standard template" that did not exist. The PRD
skeleton has P0/P1/P2 requirements with Given/When/Then acceptance criteria
and a leading/lagging success-metrics table.
- **`/deepgrade:documentation runbook`.** New `runbook-template.md`: prerequisites,
exact steps each with expected result and failure action, verification,
troubleshooting table, rollback trigger and steps, escalation, run history.
Plan-linked runbooks land in the plan folder and are referenced from
review.md; Stage 4 already gated on a reviewed runbook without defining one.
- **Spec requirements carry priority and acceptance criteria.** `templates/spec.md`
requirements are P0/P1/P2, trace to a line of intent.md, and have
Given/When/Then criteria including a negative case. New `## Success metrics`
section with numeric targets, windows, and measurement method.
- **Release checklist with numeric rollback triggers.** `templates/review.md` has
pre-deploy, deploy, post-deploy, and rollback sections; triggers are
thresholds over a window, and Stage 6 uses them to classify severity.
- **Incident status updates and blameless postmortems.** The troubleshoot
pre-flow emits a status update on a fixed cadence for SEV1/SEV2; Step 5
writes a postmortem beside the log whose action items feed the proposed
intent.

### Changed

- `GUIDE.md` and `README.md` for the planning plugin document the design gate
(canary classes, evidence-validator flags, the pass expression), the
six-stage artifact chain, the two gate tools as distinct from the hooks, and
every output location.

## 8.0.0 (2026-09-02)

### BREAKING
Expand Down
30 changes: 14 additions & 16 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,14 @@

## Repository Structure

This is a monorepo of four plugins with **lockstep versions** — every manifest
This is a monorepo of three plugins with **lockstep versions** — every manifest
carries the same version and `.github/release.sh` bumps them together.

```
.claude-plugin/marketplace.json # Four catalog entries, one shared ref+SHA pin
plugins/deepgrade/ # Planning core (9 commands, 2 agents, 3 skills, 3 hooks)
.claude-plugin/marketplace.json # Three catalog entries, one shared ref+SHA pin
plugins/deepgrade/ # Planning core (6 commands, 2 agents, 6 skills, 3 hooks)
plugins/deepgrade-readiness/ # Readiness scanners (2 commands, 10 agents, 1 skill)
plugins/deepgrade-audit/ # Audit team (5 commands, 10 agents, 3 skills)
plugins/deepgrade-guard/ # Safety hooks only (5 handlers, nothing else)
tests/ # One suite for the whole monorepo
```

Expand Down Expand Up @@ -84,13 +83,12 @@ and a test asserts they stay that way. Edit both or neither.

## Modifying Hooks

Hooks are declared per plugin — `plugins/deepgrade-guard/hooks/hooks.json` for
the safety rails (PreToolUse, PostToolUse, Stop) and
`plugins/deepgrade/hooks/hooks.json` for the plan-context handlers
(SessionStart, SubagentStop, PreCompact) — and implemented as one Node script
per handler under that plugin's `scripts/`. Requires Node.js 18+. The complete
TMPDIR marker bus (writers and readers) ships inside deepgrade-guard; do not
split it.
Hooks are declared in `plugins/deepgrade/hooks/hooks.json` — the plan-context
handlers (SessionStart, SubagentStop, PreCompact) — and implemented as one Node
script per handler under that plugin's `scripts/`. Requires Node.js 18+. The
safety rails (PreToolUse, PostToolUse, Stop) and their TMPDIR marker bus shipped
in `deepgrade-guard` until 9.0.0 and are retired; do not reintroduce a blocking
hook without the fail-closed rules below and a corpus of falsifying cases.

**Never add a `hooks` key back to `.claude-plugin/plugin.json`.** With both a
`hooks/` folder and a manifest `hooks` key present, Claude Code silently ignores
Expand All @@ -106,8 +104,8 @@ Each handler:
- denies with exit 2, asks with `permissionDecision: "ask"` at exit 0

When editing hooks:
- add the case to `tests/fixtures/hook-corpus.json` first; it is the acceptance
authority, and a change that fails a row fails regardless of how it is written
- add a falsifying case to `tests/layer2-ledger-rows.js` first; a change that
fails a row fails regardless of how it is written
- security guards must never fail open; informational hooks must never fail closed
- Stop hooks must use exit 0 (never exit 2, causes an infinite loop)
- every file in a plugin's `scripts/` must be referenced by that plugin's
Expand All @@ -116,8 +114,8 @@ When editing hooks:

## Versioning

Versions are **lockstep across all four plugins**: one release bumps every
manifest, the four catalog entries stay on a single tag+SHA, and
Versions are **lockstep across all three plugins**: one release bumps every
manifest, the three catalog entries stay on a single tag+SHA, and
`.github/release.sh` is the only supported way to cut a release. Follow
semantic versioning (MAJOR.MINOR.PATCH):
- PATCH: Bug fixes, hook improvements
Expand All @@ -138,4 +136,4 @@ Before submitting a PR:
directory plus the repo-wide sweeps
2. `claude plugin validate . --strict` and `claude plugin validate plugins/<plugin> --strict`
(schema only — it never reads agent, command, or skill frontmatter)
3. For hook changes, add the case to `tests/fixtures/hook-corpus.json` FIRST
3. For hook changes, add the falsifying case to `tests/layer2-ledger-rows.js` FIRST
Loading
Loading