Context
Operator-direction 2026-05-18 ~22:00Z (paraphrase): "AGENTS.md heading anchors (## §mailbox_check_protocol) — operator-explicit, twice. limiting it to agents md would be stupid. anchor format for all agent content."
This ticket implements the substrate-wide convention — semantic-concept-named pure-anchor headings across ALL agent content. Trivial mechanical change; substrate-correct downstream-enabling: stable cross-substrate references, KB ingestion uniformity, graph node-naming uniformity, cross-document drops in tickets/PRs/discussions all resolve consistently.
Subsumes the ADR-amendment scope of #11591 (terminology restoration); this ticket is the broader substrate-wide convention + application that #11591 was scoped within.
The Problem
Current heading form across agent content is positional (## 21. The Mailbox Check Protocol (Pre-Flight at Turn Start)). Symptoms:
- Cross-substrate references rely on position; "swiss-cheese decay" under compaction (the original #11558 framing)
- KB ingestion can't reliably index by concept (positional anchors aren't semantic)
- Graph node names lose stability across substrate evolution
- Document-drops in tickets/PRs/discussions can't reliably link to specific concepts
- Byte budget bloated by heading prose duplication (
## 21. The Mailbox Check Protocol ~30 bytes overhead vs ## §mailbox_check_protocol ~6 bytes overhead per heading)
Empirical anchor: Discussion #11577 graduated the corrected reference form (semantic §<ref> text-token, no HTML <a id> scaffolding). The graduated decision targeted REFERENCE form only — the heading form was implicit but unrealized. This ticket completes the convention.
The Architectural Reality
Pure-anchor heading form: ## §semantic_concept_name. Properties:
- Self-documenting: anchor IS the heading; no positional-tracking overhead
- Byte-cheapest: ~5-6 chars per heading vs ~30-60 chars current
- Cross-substrate stable: same identifier in AGENTS.md / skills / Atlas / ADRs / CLAUDE.md
- KB ingestion friendly: anchor names are concept-bearing tokens (LLM-extractable + graph-indexable)
- Cross-document drop friendly:
§mailbox_check_protocol resolves consistently regardless of which agent-content file references it
- Lint-compatible: my own PR #11586
lint-agents.mjs:ANCHOR_TAG_PATTERN blocks HTML <a id> insertions but permits §<kebab> semantic text-refs. No regression.
Section descriptive prose lives in the section BODY (first paragraph), not in the heading. The heading is the anchor; the body is the explanation.
The Fix
Substrate-wide convention defined in amended ADR 0011 (currently scoped under #11591; this ticket subsumes that scope):
<h2 class="neo-h2" data-record-id="6">§semantic_concept_name</h2>
[Section body explaining the concept...]
In-substrate cross-references use §semantic_concept_name (matches the heading form):
See §mailbox_check_protocol for the protocol details.
Application phases (operator-decision on sequencing; ticket carries all phases):
- Phase 1 (proof-of-concept): ADR 0011 amendment + AGENTS.md conversion + direct-consumer cross-reference updates (
.claude/CLAUDE.md, learn/agentos/measurements/cognitive-load-baseline-2026-05.md line 134/184)
- Phase 2: AGENTS_ATLAS.md + AGENTS_STARTUP.md (turn-loaded Map substrate)
- Phase 3:
.agents/skills/**/*.md (SKILL.md + references payloads — also enables Map-vs-World-Atlas compaction per ADR 0007)
- Phase 4:
learn/agentos/**/*.md (ADRs, guides, measurements, decisions)
- Phase 5: cross-content references in
learn/, code JSDoc references to AGENTS.md/skill substrate
Acceptance Criteria
Contract Ledger Matrix
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback |
Docs |
Evidence |
## §semantic_concept_name heading form |
This ticket + Discussion #11577 graduation + operator-direction 2026-05-18 |
All agent content uses pure-anchor heading form; section descriptive prose lives in section body |
None — convention is substrate-decided |
Amended ADR 0011 §2.x |
Empirical conversion: convert AGENTS.md, run lint-agents.mjs + check-substrate-size.mjs + visual diff |
Cross-substrate §<ref> text references |
Same |
All references to substrate use §semantic_concept_name matching heading form |
None |
ADR 0011 §2.x |
grep §<positional-N> returns historical/archaeology refs only post-conversion |
Out of Scope
- HTML
<a id> anchor-tag insertion — explicitly REJECTED per Discussion #11577 graduation + operator forward-rule (any new <a> tags in PRs → operator closes). PR #11586 lint-agents.mjs mechanically enforces this.
- Migrating historical/archaeology positional
§N references (kept per ADR 0011 §2.3 historical-classification carve-out).
- Skill bloat audit (separate concern — covered by #11598 OQ4 future ticket).
Avoided Traps
- Limiting to AGENTS.md only — REJECTED per operator-direction (this turn). Two-tier system (one form for AGENTS.md, another for skills) would defeat cross-substrate reference stability.
- Hybrid form
## §21. The Mailbox Check Protocol — REJECTED. Retains positional number → re-introduces swiss-cheese decay risk. Pure anchor form is byte-cheapest + position-independent.
- Author all 5 phases in ONE PR — REJECTED per partial-lane discipline + operator's "step by step" framing. Phase 1 ships first as proof-of-concept; subsequent phases follow.
- File separate tickets per phase — REJECTED. ONE ticket carries all phases; phase PRs reference
Refs #N until final phase uses Resolves #N. Avoids ticket-fanout (the META operator named in #11598).
Related
- Operator direction: in-session 2026-05-18 ~22:00Z (this turn)
- Source META Discussion: #11598 OQ2 (operator-broadened scope this turn)
- Reference-form authority: Discussion #11577 graduation comment
DC_kwDODSospM4BAt-P
- ADR to amend: ADR 0011 — adds substrate-wide heading-form to §2.x
- Subsumes: #11591 (ADR 0011 terminology restore scope) — work happens here under broader scope
- Lint enforcement (already shipped): PR #11586
lint-agents.mjs blocks HTML <a> tag regressions; permits semantic §<kebab> form
- Substrate-cap mechanism:
ai/scripts/check-substrate-size.mjs (24,576 byte cap — heading conversion reclaims ~400-800 bytes of AGENTS.md headroom)
Origin Session ID: 1b7a3403-06f3-4862-be80-479e129656de
Retrieval Hint: query_raw_memories("substrate-wide heading anchor §semantic_concept_name agent content all files AGENTS.md AGENTS_ATLAS skills learn/agentos KB ingestion graph cross-substrate")
Context
Operator-direction 2026-05-18 ~22:00Z (paraphrase): "AGENTS.md heading anchors (## §mailbox_check_protocol) — operator-explicit, twice. limiting it to agents md would be stupid. anchor format for all agent content."
This ticket implements the substrate-wide convention — semantic-concept-named pure-anchor headings across ALL agent content. Trivial mechanical change; substrate-correct downstream-enabling: stable cross-substrate references, KB ingestion uniformity, graph node-naming uniformity, cross-document drops in tickets/PRs/discussions all resolve consistently.
Subsumes the ADR-amendment scope of #11591 (terminology restoration); this ticket is the broader substrate-wide convention + application that #11591 was scoped within.
The Problem
Current heading form across agent content is positional (
## 21. The Mailbox Check Protocol (Pre-Flight at Turn Start)). Symptoms:## 21. The Mailbox Check Protocol~30 bytes overhead vs## §mailbox_check_protocol~6 bytes overhead per heading)Empirical anchor: Discussion #11577 graduated the corrected reference form (semantic
§<ref>text-token, no HTML<a id>scaffolding). The graduated decision targeted REFERENCE form only — the heading form was implicit but unrealized. This ticket completes the convention.The Architectural Reality
Pure-anchor heading form:
## §semantic_concept_name. Properties:§mailbox_check_protocolresolves consistently regardless of which agent-content file references itlint-agents.mjs:ANCHOR_TAG_PATTERNblocks HTML<a id>insertions but permits§<kebab>semantic text-refs. No regression.Section descriptive prose lives in the section BODY (first paragraph), not in the heading. The heading is the anchor; the body is the explanation.
The Fix
Substrate-wide convention defined in amended ADR 0011 (currently scoped under #11591; this ticket subsumes that scope):
<h2 class="neo-h2" data-record-id="6">§semantic_concept_name</h2> [Section body explaining the concept...]In-substrate cross-references use
§semantic_concept_name(matches the heading form):See §mailbox_check_protocol for the protocol details.Application phases (operator-decision on sequencing; ticket carries all phases):
.claude/CLAUDE.md,learn/agentos/measurements/cognitive-load-baseline-2026-05.mdline 134/184).agents/skills/**/*.md(SKILL.md + references payloads — also enables Map-vs-World-Atlas compaction per ADR 0007)learn/agentos/**/*.md(ADRs, guides, measurements, decisions)learn/, code JSDoc references to AGENTS.md/skill substrateAcceptance Criteria
## §semantic_concept_namesubstrate-wide heading form. AGENTS.md converted. Direct consumer cross-references updated..agents/skills/**/*.mdconverted (SKILL.md headings + references-payload headings).learn/agentos/**/*.mdconverted (ADRs, guides, measurements).§semantic_concept_nameform.pull-request-workflow.md §6.1.Refs #N(non-magic, partial-lane discipline) until the FINAL phase PR which usesResolves #N.Contract Ledger Matrix
## §semantic_concept_nameheading formlint-agents.mjs+check-substrate-size.mjs+ visual diff§<ref>text references§semantic_concept_namematching heading form§<positional-N>returns historical/archaeology refs only post-conversionOut of Scope
<a id>anchor-tag insertion — explicitly REJECTED per Discussion #11577 graduation + operator forward-rule (any new<a>tags in PRs → operator closes). PR #11586lint-agents.mjsmechanically enforces this.§Nreferences (kept per ADR 0011 §2.3 historical-classification carve-out).Avoided Traps
## §21. The Mailbox Check Protocol— REJECTED. Retains positional number → re-introduces swiss-cheese decay risk. Pure anchor form is byte-cheapest + position-independent.Refs #Nuntil final phase usesResolves #N. Avoids ticket-fanout (the META operator named in #11598).Related
DC_kwDODSospM4BAt-Plint-agents.mjsblocks HTML<a>tag regressions; permits semantic§<kebab>formai/scripts/check-substrate-size.mjs(24,576 byte cap — heading conversion reclaims ~400-800 bytes of AGENTS.md headroom)Origin Session ID:
1b7a3403-06f3-4862-be80-479e129656deRetrieval Hint:query_raw_memories("substrate-wide heading anchor §semantic_concept_name agent content all files AGENTS.md AGENTS_ATLAS skills learn/agentos KB ingestion graph cross-substrate")