festifun/backend/tests
type-two 0f8685b49e M10: audio features — beats & onsets from the reference ingest WAV
run_features() fills the foundation2 stub: librosa beat/tempo tracking +
onset-strength detection at a 10 ms hop (librosa's default 32 ms grid at
16 kHz quantizes past the +/-50 ms acceptance bound), tempo from the median
inter-beat interval, times mapped to t_global via the frozen timebase
helpers. Degradation per house style: missing videos/WAV -> summary with
note, nothing written; silent/short/beatless audio -> valid-empty
beats.json, never a crash.

Acceptance (test_audio_features.py, 7 tests): synthetic 120 BPM grid
recovered — tempo 120.0 (+/-2 required), worst beat 30 ms off grid
(+/-50 required); the three ground-truth bangs appear as strong onsets;
silence/short/missing all degrade cleanly; CLI dispatch end-to-end.

CR-4: minimal stub-era assertion updates in test_phase5_api.py (CLI stub
loop shrinks to capsule) per the approved CR-1 precedent — see
plan/CHANGE_REQUESTS.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 17:48:31 +10:00
..
conftest.py Foundation (M0 + M3 + frozen contracts): scaffold, synthetic fixtures, full API 2026-07-16 00:45:55 +10:00
test_api.py foundation2 (phase 5a): contracts, stubs, hooks & UI wiring for lanes E/F/G 2026-07-17 17:31:08 +10:00
test_audio_features.py M10: audio features — beats & onsets from the reference ingest WAV 2026-07-17 17:48:31 +10:00
test_audio_sync.py Sync solver: cache per-signal FFTs across the pairwise GCC-PHAT stage 2026-07-17 17:02:27 +10:00
test_capture.py Live capture: USB webcams, laptop cams, and phones -> data/raw 2026-07-17 15:43:51 +10:00
test_events_ai.py lane D (M7): audio moment detection + pluggable AI classification 2026-07-16 08:34:56 +10:00
test_geometry.py Lane B (M2 + M8 geometry): COLMAP reconstruction, geometry math, graceful degradation 2026-07-16 08:40:46 +10:00
test_ingest.py Lane A (M1): ingest + GCC-PHAT audio sync 2026-07-16 01:13:56 +10:00
test_phase5_api.py M10: audio features — beats & onsets from the reference ingest WAV 2026-07-17 17:48:31 +10:00
test_resolve.py Phase 4 polish: anchor supersede + delete, docs/ideas, field-test scaffolding 2026-07-16 12:15:35 +10:00
test_sfm.py Lane B (M2 + M8 geometry): COLMAP reconstruction, geometry math, graceful degradation 2026-07-16 08:40:46 +10:00
test_synthetic.py Foundation (M0 + M3 + frozen contracts): scaffold, synthetic fixtures, full API 2026-07-16 00:45:55 +10:00