Files
code_of_conquest_dnd/docs/superpowers/plans/2026-07-12-cosmology-and-worldbuilding-theme.md

30 KiB
Raw Blame History

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):

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
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)
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:

# 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
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
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)
PYTHONPATH=tools python -m pytest tools/content_build/tests -q

Expected: all pass.

  • Step 5: Commit
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) <noreply@anthropic.com>
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:

# 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
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
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
PYTHONPATH=tools python -m pytest tools/content_build/tests -q

Expected: all pass.

  • Step 5: Commit
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) <noreply@anthropic.com>
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:

# 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:

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):

- `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:

## 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)
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
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) <noreply@anthropic.com>
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:

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)
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
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) <noreply@anthropic.com>
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 12. ✓