docs(pm): batch default back to 3 on the maintainer's ruling — ceiling 5 unchanged (#18125) - #18128
Conversation
…g 5 unchanged One line in `.claude/skills/pm-dispatch/SKILL.md` 〈入口与角色〉: the `batch:<n>` table row's default moves 2 → 3 on the maintainer's ruling 「并发2 还是太慢了,默认恢复3吧」. The maintainer ceiling 5, the write-identity locks, `LOCK_DEPTH_HOLD` and the same-file serial rule are untouched; `references/core-rules.md` states no batch default, so it has no mirror line. Equal-line and byte-neutral: 812/812 lines, 73524 bytes before and after, frame block (lines 733–754) md5 unchanged. Claude-Session: https://claude.ai/code/session_01DAcomhvR9kKizeYgg89Vo8 Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewHead: ① derived judgments (seat-measured on the fetched head, ⛔ not taken from the report):
② semver: unchanged — nothing published. ③ boundary flags: the Implemented-by: Verdict: PASS — awaiting an authorized approval; ⛔ never ready / enqueue / auto-merge before it; the seat lands after. 维护者速读(终稿)按你 03:45Z 的话「并发2 还是太慢了,默认恢复3吧」:SKILL.md 那张参数表里 Generated by Claude Code |
|
Landing under ruling C — Generated by Claude Code |
Fixes #18125
Ruling
The maintainer, in the skills seat's chat at 2026-09-14T03:45Z, verbatim and untranslated: 「并发2 还是太慢了,默认恢复3吧」. It supersedes lock 3's default (PR #18072, commit
7ef05f997, 「batch默认 2」). The maintainer ceiling 5 stays. Ruling C (#17971, 「C. approve 后不管后续改动都由席位落地:」) governs the landing: this PR stays a DRAFT; the seat does the four-piece; nothing here is readied, queued, armed or approved by the dev.Change — one line
.claude/skills/pm-dispatch/SKILL.mdline 60, thebatch:Nrow of the 〈入口与角色〉 argument table:| batch:N | 同时在飞的 dev 上限 | 默认 2;N 的维护者天花板 5 || batch:N | 同时在飞的 dev 上限 | 默认 3;N 的维护者天花板 5 |(The row is quoted with
Nstanding in for the angle-bracket placeholder the file uses, so the body survives the sanitizer; the file itself is unchanged in that respect.)Equal-line and byte-neutral: 812 lines before and after (ceiling 812,
scripts/pm/check-skill-line-ratchet.mjs:320), 73524 bytes before and after, one insertion / one deletion ingit diff --stat ca7886047 06c10152b. Nothing else moves: write-identity locks 1, 2, 4, 5,LOCK_DEPTH_HOLD, the same-file serial rule and the ceiling 5 are untouched. The seats' Routine prompts are the seats' own to update on landing (card body).Premise readings (all against
origin/main=ca7886047, worktree created 2026-09-14T03:50:37Z)2;git grep -nfor the literal 默认 followed by a backticked 2, over.claude AGENTS.md CLAUDE.md, returned exactly one hit,.claude/skills/pm-dispatch/SKILL.md:60.references/core-rules.mdis 151 lines and states no batch DEFAULT.grep -n batchhits: line 11 「并行度以batch封顶,验证锁到达深度 ≥LOCK_DEPTH_HOLD(2)即等;同批按构造文件面不相交。」 (the verify-lock depth, a different number) and line 37 「插队标签可超batch立即派发,⛔ 不豁免同文件串行、深度等待与认领协议。」.grep -n 默认hits lines 7, 17, 18, 52, 77, 139, 140 — none is aboutbatch. So there is no mirror line, and core-rules.md is untouched (151/151); the card body's "core-rules mirror line likewise" is superseded by the claim comment's reading, which this grep confirms.sed -n '733,754p' SKILL.md | md5sum=3327d02c56f8a0eca88569dad2270f32. Same two readings on HEAD06c10152bafter the edit: 812 lines, md53327d02c56f8a0eca88569dad2270f32.git ls-remote --heads originlisted 1106 heads; the 6claude/issue-18xxxheads were compared tomainthrough RESTGET .../compare/main...BRANCHand all 9 open PRs through RESTGET .../pulls/N/files(page count 9, fewer than 100, so the listing is complete): zero hits onpm-dispatch/SKILL.mdorcore-rules.mdin any of them. Scope declared: open PRs plus this wave'sissue-18xxxheads; the 62 older keyword-matched heads (seat session branchespm-dispatch-*, old issue branches) were listed but not compared.Gates (run on the working tree at HEAD
06c10152b, 2026-09-14T03:55Z–04:01Z; every exit captured by redirect-then-$?)Derived with
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack(no paths; change set from the merge baseca7886047; the--repoassertion held): 16 commands — 9 matched by path, 7 whole-tree. All 16 exit 0:pnpm check:pm-skill-ratchet— exit 0 (ratchet green; widest-table-row pins and ceilings unchanged)pnpm check:skill-frame-sync— exit 0 (「the one declared copy of the decision frame is internally coherent … 74 markdown files scanned for undeclared copies」)pnpm check:pm-governed-prose— exit 0 (「2 instruction surface(s) name all 5 registered governed surfaces … and claim no others」)pnpm check:pm-skill-id-lint— exit 0 (27 files clean)pnpm check:pm-governed-merges— exit 0pnpm check:nul-bytes— exit 0 (8643 text files, no raw control bytes)node scripts/pm/check-governed-queue-guard.mjs --self-test— exit 0 (233 cases)pnpm check:agent-test-spelling— exit 0node scripts/check-closing-keyword-parity.mjsand its--self-test— exit 0 / 0node scripts/check-comment-mask-corpus.mjs— exit 0 (6747 files, 0 disagree)pnpm --filter @objectstack/lint run check:doc-formula-expressions— first run exit 3 「PREREQUISITE NOT MET —@objectstack/formulais not built」 (not a measurement); afterpnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lintunderos-verify-lock.sh(「VERDICT command-exit 0 · held the lock 167s」), rerun exit 0 (「22 record-scoped formula example(s) across 438 files … judged clean」)pnpm check:doc-authoring,pnpm check:driver-memory-census,pnpm check:refd-timer-probe,pnpm check:watch-hint-literal— exit 0 eachReconciliation (
--ranwithCOMMAND :: exit CODElines, 2026-09-14T04:01:47Z): 「✓ dispatch-gates --ran: 16 derived famil(ies) accounted for — 16 run, 0 NOT-MEASURED (a DERIVED zero — all 16 recorded an exit code and none of them is 3).」Tied family not on the derived list, run anyway:
node scripts/check-skill-frame-freshness.mjs(--self-testexit 0, scan exit 0: 「the decision frame in this tree is current with origin/main」). CI-measured only, not runnable here:check-governed-queue-guard.mjson the event payload.Lint, narrowed and declared:
eslint --no-inline-config --format json .claude/skills/pm-dispatch/SKILL.md— exit 0, 1 file, 0 errors, 1 warning 「File ignored because no matching configuration was supplied」. Population read fromeslint.config.mjs: everyfiles:block matches only**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}(six blocks;COMMENT_SWALLOW_FILESis the same glob), so a.mdfile is outside the linted population. Invariance: the config never enables type-aware linting (its own line 328: noparserOptions.project, no typed rules), so a one-line edit to an unlinted file cannot move the verdict of any linted file; the repo-widepnpm lintis CI's run.dispatch-gates --tierwas read for the claim; its model line is not reproduced here (model-free rule).Changeset
None owed. The
Check Changesetjob (.github/workflows/pr-automation.yml, jobchangeset-check) reads exactly two exemptions — theskip-changesetlabel and the changesets release PR pinned by branch and author — and no path exemption, so the label is the declaration. The diff publishes nothing:.claude/**is in no released package'sfiles[](fast-lane class per the dev definition). The label is applied with the additivePOST .../issues/N/labelsand read back; the read-back is recorded in the report comment on #18125.维护者速读(草稿)
改了什么:PM 派发技能
SKILL.md的batch参数默认值从 2 改回 3;上限 5 不变;只此一行。为什么改:维护者裁决「并发2 还是太慢了,默认恢复3吧」;lock 3 落地的默认 2 由此被取代。
core-rules.md本就没写默认值,故无需同改。风险与代价(含回滚):并发默认回到 3 意味着同一时刻多一个 dev 在飞,共享容器的验证锁排队会略长;其余四把写身份锁、验证锁深度等待、同文件串行规则均不动。回滚 = 把该行的
3改回2,一行、零副作用。席位意见:(留空,席位定稿成评论)
你要做的:确认后由授权账号 approve,席位按裁决 C 落地;各席位自行更新自己的 Routine 提示词。
Acceptance notes
check:doc-formula-expressionsrun exited 3 on a fresh worktree because@objectstack/formulaand@objectstack/lintare not built bypnpm install; the gate's own text says so and prescribes the build. Behaviour by design (Absence must be loud), not a defect. 承接者:无.Generated by Claude Code