Skip to content

Start

Status and roadmap

Where ysearch stands today, milestone by milestone, from the fork (YS0) to scale qualification and the classic-feature track.


ysearch is pre-v1. Status as of 2026-09-25. The milestone names and goals come from the roadmap at the pinned revision; the status column is maintained in this site's upstream/status.json.

Milestone Status Where it stands
YS0 Fork and rename Done Closed 2026-09-25. The repository is the fork of yolosearch at 94f6b98, renamed; the gate is green on Forgejo and amd64 and arm64 images are published (docs/milestones/ys0-evidence.md).
YS1 Infrastructure In progress The local part is done on main: the swarm stack with Redpanda and the marekvs sidecar, container test fixtures, the 3·10⁶-article corpus tooling with synthetic campaigns and beacons, the prototype's sidecar client and Redpanda adapter, and the tools/dev infra-check verb. Staging, CI runners and bench hosts wait for the owner. No evidence file yet.
YS2 Pinned scoring (prototype track T2) Exit met, not closed The exit criteria are met on main: segment format 7 (stats, forward, hashterms), the statistics-epoch fold with history, the bm25f-pinned-v1 scorer beside bm25f-v1, internal/ysmath and the determinism check. The milestone stays open until its evidence file is written.
YS3 Matcher prototype (T3, T4) Exit met, not closed The exit check passed: on 10^5 YS1 articles by 10^3 campaigns the served sets equal brute force, with 0 mismatches over 227.5·10^6 pair evaluations and bit-exact scores, and a dial change wrote only dial records (bench/ys3/exit-100k-1k.json, go run ./tools/matchcheck). internal/match covers compilation (keywords, query_string, vectors), cells, fenced table generations, read-time scoring under G_chk and threshold and count dials. The Matching gRPC service exists but is not yet mounted in any server binary or role. Not measured: matcher cost; the vector path is checked only on a synthetic 3,000 by 200 subset. No evidence file yet.
YS4 Prototype qualification (T5): go / no-go Planned The go / no-go gate. Every (A) figure in the specs stays an assumption until it runs.
YS5 KV plane and the control Raft groups (P1) Groundwork landed Pure groundwork is on main: internal/kv hlc, envelope, ikey, counter, merge and record, with merge-law property tests; the element join is a true lattice with no live-dot cap, a deliberate fix of two marekvs merge defects. The differential harness against marekvs is deferred by the owner. No storage, replication, gossip, RESP server or Raft yet.
YS6 Documents and the changelog indexer (P2, P11.1, first half of P4) Planned Not started.
YS7 Stream ingestion and traffic (P3, P3a) Planned Not started. Only the YS3 prototype adapter reads from Kafka today.
YS8 Segment plane completion (rest of P4) Planned Not started.
YS8a yexpr and the WASM app engine core (P15a) Planned Not started.
YS9 Matching in production shape (P5, P6, P7) Planned Not started.
YS10 Archiving and system snapshots (P8) Planned Not started.
YS11 Operator and operations (P9) Planned Not started. The operator on main is yolosearch's, renamed.
YS12 Scale qualification: ready for the ad-matching workload (P10) Planned Not started.
YS13 mappings, analysis, pipelines (P11) Planned Not started.
YS14 query DSL (P12) Planned Not started. The Lucene and CQP grammars on main are inherited.
YS15 aggregations and presentation (P13) Planned Not started.
YS16 vector store (P14) Planned Not started. The inherited IVF-PQ vector search is still on main.
YS17 app worlds, jobs, APIs, security (P15b, P16) Planned Not started.

The sequence

YS0 fork ─► YS1 infrastructure ─► YS2 pinned scoring ─► YS3 matcher prototype ─► YS4 prototype qualification
                                                                                    │ go / no-go
               ┌────────────────────────────────────────────────────────────────────┘
               ▼
YS5 KV plane + control Raft ─► YS6 documents + indexer ─► YS7 streams + traffic ─► YS8 segment plane ─► YS9 matching
     │                                                                                                    │
     └─► YS8a yexpr + WASM app engine core                                                                │
YS10 archiving ─► YS11 operator + operations ─► YS12 scale qualification (ad-matching ready) ◄────────────┘

Classic-feature track, from YS8 and YS8a on, in parallel:
YS13 mappings + analysis + pipelines ─► YS14 query DSL ─► YS15 aggregations + presentation
                                     └► YS16 vector store        └► YS17 app worlds, jobs, APIs, security

YS0 — Fork and rename

Status: Done. Closed 2026-09-25. The repository is the fork of yolosearch at 94f6b98, renamed; the gate is green on Forgejo and amd64 and arm64 images are published (docs/milestones/ys0-evidence.md).

Goal: a renamed fork that is exactly as green as yolosearch.

YS1 — Infrastructure

Status: In progress. The local part is done on main: the swarm stack with Redpanda and the marekvs sidecar, container test fixtures, the 3·10⁶-article corpus tooling with synthetic campaigns and beacons, the prototype's sidecar client and Redpanda adapter, and the tools/dev infra-check verb. Staging, CI runners and bench hosts wait for the owner. No evidence file yet.

Goal: everything later milestones need to run, test and measure, before any feature work.

YS2 — Pinned scoring (prototype track T2)

Status: Exit met, not closed. The exit criteria are met on main: segment format 7 (stats, forward, hashterms), the statistics-epoch fold with history, the bm25f-pinned-v1 scorer beside bm25f-v1, internal/ysmath and the determinism check. The milestone stays open until its evidence file is written.

Goal: scores that do not depend on segment layout.

YS3 — Matcher prototype (T3, T4)

Status: Exit met, not closed. The exit check passed: on 10^5 YS1 articles by 10^3 campaigns the served sets equal brute force, with 0 mismatches over 227.5·10^6 pair evaluations and bit-exact scores, and a dial change wrote only dial records (bench/ys3/exit-100k-1k.json, go run ./tools/matchcheck). internal/match covers compilation (keywords, query_string, vectors), cells, fenced table generations, read-time scoring under G_chk and threshold and count dials. The Matching gRPC service exists but is not yet mounted in any server binary or role. Not measured: matcher cost; the vector path is checked only on a synthetic 3,000 by 200 subset. No evidence file yet.

Goal: the match matrix end to end on the existing ingest path.

YS4 — Prototype qualification (T5): go / no-go

Status: Planned. The go / no-go gate. Every (A) figure in the specs stays an assumption until it runs.

Goal: measure what the specs only assume, before building the rest.

YS5 — KV plane and the control Raft groups (P1)

Status: Groundwork landed. Pure groundwork is on main: internal/kv hlc, envelope, ikey, counter, merge and record, with merge-law property tests; the element join is a true lattice with no live-dot cap, a deliberate fix of two marekvs merge defects. The differential harness against marekvs is deferred by the owner. No storage, replication, gossip, RESP server or Raft yet.

Goal: marekvs's design, in Go, on WavesDB, and the control role's Raft groups that its capability gates and leases need.

YS6 — Documents and the changelog indexer (P2, P11.1, first half of P4)

Status: Planned. Not started.

Goal: the KV plane becomes the source of truth for documents.

YS7 — Stream ingestion and traffic (P3, P3a)

Status: Planned. Not started. Only the YS3 prototype adapter reads from Kafka today.

Goal: Redpanda in production shape, and the traffic plane.

YS8 — Segment plane completion (rest of P4)

Status: Planned. Not started.

Goal: everything the specs add to yolosearch's segment plane.

YS8a — yexpr and the WASM app engine core (P15a)

Status: Planned. Not started.

Goal: the two extension tiers of 65, before any milestone that needs them. Owner decision (2026-09-24): split out of YS17. Depends on YS5; precedes YS13; YS13 and YS17 depend on it.

YS9 — Matching in production shape (P5, P6, P7)

Status: Planned. Not started.

Goal: the prototype's matcher rebuilt on the real KV plane and segment plane.

YS10 — Archiving and system snapshots (P8)

Status: Planned. Not started.

YS11 — Operator and operations (P9)

Status: Planned. Not started. The operator on main is yolosearch's, renamed.

YS12 — Scale qualification: ready for the ad-matching workload (P10)

Status: Planned. Not started.

YS13 — mappings, analysis, pipelines (P11)

Status: Planned. Not started.

Goal: field types, multi-fields, dynamic mapping, aliases, templates, lifecycle; the segment families of the new field types: grams (wildcard), geo (geo_point, geo_shape), suggest (completion) and nested child rows with per-scope statistics (42 §5, §6, §8); the rest of analysis (every filter of 25, resources, fingerprints, ANALYZE; the core and presets are YS6; CJK later); write and index pipelines with every built-in processor, the script processor and app processors (yexpr and pipeline-processor from YS8a). With YS17: WASM analysis apps, and the lifecycle actions and model migrations that run as jobs (update_by_query backfills, bucket reindexes)

YS14 — query DSL (P12)

Status: Planned. Not started. The Lucene and CQP grammars on main are inherited.

Goal: every front end and query type, each also on the fresh tail (YS8); ranking phases; retrievers; cross-plane features; PIT; collapse. yexpr-based features (script, script_score, terms_set with a script, runtime fields, global-phase expressions) use YS8a

YS15 — aggregations and presentation (P13)

Status: Planned. Not started.

Goal: all aggregations (bucket_script, bucket_selector and scripted metrics use yexpr from YS8a); highlighting; suggesters (the suggest family is YS13's); explain and profile

YS16 — vector store (P14)

Status: Planned. Not started. The inherited IVF-PQ vector search is still on main.

Goal: dense, passage, multi- and sparse vectors; the single index ivf_rabitq (Q17): the RaBitQ port and approximate mode (the exact lanes are YS3's), the SSD cache of 1-bit and hot int8 codes, SIMD popcount scans, GPU re-coding; filtered kNN; threshold queries; embedding bindings. Re-embedding backfills are transform jobs, with YS17

YS17 — app worlds, jobs, APIs, security (P15b, P16)

Status: Planned. Not started.

Goal: the transform-job, matcher and analysis worlds on the YS8a engine; the job engine (transformation jobs, update_by_query, delete_by_query, reindex, rebuild, 15 §5.3); matcher campaigns in YS9's matching; gRPC and RESP for every feature; security

The full roadmap, with every deliverable and exit criterion, is docs/ysearch/06-roadmap.md.