v0.10.0 — multi-project bins + federation search + hardening rounds
·
217 commits
to main
since this release
~130 commits since v0.9.2 — a month of Phase 9.x + hardening work.
Breaking
GET /api/media/{id}/scenesnow returns a per-scene object shape (#111). Clients that indexed the old flat/parallel-array form must read the object fields.
Highlights
- Cross-library 精選集 bins (multi-project Phase 2, PR A/B/C) — curate clips across projects; reference or verified-copy into a project.
- Live cross-project federation search with API-boundary path sanitisation.
- Optional pgvector backend for embeddings (#180) — Chroma stays default.
- Vision-model picker at ingest, 機型 camera browser, chat scene deep-links, 360 viewer, settings tabs, and the full Phase 9.x transcription/UI suite (per-language transcript tabs, correction dictionary + batch recorrect, UI scale, list view, VTT export).
Security
- Round-4 (offload denylist, cache-clear CSRF, path-leak fixes, DDL guard; admin-scoped absolute paths #22) and round-5 (~30 findings, #51): tree-killing ingest process groups, atomic proxy writes, single-flight coverage for copy_bin + retranscribe-all, transcript-merge integrity, quarantine of permanently-failing watched files.
Performance
- Round-5 batch: indexed hot columns, chunked
id IN (…), bounded federation fallback, trimmed media-detail payload, single-pass stats.
Internal
server.py(~4.5k lines) split, verbatim and behaviour-preserving, into arouters/package behind leaf service modules (#51, R5-25). Now a ~490-line app shell; no route/method/auth changes.
Full detail in CHANGELOG.md.