From 177acdfa35feab2385249c532b67bbcc57e4a84b Mon Sep 17 00:00:00 2001 From: David Baity <158404677+MazakTheDwarf@users.noreply.github.com> Date: Sun, 22 Mar 2026 18:57:33 -0400 Subject: [PATCH] Sprint 56f: Human-readable file naming - Chapter_N_draft/review_a/b/c/final --- skills/guides/CozyMysteryGuide.md | 140 ++++++++++++++++++++++++++ steps/blog_draft_step.yml | 36 +++++++ steps/blog_polish_step.yml | 20 ++++ steps/chapter_pass0_bible.yml | 60 +++++++++++ steps/chapter_selfcheck.yml | 63 ++++++++++++ steps/cozy_chapter_pass1_draft.yml | 62 ++++++++++++ steps/fiction_editorial_spawn.yml | 62 ++++++++++++ steps/romance_chapter_pass1_draft.yml | 57 +++++++++++ steps/scifi_chapter_pass1_draft.yml | 60 +++++++++++ steps/ya_chapter_pass1_draft.yml | 53 ++++++++++ templates/blog_series_outline.yml | 118 ++++++++++++++++++++++ templates/blog_write.yml | 56 ++--------- templates/book_chapter.yml | 75 +++++++++++--- templates/book_outline.yml | 8 +- templates/chapter_polish.yml | 2 +- templates/chapter_review.yml | 2 +- templates/chapter_roundtable.yml | 1 + templates/cozy_mystery_chapter.yml | 33 ++++++ templates/romance_chapter.yml | 33 ++++++ templates/scifi_chapter.yml | 33 ++++++ templates/ya_chapter.yml | 30 ++++++ 21 files changed, 940 insertions(+), 64 deletions(-) create mode 100644 skills/guides/CozyMysteryGuide.md create mode 100644 steps/blog_draft_step.yml create mode 100644 steps/blog_polish_step.yml create mode 100644 steps/chapter_pass0_bible.yml create mode 100644 steps/chapter_selfcheck.yml create mode 100644 steps/cozy_chapter_pass1_draft.yml create mode 100644 steps/fiction_editorial_spawn.yml create mode 100644 steps/romance_chapter_pass1_draft.yml create mode 100644 steps/scifi_chapter_pass1_draft.yml create mode 100644 steps/ya_chapter_pass1_draft.yml create mode 100644 templates/blog_series_outline.yml create mode 100644 templates/cozy_mystery_chapter.yml create mode 100644 templates/romance_chapter.yml create mode 100644 templates/scifi_chapter.yml create mode 100644 templates/ya_chapter.yml diff --git a/skills/guides/CozyMysteryGuide.md b/skills/guides/CozyMysteryGuide.md new file mode 100644 index 0000000..0626528 --- /dev/null +++ b/skills/guides/CozyMysteryGuide.md @@ -0,0 +1,140 @@ +# Cozy Mystery Style Guide — Crimson Leaf Publishing + +This guide is authoritative for all cozy mysteries produced at CLP. +Every agent writing or editing cozy mystery content must read and apply this guide. + +--- + +## The Core Principle of the Cozy Mystery + +**Cozy mysteries are about community, not crime.** + +The murder (or theft, or scandal) is the catalyst. The real story is about a protagonist who is woven into the fabric of a small, richly rendered world, and who solves the crime precisely because they know that world from the inside out. The reader comes for the puzzle — they stay for the people, the place, and the warmth. + +A reader who solves the mystery on page two and reads to the end anyway is a reader who loves your characters and your world. That is the goal. + +--- + +## The Cozy Contract: What Readers Expect + +Cozy readers make a trust agreement with you on page one: + +1. **The world is safe at its core.** There is death, but no graphic gore. There is danger, but the protagonist will not be permanently traumatized. Good wins. +2. **The puzzle is fair.** Every clue needed to solve the mystery is visible to the reader before the reveal. Surprises that depend on information the reader never had feel like cheating. +3. **The community is real.** The recurring cast is the true product. Readers return for the friend group, the rival, the love interest, the eccentric neighbor — not just the mysteries. +4. **The protagonist is warm and competent.** They are not superhuman. They may be messy, funny, or in over their head — but they are genuinely good at noticing, and genuinely care about the people around them. + +Break this contract and you lose your readers. + +--- + +## Setting: The Community Is a Character + +### The Small-World Rule + +The setting must be small enough that everyone knows everyone — and large enough to hold secrets. A New England village. A small-town bakery. A knitting circle. A mountain resort in shoulder season. The boundaries of the world must be clear by chapter three. + +### Sensory Grounding + +Every scene should carry sensory detail specific to the setting: +- The smell of the bakery at 5 a.m. +- The way the rain sounds on the old church roof +- The texture of the quilt in the protagonist's lap +- The particular creak of the door at the hardware store + +Generic settings feel generic. Specific settings feel like home. + +### Seasonal and Temporal Rhythm + +Cozy mysteries live in time. Use seasonal details, local events (the Harvest Fair, the Summer Reading Program, the town council election) to ground the story in a specific moment. The world has a rhythm; the crime disrupts it; the resolution restores it. + +--- + +## The Amateur Sleuth + +### What Makes Them Good at This + +Your protagonist does not have detective training. They have **intimacy**. They know: +- Who is lying about being at the bookshop when the murder occurred (they've known her for twenty years) +- That the victim and the council chairman had a grudge going back to the zoning dispute in 2019 +- Which back gate is never locked, because they covered for the groundskeeper once + +The protagonist's edge is community knowledge, not technique. Honor this — never let them out-detective the detective on procedural grounds. Let them out-know the detective on personal grounds. + +### Voice + +The protagonist should be warm, observant, and gently funny. They notice things. They care about people, even the irritating ones. Their internal monologue should feel like a thoughtful neighbor narrating — not a thriller protagonist narrating. + +### Flaws and Limits + +The protagonist gets things wrong. They misread motives. They follow the wrong thread for two chapters. The false solution (thinking it was Character B before discovering it was Character D) is a structural requirement. The protagonist's fallibility makes the final solve satisfying. + +--- + +## The Mystery Architecture + +### The Fair-Play Clue Standard + +Every clue must be: +- **Present**: The reader sees it when the protagonist does (no off-page discoveries) +- **Discoverable**: If the reader went back to look, they'd find it in plain sight +- **Honest**: No clue should point so obviously to the culprit that it destroys the puzzle, but no clue should be so buried that no reader could ever catch it + +### The Suspect Architecture + +A well-structured cozy mystery has 4–6 suspects with: +- **A real motive** (even if they're innocent) +- **An opportunity** (even if alibi'd — alibis can be wrong) +- **A surface personality** (what the community believes about them) +- **A hidden layer** (what they're actually hiding — even innocent people have secrets) + +Red herrings must be earned. A red herring that seems planted only to mislead is a broken promise. A red herring that reveals something true about a character — even if not the murderer — is good storytelling. + +### Pacing: The Investigation Curve + +- **Act 1**: Establish the world and the victim (before death), introduce the protagonist in their element, then the crime +- **Act 2**: Investigation in waves — dead ends, new leads, community disruption, escalating tension (is the protagonist in danger?), false solution +- **Act 3**: Revelation scene (often a confrontation or gathering), resolution, restoration of community order + +Each chapter should advance one investigation beat AND one personal/community thread. + +--- + +## The Ensemble Cast + +Cozy readers return for the recurring cast. Every series needs: + +- **The Best Friend / Confidant**: Usually suspects everyone the protagonist doesn't; bounces theories; provides emotional support and comic relief +- **The Reluctant Authority Figure**: Police detective, sheriff, or inspector who finds the protagonist maddening but secretly relies on them +- **The Foil**: Someone whose values or approach to life productively conflict with the protagonist — not a villain, but a friction point that generates story +- **The Community Anchor**: The character who embodies the setting — the town elder, the longtime business owner, the local historian +- **The Love Interest** (series-long): Slow burn, not fast resolution. Attraction, obstacle, retreat, proximity. + +Every chapter should touch at least two of these relationships — ideally through story-relevant scenes, not just check-ins. + +--- + +## Humor: Light, Warm, and Character-Driven + +Cozy humor comes from: +- Characters being exactly themselves in absurd situations +- The gap between what a character says and what they mean +- Small-town logic applied to a murder investigation +- The protagonist's internal commentary on the people they love (gently) + +**Never**: dark humor, mean-spirited comedy, laughing at characters the reader should care about. + +**Always**: warmth first, wit second, never at the expense of the community. + +--- + +## The Cozy Mystery Signature Move + +Every great cozy mystery chapter has at least one moment that exemplifies the genre: + +- A community scene (the potluck, the town meeting, the shop floor) that feels completely normal EXCEPT that someone is hiding something +- A piece of gossip that turns out to be a clue +- A moment of genuine warmth between protagonist and community member that reminds the reader why this world is worth protecting +- A small, specific, sensory detail about the setting that makes the world feel real and precious + +The crime is temporary. The community is permanent. Write every chapter like you believe that. diff --git a/steps/blog_draft_step.yml b/steps/blog_draft_step.yml new file mode 100644 index 0000000..77b8033 --- /dev/null +++ b/steps/blog_draft_step.yml @@ -0,0 +1,36 @@ +type: think +max_tokens: 4000 +hint: | + BLOG POST DRAFT + + ASSIGNMENT + Title: {item_title} + Brief: {item_brief} + Target reader: {audience} + Voice: {voice} + Word count target: {item_target_words} words + Keywords to work in naturally: {item_keywords} + + Before writing, confirm: + - TOPIC and TARGET READER + - HOOK: the first sentence drops the reader into a real scenario or provocative question + - PROMISE: the one thing they walk away with + - KEY POINTS to cover (use the brief above) + - TONE and WORD COUNT TARGET + - CALL TO ACTION + + Write the full blog post: + - # Title as H1 (make it specific and curiosity-driven, not generic) + - Optional subhead in italics + - Opening hook: first 2–3 sentences pull the reader in immediately + - Body: 3–5 sections with bold subheadings, short readable paragraphs + - At least one concrete example, number, or real scenario per section + - "Try This Week" or equivalent action section before the closing + - Memorable closing line that reinforces the promise + + Tone rules (apply the voice above): + - Peer-to-peer. Write like a knowledgeable friend, not a corporate brochure. + - Use "you" and "your" — not "one" or "the reader." + - Short sentences preferred. No filler paragraphs. + - No listicles of 10+ items without grouping them into themes. + - Work the keywords in naturally — never stuff them. diff --git a/steps/blog_polish_step.yml b/steps/blog_polish_step.yml new file mode 100644 index 0000000..6423e20 --- /dev/null +++ b/steps/blog_polish_step.yml @@ -0,0 +1,20 @@ +type: think +max_tokens: 4000 +model: power +hint: | + BLOG POST POLISH + + Read your draft as the target reader would on their phone. + + Apply these editorial passes in sequence: + 1. CUT — eliminate any warmup sentences, vague generalities, or brochure-speak + 2. SHARPEN — every subheading should be scannable and specific + 3. HOOK CHECK — does the opening pull in the first two sentences? + 4. CTA CHECK — is the call to action specific and doable this week? + 5. VOICE CHECK — does it sound human and direct throughout? + 6. KEYWORD CHECK — are the keywords present and naturally integrated (not stuffed)? + + Target word count: stay within the specified range. Quality over quantity. + + Output ONLY the polished final blog post starting with # [Title]. + No commentary, no "Pass 2" label, no preamble. diff --git a/steps/chapter_pass0_bible.yml b/steps/chapter_pass0_bible.yml new file mode 100644 index 0000000..7cd117d --- /dev/null +++ b/steps/chapter_pass0_bible.yml @@ -0,0 +1,60 @@ +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 + + GENRE GUIDE: Your skills section contains exactly the guide for {genre_name}. Apply it fully. + + 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}. + + ⚠️ CRITICAL: Your task name tells you EXACTLY which chapter to write. + Look at the CURRENT MESSAGE — write THAT chapter and ONLY that chapter. + Do NOT write Chapter 1 unless the message explicitly says "Chapter 1". + + STEP 1 — READ THE OUTLINE / CHARACTER BIBLE: + Look at PROJECT DELIVERABLES for the outline file (it contains the Character Bible + if this is a fiction project, and the Chapter Outline for all projects). + Extract and record: + - Protagonist: exact name, voice description, age (if fiction) + - Love interest and supporting characters: exact names and roles (if fiction) + - World rules / constraints (if paranormal or speculative) + - This chapter's summary, emotional beat, and closing hook from the outline + If no outline/bible is available, use the character names and project details + from the task description above — be CONSISTENT throughout the book. + + 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. + + STEP 3 — QUOTE THE ENDING: + Copy the LAST 2–3 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 4 — BUILD THE DRAFT PROMPT: + Write the exact drafting prompt for the next pass. That prompt must include: + - CHAPTER: Exact chapter number and title (from the task message) + - 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? + - CHAPTER GOAL: What plot event MUST happen here? + - KEY BEATS: 3–5 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 + + 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. + + Stop here. Output ONLY the draft prompt. Do NOT write chapter prose yet. diff --git a/steps/chapter_selfcheck.yml b/steps/chapter_selfcheck.yml new file mode 100644 index 0000000..48b8839 --- /dev/null +++ b/steps/chapter_selfcheck.yml @@ -0,0 +1,63 @@ +type: think +hint: | + SELF-CHECK — STRUCTURAL VALIDATION ONLY + + You have just written a chapter draft. Your job here is narrow: check the draft against + the structural checklist below, apply ONLY the corrections that fall within scope, and + output the final chapter. + + DRAFT TO CHECK: + {steps[1].text} + + CHECKLIST — check each item, note any issue found: + 1. BEAT & HOOK: Does the chapter reach its intended emotional beat and closing hook + from the PASS 0 draft prompt? Flag if the chapter ends without the planned hook. + 2. NAMES & POV: Are all character names and the POV consistent with the bible/outline? + Flag any name that doesn't match the project canon. + 3. CONTINUITY TERMS: Do world rules, place names, and timeline references match + project state? Flag any factual break. + 4. FORMATTING: Are there obvious section-break artifacts, duplicate headers, + or missing chapter title? Flag and fix. + 5. WORD FLOOR: Is the draft within 10% of {chapter_target_words}? Flag only if + critically short (more than 20% under target) — do not expand for style. + 6. OPENING HOOK: Check the PASS 0 draft prompt ({steps[0].text}) for a line labeled + "LOCKED PREVIOUS CHAPTER HOOK:". If present, verify the chapter's opening paragraph + directly resolves it. If not, add a brief resolution sentence at the opening — + do not leave a locked hook unanswered. + 7. AUTHOR'S INTENT: Check the PASS 0 draft prompt ({steps[0].text}) for a line + starting with "AUTHOR'S INTENT:". If present, confirm the completed chapter + satisfies that intent — note whether it was honored or partially missed. + + ALLOWED CORRECTIONS: + - Fix a wrong character name to match the canon name + - Fix a POV slip (e.g., the chapter is 1st-person but one paragraph shifted to 3rd) + - Fix a missing or duplicated chapter title/header + - If the chapter is missing its closing hook entirely, add it as a final paragraph + that matches the hook specified in the draft prompt — no new invention beyond the + planned hook + + NOT ALLOWED — do not make any of these changes: + - Improve any sentence for prose quality, rhythm, or lyricism + - Deepen emotional beats or add interiority + - Expand any description or add sensory detail + - Reorder scenes or restructure the chapter + - Add new metaphors, aphorisms, or quotable lines + - Normalize or upgrade the authorial voice + + OUTPUT FORMAT: + Start your response with a VALIDATION LOG section: + VALIDATION LOG: + 1. BEAT & HOOK: [check pass/fail with brief note] + 2. NAMES & POV: [check pass/fail with brief note] + 3. CONTINUITY TERMS: [check pass/fail with brief note] + 4. FORMATTING: [check pass/fail — note any fixes applied] + 5. WORD FLOOR: [check pass/fail — include word count] + 6. OPENING HOOK: [check pass/fail or N/A] + 7. AUTHOR'S INTENT: [honored / partially missed — note / N/A if no intent set] + + Then output the separator on its own line: + ---BEGIN CHAPTER--- + + Then output the final chapter text (corrected where structurally required, + verbatim everywhere else). Start the chapter directly with the chapter title + and first line. No preamble or commentary within the chapter text. diff --git a/steps/cozy_chapter_pass1_draft.yml b/steps/cozy_chapter_pass1_draft.yml new file mode 100644 index 0000000..5663a3f --- /dev/null +++ b/steps/cozy_chapter_pass1_draft.yml @@ -0,0 +1,62 @@ +type: think +model: power +hint: | + PASS 1 — WRITE THE COZY MYSTERY CHAPTER 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 — the reader expects the answer immediately + - If the draft prompt contains a line starting with "AUTHOR'S INTENT:", treat it as a + binding creative directive — your draft must satisfy that intent in full + - Follow the KEY BEATS in order, but write with full scene depth — don't skip + - All character names, the town layout, and recurring elements 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 (no filler) + - 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 you have not reached {chapter_target_words} words, continue + writing — add warm detail, community scenes, extended dialogue beats, and character moments + until you hit the target. Short chapters will be REJECTED in adjudication. + + DRAFTING DISCIPLINE — apply these on every page: + - {prose_style} is a hard constraint, not decoration + - Not every paragraph needs a memorable or quotable line — use functional connective prose + - Let observation precede interpretation: show the moment before naming what it means + - Avoid clustering aphorisms or thesis-style sentences back to back + - 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. + + COZY MYSTERY CRAFT RULES — these apply on every page: + - THE SETTING IS A CHARACTER: The small town, the bakery, the knitting circle — these are + not backdrop, they are the emotional heart of the series. Give the setting sensory life on + every page: smells, textures, seasonal details, the rhythms of community life. + - COZY WARMTH IS NON-NEGOTIABLE: There is death, but no graphic gore. Danger is present, but + the world is ultimately safe and resolvable. Readers come here for comfort. The protagonist + is competent, good-hearted, and embedded in a community that matters to them. + - CLUE INTEGRITY: Every clue dropped must be discoverable by the reader in retrospect. + No solutions pulled from nowhere. Suspects and red herrings are played fair — they have + real motives, even if they didn't commit the crime. + - THE AMATEUR SLEUTH VOICE: Your protagonist is not a professional detective. They notice + things because they KNOW this community, these people, these routines. The edge they have + over police is intimacy, not technique. Honor that — let their community knowledge be their + superpower. + - ENSEMBLE IS EVERYTHING: Cozy mysteries live or die on the recurring cast. Every chapter + should feel the community around the protagonist: the best friend who over-shares, the + rival who isn't entirely wrong, the authority figure who is simultaneously helpful and + obstructive. These relationships are the true product. + - HUMOR AND HEART: Cozy mysteries are warm books. There must be humor — light, character- + driven, never mean-spirited. There must be heart — the protagonist cares about these people + and this place, even the irritating ones. + - PACING: Cozy chapters move through scenes naturally, never rushed. A chapter might include + an investigation beat, a community scene, and a personal moment. Balance all three. + + 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. diff --git a/steps/fiction_editorial_spawn.yml b/steps/fiction_editorial_spawn.yml new file mode 100644 index 0000000..04680ed --- /dev/null +++ b/steps/fiction_editorial_spawn.yml @@ -0,0 +1,62 @@ +type: package +hint: | + The draft chapter has been written, self-checked, and committed. + + CRITICAL — include the `chapter_text` field: + Copy the COMPLETE chapter text from the self-check output (step 2 — the final chapter draft) + into the `chapter_text` field. + Reviewers have NO other way to access the chapter content. + Do NOT summarize or truncate it — include every word of the chapter. + + Now spawn the three independent editorial reviewers + and the roundtable debate. Use the exact task_names shown — the roundtable depends_on all three. +schema: + chapter_text: string +spawn: + - task_type: chapter_review + task_name: "Review (Devon): {chapter_ref}" + agent_name: Devon + priority: 6 + context: + chapter_text: "{chapter_text}" + review_focus: developmental + genre_name: "{genre_name}" + genre_audience: "{genre_audience}" + chapter_ref: "{chapter_ref}" + - task_type: chapter_review + task_name: "Review (Lane): {chapter_ref}" + agent_name: Lane + priority: 6 + context: + chapter_text: "{chapter_text}" + review_focus: line + genre_name: "{genre_name}" + genre_audience: "{genre_audience}" + chapter_ref: "{chapter_ref}" + - task_type: chapter_review + task_name: "Review (Cora): {chapter_ref}" + agent_name: Cora + priority: 6 + context: + chapter_text: "{chapter_text}" + review_focus: continuity + genre_name: "{genre_name}" + genre_audience: "{genre_audience}" + chapter_ref: "{chapter_ref}" + - task_type: chapter_roundtable + task_name: "Roundtable: {chapter_ref}" + agents: + - Devon + - Lane + - Cora + priority: 7 + context: + chapter_text: "{chapter_text}" + genre_name: "{genre_name}" + genre_audience: "{genre_audience}" + chapter_ref: "{chapter_ref}" + chapter_target_words: "{chapter_target_words}" + depends_on: + - "Review (Devon): {chapter_ref}" + - "Review (Lane): {chapter_ref}" + - "Review (Cora): {chapter_ref}" diff --git a/steps/romance_chapter_pass1_draft.yml b/steps/romance_chapter_pass1_draft.yml new file mode 100644 index 0000000..20644e8 --- /dev/null +++ b/steps/romance_chapter_pass1_draft.yml @@ -0,0 +1,57 @@ +type: think +model: power +hint: | + PASS 1 — WRITE THE ROMANCE CHAPTER 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 — the reader expects the answer immediately + - If the draft prompt contains a line starting with "AUTHOR'S INTENT:", treat it as a + binding creative directive — your draft must satisfy that intent in full + - Follow the KEY BEATS in order, but write with full scene depth — don't skip + - 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 (no filler) + - 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 you have not reached {chapter_target_words} words, continue + writing — add interiority, sensory detail, extended dialogue beats, and scene transitions + until you hit the target. Short chapters will be REJECTED in adjudication. + + DRAFTING DISCIPLINE — apply these on every page: + - {prose_style} is a hard constraint, not decoration + - Not every paragraph needs a memorable or quotable line — use functional connective prose + - Let observation precede interpretation: show the moment before naming what it means + - Avoid clustering aphorisms or thesis-style sentences back to back + - 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. + + ROMANCE-SPECIFIC CRAFT RULES — these apply on every page: + - TENSION IS THE PRODUCT: Every scene between leads must have an undercurrent of want, + resistance, or denial. The reader must feel the pull even in mundane exchanges. + - THE SLOW BURN BANK: Each chapter should deposit into the romantic tension account. + A lingering glance. An interrupted touch. A sentence that almost says something. + No withdrawal (resolution) until the story earns it. + - INTERNAL STAKES: Romantic conflict is internal as much as external. What is she afraid + of? What is she protecting herself from? Give us the emotional wound and let it shape + every interaction with the love interest. + - SEXUAL TENSION (if appropriate to heat level): Not explicit in narrative unless the + project specifies — but physical awareness is always there. The smell of his jacket. + The accidental brush of hands. The protagonist is hyper-aware of proximity. + - SWOON MOMENTS: Plan at least one moment per chapter that the reader will screenshot + and send to a friend. One line, one gesture, one micro-scene that is memorable. + - DIALOGUE IS SUBTEXT: Romance characters rarely say what they mean. Give us the conversation + underneath the conversation. She says "It's fine." She means "I need you to fight for this." + - PACING: Slow build. Do NOT resolve the primary romantic tension early. Push through to + the black moment before the earned resolution. + + 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. diff --git a/steps/scifi_chapter_pass1_draft.yml b/steps/scifi_chapter_pass1_draft.yml new file mode 100644 index 0000000..34135ec --- /dev/null +++ b/steps/scifi_chapter_pass1_draft.yml @@ -0,0 +1,60 @@ +type: think +model: power +hint: | + PASS 1 — WRITE THE SCIENCE FICTION CHAPTER 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 — the reader expects the answer immediately + - If the draft prompt contains a line starting with "AUTHOR'S INTENT:", treat it as a + binding creative directive — your draft must satisfy that intent in full + - Follow the KEY BEATS in order, but write with full scene depth — don't skip + - All character names, alien species, and world terminology 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 (no filler) + - 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 you have not reached {chapter_target_words} words, continue + writing — add interiority, sensory detail, extended dialogue beats, and scene transitions + until you hit the target. Short chapters will be REJECTED in adjudication. + + DRAFTING DISCIPLINE — apply these on every page: + - {prose_style} is a hard constraint, not decoration + - Not every paragraph needs a memorable or quotable line — use functional connective prose + - Let observation precede interpretation: show the moment before naming what it means + - Avoid clustering aphorisms or thesis-style sentences back to back + - 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. + + SCIENCE FICTION CRAFT RULES — these apply on every page: + - WORLDBUILDING BY IMMERSION: Do not pause to explain your world. Characters live in it. + Let technology, politics, and history emerge through action and dialogue, not exposition. + "She scanned for temporal residue" tells us about the world without stopping to define it. + - INTERNAL LOGIC IS NON-NEGOTIABLE: Your world's rules must be established and honored. + If FTL travel has a cost, that cost appears on every jump. If psionics tire the user, + fatigue is present. Consistency is the contract with the reader. + - THE IDEA IS A CHARACTER: Science fiction ideas (the alien biology, the AI ethics + dilemma, the political paradox) are as much a character as any person. Give the idea + presence in every chapter — don't let it fade into backdrop. + - SCALE WITHOUT LOSING THE HUMAN: The universe can be vast, the stakes cosmic — but anchor + each chapter in one person's experience, one pair of hands, one heartbeat. The reader + cannot feel interstellar scale; they CAN feel one soldier's fear before the breach. + - SENSE OF WONDER: Every chapter should have at least one moment that enlarges the reader's + imagination — a view, a revelation, a technology, a moral question — that makes the + universe feel genuinely strange and genuinely real at the same time. + - ALIEN AUTHENTICITY: Non-human characters must not be humans in costumes. Alien cognition, + alien values, alien humor. If a species has a different relationship with time or memory, + show it in their dialogue and choices. + - PACING: Alternate tension with revelation. Each chapter should push the external plot + forward AND deliver one new piece of world or character understanding. + + 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. diff --git a/steps/ya_chapter_pass1_draft.yml b/steps/ya_chapter_pass1_draft.yml new file mode 100644 index 0000000..e6bf97e --- /dev/null +++ b/steps/ya_chapter_pass1_draft.yml @@ -0,0 +1,53 @@ +type: think +model: power +hint: | + PASS 1 — WRITE THE YA CHAPTER 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 — the reader expects the answer immediately + - If the draft prompt contains a line starting with "AUTHOR'S INTENT:", treat it as a + binding creative directive — your draft must satisfy that intent in full + - Follow the KEY BEATS in order, but write with full scene depth — don't skip + - 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 (no filler) + - 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 you have not reached {chapter_target_words} words, continue + writing — add interiority, sensory detail, extended dialogue beats, and scene transitions + until you hit the target. Short chapters will be REJECTED in adjudication. + + DRAFTING DISCIPLINE — apply these on every page: + - {prose_style} is a hard constraint, not decoration + - Not every paragraph needs a memorable or quotable line — use functional connective prose + - Let observation precede interpretation: show the moment before naming what it means + - Avoid clustering aphorisms or thesis-style sentences back to back + - 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. + + YA-SPECIFIC CRAFT RULES — these apply on every page: + - AUTHENTIC TEEN VOICE: Your protagonist thinks and speaks like an actual teenager. + Not a precocious adult, not a caricature. Short, fragmented thoughts. Reactions before + analysis. The world feels high-stakes even for "small" problems — that's real teen experience. + - EMOTIONAL STAKES: Everything feels life-or-death. A rumor is social death. Being left out + is gut-punch lonely. A first kiss is epoch-defining. Honor this even if the plot is bigger. + - NO ADULT WISDOM INJECTION: Your teen protagonist does not land on wise, balanced conclusions. + They overcorrect, lash out, apologize awkwardly, misread situations. Growth is messy. + - INTERIORITY IS CORE: In YA, the internal monologue IS the story. External event + internal + reaction × 3 = a chapter. Give us at least two beats of deep interiority per scene. + - FRIENDSHIP/BELONGING: Even if the plot is about monsters, the emotional core is about + whether the protagonist belongs, is loved, is seen. Keep that alive in every chapter. + - PACING: YA chapters end on hooks. Momentum over description. No scene lasts longer than + it earns. Get out of scenes early. + + 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. diff --git a/templates/blog_series_outline.yml b/templates/blog_series_outline.yml new file mode 100644 index 0000000..e770228 --- /dev/null +++ b/templates/blog_series_outline.yml @@ -0,0 +1,118 @@ +name: blog_series_outline +description: "Plan a blog series — generate a numbered multi-post outline with title, brief, and keywords per post." +debug: true +system: agent_prompt + +agent_prompt: + - "= identity.md" + - "agent.rag.json" + +sections: + - agent + - project + - rag + - deliverables + - message + - instructions + +steps: + - type: think + hint: | + You are planning a blog series for the project described above. + + Read the project description and current message to understand: + - SERIES TOPIC: What is the overall theme or subject? + - TARGET READER: Who is this series for? What is their experience level? + - VOICE: What tone should the posts use? (e.g., conversational, authoritative, peer-to-peer) + - POST COUNT: How many posts? (default to 10 if not specified) + - POST LENGTH: Target word count per post? (default to 800-1200 if not specified) + + First, organize the series into 3-5 thematic clusters. Each cluster covers one + dimension of the topic. This ensures the series doesn't repeat itself and builds + progressively. + + Think through: + - What does a beginner need to know first? + - What intermediate topics will add depth? + - What advanced or nuanced topics complete the picture? + - What "quick win" or highly shareable posts should be included? + + Output a CLUSTER PLAN: + Cluster A: [Name] + - [3-4 post ideas that belong here] + Cluster B: [Name] + ... + + Stop here — the numbered outline comes in the next step. + + - type: think + model: power + hint: | + Using the cluster plan above, write the COMPLETE numbered outline. + + For each post, output exactly this format on ONE LINE: + N. [Post Title] — [2-3 sentence brief covering what the post does]. Keywords: [kw1, kw2, kw3] + + Rules: + - Titles must be specific and curiosity-driven (not "Introduction to X" — instead "Why X breaks and how to fix it") + - Briefs must be 2-3 sentences describing the actual content (not the title restated) + - 3 keywords per post: 1 primary, 2 supporting (naturally integrated, not stuffed) + - Number sequentially from 1 to N + - Posts should build logically — early posts don't assume knowledge from later posts + - Vary post types: how-to, analysis, checklist, case study, opinion, beginner explainer + - At least 2 posts should be "highly shareable" (strong opinion, surprising finding, or practical quick-win) + + Output ONLY the numbered list. No prose, no cluster headings, no commentary. + + - type: document + filename: "{{task_name_slug}}-outline" + + - type: package + packet_type: IntakeResponse + hint: | + Convert every post from the numbered blog outline above into a create_task action. + + RULES: + - One action per post, in order + - task_name: "Write Post N: [Post Title]" where N is the exact post number from the outline + - agent_name: "Iris" + - task_type: "blog_write" + - description: Start with the post title, then the 2-3 sentence brief, then "Keywords: [keywords]" + Full format: + "[Post Title] + + [Full brief from the outline — 2-3 sentences describing what the post covers] + + Keywords: [comma-separated keywords from the outline]" + - depends_on: "" (all posts can be written in parallel) + + Produce ONLY the numbered actions. No prose, no commentary. + schema: + actions: + - type: create_task + task_name: "string" + agent_name: "string" + task_type: "blog_write" + description: "string" + depends_on: "string" + + - type: close + rag_update: true + +adjudication: + enabled: true + pass_threshold: 65 + deliverable_type: coordination + criteria: + completeness: + weight: 35 + description: "All posts have title, brief, and keywords in the correct format" + variety: + weight: 30 + description: "Posts cover different angles, formats, and difficulty levels — no redundancy" + progression: + weight: 20 + description: "Series builds logically; posts don't assume knowledge the series hasn't covered" + shareability: + weight: 15 + description: "At least 2 posts have obvious viral or sharing potential" diff --git a/templates/blog_write.yml b/templates/blog_write.yml index 5455677..36c2459 100644 --- a/templates/blog_write.yml +++ b/templates/blog_write.yml @@ -3,6 +3,13 @@ description: "Write a standalone blog post — draft, polish, deliver." debug: true system: agent_prompt +requires: + - item_title + - item_brief + - voice + - audience + - item_target_words + skills: - guides/BlogWritingGuide.md @@ -21,55 +28,10 @@ sections: - instructions steps: - - type: think - max_tokens: 4000 - hint: | - Your task message contains the blog content brief. Follow it exactly. - - Before writing, confirm: - - TOPIC and TARGET READER - - HOOK: the first sentence drops the reader into a real scenario or provocative question - - PROMISE: the one thing they walk away with - - KEY POINTS to cover - - TONE and WORD COUNT TARGET - - CALL TO ACTION - - Write the full blog post: - - # Title as H1 (make it specific and curiosity-driven, not generic) - - Optional subhead in italics - - Opening hook: first 2–3 sentences pull the reader in immediately - - Body: 3–5 sections with bold subheadings, short readable paragraphs - - At least one concrete example, number, or real scenario per section - - "Try This Week" or equivalent action section before the closing - - Memorable closing line that reinforces the promise - - Tone rules: - - Peer-to-peer. Write like a knowledgeable friend, not a corporate brochure. - - Use "you" and "your" — not "one" or "the reader." - - Short sentences preferred. No filler paragraphs. - - No listicles of 10+ items without grouping them into themes. - - - type: think - max_tokens: 4000 - model: power - hint: | - Read your draft as the target reader would on their phone. - - Apply these editorial passes in sequence: - 1. CUT — eliminate any warmup sentences, vague generalities, or brochure-speak - 2. SHARPEN — every subheading should be scannable and specific - 3. HOOK CHECK — does the opening pull in the first two sentences? - 4. CTA CHECK — is the call to action specific and doable this week? - 5. VOICE CHECK — does it sound human and direct throughout? - - Target word count: stay within the specified range. Quality over quantity. - - Output ONLY the polished final blog post starting with # [Title]. - No commentary, no "Pass 2" label, no preamble. - + - include: steps/blog_draft_step.yml + - include: steps/blog_polish_step.yml - type: document filename: "{{task_name_slug}}" - - type: close rag_update: true diff --git a/templates/book_chapter.yml b/templates/book_chapter.yml index 9a6fd04..12e63d9 100644 --- a/templates/book_chapter.yml +++ b/templates/book_chapter.yml @@ -10,15 +10,25 @@ requires: - chapter_target_words - chapter_ref -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" -# Genre-aware guide use: All three genre guides are injected so this template -# can serve any fiction genre. Apply ONLY the guide that matches {genre_name}. -# Ignore guides for other genres — conflicting craft signals from non-matching -# genres will degrade the chapter. The active genre is always {genre_name}. +# Genre-aware guide use: Only the guide whose genre_contains keywords match {genre_name} +# is injected. The pipeline skips non-matching guides entirely, so there are no +# conflicting craft signals from other genres. agent_prompt: - "= identity.md" @@ -43,8 +53,7 @@ steps: PROSE STYLE GUIDE: {prose_style} TARGET CHAPTER LENGTH: ~{chapter_target_words} words - ⚠️ SKILLS & GUIDES NOTE: You have multiple genre guides available. - Apply ONLY the guide that matches {genre_name}. Ignore guides for other genres. + GENRE GUIDE: Your skills section contains exactly the guide for {genre_name}. Apply it fully. CONTINUITY GUARDRAILS: - Use ONLY the outline / character bible and the immediately previous chapter for continuity. @@ -86,6 +95,15 @@ steps: - CLOSING HOOK: Exact last image or line that makes readers continue - Reminders about continuity, prose style, and target length + 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. + Stop here. Output ONLY the draft prompt. Do NOT write chapter prose yet. - type: think @@ -101,6 +119,8 @@ steps: - 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 — the reader expects the answer immediately + - If the draft prompt contains a line starting with "AUTHOR'S INTENT:", treat it as a + binding creative directive — your draft must satisfy that intent in full - Follow the KEY BEATS in order, but write with full scene depth — don't skip - All character names must be consistent with the bible/outline - Every dialogue exchange must be tight and voice-distinct @@ -151,6 +171,9 @@ steps: "LOCKED PREVIOUS CHAPTER HOOK:". If present, verify the chapter's opening paragraph directly resolves it. If not, add a brief resolution sentence at the opening — do not leave a locked hook unanswered. + 7. AUTHOR'S INTENT: Check the PASS 0 draft prompt ({steps[0].text}) for a line + starting with "AUTHOR'S INTENT:". If present, confirm the completed chapter + satisfies that intent — note whether it was honored or partially missed. ALLOWED CORRECTIONS: - Fix a wrong character name to match the canon name @@ -168,12 +191,26 @@ steps: - Add new metaphors, aphorisms, or quotable lines - Normalize or upgrade the authorial voice - Output the FINAL CHAPTER (corrected where structurally required, verbatim everywhere else). - Start directly with the chapter title and first line. - No preamble, no validation notes, no commentary — ONLY the chapter text. + OUTPUT FORMAT: + Start your response with a VALIDATION LOG section: + VALIDATION LOG: + 1. BEAT & HOOK: [check pass/fail with brief note] + 2. NAMES & POV: [check pass/fail with brief note] + 3. CONTINUITY TERMS: [check pass/fail with brief note] + 4. FORMATTING: [check pass/fail — note any fixes applied] + 5. WORD FLOOR: [check pass/fail — include word count] + 6. OPENING HOOK: [check pass/fail or N/A] + 7. AUTHOR'S INTENT: [honored / partially missed — note / N/A if no intent set] + + Then output the separator on its own line: + ---BEGIN CHAPTER--- + + Then output the final chapter text (corrected where structurally required, + verbatim everywhere else). Start the chapter directly with the chapter title + and first line. No preamble or commentary within the chapter text. - type: document - filename: "chapter-{chapter_ref}" + filename: "Chapter_{chapter_number}_draft" - type: package hint: | @@ -194,34 +231,43 @@ steps: task_name: "Review (Devon): {chapter_ref}" agent_name: Devon priority: 6 + _if: "not meta.is_locked" context: chapter_text: "{chapter_text}" review_focus: developmental genre_name: "{genre_name}" genre_audience: "{genre_audience}" chapter_ref: "{chapter_ref}" + chapter_number: "{chapter_number}" + review_letter: "a" - task_type: chapter_review task_name: "Review (Lane): {chapter_ref}" agent_name: Lane priority: 6 + _if: "not meta.is_locked" context: chapter_text: "{chapter_text}" review_focus: line genre_name: "{genre_name}" genre_audience: "{genre_audience}" chapter_ref: "{chapter_ref}" + chapter_number: "{chapter_number}" + review_letter: "b" - task_type: chapter_review task_name: "Review (Cora): {chapter_ref}" agent_name: Cora priority: 6 + _if: "not meta.is_locked" context: chapter_text: "{chapter_text}" review_focus: continuity genre_name: "{genre_name}" genre_audience: "{genre_audience}" chapter_ref: "{chapter_ref}" + chapter_number: "{chapter_number}" + review_letter: "c" - task_type: chapter_roundtable task_name: "Roundtable: {chapter_ref}" @@ -230,6 +276,7 @@ steps: - Lane - Cora priority: 7 + _if: "not meta.is_locked" context: chapter_text: "{chapter_text}" genre_name: "{genre_name}" diff --git a/templates/book_outline.yml b/templates/book_outline.yml index 66182d7..99c999b 100644 --- a/templates/book_outline.yml +++ b/templates/book_outline.yml @@ -211,7 +211,13 @@ steps: - EXACTLY one action per chapter from PART 2 of the outline — no more, no less - task_name format: "Write Chapter N: [Chapter Title]" (N is a plain number, 1, 2, 3...) - agent_name: always "Iris" - - task_type: always "book_chapter" + - task_type: choose based on genre_name from the outline: + * "ya_chapter" → if genre_name contains "YA" or "Young Adult" + * "romance_chapter" → if genre_name contains "Romance" or "Contemporary Romance" + * "scifi_chapter" → if genre_name contains "Science Fiction" or "Sci-Fi" or "Space Opera" + * "cozy_mystery_chapter" → if genre_name contains "Cozy Mystery" or "Mystery" + * "adult_novel_chapter" → if genre_name contains "Adult" and not YA + * "book_chapter" → all other genres (default) - description: > Include the chapter summary, POV character, emotional beat, cliffhanger, character state, dominant tension, and opening location from the chapter outline. diff --git a/templates/chapter_polish.yml b/templates/chapter_polish.yml index cf0230a..7fa64e7 100644 --- a/templates/chapter_polish.yml +++ b/templates/chapter_polish.yml @@ -76,7 +76,7 @@ steps: No commentary, no change log, no editorial notes — ONLY the chapter. - type: document - filename: "{{task_name_slug}}-polished" + filename: "Chapter_{chapter_number}_final" - type: close rag_update: true diff --git a/templates/chapter_review.yml b/templates/chapter_review.yml index 74f8560..b8c0887 100644 --- a/templates/chapter_review.yml +++ b/templates/chapter_review.yml @@ -66,7 +66,7 @@ steps: Reserve judgment on full rewrites — that decision belongs to the roundtable. - type: document - filename: "review-{chapter_ref}-{agent_slug}" + filename: "Chapter_{chapter_number}_review_{review_letter}" - type: close rag_update: false diff --git a/templates/chapter_roundtable.yml b/templates/chapter_roundtable.yml index baadae3..6ecc780 100644 --- a/templates/chapter_roundtable.yml +++ b/templates/chapter_roundtable.yml @@ -110,6 +110,7 @@ steps: genre_name: "{genre_name}" genre_audience: "{genre_audience}" chapter_ref: "{chapter_ref}" + chapter_number: "{chapter_number}" chapter_target_words: "{chapter_target_words}" adjudication: diff --git a/templates/cozy_mystery_chapter.yml b/templates/cozy_mystery_chapter.yml new file mode 100644 index 0000000..6975dc2 --- /dev/null +++ b/templates/cozy_mystery_chapter.yml @@ -0,0 +1,33 @@ +name: cozy_mystery_chapter +description: "Write one cozy mystery chapter — fair-play clues, warm community life, and an amateur sleuth who wins through intimacy not expertise." +extends: book_chapter + +# Cozy mystery projects load the genre guide from skills +skills: + - guides/CozyMysteryGuide.md + +steps: + - include: steps/chapter_pass0_bible.yml + - include: steps/cozy_chapter_pass1_draft.yml + - include: steps/chapter_selfcheck.yml + - type: document + filename: "chapter-{chapter_ref}" + - include: steps/fiction_editorial_spawn.yml + - type: close + rag_update: true + +adjudication: + pass_threshold: 80 + criteria: + clue_integrity: + weight: 20 + description: "Any clue or red herring introduced is discoverable in retrospect — nothing comes from nowhere; suspects have real motives" + cozy_atmosphere: + weight: 15 + description: "The chapter feels warm, community-rooted, and safe — the world is troubled but ultimately resolvable; no gratuitous darkness" + ensemble_presence: + weight: 15 + description: "Recurring cast members contribute meaningfully — the community feels alive, not just backdrop" + prose_quality: + weight: 20 + description: "Writing is vivid and readable; voice is consistent with {prose_style}" diff --git a/templates/romance_chapter.yml b/templates/romance_chapter.yml new file mode 100644 index 0000000..2c30694 --- /dev/null +++ b/templates/romance_chapter.yml @@ -0,0 +1,33 @@ +name: romance_chapter +description: "Write one Romance chapter — sexual tension, slow burn, and earned emotional stakes." +extends: book_chapter + +# Romance projects load the Romance guide directly +skills: + - guides/RomanceFictionGuide.md + +steps: + - include: steps/chapter_pass0_bible.yml + - include: steps/romance_chapter_pass1_draft.yml + - include: steps/chapter_selfcheck.yml + - type: document + filename: "chapter-{chapter_ref}" + - include: steps/fiction_editorial_spawn.yml + - type: close + rag_update: true + +adjudication: + pass_threshold: 80 + criteria: + romantic_tension: + weight: 25 + description: "Chapter builds or maintains palpable tension between leads; slow-burn deposit honored" + swoon_moment: + weight: 15 + description: "At least one memorable micro-scene that captures the romantic promise of the story" + emotional_authenticity: + weight: 15 + description: "Internal stakes are clear; the protagonist's resistance/want feels real, not contrived" + prose_quality: + weight: 20 + description: "Writing is vivid and readable; voice is consistent with {prose_style}" diff --git a/templates/scifi_chapter.yml b/templates/scifi_chapter.yml new file mode 100644 index 0000000..7286999 --- /dev/null +++ b/templates/scifi_chapter.yml @@ -0,0 +1,33 @@ +name: scifi_chapter +description: "Write one science fiction chapter — internal logic, sense of wonder, and human stakes inside a vast universe." +extends: book_chapter + +# Sci-fi projects load the SciFi guide directly +skills: + - guides/SciFiFictionGuide.md + +steps: + - include: steps/chapter_pass0_bible.yml + - include: steps/scifi_chapter_pass1_draft.yml + - include: steps/chapter_selfcheck.yml + - type: document + filename: "chapter-{chapter_ref}" + - include: steps/fiction_editorial_spawn.yml + - type: close + rag_update: true + +adjudication: + pass_threshold: 80 + criteria: + worldbuilding_consistency: + weight: 20 + description: "World rules established earlier in the manuscript are honored — no retcons or forgotten constraints" + internal_logic: + weight: 15 + description: "Technology, alien biology, political systems, and physics behave consistently within the story's own rules" + sense_of_wonder: + weight: 15 + description: "At least one moment per chapter enlarges the reader's imagination — a revelation, a view, a moral question" + prose_quality: + weight: 20 + description: "Writing is vivid and readable; voice is consistent with {prose_style}" diff --git a/templates/ya_chapter.yml b/templates/ya_chapter.yml new file mode 100644 index 0000000..9b0ba9d --- /dev/null +++ b/templates/ya_chapter.yml @@ -0,0 +1,30 @@ +name: ya_chapter +description: "Write one YA chapter — authentic teen voice, emotional stakes, and fast pacing." +extends: book_chapter + +# YA projects load the YA guide directly (no conditional matching needed) +skills: + - guides/YAFictionGuide.md + +steps: + - include: steps/chapter_pass0_bible.yml + - include: steps/ya_chapter_pass1_draft.yml + - include: steps/chapter_selfcheck.yml + - type: document + filename: "chapter-{chapter_ref}" + - include: steps/fiction_editorial_spawn.yml + - type: close + rag_update: true + +adjudication: + pass_threshold: 82 + criteria: + ya_voice_authenticity: + weight: 20 + description: "Protagonist has an authentic teen voice — not an adult impersonating a teenager" + emotional_stakes: + weight: 15 + description: "Chapter stakes feel genuinely high to the teen protagonist, even if objectively small" + prose_quality: + weight: 20 + description: "Writing is vivid and readable; voice is consistent with {prose_style}"