Skip to content

docs(pm-skill,checklist-test): the --tier instruction lines carry --repo so a not-yet-written path derives a tier - #18463

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-18425-tier-lines-carry-repo-flag
Sep 16, 2026
Merged

os-zhuang merged 1 commit into
mainfrom
claude/issue-18425-tier-lines-carry-repo-flag

Conversation

@os-elon-musk

Copy link
Copy Markdown
Collaborator

Fixes #18425

Clause-②: no

维护者速读(草稿)

改了什么:两处 agent 指令行里的命令拼写,从 node scripts/pm/dispatch-gates.mjs --tier PATHS 改为 node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --tier PATHS(占位符在文件里是尖括号拼写,本正文为避开 GitHub sanitizer 写作 PATHS)。只动这两行 —— checklist-test 侧是同一条 bullet 内的两行重新折行 —— 两个文件的行数不变:pm-dispatch SKILL.md 812 / 812,checklist-test SKILL.md 234 / 238。

为什么改:dispatch-gates.mjs 对树上不存在的路径,在没有 --repo 申报时以 exit 3(NOT MEASURED)拒绝 —— 这是 PR #18409 的有意设计,不是本卡的缺陷。PM 认领一张文件面尚未写出的卡(新 reference、新脚本)时照抄这两行,得到 exit 3、拿不到档位。改后的拼写照抄即 exit 0(下方 A7 读数)。

风险与代价(含回滚):纯文案,不发布任何东西,不改脚本。代价一处:pm-dispatch SKILL.md 该行 120 B 预算容不下 +34 B —— 命令 85 B + 「引当次 … 输出」15 B + 「⛔ 不凭记忆」16 B + bullet 前缀与两个空格 4 B = 恰 120 B,所以主语「Container & model 行的档位」与逗号被删;保留「档位」的最短写法是 125 B,超预算。派发裁决禁止动该文件其它任何一行,所以「别处删一行换一行」不在本 PR 的选项内。回滚 = revert 这一个 commit。

席位意见:(留空)

你要做的(一个动作):接受去掉主语的写法则给一个 authorized APPROVED;若要保留「档位」,请裁定允许在 SKILL.md 别处删一行来换这条 bullet 的第二行,本 PR 再补一轮。

What changed — each line before / after, in bytes

Byte counts are of the file's spelling, where the placeholder is written in angle brackets (7 B); this body writes it PATHS because the GitHub body sanitizer eats angle-bracket fragments even inside backticks.

.claude/skills/pm-dispatch/SKILL.md :477 — file 812 / 812 (ceiling), MAX_LINE_BYTES 120, no line added:

  • before, 120 B: 「- Container & model 行的档位引当次 node scripts/pm/dispatch-gates.mjs --tier PATHS 输出,⛔ 不凭记忆。」
  • after, 120 B: 「- 引当次 node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --tier PATHS 输出⛔ 不凭记忆」

.claude/skills/checklist-test/SKILL.md :98–:99 — file 234 / 238, the same bullet re-wrapped across its existing two lines, no line added, the floor / default / ceiling parenthetical untouched:

  • before :98, 88 B: 「 node scripts/pm/dispatch-gates.mjs --tier PATHS 的输出、⛔ 不凭记忆(floor」
  • before :99, 90 B: 「 sonnet · default opus · ceiling fable);每个给:该项 JSON、RUNNER.md、dogfood 技」
  • after :98, 100 B: 「 node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --tier PATHS 的输出、」
  • after :99, 113 B: 「 ⛔ 不凭记忆(floor sonnet · default opus · ceiling fable);每个给:该项 JSON、RUNNER.md、dogfood 技」

Judgment call on the SKILL.md line (for the reviewer)

The dispatch named three load-bearing pieces — the exact command spelling with --repo objectstack-ai/objectstack --tier PATHS, 「引当次 … 输出」 (quote THIS run's output) and 「⛔ 不凭记忆」 — and a 120 B gate. Those three plus the bullet prefix and two separating spaces measure exactly 120 B, so nothing else fits on the line: the subject prefix 「Container & model 行的档位」 and the comma are gone. The dispatch's own shortest candidate (「- 档位引当次 … 输出,⛔ 不凭记忆。」) measures 130 B; the shortest wording that keeps 「档位」 at all (「- 档位引当次 … 输出⛔不凭记忆」) measures 125 B. The bullet still sits in the claim-comment list and --tier names the tier itself; the claim template line (:808, untouched) keeps 「档位,引当次 --tier 输出」 as the subject. Typography note: a CJK glyph directly before ⛔ (「输出⛔ 不凭记忆」) has zero precedent on origin/main SKILL.md; the exact phrase 「⛔ 不凭记忆」 is preserved so a grep for it still hits this line.

Self-verification of the instruction (dispatch A7)

The command was extracted verbatim from between the backticks of SKILL.md :477 (sed, not retyped), the placeholder substituted with packages/this-repo-has-no-such-package/src/index.ts (absent from the tree, ls confirms), and run from the worktree; exit codes captured before any pipe:

  • new spelling → exit 0; output: 「Model tier — no path-derived mandate: the surface hits none of the 3 declared glob(s), derived here, not recalled. The tier stays the PM's per-card judgment call (floor sonnet · default opus · ceiling fable).」
  • control, bare spelling extracted the same way from origin/main :477 → exit 3 (NOT MEASURED); output names the two --repo readings.
  • the spelling extracted the same way from checklist-test :98 is byte-identical to the SKILL.md one.

Gates

Derived from the merge base with node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands (17 commands, merge base e915c190), each run in the foreground with the exit code redirected before any pipe, then reconciled with --ran at 7a7f3c22: 「Run reconciliation — 17 derived, 17 run, 0 NOT-MEASURED, 0 UNRUN.」 (exit 0).

command exit
pnpm check:pm-skill-ratchet (rerun on the committed head 7a7f3c22) 0 — 「pm-dispatch/SKILL.md is 812 lines (ceiling 812; headroom 0)」 · 「checklist-test/SKILL.md is 234 lines (ceiling 238; headroom 4)」
pnpm check:pm-skill-id-lint 0 — 27 file(s) clean
pnpm check:skill-frame-sync 0
pnpm check:pm-governed-prose 0
pnpm check:pm-half-states 0 — 4356 self-test cases
pnpm check:nul-bytes 0 — 8733 text files, no raw control bytes
pnpm --filter @objectstack/lint run check:doc-formula-expressions 0 — first run exit 3 PREREQUISITE NOT MET (@objectstack/formula and @objectstack/lint unbuilt); built both under the verify lock (VERDICT command-exit 0, 171 s), rerun → 0
pnpm check:agent-test-spelling · pnpm check:doc-authoring · pnpm check:driver-memory-census · pnpm check:pm-governed-merges · pnpm check:refd-timer-probe · pnpm check:watch-hint-literal 0 each
node scripts/check-closing-keyword-parity.mjs (and --self-test) · node scripts/check-comment-mask-corpus.mjs · node scripts/pm/check-governed-queue-guard.mjs --self-test 0 each

No package is touched, so there is no ① dependency-closure build and no ② package test; the control-character self-scan (grep -naP over the two files) is clean.

Changeset

None; label skip-changeset. AGENTS.md Post-Task Checklist step 3: 「that label is for a diff that publishes nothing from any released package」. .claude/** is in no package's files[] and is os-dev's declared fast lane for exactly this reason; nothing released moves.

Acceptance notes

  • Rules layer (.claude/skills/**): draft PR; the dev never flips ready, never arms auto-merge, never requests review. Landing waits for an authorized APPROVED and the owning seat.
  • scripts/pm/dispatch-gates.mjs is deliberately untouched — its exit-3 refusal is the design landed in PR fix(pm): dispatch-gates refuses an absent path unless --repo asserts whose tree it is #18409, not the defect.
  • Out of scope, not edited (dispatch A3): pm-dispatch SKILL.md :637 (a review heuristic) and :808 (the claim template, 引当次 --tier 输出 — not a command spelling); references/contract-review.md :17; references/lanes/skills.md :20; references/platform-readings.md :391 「dispatch-gates.mjs --tier PATH 逐路径现推」 — a mechanism reference without node scripts/pm/, so not a verbatim-copyable command; noted, not filed. Bearer: whichever skills-seat PR next edits platform-readings.md.
  • The dispatch's suggested route (drop 「Container & model 」, keep 「档位引当次 … 输出,⛔ 不凭记忆」) was measured at 130 B and falsified; the arithmetic above is the replacement.

Generated by Claude Code

…epo so a not-yet-written path derives a tier

dispatch-gates.mjs refuses a path absent from the tree unless --repo asserts
whose tree it is (exit 3, NOT MEASURED). Two agent-facing instruction lines
still spelled the bare `--tier <paths>` form, so a PM claiming a card whose
file surface is not written yet got exit 3 and no tier from the prescribed
spelling. Both lines now spell
`node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --tier <paths>`.

pm-dispatch/SKILL.md sits at its 812-line ceiling with 120 bytes per line, so
the claim-comment tier line is re-keyed in place: the 85-byte command plus
「引当次 … 输出」 and 「⛔ 不凭记忆」 fill the budget exactly, and the subject
prefix 「Container & model 行的档位」 is dropped. checklist-test/SKILL.md
re-wraps the same bullet across its existing two lines; no line is added to
either file.

Claude-Session: https://claude.ai/code/session_01HPfcjvF23QBoBj7P47DDxs
Co-authored-by: Claude <noreply@anthropic.com>

Copy link
Copy Markdown
Collaborator Author

维护者速读(终稿)

skills 席,session_01HPfcjvF23QBoBj7P47DDxs,2026-09-16T13:04Z。席内复核 ACCEPT 记录在卡 #18425。受管规则层(.claude/skills/**)⇒ 等一位授权批准账号 APPROVED 后由本席按裁决 C 落地;在此之前保持 draft。

改了什么
两条让代理照抄的命令行——pm-dispatch SKILL.md 认领评论规则里的档位行,和 checklist-test SKILL.md 派 runner 时的档位行——从 dispatch-gates.mjs --tier PATHS 改成 dispatch-gates.mjs --repo objectstack-ai/objectstack --tier PATHS。只动这两处;两个文件行数不变,每改行 ≤ 120 B。

为什么改
PR #18409 落地后,dispatch-gates.mjs 对树上还不存在的路径、且没申报 --repo 时以 exit 3 拒绝(有意设计,防止对别的仓的路径推档)。于是 PM 认领一张要新建文件的卡时,照抄原行拿不到档位。改后的拼写席位亲自照抄验证:不存在的路径 ⇒ exit 0 给出档位;旧拼写 ⇒ exit 3(对照)。

风险与代价(含回滚)
纯文案,不发布任何包、不改脚本;回滚 = revert 一个 squash 提交。代价一处:SKILL.md 那行原本 120 B 满格,加 34 B 的 --repo 只能删字——保留精确命令、「引当次…输出」、「⛔ 不凭记忆」三件后恰好 120 B,主语「Container & model 行的档位」与逗号被删。席位判断可接受:该行处于「认领评论」规则块内,模板行 :808 仍写着 model: <档位,引当次 --tier 输出>,归属没有丢。

席位意见
建议按现状批准。若你更愿意保留主语,唯一代价是在 SKILL.md 别处删一行给这条 bullet 换第二行——那是一次新的裁决(派发令禁止本 PR 动其它行),批准前说一句即可,本席另开一轮。

你要做的
一个动作:在本 PR 上 Approve。


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation needs-user-decision size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

3 participants