Skip to content

Releases: psvensson/lagrange

Lagrange v0.3.3

Choose a tag to compare

@github-actions github-actions released this 31 Oct 01:08

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 participant BEGIN, PREPARE, COMMIT, and ROLLBACK
    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), and schema_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):

Full history: CHANGELOG.md · process: RELEASE.md

Lagrange v0.3.2

Choose a tag to compare

@github-actions github-actions released this 30 Oct 19:41

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
    and index-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 land records a commit- and base-bound test proof receipt
    (lagrange-land-proof.json) reused by the push gate, pushGatedHead skips
    redundant .githooks/pre-push re-entry via LAGRANGE_GATE_ALREADY_PROVED_SHA,
    corpus ratchets execute concurrently, and dependency-cruiser import-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-timeout NoticeResponse (25P02 / 57P01) before closing
    or resetting the session state, and ensures Scenario A public PG contexts issue
    explicit ROLLBACK before pool release (oltp-scenario-a-lagrange-public-pg-context.js).
  • Runtime container /proto asset inclusion (Dockerfile):
    Copies /proto into the production runtime image stage (J1 repair).

Docker images (linux/amd64, distroless):

Full history: CHANGELOG.md · process: RELEASE.md

Lagrange v0.3.0

Choose a tag to compare

@github-actions github-actions released this 30 Oct 00:28

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):
    Canonical partition-boundary-representation.js and split-key-comparator.js
    enforce explicit partition_key_type (INTEGER, REAL, TEXT, BLOB)
    ordering across CREATE TABLE, PartitionResolver, ManagedSplitWorkflow,
    and ManagedMergeWorkflow with zero text-to-number coercion or untyped
    fallback.
  • SQL-first local and compound secondary index DDL and planner selection (A5–A6):
    SQLQueryEngine routes CREATE [UNIQUE] INDEX [IF NOT EXISTS] and
    DROP INDEX [IF EXISTS] through IndexService and replicates local index
    DDL across table partitions; DistributedQueryPlanner and QueryOptimizer
    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 (25P01 outside BEGIN), Fail-Fast /
    NOWAIT conflict rejection (SQLSTATE 55P03), and participant row-lock
    reservations that block conflicting concurrent UPDATE/DELETE/INSERT and
    release deterministically on COMMIT, 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 across INSERT,
    UPDATE, and DELETE, and two-hop point-read routing when PUBLIC.
  • Generic push-driven live-query data plane (D0–D6):
    LiveQueryService, LiveQueryManager, and LiveQueryGroup subscribe
    active SQL queries directly to CDCManager table 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 land synthesizes a candidate commit from the staged index for
    remote lab test placement, routes select-change-tests.js through
    runPlacedClassifiedTestFiles(), deduplicates .githooks/pre-commit, and
    serializes concurrent worktree landings via a cross-worktree lock.

Docker images (linux/amd64, distroless):

Full history: CHANGELOG.md · process: RELEASE.md

Lagrange v0.2.8

Choose a tag to compare

@github-actions github-actions released this 29 Oct 10:50

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):
    .dockerignore now admits !wit/ and !wit/** alongside Dockerfile's
    COPY wit/ ./wit/, and test/release/project-hardening-contracts.test.js
    enforces that the build context admits wit/ for the runtime image stage.
  • Whole-corpus proof receipt recording (scripts/proof-authority.js):
    recordProof skips 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:release reuses an exact-SHA corpus-full-v1 receipt for
    HEAD and runs only the non-corpus CI and release-hardening steps instead of
    repeating npm run test:all.

Docker images (linux/amd64, distroless):

Full history: CHANGELOG.md · process: RELEASE.md

Lagrange v0.2.6

Choose a tag to compare

@github-actions github-actions released this 28 Oct 13:35

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, and bootIncarnation
    is a required option of the public bootstrap and join services.
  • ReplicaStateMachine is 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-rs partition 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-rs WASM 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; MessageRouter is the one transport and ReplicaHandler with
    ReplicaStateMachine is 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, RouterMessageType and RPCClient remain.
    • Replica lifecycle (from src/node/index.js): ReplicaLifecycleManager,
      LifecycleReplicaStatus, VALID_STATUS_TRANSITIONS,
      LifecycleMessageType, AckStatus.
  • The unexported RouterMessageHandler module (a dead duplicate of the
    router's inbound dispatch, imported by no module).

Docker images (linux/amd64, distroless):

Full history: CHANGELOG.md · process: RELEASE.md

Lagrange v0.2.5

Choose a tag to compare

@github-actions github-actions released this 13 Sep 04:52

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 moving latest backward.
  • 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:preflight requires 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):

Full history: CHANGELOG.md · process: RELEASE.md

Lagrange v0.2.4-rc.2

Lagrange v0.2.4-rc.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 12 Sep 16:01

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

Solver evidence store Pre-release
Pre-release

Choose a tag to compare

@psvensson psvensson released this 06 Sep 07:55

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

Choose a tag to compare

@psvensson psvensson released this 24 Aug 17:12

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 dead 0.0 MB memory 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:coverage npm script (tap test/ exceeds the OS argument
    limit; use the sharded test:* 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 /health and /readyz remain 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):

Full history: CHANGELOG.md · process: RELEASE.md