fix(pane): show a task's next move instead of dead text or a fixed method - #57
Merged
Conversation
… 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
…in fleet-pane skill
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.
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:
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.
'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.
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.
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
PUBLISH_LADDERso 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.openpublish 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.open-state fixture toscripts/lib/pane_harness.lua(one new task row) so the pane's most common publish row is actually exercised by the offline renderer.scripts/pane-selftest.shcovering 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.mdto 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.shhad already passed; on top of that I ran the two targeted checks the change actually touches (pane-selftest.shandcheck.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 newopen — reviewnote 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
Evidence: Rendered fleet queue pane at 30 columns
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 columnslua 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.