From 2efeb6a1bb1583206c7c2344e76072e4e39ca7a5 Mon Sep 17 00:00:00 2001 From: core-devops Date: Fri, 5 Jun 2026 10:27:50 -0700 Subject: [PATCH] fix(e2e): saas workflow E2E_MODEL_SLUG default must be bare MiniMax-M2.7 not colon The e2e-staging-saas regression guard 422s at parent workspace-create with UNREGISTERED_MODEL_FOR_RUNTIME for model "minimax:MiniMax-M2.7" on runtime "claude-code" (internal#718; real failure job 295233, main 4b3590e3). PR #2311 fixed the bare-vs-colon slug in tests/e2e/lib/model_slug.sh, but the workflow env var E2E_MODEL_SLUG OVERRIDES the pick_model_slug lib (it returns $E2E_MODEL_SLUG verbatim when set), so the saas run kept sending the colon form. The claude-code adapter can't strip the `minimax:` prefix, so the colon id is UNREGISTERED (derive_provider_matrix_test.go:288). The bare registered id `MiniMax-M2.7` is the BYOK-minimax form (registry_gen.go:88, MINIMAX_API_KEY), which keeps the #1994 byok-not-platform guard passing. Swap the default fallback to the bare form and correct the stale comment. Per-runtime overrides (hermes/codex/google-adk) are unchanged. Test-infra-only: workflow file + comment, zero production/registry/test-script changes. Co-Authored-By: Claude Opus 4.8 (1M context) --- .gitea/workflows/e2e-staging-saas.yml | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/.gitea/workflows/e2e-staging-saas.yml b/.gitea/workflows/e2e-staging-saas.yml index f373d1286..041e446a5 100644 --- a/.gitea/workflows/e2e-staging-saas.yml +++ b/.gitea/workflows/e2e-staging-saas.yml @@ -178,15 +178,19 @@ jobs: # workflow_dispatch flow (no input wired here yet — runtime # override is enough for ad-hoc). # - # #2263 deploy-skew: the claude-code default is the COLON-namespaced BYOK - # id `minimax:MiniMax-M2.7`, NOT bare `MiniMax-M2`. The deployed staging - # ws-server's compiled registry can lag source; validateRegisteredModelForRuntime - # 400s the bare form on an older image (the sibling Platform Boot job, on - # the SAME image, succeeds with namespaced `moonshot/kimi-k2.6`). The colon - # form stays in the BYOK `minimax` arm (providers.yaml:851) so it resolves - # provider=minimax (BYOK) and the #1994 byok-not-platform guard still - # passes — the slash/platform form `minimax/MiniMax-M2.7` would not. - E2E_MODEL_SLUG: ${{ github.event.inputs.runtime == 'hermes' && 'openai/gpt-4o' || github.event.inputs.runtime == 'codex' && 'openai/gpt-4o' || github.event.inputs.runtime == 'google-adk' && 'google_genai:gemini-2.5-pro' || 'minimax:MiniMax-M2.7' }} + # claude-code MiniMax slug must be the BARE registered id `MiniMax-M2.7`. + # It is the BYOK-minimax form: registry_gen.go:88 registers it on the + # `minimax` arm (resolves provider=minimax via MINIMAX_API_KEY), so the + # #1994 byok-not-platform guard still passes. The COLON form + # `minimax:MiniMax-M2.7` is UNREGISTERED on claude-code (internal#718; + # derive_provider_matrix_test.go:288) — the claude-code adapter can't + # strip the `minimax:` prefix, so workspace-create 422s + # UNREGISTERED_MODEL_FOR_RUNTIME (real failure: job 295233, main 4b3590e3). + # The slash form `minimax/MiniMax-M2.7` is the platform-billed arm and + # would trip the byok guard. #2311 fixed the same colon-vs-bare bug in the + # pick_model_slug lib (tests/e2e/lib/model_slug.sh), but this env var + # OVERRIDES that lib, so the bare fix has to live here too. + E2E_MODEL_SLUG: ${{ github.event.inputs.runtime == 'hermes' && 'openai/gpt-4o' || github.event.inputs.runtime == 'codex' && 'openai/gpt-4o' || github.event.inputs.runtime == 'google-adk' && 'google_genai:gemini-2.5-pro' || 'MiniMax-M2.7' }} E2E_RUN_ID: "${{ github.run_id }}-${{ github.run_attempt }}" E2E_KEEP_ORG: ${{ github.event.inputs.keep_org && '1' || '0' }} # Lifecycle transitions (step 10b): pause→resume→online + -- 2.52.0