fix(e2e): saas workflow E2E_MODEL_SLUG default must be bare MiniMax-M2.7 not colon (the override #2311 missed) #2312
Reference in New Issue
Block a user
Delete Branch "fix/e2e-saas-model-slug-bare"
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?
Problem
The
e2e-staging-saasregression guard fails at parent workspace-create with HTTP 422:Real failure: job 295233, main
4b3590e3.Why #2311 didn't fix it
PR #2311 fixed the bare-vs-colon slug in
tests/e2e/lib/model_slug.sh. Butpick_model_slug()returns$E2E_MODEL_SLUGverbatim when that env var is set+non-empty — and this workflow setsE2E_MODEL_SLUGto the colon form. The workflow env overrides the lib #2311 fixed, so the saas guard kept sendingminimax:MiniMax-M2.7and 422ing.The fix
In
.gitea/workflows/e2e-staging-saas.yml, change the default fallback of theE2E_MODEL_SLUGexpression from the colon form'minimax:MiniMax-M2.7'to the bare registered form'MiniMax-M2.7'. Per-runtime overrides (hermes / codex / google-adk) are left exactly as-is.MiniMax-M2.7is the BYOK-minimax form —registry_gen.go:88registers it on theminimaxarm (resolvesprovider=minimaxviaMINIMAX_API_KEY), so the #1994 byok-not-platform guard still passes.minimax:MiniMax-M2.7is UNREGISTERED on claude-code — the adapter can't strip theminimax:prefix (derive_provider_matrix_test.go:288, theexpectErr=truerow).minimax/MiniMax-M2.7is the platform-billed arm (would trip the byok guard).The stale comment block (claiming the colon form is needed / that bare 400s on deploy-skew) is corrected.
Audit of all workflows for the same colon-on-claude-code mismatch
E2E_MODEL_SLUGdefaulte2e-staging-saas.ymlminimax:MiniMax-M2.7→MiniMax-M2.7e2e-staging-reconciler.ymlMiniMax-M2staging-smoke.ymlMiniMax-M2continuous-synth-e2e.ymlgrep -rn 'minimax:' .gitea/workflows/matched onlye2e-staging-saas.yml(the literal + its comment). No other workflow has the colon-on-claude-code default.Scope / verification
.gitea/workflows/e2e-staging-saas.yml), model-slug literal + comment only. Zero production.go, zero registry/providers.yaml, zero test-script logic. No change to continue-on-error, triggers, timeouts, concurrency.python3 -c 'yaml.safe_load(...)'→ OK..gitea/scripts/lint-workflow-yaml.py) →57 workflow file(s) checked, no fatal Gitea-1.22.6-hostile shapes. (0 heuristic warning(s)), exit 0. The${{ }}expression keeps its single-expression&& / ||chain shape — only the final string literal changed.🤖 Generated with Claude Code
APPROVED (CTO review). Verified diff: ONLY .gitea/workflows/e2e-staging-saas.yml; the single non-comment change is the E2E_MODEL_SLUG default literal minimax:MiniMax-M2.7 (colon) → MiniMax-M2.7 (bare). This is the override that #2311 missed — E2E_MODEL_SLUG (workflow env) wins over the pick_model_slug lib, so the saas guard kept sending the colon form and 422ing UNREGISTERED_MODEL_FOR_RUNTIME on claude-code (real evidence job 295233). Bare is registered (registry_gen.go:88); colon is intentionally UNREGISTERED on claude-code (matrix test :288). hermes/codex/google-adk per-runtime overrides preserved; no triggers/timeouts/concurrency/continue-on-error change. Audit confirmed saas was the only colon offender (reconciler/smoke/synth use bare). YAML hostile-shapes lint exit 0. Approving.
APPROVED after 5-axis review on current head
2efeb6a1bb.Correctness: this fixes the workflow-level
E2E_MODEL_SLUGoverride from the claude-code-invalid colon formminimax:MiniMax-M2.7to the registered bareMiniMax-M2.7, so #2311's model_slug lib fix is no longer bypassed by the workflow env default.Robustness: only
.gitea/workflows/e2e-staging-saas.ymlchanged. The hermes/codex overrides remainopenai/gpt-4o, google-adk remainsgoogle_genai:gemini-2.5-pro, and no trigger/concurrency/continue-on-error/gating semantics changed. Required contexts are green: CI / all-required, E2E API Smoke Test, and Handlers Postgres Integration.Security: no production code, auth, or secret handling changes.
Performance: no runtime performance impact; workflow env default/comment only.
Readability: the updated comment clearly documents bare-vs-colon-vs-slash semantics and why this workflow must match the provider registry contract. I am not treating combined_state/non-required lint or review ceremony statuses as the merge gate.