W7c conversion of the sentence/caps pins in test/gen-skill-docs.test.ts
(t01 F2-F9, F18, F19; t08 F12; t10 F4; t02 #5 duplicate STOP literal).
t01 F1 ('Every commit must map to at least one bullet point') was already gone
on the base. Pins (grep -cE 'toContain|toMatch|indexOf|includes') 1446 -> 1360;
tests 457 -> 457. Untouched: the FRESH/STALE freshness check, the routing
soft-policy negative, skill-start/end script pins, the SESSION_KIND spawned
line, and the old-wording negative pins (delete-then-append, 0D/0F, gate
"if applicable"). Machine markers stay byte-exact: NO UNRESOLVED DECISIONS,
`**UNRESOLVED DECISIONS:**`, `Approval readiness: PASS`, `D<N> — <ROW-ID>: ...`,
`## EXIT PLAN MODE GATE (BLOCKING)` anchors, `**Gate outcome: Blocked**`, helper
commands/flags (gstack-office-hours-review prepare/check/finalize --design,
--out-dir, --report, --unreviewed), helper stop reasons, analytics commands.
Consent, stop, approval, decision-cycle and navigation lines (incl. the Eng
W7c-gate lines at the old 2362-2370) are kept as short case-insensitive checks.
Removed assertion groups (invariant -> remaining protection):
- qa-only 'Never fix bugs' + 'NEVER fix anything' (t01 F8): report-only skill
-> kept free: /never fix/i in Additional Rules + frontmatter no Edit/Glob/Grep.
- qa 'WTF' token (t08 F12): fix-loop self-check -> kept free: /every 5 fixes/i.
- TEST_COVERAGE_AUDIT sharedPhrases sentences and the three Test-step sentences
(t01 F4): read source before tracing/diagramming in plan and ship -> kept
free: order 'concrete source and test files' < Trace data flow < Diagram the
execution < Quality scoring rubric in both, star/GAP markers, the plan/diff
mode split, the Test review subheading structure test; gate judges
'plan-eng-review/SKILL.md sections', 'ship/SKILL.md workflow'.
- 'REGRESSION RULE' / 'IRON RULE' labels (t01 F4): regression coverage is
required -> kept free: REGRESSION RULE heading, /without regression coverage,
that coverage is a critical requirement/i (plan), /regression test is written
immediately/i (ship), plus the existing regression-contract tests.
- '**STOP for each pending decision.**' (t01 F7, retired) -> kept free: 'Wait
for its answer before applying that remedy' (control C1).
- F19 rule sentences: step numbers dropped; kept free /prevent duplicate bumps,
pushes and PRs, never verification/i, /native result never supplies outside
coverage/i, /required-probe gate, never silently waive/i, /never offer a
conversion/i, /actual counts, never estimates/i (deduped 2 -> 1).
- SPEC_REVIEW_LOOP (t01 F3, about 74 sentence pins):
- office-hours dispatch sentences (Before EACH dispatch, parent Read does not
deliver, string unchanged) -> kept free: prepare --design/--out-dir,
order mktemp < prepare < round-N.prompt.md < `dispatch`, /all preceding valid
round files in order/i, /read the entire prepared prompt/i.
- reviewer prompt sentences -> kept free: document/verdict path and schema
wiring, mode sections ('The Assignment', 'What I noticed...'), dimension
order, short checks for coaching protection, no invented customer answers,
minor findings included, identical JSON, classify every prior finding,
open questions vs committed behavior. Dropped: 'Could an engineer implement
this...' ban (positive design-and-coaching check carries it), absence-is-not-
confirmation, unsupported-claims and labeling sentences -> gate E2E
office-hours-spec-review; prior-status validation in office-hours-review.test.ts.
- convergence evidence sentences, 'Recording concerns does not mark them
fixed', Disposition, observation/attempt counting, 'unavailable score is
null', 'missing or invalid verdict is ... never PASS', 'Preserve the failed
output' -> office-hours-review.test.ts (convergence, finalize, invalid
artifact vs --unreviewed, null quality_score) + gate E2E
office-hours-spec-review; kept free: helper stop-reason order and round 3,
/before fixing any findings or dispatching again/i, /on a stop, do not fix
again or re-dispatch/i, /do not edit that generated section/i, finalize before
/existing user approval/i, --unreviewed wiring, /do not fabricate JSON/i,
/not an approval gate/i.
- CEO spec-review sentences (Read Agent's tool definition, omit field, consume
completed review, Keep both consistent, duplicated 'both complete labeled
texts'/'all five dimensions'/'Preserve the failure'/'citing the owning
input'/'## Reviewer Concerns', 'Read these documents' ban, strategy-only and
narrow-decision sentences) -> CEO is periodic-only, so kept free: one short
check per invariant (wait tool, no-wait resume, no advance while waiting,
three launches, stop after third, stop the loop, missing score, null grade,
SCORE 1-10, not persisted, mkdir/append stop, save-failure stop, ITERATIONS,
FOUND/FIXED/REMAINING order, both inputs in full, partial-input refusal,
summary-is-not-the-plan, 1-10 score, PASS rule, cite input) plus the
existing order/count/command checks.
- Design approval reconciliation (t01 F2, about 79 pins):
- Pass 5 sentences and 'AskUserQuestion once per issue. Do NOT batch.
Recommend + WHY.' -> kept free: /stop\W+AskUserQuestion once per issue/i
located after four short reuse/new-evidence/first-decision checks; batching ->
auq-format-always-loaded.test.ts PER_SKILL_RULES ('One issue = one
AskUserQuestion call').
- duplicate 'Never group distinct issues.' pins (2 -> 1) and the rest of the
Design gate 0 sentences -> kept free: 0 < 1 order, short checks per
approval line, refresh < Read-back gate < rerun order; gate judge
'plan-design-review/SKILL.md passes'.
- CEO readiness/gate/0D sentences -> kept free: one short check per approval
line, readiness order, `Approval readiness: PASS`, gate order Read-only <
Verify readiness < 1. Read, route order, /stop for the actual answer/i in
step 4, `D<N> — <ROW-ID>` header, row fields; admin-route sentences ->
ceo-workflow-clarity.test.ts kept checks. Dropped: 'No report or completion
log is needed' (order check carries it), 'Save or present the updated plan',
'checked row IDs...' (marker kept), strategy-only/narrow-decision
sentences (default kept), cross-model/integration sentences reduced to
external-only and native-fallback checks.
- Eng readiness/procedure sentences -> kept free: short approval checks,
gate numbering/order, AUQ call < /stop until the actual answer arrives/i <
Record the answer, recovery order; 'separate it and rebuild this
comparison' -> auq-format-always-loaded.test.ts PER_SKILL_RULES.
- Exit gate 'contract violation' sentence (t01 F9, design/devex/codex) ->
kept free: heading anchor + /do not call ExitPlanMode/i inside the gate.
- Unresolved-decisions gate (t01 F5): '(MANDATORY', 'Never omit'/'never
omitted', 'FINAL non-whitespace line is the unresolved-decisions', 'FAILS the
gate', 'DROP the current skill' -> kept free: NO UNRESOLVED DECISIONS,
/final\s+non-whitespace\s+line/i, `**UNRESOLVED DECISIONS:**`, /missing\s+status
[^.]*fails/i in every gate skill and the resolver, /avoids double-counting/i,
the old soft-wording negative pin.
- delete-then-append 'never mid-file' / 'Do NOT replace the section in place'
(t01 F6) -> kept free: 'delete-then-append flow' + /append the new report at
EOF/i; old-wording negatives kept.
- design-html '**Never include by default (AI slop blacklist):**' (t01 F18) ->
kept free: /AI slop blacklist/i, catalog id comment, lib/design-catalog.ts.
- CODEX_BOUNDARY 'Do NOT read or execute any' casing (t10 F4) -> kept free:
/do not read or execute any/i in every codex-calling skill.
- CEO 0D order anchor '**STOP for the actual answer...**' (one of the 8) ->
kept free: /stop for the actual answer/i at the same position.
Mutation pass (scratch worktree, generated SKILL.md/sections plus
spec-review.ts and lib/office-hours-review.ts; the freshness test is excluded
with -t because any mutation makes it STALE): 43/43 as expected. 25 kept-step,
marker, safety, numeric and retirement-control mutations go red; 18 rewordings
of dropped sentences and lowered-register STOP/NEVER/FAILS lines stay green.
Log: .context/mutation-gen-skill-docs.md.
Runtime (Bun 1.4.0, wall, 3 runs): before 4.42/4.49/4.70s (median 4.49s),
after 4.42/4.53/4.63s (median 4.53s).