Skip to content

docs(v0.7.0): cycle plan ('Unblockers') - #83

Merged
ohgeeceee merged 1 commit into
mainfrom
docs/v0.7.0-plan
Jul 16, 2026
Merged

docs(v0.7.0): cycle plan ('Unblockers')#83
ohgeeceee merged 1 commit into
mainfrom
docs/v0.7.0-plan

Conversation

@ohgeeceee

@ohgeeceee ohgeeceee commented Jul 16, 2026

Copy link
Copy Markdown
Owner

v0.7.0 "Unblockers" cycle — Discussion seed

This is the Discussion seed for the v0.7.0 release cycle, per
COMMUNITY_FRAMEWORK.md's "no feature without a Discussion" rule.

The matching cycle-plan doc is PR #83 (currently draft, will be marked ready after this Discussion concludes). Please argue with the plan below — the spine can change before any v0.7.0 work lands.


Cycle premise (short)

v0.6.0 closed the "Real Hardware" cycle (PR #82 cutting the release):

What's left isn't more spine work — it's the accumulated Ready-to-Claim 🟢 pile (consolidated in PR #79) plus one piece of high-leverage protocol work that unblocks multiple downstream 🟡 items.

Cycle name "Unblockers" because the work is about removing the friction that contributors and F/G users hit today, not about shipping a new user-facing capability. The value is the lower contribution barrier and F/G-series auto-detection.


Proposed 3-PR spine

# PR Path touched Auto-merge?
1 ENET/DoIP auto-detection Protected (transport/**) ❌ Human review required
2 Ready-to-Claim pile (dark/light theme + save/load workspace + gauge theming) src/js/, src/css/, src/index.html ✅ Doc-only / pure JS
3 Engine profile gap fills (N20/N26 + S55 TOMLs) community/profiles/*.toml ✅ Pure profile data

PR #1 — ENET/DoIP auto-detection

The highest-leverage protocol work on the entire ROADMAP. Removes the only remaining hardcoded car IP in the app — src/index.html ships <input id="conn-addr" value="169.254.16.11:6801"> today, which violates the CLAUDE.md invariant:

"F/G-series uses DoIP: broadcast UDP discovery to port 13400 and use the VIN/IP the car returns (typically 169.254.x.x). Broadcast across all active interfaces; never hardcode a target IP."

  • New UDP broadcast listener on port 13400 (SAE J1979 DoIP vehicle identification)
  • Parses the car's VIN/IP response, returns discovered ECU list
  • New #[tauri::command] discover_enet_targets()
  • UI: "Discover" button next to the manual IP entry; falls back to manual on timeout
  • New unit tests for the broadcast parser (mock UDP response in ScriptedTransport pattern, mirroring v0.6.0 PR feat(v0.6.0): OBD-II mode 01 PID auto-discovery #81's approach)

Unblocks multiple 🟡 items: real-car F/G validation (no more manual IP gymnastics), OBDLink MX+ support (same discovery shape applies to BLE later), F-series knock/AFR/adaptation polish (no need to fight the connection).

Tradeoff: UDP broadcast on port 13400 cannot be tested in sandboxed CI — the actual loop is real-car-only. The PR tests cover the parser; a future contributor with a real F/G car validates the activation handshake.

PR #2 — Ready-to-Claim pile (doc-only, auto-merge eligible)

Three small UI features consolidated from the Ready-to-Claim pile (PR #79):

  1. Dark/light theme toggle — CSS variables exist; add the toggle button + handler. ~30–60 lines.
  2. Save/load workspace layout — remember which gauges the user had open. ~150–200 lines.
  3. Gauge theming (per-profile colors) — read a [theme] block from the profile TOML; default to current blue/green if absent. ~50 lines + TOML syntax docs.

Why bundle them: a first-time contributor can land this PR and earn their first merged commit. Each sub-feature is too small to stand alone but too small to warrant a separate PR cycle.

PR #3 — Engine profile gap fills (pure data, auto-merge eligible)

The two engines missing from the example profile set:

Engine Profile present? Notes
B58 b58.toml V0.3.0 base; refined in v0.4/v0.5
N55 n55.toml V0.3.0 base; fuel-trim in v0.5
N52 n52.toml E-series, KWP2000
N54 n54.toml E-series twin-turbo, KWP2000
N62 n62.toml V8, E-series
N20 / N26 F-series 4-cyl modular family
S55 F-series M3/M4 high-perf N55 variant

Each new profile is a clone of an existing TOML (b58.toml for N20, n55.toml for S55) with engine-specific DIDs from TECH_SPECS.md (not forum threads) and the [needs verification] marker on every entry per the v0.5.0 PR #73 discipline.


Why "Unblockers" as the cycle name (the honest framing)

The v0.4 → v0.5 → v0.6 cycle names were aspirational ("Tuner Friendly" → "Ground Truth" → "Real Hardware"). v0.7.0 doesn't promise a new user-facing capability. It promises to remove the friction that contributors and F/G users hit today:

If a future cycle wants an aspirational name, v0.8.0 is the natural slot — once ENET auto-detection unblocks real-car F/G validation and the N20/S55 profiles start collecting [verified] PRs from contributors with those chassis.


What does NOT ship in v0.7.0 (deferred)

🟡 Needs-research (deferred to v0.8.0+)

  • Custom math channels (map - baro, rail / load) — needs safe expression sandbox
  • Knock detection visualisation (full distribution view)
  • AFR / lambda bank readout polish
  • Adaptation / fuel trim readout (full per-bank)
  • Trigger-based logging
  • OBDLink MX+ support (auto-detection unblocks for v0.8.0)
  • Injector duty cycle (no separate DID exists per v0.6.0 PR docs(v0.6.0): real-car injector-time validation harness #80)
  • Real-car validation B58 / N55 F-series (auto-detection unblocks for any future contributor)

🟢 Ready items deferred past v0.7.0

  • Export PNG/SVG from charts
  • Real-time data logging to disk
  • KWP2000 slow-module timeout fix (protected path)
  • ISO-TP multi-frame (FF/CF/FC, protected path)

Backlog

  • Cloud sync (privacy + ops first), Raspberry Pi CAN bridge, plugin system, Bootmod3/MHD integration (legal), multi-language UI, web-based shared-log viewer, BMW service manual lookup, vehicle database (VIN → options)

Specific things worth arguing with

  1. PR ci(deps): bump actions/setup-node from 4 to 6 #1 scope: should ENET auto-detection also include BLE auto-detection (Vgate iCar Pro, OBDLink CX) in the same cycle? The plan defers BLE to v0.8.0; consolidating now would make PR ci(deps): bump actions/setup-node from 4 to 6 #1 much bigger but save a future cycle.
  2. PR ci(deps): bump actions/checkout from 4 to 7 #2 scope: are dark/light theme + save/load workspace + gauge theming the right bundle? Other 🟢 items on the pile (export PNG/SVG, real-time-to-disk logging) are also reasonable. Argue for a different mix.
  3. PR chore(deps): bump toml from 0.8.2 to 0.8.23 in /src-tauri in the cargo-minor-patch group #3 priority: N20 vs S55 first? Both are in the same PR per the plan; some contributors may prefer to ship one profile per PR for cleaner review.
  4. Cycle name: "Unblockers" vs something aspirational? The plan argues for honest naming; the cycle name is opinion.
  5. ENET discovery UDP testing strategy: the plan accepts that the broadcast loop is real-car-only. Is there a better path (e.g. a recorded real-car capture fixture, a mock UDP server in CI)?

Links

Seeds the v0.7.0 cycle per COMMUNITY_FRAMEWORK.md's 'no
feature without a Discussion' rule. PR is a Discussion
seed, not a commit to scope. v0.7.0 work should not land
before a Discussion thread opens on the repo.

Premise: v0.6.0 finished 'Real Hardware' (log-merge,
injector-time validation harness, OBD-II PID
auto-discovery). The accumulated 🟢 Ready-to-Claim pile
(consolidated in PR #79) plus one piece of high-leverage
protocol work (ENET/DoIP auto-detection) is the natural
spine. Cycle name 'Unblockers' because the value isn't a
new user-facing capability — it's removing the friction
that contributors and F/G users hit today.

3-PR spine:

  PR #1 — ENET/DoIP auto-detection (protected path,
    human review required). Removes the last hardcoded
    car IP in src/index.html per the CLAUDE.md 'No
    hardcoded car IPs' invariant. UDP broadcast
    listener on port 13400 (SAE J1979 DoIP vehicle
    identification). Unblocks multiple 🟡 items in
    v0.6.0 (real-car F/G validation, OBDLink MX+
    support, etc.).

  PR #2 — Ready-to-Claim pile (doc-only, auto-merge
    eligible). Three small UI features consolidated:
    dark/light theme toggle, save/load workspace
    layout, per-profile gauge theming. All pure
    JS / CSS; no Rust touched. Lowers the contribution
    barrier for first-time contributors.

  PR #3 — Engine profile gap fills (pure data,
    auto-merge eligible). New N20 / N26 (F-series 4-cyl
    modular family) and S55 (F-series M3/M4) TOMLs,
    cloned from b58.toml / n55.toml with
    engine-specific DIDs and the v0.5.0 '[needs
    verification]' marker on every entry.

This is the seed for the next Discussion thread. No v0.7.0
work should land before that thread opens.

Verification:
- python tomllib on n20.toml / s55.toml not yet applicable
  (PR #3 ships those)
- File is LF (matches repo convention for .md)
- git diff origin/main...HEAD --stat: 1 file, 450 lines,
  0 deletions (clean)
- Pure docs change — auto-merge eligible per CLAUDE.md
  rule 2 once the Discussion thread concludes
@ohgeeceee
ohgeeceee marked this pull request as ready for review July 16, 2026 10:03
@ohgeeceee
ohgeeceee merged commit 70c623e into main Jul 16, 2026
7 of 9 checks passed
@ohgeeceee
ohgeeceee deleted the docs/v0.7.0-plan branch July 16, 2026 10:03
@github-actions

Copy link
Copy Markdown

🤖 Doc-only change — auto-merge enabled. Will merge once required checks pass.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant