Repository navigation
governance(AGENTS.md PD15): carve the fleet-write relay's refresh stroke out of the release.yml dispatch prohibition - #23436
Conversation
…oke out of the release.yml dispatch prohibition Ruling record 6160857949 (letter A): the reserved act becomes dispatching release.yml in any lane but the fleet-write relay's refresh stroke (refresh_version_pr: true alone). Every other reserved act is unchanged. The words added are exactly that clause; the rest of the paragraph is a forced re-flow at its own typeset width (118 B). AGENTS.md stays at 1116 lines against its ceiling of 1116. Claude-Session: https://claude.ai/code/session_01B7mrh59UAGffd7s9asUfoY Co-authored-by: Claude <noreply@anthropic.com>
…rved-act list The lead read "... or triggers a release workflow", which forbade the fleet-write relay's refresh stroke that the amended list admits. It now reads "... or triggers a release". The list stays the definition: every other release.yml lane and every other publish-capable workflow is still reserved by name. Ruling record 6160857949 (letter A: one rule text that matches one mechanism); the seat's answer to the report's open question chose this option. AGENTS.md stays at 1116 lines. Claude-Session: https://claude.ai/code/session_01B7mrh59UAGffd7s9asUfoY Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewServed-tier: Rendered from card #23393 (body and all four comments), PR #23436 (body, file list, net diff against ① Derived judgmentsOne file,
② Semver level
③ Boundary flagsRound 0 report (
Round 1 report (
Nothing escalated. The remaining word is the maintainer's: the Tier H approval on this PR, which the ruling already assigns. Implemented-by: VERDICT: PASS Generated by Claude Code |
维护者速读PR #23436 · head 改了什么AGENTS.md 第 15 条(版本发布由维护者亲手做)改了两处,共 2 个词组:
其余保留动作逐字未动:发布、打 tag、GitHub Release、推镜像、 为什么改这是执行你在 #23193 的裁决 A(「23209 A」)。裁决 B 第 5 条要席位在每个修复合入后马上刷新 Version PR,而原文禁止任何 风险与代价(含回滚)
席位意见建议批准。
批准后由本席落地,顺序是:本 PR → #23209 合入 main、复检后落地 → 裁决 B 第 5 条才可以执行。在这之前,任何席位都不触发 你要做的批准本 PR: Generated by Claude Code |
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 38539141182 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 分类: 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
|
Queue red, disposition · Not this PR's. No re-queue. This PR changes
Generated by Claude Code |
Fixes #23393
Clause-②: no
Executes ruling A on #23193: ruling record
6160857949, the maintainer's word verbatim 「23209 A」, on the options put in6141962120. #23193 remains open for PR #23209. #23177 remains open.Governed, Tier H (
AGENTS.md). This PR stays a draft until an at-tier contract review and an authorized approval. Landing order per the ruling: this PR first, then PR #23209 mergesmain, is re-checked and lands. Only after that is ruling B item 5 on #23177 (6139629628) executable.Patch round 1 (
session_01B7mrh59UAGffd7s9asUfoY, head9b68a60etoe7712a44) adds edit 2 below. That is the seat's answer B (card comment6164269656) to the report's open question.What changes
Two edits to
AGENTS.mdPrime Directive 15. Nothing else in the file changes.1. The reserved-act clause. This is the shape option A put to the maintainer: "the reserved act becomes dispatching
release.ymlin any lane except the relay's ... refresh stroke (...refresh_version_pr: truealone)".workflow_dispatch-ingrelease.ymlor any other publish-capable workflow,workflow_dispatch-ingrelease.ymlin any lane but the fleet-write relay's refresh stroke (refresh_version_pr: truealone), or any other publish-capable workflow,2. The bold lead. This aligns the lead with the amended list.
6141962120, "one rule text that matches one mechanism". With only the clause amended, the lead still forbade what the amended list admits, because the relay's refresh stroke does triggerrelease.yml, which is a release workflow. That is the same contradiction that held PR tooling(pm): the fleet relay may start release.yml with refresh_version_pr true alone, so a seat refreshes the Version PR through the relay #23209. The seat's answer (6164269656) treats aligning the lead as executing the ruling as given, not as a new decision.release.ymllane and every other publish-capable workflow stays reserved there by name.Proof that nothing else moved. Against merge base
4f81f31526,git diff -w --word-diffshows exactly two changes:release workflow,becomesrelease,, so one word (workflow) is removed;in any lane but the fleet-write relay's refresh stroke (refresh_version_pr: true alone),is inserted.A whitespace-normalised whole-file comparison of
AGENTS.mdat base and at heade7712a44equals base with exactly those two edits applied. It answerstrue. Control: the same edits without the clause's trailing comma answerfalse. Lines 307-315 of the hunk are the forced re-flow of the paragraph at its own typeset width (118 B). The lead edit shortens line 302 in place and re-flows nothing.Every other reserved act stays word for word:
changeset publish/pnpm run release;release.ymldispatch or input combination, and any other publish-capable workflow;releaseenvironment approval;True on the
mainit merges into (dependence on PR #23209)WORKFLOW_DISPATCH_INPUTSis not onmain:git grep -c WORKFLOW_DISPATCH_INPUTS origin/mainanswers nothing (exit 1) at4f81f31526. PR tooling(pm): the fleet relay may start release.yml with refresh_version_pr true alone, so a seat refreshes the Version PR through the relay #23209 (head961ec7100a) adds it inscripts/pm/fleet-write/ops.mjsas'release.yml': { refresh_version_pr: true }. So the clause states the rule (the relay's stroke, with that one input alone) and names no constant.mainthe relay'sWORKFLOW_DISPATCH_ALLOWLISTis['shard-timings-refresh.yml'].validate.mjs --self-testpins that arelease.ymldispatch is refused, and the refusal names that list. So between this landing and PR tooling(pm): the fleet relay may start release.yml with refresh_version_pr true alone, so a seat refreshes the Version PR through the relay #23209's, the relay refuses the admitted stroke with zero writes. The rule lands before its mechanism, and it fails closed.release.yml,scripts/pm/fleet-write/**or PR tooling(pm): the fleet relay may start release.yml with refresh_version_pr true alone, so a seat refreshes the Version PR through the relay #23209, and nothing was dispatched.Why the stroke cannot publish:
release.ymljobs onmain(4f81f31526)version-pr(Version PR maintenance) runs onschedule, or on a dispatch withinputs.refresh_version_prtrue. It is the only job the stroke starts.release-integrity(Release integrity (audit + no-mint backfill)) andstale-prompts(Cancel publish prompts for versions already on npm) carry!inputs.refresh_version_prin their ownif:for a dispatch.full-battery(Full battery green at the version commit) andpublish(Publish ... to npm (awaiting approval)) needrelease-integrity, so a skipped audit makessuccess()false. Theirforcebranch also carries!inputs.refresh_version_pr.docker(Docker image) has no input guard. It runs only on apublishedoutput fromrelease-integrityorpublish, and the stroke leaves both unset.So the card's "the publish lanes require
!inputs.refresh_version_pr" holds literally for two jobs and on theforcebranch for two more, anddockeris covered through its dependency. The two dispatches recorded in6141962120(runs38351525685and38357219168) ranVersion PR maintenanceand skipped the other five jobs.Line budget: why the ruling's clause and not a three-part sentence
AGENTS.mdhas a line ceiling of 1116 inscripts/pm/check-skill-line-ratchet.mjs, at headroom 0 on base. Raising it takes a maintainer ruling quoted in the raising PR. Ruling A ruled the text and named no line budget.wrapLineat the paragraph's typeset width (118 B). The base paragraph greedy-wraps to its current 15 lines, so it has no lossless re-wrap headroom, and its last line has 99 B of slack. With both edits (+91 B clause, -9 B lead) the paragraph is still 15 lines, with 12 B of slack on its last line.AGENTS.mdstays at 1116 lines on heade7712a44.Reviewer points
6164269656); see edit 2.refresh_version_pr. Nothing is superseded.Acceptance notes
.claude/**,skills/**,scripts/**anddocs/**, with git grep -F at9b68a60e. Control:publish-capable workflowinAGENTS.md= 1 hit.publish-capable workflow,publish-capable,workflow_dispatch-ing,release act itself,triggers a release workflow,PD15and pendingreleaseenvironment.Prime Directive 15:scripts/release-github-releases.mjs(2 hits; it cites PD15 for not deleting Releases).Prime Directive #15:scripts/pm/check-skill-line-ratchet.mjs(1, a historical ceiling comment), plusdocs/adr/0125-…anddocs/adr/0082-…(7 in total, all citations).refresh_version_pr:scripts/pm/check-expected-skips.mjs(2) anddocs/releases-maintenance.md(3, the maintainer's runbook)..claude/skills/pm-dispatch/SKILL.md:34is a pointer ("发布动作的完整清单以 AGENTS.md 为权威").:300-312. On base it is:301-321. The lead edit is at:302, and the amended clause is at:307-308.Gates (head
e7712a44)Derived with
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack(no paths; 1 path vs merge base4f81f3152, +10 / -10). This is the same 15-command list as on9b68a60e. All 15 exited 0, with exit codes captured before any pipe:check-closing-keyword-parityand its--self-testcheck-comment-mask-corpuscheck:agent-test-spellingcheck:docs-audit-scopecheck:driver-memory-censuscheck:gitlink-declaredcheck:nul-bytes("no raw ASCII control bytes")check:pm-governed-mergescheck:pm-governed-prosecheck:pm-skill-id-lint("87 file(s) clean")check:pm-skill-ratchet("AGENTS.md is 1116 lines (ceiling 1116; headroom 0)")check:refd-timer-probecheck:required-contextscheck:watch-hint-literalAlso run, outside the derivation:
check-published-list-mirrors("1 published list mirror(s) match"), exit 0.Reconciliation with
--ran: "15 derived, 15 run, 0 NOT-MEASURED, 0 UNRUN", a derived zero.Not measured:
scripts/check-required-contexts.mjs --verify-required-set, which takes a value from the workflow.No changeset:
AGENTS.mdships in no package'sfiles[](skip-changeset). GitHub reports the PR mergeable, somainwas not merged in.维护者速读(草稿)
改了什么
AGENTS.md 第 15 条改了两处:
release.yml仍由维护者保留,只有一种例外:经 fleet-write 中继、只带refresh_version_pr: true的刷新,它只重生成 Version Packages PR。其余保留动作一字未改,包括发布、打 tag、Release、镜像、
release环境审批,以及合并或排队 Version Packages PR。为什么改
执行 #23193 的裁决 A(「23209 A」)。裁决 B 第 5 条要求席位在修复合入后立刻刷新 Version PR,但原文禁止任何
release.yml派发,规则和机制互相矛盾,PR #23209 因此一直搁置。只改清单的话,首句仍会禁止清单已经允许的刷新,矛盾还在。所以按裁决 A 的理由「一条规则文本对应一种机制」,首句一并对齐。这是席位对报告问题的答复(B)。风险与代价(含回滚)
这次刷新不会发布:它只跑
Version PR maintenance,审计、发布、镜像任务都跳过,两次实跑可以作证。首句改短以后,其余发布类派发仍由清单逐项点名保留。PR #23209 合入之前,中继会直接拒绝release.yml,例外暂时用不上,失败方向是关闭。行数仍是 1116,不需要抬上限。回滚方法:revert 本 PR 合入的 commit。席位意见
你要做的
批准本 PR(Tier H)。