3.3 KiB
3.3 KiB
Tasks — enterprise-react-control-surface
0. Pre-flight (non-negotiable)
- 0.1 Confirm clean working tree (
git statusreports nothing) and no in-flight worktrees with uncommitted work (git worktree listthengit statusin each) - 0.2 Account for every
.claude/worktrees/*entry; prune stale ones viabun scripts/worktree-prune.ts --remove. - 0.3 Confirm
MANIFEST.mdmatchesfind packages -maxdepth 3 -name package.json | wc -l.
1. Spec authoring
- 1.1 Draft
proposal.md,tasks.md,specs/react-control-surface/spec.md
2. Implementation — atomic controls (each: .tsx, .types.ts, .test.tsx, .stories.tsx, .md)
- 2.1
src/controls/knob/ - 2.2
src/controls/slider-v/+slider-h/ - 2.3
src/controls/button-momentary/+button-latching/ - 2.4
src/controls/switch-2/+switch-3/ - 2.5
src/controls/led/ - 2.6
src/controls/digital-display/ - 2.7
src/controls/meter-vu/+meter-peak/ - 2.8
src/controls/meter-spectral/ - 2.9
src/controls/xy-pad/ - 2.10
src/controls/jog-wheel/ - 2.11
src/controls/piano-key/ - 2.12
src/controls/drum-pad/ - 2.13
src/controls/text-label/+image/
3. Grouping + runtime
- 3.1
src/grouping/group/,rack/,panel/ - 3.2
src/runtime/surface.tsx—<Surface schema bindings />walks + renders - 3.3
src/runtime/binding-registry/binding-registry.ts— discriminated dispatcher - 3.4
src/runtime/binding-registry/handlers/{plugin-param, transport, midi-out, midi-in, dmx, compound}.ts
4. Skin contract + accessibility
- 4.1
src/skin/surface-skin-provider.tsx - 4.2
src/skin/skin.types.ts+ default CSS-var palette - 4.3 Accessibility audit per control: keyboard ops, ARIA,
prefers-reduced-motion
5. Error codes + telemetry
- 5.1
src/error-codes.ts—REACT_CONTROL_SURFACE.{UNKNOWN_KIND, BINDING_HANDLER_MISSING, INVALID_SCHEMA}viadefineCodes - 5.2
src/telemetry/telemetry.ts— countercontrol_surface_interactions_total{kind}, histogramcontrol_surface_render_duration_ms
6. Tests
- 6.1 Per-control
.test.tsxcovering pointer + keyboard + aria-attribute coverage - 6.2
tests/runtime.test.tsx— render a 4-pad drum surface from JSON, assert handler invocation on press - 6.3
tests/binding-fanout.test.tsx—compoundbinding fires every handler - 6.4
tests/accessibility.test.tsx—@testing-library/jest-domaria + role assertions on every control - 6.5 Every
it(...)carries{ timeout: 5000 }(30000 async)
7. Documentation
- 7.1 Sibling
.mdper.tsx/.ts(≥200 words, basic + advanced examples) - 7.2 README with
## Atomic controls+## Runtime + bindings+ 3 example surfaces (drum machine, mixer, piano)
8. Pre-archive verification
- 8.1
bunx turbo lint typecheck test --filter=@suaveplan/react-control-surface— green - 8.2
bunx turbo test:coverage --filter=@suaveplan/react-control-surface— 100/100/100/100 - 8.3
bunx turbo build --filter=@suaveplan/react-control-surface— green
9. Archive
- 9.1 Fold spec delta →
openspec/specs/react-control-surface/spec.md - 9.2 Move folder →
openspec/archive/<yyyy-mm-dd>-enterprise-react-control-surface/ - 9.3 Refresh
MANIFEST.md - 9.4 Prune worktree