diff --git a/.github/dependabot.yml b/.github/dependabot.yml index cd48946764..9722b0218d 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -11,10 +11,24 @@ updates: actions-major: patterns: - "*" + exclude-patterns: + - "openai/codex-action" ignore: - dependency-name: "supabase/setup-cli" update-types: - "version-update:semver-major" + - dependency-name: "openai/codex-action" + versions: + - "1.12.x" + # Deliberately pinned to v1.11 in ai-review.yml — v1.12 has two + # confirmed, still-open upstream regressions: a wrapper-level hang + # (openai/codex-action#151) and a runner-killing failure + # (openai/codex-action#160). A grouped Dependabot bump already + # silently reintroduced v1.12 once (PR #6484, 2026-09-07). Scoped to + # 1.12.x (not a blanket ignore) so Dependabot still proposes v1.13+ + # once a fix ships; evaluate any such proposal in its own deliberate + # PR, checking the upstream changelog/issue tracker first — never + # bundle it into the actions-major group. cooldown: default-days: 7 - package-ecosystem: "gomod" diff --git a/.github/workflows/ai-review.yml b/.github/workflows/ai-review.yml index 879b8fcf1f..b7dc5fa18c 100644 --- a/.github/workflows/ai-review.yml +++ b/.github/workflows/ai-review.yml @@ -327,12 +327,24 @@ jobs: # a non-sudo-capable user, in a sandbox with no filesystem writes and no # network, with no `codex-args`/`--sandbox` duplication. - name: Run Codex independent review - # Pinned to v1.11, NOT v1.12: v1.12 has a confirmed regression where a - # heavy Linux run never returns after Codex finishes the turn and writes - # its output file — the step sits idle until the job timeout, discarding - # a completed review (openai/codex-action#150). v1.11 handles the same - # heavy workload cleanly. There is no released fix above v1.12 yet. - uses: openai/codex-action@86365089eb2b84e0a8fb0717b304f8bdcb13b20e # v1.12 + # Pinned to v1.11 (52fe01ec…), NOT v1.12 (86365089…): v1.12 has two + # confirmed, still-open upstream regressions that hang or kill the job + # on exactly this workflow's config (safety-strategy: drop-sudo, + # sandbox: read-only, output-schema-file) — openai/codex-action#151 + # (the wrapper waits on the child process's `close` event with + # inherited stdio, so a lingering descendant keeps the step alive + # forever after Codex has already written its output) and + # openai/codex-action#160 (drop-sudo's v1.12 rewrite chmods + # root-owned /run service sockets, breaking systemd-resolved on the + # GitHub-hosted runner itself, which kills the job ~52-65 minutes in + # regardless of job timeout-minutes). Both are independent of the + # pinned Codex CLI version. This pin was silently regressed to v1.12 + # once already by a grouped Dependabot bump (#6484) — see the + # dependabot.yml ignore entry for openai/codex-action, which exists + # specifically to stop that from happening again. There is no + # released fix above v1.12 as of 2026-09-09; re-verify both issues + # are closed before ever re-bumping this pin. + uses: &codex-action-pin openai/codex-action@52fe01ec70a42f454c9d2ebd47598f9fd6893d56 # v1.11 with: openai-api-key: ${{ secrets.OPENAI_API_KEY }} prompt-file: .github/ai-review/codex-review-prompt.md @@ -494,12 +506,11 @@ jobs: # untrusted AGENTS.md/config; it reads the PR from `pr/` and executes # nothing from it. - name: Run Codex adjudication - # Pinned to v1.11, NOT v1.12: v1.12 has a confirmed regression where a - # heavy Linux run never returns after Codex finishes the turn and writes - # its output file — the step sits idle until the job timeout, discarding - # a completed review (openai/codex-action#150). v1.11 handles the same - # heavy workload cleanly. There is no released fix above v1.12 yet. - uses: openai/codex-action@86365089eb2b84e0a8fb0717b304f8bdcb13b20e # v1.12 + # Same v1.11 pin as codex-review's "Run Codex independent review" + # step above — see that step's comment for the full v1.11-vs-v1.12 + # rationale (openai/codex-action#151, #160). YAML-aliased so the SHA + # only needs to change in one place. + uses: *codex-action-pin with: openai-api-key: ${{ secrets.OPENAI_API_KEY }} prompt-file: trusted/.github/ai-review/adjudicate-prompt.md