Skip to content

finding: #8116's two unprovisioned-anchor diagnostics still hand-copy the cause sentence #8340 centralized into system-fields.ts #8405

Description

@qq9340100

Observation recorded while implementing #8340. Not a defect today — the three copies currently agree.

#8340 added shared builders next to the marker they report on, in packages/lint/src/system-fields.ts:

  • unprovisionedAnchorCause(objectName, field) — the evidentiary sentence (which column, which object, why the platform registered an anchor it did not provision);
  • unprovisionedAnchorHint(objectName, field) — the two ways out.

Its four rules (validate-widget-bindings, validate-react-page-props, validate-page-field-bindings, validate-flow-template-paths) compose those with their own position prefix and consequence clause. #8116's two originals still carry their own hand-written copies of the same sentence:

  • warnUnprovisionedAnchors in packages/lint/src/validate-expressions.ts;
  • unprovisionedPointer in packages/lint/src/validate-semantic-roles.ts.

They were left alone deliberately: #8340's declared file surface stopped at the filter/binding rules, and rewriting a shipped diagnostic's wording is not free. But this is the shape #4330 removed from the system-field lists one layer down — five hand-copied lists that had already drifted — and the drift here is worse than cosmetic: the sentence is what an author checks against their remote schema, and three wordings of one verdict read as three different findings. system-fields.ts already names these two as the convergence target when either is next touched.

Suggested disposition: fold in opportunistically, on the next change to either file, rather than as a standalone churn PR. The behavioural pin that would catch a real divergence (all sites report the same object/column/reason) does not exist either way.

Pointers: #4330, #7865, #8116, #8340.

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions