fix(changes): show merge conflicts on PR tabs - #8295
Conversation
UX Review (Fable 5) — ✅ PASSUX-level review of The screenshot confirms the rendered result: the conflicted tab (PR #6999) shows a red triangle instead of a green check, the clean tab (PR #6998) keeps its check, and both the sidebar session chips and the header conflict banner agree with the tab state. The precedence (failed CI > conflict > running/passed, terminal suppresses all) is byte-for-byte the same rule UX-Verdict: PASS Fixes a status glyph that lied — conflicted tabs now match the sidebar chip's exact precedence, icon, and label, verified in the rendered screenshot. [UX-REVIEWED] be0a8bb |
Design Review (Fable 5) — ✅ PASSDesign-level review of Design-Verdict: PASS Real misleading-signal fix, precedence matches the sidebar chip's established rule, terminal-state and failed-CI ordering are consistent and pinned by tests. Suggestions
[DESIGN-REVIEWED] be0a8bb |
Opus 4.8 Review — ✅ no blocking findingsReviewed Verdict parsed from the review's SHA-scoped output markers for commit False positive or not applicable? A repository writer can comment: |
GPT 5.6 Review — ✅ no blocking findingsGPT 5.6 completed its review of This comment is updated in place on each push. Review detailsNo findings. False positive or not applicable? A repository writer can comment: |
First Principles Review (Fable 5) — 🔴 BLOCKPremise-level review of All evidence gathered. The fix itself is well-grounded — the sidebar chip ( First-Principles-Verdict: BLOCK A new What this change shipsIntent: make a conflicted pull request's compact tab stop reading as healthy. This is a FIX.
BlockersUndeclared env-var rider duplicating an existing mechanism. The description ("What changed") covers only tab status; the hunk at Subtractions
[FIRST-PRINCIPLES-REVIEWED] be0a8bb |
Open PR relationship auditThis is a consolidated, point-in-time code-level audit note. It compares complete merge-base diffs and current/merged code; it does not treat a shared topic as duplication or partial coverage as completion. Relationship findings
No PR, Issue, label, branch, or review state was changed by the relationship-note portion of this audit. |
Replace misleading pending or passing CI glyphs with a conflict warning while preserving failed CI precedence. Cover selected and background tabs and update the deterministic screenshot harness.
2703c78 to
be0a8bb
Compare
|
@kyleseaman Thanks for this. We are keeping the PR open: the defect is real and still unfixed on What already landed: #3760 shipped exactly this precedence rule (failed CI outranks conflict, conflict outranks running or passed, both suppressed once the pull request is merged or closed, with What is still missing: on Two things before we can merge:
Optional, and worth considering: export Posted from the 2026-09-08 open-PR relationship audit (read-only, one auditor per PR); reply here if any of this is wrong. |
Problem / Motivation
A pull request with merge conflicts can still show the green Checks passed glyph in the Changes-panel source tab. The detail pane reports the conflict, but the compact tab incorrectly reads as healthy.
Why it matters
Users scanning several pull requests can miss that a branch is unmergeable and assume it is ready based on the tab status alone.
What changed (motivation → approach → change)
The source-tab status now uses explicit precedence: failed CI remains highest priority; otherwise, a settled merge conflict replaces pending or passing CI with a red Merge conflicts warning. Merged and closed pull requests suppress stale conflict state. The same logic applies to selected and background tabs.
The deterministic screenshot harness now exercises conflict-plus-passing-CI and asserts that the conflicted tab suppresses Checks passed while a clean neighboring tab retains it.
Tests
npm exec vitest run src/test/PullRequestPanel.test.tsx— 54 passednpm run typecheck— passednpm run lint -- --quiet— passednpm run lint:i18n— passedManual verification
Ran the real-SPA screenshot harness against conflict-plus-passing-CI and clean-plus-passing-CI tabs. Its DOM assertions verified the conflicted tab exposes Merge conflicts, omits Checks passed, and leaves the clean tab unchanged.
Screenshots / video
Related Issues
no linked issue: reported directly from the Changes panel.
Pattern harvest
Rule candidate: review-prompt
Pattern: Compact status summaries must define explicit precedence when independent health signals can disagree.
Checklist
feat|fix|docs|refactor|perf|test|chore|ci|build|revert: ...)Contribution License Agreement
The repository template currently carries an OSPO placeholder; no CLA text has been invented.