Skip to content

Finish line: opt-in, plainer, and about what to do - #527

Merged
jarstelfox merged 6 commits into
masterfrom
finish-line
Oct 12, 2026
Merged

jarstelfox merged 6 commits into
masterfrom
finish-line

Conversation

@jarstelfox

@jarstelfox jarstelfox commented Oct 12, 2026 •

Copy link
Copy Markdown
Member

🤖

PR jail popped up for everyone, didn't say what it wanted, felt like a punishment, and hid its settings. Some people also found the hold-to-close button annoying. This keeps the same rule (more than 7 open PRs of your own, or any open longer than 14 days) and changes how it asks.

  • It's opt-in. By default you only get a count in the header ("2 to finish"). The popup is a setting: Pop up, Header count only, or Off.
  • The list says the action and its numbers: "Finish 2 PRs", then "9 open PRs, aim for 7 · 2 PRs older than 14 days · 3 PRs ready to merge", each only when it's above zero. Clicking a number jumps to the first PR it counts.
  • Esc and ✕ close it. It comes back at most every 4 hours, and only if things got worse. "Make me hold to close it" brings back the hold button for anyone who wants it.
  • A cog in the list opens Settings at the Finish line settings. The help panel has a short Finish line section. Only you see any of it.
  • "jail" is gone from the code, the settings keys, storage and the preview hash (#finish=1). Old saved values aren't migrated, so everyone starts from the new defaults.

🤖 Generated with Claude Code

jarstelfox and others added 6 commits October 12, 2026 12:43
The team found the popup pushy: it was on for everyone unless they went
looking for the switch. The default is now the header count alone, and
the popup is something a person turns on.

The settings store writes every field on any change, so a saved 'auto'
can't tell a choice from the old default. A one-time migration
(settingsVersion 1) moves a saved 'auto' to the new default once; 'off'
stays off, and anyone who turns the popup back on keeps it.

jailHoldToClose (off by default) is for the people who liked having to
hold the button down; the modal starts using it in a later commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The team read "jail" as punitive, didn't know what it meant or who saw
it, couldn't find its settings, and some wanted a normal way to close
it. Finish line keeps the same rule and asks for the same work, framed
as finishing what's open.

- The modal says why you're seeing it in numbers, that only you see it,
  and exactly what to do ("Merge or close 2 of these to finish. Start
  with the ones ready to merge."). The title counts down "2 to the
  finish line"; the sad robot behind bars is now one cheering at a flag.
- Esc and a close button put it away, with the same 4-hour, only-if-worse
  return as before. "Make me hold to close it" (off by default) brings
  back the hold button and blocks both.
- A cog in the modal opens Settings scrolled to and focused on the new
  Finish line section.
- The help panel gets a Finish line section.
- "jail" is gone from the code too: files, names, settings keys, the
  stored record key and the preview hash (#finish=1). Old saved values
  under the old keys are ignored on purpose, so everyone starts from the
  new defaults.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
People read "6 to the finish line" and still asked what the finish line
was and what to do. The top of the list now says the action with its
real number ("Finish 2 PRs", "All finished" when done) and a small row
of the numbers behind it that you can act on: "9 open PRs · aim for 7",
"2 PRs older than 14 days", "3 PRs ready to merge", each only when above
zero. Waiting on others stays out of it.

Each number is a button: it opens the groups holding the PRs it counts
and jumps to the first. The groups now fold on their titles so that has
something to open. The header badge says the action too ("2 to finish",
"Finish 2 of your open PRs" on hover). The why and ask sentences are
gone, "Only you see this." is one quiet line under the list, and the
robot only shows when you're done.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Once the robot sat beside "All finished" alone, the card was a tall
picture and a title, with nothing saying what was finished. A short
line says it: none of your open PRs are past your limits.

The scrim was ink at 40%, which in dark mode is a light ink and washed
the board pale instead of dimming it. It now matches Settings' black at
30%.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tab could leave the modal: the wrap compared against the last link in
the DOM, which could be hidden or a row sliding out, so it now only
cycles what Tab can reach. A preview with the mode Off said "Nothing
to finish" over a stat saying you were over; it now shows your real
numbers whatever the mode, and a sample only when you're under.

The rest brings it back to DESIGN.md: stats are FactLinks that jump to
and focus the first PR they count, so the group folding they needed
goes, and GroupHeader takes a string again. Ages stay quiet, since the
stat already says how many are old. The badge count is quiet too.
Focus starts on the dialog, not the close button (now named "Close"),
aria-describedby only points at what's there, and the copy reads true
with hold to close on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The dialog now opens with focus on itself, and the trap only knew the
first and last controls, so Shift+Tab from the dialog walked out onto
the board behind it. Tab from the dialog now goes in at either end.

The review fix commit had reformatted five files to prettier's defaults
(an editor hook from another repo), turning ~100 real Settings lines
into ~1000; they're back in the house style (3-space, single quotes,
100 columns), with app.tsx too.

The stats are spaced instead of dotted, so a wrap at phone width never
leaves a dot hanging, and an old PR's age is set apart by weight now
that it isn't amber.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@jarstelfox
jarstelfox merged commit 2cfa0d9 into master Oct 12, 2026
1 check passed
@jarstelfox
jarstelfox deleted the finish-line branch October 12, 2026 20:40
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