From 5797d32684a6fda51e03d02b466529ebdf2ea583 Mon Sep 17 00:00:00 2001 From: Udhdhav kheni Date: Mon, 31 Aug 2026 16:04:06 +1000 Subject: [PATCH] test: regenerate factory ship golden for the broken_install branch The preflight chain is embedded in the ship skill, so changing it changes the rendered SKILL.md. Only the factory golden moved; the claude golden tracks the committed render (already regenerated) and the codex one was unaffected. The diff is exactly the new branch and its mode documentation. --- test/fixtures/golden/factory-ship-SKILL.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/test/fixtures/golden/factory-ship-SKILL.md b/test/fixtures/golden/factory-ship-SKILL.md index 6183b622f..1a6a04473 100644 --- a/test/fixtures/golden/factory-ship-SKILL.md +++ b/test/fixtures/golden/factory-ship-SKILL.md @@ -2148,10 +2148,17 @@ elif ! command -v codex >/dev/null 2>&1; then _CODEX_MODE="not_installed"; _gstack_codex_log_event "codex_cli_missing" 2>/dev/null || true elif ! _gstack_codex_auth_probe >/dev/null 2>&1; then _CODEX_MODE="not_authed"; _gstack_codex_log_event "codex_auth_failed" 2>/dev/null || true -elif ! _gstack_codex_model_probe; then - _CODEX_MODE="model_unusable" else - _CODEX_MODE="ready"; _gstack_codex_version_check 2>/dev/null || true + # Capture the probe's code: 2 means the CLI cannot execute at all, which is a + # different problem (and a different fix) from a model the account can't use. + _gstack_codex_model_probe; _CODEX_MP=$? + if [ "$_CODEX_MP" -eq 2 ]; then + _CODEX_MODE="broken_install" + elif [ "$_CODEX_MP" -ne 0 ]; then + _CODEX_MODE="model_unusable" + else + _CODEX_MODE="ready"; _gstack_codex_version_check 2>/dev/null || true + fi fi echo "CODEX_MODE: $_CODEX_MODE" ``` @@ -2161,6 +2168,7 @@ Branch on the echoed `CODEX_MODE`: - **`not_installed`** — Codex CLI absent. Print: "Codex not installed — using Claude subagent. Install for cross-model coverage: `npm install -g @openai/codex`." Fall back to the Claude subagent path. - **`under_codex`** — this session is already running INSIDE a Codex host, so spawning codex again is the same model reviewing itself at multiplied token cost (#2519). Print exactly one line: "[running under Codex — nested codex passes skipped; set GSTACK_FORCE_CODEX_REVIEW=1 to force]" and skip the codex invocations below; run the section's free in-host pass instead if it defines one. - **`not_authed`** — installed but no credentials. Print: "Codex installed but not authenticated — using Claude subagent. Run `codex login` or set `$CODEX_API_KEY`." Fall back to the Claude subagent path. +- **`broken_install`** — the CLI is on PATH but cannot execute (spawn ENOENT, non-executable binary, missing vendor payload). Print: "Codex is installed but its binary cannot run — Codex passes skipped. Reinstall: `npm install -g @openai/codex`." Relay the probe's HINT lines and fall back to the Claude subagent path. This state exists because a missing binary used to land in the model probe's fail-open bucket and report `ready`, so every Codex pass was skipped silently (#2742). - **`model_unusable`** — authed but the account cannot use its configured model (#2477: HTTP 400 on every call, usually a stale `model =` pin in `~/.codex/config.toml`). Relay the probe's HINT lines, tell the user the one-line fix (update the pin; `[notice.model_migrations]` names the replacement), and fall back to the Claude subagent path. The ~10s round trip is cached for 1h; timeouts fail open to `ready`. - **`ready`** — run the Codex pass below.