The scorecard
c1352026-11-10Every layer component against Mark's five checks, with its cousins and its resolution.
Source: c135 initial-prompt.md (Mark's five checks, in his order); c135 plan.md §The scorecard, §Resolution strategies, D1–D8 (D8 revised 2026-11-09: the waiting-list extractions happen now); brand/component_philosophy.md (the eight principles the checks measure against); qdash ui/LAYER-CANDIDATES.md (the waiting list); app/data/component-registry.ts (the names). The cell values are illustrative.
modular · clean · documented · shaped · docs page. Mark's, in his order; one row per component, generated by a script, kept as a living page.
23 groups, about 250 components, 193 demos with adminProps; released by tag (v0.9.37). Measured, not rebuilt.
StateEmpty, JsonTree, StatTile, Panel, Spark, BarList, Attention*, SkeletonRows and more, staged in qdash. Extracted now, ahead of their groups (D8).
UxIcon id, a danger tone on UxPill, a logo-only AgentAvatar, highlight.js optimizeDeps. Merged into the census at Phase 1.
| Component | Modular | Clean | Documented | Shaped | Docs page | Cousins | Resolution |
|---|---|---|---|---|---|---|---|
| UxButtonux · every consumer | passes | passes | no doc comments on props | passes | passes | UxIconBtn, UxAddBtn | keep |
| UxPillux · every consumer | passes | passes | no doc comments | passes | no danger tone (Opus list) | UxTag, UxBoxTag | keep; UxBoxTag merges into it, alias two releases |
| DataTabledata · qdash, design | passes | one arbitrary value | slots undocumented | passes | no state port; flavors not harvested | UxTableList | keep both, with a note: dense and roomy |
| DataMetricValuedata-metric family · qdash, design | passes | passes | no doc comments | passes | passes | DataStat, DataVal, DataCard | merge DataStat and DataVal into the family; alias and deprecate |
| DataSparkChartOlddata · no consumer in the scan | not assessed | hex colors | none | not assessed | passes | DataSparkChart | retire, after the scan confirms |
| FilterTriggerBarfilter · qdash, design | passes | passes | emits undocumented | passes | passes | DataListingBar (contains it); the filter-old group | keep; retire filter-old |
| NavVerticalSubmenunav · qdash | passes | provisional subGap prop | no doc comments | passes | passes | — | keep; drop subGap |
| StateEmptywaiting list → DataStateEmpty | not assessed | not assessed | not assessed | not assessed | not assessed | FilterNoMatches; the #empty slots | extract now |
| JsonTreewaiting list → DataJsonTree | not assessed | not assessed | not assessed | not assessed | not assessed | UxCodeBlock | extract now |
| StatTilewaiting list → DataStatTile | not assessed | not assessed | not assessed | not assessed | not assessed | DataStat, DataMachineMicro | extract now; joins the DataStat merge |
two components show the same thing with different props: one survives, the other becomes an alias that warns
one component carries two purposes: a prop that changes what it is
consumers cannot move in one release; two minor releases, a console warning, a note (D3)
no consumer uses it and no pattern needs it; checked against the scan, not memory
qdash staged a library-grade piece the layer lacks; the waiting lists, now (D8)
with a note when the overlap is deliberate: a dense and a roomy variant a pattern documents
interactive, display, feedback
table, data-metric, data-machine
the page furniture
inputs, selects, save bars
actor, agent, policy, compliance, security, …; each shows a qdash flavor or is a retire candidate (D4)
last; the least churn