Skip to content

finding: two IMPLICIT_FIELDS sets spread the blanket SYSTEM_FIELDS union with no provenance awareness — candidate sixth/seventh unprovisioned-anchor read sites #8663

Description

@qq9340100

Observed while implementing #8404 (the fifth blanket-SYSTEM_FIELDS read site, validate-searchable-fields.ts). Filed as an observation, not fixed#8404's ruling scoped that card to its one module and directed any further site here.

What was surveyed

After #8340 (four sites) and #8404 (the fifth), I swept every non-test module in packages/lint/src that imports SYSTEM_FIELDS, counting anchor-awareness alongside:

moduleuses SYSTEM_FIELDSanchor-aware
validate-flow-template-paths.tsvia helperyes (#8340)
validate-page-field-bindings.tsyesyes (#8340)
validate-react-page-props.tsyesyes (#8340)
validate-widget-bindings.tsyesyes (#8340)
validate-semantic-roles.tsvia helperyes (#8116)
validate-searchable-fields.tsyesyes (#8404)
validate-hook-body-writes.tsspreadno
validate-translation-references.tsspreadno

The last two are the only remaining consumers with no provenance path. Both consume the union by SPREADING it into a rule-local set rather than calling .has on it, which is why a SYSTEM_FIELDS.has grep (the shape #8340 and #8404 were both scoped by) does not surface them:

  • validate-hook-body-writes.ts:265export const IMPLICIT_FIELDS = new Set([...SYSTEM_FIELDS, '_id', 'name', 'space', 'owner', 'record_type']). Also consumed by validate-action-body-writes.ts, so one gap covers two surfaces.
  • validate-translation-references.ts:177const IMPLICIT_FIELDS = new Set([...SYSTEM_FIELDS, '_id', 'name', 'space']).

Why they may or may not matter — UNMEASURED, deliberately

I did not measure either, so this card asserts a structural resemblance and nothing more. The two look quite different on inspection, and I expect they resolve differently:

Suggested disposition

Triage as one card or split; the hook-write axis is the one worth measuring first. Whoever takes it should note that the two sites share no helper, so there is no single-point fix — and that the spread-vs-.has consumption shape is itself the reason both were missed twice, which may be worth a gate rather than a third manual sweep.

Related: #4330 (the union's origin), #7865, #8116, #8340, #8404.

Metadata

Metadata

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions