diff --git a/.claude/skills/pm-dispatch/references/contract-review.md b/.claude/skills/pm-dispatch/references/contract-review.md index 398c4a456b..467cb4ee23 100644 --- a/.claude/skills/pm-dispatch/references/contract-review.md +++ b/.claude/skills/pm-dispatch/references/contract-review.md @@ -1,19 +1,15 @@ # 契约复审链细则(references —— 按需加载) -出处:主文件「入队与落地」条款②闸门(原则、双肢定义与 `CONTRACT_REVIEW_TIER` 档位 -单源住那里);本表是 `needs:contract-review` 复审链的操作细则,挂标、复审、清标那一 -刻查阅;⛔ 不引用 issue 编号。 +出处:主文件「入队与落地」条款②闸门(原则、双肢定义与 `CONTRACT_REVIEW_TIER` 单源住那 +里);本表是 `needs:contract-review` 复审链细则,挂标、复审、清标时查阅;⛔ 不引用 issue 编号。 ## 载体纪律(挂与清) -- **PR 与卡双载体同笔挂**(维护者 - 2026-08-22:「简化一点是否可以直接挂 PR 侧」「两边都挂好」; - PR 一存在即挂,报告先于 PR 到达则先挂卡侧、ACCEPT 时补齐 PR 侧),同笔在该 PR 上 - 向复审席账号 request review(同裁决:「也可以直接要求复审」—— 仅通知,载体仍是标 - 签)、停手。 -- **载体不迁移**(维护者 2026-08-18,原 - 话:「中期把闸门迁到 PR review 的 Request Changes 上 我觉得没必要」): - 闸门载体保持本标签,⛔ 不迁 PR review / Request Changes、不为迁移留门;挂与清皆按 +- **PR 与卡双载体同笔挂**(维护者 2026-08-22:「简化一点是否可以直接挂 PR 侧」「两边都挂好 + 」; PR 一存在即挂,报告先于 PR 到达则先挂卡侧、ACCEPT 时补齐 PR 侧),同笔在该 PR 上向复审 + 席账号 request review(同裁决:「也可以直接要求复审」—— 仅通知,载体仍是标签)、停手。 +- **载体不迁移**(维护者 2026-08-18,原话:「中期把闸门迁到 PR review 的 Request Changes 上 我觉得 + 没必要」): 闸门载体保持本标签,⛔ 不迁 PR review / Request Changes、不为迁移留门;挂与清皆按 标签纪律的 read-modify-write 硬步骤写。 - **重挂前先查裁决**:闸门标签缺失 ⇒ 先 grep 卡片评论找现行复审结论 —— PASS 评论 + 标 签缺失 + PR head 自复审后未动 = **已复审清标**,不是被剥;仅当 head 在结论之后移动、或根 @@ -22,16 +18,20 @@ ## 复审资格与归属 - **资格** —— ① 跑在契约复审档位,硬条件,认定只认降档保险丝的机读;② 非该卡派发 - 席,已从资格条件放宽为路径偏好(维护者 2026-08-21,原 - 话:「你自己就是 Fable,自己就可以审核」): 经同一机读证实达档的派发席,可对自派的卡 - 执行契约复审并清标(审的是低档实现者的契约增量,非自身产物 —— 派发席不写代码);放 - 宽豁免的是独立席位,不是复审本身 —— 一行结论照样先落卡、后清标,主文 - 件「⛔ 禁止自查放行」禁的是免复审直放,不禁本路径;低于契约复审档位的席照旧留标等 - 待。 + 席,已从资格条件放宽为路径偏好(维护者 2026-08-21,原话:「你自己就是 Fable,自己就可以审 + 核」): 经同一机读证实达档的派发席,可对自派的卡执行复审并清标(审的是低档实现者的 + 契约增量,非自身产物 —— 派发席不写代码);放宽的是独立席位,不是复审本身,主文件「⛔ + 禁止自查放行」禁的是免复审直放,不禁本路径;低于档位的席照旧留标等待。 - **归属**:常设 = skills 席自绑小时钟(维护者 2026-08-23:「要不还是你挂个定时处理审核吧」), - 每小时一轮即天然攒批;分诊席达档时(经同一机读证实)照旧可清。只审契 - 约增量 diff、结论一行写在卡上、PASS 双载体同笔清标(PR 与卡各按标签纪律硬步骤)并 - 清 review request 或留一条 review 评论,标清后卡方可入队。 + 每小时一轮即天然攒批;分诊席达档时(经同一机读证实)照旧可清。只审契约增量 diff、结 + 论一行写在卡上、PASS 双载体同笔清标(PR 与卡各按标签纪律硬步骤)并清 review request 或留 + 一条 review 评论,标清后卡方可入队。 +- **清标即落地**(维护者 2026-08-25,原话:「审核通过你应该直接负责合并吧,还要等原始的项 + 目经理吗」):非受管 code PR 由**复审链同笔收口**:清标后按 `landing-operations.md` 走落地前 + 检(`mergeable_state` 先读、闭合关键词扫描、true-green 核 job 结论、ready 先于 auto-merge 不可 + 反)→ 转 ready → 挂 auto-merge/入队;车道 PM 窗口与 half-states 孤儿巡检退为**兜底**,⛔ 停手即 + 复现「就绪却无人落地」。**三样不变**:受管面照旧 draft-only + 人工/受托合并、⛔ 链永不 + 入队;FAIL / REWORK 路径原样;降档保险丝原样 —— 低于档位的席清不了标,故落不了地。 ## 降档保险丝(机读) diff --git a/.claude/skills/pm-dispatch/references/landing-operations.md b/.claude/skills/pm-dispatch/references/landing-operations.md index 67f5fe5f29..b6cac386b8 100644 --- a/.claude/skills/pm-dispatch/references/landing-operations.md +++ b/.claude/skills/pm-dispatch/references/landing-operations.md @@ -26,20 +26,20 @@ ## B. 跟到 MERGED 为止;入队后的看护归车道 PM 落地窗口 -车道 PM 的权责:验收(复核清单);**首次入队** —— ACCEPT 后挂 6–9 分钟 flip 定 -点,到点核门禁 job 结论(承载门禁族的 job `completed: success`),绿即转 ready + -挂 auto-merge,未绿阶梯重挂;CI success webhook 不可靠,⛔ 不坐等不忙轮询;定点文 -本照定时器写法纪律(幂等开头、只写判据);确认 **MERGED** —— 每轮同时读队列分支与 -`origin/main` 两个读数。ready 与 auto-merge 顺序不可反(转回 draft 会同时掉 -auto-merge 与队列成员资格)。 - -**转 ready / 挂 auto-merge 之前先读 `mergeable_state`**:`dirty` ⇒ 先 merge -`origin/main`(生成物在面上按 A 的固定序)再挂;`unknown` ⇒ 重读一次(惰性计算,事实行见平台读 -数)。**ready + 全绿 ≠ 已入队 —— 队列从不主动拉 PR,入队是显式动 -作。**零 `enqueued` 事件按序查:① `mergeable_state` 是否 `dirty`;② -enable-auto-merge 调用根本没落地(GraphQL、吃配额、回显两向不可靠,按既有陷阱行 -重发一次,以 timeline 事件验证,⛔ 不看 `auto_merge` 字段);③ PR 碰 -`.github/workflows/**` 而 token 缺 workflows 权限。 +车道 PM 的权责:验收(复核清单);**首次入队** —— ACCEPT 后挂 6–9 分钟 flip 定点,到点核门禁 +job 结论(承载门禁族的 job `completed: success`),绿即转 ready + 挂 auto-merge,未绿阶梯重挂; +CI success webhook 不可靠,⛔ 不坐等不忙轮询;定点文本照定时器写法纪律(幂等开头、只写判 +据);确认 **MERGED** —— 每轮同时读队列分支与 `origin/main` 两个读数。ready 与 auto-merge 顺 +序不可反(转回 draft 会同时掉 auto-merge 与队列成员资格)。**契约复审链 PASS 落地的 PR 到窗 +口时已 ready + auto-merge 在挂**(清标与落地同一笔,见 `contract-review.md`)—— 窗口自身权责 +不变:跟到 MERGED、踢出处置、落地后对账。 + +**转 ready / 挂 auto-merge 之前先读 `mergeable_state`**:`dirty` ⇒ 先 merge `origin/main` +(生成物在面上按 A 的固定序)再挂;`unknown` ⇒ 重读一次(惰性计算,事实行见平台读数)。 +**ready + 全绿 ≠ 已入队 —— 队列从不主动拉 PR,入队是显式动作。**零 `enqueued` 事件按序查: +① `mergeable_state` 是否 `dirty`;② enable-auto-merge 调用根本没落地(GraphQL、吃配额、回显 +两向不可靠,按既有陷阱行重发一次,以 timeline 事件验证,⛔ 不看 `auto_merge` 字段);③ PR +碰 `.github/workflows/**` 而 token 缺 workflows 权限。 **确认 MERGED 的同一动作里给 `Part of` 卡收口**(`Fixes` 卡 GitHub 代关、标签随 卡离开在飞视图):`Part of` 卡开着不摘 `pm:dispatched`,就把无在飞物的卡永远算在