Repository navigation
Seat-post protocol: registry bodies grow without bound — bound the live body to current state, move shift narration out #7583
Description
Problem
Seat posts (label:pm:seat) are defined as "the single authoritative registry" for each seat, but nothing bounds their size. #6019 (domain:engine-core) had reached ~61 KB by 2026-08-11: wave-by-wave status narration, per-card verdicts, patrol notes and stacked handover sections all accreted in the body across shifts. The maintainer raised it directly today (2026-08-11, engine-core PM session):
> 座位贴 #6019 内容较大, 这个问题应该怎么解决,以后会越来越大。
Cost is concrete, not aesthetic: a 61 KB body exceeds tool read limits (this morning's takeover needed chunked shell reads of a saved file to read its own seat post), every full-body edit must round-trip the whole text through a write channel, and the operative state — which the protocol says the body exists to carry — is buried under history that belongs to closed cards.
Growth mechanism
The protocol already says the right things — "评论只作交接审计,不承载状态", state lives on the issues — but in practice the body absorbed shift narration ("#NNNN DISPATCHED…", "#NNNN ACCEPTED + QUEUED…", per-wave tallies), which is per-card state that already lives on the cards and PRs. That narration is the unbounded term; the genuinely body-shaped sections (Scope / Current PM / inherited ledger / hot-file serial queue / standing commitments) are all naturally bounded.
Precedents already in the field
- [PM seat] domain:engine — 🟢 os-elon (session_019yDEhPBC3tcGkW9bkce1HM)(合并后车道:engine-core+metadata+drivers) #6019 was fully re-authored once before (Chinese → English rewrite) relying on body edit history as the archive — established that edit history is an acceptable archive channel.
- The 2026-08-11 06:0xZ takeover of [PM seat] domain:engine — 🟢 os-elon (session_019yDEhPBC3tcGkW9bkce1HM)(合并后车道:engine-core+metadata+drivers) #6019 compacted the live body to current-state-only (~4.5 KB), with prior logs retained in the 05:13Z body revision. Worked; nothing was lost; the takeover audit comment records the pointer.
Proposal (for a SKILL.md amendment — ⚠️ any card editing .claude/skills/pm-dispatch/** mandates model: claude-fable-5 per the 2026-08-10 Model-tiering ruling)
- Fixed section template for seat bodies: Scope / Current PM / Inherited state / Hot-file serial queue / Standing commitments / Notes — nothing else. All sections are current-state; none grow with time.
- Shift narration goes where the state already lives: per-card dispatch/accept/landing facts belong on the card and PR threads (they are already required there); round tallies go to the chat round report. The seat body is edited at takeover, handover, and structural change — not per event.
- Takeover compaction as a standard step: an incoming PM restates the handover's operative content in the bounded template and points at the outgoing revision in edit history (audit comment carries the pointer).
- Mechanical guard: a soft size predicate (e.g. body > ~10 KB) added to
scripts/pm/check-half-states.mjsas a report-only H-item, so oversized seat posts surface in patrol sweeps instead of being discovered at read-failure time.
Options 1–3 are protocol text; option 4 is a small script change. The #7341-style skill-batch card is the natural vehicle if one is already queued.
Filed unassigned, no domain:* — triage routes (likely domain:devx by the skills/scripts surface, with the fable mandate noted above).
Source
Observed during the 2026-08-11 engine-core seat takeover (session session_01PemxJmMZT9JphrsNx886Ce); maintainer prompt quoted above. Dedup: searched pm:seat size/compaction cards — none exist.
Activity
os-zhuang commentedon Aug 11, 2026
Triage:
needs-user-decision+domain:devx..claude/skills/pm-dispatch/**updates are ADR-class with mandatory human review — so the shape itself is the decision, not an execution detail..claude/skills/pm-dispatch/SKILL.md(protocol text) +scripts/pm/check-half-states.mjs(option 4) — bothdomain:devxsurfaces. Anchor verified onorigin/main@744b8f5:scripts/pm/check-half-states.mjsexists (10H2references), so the proposed report-only H-item has a live host.target:v17cards into cloud, which the 发版板 section says can never happen — a live v17 card was invisible to both prescribed queries for ~10h #7493 / pm-dispatch SKILL: Operational note 1'sgh-readonly-queue/*test gave a false negative at queue capacity — propose theadded_to_merge_queuetimeline event as the criterion, plus a missing success-sequence rule #7492 cover different subjects (skill-review ruling, shift lessons, four-lens block, target-board gap, queue criterion); none touches seat-body size. No duplicate.target:*not applicable).本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
os-zhuang commentedon Aug 11, 2026
Maintainer ruling recorded 2026-08-11 (PM session, executing the maintainer's direct instruction in chat — verbatim: 「接受你的全部建议,请更新 issue 的状态和标签」, accepting the four-lens decision-inbox review in full).
Ruling: accepted as proposed. Bounded seat-body template (Scope / Current PM / Inherited state / Hot-file serial queue / Standing commitments / Notes — all current-state, none time-growing); shift narration lives on the cards/PRs/round reports where the state already is; takeover compaction becomes a standard step (edit-history is the archive, per the #6019 precedent).
Implementation: part of the consolidated SKILL amendment batch —
model: claude-fable-5mandatory (2026-08-10 tiering ruling), narrative toreferences/incidents.md(line ratchet),skip-changeset.State:
needs-user-decision→pm:queue(domain:devxseat).Generated by Claude Code
huangyiirene commentedon Aug 11, 2026
Transferred to the skills seat (#7623): label
domain:devx→domain:skills. Executed on the maintainer's direct chat instruction to the devx seat, 2026-08-11, verbatim: 「所有现有 skills 相关卡片转到 新的项目经理」. Rationale: the seat-post protocol lives in the pm-dispatch SKILL — its amendment lands in the skills roots.Generated by Claude Code
pm-dispatch SKILL batch: eight ruled amendments — four-lens block, AD…