v0.9.0-rc.1
Pre-releasegaze v0.9.0-rc.1
TL;DR
v0.9.0-rc.1 shipped the v0.9 performance wave as a release candidate for adopter validation. The headline change was Kiji moving from a subprocess-backed safety net to in-process inference: warm p50 dropped from 323ms (subprocess) to 2.981ms (in-process ORT fp32), int8 warm p50 landed at 1.849ms, int8 cold start landed at 297ms, and the int8 bundle shrank from 249MB to 63MB with a 0.000 F1 recall delta across all locales/modes.
This was a performance and operations release, not a restore-contract release. Manifest restore semantics and the signed snapshot wire format stayed unchanged from v0.8.1, preserving the north-star contract: never leak PII, keep pseudonymization reversible, and make every token traceable.
Highlights
- Kiji became fast enough for agent loops (#250, #256, #258). In-process ORT removed the Python subprocess path from the hot loop, int8 quantization cut cold start to 297ms and bundle size to 63MB, and the tiny-model leaderboard validated Kiji int8 as the v0.9 default without recall loss.
- The pipeline stopped doing avoidable safety-net work (#252). Skip gates, the capitals heuristic, prefix cache, and length bucketing are opt-in, fail-closed performance controls. Best-case numeric input can reduce SafetyNet calls from 100% to 0%, and prefix-cache hit latency dropped -50.8%.
gaze daemonmade repeated CLI calls practical (#255). The daemon keeps a persistent JSONL stdio process alive across calls, eliminating full binary fork and model-load overhead while keeping multi-session isolation.- Runtime choice is now explicit (#257). ORT is the recommended default.
tractis the opt-in static-binary path for deployments where static linking matters more than the default runtime profile. - Benchmarking and trust artifacts caught up to the perf work (#244, #245, #248). The release added end-to-end pipeline measurement, a multi-NER model leaderboard, observer-residual safety-net cells, and latency snapshots grounded in the 150-fixture coverage-loop corpus.
Known limitations
- This is a release candidate, not final v0.9.0. The performance internals may still change before the final tag if adopter validation finds regressions.
- The new gates are opt-in controls. Adopters should validate their own workloads before enabling skip gating in production.
tractis available for the static-binary path, but ORT remains the recommended default runtime.- Some benchmark commands emit large JSON snapshots during CI; they are measurement artifacts, not release notes.
Adopter notes
- Upgrade as a pre-release:
0.9.0-rc.1means adopter-validation window. - Restore compatibility is unchanged from v0.8.1: signed snapshots and manifest restore semantics continue to work.
- For fastest Kiji local inference, use the int8 Kiji bundle and ORT runtime.
- For repeated CLI integration, prefer
gaze daemonover launching a fresh process per call. - For static-binary deployments, evaluate the opt-in
tractruntime and compare it against ORT on your target platform.
Download
- aarch64-darwin:
gaze-v0.9.0-rc.1-aarch64-apple-darwin.tar.gz - x86_64-linux:
gaze-v0.9.0-rc.1-x86_64-unknown-linux-gnu.tar.gz SHA256SUMS
Both binaries should be treated as release-candidate artifacts until final v0.9.0 is cut.
CHANGELOG
Full PR-by-PR detail: CHANGELOG.md.
What's Changed
- docs(readme): anchor restore example on ghostwriter use case by @Naoray in #228
- docs(readme): polish ghostwriter section — ASCII flow + org typo by @Naoray in #229
- [agent] refactor(safety-net): bench matrix expansion (v0.9 #33c) by @Naoray in #230
- feat(safety-net): pin OPF source and snapshot by @Naoray in #231
- [agent] feat(cli): emit
entriesin plaintext JSON gaze clean response (#323) by @Naoray in #232 - [agent] chore(fixtures): replace @example.com with @example.invalid (#285) by @Naoray in #233
- [agent] docs(metrics): introduce metrics.md SSOT (#327) by @Naoray in #235
- feat(safety-net): ship Python kiji-runner reference wrapper (#33d partial) by @Naoray in #236
- [agent] refactor(audit): consolidate SqliteLogger leak-suspect method (#294) by @Naoray in #234
- [agent] feat(safety-net): pin OPF checkpoint bundle SHA (#33d follow-up) by @Naoray in #240
- [agent] refactor(api): rename redact_* → pseudonymize_* per north-star (#293) by @Naoray in #237
- [agent] feat(audit): NER-provenance schema migration (11 cols, additive) (#309) by @Naoray in #238
- [agent] feat(safety-net): score OPF direct-detector cells (#33d follow-up) by @Naoray in #241
- [agent] feat(safety-net): locale-aware Pass-3 dispatcher (#33e precursor) by @Naoray in #242
- [agent] docs(readme): correct ghostwriter flow (app owns lookup, LLM owns prose) by @Naoray in #246
- [agent] feat(safety-net): observer-residual cells + latency snapshot (#33d follow-up) (re-target #243) by @Naoray in #248
- [agent] feat(bench): end-to-end gaze pipeline benchmark (detection + perf) by @Naoray in #244
- [agent] feat(bench): multi-NER model leaderboard (#33d follow-up) by @Naoray in #245
- fix(ci): free preinstalled bloat to unblock ubuntu-latest disk-full by @Naoray in #249
- docs(readme): remove link to private demo repo by @Naoray in #251
- feat(pipeline): tier 4 — skip-gating + prefix cache (#370) by @Naoray in #252
- fix(v0.9.1): follow-up wave (5 HIGH findings) by @Naoray in #253
- docs(readme): qualify proxy scope — API-key path only by @Naoray in #254
- feat(kiji): in-process ort backend (#366) by @Naoray in #250
- feat(kiji): int8 dynamic quantization (#368) by @Naoray in #256
- feat(cli): gaze daemon mode (#367) by @Naoray in #255
- feat(bench): tiny-model leaderboard (#371) by @Naoray in #258
- feat(bench): runtime comparison — ort vs tract vs candle (#369) by @Naoray in #257
- release: v0.9.0-rc.1 by @Naoray in #259
Full Changelog: v0.8.1...v0.9.0-rc.1