Skip to content

finding(types): the ChartSchema axis-config object dialect is undeclared and passes through unchecked - liveness read owed before declare-or-retire #7690

Description

@claude

Carved out of objectui#7546 by the domain:ui PM seat before PR #7684 lands. #7684 carries Fixes #7546, so the merge closes that card — and the axis-config dialect below is measured in #7546's own body and would sink with it. Filed so it keeps a carrier.

What #7546 measured, verbatim from its body

Also undeclared, though merely passed through rather than stripped, on ChartSchema itself: xAxis (the axis config object dialect — field, format, title, showGridLines, min, max, position, logarithmic) and yAxis, both read by normalizeAxis / normalizeChartSchema at lines 204-220 and 287-298. #7113 deliberately folded only the bare-string xAxis and left the object dialect untouched, because folding it would discard its presentation keys — declaring it is the follow-up this finding covers.

And its warning, which is the reason this is a card and not a patch:

⚠️ Whether the axis-config object should be declared at all — versus retired under ADR-0049 if no authored document uses it — is a triage question, not a foregone conclusion.

Why this is a different card, not the same one

The series-key half of #7546 (#7684) is about a non-strict z.object that STRIPS an undeclared key. This half is the opposite mechanism: ChartSchema sits on BaseSchema, which is .passthrough(), so an undeclared key is KEPT and reaches the renderer — only its value goes unchecked. Same finding family, different failure mode, and the two need different liveness reads.

What is NOT decided

⛔ Do not open with "declare the eight keys". ADR-0049 is enforce-or-remove, and the retire arm is live here: if no authored document writes the object dialect, the correct outcome is retirement, not declaration. The first work on this card is the liveness read, per key, with lit controls — docs, fixtures, designer inputs, and real producers — exactly as #7684 did for the six series keys and for chartType.

Note the shape #7684 established for a key that measures dead: it was reported, not retired and not declared, because retiring it is a narrowing that needs its own card and its own changeset grade. The same discipline applies here.

Carrier note

Do not fold this into #7684. That PR's scope fence is deliberate and its review is in flight.


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

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions