skills: resolve cross-skill drift in trivial carve-out and parse-gate

Two consistency fixes across the skill suite, both found by a
prose-audit agent swarm.

Trivial-mechanical-edit carve-out: brainstorm and planner each
invented their own bound (≤30 LOC, single file) that contradicts
the canonical definition in the project's CLAUDE.md (which allows
a rename across N files and sets no LOC ceiling) and disagreed
with implement. Both now reference that carve-out instead of
restating a divergent shape.

Parse-block gate: brainstorm Step 7 and planner Step 5 spelled out
the parser-invocation protocol near-verbatim. Both now defer to
docs/profile-schema.md, which owns the protocol, and keep only
their skill-specific parts (target artefacts, failure semantics,
where the parse-trace goes) — matching the single-sourcing the
carrier contracts already use.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-31 13:21:25 +02:00
parent 7e9e67cc5c
commit 586298ff31
2 changed files with 27 additions and 39 deletions
+10 -17
View File
@@ -32,8 +32,8 @@ Triggers:
- A bug-fix iteration (use `debug` directly).
- A tidy iteration (use `audit` directly).
- A trivial mechanical edit (≤1 file, ≤30 LOC, no design
judgement).
- A trivial mechanical edit (per the project's CLAUDE.md
"trivial mechanical edits" carve-out).
**Skipping is not permitted** for:
@@ -242,24 +242,17 @@ Inline checklist (not a subagent dispatch):
change (plus the worked user-facing example for a surface
cycle)? A load-bearing change described only in prose is
a self-review failure to fix, exactly like a placeholder.
6. **Parse-every-block gate.** If the project profile declares
`spec_validation.parsers`, extract every fenced code block
from the spec. For each block whose fence label has a
`parsers` entry: write the block to a temp file with the
entry's `ext`, run the entry's `cmd` with `{file}`
substituted, and require exit 0. A non-zero exit is a
6. **Parse-every-block gate.** Extract every fenced code block
from the spec and run it through the `spec_validation` gate
defined in `docs/profile-schema.md` (which owns the
parser-invocation protocol, the noted no-parser skip, the
malformed-entry failure, and the no-op when the profile
declares no `spec_validation`). A parse failure here is a
self-review failure — the spec inlines code that does not
parse against the live tool — fix the spec before proceeding;
do not pass the unparsed bytes downstream. Paste the
parse-trace (the Run block and its output) into the
brainstorm chat: a visible trace is what attests the gate
fired, and its absence means the gate was skipped. A block
whose fence label has no `parsers` entry is skipped and the
skip is noted ("no parser for fence label X"); never a silent
pass. A malformed entry (`cmd` without `{file}`, or `ext` /
`cmd` missing) is a profile error to surface, not a skip. If
the profile declares no `spec_validation`, this check is a
documented no-op.
parse-trace into the brainstorm chat: a visible trace attests
the gate fired; its absence means it was skipped.
Fix issues inline. No need to re-review — fix and commit.
+17 -22
View File
@@ -36,8 +36,8 @@ May be skipped when:
- The work is a bug fix where the RED test from `debug` IS
the plan (handoff goes straight to `implement` mini-mode).
- The work is a trivial mechanical edit (one file, ≤30 LOC,
no design judgement).
- The work is a trivial mechanical edit (per the project's
CLAUDE.md "trivial mechanical edits" carve-out).
**Never skipped** for a standard iteration within an active
cycle. "I know the cycle, plan from memory" is exactly the
@@ -221,26 +221,21 @@ Before handing the plan off, run this checklist inline:
so "nothing ran" cannot masquerade as "nothing
regressed". This is a recurring defect family — scrub
every Run step whose assertion lives in a filter string.
9. **Parse-the-bytes-you-inline gate.** If the project profile
declares `spec_validation.parsers`, every verbatim code body
the plan inlines into a task step whose fence label has a
`parsers` entry must be parsed clean against the live tool
before hand-off. For each such block: write it to a temp file
with the entry's `ext`, run the entry's `cmd` with `{file}`
substituted, require exit 0. A non-zero exit is a plan failure
— the plan would hand the implementer bytes that do not parse,
the last defensive line before dispatch — fix the plan, do not
hand off. The parse-trace goes into the planner's self-review
activity (the session) as the attestation the gate fired. The
target is the surface-language snippets the plan lifts verbatim
(example programs, fixtures); the project's source-language
test / implementation bodies are NOT the target — the
`implement` compile gate catches those. A block whose fence
label has no entry is skipped and the skip noted ("no parser
for fence label X"); never a silent pass. A malformed entry
(`cmd` without `{file}`, or `ext` / `cmd` missing) is a profile
error to surface, not a skip. If the profile declares no
`spec_validation`, this check is a documented no-op.
9. **Parse-the-bytes-you-inline gate.** Every verbatim code body
the plan inlines into a task step must be run through the
`spec_validation` gate defined in `docs/profile-schema.md`
(which owns the parser-invocation protocol, the noted
no-parser skip, the malformed-entry failure, and the no-op
when the profile declares no `spec_validation`) before
hand-off. The target is the surface-language snippets the plan
lifts verbatim (example programs, fixtures); the project's
source-language test / implementation bodies are NOT the
target — the `implement` compile gate catches those. A parse
failure is a plan failure — the plan would hand the
implementer bytes that do not parse, the last defensive line
before dispatch — fix the plan, do not hand off. The
parse-trace goes into the planner's self-review activity (the
session) as the attestation the gate fired.
Fix issues inline.