Uh oh!
There was an error while loading. Please reload this page.
docs(objectql): point the sibling-seam prose at the recorded ruling - #14759
Conversation
…14693) Three passages in `engine-hook-provenance-sibling-seams.test.ts` still said the `readonlyWhen` sibling seam was "WITHHELD pending a maintainer ruling" and went "to the decision inbox, never resolved here". It was ruled — #14259, maintainer ruling B: that seam keeps value equality and the asymmetry is deliberate — and #14690 landed the corrected `isCallerSuppliedValue` docblock plus a pin on each face. A landed PR now routes readers straight into the sentence that contradicts the ruling. Comment-only: every assertion, test name and fixture is untouched. The prose is replaced with a pointer to where the argument now lives rather than a fourth copy of it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0112hMx9hjJ9BgB28X97DS68
📓 Docs Drift CheckNothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs. What this run could not see
Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
os-musk
commented
Sep 3, 2026
Landing provenance — |
Uh oh!
There was an error while loading. Please reload this page.
Fixes#14693
Three passages in
packages/objectql/src/engine-hook-provenance-sibling-seams.test.tsstill said thereadonlyWhensibling seam was "WITHHELD pending a maintainer ruling" and headed "to the decision inbox, never resolved here". It was ruled — #14259, maintainer ruling B: that seam keeps value equality, a self-assigning hook does not unlock areadonlyWhenstate lock, and the asymmetry with the static face is deliberate. #14690 then landed the correctedisCallerSuppliedValuedocblock plus a measurement pin on each face, and a cross-reference into this file — so a PR whose purpose is to document the ruling now routes readers straight into the sentence that contradicts it.Comment-only. Every assertion, test name and fixture is untouched:
git diff -U0on the changed file, with the comment lines filtered out, returns nothing. The stale prose is replaced with a pointer to where the argument now lives rather than a fourth copy of it.What changed
Two comment blocks, carrying the three stale lines triage measured at
:23,:30and:352(all three re-measured unmoved on this branch's base7a17f3bf1)::23and:30lines. It now records that the seam was ruled and names where the argument lives. The measurement narrative it used to carry (threading the record turnsLOCK 3bred,closed_notecommitting the forgery) is deliberately not repeated: it lives in the docblock and inLOCK 3bitself.MEASURED: a lone self-assigning hook leaves the CALLER value on the keyblock — the:352line."#14259's fork clause sends that one to the decision inbox; nothing here resolves it."becomes a statement that the fork was ruled, plus the pointer.Where the pointer aims, and why that target is stable
isCallerSuppliedValue's docblock inpackages/objectql/src/validation/rule-validator.ts, plus the two face pins named by test name:MEASURED: a lone self-assigning hook leaves the CALLER value on the key, in this suite (insert side) andengine-readonly-strip-caller-values.test.ts(update side);LOCK 3binengine-readonly-when-derived-writes.test.ts.All three are symbol and test names, never line numbers — a line number is the thing that rots and produces the next card exactly like this one. It is also the idiom #14690 already established: both landed pins close with "
isCallerSuppliedValue's docblock carries the argument", so this file now reads the same way as its two siblings instead of contradicting them.Deliberately left alone: the conditional at lines 359-362 ("A ruling that self-assignment must NOT count would move this pin and #14088's seam together; that is a deliberate follow-up, not silent drift"). It is a hypothetical future reversal, framed exactly as #14690's landed pins frame it ("A future ruling that reverses this INVERTS both pins together; it never deletes either") — it does not assert the question is open.
Verification (all at
ad84d2315, the head of this branch)Behaviour cannot move on a comment-only diff, and it is cheap to show that either side:
7a17f3bf1, after building the dependency closurepnpm --filter '@objectstack/objectql^...' build):engine-hook-provenance-sibling-seams.test.ts—Test Files 1 passed (1) · Tests 13 passed (13).ad84d2315), this file plus both face pins the new prose points at:Test Files 3 passed (3) · Tests 60 passed (60).Both runs went through
scripts/pm/os-verify-lock.sh(VERDICT command-exit 0).Gate family re-derived on the final tree with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands packages/objectql/src/engine-hook-provenance-sibling-seams.test.tsatad84d2315— 28 commands. 24 green, pluscheck:nul-bytesgreen. Three exited 3, which each gate defines as its own PREREQUISITE-NOT-MET branch — recorded as NOT MEASURED, in the gates' own words, and not as a pass:check-test-completeness: "PREREQUISITE NOT MET — this gate grades a savedturbo run testlog, and no log was named. … running the family locally, record this gate as NOT MEASURED."check:type-check-debt: "PREREQUISITE NOT MET …--re-measurecannot run: 41 workspace dependenc(ies) of the ledgered packages have no built type entry point on disk". Its self-test and the coverage half passed (check:type-check-coverageexit 0).check:dual-build-cjs-loads: "PREREQUISITE NOT MET — this gate reads built output, and some package has no dist/." Its 93-case self-test passed.All three need a whole-repo build, which is CI's run, not this PR's.
Changeset
skip-changeset: the diff is one test file, comment-only. Nothing is published from any package and no behaviour moves. The label is applied on this PR.🤖 Generated with Claude Code
Generated by Claude Code
Generated by Claude Code