/
Multi-agent audit identified 16 bugs across the merge core, security boundary, threading, and build pipeline. All fixed in this release.
Security (path traversal & I/O)
/mv inspect and /mv merge now validate replay paths via Path.toRealPath() against the Flashback replay root — symlink-based traversal blocked.totalTicks <= 0 are rejected at open time.Correctness / memory
ThreadLocal<MessageDigest> to avoid per-call alloc.chatRecentChatText now a bounded LRU (10k entries) — long sessions no longer risk OOM.streamMerge outer try/finally with a writer holder so the active SegmentWriter is always closed on the snapshot-copy phase.TimelineAligner guards against Integer.MAX_VALUE overflow on both per-source offsets and merged total ticks (loud failure vs silent negative timeline).metadata.json no longer abort the merge.UI / threading
client.execute callbacks in the merge flow now check client.screen == progressScreen — no more callbacks firing on the wrong screen if the user navigates away.Minecraft instance.Class.forName("GuiGraphics") up-front instead of registering and crashing later.Build / CI
build-version.sh propagates gradlew failure explicitly.multi-version-build.yml step uses set -e + explicit exit 1.No new features, no API changes. Drop-in replacement for 0.3.0.

Merges multiple Flashback replays from the same session into a single unified replay — an “omniscient observer” view combining the union of chunks, players, and events seen from each POV.