0.6.3 — 2026-08-11
Shared-axis detection, scoring refinements, speed-based deduplication of the Rust/Python backends, and musl wheels for Alpine Docker.
Added — Map Scanner Improvements
- Shared-axis detection — after a valid [X][Y][data] table is found, the scanner probes forward for additional blocks of identical geometry sharing the same X and Y axes. Catches the common ECU pattern where fuel, timing, boost, and EGR tables sit consecutively after one pair of RPM×Load breakpoints.
--show-series— group tables sharing identical X/Y axes with indented└─continuation rows in human-readable output.--max-series-tables— new CLI parameter (default 16, 1 = off).- Axis value plausibility bonus — axes whose values look like memory
addresses (tiny span relative to baseline, e.g.
[16798, 16804, 16810, …]) now get a ×0.25–0.60 quality penalty. Eliminates high-scoring false positives from code-pointer tables and encoded data structures. - Sentinel penalty — tables with >25% placeholder values (0x0000, 0xFFFF, 0x8000, 0x7FFF) now receive a ×0.40–0.80 multiplier. Pushes partially-erased flash blocks and sentinel-heavy coincidental structures toward the bottom of the ranking.
Changed — Scoring & Defaults
- Default
--min-scoreraised from 0.75 to 0.85. Combined with the two new penalties above, the default filter now returns ~70% fewer tables while keeping90% of genuine calibration maps.
- Version string always shows
(rust)— see Removed below.
Fixed
max_results=Noneno longer crashesscan_map_tables. PassNonefor unlimited results (the Rust function now treats0as "no cap").
Removed — Dual Backend Elimination
Every CPU-bound function was benchmarked. For each function, only the fastest implementation survives. No more dual maintenance, no more fallback paths, no more oracle fuzz tests.
shannon_entropy/is_low_entropy— Rust only (36–75× faster). Python_py_*reference implementations deleted.count_unique_in_window/find_unique_context— Python only (CPython's C-levelbytes.findis 1.1–1.6× faster than Rust's memchr loop for ECU context-anchor workloads). Rust implementations deleted.find_changed_blocks— Rust only (102× faster). Python reference deleted.scan_map_axes— Rust only (115× faster — 139 ms vs 16 s). Python reference deleted.scan_map_tables— Rust only (24× faster — 2.5 s vs 60 s). All Python scoring, pairing, and dedup logic deleted.map_hunter.pyshrinks from 1,433 to 244 lines.- Oracle fuzz tests removed (470 tests). No dual implementations to compare against — each function exists in exactly one language.
OPENREMAP_FORCE_PYTHONenv var has no effect. The Rust extension is mandatory.- Dead Rust code removed —
count_unique_in_windowandfind_unique_contextfromentropy.rs(153 lines).
Added — CI/CD
- musl wheels (
musllinux_1_2_x86_64) — cross-compiled in CI for Alpine Docker images.pip install openremapon Alpine automatically selects the musl wheel instead of the glibc one.