4.1 KiB
4.1 KiB
Tasks — Add @suaveplan/audio-ir-room-plugin-club
Prereqs:
add-audio-ir-core,add-audio-ir-loader,add-audio-decode-wavmust reach the SHIPPED state before this change's §4 integration tests can pass.
1. Spec authoring
- 1.1 Read
openspec/AGENTS.md§§ 13, 14, 14a, 2c, 6a, 193 - 1.2 Read
openspec/changes/add-audio-ir-core/design.md - 1.3
proposal.md(incl.## Impactper §14a) - 1.4
specs/audio-ir-room-plugin-club/spec.md— every requirement carries**Verified by:** - 1.5 Working-notes checklist of every
### Requirementand#### Scenario
2. Package scaffold
- 2.1
mkdir -p packages/audio-ir/audio-ir-room-plugin-club/{src/{manifest,register},files,tests/integration} - 2.2
package.json—version: 0.0.0,sideEffects: false,files: ["dist", "files", "README.md"], deps@suaveplan/{audio-ir-core,storage-uri,storage-uri-plugin-bundle,error,types}, dev@suaveplan/{audio-ir-loader,audio-decode-wav},zod,tslib - 2.3
tsconfig.lib.json,vite.config.ts(vite-plugin-static-copy to mirrorfiles/intodist/files/if needed; OR use thefilesfield ofpackage.jsonto shipfiles/directly without copy) - 2.4 Subpath exports:
.,./manifest,./register - 2.5
README.md— including a## License & sourcessection recording the Mountain Duck origin path AND the upstream attribution for the IRs
3. Asset import
- 3.1 Copy
/mnt/c/Users/Administrator/Mountain Duck/74a17879-9780-426d-8bd9-7ed805f53d41/media/_/audio/ir/room/club1.wav→packages/audio-ir/audio-ir-room-plugin-club/files/club1.wav - 3.2 Copy
/mnt/c/Users/Administrator/Mountain Duck/74a17879-9780-426d-8bd9-7ed805f53d41/media/_/audio/ir/room/club2.wav→packages/audio-ir/audio-ir-room-plugin-club/files/club2.wav - 3.3 Verify both files exist AND are non-empty AND decode through a standalone
decodeWavsmoke test - 3.4 Record decoded
channelsandsampleRatefor each file — these are the manifest constants
4. Implementation
- 4.1
src/manifest/manifest.ts+.md—manifest: IrManifestwith both entries - 4.2
src/register/register.ts+.md—register(registry, resolver)wiringbundleUriPlugin+registerManifest - 4.3
src/index.ts— explicit named re-exports (manifest,register)
5. Tests
- 5.1
src/manifest/manifest.test.ts— every scenario from manifest requirement - 5.2
src/register/register.test.ts— every scenario from register requirement - 5.3
tests/integration/file-presence.test.ts— files exist on disk - 5.4
tests/integration/end-to-end.test.ts— full pipeline through realaudio-ir-loader+decodeWav - 5.5 Every
it(...)carries{ timeout: 5000 }(or 30000 for async)
6. Documentation
- 6.1 Sibling
.mdfor every.ts(≥200 words, basic + advanced examples) - 6.2 README
## Modules+## License & sources - 6.3 Update root
CLAUDE.mdAudio IR subsection
7. Pre-archive verification (5-gate triple)
- 7.1
bun run check— 0/0/0/0 - 7.2
bunx turbo lint typecheck test --filter=@suaveplan/audio-ir-room-plugin-club— green - 7.3
bunx turbo test:coverage --filter=@suaveplan/audio-ir-room-plugin-club— 100/100/100/100 - 7.4
bun scripts/openspec-conformance.ts @suaveplan/audio-ir-room-plugin-club— exit 0 - 7.5
bunx turbo build --filter=@suaveplan/audio-ir-room-plugin-club— green
8. Pre-archive 7-row checklist (AGENTS §13)
- 8.1 Type assertions on the manifest constant (literal types preserved through export)
- 8.2 Zod schemas wired (manifest validates through
IrManifestSchema) - 8.3 No error codes owned by this package (it reuses
AUDIO_IR.*from core) — N/A - 8.4 Strict-mode behaviors tested
- 8.5 OTel is inherited from core + loader — N/A here
- 8.6 Lifecycle dedup tested (double-register surfaces DUPLICATE_ID)
- 8.7 No retroactive tick
9. Archive
- 9.1 Fold delta into new
openspec/specs/audio-ir-room-plugin-club/spec.md - 9.2 Move folder to
openspec/archive/<yyyy-mm-dd>-add-audio-ir-room-plugin-club/ - 9.3 Refresh
MANIFEST.md