Filed by the domain:skills seat (#7623, session session_012Gg6rMAti8ZaueWb6BRsDn), unassigned — recording a measured gap, not claiming it.
The fact, measured 2026-08-12
The subagent dispatch backend (S+M ⇒ mode:subagent, ruled 2026-08-12) runs os-dev subagents inside the PM's own container, so they load .claude/agents/os-dev.md and the pm-dispatch skill tree from the local checkout — not from origin/main.
Measured same-day: after the os-dev rewrite (686 → 357 lines) had merged to origin/main, this seat's container checkout was still on the pre-rewrite commit, so the first subagent batch loaded the old 686-line agent definition. Caught by inspection, fixed in-container with git -C /home/user/objectstack pull --ff-only origin main; later batches loaded the correct definition.
This is the container-local instance of the propagation rule already in the skill text (skill text is a startup snapshot; in-flight sessions never auto-learn updates): cloud sessions clone fresh and get current main for free, but the subagent backend traded that freshness away along with the container overhead — the trade was deliberate, the freshness loss just needs one mechanical line to compensate.
Proposed change (one line, reference file only — no SKILL.md ratchet cost)
Add to .claude/skills/pm-dispatch/references/dispatch-runbook.md, in the subagent-mode dispatch steps:
Before dispatching a subagent batch, fast-forward the local checkout: git -C <repo> pull --ff-only origin main (or verify HEAD equals origin/main). Subagents read the local tree — a stale checkout hands every subagent in the batch outdated agent definitions and skill text. --ff-only so a dirty or diverged checkout fails loudly instead of merging silently.
Placement in the reference file keeps SKILL.md at its ratchet ceiling (686/686, headroom 0). If the skills lane judges a one-line SKILL.md principle is also warranted, it must be funded per the shrink-only ratchet.
Binding constraints for whoever takes this
- Touches
.claude/skills/pm-dispatch/** ⇒ model: claude-fable-5 mandatory, ADR-class: draft PR, human review, human merge. ⛔ No auto-merge, no merge queue. - Gates:
check:pm-skill-ratchet, check:pm-skill-id-lint, check:skill-frame-sync, check:doc-authoring.
Filed by the
domain:skillsseat (#7623, sessionsession_012Gg6rMAti8ZaueWb6BRsDn), unassigned — recording a measured gap, not claiming it.The fact, measured 2026-08-12
The subagent dispatch backend (S+M ⇒
mode:subagent, ruled 2026-08-12) runsos-devsubagents inside the PM's own container, so they load.claude/agents/os-dev.mdand the pm-dispatch skill tree from the local checkout — not fromorigin/main.Measured same-day: after the os-dev rewrite (686 → 357 lines) had merged to
origin/main, this seat's container checkout was still on the pre-rewrite commit, so the first subagent batch loaded the old 686-line agent definition. Caught by inspection, fixed in-container withgit -C /home/user/objectstack pull --ff-only origin main; later batches loaded the correct definition.This is the container-local instance of the propagation rule already in the skill text (skill text is a startup snapshot; in-flight sessions never auto-learn updates): cloud sessions clone fresh and get current main for free, but the subagent backend traded that freshness away along with the container overhead — the trade was deliberate, the freshness loss just needs one mechanical line to compensate.
Proposed change (one line, reference file only — no SKILL.md ratchet cost)
Add to
.claude/skills/pm-dispatch/references/dispatch-runbook.md, in the subagent-mode dispatch steps:Placement in the reference file keeps SKILL.md at its ratchet ceiling (686/686, headroom 0). If the skills lane judges a one-line SKILL.md principle is also warranted, it must be funded per the shrink-only ratchet.
Binding constraints for whoever takes this
.claude/skills/pm-dispatch/**⇒model: claude-fable-5mandatory, ADR-class: draft PR, human review, human merge. ⛔ No auto-merge, no merge queue.check:pm-skill-ratchet,check:pm-skill-id-lint,check:skill-frame-sync,check:doc-authoring.