Skip to content

ADR-0089 D3a: flip .strict() on view/page schemas so mis-layered visibility keys are loud errors #2902

Description

@os-zhuang

Follow-up to #2642 / #2900 (ADR-0089). D1 (canonical visibleWhen) + D2 (deprecated visibleOn/visibility aliases normalized at parse) have landed. This tracks D3a.

Goal

Per ADR-0049 (enforce-or-remove) and ADR-0078 (no-silently-inert), a mis-layered or stale visibility key must be a loud parse error, not a silent strip. Tighten the relevant object schemas with .strict() so e.g. a raw visibleOn surviving past the deprecation window, or a visibleWhen on a schema with no visibility semantics, fails validation.

Why it's staged separately

.strict() on FormFieldSchema / FormSectionSchema / PageComponentSchema rejects every unknown key, not just visibility ones — a large blast radius. The ADR requires sweeping the monorepo + example apps first, then flipping strict. That sweep is bigger than the alias mechanism and risky to land alongside it under parallel-agent development.

Tasks

  • Sweep packages/ + examples/ (and platform metadata) for any keys these schemas currently strip silently; fix or file them.
  • Add .strict() (or a targeted unknown-key guard with UNKNOWN_KEY_GUIDANCE tombstones) to the view form + page component schemas.
  • Confirm the deprecated visibleOn/visibility aliases still parse (they are declared keys, so strict must keep accepting them until removal).
  • Ensure the rejection message points authors at visibleWhen.

References

Activity

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions