Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .console/log.md
Original file line number Diff line number Diff line change
Expand Up @@ -168,3 +168,11 @@ anchored. Default-open: System Resources only; Gate + Rate collapsed.
body if expanded), divider between sections
- Click-on-header / 'c' / mouse-wheel hit-testing all work uniformly


## 2026-05-08 — Fix Global Gate header DIM-when-healthy; expand load column headers

- Worst-cell tier ladder now picks RUN over DIM when at least one cell
is RUN — gate header reads green when configured + healthy (not grey).
- '1m / 5m / 15m' → '1 Min / 5 Min / 15 Min' (clearer time windows).
- '(N cores)' → '(N Cores)' (title-case suffix).

20 changes: 12 additions & 8 deletions src/operator_console/watcher_status_pane.py
Original file line number Diff line number Diff line change
Expand Up @@ -1016,7 +1016,7 @@ def _bottom_sections(data: dict, C: dict) -> list[dict]:
# ── 1. System Resources (raw host state) ──
sr_lines: list[tuple[str, int]] = [
(" System Resources", C["HEAD"] | curses.A_BOLD),
(f" {'':15} {'1m':>7} {'5m':>7} {'15m':>7}", C["DIM"]),
(f" {'':15} {'1 Min':>7} {'5 Min':>7} {'15 Min':>7}", C["DIM"]),
]
load_str = res.get('load', '?')
parts = load_str.split('/') if '/' in load_str else ['?', '?', '?']
Expand All @@ -1026,7 +1026,7 @@ def _bottom_sections(data: dict, C: dict) -> list[dict]:
))
load_pct_str = res.get('load_pct', '?')
num_cores = res.get('num_cores', 0)
cores_str = f"({num_cores} cores)" if num_cores > 0 else ""
cores_str = f"({num_cores} Cores)" if num_cores > 0 else ""
pct_parts = load_pct_str.split('/') if '/' in load_pct_str else ['?', '?', '?']
sr_lines.append((
f" {'CPU Utilization':15} {pct_parts[0]:>7} {pct_parts[1]:>7} "
Expand Down Expand Up @@ -1087,12 +1087,16 @@ def _bottom_sections(data: dict, C: dict) -> list[dict]:
else:
ram_attr = C["DIM"]
ram_cell = "Memory ≥ ∞"
worst = ram_attr if ram_attr is C["ERR"] else (
conc_attr if conc_attr is C["ERR"] else
ram_attr if ram_attr is C["YLW"] else
conc_attr if conc_attr is C["YLW"] else
C["DIM"]
)
# Worst-cell wins: ERR > YLW > RUN > DIM. When both cells are RUN
# (gate configured + healthy), header should be RUN (green), not DIM.
if ram_attr is C["ERR"] or conc_attr is C["ERR"]:
worst = C["ERR"]
elif ram_attr is C["YLW"] or conc_attr is C["YLW"]:
worst = C["YLW"]
elif ram_attr is C["RUN"] or conc_attr is C["RUN"]:
worst = C["RUN"]
else:
worst = C["DIM"]
gg_lines = [
(" Global Gate", worst | curses.A_BOLD),
(f" {conc_cell}", conc_attr),
Expand Down
Loading