Skip to content

docs(pm-skill): reconcile platform-readings.md lines 26–28 (merge-tree "does not apply the driver ⇒ under-reports") with the measured 349–350 (driver applied when registered; the hazard is a deferred content judgement) #16457

Description

@os-zhuang

Filed by the director seat at the #16379 ruling (decision batch #63, 2026-09-07, option A: land the new lines, reconcile the old ones in their own diff).

The contradiction

.claude/skills/pm-dispatch/references/platform-readings.md:

  • Lines 26–28 (older, ruled): git merge-tree answers the default text merge and does not apply the .gitattributes merge=os-regen driver, and therefore under-reports conflicts on driver-managed paths.
  • Lines 349–350 (PR docs(pm-skill): the fifth readings increment — 26 measured platform facts #16379, measured on git 2.43.0): the driver is applied when the clone has it registered; the hazard is that merge-tree reports clean because the driver deferred the content judgement — it says nothing about content. Registration is per clone, so both observations are true; the inference on line 27 is not.

PR #15885's AGENTS.md corollary (ruled the same day) carries the same corrected reading: probe from a driver-less bare clone, never with -c merge.os-regen.driver=.

Scope

Acceptance

  • 26–28 and 349–350 read as one rule with two clauses (registered clone vs driver-less clone)
  • no line-count change
  • wording agrees with AGENTS.md §11 corollary

Refs PR #16379 (open question), PR #15885, #15871.

Activity

  1. claude commented on Sep 7, 2026

    @claude
    Contributor

    Blocked-by: #15977

    Same file as PR #16379 (the fifth readings increment, approved and armed by the approver, waiting only on its ratchet patch round — flight P2). The reconciliation of lines 26–28 is its own diff by the ruling, so it dispatches the moment that PR merges. pm:queue → pm:blocked for the wait; #16387 closed as this card's duplicate. Skills lane seat (session session_019RfFHiRCSs3JXLK4cwcfox, os-steve), 2026-09-07T02:3xZ.


    Generated by Claude Code

  2. claude commented on Sep 7, 2026

    @claude
    Contributor

    Claim: PM loop round 9 — flight R2, the ledger reconciliation ruled at PR #16379's landing (director batch #63, option A: land the new lines, reconcile the old ones in their own diff) plus #15647 §2 item 2 (director batch #65, comment 5564445539, maintainer 「同意」): in .claude/skills/pm-dispatch/references/platform-readings.md, lines 26–28 (merge-tree "does not apply the driver ⇒ under-reports") are rewritten to the registered-driver hazard the measured lines 349–350 state — the driver is applied when the clone has it registered; merge-tree reporting clean means the driver deferred the content judgement, it says nothing about content; registration is per clone — and the merge-tree reading line carries its rule: a control reproduces the condition under test (same repo, same configuration; when comparing with the server's view, disable the custom merge driver explicitly or probe from a driver-less clone). Line-neutral under the ledger's 388/388 ceiling; the PR closes #15647 (§1 landed with PR #15955, item 1 rides flight Z, §3 empty).
    Session: session_019RfFHiRCSs3JXLK4cwcfox
    Branch: claude/issue-16457-merge-tree-reading-reconciled
    Worktree: objectstack-issue-16457
    Domain: domain:skills
    File surface: .claude/skills/pm-dispatch/references/platform-readings.md only — lines 26–28 and the merge-tree reading line(s) near 349–350; ⛔ no other line, no ceiling change, no ratchet edit.
    Container & model: XS, mode:subagent, opus — dispatch-gates.mjs --tier: no path-derived mandate on references/**; the content is a fact line, not a contract change.
    Clause-②: no
    Serial: PR #16379 merged 03:56:04Z; no open PR touches the ledger (the sixth readings increment is not yet dispatched). Governed ⇒ draft PR, in-seat review, then the seat requests os-zhuang + hotlong, adds needs-user-decision and posts the final 维护者速读; human merge. The PR carries Fixes #16457 and Fixes #15647.


    Generated by Claude Code

  3. claude commented on Sep 7, 2026

    @claude
    Contributor

    os-dev-report

    {
    "issue": 16457,
    "status": "done",
    "branch": "claude/issue-16457-merge-tree-reading-reconciled",
    "pr": "#16499",
    "premise_still_valid": true,
    "summary": "The card's premise held: old lines 26-28 carried an inference the measured lines (352-353 on this base, the ones the card called 349-350) had already overturned. Rewrote the ledger at ONE site, line-neutral: 3 lines out at 26-28, 5 lines in there, and the later restatement of the same mechanism under the 读数陷阱 section deleted - 5 insertions / 5 deletions, the file unchanged at 388 lines, no ceiling and no ratchet edit. The new lines state what decides whether merge-tree applies the driver (registration, per clone, via pnpm install's prepare), that the server runs no driver at all so the two answer different questions, that a driver's exit 0 means the content judgement was DEFERRED and says nothing about content, the probe as PR #15885's AGENTS.md corollary states it (a driver-less bare clone, quoted from that PR's head ca2088e since it is not on main), and the ban on the -c merge.os-regen.driver= override, which does not disable the driver but leaves git failing to run it and reporting every routed path conflicted. #15647 section 2 item 2 rides as the first clause of the probe line - a control reproduces the CONDITION under test, not merely the command - so it cost no line of its own. ONE DISPATCH SUB-PREMISE WAS FALSE: SKILL.md does not spell the two-leg -c form, on origin/main 4500bc5 or in flight Z's open PR #16486. A git grep over the whole tree for merge.os-regen.driver returns four sites, and the only one that prescribed the -c override was this ledger's own line 353, which this PR deletes; scripts/pm/os-regen-merge.sh line 143 already bans it and packages/spec/src/migrations/entries/README.md already prescribes a driver-less clone. So there is no SKILL.md follow-up for the seat to file - the discrepancy was inside the file I own. Draft PR #16499 opened, skip-changeset added through the additive labels endpoint, no reviewer requested, no ready flip, no auto-merge.",
    "tests": "All gates run at the final commit 1e48953, exit captured before any pipe (redirect first, then read $?). (1) node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 16 runnable families from a change set it derived itself from the merge base (1 path, committed 1 / working tree 0 / untracked 0); all 16 ran green, and the reconciliation printed: '✓ dispatch-gates --ran: 16 derived famil(ies) accounted for — 16 run, 0 NOT-MEASURED.' (2) Named verdict lines: '✓ check-skill-line-ratchet self-test: 157 cases pass.' and '✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/platform-readings.md is 388 lines (ceiling 388; headroom 0).'; '✓ check-skill-frame-sync self-test: 13 cases pass, plus 5 dispatch-gates declaration cases and 3 scan-population cases'; '✓ check-skill-id-lint self-test: 14 cases pass.' and '✓ check-skill-id-lint: 26 file(s) clean'; pnpm check:nul-bytes exit 0, plus a hand scan of the edited file for the other control bytes (grep -naP over the C0 set) with zero hits. (3) Governed predicate quoted: node scripts/pm/check-governed-merges.mjs --test on the file, EXIT=3, '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'. (4) WHOLE-REPO lint, NOT narrowed: pnpm lint (eslint . --no-inline-config) through bash scripts/pm/os-verify-lock.sh with OS_VERIFY_LOCK_SLOT=issue-16457, one acquisition, 'os-verify-lock: VERDICT command-exit 0 · held the lock 94s (1m34s) · waited 1s' (shared-box seconds, as the lock's own line states). (5) One family was NOT MEASURED on its first run and is reported as both readings: pnpm --filter @objectstack/lint run check:doc-formula-expressions exited 3 = PREREQUISITE NOT MET (@objectstack/formula and @objectstack/lint unbuilt, nothing measured); after turbo build of both under the same lock it exits 0. (6) CI on head 1e48953 polled in the foreground to full convergence: 29 check runs, all completed, 17 success / 12 skipped / 0 failure - including Lint & Repo Gates, TypeScript Type Check and the four Type Check shards, Check Changeset (green under skip-changeset), Governed Surface Queue Guard, Check PR Size, Check Documentation Links, and both single-claim guards. No ablation in this card - the change is prose, and its control is the quoted corollary, not a mutation.",
    "mcp_calls": "0 — the repo-scoped REST probe (GET /repos//issues/16457) returned 200 in this container, so every read and write this run went through REST via curl: both cards and their comment threads, PR #15885's diff for the corollary, the 31 open PRs and their file lists for the serial check, PR creation, the additive label write and its read-back, and the check-run polling. gh is absent here; no MCP GitHub call was made.",
    "open_questions": [
    {
    "question": "The ruling allowed keeping ONE site when the rewritten 26-28 and the measured 352-353 would say the same thing twice. I kept the site under 队列成员资格与 auto-merge (adjacent to the two lines that spell the merge-tree command, lines 24-25) and deleted the 读数陷阱 pair. The alternative was to keep the trap-section site and shrink 26-28 to a pointer. A second, smaller question rides on it: the concrete probe spelling (git --git-dir=PROBE.git merge-tree --write-tree --name-only BASE HEAD) did not fit the 5-line budget and is carried only by AGENTS.md's corollary and scripts/pm/os-regen-merge.sh.",
    "options": [
    "A (delivered): keep the queue-section site, 5 lines, delete the 读数陷阱 pair; the flag fragment clone --bare --shared is named, the full --git-dir invocation is not.",
    "B: keep the 读数陷阱 site and leave 26-28 as a one-line pointer; frees 2 lines at the trap site for the full probe invocation.",
    "C: keep A and spend a sixth line on the full invocation, paid by folding one more line elsewhere in the file (a fold not yet identified, so it would need its own scan)."
    ],
    "recommendation": "A, as delivered. 实际业务需求: the reading is consumed at the moment a seat asks 'is this head dirty', and that question is asked at lines 24-25 - a rule two hundred lines away from the command it governs is the shape that produced this contradiction in the first place (two sites drifted apart). 项目长远合理性: one site per fact is the file's stated house style and the fold is what pays for growth under a headroom-0 ceiling; B keeps the rule in a section about reading TRAPS, which is where it was when it went stale. 防 AI 写错: the delivered text makes the wrong instrument structurally hard to reach - the ⛔ line names the -c override and says what it does wrong, so an agent that remembers the old two-leg habit meets the refusal on the same screen as the command; option C buys a spelling that is one grep away in two other in-repo authorities and is therefore the least load-bearing of the three. 创业阶段不扩散: C spends a line and a fold hunt on a convenience, so it is out; B is a re-arrangement with no reader gain."
    }
    ],
    "out_of_scope_findings": []
    }


    Generated by Claude Code

  4. claude commented on Sep 7, 2026

    @claude
    Contributor

    Post-merge reading by the skills seat: PR #16499 was merged by a human at 07:53:48Z before the seat's in-seat contract-tier review was posted (the account usage limit interrupted the seat between the delivery and the review). The review was completed afterwards on the merged head 1e489533f1 in a detached compare worktree and is recorded here so the card carries its verdict.

    Implemented-by: flight R2 (os-dev, session session_019RfFHiRCSs3JXLK4cwcfox), PR #16499.
    Reviewed-by: the skills seat (os-steve, session session_019RfFHiRCSs3JXLK4cwcfox), post-merge.


    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

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions