Files
code_of_conquest_dnd/content/roadmap.md
Phillip Tarrant 9e8fc55a44 docs(content): create the content roadmap — Spine, BOM, Backlog
Implements the docs restructure half of the content-track design (the
currency item is code and stays unbuilt). Content stops being unbounded:
the work is now a countable checklist with an end.

content/roadmap.md — new. Three sections, only one of which is ever the
work:
  Spine     Greywater Docks + one dungeon, patron Ghaul the Yoke; the
            cosmology touching ground. Plus what is already canon.
  BOM       ~57 discrete pieces for a complete, playable game, per
            milestone. Numbers, not vibes.
  Backlog   Everything the slice does not need. Not a debt — where ideas
            go to be safe.

Its rule: never author anything that is not in the Bill of Materials.

The BOM carries a Fixed/Variable column — the seven-campaign saga spec's
only ask of this table. ~37 fixed / ~20 variable: a second town costs the
20, not the 57. That is also the exact split v2 generation would need.

content/lore/canon-roadmap.md becomes a pointer (older specs and plans
reference the old path). An items-and-prices table does not belong under
lore/.

docs/roadmap.md — M4..M9 each gain a "Content it consumes →" line into
the BOM.

world-building skill — SKILL.md and evals.json now point at
content/roadmap.md, and the skill is told to respect the BOM rule: ideas
that arrive during authoring go to the Backlog, not into the world.

Build + --check green; generated content/world and content/server are
byte-identical. No Python touched.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 17:31:30 -05:00

8.7 KiB
Raw Blame History

Content Roadmap

The world's answer to docs/roadmap.md. That doc sequences systems; this one sequences content — lore, the economy, items, quests, the map — and makes it countable rather than open-ended.

Source of truth is content/lore/*.md; content/world + content/server are BUILT from it (python3 -m content_build). Realizes the content-track design.

Three sections. Only one of them is ever the work.

  1. Spine — the slice's world. Authored once; gates everything downstream.
  2. Bill of Materials — a countable checklist, per milestone. Numbers, not vibes.
  3. Backlog — everything the slice does not need. Named so it is not lost; parked so it is not looming.

The rule

Never author anything that is not in the Bill of Materials.

An idea that arrives goes to the Backlog, and is then no longer carried. The Backlog is not a debt. It is where ideas go to be safe.


1. The Spine

Greywater Docks and one dungeon — the smallest thing that is a game. Every system (creation, combat, dialogue, inventory, shop, quest log, map) is exercised exactly once, against real content. The cosmology touching ground for the first time.

  • The town — Greywater Docks. A rot-black wharf where the river meets the sea trade; everyone owes someone. ~6 NPCs: Fenn (promoted from M2 test fixture to real NPC), the harbourmaster, a fence, an innkeeper, a dock rough, one more.
  • The chain — "The Missing Ledger," extended from the existing hook. Town → road → dungeon → back. Four objectives.
  • The turn. The debt Fenn cannot cover is a blood debt. The harbourmaster is named in the ledger because he is the one collecting. The dungeon is the harvest site.
  • The patron — Ghaul the Yoke. Already, by name, the king of debt and bondage; a ledger of what men owe is his liturgy. This makes the quest chain and the cosmology the same object rather than two things bolted together, and gives rule.blood-price its first concrete instance.
  • The dungeon — the harvest site. One enemy family (the yoked) + a boss.

Adopting Greywater, not replacing it. Fenn is the NPC the aliveness question was actually answered with (M2, live-proven). The slice's job is to make Greywater deep, not new.

Breadth afterwards is repetition of a proven shape, not invention.

Already authored (status: canon)

  • lore/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.
  • lore/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 pacts one of the Seven.
  • lore/mechanics.md — hosts rule.disposition-ladder (the required-once gate vocabulary).
  • lore/specimen.md — a synthetic status: candidate disposition-gate specimen (validated by --check, emitted nowhere); the world-building skill's structure example. Not game canon.

Still to author for the slice

Greywater itself — the town, its ~6 NPCs, the ledger chain's four objectives, and Ghaul's harvest site — as content/lore/greywater.md. The hand-written JSON under content/world/{locations,quests,npcs,items} gets authored upward into that bible, and python3 -m content_build emits world/ from it.

Per-town knowledge that grounds the cosmology (possessed NPCs, blood-harvest sites, shrine fronts) is authored as gated rumor/fact/secret.


2. Bill of Materials

Countable. This is the anti-overwhelm device.

The Fixed/Variable column is the seven-campaign saga's only ask of this table. Fixed substrate is identical in every campaign of every saga — authored once, reused verbatim. Variable is per-campaign: the part a second town would have to re-author, and the part v2 generation would produce. The column costs nothing and tells you exactly what town #2 does not pay for.

Milestone Content it consumes Count Fixed / Variable
M4 creation Calling blurbs; the Bloodsworn's patron choice ~2 Fixed
M4 creation Origins (they reference world ids) ~2 Variable
M5 combat Abilities for the 3 POC classes ~10 Fixed
M5 combat 1 enemy family (4 units) + boss — tier 1 ~5 Variable (per tier)
M6 dialogue 6 NPCs — persona + knowledge[] + gated topics (§6) ~6 Variable
M7 inventory 6 weapons, 4 armour, 3 consumables, 1 cursed item (+STR / LCK — §7 says day-one) ~14 Fixed
M8 world The price table in copper ~1 Fixed
M8 world 3 map locations + the road; shop stock; the quest chain ~7 Variable
M9 flavour Authored fallback per AI surface (§13); shrine + Luck-drift events; humiliation seeds ~10 Fixed

≈57 discrete authored pieces for a complete, playable game. An estimate, and likely optimistic — but an estimate with an end, which is the entire point.

Roughly 37 fixed / 20 variable: a second town costs the ~20, not the ~57.

Explicitly not in the slice: rings, amulets, trinkets. A second town. The other six kings and their cults. All parked in the Backlog.

The economy is two systems (§18)

  • The loop is code (§2: state) — purse, buy/sell, the ~40% fence rate, gritty disabled-CTA reasons. Sequenced as M8's Shop economy.
  • The numbers are content — what a shortsword costs, a night at the inn, an ale, the quest's purse. The price table, above.

Currency model:

1 gold   = 100 silver = 10,000 copper
1 silver =              100 copper

Gold is scary. A peasant's whole life is copper, a mercenary's fee is silver, and a gold coin is a plot point. The party counting coppers for an inn bed is §3 grit, and Brannoc has an opinion about it.

This is a change, not a new thing — and it has a client consumer. It lands as its own small item before M7, cheapest now while content/world/items/ holds exactly two files:

  • A Currency value type — store everything in copper, format only at the display edge (12g 40s 8c).
  • coin.json → real denominations; all prices re-denominated.
  • The Main Window shell's command-bar purse (it currently shows a flat gold value).

§2: state · depends on nothing · goal: money that means something.


3. Backlog

Not a debt. Where ideas go to be safe.

  • Items: rings, amulets, trinkets.
  • Places: a second town. Regions of the Margreave beyond the slice.
  • The saga (tiers 27) — from the character-reuse spec: the other six kings as campaign patrons; tiered enemy families (proximity to a king is the power scale); the three story-shapes (cult cell → cult that owns a city → the king himself).
  • The Barbarian ⚔ calling name ([CANON-TBD]).
  • AI-generated worlds (v2, charter §17). The saga spec guarantees the Saga object is what will feed it. Nothing else about it is decided.

Notes for whoever authors next

  • Each BOM line is authored through the /world-building skill — it reconciles against existing canon, writes the build tool's source format, and verifies the build stays green.
  • The build tool needs two new namespaces: item and quest. Its legal namespaces today (tools/content_build/model.py) are town, place, region, faction, person, rule, rumor, fact, secret, npc — so locations are already modeled (town/place/region) and only items and quests fall outside it. Adding those two (model, emit, resolve) is a prerequisite of the M7 and M8 BOM lines. Add tier: 1..7 to the entry envelope at the same moment — the saga spec's only schema ask, free while the model is already open.
  • Moving or deleting generated content is a client change. content/world/** has a client consumer: client/scripts/content/content_db.gd (via client/scripts/harness/npc_harness.gd) and its GUT tests in client/tests/unit/test_content_db.gd. That is the Duncarrow lesson — check client/ before any content move.