From 01769913b6de54a9db1e1736c6d14b053b8645dd Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 30 Aug 2026 13:56:01 +0000 Subject: [PATCH] fix(pm-dispatch): gate the worktree-rescue step with the three adjudicated fences Fixes #12637 The stale-claim reclaim step prescribed committing a rescue WIP into any dispatch worktree with no liveness precondition, and its message template implied absence claims the rescuer cannot observe. Write the three fences from the 2026-08-28 grading into the standing step: 1. Liveness precondition: any actor passes a liveness/ownership check or an explicit age threshold on the worktree's newest mtime before committing; GitHub-side silence alone is never grounds (a working unpushed seat shows the identical signals; uncommitted changes evidence work, not death). 2. Message boundary: the WIP message states only rescuer-observables (dirty paths, line counts, sha); no present-tense claims about what the seat did or did not run. The INCOMPLETE AND UNREVIEWED header stays, scoped to the rescuer's own act. 3. Mis-hit remedy: a rescue that hits a live seat is corrected additively by that seat in the PR body, never by history rewrite (force-push is forbidden from a dev seat). Funding per the R1 PM disposition (option A, 2026-08-30): the fences land in the headroom freed by #13389 (943 -> 947 of 1005, net +4 faithful spelling); the one in-passage deletion is the last-line-of-defense rationale clause, whose dev-already-dead premise is exactly what fence 1 corrects. No ceiling change, no re-wrap, no unrelated deletions. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01EXxTW8mvPBhoHxmyPZ63de --- .claude/skills/pm-dispatch/SKILL.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index d98a9994b1..d4abba29c2 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -552,10 +552,14 @@ pin 前置等运维细则见 `references/seat-post-protocol.md`)。** 判据二 dev 侧早推分支 —— 远程分支是在飞工作最硬的证据。**死认领回收(stale-claim reclaim)**: 认领 >~24h、承诺分支不存在、无 PR ⇒ 死认领 —— **回收前先救工作树**: -派发 worktree 的未提交改动先 WIP commit 到派发分支并 push,sha 记进回收评论、 -标 INCOMPLETE AND UNREVIEWED(续派者 diff 它,⛔ 不无审续建; -死在编辑中途的 dev 没来得及自己 WIP 推,这一步是最后防线)—— 再评论询问, -静默一窗后摘 assignee(注明原因)回队;有带提交活分支的认领永不回收。 +**存活前置**:向任何派发 worktree 提交前(任何 actor)先过存活/所有权检查, +或对树最新 mtime 过明确年龄阈值;⛔ 不凭 GitHub 侧静默动手 —— 零提交、零推送、无 PR, +在干活但未推的席位给出同一组信号:未提交改动是在飞工作的证据,不是死亡的证据。 +过栏后,派发 worktree 的未提交改动先 WIP commit 到派发分支并 push,sha 记进回收评论、 +标 INCOMPLETE AND UNREVIEWED(抬头限救树者行为,保留;续派者 diff 它,⛔ 不无审续建); +**消息边界**:WIP 信息只写观察到的(脏路径/行数/sha),⛔ 不写席位行为的现在时断言。 +再评论询问,静默一窗后摘 assignee(注明原因)回队;有带提交活分支的认领永不回收。 +**误伤补救**:误伤活席位 ⇒ 令其追加式更正,落 PR 正文不落分支历史(dev 禁 force-push)。 ### 派发