Skip to content

test(conventions): templated-fence ratchet — check 13 lands D4 (7c)#501

Merged
leeovery merged 3 commits into
mainfrom
feat/render-ratchet-lint
Jul 22, 2026
Merged

test(conventions): templated-fence ratchet — check 13 lands D4 (7c)#501
leeovery merged 3 commits into
mainfrom
feat/render-ratchet-lint

Conversation

@leeovery

@leeovery leeovery commented Jul 22, 2026

Copy link
Copy Markdown
Owner

Stage 7c — the closing PR of the render-surfaces stack (design log: #489; base: #500). D3 and D4 decided and landed.

D4 — the ratchet lint (check 13)

"A templated menu/display fence in prose is a violation" — now mechanical. The census scanner (rendering-instruction line → following fence; markers/signposts excluded as chrome; templated = placeholder syntax or @if/@foreach) counts per file and compares against RATCHET_PINS, the 174 remaining sites across 81 files. Drift fails both ways:

  • count above pin → "render new output from the engine — a genuinely judgment-only site is pinned deliberately, with the PR saying why"
  • count below pin → "a site was converted; shrink its pin (the ratchet only tightens)"
  • pin for a deleted file → prune

So no new templated fence can land silently, every conversion shows up as a shrinking diff, and the pin map always mirrors reality. Zero-false-positive doctrine holds: counts, not line numbers, so unrelated edits never trip it.

D3 — static menus stay prose

Decided (a): the 83 static menus (conclude gates, y/n confirms, mode choices) have none of the failure class the programme kills — no placeholder to misfill, no state to drift from — and their grammar is already under checks 3–5. Converting them would be ~30 catalogue entries of fixed text: surfaces earned by nothing.

Test plan

  • Corpus clean at the 174-site pin map (i.e., the lint passes on the stack as it stands).
  • Negative fixtures: unpinned templated menu caught; pinned site sanctioned; stale over-pin caught with the shrink message; deleted-file pin caught; static menu, templated marker, and templated signpost all correctly out of scope.
  • npm test — 1528/1528 (lint suite 27/27). Typecheck clean.

🤖 Generated with Claude Code

Stack

  1. feat(engine): render surface catalogue — resume-gate and task-list pilots #490
  2. feat(engine): finding + findings-summary surfaces — review-findings loop unified #491
  3. feat(engine): task-gate surfaces — proposed-task, tasks-overview, author-task-gate, phase-tree #492
  4. feat(engine): selection projection + bridge continuation surfaces #493
  5. feat(engine): transaction confirmation sections — lifecycle verbs carry their own chrome #496
  6. feat(engine): entry-gate + phase-note — entry validation derives engine-side #497
  7. feat(engine): the fence is the frame — boxedFrame retired (D8) #498
  8. feat(engine): topic complete + discovery-session close fold their kb warnings (7a) #499
  9. feat(engine): resume-gate variants + entry-gate --own + phase-completed --paths (7b) #500
  10. test(conventions): templated-fence ratchet — check 13 lands D4 (7c) #501 👈 current

@leeovery
leeovery force-pushed the feat/render-surface-swaps branch from 58cf8d1 to 1b55dcf Compare July 22, 2026 14:25
@leeovery
leeovery force-pushed the feat/render-ratchet-lint branch from 0a82666 to 5ab7812 Compare July 22, 2026 14:25
@leeovery
leeovery force-pushed the feat/render-surface-swaps branch from 1b55dcf to 468a2b4 Compare July 22, 2026 14:25
@leeovery
leeovery force-pushed the feat/render-ratchet-lint branch from 5ab7812 to 38e858f Compare July 22, 2026 14:25
@leeovery
leeovery force-pushed the feat/render-surface-swaps branch from 468a2b4 to afb26b6 Compare July 22, 2026 14:26
@leeovery
leeovery force-pushed the feat/render-ratchet-lint branch from 38e858f to f93852c Compare July 22, 2026 14:26
@leeovery
leeovery force-pushed the feat/render-surface-swaps branch from afb26b6 to ac7f70a Compare July 22, 2026 14:26
@leeovery
leeovery force-pushed the feat/render-ratchet-lint branch from f93852c to be4e738 Compare July 22, 2026 14:26
@leeovery
leeovery force-pushed the feat/render-surface-swaps branch from ac7f70a to 0fe7d67 Compare July 22, 2026 14:26
@leeovery
leeovery force-pushed the feat/render-ratchet-lint branch from be4e738 to b85c1a2 Compare July 22, 2026 14:27
@leeovery
leeovery force-pushed the feat/render-surface-swaps branch from 0fe7d67 to e95aa4c Compare July 22, 2026 14:27
@leeovery
leeovery force-pushed the feat/render-ratchet-lint branch from b85c1a2 to d5c6c96 Compare July 22, 2026 14:27
@leeovery
leeovery force-pushed the feat/render-surface-swaps branch from e95aa4c to 4bb21dd Compare July 22, 2026 14:27
@leeovery
leeovery force-pushed the feat/render-ratchet-lint branch from d5c6c96 to 6126b59 Compare July 22, 2026 14:27
@leeovery
leeovery force-pushed the feat/render-surface-swaps branch from 4bb21dd to 57c2603 Compare July 22, 2026 14:27
@leeovery
leeovery force-pushed the feat/render-ratchet-lint branch from 6126b59 to 9cc19df Compare July 22, 2026 14:27
@leeovery
leeovery changed the base branch from feat/render-surface-swaps to main July 22, 2026 14:28
@leeovery
leeovery changed the base branch from main to feat/render-surface-swaps July 22, 2026 14:31
@leeovery
leeovery changed the base branch from feat/render-surface-swaps to main July 22, 2026 14:31
leeovery and others added 2 commits July 22, 2026 15:31
A templated menu/display fence in prose is a violation: state-derivable
output renders from the engine. The 174 remaining sites (sanctioned
judgment, artefact echoes, chrome one-liners, and the not-yet-converted
families) are pinned per file; any drift fails in both directions — a
new templated fence must become an engine surface (or be pinned
deliberately, with the PR saying why), and a converted site must shrink
its pin. The ratchet only tightens. Markers and signposts are chrome,
out of scope; static fences are always fine. Scanner mirrors the
render-surfaces census exactly.

D3 decided (a): the 83 static menus stay prose — nothing to derive,
nothing to misfill, grammar already under checks 3–5.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ardened

Six-slice flow-integrity review over the whole stack (two mechanical
traces + five agent slices, findings adversarially verified). Fixes:

- Ratchet check 13 had two holes: the trigger regex missed the
  ` ```diff ` instruction form 6c introduced, and the placeholder
  classifier missed digit-first / slash / comma placeholders — both
  broadened; two genuinely-templated sites the narrow forms hid are
  now counted and pinned (analysis-checkpoints, spec-construction).
- resume-gate plan variant keeps the phase anchor when only the phase
  is known (post-advance interrupt: phase set, task null) instead of
  dropping the whole parenthetical.
- promoted_to interpolation guarded like its superseded_by sibling at
  both blocker sites (corrupt state degrades to "" — never
  "undefined").
- pivotSections drops the "above the confirmation" wording — pivot
  emits no confirmation.
- Orphaned pre-variant JSDoc block removed (documented a string const
  as a function).
- Coverage: --own/--paths through the CLI boolean-flag mechanism
  (previously untested argv path), the full pipeline-banner matrix
  (only Feature was pinned), the inverse guard that start/reopen/
  supersede append no sections, the phase-only plan parenthetical,
  and the diff-form-instruction ratchet fixture.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…n sites pinned

The completeness sweep found rendering instructions nested under list
items (three sites) that the column-0 anchor hid from the census and
the ratchet — among them the topic-supersede warning fence already
banked for 7d. Trigger now allows leading whitespace; the three files
re-pinned at their true counts.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@leeovery
leeovery force-pushed the feat/render-ratchet-lint branch from 9cc19df to 7c9915e Compare July 22, 2026 14:31
@leeovery
leeovery merged commit fface28 into main Jul 22, 2026
@leeovery
leeovery deleted the feat/render-ratchet-lint branch July 22, 2026 15:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant