docs(plan): cosmology + world-building theme implementation plan
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HuHRPE7VfppUJEaoGBEUqZ
This commit is contained in:
@@ -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) <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:
|
||||
|
||||
````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) <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:
|
||||
|
||||
```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) <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:
|
||||
|
||||
```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) <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 1–2. ✓
|
||||
```
|
||||
Reference in New Issue
Block a user