1. editor.py — Fix rewrite_chapter_content to use model_writer (was model_logic).
Chapter rewrites now use the creative writing model, not the cheaper analysis model.
2. editor.py — evaluate_chapter_quality now uses keep_head=True so the evaluator
sees the chapter opening (engagement hook, sensory anchoring) as well as the
ending; long chapters no longer scored on tail only.
3. editor.py — Consistency analysis sampling upgraded to head+middle+tail (was
head+tail), giving the LLM a complete view of each chapter's events.
4. writer.py — max_attempts is now adaptive: climax/resolution chapters
(position >= 0.75) receive 3 refinement attempts; others keep 2.
5. writer.py — Polish-skip threshold tightened from 0.012 to 0.008 (1 filter
word per 125 words vs. 1 per 83 words), so more borderline drafts are cleaned.
6. style_persona.py — Persona validation sample increased from 200 to 400 words
for more reliable voice quality assessment.
Version bumped: 3.0 → 3.1
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Step 1 (Bible-Tracking Merge):
- Added merge_tracking_to_bible() to story/bible_tracker.py — merges character
tracking state and lore back into bible dict after each chapter, making
blueprint_initial.json the single persistent source of truth.
- Integrated in cli/engine.py after each chapter's update_tracking + update_lore_index
calls so the persisted bible is always up-to-date.
Step 2 (Character-Specific Voice Profiles):
- story/writer.py: write_chapter now checks bp['characters'] for a voice_profile on
the POV character before falling back to the prebuilt_persona cache.
- story/style_persona.py: refine_persona() accepts pov_character=None; when a POV
character with a voice_profile is supplied it refines that profile's bio instead of
the global author_details bio.
- cli/engine.py: refine_persona call now passes ch.get('pov_character') so per-chapter
persona refinement targets the correct voice.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- story/style_persona.py: Expanded default ai_isms list with 20+ modern AI phrases
(delved, mined, neon-lit, bustling, a wave of, etched in, etc.) and added
filter_words (wondered, seemed, appeared, watched, observed, sensed)
- story/editor.py: Stricter evaluate_chapter_quality rubric — added
DEEP_POV_ENFORCEMENT block with automatic fail conditions for filter word
density and summary mode; strengthened criterion 5 scoring thresholds
- story/writer.py: Added get_genre_instructions() helper with genre-specific
mandates for Thriller, Romance, Fantasy, Sci-Fi, Horror, Historical, and
General Fiction; added DEEP_POV_MANDATE block banning summary mode and
filter words; expanded AVOID AI-ISMS banned phrase list
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>