From b4160a57731124806dde7b0ac695d9b762377f99 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 29 Aug 2026 05:08:39 +0000 Subject: [PATCH 1/2] docs(pm-dispatch): an enumeration that cannot say it was truncated may not report clean The two-tier triage inventory told each hourly read-method WHAT to enumerate but never required it to check that it had finished. A list read returning fewer items than `totalCount` proceeded silently, and the scan's own output could not distinguish a complete reading from a partial one. Adds the completeness predicate to the section that owns the three read-methods: compare returned count against `totalCount` on every enumeration, and report `sweep INCOMPLETE` naming the gap when they differ -- never as a clean scan. Paginating alone is only half the answer, because the next list to outgrow the page size reintroduces it. Same standard `check-governed-merges.mjs` already applies to unaudited repos. Paid net-0 against the file's ratchet ceiling by rewrapping five paragraphs whose hard wraps had left orphan continuation fragments; content is byte-identical modulo whitespace. Co-authored-by: Claude Claude-Session: https://claude.ai/code/session_01MnijPVVDakqK2J335JoJtq --- .../references/dispatch-runbook.md | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/.claude/skills/pm-dispatch/references/dispatch-runbook.md b/.claude/skills/pm-dispatch/references/dispatch-runbook.md index dce62f2d00..9af80da265 100644 --- a/.claude/skills/pm-dispatch/references/dispatch-runbook.md +++ b/.claude/skills/pm-dispatch/references/dispatch-runbook.md @@ -44,14 +44,11 @@ sweep 周期的半状态是治愈环自身的缺陷,不是库存;正文自报 P0 ## 同趟成员卡写侧打包(维护者 2026-08-16 限流裁定的对价) 出处:反复撞的限流墙经维护者确认为「GitHub API 池」。同一趟派发/定级覆盖多张成员卡 -时,**锚 -卡承载全量认领(或定级)评论**(会话、分支、文件面、交付物、串行约束全量),成员卡各留 -一行 -指针指向锚卡;标签翻转照旧逐卡执行 —— 省的是评论正文写量,不是状态写入;验收与解锁 -扫描的 -读侧不变,仍逐卡读。**写序:标签翻转只在认领评论写成功之后**,两笔不原子 —— 评论 502 -而标 -签已翻即制造一记真 H2(实测一轮三起);顺序反了就带重试义务,重试未成即回滚标签。 +时,**锚卡承载全量认领(或定级)评论**(会话、分支、文件面、交付物、串行约束全量),成员 +卡各留一行指针指向锚卡;标签翻转照旧逐卡执行 —— 省的是评论正文写量,不是状态写 +入;验收与解锁扫描的读侧不变,仍逐卡读。**写序:标签翻转只在认领评论写成功之后**,两笔 +不原子 —— 评论 502 而标签已翻即制造一记真 H2(实测一轮三起);顺序反了就带重试义务,重 +试未成即回滚标签。 ## 座位贴活性巡查(分诊轮常设项;维护者 2026-08-14) @@ -61,8 +58,7 @@ fire 附带一次: - **扫描面**:`label:pm:seat` 列表页上标题挂 `🟢 ` 的贴;`🟢 Routine` 座位以 调度器读数为准,不入本巡查。 - **判据只认在任者自己的产出**(自有评论/认领/正文编辑,作者与时间戳是平台盖章的硬读 - 数), - ⛔ 不算发给它的跨座位通知 —— 收到消息不是活着的证据。 + 数), ⛔ 不算发给它的跨座位通知 —— 收到消息不是活着的证据。 - **>24h 无自有产出(与既有回收线同一条)⇒ 当场降级**:标题改 `⏳ vacant` + 摘 assignee **同笔**,留证据评论(最后自有产出的时间戳与链接);在飞认领照认领协议由原认领者跟 完。 @@ -98,16 +94,22 @@ fire 附带一次: 职责(finding 集中轮、`Restart-when:` 判据批扫、决策箱回填)。成本靶:干活轮 ≤50k,空转轮 守既有探针预算(契约复审的常设承担归项目总监席人工召唤,见 `contract-review.md`)。 +- **枚举完整性:每条列表读都比对返回数与 `totalCount`,不等就说出来。** 三读法每条枚举返 + 回数 < `totalCount` ⇒ 本轮**没读完**,当场报 `sweep INCOMPLETE` 并点名缺口,⛔ 永不作为干净扫 + 描上报;分页只是一半答案 —— 下一次列表涨过页宽即复发(2026-08-27 实测 `perPage=50` 对 + `totalCount: 51`,一张卡从未被检视,而输出无从分辨读完与没读完)。判据同 + `check-governed-merges.mjs` 对未审计仓:「什么都没找到」与「什么都没看」是两个事实;⛔ 一个 + 谓词,不加第二条代码路径。 + ## 落卡与裁决记录细则(维护者 2026-08-13) 出处(逐字,未译):「还有很多我发现分诊或者决裁后没有改状态,这个也是问题」…「这个也需 要更新项目经理技能」。实测:一张决策卡三个叠加半状态。 - **裁决记录四件补遗**(四件本体在主文件;原子、记录座位全责、维护者裁与代裁同规):① - 鲜 - 度门可内联声明分歧代替调和正文,对过期正文记录的裁决按过期论;② 结果态 = - `pm:queue`/`pm:blocked`/`pm:on-hold`/关闭,永不留挂;④ 已可判定的就地解决,⛔ 不留给未 - 来静默触发。 + 鲜度门可内联声明分歧代替调和正文,对过期正文记录的裁决按过期论;② 结果态 = + `pm:queue`/`pm:blocked`/`pm:on-hold`/关闭,永不留挂;④ 已可判定的就地解决,⛔ 不留给未来静默触 + 发。 - **机械两旗(report-only,归半状态巡查;接线是另一张卡的事,⛔ 不随协议文本改脚本)**:旗 一 —— open 卡标题带决策标记或线程含裁决记录、却仍挂 `needs-user-decision`;旗二 —— `pm:blocked` 卡的 `Blocked-by:` 目标已关闭。「交付了一半的阻塞」是判断不是 grep,归四件 @@ -120,16 +122,14 @@ fire 附带一次: ## 结论当轮执行(维护者 2026-08-14) 出处:维护者裁(逐字,未译)「现在开工派发」;当日实测是成批「建议关闭」复测结论与结论 -表 -躺置多日无人执行。 +表躺置多日无人执行。 - **结论产生的那一轮就执行它。** 复测/审计/裁决得出结论而不在同一轮完成对应的关 闭/换标写 入,本身就是半状态,与半状态家族同列 —— 记录后离场(record-and-walk-away)⛔ 禁止;结论 表同规,表不是交付物,落账才是。 - **无权执行 ⇒ 点名有权者,并当轮把状态搬进对方收件箱**(换标进对方的收件箱视图/决策 - 箱), - ⛔ 不许只留一条评论等人路过 —— 评论不是任何人的收件箱,标签才是。 + 箱), ⛔ 不许只留一条评论等人路过 —— 评论不是任何人的收件箱,标签才是。 - **机械半边**:「交付 PR 已合并而卡仍挂 `pm:dispatched`」由半状态巡查的 report-only 项浮 出(细节以脚本头为权威);旗标是兜底,当轮执行才是修法。 From ac9ceede0145c1f2e63c10637a0b3e4878df1ea2 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 29 Aug 2026 05:19:18 +0000 Subject: [PATCH 2/2] docs(pm-dispatch): fund the enumeration rule with deletion, not re-wrap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The first commit paid for the rule by re-wrapping orphan continuation lines, which the ratchet's governing clause bans outright: 「⛔ re-wrap(折行合并)不得 用作筹行 —— 棘轮治理的是内容体量,行数只是机读代理,新增以删减付账;密度优化仅随净 减内容的 PR 顺带」 (maintainer 2026-08-17). Content volume net-increased while the line count stayed flat -- the exact shape the clause forbids. Every re-wrap is reverted; the five paragraphs are byte-identical to origin/main again. The rule is compressed from six lines to three and appended to the paragraph that already specifies the hourly layer's three read-methods, so it costs no separator line. Paid instead by deleting three lines of genuine duplication, each with a surviving home: - the 落卡分析模板 + 业务写法六项 pointer (2 lines) -- a routing stub whose every element, both ruling dates included, lives in references/decision-analysis.md, which SKILL.md already routes to. - the 惰性判定 back-pointer (1 line) -- references/seat-post-protocol.md states the same lazy/standing split from the other end and points back here for the details. Co-authored-by: Claude Claude-Session: https://claude.ai/code/session_01MnijPVVDakqK2J335JoJtq --- .../references/dispatch-runbook.md | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/.claude/skills/pm-dispatch/references/dispatch-runbook.md b/.claude/skills/pm-dispatch/references/dispatch-runbook.md index 9af80da265..248b89e576 100644 --- a/.claude/skills/pm-dispatch/references/dispatch-runbook.md +++ b/.claude/skills/pm-dispatch/references/dispatch-runbook.md @@ -44,11 +44,14 @@ sweep 周期的半状态是治愈环自身的缺陷,不是库存;正文自报 P0 ## 同趟成员卡写侧打包(维护者 2026-08-16 限流裁定的对价) 出处:反复撞的限流墙经维护者确认为「GitHub API 池」。同一趟派发/定级覆盖多张成员卡 -时,**锚卡承载全量认领(或定级)评论**(会话、分支、文件面、交付物、串行约束全量),成员 -卡各留一行指针指向锚卡;标签翻转照旧逐卡执行 —— 省的是评论正文写量,不是状态写 -入;验收与解锁扫描的读侧不变,仍逐卡读。**写序:标签翻转只在认领评论写成功之后**,两笔 -不原子 —— 评论 502 而标签已翻即制造一记真 H2(实测一轮三起);顺序反了就带重试义务,重 -试未成即回滚标签。 +时,**锚 +卡承载全量认领(或定级)评论**(会话、分支、文件面、交付物、串行约束全量),成员卡各留 +一行 +指针指向锚卡;标签翻转照旧逐卡执行 —— 省的是评论正文写量,不是状态写入;验收与解锁 +扫描的 +读侧不变,仍逐卡读。**写序:标签翻转只在认领评论写成功之后**,两笔不原子 —— 评论 502 +而标 +签已翻即制造一记真 H2(实测一轮三起);顺序反了就带重试义务,重试未成即回滚标签。 ## 座位贴活性巡查(分诊轮常设项;维护者 2026-08-14) @@ -58,11 +61,11 @@ fire 附带一次: - **扫描面**:`label:pm:seat` 列表页上标题挂 `🟢 ` 的贴;`🟢 Routine` 座位以 调度器读数为准,不入本巡查。 - **判据只认在任者自己的产出**(自有评论/认领/正文编辑,作者与时间戳是平台盖章的硬读 - 数), ⛔ 不算发给它的跨座位通知 —— 收到消息不是活着的证据。 + 数), + ⛔ 不算发给它的跨座位通知 —— 收到消息不是活着的证据。 - **>24h 无自有产出(与既有回收线同一条)⇒ 当场降级**:标题改 `⏳ vacant` + 摘 assignee **同笔**,留证据评论(最后自有产出的时间戳与链接);在飞认领照认领协议由原认领者跟 完。 -- 惰性判定(接管冲突时)照旧,本巡查是其常设出口(细则见 `seat-post-protocol.md`)。 ## 分诊席读数成本三则(维护者 2026-08-20) @@ -92,14 +95,10 @@ fire 附带一次: `state=CLOSED` + `since` 与 `Blocked-by:` 反向索引求交,命中走既有回队双查;健康指标 = 逐 标签 `perPage: 1` 只读 `totalCount`。每日层(当日首 fire)= 四仓全量对账 + 归集本就日频的 职责(finding 集中轮、`Restart-when:` 判据批扫、决策箱回填)。成本靶:干活轮 ≤50k,空转轮 -守既有探针预算(契约复审的常设承担归项目总监席人工召唤,见 `contract-review.md`)。 - -- **枚举完整性:每条列表读都比对返回数与 `totalCount`,不等就说出来。** 三读法每条枚举返 - 回数 < `totalCount` ⇒ 本轮**没读完**,当场报 `sweep INCOMPLETE` 并点名缺口,⛔ 永不作为干净扫 - 描上报;分页只是一半答案 —— 下一次列表涨过页宽即复发(2026-08-27 实测 `perPage=50` 对 - `totalCount: 51`,一张卡从未被检视,而输出无从分辨读完与没读完)。判据同 - `check-governed-merges.mjs` 对未审计仓:「什么都没找到」与「什么都没看」是两个事实;⛔ 一个 - 谓词,不加第二条代码路径。 +守既有探针预算(契约复审的常设承担归项目总监席人工召唤,见 `contract-review.md`)。每条枚举 +都比对返回数与 `totalCount`:不等 ⇒ 本轮没读完,报 `sweep INCOMPLETE` 点名缺口,⛔ 永不报干 +净(同 `check-governed-merges.mjs` 对未审计仓的标准);分页只治当次,治不了下次涨过页宽,故一个 +谓词、⛔ 不加第二条代码路径。 ## 落卡与裁决记录细则(维护者 2026-08-13) @@ -107,29 +106,30 @@ fire 附带一次: 要更新项目经理技能」。实测:一张决策卡三个叠加半状态。 - **裁决记录四件补遗**(四件本体在主文件;原子、记录座位全责、维护者裁与代裁同规):① - 鲜度门可内联声明分歧代替调和正文,对过期正文记录的裁决按过期论;② 结果态 = - `pm:queue`/`pm:blocked`/`pm:on-hold`/关闭,永不留挂;④ 已可判定的就地解决,⛔ 不留给未来静默触 - 发。 + 鲜 + 度门可内联声明分歧代替调和正文,对过期正文记录的裁决按过期论;② 结果态 = + `pm:queue`/`pm:blocked`/`pm:on-hold`/关闭,永不留挂;④ 已可判定的就地解决,⛔ 不留给未 + 来静默触发。 - **机械两旗(report-only,归半状态巡查;接线是另一张卡的事,⛔ 不随协议文本改脚本)**:旗 一 —— open 卡标题带决策标记或线程含裁决记录、却仍挂 `needs-user-decision`;旗二 —— `pm:blocked` 卡的 `Blocked-by:` 目标已关闭。「交付了一半的阻塞」是判断不是 grep,归四件 之③,⛔ 不进机械旗。 -- **落卡分析模板 + 业务写法六项**(中文,2026-08-19 裁;业务角度,2026-08-20 裁):模板骨 - 架、六项写法要求与四棱块固定形状全部细则移 `references/decision-analysis.md`。 - **行文纪律**:出处一行(日期 + 原话);实测叙事至多压成一行 —— 故事住在卡上,不进操作 文本。 ## 结论当轮执行(维护者 2026-08-14) 出处:维护者裁(逐字,未译)「现在开工派发」;当日实测是成批「建议关闭」复测结论与结论 -表躺置多日无人执行。 +表 +躺置多日无人执行。 - **结论产生的那一轮就执行它。** 复测/审计/裁决得出结论而不在同一轮完成对应的关 闭/换标写 入,本身就是半状态,与半状态家族同列 —— 记录后离场(record-and-walk-away)⛔ 禁止;结论 表同规,表不是交付物,落账才是。 - **无权执行 ⇒ 点名有权者,并当轮把状态搬进对方收件箱**(换标进对方的收件箱视图/决策 - 箱), ⛔ 不许只留一条评论等人路过 —— 评论不是任何人的收件箱,标签才是。 + 箱), + ⛔ 不许只留一条评论等人路过 —— 评论不是任何人的收件箱,标签才是。 - **机械半边**:「交付 PR 已合并而卡仍挂 `pm:dispatched`」由半状态巡查的 report-only 项浮 出(细节以脚本头为权威);旗标是兜底,当轮执行才是修法。