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

@@ -1,5 +1,5 @@
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
system: agent_prompt
@@ -9,11 +9,23 @@ requires:
- prose_style
- chapter_target_words
- chapter_ref
- chapter_number
skills:
- guides/YAFictionGuide.md
- guides/RomanceFictionGuide.md
- guides/SciFiFictionGuide.md
conditional_skills:
- path: guides/YAFictionGuide.md
genre_contains:
- "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:
- "= identity.md"
@@ -55,6 +67,13 @@ steps:
If no outline/bible is available, use the character names and project details
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:
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.
@@ -75,6 +94,24 @@ steps:
- CLOSING HOOK: Exact last image or line that makes readers continue
- 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.
- type: think
@@ -88,6 +125,9 @@ steps:
Requirements:
- 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
- All character names must be consistent with the bible/outline
- Every dialogue exchange must be tight and voice-distinct
@@ -96,14 +136,67 @@ steps:
- End with the CLOSING HOOK you planned
- Match the prose style guide: {prose_style}
- 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.
Start directly with the chapter title (e.g., "Chapter N: [Title]") and opening line.
No commentary, no plan headers, no "Pass 1" label.
Start directly with the chapter title and opening line. No commentary, no "Pass 1" label.
- type: document
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
rag_update: true