Expand framework for literary fiction, deeper anti-patterns, and organic finishing#4
Open
SHL0MS wants to merge 4 commits intoNousResearch:masterfrom
Open
Expand framework for literary fiction, deeper anti-patterns, and organic finishing#4SHL0MS wants to merge 4 commits intoNousResearch:masterfrom
SHL0MS wants to merge 4 commits intoNousResearch:masterfrom
Conversation
…nic finishing Adds genre-agnostic literary fiction support, new anti-pattern detection, voice calibration tools, a prose critique methodology, and an organic finishing phase for details that resist thematic integration. Changes across 5 files (+505 lines): CRAFT.md: - Add §9 Literary/Contemporary Fiction (milieu as constraint system, dangerous insight test, plotless structures, literary evaluation rubric) - Add Supporting Character Opacity Test to §2 (four checks for whether a non-POV character is a person or a function) - Add Prose-Craft Exercises to §6 (flat passage, two-sentence version, stranger test) - Expand §7 Stability Trap with concrete protocols (register break requirement, unforced decision, the scene that breaks the rules) ANTI-SLOP.md: - Add paired em-dash parentheticals pattern (the — X — mid-sentence construction, with frequency budgets) - Add 'which was' recontextualization machine (density thresholds) - Add deflationary sentence endings pattern ANTI-PATTERNS.md: - Add §13 One Emotional Temperature - Add §14 Thesis-Absorption - Add §15 The 'which was' Machine (with count thresholds) - Add §16 Paired Em-Dash Parentheticals - Add §17 Deflationary Endings voice.md: - Add Rhetorical Tic Budget template (voice-specific construction caps) - Add Punctuation Discipline template (em dash budgets, paired-dash rules) - Add Scale-Shifting Parameters template - Add Register Variation template (dominant + counter-register) program.md: - Add Phase 2.5 Organic Finishing (unexplained sensory details, sideways memories, physical comedy, unexplained behavior, unresolvable recurring details) - Add Prose Critique methodology (emotional temperature, character opacity, passivity audit, surprise audit, domain insight, register variation, dramatization audit) - Add Continuity Protocol (ages/dates, duration arithmetic, object consistency, spatial references, biographical details)
- Collapse ANTI-PATTERNS §15-§17 (which duplicated ANTI-SLOP additions) into a single §15 that cross-references ANTI-SLOP for detection thresholds and adds the chapter-level compound check - Generalize Thesis-Absorption examples (remove story-specific details) - Remove Dangerous Insight from program.md Prose Critique (already in CRAFT.md §9, just cross-reference instead) - Merge Scale-Shifting Parameters into Register Variation in voice.md (was a 13-line niche template, now 4 lines inside the broader section)
After reading 'The Second Son of the House of Bells' (the first novel the pipeline produced), five structural patterns survived the existing framework undetected: ANTI-PATTERNS.md: - Add §15 Type-Description Formula: 'the [expression] of [someone] who [clause]' — the NousResearch#1 AI character-description tell, turns characters into instances of sociological types instead of people - Add §16 Scene-Structure Repetition: every scene following the same arrive→observe→interact→reflect→leave beat sequence - Add §17 Universal Competence: when every character is high-competence, the world becomes a seminar; need at least one character who fumbles without it being a plot device - Add §18 Magic System Re-Explanation: re-describing a mechanic in full every time it triggers instead of trusting the reader after the first demonstration - Renumber §19 (was §15: Sentence-Level Tics at Chapter Density) CRAFT.md: - Add Dialogue Balance and Rhythm to §2: checks for line-length variation, asymmetry, dead air, and imperfection in dialogue exchanges
…ll, section breaks - voice.md Part 1: Replace 90 lines of duplicated banned word tables and structural patterns with 6-line cross-reference to ANTI-SLOP.md and ANTI-PATTERNS.md. Keep only the smell test (voice-specific). - program.md Stability Trap: Cut 9 lines of abstract advice that duplicates CRAFT.md §7 (which now has concrete protocols). Replace with 5-line cross-reference. - program.md Plot Framework: Add note that literary fiction uses non-beat-sheet structures (cross-ref CRAFT.md §9). - CRAFT.md §5 Show Don't Tell: Cut 6-line detectable patterns list that duplicates §6 Fiction AI Tells. Cross-reference instead. - ANTI-PATTERNS.md: Remove §6 'Section Break as Rhythm Crutch' (3 lines, subsumed by new §15 Scene-Structure Repetition). Renumber §7-§18. -130 lines removed.
pmilford
added a commit
to pmilford/autonovel
that referenced
this pull request
Apr 26, 2026
NousResearch#4) Ships the architectural piece that lets any book/genre carry its own scoring criteria without editing repo-shared command files. voice.md gains an optional `## Part 3 — Custom rubric` section; the evaluate / reader-panel / brief / draft / revise pipeline honours it end-to-end. This is the "wrong-layer" fix from yesterday's discussion: per-book quality rules belong on a per-book surface, not in `commands/evaluate.md` (which installs into every runtime). Files changed: - src/autonovel/templates/book/voice.md — new Part 3 placeholder with three inline examples (financial-transaction cap, dream- sequence limit, irreversible-ending requirement) so a writer sees the shape without reading docs. - commands/voice-discovery.md — new step 7a preserves Part 3 verbatim across re-runs (the user's authored rules must never be overwritten by voice regeneration). Acceptance gains a contract clause asserting Part 3 survives. - commands/evaluate.md: - Step 4 now reads voice.md Parts 1, 2, AND 3. - New step 4a parses Part 3 into criteria (strips the comment placeholder; handles both "Part 3 — Custom rubric" and bare "Custom rubric" headings). - New step 10d scores each criterion 0–10 with a finding, records `custom_rubric` (single-chapter) or `custom_rubric_per_chapter[N]` (full mode), and adds any sub-6 criterion to `top_3_revisions` so brief picks it up. Does not subtract from `overall_score` automatically — flag + brief is the load-bearing surface, not score arithmetic. - New "Custom-rubric findings" markdown table appended to the summary so the writer sees the per-rule status at a glance. - commands/reader-panel.md: - voice.md added to `reads:` (it wasn't there before — the panel was prose-only). - Step 2 parses Part 3 the same way evaluate does. - Step 5 adds a per-criterion free-text field per persona; the value of running it through the panel rather than only `/autonovel:evaluate` is that different personas catch different violations. - Step 7 + acceptance: panel JSON gains a `custom_rubric` block (omitted when no rubric was parsed). - commands/brief.md — new required `## Custom-rubric findings` section in the brief shape, populated from the eval log's `custom_rubric` array and the panel log's `custom_rubric` block. Brief is explicitly told these are NOT optional — a brief that ignores a flagged finding produces a revise that re-violates the rule. - commands/draft.md — step 6 now lists Part 3 as in-scope and treats each bullet as a hard constraint. Drafting against the rules is cheaper than revising back to them. - commands/revise.md — step 5 now reads Parts 1, 2, AND 3 and must (a) fix any rules the brief surfaces and (b) not introduce fresh violations of any other Part 3 rule. - FUTURE-TODOS — entry struck through with shipped-date and a carry-over note for the future rubric-snippet library at src/autonovel/templates/rubrics/. Tier 1+2: 574 (unchanged — pure command-body + template change; contract tests already cover voice.md being declared in `reads:` for the affected commands, and voice-discovery's `writes:` was unchanged). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR: Expand framework for literary fiction, deeper anti-patterns, and organic finishing
Summary
Used the autonovel framework to write a 22,000-word literary novella (Provenance — contemporary fiction, DFW-inspired voice, about an aging conceptual artist who clones himself as his final work). Then read the framework's first shipped novel (The Second Son of the House of Bells). Both experiences exposed gaps: patterns that survive all existing checks, genre assumptions that don't generalize, duplicated content across files, and a missing phase.
This PR adds genre-agnostic literary fiction support, 7 new anti-patterns derived from actual output analysis, an organic finishing phase, a prose critique methodology, and deletes 123 lines of duplicated content.
+579 / -123 across 5 files.
What's in here
New anti-patterns (from reading Second Son)
The novel passes every word-level slop check and still reads as AI within three paragraphs. These are the structural patterns that survived:
New anti-slop patterns (from writing Provenance)
— X —mid-sentence construction, with frequency budgets (~3 dashes per 1000 words total)Literary fiction support (CRAFT.md §9)
Phase 2.5: Organic Finishing (program.md)
A new phase between revision and done. The agent rereads and adds details that resist the story's logic: unexplained sensory details, sideways memories, physical comedy, unexplained character behavior, unresolvable recurring details. Distributed unevenly. Purpose: make the story exceed its argument.
Character and dialogue craft (CRAFT.md §2)
Prose critique methodology (program.md)
Structured prose critique to supplement numerical scoring: emotional temperature, character opacity, passivity audit, surprise audit, register variation, dramatization audit. Output is a list of specific problems, not a number.
Stability trap — concrete protocols (CRAFT.md §7)
The existing section correctly diagnoses the problem but prescribes only abstract advice. Added three checkable protocols:
Voice template expansion (voice.md Part 2)
Deletions (-123 lines)
What's NOT changed
Context
These changes come from two sources:
The thresholds (e.g., max 2 "which was" per 1000 words) are calibrated against these two data points. They should be validated against additional output and adjusted.