Skip to content

feat: v0.12 Quorum and sprints - #2

Merged
hazeliscoding merged 30 commits into
mainfrom
release/v0.12
Sep 29, 2026
Merged

hazeliscoding merged 30 commits into
mainfrom
release/v0.12

Conversation

@hazeliscoding

@hazeliscoding hazeliscoding commented Sep 29, 2026 •

Copy link
Copy Markdown
Owner

The v0.12 milestone from ROADMAP.md: PR Sweep adopts the Quorum Design System, and named sprints come back as a schedule that rolls over by itself. This stays a draft until the milestone's "Done when" holds.

Decisions (2026-09-29)

  • Quorum, adapted. Tokens copied as-is, except text-3, which is retuned to pass AA in both themes. Fonts and icons are bundled, never loaded from a CDN, so the app still talks only to GitHub.
  • The app and tray icons stay navy and gold. The in-app accent is Quorum's teal.
  • Quorum's voice everywhere, release notes included: sentence case, plain words, no emoji.
  • Sprints are a schedule, not a list. First sprint, length, name pattern and one-off overrides. "Current" rolls over by itself. This avoids the reason sprints were removed on 2026-08-27 ("clicks for no benefit").
  • The fixture sweep moves into v0.12, so every state can be reviewed in both themes.
  • Milestones renumbered: v0.13 Sprint summary, v0.14 Related work, v0.15 Release candidate.

Progress

  • Roadmap, AGENTS.md and this pull request
  • Fixture mode and fixtures
  • Screenshot script with isolated data folders, and "before" screenshots
  • Foundation: tokens, fonts, icons, check-contrast, check-assets
  • Sprints core
  • Shell: top bar with the sprint picker
  • Board
  • Settings (with Sprints) and onboarding
  • Voice pass, AGENTS.md Design section, README screenshots
  • Review: before and after, keyboard pass, reruns, bundle size
  • Release

What changed

  • Board: a health strip of counts, each with a dot and a one-line note; author and draft chips; a search field; the Sweep with CI status, a colored reason, how long, and a next-step button; dense status tables with sticky headers; empty states and loading rows.
  • Top bar: the sprint picker (Sprints or Custom, arrows, Current), a freshness line, a loading bar and a plain error banner.
  • Settings: cards, switches, and a Sprints card: pattern, first sprint, length, and a preview of the sprints around today where one sprint can be renamed or made longer.
  • Onboarding: the Connect GitHub dialog in the same style.
  • Checks: npm run check (in CI) fails on text under AA contrast in either theme, a raw color outside the tokens, a font outside the tokens, or a remote URL.
  • Fixed along the way: Ctrl+R no longer blanks the window (a v0.11 bug), and the Sprints/Custom switch reads as toggle buttons to screen readers.
  • Renderer size: 329 KB in v0.11, 987 KB now. Fonts are 571 KB of that, and 306 KB are .woff fallbacks Chromium never loads; dropping them is on the Later list.

Before and after

Every fixture state, shot with node e2e/screenshot.mjs --fixtures. The images live on the pr-assets branch, which is never merged.

Light theme (14 states)
State Before (v0.11) After
busy
busy-snoozed
busy-quiet
busy-filtered
settings
settings-setup new in v0.12
calm
empty
error
loading
onboarding
onboarding-token new in v0.12
update-downloading
update-ready
Dark theme (14 states)
State Before (v0.11) After
busy
busy-snoozed
busy-quiet
busy-filtered
settings
settings-setup new in v0.12
calm
empty
error
loading
onboarding
onboarding-token new in v0.12
update-downloading
update-ready

Testing

Build, unit tests and design checks

npm install
npm run setup
npm run build
npm test
npm run check
  • Nine … pass lines, including fixture, sprints and checks.
  • npm run check ends with contrast: 63 pairs pass AA in both themes and assets: no remote URLs, stray fonts or raw colors.

Fixture screenshots (no token, no network)

cd desktop
node e2e/screenshot.mjs --fixtures
  • Every state prints and desktop/e2e/shots/ holds 28 images.
  • Your real data folder is untouched: every run uses a throwaway --user-data-dir and stops if the app doesn't use it.
  • To look around by hand: $env:PRSWEEP_FIXTURE = 'busy'; npm run dev from the repo root shows the acme board without signing in. It reads your normal config but never writes a snapshot or a token. Settings you change while it runs are saved, so change them only in a throwaway profile.

On your own account (classic token)

Run npm run dev, or package with npm run package:win and install. Sign in with a classic personal access token (repo, read:org).

  • Existing setup still works. Your profile opens on the same custom date range as in v0.11, with the same PRs. The top bar shows From and To, and a Set up sprints link.
  • Set up sprints. Click the link. Settings scrolls to the Sprints card with the pattern field focused. Set the first sprint's start and the length: the preview updates as you go and nothing is saved yet. Click Use this schedule: the top bar now shows the current sprint, and the board sweeps it.
  • Browse sprints. The arrows step to the previous and next sprint, Current comes back to today's, and a pinned sprint is still pinned after a restart.
  • One-off changes. In the preview, rename a sprint and make one longer. The dates of the sprints after it move, and the top bar follows. Clearing a name brings back the pattern's name.
  • Roll over. Set the first sprint to start so that the current one ends today. Tomorrow the board opens on the next sprint by itself. (Or set your clock forward a day.)
  • Clear schedule returns to the custom range.
  • Keyboard. Tab runs top bar, filters, Sweep rows (title, next step, snooze), then the status rows, and every stop shows a focus ring. Enter or Space on a status row opens the PR.
  • Reload. Ctrl+R reloads the board instead of leaving a blank window.
  • Both themes. The moon or sun button in the top bar switches, and every screen stays readable.
  • Tray. The tray menu's attention count matches the Sweep count, drops when you snooze a row, and ignores quiet rows.

The hash router resolved its URLs against <base href="./">, which dropped index.html, so a reload asked for the renderer folder instead of the page.
… folders

A root postinstall runs npm run setup. CI and the release workflow install each folder from its own lockfile, so their root install skips scripts.
npm 11 skips dependency install scripts that package.json doesn't allow, and Electron's downloads the Electron binary.
@hazeliscoding
hazeliscoding marked this pull request as ready for review September 29, 2026 19:29
@hazeliscoding
hazeliscoding merged commit 48eeadf into main Sep 29, 2026
1 check passed
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.

1 participant