Operator fault panel in the station GUI#21
Merged
PaulSalaun merged 4 commits intoJun 23, 2026
Conversation
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>
Coverage Report for CI Build 27982632419Coverage decreased (-0.2%) to 60.756%Details
Uncovered Changes
Coverage Regressions1 previously-covered line in 1 file lost coverage.
Coverage Stats
💛 - Coveralls |
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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:How
test-summary.component.*— the fault panel UI +reportFault().station-data.ts— filters the internalOperatorActionRequiredmarker and splits the description intoissue/whatToDo.test-state.model.ts—OutcomeDetail { code, issue, whatToDo }.station_server.py— new/fault-reportendpoint 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 canonicalfixtureNumberserver-side before forwarding.Notes
web_guidist bundle (app.6cf0568f...), per the fork's committed-dist convention.6a0c8da; targetshotfix/webui-no-loading-test(the branch that lineage lives on) rather thanmaster.hardware-test-frameworksubmodule pointer will be bumped to this commit once merged.