From 4c8ac62f32210bab0862f12a61d42935e950a1fd Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 27 Aug 2026 13:14:10 +0000 Subject: [PATCH] docs(pm-dispatch): centralize the authoritative governed-merge audit window on the Director seat MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Charter change ruled by the maintainer 2026-08-27 (「合并审计归总监那件事,同意你的建议」): lane seats keep the per-round sweep as early warning; the Director seat gains 职责四 — the authoritative consolidated audit, --since-ref-anchored at the previous audit's recorded tips, folded into the adjudication batch with per-entry recognition, unrecognized entries filed as needs-user-decision in the same stroke, tips re-recorded after each run. INCOMPLETE (exit 2) reports as INCOMPLETE; in-container 403 attribution completes via MCP per entry. No new label, no cron. Both files stay at their zero-headroom ratchet ceilings (net 0 per file); the cut ledger with each cut's surviving home is in the PR body. --- .claude/skills/pm-dispatch/SKILL.md | 16 +++--- .../pm-dispatch/references/lanes/director.md | 56 +++++++++---------- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index e296cefed1..62d4bb5281 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -36,7 +36,7 @@ metadata: | `triage` | 以**分诊座位**身份运行(只扫/分类/路由,永不认领) | — | | ``(如 `spec`、`skills`) | 以该 `domain:*` 车道的**执行座位**身份运行 | — | | `epic:#` | 以父单 #n 的 **epic PM** 身份运行(见「Epic 子树车道」) | — | -| `director` | 以**项目总监席**身份运行(人工召唤;三职与章程见「升级与决策」与 `references/lanes/director.md`) | — | +| `director` | 以**项目总监席**身份运行(人工召唤;四职与章程见「升级与决策」与 `references/lanes/director.md`) | — | | `label:` | backlog 过滤标签;`label:all` = 全部 open 未认领 | `pm:queue` | | `repo:` | 扫哪个仓的 backlog(单 issue 的落地仓看它自己的 `repo:*` 标签) | `objectstack-ai/objectstack` | | `batch:` | 同时在飞的 dev 上限 | `3` | @@ -819,7 +819,8 @@ main 红了约一小时,逐 PR 连环红到 fix-forward 才止)。本段只适 每轮向维护者打**中文**轮次报告(chat 通道,语言政策显式例外):issue → 判决 → PR 链接 → 备 注的表 ,加升级项、代裁清单(分诊)、awaiting a human merge 项、governed 合并审计清单(实跑 -`node scripts/pm/check-governed-merges.mjs --since <上轮>`,⛔ 不凭记忆汇总)、**`UNRECOGNISED` 行**(对本轮 +`node scripts/pm/check-governed-merges.mjs --since <上轮>`,⛔ 不凭记忆汇总;此为车道早警,权威 +合并窗口与认定/回滚处置归总监席,`references/lanes/director.md`)、**`UNRECOGNISED` 行**(对本轮 门禁日志 grep `UNRECOGNISED`,逐行照录,`NOT APPLICABLE` 行也在内 —— 缺行读作「无未识别项」,实 则可能是没人 grep)。健康指标四个(总 open 数刻意不在其 中 —— 债密区发现快于关闭是循环在工作):**可派发库存**(dispatchable inventory;open `pm:queue` 未 @@ -942,14 +943,13 @@ grep `),复升级时逐条**跑**一遍,零命中/变形的就地改写 者在本会话 ~30 分钟内有过人类输入才可发,每问必带推荐项,被 Skip 或长挂即转卡通道 ⛔ 不重弹 —— 卡先于弹窗存在,弹窗怎么死盘面都诚实。 -**项目总监席(Project Director):人工召唤,三职 = `needs:contract-review` 复审链、决裁勤务、维护 -者动作台账**(维护者 2026-08-27 裁定,原话:「项目总监 由人工定期指挥,负责处理 contract-review 类 -别的和需要决裁的。」「需要维护者处理的事情,也归项目总监。」—— 决裁半边自此由 skills 席移交本席, +**项目总监席:人工召唤,四职 = `needs:contract-review` 复审链、决裁勤务、维护者动作台账、 +governed 合并审计**(维护者 2026-08-27 裁定,原话:「项目总监 由人工定期指挥,负责处理 +contract-review 类别的和需要决裁的。」「需要维护者处理的事情,也归项目总监。」—— 决裁半边自此由 skills 席移交本席, 改写 2026-08-26「skills 和决裁的问题,还是由skills席统一人工处理,我会要求你处理某个仓的skills和 决裁。」的归属半句,skills 面与其车道照旧归 skills 席)。入口 = `/pm-dispatch director`;⛔ 无 -Routine 无 cron,召唤间隔载体停放是设计安全态;档位硬门 = `CONTRACT_REVIEW_TIER`(保险丝机读), -不达档只做免档整理并停放三职;不占 `domain:*`,按职责标签跨车道跨仓,永不认领 backlog、 -永不写码,机械接手经派发 dev(与分诊席同款 carve-out);章程见 `references/lanes/director.md`。 +Routine 无 cron;档位硬门 = `CONTRACT_REVIEW_TIER`(保险丝机读),不达档只做免档整理并停放 +四职;不占 `domain:*`,永不认领 backlog、永不写码;章程见 `references/lanes/director.md`。 ## 护栏(Guardrails,有约束力) diff --git a/.claude/skills/pm-dispatch/references/lanes/director.md b/.claude/skills/pm-dispatch/references/lanes/director.md index a105095237..428cb092a5 100644 --- a/.claude/skills/pm-dispatch/references/lanes/director.md +++ b/.claude/skills/pm-dispatch/references/lanes/director.md @@ -5,19 +5,16 @@ issue 编号;机器判据恒英文,引文逐字不译。 ## 授权与形态 -- **授权源**(维护者 2026-08-27,live PM chat,三句依次,逐字未译):「所以是否应该搞一个决裁的项 - 目经理,也要更新他的skills」「比如叫项目总监?」「项目总监 由人工定期指挥,负责处理 - contract-review 类别的和需要决裁的。」—— 第三句即本席的职责定义与召唤契约。 +- **授权源**(维护者 2026-08-27,live PM chat,逐字未译):「项目总监 由人工定期指挥,负责处理 + contract-review 类别的和需要决裁的。」—— 此句即本席的职责定义与召唤契约。 - **人工召唤,⛔ 无 Routine 无 cron 无常设舰队位**:维护者说「处理决裁」/「处理 - contract-review」或 `/pm-dispatch director` 即入口;延迟权衡明写 —— 召唤间隔里 - `needs:contract-review` 载体与决策卡**停放是设计安全态**,维护者的召唤节奏就是复审与决 - 裁节奏。 + contract-review」或 `/pm-dispatch director` 即入口;召唤间隔里复审载体、决策卡与审计窗口 + **停放是设计安全态**,召唤节奏即复审、决裁与审计节奏。 - **档位** = `CONTRACT_REVIEW_TIER`(dispatch-gates 常量单源,⛔ 本文不写模型名);每场开场按降 档保险丝机读认定(细则见 `../contract-review.md`);不达档只做免档整理(载体盘点、批次拟 - 稿、「待您」清单归集),三职停放,⛔ 不出裁决、不清标、不摘标。 -- **双射 carve-out(与分诊席同款)**:一张 `pm:seat` 座位贴、四段协议照旧;不占 `domain:*` 车 - 道,范围按职责标签(`needs:contract-review`、`needs-user-decision`、`pm:awaiting-maintainer`)跨车 - 道跨仓;永不认领 backlog、永不写码;机械接手由派发 dev 按既有接手协议执行。 + 稿、「待您」清单归集),四职停放,⛔ 不出裁决、不清标、不摘标。 +- **双射 carve-out**:一张 `pm:seat` 座位贴、四段协议照旧(与分诊席同款);不占 `domain:*` + 车道,范围按职责标签跨车道跨仓;永不认领 backlog、永不写码;机械接手经派发 dev。 ## 基本原则(维护者 2026-08-27,逐字未译) @@ -27,8 +24,7 @@ issue 编号;机器判据恒英文,引文逐字不译。 一个推荐。呈报批序与写法见 `../decision-analysis.md`;四维框架单源在主文件「升级与决 策」四轴(`check:skill-frame-sync` 管的四份拷贝不动,⛔ 本文不复制框架本体)。 - 本原则重锚 2026-08-26 流程裁定(「决裁流程今天这样很好,决策卡5张一组,从业务的角度给我具体解 - 释,说明可选项,并进行四维分析。应该写入技能。」):流程未变;2026-08-26 定流程,2026-08-27 把 - 它升格为本席工作的基本原则并定归属 —— 两个日期不矛盾。 + 释,说明可选项,并进行四维分析。应该写入技能。」):流程未变,2026-08-26 定流程、2026-08-27 升格定归属。 ## 职责一:`needs:contract-review` 复审链 @@ -38,37 +34,41 @@ issue 编号;机器判据恒英文,引文逐字不译。 - **处理三分支**(维护者 2026-08-27,逐字未译:「刚才说的 needs:contract-review 类别,项目总监处理 时,如果是收尾,应该帮忙处理完到合并。如果有大的错误,应该改标签。如果是卡在决策卡,和我讨论该 怎么处理。」): - - **收尾(PASS,工已完)⇒ 跟到合并为止**:非受管 code PR 走「清标即落地」全链(落地前检 - → ready → auto-merge/入队);受管面照旧 draft-only + 人工合并 ——「到合并」= 推进到就绪 - 并点名等待,⛔ 不代维护者合并。 + - **收尾(PASS,工已完)⇒ 跟到合并为止**:非受管 code PR 走「清标即落地」全链;受管面 + 照旧 draft-only + 人工合并 ——「到合并」= 推进到就绪并点名等待,⛔ 不代维护者合并。 - **大的错误(FAIL/REWORK)⇒ 改标签即交接**:按状态机一笔 replace 转回相应工作态(重派/ 返工),⛔ 散文点名不是交接 —— 标签才是收件箱,散文对候选查询与 sweep 全不可见。 - **卡在决策卡(BLOCKED)⇒ ⛔ 不擅断**:并入决裁批次,按基本原则格式与维护者讨论。 ## 职责二:决裁勤务 -- 决策收件箱(`needs-user-decision`)跨仓勤务:按基本原则批呈;一行回批(「1A 2B …」;「X, 但…」 - = 附带条件随执行落地)即全链执行,裁后四件原子执行不再请示;批间新到滚入下批,收件箱 - 清零才收工;⛔ 不复活已退役的汇总 issue(维护者 2026-08-19:「之前定期生成的决策汇总 issue没 - 什么用」)。 +- 决策收件箱(`needs-user-decision`)跨仓勤务:按基本原则批呈;一行回批即全链执行,裁后 + 四件原子执行不再请示;批间新到滚入下批,收件箱清零才收工;⛔ 不复活已退役的 + 汇总 issue(维护者 2026-08-19:「之前定期生成的决策汇总 issue没什么用」)。 - 代裁通道(分诊 Routine 或本席)硬门、置信门与人工地板见主文件「分诊座位职责」,⛔ 不另 抄;不达档 ⇒ 通道整体跳过、卡走维护者路径,恒安全。 ## 职责三:维护者动作台账(维护者 2026-08-27,逐字未译:「需要维护者处理的事情,也归项目总监。」) -- `pm:awaiting-maintainer` 跨仓标签清单是「待人工动作」的唯一机器载体(Settings/Routines UI 操 - 作、手点、凭据一类 —— 决定已做、只剩一次 GitHub 之外人工动作的态);本席是台账管 - 家,各车道席照旧只负责**入态**(发现即停放),台账与出口归本席。 +- `pm:awaiting-maintainer` 跨仓标签是「待人工动作」唯一机器载体(决定已做、只剩一次 GitHub + 之外人工动作的态);本席是台账管家,车道席照旧只负责**入态**,台账与出口归本席。 - 召唤时随决裁批次呈报一份合并的「待您」清单 —— 座位贴散文降为指针,标签即状态。 -- **出口执行**:核验动作确已发生 → 摘标 + 证据评论同笔;「无机器出口,by construction」不 - 变,换的只是执行席(出口条款见 `../state-machine.md`)。 +- **出口执行**:核验动作确已发生 → 摘标 + 证据评论同笔;出口条款见 `../state-machine.md`。 + +## 职责四:governed 合并审计(维护者 2026-08-27,逐字未译:「合并审计归总监那件事,同意你的建议」) + +- 检测双层、处置单席:车道轮报 sweep 只作早警,权威合并窗口在本席,每场召唤实跑 + check-governed-merges,`--since-ref` 锚上一场记录的 tips(锚行住座位贴说明段;脚本零存储,自 + 打印下一场参数),跑后新 tips 同笔记回;INCOMPLETE(exit 2)照实报,⛔ 不作干净。 +- 清单并入决裁批次,一行一条认定 y/n;未认定条目 = 席位违规,同笔立 `needs-user-decision` 卡 + 立案回滚(事后审计制,维护者 2026-08-18「同意。」);容器 403 归因逐条走 MCP 补齐。 +- ⛔ 不新增标签(枚举本地树推导零 API);⛔ 无 cron(节奏与停放同「授权与形态」)。 ## 交接台账(supersession —— 原条款已原地改写,此处记两个日期的关系) -- **决裁半边**:2026-08-26「skills 和决裁的问题,还是由skills席统一人工处理,我会要求你处理某个仓 - 的skills和决裁。」的决裁归属由 2026-08-27 裁定移交本席;skills 面照旧归 skills 席 —— 分界: - 改 skill/指令/governance 文本的工作归 skills 席,出裁决、清复审标、清点待人工清单的勤务归 - 本席。 +- **决裁半边**:2026-08-26 裁定(原话见主文件总监段)的决裁归属由 2026-08-27 移交本席; + skills 面照旧归 skills 席 —— 分界:改 skill/指令/governance 文本的工作归 skills 席,出裁 + 决、清复审标、清点待人工清单的勤务归本席。 - **复审链常设归属**:skills 席自绑小时钟(维护者 2026-08-23:「要不还是你挂个定时处理审核 吧」)实测已死,⛔ 不复活;归属改写为本席人工召唤(`../contract-review.md` 归属条款为准)。 - **代裁 runner 集**:「分诊 Routine 或 skills 席」→「分诊 Routine 或项目总监席」;fable 机读保险