# 150 — Complete Harry Potter demo collection

Date: 2026-10-13. D44 records Standa's explicit request to add every Harry Potter movie to both demo modes. The existing Philosopher's Stone fixtures remain unchanged; seven movies were added. All work below is local and unpublished.

## Delivered scope

| ID | Movie | Year | TMDb ID |
|---|---|---|---|
| harry-potter-1 | Philosopher's Stone — existing fixtures preserved | 2001 | 671 |
| harry-potter-2 | Chamber of Secrets | 2002 | 672 |
| harry-potter-3 | Prisoner of Azkaban | 2004 | 673 |
| harry-potter-4 | Goblet of Fire | 2005 | 674 |
| harry-potter-5 | Order of the Phoenix | 2007 | 675 |
| harry-potter-6 | Half-Blood Prince | 2009 | 767 |
| harry-potter-7 | Deathly Hallows – Part 1 | 2010 | 12444 |
| harry-potter-8 | Deathly Hallows – Part 2 | 2011 | 12445 |

- Seven additional `resources/demo/millionaire/titles/harry-potter-N.json` files each contain nine fixed questions, explanations and tips, following the existing easy/medium/hard sequence and length limits. Correct positions cover all A–D letters. Questions include plot and film credits, as in the existing Millionaire demos.
- Each new title has fixed `resources/demo/story/harry-potter-N/{easy,medium,hard}.json` packs with 10/15/20 questions, five chapter groups, concise narrator prose, false alternatives and the actual selected film endpoint. These are plot-only scenes, not presenter/trivia questions. All eight films provide 72 Millionaire questions and 24 Story packs / 360 scenes.
- Total catalog: 29 titles (18 movies, 11 series), 87 Story packs / 1305 scenes. The change adds 28 JSON files: seven quiz titles and 21 Story packs / 315 scenes.
- The existing catalog and Home demo row discover the files automatically; each new movie uses the same group rank 10 as the original first movie. The loader's existing sorted-filename/stable-sort behavior keeps all eight adjacent in release order without changing any original rank. Existing random demo selection includes them naturally.
- Names, release years, poster/backdrop paths and director/composer metadata were read once through the addon's existing TMDb metadata route for collection 1241 and its eight films. Only public fields were retained in `scripts/game_harness/out/harry-potter-demos/metadata.json`; no credentials or response headers were printed/saved. Existing first-movie artwork was preserved even where current TMDb data differs.
- Runtime sources, controllers, modal, design, localization, settings and AI prompts remain the existing implementations. There is no new collection picker, controller or runtime generator. Temporary authorship reused the existing serializer with a selected-ID filter so unrelated fixtures were never rewritten.

## Editorial checks and lessons

Reviewed all seven new 20-event outlines, selected 10/15 variants, endings and 63 new quiz questions for identity, film-only scope, chronology, answer meaning, ambiguity, duplicate wording and text lengths. Narration is original concise Czech prose; no source dialogue was copied.

- Neville supplies gillyweed in Goblet of Fire and discovers the Room of Requirement in Order of the Phoenix. Book-only Dobby substitutions are excluded.
- Goblet of Fire's Moody lesson precedes champion selection; Prisoner of Azkaban's Quidditch injury precedes the map/Hogsmeade sequence. The time-turner loop lets Harry cast the saving Patronus and enables Sirius's escape, rather than implying the whole trio flees together.
- Half-Blood Prince presents Slughorn's recruitment before Snape's vow, the young Riddle memory before keeper trials, and Sectumsempra before the Aragog/Felix sequence. General plot summaries can group threads differently: check the actual film presentation when order is uncertain.
- Deathly Hallows Part 1 ends with Dobby's death/burial and Voldemort taking the Elder Wand. Part 2 preserves its opening recap and ends with the nineteen-years-later station scene. It uses the film's Goyle/Fiendfyre role and Harry breaking the Elder Wand; book endings and later events are not silently substituted.

Read-only references used for uncertain details/collection context:

- [Official Harry Potter film collection](https://www.harrypotter.com/discover/films), [TMDb collection 1241](https://www.themoviedb.org/collection/1241-harry-potter-collection).
- Aired film transcripts for [Prisoner of Azkaban](https://www.springfieldspringfield.co.uk/movie_script.php?movie=harry-potter-and-the-prisoner-of-azkaban), [Goblet of Fire](https://www.springfieldspringfield.co.uk/movie_script.php?movie=harry-potter-and-the-goblet-of-fire), [Half-Blood Prince](https://www.springfieldspringfield.co.uk/movie_script.php?movie=harry-potter-and-the-half-blood-prince); used to check ordering, not copy narration.
- Movie-specific checks for [Goblet of Fire](https://en.wikipedia.org/wiki/Harry_Potter_and_the_Goblet_of_Fire_(film)), [Order of the Phoenix](https://en.wikipedia.org/wiki/Harry_Potter_and_the_Order_of_the_Phoenix_(film)), [Part 1 endpoint](https://www.imdb.com/title/tt0926084/faq/), [Part 2 ending](https://en.wikipedia.org/wiki/Harry_Potter_and_the_Deathly_Hallows_%E2%80%93_Part_2). Runtime plot generation still has no online grounding.

## Targeted offline evidence

| Command | Result |
|---|---|
| `python3 tests/test_millionaire_demo.py` | PASS, 33 tests; 29 titles, collection identity/order, full games/replay/lifelines, all Home rows and source wiring |
| `python3 tests/test_story_demo_catalog.py` | PASS, 8 tests; 87 strict packs, 261 pure terminal scenarios, all 87 real shared-modal wins/replays/source round-trips; socket/AI/TTS calls prohibited |
| `python3 tests/test_story_game.py` | PASS, 16 existing Story checks |
| `python3 tests/test_millionaire_entry.py` | PASS, 9 entry/caller checks |
| `python3 tests/test_millionaire_golden.py` | PASS, one existing headless golden scenario test; recorded goldens unchanged |

Every new title was additionally played headlessly through the existing CLI/probe in both modes. Millionaire completed all nine questions with rules and all three lifelines; Story rotated easy/medium/hard and verified two-error wins and final-third-error losses. Commands use:

```bash
python3 scripts/game_harness/game.py run --demo harry-potter-N --mode millionaire --rules --lifelines 5050:3,tip:5,audience:7 --quiet --out scripts/game_harness/out/harry-potter-demos/harry-potter-N-millionaire
python3 scripts/game_harness/game.py run --demo harry-potter-N --mode story --difficulty LEVEL --mistakes ERRORS --quiet --out scripts/game_harness/out/harry-potter-demos/harry-potter-N-story
```

Use N=2–8; exact levels/errors and outcomes are stored with each run. All 14 games completed with expected outcomes. Three Millionaire reports (3/7/8) retain a `text_fit` warning: the existing shared moderator welcome plus rules estimates eight lines versus seven without scrolling. Existing intro autoscroll is the designed fallback. No template/title/geometry was changed to hide this warning; no fresh GUI measurement was authorized or claimed. All questions, answer choices, explanations and Story text pass their contracts. Existing ResourceWarnings from test file reads remain unrelated.

Baseline SHA-256 comparison preserves all 90 pre-change JSON files, including the complete first Harry Potter demos, all other Story variants, episode manifest and original Millionaire moderator/title data. Evidence lives under `scripts/game_harness/out/harry-potter-demos/`: `baseline-sha256.json`, `metadata.json`, `verification.json` and fourteen run folders with summaries/reports/traces. Automatic structure/play evidence and manual editorial review remain separate.

## Handoff

Completed: data, existing catalog/row integration, targeted checks and documentation. Pending only a separately requested deploy or user playtesting. Latest published addon/skin remain 2.1.65 / 1.3.52; all previous optimization/catalog work and this expansion remain unpublished. Do not infer deployment approval from D44. On a deploy request run only `python3 scripts/release.py publish`; no manual bump, upload or commit. Preserve unrelated dirty work and original JSON/goldens. No paid LLM/TTS calls, GUI/browser/device test or new production runtime dependency was added for this task.
