Skip to content

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

Open
claude[bot] wants to merge 1 commit into
mainfrom
claude/issue-15871-agents-merge-tree-corollary
Open

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
claude[bot] wants to merge 1 commit into
mainfrom
claude/issue-15871-agents-merge-tree-corollary

Conversation

@claude

@claude claude Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

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 the merge=os-regen driver is a LOCAL facility. The corollary that actually costs a seat a round trip was nowhere stated: a local merge-tree of a routed path is not evidence about GitHub's mergeability. This adds it as one bullet, immediately after that sentence. Nothing else in AGENTS.md; no CLAUDE.md mirror (no gate demanded one).

⛔ THIS PR IS BLOCKED ON A MAINTAINER RULING — do not merge as-is

pnpm check:pm-skill-ratchet is RED and I did not touch the pin. Its verdict, quoted:

✗ check-skill-line-ratchet: AGENTS.md is 1171 lines; the ratchet ceiling is 1162. Keep the
surface compressed: ... Raising a ceiling requires a maintainer ruling quoted in the PR.

The ledger, measured rather than asserted:

quantity reading
AGENTS.md on origin/main 1161 lines
ceiling (CEILINGS in scripts/pm/check-skill-line-ratchet.mjs) 1162 — headroom 1
this bullet, already compressed to the card's text +10 lines
landed count 1171 ⇒ the ask is 1162 → 1171
lossless re-wrap headroom inside §11, under the gate's own exported wrapLine 1 line — and re-wrap funding is REFUSED per the 2026-08-17 rule recorded in that script (筹行: the ratchet governs content volume, lines are only its machine-readable proxy)
same-PR CROSS-FILE MOVE (the one raise an author may take alone) unavailable — it requires a NET DECREASE at a source in this same PR ("deletion at the source pays, restatement does not"), and this card's ruling is AGENTS.md only

⇒ 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.

⚠️ Sequencing — two open PRs also edit AGENTS.md, and one of them re-pins this very ceiling

Enumerated through GET /pulls/N/files over all 32 open PRs:

PR AGENTS.md note
#15856 (draft) +266 / −369 the rules-only rewrite. It re-pins AGENTS.md 1162 → 1058 and MAX_TABLE_ROW_BYTES 1081 → 768. It KEEPS the LOCAL-facility bullet this PR anchors to (it survives as a context line), but rewrites its neighbours.
#15427 (draft) +1 / −0 consumes the last headroom line (it carries its own ratchet-script change).

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

   - **Corollary — a local `merge-tree` is NOT GitHub's mergeability**, and it has already
     cost a seat a round trip: a local `git merge-tree` of any `merge=os-regen` path runs
     the same merge-ort machinery as `git merge` and therefore honours the custom driver,
     while GitHub runs none, so the two answer different questions about the same snapshot.
     Probe from a throwaway bare clone that shares the object store and has no driver
     registered (`git clone --bare --shared . PROBE.git`, then
     `git --git-dir=PROBE.git merge-tree --write-tree --name-only BASE HEAD`), ⛔ never with
     `-c merge.os-regen.driver=`, which 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.

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 HEAD in 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:

governed-surface predicate: 1 of 1 path(s) hit the register (5 surfaces, repo-agnostic).
  ⛔  GOVERNED — a human merge is the review record for this PR (#9495 regime).
      No seat flips it ready, enqueues it, or arms auto-merge (AGENTS.md Prime Directive #14).
      AGENTS.md ×1 — the repo-root agent instruction file

⇒ 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-bytes EXIT=0 — check-nul-bytes: OK (scanned 7656 text file(s) ... no raw ASCII control bytes); check:agent-test-spelling EXIT=0; check:docs-audit-scope EXIT=0; check:pm-governed-prose EXIT=0 — ✓ check-governed-prose: 2 instruction surface(s) name all 5 registered governed surfaces; check:pm-skill-id-lint EXIT=0; check:refd-timer-probe EXIT=0; check:watch-hint-literal EXIT=0; plus check: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-ratchet EXIT=1 — the ceiling, above.

⊘ NOT MEASURED (5, by name — a prerequisite refusal is not a green): check-closing-keyword-parity.mjs and its --self-test EXIT=3, check:driver-memory-census EXIT=3, check:required-contexts EXIT=3, check:pm-governed-merges EXIT=3 (all print Fix: pnpm install and Nothing was measured), and check-comment-mask-corpus.mjs EXIT=1 with ERR_MODULE_NOT_FOUND — an unmet prerequisite, not a finding. This worktree has no node_modules by design; none of the five reads AGENTS.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 --test reading above.

Mergeability was measured through the SOUND instrument this PR documents — dogfooding it:

git clone --bare --shared . PROBE.git
git --git-dir=PROBE.git config --get merge.os-regen.driver   → exit 1 (driver ABSENT — GitHub's condition)
git --git-dir=PROBE.git merge-tree --write-tree --name-only b398ad258 ca2088e3d   → EXIT=0, no conflicts

Control leg the other way: in this worktree the driver IS registered (git config --get merge.os-regen.drivernode "$(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. No os-regen-pending marker 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

…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
@os-zhuang
os-zhuang marked this pull request as ready for review September 5, 2026 13:23
@os-zhuang
os-zhuang enabled auto-merge September 5, 2026 13:23

os-steve commented Sep 5, 2026

Copy link
Copy Markdown
Collaborator

维护者速读 · 待你一个字(skills 席代读,2026-09-05T13:3xZ;本 PR 属 devx 车道,其席位可更正)

改了什么:AGENTS.md §11 加 10 行:本地 merge-tree 对走 os-regen 合并驱动的文件回「无冲突」,不等于 GitHub 认为能合并(GitHub 没装这个驱动),并给出正确的探测命令。

为什么改:今天 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

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 needs-user-decision size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

3 participants