Sprint 56h: butterfly effect + character sheet auto-import

- drafting.yml: add {character_profiles} in PASS 0, PASS 3 character state
  extraction, rag_write for character-state asset (enables butterfly effect
  in draft mode), document for character-state file, conditional_skills
- character_sheet.yml: add rag_write step writing voice-sig-{slug} asset
  so auto-import can pick up completed character sheets from RagMemory
- book_chapter.yml: package hint now detects new characters from PASS 3
  Character State (spawns character_sheet tasks) and detects Permanent:YES
  changes (spawns character_update tasks)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
David Baity
2026-03-24 22:46:22 -04:00
parent 6b00fcb6bc
commit 40f22fa685
3 changed files with 126 additions and 7 deletions

View File

@@ -315,6 +315,17 @@ steps:
Reviewers have NO other way to access the chapter content. Reviewers have NO other way to access the chapter content.
Do NOT summarize or truncate it — include every word of the chapter. Do NOT summarize or truncate it — include every word of the chapter.
NEW CHARACTER DETECTION (Bug G fix):
Look at the Character State from PASS 3 above (step 4). For each character listed there
whose name slug does NOT already have a "character-{slug}" file in PROJECT DELIVERABLES,
emit one additional create_task action per new character using task_type: character_sheet.
This ensures new characters introduced in this chapter get proper character sheets.
PERMANENT CHANGE DETECTION (butterfly effect):
For any character in the Character State whose "Permanent:" field is YES,
emit one additional create_task action using task_type: character_update.
This triggers the character update pipeline to record deaths, power changes, etc.
Now spawn the three independent editorial reviewers Now spawn the three independent editorial reviewers
and the roundtable debate. Use the exact task_names shown — the roundtable depends_on all three. and the roundtable debate. Use the exact task_names shown — the roundtable depends_on all three.
schema: schema:

View File

@@ -74,6 +74,21 @@ steps:
- type: document - type: document
filename: "character-{character_name_slug}" filename: "character-{character_name_slug}"
- type: rag_write
asset_id: "voice-sig-{character_name_slug}"
hint: |
Extract ONLY the voice signature entry for {character_name} in this exact format.
Do NOT include any other sections. Do NOT paraphrase — copy directly from the
Voice Signature section of the character sheet you just wrote.
### {character_name} — Voice Signature
- Role: [from ## Identity: Role field]
- Voice tone: [from ## Voice Signature: stress scale value]
- Speech pattern: [from ## Voice Signature: sentence length pattern]
- What they NEVER say: [from ## Voice Signature: never-say entry]
- Verbal tic: [from ## Voice Signature: tic/catchphrase entry]
- Notes: [first 2 bullets from ## Notes for Writers]
- type: close - type: close
rag_update: true rag_update: true

View File

@@ -1,5 +1,5 @@
name: drafting name: drafting
description: "Write one chapter in draft-only mode — continuity check, draft prompt, draft, then stop." description: "Write one chapter in draft-only mode — continuity check, draft prompt, draft, character state extraction, then stop. No editorial pipeline."
debug: true debug: true
system: agent_prompt system: agent_prompt
@@ -9,11 +9,23 @@ requires:
- prose_style - prose_style
- chapter_target_words - chapter_target_words
- chapter_ref - chapter_ref
- chapter_number
skills: conditional_skills:
- guides/YAFictionGuide.md - path: guides/YAFictionGuide.md
- guides/RomanceFictionGuide.md genre_contains:
- guides/SciFiFictionGuide.md - "YA"
- "Young Adult"
- path: guides/RomanceFictionGuide.md
genre_contains:
- "Romance"
- "Contemporary Romance"
- path: guides/SciFiFictionGuide.md
genre_contains:
- "Science Fiction"
- "Sci-Fi"
- "SciFi"
- "Science-Fiction"
agent_prompt: agent_prompt:
- "= identity.md" - "= identity.md"
@@ -55,6 +67,13 @@ steps:
If no outline/bible is available, use the character names and project details If no outline/bible is available, use the character names and project details
from the task description above — be CONSISTENT throughout the book. from the task description above — be CONSISTENT throughout the book.
CHARACTER VOICE PROFILES (pre-extracted):
{character_profiles}
If this block is empty, search PROJECT DELIVERABLES for the outline file containing
"## Voice Signatures" and copy those profiles here. PASS 1 must write every character
to their voice profile without exception.
STEP 2 — FIND THE PREVIOUS CHAPTER: STEP 2 — FIND THE PREVIOUS CHAPTER:
Look at PROJECT DELIVERABLES for the chapter that comes BEFORE this one. Look at PROJECT DELIVERABLES for the chapter that comes BEFORE this one.
If no previous chapter exists (this IS Chapter 1), skip to STEP 4. If no previous chapter exists (this IS Chapter 1), skip to STEP 4.
@@ -75,6 +94,24 @@ steps:
- CLOSING HOOK: Exact last image or line that makes readers continue - CLOSING HOOK: Exact last image or line that makes readers continue
- Reminders about continuity, prose style, and target length - Reminders about continuity, prose style, and target length
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]?
If conflict found — FLAG before drafting:
"LOCATION CONFLICT: [char] is at [state-location] per last chapter but outline
places them at [outline-location]. Resolve by opening in transit or adjusting."
Also note any Active obligations, Open loops, or Known secrets from [character-state]
that should be honored or advanced in this chapter.
Check RAG for [world-state] — current NPC attitudes and faction memory.
If present, record as "LIVE WORLD STATE:". NPCs listed there behave per their attitude.
Stop here. Output ONLY the draft prompt. Do NOT write chapter prose yet. Stop here. Output ONLY the draft prompt. Do NOT write chapter prose yet.
- type: think - type: think
@@ -88,6 +125,9 @@ steps:
Requirements: Requirements:
- Start with the FIRST LINE you planned — make it continue naturally from the previous chapter - Start with the FIRST LINE you planned — make it continue naturally from the previous chapter
- If the draft prompt contains a line starting with "LOCKED PREVIOUS CHAPTER HOOK:",
your FIRST LINE MUST directly resolve that hook
- If the draft prompt contains "AUTHOR'S INTENT:", treat it as a binding directive
- Follow the KEY BEATS in order, but write with full scene depth - Follow the KEY BEATS in order, but write with full scene depth
- All character names must be consistent with the bible/outline - All character names must be consistent with the bible/outline
- Every dialogue exchange must be tight and voice-distinct - Every dialogue exchange must be tight and voice-distinct
@@ -96,14 +136,67 @@ steps:
- End with the CLOSING HOOK you planned - End with the CLOSING HOOK you planned
- Match the prose style guide: {prose_style} - Match the prose style guide: {prose_style}
- Target length: {chapter_target_words} words — write the FULL chapter, not a summary - Target length: {chapter_target_words} words — write the FULL chapter, not a summary
- ⚠️ DO NOT stop early. If under {chapter_target_words} words, continue with interiority,
sensory detail, extended dialogue beats, and transitions until hitting the target.
VOICE ANTI-PATTERNS — FORBIDDEN ON EVERY PAGE:
- Do NOT open with the "didn't just X; it Y" construction. Use varied openers.
- Thematic contrast appears max ONCE per scene as metaphor — not every paragraph.
- Do NOT label an emotion already shown through action or dialogue.
- Do NOT count or reference chapter numbers in the prose. "Five chapters of..." is an AI fingerprint.
- Each character must have at least ONE verbal imperfection per scene they appear in.
Output ONLY the draft chapter text. Output ONLY the draft chapter text.
Start directly with the chapter title (e.g., "Chapter N: [Title]") and opening line. Start directly with the chapter title and opening line. No commentary, no "Pass 1" label.
No commentary, no plan headers, no "Pass 1" label.
- type: document - type: document
filename: "chapter-{chapter_ref}" filename: "chapter-{chapter_ref}"
- type: think
hint: |
PASS 3 — CHARACTER + WORLD STATE EXTRACTION
You have just completed the chapter draft. Extract structured state for continuity tracking.
Write in compact format — this content is stored as a RAG asset read by the NEXT chapter.
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 — no vague "nearby"]
Physical: [injuries, fatigue, notable physical state, or "no injuries"]
Emotional: [dominant emotion at chapter end; what they carry into next chapter]
Active obligations: [debts/promises owed — format: "owes [person] [what] (Ch[N]) — UNPAID/PAID"]
Open loops: [unresolved conflicts — format: "[parties] [issue] (Ch[N]) — UNRESOLVED/RESOLVED"]
Known secrets: [info this character has that others don't — "knows [what] — [who does NOT know]"]
Arc: [XX%] — [one sentence: what permanently changed, or "no change"]
Permanent: [YES if something permanently changed (death, power gained/lost, relationship changed); 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]
## Faction Attitudes
- [Faction name]: [current attitude toward protagonists] — [reason]
## Active World Events
- [Event]: [status and expected timeline]
CRITICAL: Keep 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: close - type: close
rag_update: true rag_update: true