Skip to content

feat(rollout): release channels tab under Settings > Firmware - #1010

Closed
rl-block wants to merge 1 commit into
rollout/01-release-channel-serverfrom
rollout/02-release-channels-ui
Closed

feat(rollout): release channels tab under Settings > Firmware#1010
rl-block wants to merge 1 commit into
rollout/01-release-channel-serverfrom
rollout/02-release-channels-ui

Conversation

@rl-block

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

Copy link
Copy Markdown
Contributor

Summary

Second of three stacked PRs porting the firmware rollout prototype to production (design note: docs/plans/2026-09-03-firmware-release-channels-design.md; server API in #1008). This one adds the release channel management UI; the active-update monitor, detail modal and header pill follow in PR 3.

  • Release channels tab beside Files under Settings > Firmware (?tab=release-channels deep-links to it). Disclosure table per the feat(rollout): rollout framework presentational layer + Storybook #881 design: channel rows with miner counts and an update roll-up ("2 updating, 1 needs attention"), per-model rows with firmware transitions ("1.4.3 → 1.4.4") and update status, and a Manage action.
  • Manage view (also the create flow): General (name, description), Applies to (Sites / Buildings / Racks / Groups / Miners via the shared TargetSelectionModals, with a debounced live preview of the miners covered per model and any overlapping channel, which blocks saving), Update behavior (RolloutControls: Method, Order, pilot/batch size, wait between batches, review after each batch, auto-continue with hashrate / efficiency / temperature / error thresholds and a telemetry settle time, max miners offline), and Firmware (per-model picker, Apply starts an update paced by the saved behavior, live progress bar, View miners).
  • useReleaseChannels polls channels + rollouts once for the page; rolloutStatus.ts adapts proto enums to the design's vocabulary so copy matches feat(rollout): rollout framework presentational layer + Storybook #881 verbatim.
  • Fixes a pre-existing render loop in the shared MinerSelectionModal: it passed MinerSelectionList a new onSelectionChange every render while the list's notify effect depends on that callback, so opening the modal cascaded Maximum update depth exceeded (the same errors seen in the prototype's dev logs). The callback is now stable and skips no-op updates. Reproduced and verified fixed against the dev app with Playwright.

Test plan

  • vitest: full client suite (405 files / 4,328 tests) — new unit tests for the status adapter, behavior utils, scope summary, useReleaseChannels, and Firmware tab switching / deep-link
  • tsc --noEmit, eslint (--max-warnings 0) on all touched files
  • Manual against a rebuilt dev backend: create channel → pick miners (no console errors) → save → manage view shows live scope preview, behavior and per-model firmware table; screenshots reviewed
  • Storybook: Proto Fleet/Firmware/Release Channels/* stories (table, manage view incl. overlap and create, update behavior)
  • E2E spec lands in PR 3 with the active-update surfaces

Adds the operator UI for release channels in the vocabulary of the rollout
UX design (#881): a Release channels tab beside Files with a disclosure
table (channel rows, per-model firmware transitions and update status),
and a manage view that saves General, Applies to (sites / buildings /
racks / groups / miners through the shared target selection modals, with a
live preview of the miners covered and any overlapping channel) and Update
behavior (method, order, batch sizing, review after each batch,
auto-continue with its thresholds, max miners offline) together, then
assigns firmware per model to start updates paced by that behavior.

useReleaseChannels polls channels and rollouts once for the page.
rolloutStatus.ts adapts the proto enums to the design's state and phase
labels (Single batch / Multiple batches / Pilot batch, then remaining;
Updated / Updating / Retrying / Queued / Failed / Excluded).

Also fixes a render loop in the shared MinerSelectionModal: it handed
MinerSelectionList a fresh onSelectionChange every render, and the list's
notify effect depends on that callback, so opening the modal cascaded
"Maximum update depth exceeded". The callback is now stable and skips
no-op updates.
@github-actions github-actions Bot added javascript Pull requests that update javascript code client 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 (a6375f1588a2bd47e4dc268cd0d75bbb655f5303...17b29b7831939271c68b57df35594d112990d3a8, 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 a6375f1588a2bd47e4dc268cd0d75bbb655f5303...17b29b7831939271c68b57df35594d112990d3a8 (workflow run 33784081524; 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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant