Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/strongdm/attractor/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ Although bringing your own agentic loop and unified LLM SDK is not required to b
- Sensitive Codex state roots (`codex-home*`, `.codex/auth.json`, `.codex/config.toml`) are excluded from `stage.tgz` and `run.tgz`.
- Idle watchdog enforces process-group cleanup for stalled Codex CLI stages.
- Codex schema behavior:
- Structured output schema requires `final` and `summary`, but allows additional properties for CLI compatibility.
- Structured output schema requires `final` and `summary` and sets `additionalProperties: false` (strict object contract required by Codex/OpenAI structured-output validation).
- If codex rejects schema validation (`invalid_json_schema`-class errors), Attractor retries once without `--output-schema` and records fallback metadata in stage artifacts.
- If codex returns unknown structured keys on schema-enabled output, Attractor emits a loud warning, writes `structured_output_unknown_keys.json`, retries once without `--output-schema`, and records fallback metadata in `cli_invocation.json`.
- If codex emits known state-db discrepancy signatures, Attractor retries once with a fresh isolated state root and records state-db fallback metadata.
Expand Down
19 changes: 19 additions & 0 deletions internal/attractor/modeldb/catalog_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -149,3 +149,22 @@ func TestCatalogHasProviderModel_SparkEntry(t *testing.T) {
t.Error("expected SupportsReasoning=true")
}
}

func TestLoadEmbeddedCatalog_ContainsAnthropicSonnet46(t *testing.T) {
c, err := LoadEmbeddedCatalog()
if err != nil {
t.Fatalf("LoadEmbeddedCatalog: %v", err)
}
if !CatalogHasProviderModel(c, "anthropic", "claude-sonnet-4.6") {
t.Fatal("expected embedded catalog to contain anthropic/claude-sonnet-4.6")
}
if !CatalogHasProviderModel(c, "anthropic", "claude-sonnet-4-6") {
t.Fatal("expected dash-format anthropic model id to resolve for claude-sonnet-4.6")
}
if !CatalogHasProviderModel(c, "openai", "gpt-5.3-codex") {
t.Fatal("expected embedded catalog to contain openai/gpt-5.3-codex")
}
if !CatalogHasProviderModel(c, "google", "gemini-3.1-pro-preview") {
t.Fatal("expected embedded catalog to contain google/gemini-3.1-pro-preview")
}
}
Loading