Lore Release Gate
Arcanea has 21,000 words of researched worldbuilding method (docs/worldbuilding/),
a naming system (.arcanea/lore/NAMING_REGISTRY.md), a taste doctrine
(docs/worldbuilding/TASTE.md), and a locked canon vault
(.arcanea/lore/CANON_LOCKED.md). None of it reads itself. This is the contract
that puts it in front of the work, in order, and says when the work is finished.
Three failure modes it exists to prevent:
- Writing from fantasy defaults. A model asked for "a legendary artifact"
produces the median of every fantasy artifact it has read. That is the origin
of lore slop — not bad taste, but no decision. The pattern libraries exist so
the decision is made deliberately.
- Silent canon drift. In August 2026 a reviewer found two locked godbeast
renames had never propagated: ~15 files still named superseded entities as
current, including an active chapter of a published Library text
(issue #98). Nobody introduced that in one bad commit. It accumulated because
nothing checked.
- Self-certifying. Declaring lore "canon-consistent," "on-voice," or
"excellent" with no check run, no score, and no evidence. A claim is not
evidence.
The seven phases
Run them in order. Skip a phase only by saying which one and why.
1. Ground — read canon before writing canon
Never write Arcanea lore from memory, including your own memory of this
conversation. Memory is authoritative for intent and strategy; it is never
authoritative for what is currently true in the world.
Read, every time:
.arcanea/lore/CANON_LOCKED.md — the vault. Read-only. Agents never edit it.
.arcanea/lore/NAMING_REGISTRY.md — registers, collision rules, superseded
inventory. Lands with the prose half (#97). Until it does, the vault's own
superseded list and lore-lint.mjs are the authority on retired names; coin
nothing new that you cannot check against them.
- The existing files your subject touches (
FACTIONS.md, MAGIC_SYSTEM.md,
STORY_ENGINE.md, the relevant book/ collection)
Beware mirrors. arcanea-lore/ and sync/aios/lore/ contain stale copies whose
frequency tables and godbeast names diverge from the vault. The vault at
.arcanea/lore/CANON_LOCKED.md wins, always.
2. Choose — pick the pattern, don't inherit the default
Open the horizontal library for your craft problem under docs/worldbuilding/
and name the specific pattern you are applying and the specific one you are
rejecting. The by-craft-problem libraries (patterns/ARTIFACTS.md,
MAGIC_MECHANISMS.md, ENCYCLOPEDIA_IA.md, LANGUAGE_CRAFT.md) land in a
follow-up PR; until then use SYSTEM.md and BEST_PRACTICES.md there. Naming
the rejected alternative is the requirement either way — that part needs no
library. "I'm using the object-that-chooses-its-bearer pattern, not the
stat-block pattern" is a decision. Reaching for whatever comes first is not.
| Working on |
Read |
| Artifacts, relics, weapons, materials |
patterns/ARTIFACTS.md |
| Magic mechanisms, cost, limits, escalation |
patterns/MAGIC_MECHANISMS.md |
| Wiki structure, entity schemas, canon tiers |
patterns/ENCYCLOPEDIA_IA.md |
| Prose, registers, naming sound, dialogue |
patterns/LANGUAGE_CRAFT.md |
| Anything — the cross-world benchmark and the Ten Upgrades |
research/SYNTHESIS.md |
| Method, fragments, mystery ledgers, IP doctrine |
BEST_PRACTICES.md, SYSTEM.md |
The per-world knowledgebases in research/ are the source material behind those
libraries. Go to them when you need the full case, not the extracted rule.
3. Draft — in register, at the right layer
Three layers, three voices (SYSTEM.md):
- Vault — terse, declarative, machine-readable. What is true.
- Fragment surface — in-world, narrated, biased. A named person saying it,
who may be wrong. Prefer three viewpoints on a contested fact.
- Encyclopedia — out-of-universe, neutral, cited. What the reader can look up.
Do not blend them in one file. LANGUAGE_CRAFT.md carries the register
specifications and the AI-slop repair list; run its checklist before you call a
draft done.
4. Cross-check — the part that is not optional
Four checks, all of them, every time:
# Canon: superseded names, Gate names, Gate frequencies, godbeast pairings
# (table and prose), tier banners, lock claims
node .claude/ci/lore-lint.mjs <your files>
- Naming — every coined name runs the
NAMING_REGISTRY.md §7 procedure:
register identified, three candidates, collision rules applied, G-test read
aloud, superseded list checked, etymology note written. A name without an
etymology note fails review. Until §7 lands with #97, run the same steps from
this list — the etymology note and the superseded check are the two that
cannot be skipped, and neither needs the registry file to perform.
- IP —
BEST_PRACTICES.md §IV. Architecture, never bricks. If the thing you
wrote would be recognizable as a specific franchise's element with the name
changed, it fails — and the closer the mechanic sits to a single source, the
higher the bar (see the U3 note in research/SYNTHESIS.md).
- Continuity — does this contradict any existing STAGING content, not just
locked canon? Grep the lore directory for the entities you touched.
5. Evaluate — score it, don't vouch for it
Run the canon-evaluation skill. It produces a ten-dimension score with
evidence per dimension and an adversarial pass that actively tries to refute the
work. Attach the score to the artifact or the PR.
A score you assigned yourself without running the rubric is not a score. If the
adversarial pass finds a real contradiction, fix it and re-score — do not argue
with it in the summary.
6. Stage — everything new is STAGING
All new lore ships as STAGING ⏳. Every file gets:
- a status banner in the first 15 lines (status, date, purpose, and an explicit
line stating whether it touches LOCKED canon)
- a
## STAGING LOG table at the bottom, with a row per revision
- mystery-ledger entries for anything deliberately left unanswered, marked
oblique only or never answer
7. Promote — Frank only
Promotion from STAGING to LOCKED happens through /lock-decision, by the
Creator, never by an agent. An agent proposing promotion is fine. An agent
performing one is a canon violation.
What "done" requires
Not one of these is optional, and none of them is a claim:
Reference
Method and research: docs/worldbuilding/ (README, SYSTEM, SKILL, AGENTS,
TASTE, COLLABORATIONS, BEST_PRACTICES, research/, patterns/).
Canon vault: .arcanea/lore/CANON_LOCKED.md. Naming: .arcanea/lore/NAMING_REGISTRY.md.
Machine checks: .claude/ci/lore-lint.mjs. Open canon debt: issues #98, #99.
1---2name: lore-release-gate3description: The sequencing contract for any Arcanea lore, canon, or worldbuilding work — new character, god, godbeast, creature, artifact, faction, place, era, magic mechanism, Library text, legend, parable, or any edit under .arcanea/lore/, arcanea-lore/, book/, or lore/. Use whenever a task will add to, change, or reason about what is true in Arcanea. Routes to the right research and pattern libraries for each phase, defines the cross-checks that must run, and states what "done" requires. Read this before writing lore, not after.4---56# Lore Release Gate78Arcanea has 21,000 words of researched worldbuilding method (`docs/worldbuilding/`),9a naming system (`.arcanea/lore/NAMING_REGISTRY.md`), a taste doctrine10(`docs/worldbuilding/TASTE.md`), and a locked canon vault11(`.arcanea/lore/CANON_LOCKED.md`). None of it reads itself. This is the contract12that puts it in front of the work, in order, and says when the work is finished.1314Three failure modes it exists to prevent:15161. **Writing from fantasy defaults.** A model asked for "a legendary artifact"17 produces the median of every fantasy artifact it has read. That is the origin18 of lore slop — not bad taste, but no decision. The pattern libraries exist so19 the decision is made deliberately.202. **Silent canon drift.** In August 2026 a reviewer found two locked godbeast21 renames had never propagated: ~15 files still named superseded entities as22 current, including an active chapter of a published Library text23 (issue #98). Nobody introduced that in one bad commit. It accumulated because24 nothing checked.253. **Self-certifying.** Declaring lore "canon-consistent," "on-voice," or26 "excellent" with no check run, no score, and no evidence. A claim is not27 evidence.2829## The seven phases3031Run them in order. Skip a phase only by saying which one and why.3233### 1. Ground — read canon before writing canon3435Never write Arcanea lore from memory, including your own memory of this36conversation. Memory is authoritative for intent and strategy; it is never37authoritative for what is currently true in the world.3839Read, every time:4041- `.arcanea/lore/CANON_LOCKED.md` — the vault. **Read-only.** Agents never edit it.42- `.arcanea/lore/NAMING_REGISTRY.md` — registers, collision rules, superseded43 inventory. **Lands with the prose half (#97).** Until it does, the vault's own44 superseded list and `lore-lint.mjs` are the authority on retired names; coin45 nothing new that you cannot check against them.46- The existing files your subject touches (`FACTIONS.md`, `MAGIC_SYSTEM.md`,47 `STORY_ENGINE.md`, the relevant `book/` collection)4849Beware mirrors. `arcanea-lore/` and `sync/aios/lore/` contain stale copies whose50frequency tables and godbeast names diverge from the vault. The vault at51`.arcanea/lore/CANON_LOCKED.md` wins, always.5253### 2. Choose — pick the pattern, don't inherit the default5455Open the horizontal library for your craft problem under `docs/worldbuilding/`56and name the specific pattern you are applying and the specific one you are57rejecting. The by-craft-problem libraries (`patterns/ARTIFACTS.md`,58`MAGIC_MECHANISMS.md`, `ENCYCLOPEDIA_IA.md`, `LANGUAGE_CRAFT.md`) land in a59follow-up PR; until then use `SYSTEM.md` and `BEST_PRACTICES.md` there. Naming60the rejected alternative is the requirement either way — that part needs no61library. "I'm using the object-that-chooses-its-bearer pattern, not the62stat-block pattern" is a decision. Reaching for whatever comes first is not.6364| Working on | Read |65|---|---|66| Artifacts, relics, weapons, materials | `patterns/ARTIFACTS.md` |67| Magic mechanisms, cost, limits, escalation | `patterns/MAGIC_MECHANISMS.md` |68| Wiki structure, entity schemas, canon tiers | `patterns/ENCYCLOPEDIA_IA.md` |69| Prose, registers, naming sound, dialogue | `patterns/LANGUAGE_CRAFT.md` |70| Anything — the cross-world benchmark and the Ten Upgrades | `research/SYNTHESIS.md` |71| Method, fragments, mystery ledgers, IP doctrine | `BEST_PRACTICES.md`, `SYSTEM.md` |7273The per-world knowledgebases in `research/` are the source material behind those74libraries. Go to them when you need the full case, not the extracted rule.7576### 3. Draft — in register, at the right layer7778Three layers, three voices (`SYSTEM.md`):7980- **Vault** — terse, declarative, machine-readable. What is true.81- **Fragment surface** — in-world, narrated, biased. A named person saying it,82 who may be wrong. Prefer three viewpoints on a contested fact.83- **Encyclopedia** — out-of-universe, neutral, cited. What the reader can look up.8485Do not blend them in one file. `LANGUAGE_CRAFT.md` carries the register86specifications and the AI-slop repair list; run its checklist before you call a87draft done.8889### 4. Cross-check — the part that is not optional9091Four checks, all of them, every time:9293```bash94# Canon: superseded names, Gate names, Gate frequencies, godbeast pairings95# (table and prose), tier banners, lock claims96node .claude/ci/lore-lint.mjs <your files>97```9899- **Naming** — every coined name runs the `NAMING_REGISTRY.md` §7 procedure:100 register identified, three candidates, collision rules applied, G-test read101 aloud, superseded list checked, **etymology note written**. A name without an102 etymology note fails review. Until §7 lands with #97, run the same steps from103 this list — the etymology note and the superseded check are the two that104 cannot be skipped, and neither needs the registry file to perform.105- **IP** — `BEST_PRACTICES.md` §IV. Architecture, never bricks. If the thing you106 wrote would be recognizable as a specific franchise's element with the name107 changed, it fails — and the closer the mechanic sits to a single source, the108 higher the bar (see the U3 note in `research/SYNTHESIS.md`).109- **Continuity** — does this contradict any existing STAGING content, not just110 locked canon? Grep the lore directory for the entities you touched.111112### 5. Evaluate — score it, don't vouch for it113114Run the `canon-evaluation` skill. It produces a ten-dimension score with115evidence per dimension and an adversarial pass that actively tries to refute the116work. Attach the score to the artifact or the PR.117118A score you assigned yourself without running the rubric is not a score. If the119adversarial pass finds a real contradiction, fix it and re-score — do not argue120with it in the summary.121122### 6. Stage — everything new is STAGING123124All new lore ships as STAGING ⏳. Every file gets:125126- a status banner in the first 15 lines (status, date, purpose, and an explicit127 line stating whether it touches LOCKED canon)128- a `## STAGING LOG` table at the bottom, with a row per revision129- mystery-ledger entries for anything deliberately left unanswered, marked130 *oblique only* or *never answer*131132### 7. Promote — Frank only133134Promotion from STAGING to LOCKED happens through `/lock-decision`, by the135Creator, never by an agent. An agent proposing promotion is fine. An agent136performing one is a canon violation.137138## What "done" requires139140Not one of these is optional, and none of them is a claim:141142- [ ] Vault read this session, not recalled143- [ ] Pattern named — the one applied and the one rejected144- [ ] `lore-lint.mjs` run, output shown, exit 0145- [ ] Every coined name carries its etymology note146- [ ] IP red lines checked against `BEST_PRACTICES.md` §IV147- [ ] `canon-evaluation` score attached, adversarial pass survived148- [ ] STAGING banner + STAGING LOG present149- [ ] Mystery ledger updated if anything was deliberately withheld150151## Reference152153Method and research: `docs/worldbuilding/` (README, SYSTEM, SKILL, AGENTS,154TASTE, COLLABORATIONS, BEST_PRACTICES, `research/`, `patterns/`).155Canon vault: `.arcanea/lore/CANON_LOCKED.md`. Naming: `.arcanea/lore/NAMING_REGISTRY.md`.156Machine checks: `.claude/ci/lore-lint.mjs`. Open canon debt: issues #98, #99.