0.9.0 — 2026-05-04
Release Notes
Initial public pre-1.0 release. Extracted from Mentiora's code-pipeline
project after 23 rounds of GA-driven hardening. See the README's
Status matrix for which surfaces are stable;
deterministic replay and web.click remain Beta until AC-SHCRT-08 and
AC-CLICK-* land.
Added
- Determinism harness.
Math.random()(sfc32-seeded) and
Date.now()/performance.now()(session-fixed epoch_ms) are
pinned at session-create time and reproduced bit-for-bit on replay
via the manifest'sstarted_at_ms. - Implicit session management in
loom-mcp serve. MCP clients
callloom.web.navigatewith justurl— the server lazily creates
a session on first tool call and closes it on shutdown. - Path-traversal-safe session IDs. All five
core_api_facade
paths reject anything that isn't a 26-char lowercase-alphanumeric
ULID. Prevents file-disclosure viasession.inspect '../evil'. - Typed error mapping.
kind: "http_status"(with status code) for
4xx/5xx responses,kind: "wait_predicate_false"forweb.wait
selector misses,kind: "schema_violation"for unsupported export
formats with the actual supported list in the message. - Chromium subprocess crash detection.
ChromiumSupervisornow
spawns a tokio task thatawaitschild.wait(); the moment chromium
dies, the shim self-exits → daemon's crash watcher fires → in-flight
CDP commands fail in <1s instead of waiting the 30s recv timeout. - GC reference protection.
collect_referenced_blobsdecodes
receipt_canonical_bytesbyte arrays and recursively scans for hex
hashes, soloom gc --ttl 0no longer deletes blobs that active
sessions still reference. - Stable session listing.
loom session listis now sorted by
created_at_msdescending with session_id as tiebreak — independent
of filesystem read_dir order. - Aborted-session replay refused. Replaying an aborted or crashed
source session now returns a typedSessionAbortederror instead of
silently producing a session that "replayed" an abandoned trace. import.playwrightRPC. Wires the existingPlaywrightImporter
throughCoreFacadeBridge,CoreServiceAdapter,RpcHandlers, and
therequest_router.loom import playwright trace.zipnow works
end-to-end.- Schema-aware CLI coercion.
loom action web.type --text 5551234
no longer fails with "5551234 is not of type 'string'" — the parser
consults the action's request schema and coerces per declared type. - Module file naming. Renamed every
<module>/interfaces.rsto
<module>/<module>.rs. Theinterfaces.rsconvention was a Phase 5
pipeline artifact; runtime files now match the module they live in.
Fixed
web.waitwas a no-op — it dispatched a singleRuntime.evaluate
predicate but never checked the result, so missing selectors
returned success in 1 tick. Now surfaceswait_predicate_false
withselector did not appear before timeout.- HTTP 4xx/5xx responses with
ERR_HTTP_RESPONSE_CODE_FAILUREwere
classified as genericnetwork_errorlosing the status code; now
the host's typed-error builder prefersstatus >= 400events
beforeerror_reasonevents. --budget network=0andwall_clock=0saccepted silently (0
internally meant "unlimited"); now rejected at parse time.- Profile help text claimed
safe,defaultwere valid profiles; the
daemon's allowlist issafe,standard,full. Help text fixed. Date.now()/Math.random()leaked real wall-clock + unseeded
values when called viaweb.evaluatebefore anyweb.navigate.
Root cause: chromium's bootstrap about:blank context never had the
determinism script applied. Fixed by lazy-spawning the
determinism-injected target on the first evaluate.
Install loom-cli 0.9.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/mentiora-ai/loom/releases/download/v0.9.0/loom-cli-installer.sh | shInstall prebuilt binaries via Homebrew
brew install mentiora-ai/loom/loomDownload loom-cli 0.9.0
| 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 |