Closure And Scope
If a small surface needs dozens of external audit runs, the default assumption should no longer be "the code is still deeply flawed."
27. Unbounded Audit Loops Are A Prompt Failure
If a small surface needs dozens of external audit runs, the default assumption should no longer be "the code is still deeply flawed."
The more likely problem is:
- undefined scope
- no hard audit cap
- closure mode activated too late
- stale snapshots overlapping newer fixes
28. Scope Terms Must Be Defined Before They Are Used
Words such as small scope or small surface are too soft to govern an audit process.
GoingNinja now requires one declared scope class before the first external run:
single-surface: one runtime surface or one static builder, with no database schema change, no new auth/provider/data-plane contract, and no cross-repo coordination.multi-surface: two or three tightly coupled surfaces in one repo; shared route, asset, or security contracts are allowed, but there is still no cross-repo rollout contract.system: anything larger thanmulti-surface, or any cross-repo/provider/data-plane change.
29. Audit Caps Need To Follow The Scope Class
The numeric caps live in one owner page now:
The important stable rule stays the same:
- the cap follows the declared scope class
- the cap is carried mechanically in
AUDIT_STATE.json - if the cap is exceeded, assume a prompt or process bug before assuming the code still needs endless ordinary reruns
30. Contract Fixes Beat Local Workarounds
If a failure comes from a shared contract, the fix must land in that shared contract.
Examples:
- a viewport problem caused by shared layout rules belongs in shared styles
- a numbering problem caused by heading handling belongs in the builder
- a repeated route issue belongs in the route contract or invariant checks
Only genuinely local content errors should be fixed locally in one page.
Do not close a repeated failure class by:
- adding one page-specific CSS exception
- patching generated output
- adding a one-off renderer branch for one page
- manually correcting the same symptom in multiple files
That kind of patch may look fast, but it weakens the next audit because the underlying drift surface remains open.
31. Vertical Rhythm Needs One Shared Owner
Surface rhythm is not just typography. It also includes:
- the gap below a divider
- the gap above the next block
- sticky offsets between stacked navigation layers
- the handoff from content to footer meta
If those distances live in different files without one owner, the UI will look almost right and still feel wrong.
GoingNinja now treats page-header spacing, footer divider spacing, sticky offsets, and annotation follow-spacing as one shared surface contract.
32. Figure Captions And Source Notes Are Different Jobs
A figure caption should answer one question:
- what is shown here
A source note answers a different question:
- where does this come from
Do not let those jobs collapse into one long paragraph.
GoingNinja now requires:
- short normalized figure captions
- short normalized source notes
- separate renderer classes and styling roles for both
If provenance text becomes long, the fix belongs in the builder normalization contract, not in page-local Markdown edits.
33. Claude Closure Falls Back To Narrow Confirm
Once Claude has already produced one complete closure list on a fresh snapshot, do not keep rerunning the same broad closure prompt after those items are fixed.
The default next step is:
- freeze the updated snapshot again
- keep Gemini on that same frozen snapshot
- ask Claude only to confirm the previously listed blockers on the new snapshot
- lower Claude effort for that narrow confirm lane if the broad
--printpath stays silent too long
This keeps the lane in closure mode instead of reopening exploration.
- 27. Unbounded Audit Loops Are A Prompt Failure
- 28. Scope Terms Must Be Defined Before They Are Used
- 29. Audit Caps Need To Follow The Scope Class
- 30. Contract Fixes Beat Local Workarounds
- 31. Vertical Rhythm Needs One Shared Owner
- 32. Figure Captions And Source Notes Are Different Jobs
- 33. Claude Closure Falls Back To Narrow Confirm