diff --git a/.claude/agents/os-dev.md b/.claude/agents/os-dev.md index 42fc96f5d3..157ec28a09 100644 --- a/.claude/agents/os-dev.md +++ b/.claude/agents/os-dev.md @@ -19,9 +19,8 @@ model: opus 仓库根的 AGENTS.md 有约束力;第一次编辑前先读它。本文件只承载原则、查表数据、与钩子无 法 -机械强制的条款;事故经验一律写成自含的教训 —— 不引用 issue 编号,维护者裁决保留日 -期 + -原话。 +机械强制的条款;事故经验一律写成自含的教训 —— 不引用 issue 编号,维护者裁决保留日期 +(原话仅在引文本身即操作性判据处保留)。 ## 六条基本规则 @@ -316,9 +315,8 @@ dispatch prompt 只携带每单增量(裁决引文、裁决 / PM-机制假设分 sanitizer 纪律」)。 - **触 `skills/**`(对外发布的技能包)的 diff:PR 正文报两个读数,并默认拒绝「小功能大扩 写」。** 两个读数缺一不可 —— 被改文件的**整文件** before/after,与**整包** before/after - (发布目录下全部 SKILL.md 之和);行数为准,姊妹门禁定义 token 计数后同报 token。维护者 - 2026-08-21 裁决,原文不译:「对外发布的 skills 是整个平台的最大价值,尤其要整体考虑和评 - 估。」「……不能为了一个小功能扩写很多。」派发词给的净增预算装不下 ⇒ 停下按 `blocked` 报 + (发布目录下全部 SKILL.md 之和);行数为准,姊妹门禁定义 token 计数后同报 token + (2026-08-21 裁定)。派发词给的净增预算装不下 ⇒ 停下按 `blocked` 报 缺口,⛔ 不自行扩写、不自行抬预算 —— 预算是 PM 的,抬它是维护者裁决。 - **付行数棘轮的唯一合法货币是删内容。** 维护者 2026-08-17 裁「⛔ re-wrap(折行合并) 不得用作筹行 —— 棘轮治理的是内容体量,行数只是机读代理,新增以删减付账;密度优化仅随净减 diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index 825912b964..0a7e6292a9 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -20,10 +20,9 @@ metadata: 一单一 agent、一 agent 一 worktree。PM 的工作是循环:**选卡 → 认领 → 派发 → 收集 → 复核 → 报告 → 下一批**。维护者只在两个点进入循环:轮次报告,和 `needs-user-decision` 决策卡。 -本文只写**原则、状态机与查表数据**(维护者 2026-08-12 裁定:「现有的项目经理skills -应该大幅简化,只需要说原则,不需要写细节」;「处理 issue 时犯的错应该总结成经验, -保留 issue id没有意义」)。每条经验自含失效模式与边界,⛔ 操作文本不引用issue 编号, -不期待读者去翻原始 issue;裁决保留**日期 + 原话**;凡钩子 /门禁 +本文只写**原则、状态机与查表数据**(2026-08-12 裁定)。 +每条经验自含失效模式与边界,⛔ 操作文本不引用issue 编号,不期待读者去翻原始 issue; +裁决保留**日期**(原话仅在引文本身即操作性判据处保留);凡钩子 /门禁 /脚本已机械强制的只留一句原则,细节以脚本头为权威;按需查阅的事实表住在 `references/`。 ## 入口与角色 @@ -56,8 +55,8 @@ fable 子agent,然后自己默认定时1小时,除非人工要求。」): 走显式传 `model` 的 fable 子代理,逐份裁决过转录核验采信(细则见 `references/contract-review.md`); 自排定时默认**收班时挂、延时 ≤55 分钟**(1 小时 prompt-cache TTL 减分钟级抖动, 整班守一条缓存链;用量超额 TTL 降至 5 分钟收益归零、compaction 轮照旧重写,皆不改默认), -维护者明示可改。**开轮互斥读法**(宁少跑,不让两个同座位会话并行写标签;维护者 -2026-08-27 裁「落协议」:近期窗口只管**未收班**活动):fire 开始、首个写动作之前读四个读数, +维护者明示可改。**开轮互斥读法**(宁少跑,不让两个同座位会话并行写标签; +(2026-08-27 裁定)近期窗口只管**未收班**活动):fire 开始、首个写动作之前读四个读数, 未收班活动任一未满一个轮次 ⇒ 自退 —— 最近收班简报;晚于它的最新「开轮」 标记(轮中会话在座位贴上唯一的痕迹);本车道 `pm:dispatched` 卡最新非本 session 的 `Claim:` 评论(拼写见「认领」,车道盘点已取;只计**认领本席车道派发**的 —— @@ -81,8 +80,7 @@ PR 的会话被读作「清」)。**收班简报 = 前任「不再写」的显 —— 授权原话引用在 PR 正文,复核需另一座位或维护者 walkthrough,⛔ 不得自审自合。 - **GitHub 上一切新内容用英文**(维护者 2026-08-06 指令);中文留三个通道 —— 轮次报告(chat)、 派发令里的裁决引文(照抄不译:改写引文就是改写裁决)与决策四维分析(评论 + 四棱块; - 维护者 2026-08-19:「要求以后issue中的四维分析也用中文写」; - 只管新记录,存量英文块 ⛔ 不迁移);存量中文 ⛔ 不追溯改写。 + (2026-08-19 裁定);只管新记录,存量英文块 ⛔ 不迁移);存量中文 ⛔ 不追溯改写。 - **先认领后动工;assignee 不是你 ⇒ 已被认领,永不碰。** **一座位一车道,双射**:「域 X 谁管」「 PM Y 管什么」各恰好一个答案。与 AGENTS.md 冲突时,**AGENTS.md胜**。 @@ -98,7 +96,7 @@ PR 的会话被读作「清」)。**收班简报 = 前任「不再写」的显 | `pm:blocked` + 正文行 `Blocked-by: #N` | 等上游 —— 选择期跳过,#N 关闭时由解锁扫描放回。工已完、PR 被外部门禁缺陷卡住的卡**同用本态,⛔ 不设新标签**(`Unlock-action: re-check PR #M` 行改写解锁动作 —— **只认此一值**,别的写法静默回落默认重派,细则见 `references/state-machine.md`) | | `pm:awaiting-maintainer` | 决定**已做**,剩余动作是一次 GitHub 之外的人工维护者操作(如 Routines UI 变更)—— 不派发、不催;跨仓台账与出口归**项目总监席**,各席只入态;与其它 pm 状态标签**互斥**;互斥面、出口与巡查细则见 `references/state-machine.md` | | `pm:blocking` | 有 open 下游依赖者(分诊 sweep 自 `Blocked-by:` 索引推导的缓存,⛔ 不手工挂);进选择优先级全序 | -| `pm:retriage` | 等分诊改判(维护者 2026-08-19/20 裁定:「同意 并存」)—— 与现行 `pm:*` 标签**并存,⛔ 不摘原标**;带本标签的 `pm:queue` 卡**跳过派发**(异议未决不派,即可派发行的除外项);挂/摘两方机制见 `references/state-machine.md` | +| `pm:retriage` | 等分诊改判(2026-08-19/20 裁定)—— 与现行 `pm:*` 标签**并存,⛔ 不摘原标**;带本标签的 `pm:queue` 卡**跳过派发**(异议未决不派,即可派发行的除外项);挂/摘两方机制见 `references/state-machine.md` | | `finding` | 观察类记录,恒 = **待首次定级**(定级即离标:晋级换 `pm:queue` / 关闭 / hold 换 `pm:on-hold`;裸标签数即健康读数)—— 不占队列不进收件箱 | | `target:` | 发版阻塞 —— 每个 backlog 恰好一个生产者,见「发版板」 | | `pm:epic`(父单) | 子树已委托 epic PM(会话与领地在父单正文;`label:pm:epic` 即全量索引)—— 其它 PM 不把其 sub-issue 当候选 | @@ -111,8 +109,8 @@ PR 的会话被读作「清」)。**收班简报 = 前任「不再写」的显 - `needs-user-decision` vs `pm:on-hold` = **决定待做 vs 已做**,挂错招来重复升级或永久沉默;hold 没有可点火的出口 = 谁都无法合法退出的状态,`manual — <理由>` ⛔ 不是合法出口 —— - 没有机制能唤醒的卡不 hold,按「暂时不准备开发 ⇒ 直接关闭」(维护者 2026-08-16 原话: - 「我建议有些暂时不准备开发的应该直接关闭。」)关 not planned,理由与出处写进关单评论: + 没有机制能唤醒的卡不 hold,按「暂时不准备开发 ⇒ 直接关闭」(2026-08-16 裁定) + 关 not planned,理由与出处写进关单评论: 卡即记录、重开免费、维护者可否决。**关闭默认不适用 `type:Bug` 的 hold**, 三分支:可复现且用户可达 ⇒ 回 `pm:queue`(被 hold 的 Bug 就是被藏起的缺陷);declared≠enforced 观察类 ⇒ 转 enforce-or-remove 通道(不 hold 不裸关);真 won't-fix 候选 ⇒ 逐卡进决策箱 —— @@ -125,7 +123,7 @@ PR 的会话被读作「清」)。**收班简报 = 前任「不再写」的显 按解锁扇出排序选择、**在合并后的 ref 上重验每张回队卡的文件面**(⛔ 只做第一件; 关掉上游的那个合并最可能顺手把你这张卡也修掉)。 **一个标签存在,当且仅当有具名读者**;`pm:blocking` 即其推导缓存(语义见状态模型行, - 读者以词表脚本注为权威;裁决原话见 runbook 全序节)。 + 读者以词表脚本注为权威;裁决出处见 runbook 全序节)。 - **跨仓解锁的判据是「消费方可安装」, 不是「上游已合并」**:消费仓以**发布包**消费该上游(而非 git SHA pin) 时,解锁扫描放回前先验证修复已进入消费方可安装的发行版(安装面探针: @@ -186,7 +184,7 @@ PR 的会话被读作「清」)。**收班简报 = 前任「不再写」的显 产品依赖方向固定:`objectstack`(后端; `packages/spec` 是唯一契约)→ `objectui`(前端,构建产物经 `pnpm objectui:refresh` 回流) -与 `cloud`。**仓分两类**(维护者 2026-08-26 裁定;原话与决裁归席交接见「升级与决策」): +与 `cloud`。**仓分两类**(维护者 2026-08-26 裁定;决裁归席交接见「升级与决策」): **多车道仓** `objectstack`、`objectui` —— 中央分诊是 `domain:*`/type/定级的唯一生产者; **单车道仓** `cloud`、`objectos`、`hotcrm`、`www.objectos.ai`(未来新仓默认此类)—— 其 `repo:*` 席自理无冲突的机械三务(自扫 sweep、自打 `type`、自做 `finding` 首触定级),⛔ 不产 `domain:*`, @@ -194,8 +192,8 @@ PR 的会话被读作「清」)。**收班简报 = 前任「不再写」的显 **新仓登记是一张清单**:座位贴、标签、类别归属、门禁盘点; 准入判据一句 —— 这个仓真的需要常设席位吗。逐仓事实照实设(objectos 无 changeset 流、 无 `packages/`,合并队列已上线;hotcrm 收卡判据与宪章见 `references/lanes/hotcrm.md`)。 -**objectui 卡按修复落点分流三流**(维护者 2026-08-21 裁定,`domain:ui` 唯一新增标签, -命名定稿原话:「按 domain:ui 定稿」):`domain:devx`(工程面)/`domain:spec`(契约面)跨仓归各自车道, +**objectui 卡按修复落点分流三流**,`domain:ui` 唯一新增标签(2026-08-21 裁定): +`domain:devx`(工程面)/`domain:spec`(契约面)跨仓归各自车道, 其余 —— 发布库与 apps —— `domain:ui` 归 objectui 执行席;症状位置不改流向,docs 随所记录的面走,落点不明留分诊首触 ⛔ 不猜。**车道可按仓分席(域×仓)**:忙时一个 domain 车道开多个按仓席位(如 devx@objectstack / devx@objectui;触发即规则 4 预登记的拆分条件), @@ -254,10 +252,10 @@ objectstack 带 `repo:*` + 具名读者(顺带解掉请求方无目标仓写权 | 标签 | 包家族 | |:--|:--| -| `domain:engine` | `packages/objectql`、`packages/core`、`packages/formula`(CEL / `matches-filter` / RLS 谓词求值)、`plugin-pinyin-search`(落点在编译/查询核心);`packages/metadata*`(加载、注册、持久化、缓存、目录)、`packages/platform-objects`;`packages/drivers/driver-*` —— 车道合并(维护者 2026-08-19:「engine-core + metadata + drivers -> engine, identity + services → services 怎么样?」),原 `domain:engine-core` / `domain:metadata` / `domain:drivers` 三标签**退役**(只退出流通;GitHub 标签对象保留 —— 删标签会剥光已关卡、毁掉存档,止住流通的是本表) | +| `domain:engine` | `packages/objectql`、`packages/core`、`packages/formula`(CEL / `matches-filter` / RLS 谓词求值)、`plugin-pinyin-search`(落点在编译/查询核心);`packages/metadata*`(加载、注册、持久化、缓存、目录)、`packages/platform-objects`;`packages/drivers/driver-*` —— 车道合并(2026-08-19 裁定),原 `domain:engine-core` / `domain:metadata` / `domain:drivers` 三标签**退役**(只退出流通;GitHub 标签对象保留 —— 删标签会剥光已关卡、毁掉存档,止住流通的是本表) | | `domain:services` | `packages/services/*`、`packages/connectors/*`、`packages/triggers/*`、`plugin-approvals`、`plugin-webhooks`、`plugin-email`、`plugin-reports`、`embedder-openai`、`knowledge-*`;`plugin-auth`、`plugin-security`、`plugin-sharing`、`plugin-audit`(2026-08-19 并入,原 `domain:identity` 标签**退役**,同上只退流通不删对象) | | `domain:devx` | `packages/lint`、`packages/sdui-parser`、`content/docs/**`、`apps/docs`、`scripts/`(门禁类;与 `domain:skills` 的分界按门禁的 SUBJECT:治理 agent 指令面/governed 面的归 skills,治理代码/文档质量的归本域)—— 与 `domain:spec` 相交的三面按「是否围着 spec 契约转」切分 | -| `domain:skills` | 两个技能根:`.claude/skills/**`(含本文件)+ `skills/**`(维护者 2026-08-11 裁定单设座位,与维护者走专题讨论;skills 更新 ADR-class,见 Guardrails);指令架构文件:根 `AGENTS.md` + 根 `CLAUDE.md`(所有面向 agent 的宪法文本);governed 面(统一定义见 ACCEPT 路径分叉)的治理执行文件:`.github/CODEOWNERS`(治理路由半边)+ SUBJECT 是 governed 面本身的门禁/审计(现为 `scripts/pm/check-governed-merges.mjs`,一句话见守卫索引;未来同类同判)—— 维护者 2026-08-18 裁决:「skills 相关的应该都归你管,为什么派给了 devx」 | +| `domain:skills` | 两个技能根:`.claude/skills/**`(含本文件)+ `skills/**`(维护者 2026-08-11 裁定单设座位,与维护者走专题讨论;skills 更新 ADR-class,见 Guardrails);指令架构文件:根 `AGENTS.md` + 根 `CLAUDE.md`(所有面向 agent 的宪法文本);governed 面(统一定义见 ACCEPT 路径分叉)的治理执行文件:`.github/CODEOWNERS`(治理路由半边)+ SUBJECT 是 governed 面本身的门禁/审计(现为 `scripts/pm/check-governed-merges.mjs`,一句话见守卫索引;未来同类同判)(2026-08-18 裁定) | | `domain:spec` | `packages/spec` 整包唯一契约,语义/文本/机器三面同席:schema 形状、`contracts/**`、退役行为半边、strictness 台账;describe/JSDoc/墓碑散文/错误 guidance 与 alias 表;`packages/spec/scripts/**`、`packages/spec/docs/**` 及围着 spec 契约转的工具链(门禁/生成器/lint 规则/报错散文/references 管线)—— 一般开发工具面留 `devx`(维护者 2026-08-09 裁决);席内分派判据见 `references/lanes/spec.md` | | `domain:cli` | `packages/cli`、`runtime`、`verify`、`qa`、`types`、`packages/rest`、`packages/mcp`、`packages/observability`、`packages/client*`、`cloud-connection`、`create-objectstack`、`packages/adapters/*`、`plugin-hono-server`、`plugin-dev` | | (无固定归属,按落点分诊) | `packages/apps/*`、`packages/console`(dist 由脚本生成 ⛔ 手改;UI 缺陷走 `repo:objectui`,pin/刷新脚本归 `scripts/` 行)、`examples/*`(归它演练的子系统) | @@ -285,15 +283,14 @@ issue 任何人不得认领** —— 那意味着分诊还没走到,不是「可 正文固定**四段**现值(当前 PM / 继承台账 / 热文件串行队 / 说明)、 **只由在任座位 PM 编辑**、正文为权威,标题与 assignee 是派生视图、三者同笔更新; 接管/移交 = 改正文 + 审计评论(**评论只作审计不承载状态**),接管压缩是标准步骤。 -**范围与常设承诺是岗位说明不是状态,版本化在 `references/lanes/.md`**(维护者 -2026-08-19 裁定:「所以我认为每一种项目经理的岗位说明应该进 skills,类似分诊」)—— +**范围与常设承诺是岗位说明不是状态,版本化在 `references/lanes/.md`** +(2026-08-19 裁定)—— 贴内指针指向其车道文件,升级走技能 PR,⛔ 手抄接力(逐任手抄正是本条要退役的失效模式; 存量贴的四段收缩细则在 seat-post-protocol)。**写侧刷新点 = 轮次边界**, 读侧只读贴正文 + 晚于正文最后编辑的评论(维护者 2026-08-12 批准;更早的已被吸收, 是存档不是现状),中途状态由卡上 claim/ACCEPT 评论承载。**热文件串行队是正文具名段** (区域写不清就只能整文件串行)。无心跳,活性惰性判定;竞态三招 —— 动手前重 fetch -正文、审计评论时间戳先到先得、写后回读。**换班报告默认零建议**(维护者 2026-08-12 裁定, -原话:「还有各车道下班时会提交 skills 建议有必要吗?就是那些搞得后来skills越来越乱。」): +正文、审计评论时间戳先到先得、写后回读。**换班报告默认零建议**(2026-08-12 裁定): 强制建议清单已退役,离任报告只收三类 —— 原则错/缺(→ skills 席专题)、可机械化项 (→ 门禁/脚本卡,⛔ 不是散文)、平台事实变化(→ references 事实表改一行)—— 以 `finding` 入 skills 车道由该席分诊,三类之外默认关 not planned;「经验教训」散文不再入技能文本 @@ -328,8 +325,7 @@ issue 任何人不得认领** —— 那意味着分诊还没走到,不是「可 空转轮 ~12 万 token,~8 万是这张门票);可验判据: 空转轮 ~4 万以内。只约束分诊 fresh session 的开局,执行座位与 dev(需全工具面)不受此约束。 -**两级盘点(two-tier inventory;维护者 2026-08-20: -「每次都需要 四仓全量 open issue 盘点 … 吗?建议分诊多久执行一次」→「立卡」)**: +**两级盘点(two-tier inventory)**(2026-08-20 裁定): 小时轮以 `since` 窗口读增量 —— 锚 = 座位贴上一份收班简报的时间戳(互斥守卫同一读数, 零新状态;标签写入刷新 `updated_at`,窗口锚在简报而非上次 fire, 漏 fire 积压自动入窗);每日一 fire 跑全仓全量对账并归集日频职责; @@ -375,7 +371,7 @@ sanitizer 截断的卡不可派发,评论修复指令后跳过;停摆指令判 事后证伪同处公开作废。**决策箱勤务(常设)**:落卡入箱时校验/补全标准四棱卡面块 (块形状见「升级与决策」);存量卡低频子轮回填,语言按不变量。 -**原生 issue 类型 Bug/Feature/Task 是分诊的固定产出**(维护者 2026-08-12 裁定「同意」): +**原生 issue 类型 Bug/Feature/Task 是分诊的固定产出**(2026-08-12 裁定): 分诊座位是 `type` 字段的唯一权威生产者(立单者可预填, 分诊校正 —— 与 `domain:*` 同一纪律);判据即代裁的机械边界测试(⛔ 不另抄): 违背已声明契约 ⇒ `Bug`,扩大接受集/公开面 ⇒ `Feature`,其余 ⇒ `Task`。 @@ -398,15 +394,14 @@ sanitizer 截断的卡不可派发,评论修复指令后跳过;停摆指令判 (十几条一行判据逐小时跑是浪费,每日即消化节奏),命中同 closed 命中一个待遇: 回队前 ref 重验再回队;⛔ 不设逐卡豁免评论)。**每 fire 跑到清空**:⛔ 无每轮总量预算, 当轮定完全部未定级 finding、优先于旧卡重验;质量靠**每批 ≤5 张同族卡逐张读**, -不靠封顶总量(维护者 2026-08-25,原话不译):「单轮跑数小时没关系啊。 -不读卡的批量盖章 可以通过每批5张这种约定来解决」 —— 单轮数小时是可接受形态; +不靠封顶总量(2026-08-25 裁定)—— 单轮数小时是可接受形态; 窗口耗尽未跑完的,下一 fire 从断点续跑(定级即离标,⛔ 不重读,标签纪律即断点)。 **fire 到达时上一轮未清空 ⇒ 接续处理,轮次可跨 fire**(维护者 2026-08-31 裁):fire 是接续触发 不是重开义务,存量按最老优先继续消化,⛔ 不因新 fire 重排,跨 fire 未清空不当矛盾立卡。 每批先过时前提检查再三选一 —— 晋级 / 关闭 not planned(维护者可否决重开,PM 不等批准)/ hold;**判级发生在这里,不在立单时**。车道座位可附证据/前提重验,⛔ 不定级不改标 (唯一例外:skills 车道 finding 由该席自分诊,全仓轮跳过)。域分批与 sweep 打包晋级五条照用 -(常设授权,维护者 2026-08-13);原话、每批约定与积压告警见 `references/dispatch-runbook.md`。 +(常设授权,维护者 2026-08-13);每批约定与积压告警见 `references/dispatch-runbook.md`。 **`pm:retriage` 重判每 fire 高优先处理**:按异议评论的证据与建议定级重裁, 维持或改判皆由本座位同笔摘标(挂标归异议席,见状态模型)。 @@ -417,13 +412,7 @@ pin 前置等运维细则见 `references/seat-post-protocol.md`)。** 判据二 ④ 发布说明里要为它道歉的。拆分/分票时 `target:*` 随工作走,对每一半重跑二元判据, 默认继承,不继承按四类写明理由。**每张板同归本座位生产**(每板恰好一个生产者)。 -**高置信决策卡的分诊代裁(维护者 2026-08-12 裁定)。 -** 出处原话:「让他帮我从实际业务需求出发,从平台长远合理性出发, -从避免ai写代码犯错的角度出发,从创业阶段不扩散需求的角度出发综合分析…… -很多时候ai会有明确的建议,大部分建议我都会接受,这个是不是可以让分诊就处理掉。 -他没把握的才找我」;「我同意你的意见,并补充功能新增类的,adr类别的, -协议变化类别的,还是需要人工决裁,如果是代码整理或者bug修改, -具体的代码细节其实ai看的比我清楚,让我判断我也判断不了」。 +**高置信决策卡的分诊代裁**(2026-08-12 裁定)。 - **人工地板(不论四棱是否同向,恒交维护者)**:功能新增类;ADR 类;协议/公开契约变化类; 破坏性或难回滚动作(存量数据迁移形状、删除已发布能力、force 操作);**安全/权限边界** @@ -440,7 +429,7 @@ pin 前置等运维细则见 `references/seat-post-protocol.md`)。** 判据二 为工作态 → 卡上贴四棱块 + 结论 + `auto-adjudicated` 标记 → 轮次报告设**代裁清单**专节 (聚合漂移的刹车);⑤ 本节首段的档位硬门达标(未达 ⇒ 本 fire 代裁整体跳过、 卡原样留在决策箱走维护者路径,恒安全)。 -- **一类自裁门(维护者 2026-08-29 裁:「把「一类」判据写进代裁通道(skills 席立卡固化)」)**: +- **一类自裁门**(2026-08-29 裁定): 召唤中总监席可免呈自裁一张决策卡,当且仅当三判据全立: ① 既有维护者裁定/在案类规则/成文纪律**机械决定方向**(席位只应用不发明; 裁决评论必须点名所用权威 —— 在案裁定的日期/引文、类规则或纪律的家); @@ -454,7 +443,7 @@ pin 前置等运维细则见 `references/seat-post-protocol.md`)。** 判据二 二类(边界:带一个可报点)与三类(地板)照旧现场呈报,走常设决裁批流程与详细写法纪律。 - **回翻条款**:代裁卡实施中发现契约终究要动 ⇒ dev 停手, 卡回`needs-user-decision` —— 报告分叉,⛔ 永不静默重裁。 -- **请示纪律(维护者 2026-08-25:「不要不停的弹出来让我确认,很浪费时间」)**:①方向性授权 +- **请示纪律**(2026-08-25 裁定):①方向性授权 (如「接受你的建议」「帮我合并」)覆盖整条执行链一并做完,⛔ 不逐项回问; ②需裁事项**攒批**(≤5 项/批,每项一行带推荐),一句同意即全链执行;③中间状态与限流 /重试类运维细节只进座位贴和触发器,⛔ 不弹给维护者——汇报只在里程碑、 @@ -500,7 +489,7 @@ pin 前置等运维细则见 `references/seat-post-protocol.md`)。** 判据二 ③ **每张成员都已裁/已定级,⛔ 决策箱内一张不许**(承重门:防借折叠把未裁卡洗进已裁 PR); ④ 每成员独立可核(每成员一个具名判据,批次不能静默少交);⑤ 派发令点名**排除清单** —— 长得像家族而不是的成员及理由(承重门:盲扫「同类」正是要防的错编辑)。 -**fold-or-serial 是必答题**(维护者 2026-08-19 原话:「你自己定的工作方式你也会忘。」):凡 +**fold-or-serial 是必答题**(2026-08-19 裁定):凡 ≥2 张排队卡共享热文件,串行队条目和/或链首认领必须以五门为判据显式答折叠还是串行 —— 不答而默认串行是漏答不是安全选项 (零余量棘轮文件上的串行还翻倍付账搜刮与人工合并次数)。 @@ -581,23 +570,20 @@ closes-list:部分交付 PR 特意写 Refs 而非 Fixes 时它恰为空,正是 一单一次 `Agent` 调用,`subagent_type: "os-dev"`,后台并行。 -**模型分档(model tiering;维护者 2026-08-10 三档裁定,本节覆盖一切更旧档制)。 -** 授权原话:「项目经理技能还需要考虑的是派任务时使用什么模型,也应该项目经理决定, -最低下限sonnet,最高可以 fable」;「比如 更新 项目经理技能 必须要使用 Fable 5」。 +**模型分档(model tiering;本节覆盖一切更旧档制)**(2026-08-10 裁定)。 **派发模型是 PM 的逐卡显式决定** —— 下限 `sonnet`(机械卡: 正确性由门禁农场机械判定,失败在漏跑门不在判断);默认判断档 `opus`(M/L、 裁决实施、任何带设计判断的卡;拿不准就升一档 —— 错派低档的返工贵过省下的额度); 上限 `fable`(最重协议/流程/编排卡,按卡取用非新默认)。**⛔ 强制条款两条**:① 凡改 **协议语义面**的卡一律 `CONTRACT_REVIEW_TIER` 档(`--tier` 输出)—— 面 = 本 `SKILL.md` 主文件、 -决策框架拷贝所在文件(以 `check:skill-frame-sync` 强制处为准)与 `.claude/agents/os-dev.md`(2026-08-20 -收窄,维护者原话:「接受你的建议」—— fable 当审计师用,不当施工队用); +决策框架拷贝所在文件(以 `check:skill-frame-sync` 强制处为准)与 `.claude/agents/os-dev.md` +(2026-08-20 裁定)(收窄 —— fable 当审计师用,不当施工队用); 仅 `references/**` 面、或任一 pm-dispatch 治理面上一行级机械文本改动的卡降为 **opus 施工** (纯机械一行 PM 酌定可至 sonnet 地板),**补偿控制即既有技能面复核档要求**(ACCEPT 路径分叉 ①:复核席跑契约复审档位)—— opus 施工的治理面改动只经 fable 档复核到达维护者, ⛔ 不新增标签不新增链;② 凡**改变契约接受/拒绝行为或扩大公开面**的卡(`domain:spec` 语义面;判据即分诊代裁的机械边界测试与 spec 席内分派判据 —— `references/lanes/spec.md`, -⛔ 不另抄第二份)一律 `CONTRACT_REVIEW_TIER` 档(维护者 2026-08-12 裁定, -原话:「同意,就按语义面收窄,立卡并通知 spec 席」)—— 契约错毒化一切下游, +⛔ 不另抄第二份)一律 `CONTRACT_REVIEW_TIER` 档(2026-08-12 裁定)—— 契约错毒化一切下游, 全仓最贵(条款②闸门见「入队与落地」)。**负边界(维护者 2026-08-28 裁定)**: 运行时权限/安全**行为**变更不是条款② —— 归人工地板「安全/权限边界」 类(控制是裁决本身,不走契约复核);条款②只指**已发布契约面**(两独立席位曾同错读, @@ -605,8 +591,8 @@ closes-list:部分交付 PR 特意写 Refs 而非 Fixes 时它恰为空,正是 而被读的正是复述):额度耗尽豁免及其 `needs:contract-review` 补偿一并及于它; 豁免够不到的地板只有维护者裁决能设。**席位档策略(同 2026-08-20 裁决)**:skills 车道外执行 PM 席与分诊席默认 `opus` 会话,fable 保留给裁决/复审子代理、skills 席与条款②工作 —— -各自档位归既有条款(本行只记策略)。降档出口两条:**额度耗尽豁免**(维护者 2026-08-13 原话: -「fable 如果用完了,可以用 opus」):仅当 fable 实测不可用(限流/墙杀中途,重派同样可降) 才落 +各自档位归既有条款(本行只记策略)。降档出口两条:**额度耗尽豁免**(2026-08-13 裁定): +仅当 fable 实测不可用(限流/墙杀中途,重派同样可降) 才落 `opus`,⛔ 不再往下;与**主动预降**(余量吃紧可预先降档),两者档位与理由皆记入认领评论 「Container & model」行。明确不变:spec 文本面照旧 sonnet/opus;机器面与下游适配默认 opus, 门禁语义设计升 fable,拿不准升档照旧。**档位逐次派发显式传参, @@ -641,8 +627,7 @@ opus, 门禁语义设计升 fable,拿不准升档照旧。**档位逐次派发 - **触 `skills/**`(对外发布的技能包)的卡,派发词必带 PM 定的净增行数预算**(按 feature 大小定, 小功能给小数);dev 装不下 ⇒ 停手回报, ⛔ 不自行扩写、不自行抬预算(抬预算是维护者裁决)。 - **原则:对外发布的技能包是平台最大的对外价值,评估恒整包整体**(维护者 2026-08-21: - 「对外发布的 skills 是整个平台的最大价值,尤其要整体考虑和评估。」)。 + **原则:对外发布的技能包是平台最大的对外价值,评估恒整包整体**(2026-08-21 裁定)。 - **文件面写两句**(预期落点 + 生产者在别包时报备后按生产者侧修, ⛔ 不在消费者侧打补丁);**same-day churn 行**(当天合并 ⇒ 先核对当前 main); **在飞重叠拦截**(每轮求交,相交即发四句警告,被完全覆盖就停下回报 ⛔ 不硬造 diff)。 @@ -727,21 +712,20 @@ dev**:先试 SendMessage 复活,不可用才走接手协议(四条增量见 runb 最多 2 轮,第三次升级);**ESCALATE**(见「升级与决策」)。 **ACCEPT 之后的路径分叉(动手之前先分,不是事后对照)。** 翻 ready / 挂 auto-merge / 入队前, -先取一次 PR 的路径面(`get_files`,⛔ 不看报告自述)。governed 面统一定义(维护者 -2026-08-18「同意」):`docs/adr/**` + `.claude/**`(全量,含 agents/hooks/settings)+ `skills/**` + `AGENTS.md` + -`CLAUDE.md`;agent 指令文件按此跨仓同判 —— objectui、cloud、objectos 一并在内(维护者 2026-08-18: -「任何对 agents.md 等文件的修改…包括 objectui cloud仓库」→「同意」;objectos 指令面 PR -照样 draft/人工合并)。路径面**一条命中** ⇒ ACCEPT 换终局四件套:① 复核结论照常写在 issue +先取一次 PR 的路径面(`get_files`,⛔ 不看报告自述)。governed 面统一定义(2026-08-18 裁定): +`docs/adr/**` + `.claude/**`(全量,含 agents/hooks/settings)+ `skills/**` + `AGENTS.md` + +`CLAUDE.md`;agent 指令文件按此跨仓同判 —— objectui、cloud、objectos 一并在内(2026-08-18 裁定) +(objectos 指令面 PR 照样 draft/人工合并)。路径面**一条命中** ⇒ ACCEPT 换终局四件套: +① 复核结论照常写在 issue 上(不能合 ≠ 不复核;技能面 PR 的复核席须跑在契约复审档位,档位单源见条款②闸门);② PR 留给维护者,**看得见地悬着**,终局两条:**人工直合即审核记录**(兜底);或**授权人工批准钉 -head ⇒ 队列放行**(2026-08-27 裁:「os-zhuang hotlong 批准算数」;批准人集合与判定单源 +head ⇒ 队列放行**(2026-08-27 裁定)(批准人集合与判定单源 = 队列守卫常量 `GOVERNED_APPROVERS`(`scripts/pm/check-governed-queue-guard.mjs`):APPROVED 且 `commit_id` = PR 当前 head 才算,批准后再推提交即过期转红)。未钉批准 ⛔ 不翻 ready、不入队、不挂 -auto-merge;③ 在 draft PR 上**向两个授权批准账户 `os-zhuang` 与 `hotlong` 都 request review**(维护者 -2026-08-27:「需要批准的主动推送到这两个账户。」主动推,永不等被发现;通道出处 2026-08-19: -「还是应该在 pr 的审核流程,发给 os-zhuang 审核。我的手机github 应该会收到推送消息吧」, -当日实测推送到达(「推送到了」),同日裁定:「只有需要我审核的pr -推给我。」)—— 「等人合」清单从此活在 GitHub 的 Review-requested 队列,合并自动消项。 +auto-merge;③ 在 draft PR 上**向两个授权批准账户 `os-zhuang` 与 `hotlong` 都 request review** +(2026-08-27 裁定)—— 主动推,永不等被发现;通道出处(2026-08-19 裁定), +当日实测推送到达(「推送到了」); +「等人合」清单从此活在 GitHub 的 Review-requested 队列,合并自动消项。 **能请审则请审;PR 作者身份即两账户之一的席位,对该账户请审必失败**(GitHub 拒绝向 PR 作者请审,author-identity 422)—— 该账户改为把 PR **assign** 给它替代通知(另一账户照常请审), 并在轮次报告点名说明走了 assignee 兜底。**请审走免碰 draft 位的专用 REST 端点,MCP @@ -749,8 +733,7 @@ auto-merge;③ 在 draft PR 上**向两个授权批准账户 `os-zhuang` 与 `ho merge」(「等人来合」与「被忘了」在 GitHub 上长得一模一样)。混合 diff 一条命中就分叉, ⛔ 不按比例判;要拆就让 dev 单独开 PR;已入队才读到本条 ⇒ 转 draft 与 disable 都做, 出队以阳性探针答、ref 缺席只旁证不承载结论(探针与两向相反实测住 platform-readings)。 -**skills 车道自有 PR 再按 diff 内容分流**(维护者 2026-08-26 裁定,原话:「skills -中的 pr,只有包含md文件时需要推给我审核,其他代码文件你直接自己审核。」):diff 含任一 +**skills 车道自有 PR 再按 diff 内容分流**(2026-08-26 裁定):diff 含任一 `.md` 文件 ⇒ 上述终局四件套照旧;纯代码面(`scripts/pm/` 工具、`.claude/` hooks/workflows/settings、 `skills/**` 非 md 产物)⇒ skills 席按契约复审档自审(清单不减)后直接落地(ready → 入队), ⛔ 不推维护者;分流只及 skills 车道自有 PR,其它车道 governed 面照旧。路径面干净的才转 @@ -776,7 +759,7 @@ PM 自己的工具 PR 留维护者。main-red 修复的跳队例外与事故锚 旧进决策箱,席内复核 ⛔ 不替代维护者裁定;外部评审链降为可选事后审计,非放行前提。 `needs:contract-review`(标签命名审的对象,恒英文)由 PR 创建者随**可复审契约增量**同笔挂 (draft PR,或先到的报告),复核完成前短暂停靠;前瞻预挂已废止(维护者 2026-08-28 裁定)。 - 席内复核细则(清单、隔离子代理、载体与保险丝)与裁定原话见 `references/contract-review.md`。 + 席内复核细则(清单、隔离子代理、载体与保险丝)与裁定出处见 `references/contract-review.md`。 - **碰生成物的 PR,入队前先同步 + 整体重生成**(os-regen 驱动零冲突标记地**静默丢掉一侧改动**): 四步序已机械化 `bash scripts/pm/os-regen-merge.sh`; 陷阱、断言措辞与锚点禁令见 landing-operations A。 @@ -828,8 +811,7 @@ a human merge 项、governed 合并审计清单(实跑 `node scripts/pm/check-go ## 断粮与跨墙恢复(5 小时用量墙) -出处:维护者 2026-08-11 提问(「首先项目经理能不能查到相关的数据,其次是到达时间窗口工作就会停, -是否应该设置一个1小时的定时以监测时间窗口已经解锁」)。检测读数、盲区与恢复 playbook 细则见 `references/platform-readings.md`;常驻原则: +(2026-08-11 裁定)检测读数、盲区与恢复 playbook 细则见 `references/platform-readings.md`;常驻原则: - **检测**:**权威的墙信号是失败本身**——撞墙报文里的重置时刻在那一刻可得、 事前查不到,把它记下来(`ccusage blocks` 等工具读数与其盲区在事实表)。 @@ -907,28 +889,24 @@ finding 定级换结果态,永不留挂)/ `Blocked-by:` 活性现验(合并一 重是推荐规则不是授权规则:50% 不把人工地板的事变成可派发的事,安全/权限边界与破坏性 难逆动作照旧恒交维护者。 **标准四棱卡面块是落卡与升级的必备件**(四棱维护者 2026-08-11 接受; -标准块 2026-08-18 裁定「同意」;同裁定的摘要视图/批量决裁通道已退役, -墓碑与原话见 `references/lanes/director.md`;收件箱由维护者定期与 AI 讨论消化,⛔ 不 assign -推送 —— 维护者 2026-08-19 裁定:「我感觉决策卡推给我太麻烦了,我需要和ai讨论才能判断, -这个还是维持之前的样子。我会定期和ai讨论。」),每张 `needs-user-decision` 卡落卡即带、 +标准块(2026-08-18 裁定);同裁定的摘要视图/批量决裁通道已退役, +墓碑见 `references/lanes/director.md`;收件箱由维护者定期与 AI 讨论消化,⛔ 不 assign +推送(2026-08-19 裁定)),每张 `needs-user-decision` 卡落卡即带、 ⛔ 不留待维护者到场再补。**四维分析从业务的角度写**(2026-08-20 裁)—— 落卡分析模板、 -写法六项、适用边界与四棱块固定形状细则连同出处原话见 `references/decision-analysis.md`; +写法六项、适用边界与四棱块固定形状细则连同出处见 `references/decision-analysis.md`; 推荐是输入,永不是放行,人工地板不变。四棱是四条评估轴的卡面序列化, 一一对应,同一个框架不是第二套,也是分诊代裁置信门的输入。 -**决策通道优先序:卡先于弹窗**(维护者 2026-08-23 报告: -「项目经理干活时经常弹出需要我决策的问题,如果我不在旁边工作就卡住了。」)。 +**决策通道优先序:卡先于弹窗**(2026-08-23 裁定)。 凡需维护者裁决,第一动作是落 `needs-user-decision` 卡(选项 + 推荐 + 证据 + 四棱块, 与弹窗同内容),被阻塞的执行卡**同笔**挂 `pm:blocked` + `Blocked-by:` 指向它,队列其余照常消化, ⛔ 永不整席等答复。`AskUserQuestion` 只是**在场加速器**:仅当维护者在本会话 ~30 分钟内有过人类输入才可发,每问必带推荐项,被 Skip 或长挂即转卡通道 ⛔ 不重弹 —— 卡先于弹窗存在,弹窗怎么死盘面都诚实。**项目总监席:人工召唤,四职 = `needs:contract-review` 事后审计(可选,放行归派发席席内复核 —— 见条款②闸门)、决裁勤务、维护者动作台账、 -governed 合并审计**(维护者 2026-08-27 裁定, -原话:「项目总监 由人工定期指挥,负责处理 contract-review 类别的和需要决裁的。」 -「需要维护者处理的事情,也归项目总监。」—— 决裁半边自此由 skills 席移交本席, -改写 2026-08-26「skills 和决裁的问题,还是由skills席统一人工处理,我会要求你处理某个仓的 -skills和决裁。」的归属半句,skills 面与其车道照旧归 skills 席)。入口 = `/pm-dispatch director`;⛔ +governed 合并审计**(2026-08-27 裁定)(决裁半边自此由 skills 席移交本席, +改写(2026-08-26 裁定)的归属半句,skills 面与其车道照旧归 skills 席)。 +入口 = `/pm-dispatch director`;⛔ 无 Routine 无 cron;档位硬门 = `CONTRACT_REVIEW_TIER`(保险丝机读),不达档只做免档整理并停放四职; 不占 `domain:*`,永不认领 backlog、永不写码;章程见 `references/lanes/director.md`。 @@ -941,15 +919,12 @@ skills和决裁。」的归属半句,skills 面与其车道照旧归 skills 席) 发布动作的完整清单与「围绕发布的工作照旧归座位」细则以 AGENTS.md「release act」 段为权威,含**合并 Version Packages PR**)。发现未经人工的发布痕迹按事故立案, ⛔ 不代跑补救性发布 —— 机械通道的存在不构成授权,遇到那类通道当缺陷上报。 -- **发版提醒纪律**(维护者 2026-08-27 拍板,逐字:「要发版本我会自己点。 - 除非重要修复要发版本你可以提醒我。」):Version Packages PR 默认永不催 —— +- **发版提醒纪律**(2026-08-27 裁定):Version Packages PR 默认永不催 —— 挂着的发布 PR 是常态,⛔ 不进维护者摘要;唯一例外 = 重要修复已合 main 在等发布, 且提醒必须点名该修复与不发版的用户可见后果,让维护者仅凭提醒即可判缓急; 与上条相组合 —— 本条管**何时开口**,上条管**谁动手**。 -- **Governed 面由维护者人工合并,合并即审核记录**(三裁一脉:2026-08-08 - 「adr 只能由维护者自己确认,人工合并,ai 不得擅自合并」;2026-08-11「所有 skills 的更新和adr - 类似,需要人工审核」;2026-08-18 对「人工合并即人工审核,事后审计代替事前门」 - 整包:「同意。」;2026-08-27 增**授权批准钉 head ⇒ 队列放行**第二路径, +- **Governed 面由维护者人工合并,合并即审核记录**(三裁一脉:(2026-08-08 裁定); + (2026-08-11 裁定);(2026-08-18 裁定);2026-08-27 增**授权批准钉 head ⇒ 队列放行**第二路径, 细则单源见 ACCEPT 路径分叉)。面 = 该节统一定义;skills 车道纯代码 PR 的 md-content 分流、 禁令三条与离队出口同见该节。⛔ **agent 席位永不以任一账号对受管面 PR 提交批准 review**(授权集合内也有 agent 席,与「永不入队」同级);事后防线 = 审计清单, diff --git a/.claude/skills/pm-dispatch/references/contract-review.md b/.claude/skills/pm-dispatch/references/contract-review.md index 3d0a8cebff..983dcf6170 100644 --- a/.claude/skills/pm-dispatch/references/contract-review.md +++ b/.claude/skills/pm-dispatch/references/contract-review.md @@ -4,31 +4,30 @@ ## 载体纪律(挂与清) -- **适用性 —— 内容肢及于 published `skills/**`**(维护者 2026-08-31 批 #12「同意」):作**可证伪的 +- **适用性 —— 内容肢及于 published `skills/**`**(2026-08-31 裁定):作**可证伪的 算子/契约语义主张**的改动挂标走本复核;⛔ 判据不是「提到契约」,纯算子清单、拼写、 格式不触发(标尺:10 处命中仅 3 处主张)。受管面人工合并 ⛔ 不替代复核,两道保障叠加。 -- **claim 声明按设计临时(provisional)**(维护者 2026-09-01「同意」):`Clause-②: yes|no` 只定 +- **claim 声明按设计临时(provisional)**(2026-09-01 裁定):`Clause-②: yes|no` 只定 派发档位的保守方向,⛔ 非终审;真闸门在 PR/报告时的档位复核 —— 证据与成本在那里。 声明被档位推翻 = 机制按设计工作,⛔ 不作席位过失。 - **机械地板(同笔;claim 时可查树、无需判断)**:任何**新导出符号**或**已发布载荷上的 新键**恒 `yes`,直接锁契约复审档。**conformance 类 ⛔ 不机械化**(填充已声明字段、在两 个已发布码之间重选输入类):判别需档位判断,claim 拿不准 ⇒ **按 yes 派契约复审档**(假 yes 自纠、假 no 出货);⛔ 不建全量分类学与 claim 时决策程序(创业镜头:代价是复审轮)。 -- **PR 与卡双载体同笔挂**(维护者 2026-08-22:「简化一点是否可以直接挂 PR 侧」「两边都挂好 - 」; PR 一存在即挂,报告先于 PR 到达则先挂卡侧、ACCEPT 时补齐 PR 侧),同笔在卡上记一行 +- **PR 与卡双载体同笔挂**(2026-08-22 裁定)(PR 一存在即挂,报告先于 PR 到达则先挂卡侧、 + ACCEPT 时补齐 PR 侧),同笔在卡上记一行 条款②认定;停靠短暂(只防复核完成前误入队),⛔ 无「等外部席位」的无限期状态。 - ⛔ **不预挂**(维护者 2026-08-28 裁定):可复审增量存在前永不挂标,提前挂已废止 —— 前瞻 条款②事实住卡上裁决/分诊评论、`Clause-②` 申报与 `--tier` 输出;开载体恒 = 真实待审。 -- **载体不迁移**(维护者 2026-08-18,原话:「中期把闸门迁到 PR review 的 Request Changes - 上 我觉得没必要」): 闸门载体保持本标签,⛔ 不迁 PR review / Request Changes、不为迁移留门。 +- **载体不迁移**(2026-08-18 裁定): 闸门载体保持本标签, + ⛔ 不迁 PR review / Request Changes、不为迁移留门。 - **重挂前先查裁决**:闸门标签缺失 ⇒ 先 grep 卡评论找复审结论 —— PASS + 无标 + head 未动 = 已清标非被剥;head 后移或无结论才重挂(`get_reviews` 读空 ≠ 未复审)。 ## 复核归属与资格(席内) -- **归属:该卡派发席,交付后收集复核当轮席内完成**(维护者 2026-08-31 裁定,原话:「项目经 - 理是fable 或者可以派fable的子任务都可以自己contract view吧?」;沿 2026-08-21「你自己就是 - Fable,自己就可以审核」的放宽 —— 审的是低档实现者的契约增量,非自身产物;主文件 +- **归属:该卡派发席,交付后收集复核当轮席内完成**(2026-08-31 裁定) + (沿(2026-08-21 裁定)的放宽 —— 审的是低档实现者的契约增量,非自身产物;主文件 「⛔ 免复核不放行」禁的是免复核直放,不禁本路径)。 - **契约判断清单(收集复核的升格件,逐项落卡/PR 评论,⛔ 不是散文自述)**:① derived judgments 逐项 —— diff 引出的接受集/公开面变化逐条点名判对错;② semver 定级 —— 变更 @@ -37,16 +36,16 @@ 隔离的 fable 复核子代理**出第二意见,只喂卡片、既有裁决与 PR 本体,⛔ 不喂派发令与 派发席自己的结论(污染即失独立性);简报写成**对抗性**(找拒绝理由)。未达档席 ⛔ 不凭 自述复核,恒走本路径;子代理裁决按转录核验采信(下节),逐字采纳或整体作废。 -- **放行 = 清标即落地**(维护者 2026-08-25,原话:「审核通过你应该直接负责合并吧,还要等原始 - 的项目经理吗」):PASS ⇒ 同席同笔剥标(双载体),清标评论引 2026-08-31 裁定作 provenance,按 +- **放行 = 清标即落地**(2026-08-25 裁定):PASS ⇒ 同席同笔剥标(双载体), + 清标评论引 2026-08-31 裁定作 provenance,按 `landing-operations.md` 走落地前检 → 转 ready → 挂 auto-merge/入队;轮报设**复审清单**专 节(同代裁清单强制审计形状)。 -- **落地前检三条**(维护者 2026-08-31「同意」):① 席内契约档 PASS 在案(卡上达档裁决评论);② +- **落地前检三条**(2026-08-31 裁定):① 席内契约档 PASS 在案(卡上达档裁决评论);② `needs:contract-review` 双载体已清;③ PR 全部 check 全绿(⛔ 非 required 子集)。② 逐对机读 `node scripts/pm/check-clause2-carriers.mjs --pair PR-NUMBER`:0 双肢可读且一致 · 4 不一致 · 3 环境答不 了 ⛔ 不作干净。转 ready 同笔留 provenance 评论引该 PASS;受管面不适用,draft-only 终局不变。 -- **外部评审链降为可选**(改写 2026-08-27「契约复审也是很重要的职责,也是需要定时处理 - 的」所立的定时轮常设归属):分诊定时轮与总监席召唤非放行必要条件,在线时作**事后审计/抽 +- **外部评审链降为可选**(改写(2026-08-27 裁定)所立的定时轮常设归属): + 分诊定时轮与总监席召唤非放行必要条件,在线时作**事后审计/抽 查**,其裁决仍被尊重 —— 审计 FAIL 按状态机 label-flip 交回派发席补丁轮;⛔ 不与席内复核 抢同一载体的放行动作;资格与档位硬门对审计者同样成立。 diff --git a/.claude/skills/pm-dispatch/references/decision-analysis.md b/.claude/skills/pm-dispatch/references/decision-analysis.md index 2b811d4d2f..0ff25f66a7 100644 --- a/.claude/skills/pm-dispatch/references/decision-analysis.md +++ b/.claude/skills/pm-dispatch/references/decision-analysis.md @@ -1,6 +1,6 @@ # 决策分析写法 —— 四维从业务角度写 -出处(维护者 2026-08-20 裁定,逐字,未译):「四维分析应该从业务的角度写我才好判断」。 +出处(2026-08-20 裁定)。 ## 适用面(边界) @@ -8,10 +8,9 @@ 旧,不强加行业类比。四条轴本身不变,轴定义与绑定句在主文件「升级与决策」。 - 只适用新记录,存量分析 ⛔ 不回改(new-records-only,与四维中文化同款先例)。 -## 常设决裁批流程(2026-08-26 裁;裁决原话与归席见主文件「升级与决策」) +## 常设决裁批流程(2026-08-26 裁;归席见主文件「升级与决策」) -- 每批**恰好 5 张(末批不足照呈),呈完即停等回批**(2026-09-01 - 裁「每批5张详细解释,不是这样一堆列给我,这个也要写入skills」),⛔ 永不一条消息投多 +- 每批**恰好 5 张(末批不足照呈),呈完即停等回批**(2026-09-01 裁定),⛔ 永不一条消息投多 批;批序:在飞被阻塞 > 运营阻塞 > 用户可见 > 结构性;每卡 = 六项写法 + 四棱块;回批一行 式「1A 2B …」,「X, 但…」= 附带条件随执行落地;裁后四件原子执行不再请示,一口气跑 完;批间新入箱的卡滚入下一批,收件箱读数为零才收工。 @@ -45,10 +44,10 @@ 构、响亮拒绝优于静默容忍);④ 创业阶段不扩散(remove 优于 declare-and-maintain,每个已声明的键 都是永久义务);一行推荐 + 字母选项(A/B/…);**一行强制置信缺口(「本分析看不见什么」)**。 四棱行同受六项约束:每行论据从业务立场写,机制名词只作括号补充。 -**四棱分歧推荐序**(2026-08-27「tong y 4」):②实测拉动⇒荐①长远终态;零拉动⇒荐④不扩散; +**四棱分歧推荐序**(2026-08-27 裁定):②实测拉动⇒荐①长远终态;零拉动⇒荐④不扩散; ③破余下平局向响亮/结构;安全与难逆恒人工;⛔ 只排推荐,分歧照旧升级、代裁面不扩。 **①长远权重下限**(2026-09-01 裁「四维分析中,长期合理应该权重最高,至少50%」):①恒 ≥50%,推荐以①领起,其余各轴合起来投不翻①;①按本义读(缩小而非扩大特例/契约增生),⛔ 不据它为投机扩张背书;⛔ 只排推荐不授权 —— 50% 不把人工地板的事变成可派发的事。 -**应用仓推荐序特例**(2026-08-31 裁「既然是平台缺陷,就应该等待平台处理」):阻塞源是平台 +**应用仓推荐序特例**(2026-08-31 裁定):阻塞源是平台 缺陷 ⇒ 恒荐等待,⛔ 不荐绕行(形状容错/复刻平台规则)、不荐劈半落地。 diff --git a/.claude/skills/pm-dispatch/references/dispatch-runbook.md b/.claude/skills/pm-dispatch/references/dispatch-runbook.md index f871aba95e..ac866ecf23 100644 --- a/.claude/skills/pm-dispatch/references/dispatch-runbook.md +++ b/.claude/skills/pm-dispatch/references/dispatch-runbook.md @@ -1,12 +1,11 @@ # 派发与收集运行细则(references —— 按需加载) -出处:主文件(原则与条款住那里);本表只放细则增量 —— 原话、参数、模板、步骤 —— -在对应操作那一刻查阅;⛔ 不引用 issue 编号。 +出处:主文件(原则与条款住那里);本表只放细则增量 —— 出处日期、参数、模板、步骤 +—— 在对应操作那一刻查阅;⛔ 不引用 issue 编号。 ## 车道取卡全序与 `pm:blocking`(维护者 2026-08-13) -出处(逐字,未译):「被依赖的卡片是不是应该通过label标注提高优先级。 -项目经理处理任务清单时,bug 是不是应该提高优先级。」 +出处(2026-08-13 裁定)。 全序本体与 `pm:blocking` 推导在主文件; 补遗:级序理由一行 —— p0 是显式裁定,blocking 一张挡多张,bug 是已坏的不变量、先于增强, 卡龄防饿死;写入与摘除都在分诊轮 sweep,依赖者全关即摘,手工挂上的按误标处理、 @@ -14,20 +13,17 @@ sweep 对着索引校正;种子与消费者注记在 `scripts/pm/ensure-pm-label ## 紧急卡 fable 直接分诊(维护者 2026-08-13) -出处(逐字,未译):「对于比较紧急的卡片,是否应该使用 fable 5 子agent直接分诊」。 +出处(2026-08-13 裁定)。 触发、授权面与同格式同效力在主文件;补遗:授权面不含派发(⛔ 不写码、不认领、 不派发);单一生产者纪律照旧(与「代扫」同界)—— 分诊座位在班且已在处理同卡即让行; -紧急通道改的是节奏,不是生产者数目。**半状态治愈积压排序**(维护者 2026-08-19「没有切换 -label,导致挂了很久」;排序规则本体在主文件):限量 + 最新优先会令最老半状态结构性饿死, +紧急通道改的是节奏,不是生产者数目。**半状态治愈积压排序**(2026-08-19 裁定) +(排序规则本体在主文件):限量 + 最新优先会令最老半状态结构性饿死, 活过一个 sweep 周期的半状态是治愈环自身的缺陷,不是库存;正文自报 P0/data-integrity 的命中即走本节紧急通道;机械年龄告警在半状态巡查脚本(细节以脚本头为权威)。 ## 发现分诊轮细则(维护者 2026-08-13 / 08-25) -出处(逐字,未译),同日三段:「Finding 很多,是否建议集中分诊」…「按照你的建议」 -= 域分批集中轮常设授权;「还有这个积压时常态,是否应该优化。」= 结构修复令; -「积压数字本身有误导 —— 47 张里大半是带重启条件的健康 hold(它们本来就该躺着), -那为什么标 finding」= 状态语义裁定。 +出处(2026-08-13 裁定),同日三段:域分批集中轮常设授权;结构修复令;状态语义裁定。 - **状态转换机制**(「finding 恒 = 待首次定级」在主文件):定级出 hold ⇒ 同笔 `finding` → `pm:on-hold`(域标签保留;hold 评论照既有纪律带日期/理由/具名重启条件, @@ -68,7 +64,7 @@ fire 附带一次: ## 分诊席读数成本三则(维护者 2026-08-20) -出处:三方讨论后维护者「立卡」;实测数百评论座位贴每轮全文重读数千 token。 +出处(2026-08-20 裁定);实测数百评论座位贴每轮全文重读数千 token。 - **收班简报索引化**:四段模板 —— 首行机器判据(「分诊轮收尾」 起始标记,**逐字不动**,互斥守卫靠 grep 它)+ 索引表(卡号 | 一行判决)+ 健康指标 + @@ -86,7 +82,7 @@ fire 附带一次: ## 分诊两级盘点细则(维护者 2026-08-20) -出处原话逐字住主文件「两级盘点」条。实测全量四仓 ~50k token/轮, +出处住主文件「两级盘点」条。实测全量四仓 ~50k token/轮, `since` 等价 ~8k。小时层三读法:sweep 析取①②③ = `list_issues` + `since`(标签变更刷新 `updated_at`, 半标注照样入窗);解锁扫描反演 = 逐仓 `state=CLOSED` + `since` 与 `Blocked-by:` 反向索引求交, 命中走既有回队双查;健康指标 = 逐标签 `perPage: 1` 只读 `totalCount` —— @@ -99,14 +95,13 @@ fire 附带一次: ## 落卡与裁决记录细则(维护者 2026-08-13) -出处(逐字,未译):「还有很多我发现分诊或者决裁后没有改状态, -这个也是问题」…「这个也需要更新项目经理技能」。实测:一张决策卡三个叠加半状态。 +出处(2026-08-13 裁定)。实测:一张决策卡三个叠加半状态。 - **裁决记录四件补遗**(四件本体在主文件;原子、记录座位全责、维护者裁与代裁同规): ① 鲜度门可内联声明分歧代替调和正文,对过期正文记录的裁决按过期论。 - **出决策箱须引可取回的裁决 id**:把卡转出 `needs-user-decision` 的那一笔,评论须带台账条目 或卡上裁决评论的 comment id,且该 id **同趟取回过** —— 取这一下就是判据(两载体皆合 - 法:2026-08-31 裁「其他同意」定存在性归总监席每场台账,卡上评论为详注);⛔ 时间戳 + 回忆 + 法:(2026-08-31 裁定)存在性归总监席每场台账,卡上评论为详注);⛔ 时间戳 + 回忆 不是引用,带 id 不等于可取回(两形实测:事后 404 的真 id、凭印象写出的假 id)。读侧对 称:决策复读命中无可取回 id 的出箱按**未裁**处理 —— 同笔转回、⛔ 不派;结论只落可核 性,⛔ 不断成因。 @@ -125,13 +120,12 @@ fire 附带一次: base + PR 号,⛔ 永不用 PR head:分支一删 object 即不可达,而块读着仍可重放;PR head 确是主体时 明说,并把**输入本身**(diff 或改动 hunk)记在旁边,使运行无该 object 也可重建;② 同理**锚内 容、不锚位置** —— 行号随文件生长而漂,取症状字符串或独特标识符。 -- **行文纪律**: - 出处一行(日期 + 原话);实测叙事至多压成一行 —— 故事住在卡上,不进操作文本。 +- **行文纪律**:出处一行(日期;原话仅限操作性判据); + 实测叙事至多压成一行 —— 故事住在卡上,不进操作文本。 ## 结论当轮执行(维护者 2026-08-14) -出处:维护者裁(逐字,未译) -「现在开工派发」;当日实测是成批「建议关闭」复测结论与结论表躺置多日无人执行。 +出处(2026-08-14 裁定);当日实测是成批「建议关闭」复测结论与结论表躺置多日无人执行。 - **结论产生的那一轮就执行它。** 复测/审计/裁决得出结论而不在同一轮完成对应的关闭 /换标写入,本身就是半状态,与半状态家族同列 —— 记录后离场(record-and-walk-away) @@ -191,8 +185,7 @@ subagent 批之前先快进:`git -C pull --ff-only origin main`;检 ## 跨车道简单阻塞项直接接手(维护者 2026-08-13) -出处(逐字,未译):「如果当前任务依赖其他赛道的任务, -如果判断简单,是否可以直接接手而不必持续等待」。判据与认领纪律(含 `Claim:` 拼写) +出处(2026-08-13 裁定)。判据与认领纪律(含 `Claim:` 拼写) 在主文件;补遗:只覆盖「等一周 vs 做十分钟」的形状;`packages/spec` 恒归 spec 座位, 本条不豁免(唯一所有者规则更硬);「借调」墓碑在主文件多仓协调 4 —— 判据是依赖形状, 只做被本车道开卡 `Blocked-by:` 点名的那一个阻塞项,做完即回,⛔ 不顺手接第二张。 diff --git a/.claude/skills/pm-dispatch/references/landing-operations.md b/.claude/skills/pm-dispatch/references/landing-operations.md index c09d47d945..2b48dd9094 100644 --- a/.claude/skills/pm-dispatch/references/landing-operations.md +++ b/.claude/skills/pm-dispatch/references/landing-operations.md @@ -55,11 +55,11 @@ job 结论,绿即转 ready + 挂 auto-merge,未绿阶梯重挂;CI success webhoo 触发条件是卡终局且报告已收复核,⛔ 合并前不归档(活会话是 dirty 自救的执行手;误归档可 unarchive,但容器现场已失,宁晚勿早);暂停/交接把在挂订阅清点进座位贴,⛔ 不留孤儿订阅。 -**main-red 事故两条约定**:① **p0 fix-forward 允许跳队**(维护者 2026-08-25「同意」):main +**main-red 事故两条约定**:① **p0 fix-forward 允许跳队**(2026-08-25 裁定):main 红的止血 PR(p0、机械、根因已核实)可跳队(GitHub 队列自带 jump-the-queue),或按既有 governed 例外由维护者人工直合一行修复 —— 排在事故自己堵住的队列后面是具名反模式; 仅限 main-red 修复,⛔ 不放宽其它任何 PR 的 queue-only 落地。 -② **一个失败 check 只锚一张卡**(维护者 2026-08-25「同意」):main-red +② **一个失败 check 只锚一张卡**(2026-08-25 裁定):main-red 事故按失败 check 名锚一张卡,先立者赢;后见者把读数评论到锚卡上,⛔ 不另立。 ## C. 依赖前棒才能转绿的 PR:draft 停放 + 签名级预期红清单 diff --git a/.claude/skills/pm-dispatch/references/lanes/director.md b/.claude/skills/pm-dispatch/references/lanes/director.md index 3360784ab0..ed8b7cb996 100644 --- a/.claude/skills/pm-dispatch/references/lanes/director.md +++ b/.claude/skills/pm-dispatch/references/lanes/director.md @@ -16,16 +16,13 @@ issue 编号;机器判据恒英文,引文逐字不译。 - **双射 carve-out**:一张 `pm:seat` 座位贴、四段协议照旧(与分诊席同款);不占 `domain:*` 车道,范围按职责标签跨车道跨仓;永不认领 backlog、永不写码;机械接手经派发 dev。 -## 基本原则(维护者 2026-08-27,逐字未译) - -> 「项目总监 工作的基本原则,5张一批,要从业务角度解释清楚问题和和选项,并带上四维综合分析」 +## 基本原则(2026-08-27 裁定) - 三要素:每批 5 张;每卡从业务角度讲清问题与选项及其真实代价;每卡带四维综合分析 + 一个推荐。呈报批序与写法见 `../decision-analysis.md`;四维框架单源在主文件「升级与决 策」四轴(`check:skill-frame-sync` 管的四份拷贝不动,⛔ 本文不复制框架本体)。 -- 本原则重锚 2026-08-26 流程裁定(「决裁流程今天这样很好,决策卡5张一组,从业务的角度给我具体解 - 释,说明可选项,并进行四维分析。应该写入技能。」):流程未变,2026-08-26 定流程、2026-08-27 升格定归属。 -- **创业阶段不渐进**(维护者 2026-08-27,逐字:「创业阶段不渐进 应该写入项目总监skills」): +- 本原则重锚(2026-08-26 裁定):流程未变,2026-08-26 定流程、2026-08-27 升格定归属。 +- **创业阶段不渐进**(2026-08-27 裁定): 废弃别名与退役默认立即退休,无窗口无双拼写宽限;staged 仅凭具名外部用户证据可荐。 ## 职责一:`needs:contract-review` 事后审计/抽查(可选) @@ -34,9 +31,7 @@ issue 编号;机器判据恒英文,引文逐字不译。 `../contract-review.md`,⛔ 不另抄):召唤时作事后审计/抽查 —— 枚举载体(卡与 PR 两侧)与近 期落地的条款② PR,查复核质量与漏网;裁决仍被尊重但非放行必要条件,⛔ 不与席内复核抢 同一载体的放行动作;非机械 CI 红交回具名读者,机械红可接手(经派发 dev 执行)。 -- **处理三分支**(维护者 2026-08-27,逐字未译:「刚才说的 needs:contract-review 类别,项目总监处理 - 时,如果是收尾,应该帮忙处理完到合并。如果有大的错误,应该改标签。如果是卡在决策卡,和我讨论该 - 怎么处理。」): +- **处理三分支**(2026-08-27 裁定): - **收尾(PASS,工已完)⇒ 跟到合并为止**:非受管 code PR 走「清标即落地」全链;受管面 照旧 draft-only + 人工合并 ——「到合并」= 推进到就绪并点名等待,⛔ 不代维护者合并。 - **大的错误(FAIL/REWORK)⇒ 改标签即交接**:按状态机一笔 replace 转回相应工作态(重派/ @@ -47,29 +42,29 @@ issue 编号;机器判据恒英文,引文逐字不译。 - 决策收件箱(`needs-user-decision`)跨仓勤务:按基本原则批呈;一行回批即全链执行,裁后 四件原子执行不再请示;批间新到滚入下批,收件箱清零才收工;⛔ 不复活已退役的 - 汇总 issue(维护者 2026-08-19:「之前定期生成的决策汇总 issue没什么用」)。 + 汇总 issue(2026-08-19 裁定)。 - 代裁通道(分诊席或本席)硬门、置信门与人工地板见主文件「分诊座位职责」,⛔ 不另 抄;不达档 ⇒ 通道整体跳过、卡走维护者路径,恒安全。 -## 职责三:维护者动作台账(维护者 2026-08-27,逐字未译:「需要维护者处理的事情,也归项目总监。」) +## 职责三:维护者动作台账(2026-08-27 裁定) - `pm:awaiting-maintainer` 跨仓标签是「待人工动作」唯一机器载体(决定已做、只剩一次 GitHub 之外人工动作的态);本席是台账管家,车道席照旧只负责**入态**,台账与出口归本席。 - 召唤时随决裁批次呈报一份合并的「待您」清单 —— 座位贴散文降为指针,标签即状态。 - **出口执行**:核验动作确已发生 → 摘标 + 证据评论同笔;出口条款见 `../state-machine.md`。 -## 职责四:governed 合并审计(维护者 2026-08-27,逐字未译:「合并审计归总监那件事,同意你的建议」) +## 职责四: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 补齐。 + 立案回滚(事后审计制)(2026-08-18 裁定);容器 403 归因逐条走 MCP 补齐。 - ⛔ 不新增标签(枚举本地树推导零 API);⛔ 无 cron(节奏与停放同「授权与形态」)。 ## 交接台账(supersession —— 原条款已原地改写,此处记两个日期的关系) -- **决裁半边**:2026-08-26 裁定(原话见主文件总监段)的决裁归属由 2026-08-27 移交本席; +- **决裁半边**:2026-08-26 裁定(见主文件总监段)的决裁归属由 2026-08-27 移交本席; skills 面照旧归 skills 席 —— 分界:改 skill/指令/governance 文本的工作归 skills 席,出裁 决、清复审标、清点待人工清单的勤务归本席。 - **复核归属与代裁 runner**:skills 席自绑小时钟(维护者 2026-08-23)实测已死,⛔ 不复活 → 移交 diff --git a/.claude/skills/pm-dispatch/references/seat-post-protocol.md b/.claude/skills/pm-dispatch/references/seat-post-protocol.md index c38a489916..7648bd26cb 100644 --- a/.claude/skills/pm-dispatch/references/seat-post-protocol.md +++ b/.claude/skills/pm-dispatch/references/seat-post-protocol.md @@ -35,7 +35,7 @@ 的座位,15 张卡在飞、产出新鲜到分钟级)。可跑读法:本车道 `pm:dispatched` 卡按 `updated_at` 降序一搜,或最近一条认领/ACCEPT/审计评论的时间戳 —— 分钟级即活,贴怎么说都不算。 - **写侧刷新点 = 轮次边界**:派发时、收班时、暂停/交接前 —— 接管场景是贴存在的理由, - 边界刷足以覆盖;中途状态的承载见上「班次叙事」条(原话在主文件)。 + 边界刷足以覆盖;中途状态的承载见上「班次叙事」条(见主文件)。 协议/结构升级迁移状态、或巡检发现正文不符时,当场改正文 + 审计评论。 Routine 座位的收尾简报也落自己的座位贴(它是下一轮自退守卫的读数)。 - **收班 = 状态 flush + 在飞显式安置, @@ -43,10 +43,9 @@ 安置默认**离任留守**(下条);留不了的才热移交:在飞卡落**收单注记**(评审判据、 落地步骤、当前状态)+ 点名接手看护者 —— 默认下任座位,在跑云会话经 poke 触发器投递 (⛔ 非 `SendMessage` 直投,见 runbook);看护只守落地,**评审判断不可外包**。**收班序列** - (维护者 2026-08-27 裁「落协议」):贴正文/标题刷新在先,**收班简报评论是最终一笔**; + (2026-08-27 裁定):贴正文/标题刷新在先,**收班简报评论是最终一笔**; 继任的释放判据 = 简报在;标题滞后是可修半状态,坐席时顺手修,⛔ 不是阻塞。 -- **离任留守(linger)= 收班后的默认看护形态**(维护者 2026-08-27 裁「落协议」; - 提案片段:「立刻进行交接,并继续处理完手上的任务到合并」;「清标即落地」的延伸, +- **离任留守(linger)= 收班后的默认看护形态**(2026-08-27 裁定)(「清标即落地」的延伸, 谁评审谁落地):离任 PM 可继续把在手项驱动到 MERGED;写面恰为**简报点名的项**(已 ACCEPT 待队列 PR、落地中评审链载体),⛔ 不读队列、不新派发、不碰未点名卡,残余定时器同界; 末尾巴合并 ⇒ 贴上一条尾清注记。继任立即坐席,点名集作围栏(声明式,同热文件串行队);