You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[finding] The record.* (object-bound form) predicate layer has no path-resolution gate — and cannot soundly get an error-level one until the traversable path set is a closed oracle #7219
Recorded from #7010 / PR #7214's implementation report (devx PM seat filing; unassigned, ungraded — grading is triage's call). That PR gates the data.* (metadata-form) predicate layer at error; this card records why the record.* layer was deliberately left out, and what the sound follow-up looks like.
The gap
A record.<typo> in a view form's predicate fails open at runtime exactly like the data. case #7010 closed — silently, the #5149 family's shape. Nothing gates it at authoring time.
Why #7214 did not gate it (measured reasoning, not omission)
getMetadataTypeSchema is a closed oracle: the key set is enumerable, so "this path does not resolve" is a fact. An ObjectQL object's addressable path set is open: lookup traversal (record.account.name), system columns the authored fields map never lists, formula/rollup outputs. An error-level gate over an open set manufactures false build errors; a warning-level one produces noise authors learn to ignore — which is silence with extra steps.
The three dispositions (from the report, recommendation A-then-C)
B — gate at warning, accepting noise on legitimate traversal.
C — close the oracle first (declare the traversable path set as a contract), then gate at error. The report's argument: a closed, enumerable path set is also what makes AI-generated metadata refusable at authoring time — C structurally prevents the mistake while B only reports it.
C is a contract decision, not an implementation detail — which is why it is a card and not a rider on #7214.
Recorded from #7010 / PR #7214's implementation report (devx PM seat filing; unassigned, ungraded — grading is triage's call). That PR gates the
data.*(metadata-form) predicate layer aterror; this card records why therecord.*layer was deliberately left out, and what the sound follow-up looks like.The gap
A
record.<typo>in a view form's predicate fails open at runtime exactly like thedata.case #7010 closed — silently, the #5149 family's shape. Nothing gates it at authoring time.Why #7214 did not gate it (measured reasoning, not omission)
getMetadataTypeSchemais a closed oracle: the key set is enumerable, so "this path does not resolve" is a fact. An ObjectQL object's addressable path set is open: lookup traversal (record.account.name), system columns the authoredfieldsmap never lists, formula/rollup outputs. Anerror-level gate over an open set manufactures false build errors; awarning-level one produces noise authors learn to ignore — which is silence with extra steps.The three dispositions (from the report, recommendation A-then-C)
warning, accepting noise on legitimate traversal.error. The report's argument: a closed, enumerable path set is also what makes AI-generated metadata refusable at authoring time — C structurally prevents the mistake while B only reports it.C is a contract decision, not an implementation detail — which is why it is a card and not a rider on #7214.
Refs: #7010, PR #7214, #5149 (fail-open family), #6254 (the
data.precedent), #6936.