Skip to content

ci(deps): bump actions/checkout from 4 to 7 - #2

Closed
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/github_actions/actions/checkout-7
Closed

ci(deps): bump actions/checkout from 4 to 7#2
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/github_actions/actions/checkout-7

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jul 6, 2026

Copy link
Copy Markdown
Contributor

Bumps actions/checkout from 4 to 7.

Release notes

Sourced from actions/checkout's releases.

v7.0.0

What's Changed

New Contributors

Full Changelog: actions/checkout@v6.0.3...v7.0.0

v6.0.3

What's Changed

New Contributors

Full Changelog: actions/checkout@v6...v6.0.3

v6.0.2

What's Changed

Full Changelog: actions/checkout@v6.0.1...v6.0.2

v6.0.1

What's Changed

Full Changelog: actions/checkout@v6...v6.0.1

v6.0.0

What's Changed

... (truncated)

Changelog

Sourced from actions/checkout's changelog.

Changelog

v7.0.0

v6.0.3

v6.0.2

v6.0.1

v6.0.0

v5.0.1

v5.0.0

v4.3.1

v4.3.0

v4.2.2

v4.2.1

... (truncated)

Commits

@dependabot @github

dependabot Bot commented on behalf of github Jul 6, 2026

Copy link
Copy Markdown
Contributor Author

Labels

The following labels could not be found: ci, dependencies. Please create them before Dependabot can add them to a pull request.

Please fix the above issues or remove invalid values from dependabot.yml.

Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v4...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot
dependabot Bot force-pushed the dependabot/github_actions/actions/checkout-7 branch from 459a4c0 to c978c54 Compare July 7, 2026 17:42
@ohgeeceee ohgeeceee closed this Jul 10, 2026
@dependabot @github

dependabot Bot commented on behalf of github Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

OK, I won't notify you again about this release, but will get in touch when a new version is available. If you'd rather skip all updates until the next major or minor version, let me know by commenting @dependabot ignore this major version or @dependabot ignore this minor version. You can also ignore all major, minor, or patch releases for a dependency by adding an ignore condition with the desired update_types to your config file.

If you change your mind, just re-open this PR and I'll resolve any conflicts on it.

@dependabot
dependabot Bot deleted the dependabot/github_actions/actions/checkout-7 branch July 10, 2026 20:58
github-actions Bot pushed a commit that referenced this pull request Jul 15, 2026
Seventh PR of the v0.4.0/v0.5.0 transition. Doc-only. Auto-merge
eligible per CLAUDE.md rule 2.

What this ships:

- docs/v0.5.0_plan.md — the v0.5.0 cycle scope and PR
  sequence. The cycle is named "Ground Truth" because the
  work is about validating the abstractions we shipped in
  v0.3 / v0.4 against real hardware, and adding the narrow
  features that real-car owners actually need first.

Cycle spine (3 PRs, in order):

- PR #1 — Real-car u8_enum validation harness. Doc-only.
  Mirrors the v0.4.0_first_pr.md shape. Gives an F/G-series
  owner with an ENET adapter a small checklist to validate
  the example enum DIDs (gear / engine_state / knock_detect)
  marked [needs verification] in b58.toml / n55.toml since
  PR #60.

- PR #2 — Real-car fuel-trim / adaptation readout. Adds the
  DIDs (typically 0x4116 / 0x4117 / 0x4118 on BMW DME) and
  marks them [needs verification]. Likely no new decoder
  needed (existing s16_div100 handles the typical scaling).
  Protected path (live.rs is adjacent to protocol/).

- PR #3 — Real-car knock-detection visualisation polish.
  Pure JS; extends the Logging tab's per-channel display to
  flag severity-bearing enum values (Moderate / Severe) with
  a visual indicator. Uses LiveValue.text from PR #60.

Out of v0.5.0 scope (deferred to v0.6+ or Backlog per
ROADMAP.md): OBDLink MX+, ENET/DoIP auto-detection, trigger-
based logging, log merge/comparison, custom math channels,
cloud sync, Pi CAN bridge, plugin system, Bootmod3, multi-
language UI, web-based shared-log viewer. Each of those has a
specific blocker documented in ROADMAP.md.

The plan also explicitly notes:

- 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 vs origin/main
  during the v0.4 cycle): 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 src/js/histogram.test.js → 13/13 (run via
  direct invocation; origin/main's package.json has a
  missing comma that breaks 'npm run test:*' — NOT fixed
  here, per commit-discipline 'discovering a broken sibling
  commit is not license to fix it'. That breakage is
  inherited from PR #68 / #69 area; a separate doc-only PR
  can fix it.)

This PR does not touch code, workflows, or protected paths.
195 insertions in one new file.

Co-authored-by: ohgeeceee <ohgeeceee@users.noreply.github.com>
github-actions Bot pushed a commit that referenced this pull request Jul 15, 2026
First PR of the v0.5.0 "Ground Truth" cycle. Doc-only.
Auto-merge eligible per CLAUDE.md rule 2.

What this ships:

- docs/validation/u8_enum-validation.md — the actual
  validation harness. Pre-flight checklist (cable,
  adapter, ignition, simulator NOT in use), per-DID
  test procedure for the three example enum DIDs
  shipped in v0.4.0 (gear / DA0A, engine_state /
  4004, knock_detect / 401F), results-submission
  instructions (PR the [verified YYYY-MM-DD] labels
  back into b58.toml / n55.toml), and a 'what if a byte
  doesn't match' section for the most-likely failure
  mode.

- docs/v0.5.0_first_pr.md — the cycle's written record
  of why this PR exists. Mirrors the v0.4.0_first_pr.md
  shape so future contributors can follow the same
  pattern.

Why this is the first PR of v0.5.0:

The v0.5.0 cycle plan (docs/v0.5.0_plan.md, PR #70)
lists three PRs in order:

  1. THIS PR — validation harness (doc-only, lands
     first because it unblocks the rest)
  2. Real-car fuel-trim readout (PR #2)
  3. Real-car knock visualisation polish (PR #3)

Real-car evidence was the only 🟡 blocker for the v0.4.0
'Tuner Friendly' cycle to retire. The example enum DIDs
shipped in PR #60 all carry [needs verification] markers
because the byte-to-state mappings came from OBDb (CC-BY-SA
4.0) and have not been validated on real hardware.

This harness is the smallest possible next step for an
F/G-series owner with an ENET adapter to retire that
blocker: a checklist they can fill in and PR back, with
no developer hand-holding required.

What this PR does NOT do:

- No code change. Doc-only.
- No new tests. Validation is manual (a person running
  the app against a real car).
- No change to the [needs verification] markers in
  b58.toml / n55.toml. Those stay until a results PR
  lands.

Verification:

- node --test server/dtc/test/ingestor.test.js → all
  green (no regression)
- node --test src/js/histogram.test.js → all green
- git diff origin/main...HEAD --stat → 2 files, 305
  insertions, 0 deletions (clean; both files new)
- This PR does not touch code, workflows, or protected
  paths. A reviewer with an F/G-series car + ENET
  adapter is the authoritative verifier.

Note on the broken package.json: origin/main's
package.json has a missing-comma bug (introduced by a
sibling agent in the PR #68/#69 area; noted in PR #70
and #71 bodies). It breaks 'npm run test:*' but does
NOT break 'node --test' directly. A separate doc-only
PR can fix it. Not fixed here per commit-discipline's
'discovering a broken sibling commit is not license to
fix it.'

Co-authored-by: ohgeeceee <ohgeeceee@users.noreply.github.com>
github-actions Bot pushed a commit that referenced this pull request Jul 15, 2026
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.

Co-authored-by: ohgeeceee <ohgeeceee@users.noreply.github.com>
ohgeeceee added a commit that referenced this pull request Jul 18, 2026
…rofile theme colors (#109)

Ready-to-Claim pile, three items in one Tier A commit:

1. Theme toggle completed: the pre-existing toggle only re-skinned a
   handful of panels; app.css now routes every theme-relevant surface
   through CSS variables with a full body[data-theme=dark] override
   block. The light default stays pixel-identical (:root gains the
   exact literals that were hardcoded before). Persistence moves from
   localStorage to workspace.json (one persistence system).

2. Workspace layout persistence: theme, app mode, active tab,
   connection panel choices, live/log profile selectors, traffic
   auto-refresh, and the per-profile log channel enabled map save
   debounced to ~/beeemuu-exports/workspace.json via the new async
   read_export_text command (writes reuse export_text). First boot
   migrates beeemuu_dark/beeemuu_settings/beeemuu_mode from
   localStorage; corrupt/missing files fall back to defaults. Also
   fixes the legacy connOptsOpen flag, which ANDed the two option
   panels and was effectively always false.

3. Gauge [profile.theme] blocks: ProfileToml/Profile carry an optional
   theme map, surfaced via list_profiles (omitted from JSON when empty)
   and round-tripped by export_profile/import_profiles. gauges.js
   resolves nine colour keys with per-key fallback and CSS.supports
   validation; b58.toml ships the reference block; syntax documented
   in DECODE_FUNCTIONS.md section 9.

Tests: cargo 95 -> 97 lib (+2 community theme parse tests) + 1
integration guard (command count 44 -> 45); node --test 43 -> 57
(+14 workspace round-trip/migration tests). Plan deviations: theme
toggle already existed (completed, not added); light is the default
theme (plan said dark); [profile.theme] needed a minimal Rust
pass-through (plan claimed the TOML format already supported it);
workspace file lives in ~/beeemuu-exports/ (plan said ~/beeemuu/).

Co-authored-by: ohgeeceee <ohgeeceee@users.noreply.github.com>
github-actions Bot pushed a commit that referenced this pull request Jul 18, 2026
Planning document for the post-v0.7.0 cycle, drafted against main @
ba14141. Docs-only: the plan, plus the ROADMAP/README updates it
implies. No code, no data changes.

Gap analysis (evidence-level, ISTA+ vs BeeEmUu):
- SHIPPED: live data, logging/replay/compare, VIN/vehicle info,
  freeze-frame decode, transports (K+DCAN, ENET/DoIP + discovery,
  sim, ISO-TP reassembly).
- PARTIAL: DTC coverage (26 built-in texts; 12-address scan table;
  6 simulator-grade service functions, none chassis-validated;
  thin freeze schemas; embryonic guided fault finding).
- Broken today: community/dtc_texts.toml truncated mid-string (TOML
  parse fails, 0 overlay entries load) and CONTRIBUTING.md truncated
  mid-table — CI can't catch this because lint-toml.js checks
  whitespace, not parseability.
- OUT-OF-SCOPE with reasons: flashing/programming, FSC/AOS, coding
  writes (this cycle), ISTA repair-doc corpus, immobiliser functions.

Four slices: PR #1 data integrity + TOML parse gate (Tier A),
PR #2 service-function breadth with [UNVERIFIED] write discipline
(Tier B, protected paths flagged), PR #3 B48/S58/N57 profiles
(Tier A), PR #4 ECU scan-table breadth + addressing-model doc
(Tier A). Each with acceptance criteria and test expectations.

ROADMAP.md: v0.7.0 marked merged (PRs #108-110), v0.8.0 active-plan
block added, Ready-to-Claim pile pruned of shipped items (theme
toggle, workspace, gauge theming, ISO-TP, OBD-II auto-discovery,
N20/S55). README.md: "What's coming" refreshed for v0.7.0 merged +
v0.8.0 plan link.

Flagged for owner (Tier C, not touched): CLAUDE.md invariant notes
are stale — keep-alive (#87), ISO-TP (#88), and protocol::read_vin
all shipped but still read NOT-YET-IMPLEMENTED.

Co-authored-by: ohgeeceee <ohgeeceee@users.noreply.github.com>
ohgeeceee added a commit that referenced this pull request Jul 18, 2026
Planning document for the post-v0.7.0 cycle, drafted against main @
ba14141. Docs-only: the plan, plus the ROADMAP/README updates it
implies. No code, no data changes.

Gap analysis (evidence-level, ISTA+ vs BeeEmUu):
- SHIPPED: live data, logging/replay/compare, VIN/vehicle info,
  freeze-frame decode, transports (K+DCAN, ENET/DoIP + discovery,
  sim, ISO-TP reassembly).
- PARTIAL: DTC coverage (26 built-in texts; 12-address scan table;
  6 simulator-grade service functions, none chassis-validated;
  thin freeze schemas; embryonic guided fault finding).
- Broken today: community/dtc_texts.toml truncated mid-string (TOML
  parse fails, 0 overlay entries load) and CONTRIBUTING.md truncated
  mid-table — CI can't catch this because lint-toml.js checks
  whitespace, not parseability.
- OUT-OF-SCOPE with reasons: flashing/programming, FSC/AOS, coding
  writes (this cycle), ISTA repair-doc corpus, immobiliser functions.

Four slices: PR #1 data integrity + TOML parse gate (Tier A),
PR #2 service-function breadth with [UNVERIFIED] write discipline
(Tier B, protected paths flagged), PR #3 B48/S58/N57 profiles
(Tier A), PR #4 ECU scan-table breadth + addressing-model doc
(Tier A). Each with acceptance criteria and test expectations.

ROADMAP.md: v0.7.0 marked merged (PRs #108-110), v0.8.0 active-plan
block added, Ready-to-Claim pile pruned of shipped items (theme
toggle, workspace, gauge theming, ISO-TP, OBD-II auto-discovery,
N20/S55). README.md: "What's coming" refreshed for v0.7.0 merged +
v0.8.0 plan link.

Flagged for owner (Tier C, not touched): CLAUDE.md invariant notes
are stale — keep-alive (#87), ISO-TP (#88), and protocol::read_vin
all shipped but still read NOT-YET-IMPLEMENTED.

Co-authored-by: ohgeeceee <ohgeeceee@users.noreply.github.com>
ohgeeceee added a commit that referenced this pull request Jul 18, 2026
… gating (plan PR #2) (#117)

Tier B: touches src-tauri/src/data/service_functions.rs and the
command-adjacent UI surface; commands.rs itself is UNCHANGED (the new
verified flag flows through the existing Serialize derive on
list_service_functions).

Audit: all six routine IDs (0x0F01-0x0F04, 0x0A01, 0x0A02) are v0.4.0
simulator placeholders - the sim answers any 0x31 ID, and no in-repo
source (research/, TECH_SPECS.md, backend seeds) grounds any real ID;
bmw_diag_landscape.md documents BMW routine IDs as security-sensitive,
unpublished. Zero new routine IDs ship; DPF regen, throttle/Valvetronic
adaptation, steering-angle calibration, EGS adaptation reset and EMF
service mode are documented as known-missing in the new harness doc.

Changes:
- ServiceFunction gains a verified flag; all six entries marked
  verified: false with per-entry provenance comments.
- UI renders an UNVERIFIED tag and prepends a routine-ID-not-chassis-
  validated preamble to the run confirmation (risk dialog preserved).
- docs/validation/service-functions.md: real-car harness (preconditions,
  per-routine observations, NRC interpretation, label-removal path);
  CONTRIBUTING.md rule 3 now references it.
- Contract tests: new all_shipped_entries_marked_unverified tripwire
  (lib count 99 -> 100); multi_routine_construction_round_trip gained
  the mechanical verified field. Count/ID/routine-ID/risk preservation
  tests deliberately untouched.

Co-authored-by: ohgeeceee <ohgeeceee@users.noreply.github.com>
ohgeeceee added a commit that referenced this pull request Jul 18, 2026
Owner directive: work lands on GitHub as PRs as soon as it's done -
no Discussion seed, no thread-conclusion gate.

- COMMUNITY_FRAMEWORK.md: Rule 2 rewritten from "No Feature Is
  Accepted Without Public Discussion" to "Work Lands Directly as
  Pull Requests". Reasoning moves into the PR body; Discussions stay
  as an optional venue for genuinely open questions, never a gate.
  Rules 1/3/4 untouched.
- docs/v0.9.0_plan.md + docs/v0.8.0_plan.md: seed-for-Discussion
  framing and cycle-starts-when-thread-concludes gates removed; plans
  stand on their own as PRs.
- ROADMAP.md: v0.9.0 section + footer now say slices dispatch as PRs
  directly.
- README.md: decisions-in-public row, ideas-being-explored section,
  and contributor commitment #2 updated to the direct-PR model.
- CONTRIBUTING.md: feature-ideas path is now PR-first; Discussion
  optional for open directions.

Deliberately kept: Discussions as a venue/contact channel (framework
intro + heads-up line, README contact URL, CONTRIBUTING optional link)
and historical mentions in CHANGELOG.md / RELEASE_NOTES_v0.3.0.md /
v0.5.0-v0.7.0 plan docs (records of what the rule was at the time).
CLAUDE.md has no Discussion references (verified by grep).
ohgeeceee added a commit that referenced this pull request Jul 18, 2026
…#119)

* docs: v0.9.0 cycle plan — "Guided Fault Finding" (gap survey + 5 slices)

Seed-for-Discussion plan for the next cycle, mirroring the v0.8.0
plan's shape. Survey of the existing guided-fault-finding surface
(3 Opinions TOML files, 2 Oracle JSON files / 7 patterns, 2 Story
TOML files / 8 entries — all flat, none branching) identifies the
extension points: a new community/testplans TOML tree with [[step]]
branching (inherits the v0.8.0 PR #1 TOML parse gate), a read-only
plan query command, and a walkthrough UI mounted in the existing
fault-detail composition. Also surfaces that community/oracle/*.json
has no parse gate today.

Five slices: (1) test-plan schema + branch-integrity gate + oracle
JSON gate (Tier A, test-only); (2) grounded first corpus of ~8-10
DTC plans with per-step source citations + known-missing list
(Tier A data); (3) loader + read-only get_test_plan command (Tier B,
protected paths); (4) walkthrough UI with live-data measurement
deep-links and freeze-frame seeding (Tier A frontend); (5) validation
harness + label conventions (Tier A docs). Standing NOT-do list gains
guided-diagnostics-adjacent items: emissions-monitor tampering,
VIN/odometer fraud, imported ISTA test plans, auto-executing writes,
unreviewed LLM procedures, cloud fault upload.

ROADMAP: v0.8.0 status updated (merged #114/#115/#116, #117 pending
human merge), v0.9.0 planned section added. README What's-coming
refreshed to match.

* docs: replace Discussion-gate process with direct-PR model

Owner directive: work lands on GitHub as PRs as soon as it's done -
no Discussion seed, no thread-conclusion gate.

- COMMUNITY_FRAMEWORK.md: Rule 2 rewritten from "No Feature Is
  Accepted Without Public Discussion" to "Work Lands Directly as
  Pull Requests". Reasoning moves into the PR body; Discussions stay
  as an optional venue for genuinely open questions, never a gate.
  Rules 1/3/4 untouched.
- docs/v0.9.0_plan.md + docs/v0.8.0_plan.md: seed-for-Discussion
  framing and cycle-starts-when-thread-concludes gates removed; plans
  stand on their own as PRs.
- ROADMAP.md: v0.9.0 section + footer now say slices dispatch as PRs
  directly.
- README.md: decisions-in-public row, ideas-being-explored section,
  and contributor commitment #2 updated to the direct-PR model.
- CONTRIBUTING.md: feature-ideas path is now PR-first; Discussion
  optional for open directions.

Deliberately kept: Discussions as a venue/contact channel (framework
intro + heads-up line, README contact URL, CONTRIBUTING optional link)
and historical mentions in CHANGELOG.md / RELEASE_NOTES_v0.3.0.md /
v0.5.0-v0.7.0 plan docs (records of what the rule was at the time).
CLAUDE.md has no Discussion references (verified by grep).

---------

Co-authored-by: ohgeeceee <ohgeeceee@users.noreply.github.com>
ohgeeceee added a commit that referenced this pull request Jul 18, 2026
Guided Fault Finding cycle, slice 2 of 5 (Tier A, data-only).

11 branching test plans under community/testplans/, every step cited to
an in-repo source (opinions / oracle / stories / research dim01+dim04 /
TECH_SPECS):
  2A82, 29E0, 29E1, 29E2, 30FF, 29CC, 2E81, 2E82, P0171, P0300, P0420.

- P0171 uses the N55/S55 fuel-trim DIDs 0x1201 (LTFT) / 0x1202 (idle
  adaptation) from TECH_SPECS § 5 for did-measurement steps.
- P0420 ends at 'diagnose the leak or the cat' — readiness-monitor
  masking is a permanent exclusion (v0.9.0 plan).
- Coolant-pump plans (2E81/2E82) never auto-fire a write; activation
  hands off to the service-function UI.
- docs/testplans.md: corpus table + known-missing list (2A99, wastegate
  30FF branch, P0011/P0014, P0087, P0128, VANOS timing family).

All 11 pass shipped_testplans_branch_integrity; lint-toml clean (35
files); data-only, no production code change.

Co-authored-by: Jon currie1 <ohgeeceee@users.noreply.github.com>
github-actions Bot pushed a commit that referenced this pull request Jul 19, 2026
ROADMAP v0.9.0 'Guided Fault Finding' moves Planned -> In progress. PRs #1/#2/#3/#4 (#120/#121/#122/#123) marked Done; PR #5 (validation harness + contribution path) remains Ready/Not yet dispatched. Footer refreshed to 2026-07-19. Doc-only, no code change. Tier A per CLAUDE.md.

Co-authored-by: hermes-agent <ohgeeceee@users.noreply.github.com>
ohgeeceee added a commit that referenced this pull request Jul 19, 2026
…125)

Completes the v0.9.0 'Guided Fault Finding' cycle.

- New docs/validation/testplans.md: a real-car harness that upgrades a plan from verified = 'needs verification' (the default on every plan) to 'verified', mirroring service-functions.md (pre-flight, walk-the-plan, negative-result handling, report-filing).
- community/testplans/README.md gains the plan-level verification-label contract; CONTRIBUTING.md gains the plan axis (rule 4) alongside the existing read/write axes.
- All 11 PR #2 corpus plans now ship 'verified = "needs verification"' so a future UI NEEDS VERIFICATION badge has its data contract. The marker lives in TOML and is ignored by the loader (no deny_unknown_fields), so the branch-integrity gate stays green (cargo test shipped_testplans_branch_integrity passes).

Tier A docs; no Rust/Python change beyond the data marker. Acceptance: docs only, links resolve, CONTRIBUTING conventions consistent.

Co-authored-by: hermes-agent <ohgeeceee@users.noreply.github.com>
ohgeeceee added a commit that referenced this pull request Jul 31, 2026
…#190)

Cycle plan: docs/v0.14.3_plan.md (slice 3 lines 103-124). Tier B
(frontend + CSS; no transport/** changes, no protocol/** changes,
no Rust changes — the backend contract was already shipped by
PR #187). Per CLAUDE.md Tier B rules: PR is the review; no self-merge
even if all checks pass. Awaiting human merge.

## What this slice ships

### 1. live_data_panel.js — new `classifyNrc(err)` helper

Categorises each `LiveError` from `read_live_data`'s new
`LiveSweepResult { values, errors }` shape into one of three buckets
the UI acts on:

  - "unsupported" — the PID is structurally absent on this ECU
    (NRC 0x11 / 0x12 / 0x31 / 0x14); user should be offered the
    "remove from profile" affordance.
  - "transient"  — ECU is unhappy right now (NRC 0x22 conditionsNotCorrect,
    NRC 0x33 securityAccessRequired, NRC 0x78 responsePending, etc.);
    no UI action — the next sweep will retry.
  - "unknown"    — no structured sid/nrc to act on (transport timeout,
    "Not connected", "Unexpected DID response: ..."); same UI treatment
    as transient.

Uses the structured (sid, nrc) fields populated by
`protocol::nrc_from_error` (PR #187) as the fast path. Falls back to
parsing `err.error` (the verbatim protocol error string) via
`parseNrcError` when the structured fields are null, so legacy
callers and any race where the backend populated `error` but not
the structured fields still get a sensible classification.

Exported from the public surface so main.js can call it as
`window.beeemuuLiveDataPanel.classifyNrc(err)`.

### 2. live_data_panel.test.js — 5 new tests

Pinned tests for classifyNrc covering:
- structured (sid, nrc) fast path: unsupported for the four canonical NRCs
- structured (sid, nrc) fast path: transient for non-unsupported NRCs
- structured nrc=null falls back to parsing err.error
- structured nrc=null + unparsable error string returns 'unknown'
- defensive: null / non-object / missing fields never throw

Total: 20 tests in this file (was 15).

### 3. main.js — three call sites rewired for `LiveSweepResult`

The new return shape of `read_live_data` (PR #187) breaks the three
call sites that did `const values = await invoke("read_live_data", ...)`.
All three are updated:

- pollOnce (Live Data tab, line 1365) — main consumer; iterates
  `result.values` for the gauge loop, then a NEW loop over
  `result.errors` that classifies each PID and either (a) logs the
  canonical "unsupported" line + dims the gauge cell + appends a
  one-click "Remove from profile" button that calls the async
  `remove_profile_pid` Tauri command, or (b) logs the transient
  / unknown case and skips UI affordance. Clears any prior dim
  state on a successful read (PID may recover after a re-key cycle).

- buildLogParams (Logging tab channel list, line 2109) — iterates
  `result.values` only; the Logging tab doesn't render error UI.

- logTick (Logging tab chart tick, line 2203) — iterates
  `result.values` only.

New handler `removePidFromProfile(pidId, pidLabel)` — gated behind
`window.beeemuuDialog.ask()` (the same `tauri-plugin-dialog`
confirmation pattern the v0.14.1 issue-#161 fix uses). On success,
removes the gauge cell from the DOM (the PID is gone from the
in-memory profile + the on-disk TOML, so the next sweep won't
return it).

New panel-head count badge `#live-unsupported-count` — hidden when
zero, shows "N unsupported on this ECU" otherwise.

### 4. index.html — `#live-unsupported-count` slot

One-line addition in the Live Data panel head, next to the profile
selector. `hidden` by default; populated by pollOnce.

### 5. app.css — dimmed state + remove button + count badge

Three new rule blocks:
- `.gauge-cell.dimmed` — opacity 0.45 + " (unsupported)" appended
  to the label via ::after pseudo-element. Cleared on next sweep.
- `.pid-remove` — minimal inline button that sits inside the gauge
  cell below the peak label. Hover colour is the project's --err.
- `.live-unsupported-count` — small muted text in the panel head.

## What this PR does NOT do

- No Rust changes. PR #187 already shipped `protocol::nrc_from_error`,
  `LiveSweepResult { values, errors }`, `LiveError`, and the async
  `remove_profile_pid` Tauri command. This PR is the frontend consumer.
- No transport/** changes (K+DCAN / ENET transports untouched).
- No protocol/** changes.
- No new crate / dependency.
- No change to the v0.14.0 Live Gauges panel (still sim-only, per the
  v0.14.2 cycle-pick conversation).
- No version bumps. The release cut (Cargo.toml + tauri.conf.json +
  git tag) is a separate Tier C step that follows slice 3b.

## Tier

B per CLAUDE.md — `src/js/main.js` + `src/js/live_data_panel.js` +
`src/index.html` + `src/css/app.css`. Per CLAUDE.md Tier B rules:
"PR is the review; auto-merge disabled even if all checks pass.
Awaiting human merge."

## Verification

- [x] `node --check src/js/main.js` — rc=0
- [x] `node --check src/js/live_data_panel.js` — rc=0
- [x] `node --test src/js/*.test.js` — 168/168 pass (was 163, +5
  new for classifyNrc)
- [x] `cargo test --lib --offline protocol::` — 15/15 pass (no
  regression on the backend surface this slice consumes)
- [x] `pytest backend/tests/` — 166/166 pass (one test,
  test_app_live_endpoint::test_endpoint_returns_ok, was order-
  dependent flaky on first run; passed on re-run — not introduced
  by this slice)

## Cross-references

- v0.14.3 plan: docs/v0.14.3_plan.md (slice 3 lines 103-124)
- Backend contract this PR consumes: PR #187 — feat(v0.14.3):
  per-PID NRC errors + remove_profile_pid command
- Prior slice shipping the NRC-aware helpers + friendlier log line:
  PR #177 — feat(v0.14.2): Live Data panel UX polish
  (parseNrcError + isUnsupportedNrc were drafted there as
  dead-but-not-yet-usable helpers; this slice activates them via
  the per-PID error loop + classifyNrc)
- Re-enabled orphan from v0.14.2 slice 2 WIP: docs/v0.14.3_plan.md
  §"Open question #2" — the `#live-unsupported-count` badge + the
  dim/remove UI together fulfil the deferred WIP

Co-authored-by: ohgeeceee <ohgeeceee@users.noreply.github.com>
github-actions Bot pushed a commit that referenced this pull request Aug 2, 2026
Tier A, docs only. v0.15.0 "Live Gauges from the Bench"
cycle plan - the next feature cycle per the forward-
roadmap doc's plan (DID-projection bridge + Live Gauges
data source flip + update_can_listen async Tauri command).
Mirrors the v0.14.4 / v0.14.5 / v0.14.6 cycle plan shape
(plan doc + ROADMAP header + CHANGELOG entry per cycle).

This PR also bundles a small fix-up: the v0.14.6 cycle
shipped in PR #226 + #227 without a ROADMAP.md v0.14.6
cycle block - the audit shipped the docs (forward-
roadmap + ROADMAP v0.14.5 closeout + public landing-
page updates) but the ROADMAP v0.14.6 block was missed.
This PR adds the v0.14.6 block as a "Shipped 2026-08-02"
close-out alongside the v0.15.0 block.

## What this PR adds

- docs/v0.15.0_plan.md (new, 322 lines): the v0.15.0
  cycle plan doc per the established docs/v0.14.x_plan.md
  convention. Includes premise (DID-projection bridge +
  Live Gauges data source flip + update_can_listen async
  command, mirroring the v0.14.0 Live Gauges panel),
  slice list (4 slices: 1 Tier A docs-only cycle plan +
  2 Tier A frontend slices + 1 Tier B Rust slice), tier
  split, execution order, "what this cycle does NOT
  ship" claim, open questions for the maintainer,
  cross-references.

- ROADMAP.md: v0.14.6 cycle block added (Shipped
  2026-08-02, Done rows for PRs #226 + #227,
  verification close-out, "What this cycle does NOT
  ship" carried-forward, "Next cycle" pointer to
  v0.15.0). v0.15.0 cycle block added (In Progress -
  slice 0, with 3 Slices planned: DID-projection bridge,
  data source flip, update_can_listen async command,
  with the Tier B flagged per CLAUDE.md golden rule #2).

- CHANGELOG.md: ## [0.15.0] - Unreleased section
  inserted before the v0.14.5 section. Includes the
  cycle status blockquote (slice 0 in flight - this
  PR; slices 1 + 2 Tier A batch + slice 3 Tier B
  are open), the "Planned - Tier A surface (feature
  cycle)" section listing the 4 slices, and the
  "What this cycle does NOT ship" claim.

## Tier

A per CLAUDE.md - docs only, no transport/**, no
protocol/**, no commands.rs, no src-tauri/Cargo.toml,
no src/js/**, no src/css/**, no src/index.html. Auto-
merge eligible once required CI checks pass.

The actual feature slices (1, 2, 3) dispatch as
separate PRs. Slice 3 is Tier B (the only Tier B in
the v0.15.0 cycle) because commands.rs is on the
protected path - flag at the top of the PR body per
CLAUDE.md golden rule #2 + the multi-writer skill's
Tier B/C gate.

## Verification (pre-merge)

- git diff --cached --stat: 3 files, 554 insertions,
  0 deletions (no phantom diff from line-ending
  normalization; verified per the v0.14.3 slice-4
  lessons' CRLF stat-noise trap - the new
  docs/v0.15.0_plan.md was normalized to CRLF on
  disk before git add, which then normalized it to
  LF in the index, matching the committed-blob
  convention)
- git ls-files --stage vs git ls-tree HEAD: staged
  blob SHAs differ for both modified files; the
  new file docs/v0.15.0_plan.md has a legitimate
  new blob SHA. No phantom commit.
- Branched off origin/main @ 83aef4c (the post-#227
  v0.14.6 release cut tip), NOT off the local main
  ref (the multi-writer skill's "local main can be
  stale" trap)
- Working tree clean post-stage; no other
  modifications, no untracked files
- Author ohgeeceee@users.noreply.github.com (GH007
  bypass; content unchanged)

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

Co-authored-by: ohgeeceee <ohgeeceee@users.noreply.github.com>
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