Skip to content

Commit bc00453

Browse files
bokelleyclaude
andauthored
ci(deploy): smoke accepts 403 (SDK v6 invalid-bearer status) (#3882)
First run of #3879's gate tripped on every per-tenant URL: SDK v6 returns 403 Forbidden for an invalid bearer where v5 returned 401. The smoke only accepted 200|401, so a misconfigured `secrets.PUBLIC_TEST_AGENT_TOKEN` false-failed the deploy even though all 7 tenants were healthy (verified out-of-band with the documented public token: 200 + correct tool count on every path). 200, 401, and 403 all prove the same thing — registry resolved, MCP route alive. The bug modes this gate protects against (404 / 5xx) are pre-auth and unaffected. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 3302c8c commit bc00453

2 files changed

Lines changed: 11 additions & 3 deletions

File tree

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
---
3+
4+
Hotfix for the deploy-smoke gate added in #3879. The first deploy that ran it tripped on every per-tenant URL: SDK v6's auth middleware returns `403 Forbidden` for an invalid bearer token (the gate's secret was misconfigured), where v5 returned `401 Unauthorized`. The smoke only accepted `200|401`, so all six per-tenant URLs failed and the deploy went red even though every tenant was healthy (verified out-of-band: 7/7 paths returned 200 with their expected tool counts using the documented public token).
5+
6+
Accepts `403` alongside `200` and `401`. All three mean "registry resolved, MCP route alive" — which is what this smoke is checking. The bug modes it protects against (`404 Tenant not registered`, `5xx` registry init failure) happen before auth and are unaffected.

.github/workflows/deploy.yml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,9 @@ jobs:
106106
)
107107
# Build curl args once. Omit the Authorization header when the secret
108108
# is unset so a strict-bearer-format server can't 400 us into a false
109-
# deploy failure — we accept 401 as healthy anyway.
109+
# deploy failure — we accept 401/403 as healthy anyway. (SDK v5 used
110+
# 401 for invalid bearer; v6 uses 403. Both mean the registry resolved
111+
# and the MCP route is alive, which is what this smoke is checking.)
110112
auth_args=()
111113
if [ -n "${PUBLIC_TEST_AGENT_TOKEN:-}" ]; then
112114
auth_args=(-H "Authorization: Bearer ${PUBLIC_TEST_AGENT_TOKEN}")
@@ -131,7 +133,7 @@ jobs:
131133
url="${base}${path}"
132134
code=$(probe "${url}")
133135
case "${code}" in
134-
200|401)
136+
200|401|403)
135137
echo "✅ ${path} → ${code}"
136138
continue
137139
;;
@@ -140,7 +142,7 @@ jobs:
140142
sleep 8
141143
code=$(probe "${url}")
142144
case "${code}" in
143-
200|401)
145+
200|401|403)
144146
echo "✅ ${path} → ${code} (after retry)"
145147
;;
146148
*)

0 commit comments

Comments
 (0)