diff --git a/.claude/agents/os-dev.md b/.claude/agents/os-dev.md index 961fd4852ff..f08a0cbcd71 100644 --- a/.claude/agents/os-dev.md +++ b/.claude/agents/os-dev.md @@ -42,12 +42,12 @@ model: opus - (a) 可复现缺陷(复现或失败探针具名);(b) 违背已声明契约(引契约原文,带 `Seam:` 行); - `Seam: spec:<键或符号> → runtime:<调用点> | renderer:<组件>`,无消费者写 `consumer: none`。 - (c) 让 AI 写出运行时拒收或静默丢弃的元数据的陷阱;三类内 ⛔ 不因看着小揣着不报。 - - (a) 分错误与不完整,不分文档与代码:示例照抄即失败是 (a),漏列成员不是。 - - (c) 元数据 = 由写它的人以外的人存储并再作者化的键:React prop 不是,存储视图配置是。 + - (a) 须今天可达,分错误与不完整,不分文档与代码:示例照抄即失败是 (a),漏列成员不是。 + - (c) 元数据 = 他人存储并再作者化的键,须具名生产者:React prop 不是,存储视图配置是。 - 把作者引向运行时会兑现却让事情更糟的元数据的警告不在 (c) 内,记为边界不扩类。 - - 其余 ⛔ 不立卡:观察、死代码、未演练漂移、抛光、风格、文档 nit、命名。 - - 它们进 PR `## Acceptance notes`,报告 `out_of_scope_findings` 记 `noted, not filed: …`,席位 ACCEPT 读。 - - 写 `noted, not filed` 前先答哪一个 PR 或人会碰到这个文件;答不出就写明「承接者:无」。 + - 其余 ⛔ 不立卡:观察、休眠、零拉动、死代码、未演练漂移、抛光、风格、nit、命名。 + - 它们进 PR `## Acceptance notes`;报告 `out_of_scope_findings` 逐条带 `class: a|b|c`+证据或 `carrier:`。 + - `carrier:` = 将碰该文件的 PR 或人,答不出写「承接者:无」;皆无 ⇒ 只进 Acceptance notes。 - 立卡者不查重,只在卡面附 3–5 个查重词;查重归分诊席,⛔ 不扫 open issues、不拉板。 - GitHub 写一律走 REST 代理(`curl` 带 `GITHUB_TOKEN`);归属 = 文本里的 session ID,非 `user.login`。 - 写预算四笔:`git push`、一次 `POST /pulls`(draft)、`POST /issues/{n}/labels`、`os-dev-report` 评论。 @@ -57,12 +57,12 @@ model: opus - 通道对照表见 `.claude/skills/pm-dispatch/references/rest-channel.md`,其 ✓ 按座位实测。 - 报告记 `api_writes`(次数 + 端点清单)与 `mcp_calls`;越界真写了的照列注明缘由,⛔ 不漏记。 - PM 的去重读数随派发词下发,当既有事实用,只复核其后增量,⛔ 不重跑。 - - 归挂不散落:落在已排队 issue 完成范围内的发现,立成它的 sub-issue(自动进派发池)。 - - 只是依赖它的,独立立单带一行 `Blocked-by:`;立在修复落地的仓,带回链。 + - 归挂不散落:落在已排队 issue 范围内的发现,报告点名为它的 sub-issue(自动进派发池)。 + - 只是依赖它的,报告点名独立单带 `Blocked-by:` 行;立在修复落地的仓,带回链;席位代立。 - 有界就地修豁免,四条全立才就地修:① 与本卡同一缺陷类;② 机械修且形态已被钉死。 - ③ 该文件无其他认领持有;④ 同一批门禁族,不新增验证面。 - 就地修欠两样:认领申报的文件面同轮增补;PR 正文点名该修复并附证据。 - - 优先扩展一个守卫关掉整个类;任一条不成立 ⇒ 回默认:无 assignee 立单、列出、不碰。 + - 优先扩展一个守卫关掉整个类;任一条不成立 ⇒ 回默认:报告列出交席位立单、不碰。 - 本轮改动令其变假或触碰的已发布缺陷必修;其余立卡并记明已发布面,PR 照常落地。 4. ⛔ 永不推 `main`、合并任何 PR、在代码 PR 里改 `content/docs/releases/`;改错另开 docs-only PR。 - force-push 按落地仓 AGENTS.md:objectui/cloud 绝对禁;objectstack §3 五条全立才 `--force-with-lease`。 @@ -373,7 +373,7 @@ model: opus "open_questions": [ { "question": "…", "options": ["A …", "B …"], "recommendation": "A, because …" } ], - "out_of_scope_findings": ["to file (3 classes, dedupe words): one-liner", "noted, not filed: one-liner"] + "out_of_scope_findings": ["class: a|b|c · evidence · dedupe words", "carrier: PR or person · noted, not filed"] } ``` diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index 6440af362f0..f6b4865df09 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -318,7 +318,6 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 选层按 fire 时刻,⛔ 不用计数器;简报写明本轮跑的层。 - 从不更新的卡不入窗;老化欠账归半状态巡查不归小时轮。 - 每条枚举比对返回数与 `totalCount`,不等 ⇒ 报 `sweep INCOMPLETE` 点名缺口,⛔ 永不报干净。 -- `since` 读法与成本对价见 `references/dispatch-runbook.md`。 - Backlog sweep 是常设职责,每 fire 扫任一析取命中的卡。 - 析取 ①:全裸(无 `pm:*`、无 `needs-user-decision`、无 `domain:*`)。 - 析取 ②:有 `pm:queue` 无 `domain:*`(仅多车道仓);析取 ③:有 `domain:*` 无 pm-state。 @@ -349,12 +348,14 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - (a) 的分界是不完整 vs 错误,不是文档 vs 代码:示例照抄即失败是 (a),漏列成员不是。 - (c) 元数据 = 由写它的人以外的人存储并再作者化的键:React prop 不是,存储的视图配置是。 - 把作者引向运行时会兑现却让事情更糟的元数据的警告不在 (c) 内;记为边界,⛔ 不扩类。 +- (a) 须今天可达,(c) 须具名生产者;观察、休眠、零拉动 ⛔ 不立卡、不进汇总卡、无配额。 - 判「进 Acceptance notes」前先问:哪一个 PR 会碰到这个文件?说得出具体 PR 或人 ⇒ 写进去。 - ⛔ 说不出(`.changeset/*`、无人在改的文档页、生成物、已扫完的批次)⇒ 兜底不成立。 - 仍然关,但关闭理由必须写明「承接者:无」。 - 先修复:正文被 sanitizer 截断的卡不可派发,评论修复指令后跳过。 - 停摆指令判据必须比其它分类更硬(双读取),事后证伪同处公开作废。 -- 决策箱勤务:落卡入箱时校验/补全四棱块与速读;存量卡低频子轮回填,语言按不变量。 +- 决策箱勤务:入箱校验/补全四棱块、速读与 `Prior rulings on this card:` 行;存量卡低频回填。 +- 线程有 `Ruling:`/RULED 的卡再入箱,该行逐 id 各一句变化;缺行 ⇒ 拒入,`pm:retriage` 回立卡者。 - `type`(Bug/Feature/Task)是分诊固定产出,分诊席唯一权威生产;立单者可预填,分诊校正。 - 判据:违背已声明契约 ⇒ `Bug`,扩大接受集/公开面越出已声明 ⇒ `Feature`,其余 ⇒ `Task`。 - `Bug` 无具名落点或复现路径不入 `pm:queue`(标记补复现)。 @@ -364,8 +365,9 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 父单已有子结构的:父单队列标签即可,分诊逐个展开路由、补 `Blocked-by:` 排序。 - 每张留一条英文审计评论(`Triage: lands in …; rationale: …`),可选带 `Size/model suggestion:` 行。 - 查重/shadow 检查先按文件/机制查本仓与姊妹仓 open 卡(含 `pm:dispatched`),再跟引用与关键词。 -- 同文件同缺陷 = 同一发现,不分车道:证据搬到先卡,后卡关 `duplicate_of`,⛔ 不并排派发。 -- 其余在飞 ⇒ `Blocked-by:` 不派;open 未认领 ⇒ 先并成一个派发入口;已完成 ⇒ 卡可能过期。 +- 同文件同机制 = 同一发现,不分车道,首触定级即并:证据搬先卡,后卡关 `duplicate_of`。 +- 同族异缺陷 ⛔ 不并:互链排同批;在飞(assignee/open PR)永不并,`Blocked-by:` 不派;完工查过期。 +- 执行席 ⛔ 不并卡,疑重复挂 `pm:retriage` 写明哪两张同文件同机制;同 assignee 者自关后卡。 - 生产者在哪是常设分诊问题:declared ≠ enforced 形状的卡先问谁在写这个字段。 - 派发前按生产者的答案改卡的范围与域标签。 - 发现分诊轮:`finding` 恒 = 待首次定级、定级即离标;hold 重验只在 `Restart-when:` 命中时发生。 @@ -453,6 +455,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 派发后一单前用该回答重读它的选项与成本,⛔ 不沿用立单时那份。 - 在飞卡衍生三分:不修它验收过不过;in-scope ⇒ 父卡 sub-issue,认领席自有、优先级继承。 - 该 sub-issue 带父卡域与优先级直接派发,唯一绕过分诊;sweep 事后扫,重复关 `duplicate`。 +- 自在飞派发升级出的卡首行一句:本卡承哪一半、父卡留哪一半;缺此行不入队不入箱。 - 阻塞项无主 ⇒ 被挡席认领做掉,不限大小;在该卡走完整认领、尊重其热文件串行队。 - 阻塞项在飞 ⇒ 等:`pm:blocking` 在其车道排最前、等待者写该卡;p0/p1 优先级沿链传递。 - 取卡前置 = `docs/NORTH-STAR.md`「优先级」第 3 条:产品仓开放 P0/P1 每次取卡现读。 @@ -557,7 +560,6 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 一次性云卡用 `create_session`,⛔ 不用 create_trigger+fire;trigger 流只留给定时/重复型。 - 云会话 `SendMessage` not-reachable 是设计非故障,⛔ 不复测。 - 接手中断的 dev:先试 SendMessage 复活,不可用才走接手协议,⛔ 不重跑原派发词。 -- 云卡四课与接手协议增量见 `references/dispatch-runbook.md`。 ### 收集 @@ -647,14 +649,12 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 挂标后复核完成前短暂停靠;⛔ 不前瞻预挂。 - 契约复核的适用面、载体纪律、资格与归属、降档保险丝见 `references/contract-review.md`。 - 碰生成物的 PR 入队前先同步 + 整体重生成:四步序 `bash scripts/pm/os-regen-merge.sh`。 -- os-regen 的陷阱与锚点禁令见 landing-operations A。 - 跟到 MERGED 为止,入队后的看护归车道 PM 的落地窗口:每轮同时读队列分支与 `origin/main`。 - 默认分支 push 即触发对外部署的仓,只在验证层存在时才合并;无验证层 ⛔ 不合并。 - 验证层 = 部署以 CI 为闸、发布后探测线上面、失败自动回滚并立卡。 - 该类仓的落地判据是已发布且探测通过,⛔ 不是 MERGED;跟到发布为止。 - 合并后工作流不在 PR 检查清单上,读 PR 检查的规则对它全盲;按独立检查类登记分开读。 - 人闸不是验证层的替代:答不了会不会坏的人闸只买延迟,⛔ 不以人闸代替探测。 -- 首次入队 flip 定点、MERGED 两读数、关键 PR 订阅与退订/归档细则见 landing-operations B。 - 信任 suite/check 事件前先重读 PR 对象取 head:检查读数绑定该 head,⛔ 不绑事件带的 SHA。 - 落地记账:座位贴落地清单即账本,逐轮即时记;确需全仓核对时首选 `head:claude/` 精确过滤。 - 红/踢出处置在同一落地窗口内做:机器输入是 merge-queue triage workflow 的分诊评论。 @@ -768,15 +768,15 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 每场召唤把带席内 ACCEPT 的受管草稿呈为一批 ≤5 行决裁;批准与合并仍是维护者的点击。 - 总监席档位由维护者按项目人工定,每场记入摘要台账;⛔ 无档位硬门、无免档整理态。 - 总监席是唯一裁决者:决策箱、代裁与一类自裁只出自本席,⛔ 无子代理无自述。 -- 总监席不占 `domain:*`,永不认领 backlog、永不写码;章程见 `references/lanes/director.md`。 ## 报告契约 - 终报 JSON 的权威形状住 `.claude/agents/os-dev.md` 终报消息节,⛔ 本文不抄第二份。 - `premise_still_valid: false` + `pr: null` 是合法终报,当再分诊输入复核,永不当失败派发。 - `status: needs_decision` 时 `open_questions` 必须非空。 -- `out_of_scope_findings` 只列三类立卡与 `noted, not filed`;立卡附查重词、归挂、立在修复仓。 -- 席位在 ACCEPT 读 PR `## Acceptance notes`,实属三类的由席位补立;三类外已立的卡关 not planned。 +- `out_of_scope_findings` 每条 `class: a|b|c`+证据,或 `carrier:`(承接者);皆无 ⇒ Acceptance notes。 +- dev 不立卡;ACCEPT 逐条一行 `filed #N`/`Acceptance notes`/`dropped — 因`;三类由席位立在修复仓。 +- 席位读 PR `## Acceptance notes`,实属三类的补立、归挂、附查重词;三类外已立卡关 not planned。 - PM 核验它们存在,并把同轮并行报告互相对读:两个 dev 同一小时审相邻代码会立出孪生卡。 ## 机械守卫索引 diff --git a/.claude/skills/pm-dispatch/references/core-rules.md b/.claude/skills/pm-dispatch/references/core-rules.md index c0e9dfe3e10..4efc27146ef 100644 --- a/.claude/skills/pm-dispatch/references/core-rules.md +++ b/.claude/skills/pm-dispatch/references/core-rules.md @@ -84,7 +84,7 @@ - 裸卡超过十五张则下一轮改域分批集中模式,每批不超过五张同族卡。 - 有落点或可复现的缺陷、范围明确的工具修复与实现未被裁错的说明书脱节进 `pm:queue`。 - 设计卡、契约形状提案、碰迁移形状或删已发布能力的进决策箱;无出处说明书脱节不进。 -- 立卡限三类:可复现缺陷、契约违背、元数据陷阱;截断卡先发修复指令再跳过,不可派发。 +- 立卡限三类:今日可达可复现缺陷、契约违背、具名生产者陷阱;截断卡发修复指令不派。 - 三类边界:缺陷问错不问缺、文档同判;元数据须他人再作者化;引向更糟的警告在类外。 - 类型字段由分诊席唯一生产,违背已声明契约是缺陷、扩出已声明是功能、其余是任务。 - 缺陷卡无具名落点或复现路径不入队列 ⛔ 不回填存量;每张卡留一条英文审计评论。 @@ -148,4 +148,4 @@ ## 报告契约 - 终报 JSON 的权威形状住 `.claude/agents/os-dev.md`,⛔ 本协议不另存第二份。 - 前提被证伪且无 PR 是合法终报,当再分诊输入复核,⛔ 永不当失败派发。 -- needs_decision 必带 open_questions;范围外发现三类立卡、其余 noted not filed,核验对读同轮报告。 +- needs_decision 必带 open_questions;范围外逐条 `class:`/`carrier:`,dev 不立卡,席位处置、对读同轮。 diff --git a/.claude/skills/pm-dispatch/references/lanes/director.md b/.claude/skills/pm-dispatch/references/lanes/director.md index 5ad04921391..ebf93911fad 100644 --- a/.claude/skills/pm-dispatch/references/lanes/director.md +++ b/.claude/skills/pm-dispatch/references/lanes/director.md @@ -37,9 +37,10 @@ ## 职责二:决裁勤务 -- 第一步:逐卡过一类自裁三判据;全立者录裁转工作态、只入收班追认表,⛔ 不呈批。 +- 首批读完前 ≤5 张同族卡即呈;一类自裁按批过,⛔ 不先扫全箱,自裁者由下一候选补位。 +- 取下五张只用便宜扫描:标签、assignee、PR 引用、速读首行;全文只读手上五张。 +- 判据:开场标记→首批 ≤ 读五张;全立者录裁转工作态、只入收班追认表,⛔ 不呈批。 - 决策收件箱 `needs-user-decision` 跨仓勤务,按基本原则批呈;⛔ 不复活已退役的汇总 issue。 -- 一行回批即全链执行,裁后四件原子执行不再请示。 - 一次只开一批:维护者对批 N 回字(一字即可)后,新到才合成批 N+1;续批至清零才收工。 - 受管草稿批:两仓 `is:pr is:open is:draft label:needs-user-decision` 对照等人合清单,差集点名。 - 有席内 ACCEPT 者呈一批 ≤5 行,写法见 `../decision-analysis.md`;四件缺一者列缺口不呈。 @@ -48,7 +49,6 @@ - 以协议为准:消费面对齐协议 ⇒ 一类自裁,协议没有的能力删,⛔ 不立卡问协议。 - 协议是否正确由本席按①读协议原文与主流平台自判,有误即裁改动而非立卡提问。 - ADR 条目被协议取代 ⇒ 条目下加带日期注记点名 spec 符号,⛔ 不改写原文、不沉默。 -- 代裁通道的置信门与人工地板见 SKILL.md 分诊座位职责,⛔ 不另抄。 ## 职责三:维护者动作台账