Skip to content

Add /debate-case-example: three real, unedited DebateOwl cases - #304

Merged
Programcode merged 4 commits into
mainfrom
t3/debate-case-example-page
Nov 3, 2026
Merged

Programcode merged 4 commits into
mainfrom
t3/debate-case-example-page

Conversation

@Programcode

@Programcode Programcode commented Nov 3, 2026 •

Copy link
Copy Markdown
Owner

Adds /debate-case-example: three real DebateOwl cases, generated through the product's own Generate tool and shown without edits apart from formatting. Draft, for Adam to review. Do not merge.

What's on the page

  • Title AI Debate Case Example: Real DebateOwl Output | DebateOwl, H1 What does an AI-written debate case look like?. The first <p> in <main> is the 59-word answer box.
  • Three samples. Each is labelled with the format setting the case was generated under, using the product's own names, plus the 4-6-6-3 structure the product actually writes:
    1. British Parliamentary, English, for "This House would lower the voting age to 16"
    2. Policy, English, against "Resolved: The United States federal government should substantially increase its investment in high-speed rail"
    3. Classroom, Hungarian, for "Ez a Ház betiltaná a házi feladatot az általános iskolákban"
  • Each sample shows the R1 in full (opening, 3 arguments, "If they say… we answer…", closing line, sources). The R2 sits in a <details> block: 2 backing-up paragraphs and 12 answers. All of it is in the static HTML.
  • The page names the model (Claude Sonnet 5.5, anthropic/claude-sonnet-5.5, the Pro default) and the generation date and time. It also covers how the cases were made, the one failed attempt, and the single difference from production (below).
  • The only format claim: "For cases, DebateOwl currently supports the British Parliamentary, Policy and Classroom format settings", followed by the 4-6-6-3 speaker structure. The page never says Public Forum, World Schools or WSDC, and the generator now fails if it does.
  • Pricing uses the site sentence: no free plan, 3-day trial, then $5/month, with the free tools linked. The CTA "Generate a case for your own motion" goes to /. The page makes no claims about other tools.
  • JSON-LD: Article (about → /#software, hasPart → the samples), one CreativeWork per sample (creator → /#software), FAQPage with "Can AI write a debate case?" and "What should an AI debate case include?", and BreadcrumbList.
  • Linked from /ai-debate-case-generator and /how-to-write-a-debate-case ("See a real example") and from the homepage guide hub (Skills guides). Listed in llms.txt under Main pages and in llms-full.txt. The sitemap picks it up with lastmod 2026-11-03.

I used the guide hub rather than the homepage FAQ: the FAQ question there is "What does a DebateOwl case include?", and its answer is shared text in three languages.

How the cases were generated

  • A new opt-in recipe, .claude/skills/verify-debatelab/recipes/case-examples.spec.ts, ran on the local verify-debatelab stack in live mode (VERIFY_LIVE_MODEL=anthropic/claude-sonnet-5.5). For each sample it signs in a demo user, starts a debate with the motion and the Format setting, generates R1, then generates R2 in the same debate. It skips unless CASE_EXAMPLES is set, so drive all never spends money on it.
  • Real OpenRouter, real Exa, existing keys from ~/.config/debatelab/live-verify.env. No new secret, no production project, no production rows. 44 upstream calls, against a cap of 120.
  • Raw output is in scripts/case-examples/*.json: the request body, the full ai response, the model that served every call, and the ai_requests and cases rows. scripts/case-examples/README.md explains how to reproduce them. scripts/seo_case_example.py renders the page from those files, and the generator exits if a raw file's model, role, language or format doesn't match the page's label.
  • Verified in the raw records: every generate call was served by anthropic/claude-sonnet-5.5; the debate's Format: bp|policy|classroom reached the prompt (the Generate request itself still sends format: custom; format comes from the debate setting); and every R2 part had the R1 case in its debate context.
  • One difference from production: the proxy pins every chat call, so the research-query step ran on Sonnet 5.5 instead of production's Haiku 5.5. Jev source ranking used Jev's own model, as in production. The page says this.

Finding: one product error during the run

The first Hungarian R2 failed in the Edge Function with Generate response is missing metadata and cannot satisfy the requested output shape. (supabase/functions/_shared/control-enforcement.ts:150). I reran the Hungarian sample from the start and it passed. Nothing else was rerun. A student would see "Generation failed" with Retry. This PR doesn't fix it; it probably deserves its own issue.

Evidence links (checked 3 November 2026)

22 of 31 return 200. 9 return 403 behind a Cloudflare or Akamai bot check for every automated client I tried (Python, headless Chromium, Camofox). Those aren't counted as passes. The Edge Function drops any link its own research didn't return, so each of the 9 was an Exa result at generation time. Please open them in a normal browser.

Sample Status Link
bp-en 403 (bot check) https://lordslibrary.parliament.uk/votes-at-16/
bp-en 200 https://electoral-reform.org.uk/latest-news-and-research/parliamentary-briefings/briefing-on-votes-at-16-2026/
bp-en 200 https://www.jrrt.org.uk/wp-content/uploads/2025/01/Votes-at-16-report-FINAL.pdf
bp-en replaced → 200 tandfonline.com/…/17457289.2025.2560983 → https://preprints.apsanet.org/engage/apsa/article-details/6886c339728bf9025e8fa41a
bp-en 403 (bot check) https://committees.parliament.uk/writtenevidence/166167/pdf/
bp-en 200 https://national-policies.eacea.ec.europa.eu/youthwiki/chapters/austria/52-youth-participation-in-representative-democracy
bp-en 200 https://www.instituteforgovernment.org.uk/comment/lowering-voting-age-must-come-improved-education
bp-en 200 https://electoral-reform.org.uk/wp-content/uploads/2026/02/Briefing-on-Votes-at-16-2026.pdf
bp-en 403 (bot check) https://publications.parliament.uk/pa/cm5901/cmpublic/RepresentationPeople/memo/RPB19.htm
bp-en 200 https://www.theguardian.com/politics/2025/jul/17/lowering-voting-age-impact-uk-democracy-analysis
bp-en 403 (bot check) https://committees.parliament.uk/work/9680/modernising-elections/
classroom-hu 200 https://www.munkacsysuli.hu/_upload/editor/Dokumentumok/Javaslatcsomag-2.pdf
classroom-hu 200 https://hvg.hu/itthon/20260808_johetnek-a-35-perces-orak-es-a-kevesebb-hazi-az-also-tagozaton
classroom-hu 200 https://444.hu/2026/08/08/35-perces-tanorak-kevesebb-hazi-feladat-oraszam-atcsoportositas-mindennapos-meseolvasas-elkeszult-a-miniszterium-also-tagozatos-javaslatcsomagja
classroom-hu 200 https://nlc.hu/csalad/20240126/hazi-feladatok-betiltas-lengyelorszag/
classroom-hu 200 https://eduline.hu/kozoktatas/20240124_Mennyi-hazi-feladatot-adhatnak-fel-a-tanarok
classroom-hu 200 https://www.blikk.hu/aktualis/belfold/hazi-feladat-betiltas-magyarorszag-belugyminiszterium/ztb4r2p
classroom-hu 200 https://www.csaladinet.hu/hirek/gyerekneveles/iskolas/36840/kevesebb_hazi_feladat_hosszabb_szunetek_es_35_perces_orak_johetnek_az_also_tagozatban
classroom-hu 200 https://elhetomagyarorszag.hu/index.php/2026/08/08/35-perces-tanora-hazi-feladat-korlatozas/
policy-en 403 (bot check) https://www.transportation.gov/briefing-room/trumps-transportation-secretary-sean-p-duffy-releases-report-exposing-no-viable-path
policy-en 200 https://www.bondbuyer.com/news/trump-administration-rescinds-4b-grant-for-california-train-to-nowhere
policy-en 200 https://grist.org/solutions/brightline-shows-people-want-more-trains-but-who-will-pay-for-them/
policy-en replaced → 200 commerce.senate.gov/…/2026.02.05 CHSRA Follow-Up Report….pdf → https://web.archive.org/web/20260811041844/https://www.commerce.senate.gov/wp-content/uploads/media/doc/2026.02.05%20CHSRA%20Follow-Up%20Report%20(Part%202%20of%20Acela%20Report).pdf
policy-en 200 https://www.congress.gov/crs_external_products/R/PDF/R48881/R48881.2.pdf
policy-en 403 (bot check) https://www.transportation.gov/briefing-room/trump-dividend-transportation-secretary-sean-p-duffy-announces-over-5-billion-get-0
policy-en 200 https://enotrans.org/eno-resources/looking-down-the-tracks-a-case-for-more-predictable-intercity-passenger-rail-funding/
policy-en 200 https://oversight.house.gov/release/chairman-comer-investigates-californias-high-speed-rail-boondoggle/
policy-en 403 (bot check) https://www.apta.com/wp-content/uploads/2026/02/APTA-TALKING-POINTS-Pass-Rail-Investment-09-08-2025.pdf
policy-en 200 https://www.bechtel.com/wp-content/uploads/2025/05/Bechtel_Rail-White-Paper_7-May-2025.pdf
policy-en 200 https://www.hsrail.org/blog/penn-station-and-the-two-paths-forward-for-american-trains-2/
policy-en 200 https://www.asce.org/advocacy/policy-statements/ps402---high-speed-and-intercity-passenger-rail

Replaced citations (follow-up commit)

Adam checked the 9 bot-walled links in a real browser. Seven load and two don't, and the page now replaces those two and says so under "Corrections after generation":

The raw JSON stays as generated. scripts/case-examples/corrections.json lists each replaced field with its raw value. The generator applies it and fails if a raw file no longer matches.

Brazil year (follow-up commit 7d1eb333): the same BP counter says 16-year-olds "have voted since 1984 in Nicaragua and Brazil". Per the cited paper and Brazil's 1988 constitution, it's Nicaragua since 1984 and Brazil since 1988. The generated wording stays, followed by an inline [correction: Brazil since 1988] marker that links to the page section, now called "Corrections after generation", where the correction is explained. corrections.json logs it as a marker entry, and the generator fails unless the marked words appear exactly once in the raw text.

I didn't check that each quoted figure appears on its source page. The page tells readers to check every source before a round. Per the no-edit rule, no evidence item was dropped or changed.

Checks

  • npm run verify at 7d1eb33 (and earlier at 1b94710 and 421f509): all 9 steps passed (docs, jargon, lint, build including check-site and check-links, sw-offline, typecheck, guards, edge, smoke).
  • Jargon guard: 0 hits on the new page. The case output has none of the guarded words.

🤖 Generated with Claude Code

The page shows a British Parliamentary and a Policy case in English and
a Classroom case in Hungarian, each an R1 and an R2 generated through
the Generate tool on the live verify stack with Claude Sonnet 5.5. The
raw output, with the request, serving model and database rows, is in
scripts/case-examples/, and the page renders from it unchanged.

The page names each sample by the format setting it was generated under
and the 4-6-6-3 structure the product writes. It links from the case
generator guide, the case-writing guide and the home page guide hub,
and is listed in llms.txt and llms-full.txt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Caution

Review failed

The pull request is closed.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

CodeRabbit Verify

  • Run CodeRabbit Verify to test the changes in this pull request.

Programcode and others added 2 commits November 3, 2026 17:45
Two sources in the generated cases do not load in a browser: the
tandfonline page for Levin (2025) stays behind a Cloudflare check, and
the Senate Commerce Committee's February 2026 report PDF answers Access
Denied. The page now links the author's APSA preprint of the same paper
and the Internet Archive's copy of the same report. The counter's source
line for Levin named the wrong journal, so it now names APSA Preprints.

The raw output stays as generated. scripts/case-examples/corrections.json
lists each replaced field with its raw value, the page applies it and
says which links were replaced and why, and the generator fails if a
raw file no longer matches a correction.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The first "If they say" answer in the British Parliamentary sample says
16-year-olds have voted "since 1984 in Nicaragua and Brazil". Brazil's
year is 1988, per the cited Levin paper and Brazil's 1988 constitution.

The page keeps the generated wording and adds "[correction: Brazil since
1988]" right after it, linked to the renamed "Corrections after
generation" list, which now explains this correction beside the two
replaced links. corrections.json gains marker entries: the generator
fails unless the words a marker follows appear exactly once in the raw
text and the marker reads "[correction: ...]".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Programcode
Programcode marked this pull request as ready for review November 3, 2026 17:59
Copilot AI balanced review requested due to automatic review settings November 3, 2026 17:59

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota. Try requesting a review at a lower effort level.

@Programcode
Programcode merged commit 966f2a1 into main Nov 3, 2026
2 of 3 checks passed
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.

2 participants