Release history

Every Beemuu release, in plain English.

A chronological view of what has shipped, what was deferred, and where the source lives. The canonical record is the project CHANGELOG.md; this page renders the same entries with section headers and grouping so visitors do not have to read raw Markdown.

Updated August 2026Independent projectGPL-3.0-or-later

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.

Latest tagged releasev0.14.4 (2026-07-31)
LicenseGPL-3.0-or-later
Sourcegithub.com/ohgeeceee/beemuu
DownloadGitHub Releases

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.rs and anonymize.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 full generate() pipeline against the live community knowledge base, hash_vin properties, the full anonymize() pipeline, and export_json. Test count rose from 149 to 201 in cargo 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-rust missing Tauri Linux system dependencies (PR #199, Tier A). The CI and Autonomous Merge workflow's test-rust job ran cargo test on a bare ubuntu-latest runner that lacked Tauri's Linux system libraries. The build failed in 20 seconds on every PR. The fix mirrors the apt-get install step from test.yml::rust into ci.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), and u16_half (raw ร— 0.5, for SAE J1979 fuel-rate g/s). All three follow the existing src-tauri/src/data/live.rs pattern. Spec sections in docs/DECODE_FUNCTIONS.md ยง10 to ยง12.
  • N62 profile enrichment (PR #186, Tier A): three new [[profile.param]] entries in community/profiles/n62.toml wired to the new decoders — 0x5E engine fuel rate L/h, 0x5F engine runtime s, 0x62 engine 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.md Step 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_error helper parses the canonical service() error string into a structured (sid, nrc) pair. read_live_data return type splits into LiveSweepResult { values, errors } so a per-PID failure no longer short-circuits the whole sweep. New async Tauri command remove_profile_pid removes a matching LiveParam from the in-memory profile registry, re-serialises via live::profile_to_toml, and writes the updated TOML. Cargo.toml adds fs to the existing tokio features.
  • Frontend rewire (PR #190, Tier B). New classifyNrc(err) exported from live_data_panel.js buckets each LiveError into unsupported, 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-count panel-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.md and the ROADMAP cycle entry.
  • community/profiles/n62.toml enrichment โ€” 0x5C oil temp (PR #175, Tier A). Replaces the unverified local:10 placeholder with the standard OBD-II PID 0x5C (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.md harness 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.0 docs/validation/can-broadcast.md.

Fixed

  • Claude review workflow repair (PR #176, Tier B). Removed Bash(gh pr review:*) from the --allowedTools list 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 at src/js/main.js:1125 and :1353 used window.confirm(), which the Tauri 2 webview auto-dismisses on some builds. Both gates now route through tauri-plugin-dialog's ask() via the new src/js/dialog.js helper. 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_freeze at 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>.toml files plus community::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 and window.beeemuuCanDecoders). 32 unit tests.
  • JS-side simulator broadcast personality (PR #158, Tier A). src-tauri/src/transport/sim.rs::broadcast_frames_at extended 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.js is a byte-for-byte mirror of the Rust generator; live_gauges.js extended with peakFor(key) and framesPerSecond().
  • 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.js is 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/** and src-tauri/src/commands.rs. Adds transport/can_listener.rs with ListenerMode::{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/** and src-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.toml rebuild to 208 overlay entries, B48/B46/S58/N57 profiles, ECU scan table broadened from 12 to 17, ServiceFunction verification 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_enum decoder 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_enum validation harness, N55 fuel-trim / adaptation DIDs, severity-class styling for enum channels.
  • v0.4.0 (2026-07-15) โ€” Tuner Friendly โ€” u8_enum decoder and per-parameter enum-map pipeline, example enum DIDs, histogram viewer, ServiceFunction multi-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 in tests/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 through protocol::read_vin at src-tauri/src/protocol/mod.rs:296. ENET/DoIP UDP discovery remains honestly not implemented.
  • PR #199 (Tier A, CI workflow)ci.yml::test-rust missing Tauri Linux system dependencies. The CI workflow’s test-rust job ran cargo test on a bare ubuntu-latest runner lacking Tauri's Linux system libraries; the build failed in 20 s on every PR. Mirrored the apt-get install step from test.yml::rust into ci.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.rs and anonymize.rs. 32 tests in story.rs covering severity bucketing, priority_for, parse_cost_range (en-dash, whitespace, garbage), format_vehicle, build_context, the full generate() pipeline against the live community knowledge base, and severity / cost / DTC invariants. 20 tests in anonymize.rs covering hash_vin properties (16 hex chars, stable, distinct, case-sensitive as an invariant), the full anonymize() pipeline, and export_json (no VIN / mileage leak, pretty-printed, serde round-trip). Test count went from 149 to 201 in cargo 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.

Read the source.

Every line of the changelog above is documented in a public PR on GitHub. The source is the audit trail.

Read CHANGELOG.mdView releases

Last updated: 2026-08-02 ยท Beemuu contributors