diff --git a/.claude/skills/pm-dispatch/references/contract-review.md b/.claude/skills/pm-dispatch/references/contract-review.md index 9735ded6a0..398c4a456b 100644 --- a/.claude/skills/pm-dispatch/references/contract-review.md +++ b/.claude/skills/pm-dispatch/references/contract-review.md @@ -15,17 +15,19 @@ 话:「中期把闸门迁到 PR review 的 Request Changes 上 我觉得没必要」): 闸门载体保持本标签,⛔ 不迁 PR review / Request Changes、不为迁移留门;挂与清皆按 标签纪律的 read-modify-write 硬步骤写。 +- **重挂前先查裁决**:闸门标签缺失 ⇒ 先 grep 卡片评论找现行复审结论 —— PASS 评论 + 标 + 签缺失 + PR head 自复审后未动 = **已复审清标**,不是被剥;仅当 head 在结论之后移动、或根 + 本无结论时才重挂(复审载体是卡上一行结论,`get_reviews` 读空不是「未复审」的证据)。 ## 复审资格与归属 - **资格** —— ① 跑在契约复审档位,硬条件,认定只认降档保险丝的机读;② 非该卡派发 席,已从资格条件放宽为路径偏好(维护者 2026-08-21,原 - 话:「你自己就是 Fable,自己就可以审核」): - 经同一机读证实达档的派发席,可对自派的卡执行契约复审并清标(审的 - 是低档实现者的契约增量,非自身产物 —— 派发席不写代码);放宽豁免的是独立席位,不 - 是复审本身 —— 一行结论照样先落卡、后清标,主文件「⛔ 禁止自查放行」禁的是免复审 - 直 - 放,不禁本路径;低于契约复审档位的席照旧留标等待。 + 话:「你自己就是 Fable,自己就可以审核」): 经同一机读证实达档的派发席,可对自派的卡 + 执行契约复审并清标(审的是低档实现者的契约增量,非自身产物 —— 派发席不写代码);放 + 宽豁免的是独立席位,不是复审本身 —— 一行结论照样先落卡、后清标,主文 + 件「⛔ 禁止自查放行」禁的是免复审直放,不禁本路径;低于契约复审档位的席照旧留标等 + 待。 - **归属**:常设 = skills 席自绑小时钟(维护者 2026-08-23:「要不还是你挂个定时处理审核吧」), 每小时一轮即天然攒批;分诊席达档时(经同一机读证实)照旧可清。只审契 约增量 diff、结论一行写在卡上、PASS 双载体同笔清标(PR 与卡各按标签纪律硬步骤)并 @@ -33,16 +35,14 @@ ## 降档保险丝(机读) -- 子轮开场**必调一次 `get_session`**(claude-code-remote MCP,无参)读 - `external_metadata.last_served_model`,⛔ 自述档位不是读数(静默降档腐蚀的恰是自 - 述;实测与配置档陷阱见 platform-readings);读数 ≠ `CONTRACT_REVIEW_TIER` ⇒ 该子 - 轮整体跳过、标签原样留置 —— 卡在队列外等待是安全态。 -- **保险丝只对座位自会话有效**:`mode:subagent` 里的 `get_session` 量的是**派发会 - 话**(实测:钉在地板档的子代理读回父会话的档位,`session_context.model` 与 - `last_served_model` 一致只是同一来源引用两次,⛔ 不作互证)—— subagent 的实际服役 - 档位现无法对 `CONTRACT_REVIEW_TIER` 自证,条款②的 `mode:subagent` 派发因此恒保留 - `needs:contract-review` 走复审链,「派发已在地板」的免审跳过仅座位自会话成立。 - **⛔ 反模式:派更高档位子 agent 去执行契约复审** —— 看似满足档位,实为构造上不可 - 测量(多次实测:子代理读回父会话档位并拒绝出裁决)。 +- 子轮开场**必调一次 `get_session`**(claude-code-remote MCP,无参)读 `external_metadata.last_served_model`,⛔ + 自述档位不是读数(静默降档腐蚀的恰是自述;实测与配置档陷阱见 platform-readings);读数 ≠ + `CONTRACT_REVIEW_TIER` ⇒ 该子轮整体跳过、标签原样留置 —— 卡在队列外等待是安全态。 +- **保险丝只对座位自会话有效**:`mode:subagent` 里的 `get_session` 量的是**派发会话**(实测:钉在 + 地板档的子代理读回父会话的档位,`session_context.model` 与 `last_served_model` 一致只是同一来源 + 引用两次,⛔ 不作互证)—— subagent 的实际服役档位现无法对 `CONTRACT_REVIEW_TIER` 自证,条 + 款②的 `mode:subagent` 派发因此恒保留 `needs:contract-review` 走复审链,「派发已在地板」的免审 + 跳过仅座位自会话成立。 **⛔ 反模式:派更高档位子 agent 去执行契约复审** —— 看似满足 + 档位,实为构造上不可测量(多次实测:子代理读回父会话档位并拒绝出裁决)。 - 契约复审 ⛔ 不适用额度耗尽豁免降档(豁免的对象是派发;复审的存在意义就是补偿一次 低于地板的派发)。 diff --git a/.claude/skills/pm-dispatch/references/state-machine.md b/.claude/skills/pm-dispatch/references/state-machine.md index 46e756035b..c70e070a14 100644 --- a/.claude/skills/pm-dispatch/references/state-machine.md +++ b/.claude/skills/pm-dispatch/references/state-machine.md @@ -8,8 +8,9 @@ `needs-user-decision` 互斥;成因恒是半写的转换,故**一笔 replace**、⛔ 不 add。 - **`pm:queue` 腐化视界 3 天**:队列是唯一「等待不是一种状态」的态,越界即欠**一次显 式转换**(派发 / 转 `needs-user-decision` / 停放 / 撤单 / 改写前提),⛔ 不是排期。 -- **`needs:contract-review` 双载体**:卡与交付 PR 两边都挂好、挂与清各一笔、两向都读 - 回(被剥不是红灯是放行);卡侧先挂而 PR 尚不存在是合法中间态,不是半写。 +- **`needs:contract-review` 双载体**:卡与交付 PR 两边都挂好、挂与清各一笔、两向都读回(被剥不 + 是红灯是放行);卡侧先挂而 PR 尚不存在是合法中间态,不是半写;**交接即标签** —— 只写 + 交接评论而不同笔挂标 = 空交接,收件箱只认标签。 ## `pm:on-hold` —— 重启条件、触发文件与放行双查 @@ -19,18 +20,17 @@ - **机会主义重启的触发文件**走同族正典行 **`Restart-touch: <仓内相对路径>`**(一行一 路径,大小写敏感、行锚定,与 `Blocked-by:`/`Restart-when:` 同双通道;值须为 tracked 文件)—— 喂巡查 H17 的触发文件索引;存量 hold ⛔ 不迁移、不产 finding。 -- **放行双查(两查皆机械、零判断)**:① 只对**最近一次** `pm:on-hold`/`pm:blocked` 转 - 换评论所载条件放行,⛔ 永不对更早的 blocker —— 已放行过的条件是花掉的,再点火就把 - 过期前提立成现行;② 该转换评论之后卡上有**更新的 merged PR** ⇒ 拒绝放行。 +- **放行双查(两查皆机械、零判断)**:① 只对**最近一次** `pm:on-hold`/`pm:blocked` 转换评论的条 + 件放行,⛔ 永不对更早的 blocker;② 该评论之后卡上有**更新的 merged PR** ⇒ 拒绝放行。 ## `pm:blocked` —— 正典标记、完工停放(`Unlock-action:`)、上游已关 -- **正典标记 = 行首 `Blocked-by: #N`(跨仓 `owner/repo#N`)、无装饰**;句中提及**刻意 - 拒收** —— 指令是行,提及是散文。 -- **工已完、PR 被外部门禁缺陷卡住的卡同用本态,⛔ 不设新标签**:`Blocked-by:` 指向门禁 - 缺陷卡,正文另加机器可读行 `Unlock-action: re-check PR #M` —— 解锁扫描据此把解锁 - 动作从「回队重派」换成「重查该 PR 落地」(回队前提检查见到已完工的 open PR 即按落 - 地工作处理,⛔ 永不给完工卡重派 dev);停放 PR 正文须点名门禁卡,让链路两端可读。 +- **正典标记 = 行首 `Blocked-by: #N`(跨仓 `owner/repo#N`)、无装饰**;句中提及**刻意拒收** —— 指 + 令是行,提及是散文。等「PR 合并」或「发布且 pin 覆盖」的卡同理:指一张在该刻关闭的 + 卡(等发布 = pin-bump 杂事卡),⛔ 不扩词表;`Part of` 型 PR 的跟踪卡不在该刻关闭,不可用。 +- **工已完、PR 被外部门禁缺陷卡住的卡同用本态,⛔ 不设新标签**:`Blocked-by:` 指向门禁缺陷 + 卡,正文另加机器可读行 `Unlock-action: re-check PR #M`,解锁扫描把解锁动作从「回队重派」换 + 成「重查该 PR 落地」,⛔ 永不给完工卡重派 dev;停放 PR 正文须点名门禁卡。 - **上游已关 ⇒ 先重新推导再决定**:改判是否有**新**阻塞并改写该行,⛔ 不反射式放行;正 文是正典家 —— 新 blocker 停评论、正文留已关旧目标,巡查报 stale 并要求迁回。