Repository navigation
test(e2e): live provider journeys, production canary, and required checks - #68
Conversation
Live mode for the locked gate turns the fake provider into a recording proxy that pins every chat call to one cheap model (Muse Spark 1.3 Contributor by default) and caps provider calls, while Jev, Exa research, and URL import run for real. The specs assert response shape, rendered sources, database rows, and provider health rather than model wording. The production canary checks the live site, every deployed function's CORS, the ai auth guard, and one streamed answer as a dedicated capped account. Database and live jobs now pull Supabase images from ECR, because ghcr.io rate-limits shared runners. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Free Run ID: 📒 Files selected for processing (3)
🚧 Files skipped from review as they are similar to previous changes (1)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthroughThe pull request adds live-provider and model-matrix test paths, production canary checks, and full-stack journey coverage. It changes provider proxy behavior, Crossfire transcript requests, and AI request deadlines. New GitHub Actions workflows run the live-provider, model-matrix, and production canary suites. ChangesLive-provider journeys
Production canary
Crossfire transcript and Jev behavior
Full-stack journey coverage
AI request budget
Estimated code review effort: 4 (Complex) | ~60 minutes Note 🎁 Summarized by CodeRabbit FreeYour organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Essentials by visiting https://app.coderabbit.ai/settings/billing. Comment |
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
@coderabbitai review |
|
This comment has been minimized.
This comment has been minimized.
A 200 Ask stream can still end without its final event, and the Crossfire test passed even when no Jev signal decision ran. Assert both, and record the accepted risk that pull-request runs can read the live provider keys. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
@coderabbitai review |
|
|
@coderabbitai review |
|
|
@coderabbitai review |
✅ Action performedReview finished.
|
Once a Jev signal attached to an answer, every later Crossfire request resent the turn with a `signal` key, and the ai function rejected it as "transcript[1] is invalid". The live suite caught it. The fake provider now answers Jev so the credential-free gate exercises the same path. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- A promo code redeemed in Settings restores AI access for an expired account. - Signed Stripe webhooks grant and revoke Pro; forged and replayed ones change nothing. - Delete All My Data erases the account's rows and leaves another account's intact. - A generated case downloads as a real PDF and DOCX file. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The pinned live suite cannot see a production model that times out or returns invalid JSON. LIVE_MODEL=as-requested makes the proxy forward the model the Edge Function chose and runs e2e/model-matrix, which picks each catalog model in the Generate page and prints its provider latency. The workflow runs daily and on pull requests that touch AI code. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…e account cap Main can deploy more than the canary account's 10 AI requests a day, so deployment runs skip the AI checks; daily and manual runs make them. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
@coderabbitai review |
|
Deployment runs skip the AI requests to stay under the canary account's cap, so they now sign in, open Generate, and require Settings to show the account's Pro plan. That read goes through row-level security, so it fails on a broken session, and it spends no AI request. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude Opus 5 needs about 68 s to write a case, so every Opus case generation hit the 60 s provider timeout and returned 500. Each call now shares one 140 s request budget, which stays under Supabase's 150 s response limit. Research, the main call, and its JSON repair retry all use what is left. The model matrix reproduces the failure and proves the fix. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The post-generation Jev source-usage check shared the request budget, so a model that finished near the deadline could lose its completed case to a 500. The check now follows only the client's signal and its own 8 s Jev timeout, and the provider budget drops to 130 s to leave room for it under Supabase's 150 s limit. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
@coderabbitai review |
✅ Action performedReview finished.
|
|
@coderabbitai review |
|
|
@coderabbitai review |
|
|
@coderabbitai review |
|
|
@coderabbitai review |
✅ Action performedReview finished.
|
|
@coderabbitai review |
✅ Action performedReview finished.
|
Why
The full-stack gate from #67 fakes the model provider, so it can't catch real-provider breakage: a model that stops returning valid JSON or runs past a timeout, a research API change, or a production deploy with a missing function or a dead key. Some flows had no end-to-end test at all: billing, promo codes, data erasure, and exports.
What this adds
Live provider journeys (
e2e/live/,live-e2e.yml, run on PRs, nightly at 03:17 UTC, and on demand; a required check)LIVE_PROVIDERS=1 ./.superset/db-gate.shruns the local stack against real OpenRouter, Jev, and Exa. The fake provider becomes a recording proxy that pins chat calls toLIVE_MODEL(defaultmeta/muse-spark-1.3-contributor) and refuses calls past 200 per run.Model matrix (
e2e/model-matrix/,model-matrix.yml, run weekly, on demand, and on PRs that touch AI code)LIVE_MODEL=as-requestedforwards the model the Edge Function chose, and the spec generates one researched case with every model inMODEL_CATALOG, selected through the Generate page. The run log prints each model's provider latency.New full-stack journeys (credential-free gate, desktop and mobile)
Production canary (
e2e/production/,prod-canary.yml)aireturns 401 to unauthenticated calls.Crossfire bug fix (
src/lib/ai/client.ts)signalkey, and theaifunction rejected it astranscript[1] is invalid. The client now strips it. A unit test and the full-stack spec reproduce it. This is frontend-only, so Vercel ships it.Branch protection on
mainquality,database-tests,browser-tests, andlive-e2eare required.Evidence
workspace-collaboration.spec.ts.59487a7and949e918.What the live checks found
aifunction aborted provider calls at 60 s. Claude Sonnet 5 (the Pro default) took 55.9 s and DeepSeek V4 Pro 75.3 s in one run, so both fail intermittently too. fix(ai): let slow models use the time research leaves #69, stacked on this PR, gives every request one 140 s budget, under Supabase's 150 s response limit. With it, the matrix passes 9/10 models, including Opus 5 and DeepSeek V4 Pro.workspace-invitesisn't deployed to production. This is intentional while Workspaces are hidden. The canary excludes it.Until #69 merges, this PR's
model-matrixcheck fails on Claude Opus 5. That's the bug it exists to catch. It isn't a required check.Limits
live-e2eandmodel-matrixexpose the provider keys to branch code. Use low-limit keys.🤖 Generated with Claude Code
Summary by CodeRabbit
Final integration
provider.sortandprovider.order;require_parameters: truestill excludes endpoints that cannot honor the request parameters.No outstanding review finding blocks merging; the documented canary and key-exposure tradeoffs remain.
Summary
The PR adds live-provider journeys, a model matrix, full-stack tests, and a production canary. Deployment runs check the canary account's sign-in but leave live AI requests to daily and manual runs.
Reviews (10) · Last reviewed commit: "test(live): use balanced multi-provider ..."