Found while implementing #15254 (PR #15493); filed as a finding only, not claimed.
Measured on origin/main at f01adfa, and still true after #15254
Driving one object publish through the #4463 runtime authoring gate with THREE dangling references at once:
| position |
CLI verdict |
runtime publish door, before #15254 |
after #15254 |
highlightFields[i] |
was warning |
nothing |
REFUSED (object-field-ref-unknown) |
searchableFields[i] |
error / searchable-field-unknown |
nothing |
still nothing |
listViews.*.columns[i] |
error / list-view-field-unknown |
nothing |
still nothing |
Both of the bottom two are ERROR-tier on os validate / os build / os lint today. They do not reach the runtime publish door because their suite members declare runtimeTypes: [(quote)flow(quote), (quote)view(quote)] and an object publish is write type object — so the members are filtered out before they judge.
Why this is the same defect, not a smaller one
#15254 was filed because a click author could publish something a code author is warned about. That card is fixed for highlightFields. But an object's BUILT-IN list views (objects[].listViews.*) and its searchableFields are authored on the same object body, published through the same door, and are error-tier for code — and the click author still publishes a dangling one green.
Why #15254 did not widen it
The suite records that crossing a member onto another write type is an explicit declaration PLUS that type's own false-positive measurement (#4716 priced exactly five gating rules for the object door), never automatic. #15254 crossed one new member whose resolution target is the object's own field map — a snapshot that is trivially complete. Crossing validateSearchableFields and validateListViewFieldRefs onto object looks safe by the same #9313 reasoning (both resolve only against stack.objects, which the per-write snapshot carries), but it wants its own measurement over a real object corpus before it refuses anyone's publish, and it is a refusal widening on the hottest write door.
Suggested shape
Add object to those two members' runtimeTypes in packages/lint/src/reference-integrity-suite.ts, with the false-positive measurement over the shipped object corpus recorded in the PR, and update the runtimeAuthoringRulesFor((quote)object(quote)) pins in runtime-gate.object-writes.test.ts.
Generated by Claude Code
Found while implementing #15254 (PR #15493); filed as a finding only, not claimed.
Measured on origin/main at f01adfa, and still true after #15254
Driving one object publish through the #4463 runtime authoring gate with THREE dangling references at once:
highlightFields[i]warningobject-field-ref-unknown)searchableFields[i]error/searchable-field-unknownlistViews.*.columns[i]error/list-view-field-unknownBoth of the bottom two are ERROR-tier on
os validate/os build/os linttoday. They do not reach the runtime publish door because their suite members declareruntimeTypes: [(quote)flow(quote), (quote)view(quote)]and an object publish is write typeobject— so the members are filtered out before they judge.Why this is the same defect, not a smaller one
#15254 was filed because a click author could publish something a code author is warned about. That card is fixed for
highlightFields. But an object's BUILT-IN list views (objects[].listViews.*) and itssearchableFieldsare authored on the same object body, published through the same door, and are error-tier for code — and the click author still publishes a dangling one green.Why #15254 did not widen it
The suite records that crossing a member onto another write type is an explicit declaration PLUS that type's own false-positive measurement (#4716 priced exactly five gating rules for the object door), never automatic. #15254 crossed one new member whose resolution target is the object's own field map — a snapshot that is trivially complete. Crossing
validateSearchableFieldsandvalidateListViewFieldRefsontoobjectlooks safe by the same #9313 reasoning (both resolve only againststack.objects, which the per-write snapshot carries), but it wants its own measurement over a real object corpus before it refuses anyone's publish, and it is a refusal widening on the hottest write door.Suggested shape
Add
objectto those two members'runtimeTypesinpackages/lint/src/reference-integrity-suite.ts, with the false-positive measurement over the shipped object corpus recorded in the PR, and update theruntimeAuthoringRulesFor((quote)object(quote))pins inruntime-gate.object-writes.test.ts.Generated by Claude Code