Previous rule was hint-only and ignored by LLM deep in long context.
Now uses system: override (added to system prompt) plus hyper-explicit
step-by-step self-check targeting Kaelen by name. Dead = no Location,
no Physical, no Emotional, no Arc. Final self-check before submit.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Added DECEASED CHARACTER RULE block at top of PASS 3 hint. Dead characters
get a two-line entry (Established + Legacy), NO Location/Physical/Emotional/Arc.
Prevents the LLM from inventing living Kaelen presence in Ch 6-12 state files.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add source_step: 4 so rag_write explicitly targets PASS 3 output instead of
relying on last_text() which could fall back to the chapter document text.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Changed 'STRUCTURAL VALIDATION ONLY' → 'STRUCTURAL VALIDATION AND WORD-COUNT EXPANSION'
- Word floor check now EXPANDS (not just flags) when draft is >10% below chapter_target_words
- Added expansion rules: interiority, sensory grounding, dialogue beats, scene transitions
- Added max_tokens: 32000 and model: power to self-check step for capacity headroom
- Removed 'Expand any description or add sensory detail' from NOT ALLOWED (only applies to existing prose)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- 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>
Chapter_N_draft doc step was placed after PASS 3 think, so last_text()
returned char state (3151 chars) instead of the actual chapter from SELF-CHECK.
Moved doc step to immediately after step 2 (SELF-CHECK).
New step order: 0-think, 1-think, 2-think(selfcheck), 3-doc(draft),
4-think(charstate), 5-rag_write, 6-doc(charstate), 7-package, 8-close
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- book_chapter: Remove PASS 2+3 (internal polish cycle); replace with narrow
SELF-CHECK step (structural validation only — names/POV/hook/format/word-floor).
Add anti-overpolish drafting discipline rules to PASS 1.
Add genre-aware guide-use note (apply only the guide matching {genre_name}).
Update adjudication prose_quality description to match draft-quality standard.
- chapter_polish: Convert from broad 'Rewrite the chapter' pass to bounded
editorial control pass. Explicitly forbids expansion, sensory addition,
global voice upgrades, new content. Instructs verbatim preservation of
unaffected paragraphs. Adjudication rewritten around correction fidelity
rather than 'more polished is better'. Threshold lowered from 90 to 80.
- chapter_review: Add explicit output categories — STRENGTHS TO PRESERVE,
MUST-FIX CONTINUITY, MUST-FIX CLARITY, OPTIONAL, FORBIDDEN, VERDICT.
Remove 'REWRITE' verdict option (roundtable resolves that). Remove all three
writing-craft guides (editorial tasks do not need genre writing guidance).
- chapter_roundtable: Update CONSENSUS REACHED block to MUST APPLY / OPTIONAL /
PRESERVE / VERDICT categories. Require disagreements to be resolved before
calling consensus. Remove REWRITE verdict option. Remove all writing-craft
guides. Remove 'skills' from sections. Add package hint to populate key_changes
from the full structured consensus. Update adjudication to score structured output.
- book_outline: Strengthen Voice & Tone Guide as hard operating constraints
(not aspirations); include anti-overpolish rules, rhythm rules, and voice
don'ts. Expand per-chapter outline format to include Opens-at location,
Character state, and Dominant tension. Enrich chapter task description
packets with that state data so book_chapter has richer upstream context.
- skills/skills.md: Document writing-vs-editorial guide split established in
Sprint 56. Update Used-by column. Add boundary rules section.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This change reorganizes the repository structure to keep the root directory
clean. All 15 project folders are now nested under projects/, alongside
infrastructure directories (agents/, templates/, deliverables/, rag/, skills/).
This allows the repository to grow without polluting the core service directories.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Skills guides wired (all were dead code — no templates declared skills:):
- book_chapter.yml: YAFictionGuide + RomanceFictionGuide + SciFiFictionGuide
- chapter_review.yml: same (Devon, Lane, Cora reviewers now have genre context)
- chapter_roundtable.yml: same (debate participants use genre craft knowledge)
- chapter_polish.yml: same (Iris polishes with full genre guide in context)
- short_story.yml: same
- blog_write.yml: BlogWritingGuide
- recipe_develop.yml: RecipeWritingGuide
All templates updated to include 'skills' in sections list so guides
are injected as SKILLS & GUIDES block in the prompt.
Iris RAG deduplication:
- agents/iris/rag/agent.rag.md: 15 near-identical entries -> 2 canonical
Entry 1: Bible & Continuity Check requirement
Entry 2: Editorial assignments (Devon/Lane/Cora with their roles)
13 duplicates removed
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
chapter_roundtable.yml:
- Reduce max_iterations 9 → 5 (3 rounds of 3 editors is enough; 9 was
burning credits in a retry loop after credit exhaustion)
- Add explicit 'Once any participant outputs CONSENSUS REACHED, the
debate is over' — prevents continuation into wasted rounds
planning.yml:
- Add ANTI-HALLUCINATION RULE FOR AGENTS block: explicitly names the
known ghost agents (Worldbuilder, Prose Engine, Plot Architect, etc.)
and forbids their use; maps task types to canonical CLP agents so
planning LLM has unambiguous fallback assignments
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- chapter_polish: remove sections:deliverables — chapter text already in
{chapter_text}; this caused 150KB+ prompts for late chapters (40MB logs)
- chapter_roundtable: require structured CONSENSUS REACHED block so
key_changes is always formatted as an extractable string; change
key_changes schema from list to string to match
- book_chapter: remove sections:history to reduce context; restructure
Pass 0 to plan-only (no prose output) so the chapter is only written
once in Pass 1 instead of twice; add explicit instruction in package
hint to copy full chapter_text into spawn context
- short_story: remove sections:history and sections:deliverables (standalone
task, needs neither); restructure Pass 0 to plan-only, Pass 1 to write;
add note to handle literal {genre_name} placeholders gracefully
- recipe_develop, ai_article_write, blog_write: remove sections:history
(these standalone tasks do not need full project conversation history;
deliverables kept so they can read the research/plan file)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- pass_threshold: 65→60 (reviews scoring 58-64 are high quality but barely
missing the bar; editorial reviews are inherently subjective)
- deliverable_type: coordination→editorial_review (correct semantic type)
- Improved criteria descriptions to clearly signal this is an editorial
feedback document, not a task completion report
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
With 3 agents and max_iterations=3, effective_max=max(3,3)=3, meaning
each agent speaks exactly once per roundtable — no back-and-forth.
Adjudicator correctly rejected these as incomplete (score=0-58 on
completeness/consensus_clarity/actionability).
9 iterations = 3 full rounds for 3 agents, allowing genuine debate:
Round 1: Initial assessments | Round 2: Responses | Round 3: Consensus
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace agent_name: Devon with agents: [Devon, Lane, Cora] so the
chapter_roundtable task has all three editors rotating in the debate.
Addresses user feedback that roundtable should not be a specific
agent - everyone in the editorial team should be drafted.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Double-brace {{agent_slug}} left outer braces in filename even after
substitution, causing all 3 reviewers (Devon/Lane/Cora) to write to
the same file review-ch-XX-{agent-slug}.md overwriting each other.
Single-brace now correctly produces review-ch-XX-devon.md etc.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- BOARDROOM RULE: when request is a strategic debate/deliberation, create
ONE task_type: boardroom for Selene, NOT content pipeline tasks
- NO-RE-PIPELINE RULE: if project already has book_research/outline/chapters
in history, do NOT restart the pipeline mid-flight
Fixes Issue where planning incorrectly spawned a full research pipeline
when asked for a boardroom session, creating a 3rd set of Hollow Crown chapters.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Root cause: AR retries book_outline when score < 60; each retry's package step
creates a new batch of chapters. InProgress chapters can't be deleted on rejection
so multiple sets accumulate. The boardroom deliberation (4 rounds) is the quality
gate — no retry needed at the outline level.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- book_chapter.yml: spawn Roundtable task with agent_name: Devon
(dispatcher requires at least one agent; Devon chairs the roundtable
while rotate_participants still drafts all available editors)
- chapter_roundtable.yml: spawn Polish task with agent_name: Iris
(Iris is the designated chapter polish author)
Previously: dispatch_create_task_skipped reason=no_agent for both tasks.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CLP's chapter_roundtable doesn't extract individual editor finals
(it's roster-driven, not hardcoded to Devon/Lane/Cora).
Removed the three empty context references from the polish step hint.
consensus_critique already summarizes all editorial positions.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
LLM was creating 20 tasks (2x outlines worth) because the hint said
'minimum {chapter_count|10} chapters'. Changed to explicit 'count the
chapters in the outline and create that exact number of actions'.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- book_research.yml: add inference hint when genre_name/genre_audience/research_focus are empty
- book_outline.yml: add inference hint for genre/audience; change package schema to ask LLM
to FILL genre_name/genre_audience/prose_style/chapter_target_words from the outline text
(was using {template_vars} which stay empty unless planning sets them)
- devon/agent.yml: add chapter_roundtable to supported_templates
- lane/agent.yml: add chapter_roundtable to supported_templates
(all three editors now participate in roundtable — roster-driven, not hardcoded)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
IntakeResponse packet type is for intake routing only, not child task creation.
Replace with type: spawn (same pattern as book_research.yml) to correctly
spawn the ai_article_plan task after research completes.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Templates spawned from genesis only receive a description, not pre-set
context variables. Removing requires: prevents step-0 failures when the
story brief is rich enough for Iris to infer genre/audience/prose style.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The serialization think step (step 2) had a hardcoded list of generic task types
(research_plus, draft, review, polish, etc.) — these NEVER matched CLP templates.
This is the root cause of auto-hired agents and quick-task fallbacks for all
book/story/article pipelines.
Replaced with:
- Instruction to use ONLY task types from TEAM ROSTER supported_templates
- Explicit sequencing rules for book, article, blog, recipe, short story pipelines
- Book pipeline: book_research first, cascade handles the rest
- Article pipeline: ai_article_research first
- Blog: blog_research per post
- Recipe: recipe_collection_plan
- Short story: short_story
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Genesis must spawn exactly ONE task (book_research, short_story,
recipe_collection_plan, ai_article_research, blog_research, or planning).
The cascade templates handle everything downstream automatically.
This prevents Nova from skipping the book_research→book_outline pipeline
and spawning chapters/editorial tasks without proper context.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- templates/genesis.yml: copied from global seed, fixed to use
roster-driven task types (no hardcoded generic type list)
- agents/nova/agent.yml: added genesis to supported_templates
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>