Releases: nullstyle/ltx-zig
Releases · nullstyle/ltx-zig
Release list
v0.4.0
v0.4.0 — replication controller arc
[0.4.0] - 2026-09-04
Added
ltx_s3: replace-if-generation lease renewal (object_etagplus
put_if_matchwithETagMismatchon a shifted generation), an optional
caller-injected retry policy for transient transport failures and
retryable statuses on idempotent requests, and virtual-host bucket
addressing alongside path style.ltx_capture: a frame-count checkpoint tier (checkpoint_max_frames)
alongside the byte and interval tiers, andseed_positionfor
continuing a restored replica at the recovered TXID instead of
restarting the numbering at one.- A capture crash drill in
capture-integration: kill a writer between
durable batches, restore the tree to exactly the last reported batch,
seed the position, and continue capture without history repair. - An opt-in scale qualification tool (
zig build scale-check) with
measured capture, compaction, and restore throughput and byte-identical
verification at hundreds of MiB; numbers recorded in
docs/replication.md. - CI runs the S3 MinIO gate on the macOS lane as well as Linux.
ltx_resources, a shipped checked resource-planning module with the codec,
WAL, apply, and wire formulas previously private to the benchmark harness,
plus an alignment-aware fixed-arena binder for typed and byte workspaces.ltx_objecttransactionalWriteSessionsupport with explicit
finish/abort publication semantics, implemented by the filesystem backend
with private sync-and-rename staging.ltx_replication, a synchronous per-database controller for guarded startup,
capture and position, restore, caller-selected adjacent-level maintenance,
and publish-before-delete retention over caller-owned resources.- Automatic S3 transactional publication: small encoded objects use one PUT,
while larger outputs switch boundedly to multipart without retaining the
complete object. ltx_capture.Session.checkpoint_pending, which exposes a deferred automatic
PASSIVE-checkpoint retry without turning an already published capture into a
failed sync.- Deterministic interruption qualification for controller maintenance and S3
multipart publication, including publication-before-cleanup restart,
partial source deletion, completion acknowledgement loss, abort failure, and
cleanup retry. ltx_replication.Resources.arena_capacity_bytesandResources.bind, which
derive and bind a complete controller resource set from one caller-owned
fixed arena with checked capacity, alignment, and arithmetic. Transactional
clients omit the two whole-object fallback buffers; manualResources
construction remains supported.ltx_replication.Controller.diagnostics, an infallible copied snapshot of
lifecycle, saturating accepted/rejected/succeeded/failed counts for each
operation, and the exact last accepted result or error. The pointer-free
snapshot remains available after poison and finish without callbacks,
allocation, or policy in the controller.ltx_object.ReadGeneration, a fixed-capacity, pointer-free receipt that
binds every refill of oneObjectReaderto the same backend generation
without adding allocation or a read-session cleanup lifecycle.
Changed
- The S3 conformance, TLS, and virtual-host lanes each run their own
MinIO instance in the gate runner; manualzig build s3-integration
without the runner skips the TLS and virtual-host lanes. The
virtual-host lane runs on Linux only — some macOS CI runners do not
resolve*.localhostto loopback — while plain and TLS lanes cover
both platforms. - Object listings now report exact
size_bytes; compaction planning consumes
that metadata directly instead of requiring parallel size arrays and
redundant object reads. ltx_replica.RestoreJobaccepts anyltx.ApplyBackend, verifies that each
object key matches its decoded TXID range before staging, and safely replaces
an existing target with the first snapshot before applying contiguous tails.- S3 retry waiting is caller-injected alongside delay selection, and TLS
certificate validation derives its time from the injected SigV4 clock; the
module no longer reads an ambient clock. - Capture and compaction stream encoder output directly through transactional
object adapters; whole-object buffering remains as the compatibility path
for adapters without write sessions. - The portability compile gate now includes the external consumer so all nine
public modules are checked on every hosted cross-target. - The replication controller copies its compaction ladder, preflights encoder
capacity and live workspace ranges, preserves readiness after caller-input
errors, and requires sidecar-free quiescence for startup restore. - A fresh replication controller re-verifies each covering upper-level object
before reconciling retained lower-level sources and covered older snapshots
after interrupted maintenance, without requiring the compacted output to be
republished. - The
replicate-onceconsumer template now obtains its complete controller
resource arena during host initialization instead of manually declaring and
wiring every workspace. ObjectReadernow carries the generation receipt returned by its first
successful range into every later refill. Filesystem reads compare canonical
opened-file metadata before and after each positional read; S3 reads capture
the first response ETag and sign later range requests withIf-Match.- The Litestream interoperability oracle moved from v0.5.16 to the
checksum-pinned v0.5.17 release, whose upstream changes are restore-path
maintenance (v3 WAL-segment restores above 4 GiB, safe WAL-offset ordering,
throttle retries, and a WAL-reset corruption fix). The harness version
check, hosted CI archive pin, and recorded SHA-256 values follow; the
mixed-level restores and the forced no-checksum rejection of checked
matrix output were requalified unchanged against the new binary.
Fixed
- S3 delete and multipart-abort teardown no longer wait for a keep-alive peer
timeout after a bodyless204 No Contentresponse. - S3
litestream-timestampmetadata now uses Litestream-compatible UTC
RFC3339Nano text instead of decimal Unix milliseconds. - Filesystem object staging uses collision-safe exclusive names, synchronizes
the complete directory chain, and reports post-rename sync failures as
PublicationIndeterminatewithout removing the visible object. - Capture handles empty and zero-commit WALs with a safe database snapshot,
rejects truncated headers and aliased live workspaces, enforces frame-count
checkpoints, and verifies PASSIVE completion before recording a restart. - S3 multipart completion rejects HTTP-200 error XML, response reads remain
bounded withoutContent-Length, conditional writes are never retried,
failed aborts retain retryable cleanup state, listing pages are explicitly
bounded, and every request refreshes TLS time from the injected clock. - Controller retention deletes only the selected sources proven to be covered
by the newly verified output; corrupt upper metadata cannot delete an
unselected lower object. - Snapshot-maintenance recovery resumes either cleanup phase, including the
case where source deletion completed but covered older snapshots remain. - S3 transactional single-PUT and multipart publication report
PublicationIndeterminatewhen the publication request may have reached the
server but its acknowledgement was lost, so callers reconcile the exact
object instead of treating the outcome as an ordinary retryable transport
failure. - S3 ranged reads reject missing, duplicate, empty, or over-capacity ETags
instead of accepting an unbound or silently truncated generation receipt;
anIf-Matchrejection is reported asObjectChangedand never as
publication uncertainty.
[0.3.0] - 2026-08-27
Added
ltx_wal: bounded SQLite WAL parsing with committed page maps, salt
scans, torn-tail tolerance, and mid-WAL resume, ported from the pinned
Celld crate with Go-ported known answers, a differential page-map
reference, pinned Litestream WAL fixtures, a mutation suite, and a
native fuzz corpus.- LTX naming helpers in the core: TXID text, the filename codec, level
names for both replica layouts, and Litestream-exact path joins. ltx_object: the storage-neutral object contract, the filesystem
backend in the Litestream replica layout with atomic publication, and a
backend-agnostic conformance suite.ltx_s3: the S3 backend with path-style SigV4, prefix-scoped paginated
listings withstart-afterseek, object read/write/delete, bucket
creation, signed conditional writes for first-writer fencing, TLS with
a custom or system certificate authority, and part-streamed multipart
upload. Gated against a local MinIO server over both plain HTTP and
TLS, including the full conformance suite and multipart round trips.ltx_replica: the Litestream compaction ladder, restore planning with
per-level cursors and tail-gap rejection, compaction and retention
planning, restore-to-path and level-compaction executors over
caller-owned workspaces, with exact restored-image end-to-end tests.ltx_capture: the SQLite capture session with Litestream control
tables, a checkpoint-blocking read lock, snapshot/incremental
transitions with mid-WAL resume, DB-file page backfill, snapshot
fallback on foreign WAL discontinuity, no-checksum L0 publication, and
two-tier passive checkpointing where session-initiated restarts
continue with small incrementals. Integration-qualified against host
SQLite by querying restored images read-only.- Outbound Litestream v0.5.16 binary interop over a live
ltx_capture
tree: the pinned release binary restores the captured tree to a
byte-identical image of the checkpointed database. - A runnable one-shot replication-and-restore example as the consumer
t...
v0.3.0
[0.3.0] - 2026-08-27
Added
ltx_wal: bounded SQLite WAL parsing with committed page maps, salt
censes, torn-tail tolerance, and mid-WAL resume, ported from the pinned
Celld crate with Go-ported known answers, a differential page-map
reference, pinned Litestream WAL fixtures, a mutation suite, and a
native fuzz corpus.- LTX naming helpers in the core: TXID text, the filename codec, level
names for both replica layouts, and Litestream-exact path joins. ltx_object: the storage-neutral object contract, the filesystem
backend in the Litestream replica layout with atomic publication, and a
backend-agnostic conformance suite.ltx_s3: the S3 backend with path-style SigV4, prefix-scoped paginated
listings withstart-afterseek, object read/write/delete, bucket
creation, signed conditional writes for first-writer fencing, TLS with
a custom or system certificate authority, and part-streamed multipart
upload. Gated against a local MinIO server over both plain HTTP and
TLS, including the full conformance suite and multipart round trips.ltx_replica: the Litestream compaction ladder, restore planning with
per-level cursors and tail-gap rejection, compaction and retention
planning, restore-to-path and level-compaction executors over
caller-owned workspaces, with exact restored-image end-to-end tests.ltx_capture: the SQLite capture session with Litestream control
tables, a checkpoint-blocking read lock, snapshot/incremental
transitions with mid-WAL resume, DB-file page backfill, snapshot
fallback on foreign WAL discontinuity, no-checksum L0 publication, and
two-tier passive checkpointing where session-initiated restarts
continue with small incrementals. Integration-qualified against host
SQLite by querying restored images read-only.- Outbound Litestream v0.5.16 binary interop over a live
ltx_capture
tree: the pinned release binary restores the captured tree to a
byte-identical image of the checkpointed database. - A runnable one-shot replication-and-restore example as the consumer
template, a replication deployment contract (docs/replication.md),
and the replication roadmap with milestone status. - Corrected the darwin-arm64 Litestream archive and
checksums.txt
SHA-256 pins indocs/upstream.mdagainst the release manifest.
Changed
- The core remains unchanged; the replication modules are additive and
keep the core free of filesystem, SQLite, and libc linkage. Only
ltx_capturedeclares a SQLite C surface that the host build links. S3Client.initreturns an error union because TLS certificate
loading can fail; pre-1.0 source instability applies.
ltx-zig v0.1.0
Added
- Allocation-free LTX v3 decoding and canonical encoding for current raw-LZ4
blocks and the historical upstream frame profile. - Strict structure, page-index, CRC-64, rolling database, snapshot, and terminal
verification over bounded caller-owned workspaces. - Bounded storage-neutral compaction and staged apply orchestration.
- External path-dependency compile and smoke gates plus runnable bounded
snapshot-apply and SQLite generation-store lifecycle examples. - A canonical local source-archive smoke gate that extracts with isolated
caches and runs the archived consumer and examples. - Optional crash-qualified two-generation SQLite storage with typed read-only
generation leases and explicit recovery after indeterminate publication. - Real WAL-mode SQLite A-to-B-to-C qualification for checksummed snapshot and
incremental publication, including growth, shrink, blocked reset and lease
paths, late input corruption, exact generation bytes, and semantic queries. - SQLite-produced A-to-B-to-C process-crash replay at every publication
durability boundary, plus retained-lease, stale-epoch, and checksum-scanning
recovery qualification over real database images. - Pinned Go and Celld interoperability fixtures, mutation and fuzz suites, and
byte-for-byte Go-oracle compaction checks. - An immutable real-Litestream v0.5.11 six-transition capture chain with exact
artifact and restored-image hashes plus final read-only SQLite qualification. - Outbound compaction qualification against pinned Go bytes and a
checksum-pinned Litestream v0.5.16 restore over mixed current-L1 and
legacy-L0 page representations. - A five-chain deterministic compaction matrix with exact Go output bytes,
pinned database hashes, staged-apply equivalence, and real-Litestream
success/expected-rejection coverage of its no-checksum restore boundary. - Public SQLite store state and adapter-specific failure inspection, with an
explicit retry/recovery decision contract. - Exhaustive returned-fault qualification at every SQLite durability boundary
and synchronized cross-process generation-lease abandonment coverage. - MIT licensing with the required separate BSD-3-Clause LZ4 and Apache-2.0
Celld/Litestream attributions. - A checked resource-budget model with conservative workspace/output formulas,
reference configurations, and portable formula tests. - A 17-case encoder/decoder 4 KiB–64 KiB pattern matrix, 1/4/16-input
compaction scaling, checked/no-checksum staged-apply benchmarks, and a
correctness-only smoke mode; the focused raw-LZ4 microbenchmark remains
available separately.
Fixed
- SQLite generation workspace alias failures now report
Failure.invalid_workspaceinstead ofFailure.invalid_state.
Changed
- The pre-1.0 Zig source API is explicitly allowed to evolve with its
coordinated consumer; 0.x releases make no source-compatibility promise. - CI now qualifies Debug and ReleaseSafe behavior on pinned Linux and macOS
toolchains, public-module compilation across five targets, consumer package
wiring, the bounded example, and release metadata. - A pinned, digest-locked
acttask rehearses the Linux lane without mounting
the host Docker daemon; hosted Linux and macOS remain authoritative. - SQLite directory durability barriers are portable across qualified hosts.
- Release metadata validation permits
TBDduring candidate work but requires
a realYYYY-MM-DDchangelog date before tag qualification. - CI compiles both benchmark executables and runs resource and benchmark-smoke
correctness gates without timing thresholds.