Repository navigation
Polish the prep modes (T8: MD-04, MD-06–12, MD-14, VS-04, AX-05, AX-06) - #211
Merged
Merged
Conversation
…5, AX-06) - Start debate: motion counter on the shared 1,200 limit, and a Creating… spinner that keeps one click to one create. - Generate: offers Any role and takes the debate's role with its motion. - Context line: "Using 7 of 14 sources (7 didn't fit)" instead of a separate left-out line; results show Saved to History once saved. - PDF export: one Case Structure heading, no repeated Framework label. - Brainstorm and Factoids: Clipboard and Save to History. - Sparring: each turn waits on a ready step before the clock runs, labelled and locale-formatted word counts, no nested main. - Attack: a critique left over from a failed or refused rerun is labelled as the previous argument's. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Home rendered "No current debate" while the debate list was still on its way from the server, so a debate just created elsewhere seemed to vanish for a few seconds. It now shows a loading card until the list arrives. A failed load sets loadFailed, which brings back the empty state and its Start debate button instead of loading forever. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… choice) With no Current Debate, Generate creates a debate for its motion and says so in a toast, instead of opening "Start a debate with this motion?". The strip offers Use once beside Start debate, so a one-off run is still a choice. A second submit while the debate is being created does nothing, and a failed create falls back to the dialog. Other tools keep the dialog. Adam to confirm. This commit holds the whole change, including tests, recipes, docs and the production canary, so it reverts alone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
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 9 minutes. View limit details
Note 🎁 Summarized by CodeRabbit Free
Comment |
MD-10 (start a debate on the first Generate instead of asking) is a design choice for Adam. It moves to its own follow-up PR so the rest of T8 can ship. The tree now matches 9f6c75b.
This was referenced Oct 23, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
MD-10 is not in this PR any more. Commit 91a6a5c reverts e8fb46d (a normal revert commit; the tree matches 9f6c75b). MD-10 is Adam's design call, so it moves to follow-up draft PR #212 for him to decide on. The MD-10 notes below describe that follow-up, not this merge.
Ship gate re-run on 91a6a5c (main b0b2ae7), 23 Oct 2026 ~05:05 CEST: full
npm run verifyexit 0 (79 unit files, 30 collaboration, 457 edge, check-site 48 pages, test:sw, 43/43 e2e smoke). Recipes, desktop-chromium + mobile-chromium: practice 5+5, ai-tools (incl. Ask) 7+7, voice-rounds (spoken Sparring and Crossfire) 2+2, current-debate 3+3, case-generation 9+9, model-defaults 3+3, workspace-autosave (--collab) 2+2. axe 4.14 on /app/generate, /app/ask, /app/crossfire, /app/sparring: color-contrast only (1 node desktop, 0 at mobile), one<main>.Then synced with main 5ea2275 (#210; only the locale files overlap, merged cleanly) as 4533132. Full
npm run verifyexit 0 again (80 unit files, 30 collaboration, 457 edge, check-site 48, 43/43 e2e).Fixes the Low and Nit issues in the prep modes from the 22 Oct QA report (batch T8). Built on T5 (#201), T7 (#203), T2 (#202), #204, T9 (#206) and T4 (#207). Charging, refunds, quota pre-checks and the "This session uses 1 AI use" copy are unchanged.
Three commits. MD-10 is the last one on purpose: it is a design choice for Adam and reverts alone (
git revert e8fb46d0;git show e8fb46d0 | git apply -R --checkpasses). VS-04 is its own commit too.No migrations. No Edge Function changes, so nothing to deploy.
Issues
MD-06, Start debate's "Any role" turned into R1 in Generate. Generate now offers "Any role" (
general, which the schema and theaifunction already accept), and takes the debate's role when it fills in the debate's motion. Driving the real app found a bug in that path. Radix's hidden native select reported''when the role was set on first render. That wiped the role, and Generate then silently refused to submit inside any debate.OptionSelectnow ignores empty values. Test:src/test/generate/generate-form-role.test.tsx, which fails without the fix.MD-07, "Using 7 sources" next to "7 items left out".
_one/_otherkeys in EN, ES and HU. Test indebate-context.test.tsx.MD-08, the PDF repeated "Framework". The case PDF has one "Case Structure" heading, with Thesis, Framework and Burden of Proof labels under it. DOCX and the clipboard text are unchanged.
MD-09, motion cap. The QA build already had
maxLength; the counter and the shared constant were missing.MAX_MOTION_LENGTH(1,200) now lives inpackages/core/src/validation/motion.ts. The debate store, the Sparring schema, Start debate, Sparring setup and Generate's motion field all use it.MD-14, no feedback for 4–5 s on Start debate. The button is disabled and shows a spinner with "Creating…" (EN, ES, HU). That covers the header dialog, the inactive-debate gate and the motion dialog. A ref guard keeps one click to one create.
MD-11, Brainstorm and Factoids had no Copy or Save. Both now have Clipboard (a plain-text version of what the view shows) and Save to History, built from the same components as Generate. Export was already there.
MD-12, Sparring's clock started at once, and the word count had no label.
src/test/sparring/sparring-round.test.tsx, plus the reworked voice-round tests.MD-04, Attack kept the old critique after a blocked retry. When a rerun for changed text fails or is refused, the critique on screen gets the label "Critique of your previous argument". The label is tied to that exact critique. It goes away after a successful run, or after a later run on the critiqued text again.
VS-04, "No current debate" flashed on /app. I could not reproduce the flash on the local stack, on main or on this branch. A reload samples the persisted debate at once on both builds. So this is a safeguard, not a reproduced fix:
loadFailed, which brings back the empty state and Start debate instead of an endless skeleton. Test indebate-gates.test.tsx.MD-10 (design choice: Adam to confirm), the first Generate interrupted with "Start a debate with this motion?".
.verify/artifacts/20261023T022629Z-t8-manual/desktop-chromium/…/main-en-generate-first-submit.png(the dialog) and.verify/artifacts/20261023T022422Z-t8-manual/desktop-chromium/…/branch-en-generate-first-submit.png(the toast, with the case filed in the new debate). The CLI can't attach images to a PR, so they are in the thread instead.AX-05, Ask message box. Already fixed on main: the input has
aria-label="Message to your debate coach". It was present in QA build d749051 (added in #184). The Ask tests now find it by role and name, so they fail if the name is lost.AX-06, Sparring nested
<main>. It is now<section aria-label="Current round">, and nothing stylesmaininside the round. Crossfire already has its<h1>("Crossfire", then h2 "Set up your crossfire"). Neither Crossfire nor Sparring skips a heading level, before or after.axe 4.14 on the local stack (violation nodes, main b0b2ae7 → this branch)
The first number in each pair is desktop, the second is 375 px.
landmark-no-duplicate-main,landmark-main-is-top-levelandlandmark-unique;<main>count 2 → 1.color-contrast. It is the same on both builds and belongs to T10.Verification
Full
npm run verifyat the final head e8fb46d (local; GitHub Actions minutes are used up): exit 0./toolspages ine2e/free-tools.spec.tsthat timed out on their first heading while another worktree's stack was running. This branch doesn't touch them, and they passed in the four earlier verify runs on this branch.Recipes with
verify-debatelab(fake provider), desktop-chromium and mobile-chromium, all passing:--collab): 2 + 2The recipes ran on 1924ba4a, and ai-tools on e8fb46d. Between those two heads, only T9 and T4 from main and one GeneratePage conflict resolution changed.
Real app at desktop and 375 px, checked in screenshots:
I did not get a Factoids toolbar screenshot (my temporary script's selector missed the claim field), though ai-tools ran Factoids itself on both projects.
Review rounds
Each round was one fresh-context Claude Opus subagent reading the full diff.
Round 1: 2 Medium, 5 Low, 3 Nit. Both Mediums are fixed and tested:
Of the Lows and Nits:
maxLength.Round 2: no Medium or higher. Fixed:
Left as is: a critique opened from History is labelled "previous argument" if a later edited run fails. The description line under it stays accurate.
Needs a manual check
🤖 Generated with Claude Code