In scope
v0.14.4 was the “Story coverage” cycle. The headline work was a 52-test suite for the diagnostic-story generator (src-tauri/src/story.rs) and the anonymiser (src-tauri/src/anonymize.rs). The plan doc is at docs/v0.14.4_plan.md in the project repo.
Slices
PR #201 — 52 unit tests for story.rs and anonymize.rs (Tier A, headline)
The diagnostic-story generator produces a per-vehicle diagnostic report from the fault memory snapshot. The anonymiser strips VIN, mileage and other identifiers from a snapshot before sharing it. Before this PR both modules had zero test coverage; after this PR they have 52 tests and a deterministic coverage of the public surface.
story.rs (32 tests)
- Severity bucketing + ordering.
priority_foracross the severity buckets.parse_cost_rangehandling single values, tilde, hyphen, en-dash, whitespace, empty, and garbage.format_vehicleacross empty, VIN-only, mileage-only, and decoded inputs.build_contextfreeze-frame string assembly.- The full
generate()pipeline against the live community knowledge base. - Cost range sum, cost-max invariant, DTC code case-insensitive lookup, summary text counts, title format.
anonymize.rs (20 tests)
hash_vinproperties: 16 hex chars, stable across calls, distinct across inputs, case-sensitive (pinned as an invariant test).- The full
anonymize()pipeline: VIN never leaks, fingerprint substitution, missing VIN tounknownfingerprint,engine_familypreserved, modules / DTCs / freeze frames preserved, mileage stripped, empty modules,fault_countNone to 0,live_dataalways empty. export_json: no VIN / mileage leak, pretty-printed, serde round-trip.
Test count went from 149 to 201 in cargo test --lib --offline.
PR #198 — CLAUDE.md “Hardware and timing invariants” refresh (Tier A)
Four stale “NOT YET IMPLEMENTED” / “migration in progress” claims were wrong against main. Refreshed to “INVARIANT — enforced” with citations:
- Async commands: migration complete (24 sync
#[tauri::command]are in-memory / local-fs helpers gated bytests/async_commands.rs::SYNC_ALLOWLIST). - Tester Present keep-alive: shipped in
src-tauri/src/keepalive.rs(3000 ms interval,[0x3E, 0x00]frame). - ISO-TP multi-frame: shipped in
src-tauri/src/transport/isotp.rs(430 LOC, FF/CF/FC state machine). - VIN reads:
protocol::read_vinshipped atsrc-tauri/src/protocol/mod.rs:296; all callers incommands.rsroute through it. - ENET/DoIP UDP discovery remains honestly not implemented.
PR #200 — ROADMAP.md v0.3.0 historical audit (Tier A)
Six items in the v0.3.0 “Real Car” historical section were marked “๐ข Ready” but had actually shipped. Moved to a new “โ Done — historical (shipped)” table with PR references and code locations:
- KWP2000 slow-module timeout (PR #153) → โ Done in v0.13.0
- ISO-TP multi-frame (PR #198) → โ Done in v0.14.x
- Dark/light theme toggle (PR #109) → โ Done in v0.7.0
- Gauge theming (PR #109) → โ Done in v0.7.0
- Save/load workspace layout (PR #109) → โ Done in v0.7.0
- Export PNG/SVG from charts (PR #136) → โ Done in v0.11.0
Honest ๐ก items (ENET/DoIP, BLE, WiFi, CAN bus listener, Mobile-responsive, real-car validation) left alone — they’re still genuinely pending.
PR #199 — ci.yml::test-rust missing Tauri Linux system dependencies (Tier A, CI workflow)
The CI & Autonomous Merge workflow’s test-rust job ran cargo test on a bare ubuntu-latest runner that lacked Tauri’s Linux system libraries (glib, gtk, webkit2gtk-4.1). The build failed in 20 s on every PR. Mirrored the apt-get install step from test.yml::rust into ci.yml::test-rust.
What this cycle did NOT ship
- No
transport/**changes. The K+DCAN / ENET/DoIP paths were not touched. - No
protocol/**changes. - No frontend changes (JS, HTML, CSS).
- No community data changes.
- No
git tag v0.14.4in this cycle — that is the Tier C release cut.
v0.14.4 questions
When was v0.14.4 shipped?
2026-07-31. The four slice PRs (#198, #199, #200, #201) all merged before the cycle closed. The version-cut PR (bumping Cargo.toml, tauri.conf.json, package.json, README badge) is a separate Tier C step.
Why is the test count delta the headline number?
Because the 52 new tests cover public functions that previously had no test coverage. The headline-PR (#201) is what makes the rest of the cycle “covered.”
Where is the plan doc?
github.com/ohgeeceee/beemuu/blob/main/docs/v0.14.4_plan.md