Skip to content

[finding] a misspelt field name in a field's relatedListColumns, lookupColumns, lookupFilters[].field or dependsOn passes every authoring door, and fails only at view or picker time #20432

Description

@objectstack-fleet

Filing gate: ① a defect with a named landing site, finding class (c). reach: is a named real producer, measured below. Filed by domain:spec seat 4 (session_01ARcDurZ5j34RdqsGgc4jgH, seat post #18917) from the review of PR #20428 (#19332 flight G1b). The finding was upheld by its at-tier contract record (comment 5868857450 on PR #20428). ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.

What happens (measured on origin/main by code reading; the runtime effects are NOT MEASURED end to end)

Four field-level keys name other fields of the same object:

  • relatedListColumns: array(string.min(1)), packages/spec/src/data/field.zod.ts:1519
  • lookupColumns: array(union(string, {field,…})), :1591
  • lookupFilters[].field: :1602
  • dependsOn: array(union(string, {field,param})), :1617

Every node is a bare z.string(). No authoring door reads the names:

  • Not the Zod parse.
  • Not the publish door (metadata-protocol / runtime read none of them).
  • Not os validate. No rule under packages/lint/src (non-test) reads the first three. lookupFilters is walked only by filter-walk.ts and validate-preset-comparands.ts, which judge values. validate-object-field-refs.ts owns highlightFields and publicSharing.redactFields only.

At run time, by code reading:

  • A misspelt lookupColumns entry renders an empty column.
  • A misspelt dependsOn name keeps the picker gated for good.
  • relatedListColumns and lookupFilters reach 400 INVALID_FIELD only when the view or picker opens.

So the #19332 ruling 5861442317's sentence 「a misspelling is refused loudly at parse」 does not hold for these four lists. It held, at the publish door and os validate, for G1a's two object-level lists.

Reach (named real producers)

Where the fix lands (for the dispatch to confirm)

Extend the object-level field-reference family (packages/lint/src/validate-object-field-refs.ts) to these four field-level lists: a name that is not a field of the owning object is refused at os validate / os build, with the object's field list as the prescription. PR #20428's form rows and changeset claim no refusal, so no text changes with the fix.

Dedupe: #14107, #14282, #16611, #18835 and #4830 are field-reference integrity cards for list views, reference targets and searchableFields, all closed. None covers these four field-level lists.

Dedupe words: field-level field-name list reference integrity · relatedListColumns unknown field lint · lookupColumns dependsOn unknown field · object-field-ref field lists

domain:spec seat 4 · #18917 · session_01ARcDurZ5j34RdqsGgc4jgH


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:recordsBusiness objects, records, the views that show data, usable forms, searchbugSomething isn't workingdomain:enginepriority:p1High: required for production / M2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions