## [0.6.6-alpha] - 2026-07-13
### Fixed
- **Five latent redstone defects found in a full review of the AC
port.** An exception mid-cascade left stale graph state that poisoned
every later cascade in that world; removed wires reached the Rust BFS
kernel as phantom power-15 sources through a sign-truncation bug (this
path is default-on); an out-of-range power value could abort the whole
JVM via a release-mode panic across the JNI boundary (now hard-clamped
on both sides); the parity oracle produced guaranteed false positives
on experimental-redstone worlds (now skipped); and a single exception
permanently disabled the oracle and phase counters through stuck
thread-locals (they self-heal every tick now). None of these changed
measured performance; all validators stay bit-exact.
### Changed
- **AC redstone lag machine restesting** The
vanilla path held 1.4-1.8 TPS (up to 716 ms per tick); enabling
`/ferrite redstone ac on` mid-choke recovered to a flat 20.00 TPS in
about 40 seconds, ~13x fewer cascades and ~6x cheaper gate updates on
the same build. README benchmark section carries the numbers.
- **Chunkforce predicts flight direction.** With `/ferrite chunkforce on`, the force-gen ring center now leads a moving player by up to 12
chunks along their velocity instead of spending half the budget on
terrain behind them. Flight test on 26.1.2 (view distance 16,
simulation distance 12): 24,581 chunks forced in ~2.5 minutes at
~160 chunks/s with TPS 20.00 held; the generation front stays out
of sight at top creative-fly speed. Stationary players keep the old
radial behavior.
- **Pregen inflight cap raised 50 to 200 (+25% throughput).** Four
3721-chunk virgin-terrain runs measured cap 50 at 90-96 chunks/s and
cap 200 at 114-118 chunks/s; 400 added nothing. Tunable at runtime
with `/ferrite pregen inflight <n>`.
- **Walkability cache: fill strategy fixed, then shelved after A/B.**
Session 5's pre-fill box thrashed the 512-slot cache (hit rate 1-17%,
~4400 snapshots per 5 s). Session 6 replaced it with a lazy snapshot on
first miss, restricted to sections the PathNavigationRegion actually
backs, and grew the kind cache to 2-way set-associative (2048 sets x 2
ways, LRU). That fixed the cache itself: hit rate 71-94%, snapshots
24-57 per 5 s. An A/B with 294 chasing zombies then hit 84-87% and
still moved nav tick cost at most ~5%, inside noise, because vanilla already
fronts `getPathTypeFromState` with a per-position `PathTypeCache` and
our intercept only ever serves vanilla's misses. Shelved: code stays in
tree, default off, post-mortem in JOURNEY. Opt in with
`-Dferrite.nav.cache=true`, or `-Pferrite.navCache=true` /
`-Pferrite.navParity=true` on runClient.
### Added
- **`[chunk-save]` monitor.** Times `SerializableChunkData.copyOf` (server
thread) and `write` (background encode) separately, one line per 5 s
window when saves happened. First measurements settled the chunk-save
port candidate: the palette bit-pack already runs on the background
executor in 26.1.x, and the tick thread pays only 0.3-0.5 ms/tick of
copyOf under sustained flight. Candidate closed; monitor stays.
### Fixed
- **Workspace is clippy-clean.** All ~120 warnings cleared across the four
crates: `bind!` codegen now emits `From` impls without the Copy
`.clone()`, the api layer's `Into` impls flipped to `From`, slice params
replace `&Vec`, and dead verbatim-port items carry explicit allows.
Style lints that fight the vanilla ports (index loops, negated float
comparisons that keep vanilla NaN semantics, JNI argument counts) are
allowed at crate level in rust-mod with a justification comment.
Workspace resolver pinned to 2; the macros crate declares
`proc-macro = true` instead of `crate-type`.
- **Unsafe JNI buffer helpers hardened.** `get_i32_slice_mut`
(surface_jni.rs) and `get_byte_slice_mut` (redstone_queues_jni.rs)
returned `&mut [_]` from a shared `&JByteBuffer`, so nothing stopped a
caller from holding two aliased mutable slices over one direct buffer.
Never a live bug (each is called once per JNI call), but the invariant
was unwritten. Both are now `unsafe fn` with a `# Safety` contract
(no-alias, capacity, alignment) and SAFETY notes at each call site. The
two `clippy::mut_from_ref` errors are gone, and build.yml now runs
clippy on the linux job so deny-level lints fail CI.
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }