Synapse v1.9.4 — "completion pack"¶
Fifth release of the v2.0 train — the last of the refactor/feature "completion" set before 2.0.0's breaking changes. Long-source chunking finally reaches the default block-loop pipeline (closing the last blocker to deleting the legacy JSON path), review-create moves onto the same engine, ingest gets a self-healing 429 queue, per-device scoped API tokens land, MCP/clipper go multi-vault-aware, pages get a one-line gloss in the index catalogue, and the deprecations that 2.0.0 will act on start warning now. Five workstreams, two migrations.
Added¶
- Chunked-analysis long-source support in the block loop (flagship, PF-LONGSRC-1):
run_block_loop's Stage 1 now chunks sources pastingest_long_source_char_threshold(48K chars) via the same bounded chunkerlong_source.pyalready used for the legacy JSON path, then merges per-chunk analyses under## Source section i/N analysisheaders. This fixes the silent truncation of long regulatory PDFs. - Smart ingest queue (PF-QUEUE-429-1): the queue now auto-pauses on a 429 from any provider
with a decaying backoff ladder (30s → 60s → 120s → 300s, hard-capped per I7) instead of
failing the run outright. New per-capability concurrency caps
(
ingest_concurrency_cli/_api/_local, default 1/3/1). - Scoped, revocable API tokens (PF-AUTH-1): new
api_tokenstable (migration) — label, PBKDF2-hashed secret (plaintext returned once, at creation, never again), optional vault scope, read-only flag,last_used_at.POST/GET/DELETE /config/api-tokens+ a Settings → Security UI card. - Multi-vault MCP and clipper (PF-MCP-VAULT-1, PF-F11-PICKER-1): every MCP tool gains an
optional
vaultparameter (falls back to the active vault when omitted or unknown). The Chrome clipper'sClipRequestgainsvault_idand its popup UI gets a vault picker. - Gloss catalogue (PF-INDEX-GLOSS-1): a new nullable
Page.summarycolumn (migration), populated from each page's first paragraph at write time and rendered as an em-dash gloss next to everyindex.mdentry, capped at 120 chars. - Deprecation warnings for 2.0.0's planned removals: a startup warning fires when
ingest_pipeline_formatis set to"json", and importing from the orchestrator compatibility facade or theapp.main.*aliases now raisesDeprecationWarning.
Changed¶
- Review-create migrated onto the block loop (BE-DEBT-1): the single-page generation route
now calls
ingest.block_loop.run_block_loopinstead ofingest.loop.run_orchestrated_loop.
Fixed¶
- A real import-linter layering violation found during this release's own verification: the new
MCP vault-parameter code picked up a transitive import of
app.mainthroughapp.projects. Fixed with a clean extraction: the pure, read-only registry model moved into a newapp/project_registry.py. - Two rounds of docs-gate drift caught before merge (ER diagram missing the new
api_tokenstable andpages.summary; OpenAPI missing the new MCPvaultparameters). - A migration-number collision between this release's two independently-developed branches —
resolved at merge time by renumbering the second-merged migration to
0037.
Upgrade¶
Run Alembic migrations 0036 (api_tokens table) and 0037 (pages.summary column). Both
are additive. A one-time idempotent --dry-run-capable backfill script covers the summary
column for pages written before this release.