Repository navigation
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
Activity
- addeddocumentationImprovements or additions to documentationImprovements or additions to documentation
on Sep 7, 2026 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:blockedfor the wait; #16387 closed as this card's duplicate. Skills lane seat (sessionsession_019RfFHiRCSs3JXLK4cwcfox, os-steve), 2026-09-07T02:3xZ.
Generated by Claude Code
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-treereporting 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.mdonly — 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 onreferences/**; 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, addsneeds-user-decisionand posts the final 维护者速读; human merge. The PR carriesFixes #16457andFixes #15647.
Generated by Claude Code
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
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
1e489533f1in a detached compare worktree and is recorded here so the card carries its verdict.- Diff read: one file, 5 insertions / 5 deletions,
platform-readings.mdat 388 lines (ceiling 388, headroom 0, no ratchet edit). Lines 26–30 state the registered-driver reading (merge-ort applies a registered driver; registration is per clone via the prepare step and the server runs none; a driver's exit 0 defers the content judgement; the probe is a driver-less bare clone; the-c merge.os-regen.driver=override is banned), and the older restatement under 读数陷阱 is deleted, so the mechanism has one site. - [finding] shift-end items from the domain:spec seat — 4 platform facts and 2 principle gaps (dispatch paraphrase; unstated census glob) #15647 §2 item 2 (a control reproduces the condition under test) rides as the first clause of the probe line, as ruled in batch Add comprehensive test coverage for ObjectStack spec protocols - 100% coverage achieved #65.
- Open question A (keep the queue-section site, delete the trap-section pair) is accepted as delivered: the reading sits beside the command it governs.
- The dispatch sub-premise that SKILL.md spelled the two-leg
-cform was false; the only carrier was this ledger's own line 353, deleted by the PR. No follow-up card. The seat's own flight briefs that prescribed the two-leg form (V, X, C3) were corrected by message; C3 and X were told to probe from a driver-less bare clone. - Cards 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 and [finding] shift-end items from the domain:spec seat — 4 platform facts and 2 principle gaps (dispatch paraphrase; unstated census glob) #15647 closed by the merge;
pm:dispatchedand assignee stripped on both with read-back.
Implemented-by: flight R2 (os-dev, session
session_019RfFHiRCSs3JXLK4cwcfox), PR #16499.
Reviewed-by: the skills seat (os-steve, sessionsession_019RfFHiRCSs3JXLK4cwcfox), post-merge.
Generated by Claude Code
- Diff read: one file, 5 insertions / 5 deletions,
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:git merge-treeanswers the default text merge and does not apply the.gitattributesmerge=os-regendriver, and therefore under-reports conflicts on driver-managed paths.merge-treereports 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.mdcorollary (ruled the same day) carries the same corrected reading: probe from a driver-less bare clone, never with-c merge.os-regen.driver=.Scope
AGENTS.md§11's corollary once PR docs(agents): a localmerge-treeof an os-regen path is not GitHub mergeability — state the corollary and name the sound probe (#15871) #15885 lands so the two governed texts say one thing.skip-changeset.Acceptance
AGENTS.md§11 corollaryRefs PR #16379 (open question), PR #15885, #15871.