Repository navigation
First run starts with a debate - #82
Conversation
The tour now opens on the Current Debate card with a Start debate button, pauses while the create dialog is open, then points at Library and Generate. It scrolls targets clear of the sticky header. With no Current Debate, a motion-bearing tool no longer shows the switch dialog. It offers to start a debate from the typed motion, or to run it once. A brand-new account kept the server's default English after its first sign-in, even when the student had picked Hungarian. A settings row the client never saved now keeps the local language and stores it. Playwright covers the first run for a fresh account in English and Hungarian, credential-free and in the full-stack gate. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
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. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Free Run ID: 📒 Files selected for processing (16)
Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthroughThe first-run experience now includes settings preservation, a Current Debate onboarding step, and an offer to create a debate from a typed motion when no debate is current. English, Spanish, and Hungarian copy and tests cover these changes. ChangesFirst-run experience
Estimated code review effort: 3 (Moderate) | ~25 minutes Sequence Diagram(s)sequenceDiagram
actor User
participant useDebateMotionGate
participant Supabase
participant AIRequest
User->>useDebateMotionGate: Submit typed motion
useDebateMotionGate->>User: Offer to start a debate
User->>useDebateMotionGate: Accept the offer
useDebateMotionGate->>Supabase: Create debate for the motion
useDebateMotionGate->>AIRequest: Submit request with debate ID
Architecture SummaryArchitecture risk: 🔵 Low · up to The change affects 3 systems. Changed systems: Architecture concerns Review detailsSystems and components
Before / after behavior
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 |
|
@coderabbitai full review |
|
|
@coderabbitai full review |
|
|
@coderabbitai full review |
✅ Action performedFull review finished. |
Brings in #79 to #83 and #85. Conflict in .superset/db-gate.sh: both sides added a function to the readiness loop. The loop now waits for both `voice` and `account`. #82 replaced the "Which debate is this for?" dialog with the first-debate offer when no debate is current. e2e/voice-rounds.spec.ts still clicked the old button in two places, so it answers the new offer the way e2e/sparring.spec.ts does. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Item 13 of
plans/2026-10-01-next-15.md: the first run now starts with a debate.What changes
Tour. It opens on the Current Debate card with its own Start debate button, then shows Library and Generate. The old tour covered every tool and skipped Current Debate. The tour now has four steps. It pauses while the create dialog is open and continues on Library once the debate exists. Targets scroll clear of the sticky header; before this, the card ended up under the two-row header on mobile.
No Current Debate. A tool used to answer a submitted motion with the three-way "Which debate is this for?" dialog. Now it offers "Start a debate with this motion?" with Start debate or "Not now, use it once". If an existing debate has the same motion, the offer can still switch to it. The offer comes before the request because one-off results are never recorded. Offering afterwards would leave the first result outside the debate. Users who do have a Current Debate still get the mismatch dialog.
Language on first sign-in. The sign-up trigger creates
user_settingswithlanguage = 'en', and the first hydrate applied it. A student who picked Hungarian before signing up was switched to English, which made the Hungarian journey impossible. Only the client writesfeature_configs, so a row where it is{}has never been saved. For that row the client keeps its local language and output language and writes them back. Theme still comes from the server row as before; this PR leaves it alone.UI review. Fable reviewed screenshots on desktop and mobile, light and dark, in English and Hungarian. Changes from that review:
Tour copy for the dropped steps is removed from all three locales.
Tests
debate-gates.test.tsx,settings-store.test.ts).e2e/first-run.spec.ts: a credential-free fresh account in English and Hungarian, on desktop and mobile Chromium, with Supabase REST stubbed. This proves the client flow only.e2e/full-stack/first-run.spec.ts: the same journeys against real Auth, RLS and Edge Functions with a fresh demo-code account. It asserts the debate row, the current pointer,user_settings.language, and that the generated case is saved into the new debate.chooseForMotionine2e/full-stack/stack.tsaccepts the new offer, so the six existing full-stack specs that used the old dialog keep working.Verification
Local runs on
dc02f3b. These are not CI results.docs:check,lint,typecheck: pass.test:collaboration30 passed,test:edge270 passed,build,test:sw: pass.e2e/sparring.spec.tsstill clicking the old no-debate button. It is fixed indc02f3b, and the sparring, Factoids (flaky in that run) and first-run specs then passed, 96 of 96. The other 229 tests passed in the full run../.superset/db-gate.sh), local: pgTAP 345 PASS; Playwright 63 passed, 1 skipped. All eight first-run journeys (EN/HU × tour/offer × desktop/mobile) passed. Two earlier local attempts failed because another process on the shared VPS removed thedebatelab-fake-openroutercontainer mid-run; that is not related to this change.CI on
dc02f3b:quality,database-tests(the same full-stack gate on a clean runner, 15 minutes) andbrowser-testspass.live-e2efails: five of its live-provider tests fail the same way onmain(scheduled run at 10:07 UTC). Here Factoids also failed with a live provider status error. None of the live specs go through the motion dialog.🤖 Generated with Claude Code
Summary by CodeRabbit