Summary
The PRs tab's CI rollup reports "CI passed · 3 jobs" for a PR where no test job executed at all. It aggregates whatever check-suites happen to exist and reports their conclusions, with no notion of which checks are required or whether the workflow ran. Absence reads as success.
Observed on PR #988 (ade/pr-merged-lane-mapping).
Proof
ADE rendered:
✓ CI passed 3 jobs open
PR #988
gh pr checks 988 — the complete list:
CodeRabbit pass 0 "Review rate limited"
Vercel pass 0 "Canceled by Ignored Build Step"
Vercel Preview Comments pass 0
CodeRabbit was rate-limited — a review that never happened, reporting pass. Vercel was cancelled by an ignored-build step — a skipped build, reporting pass. The third is a comment bot. Nothing verified anything.
Missing: every required job in .github/workflows/ci.yml — install, test-desktop shards 1–8, test-ade-cli, and the ci-pass gate.
$ gh api repos/arul28/ADE/actions/runs?branch=ade/pr-merged-lane-mapping
{"total_count": 0}
Check-suites on head d56fbb420 — GitHub Actions registered no suite at all:
railway-app queued
cursor queued
graphite-app queued
vercel completed / success
mintlify queued
greptile-apps queued
Why it matters
This is the failure mode a CI indicator exists to prevent. A user (or an autonomous /ship loop) reading that card would merge believing the suite was green. It is strictly worse than showing nothing, because it actively asserts a fact that is false.
It also mirrors a bug class we just fixed elsewhere in this tab: rendering a confident signal derived from missing data (merged PRs showing unmapped because their row was deleted). Same disease, different surface.
Diagnosis
The rollup almost certainly derives from the checks/check-suites list returned for the head SHA, reducing conclusions to pass/fail/pending. Two independent defects:
- No required-check awareness. GitHub exposes the required-check list via branch protection / rulesets. The rollup should compare observed checks against required ones and report missing required checks as not-passing — never as passed.
- Skipped/neutral/cancelled conclusions are being counted as success. A check with conclusion
skipped, neutral, cancelled, or a success carrying a rate-limit/ignored-build output is not evidence of a passing build. At minimum these should not contribute to a green rollup.
A third, softer point: with zero Actions suites present, the honest render is "CI has not run", not "CI passed". Presence of unrelated third-party app suites (Vercel, Railway, Graphite, Mintlify, Cursor, Greptile) should not satisfy a CI indicator.
Suggested starting points
apps/desktop/src/main/services/prs/prService.ts — getChecks / computeStatus / the PrStatus.checksStatus derivation
apps/desktop/src/shared/prPipelineState.ts — the canonical status/conclusion → pipeline-state mapping and worst-state ranking (this is where skipped/cancelled/neutral handling belongs, and it is already documented as the single place all surfaces must agree on)
apps/desktop/src/renderer/components/prs/shared/prCheckList.tsx and the PRs card rollup
Acceptance
- A PR whose required Actions checks have not run renders as not passed (e.g. "CI has not run" / pending), never "CI passed".
skipped / cancelled / neutral conclusions do not produce a green rollup on their own.
- Regression test for both, ideally at the
prPipelineState layer so every surface inherits it.
Notes
Separately and unresolved: GitHub Actions created no check suite for this branch across three trigger attempts (opened, reopened, synchronize), while six other apps did. Actions is enabled, globally operational, and ran successfully on another ade/* branch 30 minutes earlier. That is a distinct problem from this ticket, which is purely about ADE reporting green regardless.
Proof artifact attached in the ADE proof drawer: pr988-false-green-ci-card.txt.
Summary
The PRs tab's CI rollup reports "CI passed · 3 jobs" for a PR where no test job executed at all. It aggregates whatever check-suites happen to exist and reports their conclusions, with no notion of which checks are required or whether the workflow ran. Absence reads as success.
Observed on PR #988 (
ade/pr-merged-lane-mapping).Proof
ADE rendered:
gh pr checks 988— the complete list:CodeRabbit was rate-limited — a review that never happened, reporting
pass. Vercel was cancelled by an ignored-build step — a skipped build, reportingpass. The third is a comment bot. Nothing verified anything.Missing: every required job in
.github/workflows/ci.yml—install,test-desktopshards 1–8,test-ade-cli, and theci-passgate.Check-suites on head
d56fbb420— GitHub Actions registered no suite at all:Why it matters
This is the failure mode a CI indicator exists to prevent. A user (or an autonomous
/shiploop) reading that card would merge believing the suite was green. It is strictly worse than showing nothing, because it actively asserts a fact that is false.It also mirrors a bug class we just fixed elsewhere in this tab: rendering a confident signal derived from missing data (merged PRs showing
unmappedbecause their row was deleted). Same disease, different surface.Diagnosis
The rollup almost certainly derives from the checks/check-suites list returned for the head SHA, reducing conclusions to pass/fail/pending. Two independent defects:
skipped,neutral,cancelled, or asuccesscarrying a rate-limit/ignored-build output is not evidence of a passing build. At minimum these should not contribute to a green rollup.A third, softer point: with zero Actions suites present, the honest render is "CI has not run", not "CI passed". Presence of unrelated third-party app suites (Vercel, Railway, Graphite, Mintlify, Cursor, Greptile) should not satisfy a CI indicator.
Suggested starting points
apps/desktop/src/main/services/prs/prService.ts—getChecks/computeStatus/ thePrStatus.checksStatusderivationapps/desktop/src/shared/prPipelineState.ts— the canonical status/conclusion → pipeline-state mapping and worst-state ranking (this is whereskipped/cancelled/neutralhandling belongs, and it is already documented as the single place all surfaces must agree on)apps/desktop/src/renderer/components/prs/shared/prCheckList.tsxand the PRs card rollupAcceptance
skipped/cancelled/neutralconclusions do not produce a green rollup on their own.prPipelineStatelayer so every surface inherits it.Notes
Separately and unresolved: GitHub Actions created no check suite for this branch across three trigger attempts (
opened,reopened,synchronize), while six other apps did. Actions is enabled, globally operational, and ran successfully on anotherade/*branch 30 minutes earlier. That is a distinct problem from this ticket, which is purely about ADE reporting green regardless.Proof artifact attached in the ADE proof drawer:
pr988-false-green-ci-card.txt.