Skip to content

spec: 009 Phase 2 — the four glossary terms, and the fifth that was already there - #115

Merged
iancooper merged 1 commit into
masterfrom
docs/spec-009-phase-2-glossary
Aug 24, 2026
Merged

spec: 009 Phase 2 — the four glossary terms, and the fifth that was already there#115
iancooper merged 1 commit into
masterfrom
docs/spec-009-phase-2-glossary

Conversation

@iancooper

Copy link
Copy Markdown
Member

Spec 009 Phase 2 lands D12, the deliverable that gates rungs 3 and 4. The ladder names concepts and links them out rather than explaining them inline, which only works if the targets exist.

This changes a published pagecontents/Glossary.md, 678 → 722 lines.

D12 was specified as five terms. Four were missing.

Box Provisioning has been in the glossary since Spec 005, as ### BoxProvisioning under ## Database Provisioning, with a fuller definition than this phase would have written — and four inbound links across two pages already point at #boxprovisioning (BoxProvisioning.md:12, :196, BoxProvisioningUpgrade.md:222). Spec 005's task list names that anchor spelling as a decision, not an accident.

Adding a second entry would have recreated the Dispatcher-defined-twice defect Spec 011 had to spend a task merging. So nothing was added, and every link to the term is Glossary.md#boxprovisioning. Design's D12 table, its D3 glossary list and Task 8.1 all carry the dated correction.

How the errata got it wrong

§2.2 is not careless — it is exactly right about what it measured. It resolved five anchors through linkcheck.py's own slug() and reported all five absent, and all five are absent. #box-provisioning genuinely does not resolve.

What no query asked is whether the term was absent, and a slug lookup cannot answer that: Box Provisioning and BoxProvisioning are the same term and different slugs, so the one instrument in use was constitutionally unable to see the entry sitting there. This programme already knew to ask what a figure counted rather than whether it is right; the new face is that a lookup counts too. The tell was free: grep -i box contents/Glossary.md.

What ships

All four go under ## Messaging Terms, beside entries that already use them in prose:

Term Placed after Why there
At-Least-Once Message Oriented Middleware (MoM) at-least-once is the promise MoM makes — BrighterInboxSupport.md:14 says so in as many words
Partition Event Stream that entry already introduces partitions, offsets and consumer position
Consumer Group Partition
Offset Consumer Group

Partition says how it relates to the existing Partition Key: the key chooses, the partition is what it chooses. Offset names CommitBatchSize's default of 10, verified at KafkaMessageConsumer.cs:122 and KafkaSubscription.cs:203, with the XML doc at :92 saying in its own words that a crash means the group processes those records again. No line number reaches the page — that tree is 140 commits past the release and a cited line would be stale immediately.

Verification

The task warned that "linkcheck.py catches nothing about a heading nobody links yet", and resolving slugs with the same slug() the checker imports would only have asked whether the arithmetic agrees with itself. So the anchors were proved end-to-end: six probe links appended to FAQ.md, the mutation asserted to have landed, linkcheck.py run.

===== MISSING ANCHOR (1) =====
contents/FAQ.md:659  [BAD](/contents/Glossary.md#box-provisioning)

Exactly one — the control. The four new anchors and #boxprovisioning passed as real link targets. FAQ.md was restored from a copy taken beforehand and asserted byte-identical, never git checkout --.

Glossary.md is 722 lines, 114 headings, 114 distinct slugs, no collisions, so rule 3b holds by enumeration as well as by the linter. The twelve anchors of §2.2 all still resolve — and four moved line, so §2.2's own line numbers are stale one phase after it told the reader not to trust design's.

Gates

linkcheck.py                 No broken internal links (144 files checked).
pagelint.py                  0 errors, 790 warnings across 143 pages
pagelint.py --changed        1 page, 0 code blocks strict — vacuous, and it says so
urlmap.py --check-shape      0 failures
urlmap.py --check-redirects  0 failures

The using-directive debt is unmoved at 790, as it must be: a glossary entry carries no C# block. The --changed run reaching 0 code blocks is the honest result for prose, not a pass to lean on.

Next: Phase 3, rung 1 — and the corpus's first Tutorial-typed page.

🤖 Generated with Claude Code

…dy there

D12 was specified as five missing terms. Four were missing.

Box Provisioning has been in Glossary.md since Spec 005, as
### BoxProvisioning under ## Database Provisioning, with a fuller
definition than this phase would have written and four inbound links
already pointing at #boxprovisioning. Adding a second entry would have
recreated the Dispatcher-defined-twice defect Spec 011 spent a task
merging. Nothing was added; every link to the term is the closed form,
and design's D12 table, its D3 glossary list and Task 8.1 all carry the
correction.

How the errata got it wrong is the part worth keeping. §2.2 resolved five
ANCHORS through linkcheck's own slug() and reported all five absent — and
all five are absent. Nothing asked whether the TERM was absent, and a slug
lookup cannot answer that: Box Provisioning and BoxProvisioning are the
same term and different slugs. The tell was `grep -i box Glossary.md`.

Added, all under ## Messaging Terms where the neighbouring entries already
use them in prose: At-Least-Once after Message Oriented Middleware, and
Partition / Consumer Group / Offset after Event Stream. Offset names
CommitBatchSize's default of 10, verified at KafkaMessageConsumer.cs:122
and KafkaSubscription.cs:203 — no line number reaches the page, since that
tree is 140 commits past the release.

Anchors proved end-to-end rather than by the slug function that would only
have agreed with itself: six probe links appended to FAQ.md, mutation
asserted to have landed, linkcheck run — exactly one MISSING ANCHOR, the
#box-provisioning control. FAQ.md restored from a copy and asserted
byte-identical.

The twelve anchors of §2.2 all still resolve and four moved line, so §2.2's
own line numbers are now stale one phase after it told the reader not to
trust design's. Cite anchors.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@iancooper
iancooper merged commit 0b22c84 into master Aug 24, 2026
6 checks passed
@iancooper
iancooper deleted the docs/spec-009-phase-2-glossary branch August 24, 2026 20:06
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