Raxx · internal docs

internal · gated

RCA — stale-branch-guard hardcoded to develop, false-failing every main-based hotfix PR

Incident ID: 2026-07-25-ci-pr-stale-branch-guard-hardcoded-base Date: 2026-07-25 Severity: SEV-4 (CI/CD pipeline failure blocking a deploy path; no user-facing impact by itself, but blocked a P0 prod hotfix's ci-pr gate) Blast radius: Any PR whose base branch is main or release (e.g. every ADR-0115 emergency-hotfix PR). Confirmed impact: PR #4346 (console Billing Summary prod hotfix). Author: sre-agent

Summary

The stale-branch-guard step in .woodpecker/ci-pr.yaml hardcoded GITHUB_BASE_REF: develop instead of deriving the PR's actual base branch, so it always compared the branch's freshness against origin/develop regardless of what the PR was actually targeting. Any PR based on main (the documented ADR-0115 emergency-hotfix path) is structurally guaranteed to fail this gate, because develop is always far ahead of main by design (that's the entire point of the develop→release→main promotion model). This was discovered while diagnosing why ci/woodpecker/pr/ci-pr was red on hotfix PR #4346, whose diff was a 3-line middleware exemption plus a test and had nothing to do with branch staleness.

Timeline (all times UTC)

Impact

What went well

What didn't go well

Root cause analysis

Detection

Resolution

Action items

# Action Owner Due Issue
1 Merge fix/ci-pr-stale-branch-guard-base-ref to develop, promote through release→main on next normal cadence sre-agent / operator 2026-08-01 (filed)
2 CI lint: assert every .woodpecker/*.yaml job that needs "the PR's real base branch" derives it from CI_COMMIT_TARGET_BRANCH (or equivalent), not a hardcoded literal — flag any GITHUB_BASE_REF: (or similar) set to a bare branch-name string in an environment: block sre-agent 2026-08-08 (filed)
3 Audit main-protection repository ruleset for orphaned required-status-check contexts left over from the GHA→Woodpecker CI migration (separate, larger finding — see companion escalation) operator 2026-08-01 (filed)

References