Repository navigation
pm-dispatch: the spec floor rides its first consumer's PR; bump cards read the hold index - #24315
Conversation
… hold index Two maintainer-ordered rules, each paid in its own file at net zero lines: - dispatch-runbook.md (dispatch-order composition, beside the file-surface lines): a card whose code first reads a key, type member or runtime behaviour that spec release R first publishes raises the consuming package's @objectstack/spec floor to R in the same PR, and its file surface names the manifest and the lockfile specifier; "no pin bump" bans only the lockfile resolution and the .objectui-sha / console pin move, never the floor. Paid by deleting two os-dev duties the section says it does not restate (stated in execution-duties.md and os-dev.md) and folding a restated silent-skip ban into its conclusion line. - triage-duties.md (beside the bump-card cap): a bump card's waiting-card list is read from the hold index (every open card whose Restart-when: or Blocked-by: line names that release, version or upstream commit), with the query and hit count in the body. Paid by folding two clauses restated in filing-gate.md and cross-repo-coordination.md. Claude-Session: https://claude.ai/code/session_01V1upgJbYCZ5xed9pEQF4Tz Co-authored-by: Claude <noreply@anthropic.com>
…ec-floor-rider-hold-index
Contract reviewServed-tier: Face: governed rules text ( ① Derived judgments
② Semver levelNo published package is touched; ③ Boundary flags
Implemented-by: VERDICT: PASS Generated by Claude Code |
维护者速读(终稿)改了什么:PM 技能的两份参考文件各加一条规则,行数不变。A( 为什么改:您在 objectui 席会话里的原话「下限提到 next.3我记得之前有一个升级任务,为什么没升级完整,以后如何避免。」与「立卡吧,A 和 B 都要」。next.3 那次两处漏:用上 next.3 类型的 PR 被「不动 pin」挡住没抬下限;bump 单凭记忆漏了一张等 next.3 的卡。 风险与代价(含回滚):只改席位读的协议文本,不碰代码、门禁、发布物;两文件都在棘轮天花板,新增 5 行由同文件删掉 5 行别处已写明的重复句付账,每处删除与存活位置列在 PR 正文表里,席位逐条在 席位意见:ACCEPT,席内达档复核 PASS(见上一条评论)。一点需知:您在 objectui#12955 裁 B(objectui 按 commit 消费 你要做的:无需操作。Tier S,本席经中继 ready + auto-merge 入队。 席位核对ACCEPT — PR #24315, head
Generated by Claude Code |
Fixes #24276
Clause-②: no
Two maintainer-ordered rules land in
.claude/skills/pm-dispatch/references/**. Each is paid for in its own file, so the net line change is zero per file. There is no new gate, no ceiling raise, noCROSS_FILE_MOVESentry and no edit toscripts/pm/check-skill-line-ratchet.mjs. The PR stays a draft. This is Tier S: the seat lands it after its in-seat contract review.The maintainer's words, verbatim from the card: 「下限提到 next.3」, then 「下限提到 next.3我记得之前有一个升级任务,为什么没升级完整,以后如何避免。」, then 「立卡吧,A 和 B 都要」.
What lands
A:
dispatch-runbook.md〈派发词构造细则〉, right after the file-surface linesHow the lines map to the ruling text:
@objectstack/specfloor to R in the same PR" is line 2, first clause..objectui-sha/ console pin move — ⛔ it never bans the floor" is line 3.specifier:line, and line 2 tells the claim to name that line. If line 3 said only "lockfile", the two lines would seem to contradict each other. This is the distinction the ruling already draws, not a new one.B:
triage-duties.md, right after the bump-card cap (bump 单单张封顶)The second line is the ruling's own definition of the hold index ("every open card whose
Restart-when:orBlocked-by:line names that release, version or upstream commit"). The first line carries the rest: "read from" the index, "the query and its hit count go in the card body", and "⛔ a list written from memory is not that list".Where each rule sits, and why
A goes in the runbook, not beside
cross-repo-coordination.mdL33. I measured both placements against the 120-byte cap.cross-repo-coordination.mdis read at routing and at cross-repo claim or transfer time. The runbook section is read while an order is composed:execution-duties.md〈派发〉 sends the composer there for 构造细则与条款原文.cross-repo-coordination.md(51/51) had the fewest payable lines of the candidates.B goes in
triage-duties.md. The per-next.Nconsumer bump card is filed by the triage seat. The incident's own card (objectstack-ai/objectui#12873) says "Filed by the triage seat" in its first paragraph. Sotriage-duties.mdis the file that card's writer reads, and B sits beside the bump-card cap as the rule for every bump card's held-card list.Payment ledger: every removed or merged clause, and where it survives
All line numbers are at base
21070a2.dispatch-runbook.mdexecution-duties.mdL133 「点名单是线索不是规格,dev 对实际改动重取补跑」. That file is read by the same composing seat on every fire. The dev side is inos-dev.md〈本地验证范围〉: derive with no paths, and the script takes the change set from the merge base. This is a dev duty restated in a section whose first line (L188) says dev duties are single-sourced in the os-dev definition and ⛔ not restated.dispatch-runbook.mdexecution-duties.mdL142 「编译面清单逐面申报,⛔ 静默略过」. The failure-mode text stays in the merged line: 评审把没提到的面读作漏掉.dispatch-runbook.mdos-dev.mdL355 「派发词标只读读数 ⇒ 不建闭包、不跑测试、不开 PR;报status: "reading",读数贴决策卡」, which is the dev's own binding text. 「或立卡」 survives asos-dev.mdL63 (three-class findings go into the report and the seat files them). This is a second os-dev duty restated under L188. The PM-side line it followed (L234, the measurement-first dispatch choice) stays.triage-duties.mdfiling-gate.mdL17 「② 只有维护者能做的决定,落卡即带「维护者速读」与四棱块」. The triage seat reads that file at filing time (triage-duties.mdL41 points there). The inbox backfill is L52 (决策箱勤务:入箱校验/补全四棱块、速读). Kept in the merged line: 速读 sits above the block (其上的 → 居四棱块之上), 同题, business language, and the one-word closing question.triage-duties.mdcross-repo-coordination.mdL37 「分诊座位唯一生产:定级/路由/type/查重/shadow/duplicate_of」 and L7 (中央分诊是domain:*/type/定级的唯一生产者). Both are read by the triage seat before routing on every fire. The mandatory-output sense survives as 新卡即时打. Kept: 立单者可预填、分诊校正, 新卡即时打, 存量卡 ⛔ 不回填、下次碰到补.No payment is a re-wrap. Each one deletes bytes that are stated elsewhere. Three are whole-line deletions; two are folds that drop a restated clause. Moving whitespace pays for nothing here.
line_budget
references/dispatch-runbook.mdreferences/triage-duties.mdEvery touched line is ≤ 120 bytes. The widest is 120 B, on the folded
typeline.Worked example for B (an example only, not rule text)
The triage seat's reading on the card (comment 6248125841) names three objectui cards that wait on the next release: objectstack-ai/objectui#12932, objectstack-ai/objectui#12929 and objectstack-ai/objectui#12484. Each is
pm:blocked. I read each card on its own through REST on 2026-10-18 at about 11:05Z. Each body carries a line-anchoredBlocked-by: objectstack-ai/objectstack#24168, the Version Packages PR that publishesnext.4, plus the upstream commit the card waits for (586705d85d,1e001c7df,e15897c0f1).So the next objectui consumer bump card should get its held-card list from one query over objectui's open cards. That query matches
Restart-when:/Blocked-by:lines that namenext.4,objectstack-ai/objectstack#24168or one of those commits. Today it should find at least these three. The bump card's body records that query and its hit count. I did not run the enumeration myself, because the os-dev definition keeps the dev off open-issue scans. The bump-card writer runs it.Verification (at head
6cfc7839, after the merge oforigin/main0b44840d)The change set is 2 paths, +8/−8.
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderives 19 commands, the same 19 the seat derived. I ran all 19 locally. I also ranpnpm check:pm-settings-deny-roster, which the derivation flags because its roster lives under.claude, and the local-onlypnpm check:skill-frame-freshness. Each exit code was captured before any pipe.--ranreconciles 19 derived / 19 run / 0 NOT-MEASURED / 0 UNRUN.pnpm --filter @objectstack/lint run check:doc-formula-expressionsfirst exited 3 (PREREQUISITE NOT MET:@objectstack/formulaand@objectstack/lintwere not built). I built that closure underscripts/pm/os-verify-lock.sh(VERDICT command-exit 0) and re-ran the gate. After the merge I rebuilt the closure again.origin/mainmoved once more while the gates ran, to52ff308b(a REST route refactor). That commit touchesscripts/check-route-envelope.mjsand onescripts/adr-anchors/file, which are none of this card's 19 families and no path under.claude/**. I did not merge it again; the merge queue rebuilds onto the currentmain.The families CI runs (Lint & Repo Gates, TypeScript Type Check, Test Core, Build Core, Governed Surface Queue Guard and the rest) are left to this PR's check-runs. I did not re-run them locally. No package is touched, so there is no build closure, package test or typecheck to owe.
Acceptance notes
triage-duties.mdnames the console bump card and the cloud.objectstack-shabump card as cases, but not the per-next.Nobjectui consumer bump card that the triage seat files by standing practice. B is written to cover every bump card, so it covers that card too. This is an observation, not a defect, a contract violation or a metadata trap, so it is not filed. Carrier: none (承接者:无).cross-repo-coordination.mdL33 (⛔ pin bump 不做 rider) andlanes/ui.mdL20 (console pin bump 不做 rider) still read as before. A's boundary sits where the order is composed, not beside them (see placement above).维护者速读(草稿)
改了什么:PM 技能参考文件新增两条规则。A:哪张卡的代码第一次用到 spec 某个新版本才有的东西,就在同一个 PR 里把该包对
@objectstack/spec的版本下限抬到那个版本;派发令里的「不动 pin」只管 lockfile 解析版本和 console pin,不管下限。B:每张版本 bump 单列「等这个版本的卡」时,必须按Restart-when:/Blocked-by:行查出来,并把查询和命中数写进正文,不许凭记忆列。为什么改:next.3 那次,一张卡已经用上 next.3 才有的类型,包的下限却还停在 next.2(派发令写了「不动 pin」,把抬下限也挡在外面);同时 bump 单凭记忆列等待卡,漏了一张正在等 next.3 的卡。这两条规则把这两个漏洞都补上。
风险与代价(含回滚):只改给 PM 席位读的规则文本,不碰代码、门禁和发布物;两个文件行数都不增加,新增内容靠删掉别处已写明的重复句子付账,每一处删除及其存活位置都列在正文的表里。回滚即 revert 本 PR。
席位意见:
你要做的:无需操作。席位复核 PASS 后由席位入队落地(Tier S)。
Generated by Claude Code