28 lines
1.6 KiB
Go
28 lines
1.6 KiB
Go
// Package projection is the domain-neutral substrate for the "snapshot stream +
|
|
// local index" seam: one authoritative producer publishes a framed
|
|
// begin → chunk* → end snapshot (plus per-batch deltas) on the bus, and N
|
|
// receivers each assemble their OWN cold-start-ready, mmap-backed .bin index
|
|
// from it. No shared volume; each consumer is independently eventually
|
|
// consistent.
|
|
//
|
|
// It was extracted from platform/catalog (which now re-exports these types for
|
|
// its Projection wire shape) so other domains can ride the same rails without
|
|
// depending on catalog. The pieces:
|
|
//
|
|
// - SnapshotWriter[T] / SnapshotReader[T] (snapshot.go) — the value-agnostic
|
|
// key→blob .bin format: sorted records, binary-search Get, full-walk Scan,
|
|
// mmap on Unix. Generic over the stored type T.
|
|
// - SnapshotHolder[T] (manager.go) — race-free atomic hot-reload of a reader
|
|
// under concurrent Get/Scan, with a drain-grace close-batching reaper.
|
|
// - Store[W, T] (store.go) — the consumer state machine: snapshot assembly,
|
|
// epoch gating, same-epoch delta overlay (with delete tombstones), and the
|
|
// completeness guard. Generic over the WIRE type W (decoded by a
|
|
// domain-supplied Decoder) and the STORED type T (projected by a Transform).
|
|
// - The bus framing contract (framing.go) — Meta* keys, snapshot phases, and
|
|
// the decoded Update[W] shape.
|
|
//
|
|
// The framing is fixed and shared; the on-the-wire payload schema is the
|
|
// domain's own concern, bridged by Decoder[W]. See
|
|
// docs/plan-projectionstore-generalization.md for why this boundary exists.
|
|
package projection
|