New lockstep extension packages (package count 26 -> 28):
- @drakkar.software/starfish-wal (TS): an append-only CRDT op-log document
model. Deterministic, op-based CRDT with a no-ties total order
(Lamport counter, replicaId): an LWW typed register, an RGA sequence, and
text (an RGA of characters). The fold is commutative, idempotent, and
byte-identical across TypeScript and Python (locked by the shared vector
tests/test-vectors/wal-crdt.json). Ships a WalDocument client log over
injected transport/encryptor/signer interfaces (open/commit/materialize/
pull/snapshot) that works under encryption "none" and "delegated" with no
server, wire, or storage change, and enforces: mandatory Ed25519 author
verification (fail-closed), an optional authorized-writer set and
snapshot-role gate, a per-writer signed sequence for truncation detection
(optionally fail-closed via strictSequence), and trust / trust-retain-tail /
re-derive reader postures (re-derive compares full canonical state).
- starfish-wal (Python): the cross-language CRDT core (clock + fold).
High-level reconcile API on WalDocument (TS): update(next) / setText(list, next)
/ setList(list, next) auto-generate the minimal CRDT ops by diffing a desired
value against current state, so callers declare the value they want instead of
hand-driving insert/removeAt/insertText. The diff trims the common prefix/suffix
before the LCS, so a localized text edit is ~linear in document length.
materialize() folds iteratively (explicit stack), so a long linear list/text
does not overflow the call stack / Python recursion limit (found by benchmarking;
regression-tested at 50k elements).
Wires both packages into the TS and Python publish workflows; adds a docs/ts/wal/
guide set (overview, CRDT model, document layer, reconcile, snapshots, security)
incl. measured performance characteristics, README + per-package READMEs, and
CHANGELOG/CLAUDE updates. Versions bumped to 3.0.0-alpha.21 across all packages.
https://claude.ai/code/session_01Bs9Ruvz6h9RpRoaKEo4R36