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

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.