Uh oh!
There was an error while loading. Please reload this page.
fix(objectql): pin the SEARCH-axis remedy agreement and correct the three word-identity comments (#8648) - #8763
Conversation
…three comments that claimed word-identity (#8648) Three comments asserted the SEARCH-axis refusal is worded identically to the SORT/FILTER ones, and one of them also asserted the conformance pin enforces it. Measured from the running doors, neither held: SEARCH emits "Mirror the computed value onto a stored text field on '<object>' and search that instead.", which cannot match the "Denormalise the value onto '<object>' (a stored field, written when the source changes) and " stem the pin asserted across its four SORT/FILTER doors. Declared-not-enforced, landing on the refusal vocabulary. - Comments corrected to claim SUBSTANCE agreement (put the value on a stored column of the queried object and query that instead), which is what actually holds across all three axes. - The agreement pin now covers five doors in three layers: the four stem-sharing doors compared emitted-vs-emitted via their longest common prefix, each axis' exact emitted sentence (SEARCH included), and the substance any future rewording must keep. - The shipped SEARCH message is UNCHANGED; its divergence is pinned as deliberate. Comment and test lines only, no runtime-behaviour lines. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XeQRiAa7vYRVX5Fog7Zby8
…rch-axis-remedy-pin
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
📓 Docs Drift CheckThis PR changes 2 package(s): 16 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:
⛔ 2 release-owned page(s) also reference the affected code. These are read-only:
|
Uh oh!
There was an error while loading. Please reload this page.
Fixes#8648
Three source comments asserted that the SEARCH-axis refusal is worded identically to the SORT/FILTER ones, and one of them further asserted that the conformance pin enforces that identity. Measured from the running doors, neither held. This is the repo's declared-≠-enforced family landing on the refusal vocabulary rather than on a metadata key.
What was measured
Triggered against a real
ObjectQLplus the protocol on currentmain, each refusal's emittedmessageread verbatim — not from source literals, since a literal in the tree can be dead or shadowed:engine.find()400 INVALID_FIELDDenormalise the value onto 'showcase_task' (a stored field, written when the source changes) and filter that.engine.find()400 INVALID_SORTand sort by that.400 INVALID_FIELDMirror the computed value onto a stored text field on 'showcase_task' and search that instead.SEARCH cannot match the stem the pin asserted across its four SORT/FILTER doors, so the claim was unpinned in exactly the place where it was false.
The gap, measured in both directions
Reverse verification, with the fix committed first. A substance-preserving rewording of the SEARCH message (
Copy the computed value into a stored text column on '...' and search that column.) was applied at the producer and the artifact rebuilt — the test resolvesmetadata-protocolfrom builtdist/, so an unrebuilt ablation runs the pre-mutation build and stays green; the mutation was proved present indist/index.jsbefore each leg.origin/main's test file, same reworded message): the agreement pin stayed GREEN — 170 passed, 1 failed, and the only failure was an unrelated per-door assertion in the A virtual formula field declared in searchableFields clears lint and the #4254 gate, then silently matches nothing — the same fail-open shape #4254 closed one axis over #6674 block. That is the defect.search-ingress remedy wording, printing the expected sentence beside the emitted one.What changed
Comment and test lines only — no runtime-behaviour lines, and the shipped SEARCH message is untouched.
The three comments now claim substance-agreement, which is what actually holds across all three axes: put the value on a stored column of the queried object and query that instead. SEARCH narrows the target to a text column, correct for an axis that scans text-like columns.
packages/objectql/src/filter-comparand-shape.tscarries the same sentence but names only the ingress door, so it is accurate as written and is left alone.The agreement pin now covers five doors in three layers, each catching what the others cannot:
SEARCH's divergence is pinned as deliberate, so a future author cannot "repair" it into the shared stem while believing the wordings were always meant to be identical.
⛔ Route 3 was not taken. Aligning the SEARCH wording onto the shared stem changes a shipped, user-visible error message on an axis that already landed, with zero measured pull, and the
textnarrowing would need somewhere to live. The pin holds without it, so no fork needed escalating.Verification
All at
bc46f3e8a, the head this PR pushes, after mergingorigin/main(00ee416) and rebuilding the closure:Gate union re-derived against the actual changed paths with
node scripts/pm/dispatch-gates.mjsand re-run at this head; exit codes read unpiped, all0:check:nul-bytes·check:durability-log-level·check:stack-collection-maps·check:cross-package-test-inputs·check:filter-alias-parity·check:query-options-erasure·check:type-check-coverage·check:type-check-debt(on the built closure) ·check-engine-split-ratioThe derivation surfaced no family beyond the ones dispatch named.
Changeset
None —
skip-changesetapplied. The diff is comments plus one test; no user-visible message, behaviour or export changes, so this PR declares no release of its own.Generated by Claude Code