Skip to content

Commit b62ca78

Browse files
objectstack-fleet[bot]os-elon-muskclaude
authored
docs(pm-dispatch): fold the engine, services and cli lanes into domain:server (#25247)
<!-- claude-projects-attribution: {"github_login":"os-elon-musk"} --> _Requested by **Elon** · [project thread](https://claude.ai/code/project/chan_01WedDzV26nniwxv7jC88B9D?thread=cmsg_01WedDzV26nniwxv7jC88B9DUJcFhrG7m5mhGeMo1Bhfby)_ Fixes #24907 Clause-②: no Metadata-protocol: none ## Summary Implements the maintainer ruling on #24907 (comment 6341410910, verbatim: 「**Maintainer ruling: 乙**. engine, services **and cli** fold into `domain:server`, and `packages/qa` moves to `domain:devx`.」), on the six-point scope the card states. 1. **SKILL.md 域车道 table** — the `domain:engine`, `domain:services` and `domain:cli` rows become one `domain:server` row (「服务端:引擎 + 服务插件 + CLI/运行时」) scoped to the union of the three; `packages/qa` moves to the `domain:devx` row — and to keep that row under the width pin after the insertion, its path spellings were shortened to the table's own bare-prefix convention (`content/docs/**` → `content/docs`, `docs/qa/**` → `docs/qa`, `.githooks/` → `.githooks`, `scripts/` → `scripts`, `.github/workflows/` → `.github/workflows`) and 「按锚定规则例外归」 → 「按锚定规则归」; meaning unchanged, the three still route to `domain:spec`, and no script parses the row (disclosed on the contract review's note 1); the retired-label rule takes one bullet that reads the three old spellings as `domain:server`. The file goes 319 → 318 lines and its widest row 342 → 341 bytes; both ceilings are lowered, nothing is raised. (After merging `main` with #25240, which had paid one line down without moving the ceiling, the ceiling followed the landed count: 317/317. After merging `main` again behind #25348 — whose pointer line spent the last line of the 319 ceiling — the merged tree lands at 319 − 1 = 318 and the ceiling follows it once more: 318/318, commit `535703354b`; still a lowering from the 319 `main` carries. Widest row still 341/341.) 2. **Lane charters** — `references/lanes/{engine,services,cli}.md` → `references/lanes/server.md`, three sections (one per former surface), with the rule that a seat reads only the section its claim's `File surface:` names. The three per-lane spec red lines became one lane-wide line and the two pointers between the former lanes left, so the merged file lands at 87 lines against the 88 the three rows summed to. `lanes/spec.md`'s `/meta` pointer now names `domain:server`. 3. **`scripts/pm/ensure-pm-labels.sh`** — creates `domain:server`; the three retired labels keep an alias row each so `--reconcile` writes a `Retired 2026-10-22, alias of domain:server (… surface); in-flight cards keep it until they land` description onto the live objects (≤100 chars each; the header's retired-lanes rule records them as the one transitional exception). 4. **Aliases in the readers** — `scripts/pm/check-half-states.mjs` gains `LANE_LABEL_ALIASES` + `canonicalLane()`, and every place the sweep compares a card's lane with a seat's goes through it: `seatLane` (a post not yet retitled speaks for `domain:server`), `newestLaneClaim` (both directions), the H32 lane inventory and the census (deduplicated, so a card carrying an old and the new spelling is one lane). In-flight claims, branches and `Seat:` lines stay valid; nothing is relabelled or retitled here. 5. **Seat posts** — not touched; each seat-holder retitles at their next round. 6. **No new gate.** `check-skill-line-ratchet.mjs` only follows the merge in its ledger (ceilings, widest-row pins, the platform-readings cross-file-move sources, where `lanes/server.md` at `was` 97 = 35 + 30 + 32 carries the two merged sources' place so the 9-line decrease they had paid stays counted). Total ceilings down 488 lines. **Point 4 premise, measured:** `check-skill-line-ratchet.mjs` and `clause2-line.mjs` have no label reader (clause2-line mentions `domain:cli` once, in a comment); the only code that compares the three labels is `check-half-states.mjs`, so the alias lives there alone. Fixtures naming the old labels in `check-merge-queue-triage-outcome.mjs` and `osv-base-relative.mjs` are test data, not readers, and stay. **Self-tests:** `check-half-states.mjs` registers a new battery `domain:server lane aliases` (pinned at 22, 24 cases: the three aliases, pass-through controls for a live lane / a non-lane label / a non-string, the frozen map, the seat title in both spellings, the claim index in both directions with OR-not-AND and `pm:queue` controls, the census with its one-lane-not-two case) and the roster floor rises 9 → 10 with it. Three H38 cases whose fixture lane is the retired `domain:services` spelling now expect the merged spelling (the specimen post stays as measured); the "lane with no dispatched cards" control moved from `domain:engine` (now the same lane) to `domain:skills`. **CI fix, pushed after the contract review (Elon, 2026-10-22: 「Fix CI」) — commit `d062675`, `scripts/pm/board-snapshot.mjs` only.** The `Snapshot the board to the archive branch` check was red on this PR, and on every scheduled run since 2026-10-21 (#24351), with a count-check SHORTFALL of the whole board. Measured 2026-10-22: GitHub's issues listing answers `200 []` to more than half of the requests made to it (39 of 68 probes; each with its own request id and counted against the rate limit, so not a cache; cache directives, a cache-busting query, sort, direction, page size, state and since make no difference; objectui and hotcrm blank the same way), while `/repos/{repo}`, the pulls listing and the per-number comment pages never did. The tool read a blank first page as the short page and declared the open set complete at zero records. The fix: a blank listing page is asked again (same URL and page size, up to `BLANK_PAGE_ASKS` = 6 budgeted asks, no sleep); a blank that survives the bound is believed past an anchor (the cursor does not advance, so the next run re-reads from it) and, from the beginning, only when the board's own `open_issues_count` — read once as the witness — is zero. Otherwise the walk stops with its cursor (`stopped_by: blank-listing`), nothing is marked complete, the count check stays `pending` and the run exits 0 as a planned stop. Once the open set is complete, a streak of such runs is what the freshness row turns red; an archive still in its open phase reads `building` and never ages (pre-existing semantics) — that is the PR leg's fresh dry-run archive, not `main`'s, whose `board-archive` manifest has been in the incremental phase since 2026-09-10 (open set and history complete; its latest scheduled run reached a verdict). The manifest counts the re-asks (`run.blank_pages_reasked`), the summary prints the count and the stop, a new header section records the measurement, and a new self-test battery drives the measured failure healed, the bounded stop and the anchored blank (13 cases, floor 12 → 13, 169 cases). The PR leg's own arguments (`--dry-run --limit=5 --max-requests=25`) ran six times against the live board: six exits 0 — one a blank-listing stop, two after re-asks. This supersedes the standing-down comment on this PR (6344588150), which read the failure as `main`'s own: the cause is upstream, the handling of it is this PR's. The workflow is untouched (Tier H). ## 维护者速读(草稿) ### 改了什么 - 车道表三行(engine / services / cli)合为一行 `domain:server`,范围是三者的并集;`packages/qa` 挪到 devx 行(为守住最宽行 pin,该行路径拼写改为表内惯用的裸前缀,如 `content/docs/**`→`content/docs`,「例外归」→「归」,语义不变);加一条「三旧标签读作 `domain:server`」。SKILL.md 319→318 行(合入 main 上 #25240 后随落地行数降到 317;再合入 #25348 后主干 SKILL.md 为 319,本分支净 −1 落在 318,ceiling 跟着对到 318——相对主干的 319 仍是降),最宽行 342→341,只降不升。 - 三份车道岗位说明合并为 `references/lanes/server.md`(87 行,三节按文件面分读);spec.md 里 `/meta` 的指向改为 `domain:server`。 - `ensure-pm-labels.sh` 建 `domain:server`;三旧标签改「retired, alias of domain:server」描述,对象保留。 - `check-half-states.mjs` 加别名表:席位贴标题、认领索引、H32 库存、普查都把三旧标签读作 `domain:server`;自检新增一个电池,地板 9→10。 - 棘轮台账跟着改(ceilings、最宽行 pin、跨文件搬迁来源),ceilings 总量再降 488 行。 - 审查后追加(Elon「Fix CI」,提交 `d062675`):`scripts/pm/board-snapshot.mjs` 的空页规则。GitHub 的 issues 列表接口自 10-21 起间歇回 `200 []`(68 次探针 39 次空,请求 id 各异、计入配额,不是缓存;objectui、hotcrm 同样),工具把空页当「走完」、开放集记 0 条、count check 误报 SHORTFALL。现在同一页最多再问 6 次;从头开始仍空、而 `/repos` 见证板上有开放项,就带游标停下(退出 0,count check 保持 pending);带 since 或偏移页问满才信(游标不前进,下轮重读)。manifest 记 `run.blank_pages_reasked`,表头新增一节记录测量,自检新电池 13 例。工作流未动。 ### 为什么改 裁决乙(#24907 评论 6341410910)原话:「engine, services **and cli** fold into `domain:server`, and `packages/qa` moves to `domain:devx`」。三条车道共用一批席位账户,分三贴意味着同一个人读三份岗位说明、认领走三个标签;合并后一席一贴一说明。 ### 风险与代价(含回滚) - 过渡期四种拼写并存:在途卡保留旧标签、席位贴由各席自行改标题、开着的卡由分诊事后批量改签。别名表让巡逻不会把它们当四条车道报假警;⛔ 它不替任何人改签。 - 合并说明把三条 spec 红线合成一条、去掉两条车道间互指,规则本身没有删;读者只读自己那一节。 - 回滚:整 PR revert 即可——标签对象没有删,三旧标签的描述由下一次 `ensure-pm-labels.sh --reconcile` 恢复;别名表、新电池、地板一起退回。 - 没有新门禁;棘轮只降不升,不需要维护者裁决。 - 空页规则的代价:每个空页最多多花 6 个请求(主干每轮 800 预算内);停下即下一轮重读,不标记完成。若 GitHub 持续回空,主干轮次以 pending 退出 0,由 freshness 行在超窗后转红——这是设计内的告警路径,不是静默(计龄的前提是开放集已完整:主干归档自 9-10 起处于 incremental 阶段,满足;只有开放集未完成的新归档——即 PR 腿的干跑——读 building 不计龄,属既有语义)。 ### 席位意见 (留空) ### 你要做的 - 读 `.claude/**` 的 diff(Tier S):车道表那一行、`lanes/server.md` 的三节标题与共用红线、别名条目。 - 也读 `scripts/pm/board-snapshot.mjs` 的 diff(受治理的 `scripts/pm/**`):表头新节、`blankPageStep`、walk 内的再问/停下、新电池;席位需对新头重做契约复核。 - 过契约复核后由席位落地;落地后分诊把开着的 engine/services/cli 卡批量改签为 `domain:server`,各席在下一轮改席位贴标题,再在仓库跑一次 `scripts/pm/ensure-pm-labels.sh --reconcile` 把三旧标签的描述写上去。 ## Acceptance notes - `pnpm check:pm-skill-ratchet` — green; SKILL.md 318/318 (ceiling lowered 319 → 318 by this card, 318 → 317 after merging `main` with #25240, then 317 → 318 after merging `main` behind #25348, whose pointer line landed at the 319 ceiling — every step the landed count, never above `main`'s 319), widest row 341/341 (pin lowered 342 → 341), `lanes/server.md` 87/87 (new row at its landed count), both cross-file moves still paid down, total ceilings down 488. - `pnpm check:pm-half-states` — 4941 cases pass; battery `domain:server lane aliases` 24/22, roster 10/10. - `pnpm check:pm-label-desc-cap` — green; the three alias descriptions are 100 / 99 / 97 characters. - `pnpm check:pm-skill-id-lint` — green. - `pnpm check:pm-board-snapshot` — 169 cases pass across 13 batteries; battery `the blank page: asked again, then believed or stopped by where the walk is` 13/13, floor 13/13. Live, with the PR leg's arguments: six runs, six exits 0. - `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` derives 54 commands from the nine changed paths, identical before and after merging `main`, and 55 once `scripts/pm/board-snapshot.mjs` joins the set (it adds `pnpm check:pm-board-snapshot`). Run four times, every command byte-for-byte with its exit code captured before any pipe and reconciled with `--ran`: on the pre-merge tree (`e208c89`/`56b333e`), on the merged head `c5c1735` (both **54 derived, 54 run, 0 NOT-MEASURED, 0 UNRUN**), on the CI-fix head `d062675` (**55 derived, 55 run, 0 NOT-MEASURED, 0 UNRUN**) and on the head merged behind #25348, `535703354b` (**55 derived, 55 run, 0 NOT-MEASURED, 0 UNRUN**), every exit 0. In the first run `pnpm --filter @objectstack/lint run check:doc-formula-expressions` first exited 3 (prerequisite: `@objectstack/formula` and `@objectstack/lint` not built) and exited 0 after `pnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lint`; the rerun passed it outright. The 43 artifact-roster, 11 wide-population and 16 pending-changeset families, the path-scheduled CI job and the type-check lanes are CI's to run on this PR, not claimed here. `Snapshot the board to the archive branch` was red on this PR and on `main`'s own code (count check exit 2, tracked on #24351); commit `d062675` handles the upstream blank listing it was tripping on — see the CI-fix paragraph in the summary; the standing-down comment on this PR is superseded. - Changeset: none — `.claude/**` and `scripts/pm/**` publish nothing (`skip-changeset`, declared at creation). - Governed surface: `.claude/skills/pm-dispatch/**` is Tier S and `scripts/pm/board-snapshot.mjs` is governed `scripts/pm/**`; AGENTS.md, CLAUDE.md, NORTH-STAR, `skills/**`, workflows (`.github/workflows/board-snapshot.yml` included) and CODEOWNERS are untouched. The SKILL.md claim-template block (#25115), the 〈升级与决策〉 ruler line and the 红线 delegated-channel line (#25216) and `lanes/director.md` are untouched. - Out of scope, left as-is: product-package comments, `docs/qa/**` notes, audits, ADRs and CHANGELOG entries that name the three old lanes are history, not readers. --- _Generated by [Claude Code](https://claude.ai/code/session_01VCLHrrmPbwQHZcc2yqdFHD)_ --------- Co-authored-by: os-elon-musk <elon@objectstack.ai> Co-authored-by: Claude <noreply@anthropic.com>
1 parent 25f88e8 commit b62ca78

10 files changed

Lines changed: 418 additions & 142 deletions

File tree

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -158,16 +158,15 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
158158

159159
| 标签 | 包家族 |
160160
|:--|:--|
161-
| `domain:engine` | `packages/objectql`、`packages/core`、`packages/formula`(CEL / `matches-filter` / RLS 谓词求值)、`plugin-pinyin-search`;`packages/metadata*`、`packages/platform-objects`;`packages/drivers/driver-*`;退役标签 `domain:engine-core` / `domain:metadata` / `domain:drivers` 只退出流通,GitHub 标签对象保留 |
162-
| `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`;退役标签 `domain:identity` 同上只退流通 |
163-
| `domain:devx` | `sdui-parser`、`content/docs/**`、`apps/docs`、`docs/qa/**`、`.githooks/`、`docker/README.md`、`examples/**` 仅测试基建面;`packages/lint`、`scripts/`(门禁类)、`.github/workflows/`(接线)三者按锚定规则例外归 `domain:spec`,门禁按 SUBJECT:governed 面归 skills,代码/文档质量归本域 |
161+
| `domain:server` | 服务端:引擎 + 服务插件 + CLI/运行时;`objectql core formula metadata* platform-objects drivers/* services/* connectors/* triggers/* plugin-* embedder-openai knowledge-* cli runtime verify types rest mcp observability client* cloud-connection create-objectstack adapters/*`;详见 `references/lanes/server.md` |
162+
| `domain:devx` | `sdui-parser`、`packages/qa`、`content/docs`、`apps/docs`、`docs/qa`、`.githooks`、`docker/README.md`、`examples/**` 仅测试基建面;`packages/lint`、`scripts`(门禁类)、`.github/workflows`(接线)三者按锚定规则归 `domain:spec`,门禁按 SUBJECT:governed 面归 skills,代码/文档质量归本域 |
164163
| `domain:skills` | governed 面全量(含本文件;统一定义见「governed 面统一定义」行);非门禁的 `scripts/pm/**`(PM 循环工具);governed 面的治理执行文件:`.github/CODEOWNERS` + SUBJECT 是 governed 面本身的门禁/审计(现为 `scripts/pm/check-governed-merges.mjs`) |
165164
| `domain:spec` | `packages/spec` 整包:schema 形状、`contracts/**`、退役行为半边、strictness 台账;describe/JSDoc/墓碑散文/错误 guidance 与 alias 表;`packages/spec/scripts/**`、`packages/spec/docs/**` 及按锚定规则的例外归本域的工具链(域边界枚举与席内分派见 `references/lanes/spec.md`) |
166-
| `domain:cli` | `packages/cli`、`runtime`、`verify`、`packages/qa`、`types`、`packages/rest`、`packages/mcp`、`packages/observability`、`packages/client*`、`cloud-connection`、`create-objectstack`、`packages/adapters/*`、`plugin-hono-server`、`plugin-dev` |
167165
| `domain:cloud` | 云服务旅程,停放(加 `status:parked`,sweep 免扫)待 cloud PM 迁移,本仓不派 |
168166
| (无固定归属,按落点分诊) | `packages/apps/*`、`packages/console`(dist 由脚本生成 ⛔ 不手改;UI 缺陷走 `repo:objectui`)、`examples/*`(归它演练的子系统)、`docs/audits/**` |
169167

170168
- 表未覆盖的包首次分诊时归类并走 PR 更新本表;新增或退役 `domain:*` 必须同批改本表。
169+
- 退役 `domain:*` 只退流通,对象保留;`domain:engine`/`domain:services`/`domain:cli` 读作 `domain:server`。
171170
- `domain:*` 只由分诊席产出,例外一:在飞卡衍生 sub-issue 承父卡域;无标签的卡 ⛔ 不得认领。
172171
- 例外二:立卡人自贴而车道合上表、正文齐立卡门三件 ⇒ 执行席直接认领,分诊事后抽查。
173172
- 跨域例外路径:拆不动的跨域单 PR 由分诊席指定一个车道 PM 认领,认领评论申报文件面。

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

Lines changed: 0 additions & 29 deletions
This file was deleted.

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

Lines changed: 0 additions & 32 deletions
This file was deleted.
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# 车道岗位说明:domain:server
2+
3+
见 seat-lifecycle.md;本文是本车道岗位说明,现值状态恒在座位贴,⛔ 不迁入本文。
4+
5+
- 三节按文件面分读:认领的 `File surface:` 落在哪节就读哪节,⛔ 不读整篇。
6+
- 红线:触 `packages/spec` 的卡一律归 spec 席;改元数据格式或接受面的卡亦然,不论碰没碰 spec。
7+
8+
## 引擎面(原 `domain:engine`)
9+
10+
### 范围
11+
12+
- `packages/objectql`(含 SchemaRegistry)、`packages/core`、`packages/formula`
13+
(CEL、`matches-filter`、RLS 谓词求值)、`plugin-pinyin-search`(落点在编译与查询核心)。
14+
- `objectql/src/metadata-facade.ts` 名字带 metadata,仍归本节。
15+
- `packages/metadata*`(加载、注册、持久化、缓存、目录)、`packages/platform-objects`。
16+
- `packages/drivers/driver-*`:driver-memory、driver-mongodb、driver-sql、
17+
driver-sqlite-wasm、driver-turso。
18+
- `content/docs/**` 与 `packages/lint` ⇒ `domain:devx`;`packages/lint` 的唯一例外见 SKILL.md 锚定规则。
19+
20+
### 常设承诺
21+
22+
- driver conformance 台账只降不升:driver 卡的派发令要求 dev 前后各读一次 covered 与 DEBT。
23+
- 放宽接受集或扩大公开面的卡按条款②处理,判据与档位在 SKILL.md,⛔ 不另抄。
24+
25+
### 席内判断
26+
27+
- 区域不等于文件:区域放行只能来自对方卡真实改动行程,有 PR 读 diff,没有就申报 UNKNOWN。
28+
- 做删除的卡,其行程没人能从它加了什么的名字推出。
29+
- 行号数小时内即腐烂,恒按符号定位。
30+
- 五个 driver 列只有约三个独立实现:sqlite-wasm 与 turso local 都继承 `SqlDriver` 的 filter 编译器。
31+
- ⇒ 把一致性表当五方佐证会高估证据;同理,单点修 SQL 家族共享 seam 即可覆盖三个 driver。
32+
- 元数据合并语义按键类各不相同:fields 展开、validations 与 indexes 连接、标量 last-writer-wins。
33+
- ⇒ 评审 pin 时先问它没有覆盖什么。
34+
- 标量的 last-writer-wins 是重复立卡的老源头,同 seam 的第三张分歧卡优先裁类,不裁实例。
35+
- 元数据接受面形状的卡先问生产者在哪:答案常改变卡的范围与域标签,回分诊。
36+
37+
## 服务插件面(原 `domain:services`)
38+
39+
### 范围
40+
41+
- `packages/services/*`、`packages/connectors/*`、`packages/triggers/*`、
42+
`plugin-approvals`、`plugin-webhooks`、`plugin-email`、`plugin-reports`、
43+
`embedder-openai`、`knowledge-*`。
44+
- 身份侧:`plugin-auth`、`plugin-security`、`plugin-sharing`、`plugin-audit`。
45+
- 安全与权限边界的放宽是人工地板,恒升级不代裁。
46+
- 该边界含访问控制、认证流、RLS 与共享语义、审计留痕。
47+
48+
### 常设承诺
49+
50+
- 每条否定性 pin 都要消融验证:被禁行为放回、测试转红、报失败输出、恢复。
51+
- 单独的绿不是证据。
52+
- 安全族卡的披露纪律:复现配方不落任何公开面(卡、PR、评论)。
53+
- 证据以抽象描述或私有通道承载。
54+
55+
### 席内判断
56+
57+
- 认证栈版本族升级把 `pnpm-workspace.yaml` overrides 与 `plugin-auth/**` 当同一个热文件面串行。
58+
- 旧版本族上测得的前提(兼容性、行为断言)在新族落地后逐卡重读再派,⛔ 不沿用旧读数。
59+
- 多服务共享同一条自动化引擎或数据源 seam 时,同文件卡跨轮硬串行。
60+
- 后一单派发前先用前一单的报告重新定价,见 SKILL.md 候选与批次的重定价条款。
61+
62+
## CLI/运行时面(原 `domain:cli`)
63+
64+
### 范围
65+
66+
- `packages/cli`、`runtime`、`verify`、`types`、`packages/rest`、
67+
`packages/mcp`、`packages/observability`、`packages/client*`、
68+
`cloud-connection`、`create-objectstack`、`packages/adapters/*`、
69+
`plugin-hono-server`、`plugin-dev`;`packages/qa` 已归 `domain:devx`。
70+
- 红线:按落点判归属 —— 标题挂 cli 而落点在别包的卡只上报误标,⛔ 不改签。
71+
- `/meta` 路由本体归本节,元数据格式与接受面归 `domain:spec`。
72+
73+
### 常设承诺
74+
75+
- PR 侧绿不等于队列侧绿;队列分支条目名、队序重建与出队滞留住 `../platform-readings.md`。
76+
- `dispatch-gates.mjs` 只报路径推导的地板;条款②从卡内容判,只定复核档不定施工档。
77+
- 已知盲区:它不点名 `pnpm lint` 族 ⇒ 本车道派发令恒补一句跑 `pnpm lint`。
78+
- ⛔ 永不削弱门禁:棘轮上跳是门禁在报你的改动有缺陷。
79+
- 规则文案里自带的逃生舱只用于它描述的那种情形。
80+
81+
### 席内判断
82+
83+
- 探针的 baseline 也是测量,而且是没人复查的那个 ⇒ 判据恒读命中行本身,⛔ 不读命中数。
84+
- 断言文本被删的探针要锚在消失的那段上:被删串的前缀在删除后仍幸存是构造使然。
85+
- 静默时长是发探针的门槛,永不是判死的门槛;基线自本车道实录,⛔ 不写成常数。
86+
- 分支无提交加 SendMessage 探针便宜,且能复活假死的 dev。
87+
- ⛔ 永不往可能活着的 worktree 派第二个 agent。

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

Lines changed: 0 additions & 27 deletions
This file was deleted.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
- 收窄不触发条款②,但按 `yes` 申报恒不是错误;⛔ 个案裁决不改本行。
2222
- 机器面改围契约的仪器,与辅助面不交,⛔ 不碰 `packages/spec/src/**/*.zod.ts` 与 strictness 台账。
2323
- 机器面卡只按北极星「仪器为车队服务」的那一问评级。
24-
- 改元数据格式或接受面的照旧归 `domain:spec`;`/meta` 路由本体在 `packages/rest` 归 `domain:cli`。
24+
- 改元数据格式或接受面的照旧归本席;`/meta` 路由本体在 `packages/rest` 归 `domain:server`。
2525
- 拿不准 FLAG 回分诊,⛔ 不自设判据;档位随面走,表在 SKILL.md 模型分档,⛔ 不另抄。
2626

2727
## 常设承诺

0 commit comments

Comments
 (0)