Skip to content

feat(rollout): active firmware updates, history and header pill - #1011

Closed
rl-block wants to merge 1 commit into
rollout/02-release-channels-uifrom
rollout/03-active-updates-ui
Closed

feat(rollout): active firmware updates, history and header pill#1011
rl-block wants to merge 1 commit into
rollout/02-release-channels-uifrom
rollout/03-active-updates-ui

Conversation

@rl-block

@rl-block rl-block commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Third of three stacked PRs porting the firmware rollout prototype to production (server API in #1008, channels UI in #1010; design note docs/plans/2026-09-03-firmware-release-channels-design.md). This one lands the surfaces for updates in flight and their history.

  • Active updates monitor above the Settings > Firmware tabs: a banner per ongoing update (Callout, danger tone when miners have failed), opening the update detail — sticky header with Manage / Continue / Pause / Resume / Retry failed and an overflow with View miners / Roll back / Cancel remaining (both confirmed); failures-first callout; status lockup in the feat(rollout): rollout framework presentational layer + Storybook #881 vocabulary (Pilot batch review, Batch review, Waiting for telemetry, Paused, Completed, Completed with failures, Canceled); plan stats (scope, pacing, review gates incl. thresholds, target version, back online / hashing); progress against plan with Updated / Remaining / Failed segments; and the telemetry evidence strip (hashrate, power, efficiency, temperature vs baseline, new errors).
  • Miners drill-down with per-miner phase (Updated / Updating / Verifying / Retrying (attempt n) / Failed / Queued / Excluded), last error, and telemetry deltas; a Failed filter.
  • Update history per channel (View and Roll back per entry; rollback offered only for versions that are not the current assignment) and a header pill that leads with whatever needs attention and deep-links to the release channels tab.
  • Activity labels for every rollout event, client-side and via migration 000147 (layers over the 000142 function; down restores it byte-for-byte; round-trip test included).
  • E2E (firmwareRollout.spec.ts): create channel with a miner scope; enforce per model; exclusive membership (overlap rejected, then freed by editing the first channel); header pill deep-link; pilot gate with evidence, pause/resume, continue; batches with auto-continue and no manual review; cancel remaining keeps updated miners and is not restarted; roll back from history (incl. roll-forward offer).

Test plan

  • vitest: full client suite (405 files / 4,329 tests) incl. new banner-summary and status tests
  • go test ./migrations/000147 down/up round-trip; dbtest template applies through 147
  • tsc --noEmit, eslint (--max-warnings 0) on all touched files
  • E2E: all 5 firmwareRollout.spec.ts scenarios pass against the fake proto rigs (desktop project, ~14 min)
  • Storybook: Proto Fleet/Firmware/Release Channels/{Update Detail, Active Updates, Header Pill}
  • Deploy the stack to a dev fleet for a real pilot update end to end

Follow-ups (deferred by design)

Scheduled start; pacing on the Fleet bulk "Update firmware" modal; caching the ListRollouts read path at fleet scale.

…r pill

Completes the release channel operator experience from the rollout UX
design (#881). Above the Settings > Firmware tabs, ActiveUpdatesMonitor
stacks a banner per ongoing update and opens the full-screen detail: status
lockup, plan stats, progress against plan, the telemetry evidence strip, and
the lifecycle actions Continue / Pause / Resume / Retry failed / Cancel
remaining / Roll back (the last two confirmed). A miners drill-down shows
each targeted miner's phase and telemetry against baseline, with a Failed
filter. The manage view gains an update history with View and Roll back per
entry, and the app header a pill that leads with whatever needs attention
and deep-links to the release channels view.

Activity events get display labels on both sides: the client label maps and
migration 000147, which layers the rollout labels over the 000142 function
so the down migration restores it byte-for-byte.

The E2E spec drives the whole flow against the fake rigs: channel creation
with a miner scope, exclusive membership (overlap rejected, freed by editing
the first channel), a pilot gate with evidence, pause/resume, continue,
batches with auto-continue, cancel remaining, and roll back from history.
@github-actions github-actions Bot added javascript Pull requests that update javascript code client server review-policy: needs-review Managed by the Review Policy workflow. labels Sep 3, 2026
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown

🔐 Codex Security Review

Note: This is an automated security-focused code review generated by Codex.
It should be used as a supplementary check alongside human review.
False positives are possible - use your judgment.

Scope summary

  • Reviewed pull request diff only (17b29b7831939271c68b57df35594d112990d3a8...050289f4839a018f613e8bb5413323a9a25a3941, exact PR three-dot diff)
  • Model: gpt-5.6-sol

💡 Click "edited" above to see previous reviews for this PR.


Review Summary

Overall Risk: HIGH

Findings

[HIGH] Automated review incomplete

  • Category: Other
  • Description: The automated review produced no usable result for 17b29b7831939271c68b57df35594d112990d3a8...050289f4839a018f613e8bb5413323a9a25a3941 (workflow run 33788585483; reason: codex-job-timeout, elapsed: unknown, budget: 9 minutes).
  • Impact: The pull request has not received complete automated security, correctness, and reliability analysis.
  • Recommendation: Require human review before merging. Do not treat this result as approval-free or low risk.

Notes

Human review is required because the bounded automated review was incomplete.


Generated by Codex Security Review |
Triggered by: @rl-block |
Review workflow run

@rl-block

rl-block commented Sep 4, 2026

Copy link
Copy Markdown
Contributor Author

Superseded by the smaller stack #1013#1014#1015#1016#1017#1018#1019#1020#1021#1022#1023 (same code, split for review and rebased onto current main).

@rl-block rl-block closed this Sep 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

client javascript Pull requests that update javascript code review-policy: needs-review Managed by the Review Policy workflow. server

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant