Skip to content
Cockpit0.29.0
A snapshot: read at commit 707a04c7ce8 on 2026-10-18T00:06:01Z by majordomus 0.29.0. Nothing on this page is read again. See it live

I2470

The pull requests drain in the UI: a queue a reader narrows, inspects and follows to what each depends on

Where it stands

devtask.issue
Readiness
complete completion is recorded and every required evidence token is present
Status
DONE
Can start
not now
Milestone
Milestone status
ACTIVE
Wave
2
Waiting on
none
Holds back
Behind it in all
6
Evidence
2 of 2
A move writes the repository: it stamps one field of this issue's record and appends one event to the ledger, and a commit will carry both.
The same moves from a terminal

majordomus plan start I2470

majordomus plan verify I2470

majordomus plan done I2470

What it is

Objective
Give majordomus ui a PR Drain screen (/ui/prs) that shows every open pull request as the integration lane assessed it, lets the reader narrow it by disposition, lane and text, inspect one pull request and the plan issue it names, and follow each dependency and overlap to the pull request it leads to; every control is a link or a GET form, so every view has an address and the screen is complete without JavaScript.
Why
The owner asked on 2026-10-11 to implement every component and view of the UI screenshots, maximally interactive and clickable (references campaigns/majordomus-ui-unified-real-data-v2-20261011/reference/03-pr-drain.png and 05-issues-and-prs.png; pack v3 milestone M05). I2462 (PR #948) shows the queue as a table on /ui/work with one pull request's detail; nothing in it narrows, searches or leads anywhere but back to it. The data for the rest exists in integration.queue: tallies by disposition and lane, next_merge, next_refresh, starving, last_merge, and per pull request its dependencies (certainty, state, satisfied), overlaps (with the shared paths), risk factors, required checks, review and how long it has been actionable; plan.issues holds every issue with its dependencies, dependents, the intents it serves and its evidence counts.
Now
The queue is a table of rows that each open one detail on /ui/work; there are no tabs, no search, no dependency or overlap navigation, no blockers view and no issue view.
Wanted
/ui/prs paints at once (plan.status, plan.issues) and fills the drain from /ui/panels/drain after the paint, because integration.queue asks the forge. The drain shows the lane's tallies (each a link to the lane it counts), what the lane does next (next merge, next refresh, starving, last merge, each pull request a link), the queue's own dispositions as tabs with their counts, a search over title, branch, author and number, the admitted pull requests in rank order, the blockers (conflicting or needing a repair, with what would move each), and a graph of which open pull request depends on which (a merged dependency is not drawn; one the queue does not hold is drawn small and leads to the forge). ?pr=N opens the inspector: badges, next action, reasons and since when it is actionable, the plan issues its title or branch names (each a link to that issue), gates, dependencies and overlaps (each a link to that pull request, or to the forge when it is not open), risk factors, evidence and authored paths, and a link to the pull request on the forge. ?issue=ID opens the issue: its objective, status, milestone, what it depends on, is blocked by and unblocks (each a link), the intents it serves, its scope, its evidence as a meter and its dates, and a link to the pull requests that name it. The Dashboard's queue rows lead here. A forge nobody observed says so and shows no number; a value a link carries that is not the queue's word or an issue id is dropped.
Done when
unknown: the record declares no `completion`
Risk
unknown: the record declares no `risk`

Acceptance

  • /ui/prs answers 200 with a hero and a drain panel deferred to /ui/panels/drain, carrying the reader's choices in its query
  • the drain's tabs are the queue's own dispositions with their counts, and each narrows the rows; the search finds a title, a branch, an author or a number
  • /ui/prs?pr=N opens the inspector, with dependencies and overlaps leading to their pull requests, the forge link, and the issues the title names; a number the queue did not observe says so
  • /ui/prs?issue=ID opens the issue with its dependencies and dependents as links; an id the plan does not hold says so
  • the graph draws only open dependencies, and a forge that was not observed shows no tab and no number
Validation
cargo test --lib ui::test/run.sh 1075_the_pull_requests_drain_in_the_ui
Evidence required
ui_prs_unit_testsui_prs_case_1075
Evidence present
ui_prs_unit_testsui_prs_case_1075

Scope

Touches
apps/majordomus-cli/src/ui/prs.rsapps/majordomus-cli/src/ui/mod.rsapps/majordomus-cli/src/ui/dashboard.rs.ai/repo/project/issues/I2470.yamldocs/MAJORDOMUS_UI.mdtest/cases/1075_the_pull_requests_drain_in_the_ui.sh
Not
unknown: the record declares no `non_scope`
Depends on
Priority
p1
Profile
implementation
Parallel safe
false
Owner
unknown: the record declares no `owner`

The work so far

Branches
none
Merged
none
Commits
0
Trunk
master
Sessions
none
Created
2026-10-11
Updated
2026-10-12T11:00:58Z
Started
2026-10-12T11:00:46Z
Verified
2026-10-12T11:00:51Z
Completed
2026-10-12T11:00:58Z

Synchronisation

Adapter
scripts/github-sync
Repository
unknown: the derived plan's header carries no repository
External issue
unknown: a live GitHub state; this executable makes no network call, so only `scripts/github-sync --check` can answer it
State there
unknown: a live GitHub state; this executable makes no network call, so only `scripts/github-sync --check` can answer it

Findings

Nothing is wrong with these records.