Recent releases at a glance
Beemuu follows semantic versioning. The current development branch carries v0.14.x features between tagged releases. Each entry below lists the date, the headline work, and any deferred items. Detailed per-PR notes live in the GitHub repository.
v0.14.4 โ Unreleased cycle (2026-08)
Cycle status: all four slices merged — #198 (CLAUDE.md invariants refresh), #199 (ci.yml Tauri Linux system-dependencies fix), #200 (ROADMAP v0.3.0 historical audit), #201 (story and anonymize test coverage). The v0.14.4 release cut (version bump in Cargo.toml and tauri.conf.json, git tag, release notes publish, installer build) is a separate Tier C step.
Added
- 52 unit tests for
src-tauri/src/story.rsandanonymize.rs(PR #201, Tier A, cycle headline slice). Severity bucketing and ordering,priority_for,parse_cost_range(en-dash handling, whitespace, garbage),format_vehicle,build_context, the fullgenerate()pipeline against the live community knowledge base,hash_vinproperties, the fullanonymize()pipeline, andexport_json. Test count rose from 149 to 201 incargo test --lib --offline. - CLAUDE.md "Hardware and timing invariants" refresh (PR #198, Tier A). Four stale "NOT YET IMPLEMENTED" and "migration in progress" claims were wrong against
main. Refreshed to "INVARIANT โ enforced" with citations to the live source. ENET/DoIP UDP discovery remains honestly not implemented. - ROADMAP.md v0.3.0 historical audit (PR #200, Tier A). Six items in the v0.3.0 "Real Car" historical section that were marked "๐ข Ready" but had actually shipped were moved to a new "โ Done โ historical (shipped)" table with PR references and code locations.
Fixed
ci.yml::test-rustmissing Tauri Linux system dependencies (PR #199, Tier A). The CI and Autonomous Merge workflow'stest-rustjob rancargo teston a bareubuntu-latestrunner that lacked Tauri's Linux system libraries. The build failed in 20 seconds on every PR. The fix mirrors theapt-get installstep fromtest.yml::rustintoci.yml::test-rust.
What this cycle does not ship
- No
transport/**changes. - No
protocol/**changes. - No frontend changes (JS, HTML, CSS).
- No community data changes.
- No
git tag v0.14.4(that is the Tier C release cut).
v0.14.3 (2026-07-30)
Cycle status: all five slices merged — #185 (decoders), #186 (profile entries), #187 (slice 3a backend), #188 (slice 4 harness extension and cycle closeout), #190 (slice 3b frontend rewire). Version surface bumped in the release-cut PR across package.json, src-tauri/Cargo.toml, src-tauri/tauri.conf.json, and the README badge.
Added — decoder catalog and community data
- Three new decoders (PR #185, Tier A):
u16_fiftieths(raw ร 0.02, for SAE J1979 fuel-rate L/h),u32_be(4-byte big-endian unsigned, for SAE J1979 engine-runtime seconds), andu16_half(raw ร 0.5, for SAE J1979 fuel-rate g/s). All three follow the existingsrc-tauri/src/data/live.rspattern. Spec sections indocs/DECODE_FUNCTIONS.mdยง10 to ยง12. - N62 profile enrichment (PR #186, Tier A): three new
[[profile.param]]entries incommunity/profiles/n62.tomlwired to the new decoders —0x5Eengine fuel rate L/h,0x5Fengine runtime s,0x62engine fuel rate g/s. Each carries the same[needs verification, N62/E70 bench]mark the v0.14.2 slice 1 entry uses. - N62 / E70 harness-doc extension (PR #188, Tier A):
docs/validation/n62-real-car.mdStep 2 to Step 5 all extended for the three new PIDs. Critical-row paragraph covers fuel-rate failure modes.
Added — protocol and Tauri command
- Per-PID NRC backend and frontend (PR #187 + #190, Tier B). New
protocol::nrc_from_errorhelper parses the canonicalservice()error string into a structured(sid, nrc)pair.read_live_datareturn type splits intoLiveSweepResult { values, errors }so a per-PID failure no longer short-circuits the whole sweep. New async Tauri commandremove_profile_pidremoves a matchingLiveParamfrom the in-memory profile registry, re-serialises vialive::profile_to_toml, and writes the updated TOML.Cargo.tomladdsfsto the existingtokiofeatures. - Frontend rewire (PR #190, Tier B). New
classifyNrc(err)exported fromlive_data_panel.jsbuckets eachLiveErrorintounsupported,transient,unknown. Per-PID dim UI with.gauge-cell.dimmed(opacity 0.45 + " (unsupported)" pseudo-element). One-click "Remove from profile" button. New#live-unsupported-countpanel-head badge shows the count of unsupported PIDs.
v0.14.2 (2026-07-29)
v0.14.2 ships "live data today, on the bench, with the cable you have." Four Tier A slices, one Tier B slice. No transport/** changes (K+DCAN KWP diagnostic sessions keep using kdcan.rs unchanged).
Added
- Cycle plan and ROADMAP v0.14.2 header (PR #171, Tier A).
docs/v0.14.2_plan.mdand the ROADMAP cycle entry. community/profiles/n62.tomlenrichment โ0x5Coil temp (PR #175, Tier A). Replaces the unverifiedlocal:10placeholder with the standard OBD-II PID0x5C(engine oil temperature,byte - 40 ยฐC). Removes the[UNVERIFIED placeholder]tag and adds an N62 instrumentation-context header block.- Live Data panel UX polish (PR #177, Tier A). Polling-rate selector, per-gauge peak tracking, range bar, snapshot-CSV button, and the NRC-aware error surface. 221 out of 221 JS tests green.
docs/validation/n62-real-car.mdharness doc (PR #178, Tier A). Chassis-specific step-by-step bench-verification harness for the N62 / E70 X5 4.8L profile. Cross-links v0.14.0docs/validation/can-broadcast.md.
Fixed
- Claude review workflow repair (PR #176, Tier B). Removed
Bash(gh pr review:*)from the--allowedToolslist in.github/workflows/claude-review.yml.
v0.14.1 (2026-07-27)
Fixed
- Tauri 2
window.confirm()auto-dismiss fix (PR #169, Tier B). The click handlers atsrc/js/main.js:1125and:1353usedwindow.confirm(), which the Tauri 2 webview auto-dismisses on some builds. Both gates now route throughtauri-plugin-dialog'sask()via the newsrc/js/dialog.jshelper. New crate:tauri-plugin-dialog = "2". - Simulator regenerate-on-identify (PR #169, Tier B). The sim's DTC list is seeded from
default_dtcs+default_freezeat construction; on the next KWP[0x1A, 0x80]identify, the identify handler restores the seed when the current DTC list is empty. - Per-ECU freeze-schema split (PR #170, Tier A). New
community/freeze/<hex>.tomlfiles pluscommunity::load_freeze_per_ecu()helper. Bulk auto-loads the registry on startup so the freeze-frame panel renders decoded values without the user clicking "Reload".
v0.14.0 (2026-07-25)
The v0.14.0 cycle ships the Tier A surface (frontend + public site + simulator + harness doc). The Tier B surface (real-car transport + commands) is still open and gated behind OBDLink SX testing.
Added
- Live Gauges panel in the desktop app (PR #162, Tier A). Six-gauge panel under the Live Data tab. RPM, coolant, oil temp, vehicle speed, battery voltage, throttle. Off by default; the user clicks "Start CAN listener" to enable.
- Pure JS CAN broadcast decoders (PR #157, Tier A).
src/js/can_decoders.js— eight byte-level decoders for the six known E-series broadcast IDs (0x0AA,0x1D0,0x545,0x0CE,0x130,0x316). Dual export (CommonJS andwindow.beeemuuCanDecoders). 32 unit tests. - JS-side simulator broadcast personality (PR #158, Tier A).
src-tauri/src/transport/sim.rs::broadcast_frames_atextended with a 10-thread worker that produces the six known frames at the documented rates (10, 20, 100, 100, 1000, 1000 ms). - JS-side simulator mirror + frontend wiring (PR #164, Tier A).
src/js/live_can_source.jsis a byte-for-byte mirror of the Rust generator;live_gauges.jsextended withpeakFor(key)andframesPerSecond(). - Real-car verification harness doc (PR #164, Tier A).
docs/validation/can-broadcast.md— the five-step report-back loop for E9x / E6x owners. - Live Gauges panel on
beemuu.com(PR #167, Tier A). The same six gauges are now on the public site.frontend/live_gauges.jsis a self-contained public-site mirror (no Tauri, no desktop deps).
Planned
- Live CAN transport + Tauri commands (PRs #168+). Tier B because every slice touches
src-tauri/src/transport/**andsrc-tauri/src/commands.rs. Addstransport/can_listener.rswithListenerMode::{Simulator, OBDLinkSx}plus three async commands.
v0.13.0 and earlier
For releases before v0.14.0 the canonical record lives at github.com/ohgeeceee/beemuu/blob/main/CHANGELOG.md. The notable cycles are:
- v0.13.0 (2026-07-22) โ Per-target KWP response deadline (1 s default, 3 s "slow" for cold-boot DME and IKE long-form reads). Eliminates the 10 s hang the v0.12.0 DTC-history work inherited from the legacy K+DCAN timer. Tier B because it touches
src-tauri/src/transport/**andsrc-tauri/src/protocol/**. - v0.12.0 (2026-07-21) โ DTC history commands (record, query, clear) backed by a SQLite table; recurring-DTC callout; DTC history user-facing guide.
- v0.11.0 โ Export charts as PNG (Chart.js
toBase64Image(), no Rust round-trip). - v0.10.0 โ Plan verification badge on the walkthrough panel.
- v0.9.0 โ Guided Fault Finding โ 11 grounded test plans under
community/testplans/, plan loader and query command, walkthrough UI, validation harness and contribution path, oracle JSON parse gate. - v0.8.0 โ Community TOML parse gate,
dtc_texts.tomlrebuild to 208 overlay entries, B48/B46/S58/N57 profiles, ECU scan table broadened from 12 to 17,ServiceFunctionverification status +[UNVERIFIED]write gating. - v0.7.0 โ Dark/light theme toggle, workspace layout persistence, per-profile gauge colour schemes, N20 / N26 and S55 engine profiles.
- v0.6.0 (2026-07-16) โ OBD-II mode 01 PID auto-discovery, real-car injector-time validation harness,
u8_enumdecoder and per-parameter enum-map pipeline, example enum DIDs in B58 and N55, DIY ENET cable pinout doc, histogram viewer. - v0.5.0 (2026-07-15) โ Ground Truth โ Real-car
u8_enumvalidation harness, N55 fuel-trim / adaptation DIDs, severity-class styling for enum channels. - v0.4.0 (2026-07-15) โ Tuner Friendly โ
u8_enumdecoder and per-parameter enum-map pipeline, example enum DIDs, histogram viewer,ServiceFunctionmulti-module data shape, DIY ENET cable pinout doc.
v0.14.4 in detail
The four shipped slices and their per-PR detail:
- PR #198 (Tier A) — CLAUDE.md “Hardware and timing invariants” refresh. 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]allowlisted intests/async_commands.rs), Tester Present keep-alive shipped (src-tauri/src/keepalive.rs, 3000 ms interval,[0x3E, 0x00]frame), ISO-TP multi-frame shipped (src-tauri/src/transport/isotp.rs, 430 LOC), VIN reads routed throughprotocol::read_vinatsrc-tauri/src/protocol/mod.rs:296. ENET/DoIP UDP discovery remains honestly not implemented. - PR #199 (Tier A, CI workflow) —
ci.yml::test-rustmissing Tauri Linux system dependencies. The CI workflow’stest-rustjob rancargo teston a bareubuntu-latestrunner lacking Tauri's Linux system libraries; the build failed in 20 s on every PR. Mirrored theapt-get installstep fromtest.yml::rustintoci.yml::test-rust. - PR #200 (Tier A) — ROADMAP.md v0.3.0 historical audit. Six items in the v0.3.0 “Real Car” historical section that were marked “๐ข Ready” had actually shipped and were moved to a new “โ Done — historical (shipped)” table with PR references and code locations: KWP2000 slow-module timeout (PR #153), ISO-TP multi-frame (PR #198), dark/light theme toggle (PR #109), gauge theming (PR #109), workspace layout (PR #109), chart PNG export (PR #136).
- PR #201 (Tier A, cycle headline slice) — 52 unit tests for
src-tauri/src/story.rsandanonymize.rs. 32 tests in story.rs covering severity bucketing,priority_for,parse_cost_range(en-dash, whitespace, garbage),format_vehicle,build_context, the fullgenerate()pipeline against the live community knowledge base, and severity / cost / DTC invariants. 20 tests in anonymize.rs coveringhash_vinproperties (16 hex chars, stable, distinct, case-sensitive as an invariant), the fullanonymize()pipeline, andexport_json(no VIN / mileage leak, pretty-printed, serde round-trip). Test count went from 149 to 201 incargo test --lib --offline.
The version-cut PR — bumping version strings in Cargo.toml + tauri.conf.json + package.json + the README badge, pushing the v0.14.4 git tag, triggering the release workflow to publish the draft release with the Windows installers — is a separate Tier C step that lands after this cycle’s PR set.
Version policy
Beemuu follows semantic versioning, but the badge is treated as honest: a release is only tagged once the version-bump PR, the installer build and the release notes publish all land together. Patch releases (v0.14.1, v0.14.2, v0.14.3) ship on top of the previous minor without bumping the README badge until the release-cut PR runs.
The same source-of-truth discipline applies to this page: it is regenerated from CHANGELOG.md by hand. If you spot drift between the two, the GitHub file wins.