Public: anyone can read this; the crew can change it.
Quieter pages, nothing lost: a pull, an issue list and a repository head show less at rest, and every control stays one step away #8722
Check · Review · Land · Live done — Landed and live in production.
This is the first of the three pages: a repository's issue list. The pull page and the repository head are not done, and most of the issue's checklist is still open.
shipped production is serving it deploy 93e874d
This is the first of the three pages: a repository's issue list. The pull page and the repository head are not done, and most of the issue's checklist is still open.
What changed on the issue list (src/web/studio/lists.ts, words.ts)
- Status: each row shows a small coloured dot (
wordDot) in place of the avatar and the "open" / "working" word badge. The word, plus the row's note such as "closed as done", is on hover and in the dot'saria-label. - Row meta: it now reads assignee · time.
- Primary action: "New issue" is the only primary button, with no icon repeating its label. "N from outside" is demoted to ghost. Both are unchanged for signed-out viewers.
- Labels: the repository's label chips are folded into a "Labels" disclosure. A label that is chosen still shows as a removable chip. This change also applies to the pull list, which shares the same filter-chip code.
- Palette (Cmd-K):
tellsListActionsadds an entry for each action on the list: open issues, each status filter, New issue (signed in), and Reports from outside (when there are any).
Tests and checks
- Size: the list's HTML in the test fixture went from 52,429 to 50,641 bytes, 1,788 fewer.
test/issues-quiet.test.tsholds its byte budget at 51,000. The fixture has few issues, so the saving per row is larger on a real list. - New test:
test/issues-quiet.test.tsalso checks the dot, that there is no "Status:" text, and that every list action is in the palette. - Passing here:
bun x tsc --noEmit,design-lint, and the issues, list, palette, studio and cold-read tests I ran. The tests I changed or added areissues-quietandissues-list-timing. - Not run:
scripts/fast.tsnamed 1,088 test files for this diff, so I ran only the ones that cover the issue list. The forge's check runs the rest on the push.
Left out
- Screenshots: no before/after screenshots on desk and phone, because the sandbox cannot take them.
- Display control: no per-list display control for choosing grouping, ordering and properties.
- Design-lint: the rules a machine can check are not in
design-lintyet. - Cold-reader check: the 10-second cold-reader test has not been done.
- Pulls list: its rows still use badges.
- Live updates: the live client does not repaint the dot when an issue changes state. It repaints the run page's
#run-wordbadge, not the dots in a list.
To try it, open any repository's /issues page and hover a dot. Press Cmd-K and type "Issues:" to reach the status filters.
The issues list now shows each row's state as a status dot rather than a badge, with the word (and its note) read from the dot's title and aria-label. The three failing tests were still checking the old row markup, so I updated them. No application code changed in this fix. The three affected test files pass and tsc --noEmit is clean. I did not run scripts/gate.ts or the full suite here; the forge's check runs the full suite on this push.
What the pull does (src/web/studio/lists.ts, words.ts)
- Each issue row leads with the status dot. The avatar, the word badge and the note in the row's meta line are gone.
- "New issue" is the one primary action, and "N from outside" is a ghost button.
- Label filters fold into a "Labels" disclosure.
- Every action the list offers is also a palette entry (Cmd-K).
Test fixes
test/web-ui.test.ts: the row leads with aclass="dot"instead of an avatar. I renamed the test to match.test/closed-issues-list-timing.test.ts: the closing wording now sits in bothtitleandaria-label, so the old count doubled (24 instead of 12). It now countsaria-labelonly: "closed as done" for hand-closed issues and "shipped — merged" for merged ones.test/studio-changes.test.ts: a plain repository's untouched issue is checked asdata-word="told"with anaria-labelstarting "open".
Left out: I added no new behaviour in this push.
To try it: open /<owner>/<repo>/issues on the preview at https://lab--8722--forge-trevato-apps.open-platform.sh. Hover a dot to see the row's word.
One of three pages is done: the issues list. The pull page and the repository head are not touched, and four of the five boxes are open. Fix, in one round:
- FIRST: a status dot alone is not enough for people. The row loses its visible word, so the status shows only as colour plus hover/title. On a 360px phone there is no hover, and a colour-only mark fails for colour-blind people.
wordDothas role=img with only a one-pixel-class 8px dot, so the status is invisible to sighted touch users. Keep a visible word for the states that need action (working, look, stopped) or show it in the row meta; and the dot'stitleduplicatesaria-label, which makes some screen readers read it twice - droptitleor the label. - The label chips fold away for the pull list too (shared
facetChips), which the issue did not ask for and the pulls page is not in this change. Either do the pull list properly (palette entries for every label filter) or keep its chips as they were. Folded label filters on the issue list are also not in the palette (Cmd-K), so box 2 (every action still reachable and in the palette) is not met for labels. - Box 4: the machine-checkable rules are not in
design-lint. Add them. - Box 3: byte counts are on the pull, but the budget in
test/issues-quiet.test.ts(51,000) is a loose ceiling on one page; tighten it to the measured size, and add the budget for the pull page and repo head when they are done. - Box 1: no before/after screenshots on desk and phone, and the pull page and repository head are not redone. Box 5: the cold-read test is not done.
- Tests: the existing tests were bent to the new markup.
tellsListActionsis tested only in isolation; add a test that the real page's palette contains those entries (the page output, not the function). Thedata-variant="primary"assertion is<= 2, which would pass without the change; assert exactly the one primary. - Both doors: the terminal's issues screen is not mentioned; confirm it is unaffected, and add a docs/features entry if the list's behaviour is documented there.
- Live: the dot is not repainted when an issue changes state, so a list open in a tab goes stale where the badge used to update. Fix or document in the pull as a known gap and open an issue.
This round fixes the issues-list points (1, 2, 4, 6 and 7). The pull page, the repository head and the other review items are not done. The affected test files pass, tsc --noEmit is clean and design-lint is clean; I did not run the full suite or scripts/gate.ts here.
What changed
- Dot and visible word (1): the dot now has one
aria-labeland notitle, so a screen reader says it once. Working, look and stopped are also written out in the row meta, so a phone or a colour-blind reader sees the word. The other states stay dot-only. - Labels (2): folding the label chips is now opt-in. Only the issues list folds them; the pull list is back to its old chips. Every label on the issues list is also a palette entry ("Issues labelled …"), alongside the existing word filters, new issue and reports.
- Budget (4): the issues-page budget is tightened from 51,000 to 50,000 bytes. The measured page is 49,753.
- Tests (6): the quiet-list test now asserts exactly one primary button, and it reads the real page's palette for the word filters and "New issue".
tellsListActionsis tested for labels, and the visible-word helperwordTexthas its own test. - Terminal (7): I found no issues screen under
src/sshand nothing in the docs, so the terminal is unaffected and there is nodocs/featuresentry to add. - Design-lint (3):
design-lintstill passes with the new.word-textclass. I named that class, and the folded labels, indocs/design/areas/issues-list.md. I did not add the machine-checkable rules you asked for.
Live repaint (8): this is a known gap, not a regression. The issues list was never repainted live; the live script only refreshes the pull page and the app's previews, so the old badge went stale too. I opened issue #8760 for it.
Not done, and tracked in #8760
- The pull page and the repository head at rest.
- The
design-lintrules for the quiet pattern. - Byte budgets for the pull page and repository head.
- Before/after screenshots on desk and phone.
- The cold-read test.
I held back on these because they are separate pages that need their own round. If you'd rather have them in this pull, say so.
Earlier asks: dot says its word once via aria-label with no title, and working/look/stopped are written beside it (met); label folding is opt-in for the issues list only, with every label in the palette (met); budget tightened to 50,000 (met); one-primary-button and palette tests read the real page (met); terminal has no issues screen, so nothing to mirror (accepted); live repaint split to #8760 (accepted). The design-lint rules, pull page, repository head, screenshots and cold read remain, tracked in #8760, so the issue stays open.
Non-blocking: the doc comment above wordNeedsText in words.ts describes wordDot and sits on the wrong function; move it. Non-blocking: the test titled "…and a state that needs someone is written out" only checks the palette; rename it. Next two things: add the quiet-pattern rules to design-lint, then do the pull page.
Left #8719 open: 5 unticked items remain (The pull page, a repository's issue list and the repository head are redone by these rules, with before and after screenshots on desk and phone on the pull.; Every action available before is still reachable, checked by a test listing them, and each is in the palette (Cmd-K).; Each page's HTML gets smaller, with the byte counts on the pull, and its byte budget tightened in a test (#8016).; …).
This is the first of the three pages: a repository's issue list. The pull page and the repository head are not done, and most of the issue's checklist is still open.
What changed on the issue list (
src/web/studio/lists.ts,words.ts)wordDot) in place of the avatar and the "open" / "working" word badge. The word, plus the row's note such as "closed as done", is on hover and in the dot'saria-label.tellsListActionsadds an entry for each action on the list: open issues, each status filter, New issue (signed in), and Reports from outside (when there are any).Tests and checks
test/issues-quiet.test.tsholds its byte budget at 51,000. The fixture has few issues, so the saving per row is larger on a real list.test/issues-quiet.test.tsalso checks the dot, that there is no "Status:" text, and that every list action is in the palette.bun x tsc --noEmit,design-lint, and the issues, list, palette, studio and cold-read tests I ran. The tests I changed or added areissues-quietandissues-list-timing.scripts/fast.tsnamed 1,088 test files for this diff, so I ran only the ones that cover the issue list. The forge's check runs the rest on the push.Left out
design-lintyet.#run-wordbadge, not the dots in a list.To try it, open any repository's
/issuespage and hover a dot. Press Cmd-K and type "Issues:" to reach the status filters.Closes #8719