Files
David Baity 15d8ac44d2 Reader Knows Rule: truncate outline at chapter N, character state from prev chapter
- book_chapter.yml PASS 0: Reader Knows Rule box, outline truncated at chapter_number_next,
  character state priority chain (RAG first, then prev-chapter traits, not final-book state)
- drafting.yml PASS 0: same rule applied, voice-only character profiles
- chapter_pass0_bible.yml (included by scifi/ya/romance/cozy genre templates): same fix
  All three reference {chapter_number_prev}, {chapter_number_next}, {chapter_ref_prev}
  which are now injected by OutlineSyncService.CreateChapterTaskAsync

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-31 17:34:12 -04:00

212 lines
9.4 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

name: drafting
description: "Write one chapter in draft-only mode — continuity check, draft prompt, draft, character state extraction, then stop. No editorial pipeline."
debug: true
rag_exclude: [business_plan, charter]
system: agent_prompt
requires:
- genre_name
- genre_audience
- prose_style
- chapter_target_words
- chapter_ref
- chapter_number
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"
- "agent.rag.json"
sections:
- agent
- project
- rag
- skills
- deliverables
- message
- instructions
steps:
- type: think
hint: |
PASS 0 — BIBLE, CONTINUITY, AND DRAFT PROMPT
GENRE: {genre_name} | AUDIENCE: {genre_audience}
PROSE STYLE GUIDE: {prose_style}
TARGET CHAPTER LENGTH: ~{chapter_target_words} words
THIS CHAPTER: {chapter_number} ({chapter_ref})
CONTINUITY GUARDRAILS:
- Use ONLY the outline / character bible and the immediately previous chapter for continuity.
- Ignore future chapters, editorial reviews, roundtables, polish drafts, and any non-chapter artifacts.
- Never pull facts from a deliverable whose filename indicates a later chapter than {chapter_ref}.
╔══════════════════════════════════════════════════════════════════╗
║ THE READER KNOWS RULE ║
║ You may only use information established in chapters 1 through ║
║ {chapter_number}. Stop reading the outline at Chapter ║
║ {chapter_number_next}. Characters enter this chapter as they ║
║ left chapter {chapter_number_prev} -- not as they end at book ║
║ end. ║
╚══════════════════════════════════════════════════════════════════╝
STEP 1 — READ THE OUTLINE (chapters 1 through {chapter_number} ONLY):
Look at PROJECT DELIVERABLES for the outline file.
STOP at "Chapter {chapter_number_next}:" -- do NOT read beyond.
Extract and record:
- protagonist and supporting cast names
- world rules / constraints established SO FAR
- this chapter's summary, emotional beat, and closing hook from the outline
CHARACTER VOICE PROFILES (pre-extracted):
{character_profiles}
If this block is empty, search PROJECT DELIVERABLES for the outline file containing
"## Voice Signatures" and copy ONLY the voice/speech patterns here. Do NOT copy
arc resolution or end-state descriptions. PASS 1 must write every character
to their voice profile without exception.
STEP 2 — CHARACTER STATE (as of chapter {chapter_number_prev}):
Priority order:
1. RAG asset [character-state] — overrides everything. Record as "LIVE CHARACTER STATE:".
2. Established traits from the outline up to chapter {chapter_number_prev} only.
Ignore outcomes that happen in later chapters.
LOCATION CONTINUITY CHECK (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."
STEP 3 — 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 5.
STEP 4 — QUOTE THE ENDING:
Copy the LAST 23 sentences of the previous chapter here, word for word.
Label them: "PREVIOUS CHAPTER ENDED WITH: ..."
Your new chapter MUST pick up from this exact moment.
STEP 5 — BUILD THE DRAFT PROMPT:
Write the exact drafting prompt for the next pass. That prompt must include:
- CHAPTER: Exact chapter number and title
- POV CHARACTER: Whose perspective are we in?
- FIRST LINE: The exact opening sentence, continuing from the previous ending
- EMOTIONAL ARC: What does the protagonist feel at start vs end OF THIS CHAPTER?
- CHAPTER GOAL: What plot event MUST happen here?
- 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
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
model: power
hint: |
PASS 1 — WRITE THE DRAFT
Use the draft prompt below as your exact writing brief:
{steps[0].text}
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
- Show, don't tell — externalize emotion through action, detail, and dialogue
- Every scene beat moves the story forward OR reveals character
- 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 and opening line. No commentary, no "Pass 1" label.
- type: document
filename: "staging/drafts/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: "staging/drafts/character-state-{chapter_ref}"
- type: close
rag_update: true
adjudication:
enabled: false