diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index f8415b417fd..13bb21389ac 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -169,7 +169,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报 - 表未覆盖的包首次分诊时归类并走 PR 更新本表;新增或退役 `domain:*` 必须同批改本表。 - 退役 `domain:*` 只退流通,对象保留;`domain:engine`/`domain:services`/`domain:cli` 读作 `domain:server`。 - `domain:*` 只由分诊席产出,例外一:在飞卡衍生 sub-issue 承父卡域;无标签的卡 ⛔ 不得认领。 -- 例外二:立卡人自贴而车道合上表、正文齐立卡门三件 ⇒ 执行席直接认领,分诊事后抽查。 +- 预贴标签只是建议,队列与级别只由分诊落笔(例外一同承);无分诊审计评论 ⛔ 不得认领。 - 跨域例外路径:拆不动的跨域单 PR 由分诊席指定一个车道 PM 认领,认领评论申报文件面。 - 派发前在飞检查:读 `pm:dispatched` 卡认领评论申报的文件面,本地求交、不另发查询。 - 跨域例外路径的范围加上该单文件面触及各域的在飞单;相交 ⇒ 排该 PR 之后串行或让行。 diff --git a/.claude/skills/pm-dispatch/references/cross-repo-coordination.md b/.claude/skills/pm-dispatch/references/cross-repo-coordination.md index 7739925658e..7b2aed9c1d1 100644 --- a/.claude/skills/pm-dispatch/references/cross-repo-coordination.md +++ b/.claude/skills/pm-dispatch/references/cross-repo-coordination.md @@ -7,7 +7,7 @@ - 多车道仓 `objectstack`、`objectui`:中央分诊是 `domain:*`/type/定级的唯一生产者。 - 单车道仓 `cloud`、`objectos`、`hotcrm`、`www.objectos.ai`;未来新仓默认此类。 - 单车道仓 `repo:*` 席自理机械三务,⛔ 不产 `domain:*`;决策卡入本仓收件箱,不落 objectstack。 -- 机械三务 = 自扫 sweep、自打 `type`、自做 `finding` 首触定级。 +- 机械三务 = 自扫 sweep、自打 `type`、自做首触(含 `finding` 与业务理由,判据评论同分诊)。 - 新仓登记是一张清单:座位贴、标签、类别归属、门禁盘点、写身份锁移植(deny + hooks)。 - 新仓三件:加入 `GOVERNED_REPOS`、安装车队 App、写 `lanes/.md` 宪章;应用仓无分诊席。 - 新仓准入只问一句:真需要常设席位吗;hotcrm 宪章见 `references/lanes/hotcrm.md`。 diff --git a/.claude/skills/pm-dispatch/references/dispatch-runbook.md b/.claude/skills/pm-dispatch/references/dispatch-runbook.md index 29cac822e0d..1871fc64c2b 100644 --- a/.claude/skills/pm-dispatch/references/dispatch-runbook.md +++ b/.claude/skills/pm-dispatch/references/dispatch-runbook.md @@ -61,7 +61,7 @@ ## 分诊两级盘点细则 -- 小时层三读法之一,sweep 析取①② = `list_issues` + `since`。 +- 小时层三读法之一,sweep 析取①–⑤ = `list_issues` + `since`。 - 标签变更会刷新 `updated_at`,半标注照样入窗。 - 之二,解锁扫描反演 = 逐仓 `state=CLOSED` + `since` 与 `Blocked-by:` 反向索引求交,命中走双查。 - 之三,健康指标 = 逐标签 `perPage: 1` 只读 `totalCount`。 @@ -146,8 +146,12 @@ - 终报 `needs_decision` ⇒ 席位附四维分析与推荐,并入决裁批次呈维护者裁;⛔ 无裁决线程。 - 容器重启杀本地后台循环:席位等服务端信号(PR 订阅事件、座位 Routine),本地 watcher 可选。 -## subagent 批派发前置:先把本地检出钉到 main +## 派发前置:前提核实,再把本地检出钉到 main +- 派发前前提核实由只读子代理做(下限档);卡线程卡在交候选给 coordinator 之前做。 +- 成立 ⇒ 派;不成立而改法明确 ⇒ 改卡再派;判不了 ⇒ 入决策箱,⛔ 不占卡线程槽。 +- 改法明确 = 目标不变,只换落点或修法:评论记原前提、读数与改法,再改正文。 +- 砍范围、降级、关卡是卡的命运,归人工地板 ⛔ 不借改卡裁;读数落认领 `Premise:` 行。 - subagent 读 PM 容器本地检出的 agent 定义与技能文本,不读 `origin/main`:过期则整批过期。 - 每批派发前:`git -C fetch origin main && git -C checkout --detach origin/main`。 - 游离 HEAD 使停止钩子跳过分支块,⛔ 不快进会话分支;只拒与切换冲突的脏改动,不拒分叉。 diff --git a/.claude/skills/pm-dispatch/references/execution-duties.md b/.claude/skills/pm-dispatch/references/execution-duties.md index a4fda545bb3..d53098685c7 100644 --- a/.claude/skills/pm-dispatch/references/execution-duties.md +++ b/.claude/skills/pm-dispatch/references/execution-duties.md @@ -6,7 +6,7 @@ - 整车道一次读全,本地求交:`list_issues` 带 `labels: [domain:X]` + 最小字段拿回全车道 open 集。 - 候选 = open、未 assign、无 `needs-user-decision`、无 `pm:retriage`;⛔ 排除三门皆无的 `tooling` 卡。 -- 自贴 `domain:*` 卡:合域表且齐立卡门三件 ⇒ 候选;缺一 ⇒ 挂 `pm:retriage`,⛔ 只评论不算。 +- 无分诊审计评论的卡不是候选,预贴 `pm:queue` 视同无;例外一的 sub-issue 承父卡首触。 - 已排队父单的 open sub-issue 自动是候选,`pm:epic` 父单的子树除外。 - 每张候选读全文 + 全部评论,写派发词前做决策复读:评论读到最后一页。 - 维护者裁决逐字引入派发词裁决分区作约束,无则写明无裁决。 diff --git a/.claude/skills/pm-dispatch/references/filing-gate.md b/.claude/skills/pm-dispatch/references/filing-gate.md index 2c4f55a5389..2dd3c8ddece 100644 --- a/.claude/skills/pm-dispatch/references/filing-gate.md +++ b/.claude/skills/pm-dispatch/references/filing-gate.md @@ -15,14 +15,18 @@ - `reach:` 二选一:公开入口(HTTP/界面/`os validate`/保存)实测一次错误结果;或具名真实生产者。 - 三种例外照立,要点首条「先测可达性」:可能泄露数据;发版固化的错误文字;维护者直派。 - ② 只有维护者能做的决定,落卡即带「维护者速读」与四棱块。 -- ③ 维护者直派的任务,正文引其原话。 -- ④ 协调节点:跨仓/跨层父单与它的逐层子单。 +- ③ 维护者直派的任务,正文引其原话;④ 协调节点:跨仓/跨层父单与它的逐层子单。 - ⛔ 不是卡:席位自己的失误、协议观察与「记住这条」,它们进座位贴或收班简报。 - 「搭下个碰 X 的 PR」不算 `carrier:`;已落地工作欠的后续照立卡,⛔ 不按「不是卡」压下。 - ⛔ 不是卡:丢卡重建(除非自身即 ①–④)、sweep 每 fire 重导的 pin/bump/卫生提醒。 - ⛔ 不是卡:既有卡一条评论能承载的指针/知会/请求;那条评论即其记录。 - UI 卡写明所需通用块或 spec 契约门;要产品命名 widget/dialog/hook/命名空间的卡退回重立。 -- POST 前正文答三件:类别 ①–④、动手的读者(哪席哪步)、查重查询与命中数(含 closed)。 +- POST 前正文答四件:类别、业务理由、动手的读者(哪席哪步)、查重查询与命中数(含已关)。 +- 业务理由:谁受益、什么场景、不做会怎样;③ 以原话代,④ 承父单;分诊 ⛔ 不代写。 +- 清楚且合北极星方向 ⇒ 照常定级入队;与「做出来的是什么」不符或无受益者 = 站不住。 +- 缺失或站不住 ⇒ `Triage: returned` 退回立卡人,留 `finding`,改后再读;⛔ 不代写不关卡。 +- 涉及产品取舍或方向不明 ⇒ `needs-user-decision` 入箱,总监席呈批;⛔ 不替维护者判需求。 +- 批量立卡(一次 ≥10 张):审计评论带 `Batch-of:` 行,总监席每源抽 ≤5 张呈维护者过目。 - 缺件卡由分诊(单车道仓 `repo:*` 席)首触补齐卡与一次检索可推三件,写进定级评论并定级。 - 补不齐(四类皆非)者才因缺件首触即关 not_planned,一行点名所缺。 - 「动手的读者」与 Acceptance notes 同一问:说得出具体 PR 或人 ⇒ 写进去,说不出 ⇒ 不立卡。 diff --git a/.claude/skills/pm-dispatch/references/lanes/skills.md b/.claude/skills/pm-dispatch/references/lanes/skills.md index 487738cfd3f..2f4db48aa2f 100644 --- a/.claude/skills/pm-dispatch/references/lanes/skills.md +++ b/.claude/skills/pm-dispatch/references/lanes/skills.md @@ -19,8 +19,8 @@ - 额度耗尽豁免的地板是默认判断档,⛔ 不再往下。 - 棘轮逐行付账,⛔ re-wrap 筹行;砍点逐条核幸存,被砍内容若在别处无家,砍掉就是丢规则。 - 首触定级每轮;决策形状 ⇒ 决策箱带四棱块,⛔ 永不自裁。 -- 唯一例外:本车道 finding 自分诊,全仓轮跳过。 -- 自分诊问北极星「仪器为车队服务」的那一问:答不出 ⇒ 即刻 p3 或不做,⛔ 不入队。 +- 本车道 finding 同走分诊席首触,⛔ 不自分诊;席位可附证据与「仪器为车队服务」的答案。 +- 「仪器为车队服务」答不出的 finding ⇒ 席位建议 p3 或不做,⛔ 不自入队;定级归分诊。 - 内部指令面中文,机器判据恒英文;认领前重读全线程;标签写 read-modify-write 加回读。 - QA 波次由维护者手动触发,⛔ 不自启。 diff --git a/.claude/skills/pm-dispatch/references/lanes/triage.md b/.claude/skills/pm-dispatch/references/lanes/triage.md index 7ad3956f16e..1724c805550 100644 --- a/.claude/skills/pm-dispatch/references/lanes/triage.md +++ b/.claude/skills/pm-dispatch/references/lanes/triage.md @@ -2,6 +2,6 @@ 见 triage-duties.md;本文是本席的岗位说明,现值状态恒在座位贴,⛔ 不迁入本文。 - 由维护者一句召唤到任一项目,默认同总监席项目;只写标签与审计评论,⛔ 无 PR、无认领。 -- 范围 = objectstack、objectui 的裸卡首触(定级、路由、三件)与跨车道查重;应用仓无分诊席。 +- 范围 = objectstack、objectui 每张卡首触(业务理由与定级)与跨车道查重;应用仓无分诊席。 - 每 fire 只取一个仓,两仓轮替、仓内最旧优先;最旧未路由超 4h 的仓本轮优先。 - 补半状态前先确认无人在动,读后新现六态属他席即停手;⛔ 不加第二席、不改 fire 频率。 diff --git a/.claude/skills/pm-dispatch/references/triage-duties.md b/.claude/skills/pm-dispatch/references/triage-duties.md index 7981c332eca..8ce91bb4148 100644 --- a/.claude/skills/pm-dispatch/references/triage-duties.md +++ b/.claude/skills/pm-dispatch/references/triage-duties.md @@ -11,19 +11,18 @@ - 每条枚举比对返回数与 `totalCount`,不等 ⇒ 报 `sweep INCOMPLETE` 点名缺口,⛔ 永不报干净。 - Backlog sweep 是常设职责,每 fire 扫任一析取命中的卡。 - 析取 ①:全裸(无 `pm:*`、无 `needs-user-decision`、无 `domain:*`)。 -- 析取 ②:有 `pm:queue` 无 `domain:*`(仅多车道仓),只取 `updated_at` 早于 ~2 分钟。 -- 有 `domain:*` 无 pm-state,或有 `pm:queue`+`domain:*` 无 `priority:*` 的半标卡,归所属车道席补齐。 +- 析取 ②:有 `pm:queue` 无 `domain:*`(仅多车道仓);析取 ③:有 `domain:*` 无 pm-state。 +- 析取 ④:有 `pm:queue`+`domain:*` 无 `priority:*`;②③④ 只取 `updated_at` 早于 ~2 分钟。 - 排除 `tracking`、`status:parked`、全部 `pm:seat` 贴、`qa-run` 记录。 -- 自贴卡抽查:窗内新建且 `domain:*` 事件与建卡同分钟,逐张核车道、补齐三件;⛔ 不凭 actor。 -- 半状态治愈积压 ② 最老优先、P0 嫌疑先行,⛔ 优先最新不适用。 -- 首触定级与两析取 sweep 每 fire 跑到清空:⛔ 无每轮总量预算,清得动就多清。 +- 析取 ⑤:窗内新建且 `pm:queue`/`priority:*` 与建卡同分钟,照未分诊首触;⛔ 不凭 actor。 +- 半状态治愈积压 ②③④ 最老优先、P0 嫌疑先行,⛔ 优先最新不适用。 +- 首触定级与五析取 sweep 每 fire 跑到清空:⛔ 无每轮总量预算,清得动就多清。 - 窗口耗尽未跑完的,下一 fire 从标签状态断点续跑。 - 排序:队列每轮清空时最新优先;清不空的那一刻起改最老优先。 - 裸卡数 >15 ⇒ 下一 fire 整轮改域分批集中模式,每批 ≤5 张同族卡,照样跑到清空。 - 紧急卡直接分诊:维护者点名或 p0 嫌疑 ⇒ 立即起默认判断档分诊子代理,不等定时轮。 - 紧急分诊的授权面 = 分诊本身,⛔ 不写码不认领;产出落卡,与定时轮分诊同格式同效力。 -- 分类动作每张三选一,外加一个修复通道。 -- 裁定写方向、给六态之一。 +- 分类动作每张三选一,外加一个修复通道;裁定写方向、给六态之一。 - 方向在 ADR/本卡裁决/不可重裁规则:贴 `check-prior-rulings.mjs` 的 `Prior rulings read:` 行,或不点。 - `pm:queue` = 有具名落点或复现的具体缺陷,无可问之事;⛔ 工具/门禁修复不由此进。 - `tooling` 入 `pm:queue` 仅凭三门之一:首行带 `Unblocks: #N`(open 产品卡)或点名所护的已发布面; @@ -32,7 +31,8 @@ - `needs-user-decision` = 设计卡、feature/契约形状提案、需要 appetite 的多周程序。 - 碰迁移形状或删已发布能力也进决策箱;说明书脱节不进:有裁定出处才是 (b),否则改文档。 - 决策卡速读居四棱块之上、同题,用业务语言先讲事情与选项,末句只问一字:A/B/C 或是否。 -- 首行写立卡门类别 ①–④;四类定义、⛔ 清单、三答与配额见 `references/filing-gate.md`。 +- 首行写立卡门类别 ①–④;四类定义、⛔ 清单、四答、理由判据与配额见 `filing-gate.md`。 +- 首触先按业务理由三出口分流,再定级路由;批量卡审计评论带 `Batch-of:` 行。 - `finding` = 三类内待定级:(a) 可复现缺陷(复现或失败探针);(b) 违背已声明契约(引契约文); - (c) AI 写元数据会被运行时拒收或静默丢弃的陷阱;其余进 PR `## Acceptance notes`,⛔ 不立卡。 - (a) 的分界是不完整 vs 错误,不是文档 vs 代码:示例照抄即失败是 (a),漏列成员不是。 @@ -71,7 +71,7 @@ - 在飞活性复查:认领逾一天无自有产出(commit/PR/评论)⇒ 敲门一次,首行键 `Owned-24h re-check:`。 - 敲门后 `RECLAIM_AFTER_HOURS = 12` 小时无答复 ⇒ `label-write.mjs --release` 一笔中继释放,贴不动。 - 释放:`Release:` 评论(出处三件)+ `Resume-from:` 行 + `pm:dispatched`→`pm:queue` + 清 assignee。 -- 车道席可附证据/前提重验,⛔ 不定级不改标;skills 车道 finding 由该席自分诊,全仓轮跳过。 +- 车道席可附证据/前提重验,⛔ 不定级不改标;每张卡欠一次分诊首触,车道 ⛔ 不自分诊。 - 域分批与 sweep 打包晋级五条照用;每批约定与积压告警见 `references/dispatch-runbook.md`。 - `pm:retriage` 每 fire 先答异议评论所求,答后同笔摘标;须维护者答的进收件箱,标照摘。 - retriage 的异议判据认内容(有评论写明所求)⛔ 不认形状(有一条异议评论)。 diff --git a/scripts/pm/check-skill-line-ratchet.mjs b/scripts/pm/check-skill-line-ratchet.mjs index 8b380ef3563..19184e57a40 100644 --- a/scripts/pm/check-skill-line-ratchet.mjs +++ b/scripts/pm/check-skill-line-ratchet.mjs @@ -418,7 +418,16 @@ export const CEILINGS = new Map([ // tails leave the corpus; one rule per ≤120-byte line, no rule already stated in // SKILL.md). Landed count, headroom 0, same convention (lowering is always // legitimate). - ['.claude/skills/pm-dispatch/references/dispatch-runbook.md', 241], + // Raised 241 → 245 by the pre-dispatch premise check (the same maintainer's + // word of 2026-10-23, 「立卡」 and 「并且立刻派发」 on the proposal 「席位派发前先用 + // 子代理核实前提。核实成立就派;不成立、但改法明确的,就改卡后再派;判断不了的, + // 转决策,不占卡线程名额」; quoted on card #25507, claim comment 6370029859): + // four lines at the head of the pre-dispatch section — the read-only subagent + // and when a card-thread card runs it, the three exits, what 「改法明确」 may and + // may not change, and the `Premise:` claim line. Measured delta +4; the section + // heading was renamed in place. Not a CROSS_FILE_MOVES destination, so no + // `ruledRaises` record applies. Landed count, headroom 0, same convention. + ['.claude/skills/pm-dispatch/references/dispatch-runbook.md', 245], // Whole-text restructuring round (maintainer ruling 2026-08-23, Q1 = A): // mechanism detail extracted from SKILL.md — the four long state-table rows // (state-machine.md) and the clause-② review-chain operational detail @@ -1341,7 +1350,19 @@ export const CEILINGS = new Map([ // 120-byte cap), with no restatement left in the section to pay with. Not a // CROSS_FILE_MOVES destination, so no `ruledRaises` record applies. Landed // count, headroom 0, same convention. - ['.claude/skills/pm-dispatch/references/filing-gate.md', 64], + // Raised 64 → 68 by the business-rationale card (maintainer's word 2026-10-23, + // project chat, verbatim and untranslated: 「我说的是业务需求上的合理性,谁来判断」 + // and 「立卡」 on the proposal that names the field and the three triage exits; + // quoted on card #25507 and in its claim, comment 6370029859). The text is the + // fourth filing-gate answer 「业务理由」 (who benefits, the scenario, the cost of + // not doing it) and the triage reading of it: clear and on the North-Star + // direction ⇒ queue; missing or not holding ⇒ returned to the filer, never + // written for them and never closed on it; a product trade-off ⇒ the decision + // inbox; batch filings sampled to the maintainer. Five lines landed, one paid + // in place (③ and ④ of the gate merged onto one line), so the measured delta + // is +4. Not a CROSS_FILE_MOVES destination, so no `ruledRaises` record + // applies. Landed count, headroom 0, same convention. + ['.claude/skills/pm-dispatch/references/filing-gate.md', 68], // The project layer above the seats (maintainer's word: ONE project form, the // instruction line 「pm-dispatch <席位…>」 is the summon, seats are read from the // seat posts' 🟢 line, takeover never waits for a walled account, mailbox PRs,