0.7.0 — 2026-08-23
Milestone release — see the summary in CHANGELOG.md.
Added
cook-volatilecommand — cook a car-portable recipe: detects volatile / vehicle-specific instructions (VIN records, verified checksum stores), excludes the near-certain ones from the patch list, and records them in a newvolatilerecipe section (schema 4.5) with evidence. Flags:--no-exclude,--exclude-uncertain,--accept-volatile+ fullcookparity.cookitself stays byte-identical.- Volatile-region classifier —
classify_volatile()incore/services/recipes/volatile.py: VIN (VINScanner, conf ≥ 0.9) and verified checksum-store exclusions; ident-block strings and low-entropy counter clusters flagged only. Deterministic, no I/O, no corpus. - Volatile-aware audit —
openremap auditunderstands schema-4.5 recipes: subset-fingerprint check (kept instructions ⊆ re-cook set), re-verify that every declared excluded offset still classifies as volatile against the stock, and unaccounted-changes subtraction of the excluded ranges. 4.3/4.4 recipes keep exact-equality behavior. - Batch map scanning —
scan-mapsnow accepts a directory in addition to a file, with--recursive,--export,--jsonbatch mode, and--verboseper-file table listing. - IronFelix family checksum profiles — VAG ME7.XX (subtypes 1/2/3/5/6), M3.x-5.x, M7.9.7, M7.9.8, China M7.9.7, ME7.4.5, Samand.
- Siemens GS20 / SMG2 TCU checksums — CRC-16/ARC profiles from the MS4X community corrector (decompiled).
- BMW MS43 checksums cracked — boot/program/calibration CRC-16/ARC over descriptor tables via boot-code disassembly; monitor sums documented as runtime checks.
- NefMoto ME7 rolling / multirange — firmware-code-driven detection (C166 pattern parsing + seed-table rolling hash).
- Denso Subaru descriptor-table checksum — SH72531 1 MB petrol + EE20 diesel, 0x5AA5A55A end-inclusive scheme.
- Subaru support — 501-ROM corpus; Denso (SH7055/SH7058/SH72531/
diesel) and Hitachi (SH72546) extractors;
.hexaccepted everywhere. - Health report —
openremap health: identity, checksums, axis sanity, map-count envelope, erased blocks, VIN duplication; CI gate. - Rust migrations — endian detect (~542×), ident-block scan (~29×), NefMoto locate+rolling (136–820×), CRC-16/ARC (~30×), Denso scan (~110×), all parity-verified.
- Domain restructure —
core/services/{identify,checksums,maps, recipes}/and the Rust mirror; manufacturers gain Denso + Hitachi. - Docs wiki rework —
docs/reorganised into getting-started / concepts / commands (two-tier) / manufacturers (per-family) / internal; per-version changelog files inchangelog/.
Changed
- Recipe schema 4.4 with the
mapsannotation layer. .hexaccepted as a first-class binary extension across all commands.- Confidence: extractor-declared
ident_blockregions (short Subaru ident blocks now score correctly).
Deprecated
openremap-server(JSON-RPC daemon) — will be replaced by a new API..orstsaved-tune format — superseded by.remap4.4.
Fixed
- VIN scanner alignment quirk — a VIN directly preceded by
[A-Z0-9]text was skipped (the non-overlapping 17-char window scan consumed into the VIN start). Windows now overlap (lookahead) with memoized mirror counts; ident/mirror evidence gated on a known WMI, which also keeps a newly-visible corpus lookalike (ME7.331011118777544444) below the 0.6 false-positive line. - IronFelix profile checks record store locations — each check now
carries
store_offset/store_size, consumed by the volatile-region classifier; fixes a latent unbound-storedpath in the ME7.XX subtype-5sum8_zonesbranch.