diff --git a/docs/superpowers/plans/2026-07-12-cosmology-and-worldbuilding-theme.md b/docs/superpowers/plans/2026-07-12-cosmology-and-worldbuilding-theme.md new file mode 100644 index 0000000..018388c --- /dev/null +++ b/docs/superpowers/plans/2026-07-12-cosmology-and-worldbuilding-theme.md @@ -0,0 +1,653 @@ +# Cosmology — the Warden and the Seven — Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Author the good-god / seven-demon-lords cosmology as canon content and bake it into the world-building skill, so every future authoring pass reconciles against it. + +**Architecture:** The cosmology is *public, believed world-furniture* — it authors as ordinary **canon entities** (secrecy 0) in two new lore-bible files, which the `content_build` tool compiles to `content/world/` + `content/server/` JSON. No engine, UI, prompt, or combat code changes. The world-building **skill** gains a cosmology reference and two hooks so it enforces the backdrop. + +**Tech Stack:** Markdown lore bibles with ` ```yaml ` blocks (`content/lore/*.md`); the `content_build` Python tool (`tools/content_build/`, run with `PYTHONPATH=tools`); the project venv (`.venv`). + +## Global Constraints + +- **Charter §2 — code owns state, AI owns text.** This pass adds only text the AI narrates from. No new mechanic, no schema change, no "class" entity. Verbatim. +- **Tone (charter §3 + `references/tone.md`):** gritty, not grim; dry narrator, never winks, never preaches, never confirms the god. The cosmology is the *hidden engine*, not epic surface text. "Distant & contested." +- **Luck (charter §7):** visible in prose, **never a number**; the player must never be able to *calculate* they are cursed. Blessing/curse express through Luck's *flavor* only. No Luck mechanic is built this pass. +- **Every canon entity is `secrecy: 0`** (the resolver hard-fails otherwise). Every `related` id must resolve or the build fails. +- **Never hand-edit generated JSON** under `content/world/` or `content/server/` — fix the bible source and rebuild. +- **Git:** all work on branch `feature/cosmology-theme` off `dev`. Do not touch `master`. Merge to `dev` only after the human confirms and the build is green. +- **Do NOT remove or edit any existing Duncarrow content** (`content/lore/duncarrow.md` and its generated output). It stays intact this pass — it hosts the required-once `rule.disposition-ladder` and is the skill's format specimen. + +**Build/verify commands (used by every task):** + +```bash +source .venv/bin/activate +PYTHONPATH=tools python -m content_build # regenerate world/ + server/ from lore/ +PYTHONPATH=tools python -m content_build --check # must exit 0 +PYTHONPATH=tools python -m pytest tools/content_build/tests -q +``` + +(If `python` is missing, the venv isn't active — use `.venv/bin/python`.) + +--- + +## File structure + +| File | Responsibility | Created/Modified | +|---|---|---| +| `content/lore/cosmology.md` | The cosmic frame: the Warden, the Sent, the Seven (host), the two economies, possession | **Create** | +| `content/lore/the-seven.md` | The seven demon lords, one `person.*` each | **Create** | +| `.claude/skills/world-building/references/cosmology.md` | The backdrop every future author reconciles against + authoring rules | **Create** | +| `.claude/skills/world-building/SKILL.md` | Add cosmology to step 2 (reconcile) + the reference list | **Modify** | +| `.claude/skills/world-building/references/tone.md` | Add "The cosmic backdrop" section | **Modify** | +| `content/lore/canon-roadmap.md` | Record Warden/Seven authored, FTH-axis mapping + `Bloodsworn`, Duncarrow flagged scaffolding | **Modify** | +| `content/world/canon/*.json`, `content/server/*` | Regenerated build output (committed, not hand-written) | **Generated** | + +Dependency order: `cosmology.md` defines `faction.the-seven`, `rule.blood-price`, `rule.possession`; `the-seven.md`'s lords relate *up* to those. So `cosmology.md` builds green standalone, then `the-seven.md`. No cross-file back-reference is authored on the cosmology side (Nuun is named in prose there, but the id-relation to `rule.possession` lives on Nuun's own entry). + +--- + +## Task 0: Branch + +- [ ] **Step 1: Create the working branch off `dev`** + +```bash +git checkout dev +git pull --ff-only # optional; skip if offline +git checkout -b feature/cosmology-theme +``` + +- [ ] **Step 2: Confirm the build is green before any change (baseline)** + +```bash +source .venv/bin/activate +PYTHONPATH=tools python -m content_build --check +``` +Expected: exits 0 (no output or a success line). If it fails here, stop — the tree was already broken; fix or report before proceeding. + +--- + +## Task 1: The cosmic frame — `content/lore/cosmology.md` + +**Files:** +- Create: `content/lore/cosmology.md` +- Generated (commit after build): `content/world/canon/the-warden.json`, `content/world/canon/the-sent.json`, `content/world/canon/the-seven.json`, `content/world/canon/the-pact.json`, `content/world/canon/blood-price.json`, `content/world/canon/possession.json` + +**Interfaces:** +- Produces canon ids consumed by Task 2 and by all future content: `person.the-warden`, `faction.the-sent`, `faction.the-seven`, `rule.the-pact`, `rule.blood-price`, `rule.possession`. +- Every `related` in this file resolves *within this file* — it does not depend on Task 2. + +- [ ] **Step 1: Write the file exactly** + +Create `content/lore/cosmology.md` with this content verbatim: + +````markdown +# COSMOLOGY — the Warden and the Seven — status: canon + +> The overarching theme of the Margreave: a distant good god, his angels, and +> the seven demon kings who work against him. Public, believed world-furniture — +> all `secrecy: 0`, bodies ship to the client. WHO is possessed, WHICH road is +> bled, are authored later as gated `rumor`/`fact`/`secret` per-town; this file +> never names a victim. +> +> Tone: distant & contested. The narrator never confirms the Warden, never goes +> epic. The war is the hidden engine under the grime. + +--- + +## THE WARDEN — the good god (distant) + +```yaml +id: person.the-warden +type: person +status: canon +secrecy: 0 +related: [faction.the-sent, faction.the-seven, rule.the-pact] +body: > + The god most of the Margreave professes, though few claim to have felt him. + He is called only the Warden; no living mouth speaks his name, and the priests + who might have known it are a long time dead. What the faithful hold is simple: + he made the races, he loves them, and he wards the world against the Seven. + What he asks in return is worship, and what he gives for it is blessing — + rarely, and never where you can point to it and be sure. He does not come when + called. Whether that is because he is good and restrained, or absent, or dead, + is the oldest argument there is, and the Margreave has never settled it. +``` + +## THE SENT — his angels (indirect, rare) + +```yaml +id: faction.the-sent +type: faction +status: canon +secrecy: 0 +related: [person.the-warden, rule.the-pact] +body: > + The Warden's messengers — angels, the Sent, his hand where he will not put his + own. They do not fight the Seven and they do not save anyone. They ask. A Sent + one comes to a mortal, names a thing that must be done in the Warden's name, + and leaves the doing to them; blessing follows the deed, or does not follow the + refusal. Most people go their whole lives without meeting one, and a fair + number of those who claim to have met one were lying or drunk or worse. That + they are rare is either the mark of a careful god or a thin one. +``` + +## THE SEVEN — the demonic host + +```yaml +id: faction.the-seven +type: faction +status: canon +secrecy: 0 +related: [person.the-warden, rule.blood-price, rule.possession] +body: > + Seven kings and the armies that answer to them — the Warden's enemy, and the + world's. They do not want to rule the races so much as end them, dead or yoked, + it makes little difference to the Seven which. Each king is its own hunger and + keeps its own kind of war, and they cooperate the way wolves cooperate, which + is to say until the meat runs low. What they run on is blood: spilled, + sacrificed, offered. A mortal who learns how to feed them can be given a share + of what that blood buys. Most of the Margreave believes the Seven are real. + Most of the Margreave is right. +``` + +## THE PACT — worship for blessing (the Warden's economy) + +```yaml +id: rule.the-pact +type: rule +status: canon +secrecy: 0 +related: [person.the-warden, faction.the-sent] +body: > + The bargain at the heart of the Warden's faith: worship for blessing. Prayer, + offering, a shrine kept clean, a deed done in his name — these buy his favor, + and his favor turns fortune a little kinder. A bonesetter, the closest thing + the Margreave has to a priest, is a mortal who has given enough of themselves + to the Warden to channel a thread of that blessing into the living — a wound + closed, a fever broken, a death postponed. The pact is never a receipt. You + give, and blessing may come, on the Warden's terms and in his time, which is to + say seldom and never on demand. +``` + +## THE BLOOD-PRICE — blood for power (the Seven's economy) + +```yaml +id: rule.blood-price +type: rule +status: canon +secrecy: 0 +related: [faction.the-seven, rule.possession] +body: > + What the Seven trade in. Their power is not given, it is bought, and the only + coin is blood — the more, and the more wrongly spilled, the better the rate. A + killing floor, a sacrifice, a murder done in a lord's name feeds the king it is + offered to. A mortal willing to strike that bargain becomes what the Margreave + calls bloodsworn: sworn to one of the Seven, marked by it, and able to spend a + thread of its power the way the faithful spend the Warden's — a curse laid, a + hurt dealt, a thing that should not bend made to bend. The blessing side of it, + such as it is, is that a king does not waste ill luck on its own sworn; the + price for that mercy is simply the blood, and the blood is never paid once. +``` + +## POSSESSION — how the Seven reach mortals + +```yaml +id: rule.possession +type: rule +status: canon +secrecy: 0 +related: [faction.the-seven, rule.blood-price] +body: > + How the Seven reach across into the world. Mostly it is not the horror the + stories promise — it is influence, a hand on the scale of a mortal's wanting: + the grudge nursed a little hotter, the easy cruelty made easier, the appetite + that will not be talked down. That is the common work, and most of it is never + noticed as anything but a person going bad. Outright possession — a king + wearing a body like a coat — is rarer and costs the Seven dearly, and it is + Nuun, the Hollow Choir, that does most of it; the others prefer a willing hand + to a stolen one. A possessed mortal is not the enemy. The enemy is the thing + inside them, and it will spend the body it wears without a thought. +``` +```` + +- [ ] **Step 2: Build and verify the frame is valid** + +```bash +source .venv/bin/activate +PYTHONPATH=tools python -m content_build +PYTHONPATH=tools python -m content_build --check +``` +Expected: build regenerates without error; `--check` exits 0. If it reports an unresolved `related` or a secrecy error, it names the source file + line — fix `cosmology.md` and rerun. Do NOT edit generated JSON. + +- [ ] **Step 3: Confirm the six canon files were emitted** + +```bash +ls content/world/canon/the-warden.json content/world/canon/the-sent.json \ + content/world/canon/the-seven.json content/world/canon/the-pact.json \ + content/world/canon/blood-price.json content/world/canon/possession.json +``` +Expected: all six exist. (Bodies ship client-side; there is no server output for canon entities.) + +- [ ] **Step 4: Run the build tests (regression)** + +```bash +PYTHONPATH=tools python -m pytest tools/content_build/tests -q +``` +Expected: all pass. + +- [ ] **Step 5: Commit** + +```bash +git add content/lore/cosmology.md content/world/canon/ +git commit -m "feat(content): cosmology frame — the Warden, the Sent, the Seven + +Co-Authored-By: Claude Opus 4.8 (1M context) +Claude-Session: https://claude.ai/code/session_01HuHRPE7VfppUJEaoGBEUqZ" +``` + +--- + +## Task 2: The roster — `content/lore/the-seven.md` + +**Files:** +- Create: `content/lore/the-seven.md` +- Generated (commit after build): `content/world/canon/kareth-the-red-king.json`, `vael-the-quiet-knife.json`, `morren-the-grey-mother.json`, `ghaul-the-yoke.json`, `ishri-the-open-mouth.json`, `nuun-the-hollow-choir.json`, `draeth-the-crowned-worm.json` + +**Interfaces:** +- Consumes from Task 1: `faction.the-seven`, `rule.possession` (used in `related`). +- Produces: the seven `person.*` lord ids (for future quests/NPCs to reference). + +- [ ] **Step 1: Write the file exactly** + +Create `content/lore/the-seven.md` with this content verbatim: + +````markdown +# THE SEVEN — the demon kings — status: canon + +> Seven kings, seven armies, seven kinds of blood. Each is a `person.*`, +> `secrecy: 0`, relating up to `faction.the-seven` (Task 1 / cosmology.md). +> Tight sketches — a king, the blood it craves, its army, how it corrupts a +> mortal. Gritty, not cartoonish: each is a way mortals actually bleed. No +> questlines here; those hang off these ids later. + +--- + +```yaml +id: person.kareth-the-red-king +type: person +status: canon +secrecy: 0 +related: [faction.the-seven] +body: > + Kareth, the Red King, first and loudest of the Seven. The blood he wants is the + battlefield's — slaughter, the more of it and the less reason the better. His + army is the horde, and it grows because he is generous with the promise of + victory and the men who take it rarely live to complain that it was a lie. He + does not whisper. He works through the rage already in a mortal, the feud that + only needs a reason, the certainty that the sword is the short way through. + Where Kareth has been, there is a field that will not grow for a generation and + no one left who remembers starting it. +``` + +```yaml +id: person.vael-the-quiet-knife +type: person +status: canon +secrecy: 0 +related: [faction.the-seven] +body: > + Vael, the Quiet Knife, the intimate one. The blood Vael craves is the kind + spilled indoors — the trusted killed by the trusted, the poison in the cup you + were poured, the debt settled between people who once shared bread. Vael keeps + no horde; its army is a scatter of ones, each certain they acted alone. It + works through the grudge held too long and the moment the knife looks like the + only door left in the room. Kareth takes the field. Vael takes the household, + and no one hears it happen. +``` + +```yaml +id: person.morren-the-grey-mother +type: person +status: canon +secrecy: 0 +related: [faction.the-seven] +body: > + Morren, the Grey Mother, who comes with the fever. The blood she wants is thin + and slow — the dying, the plague-struck, the ones given up on. Her army is the + sick, and she is patient in a way the others are not, because rot does her + recruiting. She works through despair, and cruelest of all through mercy: the + pillow held over a suffering face, the kindness that is also a killing. Morren + does not lie about what she offers. She offers an end, and for a great many of + the Margreave's dying, that is temptation enough. +``` + +```yaml +id: person.ghaul-the-yoke +type: person +status: canon +secrecy: 0 +related: [faction.the-seven] +body: > + Ghaul, the Yoke, the patient profit of the Seven. The blood Ghaul takes is + worked out slow — chattel bought and sold and used until there is nothing left + to use. Its army is the coffle and the counting-house, and it does not need to + whisper to a man who has already found that a person is cheaper than an ox. It + works through the ledger: the wage shaved, the debt made unpayable, the + reasoning that a body one owns is a body one may spend. Ghaul is the least + dramatic of the Seven and by a plain count of the ruined the most successful. +``` + +```yaml +id: person.ishri-the-open-mouth +type: person +status: canon +secrecy: 0 +related: [faction.the-seven] +body: > + Ishri, the Open Mouth, the hunger that is never a meal. The blood Ishri wants + is the blood spent chasing more — drunk to death, wanted to ruin, taken because + taking felt like living. Its army is the appetite of anyone who has stopped + being able to stop. It does not corrupt so much as encourage; it stands at a + mortal's shoulder and agrees that one more will not hurt, and it is right until + it is not. Ishri leaves the neatest corpses and the emptiest houses, everything + sold to feed a want that was never going to be full. +``` + +```yaml +id: person.nuun-the-hollow-choir +type: person +status: canon +secrecy: 0 +related: [faction.the-seven, rule.possession] +body: > + Nuun, the Hollow Choir, the many-voiced. The blood Nuun gathers is a mortal's + own — the self-slain, the ones talked into the river or off the roof by a voice + they took for their own thought. Its army is the emptied, and it is Nuun, of + all the Seven, that most often does the old horror outright and wears a mortal + like a coat, because a hollowed body is the only kind it truly wants. It works + through the whisper, the crack in a mind widened patiently until there is room + for something else to move in. A person going quietly, terribly wrong, and + swearing nothing is the matter, is Nuun's ordinary work. +``` + +```yaml +id: person.draeth-the-crowned-worm +type: person +status: canon +secrecy: 0 +related: [faction.the-seven] +body: > + Draeth, the Crowned Worm, the one that likes a throne. The blood Draeth feeds + on is a ruler's to spend — a people bled by the one meant to keep them, for + power that always seems worth the cost to the one paying it with other lives. + Its army is whoever a corrupted crown can command, which is the cruelest of the + Seven's arithmetic. It works through ambition, the small justified step and the + next, until a lord is sacrificing the realm to hold the realm and calling it + duty. Draeth rarely has to lie. It only has to wait by the chair and let the + sitting do the rest. +``` +```` + +- [ ] **Step 2: Build and verify** + +```bash +source .venv/bin/activate +PYTHONPATH=tools python -m content_build +PYTHONPATH=tools python -m content_build --check +``` +Expected: `--check` exits 0. (`person.nuun-the-hollow-choir` relates to `rule.possession` from Task 1 — it resolves because the build parses all `content/lore/*.md` together.) + +- [ ] **Step 3: Confirm the seven canon files were emitted** + +```bash +ls content/world/canon/kareth-the-red-king.json content/world/canon/vael-the-quiet-knife.json \ + content/world/canon/morren-the-grey-mother.json content/world/canon/ghaul-the-yoke.json \ + content/world/canon/ishri-the-open-mouth.json content/world/canon/nuun-the-hollow-choir.json \ + content/world/canon/draeth-the-crowned-worm.json +``` +Expected: all seven exist. + +- [ ] **Step 4: Run the build tests** + +```bash +PYTHONPATH=tools python -m pytest tools/content_build/tests -q +``` +Expected: all pass. + +- [ ] **Step 5: Commit** + +```bash +git add content/lore/the-seven.md content/world/canon/ +git commit -m "feat(content): the Seven — seven demon kings and their blood + +Co-Authored-By: Claude Opus 4.8 (1M context) +Claude-Session: https://claude.ai/code/session_01HuHRPE7VfppUJEaoGBEUqZ" +``` + +--- + +## Task 3: World-building skill — carry the backdrop + +The explicit ask: every future author must reconcile against the cosmology. Add a reference file and wire it into the skill. Skill files are **not** built, so the "test" is that the build stays green and the edits are internally consistent. + +**Files:** +- Create: `.claude/skills/world-building/references/cosmology.md` +- Modify: `.claude/skills/world-building/SKILL.md` +- Modify: `.claude/skills/world-building/references/tone.md` + +- [ ] **Step 1: Create the cosmology reference** + +Create `.claude/skills/world-building/references/cosmology.md` verbatim: + +```markdown +# Cosmology — the Warden and the Seven + +The overarching theme of the Margreave. Every new piece of content sits inside +this hidden war and must not contradict it. The canon lives in +`content/lore/cosmology.md` and `content/lore/the-seven.md`; this file is the +author-facing summary + the rules that keep it in tone. Read it before writing +lore, NPCs, quests, or items. + +## The frame + +- **The Warden** (`person.the-warden`) — a genuinely good, *distant* god. Made + the races, loves them, wards the world against the Seven. Answers worship with + rare blessing and does not otherwise intervene. **Nameless by design** — no one + living speaks his name; never invent one. Whether he is good, absent, or dead + is the world's oldest argument, never settled by the narrator. +- **The Sent** (`faction.the-sent`) — his angels. Indirect: a Sent one *asks* a + mortal to do a deed in his name; blessing follows the deed. Rare — most people + never meet one. This is the cosmic-flavored quest-giver vein. +- **The Seven** (`faction.the-seven`) — seven demon kings + armies, the Warden's + enemy. Want the races dead or enslaved. Run on **blood** (`rule.blood-price`): + sacrifice buys their power. The roster (`content/lore/the-seven.md`): Kareth + (slaughter), Vael (betrayal), Morren (plague/mercy-kill), Ghaul (bondage), + Ishri (appetite), Nuun (madness — chief possessor), Draeth (tyranny). +- **Possession** (`rule.possession`) — how the Seven reach mortals: mostly + *influence* (a hand on the scale of what a person already wants), rarely + outright seizing a body (Nuun's specialty). A possessed mortal is a victim; the + thing inside is the enemy. +- **The two economies** — worship→blessing (`rule.the-pact`) vs + blood→power (`rule.blood-price`). Both express through Luck's *flavor*, never + numbers (see below). + +## The FTH-axis callings (from the races/classes spec) + +The two divine callings draw power from opposite sides; the rest are unaligned. +- **Bonesetter** (Cleric, FTH) — channels the Warden; healing *is* his blessing. +- **Bloodsworn** (Warlock, FTH) — pacted to one of the Seven; the "Pact Mark" + talent spends a thread of a lord's blood-price power. +- **Hedge-Mage** (Wizard, MAG) — outsider; arcane is *studied*, serves neither. +- Martials (Sellsword/Trapper/Barbarian) — unaligned; the war only echoes. +Callings are code-owned state — reference them in prose, never author a "class" +entity. (A Bloodsworn's patron choice and any Luck effect are M4/M5, not content.) + +## Authoring rules — keep it in tone + +1. **Distant.** The cosmology is the hidden engine under local grime, not the + surface text. A corrupt mayor can just be a corrupt mayor. +2. **Through people.** Demons work by influence; possession is rare and quiet. + No manifesting monsters in the square, no preaching narrator, god unconfirmed. +3. **Not epic.** Keep the gritty, indifferent register (see `tone.md`). Cosmic + stakes stay implied, argued-over, never announced. +4. **Blessing/curse ↔ Luck.** Express which side has hold of someone through + Luck's *flavor* ("fortune spits on you") — never a number, never something the + player can calculate. A cursed item (+STR / −LCK) is a small bargain with the + Seven. +5. **Victims are gated secrets.** WHO is possessed, WHICH road is bled, WHICH + shrine is a front — author as per-town `rumor`/`fact`/`secret` with disposition + gates, not stated in the open. The frame gives you hooks; you place the wounds. +``` + +- [ ] **Step 2: Wire it into `SKILL.md` — the reconcile step** + +In `.claude/skills/world-building/SKILL.md`, find the end of the paragraph in step 2 that begins "Read the entries your new content touches" (it ends "…New files and new entries need no approval; edits to existing canon always do."). Immediately after that paragraph, add: + +```markdown +New content must also slot against the world's overarching cosmology — the good +god (the Warden), his angels (the Sent), and the seven demon kings who work +against him through influence, possession, and blood sacrifice. Read +`references/cosmology.md` before authoring; it is the backdrop nothing may +contradict, and it carries the authoring rules that keep the war in tone +(distant, worked through people, never epic, blessing/curse read through Luck). +``` + +- [ ] **Step 3: Wire it into `SKILL.md` — the reference list** + +In `.claude/skills/world-building/SKILL.md`, in the "## Reference files" list at the end, add this bullet as the first entry (before the `references/schema.md` bullet): + +```markdown +- `references/cosmology.md` — the overarching theme (the Warden and the Seven) + every piece of content reconciles against, plus the rules that keep it in tone. + Read before authoring any lore, NPC, quest, or item. +``` + +- [ ] **Step 4: Add the cosmic-backdrop section to `tone.md`** + +In `.claude/skills/world-building/references/tone.md`, find the section header `## Luck's fingerprint (charter §7)`. Immediately **before** that header, insert this new section: + +```markdown +## The cosmic backdrop (the Warden and the Seven) + +The world sits inside a hidden war — a distant good god and seven demon kings +(see `references/cosmology.md`). It colors tone but must never break the world's +indifference: + +- The cosmology is the **hidden engine**, not the surface text. Day-to-day the + world is still taxes, mud, and bad men; the war is what's *underneath* them. +- Demons work **through people** — influence, rarely possession. Write the + wreckage and the person going wrong, not a monster in the square. The narrator + never confirms the god, never preaches, never goes epic. +- Which side has hold of someone reads through **Luck's flavor, never a number** + (a blessing is a run of fortune; a curse is the trap door opening under you). +- The good/evil is real but **argued-over** — most folk dispute whether any of it + is true. Certainty is the enemy of this tone as much as of §7's Luck. + +``` + +- [ ] **Step 5: Verify the build still passes (no content changed, but confirm nothing broke)** + +```bash +source .venv/bin/activate +PYTHONPATH=tools python -m content_build --check +PYTHONPATH=tools python -m pytest tools/content_build/tests -q +``` +Expected: `--check` exits 0; tests pass. (Skill files aren't built; this just confirms Task 3 touched nothing that matters to the build.) + +- [ ] **Step 6: Sanity-read the three skill files** + +Open each and confirm: `references/cosmology.md` exists and reads cleanly; `SKILL.md` step 2 now mentions the cosmology and the reference list has the new bullet; `tone.md` has "The cosmic backdrop" section directly above "Luck's fingerprint". Fix any formatting slips inline. + +- [ ] **Step 7: Commit** + +```bash +git add .claude/skills/world-building/ +git commit -m "feat(skills): world-building carries the cosmology backdrop + +Co-Authored-By: Claude Opus 4.8 (1M context) +Claude-Session: https://claude.ai/code/session_01HuHRPE7VfppUJEaoGBEUqZ" +``` + +--- + +## Task 4: Roadmap + final verification + +**Files:** +- Modify: `content/lore/canon-roadmap.md` + +- [ ] **Step 1: Update the roadmap** + +Replace the entire body of `content/lore/canon-roadmap.md` below its title line with: + +```markdown +The world's answer to `docs/roadmap.md`: what is authored vs pending, and the +order the Margreave is being written. Source of truth is `content/lore/*.md`; +`content/world` + `content/server` are BUILT from it (`python -m content_build`). + +## Authored (status: canon) + +- **cosmology.md** — the overarching theme: the Warden (distant good god), the + Sent (his angels), the Seven (demonic host), and the two economies + + possession (`rule.the-pact`, `rule.blood-price`, `rule.possession`). The + backdrop every future piece of content reconciles against. +- **the-seven.md** — the seven demon kings, one `person.*` each: Kareth (Red + King), Vael (Quiet Knife), Morren (Grey Mother), Ghaul (the Yoke), Ishri (Open + Mouth), Nuun (Hollow Choir), Draeth (Crowned Worm). +- **FTH-axis callings** (folded into the cosmology, from the races/classes + spec): the Bonesetter channels the Warden, the **Bloodsworn** (names the + warlock `[CANON-TBD]`) pacts one of the Seven. Applying `Bloodsworn` to calling + data and a Bloodsworn's patron choice are M4; any Luck effect is an M5/ + Improviser reconcile. +- **duncarrow.md** — the bounded-dialogue / disposition-gate specimen (Duncarrow, + the Crell chain, Mera Fenn, etc.). **Scaffolding, not story:** it seeded the + schema + skill and hosts the required-once `rule.disposition-ladder`. Slated for + removal in a follow-up that reparents the ladder into `cosmology.md` and stands + up a cosmology-native specimen town. + +## Pending (not yet authored) + +- Per-town knowledge that grounds the cosmology: possessed NPCs, blood-harvest + sites, shrine fronts — authored as gated `rumor`/`fact`/`secret`. +- The Barbarian ⚔ calling name (`[CANON-TBD]`); the Bloodsworn's patron-choice + detail (M4). Regions/towns of the Margreave beyond the scaffolding. +``` + +- [ ] **Step 2: Full final verification (the whole pass, green)** + +```bash +source .venv/bin/activate +PYTHONPATH=tools python -m content_build +PYTHONPATH=tools python -m content_build --check +PYTHONPATH=tools python -m pytest tools/content_build/tests -q +git status --short +``` +Expected: build clean; `--check` exits 0; tests pass; `git status` shows only the roadmap change staged/untracked (all prior tasks already committed). If `--check` reports staleness, the generated output wasn't committed in an earlier task — run the build and `git add content/world content/server`. + +- [ ] **Step 3: Commit** + +```bash +git add content/lore/canon-roadmap.md +git commit -m "docs(content): roadmap — Warden/Seven authored, Duncarrow flagged scaffolding + +Co-Authored-By: Claude Opus 4.8 (1M context) +Claude-Session: https://claude.ai/code/session_01HuHRPE7VfppUJEaoGBEUqZ" +``` + +- [ ] **Step 4: Report** + +Summarize for the human: new canon ids (6 frame + 7 lords), the skill changes, the roadmap update, and confirmation `--check` + pytest are green. Then stop for the human to smoke-test and confirm before any merge to `dev` (per charter §18 git workflow — the human confirms; Claude may then merge `--no-ff` and delete the branch). + +--- + +## Self-review notes (author's check against the spec) + +- **Spec §4 (frame entities):** Task 1 authors all six with resolving `related`, secrecy 0. ✓ +- **Spec §4 (roster):** Task 2 authors all seven `person.*`, each → `faction.the-seven`; Nuun → `rule.possession`. ✓ +- **Spec §2 (tone reconciliation) + §3 (Luck hook):** carried in the bodies (distant, contested, Luck-as-flavor in `rule.blood-price`/`the-pact`) and enforced in the skill (Task 3 authoring rules). ✓ +- **Spec §5 (skill changes):** Task 3 = new `references/cosmology.md` + `SKILL.md` step-2 + reference-list + `tone.md` section. ✓ +- **Spec §6 (Duncarrow decoupled, not removed):** no task edits/removes Duncarrow; roadmap flags it (Task 4); Global Constraints forbid touching it. ✓ +- **Spec §7 (FTH-axis callings):** Bonesetter/Bloodsworn/Hedge-Mage mapping in `rule.the-pact` + `rule.blood-price` prose and the skill reference; `Bloodsworn` name recorded (roadmap). Luck-immunity kept as flavor only, flagged M5. ✓ +- **Spec §7-sensitivity:** no Luck mechanic authored; blessing/curse are prose. ✓ +- **Type consistency:** ids used in `related` (`faction.the-seven`, `rule.possession`, etc.) match their definitions exactly across Tasks 1–2. ✓ +```