Repository navigation
decision(spec): 批 #65 明令的 major changeset 在落地时测出不可执行 —— PR #19610 已按 minor + BREAKING banner 出,请追认或否决 #19611
Description
Activity
⛔ 更正本卡:我写的「
major合不进去」说过头了,而且漏了第三件仪器。选项没变,代价栏要重写。domain:spec执行席 2,sessionsession_01UDXER3sdqfeVYpEWZs5mZx,2026-09-21T17:36Z。⛔ 不改标签、不改 A/B/C 的字母。更正来自 PR #19610 的达档复审(152/152 @CONTRACT_REVIEW_TIER,记录落在 #15932),⛔ 但下面每一条我都自己在树上重量过,不是转述。一、
major不是合不进去 —— 有一个逃生舱,而且它是人挂的.github/workflows/pr-automation.yml:那一步 Guard against accidental major bumps (launch window) 的if:带着&& steps.allow_major.outputs.allow != 'true',而紧接其上的一步实时重读 PR 标签(⛔ 不读事件载荷,因为事后挂的标签在载荷里看不见),命中allow-major时打印:'allow-major' is on PR #N (read live, not from the event payload), so a whole-stack major is intended here and the launch-window guard stands aside.⇒ 所以准确的说法是:
major落不了地 —— 除非有人挂allow-major,代价是把那个fixed组里 70 个包一起推上一个大版本。 我原来写的「永远红着、合不进去」把「需要一个人的明示动作」说成了「不可能」,这两者不是一回事,而且差别正好在你手上。二、还有第三件仪器,而它站在
major那边packages/spec/scripts/build-schemas.ts:1072—— 那道 json-schema 清单删除门禁的失败提示文本,至今仍然对作者说:3. amajorchangeset carrying the FROM → TO mapping.它是散文、不是强制;但它是一个活的指导面,而且正是本 PR 的 CHARGE E 所依赖的同一道门禁。⇒ 如果你裁
minor,这段文本要跟着动;否则下一个退役的人会照它写major,然后撞上守卫。这条不在我原卡里,是漏的。三、有一条支持
minor的事实比我原先写的更硬守卫的
judge()我这次是跑出来的,不是读出来的:.changeset/pre.json在origin/main上不存在(2026-08-14 随changeset pre exit删掉),所以pre为 null,major⇒enforce⇒ exit 1。⇒ 这道守卫在 2026-09-07 那条裁决作出之前三周就已经武装好了 —— 也就是说,裁决写下major的那一天它就已经落不了地。这不改变字母选项,但它说明这不是「后来的规则推翻了裁决」,而是「裁决当天就与一道既有守卫冲突,没人注意到」。四、代价栏重写(选项不变)
option 真实代价(更正后) A — minor+ BREAKING banner + ADR-0087 标记(已出,两门皆绿)不变。另需顺手改 build-schemas.ts那段仍写major的提示文本,否则三件仪器继续互相矛盾。B — 写字面 major⛔ 不是「永远红」。是:要你(或某个人)在 PR 上挂 allow-major,然后 70 个包一起上大版本。代价从「技术上不可能」变成「一次明示的、范围很大的人工动作」。C — 借这张卡结束发射窗口 不变,且仍远超本卡。 推荐仍是 A,理由也没变:裁决要的是破坏性这个语义,而本仓把这个语义挪到了 banner 上。但 B 现在是一个你能选的选项,不是一个我替你关掉的门 —— 这是我上一版没有讲清楚的地方,也是这条更正存在的原因。
⛔ PR #19610 仍不入队、不挂 auto-merge,异议窗口照留。
⚠️ Redacted 2026-09-21T18:2xZ by the seat. Model identifier VALUES in this comment were replaced by the namesCONTRACT_REVIEW_TIER(the tier in force) andRETIRED-TIER(the tier retired on 2026-09-21T10:22:54Z by77df0f61a6/ PR #19573), per theAGENTS.mdrule that no model identifier lands in a PR title or body, a comment, a changeset, a doc or a code comment. ⛔ No judgment, figure, coordinate or verdict was changed. Inventory and the standing rule conflict: #19615.
Generated by Claude Code
os-support-ai commented
on Sep 22, 2026 CollaboratorMore actionsRuling: batch #210 item 3 · letter A · maintainer 「210 同意」 2026-09-22T02:40Z
Director seat, summon #26 (
session_01SPwf6Kmqo1gqzCSWSuMtQM). Presented with this seat's recommendation A from facet ①; the maintainer approved batch #210 whole.Governing text: ruling batch #65 on #15932 (5564446653) — the ACTION (retire the plugin-security scan-result family under ADR-0049) stands and is landed; only its
majordigit is superseded. Superseding texts, both later and both onmain:.claude/skills/spec-property-retirement/SKILL.md(aminorchangeset for@objectstack/spec, breaking-ness carried by the BREAKING banner; governed, maintainer-merged 2026-09-20) andscripts/check-changeset-no-major.mjs(the launch-window guard;allow-majoris a human act). Maintainer 2026-08-27 「项目在创业阶段,用户也很少,短期不考虑渐进」.Ruled (A): PR #19610 as merged (2026-09-22T01:28Z, head
3e0a06d0b5) is ratified:minorchangeset + BREAKING banner with the FROM → TO mapping + ADR-0087 disposition marker is the carrier for a breaking spec retirement during the launch window. The literalmajorof batch #65 is read as 「breaking」, which the banner carries. No revert, no follow-up changeset edit, noallow-major.Rider, not a card:
packages/spec/scripts/build-schemas.ts:1072still prescribes 「amajorchangeset carrying the FROM → TO mapping」. Gate prose is not a declared contract (filing gate: 处方句 ⛔ 非已声明契约), so it rides thedomain:specseat's next PR touchingpackages/spec/scripts/**as a declared Acceptance-notes item — one line,minorin place ofmajor. Seat post #18549 is knocked with this pointer.State in this stroke: this card closes
completed;needs-user-decisionremoved.
Generated by Claude Code
- added a commit that references this issue
on Sep 28, 2026
Ruled: 5770445652 · letter A · 2026-09-22T02:40Z — batch #210 item 3; PR #19610 as merged is ratified; closed completed
Path: P3 | none | 对向事实 — 裁决批 #65 明令的
majorchangeset 在落地时测出不可执行⏱️ Filed by the
domain:specexecution seat 2 (sessionsession_01UDXER3sdqfeVYpEWZs5mZx), under the standing clause: 裁决明令的动作实施中测出对向事实 ⇒ 冲突立成needs-user-decision卡,该 PR ⛔ 不挂 auto-merge 留异议窗口. PR #19610 is therefore ⛔ NOT enqueued and ⛔ NOT auto-merged.⛔ The ruled ACTION — retiring the plugin-security scan-result family under ADR-0049 — is executed and is not in question. Only the changeset's digit is.
维护者速读
批 #65 你裁了「退役这组扫描结果面」,裁决里写的是
majorchangeset。实施时撞上一件事:major现在根本落不了地。两条都在主干上,而且都比那条裁决新:
scripts/check-changeset-no-major.mjs是必过门禁,发射窗口期内直接拒收major—— 因为 70 个包在同一个fixed组里,一个major会把它们全推上去。@objectstack/spec用minor,⛔ 不用major……破坏性语义由 BREAKING banner 承载」。那次提交的标题就是「the retirement playbook prescribes aminorchangeset, not themajora li…」——它就是为了修这个而写的,而且比批 Add comprehensive test coverage for ObjectStack spec protocols - 100% coverage achieved #65 晚 13 天。5764818911。 照字面写major会被那道守卫拒收 —— 但 ⛔ 不是「合不进去」:pr-automation.yml里那一步带着&& steps.allow_major.outputs.allow != true,并在其上实时重读 PR 标签(⛔ 不读事件载荷),命中allow-major时守卫主动让开。⇒ 准确说法:major需要某个人明示挂上allow-major,代价是fixed组里 70 个包一起上大版本。major那边:packages/spec/scripts/build-schemas.ts:1072的门禁失败提示至今写着 「amajorchangeset carrying the FROM → TO mapping」。散文不是强制,但若裁minor,这段文本要跟着动,否则下一个退役的人照它写major再撞守卫。⭐ 一条支持
minor的硬事实:守卫的judge()是实跑的 ——.changeset/pre.json在主干上不存在(2026-08-14 随changeset pre exit删除),major恒enforce。⇒ 守卫比那条裁决早三周就武装好了,裁决写下major的当天它就落不了地。dev 已按
minor+ BREAKING banner(带 FROM → TO 映射与一行修复)+ ADR-0087 处置标记 落地,两道门都绿,并且在 PR 正文里单开一节写明了这个分歧,⛔ 没有偷偷选。我荐 A = 维持现状。这不是我替你改裁决:裁决要的是「破坏性」这个语义,而本仓自己的写法把这个语义从版本号挪到了 banner 上。回一个字母即可;不回也行 —— 这是否决窗口,你不同意就回滚,改回
major只要改一行。os-decision-facets
CHANGELOG.md里的 BREAKING banner 才是升级中的 agent 撞到墓碑后 grep 的东西,版本号不是。Prior rulings read: changeset-major,launch-window,retirement-playbook,check-changeset-no-major → thread:
5564446653(批 #65,明令major); 后续治理:2951c0f8f8(2026-09-20,playbook 改判minor); 维护者 2026-08-27 「项目在创业阶段,用户也很少,短期不考虑渐进」Options × real cost
minor+ BREAKING banner + ADR-0087 marker (already shipped, gates green)CHANGELOG.md, which is what they actually grep. The version digit does not move 70 packages.majorallow-majoron the PR.major.fixedgroup. ⛔ Far beyond this card.业务含义直译 —— A =「破坏性写在发布说明里,版本号不动」;B =「按字面写,然后这张 PR 永远合不进去」;C =「借这一张卡结束发射窗口」。
推荐:A(已执行,否决窗口)。 回退项:若你要 B,一行 changeset 改回
major,代价是那道门禁常红直到 C 发生。置信缺口:我没有量过把发射窗口的守卫抬掉会波及多少已发布包的消费者,所以 C 的真实代价我只能说「至少是 70 个包的一次大版本」,不能说「就这么多」。自检行:只看①选 A;②③④ 是否翻转:否。
Duplicate-search terms
check-changeset-no-major· 发射窗口major拒收 · spec-property-retirement changeset level · 批 #65major· BREAKING banner 承载破坏性Generated by Claude Code