Roadmap and Releases
- Releases are receipt-gated, not calendar-gated. There is no sprint cadence and no scheduled ship date. A default changes when a measurement says it should, and the measurement ships with it — including the measurements that cost something.
- The canonical record is
CHANGELOG.md. Every default flip there carries its receipt path, its caveat, and its opt-back-in line. This page is the reading order, not a replacement. - The forward plan is
docs/ROADMAP.md— the sequencing layer that says which track a piece of work sits under. - Install from PyPI:
pip install cymatix-context. Released versions are git-tagged (v0.9.0,v0.8.6, …) on the repository. - This wiki documents 0.9.1, which is in flight at the time of writing. Each item below carries its PR or issue number.
0.9.1 — in flight
Five threads. One moves the retrieval defaults, one changes what a fresh ingest produces, and the rest are additive or ship off.
| Thread | What it is | Default impact |
|---|---|---|
| Wave-1 ranking flip (#407) | rrf_k 60 → 20, eps_band combinator extended to all five classifier classes |
Changes defaults |
| Delivered-seat floor (#409) | New [budget] min_delivered_docs knob |
Default 0 = off |
| Entity auto-link hub cutoff (#412) | New [ingestion] entity_autolink_hub_cutoff knob |
Default 0 = off |
| Tagger v2 (#413) | CPU ingest tagger rejects newline/tab entities and email/MIME header plumbing | Changes new ingests |
| Lexicon Tier 2 + docs (#419) | Canonical aliases across config / CLI / HTTP / env / MCP, this wiki, the site, a shorter README | Additive only |
Wave-1 ranking flip (#407)
- The one default change in the release. On the 829k bed at full needle power, gold-document delivery moves 0.555 → 0.630 (+43 / −8 paired), recall@12 0.651 → 0.681, median gold rank 3 → 2, with zero question-type regressions.
- It ships as a single named commit so
git revertis a one-step rollback, and the post-flip repositorycymatix.tomlwas verified field-identical to the measured arm config. - The cross-shard merge constant deliberately stays at 60 — that surface was never measured, and is annotated as unmeasured in code rather than flipped on faith.
- The full receipt, the bed identity, and why 0.630 is not a successor to the shipped-defaults 0.565 row are on Benchmarks and Receipts.
Two new knobs, both shipped off (#409, #412)
[budget] min_delivered_docs(default0= byte-identical legacy behavior). At floor 12 the receipts measure delivery 0.630 → 0.668 with zero losses, and per-needle ranking bases byte-identical — a pure delivery change. The flip was deliberately not taken: the benchmark measures delivery, not answer quality under a wider seat count, and twelve full-length documents per window costs real tokens. The answer-quality lane has to run before the default moves.[ingestion] entity_autolink_hub_cutoff(default0= off, pinned byte-identical by test). On a hub-heavy 289k-document bed it takes the mean per-link call from 210.5 ms to 0.62 ms — roughly 340×. The default stays 0 because the edge delta is real: the graph that comes out is a different graph, so the knob ships opt-in with the receipt attached. Flip conditions live on #411.
Tagger v2 (#413) — a behavior change with a version bump
- The CPU ingest tagger now rejects entities containing newlines or tabs, plus
email/MIME header field names,
x-*extension headers, and MIME transport artifacts. On a 2,000-file EnronQA sample that is −16.7% entity-graph rows and zero multi-line entities, with document ids unchanged. - This is a comparability break by design. Tags are part of the bed-content
digest, so
TAGGER_VERSION = 2is declared in the tagger, recorded in every bed manifest, and added to the BASELINES rules. Every bed built before 2026-08-30 istagger_version = 1— internally valid, but not cross-comparable with a v2 bed. - There is no backfill script on purpose: stripping entities in place would produce hybrid v1/v2 beds. v2 beds are fresh builds.
- Origin issue: #410.
Lexicon Tier 2 and the docs pass
- Tier 2 aliases (#419)
land on every operator-facing surface —
[compressor]/[knowledge_store]config sections,retrieval_tokens/max_docs_per_turnkeys,CYMATIX_STORE_PATH,cymatix document get,--max-docs,GET /documents/{id}, canonicalcymatix_document_*MCP tools. Additive only; every legacy spelling keeps working, with legacy winning on collision. This closes the long-deferred R4 phase (#87). - Tier 3 — the wire surface — was deliberately not taken. See #417 and the Lexicon.
- Documentation: this wiki (also rendered at
https://cymatixcontext.com/wiki/),
docs/ROSETTA.mdretired to a stub pointing at Lexicon, a repo-wide software-term prose sweep, and a shorter README that hands depth to the wiki.
0.9.0 (2026-08-20) — the post-flip release
The release where the shipped default retrieval path became fully algorithmic. Five encoder-related defaults flipped off, each behind its own receipt.
| Default flipped off | Date | One-line reason |
|---|---|---|
[retrieval] dense_embedding_enabled |
2026-08-15 | Four-scale isolation measured BGE-M3 dense displacing gold from the delivered top-k at every scale |
[ingestion] splade_enabled |
2026-08-16 | Null-to-negative against the lexical floor at n=469, and the expansion index contributed nothing passively |
[retrieval] pki_enabled |
2026-08-17 (#370) | −1 delivered needle at full power; the flip does not reclaim an existing path_key_index table |
[ingestion] sema_embed_on_ingest |
2026-08-19 (#371) | The deciding read-gate cell was a wash; ~9.7 s of cold start removed as a rider |
[ingestion] dense_embed_on_ingest |
2026-08-19 (#371) | A dead write at neural-free retrieval defaults |
Every one of these is one config line to opt back in. The receipts and their caveats are on Benchmarks and Receipts; the per-knob view is on Configuration.
The two disclosures shipped with the release notes, not after them:
- The know surface never fires at shipped defaults
(#287). Max
confidence lands around 0.28 against an
emit_floorof 0.45, and thelexical_dense_agreecalibration feature is structurally dead on the neural-free path. The failure direction is fail-safe — 0% false-KNOW — but it means theconfidencescalar is not a usable trust signal today; rely onfound/reason. See Agent Contract. - The dense-off default carries a measured p50 latency regression (#374): ×2.5–2.6 slower at 100k fragments, shrinking to ×1.09–1.38 at the 829k operating point. Dense was load-bearing as a latency device — its ANN gate capped the candidate list feeding splice. The named mitigation, a lex-branch candidate cap, has not landed.
Also in 0.9.0: [budget] neutralize_control_tags flipped on (assembly-time
escaping of forged <cymatix: control tags, gated on a 141/141
byte-identical-window receipt), a startup warning for a non-loopback bind with
an empty admin_token, the MCP 2.x migration, and the #219 slice-5 config
honesty pass that removed five knobs with zero runtime readers.
Earlier releases
| Version | Date | Headline |
|---|---|---|
| 0.8.6 | 2026-08-05 | Shared GPU encoder daemon ([encoder_daemon]), executor sizing, ERB scale fixes |
| 0.8.5 | 2026-07-25 | Breaking. The helix → cymatix rename completed as a clean break — all 0.8.0 back-compat removed. Migrate, or pin cymatix-context<0.8.5 |
| 0.8.0 | 2026-07-22 | The helix → cymatix soft rename: canonical package cymatix_context, old names kept as live aliases |
| 0.7.2b1 | 2026-07-06 (beta) | Efficiency and bench-validity wave: fp32-BLOB SEMA embeddings, the lean 5-tool MCP surface, read-only serving |
Full entries, including the pre-0.7 line, are in
CHANGELOG.md.
The vocabulary shift these releases are often confused with — biology terms to
software terms — is a separate story, told on Lexicon.
What is deferred, and where it is tracked
- The 0.9.x deferral ledger is the comment dated 2026-08-19 on the v0.9.0 release-gate issue #377. That comment is the sequencing record for the work 0.9.0 knowingly did not do — the know-gate recalibration (#287), the sharded structural gap (#275), the retrieval-profile layer (#205), and the rest. Read it before proposing that something be picked up; it usually says why it was not.
- The
entity_graphlayer ships on and has never been ablated on the delivered basis. It sits on the retrieval-layer ledger as a REMOVE-CANDIDATE, and the arm is still owed. - The sharded path trails the unsharded engine by roughly 31pp recall@10 and 30pp MRR on the xl bed (#275). Prefer unsharded for accuracy-sensitive corpora; the gap is disclosed, not fixed.
- Open and named, as of 0.9.1:
| Item | What it is |
|---|---|
| #417 | Tier 3 lexicon — <GENE> blocks, decoder prompts, wire field names, /stats keys. Needs its own byte-level A/B gate; v1.0-scale work |
| #418 | Pre-existing config bug: a known cymatix.toml section given a scalar instead of a table crashes load_config with an uncaught AttributeError |
| #411 | Flip proposal and conditions for entity_autolink_hub_cutoff |
| #410 | The tagger-hygiene root cause that #413 fixes |
How releases work here
- Versioning is
MAJOR.MINOR.PATCH, but the number alone will not tell you whether an upgrade is safe. 0.8.5 was a deliberate breaking change shipped as a patch-level bump — called out as breaking in the changelog, with a pin instruction. Read the changelog entry, not the digits. - No formal cadence. Nothing ships to a date. The gate is a receipt, and when the receipt says a change is null or negative the change does not ship — the wave-2 COVER-walk arm in this same 0.9.x window was killed by its own receipt.
- Defaults move separately from features. A knob and its default flip are different pull requests: the knob ships default-inert with a test pinning byte-identical legacy behavior, and the flip is its own receipt-gated change. Both #409 and #412 in 0.9.1 are knobs whose flips were not taken.
- Disclosures ship with the release, not after it. If a flip costs latency, or a surface silently stops working at defaults, it goes in the release notes next to the win.
- Comparability rules are part of the release contract.
tagger_versionand ingest concurrency (ingest_c) are bed identity; a receipt measured on one bed does not license a claim about another. See Benchmarks and Receipts.
Go deeper
CHANGELOG.md— every release entry with its receipt paths, caveats, and opt-back-in linesdocs/ROADMAP.md— the forward-planning doc: live tracks, issue triage, and the cross-box data pipelinedocs/benchmarks/BASELINES.md— the bed-identity and receipt ledger every number above is anchored to- #377 — the v0.9.0 release gate, whose 2026-08-19 comment is the 0.9.x deferral ledger
- https://pypi.org/project/cymatix-context/ — released versions
- Next: Benchmarks and Receipts · Configuration · Lexicon · Home