Repository navigation
docs(agents): name the missing tool, not an absent sibling scripts/pm/ - #17375
Conversation
The gate-derivation rules in `.claude/agents/os-dev.md` stated that sibling repos have no `scripts/pm/`. Measured on objectui `origin/main` (`a646262`): `scripts/pm/check-half-states.mjs` is there, with a live standing caller (`.github/workflows/half-state-patrol.yml`); only `dispatch-gates.mjs` is absent (control, same tree, same channel). The operative half is unchanged — a sibling without `dispatch-gates.mjs` still derives its gate families by hand from its own `package.json` and `.github/workflows/`. Rewritten in place, net-zero (403 lines before and after), 71 -> 114 bytes, under the 120-byte line cap. The sentence no longer claims anything about cloud, which is attached to no seat here and was never measured. Claude-Session: https://claude.ai/code/session_01YKEjmbYNvYWJvWGSWx26zK Co-authored-by: Claude <noreply@anthropic.com>
维护者速读改了什么 —— 为什么改 —— 原句是错的:objectui 的 风险与代价(含回滚) —— 极低:一行操作性文本,无代码、无发布面、无 changeset;派生的 17 个门禁族在 dev 本地全绿,ratchet 403/403 未抬。PR 的三个 CI job 在本席复核时(10:0xZ)仍在跑,人合前会收敛,本席下次巡检复读。代价:这句话对 cloud 不再表态——把未实测的断言换成沉默,不是丢信息。回滚 = revert 一个单行提交。 席位意见 —— 通过。本席在契约复审档对照 diff 自读,并在本容器的 objectui 检出上复测( 你要做的 —— 一个动作:人工合并本 draft PR。 skills 席,session Generated by Claude Code |
Fixes #17244
One sentence in
.claude/agents/os-dev.md— in the 本地验证范围 gate-derivation rules — stated that sibling repos have noscripts/pm/. objectui has one. The sentence is rewritten in place, net-zero, to name the missing tool instead of an absent directory, and to claim nothing about cloud.The line
Before (71 bytes):
After (114 bytes; the corpus line cap is 120):
✓ check-skill-line-ratchet: .claude/agents/os-dev.md is 403 lines (ceiling 403; headroom 0).— no ceiling raise, headroom was and is zero.package.jsonand.github/workflows/. What changes is only the premise the reader carries into them.;and:in CJK prose, fullwidth 。), and the line carries no control bytes:grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]'over the file returns no hits,pnpm check:nul-bytesexit 0.The measurement, re-verified at this branch tip
objectui
origin/mainisa646262; the shared objectui checkout at/home/user/objectuiwas read, never edited.The control is the third command: the same reader, the same tree, the same channel, answering absent for a path that genuinely is not there — so the first command's answer is a reading and not a channel artefact.
In-repo corroboration, independent of the card —
scripts/pm/check-half-states.mjsalready carries this comment:The sweeper's own source and this measurement agree; only the dev-agent text disagreed.
Gates
Derived on the real diff with
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack(the tool takes its change set from the merge base itself). 17 derived families, 17 run, 0 UNRUN, 0 NOT-MEASURED — reconciled with--ran, exit codes recorded per line and captured before any pipe:✓ dispatch-gates --ran: 17 derived famil(ies) accounted for — 17 run, 0 NOT-MEASURED (a DERIVED zero — all 17 recorded an exit code and none of them is 3).node scripts/check-closing-keyword-parity.mjs(and--self-test)node scripts/check-comment-mask-corpus.mjsnode scripts/pm/check-governed-queue-guard.mjs --self-testpnpm --filter @objectstack/lint run check:doc-formula-expressionspnpm check:agent-model-declaredpnpm check:agent-test-spellingpnpm check:doc-authoringpnpm check:driver-memory-censuspnpm check:nul-bytespnpm check:partof-closing-keywordpnpm check:pm-governed-mergespnpm check:pm-skill-id-lintpnpm check:pm-skill-ratchetpnpm check:refd-timer-probepnpm check:skill-frame-syncpnpm check:watch-hint-literalcheck:pm-governed-prosewas run beyond the derived set (exit 0); the derivation scores it silent because its population is a tracked roster, not this path.check:doc-formula-expressionsfirst refused withPREREQUISITE NOT MET(exit 3, explicitly not a finding) until@objectstack/formulaand@objectstack/lintwere built — that build ran throughscripts/pm/os-verify-lock.sh(VERDICT command-exit 0 · held the lock 170s · waited 0s) and the gate then exited 0.Repo-wide scans (
pnpm lintand the wide-population families the derivation names) are CI's run, not this card's.Acceptance notes
姊妹仓is now used in this file without an in-file enumeration of which repos it covers (it was enumerated only inside the false half). Not a gap — AGENTS.md Prime Directive Migrate documentation site to Fumadocs with monorepo structure and shared content #11 defines the term repo-wide, naming objectui and cloud. Carrier: the skills lane's next os-dev.md edit, if it ever wants the term localised; nobody owes it today.git grep -n '姊妹仓' -- .claude/agents/os-dev.mdhits exactly two lines — the worktree-per-repo rule and this one. One rewrite closes the whole claim.scripts/pm/claims under.claude/skills/pm-dispatch/are about this repo's tree or about the derivation answering only its own tree (references/platform-readings.md,references/true-green.md), andreferences/lanes/hotcrm.md's sibling-repo patrol-carrier clause is consistent with the corrected sentence. Nothing was edited outside the declared surface.skip-changesetis measured, not assumed:.claude/**is on the fast track — nothing under it is published by any package'sfiles[], so this diff moves nothing that ships.维护者速读(草稿)
改了什么 —
.claude/agents/os-dev.md里的一句话,原地改写、行数不变(403 → 403)。原句说「姊妹仓(objectui / cloud)没有scripts/pm/」,改成「姊妹仓未必有scripts/pm/dispatch-gates.mjs:objectui 只有check-half-states.mjs」。全 PR 只动这一行。为什么改 — 原句是错的,不是过时:objectui 的
main上确实有scripts/pm/,里面躺着check-half-states.mjs,还挂着一个每天跑四次的half-state-patrol.yml。缺的只是dispatch-gates.mjs这一个工具。开发 agent 读到「没有scripts/pm/」,就会带着一个自信的「没有」去做判断——而这一班里已经有一次派发词把同样的前提写进了受管文件的草稿,差一行就被版本化进.claude/。改法是点名缺的那个工具,而不是宣称目录不存在;同时把没人实测过的 cloud 从这句话里摘出去(本容器没有 cloud 的座位,不实测就不表态)。真正的操作指令没动:姊妹仓没有dispatch-gates.mjs,门禁族仍然从该仓自己的package.json与.github/workflows/手推。风险与代价(含回滚) — 风险极低:纯操作性文本一行,无代码、无发布面、无 changeset。代价是这句话现在对 cloud 不再表态,想知道 cloud 有没有
scripts/pm/的人得自己去测——这是把未实测的断言换成沉默,不是信息丢失。回滚成本一个 revert:单文件单行,行数与 ratchet 天花板都不动(403/403,headroom 0,未抬上限)。席位意见 — (留空,待复核席填写)
你要做的 — 人工合并本 draft PR(
.claude/**属受管面,只能由维护者手动合并;没有别的动作)。Generated by Claude Code