Skip to content

docs(pm-dispatch): retire rule A — the spec floor follows the commit pin since objectstack-ai/objectui#12958 - #24742

Merged
objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/issue-24730-retire-spec-floor-rule-a
Oct 20, 2026
Merged

objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/issue-24730-retire-spec-floor-rule-a

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #24730
Clause-②: no

Retires rule A of the dispatch runbook: the three lines under 〈派发词构造细则〉 that told a dispatching seat to make the first consumer of a new @objectstack/spec release raise that package's manifest floor in the same PR. The rule's subject ended with objectstack-ai/objectui#12958, which made objectui compute its @objectstack/* floors from the commit pin at publish. Triage shape (comment 6282324835): one Tier S text PR that deletes the three lines.

The change

One file, .claude/skills/pm-dispatch/references/dispatch-runbook.md, three whole lines deleted, nothing added. The deleted lines, verbatim:

- 卡的代码首读 spec 发布 R 首发的键、类型成员或运行时行为,即 R 的首个消费者:
- 同 PR 把消费包 `@objectstack/spec` 下限抬到 R,认领文件面点名 manifest 与 lockfile specifier。
- 「不动 pin」只禁 lockfile 解析版本与 `.objectui-sha`/console pin 的移动,⛔ 永不禁下限。
  • Line budget: 241 → 238 lines against the file's ceiling of 241. The deleted lines are 106 / 113 / 110 bytes, newline excluded. Nothing is added, so the 120-byte line cap is not engaged.
  • The CEILINGS row in scripts/pm/check-skill-line-ratchet.mjs stays at 241. That is the card's default: the 3 lines of headroom are left for later ordinary edits to this file.
  • Rule B (triage-duties.md lines 30–31, the bump card's wait list read from the hold index) is not in the diff.
  • What the edit leaves next to each other: the new line 210 「跨包常等于跨车道,PM 事后补跨座位声明。」 ends the file-surface block (lines 208–210). The new line 211 「模型标识只禁内容工件:…」 starts the model-identifier pair. Neither line depends on the other, so no separator line is added.

Why: the premise and its ruling source

Premise re-checks (the card's 〈Premises〉, each run before the edit)

  1. objectui computes floors at publish: HOLDS. Read on objectui origin/main 4b6774649, fetched in this run, with git show origin/main:package.json | grep changeset:publish. The line reads "changeset:publish": "node scripts/objectstack-floor.mjs && node scripts/check-published-dist-tooling.mjs && node scripts/check-spec-range-floors.mjs && changeset publish", and so starts with node scripts/objectstack-floor.mjs &&. Ancestry: git merge-base --is-ancestor 4484a1104 origin/main exits 0, which proves itself even on a shallow checkout.
  2. The objectui card has a merged PR: HOLDS. GET /repos/objectstack-ai/objectui/pulls/13024 returns merged: true, merge_commit_sha 4484a11041f336b96e545e73277ac61a425c7c74 and merged_at 2026-10-19T06:37:07Z. The issue read of tooling: objectui's publish computes each @objectstack/* floor from .objectstack-sha — the first published release that contains the pinned commit — and stops when none does (ruling B on objectui#12955, step 2) objectui#12958 returns state_reason completed.
  3. The three lines exist only at 211–213: HOLDS. Read on objectstack origin/main 7e7e605de, this branch's base; the dispatch had read 9b2953d62. grep -rnE '永不禁下限|首个消费者|下限抬到' --exclude-dir=node_modules --exclude-dir=.git . gives 3 hits, all dispatch-runbook.md:211–213. After the edit, grep -cE on the file with the same pattern gives 0. Control: grep -c '派发词构造细则' on the same file gives 1.
  4. Rule B stays untouched: HOLDS. grep -n 'hold 索引' .claude/skills/pm-dispatch/references/triage-duties.md hits lines 30 and 31, and that file is not in the diff.

Also checked: no file cites a line number inside dispatch-runbook.md, so the 3-line shift leaves nothing stale. git grep -nE 'dispatch-runbook(\.md)?[:#L ]+[0-9]{3}' finds 0 hits. The tree grep in premise 3 also shows that no test corpus pins the deleted text.

Gates

17 commands derived by node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack at HEAD 3969b2c3c, the final commit. This is the same list the dispatch derived at 9b2953d62. Every command ran at that head, and each exit code was captured before any pipe:

node scripts/check-closing-keyword-parity.mjs :: exit 0
node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0
node scripts/check-comment-mask-corpus.mjs :: exit 0
node scripts/pm/check-harness-current.mjs --self-test :: exit 0
pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0
pnpm check:agent-test-spelling :: exit 0
pnpm check:cross-package-test-inputs :: exit 0
pnpm check:doc-authoring :: exit 0
pnpm check:driver-memory-census :: exit 0
pnpm check:gitlink-declared :: exit 0
pnpm check:nul-bytes :: exit 0
pnpm check:pm-governed-merges :: exit 0
pnpm check:pm-skill-id-lint :: exit 0
pnpm check:pm-skill-ratchet :: exit 0
pnpm check:refd-timer-probe :: exit 0
pnpm check:skill-frame-sync :: exit 0
pnpm check:watch-hint-literal :: exit 0
  • Ratchet line for this file: ✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/dispatch-runbook.md is 238 lines (ceiling 241; headroom 3).
  • check:doc-formula-expressions first answered exit 3 (PREREQUISITE NOT MET: the @objectstack/formula and @objectstack/lint dist were not built). That is not a measurement. Both packages were then built under the verify lock (VERDICT command-exit 0), and the re-run answered exit 0.
  • --ran reconciliation: ✓ 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).
  • Not run locally:
    • No package is touched, so there is no build closure and no package test or typecheck to run.
    • check:dev-prereqs and check:skill-frame-freshness are not owed: the diff touches neither packages/spec nor the four-axis frame file.
    • No ablation: this is a text deletion and no tested behaviour changes.
    • The CI families are read from this PR's check-runs.
  • No changeset: .claude/** publishes nothing, so skip-changeset is declared on create.

Acceptance notes

  • No out-of-scope findings.
  • origin/main moved from 9b2953d62 (the dispatch's read) to 7e7e605de (this branch's base) between the two reads. The target file did not change between them: line numbers, byte counts and the tree grep are identical.

维护者速读(草稿)

改了什么

  • 删掉派发运行细则里「规则 A」的三行,只删不加。
  • 这条规则原本要求:当一张卡的代码最先读到 spec 新版本首发的键时,同一个 PR 必须把消费包的 @objectstack/spec 版本下限一起抬上去。
  • 规则 B(bump 单的等待卡清单)保持不动。

为什么改

风险与代价(含回滚)

  • 风险很低:纯文本删除,不涉及任何代码或发布物。
  • 文件从 241 行降到 238 行,上限 241 保持不变。
  • 回滚:日后如果出现手写版本区间的新消费者,revert 这一个 commit 即可还原。

席位意见

你要做的

  • 无需操作。本 PR 属于 Tier S,由席位在达档复核 PASS 且全部检查转绿后落地。
  • 这段给你知情,你也可以在此期间否决。

Generated by Claude Code

…pin since objectstack-ai/objectui#12958

The ending of rule A is objectstack-ai/objectui#12958: objectui's publish
step now computes every @objectstack/* floor from .objectstack-sha
(scripts/objectstack-floor.mjs runs first in changeset:publish), so a first
consumer has no manifest floor left to raise by hand. The three dispatch-runbook
lines that ordered that raise are deleted; rule B in triage-duties.md is
untouched.

Claude-Session: https://claude.ai/code/session_01HEdP5tPhqQfzwRmKDxwn85
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 20, 2026
@github-actions github-actions Bot added size/xs documentation Improvements or additions to documentation labels Oct 20, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Rendered 2026-10-20T04:03Z · isolated review, read-only · PR #24742 · card #24730

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 3969b2c3c30e8d539fb0e2581e67fd7761219fad
Local-runs: none
Scope: .claude/skills/pm-dispatch/references/dispatch-runbook.md + .claude/skills/pm-dispatch/references/triage-duties.md, .claude/skills/pm-dispatch/SKILL.md, .claude/skills/pm-dispatch/references/lanes/hotcrm.md, scripts/pm/check-skill-line-ratchet.mjs, packages/create-objectstack/src/templates/blank/package.json, and on objectui origin/main 4b6774649: package.json, scripts/objectstack-floor.mjs, scripts/check-spec-range-floors.mjs

Inputs: card #24730 body and its four comments (triage 6282324835, claim 6282676166, dispatch order 6282763977 read only to confirm the claim's branch, os-dev-report 6282957585); PR #24742 body, file list and the net diff against main (three-dot against merge-base 7e7e605de); the 38 check-runs on the head; the cited places read at the refs named. Everything below is my own reading, not the dispatching seat's.

① Derived judgments

  1. The diff is one file, three whole lines deleted, nothing added — right. .claude/skills/pm-dispatch/references/dispatch-runbook.md 241 → 238 lines; the hunk at old L211–L213 is byte-identical to the three lines the card and the PR body quote (106 / 113 / 110 bytes). No other path in the committed tree. The branch carries one commit over its base; the three-dot diff against current origin/main (4a2ca57e7) is still exactly those three deletions, and git grep on origin/main still places them at L211–L213, so the deletion applies cleanly.
  2. Face and tier — right. reviewFace on the file list returns the rules face (.claude/** is a governed register row, Tier S); the Scope floor is the one path above, widened here to every file the hunk's premise cites. No accept set and no public surface moves: .claude/** publishes nothing, no schema, no export, no authorable key, no runtime string.
  3. Completeness of the deletion — right. Re-run on the branch, read-only: git grep -nE '永不禁下限|首个消费者|下限抬到' over the whole tree → 0 hits (on origin/main → exactly the three lines). A wider vocabulary sweep (下限|lockfile specifier|不动 pin|消费包|首发的键|objectstack-floor|spec floor|抬到) over .claude/, skills/, AGENTS.md, CLAUDE.md, scripts/pm/, docs/, .github/ → every surviving hit is another subject (tier floors in os-dev.md:12, contract-review.md:13, execution-duties.md:95,102, platform-readings.md:387; consumer-package tests in lanes/spec.md:38–39; ceiling rulings quoted in the ratchet). No line anywhere still presupposes rule A, and no copy of A sits in execution-duties.md 〈派发〉, the alternative landing site pm-dispatch: the PR that first depends on a new spec release raises that package's @objectstack/spec floor (A), and a version-bump card takes its held-card list from the Restart-when: index (B) #24276 had named.
  4. Line-citation drift — right. git grep -nE 'dispatch-runbook(\.md)?[:#L ]+[0-9]{3}' on the branch → 0 hits; the only numeric references to the file are the two ratchet rows (a ceiling of 241 and a table-row-bytes pin of 0), neither a line citation. The two lines left adjacent (new L210 「跨包常等于跨车道…」 closing the file-surface block; new L211 「模型标识只禁内容工件…」 opening the model-identifier pair) are independent clauses; no separator was owed.
  5. What PR pm-dispatch: the spec floor rides its first consumer's PR; bump cards read the hold index #24315 (merge 83048c686) landed beside rule A is not disturbed — right. That merge paid for A's three runbook lines by folding three other runbook clauses that restated os-dev duties, and landed rule B in triage-duties.md. This PR restores none of the folded clauses (they were restatements, stated elsewhere) and leaves rule B at triage-duties.md:30–31, present on the branch and absent from the diff. The 3 lines of headroom are the only residue.
  6. CEILINGS row left at 241 — right, and a choice. check-skill-line-ratchet.mjs:409 still reads 241; the ratchet's own header calls the headroom 「the budget for ordinary rule edits between compressions」 and calls lowering 「always legitimate and encouraged」, never mandatory. The file's prior entries all sit at headroom 0 because each was a landed rewrite, not because the discipline forbids headroom. Keeping 241 is the card's stated default; lowering to 238 would be equally legitimate and is the seat's to take later without a ruling.
  7. Premise 1, objectui computes the floor at publish — holds. objectui origin/main 4b6774649 (the same sha the PR body read): package.json:138 "changeset:publish": "node scripts/objectstack-floor.mjs && node scripts/check-published-dist-tooling.mjs && node scripts/check-spec-range-floors.mjs && changeset publish". scripts/objectstack-floor.mjs header: the floor is the earliest @objectstack/spec version npm carries whose release tag contains the pin; a range below the floor becomes ^floor, a range at or above the floor stays as written; the writes are the runner's. scripts/check-spec-range-floors.mjs:13–14 names objectui#12958 as the reason the floors it judges are computed from .objectstack-sha first.
  8. Premise 2, the objectui card closed by a merged PR — holds. GET /repos/objectstack-ai/objectui/pulls/13024: merged: true, merge_commit_sha 4484a11041f336b96e545e73277ac61a425c7c74, merged 2026-10-19T06:37:07Z; that commit is an ancestor of objectui origin/main (merge-base --is-ancestor exit 0, a positive answer that holds on any depth). Issue objectui#12958: closed, state_reason: completed.
  9. The ruling source behind the premise — holds, and it outranks the direction that created rule A. objectui comment 6248859734 is ruling letter B on objectui#12955, the maintainer verbatim 「12955 B」: objectui consumes @objectstack/* by commit, and npm ranges matter only at publish where each floor is computed as the first published release containing the pinned commit. Rule A was directed on pm-dispatch: the PR that first depends on a new spec release raises that package's @objectstack/spec floor (A), and a version-bump card takes its held-card list from the Restart-when: index (B) #24276 (「立卡吧,A 和 B 都要」) about ninety minutes earlier the same day, under the premise that floors are hand-written; the objectui seat's note 6248946273 on pm-dispatch: the PR that first depends on a new spec release raises that package's @objectstack/spec floor (A), and a version-bump card takes its held-card list from the Restart-when: index (B) #24276 recorded that A 「becomes redundant for objectui once objectui#12958 lands … Until then, A still holds」, and the lane's ACCEPT on pm-dispatch: the spec floor rides its first consumer's PR; bump cards read the hold index #24315 (comment 6249387338) recorded A as landed-and-to-be-re-read when objectui#12958 closes. That condition is now met. The PR body states the mechanism precisely (it rewrites any range below the floor); the card body's 「recomputed … regardless」 overstates it, but the retirement does not rest on the overstatement: for the first consumer of release R the pin contains R's commit, so the computed floor is at least R and a hand raise to R is at most redundant — the hazard A guarded (a range admitting a release that lacks the key) cannot arise.
  10. No other consumer for A to govern — holds. objectstack: git grep -nE '"@objectstack/spec": *"[^w]' -- '**/package.json' on the branch → one hit, packages/create-objectstack/src/templates/blank/package.json:19 (^18.0.0), a scaffold for a new user project, never dispatched as a consumer. hotcrm: lanes/hotcrm.md:43–45 — exact published versions per package, no git pin, a platform fix is released first and then the version is bumped there; an exact pin is not a range, so there is no floor to raise and the admitted-older-release hazard cannot occur. cloud: triage-duties.md:28 — .objectstack-sha bump cards (the cloud repository itself is not reachable from this container; the lane text is the reading, as on the card).
  11. Triage shape met — right. Commit subject docs(pm-dispatch): retire rule A — the spec floor follows the commit pin since objectstack-ai/objectui#12958, body 「The ending of rule A is tooling: objectui's publish computes each @objectstack/* floor from .objectstack-sha — the first published release that contains the pinned commit — and stops when none does (ruling B on objectui#12955, step 2) objectui#12958」; one Tier S text PR deleting the three lines. The commit trailer pair is model-free (Claude-Session: + Co-authored-by: Claude), the PR footer is the session-URL form; the PR body opens Fixes #24730 then Clause-②: no, matching the claim.
  12. 「Not a decision card」 — sound. SKILL.md 〈升级与决策〉 L216 lists 说明书脱节 among the named non-escalating classes and L218 纯文档措辞更正(无契约声明改动); L215 makes the remainder PM discretion with 「维护者否决窗口而非许可门」. triage-duties.md:40: 「说明书脱节不进[决策箱]:有裁定出处才是 (b),否则改文档」. This is rule text whose subject the maintainer's own later ruling removed, with that ruling cited as the source; no ADR surface is touched, so Prime Directive [WIP] Add Chinese version of the documentation #13 is not engaged; the PR's 维护者速读 with 席位意见 blank is the veto window the text describes.
  13. Check-runs on the head — all answered, none red. 38 check-runs, every one completed. success: Lint & Repo Gates, TypeScript Type Check, Test Core, Governed Surface Queue Guard, Lint · PM dispatch-gates, Lint · docs & code guards, Lint · repo & tooling gates, Lint · CI, release & engine gates, Lint · ESLint, the three scoped lint lanes, the four Type Check lanes, Check Changeset, Check PR Size, Check Documentation Links, Dogfood Regression Gate, Auto Label, filter, and the three PR guards (same-issue claim, single-writer path, card-claims-branch). skipped: Build Core, Build Docs, Console Pin Gate, Temporal Conformance, Dogfood Verify CLI, the matrix shards and the opt-in tarball smoke — the filter job's own answer for a diff that touches no package, not a missing verdict. The dev's 17 local gate exits (all 0, --ran 17/17) are consistent with CI and are not relied on here.

② Semver level

skip-changeset is right: .claude/** publishes nothing from any released package; no .changeset/*.md is in the diff; Check Changeset is success with the label on the PR (read back: labels documentation, size/xs, skip-changeset; draft; assignee os-justin). Clause-②: no on the PR body's second line and on the claim is right — no accept set widens or narrows, no (narrowing) arm, so no ADR-0087 disposition is owed. Nothing for CHANGELOG or the release notes.

③ Boundary flags

open_questions: none declared. Dev deviations, each answered:

  1. Base moved 9b2953d62 → 7e7e605de before the worktree was cut — verified: the target file, its line numbers and byte counts are identical at both, and at today's origin/main 4a2ca57e7 as well. No action.
  2. Two pushes (the empty-branch probe, then the commit) — the branch holds one commit over its base; the probe left nothing. No action.
  3. check:doc-formula-expressions needed formula + lint built first — a prerequisite of a gate on the dispatch's own list, not a widening of scope; the CI lint lanes answer the same families green. No action.
  4. Model-free trailer pair and session-URL PR footer, against the harness reminder's model-named trailer — correct: AGENTS.md's form governs the repository's artefacts and takes precedence over the harness text; trailers read as stated on the head commit. No action.
  5. Relay pr_create read-back line names assignees, not labels — the label is verified independently by REST on this PR (skip-changeset present, draft, assignee os-justin), and Check Changeset judged it. Not a finding against this diff. Read in the relay itself, the observation is a misread of which row carries what: scripts/pm/fleet-write/execute.mjs:373–374 prints the labels on the labels leg's own row (「N label(s) now on the pull · labels …」) and :380–381 prints the assignees on the create row; the dev read the create row alone. The same observation is the dev's one out_of_scope_findings entry (carrier none, noted not filed), so the PR body's 「No out-of-scope findings」 line is stale against the report; the seat owns body edits after pr_create and carries it into the ACCEPT's acceptance notes as the non-finding it is. No tooling card is owed on this reading.
  6. Worktree removed; report posted from the shared checkout read-only — the shared checkout at 9b2953d62 reads clean (git status --porcelain empty). No action.

Nothing escalates. The one judgment left open for the seat is item ①6 (keep the ceiling at 241 or lower it to 238 in a later ordinary edit); neither answer changes this verdict.

Implemented-by: claude/issue-24730-retire-spec-floor-rule-a
Reviewed-by: session_01HEdP5tPhqQfzwRmKDxwn85

VERDICT: PASS


Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

维护者速读(终稿)· PR #24742 · domain:skills seat 1 · os-justin · session_01HEdP5tPhqQfzwRmKDxwn85 · 2026-10-20T04:05Z

  • 改了什么: 派发运行细则第 211–213 行(规则 A:卡的代码首读 spec 新版本首发的键时,同一 PR 把消费包的 @objectstack/spec 下限抬到该版本;「不动 pin」永不禁下限)整三行删除,不加一字;文件 241 → 238 行,上限 241 不动;规则 B(bump 单的等待清单读自 hold 索引)不动。
  • 为什么改: 规则 A 已无适用对象。您对 objectui#12955 裁了 B(objectui 按提交 pin 消费 @objectstack/*),objectui#12958 / PR os meta delete cannot pin a reset or discard only the pending draft — the CLI stays one layer behind the SDK it calls #13024 已落地:objectui 发布时由 .objectstack-sha 算出每个下限并改写低于它的区间;objectstack 自身全 workspace:,hotcrm 逐包定版本,cloud 走 pin bump 单。留着它,派发词会要求开发者手改一个发布时必被覆盖的下限,复核还要去找一个不存在的预期文件。
  • 风险与代价(含回滚): 纯文本、不发布;删行不触任何门禁或测试语料(全树 grep 仅此三行,无文件按行号引用本文件);回滚 = revert 一个提交。
  • 席位意见: 接受。这条规则是您 10-18 直派立的(「立卡吧,A 和 B 都要」),其前提被您随后的裁决 B 取消;objectui 席当天就在卡上预告了这次重读。按 SKILL.md〈升级与决策〉它属「说明书脱节、有裁定出处」的不升级类,本席按 PM 裁量处理,这段即您的否决窗口。
  • 你要做的: 无。Tier S,席位在达档复核 PASS、全部检查转绿后入队。

席位核对

  • 形态: draft、base main、首行 Fixes #24730、行首 Clause-②: no、assignee os-justin、skip-changeset 随创建同笔(REST 回读 labels = documentation, size/xs, skip-changeset);1 文件 +0/−3,一个提交;正文页脚 1 条(会话 URL 形);闭合关键词只有首行一处(另引 pm-dispatch: the PR that first depends on a new spec release raises that package's @objectstack/spec floor (A), and a version-bump card takes its held-card list from the Restart-when: index (B) #24276、pm-dispatch: the spec floor rides its first consumer's PR; bump cards read the hold index #24315 旁无动词;objectui 引用全为 owner/repo#N 全拼)。
  • 前提实测(席位,origin/main 9b2953d62→7e7e605de 与分支 tip 3969b2c3c): 第 211–213 行如卡所引(106/113/110 字节),删后 238/241;全树 永不禁下限|首个消费者|下限抬到 仅此三行;objectui origin/main 4b6774649 的 changeset:publish 以 node scripts/objectstack-floor.mjs && 起头;objectui PR os meta delete cannot pin a reset or discard only the pending draft — the CLI stays one layer behind the SDK it calls #13024 merged: true、4484a1104;triage-duties.md:30–31 不在 diff。
  • 门禁 check-runs(head 3969b2c3c): 2026-10-20T04:04Z 38 条(34 名),24 success、10 skipped、0 failed、0 in_progress;Lint & Repo Gates 与 TypeScript Type Check 均 success 且 head_sha 钉 3969b2c3c;check-expected-skips --pr 24742:OK,12 条跳过全在名单(exit 0);check-governed-merges --pr 24742:GOVERNED,Tier S(.claude/** ×1),3 行。dev 本地 17 条派生门禁全 0,--ran 17/17,钉 head 3969b2c3c。
  • 接受的偏差: 基点从派发读数 9b2953d62 移到 7e7e605de(目标文件两处读数相同);doc-formula-expressions 首跑 exit 3 为前置未建,锁下补建后 0;两次 push(空分支探针 + 提交);中继 pr_create 回读行只列 assignee 不列 label(已知读数 ⑱,REST 回读证实标签在)。
  • 复核记录: 隔离达档复审 PASS 6283093805(CONTRACT_REVIEW_TIER,head 3969b2c3c,Local-runs none;范围扩到 triage-duties.md、SKILL.md、lanes/hotcrm.md、棘轮脚本、脚手架模板与 objectui 三文件)。记录两处非判决项,本席照收:① PR 正文「No out-of-scope findings」与终报的一条 carrier-none 旁注不符 —— 正文归席位改,本条即记录,不另 PATCH;② 该旁注(中继 pr_create 回读不列 label)是误读:fleet-write/execute.mjs:373–374 在 labels 腿自己那一行打印标签,dev 只读了 create 行 —— 座位贴读数 ⑱ 据此改写。复审另指出卡正文「recomputed … regardless」略有夸大(发布只改写低于下限的区间),退役不依赖该句。
  • 范围外去向: 无新指针;dev 的 carrier-none 备注(中继 pr_create 回读缺 label 列表)已在座位贴 ⑱,不重记。
  • 落地条款: Tier S;达档复核记录 PASS 在案(6283093805)后由本席 pr_ready + automerge_enable 入队。

ACCEPT


Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 20, 2026 04:05
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 20, 2026 04:06
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 20, 2026
Merged via the queue into main with commit 9bc4dde Oct 20, 2026
39 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-24730-retire-spec-floor-rule-a branch October 20, 2026 04:30
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 size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants