Repository navigation
fix(pm): drop the cross-account review rule — the queue guard accepts a same-account Tier S record again, and contract-review.md stops requiring Reviewed-by-account - #25585
Conversation
… a same-account Tier S record again, and contract-review.md stops requiring Reviewed-by-account The maintainer's word of 2026-10-24 01:16Z: 「守卫在合并队列里只认「另一账户复审」,这个没必要,去掉这条规则」. - check-governed-queue-guard.mjs: revert the account leg (accountIndependence, the not-independent refusal, the account lines in refusal and clear, the attribution wiring, the header paragraph, the account-independence battery; floor 28 → 27), and pin the new reading with one assertion in the Tier S battery: a project-thread PR whose record was written from the same account clears on tier alone. - record-recognisers.mjs: revert readReviewedByAccount, readAttributionLogin, REVIEWED_BY_ACCOUNT_LINE, the locator's account field and their battery (floor 13 → 12). - contract-review.md: delete the six lines that required a second account (the Tier S other-account rule, the Reviewed-by-account line, the prose-face TIER_DEFAULT record from another account, the ① project-seat condition and the two-line 过渡 substitute). Session independence (Implemented-by ≠ Reviewed-by) stays. Claude-Session: https://claude.ai/code/session_018UunQYGRd5yu6puARCJBk9 Co-authored-by: Claude <noreply@anthropic.com>
|
Amendment to the PR body (the dev writes the body once; corrections go here). One sentence in the body is wrong. Under 「What changed」 the body says that after the edit, Head moved once: Generated by Claude Code |
Contract reviewServed-tier: Written 2026-10-24T02:01Z by an isolated contract-review subagent of ① Derived judgmentsThe guard change is a faithful revert of #25436's account leg and nothing else. Leftover references. Self-test floors. Guard: one battery removed (10 cases), The regression assertion is meaningful. contract-review.md: exactly the six lines, and nothing dangles. Deleted on the head: L36 「项目席落地的 Tier S: Elsewhere under Ratchet. Commit trailers and rule text. Branch commit Tier and surface. The PR's three paths against the register on the head: Merge. The head is a merge of Check-runs on this head. Read 2026-10-24T01:53Z: 23 runs, 12 in progress. Read 2026-10-24T01:56Z: 37 runs, 7 in progress. Read 2026-10-24T01:57Z (twice): 38 runs, 4 then 3 in progress. Read 2026-10-24T01:58Z: 38 runs, 2 in progress ( ② Semver levelNo published package is touched: ③ Boundary flags
Implemented-by: VERDICT: PASS — the revert is byte-exact against the pre-#25436 tree plus one discriminating regression case, the six rule lines the ruling names are the six deleted and session independence stays, floors match the batteries removed, no rule text or |
席位核对ACCEPT · Landing authority: the maintainer's standing Tier S word in this seat's thread of the Claude Code project "Objectstack" (
Generated by Claude Code |
Requested by Elon · project thread
Fixes #25568
Clause-②: no
Metadata-protocol: none
维护者速读(草稿)
scripts/pm/check-governed-queue-guard.mjs回退 feat(pm): the queue guard refuses a project-thread Tier S record reviewed from the PR's own account #25436 加的账户支路:accountIndependence、not-independent拒绝(exit 3)、拒绝与放行文案里的账户行、attribution 接线、头部段落与该自测电池(floor 28 → 27);另加一条回归用例,钉住「同账户记录放行,不比对也不打印账户」。②scripts/pm/record-recognisers.mjs回退readReviewedByAccount、readAttributionLogin、REVIEWED_BY_ACCOUNT_LINE与定位器的account字段(floor 13 → 12),全仓无其它调用方。③ 规则文contract-review.md删六行:「须属 PR 作者外的账户」「Reviewed-by-account:行」「散文面同欠另一账户一条TIER_DEFAULT记录」「① 在项目席另加…队列守卫同判」与「过渡」两行(55 → 49 行)。会话独立性(Implemented-by:≠Reviewed-by:)不属于这条规则,保留。Served-tier: CONTRACT_REVIEW_TIER、当前 head、Reviewed-by:)与 CI 全绿。两脚本的改动是 feat(pm): the queue guard refuses a project-thread Tier S record reviewed from the PR's own account #25436 的干净反向补丁(对 feat(pm): the queue guard refuses a project-thread Tier S record reviewed from the PR's own account #25436 前一提交git diff为零)加一条用例;规则文净减 6 行,棘轮上限 60 不动(headroom 11,席位可另行下调)。回滚 = revert 本 PR。Tier H 人批、3000 行人工合并线与复审记录的其它要求都不动。「散文面同欠TIER_DEFAULT记录」一行随规则一起删:它在 docs(pm-dispatch): Tier S landed from a project needs a review of record by another account; the 分诊席 shrinks to bare cards; decision cards stay in their repo and the 总监席 scans every repo #25422 里只为「另一账户」服务,删后散文面回到 docs(pm-dispatch): Tier S landed from a project needs a review of record by another account; the 分诊席 shrinks to bare cards; decision cards stay in their repo and the 总监席 scans every repo #25422 之前的读法(派发席 ACCEPT 逐句核)。.claude/**一处命中),席位复核 PASS、CI 全绿后按您 2026-10-23 14:14Z 在席位线程的长期授权落地;merge_group 检出的是合并组提交,由本 PR 自带的新守卫判定。若仍被踢出,席位会来请您从批准账户 Approve 一次。合入后 docs(pm-dispatch): every card carries a business rationale the 分诊席 judges, every card is triaged (pre-applied labels are a suggestion), and a seat verifies a card's premise before dispatch #25552 由席位重新 ready、入队。What changed
scripts/pm/check-governed-queue-guard.mjsaccountIndependence, thenot-independentrecord state and its exit-3 refusal,independenceRefusalLines, theaccounts comparedclear line, theattributionLoginrecogniser wiring, the header paragraph, and the account-independence self-test battery (10 cases;SELF_TEST_BATTERY_FLOOR28 → 27).recordVerdicttakes noattributionagain. One assertion is added to the existing Tier S battery: a project-thread PR (body carries the attribution login) whose record was written from the SAME account — the record even still carries aReviewed-by-account:line naming that login — CLEARS,record.state === 'stands', and the rendering prints no account comparison. Self-test: 335 cases pass (344 before, minus the 10 removed, plus this one).scripts/pm/record-recognisers.mjsreadReviewedByAccount,readAttributionLogin,REVIEWED_BY_ACCOUNT_LINE, the locator'saccountfield and the #25415 battery are removed (7 cases; floor 13 → 12).git grepover the whole tree finds no other caller of any of them. Self-test: 201 cases pass (208 before).--templatenever printed an account line, so the copyable record is unchanged..claude/skills/pm-dispatch/references/contract-review.mdReviewed-by-account:line, the prose-faceTIER_DEFAULT-from-another-account record, the 「① 在项目席另加 … 队列守卫同判」 condition, and the two-line 「过渡」 substitute (moot once ① owes no second account). The session-independence line (Implemented-by:≠Reviewed-by:) stays, as do 「轮次报告设复审清单专节」 and 「落地前检两条」.After the edit,
git grep -n 'Reviewed-by-account\|另一账户\|25415' -- .claude scriptsnames nothing; a whole-tree grep for the same words and for the removed symbol names names nothing either. The prose-faceTIER_DEFAULTline goes with the rule: #25422 added it only as the vehicle for the other account's review, and without the account requirement the prose face falls back to the reading the file already states (the dispatching seat's ACCEPT, sentence by sentence against the diff).Not in scope, unchanged: the Tier H landing leg (authorized approval), the human-merge size line, the record shape otherwise, and every Tier H file.
Acceptance (card #25568)
node scripts/pm/check-governed-queue-guard.mjs --self-test: exit 0, 335 cases.node scripts/pm/record-recognisers.mjs --self-test: exit 0, 201 cases.pnpm check:pm-skill-ratchet,pnpm check:pm-skill-id-lint,pnpm check:skill-frame-sync,pnpm check:skill-frame-freshness: all exit 0. Ratchet row forcontract-review.md: 49 lines, ceiling 60, headroom 11.c9dae4256c4ed54964695bf0ec8ce9354a1a8f83, the body attributionos-elon-musk, and the key lines of record 6377468190 verbatim includingReviewed-by-account: os-elon-musk— driven throughrunGuardonmerge_group:exitCode = 0,record.state = stands, noindependencefield. Onmainthe same record was refused (run 40046346946: 「written from the SAME account that built the pull request」).state: not-independent,independence.state: same-account; 1 of 345 cases failed), so the assertion measures the leg and not itself.Gates
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack --paths(the three paths) derived 42 families (23 pnpm, 19 direct node; 32 matched by path, 2 by change kind, 8 whole-tree). Every command was run with the capture idiom and its exit code recorded beside it;--ranreconciles 42 derived, 42 run, 0 NOT-MEASURED, 0 UNRUN. One family,pnpm --filter @objectstack/lint run check:doc-formula-expressions, exited 3 (prerequisite not met:@objectstack/formulaand@objectstack/lintunbuilt in a fresh install) on the first pass and 0 afterpnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lint. Not measurable locally and left to CI, as the tool prints them:check-closing-target-claim,check-shard-attestation,check-test-completeness(values from the workflow), the Test Core shard job, and the 16 changeset-scoped families (no changeset:skip-changeset).node scripts/pm/check-governed-merges.mjs --teston the three paths: GOVERNED, Tier S —.claude/**×1 (contract-review.md); the two scripts are off the register. Size 24 additions / 264 deletions, far under the 3000-line human-merge line.skip-changesetdeclared on thepr_createstroke:.claude/**andscripts/pm/**ship in no published package.Generated by Claude Code