Uh oh!
There was an error while loading. Please reload this page.
Pin cross-site unprovisioned-anchor content invariant (wording convergence blocked by drift) - #8513
Merged
Merged
Conversation
) #8405 asked to converge warnUnprovisionedAnchors (validate-expressions.ts) and unprovisionedPointer (validate-semantic-roles.ts) onto the shared unprovisionedAnchorCause/unprovisionedAnchorHint builders in system-fields.ts, with byte-identical output as the acceptance bar. Diffing the emitted text programmatically (not by eye) shows both sites already drifted from the shared builders and from each other before this change: this file uses '<field>', an injected... (comma) where the shared cause() uses '<field>' is an injected... (space+is), and validate-semantic-roles.ts uses a differently-worded/ordered reason clause and a different hint ending entirely. The issue's "the three copies currently agree" premise does not hold at the byte level this card's own ruling requires, so wiring either site to call the shared builders as-is would change its emitted diagnostic text -- exactly what the ruling says to stop and report instead of shipping under a de-dup card. No production code changes here. This adds the one thing that survives regardless of how that wording question gets resolved: a content-invariant pin proving both sites still report the same object, column and ADR-0015 reason, so future edits can drift in wording but not silently drop what makes the finding actionable. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jqe56GnYFddggeAyfkZFVz
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
Contributor
📓 Docs Drift CheckNo hand-written docs reference the 0 changed package(s). ✅ |
qq9340100
marked this pull request as ready for review
August 13, 2026 17:24
Uh oh!
There was an error while loading. Please reload this page.
This was referenced Aug 13, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of #8405 — #8405 is NOT fixed by this PR; it remains open pending a maintainer decision (see below).
What this is
#8405 asked to converge
warnUnprovisionedAnchors(validate-expressions.ts) andunprovisionedPointer(validate-semantic-roles.ts) onto the sharedunprovisionedAnchorCause/unprovisionedAnchorHintbuilders insystem-fields.ts(added by #8340), with byte-identical output as the acceptance bar — this is a
de-dup, not a rewording.
Diffing the emitted text programmatically (not by eye) against real sample args shows
both sites already drifted from the shared builders, and from each other, before
this PR touched anything:
validate-expressions.ts's cause clause:'FIELD', an injected system column…(comma) vs. the shared
unprovisionedAnchorCause()'s'FIELD' is an injected system column…(space + "is"). The rest of the cause sentence is byte-identical.validate-expressions.ts's hint clause:carries this column, declare 'FIELD' in the object's own fields…vs. the sharedunprovisionedAnchorHint()'scarries 'FIELD', declare it in OBJECT_NAME's own fields…— the shared builderinterpolates the real object name; the site hard-codes the generic "the object's".
validate-semantic-roles.ts's cause clause is a materially different sentence:double quotes instead of single,
"no storage"instead of"NO storage", adifferently-ordered reason clause (
"…but the remote schema owns the table and no column backs it. Every consumer renders it empty on every record."), none of whichmatches the shared builder's text.
validate-semantic-roles.ts's hint clause ends"…otherwise point ${slot} at a real remote column"instead of the shared builder's ownership/systemFieldsopt-outlanguage.
So the issue's own premise — "Not a defect today — the three copies currently
agree" — does not hold at the byte level this card's ruling requires. Wiring
either site to call the shared builders as written would change its emitted
diagnostic text for existing consumers, which is exactly what the ruling says to stop
and report instead of shipping under a de-dup card. See the
#8405dev report(issue comment) for the full character-level diff evidence.
What this PR actually does
No production code changes. It adds the one thing that survives regardless of how
the wording question gets resolved: a cross-site content-invariant test
(
validate-expressions.test.ts,describe('cross-site unprovisioned-anchor convergence (#8405)', …)) pinning that both sites report the same object, samecolumn, and the same ADR-0015 reason even though their exact phrasing differs today.
A future edit to either site can drift in wording freely but can no longer silently
drop the object name, the field name, or the ADR-0015 citation that makes the finding
actionable.
Decision needed (see dev report
open_questions)Real convergence of the exact wording needs a deliberate decision, not a silent pick
under this card:
changes shipped lint diagnostic text) that adopts the shared
system-fields.tsbuilders as canonical everywhere and updates both originals' literal text to match.
keeps its current exact text — not recommended, since it institutionalizes what
looks like accidental drift as permanent, three-way design.
here — cheapest, but leaves the "three wordings of one verdict" trust gap finding: #8116's two unprovisioned-anchor diagnostics still hand-copy the cause sentence #8340 centralized into
system-fields.ts#8405itself called worse than cosmetic.
skip-changeset: no production code changed, test-only addition, releases nothing.Generated by Claude Code
Generated by Claude Code