feat: ground planning and review skills in consumer standards (V1 pilot)#291
Conversation
Interview contract for making development-workflow skills load consumer standards proactively (plan/build time) instead of colliding with them at review time. Locks: proactive-by-default (no mode fork), `standards` concern with three-layer resolution (user-global / team-tracked / personal overlay, team wins conflicts), progressive-disclosure index, and a two-consumer V1 pilot (planning:architect + review:quality-gate). Schema detail deferred to /design; step placement to /architect. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ding Five-phase plan approved after fresh-context plan review and devils-advocate stress-test: contract home at docs/conventions/standards/, hook-utils-shape sync machinery with frontmatter-bump enforcement, proactive grounding step in planning:architect, quality-gate criteria rewire extended to Step 1.3 at approval (DA-F1 Option A), setup bootstrap in both pilot plugins, and a canary-rule fixture matrix guarding against grounding theater. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Canonical convention home docs/conventions/standards/: contract README (index schema, layers, precedence inversion, resolution ladder, normative setup-and-migration), concern-file JSON schema, changelog, worked index example. PLAN Phase 1 marked DONE. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…e 2) Test-first sync script (sync/--check/--check-bump with frontmatter-semver and changelog-heading enforcement), byte-identical binding copies in the planning and review plugins, registry entry, and a standards-contract-sync CI job wired into the aggregate gate. PLAN Phase 2 marked DONE. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Architect Step 2 opens with a standards-grounding formulation input resolving the consumer index through the synced standards-contract binding; plan template and reviewer gain the grounding element and citation axis; setup gains the standards bootstrap concern with a scoped ignore-file prohibition; tripwire test + eval cases; planning 0.13.0. PLAN Phase 3 marked DONE. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ase 4) Criteria mode and Step 1 conventions routing now resolve through the synced standards-contract binding so all review modes inherit index-grounded conventions; new idempotent /review:setup standards bootstrap; tripwire test + eval cases; review 0.10.0. PLAN Phase 4 marked DONE. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Fourteen-row fixture exercise matrix PASS (canary anti-theater, setup idempotency, overlay precedence, directional version skew, pre-existing README gate, user-global layer); plugin-acceptance security review PASS; both plugins validate --strict. STOP-gate resolution: accepted-cost note for outside-cwd user-global reads added to the contract and resynced; architect grounding step now mandates the frontmatter version compare. PLAN Phase 5 marked DONE with the verification record. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
CI runs scripts/sync-standards-contract.sh directly; 100644 mode made the standards-contract-sync job fail with exit 126 on Linux runners. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 486b1370dc
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Claude finished @kyle-sexton's task in 4m 49s —— View job PR Review — feat: ground planning and review skills in consumer standards (V1 pilot)
SummaryWell-structured PR. The contract spec, sync machinery, tripwire tests, and CI wiring are coherent and follow the established A few items below worth attention before merge. Findings1.
|
--check-bump's changelog condition now requires a '## <version>' heading matching the bumped standards-contract frontmatter instead of a raw heading-count increase, and the test suite gains a compound-failure case asserting all three STALE conditions report in one run. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Claude-review findings triaged (evidence-checked against the diff):
🤖 Generated with Claude Code |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2a001971da
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…ctive-skills # Conflicts: # plugins/planning/.claude-plugin/plugin.json # plugins/planning/CHANGELOG.md
Review findings: the resolution ladder now names the personal-layer discovery step every rung performs (overlay glob + user-global read, applied per precedence), and a pre-existing standards-root .gitignore is consumer-owned — setup verifies the overlay line and surfaces a missing one without writing. Bindings resynced. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0d68c03f56
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Review findings: the bootstrap now runs the committed-root git check-ignore guard before writing the skeleton (topic-docs precedent), and the plan template's scale note grounds small plans with a brief citation instead of skipping — only trivial scale skips, matching the architect step, the eval, and the build/review-symmetry goal. Bindings resynced. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ctive-skills # Conflicts: # plugins/planning/.claude-plugin/plugin.json # plugins/planning/skills/setup/SKILL.md
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7cc5bc62b7
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Review finding: a File value containing a subdirectory was ambiguous between in-root and repo-relative external resolution. Rows now resolve in-root first, then from the resolution root; a both-exist collision is surfaced (skills best-effort the in-root file, setup validation flags it and offers a rename). Bindings resynced. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4f678595a5
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Review findings: setup's bootstrap now applies the git check-ignore guard to .claude/standards.yaml before persisting a relocation (an ignored concern file strands future clones on the default root), and --check-bump treats standards.schema.json as contract surface so a schema-only change requires the same version, changelog, and plugin bumps (12-scenario suite green). Bindings resynced. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
I'll analyze this and get back to you. |
|
Claude finished @kyle-sexton's task in 4m 52s —— View job PR Review — feat: ground planning and review skills in consumer standards (V1 pilot)
SummaryWell-constructed PR that successfully closes out all findings from the previous multi-round review. The iterative loop (claude-review → Codex → kyle-sexton → Codex → kyle-sexton — 9 rounds) converged on a solid result. All prior blocking findings are resolved; this pass found no new blocking issues. Verification of prior findings
New findings1. New-plugin + schema-only edge in
|
## Summary First slice of wave #318 (epic #313): the five doctrine-update findings from the fleet audit, fixed in the docs rather than the plugins. 1. **Kill-switch reconciliation** — verified already landed (playbook security review requires the per-hook userConfig boolean; the generalization mapping routes `HOOK_<OLD>_ENABLED` → userConfig). No edit; recorded here so the finding closes. 2. **Convention registry** gains the repository-standards row (`docs/conventions/standards/` landed with #291, never registered). 3. **Topic-docs contract** — the "`.claude/observability/` is the sole sanctioned generated surface under `.claude/`" claim now scopes to the contract itself; the platform's native subagent `memory: project|local` roots (`.claude/agent-memory[-local]/`) are Claude Code's to govern, not the contract's to forbid. 4. **planning 0.21.0** — `domain-driven-design` manifest dependency downgraded to presence-gated collaboration (design boundary: `dependencies` are for genuinely-broken-without; every planning skill works standalone). All five invocation sites gated with stated fallbacks. 5. **Seam-phrasing owner doc** — `docs/conventions/seam-phrasing/README.md` (gate + fallback + ownership framing); registry row flips from "Unowned". Remaining #318 slices: registry single-home pointer fixes (session-flow, code-tidying), the kindle-dedrm update-flow security restructure, the two mutation-on-bare-invocation fixes, and the naming-grammar rename matrix (breaking — prepared as explicit per-name decisions, not blanket-renamed). ## Verification markdownlint (docs + planning), `typos`, `validate-plugins.sh`, contract gate (33 setup skills): green locally. ## Related - Part of #318 - Part of #313 No linked issue: doctrine slice of #318 — the issue closes with the wave's final slice. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

No linked issue
Related
Development-workflow skills now load the consumer's standards proactively (plan time) instead of colliding with them reactively at review time. One shared, versioned standards concern contract — consumed by planning AND review — makes work get built to the criteria it will be reviewed against.
What's in here
docs/conventions/standards/— thin routing index with a normative presence test, three additive layers (user-global → team → personal overlays) under precedence inversion, a six-rung resolution ladder,.claude/standards.yamlconcern file + JSON schema, and a normative idempotent setup-and-migration procedure with DIRECTIONAL version-delta handling.scripts/sync-standards-contract.sh+ test-first suite): byte-identical binding copies in both pilot plugins, registered cross-plugin cluster, newstandards-contract-syncCI job (drift + frontmatter/changelog/manifest bump enforcement)./planning:plan):/planning:planStep 2 opens with a standards-grounding formulation input (selective section pulls, ambient-content rule, scale-gated depth, provenance naming, broken-row Boy Scout, mandatory version compare); plan template + reviewer carry the grounding surface;/planning:setupgains the standards bootstrap concern; tripwire test./review:setupbootstrap skill; tripwire test.Verification
14-row fixture matrix PASS (canary anti-theater probes both directions, setup idempotency run-twice-no-diff, overlay precedence, directional version skew, pre-existing-README confirmation gate, user-global layer incl. denied-read grace), plugin-acceptance security review PASS,
claude plugin validate --strictboth plugins. Full record in the PLAN below.Follow-ups filed: #288 (fleet-wave sync generalization), #289 (wave-2 rollout inventory), #290 (pre-existing headless quality-gate preflight bug).
Approved PLAN.md (verification record included; contract slice pruned before merge)
proactive-vs-reactive-skills
Brief
TLDR
Development-workflow skills load the consumer's standards proactively (at plan/build time) instead of colliding with them reactively at review time. One shared, concern-named standards index — consumed by planning AND review — makes skills build to the criteria they'll be reviewed against.
Goal
Eliminate the rework loop where
/architect-planned and/implement-built work violates consumer standards (code conventions, engineering philosophy, design-review criteria) that only surface during review. Proactive grounding becomes the DEFAULT behavior of lifecycle skills — no mode fork, no sibling skill variants — with cost governed by existing scale/blast-radius gates and progressive disclosure.V1 (locked): the
standardsconcern contract + a two-consumer pilot.docs/conventions/standards/— index schema, layers, precedence, resolution ladder.planning:architectgains a proactive standards-loading step (plan formulation grounds in the loaded criteria).review:quality-gatecriteriamode resolves criteria through the SAME index (build/review symmetry).Fleet rollout (implement, design, prototype, testing, …) follows in per-plugin waves after the pilot proves the contract.
Constraints
~/.claude/standards/→ team-trackeddocs/standards/→ personal gitignoreddocs/standards/*.local.md(setup ships the.gitignoreline). Team layer deliberately OUTSIDE.claude/(verified:.claude/writes are specially permission-guarded even under acceptEdits; reads are prompt-free anywhere in the working directory).reference/binding copy of the contract (topic-docs/hook-utils precedent); per-plugin idempotent bootstrap — first setup writes the index, later setups validate/offer reconfigure.--ungroundedescape hatch.Acceptance criteria
docs/conventions/standards/README.mdexists: index schema, three layers, precedence-inversion rule, resolution ladder, versioning — and both pilot plugins carry a synced binding copy.plugins/planning/skills/architect/SKILL.mdcarries the proactive standards step; a plan produced for a task touching surface X cites the standards sections loaded for X; grounding depth demonstrably scales with the plan-scale tier (trivial plan → no standards fetch beyond ambient context).plugins/review/skills/quality-gatecriteriamode resolves criteria through the same index when present (grep confirms the binding reference, exercise confirms the load).docs/standards/idempotently in a clean non-source repo via--plugin-dir(run twice → no diff on second run).grepfor absolute paths / org names in changed plugin files → zero hits);claude plugin validatepasses; both plugins version-bumped with changelog entries.Captured assumptions
.claude/writes sit on the protected-directory prompt list (both verified against the official permissions doc, 2026-07-17).standardsis the umbrella term (adopted conventions become standards — research-confirmed 2026-07-17); "guidance" rejected as advisory-only connotation.CLAUDE.md,.claude/rules) apply ambiently and are never re-fetched by the grounding step.Out-of-scope
melodic-software/standardsrepo itself ("am I doing the standards repo right") — separate effort, own session.Deferred questions
Plan
Fresh-docs verified this session (2026-07-17): skills frontmatter fields incl.
disable-model-invocation/user-invocable/argument-hint(https://code.claude.com/docs/en/skills);claude plugin validate <dir> --strict,--plugin-dirsession loading,${CLAUDE_PLUGIN_ROOT}/${CLAUDE_PLUGIN_DATA}, andpluginConfigsuser-settings-only storage (https://code.claude.com/docs/en/plugins-reference). Implementation phases MUST re-fetch the pages relevant to the files they touch (repo fresh-docs mandate) before editing.Build technique: committed work, integration risk → tracer bullet. The integration spine (contract + sync machinery, Phases 1–2) lands first and is verified end-to-end (canonical → synced copies → CI drift gate) before either consumer skill is rewired.
Phase 1: Contract home —
docs/conventions/standards/[DONE]Materialize
contract-spec.mdas the canonical convention, following the marketplace convention template (docs/conventions/topic-docs/precedent: README + CHANGELOG + schema + examples).docs/conventions/standards/README.mdstandards-contract: 1.0.0(self-describing version — see D2); index schema + columns; external-row validation duty; standards-file rules (SRP, pure prose); personal overlays; user-global layer;.claude/standards.yamlconcern file + resolution ladder;.claude/rulesdivision-of-content seam + pointer pattern; versioning; normative "Setup and migration" section (bootstrap procedure, idempotency, run-twice-no-diff, version-delta detection + guided migration, tolerant-reader rule) — single home for the procedure both plugins implement by reference. Stress-test additions (DA): presence test is normative — an index exists iff thestandards-contractfrontmatter key is present; a<standards_dir>/README.mdwithout it is pre-existing content = inference source only, and setup treats it as hand-authored, requiring explicit confirmation before any conversion (DA-F5). Resolution root = git top-level (concern file discovered there); indexFilepaths are forward-slash repo-relative (DA-F6). Version-delta detection is DIRECTIONAL: index newer than the reading plugin's bundled contract → best-effort read, NEVER offer migration (no downgrades), message "update the plugin" (DA-F3). Setup short-circuits without interview when a conforming index at the bundled version exists (DA-F11). Size guidance: SRP + soft per-file budget, recommend splitting oversized files; grounding reads matched files selectively — sections relevant to the task, not necessarily whole files (DA-F8). The "Resolution ladder" is a clearly-delimited section skills jump to (progressive disclosure within the binding); consuming SKILL.md files carry pointer language only, never a restated ladder (DA-F9). Authoring constraint: no relative markdown links in the README — the synced copies would 404 in the offline lychee lane; backtick file names instead (DA-F12)docs/conventions/standards/standards.schema.json.claude/standards.yaml(standards_dirstring, all keys optional) —topic-docs.schema.json/ecosystem.schema.jsonprecedentdocs/conventions/standards/CHANGELOG.md1.0.0initial entrydocs/conventions/standards/examples/worked-index.md.local.mdoverlay note)Content authority:
docs/topics/proactive-vs-reactive-skills/design/contract-spec.md+ Brief constraints. Additive contract text beyond the spec is limited to D2 (version frontmatter) plus the enumerated DA additions above — each closes a stress-test gap without contradicting a RESOLVED design thread.Sanity Check:
grep -c "standards-contract: 1.0.0" docs/conventions/standards/README.mdreturns ≥1 (frontmatter);grep -c "^## 1.0.0" docs/conventions/standards/CHANGELOG.md≥ 1jq -e . docs/conventions/standards/standards.schema.jsonexit 0grep -cE "^## " docs/conventions/standards/README.md≥ 6 (index schema, files, overlays, user-global, concern file, rules seam, versioning/setup present)Phase 2: Sync machinery + binding copies [DONE]
Byte-identical binding copies delivered by a dedicated sync script (hook-utils shape — see D1), registered as a cross-plugin cluster.
Pre-flight (first item):
ls plugins/*/reference/andgrep -rn "standards-contract" plugins/ scripts/ .github/— confirm no existingstandards-contract.mdcollision and no consumer already parsing that name. Verified this session: none exist; review plugin has noskills/setup/.scripts/sync-standards-contract.shsync-hook-utils.shshape:sync(copydocs/conventions/standards/README.mdinto every plugin carryingreference/standards-contract.md),--check(byte-compare),--check-bump <ref>(contract changed but a carrying plugin's manifest version didn't → fail). Beyond the hook-utils shape (DA-F4):--check-bumpadditionally fails when canonical content changed vs base but thestandards-contractfrontmatter semver did NOT change orCHANGELOG.mdgained no new##heading — the frontmatter version is what T6 migration detection reads; without this, content drifts under a frozen version forever. Opt-in by file presence — fleet waves add plugins without script editsscripts/sync-standards-contract.test.sh--check/--check-bumpbehavior incl. the frontmatter-bump + changelog-heading failure cases, against temp fixtures (check-cross-plugin-source-drift.test.shprecedent)plugins/planning/reference/standards-contract.mdplugins/review/reference/standards-contract.mdscripts/cross-plugin-source-registry.txtreference/standards-contract.mdcluster, comment naming the dedicated check (required — an unregistered identical cluster failscheck-cross-plugin-source-drift.sh --check).github/workflows/ci.ymlstandards-contract-syncjob mirroringhook-utils-sync(--check, test run,--check-bump origin/$BASE_REF); add to the final aggregate gate'sneedslistSanity Check:
scripts/sync-standards-contract.sh --checkexit 0;bash scripts/sync-standards-contract.test.shexit 0cmp docs/conventions/standards/README.md plugins/planning/reference/standards-contract.mdexit 0 (same for review copy)scripts/check-cross-plugin-source-drift.sh --checkexit 0 (cluster registered)grep -c "standards-contract-sync" .github/workflows/ci.yml≥ 2 (job + needs entry)Phase 3: planning plugin — proactive grounding + setup extension [DONE]
Review: code-design
Fresh-docs re-fetch (skills page) before edits.
plugins/planning/skills/architect/SKILL.md${CLAUDE_PLUGIN_ROOT}/reference/standards-contract.md]; match task surfaces againstApplies whenclues; pull ONLY matched files not already ambient (fired rules / CLAUDE.md never re-pulled; post-compaction context counts as NOT-ambient — re-resolve per task, so a second task in the same session grounds its own surfaces); depth rides the existing Step 2 plan-scale table (trivial → no fetch beyond ambient); personal-layer provenance named when a.local.mdrule shapes the plan; broken external row → surface + offer fix (Boy Scout, never silent); older-index → best-effort + "index at vX, contract at vY — re-run setup"; absent index → infer from not-auto-loaded usual suspects, OFFER to persist, ask once, else safe default — zero unprompted writes. Reads matched files SELECTIVELY (task-relevant sections, DA-F8); the ladder itself is NOT restated in SKILL.md — pointer to the binding's delimited "Resolution ladder" section only (DA-F9)plugins/planning/tests/standards-binding.test.sh(location per repoplugins/**/*.test.shprecedent)scripts/run-plugin-tests.shplugins/planning/skills/architect/context/plan-template.mdplugins/planning/skills/architect/context/plan-reviewer.mdplugins/planning/skills/setup/SKILL.md.claude/standards.yaml→ index → inference), interview, bootstrapdocs/standards/README.mdskeleton + overlay ignore line, validate every index row path, version-delta detection + guided migration, optional pointer-rule generation (interactive only). Frontmatterdescriptionupdated to cover both concerns. Explicit reconciliation work item (reviewer F1): the skill currently prohibits editing ignore files twice (Task step 4; What-this-skill-does-NOT-do). The overlay line ships as a setup-created<standards_dir>/.gitignorecontaining*.local.md— never a consumer root-.gitignoreedit — and both prohibition passages are amended to scope: setup never edits an ignore file it did not create; the standards root's own bootstrap-shipped.gitignoreis setup-owned. Contract README (Phase 1) words the mechanism identicallyplugins/planning/skills/architect/evals/evals.jsonplugins/planning/skills/setup/evals/evals.jsonplugins/planning/.claude-plugin/plugin.json0.12.0→0.13.0plugins/planning/CHANGELOG.md0.13.0entrySanity Check:
grep -c "standards-contract.md" plugins/planning/skills/architect/SKILL.md≥ 1 and same grep ≥ 1 inplugins/planning/skills/setup/SKILL.mdgrep -c "Ground in consumer standards" plugins/planning/skills/architect/SKILL.md= 1, located inside Step 2 (Read assertion)grep -c "Standards grounding" plugins/planning/skills/architect/context/plan-template.md≥ 1jq -r .version plugins/planning/.claude-plugin/plugin.json=0.13.0; CHANGELOG head entry matchesgrep -rniE "melodic-software|kyle" plugins/planning/skills/architect/SKILL.md plugins/planning/skills/setup/SKILL.mdreturns 0 hits (repo-agnostic)Phase 4: review plugin — criteria rewire + new setup skill [DONE]
Review: code-design
Fresh-docs re-fetch (skills page) before edits.
plugins/review/skills/quality-gate/context/criteria.md.claude/standards.yaml→docs/standards/README.md→ declared/inferred location with offer-to-persist → ask once); existing REVIEW.md / docs-directory discovery becomes an inference source inside the ladder, not the primary; baseline (severity.md+ agent checklists) stays the final fallback; tolerant-reader + broken-row Boy Scout lines addedplugins/review/skills/quality-gate/SKILL.mdreference/standards-contract.md. DA-F1 resolution (user-approved 2026-07-17): Step 1 item 3 ("What conventions apply?") rewired through the same index resolution — one sentence, so ALL review modes (self/code/security/pr) inherit index-grounded conventions, not just criteria modeplugins/review/skills/setup/SKILL.mdplanning:setupfrontmatter shape (user-invocable: true,disable-model-invocation: true): standards bootstrap implementing the binding's normative Setup-and-migration section (same semantics as planning's — single home in the contract, no duplicated procedure prose)plugins/review/skills/setup/evals/evals.jsonplugins/review/skills/quality-gate/evals/evals.jsonplugins/review/tests/standards-binding.test.sh(location per repoplugins/**/*.test.shprecedent)plugins/review/.claude-plugin/plugin.json0.9.0→0.10.0plugins/review/CHANGELOG.md0.10.0entrySanity Check:
grep -c "standards-contract.md" plugins/review/skills/quality-gate/context/criteria.md≥ 1;test -f plugins/review/skills/setup/SKILL.mdgrep -c "disable-model-invocation: true" plugins/review/skills/setup/SKILL.md= 1jq -r .version plugins/review/.claude-plugin/plugin.json=0.10.0; CHANGELOG head entry matchesgrep -rniE "melodic-software|kyle" plugins/review/skills/returns 0 hits in changed filesPhase 5: Verification, exercise, and gates [DONE]
Review: security
Runbook results distill into this PLAN's verification notes; raw transcripts stay in
.work/proactive-vs-reactive-skills/.claude plugin validate plugins/planning --strictandclaude plugin validate plugins/review --strictexit 0; full CI lanes green (incl. newstandards-contract-sync,cross-plugin-source-drift, link-check).claude --plugin-dir—git status --porcelainempty after a declined offer)git diff --statempty on the second run (both plugins' setup).local.mdthat ADDS one rule and directly CONFLICTS on another → added rule applied with layer provenance named; conflicting rule loses to team (precedence inversion probe)~/.claude/standards/populated (temp HOME) → layer discovered and applied; empirically record whether the outside-cwd Read prompts — the Brief's verified prompt-free fact covers the working directory only. If it prompts, STOP at the user-approval gate: accepted-cost note in the contract README vs design change is the user's calldocs/standards/README.mdlacking thestandards-contractkey → treated as inference source, setup requires explicit confirmation before conversion, never overwrites${CLAUDE_PLUGIN_ROOT}paths).Sanity Check:
claude plugin validate --strictruns exit 0grep -rn "docs/standards" plugins/planning plugins/review --include="*.md" -lhits only files that present the path as the documented default, never a hardcoded absolute/org pathgit diff --name-only origin/main -- plugins/ | xargs grep -lniE "melodic-software|kyle|D:\\\\|/Users/|C:\\\\"returns 0 hits (sweeps ALL changed plugin files incl. evals and context files — reviewer F6)Phase 5 verification record (2026-07-17)
Raw transcripts:
.work/proactive-vs-reactive-skills/fixtures/(memory tier). Probes ran headless(
claude -p --plugin-dir … --setting-sources project --add-dir <worktree> --permission-mode acceptEdits)in clean temp non-source git repos.
claude plugin validate --strictexit 0 both plugins; sync--check0; drift check 0; tripwires 9/9 + 8/8; shellcheck/actionlint/markdownlint cleancsharp.mdsections; canary honored (direct DbContext, repository pattern refused); violating untracked file flaggedcsharp.md(Step 1.3 rewire — all modes inherit)docs/CONTRIBUTING.md; assumption surfaced; zero standards writesarchitecturerow surfaced + fix offered, never silent; plan proceeds non-blocked.gitignore; run 2 short-circuits — run twice, no diff/review:setup${CLAUDE_PLUGIN_ROOT}-only references, no egress; verdict PASS, zero blocking findingsSTOP gate (reviewer F2) FIRED and resolved: outside-cwd reads are permission-gated (empirical:
headless denials on plugin-root and
~/.claude/standards/paths). User accepted the cost(2026-07-17); contract README's User-global layer section now carries the accepted-cost note
(denied read = layer contributes nothing, never an error) — synced to both bindings.
Probe-environment notes (not defects): headless slash invocation of quality-gate dies silently on
its
gh pr listpreflight permission denial (pre-existing plugin behavior; prose invocation usedfor p02); plugin-root context files are unreadable to headless sessions without
--add-dir.Blast radius
MEDIUM-HIGH. Triggers matched: new convention + enforcement mechanism (CI drift job), infrastructure change (ci.yml), architecture decision spanning multiple plugins (new cross-plugin contract). ~20 files, two plugin version bumps, one new CI job. Reversible via git revert pre-merge; convention becomes load-bearing only after consumers adopt. Formal stress-test (Step 4
/devils-advocate) REQUIRED.Stress-test summary
Two fresh-context passes, both verified against actual repo files before application:
<standards_dir>/.gitignore+ scoped prohibition), 2 IMPORTANT (user-global outside-cwd read-prompt unverified → Phase 5 empirical probe + approval gate; overlay/user-global layers unexercised → fixture rows added), 5 SUGGESTIONS (precedent citation corrected, changelog grep fixed, concrete diff-driven grep sweep, D4 basis restated with named residual, compaction/multi-task ambient guard added). All folded in.--check-bump. 5 MEDIUM folded in: normative index-presence test, resolution root + forward-slash paths, tripwire*.test.shmarkers (evals are NOT CI-run — named gap), size guidance + selective section reads, delimited-ladder pointer discipline. 2 LOW folded in: setup short-circuit when conformant, no relative links in the canonical README. 1 accepted cost: lockstep manifest bumps at fleet scale (D1, generalization deferred with trigger).No research-iterate round needed: findings were contract-text and probe-design gaps, not contested external claims; zero external-evidence disputes survived verification.
Execution shape
Sequential recommended: 1 → 2 → 3 → 4 → 5.
Phases 3 and 4 are file-disjoint (different plugins) and parallel-capable (~200 LOC each — above the material threshold), but both are judgment-heavy skill-prose edits that depend on the full design context; parallel worker briefs would have to duplicate that context, and drift between the two consumers is precisely the failure mode this topic exists to remove. Cost note: sequential forgoes ~1 phase of wall-clock saving; 2 parallel agents would roughly double token spend on the heaviest phases. Fallback unaffected (already sequential).
Decisions made (gate-passed)
[EXEC-SHAPE]Sync = dedicated script (hook-utils shape:sync/--check/--check-bump, opt-in by file presence) + registry entry + CI job — not avalidate-plugin-contracts.mjsextensionreference/topic-docs.mdcopies are per-plugin tailored bindings with no sync (Brief's "topic-docs precedent" citation corrected, reviewer F4).sync-hook-utils.shscales by presence-glob (fleet waves add no script edits) and--check-bumpmechanically enforces the version-bump acceptance criterion; the mjslifecycleProtocolCopiesalternative hardcodes the plugin list and has no bump check. Named cost accepted (DA-F10): every canonical edit forces manifest+changelog bumps in ALL carrying plugins — fine at 2, friction at fleet scale. Deferred (trigger: first fleet wave): generalize the two clone-shaped sync scripts into one src/glob-parameterized script and revisit bump tooling[EXEC-SHAPE]Contract README carriesstandards-contract: <semver>frontmatter[EXEC-SHAPE]Grounding step placed at top of architect Step 2, not Step 1criteria.md+ Shared-inputs line + Step 1 item 3criteria.md(grounding would materialize only on explicit criteria invocation). User approved the one-sentence Step 1.3 extension (DA-F1 Option A, 2026-07-17) so all modes inherit[EXEC-SHAPE]Bootstrap procedure lives normatively in the contract README; both setup skills implement by binding reference[EXEC-SHAPE]Binding filenamereference/standards-contract.mdreference/standards.mdwould collide semantically with consumer standards files; artifact-protocol precedent names the copy after the contract content. Cheap to rename before merge — flag if you preferstandards.md[EXEC-SHAPE]Version bumps minor: planning → 0.13.0, review → 0.10.0[EXEC-SHAPE]Test seam = script test (test-first) + registered CI drift job + eval cases + fixture-repo exercises; no unit seams inside skill prose*.test.sh+ evals.json are the repo's two existing test surfaces (read this session); prose changes get exercise-based verification with a documented test-after carve-outOpen questions
Handoff to implementation
User-approval gates
contract-spec.mdcontent discovered mid-write (beyond D2) — stop and surface.Execution shape ([EXEC-SHAPE] tagged)
Sequential 1→5, main-session (table above). Phase 2 script work is test-first. PLAN.md status tags advance per phase; PLAN edits main-session only.
Mechanical work
🤖 Generated with Claude Code