Dev demo campaign: a full test campaign for reviewing as a player (#821) #822

Merged
claude-bot merged 28 commits from build/demo-seed into main 2026-09-26 02:09:39 +00:00
Collaborator

Closes nothing yet: #821 closes once the seed has been run on dev and checked.

What it is. webapp/backend/demo/ is a deterministic, re-runnable seed that puts one rich campaign on dev, so the owner can review the redesign against realistic data, as a player. It lives outside app/ and is excluded from the image (.dockerignore). It runs inside the backend container with the package mounted, and the command is in demo/README.md.

Two campaigns, in the prototype's fiction:

  • The Amberwake Accord. Dana Whitlock is the GM; the --member-user-id account plays Hollis Fenwright.
    • 21 played, hour-long sessions, all scripted and expanded to about an hour of transcript.
    • Session 23 is awaiting review, with star and wish open for the member.
    • Upcoming sessions in every state: a vote with a tie and clashes, pencilled in, confirmed, at risk, cancelled, and a series.
    • 106 wiki articles.
    • 34 loot items across five kinds, including custom ones; gold in gp and sp; XP; 29 quests, including rumoured ones.
    • Also: the shelf, NPCs, milestones, arcs, the storyline, notes with history, highlights, corrections, summary versions, and 19 notifications.
  • The Tuesday Tide. The member owns it and plays in it, which is the D93 check.
  • Sample content packs in demo/packs/: one good, one deliberately broken.

Safety:

  • It touches only its own invented users (demo-seed issuer, @demo.invalid) and the single member account. The member's own user row is never modified.
  • Nothing outbound. 14 tripwires (SMTP, the bot stream, Redis, Celery, httpx, urlopen) are armed for the whole run, and the test asserts zero attempts. Reminders and the at-risk check are pre-marked, so nothing fires afterwards either.
  • --reset gives identical ids. --dry-run rolls back.

The standing rule. The build plan's §7 gains a rule: a lane that adds or changes a feature extends this seed in the same series. The README's coverage table lists what isn't built yet, and which lane owns it (discussions and lines and veils in lane 7, the wiki's pieces in lane 8, and so on).

Tests.

  • tests/test_demo_seed.py: 6 passed, with all the content, on postgres 16.
  • ruff 0.4.4 is clean.
  • The content validator reports 106 articles and 21 scripts, all valid.
  • Phase 1 also ran it against an Alembic-built database: dry-run, commit, no-reset, --reset ×3.

🤖 Generated with Claude Code

Closes nothing yet: #821 closes once the seed has been run on dev and checked. **What it is.** `webapp/backend/demo/` is a deterministic, re-runnable seed that puts one rich campaign on dev, so the owner can review the redesign against realistic data, as a player. It lives outside `app/` and is excluded from the image (`.dockerignore`). It runs inside the backend container with the package mounted, and the command is in `demo/README.md`. **Two campaigns, in the prototype's fiction:** - **The Amberwake Accord.** Dana Whitlock is the GM; the `--member-user-id` account plays Hollis Fenwright. - 21 played, hour-long sessions, all scripted and expanded to about an hour of transcript. - Session 23 is awaiting review, with star and wish open for the member. - Upcoming sessions in every state: a vote with a tie and clashes, pencilled in, confirmed, at risk, cancelled, and a series. - 106 wiki articles. - 34 loot items across five kinds, including custom ones; gold in gp and sp; XP; 29 quests, including rumoured ones. - Also: the shelf, NPCs, milestones, arcs, the storyline, notes with history, highlights, corrections, summary versions, and 19 notifications. - **The Tuesday Tide.** The member owns it and plays in it, which is the D93 check. - **Sample content packs** in `demo/packs/`: one good, one deliberately broken. **Safety:** - It touches only its own invented users (`demo-seed` issuer, `@demo.invalid`) and the single member account. **The member's own user row is never modified.** - **Nothing outbound.** 14 tripwires (SMTP, the bot stream, Redis, Celery, httpx, urlopen) are armed for the whole run, and the test asserts zero attempts. Reminders and the at-risk check are pre-marked, so nothing fires afterwards either. - `--reset` gives identical ids. `--dry-run` rolls back. **The standing rule.** The build plan's §7 gains a rule: a lane that adds or changes a feature extends this seed in the same series. The README's coverage table lists what isn't built yet, and which lane owns it (discussions and lines and veils in lane 7, the wiki's pieces in lane 8, and so on). **Tests.** - `tests/test_demo_seed.py`: 6 passed, with all the content, on postgres 16. - ruff 0.4.4 is clean. - The content validator reports 106 articles and 21 scripts, all valid. - Phase 1 also ran it against an Alembic-built database: dry-run, commit, no-reset, `--reset` ×3. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The dev demo seed writes The Amberwake Accord and a small player-owned
campaign straight through the ORM, in foreign-key order, with every door out
of the process (SMTP, the bot stream and HTTP, Celery, httpx) tripwired.
Deterministic ids and relative dates; --reset rebuilds identically.
Excluded from every image by .dockerignore.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The writers' model files. Session 1 and 2 open the campaign; session 23 is
the one awaiting the GM's review, so the thin slice carries every review
state. Filler table talk only names what the story has introduced by then.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
BIBLE.md's session outlines and fixed list of 106 wiki articles are
generated from world.py (python -m demo.bible --write) and a test fails
when they go stale. CONTENT.md specifies both file types with worked
examples.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The README says how to run the seed on dev, what it touches and never
does, and what each feature has seeded or which lane will build it; the
build plan's working agreements gain the rule that a lane extends the
seed in the same series. ruff-formatted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Fills in the player-character pages for the Amberwake Accord demo seed:
Ossian, Wren, Bastian, Nix, Quill, Aldous, Idra, Keir and Hesper.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Mercy Adlam, Tamsin Reed, Sim Ashgrove, Halvard Crane, Garrow,
Petronella Vay, Berit Hollins, Orla Brennock and Ignatius Mott.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Wiki articles for the Amber Coast's places and factions: five settlements,
eight geography entries, three countries and eight organisations, matching
BIBLE.md and CONTENT.md's format.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The Tidewright, Sabine Roe, Ysolde Ferrant, Jory Callander, Ansel
Ruddock, Niamh Carrow, Brother Temperance, Dagny Holm and Wick.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Pike, tide-wraith, reed-stalker, fog-drinker, drowned sexton and
salt mephit, with PF2e-flavoured stat blocks. Reed-stalker and salt
mephit have not appeared in play yet, so they carry no sessions.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Writer content for the dev demo campaign: The Quiet Warehouse, Two
Weights One Scale, The Amberwake Accord, Marsh Hound and The Long
Manifest, matching BIBLE.md outlines and world.py attendance/loot/quests.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The six remaining businesses and four deities on the writer's slug list,
matching BIBLE.md and CONTENT.md's format. Also fixes a wiki link in
the-salt-signatories.md that used "The Tidewatch Company" instead of the
bible's exact title "Tidewatch Company", caught by the content loader.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Validator caught [[The bell-keepers]] instead of the exact listed
title [[The bell-keepers of Fogshore]].

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Coast Road through Kettlebridge Again: the surveyor patrols, Idra's
introduction and Aldous's retirement, the Gullrock ambush, the twelfth
landing's tide-gate, Odile's backdated warrant, and the ledger's
thirteenth mark.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The Assay of Names (the Tidewright's price) and Under the Sea Wall (the
drowned sextons, the Lantern of Low Water, and Mercy Adlam's name),
completing this writer's share of the session scripts (#821).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Writer content for the dev demo campaign: Nobody's Bridge, The
Assayer's Thumb, Low Tide at Sallow Reach and The Drowned Halls,
matching BIBLE.md outlines and world.py attendance/loot/quests.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The validator only accepts a present party character, GM or "the
party" as an event actor -- never an NPC name directly (Ansel
Ruddock, Odile Marsh, Jory Callander, Petronella Vay). Move those
NPCs' actions onto the GM actor, keeping their names in the event
sentence. Confirmed with content.load() in qb-backend-test:latest.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Merge content/demo-sessions-b: session scripts 14–22 (#821)
All checks were successful
CI / Bot/backend version sync (pull_request) Successful in 31s
CI / Backend lint (ruff) (pull_request) Successful in 33s
CI / Feedback site tests (pull_request) Successful in 43s
CI / Does this change touch the recording path? (pull_request) Successful in 17s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m42s
CI / Bot tests and audit (pull_request) Successful in 2m44s
CI / Docker image build (pull_request) Successful in 4m22s
CI / Backend migration, tests, and audit (pull_request) Successful in 14m6s
CI / Frontend tests, audit, and build (pull_request) Successful in 16m46s
CI / End-to-end journeys (desktop, phone, keyboard-only) (pull_request) Successful in 13m42s
fac600b754
Sign in to join this conversation.
No description provided.