diff --git a/novel/.opencode/agent/Importer.md b/novel/.opencode/agent/Importer.md index ae873e8..6bc774f 100644 --- a/novel/.opencode/agent/Importer.md +++ b/novel/.opencode/agent/Importer.md @@ -46,7 +46,7 @@ Classify the source into ONE of two cases by inspecting the directory: ### Case A — Existing OpenNovelWriter project -**Signals:** a `DATA/` folder with `wiki.yaml.md`, `timeline.yaml.md`, `glossary.yaml.md`, +**Signals:** a `DATA/` folder with `wiki.yaml.md`, `timeline.yaml.md`, `glossary.yaml.md`, `plot.md`, chapter folders like `01/DE/`, and an `.opencode/` with agent files. **Action:** this is a *reset/upgrade*. Preserve all DATA files and chapters, and @@ -146,3 +146,24 @@ Approve to write? Extract and summarize; never invent story facts. Present the mapping plan before writing. + + +## Extracting the story baseline — `DATA/plot.md` + +Sources usually carry the story in fragments rather than one spine: per-book summaries +(`Zusammenfassung.md`), a premise paragraph, weekly timeline notes, chapter titles, idea +files. Reconstruct them into `plot.md`: + +- **§1 Backbone** — the beats that must happen, per book. An existing manuscript's chapter + titles are legitimate raw material: they already encode the spine in order. Mark + anything inferred as *inferred*, and never invent a beat no source supports. +- **§2 Side stories** — threads you can point to in the source (a subplot with its own + characters, a mystery spanning chapters, a secondary family), each with the file you + took it from. **Flag them as candidates** for the author; never promote a fragment to a + canonical side story on your own. +- **§3 Baseline telling** — only if the source holds a first-person telling or transcript. + Verbatim, dated. +- **§4 Deviations** — left empty on import; it fills as the novel departs from the baseline. + +Never discard the summaries you drew from: `plot.md` holds the spine, the originals stay +as detail. Report what was mapped and what could not be placed. diff --git a/novel/.opencode/agent/OpenNovelAgent.md b/novel/.opencode/agent/OpenNovelAgent.md index abf86bd..e6fa2ed 100644 --- a/novel/.opencode/agent/OpenNovelAgent.md +++ b/novel/.opencode/agent/OpenNovelAgent.md @@ -48,16 +48,31 @@ The author is the creative authority. You are the partner who does the work: BEFORE you draft, revise, or translate a chapter, you MUST load: 1. `AGENTS.md` — project rules (languages, genre, audience) -2. `DATA/style.md` — the author's voice (MANDATORY) -3. `DATA/wiki.yaml.md` — the world wiki (characters, places, magic) -4. `DATA/timeline.yaml.md` — the timeline (what has happened so far) -5. `DATA/glossary.yaml.md` — translations (when translating) +2. `DATA/plot.md` — the story baseline: the main line + the side stories (MANDATORY) +3. `DATA/style.md` — the author's voice (MANDATORY) +4. `DATA/wiki.yaml.md` — the world wiki (characters, places, magic) +5. `DATA/timeline.yaml.md` — the timeline (what has happened so far) +6. `DATA/glossary.yaml.md` — translations (when translating) WHY: Without these files you produce generic AI prose instead of continuing the author's story. Inconsistent names, wrong tone, contradictions with the world = wasted work. CONSEQUENCE OF SKIPPING: Work that doesn't fit the established world = rework. + +**The baseline is intent, not a cage.** `DATA/plot.md` holds the main line AND an +explicit register of side stories. Read both: + +- Side stories are expected — they are what makes the world feel lived-in. Never treat + the backbone as the only permitted material. If you invent a thread that is worth + keeping, add it to the side-story register in `plot.md` (same turn, no extra question). +- The backbone is what must happen; the side stories are how it feels. A chapter that + advances neither is a chapter to reconsider. +- If the manuscript and the baseline disagree, do not silently pick one: report the + conflict and ask. The written novel outranks the baseline for what is *realised*; the + baseline outranks it for what is *planned*. +- If the author dictates a fresh telling, it goes into `plot.md` as a new dated section — + never overwrite the earlier one. diff --git a/novel/.opencode/agent/StoryReviewer.md b/novel/.opencode/agent/StoryReviewer.md index 273ca0e..ce39605 100644 --- a/novel/.opencode/agent/StoryReviewer.md +++ b/novel/.opencode/agent/StoryReviewer.md @@ -92,3 +92,17 @@ and suggest improvements. You report; you never rewrite. Cite the exact passage; no vague critique. Critique and suggest; never rewrite. + + +## Measuring against the baseline — `DATA/plot.md` + +Review the manuscript against the baseline, not against itself: + +1. **Backbone coverage** — is every §1 beat written, placed in a chapter, or still open? + Report beats that have gone missing (the usual failure: a beat the author told once and + nobody wrote down). +2. **Side-story presence** — which registered side stories appear in the written chapters, + which have stalled, which were never placed? +3. **Unregistered threads** — anything in the manuscript doing side-story work but absent + from the register. Those are the ones that will contradict something later. +4. **Deviations** — where the novel has left the baseline, so §4 stays honest. diff --git a/novel/.opencode/command/init.md b/novel/.opencode/command/init.md index 5987554..334b3aa 100644 --- a/novel/.opencode/command/init.md +++ b/novel/.opencode/command/init.md @@ -47,11 +47,23 @@ content in that language. Map the language to its ISO code in Ask these questions one at a time. Record the answers: -1. **Basic plot / premise** — the most important question: - > "Tell me the basic plot — what is the story about? What is to come?" +1. **The baseline telling** — the most important question, and the one the author is + most likely to want to *speak* rather than type: + > "Tell me the story — what happens, from the beginning to the end? Take your time." - The author describes the story in a few sentences. This is the SEED: you will - use it to pre-fill the world wiki and timeline, and to start building the world. + Say explicitly that a **spoken telling is welcome**: many authors dictate into a + note app and paste the transcript. If the author pastes one, keep it **verbatim** + in `DATA/plot.md` §3 — do not tidy it, ASR errors and all; it is the author's voice. + + Then split it into: + - **`plot.md` §1 Backbone** — the beats that must happen, one per line; + - **`plot.md` §2 Side stories** — every thread that is not the main line: whose + story it is, which books it spans, its status. Ask *"What else is going on + besides the main line?"* — side stories are expected, not optional. + + **Keep asking until the author says there is nothing left to tell.** The telling is + the seed for the wiki and the timeline, and the baseline every chapter is measured + against. 2. **Series title** (for metadata; defaults to the folder/workspace name) 3. **Sequel or standalone?** @@ -95,9 +107,12 @@ created and named): ### Step 4: Populate the DATA files +- **`plot.md`** → §1 backbone beats from the telling, §2 the side-story register, §3 the + verbatim transcription if the author dictated. The agent measures every chapter + against this file, so never leave §1 or §2 empty. - **`wiki.yaml.md`** → `meta:` block with the answers from Step 2 (title, author, - canonical, languages, genre, audience). Also fill `concept.premise:` with the - basic plot from Step 2, question 1. + canonical, languages, genre, audience). `concept.premise:` gets the SHORT premise — + `plot.md` holds the long form. - **`timeline.yaml.md`** → `story:` MUST be seeded with the premise as the first entry. Do NOT leave it empty. Example: diff --git a/novel/docs/SCHEMA.md b/novel/docs/SCHEMA.md index 62178ab..a0d17e7 100644 --- a/novel/docs/SCHEMA.md +++ b/novel/docs/SCHEMA.md @@ -25,6 +25,7 @@ Novels/ # the container vault (Obsidian) │ │ ├── wiki.yaml.md # world wiki (canonical) │ │ ├── timeline.yaml.md # timeline (lore history + plot) │ │ ├── glossary.yaml.md # translation glossary +│ │ ├── plot.md # the story baseline: main line + side stories │ │ └── style.md # the author's writing style │ ├── 01/ # Book 1 (folder = number, title optional) │ │ ├── DE/ # language folder (ISO-639-1 code) @@ -58,7 +59,7 @@ own, make the *book folder* a git repository — not the vault.) | **Language folder** | ISO-639-1 code (code only) | `DE`, `EN`, `PT` | | **Chapter file** | localized chapter word + 3-digit number | `Kapitel 001.md` | | **Chapter number** | 3 digits, zero-padded | `001` … `100` | -| **DATA files** | fixed English names | `wiki.yaml.md`, `timeline.yaml.md`, `glossary.yaml.md` | +| **DATA files** | fixed English names | `wiki.yaml.md`, `timeline.yaml.md`, `glossary.yaml.md`, `plot.md` | **Chapter word per language** (defined in `.opencode/languages.yaml`): - `de` → `Kapitel` @@ -158,6 +159,52 @@ terms: --- +### 5.4 `plot.md` — the Story Baseline + +The one DATA file that is **prose, not YAML**. It carries the author's own telling of +the story — the spine that both author and agent build around — and an explicit register +of the side stories that weave around it. + +```markdown +# Plot — + +> Baseline = the author's telling. It is the *main line*, not the whole story: +> side stories, subplots and new characters are expected and MUST be recorded here, +> or they are invisible to the agent. + +## 1. Backbone — what must happen +### Book 1 — +1. beat … +2. beat … + +## 2. Side stories (register) +| thread | whose story | spans | status | +|---|---|---|---| +| … | … | book 1–2 | planned / placed / written | + +## 3. Baseline telling (verbatim, dated) +Paste the transcription here, newest first. Never delete an older telling. + +## 4. Deviations — where the written novel left the baseline +## 5. Open threads / unresolved questions +``` + +**Rules** + +1. **Hierarchy:** `plot.md` is *intent* (what should happen), the manuscript is + *realised* (what is written), `Notizen/`/`wiki.yaml.md` is *detail canon*. On conflict, + the agent **reports** rather than silently picking; the author rules per case. +2. **The telling is verbatim material.** Spoken word transcribed by a note app is full of + errors, especially in invented names. Keep it as it came — it is the author's voice — + but when anything from it is *used*, normalise names against `wiki.yaml.md` and the + glossary first. +3. **Side stories are first-class.** A thread that is not in the register does not exist + as far as the agent is concerned. Add it the moment it is invented. +4. **Never delete a telling.** Re-recordings are appended as new dated sections; the older + one is history and shows how the story grew. + +--- + ## 6. Chapter Conventions - One `.md` file per chapter. diff --git a/novel/templates/DATA/plot.md b/novel/templates/DATA/plot.md new file mode 100644 index 0000000..dedc04c --- /dev/null +++ b/novel/templates/DATA/plot.md @@ -0,0 +1,40 @@ +# Plot — {{SERIES_TITLE}} + +> **Baseline = the author's telling.** This is the main line of the story, not the +> whole of it: side stories, subplots and new characters are expected — and they MUST +> be recorded in section 2, or the agent cannot see them. +> +> Hierarchy: this file is *intent*, the manuscript is *realised*, the wiki is *detail*. +> Where they disagree, report it and let the author rule — never silently pick one. + +## 1. Backbone — what must happen + +### Book 1 — {{BOOK_1_TITLE}} +1. {{BEAT}} +2. {{BEAT}} + +### Book 2 — {{BOOK_2_TITLE}} +1. {{BEAT}} + +## 2. Side stories (register) + +| thread | whose story | spans | status | +|---|---|---|---| +| {{THREAD}} | {{CHARACTER}} | book 1 | planned | + +Status values: `idea` → `planned` → `placed` (a chapter is assigned) → `written`. + +## 3. Baseline telling (verbatim, dated) + +### {{DATE}} — first telling + +{{Paste the transcription here, exactly as it came. Do not tidy it.}} + +## 4. Deviations — where the written novel left the baseline + +| chapter | baseline said | novel does | ruling | +|---|---|---|---| + +## 5. Open threads / unresolved questions + +- {{QUESTION}}