Skip to content

Commit dbeb16d

Browse files
committed
Merge remote-tracking branch 'origin/main' into claude/issue-19497-patrol-schedule-retired
2 parents c48e659 + 48c39e0 commit dbeb16d

7 files changed

Lines changed: 67 additions & 24 deletions

File tree

‎.claude/settings.json‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@
5050
"Bash(curl -sS -X PATCH https://api.github.com/repos/objectstack-ai/objectui/pulls/* *)",
5151
"Bash(curl -sS -X POST https://api.github.com/repos/objectstack-ai/objectstack/pulls/*/ccr/ready_for_review *)",
5252
"Bash(curl -sS -X PUT https://api.github.com/repos/objectstack-ai/objectstack/pulls/*/ccr/auto_merge *)",
53+
"Bash(curl -sS -X POST https://api.github.com/repos/objectstack-ai/objectui/pulls/*/ccr/ready_for_review *)",
54+
"Bash(curl -sS -X PUT https://api.github.com/repos/objectstack-ai/objectui/pulls/*/ccr/auto_merge *)",
5355
"Bash(node --use-env-proxy scripts/pm/post-stamped.mjs *)",
5456
"Bash(node --use-env-proxy scripts/pm/label-write.mjs *)",
5557
"Bash(node scripts/pm/post-stamped.mjs *)",

‎.claude/skills/pm-dispatch/SKILL.md‎

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
5454
| `triage` | 以分诊座位身份运行(只扫/分类/路由,永不认领) | — |
5555
| `<domain>`(如 `spec`、`skills`) | 以该 `domain:*` 车道的执行座位身份运行 | — |
5656
| `epic:#<n>` | 以父单 #n 的 epic PM 身份运行(见 Epic 子树车道 节) | — |
57-
| `director` | 以项目总监席身份运行(人工召唤;四职见 升级与决策 节与 `references/lanes/director.md`) | — |
57+
| `director` | 以项目总监席身份运行(人工召唤;三职见 升级与决策 节与 `references/lanes/director.md`) | — |
5858
| `label:<name>` | backlog 过滤标签;`label:all` = 全部 open 未认领 | `pm:queue` |
5959
| `repo:<owner/name>` | 扫哪个仓的 backlog(单 issue 的落地仓看它自己的 `repo:*` 标签) | `objectstack-ai/objectstack` |
6060
| `batch:<n>` | 同时在飞的 dev 上限 | 默认 `3`;`n` 的维护者天花板 `5` |
@@ -114,6 +114,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
114114
| `pm:blocking` | 有 open 下游依赖者(自 `Blocked-by:` 索引推导的缓存,⛔ 不手工挂);进选择全序 |
115115
| `pm:retriage` | 向分诊提问(改判、跨域 PR 指定车道、改路由、拆卡、裁 dev 报告留下的分叉),定车道与改路由限未派发卡,异议评论写明所求;与现行 `pm:*` 并存、⛔ 不摘原标;带本标签的 `pm:queue` 卡跳过派发 |
116116
| `finding` | 立卡三类内待首次定级,定级即离标;三类外关 not planned;不占队列不进收件箱 |
117+
| `tooling` | 修复落在门禁/脚本/workflow/技能/席位协议/PM 工具面而非产品包;分诊首触打,与 `domain:*` 同笔;四具名读者 = 候选查询排除、首触即关、舰队一张在飞、普查半态行 |
117118
| `target:<major>` | 发版阻塞:每个 backlog 恰好一个生产者 |
118119
| `pm:epic`(父单或 sub-issue) | 已由 epic PM 保留;其它 PM 永不取;⛔ 永不与 `pm:queue` 同挂 |
119120
| `pm:seat` | 座位登记贴:协议载体,不是待分诊的工作 |
@@ -170,6 +171,8 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
170171
- 仓不可达 ⛔ 不当查过了干净:在 issue 上贴出给对应座位的现成命令,等读数回贴再派。
171172
- 读数与认领等座位文本恒带 UTC 取数时刻 `YYYY-MM-DDThh:mmZ`;树读数另带 ref/tip,无者按未取。
172173
- 失效修法按序取:先删容许出错的构造,再让正确形态成唯一拼写,最后才加检查。
174+
- 门禁两次误报(假红、实测假绿、处方句点名不存在路径)⇒ 删肢或删门禁,PR 引两次测量。
175+
- 只有护产品落地或用户可见契约的门禁才立修复卡;门禁上「稳定 > 功能」= 更少零件。
173176
- 自设定时器的文本以先重读状态开头,只写关键判据(若 X 则 Y),其余指针化。
174177
- 定时器文本 ⛔ 不写结论、不含未经重读即可执行的祈使句。
175178
- 放行认门禁 job 的结论(`completed: success`),⛔ 不认聚合读数。
@@ -337,7 +340,8 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
337340
- 分类动作每张三选一,外加一个修复通道。
338341
- ⛔ 不挂 `needs:contract-review`:随 draft PR 或 `Clause-②: yes` 认领;裁定写方向、给六态之一。
339342
- 方向在 ADR/本卡裁决/不可重裁规则:贴 `check-prior-rulings.mjs` 的 `Prior rulings read:` 行,或不点。
340-
- `pm:queue` = 有具名落点或复现的具体缺陷,或范围明确的工具/门禁修复,无可问之事。
343+
- `pm:queue` = 有具名落点或复现的具体缺陷,无可问之事;⛔ 工具/门禁修复不由此进。
344+
- `tooling` 入 `pm:queue` 仅当首行带 `Unblocks: #N`(open 产品卡)或点名所护的已发布面。
341345
- `pm:queue` 也收恢复不变量的 finding、test-only pin,与实现未被裁错的说明书脱节(修文档)。
342346
- `needs-user-decision` = 设计卡、feature/契约形状提案、需要 appetite 的多周程序。
343347
- 碰迁移形状或删已发布能力也进决策箱;说明书脱节不进:有裁定出处才是 (b),否则改文档。
@@ -346,6 +350,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
346350
- `finding` = 三类内待定级:(a) 可复现缺陷(复现或失败探针);(b) 违背已声明契约(引契约文);
347351
- (c) AI 写元数据会被运行时拒收或静默丢弃的陷阱;其余进 PR `## Acceptance notes`,⛔ 不立卡。
348352
- (a) 的分界是不完整 vs 错误,不是文档 vs 代码:示例照抄即失败是 (a),漏列成员不是。
353+
- 门禁头注、self-test 文案与 `check-*` 处方句 ⛔ 非已声明契约;(b) 须用户或已发布包读得到。
349354
- (c) 元数据 = 由写它的人以外的人存储并再作者化的键:React prop 不是,存储的视图配置是。
350355
- 把作者引向运行时会兑现却让事情更糟的元数据的警告不在 (c) 内;记为边界,⛔ 不扩类。
351356
- (a) 须今天可达,(c) 须具名生产者;观察、休眠、零拉动 ⛔ 不立卡、不进汇总卡、无配额。
@@ -360,9 +365,11 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
360365
- 判据:违背已声明契约 ⇒ `Bug`,扩大接受集/公开面越出已声明 ⇒ `Feature`,其余 ⇒ `Task`。
361366
- `Bug` 无具名落点或复现路径不入 `pm:queue`(标记补复现)。
362367
- ⛔ 不回填存量 backlog 的 type;新卡即时打、存量卡下次碰到补。
363-
- 定级按北极星「优先级」1、2 条;首行 `Path: <定义项> | <清单项 id/缺项> | P<路步> | none`。
368+
- 定级按北极星「优先级」1–3 条;首行 `Path: <定义项> | <清单项 id/缺项> | P<路步> | none`。
364369
- 定义项取北极星「做出来的是什么」或仪器卡的车队决定;无则关;`none` 非分诊缺口。
365370
- 清单项会 fail 才算断,继承其 `priority`;缺项先补账本;⛔「有人在等」不是定级判据。
371+
- 「无则关」= 首触即关 not_planned,带理由与入队两条件,⛔ 不定 p3、不 hold;下行同此。
372+
- 产品仓 P0/P1 开着时,无解锁对象的 p2/p3 `tooling` 卡同样关。
366373
- 路由是分诊的技术判断,⛔ 永不升级哪个仓的问题;父单是协调节点,永不派发。
367374
- 父单已有子结构的:父单队列标签即可,分诊逐个展开路由、补 `Blocked-by:` 排序。
368375
- 每张留一条英文审计评论(`Triage: lands in …; rationale: …`),可选带 `Size/model suggestion:` 行。
@@ -426,7 +433,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
426433
### 候选与批次
427434

428435
- 整车道一次读全,本地求交:`list_issues` 带 `labels: [domain:X]` + 最小字段拿回全车道 open 集。
429-
- 候选 = open、未 assign、无 `needs-user-decision`、无 `pm:retriage`。
436+
- 候选 = open、未 assign、无 `needs-user-decision`、无 `pm:retriage`;⛔ 排除两行皆无的 `tooling` 卡。
430437
- 已排队父单的 open sub-issue 自动是候选,`pm:epic` 父单的子树除外。
431438
- 每张候选读全文 + 全部评论,写派发词前做决策复读:评论读到最后一页。
432439
- 维护者裁决逐字引入派发词裁决分区作约束,无则写明无裁决。
@@ -438,6 +445,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
438445
- 工作项面:卡片与分诊评论列的每条工作项逐条对树核验是否仍未完成,⛔ 不对卡核验。
439446
- 每条工作项写进派发令时都是 dev 首先证伪的前提。
440447
- 并行度以 `batch` 封顶,等待不填槽;同批独立按文件面不相交判,⛔ 不按包、不按 check 名。
448+
- 舰队至多一张 `tooling` 卡带 `pm:dispatched`,第二张等;带 `Unblocks:` 者继承产品级不计数。
441449
- single-writer 路径 = `SINGLE_CLAIM_PATHS` 所枚举;共享其它路径是普通并发,后落地方解冲突。
442450
- 第 N 单派发前读 `scripts/pm/os-verify-lock.sh --status`:到达深度 ≥ `LOCK_DEPTH_HOLD`(= 2)即等。
443451
- 到达深度 = `queue N:` 行数 + 1(待派 dev 的运行算作到达);`state:` holder 与 `parked` 行不计。
@@ -671,9 +679,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
671679
### 轮次报告与节奏
672680

673681
- 每轮向维护者打中文轮次报告(chat 通道):issue → 判决 → PR 链接 → 备注的表。
674-
- 报告加升级项、代裁清单(分诊)、awaiting a human merge 项、governed 合并审计清单。
675-
- 审计清单实跑 `node scripts/pm/check-governed-merges.mjs --since <上轮>`,⛔ 不凭记忆汇总。
676-
- 车道审计是早警;权威合并窗口与认定/回滚处置归总监席,见 `references/lanes/director.md`。
682+
- 报告加升级项、代裁清单(分诊)、awaiting a human merge 项。
677683
- 报告含 `UNRECOGNISED` 行:对本轮门禁日志 grep `UNRECOGNISED` 逐行照录,`NOT APPLICABLE` 行也在内。
678684
- 健康指标五个:可派发库存(open `pm:queue` 未认领及趋势);决策箱(待维护者数)。
679685
- 决策箱指标还要点名带开放下游依赖的决策卡,从 `Blocked-by:` 反向索引现算。
@@ -764,7 +770,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
764770
- `AskUserQuestion` 只是在场加速器:仅当维护者在本会话 ~30 分钟内有过人类输入才可发。
765771
- 每问必带推荐项,被 Skip 或长挂即转卡通道,⛔ 不重弹。
766772
- 项目总监席:维护者在所在仓召唤 `/pm-dispatch director`;⛔ 无 Routine/cron;未回字 = 不在 = 停。
767-
- 四职 = `needs:contract-review` 事后审计、决裁勤务、维护者动作台账、governed 合并审计。
773+
- 三职 = `needs:contract-review` 事后审计、决裁勤务、维护者动作台账。
768774
- 每场召唤把带席内 ACCEPT 的受管草稿呈为一批 ≤5 行决裁;批准与合并仍是维护者的点击。
769775
- 总监席档位由维护者按项目人工定,每场记入摘要台账;⛔ 无档位硬门、无免档整理态。
770776
- 总监席是唯一裁决者:决策箱、代裁与一类自裁只出自本席,⛔ 无子代理无自述。
@@ -786,7 +792,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
786792
| `scripts/pm/check-skill-line-ratchet.mjs` | 本文件行数只降不升(`pnpm check:pm-skill-ratchet`);抬上限需维护者裁决引用在 PR 正文;⛔ re-wrap 不得用作筹行,新增以删减付账;不买内容的密度修复允许 |
787793
| `scripts/pm/check-skill-id-lint.mjs` | 本技能与 os-dev 定义的操作文本 ⛔ 不引用 issue 编号(`pnpm check:pm-skill-id-lint`) |
788794
| `scripts/pm/check-half-states.mjs` | label/assignee/PR 半状态的 report-only 巡查(含已复核就绪却无人落地的孤儿 PR 检测) |
789-
| `scripts/pm/check-governed-merges.mjs` | governed 面合并清单的 report-only 审计(事后防线;轮报载体,本地枚举零 API,仅归因走查询) |
795+
| `scripts/pm/check-governed-merges.mjs` | governed 面合并清单的 report-only 审计(事后防线;本地枚举零 API,仅归因走查询) |
790796
| `scripts/pm/dispatch-gates.mjs` | 文件面 → 该跑的门禁族(派发令取数) |
791797
| `scripts/pm/git-history.mjs` | 窗口化 commit 计数:回答或 REFUSE(浅 clone 对窗口化 `git log`/`rev-list` 以 exit 0 无警告答错);`historyHorizon()` 是只读谓词 |
792798
| `scripts/pm/os-regen-merge.sh` | 碰生成物 PR 的 merge 四步序(防静默吞并与锚点倒退) |

‎.claude/skills/pm-dispatch/references/core-rules.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@
8282
- sweep 扫全裸卡、队列卡缺域或缺定级、域卡缺 pm 状态,排除跟踪、停放与协议载体卡。
8383
- 首触定级跑到清空 ⛔ 无总量预算、未跑完断点续跑;清得空最新优先,否则最老优先。
8484
- 裸卡超过十五张则下一轮改域分批集中模式,每批不超过五张同族卡。
85-
- 有落点或可复现的缺陷、范围明确的工具修复与实现未被裁错的说明书脱节进 `pm:queue`。
85+
- 有落点或可复现的缺陷、实现未被裁错的说明书脱节进 `pm:queue`;工具卡另须带解锁行。
8686
- 设计卡、契约形状提案、碰迁移形状或删已发布能力的进决策箱;无出处说明书脱节不进。
8787
- 立卡限三类:今日可达可复现缺陷、契约违背、具名生产者陷阱;截断卡发修复指令不派。
8888
- 三类边界:缺陷问错不问缺、文档同判;元数据须他人再作者化;引向更糟的警告在类外。
@@ -125,7 +125,7 @@
125125
- 唯一例外:源码自述 pushed 上按设计而红、不跑 `merge_group`、评论记明门与因,三条全立。
126126
- 跟到合并为止并每轮读队列成员资格与 `origin/main`;踢出按签名台账四分支处置。
127127
- 合并即发布的仓无验证层不合并,落地判据是已发布且探测通过 ⛔ 不是 MERGED。
128-
- 每轮打中文轮次报告,含判决表、升级项、代裁清单、等人合项、受管合并审计与五指标。
128+
- 每轮打中文轮次报告,含判决表、升级项、代裁清单、等人合项与五指标。
129129
- 收工点是会话内在飞归零、存档后立即派下一波 ⛔ 不等人闸;清空转待命而不是退场。
130130
## 断粮与跨墙恢复
131131
- 权威的用量墙信号是失败本身,重置时刻只在撞墙那一刻可得,拿到就记下来。
@@ -144,7 +144,7 @@
144144
- 方案逐轴过升级与决策段的四轴:业务需求、长远合理性、防 AI 写错、创业阶段聚焦。
145145
- 推荐须逐轴给理由、长远权重不低于一半;有拉动荐长远终态一次付清,零拉动荐不扩散。
146146
- 每张决策卡落卡即带标准四棱块;卡先于弹窗,被阻塞的执行卡同笔转 `pm:blocked`。
147-
- 项目总监席由人工召唤,未回字 = 不在 = 停;四职:复核审计、决裁、动作台账、合并审计。
147+
- 项目总监席由人工召唤,未回字 = 不在 = 停;三职:复核审计、决裁、动作台账。
148148
## 报告契约
149149
- 终报 JSON 的权威形状住 `.claude/agents/os-dev.md`,⛔ 本协议不另存第二份。
150150
- 前提被证伪且无 PR 是合法终报,当再分诊输入复核,⛔ 永不当失败派发。

‎.claude/skills/pm-dispatch/references/lanes/director.md‎

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
- 入口:维护者说处理决裁或处理 contract-review,或 `/pm-dispatch director`。
1515
- 未回字 = 不在 = 停:维护者不在则本席不运行,⛔ 无巡检、审计、快照、聊天、卡评论。
1616
- 回来后先补跑审计与重挂复位一次,再只发一行「批 #N 待字;箱内另有 K 张新到未呈」。
17-
- 开场读一次服役档记入会话审计行,读法见 `../platform-readings.md`;⛔ 不因档位拒裁停四职。
17+
- 开场读一次服役档记入会话审计行,读法见 `../platform-readings.md`;⛔ 不因档位拒裁停三职。
1818
- 双射 carve-out:一张 `pm:seat` 座位贴,四段照旧;状态块逐场一行,各记己锚,⛔ 无占席人。
1919
- 不占 `domain:*` 车道,范围按职责标签跨车道跨仓;永不认领 backlog、永不写码。
2020

@@ -58,15 +58,6 @@
5858
- 待您清单与待字索引随所属批只呈一次,⛔ 不逐轮重印;座位贴散文降为指针,标签即状态。
5959
- 出口执行:核验动作确已发生,再摘标加证据评论同笔;出口条款见 `../state-machine.md`。
6060

61-
## 职责四:受管合并审计
62-
63-
- 检测双层、处置单席:车道轮报 sweep 只作早警,权威合并窗口在本席。
64-
- 每场召唤实跑 check-governed-merges,`--since-ref` 锚上一场的 tips;403 归因逐条走 MCP 补齐。
65-
- 锚行住座位贴说明段;脚本零存储,自打印下一场参数,跑后新 tips 同笔记回。
66-
- INCOMPLETE(exit 2)照实报,⛔ 不作干净;清单并入决裁批次,一行一条认定 y 或 n。
67-
- 未认定条目 = 席位违规,同笔立 `needs-user-decision` 卡立案回滚,事后审计制。
68-
- ⛔ 不新增标签:枚举本地树推导零 API。⛔ 无 cron,节奏与停放同授权段。
69-
7061
## 与 skills 席的分界
7162

7263
- 改 skill、指令或治理文本归 skills 席;出裁决、清复审标、清点待人工清单归本席。

‎.claude/skills/pm-dispatch/references/lanes/skills.md‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
- 四维分析先于派发与复核。
1717
- 规则层受管 PR 恒 draft 等维护者的字;flip 或 arm 前跑 `check-governed-merges --test` 带路径。
18-
- 轮报的受管合并审计清单带 `--since` 四仓实跑,⛔ 不凭记忆汇总。
1918
- 档位从 `--tier` 推导引用;pm-dispatch 根恒契约复审档;条款②闸门照现行。
2019
- 额度耗尽豁免的地板是默认判断档,⛔ 不再往下。
2120
- 棘轮逐行付账,⛔ re-wrap 筹行;砍点逐条核幸存,被砍内容若在别处无家,砍掉就是丢规则。

‎scripts/pm/check-skill-line-ratchet.mjs‎

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,33 @@ export const CEILINGS = new Map([
332332
// clause is refused on the state-machine precedent. Ruled content is not
333333
// growth (the 811 → 812 entry above). Landed count, headroom 0, same
334334
// convention.
335-
['.claude/skills/pm-dispatch/SKILL.md', 813],
335+
// Raised 813 → 819 by the product-only-queue charter ruling — an ORDINARY
336+
// raise under this map's own maintainer exit, ⛔ not a cross-file move.
337+
// Maintainer, 2026-09-21, live PM chat with the director seat, verbatim and
338+
// untranslated: 「205 否,天花板抬到 819」 — the second clause is this ruling
339+
// (the first is batch #205 item 1, on a different card); recorded by the
340+
// director on #19457, comment 5754521737. The content is the six ruled edits
341+
// of #19457 (ruling batch #202, letter B, plus the audit-retirement directive
342+
// 「受管合并审计 以后不需要了,浪费时间。」 landed as its edit 6): the dev queue
343+
// becomes product-only and a `tooling` card enters `pm:queue` only with an
344+
// `Unblocks: #N` line or a named published surface; triage closes at first
345+
// grading; a gate that misfires twice is deleted rather than repaired; at most
346+
// one tooling card is dispatched fleet-wide; and `tooling` becomes a
347+
// first-touch label with four named readers.
348+
// It could not be paid in place — measured over three rounds, not assumed: the
349+
// cost went 9 → 8 → 6 as everything payable was paid (three rules folded into
350+
// existing lines, the four readers folded into the length-exempt glossary ROW,
351+
// the close rule folded onto the 「无则关」 clause a sibling PR had landed
352+
// meanwhile, and edit 6's deletions gave two lines back); every ceilinged file
353+
// in this map stands at headroom 0, so no reference file can absorb the rest;
354+
// the six that remain are one ruled rule each, 78–120 bytes, and no two of them
355+
// pair under the 120-byte cap; and a declared cross-file move is zero-sum by
356+
// construction — the destination's raise may not exceed the source's net
357+
// decrease — so it can fund a move but never new content. Ruled content is not
358+
// growth (the 811 → 812 entry above). SKILL.md is not a CROSS_FILE_MOVES
359+
// destination, so no `ruledRaises` record applies. Landed count, headroom 0,
360+
// same convention.
361+
['.claude/skills/pm-dispatch/SKILL.md', 819],
336362
// Raised 223 → 244 by the triage reading-cost card (maintainer ruling
337363
// 2026-08-20, quoted in the raising PR): three mandated conventions land in
338364
// the runbook's triage sections. Landed count, headroom 0, same convention.

0 commit comments

Comments
 (0)