You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
svelte-kit-vice/audit/components/accordion.md

37 lines
2.3 KiB

# Audit: accordion
audit-version: 1
audited-at: 2026-06-26
scope:
method: adversarially-verified workflow; HIGH lead-verified. B6 ground-truth: checkbox/toggle/switch commit-toggle = sequence post (lag-fixed); radio-group/tabs/accordion/stepper set state at call-site (pre OK); toggle-group + checkbox-group carry the A31 .includes pattern (SYS-7); slider has no gesture-layer A6 leak.
provider: G:\dev\svelte\vicen\src\uix\soma\components\accordion\accordion-provider.svelte.ts
sequence-audit: State set at call-site (line 104 in setValue) before events fire (lines 107-108). Morfo declares both 'open' and 'close' events as sequence='post'. State change precedes trigger emission; perceptual signal acknowledges resolved state, not delaying reveal. Compliant with intentional design documented
## Summary
Counts (post-verification): CRITICAL 0 · HIGH 0 · MEDIUM 0 · LOW 0.
## Findings
_No findings survived verification (clean component)._
## No-findings dimensions
A: Morfo Contract, B: Behavior & Sequence, B: Roving Tabindex (A14), B: RTL Directional Keys (A12), B: Gesture & Observer Disposal (A15, A6), B: Hidden Input Form Participation (A13), B: ID Registration (A30), B: O(N²) Detection (A31), B: State Reactivity (A33), B: Keyboard Navigation, C: DOM Selector Safety, D: Soma-Eidos Frontier, E: TSC Token Composition, E-bis: Theming & Magic Literals, F: Test Coverage, G: Redundancy
## Theming facts (E-bis)
- magic z-index: none
- magic literals: none
- undeclared parts: none
- roles clean: true · variants clean: true
## Tests (F)
- exists: true · env: jsdom
- covers: toggle state coordination; single/multiple mode; keyboard navigation (roving triggers); aria-disabled when single non-collapsible; header/content props wired to item state; item registration/unregistration
- untested:
## Style observations (non-blocking)
- Morfo uses 'as const satisfies Morfo' (strict typecheck enabled)
- CSS variables follow --accordion-{slot} naming with role aliases for variants (outline|surface|ghost)
- ResizeObserver$ wraps observer disposal in $effect lifecycle
- Nested accordion support via closest() filter excludes siblings
- Parts registration matches morfo declarations (5/5: provider, item, header, trigger, content)
- Item id-registration direct (not $effect-wrapped)
- Keyboard routing uses getDirectionalKeys(dir, orientation) for RTL/LTR/orientation awareness

Powered by TurnKey Linux.