Summary
While measuring #4306 (field inspector Save not gated on CEL errors) I found the same
wiring gap in two more CelPredicateField hosts, reaching four further inspectors.
CelPredicateField reports its lint verdict upward through onLintChange(issues)
(packages/app-shell/src/views/metadata-admin/CelPredicateField.tsx line 97, fired at
line 160). Only PermissionAdvancedFacets passes it. Every other mount site discards
the verdict, so a blocking parse fault is rendered inline and nothing acts on it.
Measured mount sites that pass no onLintChange
Zero hits for onLintChange or onCelErrorsChange in either file, confirmed against a
known-present neighbour (PermissionAdvancedFacets.tsx lines 364 / 380), so this is an
absence rather than a search miss.
Why this is filed separately and blocked
The fix is not local to these components. Like #4306, the Save button these editors would
have to gate belongs to a host — StudioDesignSurface.tsx or ResourceEditPage.tsx —
reached only through the MetadataInspectorProps registry contract, which today carries
no error channel, and there is no React context anywhere in metadata-admin or
studio-design to carry one instead (zero createContext hits in both trees).
So whichever channel #4306 settles on decides this one too. If that channel is named for
CEL specifically it will need renaming to cover these sites; if it is named for blocking
issues generally, wiring these four inspectors is mostly mechanical.
Blocked-by: #4306
Not reproduced in a browser — this is static evidence from the same sweep that measured
#4306, filed so it is not lost.
Generated by Claude Code
Summary
While measuring #4306 (field inspector Save not gated on CEL errors) I found the same
wiring gap in two more
CelPredicateFieldhosts, reaching four further inspectors.CelPredicateFieldreports its lint verdict upward throughonLintChange(issues)(
packages/app-shell/src/views/metadata-admin/CelPredicateField.tsxline 97, fired atline 160). Only
PermissionAdvancedFacetspasses it. Every other mount site discardsthe verdict, so a blocking parse fault is rendered inline and nothing acts on it.
Measured mount sites that pass no
onLintChangepackages/app-shell/src/views/metadata-admin/inspectors/ConditionBuilder.tsxline 184— reached by
PageBlockInspector,HookDefaultInspector,ActionDefaultInspector(and
widgets.tsx).packages/app-shell/src/views/metadata-admin/ConditionalFormattingEditor.tsxline 272— reached by
ViewVariantInspector.ObjectFieldInspector.tsx(478 / 615 / 628 / 641) — that is Field inspector: Save is not gated on CEL errors — a parse-fault formula saves and publishes as the live field definition #4306.Zero hits for
onLintChangeoronCelErrorsChangein either file, confirmed against aknown-present neighbour (
PermissionAdvancedFacets.tsxlines 364 / 380), so this is anabsence rather than a search miss.
Why this is filed separately and blocked
The fix is not local to these components. Like #4306, the Save button these editors would
have to gate belongs to a host —
StudioDesignSurface.tsxorResourceEditPage.tsx—reached only through the
MetadataInspectorPropsregistry contract, which today carriesno error channel, and there is no React context anywhere in
metadata-adminorstudio-designto carry one instead (zerocreateContexthits in both trees).So whichever channel #4306 settles on decides this one too. If that channel is named for
CEL specifically it will need renaming to cover these sites; if it is named for blocking
issues generally, wiring these four inspectors is mostly mechanical.
Blocked-by: #4306
Not reproduced in a browser — this is static evidence from the same sweep that measured
#4306, filed so it is not lost.
Generated by Claude Code