chore: complete Operations Console ticket

This commit is contained in:
proxyctl coordinator
2026-07-17 20:48:58 +08:00
parent dd4ebddb45
commit fbb81ffb40
2 changed files with 14 additions and 15 deletions
@@ -4,17 +4,17 @@
**Blocked by:** 01 — Build the responsive TUI foundation.
**Status:** ready-for-agent
**Status:** done
- [ ] The header shows a compact proxyctl identity, the Active Profile, and counts for the current Target states.
- [ ] Available Targets appear in stable product order by default.
- [ ] A contextual action reveals unavailable Targets and their detection evidence without changing product order.
- [ ] Each Target row combines a standard Unicode/ASCII-safe symbol, explicit state text, and semantic styling.
- [ ] The selected Target details prioritize state, evidence, affected scope, permissions, ownership/restoration implications, and restart risk.
- [ ] Wide terminals show Target list and details panes side by side; narrow terminals stack the same regions.
- [ ] Tab changes pane focus, the focused pane is visible without relying only on color, and arrows navigate within the focused pane.
- [ ] Long Target lists and details remain reachable through list/viewport scrolling.
- [ ] The footer shows only actions valid for the current focus and state.
- [ ] Resizing preserves selection by Target identity rather than fragile row position.
- [ ] Complete-Model tests cover every Target state, unavailable visibility, long content, focus, scrolling, and wide/narrow rendering.
- [ ] Production rendering is rewritten from the spec; prototype branch `prototype/tui-operations-console` commit `364f28d` is reference material only and is not copied into production.
- [x] The header shows a compact proxyctl identity, the Active Profile, and counts for the current Target states.
- [x] Available Targets appear in stable product order by default.
- [x] A contextual action reveals unavailable Targets and their detection evidence without changing product order.
- [x] Each Target row combines a standard Unicode/ASCII-safe symbol, explicit state text, and semantic styling.
- [x] The selected Target details prioritize state, evidence, affected scope, permissions, ownership/restoration implications, and restart risk.
- [x] Wide terminals show Target list and details panes side by side; narrow terminals stack the same regions.
- [x] Tab changes pane focus, the focused pane is visible without relying only on color, and arrows navigate within the focused pane.
- [x] Long Target lists and details remain reachable through list/viewport scrolling.
- [x] The footer shows only actions valid for the current focus and state.
- [x] Resizing preserves selection by Target identity rather than fragile row position.
- [x] Complete-Model tests cover every Target state, unavailable visibility, long content, focus, scrolling, and wide/narrow rendering.
- [x] Production rendering is rewritten from the spec; prototype branch `prototype/tui-operations-console` commit `364f28d` is reference material only and is not copied into production.
+1 -2
View File
@@ -46,7 +46,7 @@ func (p terminalPresentation) renderTargetListPane(state dashboardRenderState, w
bodyHeight := max(1, height-2)
lines := make([]string, 0, len(state.catalog.items))
selectedIndex := state.catalog.index(state.selectedTargetID)
for i, item := range state.catalog.items {
for _, item := range state.catalog.items {
cursor := " "
if item.ID == state.selectedTargetID {
cursor = "> "
@@ -55,7 +55,6 @@ func (p terminalPresentation) renderTargetListPane(state dashboardRenderState, w
(!state.profileTransition && state.progressTarget == "" && state.applying && item.ID == state.selectedTargetID)
badge := p.targetBadge(item, applying)
lines = append(lines, cursor+badge+" "+item.Description.Name)
_ = i
}
if len(lines) == 0 {
lines = append(lines, "No Targets are currently Available.")