feat(rollout): release channels tab under Settings > Firmware - #1010
Closed
rl-block wants to merge 1 commit into
Closed
feat(rollout): release channels tab under Settings > Firmware#1010rl-block wants to merge 1 commit into
rl-block wants to merge 1 commit into
Conversation
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.
🔐 Codex Security Review
Review SummaryOverall Risk: HIGH Findings[HIGH] Automated review incomplete
NotesHuman review is required because the bounded automated review was incomplete. Generated by Codex Security Review | |
6 tasks
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.
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.?tab=release-channelsdeep-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.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).useReleaseChannelspolls channels + rollouts once for the page;rolloutStatus.tsadapts proto enums to the design's vocabulary so copy matches feat(rollout): rollout framework presentational layer + Storybook #881 verbatim.MinerSelectionModal: it passedMinerSelectionLista newonSelectionChangeevery render while the list's notify effect depends on that callback, so opening the modal cascadedMaximum 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-linktsc --noEmit, eslint (--max-warnings 0) on all touched filesProto Fleet/Firmware/Release Channels/*stories (table, manage view incl. overlap and create, update behavior)