docs(audit): spec enum ↔ renderer coverage audit (#2901) - #2937
Merged
Conversation
Audits every named enum export in `@objectstack/spec@16.0.0-rc.0` `ui/` against its renderer counterpart, in both directions, plus field types and filter operators. 24 confirmed Direction A gaps that produce a user-visible defect, 11 inert ones, 10 surfaces carrying renderer-local dialect. Corrects the issue's premise: `ChartTypeSchema` is 19 values in the spec, not 7. The 7-value list is an objectui fork re-exported under the spec's own symbol name — one of five such forks. Triaged by runtime symptom rather than by direction, because that orders the work by how long a defect survives undetected: silently-wrong output (6) is worse than the silently-absent case (15) that prompted #2897, and the loud red-box tier (3) is cheapest precisely because it cannot hide. Refs #2901, #2897, #2231, #2731 Co-Authored-By: Claude <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
This was referenced Jul 28, 2026
Closed
Closed
This was referenced Jul 30, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes the first pass of #2901. Deliverable is the table, not the fixes — as the issue asked.
Audits every named enum export in
@objectstack/spec@16.0.0-rc.0ui/against its renderer counterpart in both directions, plus field types and filter operators. Five parallel auditors; every row read off the dispatch code, with the highest-stakes claims independently re-verified in source.What it found
The issue's premise was inverted
#2901 read
ChartTypeSchemaas a 7-value spec enum outgrown by a 13-value renderer. The spec has 19 values; the 7-value list is an objectui fork (types/src/zod/data-display.zod.ts:209) re-exported under the spec's own symbol name.That generalises, and it is the audit's most useful result: the recurring failure is rarely "renderer forgot a name" — it is "a second definition of the vocabulary exists, and the renderer is faithful to the wrong one". Five such forks; the
PageTypetrio holds three disagreeing definitions inside one package, drifting in both directions at once.Triaged by runtime symptom, not by direction
That axis orders the work by how long a defect survives undetected:
PivotTable.tsx:114returns a sum forcount_distinct;DatasetReportRenderer.tsx:370silently draws a bar chart for 10 of 19 types. A blank cell is detectable; a plausible wrong number is not.element: 'toggle'deleting the whole filter bar, and 6 of 9 animation presets doing nothing becauseuseAnimation.ts:64keys its lookup in hyphens where the spec enum uses underscores.Structural finding
19 of 30 spec UI vocabularies have nothing mechanically tying them to the spec. The repo has a mature drift-guard doctrine for schema shape (#2231, three tests) and exactly one guard for enum-value renderer coverage (#2897). Two tests that look like coverage guards aren't:
field-type-coverage.test.tshard-codes its expected list instead of importingFieldType— which is why theautonumberdisplay gap survived — andblock-config.test.tsasserts palette exclusions by hand, locking drift in rather than detecting it.Prerequisite for the guard work: 6 of the 13 packages that need one cannot import the spec today.
Follow-ups
Two items in the table are plain bugs with no design question and are handled separately:
$ncontains(a token appearing zero times in the spec, which objectui's own converter throws on) andsecretmissing fromINLINE_EXCLUDED_FIELD_TYPEStwo lines frompassword. Per-tier issues to follow.Docs-only. No code touched.
🤖 Generated with Claude Code