The audited content milestone, hardened — five release-audit rounds closed by hand.
Builds on v3.1.0 and locks it down:
- Ruleset AST v2 — deterministic homebrew as DATA: a strict closed-grammar interpreter, byte-identical across TypeScript / Python / Rust, NFC-guarded at every name boundary.
- 5e Action Pack — event-sourced spell slots + concentration + the RAW condition table, all replay-stable.
- Forge-proof persistence — the signed
.loombundle gains a v3 length-prefixed signature + ownership-binding digest, so a save cannot be re-pointed at another world or truncated undetected (rejected on all three surfaces). - delve-mini headless proof — a full multi-room run reconstructed from the tape, the TileMap stage folded into the fingerprint.
Hardening (audit rounds 4–8, hand-closed): NFC parity on the seal, every seed digest, and the AST name guard across all three surfaces; the bundle-binding fork shut everywhere; every version surface (package.json, the TS constant, both pyproject/Cargo pairs, the runtime constants) now test-locked to one string so a future bump that misses a file fails CI before it can reach a tag.
4,270 tests pass. Published to npm (loom-engine), PyPI (loom-engine-rpg + loom-engine-native), and crates.io (core crates 0.1.2). Determinism gate green across TS, Python, and Rust at the same commit.