chore(agent-tools): bump the codex pin 0.133.0 → 0.146.0 — Tier-2 compat re-verification first (13 stable releases of drift) [schedule: Daily agent update check] #249

Open
opened 2026-07-31 04:08:23 +02:00 by dominik.polakovics · 5 comments

Goal

Move the agent-tools codex pin from 0.133.0 to 0.146.0 (13 stable releases, ~2 months of drift), re-verifying the Tier-2 compat record first, exactly as containers/agent-tools/versions.env and docs/ops.md § "Agent-tools images" mandate:

BEFORE bumping a version here, re-verify the compat record against the new CLI version FIRST (the compat doc is the checklist), THEN move the version + sha256 together. A bump that skips the re-verification ships an unverified CLI under a pin that claims verification.

The re-verification is the work. The two-line versions.env edit is the trivial part. If re-verification finds drift the record cannot absorb, the correct outcome is to report the drift on this issue and land only the compat-record updates — not to force the bump through.

Evidence — current state

containers/agent-tools/versions.env:25-26:

CODEX_VERSION=0.133.0
CODEX_SHA256_X64_MUSL_TGZ=d06019ab9c35d281b78dc2ebb2ae55c2bb97ea11bf7f452bafe390eddb0034ef

internal/compat/codex/compat.md:3-5:

Pinned version: **codex-cli 0.133.0** — live probes on the lab host,
2026-07-10 (issue #87's Tier-2 spike sweep, all eleven live-spike questions,
recorded in the issue's Amendment 2 ...)

(The one exception already recorded there: the §1 model-catalog probe schema is additionally live-verified against 0.144.1, 2026-07-13, issue #156 / ADR-0043. Everything else is 0.133.0.)

Upstream stable releases published since (GitHub openai/codex, rust-v* non-prerelease tags):

rust-v0.146.0  2026-07-29     rust-v0.144.3  2026-07-13
rust-v0.145.0  2026-07-21     rust-v0.144.2  2026-07-13
rust-v0.144.6  2026-07-18     rust-v0.144.1  2026-07-09
rust-v0.144.5  2026-07-16     rust-v0.144.0  2026-07-09
rust-v0.144.4  2026-07-14     rust-v0.143.0  2026-07-08
                              rust-v0.142.x  2026-06-22 .. 2026-07-01
                              rust-v0.134.0 .. 0.141.0   2026-05-26 .. 2026-06-18

0.147.0-alpha.* exists but is a prerelease — 0.146.0 is the target, not an alpha.

New pin values (verified against the GitHub release's own per-asset digest for rust-v0.146.0, the exact URL containers/agent-tools/build.sh:75-78 fetches):

CODEX_VERSION=0.146.0
CODEX_SHA256_X64_MUSL_TGZ=5ba3b9405543953081f661d0854d266f76e2abbe51d41349355a36de7673776a

(asset codex-x86_64-unknown-linux-musl.tar.gz, 114169492 bytes, from https://github.com/openai/codex/releases/download/rust-v0.146.0/codex-x86_64-unknown-linux-musl.tar.gz — re-derive the digest yourself from the downloaded file; do not trust this issue as the sole source.)

Security advisories closed by this window — these DO reach us

The codex binary is a statically linked Rust artifact we ship into every container instance (agent-tools:codex-<ver>, ADR-0051), so its bundled dependencies are ours.

  • 0.143.0 (chore): "Updated OpenSSL, Hono, fast-uri, quick-xml, and crossbeam-epoch to address security advisories. (#29487, #29650, #30941, #31308)" — an explicit multi-advisory dependency sweep. Our pinned 0.133.0 predates all four.
  • 0.136.0 (bug fixes): "Command-safety hardening prevents /diff from running repository-provided Git helpers/hooks, avoids PowerShell parser execution on non-Windows hosts, and rejects browser-origin exec-server websocket handshakes. (#24954, #24946, #24947)" — the /diff one reaches us directly: /diff is a chat-safe row in our static catalog (internal/provider/codex/commands.go:40), so lab exposes it in the composer, and on 0.133.0 invoking it can execute repo-provided git helpers/hooks from the instance's worktree.
  • 0.141.0 (bug fixes): "Bundled SQLite is pinned to a version containing the WAL-reset corruption fix. (#27992)" — data-integrity, not a CVE, but it is codex's own session state DB.
  • 0.145.0 (bug fixes): "Strengthened safety and approval handling with better forced-rm detection, consistent full-access confirmation, and preserved rejection reasons across tools. (#32989, #33464, #34400)" — see the risk list below; "consistent full-access confirmation" is the one item that could break us rather than help us.

What actually changed that touches how this repo uses codex

Every item below maps to a numbered section of internal/compat/codex/compat.md. Each is a hypothesis to verify, not a confirmed break — none of this was observed on a live 0.146.0 binary during this investigation.

§1 Spawn argv{codex} --ask-for-approval never --sandbox danger-full-access -c project_doc_fallback_filenames=["AGENTS.local.md"] [--model M] -c model_reasoning_effort=E [prompt]

  • 0.145.0 #33464 "consistent full-access confirmation". Highest-risk item in this bump. If --sandbox danger-full-access now prompts for confirmation, every unattended spawn hangs at start. Verify first; if it reproduces, this bump is blocked and the issue should be reported rather than worked around.
  • 0.134.0: "Made --profile the primary profile selector across CLI, TUI permissions, and sandbox flows, with legacy profile configs rejected through migration guidance." We set no profile, but the sandbox/permission plumbing was reworked underneath our flags.
  • 0.144.0 added a writes app-approval mode — a new enum member alongside never; confirm never still parses and still means never.
  • 0.138.0: "model-defined effort levels now flow through in the order advertised by the model" — touches the §1 codex debug models catalog probe and the per-model effort seam (ADR-0043). Our probe already asserts ordering-independent invariants, but re-run it.

§4 Context-file discovery (AGENTS.local.md via project_doc_fallback_filenames)

  • 0.138.0 #26205/#26465: "Workspace instruction loading is more accurate for remote and symlinked workspaces, so the right AGENTS.md files are picked up consistently."
  • 0.142.0 #28958 et al.: remote environments "preserve executor-native paths, shells, AGENTS.md discovery..."
  • Why this reaches us specifically: every lab instance runs in a linked git worktree (.git is a file pointing at the reference repo's bare clone), which is exactly the symlinked/indirect workspace shape these fixes touch. Re-verify that AGENTS.local.md is still discovered from a worktree cwd.

§5 Transcript location + rollout JSONL grammar — lab reads the rollout JSONL as the chat transcript.

  • 0.142.0 #28746/#28494: "Configurable rollout token budgets ... abort turns when exhausted" — potentially new rollout event kinds and a new turn-termination reason alongside the turn_aborted / interrupted pair we pin.
  • 0.145.0: experimental "paginated thread history with efficient resume, search, persisted names, sub-agent support, and memories" (#33364, #33907, #34085, #34229, #34386) — the largest session-storage change in the window.
  • 0.146.0: thread forking with paginated history, pinned threads, side conversations (#35220, #35251, #35011).
  • 0.140.0 #26859/#27719: corrupted SQLite state DBs are now rebuilt from rollout data — the rollout is now load-bearing for recovery, so its shape matters more.
  • ParseRollout/ReadChat must degrade gracefully on unknown event kinds (Claude Code's parser already does; confirm codex's does too rather than erroring).

§6 Reply + interrupt recipes (bracketed paste → paced Enter; single Escape) — the most fragile coupling.

  • 0.140.0 #27499: "Typing @ now opens the unified mentions menu for files, plugins, and skills by default." A reply body containing @ (an email address, a @user handle, a Go module path) pasted into the composer could now open a mentions overlay that lab can neither see nor dismiss, stranding the session. Our validateReply rejects control characters but not @. Test explicitly with an @ in the reply text.
  • 0.135.0 #24371: "Older tmux/iTerm control-mode sessions no longer lose normal Ctrl-C handling from unsupported keyboard enhancement setup" — lab drives codex over tmux; §6's "Ctrl-C is forbidden EVERYWHERE" pin should be re-confirmed (it is still forbidden by lab's recipes either way, but the pinned rationale may have shifted).
  • 0.141.0 #28235: "TUI input prompts can auto-resolve after inactivity, with a countdown that pauses on interaction."
  • 0.146.0 #35000/#35021: "nonblocking interrupts, keyboard handling" — directly under the single-Escape interrupt recipe.

§7 Builtin slash-command catalog (internal/provider/codex/commands.go, a static table scraped verbatim from the live 0.133.0 TUI popup)

  • 0.146.0 #34605: "Name new sessions with /new or /clear." Both rows are ChatSafe: true in our table (commands.go:32-35), and /new carries provider.CommandRoleClear — i.e. it backs lab's New conversation action. If either now opens a naming input overlay, the clear path strands the TUI. Verify before leaving those rows chat-safe.
  • Commands added in the window and absent from our table: /archive + codex archive/unarchive (0.136.0), /usage (0.140.0), /delete + codex delete (0.140.0), /import (0.140.0, extended 0.145.0).
  • Removed in the window: /realtime (0.140.0 — not in our table anyway).
  • The table needs a fresh verbatim TUI scrape at 0.146.0, with the same row-by-row ChatSafe curation and per-row reasons.

§9 Attribution ground truth — 0.134.0 #23963 adds "subagent identity in hook inputs"; §8 records hooks as the LiveSignals follow-up substrate. Worth a note, not a gate.

Build/CI (containers/agent-tools/build.sh, .forgejo/workflows/agent-tools.yml)

  • 0.146.0 chore #34505/#34508/#34729/#34910: "Publish release artifacts, channel metadata, and installer aliases through OpenAI-hosted release infrastructure, with GitHub fallback." The GitHub release assets still exist for 0.146.0 (verified — the exact asset and digest are quoted above), so build.sh's URL keeps working and no build.sh change is needed now. Record it in docs/ops.md § Agent-tools images as a watch item: the github.com egress requirement listed there may eventually need to become releases.openai.com.
  • 0.143.0 #31056: "Reduced installer failures from GitHub API rate limits by reusing release metadata" — unrelated to our direct asset download.

Scope — files an implementing agent will touch

Path Change
containers/agent-tools/versions.env CODEX_VERSION + CODEX_SHA256_X64_MUSL_TGZ, moved atomically with the compat-record update
internal/compat/codex/compat.md Pin header → 0.146.0; per-section provenance re-dated to what was actually re-verified; every drift above recorded in its own section
internal/provider/codex/commands.go Only if the §7 TUI scrape shows drift (expected: new rows, /new + /clear re-curation)
internal/provider/codex/*.go + testdata/ Only if re-verification finds real drift. No port change is expected; if you find yourself rewriting the adapter, stop and report here instead
docs/ops.md The OpenAI-hosted-release watch item under § Agent-tools images

nix/module.nix needs no edit — container.toolsImages derives its default tag from versions.env at eval time (nix/module.nix:197-213).

Done means

  • The three automated live probes pass against a real 0.146.0 binary:
    LAB_COMPAT_LIVE=1 go test ./internal/compat/codex/ -run Live -v
    (TestCompat_Live_loginStatusParses, TestCompat_Live_locateTranscript, TestCompat_Live_debugModelsProbe).
  • The by-hand §6 hazard checks are re-driven in a scratch tmux TUI on 0.146.0, per that section's own "When this breaks" instructions: paste-without-submit, paste containing @, mid-turn queue-with-steer, single-Esc abort marker, idle double-Esc + q recovery. Ctrl-C stays forbidden and untested outside a disposable session.
  • §1 spawn posture confirmed live: --ask-for-approval never --sandbox danger-full-access still starts a turn with no confirmation prompt.
  • §4 confirmed live: AGENTS.local.md is still discovered from a linked-worktree cwd.
  • §7 re-scraped from the live 0.146.0 TUI popup; /new and /clear re-curated against the naming-prompt change.
  • go test ./... green (hermetic; fixtures updated only if the rollout grammar genuinely moved).
  • golangci-lint run clean.
  • Version + sha256 + compat-record land in one commit.
  • The agent-tools CI gate (path-gated on containers/**) builds the codex image and passes the injection smoke test on the PR — locally reproducible with
    containers/agent-tools/build.sh codex && containers/agent-tools/smoke-test.sh codex.
  • PR body says Closes #<this issue>.

Out of scope

  • The Claude Code pin. CLAUDE_CODE_VERSION=2.1.220 is the newest published release (npm @anthropic-ai/claude-code dist-tag latest = 2.1.220, published 2026-07-24; stable = 2.1.212). Nothing to bump. Its outstanding live re-verification is tracked on #235.
  • The gemini seam (versions.env:28-30) — still deferred to #126.
  • Any adapter feature work the new codex versions enable (paginated history, /usage, hooks-as-LiveSignals). Record what you observe in the compat doc; file follow-ups; do not build.
  • Host pin rollout beyond what merging to main already publishes.

Filed by the Daily agent update check schedule, 2026-07-31. Release notes quoted from the GitHub releases API for openai/codex (rust-v0.134.0rust-v0.146.0); the project's CHANGELOG.md is a stub pointing at that releases page.

## Goal Move the agent-tools **codex** pin from `0.133.0` to **`0.146.0`** (13 stable releases, ~2 months of drift), re-verifying the Tier-2 compat record first, exactly as `containers/agent-tools/versions.env` and `docs/ops.md § "Agent-tools images"` mandate: > BEFORE bumping a version here, re-verify the compat record against the new CLI version FIRST (the compat doc is the checklist), THEN move the version + sha256 together. A bump that skips the re-verification ships an unverified CLI under a pin that claims verification. **The re-verification is the work. The two-line `versions.env` edit is the trivial part.** If re-verification finds drift the record cannot absorb, the correct outcome is to report the drift on this issue and land only the compat-record updates — not to force the bump through. ## Evidence — current state `containers/agent-tools/versions.env:25-26`: ``` CODEX_VERSION=0.133.0 CODEX_SHA256_X64_MUSL_TGZ=d06019ab9c35d281b78dc2ebb2ae55c2bb97ea11bf7f452bafe390eddb0034ef ``` `internal/compat/codex/compat.md:3-5`: ``` Pinned version: **codex-cli 0.133.0** — live probes on the lab host, 2026-07-10 (issue #87's Tier-2 spike sweep, all eleven live-spike questions, recorded in the issue's Amendment 2 ...) ``` (The one exception already recorded there: the §1 model-catalog probe **schema** is additionally live-verified against 0.144.1, 2026-07-13, issue #156 / ADR-0043. Everything else is 0.133.0.) Upstream stable releases published since (GitHub `openai/codex`, `rust-v*` non-prerelease tags): ``` rust-v0.146.0 2026-07-29 rust-v0.144.3 2026-07-13 rust-v0.145.0 2026-07-21 rust-v0.144.2 2026-07-13 rust-v0.144.6 2026-07-18 rust-v0.144.1 2026-07-09 rust-v0.144.5 2026-07-16 rust-v0.144.0 2026-07-09 rust-v0.144.4 2026-07-14 rust-v0.143.0 2026-07-08 rust-v0.142.x 2026-06-22 .. 2026-07-01 rust-v0.134.0 .. 0.141.0 2026-05-26 .. 2026-06-18 ``` `0.147.0-alpha.*` exists but is a prerelease — **0.146.0 is the target**, not an alpha. New pin values (verified against the GitHub release's own per-asset digest for `rust-v0.146.0`, the exact URL `containers/agent-tools/build.sh:75-78` fetches): ``` CODEX_VERSION=0.146.0 CODEX_SHA256_X64_MUSL_TGZ=5ba3b9405543953081f661d0854d266f76e2abbe51d41349355a36de7673776a ``` (asset `codex-x86_64-unknown-linux-musl.tar.gz`, 114169492 bytes, from `https://github.com/openai/codex/releases/download/rust-v0.146.0/codex-x86_64-unknown-linux-musl.tar.gz` — re-derive the digest yourself from the downloaded file; do not trust this issue as the sole source.) ## Security advisories closed by this window — these DO reach us The codex binary is a statically linked Rust artifact we ship into every container instance (`agent-tools:codex-<ver>`, ADR-0051), so its bundled dependencies are ours. - **0.143.0 (chore):** *"Updated OpenSSL, Hono, fast-uri, quick-xml, and crossbeam-epoch to address security advisories. (#29487, #29650, #30941, #31308)"* — an explicit multi-advisory dependency sweep. Our pinned 0.133.0 predates all four. - **0.136.0 (bug fixes):** *"Command-safety hardening prevents `/diff` from running repository-provided Git helpers/hooks, avoids PowerShell parser execution on non-Windows hosts, and rejects browser-origin exec-server websocket handshakes. (#24954, #24946, #24947)"* — the `/diff` one reaches us directly: `/diff` is a **chat-safe** row in our static catalog (`internal/provider/codex/commands.go:40`), so lab exposes it in the composer, and on 0.133.0 invoking it can execute repo-provided git helpers/hooks from the instance's worktree. - **0.141.0 (bug fixes):** *"Bundled SQLite is pinned to a version containing the WAL-reset corruption fix. (#27992)"* — data-integrity, not a CVE, but it is codex's own session state DB. - **0.145.0 (bug fixes):** *"Strengthened safety and approval handling with better forced-`rm` detection, consistent full-access confirmation, and preserved rejection reasons across tools. (#32989, #33464, #34400)"* — see the risk list below; "consistent full-access confirmation" is the one item that could *break* us rather than help us. ## What actually changed that touches how this repo uses codex Every item below maps to a numbered section of `internal/compat/codex/compat.md`. Each is a **hypothesis to verify**, not a confirmed break — none of this was observed on a live 0.146.0 binary during this investigation. **§1 Spawn argv** — `{codex} --ask-for-approval never --sandbox danger-full-access -c project_doc_fallback_filenames=["AGENTS.local.md"] [--model M] -c model_reasoning_effort=E [prompt]` - 0.145.0 #33464 *"consistent full-access confirmation"*. **Highest-risk item in this bump.** If `--sandbox danger-full-access` now prompts for confirmation, every unattended spawn hangs at start. Verify first; if it reproduces, this bump is blocked and the issue should be reported rather than worked around. - 0.134.0: *"Made `--profile` the primary profile selector across CLI, TUI permissions, and sandbox flows, with legacy profile configs rejected through migration guidance."* We set no profile, but the sandbox/permission plumbing was reworked underneath our flags. - 0.144.0 added a `writes` app-approval mode — a new enum member alongside `never`; confirm `never` still parses and still means never. - 0.138.0: *"model-defined effort levels now flow through in the order advertised by the model"* — touches the §1 `codex debug models` catalog probe and the per-model effort seam (ADR-0043). Our probe already asserts ordering-independent invariants, but re-run it. **§4 Context-file discovery (`AGENTS.local.md` via `project_doc_fallback_filenames`)** - 0.138.0 #26205/#26465: *"Workspace instruction loading is more accurate for remote and symlinked workspaces, so the right `AGENTS.md` files are picked up consistently."* - 0.142.0 #28958 et al.: remote environments *"preserve executor-native paths, shells, `AGENTS.md` discovery..."* - **Why this reaches us specifically:** every lab instance runs in a *linked git worktree* (`.git` is a file pointing at the reference repo's bare clone), which is exactly the symlinked/indirect workspace shape these fixes touch. Re-verify that `AGENTS.local.md` is still discovered from a worktree cwd. **§5 Transcript location + rollout JSONL grammar** — lab reads the rollout JSONL as the chat transcript. - 0.142.0 #28746/#28494: *"Configurable rollout token budgets ... abort turns when exhausted"* — potentially new rollout event kinds and a new turn-termination reason alongside the `turn_aborted` / `interrupted` pair we pin. - 0.145.0: experimental *"paginated thread history with efficient resume, search, persisted names, sub-agent support, and memories"* (#33364, #33907, #34085, #34229, #34386) — the largest session-storage change in the window. - 0.146.0: thread forking with paginated history, pinned threads, side conversations (#35220, #35251, #35011). - 0.140.0 #26859/#27719: corrupted SQLite state DBs are now *rebuilt from rollout data* — the rollout is now load-bearing for recovery, so its shape matters more. - `ParseRollout`/`ReadChat` must degrade gracefully on unknown event kinds (Claude Code's parser already does; confirm codex's does too rather than erroring). **§6 Reply + interrupt recipes** (bracketed paste → paced Enter; single Escape) — the most fragile coupling. - 0.140.0 #27499: *"Typing `@` now opens the unified mentions menu for files, plugins, and skills **by default**."* A reply body containing `@` (an email address, a `@user` handle, a Go module path) pasted into the composer could now open a mentions overlay that lab can neither see nor dismiss, stranding the session. Our `validateReply` rejects control characters but not `@`. **Test explicitly with an `@` in the reply text.** - 0.135.0 #24371: *"Older tmux/iTerm control-mode sessions no longer lose normal `Ctrl-C` handling from unsupported keyboard enhancement setup"* — lab drives codex over tmux; §6's "Ctrl-C is forbidden EVERYWHERE" pin should be re-confirmed (it is still forbidden by lab's recipes either way, but the pinned rationale may have shifted). - 0.141.0 #28235: *"TUI input prompts can auto-resolve after inactivity, with a countdown that pauses on interaction."* - 0.146.0 #35000/#35021: *"nonblocking interrupts, keyboard handling"* — directly under the single-Escape interrupt recipe. **§7 Builtin slash-command catalog** (`internal/provider/codex/commands.go`, a static table scraped verbatim from the live 0.133.0 TUI popup) - 0.146.0 #34605: *"Name new sessions with `/new` or `/clear`."* Both rows are `ChatSafe: true` in our table (`commands.go:32-35`), and `/new` carries `provider.CommandRoleClear` — i.e. it backs lab's **New conversation** action. If either now opens a naming input overlay, the clear path strands the TUI. **Verify before leaving those rows chat-safe.** - Commands added in the window and absent from our table: `/archive` + `codex archive`/`unarchive` (0.136.0), `/usage` (0.140.0), `/delete` + `codex delete` (0.140.0), `/import` (0.140.0, extended 0.145.0). - Removed in the window: `/realtime` (0.140.0 — not in our table anyway). - The table needs a fresh verbatim TUI scrape at 0.146.0, with the same row-by-row `ChatSafe` curation and per-row reasons. **§9 Attribution ground truth** — 0.134.0 #23963 adds *"subagent identity in hook inputs"*; §8 records hooks as the LiveSignals follow-up substrate. Worth a note, not a gate. **Build/CI (`containers/agent-tools/build.sh`, `.forgejo/workflows/agent-tools.yml`)** - 0.146.0 chore #34505/#34508/#34729/#34910: *"Publish release artifacts, channel metadata, and installer aliases through OpenAI-hosted release infrastructure, **with GitHub fallback**."* The GitHub release assets still exist for 0.146.0 (verified — the exact asset and digest are quoted above), so `build.sh`'s URL keeps working and **no build.sh change is needed now**. Record it in `docs/ops.md § Agent-tools images` as a watch item: the `github.com` egress requirement listed there may eventually need to become `releases.openai.com`. - 0.143.0 #31056: *"Reduced installer failures from GitHub API rate limits by reusing release metadata"* — unrelated to our direct asset download. ## Scope — files an implementing agent will touch | Path | Change | |---|---| | `containers/agent-tools/versions.env` | `CODEX_VERSION` + `CODEX_SHA256_X64_MUSL_TGZ`, moved **atomically with the compat-record update** | | `internal/compat/codex/compat.md` | Pin header → 0.146.0; per-section provenance re-dated to what was actually re-verified; every drift above recorded in its own section | | `internal/provider/codex/commands.go` | Only if the §7 TUI scrape shows drift (expected: new rows, `/new` + `/clear` re-curation) | | `internal/provider/codex/*.go` + `testdata/` | Only if re-verification finds real drift. **No port change is expected**; if you find yourself rewriting the adapter, stop and report here instead | | `docs/ops.md` | The OpenAI-hosted-release watch item under § Agent-tools images | `nix/module.nix` needs **no** edit — `container.toolsImages` derives its default tag from `versions.env` at eval time (`nix/module.nix:197-213`). ## Done means - [ ] The three automated live probes pass against a real 0.146.0 binary: `LAB_COMPAT_LIVE=1 go test ./internal/compat/codex/ -run Live -v` (`TestCompat_Live_loginStatusParses`, `TestCompat_Live_locateTranscript`, `TestCompat_Live_debugModelsProbe`). - [ ] The by-hand §6 hazard checks are re-driven in a scratch tmux TUI on 0.146.0, per that section's own "When this breaks" instructions: paste-without-submit, **paste containing `@`**, mid-turn queue-with-steer, single-Esc abort marker, idle double-Esc + `q` recovery. Ctrl-C stays forbidden and untested outside a disposable session. - [ ] §1 spawn posture confirmed live: `--ask-for-approval never --sandbox danger-full-access` still starts a turn with **no** confirmation prompt. - [ ] §4 confirmed live: `AGENTS.local.md` is still discovered from a linked-worktree cwd. - [ ] §7 re-scraped from the live 0.146.0 TUI popup; `/new` and `/clear` re-curated against the naming-prompt change. - [ ] `go test ./...` green (hermetic; fixtures updated only if the rollout grammar genuinely moved). - [ ] `golangci-lint run` clean. - [ ] Version + sha256 + compat-record land in **one** commit. - [ ] The agent-tools CI gate (path-gated on `containers/**`) builds the codex image and passes the injection smoke test on the PR — locally reproducible with `containers/agent-tools/build.sh codex && containers/agent-tools/smoke-test.sh codex`. - [ ] PR body says `Closes #<this issue>`. ## Out of scope - The **Claude Code** pin. `CLAUDE_CODE_VERSION=2.1.220` is the newest published release (npm `@anthropic-ai/claude-code` dist-tag `latest` = `2.1.220`, published 2026-07-24; `stable` = `2.1.212`). Nothing to bump. Its outstanding live re-verification is tracked on #235. - The gemini seam (`versions.env:28-30`) — still deferred to #126. - Any adapter feature work the new codex versions enable (paginated history, `/usage`, hooks-as-LiveSignals). Record what you observe in the compat doc; file follow-ups; do not build. - Host pin rollout beyond what merging to main already publishes. --- *Filed by the Daily agent update check schedule, 2026-07-31. Release notes quoted from the GitHub releases API for `openai/codex` (`rust-v0.134.0` … `rust-v0.146.0`); the project's `CHANGELOG.md` is a stub pointing at that releases page.*
Author
Owner

Re-verified 2026-08-01 (Daily agent update check): the target is unchanged — 0.146.0 is still the newest stable. One new thing to ignore.

$ curl -s 'https://api.github.com/repos/openai/codex/releases?per_page=15'
rust-v0.147.0-alpha.4    2026-07-31  prerelease
rust-v0.147.0-alpha.3    2026-07-31  prerelease
rust-v0.147.0-alpha.1.1  2026-07-31  prerelease
rust-v0.147.0-alpha.2    2026-07-30  prerelease
rust-v0.146.0            2026-07-29  <-- newest non-prerelease
rust-v0.147.0-alpha.1    2026-07-29  prerelease

The 0.147.0 alpha line has moved fast since this was filed (four more alphas in two days) and 0.147.0-alpha.4 will be what the GitHub releases page shows at the top. It is still a prerelease — do not take it. rust-v0.146.0 remains the target, exactly as the body says, and the pin values quoted there are unchanged.

Everything else in this issue — the Tier-2 re-verification checklist, the security window, the per-section drift hypotheses, and the scope table — stands as written. Nothing new to fold in.

**Re-verified 2026-08-01 (Daily agent update check): the target is unchanged — `0.146.0` is still the newest stable. One new thing to ignore.** ``` $ curl -s 'https://api.github.com/repos/openai/codex/releases?per_page=15' rust-v0.147.0-alpha.4 2026-07-31 prerelease rust-v0.147.0-alpha.3 2026-07-31 prerelease rust-v0.147.0-alpha.1.1 2026-07-31 prerelease rust-v0.147.0-alpha.2 2026-07-30 prerelease rust-v0.146.0 2026-07-29 <-- newest non-prerelease rust-v0.147.0-alpha.1 2026-07-29 prerelease ``` The `0.147.0` alpha line has moved fast since this was filed (four more alphas in two days) and `0.147.0-alpha.4` will be what the GitHub releases page shows at the top. **It is still a prerelease — do not take it.** `rust-v0.146.0` remains the target, exactly as the body says, and the pin values quoted there are unchanged. Everything else in this issue — the Tier-2 re-verification checklist, the security window, the per-section drift hypotheses, and the scope table — stands as written. Nothing new to fold in.
Author
Owner

Re-verified 2026-08-02 (Daily agent update check): target unchanged — 0.146.0 is still the newest stable codex release. No action needed on this issue; it is still accurate as written.

$ curl -s 'https://api.github.com/repos/openai/codex/releases?per_page=20'  # 2026-08-02
rust-v0.147.0-alpha.4    2026-07-31  prerelease
rust-v0.147.0-alpha.3    2026-07-31  prerelease
rust-v0.147.0-alpha.1.1  2026-07-31  prerelease
rust-v0.147.0-alpha.2    2026-07-30  prerelease
rust-v0.146.0            2026-07-29  STABLE   ← still the newest stable

The 0.147.0 alpha line has kept moving (four prereleases in three days) but has not cut a stable. Target stays rust-v0.146.0, sha256 5ba3b940… as recorded in the body.

One adjacent observation, for context only — it does not change this issue's scope. nixpkgs also packages codex, and that is the other place a codex binary reaches a lab host: services.lab.agentPackages.codex defaults to pkgs.codex (ADR-0033), the host-PATH baseline used by runner = host sessions, separate from the pinned agent-tools:codex-<ver> image this issue moves.

nixpkgs pkgs/by-name/co/codex/package.nix
  @ d407951447dc (this repo's flake.lock, 2026-07-05):  version = "0.142.3"
  @ master (2026-08-02):                                version = "0.146.0"

So the host-PATH codex on a current-nixpkgs host is already ahead of the 0.133.0 compat pin and has been for a while — the compat record's claims do not cover it either way. Landing this issue converges the two on 0.146.0. Worth knowing while doing the Tier-2 re-verification (a host with a recent nixpkgs can be used to drive the live probes without waiting on an image build), but the deliverable here is still versions.env + the compat record, and nothing about agentPackages is in scope.

**Re-verified 2026-08-02 (Daily agent update check): target unchanged — `0.146.0` is still the newest stable codex release. No action needed on this issue; it is still accurate as written.** ``` $ curl -s 'https://api.github.com/repos/openai/codex/releases?per_page=20' # 2026-08-02 rust-v0.147.0-alpha.4 2026-07-31 prerelease rust-v0.147.0-alpha.3 2026-07-31 prerelease rust-v0.147.0-alpha.1.1 2026-07-31 prerelease rust-v0.147.0-alpha.2 2026-07-30 prerelease rust-v0.146.0 2026-07-29 STABLE ← still the newest stable ``` The `0.147.0` alpha line has kept moving (four prereleases in three days) but has not cut a stable. Target stays `rust-v0.146.0`, sha256 `5ba3b940…` as recorded in the body. **One adjacent observation, for context only — it does not change this issue's scope.** nixpkgs also packages codex, and that is the *other* place a codex binary reaches a lab host: `services.lab.agentPackages.codex` defaults to `pkgs.codex` (ADR-0033), the host-PATH baseline used by `runner = host` sessions, separate from the pinned `agent-tools:codex-<ver>` image this issue moves. ``` nixpkgs pkgs/by-name/co/codex/package.nix @ d407951447dc (this repo's flake.lock, 2026-07-05): version = "0.142.3" @ master (2026-08-02): version = "0.146.0" ``` So the host-PATH codex on a current-nixpkgs host is **already ahead of the `0.133.0` compat pin** and has been for a while — the compat record's claims do not cover it either way. Landing this issue converges the two on `0.146.0`. Worth knowing while doing the Tier-2 re-verification (a host with a recent nixpkgs can be used to drive the live probes without waiting on an image build), but the deliverable here is still `versions.env` + the compat record, and nothing about `agentPackages` is in scope.
Author
Owner

Re-verified 2026-08-03 (Daily agent update check): target unchanged — rust-v0.146.0 is still the newest stable codex release, and the pin values in the body still stand. No edit needed.

$ curl -s 'https://api.github.com/repos/openai/codex/releases?per_page=12'   # 2026-08-03
rust-v0.147.0-alpha.4        2026-07-31  prerelease
rust-v0.147.0-alpha.3        2026-07-31  prerelease
rust-v0.147.0-alpha.1.1      2026-07-31  prerelease
rust-v0.147.0-alpha.2        2026-07-30  prerelease
rust-v0.146.0                2026-07-29  STABLE   ← still the newest stable
rust-v0.147.0-alpha.1        2026-07-29  prerelease

The 0.147.0 alpha line has been quiet for three days (nothing new since alpha.4 on 2026-07-31) and still has not cut a stable. Target stays rust-v0.146.0, sha256 5ba3b940… as recorded in the body. containers/agent-tools/versions.env:25-26 is still CODEX_VERSION=0.133.0.

One thing did change, and it helps: this repo's own nixpkgs pin now ships codex 0.146.0

The 2026-08-02 comment noted, as context only, that nixpkgs master had reached codex 0.146.0 while this repo's flake.lock was still on d407951447dc (codex 0.142.3). That flake bump has since landed. flake.lock moved on 2026-08-02 in commit bbc7f99 ("chore(nix): nixpkgs d407951 → 148bab9c — go_1_26 1.26.4 → 1.26.5"):

$ curl -s https://raw.githubusercontent.com/NixOS/nixpkgs/148bab9c1c3c53136ecb44a6ea356a0ed5b39b06/pkgs/by-name/co/codex/package.nix
  version = "0.146.0";
  tag = "rust-v${finalAttrs.version}";

So on the repo's current pinned nixpkgs, pkgs.codex is 0.146.0 — the exact release this issue targets. Two consequences for whoever picks this up:

  1. The Tier-2 live re-verification no longer needs an image build to get a 0.146.0 binary. nix shell nixpkgs#codex from this flake (or the devShell) puts the target version on PATH, which is enough to drive the §1 spawn-posture check, the §4 AGENTS.local.md-from-a-linked-worktree check, the §6 by-hand tmux hazard checks (including the @-in-reply mentions-menu test), the §7 TUI popup re-scrape, and LAB_COMPAT_LIVE=1 go test ./internal/compat/codex/ -run Live -v. Build the image afterwards for the CI smoke gate; do not wait on it to start probing.

  2. The drift is now internal to the repo's own pins, not just against upstream. nix/module.nix:168 defaults services.lab.agentPackages.codex = pkgs.codex (ADR-0033) — the host-PATH baseline for runner = host sessions. A host built from this flake today therefore runs codex 0.146.0 on the host arm while the container arm mounts the pinned agent-tools:codex-0.133.0 image, and internal/compat/codex/compat.md claims verification against 0.133.0 for both. That is a live inconsistency, not a hypothetical: the compat record currently describes neither arm accurately on a current host. Landing this issue converges both arms on 0.146.0 and makes the record true again.

This does not change the issue's scope — the deliverable is still containers/agent-tools/versions.env + internal/compat/codex/compat.md (+ internal/provider/codex/commands.go if the §7 scrape drifts), and nothing about agentPackages is in scope. It is worth stating in the compat record's provenance, though, which binary the live probes were actually driven against (nixpkgs pkgs.codex @ 148bab9c vs. the built image) — those are the same upstream release but not the same artifact.

Everything else in this issue — the security window (0.136.0 /diff hardening, 0.141.0 bundled-SQLite WAL fix, 0.143.0 multi-advisory dependency sweep, 0.145.0 approval handling), the per-section drift hypotheses, the scope table and the Done checklist — stands as written.

**Re-verified 2026-08-03 (Daily agent update check): target unchanged — `rust-v0.146.0` is still the newest stable codex release, and the pin values in the body still stand. No edit needed.** ``` $ curl -s 'https://api.github.com/repos/openai/codex/releases?per_page=12' # 2026-08-03 rust-v0.147.0-alpha.4 2026-07-31 prerelease rust-v0.147.0-alpha.3 2026-07-31 prerelease rust-v0.147.0-alpha.1.1 2026-07-31 prerelease rust-v0.147.0-alpha.2 2026-07-30 prerelease rust-v0.146.0 2026-07-29 STABLE ← still the newest stable rust-v0.147.0-alpha.1 2026-07-29 prerelease ``` The `0.147.0` alpha line has been quiet for three days (nothing new since `alpha.4` on 2026-07-31) and still has not cut a stable. Target stays `rust-v0.146.0`, sha256 `5ba3b940…` as recorded in the body. `containers/agent-tools/versions.env:25-26` is still `CODEX_VERSION=0.133.0`. ## One thing did change, and it helps: this repo's own nixpkgs pin now ships codex 0.146.0 The 2026-08-02 comment noted, as context only, that nixpkgs `master` had reached codex 0.146.0 while this repo's `flake.lock` was still on `d407951447dc` (codex 0.142.3). **That flake bump has since landed.** `flake.lock` moved on 2026-08-02 in commit `bbc7f99` ("chore(nix): nixpkgs d407951 → 148bab9c — go_1_26 1.26.4 → 1.26.5"): ``` $ curl -s https://raw.githubusercontent.com/NixOS/nixpkgs/148bab9c1c3c53136ecb44a6ea356a0ed5b39b06/pkgs/by-name/co/codex/package.nix version = "0.146.0"; tag = "rust-v${finalAttrs.version}"; ``` So on the repo's *current* pinned nixpkgs, `pkgs.codex` **is** 0.146.0 — the exact release this issue targets. Two consequences for whoever picks this up: 1. **The Tier-2 live re-verification no longer needs an image build to get a 0.146.0 binary.** `nix shell nixpkgs#codex` from this flake (or the devShell) puts the target version on PATH, which is enough to drive the §1 spawn-posture check, the §4 `AGENTS.local.md`-from-a-linked-worktree check, the §6 by-hand tmux hazard checks (including the `@`-in-reply mentions-menu test), the §7 TUI popup re-scrape, and `LAB_COMPAT_LIVE=1 go test ./internal/compat/codex/ -run Live -v`. Build the image afterwards for the CI smoke gate; do not wait on it to start probing. 2. **The drift is now internal to the repo's own pins, not just against upstream.** `nix/module.nix:168` defaults `services.lab.agentPackages.codex = pkgs.codex` (ADR-0033) — the host-PATH baseline for `runner = host` sessions. A host built from this flake today therefore runs codex **0.146.0** on the host arm while the container arm mounts the pinned `agent-tools:codex-0.133.0` image, and `internal/compat/codex/compat.md` claims verification against 0.133.0 for both. That is a live inconsistency, not a hypothetical: the compat record currently describes neither arm accurately on a current host. Landing this issue converges both arms on 0.146.0 and makes the record true again. This does **not** change the issue's scope — the deliverable is still `containers/agent-tools/versions.env` + `internal/compat/codex/compat.md` (+ `internal/provider/codex/commands.go` if the §7 scrape drifts), and nothing about `agentPackages` is in scope. It is worth stating in the compat record's provenance, though, which binary the live probes were actually driven against (nixpkgs `pkgs.codex` @ `148bab9c` vs. the built image) — those are the same upstream release but not the same artifact. Everything else in this issue — the security window (0.136.0 `/diff` hardening, 0.141.0 bundled-SQLite WAL fix, 0.143.0 multi-advisory dependency sweep, 0.145.0 approval handling), the per-section drift hypotheses, the scope table and the Done checklist — stands as written.
Author
Owner

Re-verified 2026-08-04 (Daily agent update check). Target unchanged: 0.146.0 is still the newest stable codex release. No edits to this issue's specification.

$ curl -s 'https://api.github.com/repos/openai/codex/releases?per_page=25' \
    | jq -r '.[] | select(.prerelease==false) | "\(.tag_name)  \(.published_at)"'
rust-v0.146.0  2026-07-29T01:42:51Z      ← the target, still the newest stable

Everything published since is a prerelease on the 0.147.0-alpha line — alpha.1, alpha.1.1, alpha.1.2, alpha.2, alpha.3, alpha.4, alpha.6, the newest of which landed 2026-08-03T21:32:07Z. None of them is a bump candidate; this issue's "0.146.0 is the target, not an alpha" instruction stands unchanged.

The drift figure in the title is therefore still accurate: 13 stable releases between the pinned 0.133.0 and 0.146.0. The pin values in the body (CODEX_VERSION=0.146.0, CODEX_SHA256_X64_MUSL_TGZ=5ba3b9405543953081f661d0854d266f76e2abbe51d41349355a36de7673776a) are unchanged, and the GitHub release asset build.sh:73-76 fetches still exists at that URL — the "GitHub fallback" watch item in the body has not been exercised yet.

Nothing in the body needs correcting. The four advisory items, the §1/§4/§5/§6/§7 re-verification hypotheses, and the scope table are all as-filed. This comment exists only so the next sweep can see the target was re-checked rather than assumed.

Companion sweeps this run, for cross-reference: Go modules on #250 (rewritten — modernc.org/sqlite v1.56.0 published and unblocked goose), Claude Code on #235 and the new #273 (2.1.221 shipped 2026-08-03).

**Re-verified 2026-08-04 (Daily agent update check). Target unchanged: `0.146.0` is still the newest stable codex release. No edits to this issue's specification.** ``` $ curl -s 'https://api.github.com/repos/openai/codex/releases?per_page=25' \ | jq -r '.[] | select(.prerelease==false) | "\(.tag_name) \(.published_at)"' rust-v0.146.0 2026-07-29T01:42:51Z ← the target, still the newest stable ``` Everything published since is a prerelease on the `0.147.0-alpha` line — `alpha.1`, `alpha.1.1`, `alpha.1.2`, `alpha.2`, `alpha.3`, `alpha.4`, `alpha.6`, the newest of which landed 2026-08-03T21:32:07Z. **None of them is a bump candidate**; this issue's "0.146.0 is the target, not an alpha" instruction stands unchanged. The drift figure in the title is therefore still accurate: 13 stable releases between the pinned `0.133.0` and `0.146.0`. The pin values in the body (`CODEX_VERSION=0.146.0`, `CODEX_SHA256_X64_MUSL_TGZ=5ba3b9405543953081f661d0854d266f76e2abbe51d41349355a36de7673776a`) are unchanged, and the GitHub release asset `build.sh:73-76` fetches still exists at that URL — the "GitHub fallback" watch item in the body has not been exercised yet. Nothing in the body needs correcting. The four advisory items, the §1/§4/§5/§6/§7 re-verification hypotheses, and the scope table are all as-filed. This comment exists only so the next sweep can see the target was re-checked rather than assumed. **Companion sweeps this run, for cross-reference:** Go modules on #250 (rewritten — `modernc.org/sqlite v1.56.0` published and unblocked `goose`), Claude Code on #235 and the new #273 (`2.1.221` shipped 2026-08-03).
Author
Owner

Re-verified 2026-08-05 (Daily agent update check). Target unchanged: 0.146.0 is still the newest stable codex release. No edits to this issue's specification.

$ curl -s 'https://api.github.com/repos/openai/codex/releases?per_page=30'
    | select(.prerelease==false)
rust-v0.146.0  2026-07-29T01:42:51Z      <- the target, still the only stable in the window

The 0.147.0-alpha line kept moving over the last 24h (alpha.6.1 2026-08-04T13:14:03Z, alpha.6.3 2026-08-04T19:36:48Z, alpha.6.4 2026-08-04T21:02:39Z, plus alpha.7 tagged 2026-08-04T11:50:52Z) and still has not cut a stable. This issue's "0.146.0 is the target, not an alpha" instruction stands unchanged, and the drift figure in the title (13 stable releases) is still accurate.

containers/agent-tools/versions.env:25-26 is still CODEX_VERSION=0.133.0 / CODEX_SHA256_X64_MUSL_TGZ=d06019ab…. The pin values in the body (0.146.0, sha256 5ba3b940…) are unchanged, and the GitHub release asset build.sh:71-74 fetches still exists at that URL — the "GitHub fallback" watch item has still not been exercised.

Nothing in the body needs correcting. The four advisory items (0.136.0 /diff hardening, 0.141.0 bundled-SQLite WAL fix, 0.143.0 multi-advisory dependency sweep, 0.145.0 approval handling), the §1/§4/§5/§6/§7 re-verification hypotheses, the scope table and the Done checklist are all as-filed. This comment exists only so the next sweep can see the target was re-checked rather than assumed.

Companion sweeps this run, for cross-reference: Go modules on #250 (re-verified, no change), and a new issue #290 — Claude Code 2.1.2212.1.222, published 2026-08-04T20:37:17Z. Note for whoever picks this issue up: #290 touches the same two files (containers/agent-tools/versions.env and a compat record), so if both are worked concurrently expect a trivial versions.env conflict — the two version lines are independent and neither issue's scope overlaps the other's compat doc.

**Re-verified 2026-08-05 (Daily agent update check). Target unchanged: `0.146.0` is still the newest stable codex release. No edits to this issue's specification.** ``` $ curl -s 'https://api.github.com/repos/openai/codex/releases?per_page=30' | select(.prerelease==false) rust-v0.146.0 2026-07-29T01:42:51Z <- the target, still the only stable in the window ``` The `0.147.0-alpha` line kept moving over the last 24h (`alpha.6.1` 2026-08-04T13:14:03Z, `alpha.6.3` 2026-08-04T19:36:48Z, `alpha.6.4` 2026-08-04T21:02:39Z, plus `alpha.7` tagged 2026-08-04T11:50:52Z) and **still has not cut a stable**. This issue's "0.146.0 is the target, not an alpha" instruction stands unchanged, and the drift figure in the title (13 stable releases) is still accurate. `containers/agent-tools/versions.env:25-26` is still `CODEX_VERSION=0.133.0` / `CODEX_SHA256_X64_MUSL_TGZ=d06019ab…`. The pin values in the body (`0.146.0`, sha256 `5ba3b940…`) are unchanged, and the GitHub release asset `build.sh:71-74` fetches still exists at that URL — the "GitHub fallback" watch item has still not been exercised. Nothing in the body needs correcting. The four advisory items (0.136.0 `/diff` hardening, 0.141.0 bundled-SQLite WAL fix, 0.143.0 multi-advisory dependency sweep, 0.145.0 approval handling), the §1/§4/§5/§6/§7 re-verification hypotheses, the scope table and the Done checklist are all as-filed. This comment exists only so the next sweep can see the target was re-checked rather than assumed. **Companion sweeps this run, for cross-reference:** Go modules on #250 (re-verified, no change), and a **new** issue **#290** — Claude Code `2.1.221` → `2.1.222`, published 2026-08-04T20:37:17Z. Note for whoever picks this issue up: #290 touches the *same two files* (`containers/agent-tools/versions.env` and a compat record), so if both are worked concurrently expect a trivial `versions.env` conflict — the two version lines are independent and neither issue's scope overlaps the other's compat doc.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Cloonar/coding-lab#249
No description provided.