Skip to content

Make GPT-5.6 the default Codex model across the pdd CLI #1986

Description

@DianaTao

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:
    1. explicit command/model argument;
    2. explicit CODEX_MODEL or PDD_MODEL_DEFAULT;
    3. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    Status
    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions