v2.61.1
v2.61.1
The strata cleanup batch deferred from the v2.61.0 review — behavior-neutral consolidation and hot-path efficiency. No new actions or parameters.
Changed
- One clip resolver —
strata.resolve_clip()replaces the four drifting per-module wrappers and rides the pre-v9 auto-ingest fallback hoisted out of deep_vision intoanalysis_store.resolve_clip_uuid_ingesting(): a clip ref that resolves fordeepennow resolves identically for every strata action, including on older analysis roots. - One float32 codec —
pack_curve/unpack_curvedelegate toembeddings.pack_vector/unpack_vectorinstead of duplicating the BLOB convention. - Decode once —
strata_rundecodes the media file a single time when several audio analyzers run (prosody + beat_grid previously each ran a full ffmpeg decode); the shared_audio_contextpreamble also collapses their duplicated require/resolve/decode blocks. - Registry-derived capabilities —
ANALYZERScarries the run function plus requires/writes metadata;capabilities()derives from it, so adding an analyzer is one entry. - Query-layer caching — word-find hits clustering in one clip unpack each curve blob once, and
timeline_strataresolves + bundles a source clip reused across many placements once. - Sargable event windows (schema v15) — windowed
read_eventsbounds its span-overlap lower edge by the track'sMAX(duration_seconds)(a b-tree descent via the newix_events_clip_track_spanindex) soix_events_clip_trackrange-seeks instead of scanning the track. backfill_wordsiterates report blobs lazily with a transcription prefilter instead of loading every blob into memory;detect_breathsdrops its unreachable non-numpy fallbacks.
Validation
- Full offline suite: 1,431 tests green (13 new covering the shared resolver + pre-v9 fallback, codec identity, decode-once, per-clip caching, long-span window overlap, and the index range-seek query plan). Static checks, drift guards, API-parity audit, and
npm packall pass. - No Resolve behavior changed; live test not required.