This release adds 3 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
+1 more
Summary
AI summaryAdds perception strata model with events, curves, transcript words, story beats, diffing, cut candidate scoring, timeline versioned snapshots.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Low |
Add `take_diff(clip_a, clip_b, text?)` action to align and diff two deliveries on transcript words. Add `take_diff(clip_a, clip_b, text?)` action to align and diff two deliveries on transcript words. Source: llm_adapter@2026-07-14 Confidence: high |
— |
| Feature | Low |
Add `cut_candidates(clip_id, time_seconds)` joint solver scoring cut points with human‑readable reasons. Add `cut_candidates(clip_id, time_seconds)` joint solver scoring cut points with human‑readable reasons. Source: llm_adapter@2026-07-14 Confidence: high |
— |
| Feature | Low |
Introduce `strata_query` for windowed cross‑track bundles per clip or project‑wide word find with context. Introduce `strata_query` for windowed cross‑track bundles per clip or project‑wide word find with context. Source: llm_adapter@2026-07-14 Confidence: high |
— |
| Feature | Low |
Add `timeline_strata` projecting clip strata through versioned timeline placements using recorded fps and start frame. Add `timeline_strata` projecting clip strata through versioned timeline placements using recorded fps and start frame. Source: llm_adapter@2026-07-14 Confidence: high |
— |
| Feature | Low |
Introduce `plan_story_beats`, `commit_story_beats`, and `list_story_beats` for host‑LLM story beat management with append‑only persistence. Introduce `plan_story_beats`, `commit_story_beats`, and `list_story_beats` for host‑LLM story beat management with append‑only persistence. Source: llm_adapter@2026-07-14 Confidence: high |
— |
| Feature | Low |
Schema v13 perception strata introduces generic `events` and `curves` tracks, plus promoted `transcript_words` and `story_beats` rows. Schema v13 perception strata introduces generic `events` and `curves` tracks, plus promoted `transcript_words` and `story_beats` rows. Source: llm_adapter@2026-07-14 Confidence: low |
— |
| Feature | Low |
Add perception strata schema v13 with generic events and curves tracks. Add perception strata schema v13 with generic events and curves tracks. Source: granite4.1:30b@2026-07-14-audit Confidence: low |
— |
| Feature | Low |
Promote transcript_words and story_beats from report blob into queryable rows. Promote transcript_words and story_beats from report blob into queryable rows. Source: granite4.1:30b@2026-07-14-audit Confidence: low |
— |
| Feature | Low |
Introduce local analyzers strata_run for prosody, beat grid, motion energy, and face detection using ffmpeg, OpenCV, and MediaPipe. Introduce local analyzers strata_run for prosody, beat grid, motion energy, and face detection using ffmpeg, OpenCV, and MediaPipe. Source: granite4.1:30b@2026-07-14-audit Confidence: low |
— |
| Feature | Low |
Add strata_status reporting per-clip track inventory and machine capabilities. Add strata_status reporting per-clip track inventory and machine capabilities. Source: granite4.1:30b@2026-07-14-audit Confidence: low |
— |
| Feature | Low |
Implement backfill_words to promote existing word timestamps without re‑analysis. Implement backfill_words to promote existing word timestamps without re‑analysis. Source: granite4.1:30b@2026-07-14-audit Confidence: low |
— |
| Feature | Low |
Add schema v14 timeline timebase snapshot recording fps and start frame at archive time. Add schema v14 timeline timebase snapshot recording fps and start frame at archive time. Source: granite4.1:30b@2026-07-14-audit Confidence: low |
— |
| Feature | Low |
Run full offline test suite with 1,418 tests passing and 17 new regression tests covering the fixes. Run full offline test suite with 1,418 tests passing and 17 new regression tests covering the fixes. Source: granite4.1:30b@2026-07-14-audit Confidence: low |
— |
| Feature | Low |
Add defensive getter reads for timeline frame rate and start frame at archive time, guarded by try/except and unit‑tested against mock timelines. Add defensive getter reads for timeline frame rate and start frame at archive time, guarded by try/except and unit‑tested against mock timelines. Source: granite4.1:30b@2026-07-14-audit Confidence: low |
— |
| Bugfix | Medium |
Prevent ingest upsert from cascade-deleting clip-child tables. Prevent ingest upsert from cascade-deleting clip-child tables. Source: llm_adapter@2026-07-14 Confidence: high |
— |
| Bugfix | Medium |
Preserve existing word rows when re‑analyzing transcripts lacking words. Preserve existing word rows when re‑analyzing transcripts lacking words. Source: llm_adapter@2026-07-14 Confidence: high |
— |
| Bugfix | Medium |
Prevent machine story‑beat commits from overwriting human beats with identical spans and labels. Prevent machine story‑beat commits from overwriting human beats with identical spans and labels. Source: llm_adapter@2026-07-14 Confidence: high |
— |
| Bugfix | Medium |
Hardened dispatch handling: reject non‑positive fps, escape SQL LIKE metacharacters, fetch all recorded tracks, safely run ffmpeg via `proc.safe_run`, and degrade gracefully on missing mediapipe/protobuf. Hardened dispatch handling: reject non‑positive fps, escape SQL LIKE metacharacters, fetch all recorded tracks, safely run ffmpeg via `proc.safe_run`, and degrade gracefully on missing mediapipe/protobuf. Source: llm_adapter@2026-07-14 Confidence: high |
— |
Full changelog
v2.61.0
Perception strata — a timecoded track model over every analyzed clip, plus the query layer that turns it into editorial answers. Ten new media_analysis actions, all local compute (ffmpeg + numpy; the face tier detects opencv + mediapipe and degrades honestly when absent). Everything measures, compares, flags, or aims — nothing decides; the cut is the editor's.
Added
- Schema v13: perception strata — two generic track shapes instead of a table per sensor:
events(pause, breath, hesitation, blink, beat, downbeat, …) andcurves(pitch, vocal_energy, speech_rate, motion_energy, face curves as float32 series), plus two promotions out of the report blob:transcript_words(per-word timestamps as queryable rows) andstory_beats(units of meaning over the transcript). Machine re-runs replace their own rows;source='human'rows are append-only and always win. - Local analyzers (
strata_run) — prosody, beat grid, motion energy, and face strata (blink/gaze/expression via opencv + mediapipe when installed).strata_statusreports the per-clip track inventory and what this machine can run;backfill_wordspromotes word timestamps already sitting in stored report blobs without re-analysis. take_diff(clip_a, clip_b, text?)— align two deliveries of the same line on transcript words and diff pace, pauses, pitch, and energy. Deltas only; it never picks a winner.cut_candidates(clip_id, time_seconds)— the joint solver: scores every frame around an intended cut on the cut-point grammar (cut on the blink, don't cut mid-word, don't bisect a breath, pauses are doors, land on the beat, cut inside movement) with human-readable reasons and honest reporting of missing tracks.strata_query— windowed cross-track bundles per clip, or project-wide word find with a joined ±context bundle per hit.timeline_strataprojects clip strata through a versioned timeline's recorded placements.- Story beats (host-LLM pass) —
plan_story_beatsassembles a timecoded digest + JSON schema (the server never calls an LLM), the host chat produces the beats,commit_story_beatsvalidates and persists them append-only;list_story_beatsreads them back. - Schema v14: timeline timebase snapshot —
timeline_versionsrecords the timeline's fps and start frame at archive time, sotimeline_stratareturns timeline-relative frames/seconds instead of assuming 24fps against absolute (start-timecode-inclusive) snapshot frames.
Fixed
Pre-release review (multi-agent: 8 finder angles + adversarial verification) caught these before anything shipped:
- Re-ingest cascade wipe — the ingest
INSERT OR REPLACEon the clips row cascade-deleted every clip-child table underPRAGMA foreign_keys=ON; invisible while all children were rebuilt during ingest, destructive once the strata tables (not rebuilt by ingest, human annotations included) joined the cascade. The clips row is now a true upsert and is never deleted. - Words-less re-analysis wiped word rows —
ingest_transcript_wordsdeleted before validating; it now parses first, preserves existing rows when the incoming report has no words, and falls back per-segment to the top-level words list for mixed reports. - Machine story-beat commits could replace human rows — the content-hash
beat_uuidletINSERT OR REPLACEoverwrite a human beat sharing the same span+label. Beat rows now get random UUIDs and plain INSERTs; duplicate spans within one commit are skipped and reported. - Dispatch hardening — stringified numbers no longer crash
strata_queryor silently redirecttimeline_stratato the latest version;cut_candidatesrejects non-positive fps instead of ZeroDivisionError; word matches escape SQL LIKE metacharacters; clip bundles fetch every recorded track instead of a hardcoded subset; analyzer ffmpeg calls go through the stdio-safeproc.safe_run; a broken mediapipe/protobuf install degrades to "face unavailable" instead of crashingstrata_status.
Validation
- Full offline suite: 1,418 tests green (17 new regression tests covering the fixes above). Static checks, drift guards, API-parity audit, and
npm packall pass. - No live Resolve behavior changed beyond two defensive getter reads (
GetSetting("timelineFrameRate"),GetStartFrame()) at archive time, both try/except-guarded and unit-tested against mock timelines.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
Related context
Beta — feedback welcome: [email protected]