feat(campaigns): separate GM truth from PC knowledge

Hidden truth lives in gm/; state/knowledge.md holds what the PC knows,
believes, and suspects. Everything else in a campaign stays player-facing.
This commit is contained in:
2026-09-13 16:50:18 +08:00
parent b524e5f0cf
commit 3005fd7038
7 changed files with 153 additions and 15 deletions
+24
View File
@@ -0,0 +1,24 @@
# GM only
Truth the PC has not learned: hidden motives, unrevealed identities, off-screen
events, and what is really going on.
**Not player-facing.** The player may read anything else in the campaign, so a
secret must never be written outside `gm/`. Nothing here may appear in a session
log or in chat until the PC observes it or is told.
Keep `../state/knowledge.md` as the PC's counterpart: what they know, believe,
and suspect. When the two disagree, `knowledge.md` is what the PC currently
thinks — narrate from it, not from here.
## Retconning
You may change a fact here after the fact, but only in the layer the PC has not
perceived. The test is perception: if every session-log entry and everything in
`state/knowledge.md` still reads exactly as before, the retcon is invisible and
allowed. What the PC saw, heard, or was told stays fixed; the cause behind it
may change.
Use it to repair a plot that cannot otherwise be made to work. Do not use it
liberally, and never to dodge a consequence the fiction already earned. Record
each one in `retcons.md`.
+12
View File
@@ -0,0 +1,12 @@
# Retcons
A log of facts changed after the fact. Each entry records what changed and why,
so the change is not quietly contradicted later.
A retcon is only allowed in the layer the PC has not perceived: every session
log entry and every line of `../state/knowledge.md` must still read exactly as
before. See `README.md`.
| Session | What changed | Why |
|---------|--------------|-----|
| | | |
+31
View File
@@ -0,0 +1,31 @@
# What the PC knows
The PC's working picture of the world — not the world itself. Narration may draw
on these entries and on what the PC perceives now; anything the PC has not
learned belongs in `../gm/`.
Update this file whenever a scene reveals something, confirms a suspicion, or
overturns a belief. A mistaken belief stays here under Suspected until the PC
learns better, even after the GM knows the truth.
## Known
Facts the PC has learned or observed, and where they learned them.
| Fact | Learned |
|------|---------|
| | |
## Suspected
Things the PC believes but has not confirmed — including beliefs that are wrong.
| Belief | Basis |
|--------|-------|
| | |
## Open questions
Questions the PC is actively trying to answer.
-
@@ -2,6 +2,9 @@
One file per faction, named `kebab-case.md`.
These files are player-facing: record what the PC has observed or been told. A
hidden agenda or an off-screen plan belongs in `../../gm/`.
```markdown
---
name:
@@ -3,6 +3,9 @@
One file per location, named `kebab-case.md`. Keep the frontmatter stable so
the agent can update it in place.
These files are player-facing: record what the PC has observed or could observe.
A hidden truth the PC has not yet learned belongs in `../../gm/`.
```markdown
---
name:
+3
View File
@@ -2,6 +2,9 @@
One file per NPC, named `kebab-case.md`.
These files are player-facing: record what the PC has observed or been told. A
hidden motive or an unrevealed identity belongs in `../../gm/`.
```markdown
---
name: