Complete changelog
Fixed
- Global CLI installs now run directly on Bun and report
titen --versioninstead of requiring a Node shim. - Successful SDK responses now reject array,
null, and primitive JSON envelopes with anINVALID_RESPONSETitenErrorwhile preserving the HTTP status, request ID, and safe response metadata. - Bun HTTP, Cloudflare Workers AI, and injected embedding-provider results now require exact output cardinality, ordered provider indices when present, dense configured dimensions, and finite numeric coordinates before vector query or indexing.
- Semantic readiness now distinguishes intentional FTS-only operation from partial configuration, unavailable vector initialization, legacy untracked vectors, missing requeue work, unsafe storage aliasing, empty restored projections, incompatible fingerprints, and locally observed indexing dependency failures; configured failures return a fixed local diagnostic without probing providers.
- Semantic retrieval now discards sub-threshold cosine hits before canonical hydration, so relative ranking cannot turn a best bad neighbor into useful context. Bun and Cloudflare share the same validated unit-vector boundary.
- Manual and background semantic-index drains now fence each outbox row before provider I/O, so an expired losing attempt cannot add stale failure evidence after another attempt completes the row. Lease eligibility and expiry now use the database clock at each conditional claim, so caller clock skew and earlier work cannot create an expired or stranded owner.
- Semantic-index upserts and removals now persist canonical reconciliation before external mutation and recreate it after stale or apply-then-throw outcomes, so a losing owner cannot resurrect a purged vector, erase a newer projection, or report unowned work as complete.
Changed
- Capability contract version 1 reports embedding, extraction, and background
enrichment separately while retaining
modelas a deprecated0.3.xembedding alias. Migration 13 persists the claim-index provider, model, revision, dimensions, metric, preprocessing, and schema fingerprint and requires an explicit reindex after incompatibility. Migration 14 retains only safe embedder/vector-store failure timestamps in semantic metadata until a later complete embed/upsert proves recovery. sqlite-vec@0.1.9is a pinned optional peer: default installs remain dependency-light while the documented vector install is machine-verifiable.- Context compilation now treats a missing
project_idas unscoped-only; explicit cross-project recall requirescross_project: trueplus the separatecontext:compile:allcapability and reports its effective scope and grant reason across REST, SDK, and MCP. - Breaking: Semantic configuration now requires an immutable model revision, a named role-aware preprocessing profile, and an operator-calibrated cosine floor in the existing index fingerprint. EmbeddingGemma uses its official asymmetric query/document prompts; Titen ships no universal threshold.
- Migration 16 adds nullable owner and expiry fields to the rebuildable semantic index outbox; canonical observations and claims are unchanged.