Skip to content

chore(#6920): pin Codex CLI 0.152.1 in the sandbox image, add a codex runtime stub - #6923

Merged
waynesun09 merged 5 commits into
mainfrom
codex-runtime-image-pin
Sep 2, 2026
Merged

chore(#6920): pin Codex CLI 0.152.1 in the sandbox image, add a codex runtime stub#6923
waynesun09 merged 5 commits into
mainfrom
codex-runtime-image-pin

Conversation

@waynesun09

Copy link
Copy Markdown
Member

Summary

Pins the Codex CLI in the sandbox image the way Claude Code is pinned, and registers a codex runtime stub so the following PRs can build on it.

  • ARG CODEX_VERSION=0.152.1, installed with npm install -g --ignore-scripts (cache cleaned). The OpenShell base image already ships @openai/codex@0.117.0 under the same npm prefix (/usr, binary /usr/bin/codex), so the pinned install replaces it in place. /usr/local/bin/codex is re-pointed at the pinned install and the build asserts codex --version reports the pin — same shape as the Claude Code fix in sandbox: the OpenShell base image ships its own Claude Code (2.1.156) which shadows the CLAUDE_CODE_VERSION pin #6612, so a base-image change cannot bring a shadow binary back.
  • Renovate regex manager for the ARG plus automerge: false (codex minors change the exec --json wire shape and hook payloads; fixtures and the hook adapter must be re-verified per bump).
  • ENV CODEX_HOME=/sandbox/codex-config with the directory created for the sandbox user (codex refuses to start without it), and a root-owned managed layer at /etc/codex/config.toml turning off the update check, analytics and feedback — hygiene, not a boundary.
  • sandbox.SandboxCodexConfig, CodexRuntime stub registered in runtime.Resolve() only (not in config.ValidRuntimes() until PR E), image tests, a Codex (stub) column in the security matrix, docs rows.

Review rounds

Codex gpt-5.6-sol and Grok 4.6 reviewed the branch; every finding applied in the third commit (docs rows and layout tree, /etc/codex hygiene layer, matrix wording, test asserts, platform-package comment, org-mode test additions dropped per ADR 0044, --ignore-scripts + cache clean).

Verification

  • macOS arm64: podman build, pin assertion, probes (which -a codex, codex --version = codex-cli 0.152.1, symlink target, CODEX_HOME owned by sandbox, managed config present).
  • Fedora x86_64 (work host): same build and probes; go build/vet/test for sandbox/runtime/config green.

Part of a five-PR stack for #6920 (Codex as an agent runtime): A image pin → B stream parser → C OpenAI credential seeder → D runtime core (ADR 0099) → E enable + docs. Each PR is reviewable on its own diff; they merge bottom-up. Plan and verified Codex facts: research/fullsend-codex-runtime-plan.md in the ai-workspace-public research repo (to be linked once pushed).

Refs #6920

Assisted-by: Claude (implementation and review orchestration), Codex gpt-5.6-sol (review), Grok 4.6 (review)

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Pin Codex CLI 0.152.1 and register a guarded runtime stub

✨ Enhancement ⚙️ Configuration changes 🧪 Tests 📝 Documentation 🕐 20-40 Minutes

Grey Divider

AI Description

• Pins Codex CLI 0.152.1 and prevents base-image binaries from shadowing it.
• Adds a resolvable Codex runtime stub while blocking user configuration.
• Guards image defaults, Renovate tracking, runtime behavior, and security documentation.
Diagram

graph TD
  REN["Renovate"] --> BUILD["Sandbox Build"] --> IMAGE["Sandbox Image"] --> CLI["Pinned Codex"]
  REG["Runtime Registry"] --> STUB["Codex Stub"] --> HOME["Codex Config"]
  STUB --> CLI
  VALID["Config Validation"] -->|"blocks selection"| STUB
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Wait for the complete runtime
  • ➕ Avoids shipping an incomplete runtime type and binary.
  • ➕ Reduces temporary documentation and validation states.
  • ➖ Makes the eventual runtime PR substantially larger and harder to review.
  • ➖ Delays pinned fixture capture and follow-up parser, credential, and hook work.
2. Use the base-image Codex installation
  • ➕ Avoids another npm installation layer.
  • ➕ Reduces sandbox build configuration.
  • ➖ Couples runtime behavior to an independently changing base image.
  • ➖ Provides no reviewed version pin or protection against PATH shadowing.
  • ➖ Prevents reliable fixture and hook compatibility validation.

Recommendation: Keep the staged pin-and-stub approach. It establishes a reproducible Codex executable and stable runtime contract while explicitly preventing production selection; waiting would enlarge later reviews, while trusting the base image would sacrifice version control and shadow-binary protection.

Files changed (16) +440 / -40

Enhancement (3) +124 / -3
codex.goIntroduce the Codex runtime stub +106/-0

Introduce the Codex runtime stub

• Adds a Codex runtime implementing runtime, transcript, and debug-log interfaces. Metadata and environment behavior are defined, while execution, bootstrap, and extraction fail explicitly as not implemented.

internal/runtime/codex.go

registry.goRegister Codex for direct runtime resolution +8/-3

Register Codex for direct runtime resolution

• Allows 'Resolve("codex")' for development and testing while documenting that configuration validation must continue rejecting the stub.

internal/runtime/registry.go

sandbox.goDefine the sandbox Codex configuration path +10/-0

Define the sandbox Codex configuration path

• Adds the shared '/sandbox/codex-config' constant used by the image and runtime for CODEX_HOME.

internal/sandbox/sandbox.go

Tests (7) +183 / -16
config_test.goVerify Codex remains unavailable in user configuration +9/-2

Verify Codex remains unavailable in user configuration

• Extends runtime validation tests to confirm the resolvable Codex stub is excluded from valid repository runtimes.

internal/config/config_test.go

capabilities_test.goCover Codex runtime capabilities +3/-0

Cover Codex runtime capabilities

• Verifies the Codex-specific debug log name and confirms Codex does not require a CLAUDE.md bridge because it reads AGENTS.md natively.

internal/runtime/capabilities_test.go

codex_test.goTest Codex stub contracts +75/-0

Test Codex stub contracts

• Covers runtime metadata, CODEX_HOME export, explicit not-implemented failures, no-op parsing behavior, and debug log naming.

internal/runtime/codex_test.go

registry_test.goTest guarded Codex runtime registration +19/-10

Test guarded Codex runtime registration

• Verifies direct Codex resolution succeeds while repository-wide and per-agent configuration paths reject Codex as an unavailable stub.

internal/runtime/registry_test.go

sandbox_codex_image_test.goGuard Codex image defaults and pin precedence +71/-0

Guard Codex image defaults and pin precedence

• Adds source-level image tests for CODEX_HOME, managed hygiene settings, explicit semver pinning, npm installation, PATH symlinking, and build-time version assertion ordering.

internal/sandbox/sandbox_codex_image_test.go

sandbox_pi_image_test.goExtend Renovate pin coverage to Codex +5/-4

Extend Renovate pin coverage to Codex

• Generalizes the sandbox runtime-pin test so CODEX_VERSION must have a matching Renovate custom manager alongside Pi pins.

internal/sandbox/sandbox_pi_image_test.go

sandbox_test.goCover the Codex sandbox path constant +1/-0

Cover the Codex sandbox path constant

• Adds an assertion for the canonical Codex configuration directory.

internal/sandbox/sandbox_test.go

Documentation (4) +29 / -21
runtime-implementation.mdDocument Codex stub controls, pinning, and workspace layout +25/-19

Document Codex stub controls, pinning, and workspace layout

• Adds Codex stub columns to runtime security and artifact matrices. Documents the pinned binary invariant, CODEX_HOME defaults, future compatibility checks, and sandbox directory layout.

docs/contributing/runtime-implementation.md

sandbox-topology.mdList Codex in the sandbox image topology +1/-1

List Codex in the sandbox image topology

• Updates the sandbox image inventory to identify Codex as a pinned but currently stubbed runtime.

docs/contributing/sandbox-topology.md

runtimes.mdAdd Codex to the runtime catalog +1/-0

Add Codex to the runtime catalog

• Lists 'codex' as a nonfunctional stub linked to the tracking issue.

docs/runtimes.md

README.mdDocument Codex installation and verification +2/-1

Document Codex installation and verification

• Adds Codex to the sandbox package inventory and version-pin table, including replacement of the base-image package and build-time version verification.

images/README.md

Other (2) +104 / -0
ContainerfileInstall and verify pinned Codex CLI 0.152.1 +89/-0

Install and verify pinned Codex CLI 0.152.1

• Installs Codex with scripts disabled, cleans the npm cache, repoints '/usr/local/bin/codex', and asserts the resolved version. It also creates CODEX_HOME and a managed system configuration disabling update checks, analytics, and feedback.

images/sandbox/Containerfile

renovate.jsonTrack Codex CLI updates without automerge +15/-0

Track Codex CLI updates without automerge

• Adds a regex manager for CODEX_VERSION using the npm datasource. Disables automerge because Codex wire formats, fixtures, and hook payloads require manual compatibility review.

renovate.json

@fullsend-ai-review

fullsend-ai-review Bot commented Sep 2, 2026

Copy link
Copy Markdown

🤖 Review · ⚠️ Cancelled · Started 6:54 PM UTC · Ended 7:03 PM UTC

Commit: ac3c933 · View workflow run →

@qodo-code-review

qodo-code-review Bot commented Sep 2, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📜 Skill insights (1)

Grey Divider


Remediation recommended

1. Layout overstates Codex bootstrap ✓ Resolved 📘 Rule violation ⚙ Maintainability
Description
The workspace layout says codex-config is written by CodexRuntime.Bootstrap, but the new
implementation only returns a not-implemented error. This makes the documentation inconsistent with
the runtime behavior introduced by the PR.
Code

docs/contributing/runtime-implementation.md[R284-285]

+├── codex-config/                    ← CODEX_HOME (codex runtime; written by CodexRuntime.Bootstrap, #6920)
+│                                       Created by the sandbox image (codex will not start without it)
Relevance

●●● Strong

Recent docs-consistency findings were accepted, including correcting documentation that overstated
unimplemented behavior.

PR-#6398
PR-#6628

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 2748504 requires documentation to remain consistent with changed CLI or public runtime
behavior. The layout attributes directory writes to CodexRuntime.Bootstrap, while the
implementation immediately returns an error and performs no filesystem operation.

Rule 2748504: Update docs when changing CLI behavior or public API
docs/contributing/runtime-implementation.md[284-285]
internal/runtime/codex.go[60-62]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The workspace layout incorrectly describes `CodexRuntime.Bootstrap` as currently writing `codex-config` even though the method is still a stub.

## Issue Context
The sandbox image creates the directory, while `CodexRuntime.Bootstrap` currently returns `codex runtime is not yet implemented (#6920)` without writing anything. Document the current image behavior separately and identify runtime bootstrap creation as planned work.

## Fix Focus Areas
- docs/contributing/runtime-implementation.md[284-285]
- internal/runtime/codex.go[60-62]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Informational

2. Planned Codex lacks callout 📜 Skill insight ≡ Correctness
Description
The new codex entry documents a not-yet-functional runtime without the required > **Planned:**
blockquote format. Although it links to the tracking issue, the prescribed planned-feature callout
is missing.
Code

docs/runtimes.md[14]

+| `codex` | Not yet functional ([#6920](https://github.com/fullsend-ai/fullsend/issues/6920)) | Stub |
Relevance

● Weak

A closely matching planned-runtime callout request in docs/runtimes.md was rejected in PR #6035.

PR-#6035

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Rule 1062082 requires not-yet-implemented features to use a > **Planned:** blockquote with an
issue link. The added table row labels codex as Not yet functional but does not use that callout
format.

docs/runtimes.md[14-14]
Skill: writing-user-docs

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The not-yet-functional Codex runtime is documented without the required `> **Planned:**` blockquote callout.

## Issue Context
The entry already links to issue #6920, but compliance rule 1062082 requires both the issue link and the prescribed callout format for functionality that is not implemented yet.

## Fix Focus Areas
- docs/runtimes.md[14-14]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
✅ Compliance rules (platform): 65 rules
Review mode: ⚖️ Balanced: This spans runtime registration, sandbox image supply-chain pinning, configuration defaults, and test/CI-related behavior, creating meaningful cross-cutting risk but not enough independent implementation density to warrant extended review.

Grey Divider

Tip of the day
💡 Did you know, you can turn on the rule miner and Qodo learns your standards from review history

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment thread docs/contributing/runtime-implementation.md Outdated
@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown

Site preview

Preview: https://c0468b1b-site.fullsend-ai.workers.dev

Commit: ffcb86fc03619546c5d78088208fac2772b67613

@codecov

codecov Bot commented Sep 2, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@fullsend-ai-review

fullsend-ai-review Bot commented Sep 2, 2026

Copy link
Copy Markdown

🤖 Review · ⚠️ Cancelled · Started 7:05 PM UTC · Ended 7:08 PM UTC

Commit: f74c5e2 · View workflow run →

@fullsend-ai-review

fullsend-ai-review Bot commented Sep 2, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 7:10 PM UTC · Completed 7:29 PM UTC

Commit: e2d7f5d · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $7.24

@fullsend-ai-review

fullsend-ai-review Bot commented Sep 2, 2026

Copy link
Copy Markdown

Risk Assessment: moderate (2/5)

Details

Preserving prior score of 2 (moderate). Tier 1 signals are effectively unchanged from the prior assessment (same medium blast radius, 2 protected paths, similar test ratio 0.41 vs 0.44). This is still an additive stub runtime plus image pin as the first and simplest slice of the 5-PR stack. Tier 2 git history shows active churn and fix density in the runtime/sandbox area, but no instability signal specific to this change.

Previous run

Risk Assessment: moderate (2/5)

Details

Preserving prior score of 2 (moderate). Tier 1 signals are effectively unchanged from the prior assessment (same medium blast radius, 2 protected paths, similar test ratio 0.41 vs 0.44). This is still an additive stub runtime plus image pin as the first and simplest slice of the 5-PR stack.

Previous run (2)

Risk Assessment: moderate (2/5)

Details

Moderate risk: medium-sized additive PR (stub runtime + image pin) as the first slice of a planned 5-PR stack with good test coverage (0.44 ratio), but touching high-churn sandbox files with elevated fix/revert history and 2 protected paths.

@fullsend-ai-review

fullsend-ai-review Bot commented Sep 2, 2026

Copy link
Copy Markdown

Review

Findings

Medium

Low

  • [docs-currency] docs/guides/dev/cli-internals.md:538 — The 'Sandbox Constants' code block lists SandboxWorkspace, SandboxClaudeConfig, SandboxPiConfig, and SandboxPiExtensionsDir but does not include the new SandboxCodexConfig constant added in internal/sandbox/sandbox.go by this PR. Readers using this guide as a reference will not see the codex config path.
    Remediation: Add SandboxCodexConfig = "/sandbox/codex-config" to the code block, after SandboxClaudeConfig.

Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR
Previous run

Review

Findings

Medium

Low

  • [docs-currency] docs/guides/dev/cli-internals.md:538 — The 'Sandbox Constants' code block lists SandboxWorkspace, SandboxClaudeConfig, SandboxPiConfig, and SandboxPiExtensionsDir but does not include the new SandboxCodexConfig constant added in internal/sandbox/sandbox.go by this PR. Readers using this guide as a reference will not see the codex config path.
    Remediation: Add SandboxCodexConfig = "/sandbox/codex-config" to the code block, after SandboxPiConfig.

Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR
Previous run (2)

Review

Findings

Medium

Low

  • [consumer completeness] internal/config/config_test.go — The TestAgentSettings_Validate table-driven test has a case for runtime: opencode being rejected as invalid but does not add a parallel case for runtime: codex. The validation path is tested indirectly by TestResolveFromPerRepoConfig_RejectsStubRuntimes and TestResolveForAgent_RejectsStubRuntimes, but adding a table entry maintains test symmetry and would catch a regression if codex were accidentally added to ValidRuntimes().
    Remediation: Add a table entry for codex rejection in TestAgentSettings_Validate, parallel to the existing opencode entry.

  • [constant grouping] internal/sandbox/sandbox.goSandboxCodexConfig is appended after SandboxPiExtensionsDir, breaking the grouping of runtime config-dir constants. The three runtime config dirs (SandboxClaudeConfig, SandboxPiConfig, SandboxCodexConfig) are no longer contiguous because SandboxPiExtensionsDir sits between SandboxPiConfig and the new constant.
    Remediation: Move SandboxCodexConfig between SandboxClaudeConfig and SandboxPiConfig so the runtime config-dir constants are contiguous and alphabetical.

  • [docs-currency] docs/glossary.md:23 — The "Agent Runtime" glossary entry enumerates runtimes as "Claude Code is the default runtime; pi is available as an opt-in second runtime, and OpenCode is a stub" but does not mention codex, which this PR registers as a second stub runtime in Resolve().
    Remediation: Append codex as a stub runtime to the glossary entry, e.g. "...OpenCode and Codex are stubs."


Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR

fullsend-ai-review[bot]

This comment was marked as outdated.

@fullsend-ai-review

fullsend-ai-review Bot commented Sep 2, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 7:55 PM UTC · Completed 8:12 PM UTC

Commit: 8acd863 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $6.03

waynesun09 added a commit that referenced this pull request Sep 2, 2026
…ectable

PR #6923 added a TestAgentSettings_Validate row asserting an agents: entry
cannot select codex while it was a stub. This PR adds codex to
ValidRuntimes(); the positive coverage lives in
TestPerRepoConfigValidate_Runtime, TestResolveFromPerRepoConfig and
TestResolveForAgent_RejectsStubRuntimes, so the rejection row goes.

Refs #6920

Assisted-by: Claude (implementation)
Signed-off-by: Wayne Sun <gsun@redhat.com>
fullsend-ai-review[bot]

This comment was marked as outdated.

@ralphbean ralphbean self-assigned this Sep 2, 2026
waynesun09 added a commit that referenced this pull request Sep 2, 2026
…ectable

PR #6923 added a TestAgentSettings_Validate row asserting an agents: entry
cannot select codex while it was a stub. This PR adds codex to
ValidRuntimes(); the positive coverage lives in
TestPerRepoConfigValidate_Runtime, TestResolveFromPerRepoConfig and
TestResolveForAgent_RejectsStubRuntimes, so the rejection row goes.

Refs #6920

Assisted-by: Claude (implementation)
Signed-off-by: Wayne Sun <gsun@redhat.com>
… stub

The OpenShell base image already installs @openai/codex under the same
npm prefix the sandbox uses (/usr, binary /usr/bin/codex) — 0.117.0 on
the base we pin today — so the version that ran was whatever the base
happened to carry. Pin it with ARG CODEX_VERSION and a Renovate manager,
point /usr/local/bin/codex at the npm install, and fail the build unless
`codex --version` reports the pin.

The symlink is the shadow-proofing half. /usr/local/bin precedes npm's
global bin on the sandbox PATH, which is exactly how the base image's
own Claude Code silently outranked CLAUDE_CODE_VERSION until #6612. No
codex shadow exists there today; the symlink plus the build-time
assertion make sure one cannot appear unnoticed on a base image bump.

CODEX_HOME is created owned by the sandbox user and baked as an ENV
default: codex refuses to start when it does not exist, and an ad-hoc
`codex` from Bash should land in the same runner-owned directory the
runtime will use. Like pi's ENV block this is a hygiene default, not a
boundary — the sandbox egress policy and credential placeholders are.

CodexRuntime itself is a stub: registered in Resolve() for dev and
testing, deliberately absent from config.ValidRuntimes(), so no org or
per-repo config can select it until Bootstrap and Run exist. System()
is "openai" rather than the runtime name, because unlike pi and
opencode codex serves a single model vendor. The security-matrix
columns are stubbed as "N/A — stub" and filled in when the runtime is
implemented.

Refs #6920

Assisted-by: Claude (implementation)
Signed-off-by: Wayne Sun <gsun@redhat.com>
- Bake the managed System config layer (/etc/codex/config.toml, root-owned
  0644) with check_for_update_on_startup, [analytics] and [feedback]
  disabled. codex has no environment switches for the hygiene defaults pi
  gets from PI_OFFLINE and friends, and the System layer applies whatever
  CODEX_HOME points at, so an ad-hoc `codex` from Bash starts no update
  check either. The runner-written $CODEX_HOME/config.toml layers on top.
- Install with --ignore-scripts and clean the npm cache in the same layer.
  Neither the launcher nor its per-platform variant declares install
  scripts today, so this only keeps a future Renovate bump from
  introducing one unreviewed.
- Say in the Containerfile that the native binary is a *version* of the
  same package (@openai/codex@<ver>-linux-<arch>, aliased as the
  optionalDependency), not a separate package.
- Document the stub in the places that enumerate runtimes: the status
  table in docs/runtimes.md, the sandbox workspace layout tree, and the
  fullsend-sandbox row in sandbox-topology.md. The matrix's Bootstrap cell
  now says what codex must wire (hooks.json + adapter) rather than a bare
  "N/A — stub".
- Assert SandboxCodexConfig in TestConstants and that codex wants no
  CLAUDE.md bridge (it reads AGENTS.md natively).
- Keep the stub-rejection coverage on the per-repo path only: per-org
  installation mode is deprecated (ADR 0044), so the org-config cases
  added with the stub are dropped rather than extended.

Refs #6920

Assisted-by: Claude (implementation)
Signed-off-by: Wayne Sun <gsun@redhat.com>
The workspace layout credited CodexRuntime.Bootstrap with writing
codex-config/, which is only true once the runtime lands. At this point
in the stack the sandbox image creates the directory — codex refuses to
start without it — and nothing populates it yet.

Refs #6920

Assisted-by: Claude (implementation)
Signed-off-by: Wayne Sun <gsun@redhat.com>
- Cover the agents: entry path for codex in TestAgentSettings_Validate,
  parallel to the opencode row: codex is registered in Resolve() but not
  in ValidRuntimes(), so an entry naming it must be rejected. One table
  row, so the PR that makes codex selectable has a single obvious place
  to flip.
- Keep the runtime config directories contiguous: SandboxCodexConfig now
  sits between SandboxClaudeConfig and SandboxPiConfig instead of after
  the pi extensions dir.
- Name codex alongside OpenCode as a stub in the glossary's Agent
  Runtime entry.

Refs #6920

Assisted-by: Claude (implementation)
Signed-off-by: Wayne Sun <gsun@redhat.com>
@waynesun09
waynesun09 force-pushed the codex-runtime-image-pin branch from 8acd863 to ffcb86f Compare September 2, 2026 22:27
waynesun09 added a commit that referenced this pull request Sep 2, 2026
…ectable

PR #6923 added a TestAgentSettings_Validate row asserting an agents: entry
cannot select codex while it was a stub. This PR adds codex to
ValidRuntimes(); the positive coverage lives in
TestPerRepoConfigValidate_Runtime, TestResolveFromPerRepoConfig and
TestResolveForAgent_RejectsStubRuntimes, so the rejection row goes.

Refs #6920

Assisted-by: Claude (implementation)
Signed-off-by: Wayne Sun <gsun@redhat.com>
@fullsend-ai-review

fullsend-ai-review Bot commented Sep 2, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 10:29 PM UTC · Completed 10:48 PM UTC

Commit: ffcb86f · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $7.19

@fullsend-ai-review fullsend-ai-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

See the review comment for full details.

@waynesun09
waynesun09 added this pull request to the merge queue Sep 2, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Sep 2, 2026
@waynesun09
waynesun09 added this pull request to the merge queue Sep 2, 2026
Merged via the queue into main with commit 0adea5d Sep 2, 2026
36 of 37 checks passed
@waynesun09
waynesun09 deleted the codex-runtime-image-pin branch September 2, 2026 23:17
waynesun09 added a commit that referenced this pull request Sep 2, 2026
…ectable

PR #6923 added a TestAgentSettings_Validate row asserting an agents: entry
cannot select codex while it was a stub. This PR adds codex to
ValidRuntimes(); the positive coverage lives in
TestPerRepoConfigValidate_Runtime, TestResolveFromPerRepoConfig and
TestResolveForAgent_RejectsStubRuntimes, so the rejection row goes.

Refs #6920

Assisted-by: Claude (implementation)
Signed-off-by: Wayne Sun <gsun@redhat.com>
waynesun09 added a commit that referenced this pull request Sep 2, 2026
…ectable

PR #6923 added a TestAgentSettings_Validate row asserting an agents: entry
cannot select codex while it was a stub. This PR adds codex to
ValidRuntimes(); the positive coverage lives in
TestPerRepoConfigValidate_Runtime, TestResolveFromPerRepoConfig and
TestResolveForAgent_RejectsStubRuntimes, so the rejection row goes.

Refs #6920

Assisted-by: Claude (implementation)
Signed-off-by: Wayne Sun <gsun@redhat.com>
@fullsend-ai-retro

fullsend-ai-retro Bot commented Sep 2, 2026

Copy link
Copy Markdown

🤖 Finished Retro · ✅ Success · Started 11:19 PM UTC · Completed 11:32 PM UTC

Commit: ffcb86f · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $5.57

@fullsend-ai-retro

Copy link
Copy Markdown

PR #6923 pinned Codex CLI 0.152.1 in the sandbox image and added a stub codex runtime (part A of a 5-PR stack for #6920). The review agent ran 5 times (2 cancelled by superseding pushes, 3 successful) at $20.46 total. Review quality was strong: the agent caught a valid docs-currency gap (SandboxCodexConfig missing from docs/guides/dev/cli-internals.md), a constant-grouping issue, and a glossary omission — the latter two were fixed by the author across iterations. The challenger sub-agent correctly demoted a speculative errors.New vs fmt.Errorf inconsistency, avoiding a false positive.

The human reviewer (ralphbean) approved the final commit. The review agent's docs-currency finding — that the CLI internals guide's Sandbox Constants code block omits the new SandboxCodexConfig constant — shipped to main unaddressed. This is a concrete example of the review agent catching something the human missed.

The final review run ($7.19) rediscovered the same 2 findings from the prior run and submitted CHANGES_REQUESTED ~2 hours after human approval. This provides evidence for several existing issues:

Proposals filed

waynesun09 added a commit that referenced this pull request Sep 3, 2026
…ectable

PR #6923 added a TestAgentSettings_Validate row asserting an agents: entry
cannot select codex while it was a stub. This PR adds codex to
ValidRuntimes(); the positive coverage lives in
TestPerRepoConfigValidate_Runtime, TestResolveFromPerRepoConfig and
TestResolveForAgent_RejectsStubRuntimes, so the rejection row goes.

Refs #6920

Assisted-by: Claude (implementation)
Signed-off-by: Wayne Sun <gsun@redhat.com>
waynesun09 added a commit that referenced this pull request Sep 3, 2026
…ectable

PR #6923 added a TestAgentSettings_Validate row asserting an agents: entry
cannot select codex while it was a stub. This PR adds codex to
ValidRuntimes(); the positive coverage lives in
TestPerRepoConfigValidate_Runtime, TestResolveFromPerRepoConfig and
TestResolveForAgent_RejectsStubRuntimes, so the rejection row goes.

Refs #6920

Assisted-by: Claude (implementation)
Signed-off-by: Wayne Sun <gsun@redhat.com>
waynesun09 added a commit that referenced this pull request Sep 3, 2026
…ectable

PR #6923 added a TestAgentSettings_Validate row asserting an agents: entry
cannot select codex while it was a stub. This PR adds codex to
ValidRuntimes(); the positive coverage lives in
TestPerRepoConfigValidate_Runtime, TestResolveFromPerRepoConfig and
TestResolveForAgent_RejectsStubRuntimes, so the rejection row goes.

Refs #6920

Assisted-by: Claude (implementation)
Signed-off-by: Wayne Sun <gsun@redhat.com>
waynesun09 added a commit that referenced this pull request Sep 3, 2026
…ectable

PR #6923 added a TestAgentSettings_Validate row asserting an agents: entry
cannot select codex while it was a stub. This PR adds codex to
ValidRuntimes(); the positive coverage lives in
TestPerRepoConfigValidate_Runtime, TestResolveFromPerRepoConfig and
TestResolveForAgent_RejectsStubRuntimes, so the rejection row goes.

Refs #6920

Assisted-by: Claude (implementation)
Signed-off-by: Wayne Sun <gsun@redhat.com>
waynesun09 added a commit that referenced this pull request Sep 3, 2026
…ectable

PR #6923 added a TestAgentSettings_Validate row asserting an agents: entry
cannot select codex while it was a stub. This PR adds codex to
ValidRuntimes(); the positive coverage lives in
TestPerRepoConfigValidate_Runtime, TestResolveFromPerRepoConfig and
TestResolveForAgent_RejectsStubRuntimes, so the rejection row goes.

Refs #6920

Assisted-by: Claude (implementation)
Signed-off-by: Wayne Sun <gsun@redhat.com>
waynesun09 added a commit that referenced this pull request Sep 3, 2026
…ectable

PR #6923 added a TestAgentSettings_Validate row asserting an agents: entry
cannot select codex while it was a stub. This PR adds codex to
ValidRuntimes(); the positive coverage lives in
TestPerRepoConfigValidate_Runtime, TestResolveFromPerRepoConfig and
TestResolveForAgent_RejectsStubRuntimes, so the rejection row goes.

Refs #6920

Assisted-by: Claude (implementation)
Signed-off-by: Wayne Sun <gsun@redhat.com>
RaphaelBut pushed a commit to RaphaelBut/fullsend that referenced this pull request Sep 4, 2026
PR fullsend-ai#6923 added SandboxCodexConfig to internal/sandbox/sandbox.go but
did not update the Sandbox Constants code block in the CLI internals
guide. Add the missing constant between SandboxClaudeConfig and
SandboxPiConfig to match the source ordering.

Closes fullsend-ai#6941
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk/moderate PR risk: moderate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants