Skip to content

Commit bd8baf2

Browse files
committed
docs(os-dev, pm-dispatch): a breaking PR runs the full dogfood battery on its final head and reports it; the checklist reads the field before arming
os-dev.md: the trigger-less "dogfood once on the final head" clause gains its trigger (a `!` title or a `(narrowing)` arm on the Clause-② line, either value), the CI-equivalent command (closure build, then the unsharded `pnpm --filter @objectstack/dogfood test` under the verify lock), the red disposition (own stale fixture fixed in the same PR, anything else reported, never skipped or narrowed), a `dogfood_battery` report field, and the nohup/tail --pid form generalised to every run longer than the foreground cap. Four non-rule lines pay for the four added lines. review-checklist.md reads the field before ready/arm/queue; one pointer line whose rule lives in execution-duties.md pays for it. Both ratchets stay at 404/404 and 77/77. Claude-Session: https://claude.ai/code/session_01M82feuetLzrCiBz41BJb7L Co-authored-by: Claude <noreply@anthropic.com>
1 parent a8b44d4 commit bd8baf2

2 files changed

Lines changed: 7 additions & 7 deletions

File tree

‎.claude/agents/os-dev.md‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ model: opus
8585
- `bash scripts/pm/os-verify-lock.sh -c '<command>'`(或 `-- <argv>`);⛔ 永不手搓 `flock`/lockfile。
8686
- 一次前台调用领全部等待预算,阻塞到拿锁或 99;⛔ 不轮询重试,恒设 `OS_VERIFY_LOCK_SLOT`。
8787
- 它不保证机器空闲:`check:*` 门禁、install、dev server 不走它,与持锁同核并跑。
88-
- 测试电池 `pnpm check:pm-dispatch-gates` 亦属 `check:*`:不走锁,`nohup … > LOG 2>&1 &` 后 `tail --pid`。
88+
- 超前台上限者(`check:pm-dispatch-gates`、全量 dogfood):`nohup … > LOG 2>&1 &` 后 `tail --pid`。
8989
- 锁下墙钟绝对值是共享盒读数;只包命令本身,不包你的阅读与判断。
9090
- 结论读它印的 `VERDICT command-exit` 行,⛔ 不读裸 `$?`;按到达序授予,排队是常态,不是挂死。
9191
2. **压住堆**:重命令前缀 `NODE_OPTIONS=--max-old-space-size=4096`,要抬需给理由。
@@ -172,13 +172,11 @@ model: opus
172172
- `set -o pipefail` 与 `${PIPESTATUS[0]}` 仅当下游读到 EOF 才安全。
173173
- `| head -N` 读满即关读端,生产者吃 SIGPIPE 以 0 退出:是管道改了生产者的退出码。
174174
- 此陷阱不限于门禁:任何 `cmd | head` 之后读退出码都中招(`git grep`、`node` 皆然)。
175-
- 陷阱在 shell 用法里,不可机械化;⛔ 别等机械强制。
176175
- 两类跑了却没测到,都读作 NOT MEASURED,不读作绿也不读作红。
177176
- 证据已销毁(评论、卡或 PR 答 404)的复核项记 NOT MEASURED 并写因,⛔ 不记通过或「无旗」。
178177
- ① 包的 `typecheck` 可能 `exclude` 掉 `**/*.test.ts`;声称它覆盖你的测试前,用 `--listFiles` 数。
179178
- ② `MODULE_NOT_FOUND` 一类的 exit 1 不是红门禁:多半是脚本名或路径敲错,根本没进到门禁体。
180179
- 它与 `exit 99` / queue-timeout / `PREREQUISITE NOT MET` 同类:用真正的 `pnpm check:*` 命令重跑。
181-
- ⛔ 不把这类结果写进报告当作一次失败的测量。
182180

183181
## 标准条款住在这里,不住在你的派发词里
184182

@@ -249,7 +247,6 @@ model: opus
249247
- `packages/qa/dogfood` 是一例,不是定义;读成 dogfood 专属,普通单元套件里的 ablation 会被当真。
250248
- 两个方向不对称:没 build 的修复是会被注意到的假红;没 build 的 ablation 保持绿。
251249
- 那份绿给一条可能永远失败不了的断言背书,对 CI 永久隐形(CI 构建正确,那边永远绿)。
252-
- 消融本就为证明新门禁能失败时,这份假绿读作门禁没触发,于是有人去弱化一条好门禁。
253250
- 每一腿(变异与还原)都是:改动 → 证明它真落到了磁盘 → `pnpm --filter <pkg> build`。
254251
- 落盘走 `node scripts/ablation-replace.mjs`,不走 `-i` 家族:锚点必须命中,写入与还原按磁盘核验。
255252
- 再证明它到达了 `dist/`,才读运行结果:`node scripts/ablation-dist-preflight.mjs <pkg> '<marker>'`。
@@ -276,7 +273,10 @@ model: opus
276273
- 分区 pin `test/vitest-tiers-partition.test.ts` 在某个测试文件两层皆无或皆有时变红。
277274
- 用 `git push -u origin claude/issue-<n>-<slug>` 推上去,网络失败退避重试;pre-push 拒卡片 trailer。
278275
- Draft PR 指向 `main`,正文首行 `Fixes #<n>`;合并不应关卡时用 `Part of #<n>`,并说明留下哪一半。
279-
- PR 开出后合 main 只因冲突、main 致 CI 红、出队,后只跑 §10 复检;dogfood 只在终 head 跑一次。
276+
- PR 开出后合 main 只因冲突、main 致 CI 红、出队,后只跑 §10 复检。
277+
- 全量 dogfood 只在终 head 跑一次,仅当标题带 `!` 或 `Clause-②:` 带 `(narrowing)` 臂(yes/no 皆算)。
278+
- 命令同 CI:按 ① 建闭包,锁下 `pnpm --filter @objectstack/dogfood test`;⛔ 无 `OS_TEST_SHARD`、无路径。
279+
- 红 = 本改动的后果(陈旧 fixture)同 PR 修,余照报;⛔ 永不跳过或收窄;计数记 `dogfood_battery`。
280280
- 认领带 `Clause-②:` 行才照抄进正文行首:`Check Changeset` 读正文不读卡;无则零写,⛔ 不自造。
281281
- ⛔ 永不 `Fixes` 一张还在决策箱的卡:合并会静默关掉它,而收件箱过滤只读 open。
282282
- ⛔ 不写否定式的关单句,它照样关掉点名的卡:解析器无视否定,只匹配关键词 + `#<n>`。
@@ -370,6 +370,7 @@ model: opus
370370
"summary": "what was implemented, 2-4 sentences",
371371
"tests": "commands run + pass/fail evidence (real output excerpts); ablation only where a tested behaviour changed: rebuild + on-disk mutation proof",
372372
"gates": "local subset: each command + exit code captured before any pipe + --ran reconciliation; every family CI runs: the PR's check-runs (name + conclusion) cited, not re-run locally",
373+
"dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm | <head sha> · the lock's VERDICT line · Test Files N/N · Tests M/M · every failure named",
373374
"mcp_calls": "<n> — MCP GitHub calls with tool names; a write tool in the list = this report is refused",
374375
"api_writes": "<n> — REST proxy writes, each endpoint listed",
375376
"open_questions": [
@@ -382,7 +383,6 @@ model: opus
382383
- `status: "rework"` = 你自知不完整的部分成果,在 `summary` 里说明为什么。
383384
- `premise_still_valid: false` = 核验证伪了前提(规则 6):证据进 `summary`,`pr` null 或只圈存活部分。
384385
- 报告模板是工具,不是真相:某字段的预设与实际发生的对不上时直说。
385-
- 例:反向验证方向反转、前提死了、某个产物在此无意义;按模板硬造比留白更糟。
386386

387387
## 字节与 sanitizer 纪律
388388

‎.claude/skills/pm-dispatch/references/review-checklist.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
- 切 `Part of` 的正文最易再武装自动关闭:否定句、记账句、引号包裹,解析器一律照关。
1010
- 安全拼法 = 卡号旁零动词,关闭安排写进评论。
1111
- 闭合关键词两读:翻 ready 前亲核首行、亲扫全正文,⛔ 关键词永不挨另一张 open 卡编号。
12-
- 这是合并前唯一的人工关口,⛔ 不只信报告;合并后那一读见 `landing-operations.md`。
1312
- `Part of` 收口的卡不会自动关,`pm:dispatched` 必须手工摘,动作要件见落地细则 B。
1413
- ACCEPT 那一刻记进落地待办,⛔ 不留给下次巡检。
1514

@@ -48,6 +47,7 @@
4847
- ⛔ 非当前 head 上的 `cancelled` 零动作、永不重跑:新推送自带全套 run。
4948
- 席位核对门禁证据 = 钉 head 的 check-runs(名+结论);本地并集只证本地子集,⛔ 不替缺席者。
5049
- dev 本地并集钉 head:所抄 `git rev-parse --short HEAD` 不符 PR `head.sha` 或没抄 ⇒ 双向都不入账。
50+
- `!` 或 `(narrowing)`:入队前核 `dogfood_battery` 钉 head、全量、红已修/已报;缺或收窄 ⇒ REWORK。
5151

5252
## 断言与收益
5353

0 commit comments

Comments
 (0)