Skip to content

Codex engine: move CODEX_HOME off /tmp to restore MCP helper resolution fleet-wide - #54687

Open
pelikhan with Copilot wants to merge 7 commits into
mainfrom
copilot/fix-codex-binary-path
Open

Codex engine: move CODEX_HOME off /tmp to restore MCP helper resolution fleet-wide#54687
pelikhan with Copilot wants to merge 7 commits into
mainfrom
copilot/fix-codex-binary-path

Conversation

Copilot AI commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Codex runs were failing at turn 0 across multiple workflows because helper alias creation was blocked when CODEX_HOME was under /tmp, producing a fleet-wide outage pattern instead of a single-workflow misconfiguration. This change applies the fix at engine config level so all Codex workflows inherit the same valid runtime path behavior.

  • Root-cause correction (engine-level)

    • Introduced a workspace-backed Codex home expression: \${{ github.workspace }}/.gh-aw/codex-home.
    • Rewired Codex execution env and MCP setup env to use this value instead of /tmp/gh-aw/mcp-config.
  • Codex runtime/log path compatibility

    • Kept existing /tmp/gh-aw/mcp-config/logs diagnostics path by linking it to $CODEX_HOME/logs, so existing log consumers continue to work.
  • Threat-detection Codex path alignment

    • Updated external detector Codex config staging to write config.toml into the same workspace-backed CODEX_HOME, keeping detector and agent paths consistent.
  • Constant semantics clarity

    • Documented that CodexHomeDirExpr is an Actions-expression path (not a shell-resolved literal) to prevent misuse in non-YAML contexts.
// constants/constants.go
const CodexHomeDirExpr = "${{ github.workspace }}/.gh-aw/codex-home"

// codex execution env
"CODEX_HOME": constants.CodexHomeDirExpr

run: https://github.com/github/gh-aw/actions/runs/32547644097> Generated by 👨‍🍳 PR Sous Chef · gpt54 · 19.9 AIC · ⌖ 9.76 AIC · ⊞ 9.5K ·

Comment /souschef to run again

Copilot AI and others added 2 commits August 22, 2026 01:56
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix codex MCP-helper binary path fleet-wide Codex engine: move CODEX_HOME off /tmp to restore MCP helper resolution fleet-wide Aug 22, 2026
Copilot AI requested a review from pelikhan August 22, 2026 02:01
@pelikhan
pelikhan marked this pull request as ready for review August 22, 2026 02:34
Copilot AI balanced review requested due to automatic review settings August 22, 2026 02:34

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Moves Codex runtime state to a workspace-backed home so MCP helpers resolve consistently across workflows.

Changes:

  • Adds and propagates a shared workspace-backed CODEX_HOME.
  • Preserves legacy diagnostics paths via symlinks.
  • Aligns external threat-detection configuration and tests.
Show a summary per file
File Description
pkg/constants/constants.go Defines the Codex home expression.
pkg/workflow/codex_engine.go Uses the new home and links diagnostics.
pkg/workflow/codex_engine_test.go Verifies Codex home and log linking.
pkg/workflow/mcp_environment.go Exposes the new home during MCP setup.
pkg/workflow/mcp_environment_test.go Updates MCP environment expectations.
pkg/workflow/threat_detection_external.go Stages external detector config under the new home.
pkg/workflow/threat_detection_isolation_test.go Verifies detector config placement.

Review details

💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.

Suppressed comments (2)

pkg/workflow/codex_engine.go:388

  • This second non-firewall command has the same directory-replacement problem: ln -sfn nests the link when /tmp/gh-aw/mcp-config/logs already exists as a directory, leaving diagnostics consumers on the stale directory. Remove that entry before creating the compatibility symlink.
ln -sfn "$CODEX_HOME/logs" %s/logs

pkg/workflow/codex_engine.go:404

  • The firewall path also uses ln -sfn, which nests the symlink instead of replacing a pre-existing real logs directory. On a persistent runner this leaves GetInternalLogsDir() pointed at stale/empty data. Explicitly remove the fixed legacy path before linking it to the new CODEX_HOME logs.
	base := fmt.Sprintf("mkdir -p \"$CODEX_HOME/logs\" %s && ln -sfn \"$CODEX_HOME/logs\" %s/logs && touch %s", constants.TmpMcpConfigDir, constants.TmpMcpConfigDir, AgentStepSummaryPath)
  • Files reviewed: 7/7 changed files
  • Comments generated: 2
  • Review effort level: Balanced

fmt.Sprintf(" if: %s\n", detectionStepCondition),
" run: |\n",
fmt.Sprintf(" mkdir -p %q %q %q\n", constants.ShellMcpConfigDir, constants.TmpMcpConfigDir, constants.TmpMcpConfigLogsDir),
fmt.Sprintf(" mkdir -p %q %q %q\n", constants.ShellMcpConfigDir, constants.CodexHomeDirExpr, constants.TmpMcpConfigLogsDir),
Comment thread pkg/workflow/codex_engine.go Outdated
Comment on lines +379 to +380
ln -sfn "$CODEX_HOME/logs" %s/logs
%s%s 2>&1 | tee %s`, AgentCLIStartMsPath, AgentStepSummaryPath, logFile, codexTmpConfigDir, codexTmpConfigDir, schemaWritePrefix, codexCommand, logFile)
@github-actions

github-actions Bot commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

PR Code Quality Reviewer completed the code quality review.

🔎 Code quality review by PR Code Quality Reviewer

@github-actions

github-actions Bot commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Design Decision Gate 🏗️ completed the design decision gate check.

No ADR enforcement needed: PR #54687 does not have the 'implementation' label and has only 26 new lines of code in business logic directories (threshold: 100).

🏗️ ADR gate enforced by Design Decision Gate 🏗️

@github-actions

github-actions Bot commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

🧠 Matt Pocock Skills Reviewer has completed the skills-based review. ✅

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer

@github-actions

github-actions Bot commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Test Quality Sentinel completed test quality analysis.

Test Quality Sentinel skipped because pre-fetch PR data was unavailable: unable to fetch test file diff

🧪 Test quality analysis by Test Quality Sentinel

@github-actions

github-actions Bot commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Ponytail Reviewer completed successfully!

Generated by Ponytail Reviewer for #54687

@github-actions

Copy link
Copy Markdown
Contributor

Comment Memory

reviewed_at: 2026-08-22T00:00:00Z
review_event: REQUEST_CHANGES
top_themes:
  - incomplete legacy log path compatibility in external detector flow
  - symlink migration is nondeterministic when legacy logs path already exists as a directory
files_reviewed:
  - pkg/constants/constants.go
  - pkg/workflow/codex_engine.go
  - pkg/workflow/codex_engine_test.go
  - pkg/workflow/mcp_environment.go
  - pkg/workflow/mcp_environment_test.go
  - pkg/workflow/threat_detection_external.go
  - pkg/workflow/threat_detection_isolation_test.go
comment_count: 2

Note

This comment is managed by comment memory.

It stores persistent context for this thread in the code block at the top of this comment.
Edit only the text inside the backtick fences; workflow metadata and the footer are regenerated automatically.

Learn more about comment memory

🔎 Code quality review by PR Code Quality Reviewer · gpt54 · 8.63 AIC · ⌖ 6.96 AIC · ⊞ 7K ·
Comment /review to run again

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Request changes

This moves CODEX_HOME to a sane writable location, but the compatibility story is still incomplete: the external detector path does not install the same legacy-log shim, and the ln -sfn approach is stateful enough to fail on runners where /tmp/gh-aw/mcp-config/logs already exists as a real directory.

Blocking themes
  • The external threat-detect flow now diverges from the main Codex runtime and can still strand diagnostics at the old path.
  • The legacy log-path migration is nondeterministic because ln -sfn does not replace an existing directory.

Those are both correctness issues in the recovery path for a fleet-wide outage fix, so I don't think this is safe to merge yet.

🔎 Code quality review by PR Code Quality Reviewer · gpt54 · 8.63 AIC · ⌖ 6.96 AIC · ⊞ 7K
Comment /review to run again

fmt.Sprintf(" if: %s\n", detectionStepCondition),
" run: |\n",
fmt.Sprintf(" mkdir -p %q %q %q\n", constants.ShellMcpConfigDir, constants.TmpMcpConfigDir, constants.TmpMcpConfigLogsDir),
fmt.Sprintf(" mkdir -p %q %q %q\n", constants.ShellMcpConfigDir, constants.CodexHomeDirExpr, constants.TmpMcpConfigLogsDir),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This only changes CODEX_HOME in the env block, but the external detector path never runs buildCodexExecutionCommand/codexPathSetup, so it still materializes /tmp/gh-aw/mcp-config/logs as a plain directory and never creates the compatibility symlink there. Any detector-side code that still reads the legacy logs path will now silently miss Codex logs, which breaks diagnostics exactly on the path this PR is trying to stabilize.

💡 Why this is still broken

The detector setup here does:

mkdir -p "/tmp/gh-aw/mcp-config/logs"

but it never does the new:

ln -sfn "$CODEX_HOME/logs" /tmp/gh-aw/mcp-config/logs

Because the external detector reuses only the rendered env: block from the engine step, it does not inherit the runtime compatibility shim added in codex_engine.go. That leaves two different Codex log layouts depending on which execution path the workflow takes.

Please mirror the same symlink setup in the detector preparation path, or stop creating the legacy directory there and route all consumers to the workspace-backed location explicitly.

mkdir -p "$CODEX_HOME/logs"
%s%s 2>&1 | tee %s`, AgentCLIStartMsPath, AgentStepSummaryPath, logFile, schemaWritePrefix, codexCommand, logFile)
mkdir -p "$CODEX_HOME/logs" %s
ln -sfn "$CODEX_HOME/logs" %s/logs

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ln -sfn is not enough here because it does not replace an existing real directory, so if /tmp/gh-aw/mcp-config/logs already exists from an earlier attempt you end up with /tmp/gh-aw/mcp-config/logs/logs -> ... instead of repointing the legacy path. That leaves later readers on the stale directory and makes the fix nondeterministic across reused runners.

💡 Why this can still fail after the first bad run

The compatibility path was historically a directory, and /tmp/gh-aw is not guaranteed to be pristine on every invocation. With a pre-existing directory:

ln -sfn "$CODEX_HOME/logs" /tmp/gh-aw/mcp-config/logs

creates a nested symlink inside that directory rather than replacing it. Consumers opening /tmp/gh-aw/mcp-config/logs/... still hit the old directory tree, so log mirroring silently stops working depending on runner state.

Please remove or rename the destination when it is a directory before creating the symlink, or copy logs into the legacy path instead of relying on ln -sfn semantics.

@github-actions github-actions Bot mentioned this pull request Aug 22, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Test Quality Assessment 🧪

Summary

This PR is a refactoring/maintenance PR that updates existing test assertions to track constant value changes in production code. No new behavioral test functions were added.

Test Changes

  • Files modified: 5 test files
  • New tests added: 0
  • Tests removed: 1 (TestValidateRcPath in shell_completion_test.go)
  • Tests updated: 4 assertions updated to reflect new CodexHomeDirExpr constant

Modified Tests

File Test Change
pkg/cli/interfaces_test.go TestInstallShellCompletion_TypeAssertion Error message assertion updated ("should" → "must")
pkg/workflow/codex_engine_test.go TestCodexEngineExecutionUsesWritableCodexHome Updated to verify CodexHomeDirExpr constant + added new assertion for log mirroring
pkg/workflow/mcp_environment_test.go TestCollectMCPEnvironmentVariables_CodexEngineIncludesCODEXHOME Updated to verify CodexHomeDirExpr vs hardcoded /tmp path
pkg/workflow/threat_detection_isolation_test.go (integration test) Updated threat detection path assertion to use CodexHomeDirExpr

Quality Score

Score: N/A — Infrastructure/Maintenance Only

This PR contains only test maintenance (assertion updates tracking constant refactoring) rather than new behavioral test coverage.

Recommendation

Approve — Test changes are appropriate maintenance for the production code refactoring. All modified tests continue to verify the same behavioral contracts. No guideline violations detected.

🧪 Test quality analysis by Test Quality Sentinel · haiku45 · 19.9 AIC · ⌖ 6.44 AIC · ⊞ 8.3K ·
Comment /review to run again

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Test Quality Sentinel: Infrastructure/Maintenance Only

Test changes are appropriate maintenance for the production code refactoring. All modified tests continue to verify the same behavioral contracts. No new behavioral tests added, and no guideline violations detected.

@pelikhan

Copy link
Copy Markdown
Collaborator

/smoke-codex

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Skills-Based Review 🧠

Applied /diagnosing-bugs, /tdd, and /codebase-design — requesting changes on one correctness bug and two maintainability gaps.

📋 Key Themes & Highlights

Key Issues

  • 🐛 Correctness (high): constants.CodexHomeDirExpr is an Actions expression string (${{ github.workspace }}/...). It is passed to mkdir -p %q inside the external-detector shell run: block. The Actions runtime resolves ${{ ... }} expressions in env: and run: YAML values, but not when the string appears as a literal argument inside a shell heredoc or fmt.Sprintf format — the directory created will be literally named ${{ github.workspace }}/.gh-aw/codex-home, which will fail or create a stray directory. A shell-expanded constant (e.g. $GITHUB_WORKSPACE/.gh-aw/codex-home) is needed for shell contexts.
  • 🧪 Test gap: codexPathSetup gained the same ln -sfn behavior as buildCodexExecutionCommand, but no test covers the symlink on the non-harness path.
  • 🔁 Duplication: The mkdir + ln -sfn block is copy-pasted across both fmt.Sprintf branches; a small helper would unify it.

Positive Highlights

  • ✅ Root cause correctly identified: /tmp restriction blocks MCP helper alias creation; github.workspace is the right fix for the agent step.
  • ✅ Backward-compatibility preserved via the ln -sfn log mirror.
  • ✅ Tests updated to reference the constant rather than hardcoding the path.
  • CodexHomeDirExpr comment clearly documents the Actions-expression nature of the value.

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer · sonnet46 · 35.3 AIC · ⌖ 10.1 AIC · ⊞ 7.6K
Comment /matt to run again

@@ -398,7 +401,7 @@ func (e *CodexEngine) codexAllowedDomains(workflowData *WorkflowData) string {
}

func (e *CodexEngine) codexPathSetup(workflowData *WorkflowData, detectionSchemaWriteCmd string) string {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[/tdd] codexPathSetup now has the same ln -sfn behavior as buildCodexExecutionCommand, but there is no test asserting it. The test added in codex_engine_test.go only covers buildCodexExecutionCommand; the harness-less code path through codexPathSetup is untested for the symlink.

💡 Suggested test

Add a case to the existing codexPathSetup test (or add a new one) that asserts:

assert.Contains(t, result, `ln -sfn "$CODEX_HOME/logs" /tmp/gh-aw/mcp-config/logs`)

Without this, a future edit to codexPathSetup could silently drop the symlink and break MCP log consumers on the non-harness path.

@copilot please address this.

codexTmpConfigDir := constants.TmpMcpConfigDir
if harnessScriptName != "" {
return fmt.Sprintf(`set -o pipefail
printf '%%s' "$(date +%%s%%3N)" > %s

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[/codebase-design] The mkdir -p ... && ln -sfn ... block is now duplicated verbatim across both the harness and non-harness fmt.Sprintf branches in buildCodexExecutionCommand.

💡 Suggestion

Extract a small helper that returns the setup snippet:

func codexLogSetupSnippet(tmpConfigDir string) string {
    return fmt.Sprintf("mkdir -p \"$CODEX_HOME/logs\" %s\nln -sfn \"$CODEX_HOME/logs\" %s/logs", tmpConfigDir, tmpConfigDir)
}

This collapses the duplication and makes the invariant (CODEX_HOME/logs/tmp symlink) visible in one place — easier to maintain and harder to partially update.

@copilot please address this.

fmt.Sprintf(" if: %s\n", detectionStepCondition),
" run: |\n",
fmt.Sprintf(" mkdir -p %q %q %q\n", constants.ShellMcpConfigDir, constants.TmpMcpConfigDir, constants.TmpMcpConfigLogsDir),
fmt.Sprintf(" mkdir -p %q %q %q\n", constants.ShellMcpConfigDir, constants.CodexHomeDirExpr, constants.TmpMcpConfigLogsDir),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[/diagnosing-bugs] constants.CodexHomeDirExpr is a GitHub Actions expression string (${{ github.workspace }}/...), not a resolved shell path. Passing it to mkdir -p %q will literally try to create a directory named ${{ github.workspace }}/.gh-aw/codex-home, which will fail at runtime.

💡 Fix

The external detector step is a raw shell run: block. Either:

  1. Use constants.ShellMcpConfigDir-style shell-expanded form (e.g. $GITHUB_WORKSPACE/.gh-aw/codex-home) and introduce a CodexHomeDirShell constant, or
  2. Add a CODEX_HOME env var to this step (like the agent step does) and then reference "$CODEX_HOME" in the shell command.

Using an unresolved Actions expression inside %q in a shell heredoc will produce a broken mkdir call.

@copilot please address this.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review: Codex engine — move CODEX_HOME off /tmp

The intent is correct: using ${{ github.workspace }} instead of /tmp means Codex can create MCP helper aliases in a repo-relative writable location that survives across steps and satisfies tooling that requires a persistent home directory.

No new blocking issues found beyond the two already flagged in open review threads:

  • ln -sfn idempotency (codex_engine.go:380): if /tmp/gh-aw/mcp-config/logs already exists as a real directory from a prior run on a non-ephemeral runner, ln -sfn silently nests the symlink inside it rather than replacing it. A rm -rf /tmp/gh-aw/mcp-config/logs before the ln would make this safe.
  • External detector logs gap (threat_detection_external.go:31): the detection step creates TmpMcpConfigLogsDir as a real directory but never runs the ln mirroring logic, so diagnostics that read from /tmp/gh-aw/mcp-config/logs will not see Codex log output for external detector runs.

Non-blocking observations:

  • %q-formatting CodexHomeDirExpr in mkdir -p is safe: GitHub Actions expands ${{ github.workspace }} at the YAML layer before the shell runs.
  • Test coverage is appropriately updated; the new assertions on the symlink line and on CodexHomeDirExpr are accurate.

Please address the two open review threads before merging.

🧵 Reviewed using Impeccable skills by Impeccable Skills Reviewer · sonnet46 · 25.4 AIC · ⌖ 9.08 AIC · ⊞ 6.2K

@github-actions

github-actions Bot commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

🌑 The shadows whisper... Smoke Codex failed. The oracle requires further meditation...

🔮 The oracle has spoken through Smoke Codex

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ponytail review — over-engineering only.

net: -6 lines possible.

Generated by ✂️ Ponytail Reviewer for #54687 · auto · 23.3 AIC · ⌖ 4.45 AIC · ⊞ 7.3K
Comment /ponytail to run again

if workflowData.IsDetectionRun {
schemaWritePrefix = detectionSchemaWriteCmd + " && "
}
codexTmpConfigDir := constants.TmpMcpConfigDir

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

L372: yagni: codexTmpConfigDir is a one-line alias for constants.TmpMcpConfigDir used only to shorten two Sprintf calls below. Use constants.TmpMcpConfigDir directly at both call sites, delete the variable.

Comment thread pkg/workflow/codex_engine.go Outdated

func (e *CodexEngine) codexPathSetup(workflowData *WorkflowData, detectionSchemaWriteCmd string) string {
base := "mkdir -p \"$CODEX_HOME/logs\" && touch " + AgentStepSummaryPath
base := fmt.Sprintf("mkdir -p \"$CODEX_HOME/logs\" %s && ln -sfn \"$CODEX_HOME/logs\" %s/logs && touch %s", constants.TmpMcpConfigDir, constants.TmpMcpConfigDir, AgentStepSummaryPath)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

L376-379, L385-388, L404: shrink: the mkdir -p "$CODEX_HOME/logs" X && ln -sfn "$CODEX_HOME/logs" X/logs pair is now duplicated three times (twice in buildCodexExecutionCommand, once in codexPathSetup). Extract one helper, e.g. codexLogsBridgeCmd(), and call it from all three sites.

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot CI is failing on this PR and it still needs forward progress.

Please:

Generated by 👨‍🍳 PR Sous Chef · gpt54 · 19.9 AIC · ⌖ 9.76 AIC · ⊞ 9.5K ·
Comment /souschef to run again

Copilot AI and others added 3 commits August 22, 2026 03:09
Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
…ary-path

Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>

Copilot AI commented Aug 22, 2026

Copy link
Copy Markdown
Contributor Author

@copilot CI is failing on this PR and it still needs forward progress.

Please:...

Addressed in commit 905c4a03ba.

  • Fixed Codex log compatibility by replacing legacy /tmp/gh-aw/mcp-config/logs before symlinking (rm -rf ... && ln -sfn ...) in both Codex execution paths and external detector setup.
  • Updated and validated Codex wasm golden output.
  • Refreshed branch with latest origin/main via merge.
  • Reproduced and verified locally with:
    • make test-wasm-golden
    • make build-wasm
    • make test-impacted-go BASE_REF=origin/main

I also invoked pr-finisher; full GH CLI triage in-agent is blocked here because GH_TOKEN is not available in this runtime.

@github-actions

Copy link
Copy Markdown
Contributor

PR Triage

  • Category: bug
  • Risk: medium
  • Priority score: 50/100 (impact 30, urgency 10, quality 10)
  • Recommended action: batch_review
  • CI status: no_checks

Generated by 🔧 PR Triage Agent · auto · 82.9 AIC · ⌖ 6.65 AIC · ⊞ 8.3K ·

@github-actions

Copy link
Copy Markdown
Contributor

PR Triage

Category: bug | Risk: medium | Priority: medium | Score: 50/100
Recommended action: batch_review

Codex CODEX_HOME fix, fleet-wide impact. Blocked mergeable + 2x CHANGES_REQUESTED.

Automated triage — run 32572524009

Generated by 🔧 PR Triage Agent · auto · 65.4 AIC · ⌖ 6.04 AIC · ⊞ 8.3K ·

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[deep-report] [P0] Fix codex MCP-helper binary path fleet-wide — escalated from single-workflow chronic issue to 10-workflow total outage

4 participants