Skip to content

Show each git fact once in the Info panel - #5006

Merged
brsbl merged 15 commits into
mainfrom
bb/git-status-states-thr_6ii952bx6f
Oct 6, 2026
Merged

brsbl merged 15 commits into
mainfrom
bb/git-status-states-thr_6ii952bx6f

Conversation

@brsbl

@brsbl brsbl commented Oct 6, 2026 •

Copy link
Copy Markdown
Collaborator

Human comments

What was wrong

The Info panel's Git status row mixed several facts into one label. "Dirty", "Untracked", "Clean", "Up to date", "Ahead", "Behind" and "Diverged" each answered two questions at once: are there uncommitted edits, and how does the branch compare to main. Two of those facts also showed elsewhere: ahead commits in Commits and uncommitted files in Changes. Changes also hid one of its two file lists behind an Uncommitted / Committed dropdown.

What changed

Each fact about the thread's code now appears once.

Fact Where it shows
How the branch compares to its merge base Git status: "Even with main", "6 ahead of main", "3 behind main", or "4 ahead, 2 behind main"
Commits on the branch Commits
What those commits changed Commits → Files changed: a subheading with a plain count after a dot ("Files changed · 32"), line totals, and the files
Edits not committed yet Uncommitted files: its own section with count, line totals, and files
Workspace can't be read Git status: a warning icon and the reason, e.g. "Workspace not found"
  • Git status: shows only the branch comparison. The uncommitted icon and the state words are gone. It is hidden until the daemon reports a merge base. "Even with main" is GitHub's wording.
  • Properties: one group: Parent, Project, Environment, Directory, Branch, Merge base, Git status, Pull request, Archived. Directory's value is muted. Dividers separate only the sections.
  • Changes: the dropdown section is gone. Committed files sit under Commits, and uncommitted files have their own section. Each part is hidden when it has no files. Untracked-only files count as uncommitted.
  • Mobile: on touch screens, list rows are one type step smaller than properties (13px vs 14px). Long commit subjects no longer outweigh the properties.
  • Collapse ids: the synced infoPanel.collapsedSections preference uses uncommittedChanges in place of changes. The ids are documented in docs/configuration.md and the bb-cli settings reference. A collapsed Changes section shows Uncommitted files expanded once.
  • Removed: the bucket dropdown (ChangedFilesBucketMenu, InfoMenuTrigger). The composer banner and commit dialog share getGitStatusDisplay, which is unchanged.

No API, CLI, SDK, or wire changes.

How you verified

Screenshots come from the branch web app (1440×900 and a 390×844 mobile view) and the right-panel/Info/Row/Git status Ladle story. Both revisions use the same fixture: a subthread 6 commits ahead of main with 32 committed files, captured with and without one uncommitted edit.

Before: df913a7 (merge base) · After: 6c9eb71 (PR head) · Captured at 2×

Screen / state Viewport Before After
Info panel / one uncommitted file, 6 ahead Desktop · 1440×900 Before: Changes with Uncommitted dropdown After: Commits with Files changed, then Uncommitted files
Info panel / no uncommitted files, 6 ahead Desktop · 1440×900 Before: clean state After: clean state
Info panel / one uncommitted file Mobile · 390×844 Before: mobile After: mobile
Git status / every state (Ladle) Story Before: git status states After: git status states
  • Tests cover formatBranchComparison for even, ahead, behind and diverged. They also check that the dirty-row render shows only the branch comparison, and that the comparison is empty when the daemon reports no merge base.
  • CI runs remotely on the PR head. Tests, typecheck, and lint were not run locally.

QA: signed off by the user on the branch app.

Follow-ups (P2, not in this PR):

  • Give Git status a hover title when its value is truncated.
  • Add render tests for Commits → Files changed, Uncommitted files, and the warning fallback.
  • On touch screens, list rows keep leading-5, so the 13px rows still use 20px line height. Drop the unused line-height override, or use the token's line height.
  • If a branch has committed files but no commits, Commits shows "0" above an empty list. Render the commit list only when there are commits.
  • Make the "Files changed" subheading a real heading for screen-reader navigation.

BB-Thread: Enhance info panel to thread navigation
BB-Thread-ID: thr_6ii952bx6f

AGENT GENERATED

🤖 Generated with Claude Code

brsbl and others added 2 commits October 5, 2026 23:28
Uncommitted, up to date, ahead/behind, and unknown states each get one
12px icon and a short phrase in the Info panel's Git status row.
Untracked-only trees read as uncommitted, matching bb's commit, which
stages every change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

brsbl and others added 4 commits October 5, 2026 23:37
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Git status row now states only how the branch compares to its merge
base (even, ahead, behind, or diverged), with a warning when the
workspace cannot be read. Changes shows Uncommitted and Committed files
together as two groups instead of behind a dropdown, so each fact
appears once.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each section has its own heading count, line totals, and collapse state,
and Committed changes follows Commits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@brsbl brsbl changed the title Show every git status as one icon and a short phrase Show each git fact once in the Info panel Oct 6, 2026
brsbl and others added 4 commits October 6, 2026 01:07
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…erge base

Thread properties split into a place group (Parent, Project, Environment,
Directory, Archived) and a branch group (Branch, Merge base, Pull
request). Merge base reads "main · 6 ahead" when the daemon returns a
merge base, Directory is muted, and Git status appears only when the
workspace cannot be read. Pull request status text uses the success
text token instead of the brighter fill color.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Merge base goes back to only the picker. Git status shows how the branch
compares to the merge base the daemon reported, and hides when no merge
base was returned.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@brsbl
brsbl added this pull request to stack #5012 October 6, 2026 09:02
brsbl and others added 5 commits October 6, 2026 03:54
The top section is one property group again, with dividers only between
sections. Commits lists the branch's commits and then the files those
commits changed, so committed files no longer need their own section.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@brsbl
brsbl merged commit 0fd3085 into main Oct 6, 2026
41 checks passed
@brsbl
brsbl deleted the bb/git-status-states-thr_6ii952bx6f branch October 6, 2026 11:42
brsbl added a commit that referenced this pull request Oct 6, 2026
## Human comments

## What was wrong

The pull request row combined five independent facts into one colored
label:
- lifecycle;
- checks;
- review;
- mergeability;
- merge automation.

That caused four problems:
- **Checks appeared twice.** Failing checks were a red ✗ badge and red
"Checks failing" text.
- **Some states had no label.** Passing, missing and unknown checks
showed nothing.
- **"Blocked" was unexplained.** It covered three different GitHub
causes, one of which ("behind main") the Git status row also reports.
- **Labels and colors mixed meanings.** "Approved · Checks pending"
combined review and checks. Amber meant both "waiting" and "good news"
("Auto-merge on", "Queued").

## What changed

`getPullRequestNextStep` replaces `getPullRequestAttentionDisplay`.
- **One next step:** the row names the single next step, in the server's
existing priority order:
  - Checks failing
  - Changes requested
  - Conflicts with main
  - Behind main / Blocked by rules / Blocked by hooks
  - Checks running
  - Review requested / Review required
  - Queued to merge
  - Ready to merge
- otherwise the checks state (Checks passing / No checks / Checks
unknown)
- **Color only for action:** red marks steps you must act on, and green
marks the one positive step, "Ready to merge". Everything else is muted.
- **Checks in one place:** in the Info panel, checks appear only in the
label; the GitHub icon no longer carries a badge. The composer banner
keeps its badge because it has no room for a label.
- **Checks icons:** checks steps start with a state icon: ✓ passing, ✗
failing, a clock while running, an empty circle for no checks, and a
question mark when unknown. "Checks running" shimmers.
- **Auto-merge:** when auto-merge is on, a small ⚡ icon appears instead
of replacing the label.
- **Same wording everywhere:** the composer banner and the PR status
pill tooltip use the same next step.

No API, CLI, SDK, or wire changes; the server's `attention` value is
unchanged.

## How you verified

The screenshots come from a local Ladle story that renders the
production Branch, Merge base, Git status and Pull request rows, in
light theme at 2×, with the same fixture for every state. The story is
not part of this PR.

Before: `f9a26ab` (#5006, PR row unchanged at its head `6c9eb71`) ·
After: `4919bdb` (PR head) · Captured at 2×

| PR state | Before | After |
| --- | --- | --- |
| Open · ready to merge | ![Before: Open · ready to
merge](https://github.com/user-attachments/assets/14217d0f-b3e3-4f61-a9f6-17a689788093)
| ![After: Open · ready to
merge](https://github.com/user-attachments/assets/4edef0df-8c63-4ded-874a-935a00bea471)
|
| Open · checks passing | ![Before: Open · checks
passing](https://github.com/user-attachments/assets/7fa76c3f-e744-4bd1-af7b-9d5bfbc613b0)
| ![After: Open · checks
passing](https://github.com/user-attachments/assets/f51127fe-1d32-4a05-92de-f61381d75291)
|
| Open · no checks | ![Before: Open · no
checks](https://github.com/user-attachments/assets/30e9df74-a0fa-4749-9202-303561c01cc7)
| ![After: Open · no
checks](https://github.com/user-attachments/assets/2ed223b3-b62a-4d5c-a9c3-0a5374e485c4)
|
| Open · checks unknown | ![Before: Open · checks
unknown](https://github.com/user-attachments/assets/be829446-6c89-42f8-8c1e-c51948fc67c0)
| ![After: Open · checks
unknown](https://github.com/user-attachments/assets/435335d8-bdb5-4ccf-934b-0f353f8a620a)
|
| Open · checks failing | ![Before: Open · checks
failing](https://github.com/user-attachments/assets/428acbc4-f736-4c23-b91c-4b3b2c9593b8)
| ![After: Open · checks
failing](https://github.com/user-attachments/assets/504d8edd-fb89-44f9-8518-4f9ba8b1ceab)
|
| Open · checks pending | ![Before: Open · checks
pending](https://github.com/user-attachments/assets/4a724bc4-4c68-47cc-8d17-39ed117065c6)
| ![After: Open · checks
pending](https://github.com/user-attachments/assets/7aba1b9b-6c90-4e1e-b347-ed5e10b667be)
|
| Open · changes requested | ![Before: Open · changes
requested](https://github.com/user-attachments/assets/b8040d46-3d79-4f72-8824-5dbf62d4d482)
| ![After: Open · changes
requested](https://github.com/user-attachments/assets/e3c4b724-5da0-461f-9383-d3baaef5c92f)
|
| Open · review requested | ![Before: Open · review
requested](https://github.com/user-attachments/assets/600734bf-068f-476e-966d-26042ef895f8)
| ![After: Open · review
requested](https://github.com/user-attachments/assets/76b0dc12-5808-49b2-b2ee-6cc4c8a751d8)
|
| Open · conflicts | ![Before: Open ·
conflicts](https://github.com/user-attachments/assets/1716983c-7e5b-4777-90d2-476142954c64)
| ![After: Open ·
conflicts](https://github.com/user-attachments/assets/cbed128e-4125-4ee1-b9d0-13f058e957bc)
|
| Open · blocked | ![Before: Open ·
blocked](https://github.com/user-attachments/assets/0a1dc0b5-9054-43a3-8f64-02568b9b2385)
| ![After: Open ·
blocked](https://github.com/user-attachments/assets/fb4f2670-0bdb-4fb7-8718-d3abedddc5d7)
|
| Draft · checks passing | ![Before: Draft · checks
passing](https://github.com/user-attachments/assets/92492280-96eb-4db1-b02b-6e21d0cbd8b5)
| ![After: Draft · checks
passing](https://github.com/user-attachments/assets/82c5eda2-293d-437f-9a07-43f76820fb7f)
|
| Draft · checks failing | ![Before: Draft · checks
failing](https://github.com/user-attachments/assets/6b002f0a-4052-4d53-a67f-3689639fa879)
| ![After: Draft · checks
failing](https://github.com/user-attachments/assets/9a4013c3-66a2-41fa-a79a-98e9a0b198ea)
|
| Draft · no checks | ![Before: Draft · no
checks](https://github.com/user-attachments/assets/1665cdda-5249-4fb0-9f31-b923aad56a98)
| ![After: Draft · no
checks](https://github.com/user-attachments/assets/64dbd9c8-2b48-4b9a-bdb8-afa4a45800e8)
|
| Draft · checks unknown | ![Before: Draft · checks
unknown](https://github.com/user-attachments/assets/f0ce4df9-9674-420e-a06e-b04a86f0e8a1)
| ![After: Draft · checks
unknown](https://github.com/user-attachments/assets/27aebd25-8b18-4270-b9f6-229b3e041434)
|
| Draft · checks pending | ![Before: Draft · checks
pending](https://github.com/user-attachments/assets/0fe8be97-ec83-45c4-9053-a5a4a1a46dc8)
| ![After: Draft · checks
pending](https://github.com/user-attachments/assets/c01e26cf-b7ce-428f-b7d7-cb64f85aed5b)
|
| Draft · changes requested | ![Before: Draft · changes
requested](https://github.com/user-attachments/assets/d0dcc42b-c758-42b8-aee8-5c86d63c63f9)
| ![After: Draft · changes
requested](https://github.com/user-attachments/assets/a3f58503-72ce-46e5-a5a6-d875ac92c421)
|
| Merged | ![Before:
Merged](https://github.com/user-attachments/assets/e54f7ac0-9f94-4275-8ffa-2c6e477432f9)
| ![After:
Merged](https://github.com/user-attachments/assets/9f29bd0f-cad2-47dc-8ec9-e2b61c894b30)
|
| Closed | ![Before:
Closed](https://github.com/user-attachments/assets/84f22951-264d-4574-a128-49b221f8965a)
| ![After:
Closed](https://github.com/user-attachments/assets/baa40124-dfdf-4d02-982e-3114eee834f5)
|

- **Tests:**
- `getPullRequestNextStep` covers every attention state, the three
blocked causes, review required vs requested, merged and closed, and
keeps auto-merge out of the label.
- The composer banner test now expects the next step plus the auto-merge
icon.
- **QA:** signed off by the user on the branch app.
- **Follow-ups (P2, not in this PR):**
- Decide whether open PRs without CI should show "No checks" as their
next step.
  - Hide the ⚡ icon in a squeezed composer banner.
  - Add a render test for the Info panel PR row.
- **Remote CI:** runs on the PR head. Tests, typecheck, and lint were
not run locally.

BB-Thread: [Enhance info panel to thread
navigation](https://brsbl.getbb.app/projects/proj_khiw2za95v/threads/thr_6ii952bx6f)
BB-Thread-ID: thr_6ii952bx6f

> AGENT GENERATED

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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