Give the approver model its own section heading - #50
Merged
Merged
Conversation
Sections 1 through 8 and 10 through 17 each open with a '## N.' heading. Section 9 never had one. No blob in the repository's history contains a line starting '## 9', so this dates to the canonical v0.1.0 import rather than to a later edit. The consequence was silent. The approver rules rendered as the tail of '8.6 Chain head publication', section 9 got no anchor and no table of contents entry, and the three concept pages that refer a reader to §9 pointed at a section the page did not appear to contain. The guard is structural because nothing else catches this. A subsection renders under whichever heading precedes it, so an orphaned '### 9.1' builds clean. The test asserts every numbered subsection has a parent section and that the section sequence has no gaps, across every numbered document rather than this one. Signed-off-by: rocklambros <rock@rockcyber.com>
rocklambros
requested review from
GangGreenTemperTatum,
afogel,
almogbhl,
bar-capsule,
fewdisc,
mamicidal,
sclintonowasp and
stefanoamorelli
as code owners
September 6, 2026 18:08
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
docs/spec/instrument/specification.mdnumbers every section## N.except section 9, which had none. The approver model at what should be §9 opened directly with body prose, so it rendered as the tail of### 8.6 Chain head publication (normative).Adds
## 9. Approver Modelahead of that prose, matching the shape §4 already uses (a## N.heading, body text, then### N.1).Why it went unnoticed
A subsection renders under whichever heading precedes it, so an orphaned
### 9.1builds clean under--strict. Nothing failed. The effects were all silent:concepts/intent.md,concepts/identity.md, andconcepts/agents.mdeach send readers to §9, which the page did not appear to containThis is not a regression. No blob anywhere in the repository's history contains a line starting
## 9, so it dates to the canonical v0.1.0 import inf46d260.Guard
tests/test_spec_structure.pyasserts two things across every numbered document, not just this one:## N.parentBoth failed before the fix, naming section 9 specifically and nothing else. Both pass after.
Verification
uv run pytest194 passed, 1 skipped (up from 192, the two new guards)uv run mkdocs build --strictexits 0id="9-approver-model", and#92-approver-incapable-clients-normativeis unchanged, so the existing §9.2 link at line 113 still resolvesNot changed
The three concept pages refer to
(§9)as bare text. That matches the local convention for those "Referenced by" footers, which link the file and leave section numbers bare, so I left them alone.Type of change
Security