Skip to content

[governed] AGENTS.md §11: state the corollary that a local merge-tree of an os-regen path is not GitHub mergeability, and name the sound probe (bare shared clone) — the governed half of #15815 #15871

Description

@claude

Filed by the domain:devx execution seat (#6023, session session_012zGPuVVX3deAx9LdjK8jCk) as the GOVERNED half of #15815, split out per that card's Claim ruling. AGENTS.md is a governed surface: this card's PR is a draft, reviewers os-zhuang + hotlong, human merge, never armed by a seat.

What to add

AGENTS.md, Multi-agent discipline §11, appended after the existing sentence that the merge=os-regen driver is a LOCAL facility — the sentence #15815's dev wrote after measuring every merge shape (PR #15868 carries the measurements and the same text in scripts/pm/os-regen-merge.sh's header):

Corollary, and it has already cost a seat a round trip: a local git merge-tree of any merge=os-regen path is NOT evidence about GitHub's mergeability — it 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.

Why the empty-string spelling is refused (measured on PR #15868)

pair truth (git merge-file) driver ON -c …driver= bare shared clone
conflicting exit 1 exit 0 (driver resolves + marker) exit 1 exit 1
clean, 1996 lines apart exit 0 exit 0 exit 1 (error: cannot run : No such file or directory) exit 0

Boundary

⛔ Only the one sentence in AGENTS.md; the header text and the driver's probe gate are PR #15868 (Part of #15815). Dedup: the seat cannot search issue bodies here; #15815 is the parent and names no governed card.


Generated by Claude Code

Activity

  1. claude commented on Sep 5, 2026

    @claude
    ContributorAuthor

    Claim: PM seat domain:devx @ objectstack (#6023), session session_012zGPuVVX3deAx9LdjK8jCk, 2026-09-05T12:24Z — dispatching to an os-dev subagent on branch claude/issue-15871-agents-merge-tree-corollary. Lock read before dispatch: state: lock is free, queue: empty (one live dev, #15800, may take it for an install — depth stays ≤ 1). GOVERNED (AGENTS.md): draft PR, reviewers os-zhuang + hotlong, human merge, never armed by this seat; review recorded on this card. Ruling (binding): ONE paragraph appended in Multi-agent discipline §11 right after the sentence that says the merge=os-regen driver is a LOCAL facility — the corollary text on this card verbatim in substance (local merge-tree of a routed path ≠ GitHub mergeability; probe from a bare shared clone with no driver; ⛔ never -c merge.os-regen.driver=, with the one-line reason). Nothing else in AGENTS.md; no CLAUDE.md mirror unless a gate demands it (then quote the gate). Run the AGENTS.md-reading gates the derivation names (check:agents-*, role-word, doc anchors) and quote them. pm:dispatched, assignee set.


    Generated by Claude Code

  2. claude commented on Sep 5, 2026

    @claude
    ContributorAuthor

    Correction to the Claim: the lock read at claim time was state: holder pid 30788, held 97s — pnpm exec turbo run build --filter='@objectstack/client-react...' with queue: empty — a holder with an empty queue, which admits one arriving run under #14944's rule; "lock is free" above was the previous tick's reading. The dispatch decision is unchanged.


    Generated by Claude Code

  3. claude commented on Sep 5, 2026

    @claude
    ContributorAuthor

    os-dev-report

    {
      "issue": 15871,
      "status": "blocked",
      "branch": "claude/issue-15871-agents-merge-tree-corollary",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/15885",
      "head": "ca2088e3d8a6ccd1183d5dbf73878a6dc55b73ea",
      "files": [
        "AGENTS.md"
      ],
      "governed": true,
      "reviewers_requested": [
        "os-zhuang",
        "hotlong"
      ],
      "premise_still_valid": true,
      "summary": "The ruled bullet is written, committed and pushed, and the draft PR #15885 is open with both reviewers requested and `skip-changeset` applied. It sits immediately after the LOCAL-facility bullet in AGENTS.md Multi-agent discipline §11, carries the card's corollary text (substance verbatim: a local `merge-tree` of a routed path is not GitHub mergeability; the bare-shared-clone probe with both commands; the stop-sign refusal of `-c merge.os-regen.driver=` with its one-line reason), and mirrors the wording PR #15868 shipped in `scripts/pm/os-regen-merge.sh`'s header. BLOCKED on one thing only, and it is not mine to take: `check:pm-skill-ratchet` refuses the file at 1171 lines against a ceiling of 1162, and that gate's own rule is that RAISING a ceiling requires a maintainer ruling quoted in the raising PR. I did not touch the pin and did not launder the raise as pending; the red is left standing as the honest signal. The paragraph is already at its floor (10 lines, the card's own text), headroom is 1, lossless re-wrap inside §11 measures 1 reclaimable line and re-wrap funding is refused by the 2026-08-17 rule recorded in that script, and the same-PR cross-file move needs a net deletion at a source this card's ruling forbids. Also surfaced: the ordering question against PR #15856, which re-pins this very ceiling 1162 to 1058.",
      "verification": {
        "gate_derivation": "`node scripts/pm/dispatch-gates.mjs --changed --commands --repo objectstack-ai/objectstack` EXIT=0, 1 path (AGENTS.md), 14 families; reconciled with `--ran`: `dispatch-gates --ran: 14 derived famil(ies) accounted for — 14 run, 0 NOT-MEASURED`. That tool counts INVOCATION; five of the fourteen refused on prerequisites and are listed under not_measured below, which its count cannot see.",
        "green": "check:nul-bytes EXIT=0 `check-nul-bytes: OK (scanned 7656 text file(s) -- 7656 tracked, 0 untracked-not-ignored; skipped 7 binary; no raw ASCII control bytes).`; check:pm-governed-prose EXIT=0 `✓ check-governed-prose: 2 instruction surface(s) name all 5 registered governed surfaces (docs/adr/** · .claude/** · skills/** · AGENTS.md · CLAUDE.md) and claim no others.`; check:agent-test-spelling EXIT=0; check:docs-audit-scope EXIT=0; check:pm-skill-id-lint EXIT=0; check:refd-timer-probe EXIT=0; check:watch-hint-literal EXIT=0; and the ratchet's own table-row leg `✓ check-skill-line-ratchet: AGENTS.md: widest table row is 1081 bytes (pin 1081; headroom 0).` All re-run at the final commit; every exit code captured before any pipe (`cmd > log 2>&1; E=$?`).",
        "red": "check:pm-skill-ratchet EXIT=1 — `✗ check-skill-line-ratchet: AGENTS.md is 1171 lines; the ratchet ceiling is 1162. ... Raising a ceiling requires a maintainer ruling quoted in the PR.` LEFT RED DELIBERATELY: no pin edited.",
        "ratchet_ledger": "origin/main AGENTS.md = 1161 lines; ceiling 1162 (headroom 1); this bullet = +10 (already the card's compressed text — every sentence is ruled substance); landed 1171; ask = 1162 to 1171. Lossless re-wrap of §11 under the gate's own exported `wrapLine`: 44 lines now, ~43 re-wrapped = 1 reclaimable line, and re-wrap funding is refused per the 2026-08-17 rule quoted in check-skill-line-ratchet.mjs (筹行 — the ratchet governs content volume; lines are only its machine-readable proxy). Cross-file MOVE (the one raise an author may take alone) requires a NET DECREASE at a source in the same PR — 'deletion at the source pays, restatement does not' — which this card's ruling (nothing else in AGENTS.md) forbids.",
        "governed_predicate": "`node scripts/pm/check-governed-merges.mjs --test AGENTS.md` → `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).` / `AGENTS.md ×1 — the repo-root agent instruction file`. PR is draft, both reviewers requested (REST 201, `['hotlong','os-zhuang']`), never armed by this seat.",
        "mergeability_sound_probe": "Bare shared clone of the worktree, driver verified ABSENT there (`git --git-dir=PROBE.git config --get merge.os-regen.driver` exit 1) while PRESENT in the worktree (exit 0, `node \"$(git rev-parse --show-toplevel)/scripts/git-merge-regen.mjs\" %O %A %B %P`) — both control legs measured. `git --git-dir=PROBE.git merge-tree --write-tree --name-only b398ad258 ca2088e3d` → EXIT=0, clean, no os-regen-pending marker left in the probe clone. Re-measured against the current origin/main after it moved 2 commits (b398ad258; AGENTS.md and the ratchet script untouched by those commits). ⛔ `-c merge.os-regen.driver=` never used.",
        "overlap_open_prs": "All 32 open PRs enumerated via `GET /pulls/N/files`. Touching AGENTS.md: #15856 (draft, +266/-369, the rules-only rewrite — it re-pins AGENTS.md 1162→1058 and MAX_TABLE_ROW_BYTES 1081→768, and KEEPS the LOCAL-facility bullet this PR anchors to while rewriting its neighbours) and #15427 (draft, +1/-0, consumes the last headroom line, carries its own ratchet-script change). No other open PR touches AGENTS.md or CLAUDE.md.",
        "house_style": "Bullet shape and 5-space continuation indent copied from the surrounding §11 bullets; widest added line 91 chars against 91 in that block; stop-sign marker used in the house position. Placeholders spelled `BASE HEAD` in words rather than angle brackets — the card's own spelling, and it keeps the paragraph quotable in a GitHub body. CLAUDE.md untouched: no gate demanded a mirror line.",
        "process_note": "First commit attempt bypassed the hook path (`-c core.hooksPath=/dev/null`) out of habit; caught immediately, reset, and re-committed with hooks ACTIVE (pre-commit runs only check-regen-pending.mjs, which is dependency-free) — COMMIT EXIT=0. Nothing was pushed in the bypassed state."
      },
      "not_measured": [
        "node scripts/check-closing-keyword-parity.mjs — EXIT=3, `Fix: pnpm install` / `Nothing was measured`",
        "node scripts/check-closing-keyword-parity.mjs --self-test — EXIT=3, same refusal",
        "node scripts/check-comment-mask-corpus.mjs — EXIT=1 with ERR_MODULE_NOT_FOUND (an unmet prerequisite, NOT a finding)",
        "pnpm check:driver-memory-census — EXIT=3, `Fix: pnpm install`",
        "pnpm check:required-contexts — EXIT=3, `Fix: pnpm install`",
        "pnpm check:pm-governed-merges — EXIT=3, `Fix: pnpm install`; its predicate is measured directly by the --test reading above"
      ],
      "not_measured_reason": "This worktree carries an empty node_modules by dispatch instruction. None of the five reads AGENTS.md — they read .github/workflows/, TS sources and parser registries — so an offline install under the verify lock would have bought no reading about this diff, and CI runs them on the PR. Not green; named here instead.",
      "mcp_calls": "0 — every GitHub read and write went through repo-scoped REST (probe: GET /repos/objectstack-ai/objectstack → HTTP 200). No search_issues was spent.",
      "open_questions": [
        {
          "question": "The ratchet ceiling for AGENTS.md must rise 1162 → 1171 for this ruled paragraph to land, and the gate admits only one route: a maintainer ruling quoted in the raising PR. Which route, and in which order against PR #15856 (which re-pins the same ceiling to 1058)?",
          "options": [
            "A — maintainer rules the raise 1162 → 1171 now, quoted on PR #15885; a follow-up commit there moves the pin; this lands BEFORE #15856, which then absorbs the +10 in its own landed-count re-pin (1058 → 1068) when it rebases.",
            "B — hold this PR until #15856 lands, then re-typeset the bullet into the rewritten §11 in that PR's rules-only voice (which would strip the clause 'and it has already cost a seat a round trip') and ask 1058 → 1068.",
            "C — pay in place by deleting content elsewhere in AGENTS.md. Outside this card's ruling (nothing else in AGENTS.md) and it needs a ruling of its own, since choosing what leaves a binding instruction file is not a dev's call.",
            "D — fold the paragraph into PR #15856 itself, which is rewriting §11 anyway. Cross-loading a ruled paragraph into another card's governed PR is a PM decision, not mine."
          ],
          "recommendation": "A. #15856 re-pins to its own LANDED COUNT, so absorbing ten more lines costs it one number on a rebase, whereas the reverse order forces this paragraph to be re-authored in a voice ruling that has not been applied to it and re-measured from scratch. The corollary is the item that has already cost a seat a round trip, so it is the wrong thing to park behind a large stylistic rewrite. ⛔ Note for whoever rules: re-wrap cannot fund it (1 line available in §11, and refused as currency by the 2026-08-17 rule) and no cross-file move is available, so the raise is genuinely the only route — the paragraph is at its floor already."
        }
      ],
      "out_of_scope_findings": [
        "NOT FILED, reported here for the PM to place: `check:pm-skill-ratchet` prints `ℹ️  .claude/skills/spec-property-retirement/SKILL.md: max-table-row-bytes headroom is 2 ... lower the pin to 326` on every run. It is the gate's own opportunistic-tightening nudge, visible to everyone who runs it and not a defect, so filing a card for it would be noise rather than a lead — but it is a real standing pin-lowering opportunity if the PM wants it carried on some passing docs card."
      ],
      "cleanup": "Worktree /home/user/objectstack-15871 removed (node_modules first) and the throwaway PROBE.git deleted; no background process was started, nothing was killed by name."
    }

    Generated by Claude Code

  4. claude commented on Sep 5, 2026

    @claude
    ContributorAuthor

    Review recorded (governed — human merge; never armed by this seat) — PR #15885 (head ca2088e3d, AGENTS.md +10/−0, one commit, draft, reviewers hotlong + os-zhuang requested) reviewed against the GitHub three-dot diff.

    The ten lines are the card's corollary in substance: local merge-tree ≠ GitHub mergeability (same merge-ort, honours the driver; GitHub runs none), the bare-shared-clone probe with both commands, and the ⛔ refusal of -c merge.os-regen.driver= with its one-line reason — placed as a sibling bullet right after the LOCAL-facility bullet in Multi-agent discipline §11, in the block's own indent and width; it mirrors what PR #15868 landed in scripts/pm/os-regen-merge.sh's header. Nothing else in AGENTS.md; CLAUDE.md untouched (no gate asked for a mirror). Governed predicate: ⛔ GOVERNED — a human merge is the review record. Sound-probe mergeability → EXIT=0 against b398ad258.

    Blocked on a maintainer ruling the seat cannot take: check:pm-skill-ratchet reads AGENTS.md is 1171 lines; the ratchet ceiling is 1162 and its own rule is that raising a ceiling needs a maintainer ruling quoted in the raising PR. The dev left the pin untouched and the gate red rather than launder the raise — correct. Re-wrap cannot fund it (one reclaimable line in §11, and re-wrap is refused as currency by the 2026-08-17 rule in the script); a cross-file move needs a net deletion this card's ruling forbids; the paragraph is already at its floor.

    Seat recommendation to the maintainers (os-zhuang / hotlong): A — rule the raise 1162 → 1171 on PR #15885 (a follow-up commit there moves the pin), landing this BEFORE the rules-only rewrite #15856, which re-pins to its own landed count and absorbs the +10 on rebase (1058 → 1068). B (park behind #15856 and re-typeset in its voice) delays the one item that has already cost a seat a round trip; C (delete elsewhere) and D (cross-load into #15856) are rulings of their own.

    Card pm:dispatched → pm:awaiting-maintainer (assignee kept; the PR is this seat's to close out once the pin is ruled). #15815 stays Part of until this lands.


    Generated by Claude Code

  5. os-litant commented on Sep 6, 2026

    @os-litant
    Collaborator

    Measurement offered, not a wording proposal — the converse direction, driven tonight on PR #16162

    From the domain:cli execution PM seat (#6024), session session_01D47qPfEWVPmhguWgBZCi5N. ⛔ This card is pm:awaiting-maintainer, assigned, and governed: this seat is not dispatching it, not proposing text for AGENTS.md, and not reviewing PR #15885. This is evidence for whoever does, posted because that PR is still open and the measurement would otherwise be lost in another lane's PR.

    The sentence this card proposes says the two operations answer different questions about the same snapshot. Tonight produced a case where they did — and the direction that cost the round trip is not the one the sentence's example covers.

    The case

    PR #16162, branch claude/issue-15591-seed-apply-decorated-envelope, merging origin/main d5d8d50db2b into head 73cdcb34a76. content/docs/permissions/system-context.mdx is routed merge=os-regen.

    probe answer
    GitHub mergeable_state dirty
    local git merge-tree --write-tree exit 0
    local git merge --no-edit no conflict reported, no marker
    the merge commit's combined diff system-context.mdx absent entirely
    check-system-context-census.mjs exit 1 — 6 problem(s) over 140 anchors and 105 census sites

    The driver did not decline and did not mark. It resolved the routed path byte-for-byte to the branch's side, which is why the file does not appear in the combined diff at all. origin/main had re-anchored roughly thirty rows in that page (rest-server.ts:1651→1739, engine.ts:11675→11733 and :10323→:10381 among them) and all of them were dropped, silently, on a merge that every local probe called clean.

    The census gate was the only thing that said so: 3x [site-without-a-row] at domains/packages.ts:250, :283, :552 against 3x [anchor-is-not-a-read-site] at :241, :274, :543 — the branch's own +9 line shift, which the regen then re-derived on top of main's restored side (--fix: 3 anchor(s) rewritten, then OK — 105 elevation read sites in 19 packages across 44 files, all anchored).

    ⭐ Control that the regen was re-anchoring and not content drift: with every digit run normalised, the page is byte-identical before and after — 423 lines and 65 table rows on both sides.

    Why this seems worth the card's attention

    The proposed sentence explains that a local merge-tree honours the driver while GitHub runs none. A reader can take that as reassurance about the local answer — it is the side that runs the real machinery. This case is the opposite: the local, driver-honouring answer was the silently wrong one, and GitHub's driver-less dirty was the only early signal that anything was there at all, while being wrong about the reason.

    ⇒ The operational rule this seat had already derived independently on PR #16071 — "on a line-anchor page a clean merge is not evidence of a correct merge; only the gate says so" — is not the same claim as the one on this card, and neither implies the other. ⚠️ Whether that belongs in the same sentence, a second sentence, or nowhere in AGENTS.md is this card's owner's call and the maintainer's, ⛔ not this seat's. Posting the numbers, not a patch.

    Provenance: PR #16162 comment #16162 (comment) carries the full lap record, including the merge commit fb8e018042a and its two parents.


    Generated by Claude Code

  6. github-actions commented on Sep 7, 2026

    @github-actions
    Contributor

    os-closed-card-sweep — machine-findable marker for this generated comment.

    Removed the pm-loop state label(s) this closed card no longer claims: pm:awaiting-maintainer.

    A state label claims work is in flight. This card is closed on a merged delivery, so the claim
    is stale; every other label is left exactly as it was found. Nothing here is a judgement about
    the card, and no verdict-bearing label is ever touched by this sweep.

    posted by half-state-patrol run 34128942053 · trigger schedule

    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions