Last Updated June 11, 2026
Narrative frameworks are useful when they help writers, readers, editors, teachers, researchers, and strategists notice structure. They become dangerous when they stop being lenses and become rules. A framework can clarify recurring patterns, but a formula can flatten living stories into predictable steps, familiar arcs, and marketable sameness.
When Narrative Framework Becomes Formula examines the point where story models harden into templates. It looks at hero’s journey shortcuts, three-act overuse, character-arc reduction, content-marketing story grids, AI-generated plot defaults, genre expectation, platform pressure, and the institutional desire for repeatable narrative outcomes. The article argues that narrative frameworks should help people think more carefully, not replace judgment, context, style, ethics, culture, memory, and formal invention.

This article does not reject narrative frameworks. It argues for responsible use. A framework can help identify structure, compare traditions, teach craft, audit persuasion, or organize research. But when a framework becomes formula, it starts dictating what a story must be before the story has been heard. Formula appears when the model matters more than the material.
Why Frameworks Become Formulas
Frameworks become formulas because formulas are easier to teach, sell, automate, and repeat. A flexible framework asks for judgment. A formula promises certainty. It tells the writer where the inciting incident belongs, when the protagonist must refuse the call, how the midpoint should turn, what the ending should resolve, and what emotional transformation should be visible by the final page.
This promise is attractive. Editors need development notes. Teachers need teachable structures. Marketers need repeatable campaigns. Platforms reward recognizable patterns. Studios reduce risk through familiar arcs. AI systems generate more fluently when the structure is standardized. Content teams scale faster when every story fits a repeatable grid.
But the convenience of formula comes at a cost. The story begins to serve the structure rather than the structure serving the story. Distinct traditions, voices, audiences, histories, and experiences are pressed into familiar shapes. Formulaic thinking does not always produce bad writing, but it often produces less truthful writing.
| Why formula appeals | What it promises | What it risks |
|---|---|---|
| Teaching | A clear lesson plan. | Students mistake the model for the only form. |
| Editing | Fast diagnosis of structural problems. | Different stories are corrected toward sameness. |
| Marketing | Repeatable emotional hooks. | Story becomes persuasion machinery. |
| Publishing and media | Lower perceived risk. | Unusual forms are treated as defects. |
| Platforms | Predictable engagement patterns. | Attention metrics shape story structure. |
| AI systems | Easy generation from templates. | Default arcs become automated cultural bias. |
Formula begins when a framework stops asking questions and starts issuing commands.
Framework vs. Formula
A framework is a lens. A formula is a script. A framework helps a reader notice possible relations among plot, character, conflict, time, voice, memory, genre, audience, culture, and meaning. A formula tells the story what shape it must take.
The difference is not whether a model has parts. Propp’s morphology, Campbell’s monomyth, three-act structure, Freytag’s pyramid, kishōtenketsu, story circle, memoir arc, public narrative, and content frameworks all have recognizable elements. The danger appears when those elements are treated as requirements rather than analytical tools.
A framework remains alive when it can be revised by the material. A formula remains rigid even when the material resists it.
| Framework | Formula | Diagnostic question |
|---|---|---|
| Helps interpretation. | Controls interpretation. | Is the model helping us see, or forcing what we see? |
| Adapts to genre, culture, and purpose. | Expects the same sequence everywhere. | What changes when context changes? |
| Names patterns provisionally. | Treats patterns as universal law. | What counterexamples matter? |
| Allows multiple structures. | Privilegs one structure as correct. | What other forms might fit better? |
| Supports judgment. | Replaces judgment. | Who is deciding, the writer or the template? |
| Can be refused. | Punishes refusal as failure. | What does the story lose when it obeys? |
A framework should be a map with scale, limits, and alternatives. A formula pretends to be the territory.
How Formula Distorts Story
Formula distorts story by narrowing what counts as narrative movement. If a framework assumes that movement means conflict escalation, transformation, triumph, and closure, then stories of care, witness, grief, cyclicality, place memory, institutional harm, ordinary endurance, and unresolved injustice can appear weak even when they are structurally rich.
Formula also distorts character. People become functions: mentor, threshold guardian, villain, ally, love interest, comic relief, wound, want, need, sacrifice, return. These functions can be useful for analysis, but they become reductive when they replace personhood, social context, moral ambiguity, and lived specificity.
Formula distorts time as well. It often expects progress. But many stories move through recurrence, delay, memory, fragmentation, spiral return, ritual time, ecological time, or historical haunting.
| Formulaic pressure | Distortion | What may be lost |
|---|---|---|
| Every story needs a clear protagonist goal. | Collective, relational, or systemic stories are individualized. | Community, institution, land, and system become background. |
| Every story needs escalation. | Care, maintenance, and endurance seem passive. | Quiet forms of agency disappear. |
| Every story needs transformation. | Survival, witness, and grief are forced into growth arcs. | Loss is made useful too quickly. |
| Every story needs closure. | Unresolved harm is softened or erased. | Accountability is replaced by satisfaction. |
| Every story fits a universal arc. | Cultural and historical forms are flattened. | Specificity becomes decoration. |
| Every structure can be automated. | Template output replaces listening. | Judgment, ethics, and invention decline. |
Formula does not merely simplify structure. It changes what kinds of life are allowed to count as story.
Hero’s Journey Overreach
The hero’s journey is one of the clearest examples of framework becoming formula. As a comparative myth model, it can help identify recurring motifs of departure, initiation, ordeal, transformation, and return. As a rigid creative template, it can make unrelated stories look broken because they do not follow a quest pattern.
Hero’s journey overreach appears when every protagonist is treated as a hero, every place as a threshold, every older figure as a mentor, every crisis as an ordeal, every change as transformation, and every ending as return with a boon. The structure can become so familiar that writers begin arranging scenes to satisfy the map rather than listening to the story.
This does not mean the hero’s journey is useless. It means it needs limits. It works best as one lens among many, not as the master key to all narrative.
| Hero’s journey use | Helpful when… | Formulaic when… |
|---|---|---|
| Departure | The story genuinely concerns leaving a known world. | Every opening must include refusal and departure. |
| Threshold | The story stages a meaningful crossing. | Every transition is renamed a threshold. |
| Mentor | A guide figure shapes the protagonist’s capacity. | Any older or wiser character is forced into the role. |
| Ordeal | A trial transforms stakes, knowledge, or identity. | Every midpoint must imitate mythic crisis. |
| Return | The story concerns reintegration after change. | Stories without return are treated as incomplete. |
| Boon | Knowledge or gift returns to community. | Endings must redeem suffering through usefulness. |
Hero’s journey overreach turns a powerful comparative framework into a sorting machine.
Three-Act Sameness and Plot Machinery
Three-act structure can be a useful teaching tool because it helps identify setup, complication, development, climax, and resolution. It can also become plot machinery. When used rigidly, every story must announce stakes early, pivot at expected intervals, intensify at the midpoint, collapse before the climax, and resolve in a recognizable emotional pattern.
This can improve clarity. It can also produce sameness. Stories may begin to feel engineered rather than discovered. Scene placement becomes more important than scene necessity. The writer asks, “What beat belongs here?” before asking, “What is true to this story?”
Formulaic plot machinery is especially visible in media environments where production, development, and audience testing reward familiar pacing. A story becomes an arrangement of expected turns.
| Plot-machine habit | Short-term benefit | Long-term risk |
|---|---|---|
| Beat placement | Keeps pacing clear. | Scenes serve the grid rather than the story. |
| Midpoint reversal | Adds momentum. | Surprise becomes mechanical. |
| Dark night of the soul | Signals emotional depth. | Grief becomes an obligatory beat. |
| Final confrontation | Concentrates tension. | Systemic or relational conflicts are reduced to a showdown. |
| Clean resolution | Satisfies audience expectation. | Ambiguity, trauma, and accountability may be erased. |
| Act timing | Supports production planning. | Form becomes industrial rather than organic. |
Three-act structure becomes formula when pacing rules replace narrative necessity.
Character Arc Reduction
Character arc frameworks often ask what a character wants, what they need, what lie they believe, what wound shapes them, and how they change. These questions can be useful. They become reductive when every life is treated as a therapeutic transformation arc.
Not every story is about personal growth. Some stories are about witness, survival, complicity, political awakening, refusal, responsibility, grief, moral failure, care, memory, or endurance. Some characters do not transform because the story is about the cost of not transforming. Some transform collectively. Some change slowly. Some cannot change because the social structure around them is stronger than individual insight.
Formulaic character arcs can also make suffering seem narratively valuable only if it produces self-improvement. This is ethically risky. Trauma, oppression, illness, exile, poverty, and loss should not be forced into inspirational growth.
| Character-arc formula | Problem | Alternative question |
|---|---|---|
| Want vs. need | May reduce complex life to motivational contrast. | What obligations, pressures, and relations shape action? |
| Wound | May over-psychologize social harm. | What is personal, structural, historical, or collective? |
| Lie the character believes | May turn ideology, coercion, or survival strategy into error. | What makes this belief necessary or costly? |
| Transformation | May force growth where witness or survival is the point. | What kind of change does the story actually value? |
| Redemption | May erase accountability. | What cannot be repaired by insight alone? |
| Closure | May make unresolved life look incomplete. | What truth requires openness? |
Character frameworks should deepen attention to personhood, not convert people into repairable plot devices.
Genre, Platform, and Market Pressure
Formula often enters storytelling through institutions. Genres have conventions. Platforms have metrics. Markets have expectations. Search engines reward recognizable headings. Streaming platforms study retention. Social media rewards hooks. Publishing categories shape acquisitions. Content teams need repeatable production systems.
Convention is not automatically bad. Genre gives readers orientation. Platform constraints can discipline communication. Market awareness can help stories reach audiences. The problem appears when external pressure decides the story’s shape before the story’s form has been understood.
Platform formula is especially powerful because it appears as data. If a certain structure performs well, it becomes the default. Then more stories are shaped to resemble that structure, and the data confirms the pattern it helped create.
| Pressure source | Formula effect | Editorial safeguard |
|---|---|---|
| Genre convention | Readers expect familiar beats. | Distinguish convention from necessity. |
| Publishing category | Stories are shaped for shelf or market fit. | Protect formal difference where it matters. |
| Streaming development | Retention patterns influence structure. | Ask whether pacing serves meaning. |
| Social media | Hooks and reveals dominate story design. | Do not confuse attention with depth. |
| SEO and content systems | Articles become templated for discoverability. | Use structure without flattening thought. |
| AI generation | Default arcs become easier than original form. | Require human form review. |
Formula often feels natural because institutions reward it before writers notice they are obeying it.
Formula and Power
Formula is never only a craft issue. It is also a power issue. A formula defines what a proper story looks like. It rewards some forms and penalizes others. It may privilege Western dramatic structure, individual heroism, conflict escalation, personal transformation, commercial closure, or psychologically legible character growth.
This matters for postcolonial, Indigenous, diasporic, feminist, queer, disability, working-class, ecological, testimonial, and community-based storytelling. A formula can make these stories appear structurally deficient because they do not center the expected kind of protagonist, conflict, pacing, disclosure, or resolution.
Power enters through evaluation. The editor, teacher, critic, platform, algorithm, funder, studio, or model may ask the story to become more familiar. Under that pressure, “clarity” can become assimilation.
| Formulaic norm | Who may be disadvantaged | Why it matters |
|---|---|---|
| Individual protagonist agency | Collective, relational, and community-centered stories. | Distributed agency is misread as weak focus. |
| Conflict escalation | Care, maintenance, ritual, and witness stories. | Nonviolent agency becomes invisible. |
| Linear progress | Cyclical, oral, fragmented, and place-based forms. | Other temporalities are treated as disorder. |
| Full explanation | Stories that require opacity, protocol, or cultural specificity. | Reader access overrides story sovereignty. |
| Redemptive ending | Trauma, injustice, grief, and historical-harm narratives. | Closure replaces accountability. |
| Universal structure | Local, Indigenous, postcolonial, and experimental traditions. | Specific forms are absorbed into dominant models. |
Formula becomes political when it decides which stories are legible before they have been heard.
AI and Automated Story Defaults
AI makes formula drift faster. Automated systems are good at producing familiar patterns because familiar patterns are common in training data and easy to prompt. Ask for a story, and a model may produce protagonist, goal, obstacle, escalation, revelation, transformation, and resolution. Ask for a brand story, and it may produce problem, struggle, breakthrough, value, and call to action. Ask for myth, and it may default to heroism.
This is not simply a technical issue. AI systems can amplify existing narrative defaults: Western plot structure, individualism, conflict bias, redemptive closure, marketable emotion, simplified cultural markers, and genre cliché. The more a team uses AI to scale storytelling, the more important formula-drift governance becomes.
AI can still be useful. It can compare structures, identify overused beats, generate alternatives, audit formula risk, produce variant outlines, and flag when a story is being forced into a familiar arc. But it should not be allowed to decide narrative form by default.
| AI default | Formula risk | Human review question |
|---|---|---|
| Heroic protagonist arc | Every story becomes individual transformation. | Is heroism the right model here? |
| Conflict escalation | Care, witness, ritual, and memory are undervalued. | What counts as action in this story? |
| Clean ending | Unresolved harm is over-smoothed. | Should this remain open? |
| Generic cultural setting | Specific traditions become aesthetic markers. | Who has authority over this material? |
| Template marketing arc | Story becomes conversion funnel. | Is persuasion distorting representation? |
| Overconfident structure advice | The model treats one arc as universal. | What alternatives should be tested? |
AI should help writers notice formula, not make formula invisible at scale.
Symptoms of Formulaic Thinking
Formulaic thinking usually appears before the final draft. It appears in development notes, classroom feedback, outlines, pitch decks, marketing briefs, prompts, editorial templates, and automated story systems. The earlier it is caught, the easier it is to correct.
The most important symptom is displacement. Instead of asking what the story needs, the writer asks what the model requires. Instead of asking what this character, community, medium, genre, or ethical context demands, the team asks where the required beat should go.
| Symptom | What it suggests | Correction |
|---|---|---|
| The story sounds structurally correct but emotionally dead. | The beats are present, but necessity is missing. | Rebuild from desire, pressure, relation, and consequence. |
| Every scene performs a known function. | The model is overdetermining the draft. | Ask what scenes would exist without the template. |
| Characters feel like roles. | Function has replaced personhood. | Restore history, contradiction, context, and agency. |
| The ending resolves more than the story earns. | Closure pressure is high. | Leave unresolved elements where truth requires them. |
| The same outline fits too many stories. | The structure is too generic. | Identify what is specific to this story’s world. |
| AI outputs feel plausible but interchangeable. | Pattern fluency has replaced form judgment. | Generate multiple non-default structures and compare. |
Formulaic thinking is not always obvious because it can look like competence.
Responsible Framework Use
Responsible framework use begins with humility. Every framework has a history, scope, strength, and limit. Propp’s morphology is powerful for certain folktale structures, but it should not be treated as a universal model for all narrative. Campbell’s monomyth can illuminate some mythic quest patterns, but it should not erase alternative structures. Three-act structure can improve pacing, but it should not define all movement.
A responsible framework is used comparatively. It is tested against the material. It is allowed to fail. It is paired with alternative lenses. It does not override cultural specificity, genre difference, oral tradition, ethical constraints, or experimental form.
| Responsible practice | What it protects | Example question |
|---|---|---|
| Name the framework’s scope. | Prevents false universality. | What kinds of stories was this model built from? |
| Use more than one model. | Prevents single-framework capture. | What changes if we use a cyclical or relational lens? |
| Read against the model. | Protects difference. | Where does this story productively refuse the framework? |
| Check cultural and historical context. | Prevents flattening. | What traditions, protocols, or histories shape this form? |
| Separate diagnosis from prescription. | Protects craft judgment. | Are we describing a pattern or demanding one? |
| Audit automation. | Prevents AI-amplified sameness. | What defaults did the tool impose? |
A good framework increases attention. A formula narrows it.
Examples of Formula Drift
The examples below show how a useful framework can become a formula and how to recover responsible use.
Hero’s journey memoir
Formula drift: The memoir is forced into departure, ordeal, transformation, and return.
Responsible use: The analysis asks whether witness, grief, care, or survival is the real structure.
Why it works: It avoids making pain valuable only through triumph.
Three-act community story
Formula drift: A collective struggle is rewritten around one protagonist’s climactic choice.
Responsible use: The structure tracks distributed agency, institutions, memory, and shared risk.
Why it works: It lets collective life remain central.
AI-generated brand story
Formula drift: The output follows problem, struggle, breakthrough, transformation, call to action.
Responsible use: The team audits whether persuasion is simplifying responsibility or evidence.
Why it works: It protects trust from template emotion.
Indigenous story adaptation
Formula drift: A place-based teaching is adapted into a universal hero myth.
Responsible use: The analysis stops and asks about permission, protocol, place, language, and authority.
Why it works: It treats story as relation, not content.
Postcolonial novel
Formula drift: Fragmentation is treated as poor structure.
Responsible use: The analysis reads fragmentation as archive critique, displacement, and nonlinear memory.
Why it works: It recognizes form as political.
Tragic narrative
Formula drift: The ending is softened into redemption.
Responsible use: The interpretation preserves irreversible loss, recognition, and accountability.
Why it works: It respects tragedy rather than repairing it for comfort.
Formula drift can be corrected by asking what the framework is erasing.
Mathematics, Computation, and Modeling
Narrative formula should not be reduced to metrics alone, but structured diagnostics can help editors and researchers detect when a framework is becoming too rigid.
A formula-drift score can estimate whether a story is being overfit to a template:
F_d = T_fw_t + B_rw_b + C_pw_c + U_pw_u + A_dw_a + (1 – S_v)w_s
\]
Interpretation: Formula drift \(F_d\) rises with template forcing \(T_f\), beat rigidity \(B_r\), closure pressure \(C_p\), universality pressure \(U_p\), automation dependence \(A_d\), and weak story specificity \(S_v\).
A framework-health score can estimate whether a framework is being used responsibly:
H_f = \frac{S_c + C_x + A_l + R_m + E_g + J_h}{6}
\]
Interpretation: Framework health \(H_f\) averages scope clarity \(S_c\), context sensitivity \(C_x\), alternative lenses \(A_l\), refusal monitoring \(R_m\), ethical governance \(E_g\), and human judgment \(J_h\).
A narrative-specificity score can estimate whether the story is still driving the structure:
N_s = \frac{V_o + P_l + T_m + M_d + R_l + C_s}{6}
\]
Interpretation: Narrative specificity \(N_s\) averages voice originality \(V_o\), place logic \(P_l\), temporal method \(T_m\), material detail \(M_d\), relational logic \(R_l\), and cultural specificity \(C_s\).
An AI-template risk score can estimate whether automation is amplifying formula:
A_r = D_aw_d + G_pw_g + H_aw_h + M_sw_m + R_sw_r + (1 – V_c)w_v
\]
Interpretation: AI-template risk \(A_r\) rises with default-arc use \(D_a\), generic phrasing \(G_p\), heroic-arc pressure \(H_a\), market-story pressure \(M_s\), resolution smoothing \(R_s\), and weak variant comparison \(V_c\).
| Modeling task | Governance question | Example output |
|---|---|---|
| Formula-drift audit | Is the story being overfit to a template? | Formula-drift score and warning. |
| Framework-health audit | Are scope, limits, context, and alternatives visible? | Framework-health score. |
| Narrative-specificity audit | Is the structure emerging from this story’s material? | Specificity profile. |
| AI-template audit | Is automation producing generic arcs or smoothing? | AI-template risk score. |
| Power review | Is a dominant model suppressing cultural, relational, or experimental form? | Equity and form-governance note. |
| Publication governance audit | Is the article or story framework ready for reuse? | Canvas card and governance queue. |
Computation can help detect formula only when it supports human judgment rather than replacing it.
Python Workflow: Narrative Formula Drift Audit
The Python workflow below follows the advanced Catalyst Canvas standard: typed records, config-driven scoring, validation, governance notes, Canvas-card exports, CSV outputs, JSON outputs, markdown governance queues, and review priorities. The companion repository version includes the shared `python/catalyst_canvas/` layer plus article-specific data for formula drift, framework health, narrative specificity, AI-template risk, closure pressure, heroic overreach, and governance review.
# run_narrative_formula_drift_audit.py
from __future__ import annotations
from dataclasses import dataclass
from pathlib import Path
import csv
import json
from hashlib import sha256
from statistics import mean
from typing import Any
ARTICLE_ROOT = Path(__file__).resolve().parents[1]
OUTPUTS = ARTICLE_ROOT / "outputs"
@dataclass(frozen=True)
class NarrativeFormulaDriftRecord:
item: str
claim_context: str
template_forcing: float
beat_rigidity: float
closure_pressure: float
universality_pressure: float
automation_dependence: float
story_specificity: float
scope_clarity: float
context_sensitivity: float
alternative_lenses: float
refusal_monitoring: float
ethical_governance: float
human_judgment: float
voice_originality: float
place_logic: float
temporal_method: float
material_detail: float
relational_logic: float
cultural_specificity: float
default_arc_use: float
generic_phrasing: float
heroic_arc_pressure: float
market_story_pressure: float
resolution_smoothing: float
variant_comparison: float
public_consequence: float
owner: str = "editorial"
status: str = "active"
notes: str = ""
@dataclass(frozen=True)
class NarrativeFormulaDriftConfig:
article_title: str = "When Narrative Framework Becomes Formula"
article_slug: str = "when-narrative-framework-becomes-formula"
medium_threshold: float = 0.45
high_threshold: float = 0.62
allowed_statuses: tuple[str, ...] = ("active", "archive", "review", "revise")
def validate_score(value: float, field_name: str) -> None:
if value < 0 or value > 1:
raise ValueError(f"{field_name} must be between 0 and 1.")
def validate_record(record: NarrativeFormulaDriftRecord, config: NarrativeFormulaDriftConfig) -> None:
if not record.item.strip():
raise ValueError("item is required.")
if not record.claim_context.strip():
raise ValueError("claim_context is required.")
if record.status not in config.allowed_statuses:
raise ValueError(f"Invalid status: {record.status}")
for field_name, value in record.__dict__.items():
if isinstance(value, float):
validate_score(value, field_name)
def formula_drift(record: NarrativeFormulaDriftRecord) -> float:
return min(
1.0,
record.template_forcing * 0.20
+ record.beat_rigidity * 0.18
+ record.closure_pressure * 0.18
+ record.universality_pressure * 0.16
+ record.automation_dependence * 0.14
+ (1 - record.story_specificity) * 0.14,
)
def framework_health(record: NarrativeFormulaDriftRecord) -> float:
return mean([
record.scope_clarity,
record.context_sensitivity,
record.alternative_lenses,
record.refusal_monitoring,
record.ethical_governance,
record.human_judgment,
])
def narrative_specificity(record: NarrativeFormulaDriftRecord) -> float:
return mean([
record.voice_originality,
record.place_logic,
record.temporal_method,
record.material_detail,
record.relational_logic,
record.cultural_specificity,
])
def ai_template_risk(record: NarrativeFormulaDriftRecord) -> float:
return min(
1.0,
record.default_arc_use * 0.18
+ record.generic_phrasing * 0.18
+ record.heroic_arc_pressure * 0.18
+ record.market_story_pressure * 0.16
+ record.resolution_smoothing * 0.16
+ (1 - record.variant_comparison) * 0.14,
)
def governance_priority_score(record: NarrativeFormulaDriftRecord, config: NarrativeFormulaDriftConfig) -> float:
score = (
formula_drift(record) * 0.32
+ ai_template_risk(record) * 0.24
+ (1 - framework_health(record)) * 0.16
+ (1 - narrative_specificity(record)) * 0.12
+ record.public_consequence * 0.16
)
if record.status == "revise":
score = max(score, config.high_threshold)
elif record.status == "review":
score = max(score, config.medium_threshold)
return min(1.0, max(0.0, score))
def review_priority(record: NarrativeFormulaDriftRecord, config: NarrativeFormulaDriftConfig) -> str:
score = governance_priority_score(record, config)
if score >= config.high_threshold:
return "high"
if score >= config.medium_threshold:
return "medium"
return "standard"
def card_id(record: NarrativeFormulaDriftRecord, config: NarrativeFormulaDriftConfig) -> str:
raw = f"{config.article_slug}|{record.item}|{record.claim_context}"
return sha256(raw.encode("utf-8")).hexdigest()[:16]
def governance_note(record: NarrativeFormulaDriftRecord, config: NarrativeFormulaDriftConfig) -> str:
priority = review_priority(record, config)
notes = []
if priority == "high":
notes.append("High-priority narrative formula-drift review required.")
elif priority == "medium":
notes.append("Medium-priority review recommended before reuse.")
else:
notes.append("Standard editorial review sufficient.")
if formula_drift(record) >= 0.55:
notes.append("Formula drift is elevated; review template forcing, beat rigidity, closure pressure, universality pressure, automation dependence, and story specificity.")
if ai_template_risk(record) >= 0.55:
notes.append("AI-template risk is elevated; review default arcs, generic phrasing, heroic pressure, market-story pressure, resolution smoothing, and variant comparison.")
if framework_health(record) < 0.65:
notes.append("Framework health is limited; strengthen scope clarity, context sensitivity, alternative lenses, refusal monitoring, ethical governance, and human judgment.")
if narrative_specificity(record) < 0.65:
notes.append("Narrative specificity is limited; restore voice, place logic, temporal method, material detail, relational logic, and cultural specificity.")
if record.notes:
notes.append(record.notes)
return " ".join(notes)
def canvas_card(record: NarrativeFormulaDriftRecord, config: NarrativeFormulaDriftConfig) -> dict[str, Any]:
return {
"schema_version": "1.0.0",
"card_id": card_id(record, config),
"card_type": "narrative_formula_drift",
"article_title": config.article_title,
"article_slug": config.article_slug,
"item": record.item,
"claim_context": record.claim_context,
"scores": {
"formula_drift": round(formula_drift(record), 4),
"framework_health": round(framework_health(record), 4),
"narrative_specificity": round(narrative_specificity(record), 4),
"ai_template_risk": round(ai_template_risk(record), 4),
"governance_priority_score": round(governance_priority_score(record, config), 4),
},
"review": {
"priority": review_priority(record, config),
"owner": record.owner,
"status": record.status,
"governance_note": governance_note(record, config),
},
}
def write_csv(path: Path, rows: list[dict[str, Any]]) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
fieldnames = list(rows[0].keys())
with path.open("w", encoding="utf-8", newline="") as handle:
writer = csv.DictWriter(handle, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(rows)
def write_json(path: Path, payload: Any) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(json.dumps(payload, indent=2), encoding="utf-8")
def write_markdown_queue(path: Path, rows: list[dict[str, Any]]) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
lines = [
"# Narrative Formula Drift Governance Queue",
"",
"| Item | Context | Formula drift | Framework health | Narrative specificity | AI risk | Priority | Owner |",
"|---|---|---:|---:|---:|---:|---|---|",
]
for row in rows:
lines.append(
f"| {row['item']} | {row['claim_context']} | "
f"{row['formula_drift']} | {row['framework_health']} | "
f"{row['narrative_specificity']} | {row['ai_template_risk']} | "
f"{row['review_priority']} | {row['owner']} |"
)
path.write_text("\n".join(lines) + "\n", encoding="utf-8")
def main() -> None:
config = NarrativeFormulaDriftConfig()
records = [
NarrativeFormulaDriftRecord(
"Hero journey memoir",
"heroic arc overreach and closure pressure audit",
0.82, 0.76, 0.84, 0.78, 0.52, 0.48,
0.58, 0.54, 0.46, 0.42, 0.68, 0.72,
0.62, 0.54, 0.58, 0.60, 0.52, 0.58,
0.66, 0.62, 0.92, 0.54, 0.82, 0.48,
0.86,
"editorial", "review",
"Review whether witness, grief, care, or survival is being forced into heroic transformation."
),
NarrativeFormulaDriftRecord(
"AI brand story",
"template marketing arc and automation dependence audit",
0.90, 0.82, 0.88, 0.74, 0.94, 0.36,
0.52, 0.48, 0.42, 0.40, 0.62, 0.58,
0.40, 0.38, 0.42, 0.44, 0.36, 0.34,
0.94, 0.92, 0.78, 0.96, 0.90, 0.30,
0.92,
"governance", "revise",
"Escalate AI-template review; persuasive formula may be replacing evidence, responsibility, and specificity."
),
NarrativeFormulaDriftRecord(
"Postcolonial fragmented novel",
"nonlinear form misread as poor structure audit",
0.68, 0.70, 0.72, 0.86, 0.44, 0.72,
0.74, 0.88, 0.84, 0.82, 0.86, 0.84,
0.88, 0.82, 0.92, 0.86, 0.80, 0.90,
0.50, 0.48, 0.54, 0.42, 0.62, 0.76,
0.88,
"ethics review", "review",
"Protect fragmentation as archive critique, displacement, and memory structure."
),
]
rows = []
cards = []
for record in records:
validate_record(record, config)
cards.append(canvas_card(record, config))
rows.append({
"item": record.item,
"claim_context": record.claim_context,
"formula_drift": round(formula_drift(record), 4),
"framework_health": round(framework_health(record), 4),
"narrative_specificity": round(narrative_specificity(record), 4),
"ai_template_risk": round(ai_template_risk(record), 4),
"governance_priority_score": round(governance_priority_score(record, config), 4),
"review_priority": review_priority(record, config),
"owner": record.owner,
"status": record.status,
"governance_note": governance_note(record, config),
})
priority_order = {"high": 3, "medium": 2, "standard": 1}
rows = sorted(
rows,
key=lambda row: (
priority_order.get(str(row["review_priority"]), 0),
float(row["governance_priority_score"]),
),
reverse=True,
)
queue = [row for row in rows if row["review_priority"] != "standard"]
queue_cards = [card for card in cards if card["review"]["priority"] != "standard"]
write_csv(OUTPUTS / "tables" / "narrative_formula_drift_audit.csv", rows)
write_csv(OUTPUTS / "tables" / "narrative_formula_drift_governance_queue.csv", queue)
write_json(OUTPUTS / "json" / "narrative_formula_drift_canvas_cards.json", cards)
write_json(OUTPUTS / "json" / "narrative_formula_drift_governance_queue.json", queue_cards)
write_markdown_queue(OUTPUTS / "markdown" / "narrative_formula_drift_governance_queue.md", queue)
print("Narrative formula drift audit complete.")
if __name__ == "__main__":
main()
This workflow supports responsible framework use by making formula drift visible before it becomes editorial habit.
R Workflow: Formula Risk Diagnostics
The R workflow below provides a portable base R diagnostic for formula drift, framework health, narrative specificity, and AI-template risk.
# narrative_formula_drift_diagnostics.R
# Base R workflow for When Narrative Framework Becomes Formula.
args <- commandArgs(trailingOnly = FALSE)
file_arg <- grep("^--file=", args, value = TRUE)
if (length(file_arg) > 0) {
script_path <- normalizePath(sub("^--file=", "", file_arg[1]), mustWork = TRUE)
article_root <- normalizePath(file.path(dirname(script_path), ".."), mustWork = TRUE)
} else {
article_root <- getwd()
}
setwd(article_root)
tables_dir <- file.path(article_root, "outputs", "tables")
figures_dir <- file.path(article_root, "outputs", "figures")
dir.create(tables_dir, recursive = TRUE, showWarnings = FALSE)
dir.create(figures_dir, recursive = TRUE, showWarnings = FALSE)
records <- data.frame(
item = c(
"Hero journey memoir",
"AI brand story",
"Postcolonial fragmented novel"
),
claim_context = c(
"heroic arc overreach and closure pressure audit",
"template marketing arc and automation dependence audit",
"nonlinear form misread as poor structure audit"
),
template_forcing = c(0.82, 0.90, 0.68),
beat_rigidity = c(0.76, 0.82, 0.70),
closure_pressure = c(0.84, 0.88, 0.72),
universality_pressure = c(0.78, 0.74, 0.86),
automation_dependence = c(0.52, 0.94, 0.44),
story_specificity = c(0.48, 0.36, 0.72),
scope_clarity = c(0.58, 0.52, 0.74),
context_sensitivity = c(0.54, 0.48, 0.88),
alternative_lenses = c(0.46, 0.42, 0.84),
refusal_monitoring = c(0.42, 0.40, 0.82),
ethical_governance = c(0.68, 0.62, 0.86),
human_judgment = c(0.72, 0.58, 0.84),
voice_originality = c(0.62, 0.40, 0.88),
place_logic = c(0.54, 0.38, 0.82),
temporal_method = c(0.58, 0.42, 0.92),
material_detail = c(0.60, 0.44, 0.86),
relational_logic = c(0.52, 0.36, 0.80),
cultural_specificity = c(0.58, 0.34, 0.90),
default_arc_use = c(0.66, 0.94, 0.50),
generic_phrasing = c(0.62, 0.92, 0.48),
heroic_arc_pressure = c(0.92, 0.78, 0.54),
market_story_pressure = c(0.54, 0.96, 0.42),
resolution_smoothing = c(0.82, 0.90, 0.62),
variant_comparison = c(0.48, 0.30, 0.76),
public_consequence = c(0.86, 0.92, 0.88),
owner = c("editorial", "governance", "ethics review"),
status = c("review", "revise", "review"),
stringsAsFactors = FALSE
)
records$formula_drift <- pmin(
1,
records$template_forcing * 0.20 +
records$beat_rigidity * 0.18 +
records$closure_pressure * 0.18 +
records$universality_pressure * 0.16 +
records$automation_dependence * 0.14 +
(1 - records$story_specificity) * 0.14
)
records$framework_health <- rowMeans(records[, c(
"scope_clarity",
"context_sensitivity",
"alternative_lenses",
"refusal_monitoring",
"ethical_governance",
"human_judgment"
)])
records$narrative_specificity <- rowMeans(records[, c(
"voice_originality",
"place_logic",
"temporal_method",
"material_detail",
"relational_logic",
"cultural_specificity"
)])
records$ai_template_risk <- pmin(
1,
records$default_arc_use * 0.18 +
records$generic_phrasing * 0.18 +
records$heroic_arc_pressure * 0.18 +
records$market_story_pressure * 0.16 +
records$resolution_smoothing * 0.16 +
(1 - records$variant_comparison) * 0.14
)
records$governance_priority_score <- pmin(
1,
records$formula_drift * 0.32 +
records$ai_template_risk * 0.24 +
(1 - records$framework_health) * 0.16 +
(1 - records$narrative_specificity) * 0.12 +
records$public_consequence * 0.16
)
records$review_priority <- ifelse(
records$status == "revise" | records$governance_priority_score >= 0.62,
"high",
ifelse(
records$status == "review" | records$governance_priority_score >= 0.45,
"medium",
"standard"
)
)
records <- records[order(records$governance_priority_score, decreasing = TRUE), ]
write.csv(records, file.path(tables_dir, "narrative_formula_drift_diagnostics.csv"), row.names = FALSE)
write.csv(records[records$review_priority != "standard", ], file.path(tables_dir, "narrative_formula_drift_governance_queue.csv"), row.names = FALSE)
png(file.path(figures_dir, "formula_drift_scores.png"), width = 1200, height = 700)
barplot(
records$formula_drift,
names.arg = records$item,
las = 2,
ylab = "Formula drift",
main = "Narrative Formula Drift"
)
grid()
dev.off()
png(file.path(figures_dir, "narrative_specificity_scores.png"), width = 1200, height = 700)
barplot(
records$narrative_specificity,
names.arg = records$item,
las = 2,
ylab = "Narrative specificity",
main = "Narrative Specificity"
)
grid()
dev.off()
print(records[, c(
"item",
"claim_context",
"formula_drift",
"framework_health",
"narrative_specificity",
"ai_template_risk",
"review_priority"
)])
This workflow helps identify when a model is clarifying story structure and when it is quietly replacing the story.
GitHub Repository
The companion repository for this article supports narrative formula-drift analysis as a Catalyst Canvas-ready module. It includes advanced additive `python/catalyst_canvas/` governance infrastructure, article-specific formula-drift data, config-driven scoring, validation, governance notes, Canvas card generation, CSV/JSON/markdown exporters, CLI workflows, smoke tests, unit tests, R diagnostics, SQL structures, documentation, and reusable framework-governance review templates.
Complete Code Repository
Companion repository for the article, including advanced Catalyst Canvas-ready code for narrative formula drift, framework health, narrative specificity, AI-template risk, closure pressure, heroic overreach, JSON exports, Canvas cards, governance queues, and reproducible research workflows.
articles/when-narrative-framework-becomes-formula/
├── canvas/
│ ├── canvas_manifest.json
│ ├── input_schema.json
│ ├── output_schema.json
│ ├── catalyst_canvas_config.json
│ ├── catalyst_canvas_manifest.json
│ ├── catalyst_canvas_cards.json
│ └── catalyst_canvas_governance_queue.json
├── html/
├── css/
├── php/
├── java/
├── python/
│ ├── catalyst_canvas/
│ │ ├── __init__.py
│ │ ├── __main__.py
│ │ ├── cli.py
│ │ ├── models.py
│ │ ├── scoring.py
│ │ ├── validation.py
│ │ ├── governance.py
│ │ └── exporters.py
│ ├── narrative_formula_drift_canvas/
│ │ ├── __init__.py
│ │ ├── models.py
│ │ ├── scoring.py
│ │ ├── validation.py
│ │ ├── governance.py
│ │ └── exporters.py
│ ├── tests/
│ │ ├── test_catalyst_canvas.py
│ │ └── test_narrative_formula_drift_canvas.py
│ ├── run_catalyst_canvas_audit.py
│ └── run_narrative_formula_drift_audit.py
├── r/
│ ├── narrative_formula_drift_diagnostics.R
│ └── run_all_narrative_formula_drift_workflows.R
├── sql/
│ ├── canvas_schema.sql
│ └── canvas_queries.sql
├── docs/
│ ├── article_notes.md
│ ├── modeling_principles.md
│ ├── framework_vs_formula.md
│ ├── formula_distortion.md
│ ├── hero_journey_overreach.md
│ ├── three_act_sameness.md
│ ├── character_arc_reduction.md
│ ├── genre_platform_market_pressure.md
│ ├── formula_and_power.md
│ ├── ai_automated_story_defaults.md
│ ├── symptoms_of_formulaic_thinking.md
│ ├── responsible_framework_use.md
│ ├── ethical_risk.md
│ ├── responsible_use.md
│ ├── governance_notes.md
│ └── catalyst_canvas_upgrade_notes.md
├── data/
│ ├── narrative_formula_drift_claims.csv
│ ├── formula_drift_notes.csv
│ ├── framework_health_notes.csv
│ ├── ai_template_risk_notes.csv
│ ├── narrative_specificity_notes.csv
│ └── catalyst_canvas_assessment.csv
├── outputs/
│ ├── figures/
│ ├── json/
│ ├── markdown/
│ └── tables/
├── notebooks/
├── shared/
│ ├── schemas/
│ ├── narrative-templates/
│ ├── story-archetypes/
│ ├── character-models/
│ ├── plot-structures/
│ ├── rhetorical-frameworks/
│ ├── cultural-memory/
│ ├── formula-drift/
│ └── governance/
├── tests/
└── README.md
Related Articles
- Indigenous Storytelling, Place, and Relational Memory
- Alternative Story Structures Beyond the Monomyth
- Gender, Critique, and the Limits of Universal Story Models
- Tragedy, Cyclical Story, and Non-Heroic Narrative
- Postcolonial Storytelling and the Politics of Narrative Form
- Storytelling and the Ethics of Representation
A Practical Method for Preventing Formula Drift
1. Name the framework
Identify the model being used: hero’s journey, three-act structure, story circle, public narrative, memoir arc, genre convention, content framework, or AI outline.
2. State its scope
Explain what kinds of stories the framework was built from and where it may not apply.
3. Separate description from prescription
Clarify whether the model is being used to notice structure or to demand structure.
4. Test alternative lenses
Try cyclical, tragic, relational, postcolonial, Indigenous, oral, fragmented, institutional, ecological, or non-heroic models.
5. Read the refusal
Ask where the story resists the framework and whether that resistance is meaningful.
6. Preserve specificity
Track voice, place, time, culture, relation, memory, genre, medium, and ethical context.
7. Audit closure pressure
Ask whether the ending resolves more than the story earns.
8. Audit character reduction
Check whether characters are becoming functions instead of people.
9. Audit AI defaults
Compare AI-generated outlines against non-default structures and flag generic arcs.
10. Revise the framework, not only the story
If the model fails the material, adapt or reject the model.
The method protects the difference between structural literacy and structural obedience.
Common Pitfalls
Several pitfalls appear when narrative frameworks become formulas.
- Using one framework as the master key: No single model explains all stories.
- Confusing clarity with correctness: A clear formula may still distort the material.
- Forcing closure: Some stories require openness, grief, or unresolved accountability.
- Making every protagonist heroic: Not all agency is conquest, departure, or transformation.
- Treating beat sheets as truth: Scene placement is not the same as narrative necessity.
- Psychologizing everything: Character wounds do not explain all social, historical, or institutional harm.
- Flattening cultural form: Local, oral, Indigenous, postcolonial, and experimental structures may be misread as defective.
- Letting market expectations decide structure: Engagement does not equal depth.
- Letting AI normalize template arcs: Fluent output can hide formulaic sameness.
- Forgetting ethics: A satisfying structure may still misrepresent suffering, memory, or power.
The central pitfall is treating story structure as a machine instead of a living relation among form, material, audience, and responsibility.
Why Frameworks Must Stay Alive
Narrative frameworks matter because they help us recognize pattern. They give language to structure. They support craft, teaching, editing, research, criticism, and communication. But frameworks must stay alive. They must remain responsive to story, context, tradition, evidence, ethics, and surprise.
When a framework becomes formula, it stops listening. It turns stories into examples of itself. It rewards sameness, punishes refusal, and hides its own assumptions. It makes certain stories easier to produce and others harder to recognize. It can turn living traditions into templates, grief into redemption, care into passivity, culture into decoration, and AI generation into automated cliché.
The answer is not to abandon frameworks. The answer is to govern them. Name them. Limit them. Compare them. Refuse them when needed. Use them to ask better questions, not to enforce predetermined answers.
A framework is responsible when it helps a story become more itself. It becomes formula when it makes every story become the framework.
Further Reading
- Abbott, H.P. (2008) The Cambridge Introduction to Narrative. 2nd edn. Cambridge: Cambridge University Press. Available at: https://www.cambridge.org/core/books/cambridge-introduction-to-narrative/C3DD73A6178BEB669888CCAA1D81A099
- Bal, M. (2017) Narratology: Introduction to the Theory of Narrative. 4th edn. Toronto: University of Toronto Press. Available at: https://utorontopress.com/9781442628378/narratology/
- Campbell, J. (2008) The Hero with a Thousand Faces. 3rd edn. Novato: New World Library. Available at: https://www.jcf.org/product-page/the-hero-with-a-thousand-faces-ebook
- Chatman, S. (1978) Story and Discourse: Narrative Structure in Fiction and Film. Ithaca: Cornell University Press. Available at: https://www.cornellpress.cornell.edu/book/9780801491863/story-and-discourse/
- Freytag, G. (1895) Freytag’s Technique of the Drama: An Exposition of Dramatic Composition and Art. Translated by E.J. MacEwan. Chicago: Scott, Foresman and Company. Available at: https://archive.org/details/freytagstechniqu00freyuoft
- Genette, G. (1980) Narrative Discourse: An Essay in Method. Translated by J.E. Lewin. Ithaca: Cornell University Press. Available at: https://www.cornellpress.cornell.edu/book/9780801492594/narrative-discourse/
- Genette, G. (1990) Narrative Discourse Revisited. Translated by J.E. Lewin. Ithaca: Cornell University Press. Available at: https://www.cornellpress.cornell.edu/book/9780801495359/narrative-discourse-revisited/
- Herman, D. (2002) Story Logic: Problems and Possibilities of Narrative. Lincoln: University of Nebraska Press. Available at: https://www.nebraskapress.unl.edu/nebraska/9780803273429/story-logic/
- Le Guin, U.K. (1986) ‘The Carrier Bag Theory of Fiction’, in Dancing at the Edge of the World. New York: Grove Press. Available at: https://www.ursulakleguin.com/the-carrier-bag-theory-of-fiction
- Prince, G. (2003) A Dictionary of Narratology. Revised edn. Lincoln: University of Nebraska Press. Available at: https://www.nebraskapress.unl.edu/nebraska/9780803287761/a-dictionary-of-narratology/
- Propp, V. (1968) Morphology of the Folktale. 2nd edn. Translated by L. Scott. Austin: University of Texas Press. Available at: https://utpress.utexas.edu/9780292783768/
- Rimmon-Kenan, S. (2002) Narrative Fiction: Contemporary Poetics. 2nd edn. London: Routledge. Available at: https://www.routledge.com/Narrative-Fiction-Contemporary-Poetics/Rimmon-Kenan/p/book/9780415280228
- Ryan, M.-L. (ed.) (2004) Narrative Across Media: The Languages of Storytelling. Lincoln: University of Nebraska Press. Available at: https://www.nebraskapress.unl.edu/nebraska-paperback/9780803289932/narrative-across-media/
- Ryan, M.-L. and Thon, J.-N. (eds.) (2014) Storyworlds across Media: Toward a Media-Conscious Narratology. Lincoln: University of Nebraska Press. Available at: https://www.nebraskapress.unl.edu/nebraska-paperback/9780803245631/storyworlds-across-media/
- Todorov, T. (1977) The Poetics of Prose. Translated by R. Howard. Ithaca: Cornell University Press. Available at: https://books.google.com/books/about/The_Poetics_of_Prose.html?id=iJtZAAAAMAAJ
- Vogler, C. (2007) The Writer’s Journey: Mythic Structure for Writers. 3rd edn. Studio City: Michael Wiese Productions. Available at: https://mwp.com/product/the-writers-journey-mythic-structure-for-writers-3rd-edition/
- Yorke, J. (2013) Into the Woods: How Stories Work and Why We Tell Them. London: Penguin. Available at: https://www.penguin.com.au/books/into-the-woods-9781846146442
- Young, R.J.C. (2020) Postcolonialism: A Very Short Introduction. 2nd edn. Oxford: Oxford University Press. Available at: https://global.oup.com/academic/product/postcolonialism-a-very-short-introduction-9780198856832
References
- Abbott, H.P. (2008) The Cambridge Introduction to Narrative. 2nd edn. Cambridge: Cambridge University Press. Available at: https://www.cambridge.org/core/books/cambridge-introduction-to-narrative/C3DD73A6178BEB669888CCAA1D81A099
- Ammanabrolu, P., Cheung, W., Broniec, W. and Riedl, M.O. (2020) ‘Automated Storytelling via Causal, Commonsense Plot Ordering’. Available at: https://arxiv.org/abs/2009.00829
- Bal, M. (2017) Narratology: Introduction to the Theory of Narrative. 4th edn. Toronto: University of Toronto Press. Available at: https://utorontopress.com/9781442628378/narratology/
- Campbell, J. (2008) The Hero with a Thousand Faces. 3rd edn. Novato: New World Library. Available at: https://www.jcf.org/product-page/the-hero-with-a-thousand-faces-ebook
- Chatman, S. (1978) Story and Discourse: Narrative Structure in Fiction and Film. Ithaca: Cornell University Press. Available at: https://www.cornellpress.cornell.edu/book/9780801491863/story-and-discourse/
- Cutting, J.E. (2016) ‘Narrative theory and the dynamics of popular movies’, Psychonomic Bulletin & Review, 23, pp. 1713–1743. Available at: https://pmc.ncbi.nlm.nih.gov/articles/PMC5133278/
- Freytag, G. (1895) Freytag’s Technique of the Drama: An Exposition of Dramatic Composition and Art. Translated by E.J. MacEwan. Chicago: Scott, Foresman and Company. Available at: https://archive.org/details/freytagstechniqu00freyuoft
- Freytag, G. (1863) Die Technik des Dramas. Leipzig: S. Hirzel. Project Gutenberg edition. Available at: https://www.gutenberg.org/ebooks/50616
- Genette, G. (1980) Narrative Discourse: An Essay in Method. Translated by J.E. Lewin. Ithaca: Cornell University Press. Available at: https://www.cornellpress.cornell.edu/book/9780801492594/narrative-discourse/
- Genette, G. (1990) Narrative Discourse Revisited. Translated by J.E. Lewin. Ithaca: Cornell University Press. Available at: https://www.cornellpress.cornell.edu/book/9780801495359/narrative-discourse-revisited/
- Goldfarb-Tarrant, S., Chakrabarty, T., Weischedel, R. and Peng, N. (2020) ‘Content Planning for Neural Story Generation with Aristotelian Rescoring’. Available at: https://arxiv.org/abs/2009.09870
- Halperin, B.A. and Lukin, S.M. (2023) ‘Envisioning Narrative Intelligence: A Creative Visual Storytelling Anthology’. Available at: https://arxiv.org/abs/2310.04529
- Herman, D. (2002) Story Logic: Problems and Possibilities of Narrative. Lincoln: University of Nebraska Press. Available at: https://www.nebraskapress.unl.edu/nebraska/9780803273429/story-logic/
- Jin, Y., Kadam, V. and Wanvarie, D. (2022) ‘Plot Writing From Pre-Trained Language Models’. Available at: https://arxiv.org/abs/2206.03021
- Le Guin, U.K. (1986) ‘The Carrier Bag Theory of Fiction’, in Dancing at the Edge of the World. New York: Grove Press. Available at: https://www.ursulakleguin.com/the-carrier-bag-theory-of-fiction
- Li, B., Cardier, B., Wang, T. and Metze, F. (2017) ‘Annotating High-Level Structures of Short Stories and Personal Anecdotes’. Available at: https://arxiv.org/abs/1710.06917
- Prince, G. (2003) A Dictionary of Narratology. Revised edn. Lincoln: University of Nebraska Press. Available at: https://www.nebraskapress.unl.edu/nebraska/9780803287761/a-dictionary-of-narratology/
- Propp, V. (1968) Morphology of the Folktale. 2nd edn. Translated by L. Scott. Austin: University of Texas Press. Available at: https://utpress.utexas.edu/9780292783768/
- Rimmon-Kenan, S. (2002) Narrative Fiction: Contemporary Poetics. 2nd edn. London: Routledge. Available at: https://www.routledge.com/Narrative-Fiction-Contemporary-Poetics/Rimmon-Kenan/p/book/9780415280228
- Ryan, M.-L. (ed.) (2004) Narrative Across Media: The Languages of Storytelling. Lincoln: University of Nebraska Press. Available at: https://www.nebraskapress.unl.edu/nebraska-paperback/9780803289932/narrative-across-media/
- Ryan, M.-L. and Thon, J.-N. (eds.) (2014) Storyworlds across Media: Toward a Media-Conscious Narratology. Lincoln: University of Nebraska Press. Available at: https://www.nebraskapress.unl.edu/nebraska-paperback/9780803245631/storyworlds-across-media/
- Tambwekar, P., Dhuliawala, M., Martin, L.J., Mehta, A. and Riedl, M.O. (2018) ‘Controllable Neural Story Plot Generation via Reward Shaping’. Available at: https://arxiv.org/abs/1809.10736
- Todorov, T. (1977) The Poetics of Prose. Translated by R. Howard. Ithaca: Cornell University Press. Available at: https://books.google.com/books/about/The_Poetics_of_Prose.html?id=iJtZAAAAMAAJ
- Vogler, C. (2007) The Writer’s Journey: Mythic Structure for Writers. 3rd edn. Studio City: Michael Wiese Productions. Available at: https://mwp.com/product/the-writers-journey-mythic-structure-for-writers-3rd-edition/
- Yorke, J. (2013) Into the Woods: How Stories Work and Why We Tell Them. London: Penguin. Available at: https://www.penguin.com.au/books/into-the-woods-9781846146442
