Single-Chart Property Gap Report¶
This page logs gaps, drift, and unresolved questions discovered while building the Single-Chart Property Catalog.
Use it as a working audit log, not as the final reference.
Current Gaps¶
Unknown top-level chart keys now fail fast¶
- Evidence:
ChartFieldsnow uses strict extra handling, so bothChartPatchandCompiledChartreject unknown top-level chart fields. - Current finding: stale fields such as
group_by, chart-levellimit,interactions,key,metric, and arbitrary typos now raise validation errors instead of compiling and disappearing. - Action: resolved for the compile boundary. Documentation and schema surfaces should keep these fields out of chart examples unless they are reintroduced as real authored schema.
filters, href, and query limit need clearer ownership¶
- Evidence:
filtersandhrefare authored chart properties;limitbelongs to query definitions. - Current finding: older docs sometimes described row limiting as chart-level behavior.
- Action: keep chart docs focused on
filtersandhref; document row limiting under queries and table pagination understyle.pagination.
Structured interactions are planned, not accepted schema¶
- Evidence: strict chart validation rejects
interactions:. Hover tooltips are renderer defaults, and click-through links use top-levelhref:. - Current finding: older docs implied the YAML schema reserved a future
interactions:shape; that is no longer true. - Action: keep planned click-handler discussion out of concrete YAML examples until a real schema lands.
Nested surfaces are better documented than the old global field reference¶
- Evidence: family pages now document
style,mark, andencodingmore accurately than the older global reference page - Current finding: Field Reference now points readers to the catalog and uses the newer property names, but smaller reference pages still need a final terminology sweep
- Action: continue the reference-doc sweep until no chart reference page uses stale property names or stale interaction literals
style.background is now surfaced in the chart overview docs, but family pages may still lag it¶
- Evidence: chart rendering wraps the final SVG with a background rectangle when
chart.style.backgroundis set, and the charts overview now lists it as a style option - Current finding: implementation and top-level chart docs are aligned, but family-specific pages still mostly focus on legend/grid/color-scheme examples
- Action: decide whether every family page should repeat it or whether the overview plus catalog is sufficient
series promotion has been removed¶
- Evidence:
promote_series_to_y()was deleted as dead code after the settings→style merge - Current finding:
seriesas a chart key no longer has any runtime behavior — list-valuedyis the only supported way to specify multiple metrics - Action: use list-valued
yin canonical examples and family docs
Table and spark_bar style fields are implementation-backed and now documented¶
- Evidence: table renderer reads
style.columnsandstyle.header_overflow;spark_barrenderer reads six style overrides - Current finding: these fields now have explicit catalog rows and are documented in the tables family page
- Action: resolved — all former
settings.*fields are now understyle.*
Validated standard mark/encoding families are now cataloged evenly, but non-Vega single-chart surfaces still need the same child-row treatment¶
- Evidence: the master catalog now expands child rows for
bar,line,area,point,scatter,pie, anddonut - Current finding:
filters.*,href, and the main specialized-family surfaces now have implementation-backed catalog rows, so the remaining completeness gap has shifted toward legacy/global-reference reconciliation and smaller maturity mismatches - Action: continue the same audit pattern until every authored single-chart property and meaningful maturity caveat has an implementation-backed row
Nested reusable schemas needed explicit structure to avoid duplication¶
- Evidence: authored paths like
style.axis_xandstyle.axis_yshare the same underlying object shape, andstyle.columns[]was beginning to drift into duplicated child-row inventories - Current finding: the catalog now separates authored property rows from reusable nested schema rows, and shared schemas for
AxisConfig.*,ScaleConfig.*,GeoConfig.*,MapBackgroundConfig.*,TableColumnConfig.*, andSparkConfig.*are all in place - Action: preserve this structure as the catalog grows and only duplicate child rows when a reused object shape is genuinely asymmetric in implementation
Final completeness risk is now concentrated in low-signal residual surfaces and reference reconciliation¶
- Evidence: the final code sweep found no large uncataloged object surfaces beyond the ones already promoted into reusable schema sections
- Current finding: the remaining uncertainty is concentrated in the exact desired scope of lightweight reference-page reconciliation and whether compatibility surfaces should be surfaced outside the catalog
- Action: treat these as the final blockers before declaring the catalog complete, rather than continuing to hunt for new large schema families
The remaining unresolved surfaces are classification questions, not missing inventory¶
- Evidence: top-level properties, nested standard-family surfaces, specialized-family rows, reusable schemas, and renderer-maturity gaps have all been audited
- Current finding: what remains is deciding whether compatibility properties like
seriesshould appear outside the source-of-truth reference - Action: once that editorial decision is made, the inventory itself can reasonably be treated as complete
Default-owner classification now exists, but some boundaries are still judgment calls¶
- Evidence: the catalog now includes a
default ownercolumn withchart,structure,theme,none, andn/a - Current finding: the hardest judgment calls are mixed or low-level passthrough surfaces, especially some
mark.*leaves and whether a few framing values should be treated as chart-authored framing or reusable structure defaults - Action: keep refining those judgments as structure/theme policy becomes more explicit, but do not treat that as missing catalog inventory
none is now a reviewed basket, not a miscellaneous overflow bucket¶
- Evidence: the current
nonerows are limited to mixed parent container rows and compatibility-only surfaces. - Current finding: this is the right shape for now because container rows mix child owners and
seriesis compatibility-only. - Action: keep
noneintentionally small; any newnonerow should justify why it should stay out of both structure and theme ownership
Root-level completeness check passed apart from internal runtime fields¶
- Evidence: a direct
CompiledChart.model_fieldscomparison against the catalog found onlyvariable_dependencies,source_path, andquery_is_inlinemissing - Current finding: those three are internal runtime/compiler fields rather than authored chart properties, so they are now explicitly treated as out of scope
- Action: keep this check in mind for future catalog updates whenever
CompiledChartchanges
Audit Rules¶
When a gap is found:
- Keep the property in the master catalog if code accepts it.
- Mark its current docs status honestly.
- Add a note here only if the issue needs follow-up, reconciliation, or a decision.