Sprint 56h: evolving character sheets + reliable injection

- Split project.rag.md into 6 focused RAG files (voice-signatures, magic-system,
  story-premise, factions, character-state, world-state)
- book_chapter.yml: PASS 0 STEP 5 replaced with live RAG character/world state check +
  location continuity validation; PASS 3 added for character+world state extraction after
  each chapter (rag_write -> character-state RAG + deliverable snapshot)
- chapter_polish.yml: PASS state extraction after final document (full-mode canonical state)
- book_outline.yml: added Factions section template with NPC memory model
- NEW character_update.yml: permanent arc change template (updates static char profile)
- chapter_review.yml: Sprint 56g voice authenticity fixes (fire/ice -> Body/Mind duality)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
David Baity
2026-03-23 01:06:15 -04:00
parent d54fc87b5d
commit 63f60559b0
12 changed files with 386 additions and 36 deletions

View File

@@ -1,4 +1,4 @@
name: book_chapter
name: book_chapter
description: "Write one chapter — continuity check, draft, self-check, then spawn editorial review."
debug: true
system: agent_prompt
@@ -94,20 +94,38 @@ steps:
- KEY BEATS: 35 numbered scene beats that will form the chapter
- CLOSING HOOK: Exact last image or line that makes readers continue
- Reminders about continuity, prose style, and target length
- CHARACTER VOICE PROFILES: Copy the "## Voice Signatures" section from the
Character Bible here verbatim. PASS 1 must write every character to their profile.
If no Voice Signatures section exists, omit this block.
STEP 5 — PREVIOUS CHAPTER CHARACTER STATE (if available):
If context contains a block starting with "PREVIOUS CHAPTER CHARACTER STATE:",
include it verbatim in the prompt under the heading:
"CHARACTER CONTINUITY: The previous chapter ended with these character states:
{prev_character_state}"
These states override any outline prediction that conflicts with them — the character
is ALREADY in this emotional/physical state at the start of this chapter.
If no character state was provided, skip this block entirely.
STEP 5 — CHECK LIVE CHARACTER STATE (if available):
Look in your RAG context for an asset called [character-state].
If it exists — this is WHERE and WHO each character is RIGHT NOW.
It OVERRIDES any outline predictions about character state.
Record as "LIVE CHARACTER STATE:" for use in PASS 1.
LOCATION CONTINUITY CHECK (perform this if [character-state] is present):
Does this chapter's outline place any character at a location inconsistent
with their Location field in [character-state]?
Example conflict: character-state says "Earth hospital" but outline opens on Mars.
If conflict found — FLAG before drafting:
"LOCATION CONFLICT: [char] is at [state-location] per last chapter but outline
places them at [outline-location]. Resolve: (a) open chapter in transit,
(b) adjust scene to actual location, or (c) write a time-skip bridge paragraph.
Do NOT silently teleport the character."
Also note any Active obligations, Open loops, or Known secrets from [character-state]
that should be honored or advanced in this chapter.
Also check RAG for [world-state] — current NPC attitudes and faction memory.
If present, record as "LIVE WORLD STATE:". Any NPC listed there who appears in
this chapter should behave according to their recorded attitude.
Stop here. Output ONLY the draft prompt. Do NOT write chapter prose yet.
- type: think
model: power
max_tokens: 32000
hint: |
PASS 1 — WRITE THE DRAFT
@@ -141,6 +159,28 @@ steps:
- Prefer scene motion over thesis delivery — action and dialogue carry meaning
- Write ONE complete draft now. Do NOT self-polish. Reviewers will give feedback downstream.
VOICE ANTI-PATTERNS — THESE ARE FORBIDDEN ON EVERY PAGE:
- Do NOT open any chapter with the "didn't just X; it Y" sentence construction.
Every chapter must have a structurally distinct opener. Vary: in medias res,
quiet beat, dialogue cold open, environmental sweep, interiority.
No two consecutive chapters may use the same opener structure.
- The book's thematic contrast (whatever it is — body/mind, memory/possibility, etc.)
may appear ONCE per scene as a metaphor. Not in every paragraph. Trust the reader.
If you have used the contrast in the last two paragraphs, you may not use it again
for at least three more paragraphs.
- Do NOT label an emotion that you have already shown through action or dialogue.
If the character's hands are shaking, do not also write "she was afraid."
If the dialogue already conveys anger, do not add "his voice was furious."
- Do NOT count or reference chapter numbers in the prose.
"Five chapters of..." is an AI fingerprint. Never.
- Each character must have at least ONE verbal imperfection per scene they appear in:
a sentence they don't finish, a word they use wrong, a line that doesn't land,
a moment of fumbling before the right words come. Perfect dialogue is dead dialogue.
- Check the CHARACTER VOICE PROFILE in the outline/bible (if present) — if each
speaking character's dialogue cannot be identified as THEIRS without a speaker tag,
rewrite until it can. Verbal tics, pet phrases, and characteristic patterns are
non-negotiable signatures.
Output ONLY the draft chapter text.
Start directly with the chapter title (e.g., "Chapter N: [Title]") and opening line.
No commentary, no plan headers, no "Pass 1" label.
@@ -209,10 +249,59 @@ steps:
verbatim everywhere else). Start the chapter directly with the chapter title
and first line. No preamble or commentary within the chapter text.
- type: think
hint: |
PASS 3 -- CHARACTER + WORLD STATE EXTRACTION
You have just completed the chapter. Extract structured state for continuity tracking.
Write in compact format -- this content will be stored as a RAG asset read by the
NEXT chapter's PASS 0. Every character who appeared must have an entry.
OUTPUT FORMAT -- write this EXACTLY, filling in real values:
# Character State: {chapter_ref}
## [Character Name]
Location: [specific location -- building, floor, city, planet -- no vague "nearby"]
Physical: [injuries, fatigue, notable physical state, or "no injuries"]
Emotional: [dominant emotion at chapter end; what they are CARRYING into next chapter]
Active obligations: [debts/promises owed, format: "owes [person] [what] (Ch[N]) -- UNPAID/PAID"]
Open loops: [unresolved conflicts, unanswered questions, format: "[parties] [issue] (Ch[N]) -- UNRESOLVED/RESOLVED"]
Known secrets: [information this character has that others don't -- format: "knows [what] -- [who does NOT know]"]
Arc: [XX%] -- [one sentence: what permanently changed in this character this chapter, or "no change"]
Permanent: [YES if something permanently changed (power gained/lost, relationship status changed, secret revealed); NO otherwise]
(Repeat for EVERY named character who appeared in this chapter)
# World State: {chapter_ref}
## NPC Memory
- [NPC Name] ([faction/location]): [ATTITUDE] -- [what happened] -- [behavioral consequence]
(List every NPC who interacted with a protagonist and now has a changed attitude)
## Faction Attitudes
- [Faction name]: [current attitude toward protagonists] -- [reason]
(List any faction whose attitude changed this chapter)
## Active World Events
- [Event]: [status and expected timeline]
(List any ongoing world events that will affect future chapters)
CRITICAL: Keep the total output under 3500 characters. Be precise and specific.
Do NOT write prose -- only the structured data above.
- type: rag_write
asset_id: "character-state"
max_chars: 4000
- type: document
filename: "character-state-{chapter_ref}"
- type: document
filename: "Chapter_{chapter_number}_draft"
- type: package
max_tokens: 12000
hint: |
The draft chapter has been written, self-checked, and committed.