enzyme v0.7.0
Enzyme release notes - v0.7.0
Short version
This release redesigns refresh around catalyst epochs, scales catalyst allocation by vault size, and makes hosted billing honest: credits are now deducted only after catalysts are actually generated, and a provider 402 is never misreported as "top up your Enzyme account" — top-up guidance appears only when your account balance is genuinely the cause. Storage shrinks substantially via int8 embedding quantization and one-time occurrence-context slimming (with automatic disk reclaim), and append-only logs (daily notes, journals) are now detected across common date formats and kept as recency excerpts instead of polluting catalyst context. A new fleet-skew compatibility suite pins the CLI↔server wire contract across upgrade skew.
What shipped
Catalyst refresh and allocation
- Refresh is rebuilt around catalyst epochs. Refresh generates into a shadow epoch and activates it only when the result passes a quality gate, so a failed or degraded refresh keeps your previous catalysts instead of clobbering them. (54d0a95, with carry-forward hardening in 99b002b)
- Allocation scales with document count. Catalyst budget now anchors on the 90th-percentile vault size instead of a fixed cliff, removing the 20-vs-3 discontinuity between small and mid-size vaults without collapsing large skewed ones. (99b002b, PR #6)
- Generation reliability. Empty or unparseable LLM responses are retried, and prior catalysts carry forward when a refresh produces nothing. (99b002b)
- FolderExclusions is the single source of truth for exclusions, threaded through the live selection path;
excludenow means don't-index (feeds the index gate). (4699acb, b0ae8e9, b9dc3e8)
Billing you can trust (hosted mode)
- Credits are deducted only after successful generation. A hosted run that produces zero catalysts now bills zero — the 3-credit init deduct and 1-credit refresh deduct both moved after the success gate. No refund machinery needed. (9572b14)
- Billing errors can only come from billing endpoints. Provider/LLM errors are typed (
LlmApiError { status, body }) and classified by HTTP status alone: a completion-level 402 stops generation with a neutral capacity message ("try later or--use-env-llm"), and never claims your Enzyme balance is empty. Substring matching on error bodies is gone — a 503 that merely mentions "Insufficient credits", or a quota value containing "402", can no longer trigger a false top-up prompt. BYOK (--use-env-llm) runs never touch billing endpoints at all. (9572b14) - A reachable server's 402 is no longer reported as "server unreachable." A free-config 402 now says exactly what it is: insufficient Enzyme credits, with top-up guidance — the one place that message belongs. (9572b14)
- A corrupt shared api-config cache self-heals (drop, refetch, overwrite) instead of erroring out. (9572b14)
Smaller, cleaner storage
- Embeddings stored as int8 (
int8_v1). Chunk and catalyst embeddings quantize to ~4x smaller on-disk form; consumers still operate on f32. One-time migration converts existing vaults. (1c7574c) - Occurrence-context slimming + automatic disk reclaim. Full note bodies that the pipeline could never use are slimmed to bounded excerpts (or nulled), with a single post-migration VACUUM keyed on actual freed space. Migrations are crash-idempotent and run concurrently-safe. (6d5d609, 4790af9, 179162e, 21219cb)
Append-only logs handled as logs
- Daily notes and journals are auto-detected (≥3 dated entries with real bodies, mostly monotonic dates) and contribute a most-recent-entry excerpt instead of a full-body context that pollutes retrieval. Detection now parses ISO,
MM/DD/YYYY,MM-DD-YYYY, month-name ("July 28, 2026", "Jul 28 2026"), and "28 July 2026" headers. (fb50fe6, baa817c) - Frontmatter
type:override is authoritative.type: log|journal|diary|dailyforces log handling;type: note|essay|page|referencesuppresses it. Detection runs once and is threaded through the pipeline, so an override on a file with unparseable dates degrades explicitly (generic chunking, no recency excerpt) instead of silently misbehaving. (baa817c) - Stub notes don't false-positive. The word-count floor was replaced with a structural gate (entries must have non-empty bodies), so dated wikilink lists and short checklists don't get flagged as logs. (baa817c)
Compatibility and installers
- Fleet-skew compat suite. Seven e2e suites pin the CLI↔server contract across upgrade skew: old CLI × new server response tolerance, pool-dry 402s, entitlement skew, cache/machine skew, and new-endpoint 404 tolerance. The billing-policy acceptance gates that motivated this release ship green. (059be66, d65da09)
- Installers preserve Enzyme user data across reinstall. (317dda7)
- Anthropic sampling compatibility fix in the LLM client. (c4f0d3c)
Why this matters
Two failure modes drove this release. First, refresh could destroy good catalysts on a bad run; epochs make refresh transactional. Second, billing errors were classified by substring-matching provider error text, which misattributed provider capacity problems (including shared-pool exhaustion) to the user's account balance and billed credits up front even when generation failed. The new policy is structural rather than heuristic — billing verdicts can only originate from billing endpoints — which is simpler to maintain and impossible to trip with lookalike error text.
Measured improvements
- Embedding storage: raw f32 → int8_v1, ~4x smaller embedding blobs on disk (format change; exact vault savings depend on chunk count). Source:
crates/enzyme-core/src/embedding/quantize.rs, migration indb/migrations.rs. Caveat: no benchmarked end-to-end vault-size numbers in this range. - Test coverage: 432 enzyme-core + 106 enzyme-cli tests green at tag time (16 CLI suites, 0 failures), up from 398/~50 at v0.6.2.
Upgrade / how to try it
Standard update path; migrations (context slim, excerpt backfill, int8) run automatically on first open of an existing vault and are crash-idempotent. After updating, enzyme status should show your vault healthy; a one-time pause on first open of a large vault is the storage migration + VACUUM. Hosted users: if generation stops with a capacity message, that is provider/pool-side — your credits were not deducted for failed runs.
Maintainer review checklist
- Git range and release channel are correct (v0.6.2..HEAD on master).
- Every feature claim maps to a commit (hashes inline).
- Metrics carry source + caveat; no invented benchmarks.
- No unsupported security, privacy, customer, or benchmark claims.