Skip to content

docs(v0.6.0): cycle plan ("Real Hardware") - #76

Merged
github-actions[bot] merged 1 commit into
mainfrom
docs/v0.6.0-plan
Jul 15, 2026
Merged

docs(v0.6.0): cycle plan ("Real Hardware")#76
github-actions[bot] merged 1 commit into
mainfrom
docs/v0.6.0-plan

Conversation

@ohgeeceee

Copy link
Copy Markdown
Owner

Summary

Kicks off v0.6.0 planning. Doc-only. Auto-merge eligible
per CLAUDE.md rule 2.

The plan defines the v0.6.0 "Real Hardware" cycle — three
small PRs focused on turning the now-validated decoder pipeline
(v0.3 / v0.4) plus the real-car harness (v0.5.0) into actual
tuner-facing workflows on real data.

Cycle spine

Three PRs, in order:

# Title Type Path
1 Log-merge / comparison code (JS / CSS) src/js/
2 Injector duty cycle (decoder + DIDs) code (profile + Rust) live.rs adjacent
3 OBD-II PID auto-discovery code (protocol + commands) protocol/, commands.rs

PR #1 is pure JS / CSS — a "Compare logs" button next to
"Export CSV" with a diff-modal that shows per-channel meanΔ,
std-devΔ, maxΔ, countΔ between two logged CSV sessions. The
single most common tuner workflow: "before vs. after my tune."
Testable via the existing node --test harness.

PR #2 fills the third leg of the tuner model — fuel-trim and
knock shipped in v0.4 / v0.5; injector duty cycle was the
missing piece. New decoder in live.rs (probably u16_div10
or similar, 8-line change to the existing decoder enum), new
DIDs in the profile TOMLs marked [needs verification].
Protected path — flag for human review.

PR #3 ships the first non-BMW-specific surface — scans
standard OBD-II service 0x01 PIDs 0x000x7F and reports
which respond. Useful diagnostic check. Protected path —
flag for human review.

What's deferred (out of v0.6.0 scope)

The remaining 🟡 items move to v0.7.0+:

  • Custom math channels, knock viz polish, AFR polish,
    adaptation / fuel trim readout polish, trigger-based
    logging, OBDLink MX+, ENET/DoIP auto-detection, real-car
    validation B58 / N55 F-series.

All Backlog items (i18n, plugin system, web log viewer,
Bootmod3, automatic service manual lookup, OBD-II PID
auto-discovery, VIN database) also stay deferred.

What's notable about the plan

  • "Real Hardware" as the cycle name — the work is about
    turning validated decoder + harness into productive tuner
    workflows on real data.
  • Three-PR spine mirrors v0.5.0 — same shape as the
    prior two cycles (each shipped 3 PRs in order).
  • Honest preconditions. The plan repeats the multi-writer
    pattern, the origin/main drift risk, and the rule that
    PRs ci(deps): bump actions/checkout from 4 to 7 #2 and chore(deps): bump toml from 0.8.2 to 0.8.23 in /src-tauri in the cargo-minor-patch group #3 must go through human review.
  • Discussion-first. The plan explicitly notes the
    COMMUNITY_FRAMEWORK.md "no feature without a Discussion"
    rule — this plan is the seed for the Discussion thread,
    not a substitute for it. No v0.6.0 code should land
    before the Discussion concludes.

Verification

  • git diff origin/main...HEAD --stat → 1 file, 233
    insertions, 0 deletions
    (clean; this PR is a new doc
    file only)
  • node --test server/dtc/test/ingestor.test.js → all
    green (no regression)
  • node --test src/js/histogram.test.js → all green
    (no regression)
  • node --test src/js/test/live_format.test.cjs → all
    green (no regression)
  • This PR does not touch code, workflows, or protected
    paths.

Files

docs/v0.6.0_plan.md   | 233 ++++++++++++ (new)

Related

Author note

Commit authored with ohgeeceee@users.noreply.github.com
to bypass GH007 (private-email push block). Content
unchanged.

Continuation of the v0.5.0 close-out pattern. Doc-only.
Auto-merge eligible per CLAUDE.md rule 2.

What this PR ships:

- docs/v0.6.0_plan.md — the proposed v0.6.0 cycle scope and
  PR sequence. The cycle is named 'Real Hardware' because
  the work is about turning the now-validated decoder
  pipeline (v0.3 / v0.4) plus the real-car harness (v0.5.0)
  into actual tuner-facing workflows on real data.

Cycle spine (3 PRs, in order):

- PR #1 — Log-merge / comparison (PR #2 in cycle-plan
  numbering; this is the first v0.6.0 PR). Pure JS / CSS.
  Adds a 'Compare logs' button next to 'Export CSV' on the
  Logging tab. Diff-modal shows per-channel meanΔ,
  std-devΔ, maxΔ, countΔ. ~30 lines of business logic
  in a new src/js/log_diff.js, ~150 lines of UI. Tested
  via the existing node --test harness.

- PR #2 — Injector duty cycle (decoder + DIDs). Touches
  src-tauri/src/data/live.rs (new decoder) and the
  profile TOMLs. Protected path — flag for human review.

- PR #3 — OBD-II PID auto-discovery. Pure diagnostic utility
  (scans standard 0x01 PIDs 0x00..0x7F, reports which
  respond). The first non-BMW-specific surface shipped
  via UDS. Touches src-tauri/src/protocol/mod.rs (new
  scan helper) and src-tauri/src/commands.rs (new
  #[tauri::command]). Protected path — flag for human
  review.

Out of v0.6.0 scope (deferred per the cycle-plan):

The remaining ROADMAP 🟡 items (custom math channels,
knock viz polish, AFR polish, adaptation / fuel trim
readout polish, trigger-based logging, OBDLink MX+,
ENET/DoIP auto-detection, real-car validation B58 / N55
F-series) move to v0.7.0+.

All Backlog items (i18n, plugin system, web log viewer,
Bootmod3, automatic service manual lookup, OBD-II PID
auto-discovery, VIN database) also stay deferred.

The plan explicitly notes:

- 'No feature without a Discussion' per COMMUNITY_FRAMEWORK.md.
  This plan is a seed for the Discussion thread, not a
  substitute for it. No v0.6.0 code should land before
  the Discussion concludes.
- Sibling-agent race in this repo (CLAUDE.md + multi-writer
  skill): work in fresh sibling clones, branch off
  origin/main, push from the clone.
- origin/main drift (local main was stale during the v0.4
  and v0.5 cycles): always git fetch origin before
  basing a branch, diff against origin/main not main.
- CLAUDE.md rule 2: only doc-only PRs auto-merge. PRs #2
  and #3 must go through human review.

Verification:

- node --test server/dtc/test/ingestor.test.js → all
  green (no regression)
- node --test src/js/histogram.test.js → all green
- node --test src/js/test/live_format.test.cjs → all
  green
- git diff origin/main...HEAD --stat → 1 file, 210
  insertions, 0 deletions (clean; this PR is a new
  doc file only)
- This PR does not touch code, workflows, or protected
  paths.
@github-actions
github-actions Bot merged commit ed80c11 into main Jul 15, 2026
6 of 7 checks passed
@github-actions

Copy link
Copy Markdown

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

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f7fee71afc

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/v0.6.0_plan.md
Comment on lines +189 to +190
- **CLAUDE.md rule 2** — only doc-only PRs auto-merge. PR #1
(log-diff) is pure JS / CSS and eligible; PRs #2 and #3

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Require review for the JS/CSS PR

This says the log-diff PR is auto-merge eligible because it is “pure JS / CSS,” but I checked .github/workflows/claude-auto-merge.yml and the allowlist only treats docs, text, images, LICENSE, and issue templates as safe; src/js/main.js and src/css/app.css will be marked UNSAFE and left for human review. Following this handoff either fails the automation or bypasses the repo’s documented “only doc-only PRs may auto-merge” rule, so PR #1 should be described as requiring human review even though it avoids protected Rust paths.

Useful? React with 👍 / 👎.

Comment thread docs/v0.6.0_plan.md
Comment on lines +63 to +65
- `community/profiles/{b58,n55}.toml` — add the injector duty
cycle DID(s). Likely `0x401F` on N55 / `0x4xxx` on B58
(placeholder until a community source confirms). Marked

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Avoid reusing the knock-detect DID

For the injector-duty PR, this suggests 0x401F as the likely N55 DID, but the current profiles already use did:401F for knock_detect in both community/profiles/n55.toml and community/profiles/b58.toml. If the follow-up PR follows this plan, it will either duplicate an existing channel with a different meaning or overwrite the knock-detection mapping, so the placeholder should not name 0x401F unless a source proves the existing mapping is wrong.

Useful? React with 👍 / 👎.

Comment thread docs/v0.6.0_plan.md
Comment on lines +83 to +86

**Acceptance.** Profile TOMLs parse, live-data tick returns
non-NaN numbers in the simulator, [needs verification] stays
in the profile label until real-car validation.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Include simulator data for the new DID

This acceptance criterion depends on the simulator returning decodable bytes for the new injector-duty DID, but SimTransport::live_value currently has explicit DIDs only through 0x1010 and returns a single 0x00 for unknown DIDs. With the planned u16_div10-style decoder, read_live_data drops that value because two bytes are required, so the PR will not produce “non-NaN numbers in the simulator” unless the plan also includes updating src-tauri/src/transport/sim.rs or chooses a decoder that matches the existing simulator response.

Useful? React with 👍 / 👎.

Comment thread docs/v0.6.0_plan.md
Comment on lines +92 to +94
- `src-tauri/src/protocol/mod.rs` — new `scan_obd2_pids()`
helper that reads standard service 0x01 PIDs `0x00` to
`0x7F` and reports which respond. ~30 lines, well-contained.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Discover PIDs from support bitmasks

For service 01 discovery, treating every PID from 0x00 to 0x7F that responds as a supported PID is the wrong loop for this codebase: connection_test already labels 01 00 as the supported-PIDs bitmask, and the simulator returns that bitmask from obd_value(0x00). A brute-response scan can list metadata PIDs such as 0x00/0x20 as user-facing supported PIDs and can miss the <2s real-car target on adapters that timeout unsupported PID requests, so the helper should parse the support bitmasks (0x00, then indicated extension ranges) rather than probing all responders.

Useful? React with 👍 / 👎.

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