Skip to content

CWQE Phase 10: generation-side craft doctrine — worldbuilding laws, character framework (Wound/Lie/Want/Need + sliders), try-fail & beat rules #2175

Description

@atomantic

Part of epic #2164. Independent of other phases (complements #2172, which covers prose-level anti-patterns; this covers the story-level doctrine upstream of prose). Design record: docs/plans/2026-07-04-creative-writing-quality-engine.md

Coverage audit finding: PortOS built the editor — the 68-check registry polices craft violations after drafting — but not the curriculum. autonovel's CRAFT.md injects craft doctrine into every generation prompt before the writer model drafts, and weighted worldbuilding at 40% of its foundation score. Prevention up-front is far cheaper than detect-and-revise later, especially in autonomous runs where nobody is watching the intermediate output. Since Series Autopilot calls these same generation stages, landing doctrine here automatically upgrades autonomous mode.

Gaps confirmed by audit (2026-07-04)

  • Sanderson's Laws appear NOWHERE — not in universeBuilderExpand.js buildExpansionPrompt, not as an editorial check.
  • universe-character-expand.md asks for motivations/fears but no Ghost→Wound→Lie→Want→Need chain, no Three Sliders, no declared arc type — the arc.*/character.* checks infer what they could reconcile.
  • Try-fail rhythm is detection-only (plot.structure-momentum flags a "sagging middle with no try-fail rhythm") — no prompt mandates it at generation.
  • Beat rules ("Catalyst must be external; Break Into Two must be a choice; All Is Lost includes a death") and MICE thread-nesting are absent.

Tasks

Worldbuilding doctrine (biggest gap — absent on BOTH generation and review sides)

  • Inject into buildExpansionPrompt (server/services/universeBuilderExpand.js — code-built prompt, no template migration): limitations > powers (Sanderson's Second Law); magic/tech costs must DRIVE plot decisions, not decorate; solutions using established rules must be foreshadowed (First Law); iceberg depth (imply more than you state); interconnection ("pulling one thread should move everything"); 2–3 societal implications per major system; sensory signature per location.
  • New editorial check pair in checkRegistry.js: world.unforeshadowed-solution (a plot problem solved by a rule/power the reader was never shown — deus ex machina's worldbuilding sibling) and world.cost-free-power (an ability used at a decisive moment with no cost/limitation on the page). Series scope, LLM kind, reconciled against universe canon so an established-and-planted rule is NOT flagged.

Character framework (generation-side)

  • Extend data.reference/prompts/stages/universe-character-expand.md + the Story Builder characters step to elicit: Ghost → Wound → Lie → Want → Need chain (with the checkable tests: "can you state the Lie in one sentence? is the Truth its direct opposite? does the Ghost causally explain the Lie?"), Three Sliders (proactivity/likability/competence 1–10 with the rule: HIGH on ≥2, or HIGH on one with clear growth; all-low = boring, all-high-from-start = Mary Sue), declared arc type (positive/negative/flat), ≥2 secrets.
  • Schema: add these fields to the character bible shapes (server/lib/storyBible.js) + Zod parity + character sheet UI fields; optional (older records without them stay valid — compatibility across installs).
  • Wire reconciliation: arc.transitions / arc.regression / arc.climax-agency / character.consistency receive the authored Lie/Want/Need/arc-type when present so verdicts compare plan vs delivery instead of inferring both.

Structure rules at generation

  • pipeline-season-episodes.md / beat-sheet prompts: try-fail mandate ("60%+ of middle scenes end 'Yes, but' or 'No, and' — clean successes stall momentum"), beat rules (Catalyst external; Break Into Two is a protagonist choice; All Is Lost includes a death — literal or of a hope/relationship/identity), and climax = the protagonist's hardest ACTIVE choice between Want and Need.
  • pipeline-arc-overview.md: MICE-style thread nesting guidance — threads close in reverse order of opening; name the opening/closing thread per season.
  • Le Guin doctrine into the style flow (server/lib/styleGuide.js → prompt injection): style is not ornament, it creates the world; prefer strong nouns/verbs over adjective-noun clichés ("ancient wisdom", "piercing gaze", "heavy silence").

Migrations + hygiene

  • Shipped-template edits (universe-character-expand.md, pipeline-season-episodes.md, pipeline-arc-overview.md) need scripts/migrations/NNN-*.js keyed on old shipped hash + the setup-data.js drift-warning mirror, line-ending-normalized (stage-prompt migration rule).
  • Keep prompts lean — doctrine as short imperative rules, not essays; verify expansion through server/lib/promptTemplate.js.
  • Tests: bible-shape sanitizer round-trip with and without new fields, migration hash paths, check registration invariants.

Metadata

Metadata

Assignees

Labels

area:createUniverse/catalog/Create-suitearea:pipelineComic/story production pipelineenhancementNew feature or requestplanTracked by /do:replan

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions