Skip to content

Commit db357f6

Browse files
docs(pm-dispatch): a scene table of when a seat must ring another seat's mailbox, the missing keys admitted, the mailbox as a seating step (#28716)
<!-- claude-projects-attribution: {"github_login":"marchtian"} --> _Requested by **田騏** · [project thread](https://claude.ai/code/project/chan_01VmuUhXU9SSUzqJYyXSmYSi?thread=cmsg_01VmuUhXU9SSUzqJYyXSmYSiHXKqxUqDPJKZyNHP7BoqTb)_ Fixes #28675 Clause-②: no Metadata-protocol: none Stacked on #28687 — its commits show in this diff until it lands; the seat merges origin/main after it lands. ## 维护者速读 - **改了什么**:把〈信箱 PR〉一节改成「哪种场景必须敲谁的信箱、用哪个键」的场景表,补上 main-red 通知、发版阻塞、解锁、裁决、串行、先落地等门铃;坐席即开信箱并发带巡查编号的上线通知,巡查每轮先读信箱;半态巡查新增 H72,只报告信箱里读不懂的门铃行。 - **为什么改**:维护者原话「感觉车道之间还是不太知道使用 邮箱沟通,综合评估一下哪些场景应该沟通」;卡片引用了这句原话,这正是新增半态行 H72 所需的授权(`instrument-discipline.md` L9)。 - **风险与回滚**:只动席位规则文本和 PM 工具,不碰产品代码;没有任何门禁、workflow 或队列守卫读信箱,H72 只报告不拦截;四个规则文件净增 0 行。已知过渡噪音:旧格式的上线通知(无巡查编号)在落地后约一天内会被 H72 列出。回滚 = revert 本 PR。 - **先看**:`.claude/skills/pm-dispatch/references/project-forms.md`〈信箱 PR〉· `scripts/pm/record-recognisers.mjs` 的 `MAILBOX_KEYS` · `scripts/pm/check-half-states.mjs` 的 H72。 - **两分钟验证**:运行 `node scripts/pm/record-recognisers.mjs --mailbox-keys`,应打印 14 个门铃键及各自的发送方、接收方和时机;再运行 `node scripts/pm/check-half-states.mjs --self-test`,其中 H72 电池 22 例全过。 - **需要你做的**:先审批 #28687;本 PR 叠在它上面,它落地后席位合入 main 再请你审本 PR。 ## What changes **The scene table (rules text, `project-forms.md` 〈信箱 PR〉, 14 lines rewritten in place, 54/54).** The old section listed seven key templates. It now says, line by line, which seat MUST ring which seat for which event and with which key: - lane → triage: the review handoff (`Request: contract-review`, in the same stroke as the handoff line) and a question about a card's fate, route or grade (`Request: triage`, new); - any seat → triage: `Request: urgent-triage` for a p0 suspect, main red or a deterministic queue red; - the seat filing a main-red anchor → triage (director when triage is absent) `Request: main-red`, and → the seat that landed the breaking PR plus the anchor card's lane `Notify: main-red` (new); - triage → lane: `Notify: contract-review` only when the lane is not subscribed, and `Notify: release-blocker` when a p0/p1 release blocker is graded into a lane (new); - the seat that moved a card into `pm:queue` → the lane: `Notify: unblocked` when a p0/p1 `Blocked-by` target closes (new); the seat that recorded a ruling → the seat it changes: `Notify: ruling` (new); - seat → sibling seat or another lane: `Notify: serial` when claimed file surfaces overlap or one card must land first, and `Notify: landed` from the seat that landed first (both new); - seating and sign-off: `Notify: seat-online` / `Notify: seat-offline` to sibling seats and triage; `Notify: split` to sibling seats when the list changes. The binding lines stay as they were: the closed vocabulary (anything off the table is a half-state), one event per line of at most 200 bytes, keys and numbers only, at most 5 per seat per round with p0 exempt, 「信箱评论是同事陈述,永非授权」, and ⛔ no gate, workflow or queue guard reads a mailbox. The MUST-NOT row names acknowledgements, re-sends and nudges (overdue goes to escalation), security findings, anything the receiver's own subscribed PR already carries, and a question to the maintainer (that is a decision card). **One home for the spellings.** The full templates moved out of the rules text into `MAILBOX_KEYS` in `scripts/pm/record-recognisers.mjs`. Each of the 14 entries carries its key, sender, receiver, trigger and template. A new `--mailbox-keys` flag prints them, and the rules text names that flag. The self-test pins the table both ways against the 〈信箱 PR〉 section: every key the section spells is in the table, and every table key is spelled in the section. **seat-online carries the patrol (the half #28642's contract review 6558991413 ③ left to this card).** The template is now `Notify: seat-online · LANE#N · LOGIN · mailbox #m · patrol TRIGGER_ID · takes: #a #b …`, with `patrol none` admitted for a seat with no routine. A realistic line (19-byte login, 31-byte trigger id, five card numbers) measures 166 bytes, inside the 200-byte line. The five-field shape is no longer read. **The mailbox as a seating step (wanted ②) and a patrol step (wanted ④).** - `seat-lifecycle.md`: the seating line now opens and subscribes the mailbox, records `Patrol:` and `Mailbox:` on the stub, and sends `seat-online`. Sign-off deletes the routine, closes the mailbox and sends `seat-offline`. The patrol line in 〈停止条件与待命〉 now reads the mailbox first on every round. - `seat-post-protocol.md`: the stub line adds `Mailbox:` next to `Patrol:`. **H72, report-only (wanted ⑤).** `check-half-states.mjs` lists a mailbox comment from the last 24 hours that the doorbell reader does not read: - through the ONE reader: it imports `mailboxEvents` from `record-recognisers.mjs` lazily inside the sweep, because a static import would be a cycle; - it reads comments only on open `pm:mailbox` PRs, with paged reads of up to 3 pages, and leaves an incomplete window unjudged; - the finding names the 〈信箱 PR〉 remedy, says not to re-send, and points at `--mailbox-keys`; - its sweep clause is `Mailbox doorbells (H72): …`, in the inventory band. **Two consequent fixes outside the claim surface (declared deviations).** - `landing-operations.md` L80 spelled the breaking-PR ring as `Request: main-red`; this PR makes it `Notify: main-red`, because the old spelling would now be refused as off-table. - `mailbox-open.mjs` said "one of the seven doorbell keys" in its header and in the mailbox body it writes; it now says "one of the doorbell keys" and names `--mailbox-keys`. **Net line growth per rules file (all against the stacked base 8eb102f).** | File | Before | After | Net | |---|---|---|---| | `references/project-forms.md` | 54 | 54 | 0 | | `references/seat-lifecycle.md` | 96 | 96 | 0 | | `references/seat-post-protocol.md` | 88 | 88 | 0 | | `references/landing-operations.md` | 101 | 101 | 0 | The table fits at zero net lines because the templates moved to code. Dropped from the rules text: the verbatim templates, which the tool now prints; the 「本席复审档不可用,一 head 一次」 clause, now carried by "in the same stroke as the handoff line" plus the no-re-send row; the 「开轮时」 qualifier on split; and 「Routine 席唤不醒,读信箱靠巡查」, now carried by the patrol line. Every rules line is at most 120 bytes. ## Tests - `record-recognisers` self-test: 350 cases pass. The doorbell battery has 44 cases, against a floor raised 27 → 40. It adds: - each new key's reading, plus `patrol none`; - a refusal for the old five-field seat-online; - the both-ways table pin, and a check that the section names `--mailbox-keys`; - every template sent verbatim is unreadable, so placeholders cannot pass as values; - `--mailbox-keys` output pinned exactly; - invented keys (`surface`, `take`) and a `main-red cleared` line refused; - an end-to-end case through `check-half-states.mjs`'s H72 functions, proving there is one reader. - `check-half-states` self-test: 5185 cases pass. The new battery `H72 mailbox off-table bells` has 22 cases, floor 20. The seat-window pin "every other comment read names its page" goes 3 → 4 for the new paged read. - `mailbox-open` self-test: 71 cases pass. ## Acceptance notes - **Wanted ③ (epic seats get mailboxes) is not built.** `mailbox-open.mjs`'s `seatKey` refuses an `epic:` seat spelling, so the opener cannot open one, and `fleet-roster.mjs` has no epic rows to read a `Mailbox:` line from. Doing it needs a `seatKey` change, a roster change and a rules line. That is more than a small change, so per the order it is an out-of-scope finding for the seat to file. The seat also decides whether `Fixes #28675` stays or becomes `Part of`. - **Transition noise.** A five-field `seat-online` sent before this lands is unreadable after it lands, so H72 lists such lines for about a day; nothing blocks on them. A read-only probe on the live repo found off-table lines today on mailboxes #28284, #28379, #28481, #28646 and #28672. They are old-shape seat-online lines, prose appended after a key, a free-form question to triage, and one ruling line over 200 bytes. - **Not admitted:** `main-red cleared` (the wanted list does not ask for it; the anchor card's close is on the card the receiver was rung about), and the invented `take`/`surface` spellings (their events are covered by `serial`/`landed`/`split`). - **Stale comments in frozen tooling.** `scripts/pm/dispatch-gates.data.mjs` (around L505) and `scripts/pm/dispatch-gates.self-test.mjs` (around L7573) still say "seven" doorbell keys/templates in comments. Both are frozen under instrument-discipline, so they are left unchanged; nothing reads those comments. - The `// dispatch-gates: self-test-reads` marker in `record-recognisers.mjs` stays on line 77, where the dispatch-gates census pins it. - Closing stale per-login mailboxes is #27890, not this card. ## Verification Gates were derived with `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` at 901e99e: 55 commands, all run, every exit code recorded before any pipe. The `--ran` reconciliation reports 55 derived, 55 run, 0 NOT-MEASURED, 0 UNRUN. `check:doc-formula-expressions` first exited 3 (prerequisite not met: `@objectstack/formula` was not built in this worktree). After `pnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lint` (exit 0) it exited 0, and that is the exit recorded. The rules-text ratchets passed: - `check:pm-skill-ratchet`, `check:pm-skill-id-lint` and `check:skill-frame-sync`, all in the derived list; - `check:pm-governed-prose`, run separately: exit 0. <details><summary>Recorded exit codes (55)</summary> ``` node scripts/check-closing-keyword-parity.mjs :: exit 0 node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0 node scripts/check-comment-mask-corpus.mjs :: exit 0 node scripts/check-declaration-mirrors.mjs :: exit 0 node scripts/check-declaration-mirrors.mjs --self-test :: exit 0 node scripts/check-issue-citations.mjs :: exit 0 node scripts/check-platform-checklist-watchdog.mjs :: exit 0 node scripts/check-platform-checklist-watchdog.mjs --self-test :: exit 0 node scripts/check-release-section-coverage.mjs :: exit 0 node scripts/check-release-section-coverage.mjs --strict :: exit 0 node scripts/check-self-test-wired.mjs :: exit 0 node scripts/check-self-test-wired.mjs --self-test :: exit 0 node scripts/check-self-test-workflow-commands.mjs :: exit 0 node scripts/check-self-test-workflow-commands.mjs --self-test :: exit 0 node scripts/check-whole-set-label-write.mjs :: exit 0 node scripts/check-whole-set-label-write.mjs --self-test :: exit 0 node scripts/ci/plan-test-core-shards.mjs --self-test :: exit 0 node scripts/ci/scheduled-full-run.mjs --self-test :: exit 0 node scripts/pm/bare-root-worklist.mjs --self-test :: exit 0 node scripts/pm/board-snapshot.mjs --self-test :: exit 0 node scripts/pm/check-harness-current.mjs --self-test :: exit 0 node scripts/pm/sweep-closed-cards.mjs --self-test :: exit 0 node scripts/render-release-coverage-anchor.mjs --self-test :: exit 0 pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0 pnpm check:agent-test-spelling :: exit 0 pnpm check:bash32-floor :: exit 0 pnpm check:ci-filter-parity :: exit 0 pnpm check:cli-command-ids :: exit 0 pnpm check:closing-target-claim :: exit 0 pnpm check:commit-card-trailers :: exit 0 pnpm check:cross-package-test-inputs :: exit 0 pnpm check:doc-authoring :: exit 0 pnpm check:driver-memory-census :: exit 0 pnpm check:entry-guard :: exit 0 pnpm check:gitlink-declared :: exit 0 pnpm check:issue-citations :: exit 0 pnpm check:nul-bytes :: exit 0 pnpm check:parse-guard :: exit 0 pnpm check:partof-closing-keyword :: exit 0 pnpm check:platform-checklist :: exit 0 pnpm check:pm-governed-merges :: exit 0 pnpm check:pm-half-states :: exit 0 pnpm check:pm-post-stamped :: exit 0 pnpm check:pm-record-recognisers :: exit 0 pnpm check:pm-skill-id-lint :: exit 0 pnpm check:pm-skill-ratchet :: exit 0 pnpm check:pnpm-filter-targets :: exit 0 pnpm check:pnpm-flag-spellings :: exit 0 pnpm check:ratchet-remedy-authority :: exit 0 pnpm check:refd-timer-probe :: exit 0 pnpm check:scripts-symbol-anchors :: exit 0 pnpm check:single-claim-paths :: exit 0 pnpm check:skill-frame-sync :: exit 0 pnpm check:watch-hint-literal :: exit 0 pnpm check:pm-dispatch-gates :: exit 0 ``` </details> <details><summary>--ran reconciliation tail</summary> ``` The 55 is THIS tree's derivation, recomputed in this process from the same expression --commands prints — never read back from your record. A family you never wrote down is still counted, which is what an arithmetic over your own list cannot do. EXIT CODES — all 55 accounted famil(ies) carry one, so the NOT-MEASURED count above is DERIVED from them. ⛔ This tool ran none of them; it read the codes you recorded. ⛔ This answers ONE link: what this card DERIVES against what you RAN. It is not a complete account of what CI runs on the PR — the 43 artifact-roster famil(ies), the 11 declared WIDE-population famil(ies), the 11 pending-changeset famil(ies), the unreachable listing, the 1 path-scheduled CI job(s), the type-check lanes and the always-runs tail are each outside the derived total, each printed under its own heading by a run without --ran. ✓ dispatch-gates --ran: 55 derived famil(ies) accounted for — 55 run, 0 NOT-MEASURED (a DERIVED zero — all 55 recorded an exit code and none of them is 3). ``` </details> <details><summary>node scripts/pm/record-recognisers.mjs --mailbox-keys (exit 0)</summary> ``` (header line, which names the To: line, omitted) one event, one line of at most 200 bytes, keys and numbers only; anything else is a half-state. Request: contract-review · PR #n · head SHA · REASON lane → triage; in the same stroke as the PR's `Contract-review-handoff:` line (the seat's own review tier is unavailable) Request: triage · #n · ONE-LINE-QUESTION lane → triage; a question about a card's fate, route or grade Request: urgent-triage · #n · ONE-LINE-CRITERION any seat → triage; a p0 suspect, main red, a deterministic queue red Request: main-red · CHECK-NAME · anchor #n · suggested lane X the seat that files the main-red anchor card → triage, or the director when triage is absent; the anchor card is filed Notify: main-red · anchor #n · breaking PR #m the seat that files the main-red anchor card → the seat that landed the breaking PR, and the anchor card's lane; the anchor card is filed Notify: contract-review PASS or FAIL · PR #n · record ID triage → lane; with the record, only when the lane is not subscribed to the PR Notify: release-blocker · #n triage → the lane it is graded into; a p0/p1 release blocker is graded into a lane Notify: unblocked · #n · p0 or p1 the seat that moved the card to `pm:queue` (triage or an epic seat) → the card's lane seats; a p0/p1 card's `Blocked-by` target closed Notify: ruling · #n · LETTER · record ID the seat that recorded a maintainer ruling → the seat whose card or draft it changes; the ruling is recorded Notify: serial · #a behind #b a seat → a sibling seat or another lane; claimed file surfaces overlap, or one card must land first Notify: landed · #b the seat whose card landed first → the seat a `serial` held behind it; the card a `serial` named lands Notify: seat-online · LANE#N · LOGIN · mailbox #m · patrol TRIGGER_ID · takes: #a #b … the seating session (or a forced takeover, for the walled account) → the lane's sibling seats and triage; at seating Notify: seat-offline · LANE#N · in-flight: … · stay-behind: … · brief ID the signing-off session → the lane's sibling seats and triage; at sign-off Notify: split · LANE#N · takes: … · leaves: … a seat of a multi-seat lane → its sibling seats; at round open, only when the list changed Protocol text (who MUST ring, and what is never rung): pm-dispatch references/project-forms.md 〈信箱 PR〉. ``` </details> 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 3e54f99 commit db357f6

7 files changed

Lines changed: 444 additions & 71 deletions

File tree

‎.claude/skills/pm-dispatch/references/landing-operations.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@
7777
- 认领并派止血,⛔ 不等分诊首触、不等维护者;首触事后补,可改域、⛔ 不改动作。
7878
- 首道止血 = 回退引入红的提交(主干末绿与首红之间找),根因另立卡。
7979
- p0 fix-forward 止血跳队,限机械、根因已核实;维护者可按 governed 例外人工直合一行修复。
80-
- 止血非机械 ⇒ 锚卡点名归属车道、敲其信箱 `Request: main-red`;根因卡恒归该车道。
80+
- 止血非机械 ⇒ 锚卡点名归属车道、敲其信箱 `Notify: main-red`;根因卡恒归该车道。
8181
- main-red 约定②:一个失败 check 只锚一张卡,先立者赢,后见者评论到锚卡,⛔ 不另立。
8282
- 约定③:锚卡一轮分诊(~60 分钟)无人认领 ⇒ 分诊与总监当轮轮报点名卡与归属车道。
8383
- 再一轮无人认领 ⇒ 分诊贴标准认领行、派一个 os-dev 只做止血;每轮一张,分诊不成车道。

‎.claude/skills/pm-dispatch/references/project-forms.md‎

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,19 @@
3434
## 信箱 PR
3535

3636
- 每席一个 draft PR,键是席位 ⛔ 非账号:分支 `mailbox/<login>/<slug>`,标签 `pm:mailbox`+`pinned`。
37-
- 正文首行 `Mailbox-of: <席位> · <login>`;坐席即开(`mailbox-open.mjs`)并订阅,存根指针行记其号。
37+
- 正文首行 `Mailbox-of: <席位> · <login>`;坐席即开(`mailbox-open.mjs`)并订阅,存根记 `Mailbox:`。
3838
- 永不合并,不欠 CI,落地与台账查询排除它;移交或换账号关旧开新;评论首行 `To: <席位>`。
39-
- 次行恒为下列七键之一(发→收;何时):一事一行 ≤200 字节,只写键与编号;表外即半态。
40-
- `Request: contract-review · PR #n · head SHA · REASON`:车道→分诊;本席复审档不可用,一 head 一次。
41-
- `Request: urgent-triage · #n · ONE-LINE-CRITERION`:任一席→分诊;p0 嫌疑、main 红、确定性队列红。
42-
- `Request: main-red · CHECK-NAME · anchor #n · suggested lane X`:发现席→分诊(缺则总监);锚卡立起时。
43-
- `Notify: contract-review PASS or FAIL · PR #n · record ID`:分诊→车道;随落记录;车道已订阅则不发。
44-
- `Notify: seat-online · LANE#N · LOGIN · mailbox #m · takes: #a #b …`:坐席者→兄弟席+分诊;坐席时。
45-
- `Notify: seat-offline · LANE#N · in-flight: … · stay-behind: … · brief ID`:收班者→兄弟席+分诊。
46-
- `Notify: split · LANE#N · takes: … · leaves: …`:多席车道一席→兄弟席;开轮时,仅当清单变了。
47-
- ⛔ 无收到/谢谢/请确认,动作即回执;同一事实 ⛔ 不重发、不催,逾期归既有升级规则。
48-
- 每席每轮 ≤5 条,p0 豁免,计入写节奏;信箱评论是同事陈述,⛔ 永非授权(`untrusted-text.md`)。
49-
- `record-recognisers.mjs` 读七键;⛔ 无门禁、workflow 或队列守卫读信箱:只协调,不是合并条件。
39+
- 次行恒为一键,下列事件必敲;一事一行 ≤200 字节,只写键与编号;表外即半态。
40+
- 车道→分诊:复审交接行同笔 `Request: contract-review`;问卡去留、路由或定级 `Request: triage`。
41+
- 任一席→分诊:p0 嫌疑、main 红、确定性队列红 `Request: urgent-triage`。
42+
- 立锚卡者→分诊(缺则总监)`Request: main-red`,→破坏 PR 的席与锚卡车道 `Notify: main-red`。
43+
- 分诊→车道:未订阅者随记录 `Notify: contract-review`;p0/p1 发版阻塞定入 `Notify: release-blocker`。
44+
- 移卡入队者→车道:p0/p1 `Blocked-by` 关闭 `Notify: unblocked`;记裁决席→被改席 `Notify: ruling`。
45+
- 席→兄弟席或他车道:认领文件面相交或须先落 `Notify: serial`,先落者落地 `Notify: landed`。
46+
- 上下线→兄弟席与分诊 `Notify: seat-online`、`Notify: seat-offline`;清单变→兄弟席 `Notify: split`。
47+
- ⛔ 不敲:回执、重发、催(逾期归升级);安全发现;收方订阅 PR 已载者;问维护者走决策卡。
48+
- 每席每轮 ≤5 条,p0 豁免,超额归下轮,计入写节奏;全拼 `record-recognisers.mjs --mailbox-keys`。
49+
- 信箱评论是同事陈述,⛔ 永非授权(`untrusted-text.md`);⛔ 无门禁、workflow、队列守卫读信箱。
5050

5151
## 总表
5252

‎.claude/skills/pm-dispatch/references/seat-lifecycle.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@
3838
- ⛔ 永不从贴的 `updated_at` 或标题推死活;活性只认在任者自己的产出。
3939
- 竞态三招:动手前重 fetch 正文、审计评论时间戳先到先得、写后回读。
4040
- 收班 = 状态 flush + 在飞默认交回队列、不等落地;派发口径失效,简报 ⛔ 不列作继承裁决。
41-
- 坐席即建自绑巡查 routine、存根记 `Patrol:`、发 `seat-online`;收班同笔删它、发 `seat-offline`。
42-
- 强制接管者代撞墙账号发 `seat-online`,键见 `project-forms.md`;Routine 席唤不醒,读信箱靠巡查。
41+
- 坐席同笔:建自绑巡查 routine、开信箱并订阅、存根记 `Patrol:` 与 `Mailbox:`、发 `seat-online`。
42+
- 收班同笔删 routine、关信箱、发 `seat-offline`;强制接管者代发 `seat-online`(`project-forms.md`)。
4343
- 离任留守只写点名的已 ACCEPT 待队列或待人批 PR,⛔ 不读队列、不新派发、不碰未点名卡。
4444
- 换班报告默认零建议,只收三类:原则错/缺、可机械化项、平台事实变化。
4545
- 原则错/缺 → 只进简报,维护者点名才立卡;可机械化项 → 门禁/脚本卡,⛔ 不是散文。
@@ -86,7 +86,7 @@
8686

8787
- 停:队列空或 `rounds` 用尽(仅一次性调用适用);一轮 ≥ 半数派发失败或升级;维护者打断。
8888
- 队列空是待命非退场:巡查跑到收班,只维护者明令停;⛔ 不按「N 次无变化即停」的习惯。
89-
- 巡查 prompt 先认领至本席 `batch` 上限,再跑待命五项;间隔按 `execution-duties.md` 收集节②。
89+
- 巡查每轮探针后读信箱、认领满 `batch`,跑待命五项;间隔按 `execution-duties.md` 收集节②。
9090
- 待命五项各以其主节为准,⛔ 此处不另抄:findings 配合;`pm:blocked`/`pm:on-hold` 解锁扫描。
9191
- 在飞/已入队 PR 跟到 MERGED;决策箱仅在报告中列出 ⛔ 不 nag;跨车道备忘跟进。
9292

‎.claude/skills/pm-dispatch/references/seat-post-protocol.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
- 审计与认领评论的作者字段是平台盖章的硬读数,接管仲裁与活性判定优先用它对账正文。
1616
- 班次叙事 ⛔ 不进贴正文:逐卡状态在卡与 PR 上必填,轮次合计走轮次报告。
1717
- 存根四项:在座账号与项目 · 上任时刻 · 热文件串行队 · 指针行「姿态台账住项目」。
18-
- 加 `Patrol:` 行,可选撞墙注记(预计 HH:MM 恢复);存根只在坐席、串行队改、撞墙、移交刷新。
18+
- 加 `Patrol:`、`Mailbox:`,可选撞墙注记(HH:MM 恢复);坐席、串行队改、撞墙、移交才刷存根。
1919
- 接管压缩:接任 PM 把交接的有效内容按四段模板重述为新正文,编辑历史即存档。
2020
- 旧账留在上一版 body revision,审计评论带版本指针(哪一版、何时)。
2121
- 热文件串行队是跨轮跨班次的常设事实:文件 → 有序卡片清单 → 每张卡认领的区域。
@@ -63,7 +63,7 @@
6363
- ⛔ 不取会话看起来起来了;零产出即技术性失败。
6464
- 回滚 = `delete_trigger` + 清空座位登记 + 失败注记。
6565
- 档位按职责挑,⛔ 不按重要性挑;Routine 席的档位与 cron 是维护者在 UI 上的可调项。
66-
- 项目席巡查默认每小时(总监席无),现值只记存根 `Patrol: TRIGGER_ID · CRON`;放宽须写理由。
66+
- 项目席巡查默认每小时(总监席无);存根记 `Patrol: TRIGGER_ID · CRON`、`Mailbox: PR #n`,放宽注由。
6767

6868
## Epic 车道收尾与僵尸回收
6969

0 commit comments

Comments
 (0)