Skip to content

Commit 1c81b95

Browse files
authored
[FIX] Route Codex aliases to GPT-5.6 Sol (#4220)
## Summary Update AutoSkillit's canonical Codex alias registry so every local model class launches `gpt-5.6-sol`. Preserve model-class behavior through reasoning effort: Sonnet-class default work uses `high`, Opus-class serious work uses `xhigh`, and explicitly requested Haiku-class work remains `medium`. Keep explicit native `gpt-5.5` compatibility without allowing any alias to select it. - Replace the shared `gpt-5.5` alias target with `gpt-5.6-sol`. - Add Sol to the valid native model-ID set while retaining explicit 5.5 compatibility. - Cover exact alias policy, legacy 5.4/mini rejection, doctor validation, native model passthrough, suffix stripping, and the Opus food-truck `xhigh` path. Closes #4218 ## Implementation Plan Plan file: `/home/talon/projects/generic_automation_mcp/.autoskillit/temp/codex-loop/4218-gpt56-sol-pr-plan.md` 🤖 Generated with [Claude Code](https://claude.com/claude-code) via AutoSkillit <!-- autoskillit:pipeline-signature steps=prepare_pr,run_arch_lenses,compose_pr,annotate_pr_diff,review_pr -->
1 parent 8074aaf commit 1c81b95

4 files changed

Lines changed: 45 additions & 8 deletions

File tree

src/autoskillit/core/types/_type_backend.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -182,15 +182,15 @@ class BackendCapabilities:
182182

183183
CODEX_MODEL_ALIASES: Mapping[str, str] = MappingProxyType(
184184
{
185-
"sonnet": "gpt-5.5",
186-
"opus": "gpt-5.5",
187-
"haiku": "gpt-5.5",
185+
"sonnet": "gpt-5.6-sol",
186+
"opus": "gpt-5.6-sol",
187+
"haiku": "gpt-5.6-sol",
188188
}
189189
)
190190

191191
CODEX_MODEL_ALIASES_LAST_VERIFIED: str = "2026-07-09"
192192

193-
CODEX_VALID_MODEL_IDS: frozenset[str] = frozenset({"gpt-5.5"})
193+
CODEX_VALID_MODEL_IDS: frozenset[str] = frozenset({"gpt-5.5", "gpt-5.6-sol"})
194194

195195
assert set(CODEX_MODEL_ALIASES.values()).issubset(CODEX_VALID_MODEL_IDS), (
196196
"CODEX_MODEL_ALIASES values must all be members of CODEX_VALID_MODEL_IDS; "

tests/cli/test_doctor_runtime.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,11 @@ def test_ok_when_within_threshold_and_valid_aliases(
2121
monkeypatch.setattr(
2222
mod,
2323
"CODEX_MODEL_ALIASES",
24-
{"sonnet": "gpt-5.5", "opus": "gpt-5.5", "haiku": "gpt-5.5"},
24+
{
25+
"sonnet": "gpt-5.6-sol",
26+
"opus": "gpt-5.6-sol",
27+
"haiku": "gpt-5.6-sol",
28+
},
2529
)
2630
result = mod._check_codex_model_alias_staleness()
2731
assert result.severity == Severity.OK
@@ -45,7 +49,7 @@ def test_warning_when_alias_value_invalid(self, monkeypatch: pytest.MonkeyPatch)
4549
monkeypatch.setattr(
4650
mod,
4751
"CODEX_MODEL_ALIASES",
48-
{"sonnet": "gpt-5.5", "opus": "BOGUS-MODEL"},
52+
{"sonnet": "gpt-5.6-sol", "opus": "BOGUS-MODEL"},
4953
)
5054
result = mod._check_codex_model_alias_staleness()
5155
assert result.severity == Severity.WARNING

tests/execution/backends/test_model_translation.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@ def test_strips_context_suffix(self) -> None:
2323
assert "[1m]" not in result
2424
assert result == CODEX_MODEL_ALIASES["opus"]
2525

26-
def test_passthrough_native(self) -> None:
27-
assert CodexBackend().translate_model("gpt-5.5") == "gpt-5.5"
26+
@pytest.mark.parametrize("model_id", ["gpt-5.5", "gpt-5.6-sol"])
27+
def test_passthrough_native(self, model_id: str) -> None:
28+
assert CodexBackend().translate_model(model_id) == model_id
2829

2930
def test_unknown_passthrough(self) -> None:
3031
assert CodexBackend().translate_model("custom-model-xyz") == "custom-model-xyz"
@@ -176,6 +177,22 @@ def test_food_truck_cmd_has_effort(self) -> None:
176177
)
177178
assert "model_reasoning_effort=high" in list(spec.cmd)
178179

180+
def test_food_truck_opus_suffix_uses_shared_model_with_xhigh_effort(self) -> None:
181+
from autoskillit.core import DirectInstall
182+
183+
spec = CodexBackend().build_food_truck_cmd(
184+
orchestrator_prompt="test",
185+
plugin_source=DirectInstall(plugin_dir="/tmp/plugin"),
186+
cwd="/repo",
187+
completion_marker="%%DONE%%",
188+
model="opus[1m]",
189+
)
190+
cmd = list(spec.cmd)
191+
model_idx = cmd.index("--model")
192+
assert cmd[model_idx + 1] == CODEX_MODEL_ALIASES["opus"]
193+
assert "[1m]" not in cmd[model_idx + 1]
194+
assert "model_reasoning_effort=xhigh" in cmd
195+
179196
def test_interactive_cmd_has_effort(self) -> None:
180197
spec = CodexBackend().build_interactive_cmd(model="sonnet")
181198
assert "model_reasoning_effort=high" in list(spec.cmd)

tests/execution/test_model_alias_registry.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,22 @@ def test_codex_alias_values_in_allowlist() -> None:
3434
)
3535

3636

37+
def test_codex_aliases_use_sol() -> None:
38+
from autoskillit.core.types._type_backend import CODEX_MODEL_ALIASES
39+
40+
assert set(CODEX_MODEL_ALIASES) == {"sonnet", "opus", "haiku"}
41+
assert set(CODEX_MODEL_ALIASES.values()) == {"gpt-5.6-sol"}
42+
43+
44+
def test_codex_native_model_allowlist_preserves_compatibility() -> None:
45+
from autoskillit.core.types._type_backend import is_valid_codex_model_id
46+
47+
assert is_valid_codex_model_id("gpt-5.6-sol")
48+
assert is_valid_codex_model_id("gpt-5.5")
49+
assert not is_valid_codex_model_id("gpt-5.4")
50+
assert not is_valid_codex_model_id("gpt-5.4-mini")
51+
52+
3753
def test_claude_alias_values_in_allowlist() -> None:
3854
from autoskillit.core.types._type_backend import CLAUDE_MODEL_ALIASES
3955

0 commit comments

Comments
 (0)