UIX Component Audit — Worklist (resumable index)
worklist-version: 1
generated-at: 2026-06-26
total-names: 127 (82 soma-backed + 45 eidos-only)
status: AUDIT COMPLETE — 124/124 audited (words, palabras, chronos excluded per user directive) across 8 batches.
result: 0 CRITICAL · 18 HIGH · 129 MEDIUM · 60 LOW. See SUMMARY.md for the verdict + systemic findings.
mode: per-component reports in audit/components/{kebab}.md; roll-ups in audit/{SUMMARY,SHARED_EXTRACTION,THEMING_COHERENCE,VALIDATOR_GAPS}.md
This is the resumable index. Each row's status flips pending → audited as its
audit/components/{kebab}.md is written. Re-runs (MODE=reeval) read this to know
what exists and what was covered.
Legend
| Col |
Meaning |
| scope |
morfo.scope declared layers (the authored contract) |
| morfo |
Y = morfo/components/{n}.ts; INT = morfo/internal/{n}.ts; - = none |
| prov |
Y = soma/components/{n}/{n}-provider.svelte.ts; dir* = soma dir exists but no standard provider file; - = no soma dir |
| eidos |
Y = eidos/components/{n}/ dir; (co) = rendered inside a sibling's eidos dir; - = none |
| demo |
Y = web/routes/uix/components/{n}/; - = none |
| test |
Y = {n}-provider.svelte.test.ts; - = none |
| #0 |
cross-reference flag worth confirming during that component's audit |
Cross-reference anomalies (candidate finding-#0, to confirm in per-component audit)
These are recorded now so the audit doesn't "discover" them as surprises; each must be
confirmed (or dismissed) inside the owning component's report.
| Component |
Anomaly |
Status to confirm |
menu-dial |
scope ['soma','sema','eidos'] but soma dir holds only index.ts — no menu-dial-provider.svelte.ts |
RESOLVED (Batch 2): compositional API; the headless runtime + nav helpers live in soma/components/menu-dial/ (non-standard filenames), the eidos root composes them. Benign by design (matches the compositional-not-data-driven doctrine). |
onion-menu |
same as menu-dial |
RESOLVED (Batch 2): runtime in soma/components/onion-menu/onion-menu.svelte.ts + onion-menu-nav.ts; eidos <OnionMenu> root composes it via createOnionMenuRuntime. The agent's CRITICAL "eidos imports soma = frontier violation" was a FALSE POSITIVE (eidos→soma is the normal direction) — refuted in verification. |
metrics |
scope ['sema','eidos'] yet has a soma dir with only index.ts |
RESOLVED (Batch 7): the soma logic lives in soma/components/metrics/metrics.svelte.ts (non-standard filename, not -provider.svelte.ts); it's a sema+eidos display component with a small soma helper. Legitimately structured, not dead. |
picker-shell |
INTERNAL morfo, soma dir = index.ts only, no demo |
RESOLVED (Batch 3): internal-by-design. The shell logic lives in soma/components/picker-shell/picker-shell-handle.svelte.ts + exports.ts (re-exported by the 5 pickers); Clear/Cancel/Close compose <Button>, Footer/Header/Body are layout zones. Not an orphan. |
avatar-group |
morfo Y, no own eidos dir — rendered by eidos/components/avatar/avatar-group.svelte |
Confirmed co-located (not orphan); audit theming under avatar |
cascade, motion |
eidos morfos with no demo |
Confirm they are infra contracts (not user-facing components) — expected |
words |
full stack present |
EXCLUDED from audit — active separate dev track (words/palabras), per docs/README.md note + project rule + user directive 2026-06-26. |
palabras |
eidos for words |
EXCLUDED from audit — user directive 2026-06-26. |
chronos |
full stack present |
EXCLUDED from audit — user directive 2026-06-26 (active track). |
button |
scope ['soma','sema','eidos'], no provider test |
Test-coverage gap (dimension F) |
chronos,textarea,password-field,month-grid,year-grid |
interactive, no provider test |
Test-coverage gaps (dimension F) |
Components lacking a *-provider.svelte.test.ts (dimension-F gaps to record per row):
button, chronos, menu-dial, metrics, month-grid, onion-menu, password-field, picker-shell, textarea, year-grid — plus every eidos-only primitive (expected: no provider).
Group 1 — Overlays · portal + floating + dismissal + focus (hardest / most systemic)
| Component |
scope |
morfo |
prov |
eidos |
demo |
test |
#0 |
status |
| select |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (4H/5M/2L) |
| combobox |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (2H/3M) |
| dialog |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (2H/2M/2L) |
| popover |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (3M) |
| dropdown-menu |
soma,sema,eidos |
Y |
Y |
Y |
Y |
Y |
|
audited (4M/1L) |
| context-menu |
soma,sema,eidos |
Y |
Y |
Y |
Y |
Y |
|
audited (3M/1L) |
| menubar |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (3M/4L) |
| navigation-menu |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1H/3M) |
| tooltip |
soma,eidos,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1M/1L) |
| drawer |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (5M) |
| alert-dialog |
soma,eidos |
Y |
Y |
Y |
Y |
Y |
|
audited (1H) |
| command |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1M/5L) |
| link-preview |
soma |
Y |
Y |
Y |
Y |
Y |
|
audited (1M) |
| float-panel |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (2M) |
| onion-menu |
soma,sema,eidos |
Y |
dir* |
Y |
Y |
- |
#0 RESOLVED |
audited (1M/3L) |
| menu-dial |
soma,sema,eidos |
Y |
dir* |
Y |
Y |
- |
#0 RESOLVED |
audited (3M/3L) |
Group 2 — Pickers + calendar family (portal + composite + grid nav)
| Component |
scope |
morfo |
prov |
eidos |
demo |
test |
#0 |
status |
| date-picker |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (4M) |
| date-range-picker |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (2M) |
| time-picker |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (3M) |
| time-range-picker |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1M/2L) |
| color-picker |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (2M/2L) |
| calendar |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (4M/2L · MID-REFACTOR) |
| range-calendar |
soma,sema,eidos |
Y |
Y |
Y |
Y |
Y |
|
audited (2M/2L · MID-REFACTOR) |
| month-grid |
soma,sema |
Y |
Y |
Y |
Y |
- |
F |
audited (1M/1L) |
| year-grid |
soma,sema |
Y |
Y |
Y |
Y |
- |
F |
audited (1M/1L) |
| picker-shell |
INT |
INT |
dir* |
Y |
- |
- |
#0 RESOLVED |
audited (1M/1L) |
Group 3 — Fields (input + composition + masking)
| Component |
scope |
morfo |
prov |
eidos |
demo |
test |
#0 |
status |
| field |
soma |
Y |
Y |
Y |
Y |
Y |
|
audited (2M) |
| date-field |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (3M · A30-effect) |
| date-range-field |
soma,eidos |
Y |
Y |
Y |
Y |
Y |
|
audited (2M/3L) |
| time-field |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (2M/1L · A30-effect) |
| time-range-field |
soma |
Y |
Y |
Y |
Y |
Y |
|
audited (1M) |
| color-field |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (3M · A30-effect) |
| css-field |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1M) |
| number-field |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1L · clean REFERENCE) |
| search-field |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (2M) |
| password-field |
soma,sema |
Y |
Y |
Y |
Y |
- |
F |
audited (1M) |
| pin-input |
soma,eidos |
Y |
Y |
Y |
Y |
Y |
|
audited (1M) |
| textarea |
soma,sema |
Y |
Y |
Y |
Y |
- |
F |
audited (2M) |
| tags-input |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1M) |
| editable |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1M) |
Group 4 — Collections + data (keyboard nav + virtualization + selection)
| Component |
scope |
morfo |
prov |
eidos |
demo |
test |
#0 |
status |
| listbox |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1H/1M · A31) |
| grid-list |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (2H/1M · A31) |
| tree-view |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1H/3M · A31) |
| tree-grid |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1H · A31) |
| table |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1M · engine-backed, A31 refuted) |
| virtual-list |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1M · A33 SvelteMap clean) |
| virtual-grid |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1M) |
| carousel |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (2M/1L) |
| feed |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (clean · A31 refuted) |
| pagination |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1M) |
| tag-group |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1H/2M/1L · A31) |
| rating-group |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1M) |
Group 5 — Disclosure + selection controls (stateful)
| Component |
scope |
morfo |
prov |
eidos |
demo |
test |
#0 |
status |
| accordion |
soma,sema,eidos |
Y |
Y |
Y |
Y |
Y |
|
audited (CLEAN) |
| collapsible |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1H/1M · seq-lag) |
| tabs |
soma,sema,eidos |
Y |
Y |
Y |
Y |
Y |
|
audited (CLEAN) |
| stepper |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (2M/3L) |
| toggle |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1M · seq post OK) |
| toggle-group |
soma,sema,eidos |
Y |
Y |
Y |
Y |
Y |
|
audited (1M · A31) |
| switch |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1M · seq post OK) |
| checkbox |
soma,sema,eidos |
Y |
Y |
Y |
Y |
Y |
|
audited (1M/1L · A31 group, seq post OK) |
| radio-group |
soma,sema,eidos |
Y |
Y |
Y |
Y |
Y |
|
audited (1M · A31 clean) |
| slider |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1M · no A6 leak) |
| splitter |
soma,sema,eidos |
Y |
Y |
Y |
Y |
Y |
|
audited (1M/1L) |
| scroll-area |
soma |
Y |
Y |
Y |
Y |
Y |
|
audited (1M) |
Group 6 — Actions + feedback + misc behavior
| Component |
scope |
morfo |
prov |
eidos |
demo |
test |
#0 |
status |
| button |
soma,sema,eidos |
Y |
Y |
Y |
Y |
- |
F |
audited (CLEAN · ref impl) |
| toast |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1M) |
| announce |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (2M) |
| clipboard |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1M/2L) |
| drag-drop |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (3M) |
| form |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1M · A36 fix held) |
| file-upload |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1M) |
| toolbar |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1M · A35 fix held) |
| breadcrumb |
soma |
Y |
Y |
Y |
Y |
Y |
|
audited (1H · archetype-item) |
| meter |
soma |
Y |
Y |
Y |
Y |
Y |
|
audited (1M) |
| progress |
soma |
Y |
Y |
Y |
Y |
Y |
|
audited (1M) |
| timeline |
soma,sema,eidos |
Y |
Y |
Y |
Y |
Y |
|
audited (1M · archetype clean) |
| image-adjustments |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1M) |
| image-picker |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (1M) |
| cropper |
soma,sema |
Y |
Y |
Y |
Y |
Y |
|
audited (2M/1L) |
| chronos |
soma,sema |
Y |
Y |
Y |
Y |
- |
EXCL |
excluded |
| metrics |
sema,eidos |
Y |
dir* |
Y |
Y |
- |
#0 RESOLVED |
audited (1M) |
| words |
soma,sema |
Y |
Y |
Y |
Y |
Y |
EXCL |
excluded |
Group 7 — Eidos-only · layout primitives (theming-heavy; A/B/C/D light)
| Component |
scope |
morfo |
prov |
eidos |
demo |
test |
status |
| box |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| flex |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| grid |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| stack |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| group |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| wrap |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| container |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| section |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| aspect-ratio |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| auto-grid |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| float |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
Group 8 — Eidos-only · typography + text
| Component |
scope |
morfo |
prov |
eidos |
demo |
test |
status |
| text |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| heading |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| display |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| code |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| code-block |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| kbd |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| mark |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| highlight |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| link |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| s-text |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| s-text-virtual-list |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
Group 9 — Eidos-only · visual elements + composite-eidos + service
| Component |
scope |
morfo |
prov |
eidos |
demo |
test |
status |
| badge |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| card |
sema,eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| avatar |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| avatar-group |
eidos |
Y |
- |
(co) |
Y |
- |
audited (B8 theming) |
| image |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| separator |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| skeleton |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| spinner |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| qr-code |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| icon |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| banner |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| chart |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| button-group |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| split-button |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| fab |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| radio-cards |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| format-date |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| format-number |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| relative-time |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| trans |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
| cascade |
eidos |
Y |
- |
Y |
- |
- |
audited (B8 theming) |
| motion |
eidos |
Y |
- |
Y |
- |
- |
audited (B8 theming) |
| scroll-frames |
eidos |
Y |
- |
Y |
Y |
- |
audited (B8 theming) |
Proposed audit order (batches)
Rationale (from §1.4): the hardest, most-coupled components are audited first because
they expose systemic issues (dismissal-trigger-exclusion, focus return, floating-gap
canon, virtual-vs-roving keyboard divergence, scope-vs-eidos-dir drift, TSC eager
substitution) that then recur in the simpler ones — finding them early makes every later
audit faster and lets the roll-ups (SUMMARY, SHARED_EXTRACTION, THEMING_COHERENCE,
VALIDATOR_GAPS) accrete real systemic findings.
- Batch 1 (first, on approval) — the 5 canonical overlays:
select, dialog, popover, combobox, dropdown-menu.
These are exactly the protocol's named hard set; portal + floating + dismissal + focus
- (select/combobox) typeahead + virtual-vs-roving focus. Systemic patterns surface here.
- Batch 2 — remaining overlays + menus:
context-menu, menubar,
navigation-menu, tooltip, drawer, alert-dialog, command, link-preview,
float-panel, onion-menu, menu-dial (+ confirm the two #0 provider anomalies).
- Batch 3 — pickers + calendar family: the 5 pickers,
calendar, range-calendar,
month-grid, year-grid, picker-shell.
- Batch 4 — fields: Group 3 (14).
- Batch 5 — collections + data: Group 4 (12).
- Batch 6 — disclosure + selection controls: Group 5 (12).
- Batch 7 — actions + feedback + misc: Group 6 (17;
words excluded).
- Batch 8 — eidos-only primitives: Groups 7–9 (44). Dimensions A/B/C/D are light
(no provider behavior); focus is E / E-bis (theming coherence) + the
THEMING_COHERENCE
roll-up, where these contribute the most distinct hardcoded-value / token-naming data.
After each batch: write the per-component audit/components/{kebab}.md files, regenerate
the roll-ups (00_WORKLIST statuses, SUMMARY, SHARED_EXTRACTION, THEMING_COHERENCE,
VALIDATOR_GAPS), then stop and report before the next batch.
Path note: the protocol fixes the output root at audit/ (repo root) so MODE=reeval
can find audit/components/{kebab}.md. The repo's own convention parks audits under
docs/process/; I followed the protocol's literal path. Say the word if you want it
relocated under docs/process/audit/ instead.