diff --git a/.claude/agents/os-dev.md b/.claude/agents/os-dev.md index ae364bdbd6..0b25a4125e 100644 --- a/.claude/agents/os-dev.md +++ b/.claude/agents/os-dev.md @@ -43,14 +43,16 @@ JSON,所以终报消息就是 JSON 本身,别无其它。 「纠正」**:共享身份让所有人的写入都像你写的;被改写的 body 只是关于 body 的证据,不证 明别的;回退他人的操作——尤其是 ready 翻转——永远轮不到你(把 ready PR 翻回 draft 会 一步无声毁掉 auto-merge 与合并队列成员资格)。把意外写进 `summary`,交给 PM 裁决。 -3. **范围 = 这张 issue,别无其它。** 顺路撞见的无关缺陷立成新的**无 assignee** issue,列 - 进 `out_of_scope_findings` —— 永不在本 PR 里修。立单纪律:**先搜再立**(关键词 + 文件 - 路径扫 open issues;并行 dev 看不见彼此同一小时立的卡,这一搜只能靠你);**归挂,不散 - 落**(落在某张已排队 issue 完成范围之内的发现,立成它的 sub-issue;只是*依赖*它的,独 - 立立单带一行 `Blocked-by:` —— 已排队父单的 sub-issue 自动进派发池);**立在修复落地的 - 仓**,带回链。观察类发现(死代码、未演练漂移、外观抛光)打 `finding` 标签且不打 - `pm:queue`;具体缺陷不打标签,留给 PM 分诊。永不因为「看着小」把发现揣着不报 —— 立单 - 时点判的严重度两个方向都不可靠;平实立单,分诊轮定级。 +3. **范围 = 这张 issue,别无其它。** 顺路撞见的无关缺陷立成新的**无 assignee** issue,列进 + `out_of_scope_findings` —— 永不在本 PR 里修。立单纪律:**先搜再立**(关键词 + 文件路径扫 open + issues;并行 dev 看不见彼此同一小时立的卡,这一搜只能靠你)—— 这一搜与列卡读走 **REST 列 + 表端点 + 本地 grep**,⛔ 不用 MCP `list_issues`/`search_issues`(GraphQL 池是舰队最紧的桶;通道对照 + `.claude/skills/pm-dispatch/references/rest-channel.md`),且**PM 的去重读数随派发词下发 ⇒ 当既有事实 + 用,只复核其后的增量,⛔ 不重跑**;**归挂,不散落**(落在某张已排队 issue 完成范围之内的发 + 现,立成它的 sub-issue;只是*依赖*它的,独立立单带一行 `Blocked-by:` —— 已排队父单的 sub-issue + 自动进派发池);**立在修复落地的仓**,带回链。观察类发现(死代码、未演练漂移、外观抛光) + 打 `finding` 标签且不打 `pm:queue`;具体缺陷不打标签,留给 PM 分诊。永不因为「看着小」把发 + 现揣着不报 —— 立单时点判的严重度两个方向都不可靠;平实立单,分诊轮定级。 **有界就地修豁免** —— 仅当**四条全部成立**才就地修:① 与本卡同一缺陷类;② 机械修,正 确形态已被既有证据钉死(权威源、兄弟声明、已落地裁决);③ 该文件无其他认领持有;④ 同 一批门禁族,不新增验证面。它欠下默认路径所保护的两样:认领申报的文件面**同轮增补** diff --git a/.claude/skills/pm-dispatch/references/dispatch-runbook.md b/.claude/skills/pm-dispatch/references/dispatch-runbook.md index 242c9789df..ae40a677d9 100644 --- a/.claude/skills/pm-dispatch/references/dispatch-runbook.md +++ b/.claude/skills/pm-dispatch/references/dispatch-runbook.md @@ -212,13 +212,13 @@ os-dev 定义。 校验通过、加载成功而**渲染为零**的元数据 —— 绿收据背书的假修复比诚实的缺陷更贵,代价是一次文件读对一整轮 agent 运行。 - **停条件写法:要证据,不要判决**。派发令里的前提/停条件检查必须要 dev 回报**证据面**(搜了什么、找到什么),分叉 归 PM 判 —— 写成「发现消费者就停下」把判决权交回被停的一方。 -- **清单取数补遗**(条款主文在主文件):门禁清单单班之内就会过期,所以派发那一刻现取;全 farm 归 CI 跑一次,⛔ 不让 - dev 枚举全 farm;点名单当天现取仍会漏(实测漏点名的门恰被改动打红过)—— dev 对实际改动路径重取补跑,条款住 - os-dev 定义。**pnpm 10.31 起 `install --workspace-concurrency` 被拒**(只对跑脚本的命令合法),装依赖命令别带 - 它。 -- **文件面两句原文**:「预期落点是 X;若实测表明真正的生产者在别包,报备后按生产者侧修(落点与理由写进报告和 PR 正 - 文),⛔ 不在消费者侧打补丁」—— 只写一个路径名,是要求 dev 在守约与修对之间二选一;跨包常等于跨车道,PM 事后补跨 - 座位声明。 +- **派发那刻现取、随派发词下发的两份读数**(条款主文在主文件;判据同一:PM 已有的读数下发一次,⛔ 不让 N 个 dev 各重跑同样贵 + 的 GraphQL 读):① **门禁清单**单班之内即过期;全 farm 归 CI 跑一次,⛔ 不让 dev 枚举全 farm;点名单当天现取仍会漏(实测漏的门恰被 + 改动打红过)—— dev 对实际改动路径重取补跑。② **去重/看板读数**:取一次(查询式 + 时间戳)整批共用,派发令写「当既有事实 + 用,只复核其后的增量,⛔ 不重跑」。dev 侧对价住 os-dev 定义。**pnpm 10.31 起 `install --workspace-concurrency` 被拒**(只对跑脚本的命令合 + 法),装依赖命令别带它。 +- **文件面两句原文**:「预期落点是 X;若实测表明真正的生产者在别包,报备后按生产者侧修(落点与理由写进报告和 PR 正文),⛔ 不 + 在消费者侧打补丁」—— 只写一个路径名,是要求 dev 在守约与修对之间二选一;跨包常等于跨车道,PM 事后补跨座位声明。 - **Same-day churn 行与在飞重叠**:派发时 `git log origin/main --oneline -20 -- ` 见当天合并 ⇒ 加一行「 基于合并后的代码工作,issue 引用的片段可能已变,先核对当前 main」(dev 的 worktree 切出后不会自己更新)。在飞重 叠每轮拦截(churn 行只覆盖派发瞬间):main 新落 PR 与在飞申报文件面求交,相交即警告四句 —— 合 main 重跑测试矩