Repository navigation
Releases: psvensson/lagrange
Release list
Lagrange v0.3.3
Lagrange 0.3.3 — 2026-10-30 (experimental / alpha).
Scenario A transaction coordination fast-path and multi-system comparative
benchmark completion release reducing per-statement coordinator metadata
bookkeeping, overlapping independent participant BEGIN/PREPARE/COMMIT/ROLLBACK
stages, adding opt-in row-key-disjoint concurrent participant staging sessions,
reusing pre-validated compiled operations across staging replay, pruning
composite-key partitions by prefix and range, caching SQLite determinism
compilation plans, and completing Slices 3–5 of the comparative benchmark
matrix (epic scenario-a-transaction-coordination-fast-path):
Formation health at cut time: formation health: 0/20 passed (0%), 0 with a starved seed.
Added
- Scenario A transaction coordination fast path & telemetry (
scenario-a-transaction-coordination-fast-path):
Per-transaction phase and metadata telemetry (distributed-transaction-telemetry.js),
reduced durable transaction bookkeeping (sql-query-engine-transaction-set-methods.js,
distributed-transaction-participant-set.js,distributed-transaction-statement.js),
concurrent independent participantBEGIN,PREPARE,COMMIT, andROLLBACK
stages (distributed-transaction-protocol.js), opt-in row-key-disjoint concurrent
participant staging sessions (partition-participant-transaction-session.js),
pre-validated compiled operation reuse and empty-read direct execution during
staging replay (partition-participant-transaction-staging.js), composite
partition prefix and range pruning (partition-resolver-composite.js,
lagrange-oltp-adapter.js), andschema_version-fenced SQLite determinism
plan caching plus Raft durable sync telemetry (partition-transaction-determinism.js,
raft-rs-durable-store.js). - Multi-system comparative benchmark matrix completion (
#166–#168):
Citus colocated tables and distributed functions comparison (Slice 3),
YugabyteDB 2024.2 and Apache Ignite 3 colocated compute comparison (Slice 4),
and Scenario C PostgreSQL + Valkey freshness-bounded risk comparison (Slice 5).
Docker images (linux/amd64, distroless):
docker.io/psvensson/lagrange:0.3.3(Docker Hub)
Full history: CHANGELOG.md · process: RELEASE.md
Lagrange v0.3.2
Lagrange 0.3.2 — 2026-10-30 (experimental / alpha).
Queryable Core 0.3.2 completion release sealing synchronous transactional global
index maintenance (Mode A), end-to-end SQL key-routed read/write journeys (J2),
local and compound secondary index journeys (J3), locking read conflict and
timeout journeys (J4), online global secondary index lifecycle and routing
journeys (J5), push-driven live-query subscription journeys (J6), PG-wire
idle rollback notice preservation, comparative OLTP and Scenario B benchmark
matrix progression artifacts, and solver/publisher proof reuse (epic
release-0-3-queryable-core):
Formation health at cut time: formation health: 0/20 passed (0%), 0 with a starved seed.
Added
- Queryable Core 0.3.2 journey completion (
J2–J6,C1):
Composite partition key resolution (partition-resolver-composite.js),
global index lifecycle coordinator (global-index-lifecycle-coordinator.js
andindex-service-global-methods.js), live-query group helpers
(live-query-group-helpers.js), Mode A synchronous global index maintenance
specification seal (global-index-maintenance-mode-seal-guard.js), and
end-to-end journey suites (J2–J6). - Comparative OLTP and Scenario B benchmark progression & matrix (
#158–#164):
Version-gated TiDB and PostgreSQL comparison history store, Scenario B
three-island distributed risk decision comparators and fairness gate, and
static Markdown, HTML, and SVG comparison progression renderers. - Solver & publisher proof deduplication (
scripts/solve/commands.js,scripts/checks/push-gate-change-proof.js,scripts/publish-head.js):
solve landrecords a commit- and base-bound test proof receipt
(lagrange-land-proof.json) reused by the push gate,pushGatedHeadskips
redundant.githooks/pre-pushre-entry viaLAGRANGE_GATE_ALREADY_PROVED_SHA,
corpus ratchets execute concurrently, anddependency-cruiserimport-graph
analysis caches verified reports in<gitCommonDir>/lagrange-import-graph-cache.json.
Fixed
- PG-wire idle transaction rollback notice preservation (
postgres-wire-adapter.js):
Preserves the idle-timeoutNoticeResponse(25P02/57P01) before closing
or resetting the session state, and ensures Scenario A public PG contexts issue
explicitROLLBACKbefore pool release (oltp-scenario-a-lagrange-public-pg-context.js). - Runtime container
/protoasset inclusion (Dockerfile):
Copies/protointo the production runtime image stage (J1repair).
Docker images (linux/amd64, distroless):
docker.io/psvensson/lagrange:0.3.2(Docker Hub)
Full history: CHANGELOG.md · process: RELEASE.md
Lagrange v0.3.0
Lagrange 0.3.0 — 2026-10-29 (experimental / alpha).
Phase 0.3 Queryable Core release delivering explicit typed partition boundary
ordering across split, merge, and routing paths, SQL-first local and compound
index DDL and planner selection, PostgreSQL locking reads (SELECT ... FOR UPDATE and SELECT ... FOR SHARE with NOWAIT), partition-independent Global
Secondary Indexes (CREATE INDEX ... GLOBAL) with online backfill and
point-read routing, and generic push-driven live queries over table CDC without
polling (epic release-0-3-queryable-core):
Formation health at cut time: formation health: 0/20 passed (0%), 0 with a starved seed.
Added
- Typed partition boundary ordering and representation (
partition-key-ordering-owner-completion,A1–A4):
Canonicalpartition-boundary-representation.jsandsplit-key-comparator.js
enforce explicitpartition_key_type(INTEGER,REAL,TEXT,BLOB)
ordering acrossCREATE TABLE,PartitionResolver,ManagedSplitWorkflow,
andManagedMergeWorkflowwith zero text-to-number coercion or untyped
fallback. - SQL-first local and compound secondary index DDL and planner selection (
A5–A6):
SQLQueryEngineroutesCREATE [UNIQUE] INDEX [IF NOT EXISTS]and
DROP INDEX [IF EXISTS]throughIndexServiceand replicates local index
DDL across table partitions;DistributedQueryPlannerandQueryOptimizer
enforce strict leftmost-prefix matching for single-column and compound
indexes. - PostgreSQL locking reads (
SELECT ... FOR UPDATE/FOR SHARE,B1–B5):
Canonical AST normalization (lockingRead: {strength, waitPolicy, ofTables}),
explicit transaction-block admission (25P01outsideBEGIN), Fail-Fast /
NOWAITconflict rejection (SQLSTATE 55P03), and participant row-lock
reservations that block conflicting concurrentUPDATE/DELETE/INSERTand
release deterministically onCOMMIT,ROLLBACK, and session teardown. - Global Secondary Indexes (
CREATE INDEX ... GLOBAL,C1–C5):
Catalog metadata contract (scope: 'GLOBAL', lifecycle state machine
WRITE_ONLY->BACKFILLING->PUBLIC->DROPPING), independent global
index dataset and Raft partition provisioning, idempotent online backfill
coordinator, synchronous write-path index maintenance acrossINSERT,
UPDATE, andDELETE, and two-hop point-read routing whenPUBLIC. - Generic push-driven live-query data plane (
D0–D6):
LiveQueryService,LiveQueryManager, andLiveQueryGroupsubscribe
active SQL queries directly toCDCManagertable events and re-evaluate and
push delta updates (added,modified,removed) to WebSocket subscribers
without polling timers. - Solver parallelization and home lab placement (
scripts/solve/*,scripts/lab/probe.js):
solve.js landsynthesizes a candidate commit from the staged index for
remote lab test placement, routesselect-change-tests.jsthrough
runPlacedClassifiedTestFiles(), deduplicates.githooks/pre-commit, and
serializes concurrent worktree landings via a cross-worktree lock.
Docker images (linux/amd64, distroless):
docker.io/psvensson/lagrange:0.3.0(Docker Hub)
Full history: CHANGELOG.md · process: RELEASE.md
Lagrange v0.2.8
Lagrange 0.2.8 — 2026-10-29 (experimental / alpha).
Patch release repairing the runtime container build context for wit/ after the
0.2.7 partial-channel release (where npm published 0.2.7 before the Docker
image step failed on .dockerignore) and improving release-proof receipt
recording and reuse (epic release-0-2-7-stabilization):
Formation health at cut time: formation health: 0/20 passed (0%), 0 with a starved seed.
Fixed
- Docker build context for
wit/(release-0-2-7-docker-context-and-publish-speedup):
.dockerignorenow admits!wit/and!wit/**alongsideDockerfile's
COPY wit/ ./wit/, andtest/release/project-hardening-contracts.test.js
enforces that the build context admitswit/for the runtime image stage. - Whole-corpus proof receipt recording (
scripts/proof-authority.js):
recordProofskips release-content identity traversal when recording
non-identity-reusable contracts (corpus-full-v1), preventing cold
working-tree scans from exceeding the publisher's receipt-recording timeout. - Release-proof whole-corpus receipt reuse (
scripts/run-release-proof.js):
npm run check:releasereuses an exact-SHAcorpus-full-v1receipt for
HEADand runs only the non-corpus CI and release-hardening steps instead of
repeatingnpm run test:all.
Docker images (linux/amd64, distroless):
docker.io/psvensson/lagrange:0.2.8(Docker Hub)
Full history: CHANGELOG.md · process: RELEASE.md
Lagrange v0.2.6
Lagrange 0.2.6 — 2026-10-27 (experimental / alpha).
Consensus cutover to the Rust raft-rs core through the WASM operation
port, with full partition snapshot compaction and follower reconstruction,
replicated two-phase transaction decision and participant apply, fresh-identity
message-group membership replacement, cold retained-seed handoff, and
systematic deterministic replicated SQL admission (epic raft-rs-full-cutover):
- Every node boot reserves a durable, monotonic boot incarnation from one
owner per data directory before any lifecycle side effect; legacy
rejoin hints are a one-time migration source only, andbootIncarnation
is a required option of the public bootstrap and join services. ReplicaStateMachineis the sole lifecycle owner per partition-replica
and message-group row: every transition is an exact-generation
conditional update, activation checks the exact transport handler inside
the lifecycle lane and holds it through the durable ACTIVE write, and
handler retirement is exact-identity only. Executor-created replicas are
born STOPPED and activate through the same lane.- Reaped node generations are terminal: liveness, endpoint refresh and
delayed READY work from a superseded incarnation can no longer mutate a
successor's rows; bootstrap-snapshot addressing only breaks the initial
connection circularity and never out-ranks an authoritative NODES row. - Automatic
raft-rspartition snapshot creation, retention sweep, committed
log compaction (_raft_rs_snapshot/_raft_rs_log), interrupted compaction
retry across leadership changes, pending-log byte growth trigger, and
follower snapshot catch-up reconstruction. - Replicated transaction coordinator decision persistence, participant staging
and deterministic apply (TX1), and fresh-identity message-group learner
admission, caught-up promotion, replacement, and source removal (FreshMG). - Cold retained-seed continuation and handoff across restarts, system-table
client ingress refusal at both engine and partition boundaries, and
deterministic replicated SQL write and schema-default admission across
date/time, version, randomness, connection-state, and user-defined functions. - One replica lifecycle owner per live node incarnation across join
retries, with timers on the node's canonical time source. - The vendored
raft-rsWASM binding ships in the Docker image and the
packaged runtime.
Removed
- Intentional public-API removal (alpha single-path mandate, owner decision
2026-10-26). These exports of the package root (lagrange-server,
src/public-api.js) were retired implementations with no production
constructor;MessageRouteris the one transport andReplicaHandlerwith
ReplicaStateMachineis the one replica lifecycle path. No replacement
export is provided:- Transport (from
src/transport/index.js):WebSocketTransport, its
ConnectionState,WebSocketTransportProvider,WS_PROVIDER_SUBSYSTEM,
WS_PROVIDER_LOG_MSG,WS_PROVIDER_ERROR_MSG,TransportProvider,
TransportRegistry,REGISTRY_SUBSYSTEM,REGISTRY_LOG_MSG,
REGISTRY_ERROR_MSG,ConnectionPool,POOL_SUBSYSTEM,
POOL_LOG_MSG,POOL_ERROR_MSG.MessageRouter,
RouterConnectionState,RouterMessageTypeandRPCClientremain. - Replica lifecycle (from
src/node/index.js):ReplicaLifecycleManager,
LifecycleReplicaStatus,VALID_STATUS_TRANSITIONS,
LifecycleMessageType,AckStatus.
- Transport (from
- The unexported
RouterMessageHandlermodule (a dead duplicate of the
router's inbound dispatch, imported by no module).
Docker images (linux/amd64, distroless):
docker.io/psvensson/lagrange:0.2.6(Docker Hub)
Full history: CHANGELOG.md · process: RELEASE.md
Lagrange v0.2.5
Lagrange 0.2.5 — 2026-09-13 (experimental / alpha).
The first 0.2 release that ships. v0.2.0, v0.2.1, v0.2.2, v0.2.3
and v0.2.4 were tagged but never published: each tagged run stopped
before any artifact left the runner (0.2.2 in the Docker smoke test, 0.2.3
and the first two release candidates at the npm publication owner's
ten-second observation window, 0.2.4 at the release identity step, which
ranked v0.2.4-rc.2 above v0.2.4 with git's default version sort and
refused to "move latest backward"), so no npm version, Docker image, Helm
chart or GitHub release exists for them; npm served 0.1.1 under latest
throughout. The
release pipeline was then published end to end on the production path
under v0.2.4-rc.0, -rc.1 and -rc.2 (npm under the next dist-tag,
Docker tagged with the version only, GitHub pre-releases), with each run's
publication receipt committed under data/releases/ and re-read from the
registries. No functional change since the v0.2.3 tag beyond the release
apparatus itself.
Fixed
- The release identity step derives the latest tag with prereleases ranked
below their release (versionsort.suffix=-), so the first release after a
release candidate is no longer refused as movinglatestbackward. - The npm publication owner observes the registry for minutes and types an
accepted, still-processing publish as such instead of reading npm's
post-publish processing latency as absence. - The release workflow writes its publication receipt from what the
registries report, asking only for fields the runner's tools expose, and
the values it observes reach the receipt writer. release:preflightrequires the tagged SHA to be proven and on the
remote main history, no longer the remote tip, so landings can publish
behind a running release proof without invalidating it.
Docker images (linux/amd64, distroless):
docker.io/psvensson/lagrange:0.2.5(Docker Hub)
Full history: CHANGELOG.md · process: RELEASE.md
Lagrange v0.2.4-rc.2
Lagrange 0.2.4-rc.2 — 2026-09-12 (experimental / alpha).
Pipeline dry run, third attempt. No functional change since the v0.2.3
tag. v0.2.4-rc.0 and v0.2.4-rc.1 both reached npm under the next
dist-tag; each run then stopped because the npm publication owner watched
the registry for ten seconds while npm was still processing the publish and
read absence as failure, so Docker, Helm and the GitHub release were never
attempted. The owner now observes for minutes and types an accepted,
still-processing publish as such.
Docker images (linux/amd64, distroless):
docker.io/psvensson/lagrange:0.2.4-rc.2(Docker Hub)
Full history: CHANGELOG.md · process: RELEASE.md
Solver evidence store
Binary evidence for Solver quests (solve-v2 phase 1). Assets are named --; each is referenced from the quest log by sha256, size and URL. This is not a software release; the tag never matches the v* release workflow.
Lagrange v0.1.1
Lagrange 0.1.1 — 2026-08-22 (experimental / alpha).
Maintenance release. First release published by the GitHub Actions release
workflow (the sole release owner going forward): the v* tag drives the full
release gate, checksummed SEA and Helm artifacts, the GitHub Release page,
Docker Hub images, and the first lagrange-server npm publication.
Added
- Per-release notes on every release surface, generated from this changelog
(scripts/release-notes.js): the GitHub release page carries the
tagged version's section instead of boilerplate, the Docker Hub repository
description gains an auto-updated per-release "Release notes" history, and
the Docker image carries OCI provenance labels
(org.opencontainers.image.version/revision/created). Tagging a version
without a non-empty changelog section now fails the release in seconds.
Fixed
- The admin dashboard's playback viewer read memory fields the recorder no
longer emits, rendering a dead0.0 MBmemory row and hiding capture
errors for new recordings. The admin static viewer is now the single
checked-in copy, shows process RSS and the reclaimable-cache-adjusted
container working set, and the test harness ships that same file into every
scenario bundle.
Removed
- The broken
test:coveragenpm script (tap test/exceeds the OS argument
limit; use the shardedtest:*scripts instead). - Helm chart publication of the unauthenticated admin listener. Chart-managed
pods now bind admin to loopback and reject the original insecure values;
REST/healthand/readyzremain available through the Services. - Seventeen dead symlinks under
scripts/that pointed at an external
tooling pack via an absolute path that never resolved.
Docker images (linux/amd64, distroless):
docker.io/psvensson/lagrange:0.1.1(Docker Hub)
Full history: CHANGELOG.md · process: RELEASE.md