Skip to content

Operator fault panel in the station GUI#21

Merged
PaulSalaun merged 4 commits into
hotfix/webui-no-loading-testfrom
feat/operator-fault-panel
Jun 23, 2026
Merged

Operator fault panel in the station GUI#21
PaulSalaun merged 4 commits into
hotfix/webui-no-loading-testfrom
feat/operator-fault-panel

Conversation

@PaulSalaun

Copy link
Copy Markdown

What

Surface structured test failures to factory operators instead of raw OpenHTF logs (operators currently screenshot incomprehensible tracebacks).

When a failed test carries outcome_details, the station summary renders a prominent red panel:

  • What to do — operator-facing remediation steps (the primary content).
  • A de-emphasised engineering Issue line (fault code + short message).
  • For unmapped/unexpected errors (no remediation text), a Report to engineering button.

How

  • test-summary.component.* — the fault panel UI + reportFault().
  • station-data.ts — filters the internal OperatorActionRequired marker and splits the description into issue / whatToDo.
  • test-state.model.tsOutcomeDetail { code, issue, whatToDo }.
  • station_server.py — new /fault-report endpoint that delegates to a handler injected by the framework (501 if unset). The GUI never calls external services; the framework forwards the report to hardware-test-service, which posts to Slack.

The report payload matches hardware-test-service's IReportFaultRequestDTO (fixtureId/testPlan/dutId/code/issue/traceback). The station relay fills in the canonical fixtureNumber server-side before forwarding.

Notes

  • Includes the rebuilt web_gui dist bundle (app.6cf0568f...), per the fork's committed-dist convention.
  • Based on the currently-pinned commit 6a0c8da; targets hotfix/webui-no-loading-test (the branch that lineage lives on) rather than master.
  • The parent hardware-test-framework submodule pointer will be bumped to this commit once merged.

Surface structured test failures to factory operators instead of raw
logs. When a failed test carries outcome_details, the station summary now
renders a prominent red panel with:

- "What to do": operator-facing remediation steps (primary content).
- A de-emphasised engineering "Issue" line (fault code + short message).
- For unmapped/unexpected errors (no remediation), a "Report to
  engineering" button that POSTs the station/test context plus the error
  logs to the station server's /fault-report relay.

The GUI never calls external services: station_server exposes a
/fault-report endpoint that delegates to a handler injected by the
framework (501 if unset), which forwards to hardware-test-service. The
report payload matches hardware-test-service's IReportFaultRequestDTO
(fixtureId/testPlan/dutId/code/issue/traceback); the station relay fills
in the canonical fixtureNumber before forwarding.

station-data filters out the internal OperatorActionRequired marker and
splits the description into issue / "what to do" for the panel.

Includes the rebuilt web_gui dist bundle (app.6cf0568f...).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coveralls

coveralls commented Jun 22, 2026

Copy link
Copy Markdown

Coverage Report for CI Build 27982632419

Coverage decreased (-0.2%) to 60.756%

Details

  • Coverage decreased (-0.2%) from the base build.
  • Patch coverage: 19 uncovered changes across 1 file (0 of 19 lines covered, 0.0%).
  • 1 coverage regression across 1 file.

Uncovered Changes

File Changed Covered %
openhtf/output/servers/station_server.py 19 0 0.0%

Coverage Regressions

1 previously-covered line in 1 file lost coverage.

File Lines Losing Coverage Coverage
openhtf/output/servers/station_server.py 1 0.0%

Coverage Stats

Coverage Status
Relevant Lines: 7721
Covered Lines: 4691
Line Coverage: 60.76%
Coverage Strength: 3.04 hits per line

💛 - Coveralls

Paul Salaun and others added 3 commits June 22, 2026 15:55
The web_ui job left setup-node unpinned, so it used the runner's default
Node. ubuntu-latest moved to a newer Node where node-sass ^7 (libsass
3.5.5) no longer compiles, breaking the native build. Pin Node 16 — the
version the stations run and the committed dist is built with.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Brings the DDNS health indicator (#20) and its dist rebuild onto the
operator-fault-panel branch.

Conflicts were of two kinds:
- continuous_integration.yml: both sides pinned Node 16; kept the
  commented `'16'` form.
- web_gui/dist/*: both sides rebuilt the bundle to different webpack
  content hashes. Generated artifacts are not hand-merged; instead the
  cleanly-merged source (DDNS + operator panel, no source conflicts) was
  rebuilt with `npm run build` under Node 16, producing a single fresh
  bundle (app.e9c4d879...) that carries both features.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@PaulSalaun PaulSalaun merged commit ea5432f into hotfix/webui-no-loading-test Jun 23, 2026
14 checks passed
@PaulSalaun PaulSalaun deleted the feat/operator-fault-panel branch June 23, 2026 01:12
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.

2 participants