Operator fault panel: report spinner + escalate-to-PagerDuty button#22
Merged
PaulSalaun merged 2 commits intoJul 2, 2026
Merged
Conversation
- The report buttons now show a spinner, disable while in flight, then a good/fail result. State is keyed by a stable code+issue id so it survives the station's periodic re-polls (an object-keyed map reverted the button). - A known fault whose remediation steps did not resolve it gets a distinct red "Report Issue" button that POSTs to a new /fault-escalate relay (raises a PagerDuty incident via hardware-test-service), shown below the hint and kept separate from the grey "Notify Halter" report for uncaught errors. - station_server: add FaultEscalateHandler + set_fault_escalate_handler + /fault-escalate route, delegating to an injected handler exactly like /fault-report (the GUI never calls external services itself). - Rebuild dist. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Coverage Report for CI Build 28417492005Coverage decreased (-0.1%) to 60.607%Details
Uncovered Changes
Coverage Regressions1 previously-covered line in 1 file lost coverage.
Coverage Stats
💛 - Coveralls |
An aborted test is a reset (e.g. the station service restarting on a deploy), not a fault — so its outcome_details must not surface as an operator action. Gate the panel behind a showFaultPanel getter that excludes ABORTED. Rebuild dist. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
PaulSalaun
requested review from
Jwnadler,
bonjuruu,
sim-kelly,
uh-oh-monteiro and
youngglouis
July 1, 2026 04:43
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.
Builds on the operator fault panel to give operators two clear, distinct actions on a failed test, with proper in-flight feedback.
Report buttons — spinner + good/fail, no double-fire
Both submit buttons show a spinner, disable while the request is in flight, then a green (sent) / red (error) result so operators get an unambiguous outcome and can't fire repeatedly. State is keyed by a stable
code + issueid, not theOutcomeDetailobject — the station data is re-polled periodically andmakeTestrebuilds those objects, so an object-keyed map lost the state on the next poll (the button visibly reverted). Asentbutton stays green even while disabled (.operator-fault-report-sent:disabled); only anerrorre-enables it for a retry.Two distinct actions
/fault-report(relayed to Slack). Informational — flag it so engineering can add a fault code./fault-escalaterelay. Raises a higher-priority incident (PagerDuty + on-call) rather than a routine report.Panel hidden on an aborted test
showFaultPanelnow also requires the test not beaborted. An abort is a reset (e.g. the station service restarting on a deploy), not a fault, so its residualoutcome_detailsmust not surface as an operator action. (HTF drops those details server-side too — see hardware-test-framework#1753.)station_server
Adds
FaultEscalateHandler+set_fault_escalate_handler+ the/fault-escalateroute, delegating to a framework-injected handler exactly like/fault-report— the GUI server never calls external services itself (returns 501 until a handler is registered).Build
dist/rebuilt with Node 16; the served bundle isapp.4cad1b230047e7d0f056.js(referenced bydist/index.html).Companion PRs
/hardware-test/fault-escalate), routed to the "Hardware Test Stations" service.