Skip to content

Expand framework for literary fiction, deeper anti-patterns, and organic finishing#4

Open
SHL0MS wants to merge 4 commits intoNousResearch:masterfrom
SHL0MS:literary-fiction-and-craft-depth
Open

Expand framework for literary fiction, deeper anti-patterns, and organic finishing#4
SHL0MS wants to merge 4 commits intoNousResearch:masterfrom
SHL0MS:literary-fiction-and-craft-depth

Conversation

@SHL0MS
Copy link
Copy Markdown

@SHL0MS SHL0MS commented Mar 20, 2026

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:

  • §14 The Type-Description Formula: "the expression of a man who had been disappointed by rooms full of people before" — turns every character into an instance of a sociological type instead of a person. The #͏1 AI character-description tell. Not in any existing list.
  • §15 Scene-Structure Repetition: Every scene follows arrive→observe→interact→reflect→leave. Paragraph-template (§1) applied at scene scale.
  • §16 Universal Competence: When every character in the cast is high-competence, the world becomes a seminar. Nobody fumbles, panics, or says something stupid.
  • §17 Magic System Re-Explanation: The under-note sensation gets the full sensory description in every scene. Trust the reader after the first demonstration.
  • §12 One Emotional Temperature: Every scene processed through the same analytical register. The narrator never loses composure.
  • §13 Thesis-Absorption: Every detail connects to the acoustic premise. Nothing in the world resists the concept.

New anti-slop patterns (from writing Provenance)

  • Paired em-dash parentheticals: The — X — mid-sentence construction, with frequency budgets (~3 dashes per 1000 words total)
  • "Which was" recontextualization machine: Density thresholds (max ~2.5 per 1000 words)
  • Deflationary sentence endings: "...which was refreshing" — a few is voice, a pattern is a tic

Literary fiction support (CRAFT.md §9)

  • Milieu as constraint system (a real-world professional setting functions like a magic system)
  • The Dangerous Insight Test (insider knowingness vs. genuinely uncomfortable truth)
  • Plotless and recursive structures (question, accretion, recursive) as alternatives to beat sheets
  • Literary fiction evaluation rubric

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)

  • Supporting Character Opacity Test: Four checks for whether a non-POV character is a person or a function (independent desire, counter-narrative action, wrongness/selfishness, unreadability)
  • Dialogue Balance and Rhythm: Checks for line-length variation, asymmetry, dead air, and imperfection

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:

  • Register break requirement (mandatory for works >10K words)
  • The unforced decision (protagonist must make at least one genuine choice)
  • The scene that breaks the rules (at least one moment the preceding material makes impossible)

Voice template expansion (voice.md Part 2)

  • Rhetorical Tic Budget (voice-specific construction caps with examples for two voice types)
  • Punctuation Discipline (em dash budget, paired-dash rules, semicolon/colon guidance)
  • Register Variation (dominant mode + counter-mode + deployment triggers)

Deletions (-123 lines)

  • voice.md Part 1: 90 lines of banned word tables and structural patterns that duplicated ANTI-SLOP.md verbatim. Replaced with 6-line cross-reference.
  • program.md Stability Trap: 9 lines of abstract advice duplicating CRAFT.md §7. Replaced with cross-reference.
  • CRAFT.md §5: 6-line "detectable telling patterns" list duplicating §6's fiction AI tells.
  • ANTI-PATTERNS.md §6: "Section Break as Rhythm Crutch" (subsumed by new Scene-Structure Repetition at the correct scale). Renumbered §7-§18.

What's NOT changed

  • The core pipeline architecture (foundation → draft → revision loop)
  • The evaluation scoring system (augmented with prose critique, not replaced)
  • The fantasy-specific content in CRAFT.md (preserved — literary additions are additive)
  • The existing anti-slop word lists (all retained)
  • The existing 11 anti-patterns (all retained, one merged)

Context

These changes come from two sources:

  1. Writing with the framework: Provenance, a 22K-word novella using CRAFT, ANTI-SLOP, and ANTI-PATTERNS as guardrails, with iterative critique-revision cycles that exposed gaps in voice calibration, rhetorical tic detection, and organic detail
  2. Reading the framework's output: The Second Son of the House of Bells, which passes all existing checks and still reads as AI due to structural patterns (type-description formula, scene repetition, universal competence, magic re-explanation) not covered by any existing anti-pattern

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.

SHL0MS added 4 commits March 20, 2026 12:43
…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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant