3.8 KiB
3.8 KiB
Tasks: enterprise-react-audio-fingerprint
Change ID: enterprise-react-audio-fingerprint
Package: @suaveplan/react-audio-fingerprint
Target path: packages/ui/react/react-audio-fingerprint
Prerequisite packages on Verdaccio: @suaveplan/react-audio, @suaveplan/audio-analysis-spectrum, @suaveplan/audio-engine-browser, @suaveplan/error, @suaveplan/types, @suaveplan/opentelemetry, @suaveplan/events
1. Scaffold
- 1.1 Directory tree per proposal.
- 1.2
package.jsonat0.1.0,"sideEffects": false, full subpath exports. React 19 peer;python-audio-fingerprintoptional peer gated to./backends/python-backend. - 1.3
tsconfig.json,vitest.config.ts(happy-dom).
2. Error codes
- 2.1
src/error-codes.ts—defineCodes("REACT_AUDIO_FINGERPRINT", [...]),ReactAudioFingerprintError extends AudioError. - 2.2
error-codes.test.ts— every code reachable.
3. Fingerprint algorithm
- 3.1
src/fingerprint/peak-detector.ts— 2D local-peak detection above noise floor with cap. - 3.2
src/fingerprint/constellation.ts— pair hashing within target-zone window; 32-bit quantisation. - 3.3
src/fingerprint/audio-fingerprinter.ts— composes peak-detector + constellation againstaudio-analysis-spectrumFFT/spectrogram. - 3.4
audio-fingerprinter.test.ts— determinism, peak count cap, noise-floor behaviour.
4. Matcher
- 4.1
src/fingerprint/fingerprint-matcher.ts— time-offset histogramming. - 4.2
fingerprint-matcher.test.ts— sort order, partial match resilience.
5. Corpus
- 5.1
src/corpus/memory-corpus/—Map-backed,'changed'event. - 5.2
src/corpus/indexeddb-corpus/— IDB-backed, persistence-across-instances test. - 5.3 OTel
corpus_sizegauge wiring.
6. Backends
- 6.1
src/backends/local-backend/— default; runs the local algorithm. - 6.2
src/backends/python-backend/— optional subpath delegating topython-audio-fingerprintover HTTP.
7. Hooks
- 7.1
use-audio-fingerprint—useSyncExternalStore-backed;AbortSignalcancellation; SSR-safe initial state. - 7.2
use-fingerprint-matcher— subscribes to corpus'changed'; clearslastResultson corpus identity change. - 7.3
use-fingerprint-progress— convenience progress accessor.
8. Components (each: .tsx, .md, .types.ts, .test.tsx, .stories.tsx)
- 8.1
audio-fingerprint-uploader/— DnD + file picker + URL paste; progress bar; accessible. - 8.2
fingerprint-match-display/— ranked list with confidence bars. - 8.3
fingerprint-visualizer/— constellation overlay on spectrogram; tooltip on peak focus.
9. Benchmarks
- 9.1
src/__benchmarks__/fingerprint.bench.ts— fingerprint a 60 s reference; report MB/s. - 9.2
src/__benchmarks__/match.bench.ts— match a 10 s query against a 10 k-entry corpus.
10. Tests
- 10.1
tests/integration.test.tsx— uploader → fingerprint → match against memory corpus → display. - 10.2
tests/purity.test.ts— no FFT insrc/; dependency-set allowlist. - 10.3
tests/property.test.ts(fast-check) — noisy clip matches its source; distinct sources distinct fingerprints. - 10.4
tests/exports.test.ts— every surface subpath; python gated. - 10.5
tests/bundle-size/{root-only,matcher-only}.size.test.ts.
11. Docs + verify + archive
- 11.1 All co-located
.md(≥200 words). - 11.2
README.mdat package root with quick-start, corpus example, backend swap example. - 11.3
bunx turbo lint typecheck test --filter=@suaveplan/react-audio-fingerprintgreen; coverage 100/100/100/100. - 11.4 Walk every
### Requirementand**Verified by:**. - 11.5 Fold spec delta; move change folder to archive.