0.10.1 — 2026-06-10 — Cross-Run Determinism + Session Reaper
Release Notes
Cross-run hash equality lands: two independent fresh recordings of the same actions
on a deterministic page now diff field_diffs=0, not just self-replay — making the
manifest hash chain a true "did anything change?" oracle across runs. Plus a session
reaper for long-lived daemons, a batch of determinism-capture fixes, and an
error-code consolidation. All additive; the replay hash chain (NFR-DET-01) is
preserved.
Added
- Cross-run determinism (#133). New
loom session create --clock-anchor <epoch_ms>
flag pins the injected browser clock (Date.now/performance.now) to a fixed epoch
via the existingstarted_at_ms_overrideseam, so two fresh--seed+--clock-anchor
recordings reproduce an identicalloom session diff(field_diffs=0, incl.
dom_snapshot_hash). Under determinism, DOM capture now also awaits the CDP
virtual-time budget (Emulation.virtualTimeBudgetExpired) before snapshotting, so
setTimeout-driven DOM mutations fire deterministically; the budget is armed
afterPage.loadEventFired(hang-safe) with a timeout fallback to the existing
settle. Composes with--seed;--no-determinismopts out. Documented recipe +
bounded-determinism caveat in the README. - Session idle-TTL reaper + orphan-Chromium GC (#128). The daemon reaps idle
sessions past their TTL and garbage-collects orphaned Chromium processes, surfaced
viareap/doctor.
Fixed
- Content-stable
dom_snapshot_hash+ replay-equal manifest chain (#129). Strips
the ephemeral per-navigation CDPframeIdfrom the DOM CBOR and projects ephemeral
top-level fields out of the chain hash, so byte-identical content hashes identically. - Deterministic virtual-time entrance animations (#127). Client-side entrance
animations render via deterministic virtual time instead of a frozen clock. - Unify
DOM.getDocumentpierce: trueacross all captures (#135). Consistent
pierced DOM capture so snapshots don't diverge by capture site. - Manifest append O(n²) → cached last WAL line (#131). The manifest writer caches
the last WAL line per session instead of re-reading the whole file on every append.
Changed
- Consolidated the three
LoomErrorCodeenums into one canonical enum (#125).
Removes the hand-mirrored kebab/snake/string drift class; decode routes through the
canonical enum. - Extracted a shared
network_entriesoffload-or-inline helper (#126). The
≥64 KB offload + graceful-degrade logic now lives in one place. - Removed the dead
loom-surfacescrate (#137). Relocatedsafetyand
cookie_typesintoloom-shared; no functional change.
Install loom-cli 0.10.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/mentiora-ai/loom/releases/download/v0.10.1/loom-cli-installer.sh | shInstall prebuilt binaries via Homebrew
brew install mentiora-ai/loom/loomDownload loom-cli 0.10.1
| File | Platform | Checksum |
|---|---|---|
| loom-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| loom-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| loom-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| loom-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |