Skip to content

spec: 010 Task 11.8 — the second H1, and the rule that could not see it - #107

Merged
iancooper merged 1 commit into
masterfrom
docs/spec-010-phase-11-double-h1
Aug 22, 2026
Merged

spec: 010 Task 11.8 — the second H1, and the rule that could not see it#107
iancooper merged 1 commit into
masterfrom
docs/spec-010-phase-11-double-h1

Conversation

@iancooper

Copy link
Copy Markdown
Member

Spec 010, Phase 11, Task 11.8. One published page changes; no URL moves.

BuildingAnAsyncPipeline.md carried two H1s, lines 1 and 8. NO H1 fires only on none and rule 3b starts at ##, so nothing checked it.

The demotion is its own argument for the rule

What a second H1 buys its author is exemption from every rule a section heading obeys. As # Implementing a Pipeline it was fine. As ## Implementing a Pipeline it collides with BuildingAPipeline.md:52, which carries that heading already — the page had been escaping rule 3a by claiming to be a title.

It is now ## Implementing an Async Pipeline, unique and qualified. Nothing linked the old anchor; checked before the edit.

EXTRA H1 is an error repo-wide from this commit, which the corpus permits: one page had the defect, it is fixed here, so the rule lands at zero — the same shape as rule 4 after Task 7.2 cleared its debt. CLAUDE.md's ledger gains the row in the same commit.

Enumerating the ledger found the gap it exists to prevent — third time, third direction

When In the linter In CLAUDE.md
Spec 011 acceptance NO H1
Phase 10 ❌ (docstring) NO H1
Here SUMMARY NOT A SENTENCE ❌ — and missing from the docstring too

Phase 10's write-up says "enumerate both directions". SUMMARY NOT A SENTENCE was added to the code by that very session's sweep, four defects deep in a list, and written down nowhere else. The session that drew the lesson broke it again, in the same file, within the same phase. Both places fixed.

A parity check is only true of the moment it ran. What makes it hold is running it whenever a label is added — now Task 11.4's job, and this row's precedent.

The last of the 2022 conversion

[RequestHandlerAsync\<T\>
\<https://…/RequestHandlerAsync.cs\>]{.title-ref}\_\_.

reStructuredText pandoc never finished converting, which a reader sees verbatim — braces, backslashes and all — where a link should be. linkcheck.py cannot fail it because it is not a link: the same sentence as the .html finding and the (#) one, for the third time in this phase. Repaired to the form the preceding line already uses, target confirmed against Brighter/src/Paramore.Brighter/RequestHandlerAsync.cs.

No rule added, deliberately. {.title-ref} occurs once in 142 pages, the conversion that produced it happened once in 2022, and nothing here can produce another. A rule guarding a door nobody can open is a rule the next reader must understand before they may ignore it. The .html links earned one because 23 survived; this earned a fix.

Gates

linkcheck 144 files, clean; pagelint 0 errors / 791 warnings / 142 pages; --check-shape 0; --check-redirects 0 at 77 entries; --changed origin/master 0 at 4 files, 14 hunks, 1 page, 0 code blocks strict.

🤖 Generated with Claude Code

BuildingAnAsyncPipeline.md carried two H1s, lines 1 and 8. NO H1 fires only on
none and rule 3b starts at `##`, so nothing checked it.

The demotion is its own argument for the rule. What a second H1 buys its author
is exemption from every rule a section heading obeys: as `# Implementing a
Pipeline` it was fine, and as `## Implementing a Pipeline` it collides with
BuildingAPipeline.md:52, which carries that heading already. It is now
`## Implementing an Async Pipeline`, unique and qualified. Nothing linked the old
anchor, checked before the edit.

EXTRA H1 is an error repo-wide from this commit, which the corpus permits: one
page had it and it is fixed here, so the rule lands at zero — the same shape as
rule 4 after Task 7.2 cleared its debt. CLAUDE.md's ledger gains the row in the
same commit.

Enumerating the ledger for that row found the gap it exists to prevent, for the
third time and in the third direction. Spec 011 found NO H1 in the linter and not
in CLAUDE.md; Phase 10 found it in CLAUDE.md and not in the linter's docstring,
and wrote "enumerate both directions". SUMMARY NOT A SENTENCE was in neither —
added by that same session's sweep and never written down. Both places fixed.

And the last of the 2022 rst conversion: a `{.title-ref}` artefact that a reader
sees verbatim where a link should be. linkcheck cannot fail it because it is not
a link — the third time that sentence applies in this phase. Repaired to the form
the preceding line already uses, target confirmed in the Brighter source. No rule
added: it occurs once, nothing here can produce another, and a rule guarding a
door nobody can open is one the next reader must understand before ignoring.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@iancooper
iancooper merged commit f7c5324 into master Aug 22, 2026
6 checks passed
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