Handle null PR check status lists #245

Closed
stephen wants to merge 1 commit from fix/241-null-pr-check-statuses into main
Owner

Why

fj pr list --repo rasterstate/fj failed with error: decoding JSON list response when a PR had no per-check statuses. That made fleet-status mark rasterstate/fj as missing and blinded the supervisor to open fj PRs.

What

  • Treat statuses: null from Forgejo's combined commit status endpoint as an empty check list.
  • Keep empty/no-check status output explicit instead of failing decode.

Testing

  • cargo test combined_status
  • cargo run --quiet -- pr list --repo rasterstate/fj --no-pager
## Why `fj pr list --repo rasterstate/fj` failed with `error: decoding JSON list response` when a PR had no per-check statuses. That made fleet-status mark `rasterstate/fj` as missing and blinded the supervisor to open fj PRs. ## What - Treat `statuses: null` from Forgejo's combined commit status endpoint as an empty check list. - Keep empty/no-check status output explicit instead of failing decode. ## Testing - `cargo test combined_status` - `cargo run --quiet -- pr list --repo rasterstate/fj --no-pager`
Handle empty PR check status lists
All checks were successful
Forseti review / forseti review (advisory) (pull_request_target) Successful in 20s
ci / check (pull_request) Successful in 10m43s
ci / live-e2e (pull_request) Successful in 2m7s
ci / coverage (pull_request) Successful in 2m53s
8deb8a9da4

Superseded by Forseti review for e4d01f78717f.

Forseti review

No blocking findings from the lead reviewer.

No inline findings.

  • PR: rasterstate/fj#245
  • Head SHA: 8deb8a9da44c
  • Review job: sha256:563fd9ef2e97dd610912e9a7d94f3732d0ff5ce10f71373a60fa02c58318f25e
  • Provider pair: openai:gpt-5.5+anthropic:claude-haiku-4-5-20251001
  • Blocking findings: 0
  • Inline findings: 0
  • Model tokens: 31326 in / 1170 out (17202 from cache) ≈ $0.0706
  • Token source: GITHUB_TOKEN
  • Runner: 90f812eae3b0
  • Run: https://rasterhub.com/rasterstate/fj/actions/runs/447
<!-- forseti:review {"version":2,"repo":"rasterstate/fj","pr":245,"head_sha":"8deb8a9da44cd1746a00c7c0e53f3f496f84b125","provider_pair":"openai:gpt-5.5+anthropic:claude-haiku-4-5-20251001","policy_version":"stub-policy-v1","prompt_version":"prompt-v2","context_fingerprint":"fnv64:63964ff839bd99ed","review_job_key":"sha256:563fd9ef2e97dd610912e9a7d94f3732d0ff5ce10f71373a60fa02c58318f25e","base_sha":"ba27179161a593d32874ae0a0f79e2e3a57620f9","role":"summary","status":"superseded"} --> > Superseded by Forseti review for `e4d01f78717f`. ## Forseti review No blocking findings from the lead reviewer. _No inline findings._ - PR: `rasterstate/fj#245` - Head SHA: `8deb8a9da44c` - Review job: `sha256:563fd9ef2e97dd610912e9a7d94f3732d0ff5ce10f71373a60fa02c58318f25e` - Provider pair: `openai:gpt-5.5+anthropic:claude-haiku-4-5-20251001` - Blocking findings: `0` - Inline findings: `0` - Model tokens: `31326 in / 1170 out` (`17202` from cache) ≈ `$0.0706` - Token source: `GITHUB_TOKEN` - Runner: `90f812eae3b0` - Run: https://rasterhub.com/rasterstate/fj/actions/runs/447
forgejo-actions approved these changes 2026-08-09 19:46:12 +00:00
Dismissed
forgejo-actions left a comment

Forseti review

No blocking findings from the lead reviewer.

No inline findings.

  • PR: rasterstate/fj#245
  • Head SHA: 8deb8a9da44c
  • Review job: sha256:563fd9ef2e97dd610912e9a7d94f3732d0ff5ce10f71373a60fa02c58318f25e
  • Provider pair: openai:gpt-5.5+anthropic:claude-haiku-4-5-20251001
  • Blocking findings: 0
  • Inline findings: 0
  • Model tokens: 31326 in / 1170 out (17202 from cache) ≈ $0.0706
  • Token source: GITHUB_TOKEN
  • Runner: 90f812eae3b0
  • Run: https://rasterhub.com/rasterstate/fj/actions/runs/447
<!-- forseti:review {"version":2,"repo":"rasterstate/fj","pr":245,"head_sha":"8deb8a9da44cd1746a00c7c0e53f3f496f84b125","provider_pair":"openai:gpt-5.5+anthropic:claude-haiku-4-5-20251001","policy_version":"stub-policy-v1","prompt_version":"prompt-v2","context_fingerprint":"fnv64:63964ff839bd99ed","review_job_key":"sha256:563fd9ef2e97dd610912e9a7d94f3732d0ff5ce10f71373a60fa02c58318f25e","base_sha":"ba27179161a593d32874ae0a0f79e2e3a57620f9","role":"summary","status":"current"} --> ## Forseti review No blocking findings from the lead reviewer. _No inline findings._ - PR: `rasterstate/fj#245` - Head SHA: `8deb8a9da44c` - Review job: `sha256:563fd9ef2e97dd610912e9a7d94f3732d0ff5ce10f71373a60fa02c58318f25e` - Provider pair: `openai:gpt-5.5+anthropic:claude-haiku-4-5-20251001` - Blocking findings: `0` - Inline findings: `0` - Model tokens: `31326 in / 1170 out` (`17202` from cache) ≈ `$0.0706` - Token source: `GITHUB_TOKEN` - Runner: `90f812eae3b0` - Run: https://rasterhub.com/rasterstate/fj/actions/runs/447
stephen force-pushed fix/241-null-pr-check-statuses from 8deb8a9da4
All checks were successful
Forseti review / forseti review (advisory) (pull_request_target) Successful in 20s
ci / check (pull_request) Successful in 10m43s
ci / live-e2e (pull_request) Successful in 2m7s
ci / coverage (pull_request) Successful in 2m53s
to e4d01f7871
All checks were successful
Forseti review / forseti review (advisory) (pull_request_target) Successful in 17s
ci / check (pull_request) Successful in 11m1s
ci / live-e2e (pull_request) Successful in 1m56s
ci / coverage (pull_request) Successful in 2m58s
2026-08-09 20:00:45 +00:00
Compare

Superseded by Forseti review for 3e8150a09272.

Forseti review

No blocking findings from the lead reviewer.

No inline findings.

  • PR: rasterstate/fj#245
  • Head SHA: e4d01f78717f
  • Review job: sha256:3bc3154210e2f93690b8d9b9c67995e691633b9a60eed1f480816c8ef9399313
  • Provider pair: openai:gpt-5.5+anthropic:claude-haiku-4-5-20251001
  • Blocking findings: 0
  • Inline findings: 0
  • Model tokens: 28281 in / 664 out (24779 from cache) ≈ $0.0319
  • Token source: GITHUB_TOKEN
  • Runner: 9a4a89cd15d9
  • Run: https://rasterhub.com/rasterstate/fj/actions/runs/451
<!-- forseti:review {"version":2,"repo":"rasterstate/fj","pr":245,"head_sha":"e4d01f78717f86fea49a25fb2dc692c11836c52e","provider_pair":"openai:gpt-5.5+anthropic:claude-haiku-4-5-20251001","policy_version":"stub-policy-v1","prompt_version":"prompt-v2","context_fingerprint":"fnv64:cbf29ce484222325","review_job_key":"sha256:3bc3154210e2f93690b8d9b9c67995e691633b9a60eed1f480816c8ef9399313","base_sha":"ba27179161a593d32874ae0a0f79e2e3a57620f9","role":"summary","status":"superseded"} --> > Superseded by Forseti review for `3e8150a09272`. ## Forseti review No blocking findings from the lead reviewer. _No inline findings._ - PR: `rasterstate/fj#245` - Head SHA: `e4d01f78717f` - Review job: `sha256:3bc3154210e2f93690b8d9b9c67995e691633b9a60eed1f480816c8ef9399313` - Provider pair: `openai:gpt-5.5+anthropic:claude-haiku-4-5-20251001` - Blocking findings: `0` - Inline findings: `0` - Model tokens: `28281 in / 664 out` (`24779` from cache) ≈ `$0.0319` - Token source: `GITHUB_TOKEN` - Runner: `9a4a89cd15d9` - Run: https://rasterhub.com/rasterstate/fj/actions/runs/451
forgejo-actions approved these changes 2026-08-09 20:01:02 +00:00
Dismissed
forgejo-actions left a comment

Forseti review

No blocking findings from the lead reviewer.

No inline findings.

  • PR: rasterstate/fj#245
  • Head SHA: e4d01f78717f
  • Review job: sha256:3bc3154210e2f93690b8d9b9c67995e691633b9a60eed1f480816c8ef9399313
  • Provider pair: openai:gpt-5.5+anthropic:claude-haiku-4-5-20251001
  • Blocking findings: 0
  • Inline findings: 0
  • Model tokens: 28281 in / 664 out (24779 from cache) ≈ $0.0319
  • Token source: GITHUB_TOKEN
  • Runner: 9a4a89cd15d9
  • Run: https://rasterhub.com/rasterstate/fj/actions/runs/451
<!-- forseti:review {"version":2,"repo":"rasterstate/fj","pr":245,"head_sha":"e4d01f78717f86fea49a25fb2dc692c11836c52e","provider_pair":"openai:gpt-5.5+anthropic:claude-haiku-4-5-20251001","policy_version":"stub-policy-v1","prompt_version":"prompt-v2","context_fingerprint":"fnv64:cbf29ce484222325","review_job_key":"sha256:3bc3154210e2f93690b8d9b9c67995e691633b9a60eed1f480816c8ef9399313","base_sha":"ba27179161a593d32874ae0a0f79e2e3a57620f9","role":"summary","status":"current"} --> ## Forseti review No blocking findings from the lead reviewer. _No inline findings._ - PR: `rasterstate/fj#245` - Head SHA: `e4d01f78717f` - Review job: `sha256:3bc3154210e2f93690b8d9b9c67995e691633b9a60eed1f480816c8ef9399313` - Provider pair: `openai:gpt-5.5+anthropic:claude-haiku-4-5-20251001` - Blocking findings: `0` - Inline findings: `0` - Model tokens: `28281 in / 664 out` (`24779` from cache) ≈ `$0.0319` - Token source: `GITHUB_TOKEN` - Runner: `9a4a89cd15d9` - Run: https://rasterhub.com/rasterstate/fj/actions/runs/451
stephen force-pushed fix/241-null-pr-check-statuses from e4d01f7871
All checks were successful
Forseti review / forseti review (advisory) (pull_request_target) Successful in 17s
ci / check (pull_request) Successful in 11m1s
ci / live-e2e (pull_request) Successful in 1m56s
ci / coverage (pull_request) Successful in 2m58s
to 3e8150a092
All checks were successful
Forseti review / forseti review (advisory) (pull_request_target) Successful in 18s
ci / check (pull_request) Successful in 10m22s
ci / live-e2e (pull_request) Successful in 1m59s
ci / coverage (pull_request) Successful in 2m3s
2026-08-09 20:59:26 +00:00
Compare

Forseti review

No blocking findings from the lead reviewer.

No inline findings.

  • PR: rasterstate/fj#245
  • Head SHA: 3e8150a09272
  • Review job: sha256:651ef7560ca88f172fe84978fd3b73160e4abcaf0d8e5f680f93545d751ca768
  • Provider pair: openai:gpt-5.5+anthropic:claude-haiku-4-5-20251001
  • Blocking findings: 0
  • Inline findings: 0
  • Model tokens: 28284 in / 737 out (21042 from cache) ≈ $0.0333
  • Token source: GITHUB_TOKEN
  • Runner: b1f46fd0c5eb
  • Run: https://rasterhub.com/rasterstate/fj/actions/runs/456
<!-- forseti:review {"version":2,"repo":"rasterstate/fj","pr":245,"head_sha":"3e8150a09272fd7cd2cb58b0c3ee4a11f524bdbb","provider_pair":"openai:gpt-5.5+anthropic:claude-haiku-4-5-20251001","policy_version":"stub-policy-v1","prompt_version":"prompt-v2","context_fingerprint":"fnv64:cbf29ce484222325","review_job_key":"sha256:651ef7560ca88f172fe84978fd3b73160e4abcaf0d8e5f680f93545d751ca768","base_sha":"630cb51ced52a62457ab4059f2bb19062c8de449","role":"summary","status":"current"} --> ## Forseti review No blocking findings from the lead reviewer. _No inline findings._ - PR: `rasterstate/fj#245` - Head SHA: `3e8150a09272` - Review job: `sha256:651ef7560ca88f172fe84978fd3b73160e4abcaf0d8e5f680f93545d751ca768` - Provider pair: `openai:gpt-5.5+anthropic:claude-haiku-4-5-20251001` - Blocking findings: `0` - Inline findings: `0` - Model tokens: `28284 in / 737 out` (`21042` from cache) ≈ `$0.0333` - Token source: `GITHUB_TOKEN` - Runner: `b1f46fd0c5eb` - Run: https://rasterhub.com/rasterstate/fj/actions/runs/456
forgejo-actions left a comment

Forseti review

No blocking findings from the lead reviewer.

No inline findings.

  • PR: rasterstate/fj#245
  • Head SHA: 3e8150a09272
  • Review job: sha256:651ef7560ca88f172fe84978fd3b73160e4abcaf0d8e5f680f93545d751ca768
  • Provider pair: openai:gpt-5.5+anthropic:claude-haiku-4-5-20251001
  • Blocking findings: 0
  • Inline findings: 0
  • Model tokens: 28284 in / 737 out (21042 from cache) ≈ $0.0333
  • Token source: GITHUB_TOKEN
  • Runner: b1f46fd0c5eb
  • Run: https://rasterhub.com/rasterstate/fj/actions/runs/456
<!-- forseti:review {"version":2,"repo":"rasterstate/fj","pr":245,"head_sha":"3e8150a09272fd7cd2cb58b0c3ee4a11f524bdbb","provider_pair":"openai:gpt-5.5+anthropic:claude-haiku-4-5-20251001","policy_version":"stub-policy-v1","prompt_version":"prompt-v2","context_fingerprint":"fnv64:cbf29ce484222325","review_job_key":"sha256:651ef7560ca88f172fe84978fd3b73160e4abcaf0d8e5f680f93545d751ca768","base_sha":"630cb51ced52a62457ab4059f2bb19062c8de449","role":"summary","status":"current"} --> ## Forseti review No blocking findings from the lead reviewer. _No inline findings._ - PR: `rasterstate/fj#245` - Head SHA: `3e8150a09272` - Review job: `sha256:651ef7560ca88f172fe84978fd3b73160e4abcaf0d8e5f680f93545d751ca768` - Provider pair: `openai:gpt-5.5+anthropic:claude-haiku-4-5-20251001` - Blocking findings: `0` - Inline findings: `0` - Model tokens: `28284 in / 737 out` (`21042` from cache) ≈ `$0.0333` - Token source: `GITHUB_TOKEN` - Runner: `b1f46fd0c5eb` - Run: https://rasterhub.com/rasterstate/fj/actions/runs/456
Author
Owner

Closing: this is already on main and there is nothing left to merge.

The fix shipped as #242, "Handle PR checks with no status contexts" (6 files), which is on main at ba271791. This PR's head is one commit ahead of main but changes zero files:

compare main...3e8150a0
  commits ahead: 1   (3e8150a0 "Handle empty PR check status lists")
  files:         0

That empty diff is why the web UI returns a 500 on merge rather than a useful error: Forgejo is being asked to create a merge with no content.

CI on it went green at 21:13, which is a little misleading and worth noting for anyone reading back: every check passed because there was nothing to break.

No work is lost. If any part of the null-versus-empty distinction is still unhandled, it needs a fresh commit against current main, not this branch.

Closing: this is already on `main` and there is nothing left to merge. The fix shipped as **#242, "Handle PR checks with no status contexts"** (6 files), which is on `main` at `ba271791`. This PR's head is one commit ahead of main but changes **zero files**: ``` compare main...3e8150a0 commits ahead: 1 (3e8150a0 "Handle empty PR check status lists") files: 0 ``` That empty diff is why the web UI returns a 500 on merge rather than a useful error: Forgejo is being asked to create a merge with no content. CI on it went green at 21:13, which is a little misleading and worth noting for anyone reading back: every check passed because there was nothing to break. No work is lost. If any part of the null-versus-empty distinction is still unhandled, it needs a fresh commit against current `main`, not this branch.
stephen closed this pull request 2026-08-09 21:14:20 +00:00
All checks were successful
Forseti review / forseti review (advisory) (pull_request_target) Successful in 18s
Required
Details
ci / check (pull_request) Successful in 10m22s
Required
Details
ci / live-e2e (pull_request) Successful in 1m59s
Required
Details
ci / coverage (pull_request) Successful in 2m3s
Required
Details

Pull request closed

Sign in to join this conversation.
No description provided.