feat(web): surface ODIN procedure metadata + run message in tm3web #23

Merged
outlandnish merged 2 commits from feat/odin-proc-metadata into main 2026-09-12 08:31:42 -05:00
Owner

Surface each ODIN procedure's operator guidance in the tm3web viewer when it's selected, and show the run's own pass/fail message.

What

  • The procedure pane now shows, straight from the procedure's comments.TaskInfo metadata: the step-by-step description (intro + numbered steps), the ⚠ impact warning (e.g. "Axles and wheels will physically rotate after gear shift to D."), additional_info, and the gateway diag level / cancelable / post-fusing preconditions.
  • The run result now shows a readable pass/fail message banner from the procedure's own output — service_output.user_facing_msg for native-script procedures, the failure_message metric for graph procedures — instead of leaving it buried as a raw row in the outputs table.
  • odin_service._proc_meta parses the new TaskInfo fields (user_facing_impact, additional_info, gtw_diag_level, cancelable, post_fusing_allowed); they ride through /api/odin/procedures automatically.

Also

  • Corrected scripts/di/resolver_cal.py operator guidance: on 2022.45.15 firmware OFFSET_LEARNING (0x0406) gates on ROLLS_MODE (4) while RESOLVER_LEARNING (0x0407) gates on DYNO_MODE (5) — not dyno for both — set per phase from the dash traction_mode toggle. Dropped a stale firmware symbol name from the docstring.

Not included

  • The declared dependencies TaskInfo field is intentionally not used to replace the "Requires on bus" derivation: only 21% of procedures declare it (the DIR learn procs declare none), and its content is ECU boot-state + physical harness continuity, not the CAN signals the live on-bus panel needs.

Tests

  • pytest tests/test_odin_service.py tests/test_odin_web.py tests/test_odin_script_api.py tests/test_odin_bench.py — all pass; ruff clean.

🤖 Generated with Claude Code

Surface each ODIN procedure's operator guidance in the tm3web viewer when it's selected, and show the run's own pass/fail message. ## What - The procedure pane now shows, straight from the procedure's `comments.TaskInfo` metadata: the step-by-step **description** (intro + numbered steps), the **⚠ impact** warning (e.g. "Axles and wheels will physically rotate after gear shift to D."), **additional_info**, and the **gateway diag level / cancelable / post-fusing** preconditions. - The run result now shows a readable **pass/fail message banner** from the procedure's own output — `service_output.user_facing_msg` for native-script procedures, the `failure_message` metric for graph procedures — instead of leaving it buried as a raw row in the outputs table. - `odin_service._proc_meta` parses the new TaskInfo fields (`user_facing_impact`, `additional_info`, `gtw_diag_level`, `cancelable`, `post_fusing_allowed`); they ride through `/api/odin/procedures` automatically. ## Also - Corrected `scripts/di/resolver_cal.py` operator guidance: on 2022.45.15 firmware OFFSET_LEARNING (0x0406) gates on ROLLS_MODE (4) while RESOLVER_LEARNING (0x0407) gates on DYNO_MODE (5) — not dyno for both — set per phase from the dash `traction_mode` toggle. Dropped a stale firmware symbol name from the docstring. ## Not included - The declared `dependencies` TaskInfo field is intentionally **not** used to replace the "Requires on bus" derivation: only 21% of procedures declare it (the DIR learn procs declare none), and its content is ECU boot-state + physical harness continuity, not the CAN signals the live on-bus panel needs. ## Tests - `pytest tests/test_odin_service.py tests/test_odin_web.py tests/test_odin_script_api.py tests/test_odin_bench.py` — all pass; `ruff` clean. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Surface each ODIN procedure's operator guidance from its comments.TaskInfo in
the viewer when it is selected: the step-by-step description, the physical-
impact warning, additional_info, and the gateway-diag-level / cancelable /
post-fusing-allowed preconditions. odin_service._proc_meta now parses
user_facing_impact, additional_info, gtw_diag_level, cancelable and
post_fusing_allowed (they flow through /api/odin/procedures).

Also surface the run's own operator message as a readable pass/fail banner --
service_output.user_facing_msg for native-script procedures, the
failure_message metric for graph procedures -- instead of leaving it buried in
the raw outputs table.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
docs(di): correct resolver_cal per-routine traction mode
Some checks failed
Tests / test (pull_request) Has been cancelled
0078001c12
On 2022.45.15 firmware OFFSET_LEARNING (0x0406) gates on ROLLS_MODE (4) while
RESOLVER_LEARNING (0x0407) gates on DYNO_MODE (5) -- not dyno for both. Fix the
operator guidance (pick the mode per phase from the dash traction_mode toggle)
and drop the stale firmware symbol name from the docstring.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
outlandnish/tm3diag!23
No description provided.