Context
@tobiu V-B-A 2026-05-12: PR #11257 (Boot-Time Pre-Flight Guard for Ticket #11179, closed as superseded) added 9 lines of substantial substrate-text to AGENTS.md §22 — fail-open/fail-closed semantics, hard-refusal predicate, scope boundary, operator-notification mandate. This is exactly the substrate-bloat pattern Discussion #11259 + Epic #11256 are codifying to prevent.
Direct operator quote: "agents.md bloat. is this not the exact item we are trying to counter?"
Authored by Claude Opus 4.7 (Claude Code). Session c2912891-b459-4a03-b2af-154d5e264df1.
The Problem
PR #11257 violated /turn-memory-pre-flight decision-tree (which had merged minutes earlier via PR #11255, Epic #11256 AC1). Applying the skill's decision-tree to PR #11257's substrate-addition retrospectively:
- Step 1 (Universal rule?): The TRIGGER ("read sandman_handoff.md on boot") = yes, applies to every session. Implementation details = no.
- Step 2 (Skill lifecycle event?): Session-boot IS a lifecycle phase → dedicated skill placement, not full body in AGENTS.md.
My review failure (the 5th same-session Flattening-Bias anchor): My PR #11257 Cycle 1 review's RA1 said "apply /turn-memory-pre-flight discipline to this PR's substrate-mutation" — caught the substrate-NAME ("cross-skill integration missing") but did NOT carry through to the substrate-EFFECT placement-conclusion ("would the discipline conclude 'in AGENTS.md' or 'in dedicated skill'?"). Cycle 2 APPROVE rolled forward with the bloat unchallenged.
This is Flattening-Bias on the reviewer side — caught half the signal, missed the load-bearing half.
The Architectural Reality
Current state (PR #11257 was closed as superseded, so no §22 bulk on dev):
AGENTS.md §22:
## Turn Start & Session Boot Pre-Flights
**Session Boot Pre-Flight (The Sandman Handoff):**
At the very beginning of a newly booted session... [9 lines of bulk]
**The Mailbox Check Protocol (Turn Start):**
At every turn start... [1 line]
Substrate-correct shape (Map + Atlas via /turn-memory-pre-flight decision-tree):
AGENTS.md §21 (Workflow Skills routing table):
| `sandman-handoff-pre-flight` | At session-boot, before any workflow skill, to read sandman_handoff.md and enforce hard-refusal on blocking lane-state |
AGENTS.md §22:
## Turn Start Pre-Flights (minimal umbrella)
**Mailbox Check** — `list_messages({status: 'unread'})` → state observed count.
**Sandman Handoff Pre-Flight** — see `/sandman-handoff-pre-flight` skill (§21 row).
.agents/skills/sandman-handoff-pre-flight/SKILL.md:
[Map; 1-line trigger pointing at atlas]
.agents/skills/sandman-handoff-pre-flight/references/sandman-handoff-pre-flight-workflow.md:
[Atlas; full body: fail-open/fail-closed semantics, hard-refusal predicate, scope boundary, operator-notification]
The Fix
Atomic substrate-relocation PR:
- Create new skill directory
.agents/skills/sandman-handoff-pre-flight/
SKILL.md (Map; ≤12 lines per /create-skill empirical floor)
references/sandman-handoff-pre-flight-workflow.md (Atlas; relocated body from AGENTS.md §22)
- Add AGENTS.md §21 trigger row for
/sandman-handoff-pre-flight
- Update AGENTS.md §22 — keep minimal umbrella and 1-line pointer to skill (no bulk lines to trim since PR #11257 didn't merge)
- Cross-skill references — link
/sandman-handoff-pre-flight to /pull-request §1.0 Sandman Handoff Pre-Flight Guard + /ticket-intake §1 Sandman Handoff Pre-Flight Guard (existing PR #11257 substrate stays but references the canonical skill instead of inlining)
Acceptance Criteria
Substrate-Evolution Empirical Anchors
This ticket is itself substrate-evolution material:
5th same-session Flattening-Bias anchor for Discussion #11259 sub-mode validation:
- (1) PR #11250 wrong-skill placement (my author framing)
- (2) Discussion #11252 Cycle 1 GPT rename-pressure (substrate-placement scope expansion)
- (3) Discussion #11252 Cycle 1 Gemini signal-extension on flattened name
- (4) Discussion #11259 Cycle 1.7 my top-of-body-annotation-only "absorption" (GPT Cycle 2 caught)
- (5) THIS — PR #11257 my Cycle 1+2 review caught cross-skill-integration miss but didn't carry through to placement-conclusion
Substrate-rollout-discovery gap (Epic #11256 AC4 family candidate sub-AC): newly-merged skill (PR #11255 /turn-memory-pre-flight at 09:08Z) did NOT auto-apply to next consumer-candidate (PR #11257 at 09:38Z). 30-minute gap; same author (Gemini); same session. The skill exists but agents don't auto-pattern-match next substrate-mutation against newly-merged disciplines. Worth codifying as anti-pattern + corrective discipline (e.g., post-skill-merge announcement + checklist).
Out of Scope
- Reverting PR #11257 entirely — substrate functionality is correct; only placement is wrong-skill.
- Changing the Sandman Handoff Pre-Flight semantics — fail-open/fail-closed + scope boundary stay; just relocate to atlas.
- Expanding to other AGENTS.md sections — this ticket is scoped to §22 §1.0 §1 relocations only; broader AGENTS.md audit is Discussion #11259 territory.
- Re-litigating the substrate-content of PR #11257 — accepts the substrate as written; only re-places it.
Avoided Traps
- Trap: revert PR #11257 entirely → rejected; the substrate is correct, only placement is wrong-skill.
- Trap: leave AGENTS.md §22 as-is → rejected per operator-V-B-A; bloat ships into every future session's turn-loaded memory; net cost compounds.
- Trap: file as Discussion → rejected; the corrective shape is mechanical-substrate-relocation, not architectural-ambiguity. Discussion-grade would inflate to Epic; bounded ticket is right.
- Trap: fold into Discussion #11259 graduation Epic → rejected; Discussion #11259 is substrate-emphasis discipline (XML tag wrappers); this is substrate-placement-correction. Different axes; better tracked separately.
Related
- PR #11257 (CLOSED) — the bloat anchor; this ticket implements the corrected placement
- PR #11255 (MERGED) —
/turn-memory-pre-flight skill substrate (Epic #11256 AC1)
- Epic #11256 —
/turn-memory-pre-flight + /architecture-pre-flight umbrella; this ticket is a downstream-consumer demonstration of substrate-rollout-discovery gap
- Discussion #11259 (OPEN, Cycle 1.8 1/3 APPROVED) — XML-tag-wrapper substrate for anti-drift anchors; this ticket adds fresh 5th-empirical-anchor for Flattening-Bias sub-mode validation
- Ticket #11179 (CLOSED by PR #11257) — original Sandman Handoff Pre-Flight Guard ticket; this ticket is substrate-correction not AC re-scoping
Origin Session ID
c2912891-b459-4a03-b2af-154d5e264df1 (Claude Opus 4.7 / Claude Code 1M context, 2026-05-12 session; operator-surfaced V-B-A on PR #11257's substrate-shape as bloat anchor; PR #11257 closed without merging)
Handoff Retrieval Hints
query_raw_memories(query="sandman-handoff substrate-relocation AGENTS.md §22 bloat Flattening-Bias placement-conclusion")
ask_knowledge_base(query="Sandman Handoff Pre-Flight skill placement turn-memory decision-tree")
- File anchors: AGENTS.md §22 + .agents/skills/sandman-handoff-pre-flight/ (to-be-created) + AGENTS.md §21
- Empirical anchor stack: PR #11257 (bloat), PR #11255 (skill substrate), Epic #11256 (umbrella), Discussion #11259 (Flattening-Bias codification)
🤖 Generated with Claude Code
Context
@tobiu V-B-A 2026-05-12: PR #11257 (Boot-Time Pre-Flight Guard for Ticket #11179, closed as superseded) added 9 lines of substantial substrate-text to AGENTS.md §22 — fail-open/fail-closed semantics, hard-refusal predicate, scope boundary, operator-notification mandate. This is exactly the substrate-bloat pattern Discussion #11259 + Epic #11256 are codifying to prevent.
Direct operator quote: "agents.md bloat. is this not the exact item we are trying to counter?"
Authored by Claude Opus 4.7 (Claude Code). Session
c2912891-b459-4a03-b2af-154d5e264df1.The Problem
PR #11257 violated
/turn-memory-pre-flightdecision-tree (which had merged minutes earlier via PR #11255, Epic #11256 AC1). Applying the skill's decision-tree to PR #11257's substrate-addition retrospectively:My review failure (the 5th same-session Flattening-Bias anchor): My PR #11257 Cycle 1 review's RA1 said "apply
/turn-memory-pre-flightdiscipline to this PR's substrate-mutation" — caught the substrate-NAME ("cross-skill integration missing") but did NOT carry through to the substrate-EFFECT placement-conclusion ("would the discipline conclude 'in AGENTS.md' or 'in dedicated skill'?"). Cycle 2 APPROVE rolled forward with the bloat unchallenged.This is Flattening-Bias on the reviewer side — caught half the signal, missed the load-bearing half.
The Architectural Reality
Current state (PR #11257 was closed as superseded, so no §22 bulk on dev):
Substrate-correct shape (Map + Atlas via
/turn-memory-pre-flightdecision-tree):AGENTS.md §21 (Workflow Skills routing table): | `sandman-handoff-pre-flight` | At session-boot, before any workflow skill, to read sandman_handoff.md and enforce hard-refusal on blocking lane-state | AGENTS.md §22: ## Turn Start Pre-Flights (minimal umbrella) **Mailbox Check** — `list_messages({status: 'unread'})` → state observed count. **Sandman Handoff Pre-Flight** — see `/sandman-handoff-pre-flight` skill (§21 row). .agents/skills/sandman-handoff-pre-flight/SKILL.md: [Map; 1-line trigger pointing at atlas] .agents/skills/sandman-handoff-pre-flight/references/sandman-handoff-pre-flight-workflow.md: [Atlas; full body: fail-open/fail-closed semantics, hard-refusal predicate, scope boundary, operator-notification]The Fix
Atomic substrate-relocation PR:
.agents/skills/sandman-handoff-pre-flight/SKILL.md(Map; ≤12 lines per/create-skillempirical floor)references/sandman-handoff-pre-flight-workflow.md(Atlas; relocated body from AGENTS.md §22)/sandman-handoff-pre-flight/sandman-handoff-pre-flightto/pull-request §1.0 Sandman Handoff Pre-Flight Guard+/ticket-intake §1 Sandman Handoff Pre-Flight Guard(existing PR #11257 substrate stays but references the canonical skill instead of inlining)Acceptance Criteria
/sandman-handoff-pre-flight./pull-request §1.0+/ticket-intake §1link to new skill (instead of inlining the predicate text)./turn-memory-pre-flightdecision-tree explicitly + cite this ticket as fresh empirical anchor for the skill's substrate-rollout-discovery gap.Substrate-Evolution Empirical Anchors
This ticket is itself substrate-evolution material:
5th same-session Flattening-Bias anchor for Discussion #11259 sub-mode validation:
Substrate-rollout-discovery gap (Epic #11256 AC4 family candidate sub-AC): newly-merged skill (PR #11255
/turn-memory-pre-flightat 09:08Z) did NOT auto-apply to next consumer-candidate (PR #11257 at 09:38Z). 30-minute gap; same author (Gemini); same session. The skill exists but agents don't auto-pattern-match next substrate-mutation against newly-merged disciplines. Worth codifying as anti-pattern + corrective discipline (e.g., post-skill-merge announcement + checklist).Out of Scope
Avoided Traps
Related
/turn-memory-pre-flightskill substrate (Epic #11256 AC1)/turn-memory-pre-flight+/architecture-pre-flightumbrella; this ticket is a downstream-consumer demonstration of substrate-rollout-discovery gapOrigin Session ID
c2912891-b459-4a03-b2af-154d5e264df1(Claude Opus 4.7 / Claude Code 1M context, 2026-05-12 session; operator-surfaced V-B-A on PR #11257's substrate-shape as bloat anchor; PR #11257 closed without merging)Handoff Retrieval Hints
query_raw_memories(query="sandman-handoff substrate-relocation AGENTS.md §22 bloat Flattening-Bias placement-conclusion")ask_knowledge_base(query="Sandman Handoff Pre-Flight skill placement turn-memory decision-tree")🤖 Generated with Claude Code