Skip to content

fix(pane): show a task's next move instead of dead text or a fixed method - #57

Merged
LeTuR merged 2 commits into
mainfrom
fix/pane-glance
Sep 9, 2026
Merged

fix(pane): show a task's next move instead of dead text or a fixed method#57
LeTuR merged 2 commits into
mainfrom
fix/pane-glance

Conversation

@LeTuR

@LeTuR LeTuR commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Intent

The operator asked: 'I think there might still be some UI/UX improvement regarding fleet queue, check if any improvement can be done. With task status pr link.' That is an invitation to look at the TUI queue pane (interface/fleet_queue.lua) as a reader does, not a defect report.

The task brief was explicit that this must NOT add a PR link — the artifact row already exists and works (#47 renders as a short form carrying the same url: click verb). The question was only whether a reader glancing at the column can tell what each task's state means and what their next move is. The brief also set hard constraints I deliberately kept: the pane is a COLUMN not a screen, so a change that ADDS rows is going the wrong way unless it removes more than it adds; the selftest's whole-queue row budget is not negotiable; and the pane is read-only by construction (focusable = false), so no key may be added to it — Ctrl+Click on the url: verb is the entire interaction budget. I added no rows to any task and no keys.

What I found by rendering the pane offline at the two widths scripts/pane-selftest.sh uses (44 and 30 columns) via scripts/lib/pane_harness.lua:

  1. The publish row's 'note' — the one segment that says what the operator DOES about a pull request — was the first entry in PUBLISH_LADDER's drop order, so 'yours to merge' fit at neither 44 nor 30 columns. It was dead text. Meanwhile 'no-mistakes', the publish METHOD, which is one unchanging word under every task in a fleet with a single publish method, was drawn at both widths. I swapped those two rungs so the ladder gives up provenance before it gives up the action. The file's own header already argued the method is the least actionable segment, so this follows its stated reasoning rather than contradicting it.

  2. 'open' — the state EVERY task passes through, written by collect — is drawn muted on purpose, and the header defends that: collect proved the PR exists and nothing has looked at its checks, so it is a fact, not a verdict, and must get no colour that reads as one. I deliberately did NOT repaint it; the file names repainting a state to a verdict colour as the sharpest risk in its design. Instead I gave it a note, 'review', which is the one mechanism that can state the next move without claiming a verdict. This directly implements what the pane's own descriptors comment already says of a done task: the pull request is open and the next move is to review it.

  3. Word-length was a real constraint, not cosmetic. The note is kept only while the whole row fits, and 30 columns is what this pane routinely gets. 'open — review' clears 30; 'open — review it' misses by exactly one column, so I used the shorter form. I deliberately did NOT shorten green's 'yours to merge' to 'merge' to make it fit 30: that would put a word one letter away from 'merged' in the same column that draws 'merged'. I accepted that green's note lands at 44 and not at 30, and documented why.

  4. scripts/lib/pane_harness.lua had no fixture with publish.state = open at all, so the pane's most common publish row was never rendered by anything that could be argued with. I added one, on retire-webui/03 — a task shepherd linked by head branch before collect read the worker's result, which is a documented real scenario in AGENTS.md. This adds exactly one row to the fixture; the render went from 23 to 24 rows against a budget of 26.

Every change carries a new assertion in scripts/pane-selftest.sh, which is what the brief required so the next person can argue with the rendering instead of re-reading Lua: the open row says what to do at 44 AND at 30, green still says whose merge it is at 44, the second PR is named, and a refute pins the ladder order by asserting 'no-mistakes · #47' is no longer what 44 columns draws.

The heavy comment prose in these files is the repo's deliberate house style — AGENTS.md and the pane's own header argue every design decision in place — so the doc-to-code ratio here is intentional and matches the surrounding file, not padding.

Verified: ./scripts/check.sh passes end to end (exit 0), including check.sh pane which runs the selftest; all 28 selftest assertions pass at both widths; nothing overflows 30 columns.

What Changed

  • Swapped the drop order in PUBLISH_LADDER so the 'note' segment (the actionable next step, e.g. "yours to merge") survives before the unchanging publish-method word (e.g. "no-mistakes"), fixing a case where the note never rendered at 44 or 30 columns while the fixed method always did.
  • Gave the open publish state a "review" note so a reader can see the next move on a task whose PR is open but unreviewed, without repainting the state's existing muted colour into a verdict.
  • Added an open-state fixture to scripts/lib/pane_harness.lua (one new task row) so the pane's most common publish row is actually exercised by the offline renderer.
  • Added new assertions to scripts/pane-selftest.sh covering the open-state note at both widths, the green note surviving at 44 columns, the second PR being named, and the new ladder drop order; updated .agents/skills/fleet-pane/SKILL.md to match.

Risk Assessment

✅ Low: Small, self-contained Lua/UI change (ladder-order swap and one new note field) fully covered by its own selftest, which I ran and confirmed all 28 assertions pass at both 44 and 30 columns; no new rows beyond the documented fixture addition, no new interaction surface, and no contradiction with the stated intent (no PR link added, pane stays read-only, row budget honored).

Testing

Baseline ./scripts/check.sh had already passed; on top of that I ran the two targeted checks the change actually touches (pane-selftest.sh and check.sh pane), both green, and additionally captured the raw offline pane render at both widths the selftest exercises — this is the actual end-user-visible TUI output, not just pass/fail assertions. The rendered text confirms the ladder reorder (method now yields before the action note), the new open — review note surviving 30 columns, and green's longer note correctly dropping at 30 as the author documented; no PR-link addition or new interactive key is present in the render. No issues found.

Evidence: Rendered fleet queue pane at 44 columns
 ⛽ fuel reserve 15%                      2m
 claude ████┃██████████████░░░░░░░░░░░░  62%
────────────────────────────────────────────
 3 running  1 ready  1 waiting  3 done
────────────────────────────────────────────
  7 archived
 ◐ RUNNING  3 topics
 ── pane-declutter ─────────────────────────
 ◐ 01 Cut the pane back to what the ope…  6m

 ── publish-agnostic ───────────────────────
 ◐ 02 Record the publish state the she…  15m
 ◆ 03 Draw the publish row in the TUI …  15m
   ↳ 02-shepherd-records-publish  consumes
   1 landed

 ── retire-webui ───────────────────────────
 ● 01 Remove the web monitor and every…  48m
   ⇡ #47 · green — yours to merge         9m
 ▶ 02 Point every document at the pane   48m
   no brief
 ◐ 03 Drop the monitor's selftest and i…  3m
   uncollected
   ⇡ no-mistakes · #52 · open — review    3m

 ● DONE  1 topic
   remote-dispatch  1 landed
Evidence: Rendered fleet queue pane at 30 columns
 ⛽ fuel reserve 15%        2m
 claude ██┃████████░░░░░░  62%
──────────────────────────────
 ◐3  ▶1  ◆1  ●3
──────────────────────────────
  7 archived
 ◐ RUNNING  3 topics
 ── pane-declutter ───────────
 ◐ 01 Cut the pane back t…  6m

 ── publish-agnostic ─────────
 ◐ 02 Record the publish…  15m
 ◆ 03 Draw the publish r…  15m
   ↳ 02-shepherd-re…  consumes
   1 landed

 ── retire-webui ─────────────
 ● 01 Remove the web mon…  48m
   ⇡ #47 · green            9m
 ▶ 02 Point every docume…  48m
   no brief
 ◐ 03 Drop the monitor's …  3m
   uncollected
   ⇡ #52 · open — review    3m

 ● DONE  1 topic
   remote-dispatch  1 landed

Pipeline

Updates from git push no-mistakes

✅ **intent** - passed

✅ No issues found.

✅ **Rebase** - passed

✅ No issues found.

✅ **Review** - passed

✅ No issues found.

✅ **Test** - passed

✅ No issues found.

  • ./scripts/check.sh
  • ./scripts/pane-selftest.sh (28/28 assertions pass at 44 and 30 columns, exit 0)
  • ./scripts/check.sh pane (pane selftest + slot/plugin/fuel-record consistency checks, exit 0)
  • lua scripts/lib/pane_harness.lua 44 — direct offline render of the TUI queue pane fixture at 44 columns
  • lua scripts/lib/pane_harness.lua 30 — direct offline render of the same fixture at 30 columns
✅ **Document** - passed

✅ No issues found.

✅ **Lint** - passed

✅ No issues found.

✅ **Push** - passed

✅ No issues found.

… changes

The publish row's `note` — the segment that says what to do about a pull
request — was the first thing its width ladder dropped, so `yours to merge`
was drawn at neither width `scripts/pane-selftest.sh` renders, while
`no-mistakes` (one unchanging word under every task in the queue) was drawn
at both. The ladder now gives up provenance before it gives up the action.

`open` also gains a note. It is the state every task passes through and it
is drawn muted on purpose — `collect` proved the pull request exists and
nothing has looked at its checks, which is a fact and not a verdict — but
muted beside a collapsed `n landed` row reads as settled, which is the
opposite. It keeps the muted tone and says `review` in words instead.

The harness had no `open` fixture at all, so the pane's most common publish
row was never rendered by anything that could be argued with. One is added,
on a task `shepherd` linked by head branch before `collect` read its result.

Claude-Session: https://claude.ai/code/session_017T9XDgBbaKU84ZB6oZuCZU
@LeTuR
LeTuR merged commit e861cf3 into main Sep 9, 2026
10 checks passed
@LeTuR
LeTuR deleted the fix/pane-glance branch September 9, 2026 21:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant