docs(agents): a local merge-tree of an os-regen path is not GitHub mergeability — state the corollary and name the sound probe (#15871) - #15885
Conversation
…regen path is not GitHub mergeability, and name the sound probe (#15871) AGENTS.md §11 already says the `merge=os-regen` driver is a LOCAL facility. What it never stated is the corollary that costs a seat a round trip: a local `git merge-tree` of a routed path runs the same merge-ort machinery as `git merge`, so it HONOURS the driver, while GitHub runs none — the two answer different questions about the same snapshot. The added bullet names the sound instrument (a throwaway bare clone sharing the object store, where the driver is genuinely absent, which is GitHub's actual condition) and refuses the falsified `-c merge.os-regen.driver=` spelling, whose empty string does not disable the driver but leaves git failing to run it and reporting a conflict for every routed path — including ones that text-merge cleanly. Measurements are on PR #15868, which carries the same text in `scripts/pm/os-regen-merge.sh`'s header. Part of #15815 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk
维护者速读 · 待你一个字(skills 席代读,2026-09-05T13:3xZ;本 PR 属 devx 车道,其席位可更正)改了什么:AGENTS.md §11 加 10 行:本地 为什么改:今天 spec 席就是被这个假绿骗了一次(#15647 addendum 3 记的那件事);规则本体已经说驱动是本地设施,少的是这个推论。 风险与代价:CI 红——AGENTS.md 行数上限 1162,现在 1161,加 10 行就是 1171,行数 ratchet 拒绝;dev 没有擅自抬上限,如实标红等你裁。此外它与成员 5 的 PR #15856(同一文件,已重钉上限为 1058)撞车:谁先落地另一个都要重解。os-zhuang 已批准(批的是一张红 PR)。 选项
你要做的:回 A / B。 Generated by Claude Code |
A second, opposite symptom of the same root — measured today, offered as a second data point for this cardThis card states the corollary that a local Instance 1 — GitHub refuses a merge that is locally clean (PR #15838)
Instance 2 — git merges cleanly and produces a semantically stale file (PR #15966)Same file, different outcome.
The repo's own pre-commit os-regen check independently flagged the file as a generated artifact merged without a text merge and requiring regeneration. Repaired with the census's Why the pair is worth more than either⭐ Both come from the same root — a generated file whose content is line anchors, being text-merged — and they present as opposites: one refuses to merge while looking mergeable; the other merges while looking correct. A rule phrased only as "a clean One more property, from a third encounter today (PR #15838's resolution)When the census's ⛔ Filed as data, not as a proposed remedy — the sound-probe question is this card's and it is the maintainer's to settle. Generated by Claude Code |
Fixes #15871
Part of #15815 — the GOVERNED half. The ordinary half (the same text in
scripts/pm/os-regen-merge.sh's header, plus the driver's probe gate) is PR #15868.AGENTS.md§11 already says themerge=os-regendriver is a LOCAL facility. The corollary that actually costs a seat a round trip was nowhere stated: a localmerge-treeof a routed path is not evidence about GitHub's mergeability. This adds it as one bullet, immediately after that sentence. Nothing else inAGENTS.md; noCLAUDE.mdmirror (no gate demanded one).⛔ THIS PR IS BLOCKED ON A MAINTAINER RULING — do not merge as-is
pnpm check:pm-skill-ratchetis RED and I did not touch the pin. Its verdict, quoted:The ledger, measured rather than asserted:
AGENTS.mdonorigin/mainCEILINGSinscripts/pm/check-skill-line-ratchet.mjs)wrapLineAGENTS.mdonly⇒ The only route left is the header's own escape hatch: a maintainer ruling quoted in this PR body, after which the pin moves in a follow-up commit here. I have no such ruling, so I did not raise the roof and did not launder the raise as "pending". The red is the honest signal.
The paragraph is already at its floor: it is the card's ruled text, and every sentence in it is ruled substance (the corollary, the mechanism, the sound probe with both commands, the ⛔ refusal with its one-line reason). Cutting further drops ruled content.
AGENTS.md, and one of them re-pins this very ceilingEnumerated through
GET /pulls/N/filesover all 32 open PRs:AGENTS.mdAGENTS.md1162 → 1058 andMAX_TABLE_ROW_BYTES1081 → 768. It KEEPS the LOCAL-facility bullet this PR anchors to (it survives as a context line), but rewrites its neighbours.Both matter to whoever rules on the ceiling: if #15856 lands first, this bullet must be re-typeset into the rewritten §11 in that PR's rules-only voice — "every incident narrative, ruling date and quotation out" would trim the clause "and it has already cost a seat a round trip" — and the ask becomes 1058 → 1068. Neither ordering is mine to choose. Not addressed here.
The added text, exactly as committed
Wording mirrors the header shipped by PR #15868, compressed to AGENTS.md's bullet shape and its ~90-column prose width (widest added line: 91 chars, against 91 in the surrounding block). The placeholders are spelled
BASE HEADin words rather than in angle brackets, matching the card's own text and keeping the paragraph quotable in a GitHub body without tripping the body sanitizer.Verification
Governed predicate —
node scripts/pm/check-governed-merges.mjs --test AGENTS.md, quoted:⇒ draft, reviewers
os-zhuang+hotlong, human merge, never armed by a seat.Gate families derived with
node scripts/pm/dispatch-gates.mjs --changed --commands --repo objectstack-ai/objectstack(14 families) and reconciled with--ran:14 derived famil(ies) accounted for. Exit codes captured BEFORE any pipe.GREEN (9, all dependency-free, re-run at the final commit):
check:nul-bytesEXIT=0 —check-nul-bytes: OK (scanned 7656 text file(s) ... no raw ASCII control bytes);check:agent-test-spellingEXIT=0;check:docs-audit-scopeEXIT=0;check:pm-governed-proseEXIT=0 —✓ check-governed-prose: 2 instruction surface(s) name all 5 registered governed surfaces;check:pm-skill-id-lintEXIT=0;check:refd-timer-probeEXIT=0;check:watch-hint-literalEXIT=0; pluscheck:pm-skill-ratchet's own table-row leg —✓ AGENTS.md: widest table row is 1081 bytes (pin 1081; headroom 0).RED (1):
check:pm-skill-ratchetEXIT=1 — the ceiling, above.⊘ NOT MEASURED (5, by name — a prerequisite refusal is not a green):
check-closing-keyword-parity.mjsand its--self-testEXIT=3,check:driver-memory-censusEXIT=3,check:required-contextsEXIT=3,check:pm-governed-mergesEXIT=3 (all printFix: pnpm installandNothing was measured), andcheck-comment-mask-corpus.mjsEXIT=1 withERR_MODULE_NOT_FOUND— an unmet prerequisite, not a finding. This worktree has nonode_modulesby design; none of the five readsAGENTS.md(they read.github/workflows/, TS sources and parser registries), and CI runs them on this PR.check:pm-governed-merges' predicate is measured directly by the--testreading above.Mergeability was measured through the SOUND instrument this PR documents — dogfooding it:
Control leg the other way: in this worktree the driver IS registered (
git config --get merge.os-regen.driver→node "$(git rev-parse --show-toplevel)/scripts/git-merge-regen.mjs" %O %A %B %P, exit 0), so a probe run here would have been the instrument mismatch this bullet exists to stop. ⛔-c merge.os-regen.driver=was never used. Noos-regen-pendingmarker was left in the probe clone.Docs-only, publishes nothing from any package ⇒
skip-changeset.🤖 Generated with Claude Code
https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk
Generated by Claude Code