docs(objectql): point the sibling-seam prose at the recorded ruling - #14759

Merged
os-musk merged 1 commit into
mainfrom
claude/issue-14693-sibling-seams-stale-ruling-prose
Sep 3, 2026
Merged

docs(objectql): point the sibling-seam prose at the recorded ruling#14759
os-musk merged 1 commit into
mainfrom
claude/issue-14693-sibling-seams-stale-ruling-prose

Conversation

@os-musk

Copy link
Copy Markdown
Collaborator

Fixes#14693

Three passages in packages/objectql/src/engine-hook-provenance-sibling-seams.test.ts still said the readonlyWhen sibling 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 a readonlyWhen state lock, and the asymmetry with the static face is deliberate. #14690 then landed the corrected isCallerSuppliedValue docblock 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 -U0 on 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, :30 and :352 (all three re-measured unmoved on this branch's base 7a17f3bf1):

  1. The file header's "THE SIBLING SEAM IS DELIBERATELY NOT HERE" block — lines 21-30, holding the :23 and :30 lines. It now records that the seam was ruled and names where the argument lives. The measurement narrative it used to carry (threading the record turns LOCK 3b red, closed_note committing the forgery) is deliberately not repeated: it lives in the docblock and in LOCK 3b itself.
  2. The closing sentence of the MEASURED: a lone self-assigning hook leaves the CALLER value on the key block — the :352 line. "#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 in packages/objectql/src/validation/rule-validator.ts, plus the two face pins named by test name:

  • static face — MEASURED: a lone self-assigning hook leaves the CALLER value on the key, in this suite (insert side) and engine-readonly-strip-caller-values.test.ts (update side);
  • lock face — LOCK 3b in engine-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:

  • before (base 7a17f3bf1, after building the dependency closure pnpm --filter '@objectstack/objectql^...' build): engine-hook-provenance-sibling-seams.test.tsTest Files 1 passed (1) · Tests 13 passed (13).
  • after (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.ts at ad84d2315 — 28 commands. 24 green, plus check:nul-bytes green. 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 saved turbo run test log, and no log was named. … running the family locally, record this gate as NOT MEASURED."
  • check:type-check-debt: "PREREQUISITE NOT MET … --re-measure cannot 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-coverage exit 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

…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
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

Nothing 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
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.

Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 7a17f3bf1e48e1e88f8e833a794e37bd40230f17packageMentionDocs.

@os-muskClaude

Copy link
Copy Markdown
CollaboratorAuthor

Landing provenance — domain:engine execution seat

Enqueued at ad84d2315.

1. The ruling's ⛔ verified by content, not by the PR's word. Triage ruled "Comment-only. Every assertion in the file stays untouched." The diff is one file, +13/−12, and every changed line is a // comment — no assertion, test name or fixture moved. The dev's own mechanical check (git diff -U0 with comment lines filtered → empty) agrees with reading the patch.

2. Clause ② — no. No new exported symbol and no new key on an already-published payload, so the mechanical floor (#14696) is not hit, and no conformance-class judgement arises: a comment inside a test file reaches no consumer. In-seat review therefore permitted; no needs:contract-review. skip-changeset is the landed precedent for a comment-and-test-only diff.

3. Governed-surface predicate, re-run on the FINAL file list — ⛔ not recalled:

node scripts/pm/check-governed-merges.mjs --test \
packages/objectql/src/engine-hook-provenance-sibling-seams.test.ts
→ 0 of 1 path(s) hit the register (5 surfaces) — NOT governed; ordinary queue landing applies.

4. Every check run green or skipped — 40 check runs read at perPage: 50, each by its own completed + conclusion, ⛔ never by an aggregate. Test Core (1/6) again the long shard (23:56:29Z → 00:16:34Z, ~20 min) and Lint & Repo Gates ~16½ min; both green.

5. Flipped draft: false, read back draft: false, then armed auto-merge SQUASH.⚠️ The API echo reads method: MERGE regardless of what is requested — a known platform artifact; the merge-queue build ref is the authoritative reading.

⚠️The flip and the arm were delayed ~25 minutes by a GitHub rate limit, and the shape is worth recording: the GraphQL pool was exhausted while REST was not. pull_request_read (REST) answered normally throughout, so CI could be read and the PR judged; update_pull_request and search_issues (GraphQL) refused. ⛔ The seat stopped retrying rather than burning quota, and the git read channel — fetch, ls-remote, grep — was unaffected the whole time. Prior sessions recorded this class of outage as "account-wide"; it is not, and the distinction decides what work can continue during one.

⭐ One correction the seat owes this card

The dispatch told the dev that isCallerSuppliedValue was not in rule-validator.ts or engine.ts — "I grepped and got nothing, so it is somewhere else." That was wrong: it is in packages/objectql/src/**validation**/rule-validator.ts, 9 hits, definition at :623, corrected docblock at :578-621. The seat's grep used a path missing the validation/ segment and ran no control, so a path typo and a real absence were indistinguishable — the exact failure the standing zero-hit rule exists to prevent, violated by the seat that wrote the rule down.

⭐ It cost nothing because the dispatch handed the claim over as a Zone 2 item to measure rather than as fact, and told the dev its pointer would be worthless if it named the wrong file. The dev found the real location and said so. That is the third time this shift a labelled-as-assumption has caught a seat error before it reached a PR.


Generated by Claude Code

@os-musk
os-musk added this pull request to the merge queueSep 3, 2026
Merged via the queue into main with commit 8f9ef6fSep 3, 2026
42 checks passed
@os-musk
os-musk deleted the claude/issue-14693-sibling-seams-stale-ruling-prose branch September 3, 2026 02:03
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-changesetPR has no user-facing published change; bypasses the changeset gatetests

Projects

None yet

2 participants

@os-musk@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

docs(objectql): point the sibling-seam prose at the recorded ruling - #14759

Merged
os-musk merged 1 commit into
mainfrom
claude/issue-14693-sibling-seams-stale-ruling-prose
Sep 3, 2026
Merged

docs(objectql): point the sibling-seam prose at the recorded ruling#14759
os-musk merged 1 commit into
mainfrom
claude/issue-14693-sibling-seams-stale-ruling-prose

Conversation

@os-musk

Copy link
Copy Markdown
Collaborator

Fixes#14693

Three passages in packages/objectql/src/engine-hook-provenance-sibling-seams.test.ts still said the readonlyWhen sibling 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 a readonlyWhen state lock, and the asymmetry with the static face is deliberate. #14690 then landed the corrected isCallerSuppliedValue docblock 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 -U0 on 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, :30 and :352 (all three re-measured unmoved on this branch's base 7a17f3bf1):

  1. The file header's "THE SIBLING SEAM IS DELIBERATELY NOT HERE" block — lines 21-30, holding the :23 and :30 lines. It now records that the seam was ruled and names where the argument lives. The measurement narrative it used to carry (threading the record turns LOCK 3b red, closed_note committing the forgery) is deliberately not repeated: it lives in the docblock and in LOCK 3b itself.
  2. The closing sentence of the MEASURED: a lone self-assigning hook leaves the CALLER value on the key block — the :352 line. "#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 in packages/objectql/src/validation/rule-validator.ts, plus the two face pins named by test name:

  • static face — MEASURED: a lone self-assigning hook leaves the CALLER value on the key, in this suite (insert side) and engine-readonly-strip-caller-values.test.ts (update side);
  • lock face — LOCK 3b in engine-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:

  • before (base 7a17f3bf1, after building the dependency closure pnpm --filter '@objectstack/objectql^...' build): engine-hook-provenance-sibling-seams.test.tsTest Files 1 passed (1) · Tests 13 passed (13).
  • after (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.ts at ad84d2315 — 28 commands. 24 green, plus check:nul-bytes green. 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 saved turbo run test log, and no log was named. … running the family locally, record this gate as NOT MEASURED."
  • check:type-check-debt: "PREREQUISITE NOT MET … --re-measure cannot 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-coverage exit 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

…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
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

Nothing 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
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.

Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 7a17f3bf1e48e1e88f8e833a794e37bd40230f17packageMentionDocs.

@os-muskClaude

Copy link
Copy Markdown
CollaboratorAuthor

Landing provenance — domain:engine execution seat

Enqueued at ad84d2315.

1. The ruling's ⛔ verified by content, not by the PR's word. Triage ruled "Comment-only. Every assertion in the file stays untouched." The diff is one file, +13/−12, and every changed line is a // comment — no assertion, test name or fixture moved. The dev's own mechanical check (git diff -U0 with comment lines filtered → empty) agrees with reading the patch.

2. Clause ② — no. No new exported symbol and no new key on an already-published payload, so the mechanical floor (#14696) is not hit, and no conformance-class judgement arises: a comment inside a test file reaches no consumer. In-seat review therefore permitted; no needs:contract-review. skip-changeset is the landed precedent for a comment-and-test-only diff.

3. Governed-surface predicate, re-run on the FINAL file list — ⛔ not recalled:

node scripts/pm/check-governed-merges.mjs --test \
packages/objectql/src/engine-hook-provenance-sibling-seams.test.ts
→ 0 of 1 path(s) hit the register (5 surfaces) — NOT governed; ordinary queue landing applies.

4. Every check run green or skipped — 40 check runs read at perPage: 50, each by its own completed + conclusion, ⛔ never by an aggregate. Test Core (1/6) again the long shard (23:56:29Z → 00:16:34Z, ~20 min) and Lint & Repo Gates ~16½ min; both green.

5. Flipped draft: false, read back draft: false, then armed auto-merge SQUASH.⚠️ The API echo reads method: MERGE regardless of what is requested — a known platform artifact; the merge-queue build ref is the authoritative reading.

⚠️The flip and the arm were delayed ~25 minutes by a GitHub rate limit, and the shape is worth recording: the GraphQL pool was exhausted while REST was not. pull_request_read (REST) answered normally throughout, so CI could be read and the PR judged; update_pull_request and search_issues (GraphQL) refused. ⛔ The seat stopped retrying rather than burning quota, and the git read channel — fetch, ls-remote, grep — was unaffected the whole time. Prior sessions recorded this class of outage as "account-wide"; it is not, and the distinction decides what work can continue during one.

⭐ One correction the seat owes this card

The dispatch told the dev that isCallerSuppliedValue was not in rule-validator.ts or engine.ts — "I grepped and got nothing, so it is somewhere else." That was wrong: it is in packages/objectql/src/**validation**/rule-validator.ts, 9 hits, definition at :623, corrected docblock at :578-621. The seat's grep used a path missing the validation/ segment and ran no control, so a path typo and a real absence were indistinguishable — the exact failure the standing zero-hit rule exists to prevent, violated by the seat that wrote the rule down.

⭐ It cost nothing because the dispatch handed the claim over as a Zone 2 item to measure rather than as fact, and told the dev its pointer would be worthless if it named the wrong file. The dev found the real location and said so. That is the third time this shift a labelled-as-assumption has caught a seat error before it reached a PR.


Generated by Claude Code

@os-musk
os-musk added this pull request to the merge queueSep 3, 2026
Merged via the queue into main with commit 8f9ef6fSep 3, 2026
42 checks passed
@os-musk
os-musk deleted the claude/issue-14693-sibling-seams-stale-ruling-prose branch September 3, 2026 02:03
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-changesetPR has no user-facing published change; bypasses the changeset gatetests

Projects

None yet

2 participants

@os-musk@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs(objectql): point the sibling-seam prose at the recorded ruling - #14759

Merged
os-musk merged 1 commit into
mainfrom
claude/issue-14693-sibling-seams-stale-ruling-prose
Sep 3, 2026
Merged

docs(objectql): point the sibling-seam prose at the recorded ruling#14759
os-musk merged 1 commit into
mainfrom
claude/issue-14693-sibling-seams-stale-ruling-prose

Conversation

@os-musk

Copy link
Copy Markdown
Collaborator

Fixes#14693

Three passages in packages/objectql/src/engine-hook-provenance-sibling-seams.test.ts still said the readonlyWhen sibling 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 a readonlyWhen state lock, and the asymmetry with the static face is deliberate. #14690 then landed the corrected isCallerSuppliedValue docblock 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 -U0 on 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, :30 and :352 (all three re-measured unmoved on this branch's base 7a17f3bf1):

  1. The file header's "THE SIBLING SEAM IS DELIBERATELY NOT HERE" block — lines 21-30, holding the :23 and :30 lines. It now records that the seam was ruled and names where the argument lives. The measurement narrative it used to carry (threading the record turns LOCK 3b red, closed_note committing the forgery) is deliberately not repeated: it lives in the docblock and in LOCK 3b itself.
  2. The closing sentence of the MEASURED: a lone self-assigning hook leaves the CALLER value on the key block — the :352 line. "#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 in packages/objectql/src/validation/rule-validator.ts, plus the two face pins named by test name:

  • static face — MEASURED: a lone self-assigning hook leaves the CALLER value on the key, in this suite (insert side) and engine-readonly-strip-caller-values.test.ts (update side);
  • lock face — LOCK 3b in engine-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:

  • before (base 7a17f3bf1, after building the dependency closure pnpm --filter '@objectstack/objectql^...' build): engine-hook-provenance-sibling-seams.test.tsTest Files 1 passed (1) · Tests 13 passed (13).
  • after (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.ts at ad84d2315 — 28 commands. 24 green, plus check:nul-bytes green. 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 saved turbo run test log, and no log was named. … running the family locally, record this gate as NOT MEASURED."
  • check:type-check-debt: "PREREQUISITE NOT MET … --re-measure cannot 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-coverage exit 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

…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
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

Nothing 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
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.

Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 7a17f3bf1e48e1e88f8e833a794e37bd40230f17packageMentionDocs.

@os-muskClaude

Copy link
Copy Markdown
CollaboratorAuthor

Landing provenance — domain:engine execution seat

Enqueued at ad84d2315.

1. The ruling's ⛔ verified by content, not by the PR's word. Triage ruled "Comment-only. Every assertion in the file stays untouched." The diff is one file, +13/−12, and every changed line is a // comment — no assertion, test name or fixture moved. The dev's own mechanical check (git diff -U0 with comment lines filtered → empty) agrees with reading the patch.

2. Clause ② — no. No new exported symbol and no new key on an already-published payload, so the mechanical floor (#14696) is not hit, and no conformance-class judgement arises: a comment inside a test file reaches no consumer. In-seat review therefore permitted; no needs:contract-review. skip-changeset is the landed precedent for a comment-and-test-only diff.

3. Governed-surface predicate, re-run on the FINAL file list — ⛔ not recalled:

node scripts/pm/check-governed-merges.mjs --test \
packages/objectql/src/engine-hook-provenance-sibling-seams.test.ts
→ 0 of 1 path(s) hit the register (5 surfaces) — NOT governed; ordinary queue landing applies.

4. Every check run green or skipped — 40 check runs read at perPage: 50, each by its own completed + conclusion, ⛔ never by an aggregate. Test Core (1/6) again the long shard (23:56:29Z → 00:16:34Z, ~20 min) and Lint & Repo Gates ~16½ min; both green.

5. Flipped draft: false, read back draft: false, then armed auto-merge SQUASH.⚠️ The API echo reads method: MERGE regardless of what is requested — a known platform artifact; the merge-queue build ref is the authoritative reading.

⚠️The flip and the arm were delayed ~25 minutes by a GitHub rate limit, and the shape is worth recording: the GraphQL pool was exhausted while REST was not. pull_request_read (REST) answered normally throughout, so CI could be read and the PR judged; update_pull_request and search_issues (GraphQL) refused. ⛔ The seat stopped retrying rather than burning quota, and the git read channel — fetch, ls-remote, grep — was unaffected the whole time. Prior sessions recorded this class of outage as "account-wide"; it is not, and the distinction decides what work can continue during one.

⭐ One correction the seat owes this card

The dispatch told the dev that isCallerSuppliedValue was not in rule-validator.ts or engine.ts — "I grepped and got nothing, so it is somewhere else." That was wrong: it is in packages/objectql/src/**validation**/rule-validator.ts, 9 hits, definition at :623, corrected docblock at :578-621. The seat's grep used a path missing the validation/ segment and ran no control, so a path typo and a real absence were indistinguishable — the exact failure the standing zero-hit rule exists to prevent, violated by the seat that wrote the rule down.

⭐ It cost nothing because the dispatch handed the claim over as a Zone 2 item to measure rather than as fact, and told the dev its pointer would be worthless if it named the wrong file. The dev found the real location and said so. That is the third time this shift a labelled-as-assumption has caught a seat error before it reached a PR.


Generated by Claude Code

@os-musk
os-musk added this pull request to the merge queueSep 3, 2026
Merged via the queue into main with commit 8f9ef6fSep 3, 2026
42 checks passed
@os-musk
os-musk deleted the claude/issue-14693-sibling-seams-stale-ruling-prose branch September 3, 2026 02:03
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-changesetPR has no user-facing published change; bypasses the changeset gatetests

Projects

None yet

2 participants

@os-musk@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs(objectql): point the sibling-seam prose at the recorded ruling - #14759

Merged
os-musk merged 1 commit into
mainfrom
claude/issue-14693-sibling-seams-stale-ruling-prose
Sep 3, 2026
Merged

docs(objectql): point the sibling-seam prose at the recorded ruling#14759
os-musk merged 1 commit into
mainfrom
claude/issue-14693-sibling-seams-stale-ruling-prose

Conversation

@os-musk

Copy link
Copy Markdown
Collaborator

Fixes#14693

Three passages in packages/objectql/src/engine-hook-provenance-sibling-seams.test.ts still said the readonlyWhen sibling 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 a readonlyWhen state lock, and the asymmetry with the static face is deliberate. #14690 then landed the corrected isCallerSuppliedValue docblock 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 -U0 on 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, :30 and :352 (all three re-measured unmoved on this branch's base 7a17f3bf1):

  1. The file header's "THE SIBLING SEAM IS DELIBERATELY NOT HERE" block — lines 21-30, holding the :23 and :30 lines. It now records that the seam was ruled and names where the argument lives. The measurement narrative it used to carry (threading the record turns LOCK 3b red, closed_note committing the forgery) is deliberately not repeated: it lives in the docblock and in LOCK 3b itself.
  2. The closing sentence of the MEASURED: a lone self-assigning hook leaves the CALLER value on the key block — the :352 line. "#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 in packages/objectql/src/validation/rule-validator.ts, plus the two face pins named by test name:

  • static face — MEASURED: a lone self-assigning hook leaves the CALLER value on the key, in this suite (insert side) and engine-readonly-strip-caller-values.test.ts (update side);
  • lock face — LOCK 3b in engine-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:

  • before (base 7a17f3bf1, after building the dependency closure pnpm --filter '@objectstack/objectql^...' build): engine-hook-provenance-sibling-seams.test.tsTest Files 1 passed (1) · Tests 13 passed (13).
  • after (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.ts at ad84d2315 — 28 commands. 24 green, plus check:nul-bytes green. 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 saved turbo run test log, and no log was named. … running the family locally, record this gate as NOT MEASURED."
  • check:type-check-debt: "PREREQUISITE NOT MET … --re-measure cannot 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-coverage exit 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

…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
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

Nothing 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
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.

Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 7a17f3bf1e48e1e88f8e833a794e37bd40230f17packageMentionDocs.

@os-muskClaude

Copy link
Copy Markdown
CollaboratorAuthor

Landing provenance — domain:engine execution seat

Enqueued at ad84d2315.

1. The ruling's ⛔ verified by content, not by the PR's word. Triage ruled "Comment-only. Every assertion in the file stays untouched." The diff is one file, +13/−12, and every changed line is a // comment — no assertion, test name or fixture moved. The dev's own mechanical check (git diff -U0 with comment lines filtered → empty) agrees with reading the patch.

2. Clause ② — no. No new exported symbol and no new key on an already-published payload, so the mechanical floor (#14696) is not hit, and no conformance-class judgement arises: a comment inside a test file reaches no consumer. In-seat review therefore permitted; no needs:contract-review. skip-changeset is the landed precedent for a comment-and-test-only diff.

3. Governed-surface predicate, re-run on the FINAL file list — ⛔ not recalled:

node scripts/pm/check-governed-merges.mjs --test \
packages/objectql/src/engine-hook-provenance-sibling-seams.test.ts
→ 0 of 1 path(s) hit the register (5 surfaces) — NOT governed; ordinary queue landing applies.

4. Every check run green or skipped — 40 check runs read at perPage: 50, each by its own completed + conclusion, ⛔ never by an aggregate. Test Core (1/6) again the long shard (23:56:29Z → 00:16:34Z, ~20 min) and Lint & Repo Gates ~16½ min; both green.

5. Flipped draft: false, read back draft: false, then armed auto-merge SQUASH.⚠️ The API echo reads method: MERGE regardless of what is requested — a known platform artifact; the merge-queue build ref is the authoritative reading.

⚠️The flip and the arm were delayed ~25 minutes by a GitHub rate limit, and the shape is worth recording: the GraphQL pool was exhausted while REST was not. pull_request_read (REST) answered normally throughout, so CI could be read and the PR judged; update_pull_request and search_issues (GraphQL) refused. ⛔ The seat stopped retrying rather than burning quota, and the git read channel — fetch, ls-remote, grep — was unaffected the whole time. Prior sessions recorded this class of outage as "account-wide"; it is not, and the distinction decides what work can continue during one.

⭐ One correction the seat owes this card

The dispatch told the dev that isCallerSuppliedValue was not in rule-validator.ts or engine.ts — "I grepped and got nothing, so it is somewhere else." That was wrong: it is in packages/objectql/src/**validation**/rule-validator.ts, 9 hits, definition at :623, corrected docblock at :578-621. The seat's grep used a path missing the validation/ segment and ran no control, so a path typo and a real absence were indistinguishable — the exact failure the standing zero-hit rule exists to prevent, violated by the seat that wrote the rule down.

⭐ It cost nothing because the dispatch handed the claim over as a Zone 2 item to measure rather than as fact, and told the dev its pointer would be worthless if it named the wrong file. The dev found the real location and said so. That is the third time this shift a labelled-as-assumption has caught a seat error before it reached a PR.


Generated by Claude Code

@os-musk
os-musk added this pull request to the merge queueSep 3, 2026
Merged via the queue into main with commit 8f9ef6fSep 3, 2026
42 checks passed
@os-musk
os-musk deleted the claude/issue-14693-sibling-seams-stale-ruling-prose branch September 3, 2026 02:03
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-changesetPR has no user-facing published change; bypasses the changeset gatetests

Projects

None yet

2 participants

@os-musk@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

docs(objectql): point the sibling-seam prose at the recorded ruling - #14759

Merged
os-musk merged 1 commit into
mainfrom
claude/issue-14693-sibling-seams-stale-ruling-prose
Sep 3, 2026
Merged

docs(objectql): point the sibling-seam prose at the recorded ruling#14759
os-musk merged 1 commit into
mainfrom
claude/issue-14693-sibling-seams-stale-ruling-prose

Conversation

@os-musk

Copy link
Copy Markdown
Collaborator

Fixes#14693

Three passages in packages/objectql/src/engine-hook-provenance-sibling-seams.test.ts still said the readonlyWhen sibling 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 a readonlyWhen state lock, and the asymmetry with the static face is deliberate. #14690 then landed the corrected isCallerSuppliedValue docblock 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 -U0 on 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, :30 and :352 (all three re-measured unmoved on this branch's base 7a17f3bf1):

  1. The file header's "THE SIBLING SEAM IS DELIBERATELY NOT HERE" block — lines 21-30, holding the :23 and :30 lines. It now records that the seam was ruled and names where the argument lives. The measurement narrative it used to carry (threading the record turns LOCK 3b red, closed_note committing the forgery) is deliberately not repeated: it lives in the docblock and in LOCK 3b itself.
  2. The closing sentence of the MEASURED: a lone self-assigning hook leaves the CALLER value on the key block — the :352 line. "#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 in packages/objectql/src/validation/rule-validator.ts, plus the two face pins named by test name:

  • static face — MEASURED: a lone self-assigning hook leaves the CALLER value on the key, in this suite (insert side) and engine-readonly-strip-caller-values.test.ts (update side);
  • lock face — LOCK 3b in engine-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:

  • before (base 7a17f3bf1, after building the dependency closure pnpm --filter '@objectstack/objectql^...' build): engine-hook-provenance-sibling-seams.test.tsTest Files 1 passed (1) · Tests 13 passed (13).
  • after (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.ts at ad84d2315 — 28 commands. 24 green, plus check:nul-bytes green. 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 saved turbo run test log, and no log was named. … running the family locally, record this gate as NOT MEASURED."
  • check:type-check-debt: "PREREQUISITE NOT MET … --re-measure cannot 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-coverage exit 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

…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
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

Nothing 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
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.

Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 7a17f3bf1e48e1e88f8e833a794e37bd40230f17packageMentionDocs.

@os-muskClaude

Copy link
Copy Markdown
CollaboratorAuthor

Landing provenance — domain:engine execution seat

Enqueued at ad84d2315.

1. The ruling's ⛔ verified by content, not by the PR's word. Triage ruled "Comment-only. Every assertion in the file stays untouched." The diff is one file, +13/−12, and every changed line is a // comment — no assertion, test name or fixture moved. The dev's own mechanical check (git diff -U0 with comment lines filtered → empty) agrees with reading the patch.

2. Clause ② — no. No new exported symbol and no new key on an already-published payload, so the mechanical floor (#14696) is not hit, and no conformance-class judgement arises: a comment inside a test file reaches no consumer. In-seat review therefore permitted; no needs:contract-review. skip-changeset is the landed precedent for a comment-and-test-only diff.

3. Governed-surface predicate, re-run on the FINAL file list — ⛔ not recalled:

node scripts/pm/check-governed-merges.mjs --test \
packages/objectql/src/engine-hook-provenance-sibling-seams.test.ts
→ 0 of 1 path(s) hit the register (5 surfaces) — NOT governed; ordinary queue landing applies.

4. Every check run green or skipped — 40 check runs read at perPage: 50, each by its own completed + conclusion, ⛔ never by an aggregate. Test Core (1/6) again the long shard (23:56:29Z → 00:16:34Z, ~20 min) and Lint & Repo Gates ~16½ min; both green.

5. Flipped draft: false, read back draft: false, then armed auto-merge SQUASH.⚠️ The API echo reads method: MERGE regardless of what is requested — a known platform artifact; the merge-queue build ref is the authoritative reading.

⚠️The flip and the arm were delayed ~25 minutes by a GitHub rate limit, and the shape is worth recording: the GraphQL pool was exhausted while REST was not. pull_request_read (REST) answered normally throughout, so CI could be read and the PR judged; update_pull_request and search_issues (GraphQL) refused. ⛔ The seat stopped retrying rather than burning quota, and the git read channel — fetch, ls-remote, grep — was unaffected the whole time. Prior sessions recorded this class of outage as "account-wide"; it is not, and the distinction decides what work can continue during one.

⭐ One correction the seat owes this card

The dispatch told the dev that isCallerSuppliedValue was not in rule-validator.ts or engine.ts — "I grepped and got nothing, so it is somewhere else." That was wrong: it is in packages/objectql/src/**validation**/rule-validator.ts, 9 hits, definition at :623, corrected docblock at :578-621. The seat's grep used a path missing the validation/ segment and ran no control, so a path typo and a real absence were indistinguishable — the exact failure the standing zero-hit rule exists to prevent, violated by the seat that wrote the rule down.

⭐ It cost nothing because the dispatch handed the claim over as a Zone 2 item to measure rather than as fact, and told the dev its pointer would be worthless if it named the wrong file. The dev found the real location and said so. That is the third time this shift a labelled-as-assumption has caught a seat error before it reached a PR.


Generated by Claude Code

@os-musk
os-musk added this pull request to the merge queueSep 3, 2026
Merged via the queue into main with commit 8f9ef6fSep 3, 2026
42 checks passed
@os-musk
os-musk deleted the claude/issue-14693-sibling-seams-stale-ruling-prose branch September 3, 2026 02:03
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-changesetPR has no user-facing published change; bypasses the changeset gatetests

Projects

None yet

2 participants

@os-musk@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs(objectql): point the sibling-seam prose at the recorded ruling - #14759

Merged
os-musk merged 1 commit into
mainfrom
claude/issue-14693-sibling-seams-stale-ruling-prose
Sep 3, 2026
Merged

docs(objectql): point the sibling-seam prose at the recorded ruling#14759
os-musk merged 1 commit into
mainfrom
claude/issue-14693-sibling-seams-stale-ruling-prose

Conversation

@os-musk

Copy link
Copy Markdown
Collaborator

Fixes#14693

Three passages in packages/objectql/src/engine-hook-provenance-sibling-seams.test.ts still said the readonlyWhen sibling 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 a readonlyWhen state lock, and the asymmetry with the static face is deliberate. #14690 then landed the corrected isCallerSuppliedValue docblock 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 -U0 on 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, :30 and :352 (all three re-measured unmoved on this branch's base 7a17f3bf1):

  1. The file header's "THE SIBLING SEAM IS DELIBERATELY NOT HERE" block — lines 21-30, holding the :23 and :30 lines. It now records that the seam was ruled and names where the argument lives. The measurement narrative it used to carry (threading the record turns LOCK 3b red, closed_note committing the forgery) is deliberately not repeated: it lives in the docblock and in LOCK 3b itself.
  2. The closing sentence of the MEASURED: a lone self-assigning hook leaves the CALLER value on the key block — the :352 line. "#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 in packages/objectql/src/validation/rule-validator.ts, plus the two face pins named by test name:

  • static face — MEASURED: a lone self-assigning hook leaves the CALLER value on the key, in this suite (insert side) and engine-readonly-strip-caller-values.test.ts (update side);
  • lock face — LOCK 3b in engine-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:

  • before (base 7a17f3bf1, after building the dependency closure pnpm --filter '@objectstack/objectql^...' build): engine-hook-provenance-sibling-seams.test.tsTest Files 1 passed (1) · Tests 13 passed (13).
  • after (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.ts at ad84d2315 — 28 commands. 24 green, plus check:nul-bytes green. 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 saved turbo run test log, and no log was named. … running the family locally, record this gate as NOT MEASURED."
  • check:type-check-debt: "PREREQUISITE NOT MET … --re-measure cannot 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-coverage exit 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

…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
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

Nothing 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
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.

Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 7a17f3bf1e48e1e88f8e833a794e37bd40230f17packageMentionDocs.

@os-muskClaude

Copy link
Copy Markdown
CollaboratorAuthor

Landing provenance — domain:engine execution seat

Enqueued at ad84d2315.

1. The ruling's ⛔ verified by content, not by the PR's word. Triage ruled "Comment-only. Every assertion in the file stays untouched." The diff is one file, +13/−12, and every changed line is a // comment — no assertion, test name or fixture moved. The dev's own mechanical check (git diff -U0 with comment lines filtered → empty) agrees with reading the patch.

2. Clause ② — no. No new exported symbol and no new key on an already-published payload, so the mechanical floor (#14696) is not hit, and no conformance-class judgement arises: a comment inside a test file reaches no consumer. In-seat review therefore permitted; no needs:contract-review. skip-changeset is the landed precedent for a comment-and-test-only diff.

3. Governed-surface predicate, re-run on the FINAL file list — ⛔ not recalled:

node scripts/pm/check-governed-merges.mjs --test \
packages/objectql/src/engine-hook-provenance-sibling-seams.test.ts
→ 0 of 1 path(s) hit the register (5 surfaces) — NOT governed; ordinary queue landing applies.

4. Every check run green or skipped — 40 check runs read at perPage: 50, each by its own completed + conclusion, ⛔ never by an aggregate. Test Core (1/6) again the long shard (23:56:29Z → 00:16:34Z, ~20 min) and Lint & Repo Gates ~16½ min; both green.

5. Flipped draft: false, read back draft: false, then armed auto-merge SQUASH.⚠️ The API echo reads method: MERGE regardless of what is requested — a known platform artifact; the merge-queue build ref is the authoritative reading.

⚠️The flip and the arm were delayed ~25 minutes by a GitHub rate limit, and the shape is worth recording: the GraphQL pool was exhausted while REST was not. pull_request_read (REST) answered normally throughout, so CI could be read and the PR judged; update_pull_request and search_issues (GraphQL) refused. ⛔ The seat stopped retrying rather than burning quota, and the git read channel — fetch, ls-remote, grep — was unaffected the whole time. Prior sessions recorded this class of outage as "account-wide"; it is not, and the distinction decides what work can continue during one.

⭐ One correction the seat owes this card

The dispatch told the dev that isCallerSuppliedValue was not in rule-validator.ts or engine.ts — "I grepped and got nothing, so it is somewhere else." That was wrong: it is in packages/objectql/src/**validation**/rule-validator.ts, 9 hits, definition at :623, corrected docblock at :578-621. The seat's grep used a path missing the validation/ segment and ran no control, so a path typo and a real absence were indistinguishable — the exact failure the standing zero-hit rule exists to prevent, violated by the seat that wrote the rule down.

⭐ It cost nothing because the dispatch handed the claim over as a Zone 2 item to measure rather than as fact, and told the dev its pointer would be worthless if it named the wrong file. The dev found the real location and said so. That is the third time this shift a labelled-as-assumption has caught a seat error before it reached a PR.


Generated by Claude Code

@os-musk
os-musk added this pull request to the merge queueSep 3, 2026
Merged via the queue into main with commit 8f9ef6fSep 3, 2026
42 checks passed
@os-musk
os-musk deleted the claude/issue-14693-sibling-seams-stale-ruling-prose branch September 3, 2026 02:03
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-changesetPR has no user-facing published change; bypasses the changeset gatetests

Projects

None yet

2 participants

@os-musk@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs(objectql): point the sibling-seam prose at the recorded ruling - #14759

Merged
os-musk merged 1 commit into
mainfrom
claude/issue-14693-sibling-seams-stale-ruling-prose
Sep 3, 2026
Merged

docs(objectql): point the sibling-seam prose at the recorded ruling#14759
os-musk merged 1 commit into
mainfrom
claude/issue-14693-sibling-seams-stale-ruling-prose

Conversation

@os-musk

Copy link
Copy Markdown
Collaborator

Fixes#14693

Three passages in packages/objectql/src/engine-hook-provenance-sibling-seams.test.ts still said the readonlyWhen sibling 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 a readonlyWhen state lock, and the asymmetry with the static face is deliberate. #14690 then landed the corrected isCallerSuppliedValue docblock 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 -U0 on 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, :30 and :352 (all three re-measured unmoved on this branch's base 7a17f3bf1):

  1. The file header's "THE SIBLING SEAM IS DELIBERATELY NOT HERE" block — lines 21-30, holding the :23 and :30 lines. It now records that the seam was ruled and names where the argument lives. The measurement narrative it used to carry (threading the record turns LOCK 3b red, closed_note committing the forgery) is deliberately not repeated: it lives in the docblock and in LOCK 3b itself.
  2. The closing sentence of the MEASURED: a lone self-assigning hook leaves the CALLER value on the key block — the :352 line. "#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 in packages/objectql/src/validation/rule-validator.ts, plus the two face pins named by test name:

  • static face — MEASURED: a lone self-assigning hook leaves the CALLER value on the key, in this suite (insert side) and engine-readonly-strip-caller-values.test.ts (update side);
  • lock face — LOCK 3b in engine-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:

  • before (base 7a17f3bf1, after building the dependency closure pnpm --filter '@objectstack/objectql^...' build): engine-hook-provenance-sibling-seams.test.tsTest Files 1 passed (1) · Tests 13 passed (13).
  • after (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.ts at ad84d2315 — 28 commands. 24 green, plus check:nul-bytes green. 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 saved turbo run test log, and no log was named. … running the family locally, record this gate as NOT MEASURED."
  • check:type-check-debt: "PREREQUISITE NOT MET … --re-measure cannot 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-coverage exit 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

…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
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

Nothing 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
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.

Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 7a17f3bf1e48e1e88f8e833a794e37bd40230f17packageMentionDocs.

@os-muskClaude

Copy link
Copy Markdown
CollaboratorAuthor

Landing provenance — domain:engine execution seat

Enqueued at ad84d2315.

1. The ruling's ⛔ verified by content, not by the PR's word. Triage ruled "Comment-only. Every assertion in the file stays untouched." The diff is one file, +13/−12, and every changed line is a // comment — no assertion, test name or fixture moved. The dev's own mechanical check (git diff -U0 with comment lines filtered → empty) agrees with reading the patch.

2. Clause ② — no. No new exported symbol and no new key on an already-published payload, so the mechanical floor (#14696) is not hit, and no conformance-class judgement arises: a comment inside a test file reaches no consumer. In-seat review therefore permitted; no needs:contract-review. skip-changeset is the landed precedent for a comment-and-test-only diff.

3. Governed-surface predicate, re-run on the FINAL file list — ⛔ not recalled:

node scripts/pm/check-governed-merges.mjs --test \
packages/objectql/src/engine-hook-provenance-sibling-seams.test.ts
→ 0 of 1 path(s) hit the register (5 surfaces) — NOT governed; ordinary queue landing applies.

4. Every check run green or skipped — 40 check runs read at perPage: 50, each by its own completed + conclusion, ⛔ never by an aggregate. Test Core (1/6) again the long shard (23:56:29Z → 00:16:34Z, ~20 min) and Lint & Repo Gates ~16½ min; both green.

5. Flipped draft: false, read back draft: false, then armed auto-merge SQUASH.⚠️ The API echo reads method: MERGE regardless of what is requested — a known platform artifact; the merge-queue build ref is the authoritative reading.

⚠️The flip and the arm were delayed ~25 minutes by a GitHub rate limit, and the shape is worth recording: the GraphQL pool was exhausted while REST was not. pull_request_read (REST) answered normally throughout, so CI could be read and the PR judged; update_pull_request and search_issues (GraphQL) refused. ⛔ The seat stopped retrying rather than burning quota, and the git read channel — fetch, ls-remote, grep — was unaffected the whole time. Prior sessions recorded this class of outage as "account-wide"; it is not, and the distinction decides what work can continue during one.

⭐ One correction the seat owes this card

The dispatch told the dev that isCallerSuppliedValue was not in rule-validator.ts or engine.ts — "I grepped and got nothing, so it is somewhere else." That was wrong: it is in packages/objectql/src/**validation**/rule-validator.ts, 9 hits, definition at :623, corrected docblock at :578-621. The seat's grep used a path missing the validation/ segment and ran no control, so a path typo and a real absence were indistinguishable — the exact failure the standing zero-hit rule exists to prevent, violated by the seat that wrote the rule down.

⭐ It cost nothing because the dispatch handed the claim over as a Zone 2 item to measure rather than as fact, and told the dev its pointer would be worthless if it named the wrong file. The dev found the real location and said so. That is the third time this shift a labelled-as-assumption has caught a seat error before it reached a PR.


Generated by Claude Code

@os-musk
os-musk added this pull request to the merge queueSep 3, 2026
Merged via the queue into main with commit 8f9ef6fSep 3, 2026
42 checks passed
@os-musk
os-musk deleted the claude/issue-14693-sibling-seams-stale-ruling-prose branch September 3, 2026 02:03
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-changesetPR has no user-facing published change; bypasses the changeset gatetests

Projects

None yet

2 participants

@os-musk@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

docs(objectql): point the sibling-seam prose at the recorded ruling - #14759

Merged
os-musk merged 1 commit into
mainfrom
claude/issue-14693-sibling-seams-stale-ruling-prose
Sep 3, 2026
Merged

docs(objectql): point the sibling-seam prose at the recorded ruling#14759
os-musk merged 1 commit into
mainfrom
claude/issue-14693-sibling-seams-stale-ruling-prose

Conversation

@os-musk

Copy link
Copy Markdown
Collaborator

Fixes#14693

Three passages in packages/objectql/src/engine-hook-provenance-sibling-seams.test.ts still said the readonlyWhen sibling 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 a readonlyWhen state lock, and the asymmetry with the static face is deliberate. #14690 then landed the corrected isCallerSuppliedValue docblock 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 -U0 on 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, :30 and :352 (all three re-measured unmoved on this branch's base 7a17f3bf1):

  1. The file header's "THE SIBLING SEAM IS DELIBERATELY NOT HERE" block — lines 21-30, holding the :23 and :30 lines. It now records that the seam was ruled and names where the argument lives. The measurement narrative it used to carry (threading the record turns LOCK 3b red, closed_note committing the forgery) is deliberately not repeated: it lives in the docblock and in LOCK 3b itself.
  2. The closing sentence of the MEASURED: a lone self-assigning hook leaves the CALLER value on the key block — the :352 line. "#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 in packages/objectql/src/validation/rule-validator.ts, plus the two face pins named by test name:

  • static face — MEASURED: a lone self-assigning hook leaves the CALLER value on the key, in this suite (insert side) and engine-readonly-strip-caller-values.test.ts (update side);
  • lock face — LOCK 3b in engine-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:

  • before (base 7a17f3bf1, after building the dependency closure pnpm --filter '@objectstack/objectql^...' build): engine-hook-provenance-sibling-seams.test.tsTest Files 1 passed (1) · Tests 13 passed (13).
  • after (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.ts at ad84d2315 — 28 commands. 24 green, plus check:nul-bytes green. 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 saved turbo run test log, and no log was named. … running the family locally, record this gate as NOT MEASURED."
  • check:type-check-debt: "PREREQUISITE NOT MET … --re-measure cannot 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-coverage exit 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

…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
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

Nothing 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
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.

Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 7a17f3bf1e48e1e88f8e833a794e37bd40230f17packageMentionDocs.

@os-muskClaude

Copy link
Copy Markdown
CollaboratorAuthor

Landing provenance — domain:engine execution seat

Enqueued at ad84d2315.

1. The ruling's ⛔ verified by content, not by the PR's word. Triage ruled "Comment-only. Every assertion in the file stays untouched." The diff is one file, +13/−12, and every changed line is a // comment — no assertion, test name or fixture moved. The dev's own mechanical check (git diff -U0 with comment lines filtered → empty) agrees with reading the patch.

2. Clause ② — no. No new exported symbol and no new key on an already-published payload, so the mechanical floor (#14696) is not hit, and no conformance-class judgement arises: a comment inside a test file reaches no consumer. In-seat review therefore permitted; no needs:contract-review. skip-changeset is the landed precedent for a comment-and-test-only diff.

3. Governed-surface predicate, re-run on the FINAL file list — ⛔ not recalled:

node scripts/pm/check-governed-merges.mjs --test \
packages/objectql/src/engine-hook-provenance-sibling-seams.test.ts
→ 0 of 1 path(s) hit the register (5 surfaces) — NOT governed; ordinary queue landing applies.

4. Every check run green or skipped — 40 check runs read at perPage: 50, each by its own completed + conclusion, ⛔ never by an aggregate. Test Core (1/6) again the long shard (23:56:29Z → 00:16:34Z, ~20 min) and Lint & Repo Gates ~16½ min; both green.

5. Flipped draft: false, read back draft: false, then armed auto-merge SQUASH.⚠️ The API echo reads method: MERGE regardless of what is requested — a known platform artifact; the merge-queue build ref is the authoritative reading.

⚠️The flip and the arm were delayed ~25 minutes by a GitHub rate limit, and the shape is worth recording: the GraphQL pool was exhausted while REST was not. pull_request_read (REST) answered normally throughout, so CI could be read and the PR judged; update_pull_request and search_issues (GraphQL) refused. ⛔ The seat stopped retrying rather than burning quota, and the git read channel — fetch, ls-remote, grep — was unaffected the whole time. Prior sessions recorded this class of outage as "account-wide"; it is not, and the distinction decides what work can continue during one.

⭐ One correction the seat owes this card

The dispatch told the dev that isCallerSuppliedValue was not in rule-validator.ts or engine.ts — "I grepped and got nothing, so it is somewhere else." That was wrong: it is in packages/objectql/src/**validation**/rule-validator.ts, 9 hits, definition at :623, corrected docblock at :578-621. The seat's grep used a path missing the validation/ segment and ran no control, so a path typo and a real absence were indistinguishable — the exact failure the standing zero-hit rule exists to prevent, violated by the seat that wrote the rule down.

⭐ It cost nothing because the dispatch handed the claim over as a Zone 2 item to measure rather than as fact, and told the dev its pointer would be worthless if it named the wrong file. The dev found the real location and said so. That is the third time this shift a labelled-as-assumption has caught a seat error before it reached a PR.


Generated by Claude Code

@os-musk
os-musk added this pull request to the merge queueSep 3, 2026
Merged via the queue into main with commit 8f9ef6fSep 3, 2026
42 checks passed
@os-musk
os-musk deleted the claude/issue-14693-sibling-seams-stale-ruling-prose branch September 3, 2026 02:03
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-changesetPR has no user-facing published change; bypasses the changeset gatetests

Projects

None yet

2 participants

@os-musk@claude