Skip to content

fix(cockpit): accept the platform slash collapse for the consecutive-slash raw canary - #987

Merged
blove merged 1 commit into
mainfrom
blove/cockpit-smoke-slash-collapse
Sep 3, 2026
Merged

fix(cockpit): accept the platform slash collapse for the consecutive-slash raw canary#987
blove merged 1 commit into
mainfrom
blove/cockpit-smoke-slash-collapse

Conversation

@blove

@blove blove commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Why

VERCEL_COCKPIT_AUTOMATION_BYPASS_SECRET now exists (Protection Bypass for Automation enabled on threadplane-cockpit, value stored as the repository secret). With it, the 399-case preview smoke ran against the immutable cockpit artifact for the first time and stopped on its first raw canary:

[preview] raw malformed 1: //langgraph/core-capabilities/streaming/overview/python: expected 404, received 308.

Vercel's CDN collapses consecutive slashes and answers 308 to the single-slash path on the same origin before any route, rewrite, or function runs, and there is no setting to disable it (Vercel redirects, vercel/vercel#3086). The 404 route in vercel.cockpit.json therefore never sees a // request. It does reject the other seven raw targets; all verified live against the artifact.

The "WAF Raw Path prerequisite" the failure hint named does not exist anywhere in the repo or in Vercel.

Ninth push-only failure path in this arc.

Change

  • The consecutive-slash canary accepts exactly one non-404 answer: a 308 whose Location (the platform sends it relative) resolves to the same-origin single-slash path. A redirect off the deployment from a malformed path, or a normalization of any other raw target, is still a contract failure.
  • The hint names the real prerequisite: the vercel.cockpit.json 404 route must keep preceding framework routing.

Verification

  • deploy-smoke.spec.ts + vercel-config.spec.ts: 15/15, including the accepted relative and absolute same-origin forms, rejection of a website-bound // redirect, and rejection of a normalized /./ probe.
  • Live, with the bypass, against the artifact from run 33774078492's predecessor: pass:preview:https://threadplane-cockpit-e44mjjj5q-cacheplane.vercel.app:399.
  • Dry-run unchanged: 399 cases. Cockpit lint: 0 errors.

🤖 Generated with Claude Code

…slash raw canary

With the cockpit bypass secret in place, the exhaustive preview smoke ran
against the immutable artifact for the first time and stopped on its first
raw canary:

    [preview] raw malformed 1: //langgraph/...: expected 404, received 308.

Vercel's CDN collapses consecutive slashes and answers 308 to the
single-slash path on the same origin before any route, rewrite, or function
runs, and there is no setting to turn that off. The 404 route in
vercel.cockpit.json therefore never sees a `//` request; it does reject the
other seven raw targets, all verified live. The "WAF Raw Path prerequisite"
the hint named does not exist.

The consecutive-slash canary now accepts exactly one non-404 answer: a 308
whose Location resolves to the same-origin single-slash path. A redirect
off the deployment from a malformed path, or a normalization of any other
raw target, is still a contract failure. The hint now points at the real
prerequisite, the vercel.cockpit.json route.

Verified live with the bypass: pass:preview:<immutable artifact>:399.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@vercel

vercel Bot commented Sep 3, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
threadplane Ready Ready Preview Sep 3, 2026 4:05pm UTC

Request Review

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated approval: this PR received an intelligent (AI) code review. See the review comments on this PR.

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Claude finished @blove's task in 0s —— View job


I'll analyze this and get back to you.

@blove
blove merged commit e643849 into main Sep 3, 2026
32 checks passed
@blove
blove deleted the blove/cockpit-smoke-slash-collapse branch September 3, 2026 18:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant