Skip to content

Cockpit: group Live worker progress by task, link issue/PR, sortable columns - #114

Merged
robercano-ghbot merged 2 commits into
mainfrom
feat/issue-92-live-progress-groups
Jul 14, 2026
Merged

Cockpit: group Live worker progress by task, link issue/PR, sortable columns#114
robercano-ghbot merged 2 commits into
mainfrom
feat/issue-92-live-progress-groups

Conversation

@robercano-ghbot

Copy link
Copy Markdown
Collaborator

Closes #92

What

Reworks the cockpit "Live worker progress" panel (single renderer seam in cockpit.sh, so serve mode inherits for free):

  1. Group by task — one <tr class="task-group"> header per task, worker rows (orchestrator/implementer/reviewer×lens) nested underneath, newest issue number first. taskGroupKey() normalizes id variants (88, issue-88, issue-70-worker-inspector, 52b) to one numeric key; non-numeric ids group under their raw id.
  2. Links — task header links to the GitHub issue (taskIssueLink, degrades to plain #N when unknown) and to a referencing PR with open/merged state (findPRForIssue + prBadge), reusing the existing prs array (no new gh call). Branch-match regex /issue-(\d+)(?:[-_]|$)/i avoids issue-9-vs-90 false matches.
  3. Sortable columns — Role/Task/Model/Phase/Lens/Updated headers carry data-sort-key; a small inline <script> (same try/catch IIFE pattern as theme-toggle/module-filter) sorts rows within each group asc/desc. No external JS/CSS; self-contained HTML preserved.

Tests

cockpit.test.sh gains 9 assertions (71 → 80, offline fixtures): multi-group descending order, taskIssueLink linked branch, findPRForIssue/prBadge open + merged pills, taskGroupKey normalization, data-sort-key presence, and no-external-<script src=/<link href= self-contained guard.

Gates

GATES_FILE=.claude/self/gates.json bash .claude/scripts/gate.sh test — green (cockpit.test.sh PASS 80 checks + smoke-fanout PASS).

Review

Correctness (opus) + tests (sonnet) lenses both APPROVE, consensus=all.

Known limitations

  • Serve-mode SSE upsertRow appends new rows past the last group rather than into it, and clicking a group-header row is a no-op — both non-crashing degrades, out of this change's scope.
  • "Newest task first" = highest issue number first (not most-recently-updated).

🤖 Generated with Claude Code

…table columns (#92)

renderLiveProgress() now normalizes task ids (leading issue number, else raw
id) into per-task groups rendered as a header row (linking the GitHub issue
and, when the branch-name convention feat/issue-<N>-... matches, the
associated open PR) followed by that task's worker rows, newest task first.
Column headers carry data-sort-key hooks and a small inline <script>
(same try/catch IIFE convention as the existing theme/filter scripts) sorts
rows within each group on click, toggling asc/desc — inert if the DOM/table
is missing, so it degrades safely under file:// and serve mode alike.
Adds fixture-driven coverage for the new taskGroupKey/taskIssueLink/
findPRForIssue/prBadge logic in renderLiveProgress(): multi-group
newest-issue-first ordering, an issue-linked group header, open/merged
PR badges on the group header, taskGroupKey normalizing distinct raw
task ids ("88" / "issue-88-x") into one group, and the data-sort-key +
self-contained-HTML constraints on the live-progress table. 71 -> 80
checks, all green.
@robercano-ghbot
robercano-ghbot merged commit afa1cc4 into main Jul 14, 2026
9 checks passed
@robercano-ghbot
robercano-ghbot deleted the feat/issue-92-live-progress-groups branch July 14, 2026 06:07
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.

Cockpit: group Live worker progress by task, link issue/PR, and make columns sortable

2 participants