Repository navigation
Commit 0a6024d
docs(pm-dispatch): a maintainer's dispatch posture ends with the session it was given to (#20169)
Fixes #20154
Clause-②: no
## What
One rule, three clauses, placed in
`.claude/skills/pm-dispatch/references/seat-lifecycle.md`. A
maintainer's dispatch posture (serial, `batch` N, 「不开新卡」) given to a
seat session ends when that session closes its shift. A new incumbent
starts at SKILL.md's `batch` default (3) unless the maintainer restates
the posture to the new session. A shift-close brief does not list such a
posture as an inherited standing ruling. Net line change 0; no gate or
checker added.
## The maintainer's instruction (verbatim)
> 「项目经理重开之后,并发应该回到3,不应该沿用之前的记录。这个也应该开 skills 卡。」
In the chat of `domain:spec` seat 2 session
`session_01QcAS3qiYYZNezaxZxaUdMV`, 2026-09-27, per the card's
Instruction block.
The instance the card describes: the handover brief comment 5791507651
on #18549 (2026-09-23) listed 「当前任务处理完,合并后就改为串行派发。」 under "Standing
rulings from today (the successor inherits them)". That comment and that
card are left untouched.
## Where, and why there
- File: `references/seat-lifecycle.md` (the seat's placement).
`SKILL.md` is untouched: its `batch` row (:59) is the width-pinned
widest table row and the file has 0 line headroom.
`seat-post-protocol.md` is untouched: one rule, one file.
- Split across two sections because of who reads which one. The file's
own line 3 says the 〈开轮互斥〉 section is read at fire start and the other
sections before closing a shift. Clause 2 (the successor starts at 3)
goes in 〈开轮互斥〉, the section the new incumbent reads at seating. Clauses
1 and 3 (the posture expires; the brief does not carry it) go in
〈座位贴协议〉, the section the outgoing incumbent reads before writing the
brief.
## Before / after
| line | before | after |
|---|---|---|
| L17 (〈开轮互斥〉) | `- 滞后标题是进场顺手修的半状态,⛔ 不是阻塞;简报点名的留守尾巴作围栏。` | `` - 坐席从
`batch` 默认 3 起步;前任口径(串行、N、「不开新卡」)维护者对本会话重述才生效。 `` |
| L40 (〈座位贴协议〉) | `- 收班 = 状态 flush + 在飞显式安置,不是在飞归零;收班简报是最终一笔。` | `- 收班 =
状态 flush + 在飞显式安置,不是在飞归零;派发口径失效,简报 ⛔ 不列作继承裁决。` |
What the deleted text was, and where it still lives (the ratchet is paid
by deleting duplicates, not by re-wrapping):
- Old L17, both halves, is carried by `seat-post-protocol.md`
〈活性、写侧刷新与收班〉: 「标题滞后是可修半状态,坐席时顺手修,⛔ 不是阻塞。」 (its L37) and 「末尾巴合并 ⇒
贴上一条尾清注记;继任立即坐席,点名集作围栏。」 (its L39). That file is the one read at the
takeover moment.
- Old L40's second half 「收班简报是最终一笔」 is carried by the same file's L36:
「收班序列:贴正文与标题刷新在先,简报评论是最终一笔;继任的释放判据 = 简报在。」
## Premise check at base 84880f9
`grep -nE '口径|posture|串行派发'` over `SKILL.md`,
`references/seat-lifecycle.md`, `references/seat-post-protocol.md`: **0
hits** (grep exit 1). The dispatch note said the only hit was
`SKILL.md:59`. That line is the `batch` default row and it contains none
of the three words. It is found by `grep -n batch`, not by this grep.
Control on the same file: `grep -c 收班 references/seat-lifecycle.md` = 8.
The gap the card names is real: no session-scope rule for a dispatch
posture exists in any of the three files.
## Line budget
| file | lines before | lines after | ceiling | prose lines over 120
bytes |
|---|---|---|---|---|
| `references/seat-lifecycle.md` | 96 | 96 | 96 | 0 (new L17 is 120 B,
new L40 is 118 B) |
`pnpm check:pm-skill-ratchet` on head 165b46b prints `seat-lifecycle.md
is 96 lines (ceiling 96; headroom 0)` and exits 0.
Deviation from the dispatch's mechanism note, reported rather than
hidden. The note said references prose lines could be lengthened because
only table rows are width-pinned. That is false. The ratchet also
enforces a 120-byte budget per prose line. My first commit (01d3d30)
extended the two lines to 199 B and 226 B, and the gate went red: `has 2
line(s) over the 120-byte budget: L16 (199B), L40 (226B)`. The second
commit replaces two duplicated halves instead, as shown above.
## Gates (head 165b46b)
`node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack` derived 17 commands. All 17 exit 0, as do
three extras: `check:pm-settings-deny-roster` (its roster lives under
`.claude`), `check-skills-token-ratchet.mjs` and
`check:pm-governed-prose`. `--ran` reconciliation with exit codes
recorded: `17 derived famil(ies) accounted for — 17 run, 0 NOT-MEASURED
(a DERIVED zero — all 17 recorded an exit code and none of them is 3)`.
`check:doc-formula-expressions` first exited 3 (prerequisite:
`@objectstack/lint` not built). After building formula and lint under
the verify lock it exits 0. Control-byte self-scan of the edited file:
no hits. Type-check lanes: NOT MEASURED, no TypeScript touched.
## Changeset
None. `.claude/**` ships in no published package's `files[]`, so this PR
takes `skip-changeset`.
## Acceptance notes
- The dispatch note's premise that references prose lines are width-free
is wrong: `check-skill-line-ratchet.mjs` enforces a 120-byte prose-line
budget on every covered file. Future dispatch notes that suggest "extend
an existing line" should price that budget.
- Rule-body wording choice: 「简报 ⛔ 不列作继承裁决」 forbids listing the posture
as an inherited ruling. It does not forbid the brief from mentioning the
posture as history. That matches the card's Ask.
## 维护者速读(草稿)
- **改了什么**:在 `seat-lifecycle.md` 里改写两行(行数不变):新席位坐席时按 `batch` 默认 3
派发;前任会话拿到的派发口径(串行、`batch` N、「不开新卡」)随它收班失效,收班简报不再把这种口径列成继承裁决。
-
**为什么改**:维护者原话「项目经理重开之后,并发应该回到3,不应该沿用之前的记录。」;此前继任会话把前任简报里的「改为串行派发」当成继承裁决,跑在
`batch` 1。
- **风险与代价(含回滚)**:删掉的两段文字在 `seat-post-protocol.md` 里原样有同义行,不丢规则;回滚 =
revert 本 PR。
- **席位意见**:
- **你要做的**:无需操作;席位契约复审 PASS 后由席位落地。
---
_Generated by [Claude
Code](https://claude.ai/code/session_0148fenvVvyQV9HYxgVDQ33q)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent e2c4e12 commit 0a6024d
1 file changed
Lines changed: 2 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
17 | | - | |
| 17 | + | |
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| |||
37 | 37 | | |
38 | 38 | | |
39 | 39 | | |
40 | | - | |
| 40 | + | |
41 | 41 | | |
42 | 42 | | |
43 | 43 | | |
| |||
0 commit comments