From 00f5c09bde7dbdef3a899ffeb2aa89fa538b0031 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 23 Aug 2026 12:41:04 +0000 Subject: [PATCH] =?UTF-8?q?docs(pm-dispatch):=20hang=20the=20keys=20beside?= =?UTF-8?q?=20the=20contract-review=20gate=20=E2=80=94=20constant=20points?= =?UTF-8?q?=20at=20its=20rulebook,=20operative=20clauses=20grep-able=20by?= =?UTF-8?q?=20the=20constant,=20rate-limit=20situation=20index?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Discoverability text only; the review-chain mechanism, the subagent fuse, and CONTRACT_REVIEW_TIER's value and semantics are untouched. - dispatch-gates.mjs: one JSDoc line beside CONTRACT_REVIEW_TIER pointing at the SKILL.md review-chain clauses (the seat greps the constant; the constant now says where its rulebook lives). - SKILL.md, the seat-session-only fuse passage: the subagent-cannot-self-verify clause now names the constant, so a grep for CONTRACT_REVIEW_TIER lands on the operative sentence; same passage gains a one-sentence loud anti-pattern ban (dispatching a higher-tier subagent to PERFORM the contract review is unmeasurable by construction) — both in-sentence, line-neutral. - SKILL.md 平台读数纪律: one situation-index line — rate-limited ⇒ read GET /rate_limit (zero quota) for the exact reset, never blind-wait; degraded WebFetch read and details stay in platform-readings. - Ratchet payment: the guardrail clause restating worktree-first for dev agents is deleted — it self-declared its redundancy (hook-enforced; restated in the os-dev definition; carried by the in-file mechanical-guard index row). 682/682 held; date + bracketed-quote inventories byte-identical before/after. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01RMTpSRF5CjMmQBFfPtPCwJ --- .claude/skills/pm-dispatch/SKILL.md | 6 +++--- scripts/pm/dispatch-gates.mjs | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index 27e89c24c1..25148ad1f9 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -118,6 +118,7 @@ session 的 `Claim:` 评论(拼写见「认领」,车道盘点已取)—— 标 `git show origin/main:`),⛔ 不用共享检出的工作树 —— 它的 HEAD由别的 agent 摆布。 - **零命中必须用确定存在的邻近词反查**,否则零命中不成立;仓不可达同理,⛔ 不因「查不了」当「查 过了干净」—— 在 issue 上贴出给对应座位的现成命令,等读数回贴再派。 +- **GitHub 限流 ⇒ 先 `GET /rate_limit`(零配额)取精确 reset 与余量,⛔ 不盲等**;公开仓降级 WebFetch 读法与限流细则见 platform-readings。 - **定时器文本纪律(一切自设定时器适用)**:已删除的定时器仍会投递,投递时文本可能落后现实数 轮 —— 每一枪**以「幂等 —— 动手前先重读状态」开头**,只写关键判据(「若 X 则 Y」),其余指针化 (座位贴为唯一状态源);⛔ 不写结论、不含未经重读即可执行的祈使句。 @@ -519,7 +520,7 @@ os-zhuang 审核。我的手机github 应该会收到推送消息吧」;当日 - **`needs:contract-review` 复审链**:复审资格 —— ① 跑在契约复审档位,硬条件,认定只认降档保险丝的机读;② 非该卡派发席,已从资格条件放宽为路径偏好(维护者 2026-08-21,原话:「你自己就是 Fable,自己就可以审核」):经同一机读证实达档的派发席,可对自派的卡执行契约复审并清标(审的是低档实现者的契约增量,非自身产物 —— 派发席不写代码);放宽豁免的是独立席位,不是复审本身 —— 一行结论照样先落卡、后清标,上条「⛔ 禁止自查放行」禁的是免复审直放,不禁本路径;低于契约复审档位的席照旧留标等待。归属:常设 = 分诊席(Routine 模型由维护者在 Routines UI 钉在契约复审档位),分诊轮子轮清该标签仍是默认清标路径(达档席自清仅是后备)—— 只审契约增量 diff、结论一行写在卡上、PASS 双载体同笔清标(PR 与卡各按标签纪律硬步骤)并清 review request 或留一条 review 评论,标清后卡方可入队;每小时一轮即天然攒批;过渡期(分诊 Routine 未建成前)由 skills 席代行。**降档保险丝**: 子轮开场**必调一次 `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 的实际服役档位现无法自证,条款②的 `mode:subagent` 派发因此恒保留 `needs:contract-review` 走复审链,「派发已在地板」的免审跳过仅座位自会话成立。契约复审 ⛔ 不适用额度耗尽豁免降档(豁免的对象是派发;复审的存在意义就是补偿一次低于地板的派发)。**载体不迁移**(维护者 2026-08-18,原话:「中期把闸门迁到 PR review 的 Request Changes 上 我觉得没必要」):闸门载体保持本标签,⛔ 不迁 PR review / Request Changes、不为迁移留门;挂与清皆按标签纪律的 read-modify-write 硬步骤写。 + **保险丝只对座位自会话有效**:`mode:subagent` 里的 `get_session` 量的是**派发会话**(实测:钉在地板档的子代理读回父会话的档位,`session_context.model` 与 `last_served_model` 一致只是同一来源引用两次,⛔ 不作互证)—— subagent 的实际服役档位现无法对 `CONTRACT_REVIEW_TIER` 自证,条款②的 `mode:subagent` 派发因此恒保留 `needs:contract-review` 走复审链,「派发已在地板」的免审跳过仅座位自会话成立。**⛔ 反模式:派更高档位子 agent 去执行契约复审** —— 看似满足档位,实为构造上不可测量(多次实测:子代理读回父会话档位并拒绝出裁决)。契约复审 ⛔ 不适用额度耗尽豁免降档(豁免的对象是派发;复审的存在意义就是补偿一次低于地板的派发)。**载体不迁移**(维护者 2026-08-18,原话:「中期把闸门迁到 PR review 的 Request Changes 上 我觉得没必要」):闸门载体保持本标签,⛔ 不迁 PR review / Request Changes、不为迁移留门;挂与清皆按标签纪律的 read-modify-write 硬步骤写。 - **碰生成物的 PR,入队前先同步 + 整体重生成**(os-regen 驱动零冲突标记地**静默丢掉一侧改动**): 四步序已机械化 `bash scripts/pm/os-regen-merge.sh`;陷阱、断言措辞与锚点禁令见 landing-operations A。 - **跟到 MERGED 为止;入队后的看护同归车道 PM 的落地窗口**:验收、首次入队 flip 定点、MERGED 两读 @@ -639,8 +640,7 @@ grep `),复升级时逐条**跑**一遍,零命中/变形的就地改写 的统一定义,禁令三条与离队出口同见该节;事后防线 = 审计清单,维护者不认识的条目 = 席位违规,立案回滚。 - **决定属于维护者:永不代维护者回答产品/架构问题**(唯一例外:分诊职责里已裁的代裁车道,边界恰 与其置信门重合,不得更宽);**永不派发 assignee 是别人的 issue;永不派发带 `needs-user-decision` 的 issue**。 -- 每个 dev agent 都在**每仓专属的自有 worktree** 里干活(hook 强制;os-dev 定义重申);并行度 - 以 `batch` 封顶,同批**按构造文件面不相交**;**分诊座位永不认领、永不派发、永不写代码;执行 +- 并行度以 `batch` 封顶,同批**按构造文件面不相交**;**分诊座位永不认领、永不派发、永不写代码;执行 座位只在自己那一个车道认领、不改标签,误标挂 `pm:retriage` + 异议评论同笔;`domain:*` 只有一个生产者**(豁免、例外两条与全部条件见「多仓协调 4」「域车道」「候选与批次」,⛔ 不另抄第二份)。 ## 报告契约(Report contract,os-dev 返回什么) diff --git a/scripts/pm/dispatch-gates.mjs b/scripts/pm/dispatch-gates.mjs index 1b9df36d2d..00a51862a9 100644 --- a/scripts/pm/dispatch-gates.mjs +++ b/scripts/pm/dispatch-gates.mjs @@ -2812,6 +2812,7 @@ export const MANDATORY_TIER_GLOBS = [ * reviewed, never a model (maintainer, 2026-08-16: 「needs:fable-review 这个标 * 签不好,下次模型升级怎么办」), and the PM skill's prose points at this * constant instead of spelling a model name. + * Rulebook: `.claude/skills/pm-dispatch/SKILL.md` 「入队与落地」 — the clause-② gate and the `needs:contract-review` review-chain bullets. */ export const CONTRACT_REVIEW_TIER = 'claude-fable-5';