Repository navigation
feat(verify): verify-debatelab skill for driving the real app - #87
Conversation
Adds a project skill that runs the full local stack (Supabase, Edge Functions, fake OpenRouter, Vite in local-preview mode) as a long-lived instance, with doctor, Playwright recipes that capture evidence, and a seeded feature map. Tracks .claude/skills in git and ignores .verify/. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
`verify.sh up --live` turns the fake provider into a capped recording proxy to real OpenRouter. It pins every chat call to meta/muse-spark-1.3-contributor and gives Edge Functions a real Exa key. The keys come from ~/.config/debatelab/live-verify.env. Recipes now assert response structure instead of fake text, so the same recipes run in both modes. They cover case generation, research, export, AI tools, sparring, crossfire, the library, email sign-in, account settings, flowcharts, the timer, and promo codes. `drive` also runs the maintained full-stack and workspace specs. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
AGENTS.md now says when to use `verify.sh up --live`, where the keys live, what a run costs, and what neither mode can prove. The library recipe checks only the sources it added, because live research can save the web sources it finds. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Main now files every result in a Current Debate (#72, #75) and asks before running a tool on a motion with no debate or a different one (#82). The recipes timed out behind that dialog, found Add Source disabled, and hit the header's "Start debate" with a loose "Start" match. - timer-run matches the Start button exactly. - brainstorm-run, bill-promo, spar-round and both Crossfire recipes answer the motion dialog with chooseForMotion, as e2e/full-stack does. - gen-*, lib-* start a debate from the header first with startDebate. - gen-create now proves the case is filed in its debate without a Save click (Save no longer exists inside a debate) and reopens from History on a fresh device. gen-save covers the one-off Save path. - New row checks: brainstorms, cases, sources, sparring_sessions and crossfires point at the debate they were made in. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Three recipes and feature files for features main shipped since the skill was written. Each mirrors its maintained e2e/full-stack spec but reads model text from the ai response, so it passes in fake and live mode. - current-debate: start, the first-debate offer, the different-motion "use once" choice, sources and results scoped per debate, switching, and starting the first debate from the onboarding tour. - voice-rounds: spoken Sparring and Crossfire on the browser voice with no ElevenLabs key, including the wait for the opponent to finish. - account-data: Download my data and Delete account, each proven against a bystander. Deletion asserts it targets the recipe's own demo user. fixtures.ts re-exports the scripted speech helpers. The feature index lists the new files and the testid exceptions. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- SKILL.md explains the Current Debate and the motion dialogs for scripted and interactive runs, names the new fixture helpers, and says what the first tour step offers. - Selector guidance lists the testid exceptions and the exact-match rule. - URL import fetches pages directly in both modes, so it is no longer listed as live-only. ElevenLabs audio and real Stripe cancellation are listed as unprovable. - The 18081 note no longer claims it is the only allowed local origin. - Existing feature files describe starting a debate first, the dialogs, the debate rows, and the one-off History view. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
URL import goes through import-source, which fetches the page itself with no Exa key, so it behaves the same in fake and live mode. Also point to the Current Debate helpers and name ElevenLabs audio and real Stripe cancellation as unprovable locally. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A change that breaks a verify-debatelab recipe or makes the skill stale must update the recipes, feature map, and SKILL.md in the same PR and run the touched recipes on both Chromium projects. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Warning Review limit reachedEnable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. Next included review available in 59 minutes. View limit detailsLimit details: You’ve used the included review currently available. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Free Run ID: 📒 Files selected for processing (29)
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 |
Adds
.claude/skills/verify-debatelab/, a project skill that runs the real DebateLab app locally and keeps evidence that a feature works. It runs the React client, local Supabase Auth, Postgres and Edge Functions, signs in throwaway demo users, and drives features through Playwright.bin/verify.sh, with the commandsup,doctor,drive,useranddown.--live: real OpenRouter pinned tometa/muse-spark-1.3-contributorand real Exa, capped at 400 upstream calls.AGENTS.md:SKILL.mdin the same PR.fake-openrouter.mjs:fake.failnow also works in live mode, the reply's realmodelis recorded, and there is a new/__statsendpoint. The fake-mode path is unchanged.Verification, local and in fake mode:
drive recipes/passes on both desktop and mobile Chromium, 29 of 29 each.up,doctor,drive recipes/voice-rounds(2 of 2), thendown. Containers, the lock and the ports were released, and the evidence survived.eslint,typecheckanddocs:checkpass.🤖 Generated with Claude Code