Purpose
Make GPT-5.6 (gpt-5.6) the default Codex model throughout the pdd CLI, matching the rollout in promptdriven/pdd_cloud#3229 and promptdriven/pdd_cloud#3233.
This is broader than accepting an explicit CODEX_MODEL=gpt-5.6. The CLI already forwards arbitrary CODEX_MODEL values to codex --model; the required change is to make every applicable no-override Codex path select 5.6 consistently, while preserving explicit user choices and non-Codex providers.
Current problem
The CLI has several distinct model-selection surfaces, and they do not share one explicit Codex default:
- Agentic Codex execution in
pdd/agentic_common.py only adds --model when CODEX_MODEL is set. With no override, PDD delegates model selection to the user's Codex configuration or the Codex CLI's own default, so identical PDD commands may run different models.
pdd/routing_policy.py resolves ranked model tiers from pdd/data/deepswe_manifest.json; rank/tier 1 currently resolves to gpt-5.5.
- The packaged catalog
pdd/data/llm_model.csv contains gpt-5.5, azure/gpt-5.5, and chatgpt/gpt-5.5, but no 5.6 entries.
- The hand-managed ChatGPT subscription source in
pdd/generate_model_catalog.py starts with chatgpt/gpt-5.5, so regeneration would not preserve/add chatgpt/gpt-5.6.
- Subscription selection and catalog-generation tests explicitly treat
chatgpt/gpt-5.5 as the strongest/default Codex-family candidate.
- Documentation and setup guidance show older ChatGPT/Codex models and currently state that
CODEX_MODEL has no default.
Because agentic subprocess execution, ranked routing, direct LiteLLM/OpenAI calls, and ChatGPT-subscription calls use different selectors, updating only one test or catalog row would leave other CLI paths on 5.5 or on an uncontrolled external default.
Proposed change
1. Introduce one shared CLI Codex default
- Define a single source of truth for the CLI's default Codex model:
gpt-5.6.
- Reuse it anywhere PDD chooses a Codex model instead of scattering new
"gpt-5.6" literals.
- Keep explicit configuration higher priority than the default:
- explicit command/model argument;
- explicit
CODEX_MODEL or PDD_MODEL_DEFAULT;
- PDD's shared Codex default (
gpt-5.6).
2. Default agentic Codex subprocesses to 5.6
- When
run_agentic_task selects the OpenAI/Codex harness and CODEX_MODEL is unset, invoke Codex with top-level --model gpt-5.6 before exec.
- Preserve an explicitly supplied
CODEX_MODEL verbatim.
- Apply the default consistently to agentic entry points used by
pdd bug, pdd fix, pdd change, pdd test, pdd sync, checkup/simplify Codex execution, and other callers of the shared agentic runner.
- Ensure retries, provider fallback, clean restart, routing-policy selection, and resumed workflows do not drop or overwrite the selected model.
- Keep actual-model attribution and JSONL audit records accurate; reports should identify the model returned by Codex, falling back to the effective
CODEX_MODEL/default only when the response does not include it.
3. Upgrade ranked routing from 5.5 to 5.6
- Update the model-tier/ranking source so the highest applicable Codex tier resolves to
gpt-5.6, not gpt-5.5.
- Update
resolve_model_for_tier tests and agentic routing-policy integration tests.
- Preserve existing Claude, Gemini, OpenCode, and lower-tier semantics unless a change is strictly required to insert 5.6.
- Do not silently turn provider-specific routing rows into Codex rows.
4. Add 5.6 to API and ChatGPT-subscription catalogs
- Add the applicable OpenAI API model row (
gpt-5.6) and ChatGPT subscription row (chatgpt/gpt-5.6) to pdd/data/llm_model.csv.
- Add Azure or other provider-prefixed 5.6 rows only where that provider actually supports the model; do not infer availability from the bare OpenAI model.
- Add
chatgpt/gpt-5.6 to _CHATGPT_SUBSCRIPTION_ROWS in pdd/generate_model_catalog.py so catalog regeneration preserves it.
- Update the relevant ranking manifests/sources with documented provenance. Do not invent Arena/DeepSWE scores. If an authoritative 5.6 score is unavailable, use an explicit deterministic rollout policy or clearly marked temporary/static ranking rule so 5.6 is selected intentionally and reproducibly.
- Ensure
--strength selection within the ChatGPT family considers 5.6 the top/default candidate without breaking lower-strength selection.
- Verify provider-aware lookup keeps
gpt-5.6, openai/gpt-5.6, azure/gpt-5.6, and chatgpt/gpt-5.6 in their proper credential/provider boundaries.
5. Cover all CLI model-selection paths
Add or update tests for:
- no-override Codex agentic execution ->
codex --model gpt-5.6 exec ...;
- explicit
CODEX_MODEL wins over the default;
--model stays before the exec subcommand;
- ranked tier resolution returns 5.6 where 5.5 was the top Codex model;
- routing-policy execution propagates 5.6 through
CODEX_MODEL;
- direct OpenAI catalog selection recognizes 5.6;
- ChatGPT subscription selection recognizes and prefers
chatgpt/gpt-5.6;
- catalog regeneration retains the 5.6 subscription row;
- user/project override catalogs continue to work and produce an actionable message if they are stale and omit 5.6;
- explicit older Codex models remain selectable;
- Claude, Gemini, OpenCode, local models, and explicit provider selections remain unchanged.
6. Update source prompts and documentation
- Update source-of-truth prompts corresponding to changed generated Python files so a future
pdd sync does not revert the rollout.
- Update README/setup/onboarding guidance and environment-variable documentation to state that
CODEX_MODEL overrides a PDD CLI default of gpt-5.6.
- Update ChatGPT subscription examples and the available-model list to include
chatgpt/gpt-5.6.
- Document the distinction between:
- agentic Codex CLI selection (
CODEX_MODEL / codex --model), and
- direct/local model selection (
PDD_MODEL_DEFAULT, including chatgpt/gpt-5.6).
Acceptance criteria
- A no-override agentic run that selects Codex invokes
codex --model gpt-5.6 exec ....
- An explicit
CODEX_MODEL always wins and is forwarded unchanged.
- No production Codex default or top-ranked Codex selection remains pinned to
gpt-5.5.
resolve_model_for_tier and routing-policy execution select/propagate 5.6 for the applicable top Codex tier.
- The packaged catalog supports
gpt-5.6 and chatgpt/gpt-5.6; provider-prefixed rows are added only with verified provider support.
- ChatGPT subscription model selection can choose 5.6 and treats it as the intended default/top candidate.
- Catalog regeneration does not delete or downgrade the 5.6 subscription entry.
- Explicit older Codex models, Claude, Gemini, OpenCode, and local/provider-specific models retain their existing behavior.
- Generated code and source prompts remain synchronized, including required metadata/hash updates.
- README, setup output, and onboarding documentation describe the 5.6 defaults and override precedence accurately.
- Focused unit/integration suites for agentic execution, routing policy, catalog generation, subscription selection, setup, and documentation pass.
- Repository-wide searches show no remaining production
gpt-5.5 literal that acts as a Codex default or overrides a 5.6 selection. Historical fixtures, leaderboard evidence, and explicit backwards-compatibility cases may remain when documented.
Out of scope
- Removing support for GPT-5.5 or older explicitly selected models.
- Changing default models for Claude, Gemini, OpenCode, or local providers.
- Claiming Azure/provider availability for GPT-5.6 without evidence.
- Changing pricing, ranking, or reasoning-effort values without an authoritative source or an explicitly documented rollout rule.
Implementation note
Prefer one shared Codex default plus explicit override precedence. The CLI should not depend on whichever default happens to be configured in an installed Codex binary, because that makes PDD runs non-reproducible and diverges from the pdd_cloud 5.6 rollout.
Related: promptdriven/pdd_cloud#3229, promptdriven/pdd_cloud#3233, and partial regression coverage in #1989.
Purpose
Make GPT-5.6 (
gpt-5.6) the default Codex model throughout thepddCLI, matching the rollout in promptdriven/pdd_cloud#3229 and promptdriven/pdd_cloud#3233.This is broader than accepting an explicit
CODEX_MODEL=gpt-5.6. The CLI already forwards arbitraryCODEX_MODELvalues tocodex --model; the required change is to make every applicable no-override Codex path select 5.6 consistently, while preserving explicit user choices and non-Codex providers.Current problem
The CLI has several distinct model-selection surfaces, and they do not share one explicit Codex default:
pdd/agentic_common.pyonly adds--modelwhenCODEX_MODELis set. With no override, PDD delegates model selection to the user's Codex configuration or the Codex CLI's own default, so identical PDD commands may run different models.pdd/routing_policy.pyresolves ranked model tiers frompdd/data/deepswe_manifest.json; rank/tier 1 currently resolves togpt-5.5.pdd/data/llm_model.csvcontainsgpt-5.5,azure/gpt-5.5, andchatgpt/gpt-5.5, but no 5.6 entries.pdd/generate_model_catalog.pystarts withchatgpt/gpt-5.5, so regeneration would not preserve/addchatgpt/gpt-5.6.chatgpt/gpt-5.5as the strongest/default Codex-family candidate.CODEX_MODELhas no default.Because agentic subprocess execution, ranked routing, direct LiteLLM/OpenAI calls, and ChatGPT-subscription calls use different selectors, updating only one test or catalog row would leave other CLI paths on 5.5 or on an uncontrolled external default.
Proposed change
1. Introduce one shared CLI Codex default
gpt-5.6."gpt-5.6"literals.CODEX_MODELorPDD_MODEL_DEFAULT;gpt-5.6).2. Default agentic Codex subprocesses to 5.6
run_agentic_taskselects the OpenAI/Codex harness andCODEX_MODELis unset, invoke Codex with top-level--model gpt-5.6beforeexec.CODEX_MODELverbatim.pdd bug,pdd fix,pdd change,pdd test,pdd sync, checkup/simplify Codex execution, and other callers of the shared agentic runner.CODEX_MODEL/default only when the response does not include it.3. Upgrade ranked routing from 5.5 to 5.6
gpt-5.6, notgpt-5.5.resolve_model_for_tiertests and agentic routing-policy integration tests.4. Add 5.6 to API and ChatGPT-subscription catalogs
gpt-5.6) and ChatGPT subscription row (chatgpt/gpt-5.6) topdd/data/llm_model.csv.chatgpt/gpt-5.6to_CHATGPT_SUBSCRIPTION_ROWSinpdd/generate_model_catalog.pyso catalog regeneration preserves it.--strengthselection within the ChatGPT family considers 5.6 the top/default candidate without breaking lower-strength selection.gpt-5.6,openai/gpt-5.6,azure/gpt-5.6, andchatgpt/gpt-5.6in their proper credential/provider boundaries.5. Cover all CLI model-selection paths
Add or update tests for:
codex --model gpt-5.6 exec ...;CODEX_MODELwins over the default;--modelstays before theexecsubcommand;CODEX_MODEL;chatgpt/gpt-5.6;6. Update source prompts and documentation
pdd syncdoes not revert the rollout.CODEX_MODELoverrides a PDD CLI default ofgpt-5.6.chatgpt/gpt-5.6.CODEX_MODEL/codex --model), andPDD_MODEL_DEFAULT, includingchatgpt/gpt-5.6).Acceptance criteria
codex --model gpt-5.6 exec ....CODEX_MODELalways wins and is forwarded unchanged.gpt-5.5.resolve_model_for_tierand routing-policy execution select/propagate 5.6 for the applicable top Codex tier.gpt-5.6andchatgpt/gpt-5.6; provider-prefixed rows are added only with verified provider support.gpt-5.5literal that acts as a Codex default or overrides a 5.6 selection. Historical fixtures, leaderboard evidence, and explicit backwards-compatibility cases may remain when documented.Out of scope
Implementation note
Prefer one shared Codex default plus explicit override precedence. The CLI should not depend on whichever default happens to be configured in an installed Codex binary, because that makes PDD runs non-reproducible and diverges from the
pdd_cloud5.6 rollout.Related: promptdriven/pdd_cloud#3229, promptdriven/pdd_cloud#3233, and partial regression coverage in #1989.