fix(e2e): claude-code MiniMax slug must be bare MiniMax-M2.7 not colon (internal#718 UNREGISTERED) #2311
Reference in New Issue
Block a user
Delete Branch "fix/e2e-claude-code-minimax-bare-slug"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Root cause
The staging full-SaaS e2e (
tests/e2e/test_staging_full_saas.sh) provisions a claude-code parent workspace using a slug fromtests/e2e/lib/model_slug.sh, which for the claude-code/MiniMax-BYOK path emitted the colon formminimax:MiniMax-M2.7. That id is intentionally unregistered for the claude-code runtime — the claude-code adapter cannot strip theminimax:prefix, so create-validation (provider-registry SSOT, internal#718) rejects it.Evidence — real staging run job 295075 (main
797351bb) failed at5/11 Provisioning parent workspacewith HTTP 422:This 422 is correct, intentional product behavior, codified in
workspace-server/internal/providers/derive_provider_matrix_test.go(the #2263/#2274 colon-vs-slash-vs-bare MiniMax triple):The bare form is the registered claude-code BYOK id (
registry_gen.go:88—minimaxarmModels = [MiniMax-M2, MiniMax-M2.7, MiniMax-M2.7-highspeed, MiniMax-M3]) and derivesprovider=minimax(BYOK viaMINIMAX_API_KEY). The colon form only resolves on openclaw/hermes, whose adapters do stripminimax:.Fix (test-only — ZERO production code)
tests/e2e/lib/model_slug.sh— claude-code|seo-agent MiniMax-BYOK path now emits the bare registeredMiniMax-M2.7. Rewrote the now-incorrect comments that claimed the colon form gives BYOK on claude-code (it 422s; bare gives BYOK, slash gives platform, colon is UNREGISTERED).tests/e2e/test_model_slug.sh— updated the three pins (claude-code+minimax, both-keys priority, seo-agent) from the colon to the bare form.tests/e2e/test_priority_runtimes_e2e.sh— the live MiniMax arm directlyPOST /workspaceswithruntime=claude-code, model=minimax:MiniMax-M2.7(the same UNREGISTERED 422 class the audit was meant to catch). Switched to bareMiniMax-M2.7and corrected the misleading "registry-skew → best-effort" framing.tests/e2e/test_staging_full_saas.sh— corrected one stale diagnostic string that named the colon form as the default.Audit of other arms (per task)
openai/gpt-4oopenai/gpt-4o*)fallback)gemini-2.5-progoogleBYOK)minimax/MiniMax-M2.7minimaxlabelminimax:MiniMax-M2.7Only the colon-on-claude-code arms were UNREGISTERED; all others are registered for their runtime per the matrix test. openclaw/hermes colon-minimax is correct (those strip the prefix) and is not emitted by this helper.
Verification
bash -nclean on all 4 changed scripts.shellcheck -xclean onmodel_slug.sh+test_model_slug.sh; the two larger scripts show only pre-existing SC1091/SC2329 (source-path / unused-fn), none from this diff.bash tests/e2e/test_model_slug.sh→ 21 passed, 0 failed.No assertion semantics, continue-on-error, or workflow gating changed.
🤖 Generated with Claude Code
APPROVED (CTO review). Verified diff: 4 tests/e2e files ONLY, zero production code. Correct root cause + fix — claude-code MiniMax BYOK slug must be BARE MiniMax-M2.7 (registry_gen.go:88), NOT colon minimax:MiniMax-M2.7 which the claude-code adapter cannot strip and which create-validation (internal#718) rightly 422s (real evidence: job 295075). Confirmed by the #2292 matrix test line 288 (colon→UNREGISTERED on claude-code BY DESIGN; colon only valid on openclaw/hermes). Only behavioral change is the slug (printf + POST body + 3 test pins) colon→bare; bestfail/gating/assertion-semantics untouched; comments rewritten accurately. Audit correctly caught a 2nd instance (test_priority_runtimes_e2e.sh) and correctly left slash/platform forms (peer_visibility minimax/, hermes openai/, google-adk bare) alone. bash -n + shellcheck clean; test_model_slug.sh 21/21. This makes the real-runtime provisioning guard FUNCTIONAL. Approving.
APPROVED after 5-axis review on current head
64fdfa6e77.Correctness: the change fixes the claude-code MiniMax BYOK slug from the colon form
minimax:MiniMax-M2.7to the registered bareMiniMax-M2.7, matching the documented runtime/provider matrix contract. The openclaw/hermes slash/colon behavior is not changed.Robustness: only four
tests/e2e/**files changed. No workflow files, nocontinue-on-error, no bestfail/gating/assertion-semantics changes. The tests and comments now align with create-validation behavior and the existing BYOK provider-routing matrix.Security: no production code, auth, or secret-handling changes. The diff only adjusts E2E model slug selection and explanatory diagnostics.
Performance: no runtime performance impact; test-only slug selection/comment update.
Readability: comments now clearly explain bare vs slash vs colon semantics for claude-code versus openclaw/hermes.
Required contexts are green: CI / all-required, E2E API Smoke Test, and Handlers Postgres Integration. I am not treating combined_state / non-required staging status as the merge gate.