|
|
# 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.
|