Skip to content

v0.16.1 — engine 0.15.3: ranking walls and the re-embed cutover

Choose a tag to compare

@spranab spranab released this 18 Aug 05:44
· 10 commits to main since this release
90a5bb1

Engine bump 0.15.0 → 0.15.3. No server API or behaviour change; three of the engine's fixes change retrieval this server forwards directly.

Ranking — visible through /v1/recall

  • Currency. Freshness was computed from last_access, which the engine's own reinforce() mutates on every recall that returns a record. Ranking therefore depended on who had read a record rather than on the record. Measured: one unrelated recall demoted a correct answer from #1 to #3.
  • Valence. Applied outside the policy budget and never range-checked. A record stored with valence=100 took a 31× multiplier, letting a similarity-0.09 record outscore a similarity-0.70 one.
  • Cold lane. Admitted only access_count = 0 rows while reinforce() increments exactly that, so the rescue lane self-disabled with use: five ordinary queries drained 53% of the eligible set.

Also restored: the additive keyword boost, briefly deleted upstream. Its removal cost 0.336 MRR at 64 dims and 0.217 at 384 on a 5,218-record production clone.

Cutover — relevant to clustered deployments

Four mutators could cross a re-embed cutover, including both replication materialize_op arms. embedding_model provenance is now promoted on Swap instead of staying NULL through a completed re-embed.

Schema v41 — operator-visible

Lazy migration on first open of each engine. decay changed meaning, so the learned fit against the old meaning is voided and ranking_feature_epoch is stamped. Operators with tuned weights should expect the learner to re-fit from scratch.

Migration cost measured on a real store: 37.7 s for 92,705 rows, sub-second for everything smaller. It runs on first use, so the first request touching a large engine after restart will block for that long.

Verified on a live cluster before release

This build was deployed to a homelab node ahead of tagging:

  • server 0.8.23 → 0.16.1 (eight minor versions), engine → 0.15.3
  • all 7 engines migrated schema 32 → 41, row counts preserved exactly (145 / 1,826 / 1,908 / 92,705 / 24 / 113 / 1,510), integrity_check ok on every one
  • wire version 1.2 unchanged, min supported 1.0 — existing clients unaffected across that jump
  • every database verified on a copy before production was touched; old binary retained for rollback

Gates

Server suite 1664/0 against the new engine. CI 7/7: build-and-test on ubuntu / macOS / windows, clippy, format, chaos-gate, supply-chain.

What's Changed

  • chore: bump engine 0.15.0 -> 0.15.3 (v0.16.1) by @spranab in #91

Full Changelog: v0.16.0...v0.16.1