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:
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user