The changes list now answers “what is this waiting for?” in one column, and the rest of the row follows the issue list.
One status
| Label | When |
|---|---|
| Waiting on CI approval | a contributor branch at this commit has not been allowed by a maintainer |
| Waiting on CI jobs | a check for the commit is queued or running |
| CI failed | a check failed or was canceled; the newest attempt per job decides |
| Waiting for review | fewer current approvals than the base branch requires |
| Merge conflict | the change no longer merges into its base cleanly |
| Ready to merge | approvals are in (or none are required) and the checks passed |
| Merged / Closed | terminal states |
Each label carries an icon and a tooltip: the approval count, the ref that needs allowing, or the base it conflicts with. The order of the checks is the order of the next move, so a held run is not hidden behind “Waiting for review”.
The status is derived from facts a list can afford:
- the approvals the page already counts;
- one batched
ForSHAsquery for every head on the page (newruns(repo, sha, created)index) instead of one query per row; - one ref listing to find contributor tips whose CI is still held, following the same rule as the change page;
- a merge check only for a row that would otherwise read as ready, so a page of rows waiting for review pays no merges. Nothing here moves a ref or queues a run; the full landing plan remains the detail page’s job.
The rest of the row
- Author and opening time moved under the title, like the issue list, with the comment count last (hidden at zero).
- The last column is Updated: the newest commit over
requests/<id>/, which covers edits, comments, target changes and approvals. The incremental refresh reads the commit range’s paths, so an edit that cancels itself still counts. - The list sorts by Updated, newest first, with open changes ahead of merged and closed ones. The index uses the same order.
- The Author, Approvals and Age columns are gone, and the state chip with them.
docs/change-requests.md gained a short section naming the statuses.
Tests
server/web: the classifier’s labels, priority and tooltips.forge/index: a request’s Updated follows a comment and an approval, the commented change sorts first, and a full rebuild matches the incremental refresh.ci/runs:ForSHAsgroups per commit and skips commits nobody ran.server: the rendered list has the four columns, the expected statuses for review/ready/merged/closed fixtures, author links under the title, and none of the removed columns.
gofmt, go vet, scripts/check-links.py, vole workflow check, and
go test -race -count=1 -tags sqlite_fts5 ./... pass.