Story Spine Validator
The canonical JSON Schema validation interface for story submission — enforcing structural compliance against the unified canon before gatekeeper review.
Overview
The Story Spine Validator is a JSON Schema (draft-07) document that validates story submissions for structural compliance against the Terheia unified canon. Any story that validates against the schema is guaranteed to be internally consistent with the pipeline's constraints. Aesthetic compliance — whether the story is good — is judged by the gatekeeper. Structural compliance is machine-verifiable.
The schema enforces two categories of rules. Hard constraints are enforced directly by the schema: required fields, enumeration values, minimum counts, conditional requirements. A story that violates a hard constraint fails validation before any human reads it. Gatekeeper-assessed constraints are expressed in the canon_compliance section, populated during review: did the story show magic costs? Did it include an uncontrollable event? Did hope take a specific form? These are checked after the story is written but follow the same canonical rules as the hard constraints.
Top-Level Structure
The schema requires a single top-level story object. All story properties are defined within it. Additional top-level properties are prohibited (additionalProperties: false).
| Property | Type | Notes |
|---|---|---|
title | string | Required. Minimum length 1. |
scope | enum | Required. One of: short_story, novella, novel, graphic_novel_arc, game_campaign |
canon_status | enum | Required. One of: canonical, experimental, alternate, adaptation |
canon_deviation | object | Required when canon_status ≠ canonical. Documents what rule is being tested and whether it is reversible |
word_count_target | integer | Required. Minimum 0. |
author | string | Required. |
setting | object | Required. See Setting section. |
institutions | array | Required. Minimum 1 institution defined. |
cast | array | Required. Minimum 1. Must contain at least one POV character. |
grand_beasts | array | Optional. If present, full beast properties required per beast. |
spine | object | Required. The story's structural architecture. |
canon_compliance | object | Optional at submission. Populated during gatekeeper review. |
Setting
Setting requires at least one location, a designated primary location (must match a location id in the array), and a season. Each location specifies a state, biome, location type, and node proximity. The node proximity enumeration — none, distant, regional, local, active, accelerating — is mechanically deterministic, not atmospheric.
The season object specifies a moon, a school, and optionally a fortnight and day. Moon and school values must match the canonical enumeration. The season constrains what magic looks like locally — the aligning moon affects what practitioners can produce and at what cost.
Institution objects on the story level specify each institution's role (primary, friction, background, absent), presence type, local mandate, blind spot, and an incentive conflict object — documenting the gap between what is known, what is reported, who benefits from the gap, and the downstream consequence of the gap remaining unclosed.
Cast Members
Each cast member requires a name, story role, is_pov flag, identity, magic, and institution affiliation. POV characters additionally require arc (starts_as and ends_as fields) and pov_instrumentation. Non-POV characters require only the base fields.
Magic Properties
Magic objects require is_caster (boolean) and tier. If is_caster is true, school, moon, tier, and class are also required — and school and moon cannot be "none," and tier cannot be "non_caster." If is_caster is false, tier must be "non_caster" or "ambient." This conditional validation enforces the canon rule that non-casters cannot hold caster tiers.
Valid schools: Arcane, Elemental, Divine_Restoration, Divine_Necrotic, Psionic, Nature. Psionic is a valid enumeration value. Its inclusion as a valid school value, while the Accord does not officially recognize it, reflects the schema's role as a tool for authors rather than an institutional document.
| Field | Enumeration Values |
|---|---|
| school | Arcane, Elemental, Divine_Restoration, Divine_Necrotic, Psionic, Nature, none |
| moon | Velquor, Namaris, Saelura, Orrivane, Threnis, none |
| tier | ambient, novice, adept, master, guru, non_caster |
| epistemic_lens | structural, relational, forensic, strategic, procedural, instrumental, doctrinal, ecological, emotional, transactional |
| stress_response | shorten_sentences, fragment_syntax, increase_abstraction, repetition, silence, narrow_measurement, procedural_retreat |
Spine Beats
The spine object requires: establishment, routine, inciting_incidents (array, minimum 1), escalations (array, minimum 1), resolution, and aftermath. Twists and relationship_distances are optional. All required spine sections must be present — partial spines fail validation.
Inciting Incidents
Each incident requires a sequence number, type, description, and uncontrollable_element. The uncontrollable element is a hard constraint — every chapter contains an uncontrollable event, and the schema encodes the requirement at the inciting incident level. Incident types: node_event, institutional_encroachment, grand_beast_escalation, ecological_disruption, human_crisis.
Escalations
Each escalation requires sequence, type, and description. Types: institutional_response, perception_conflict, cost_accumulation, beast_escalation, stakes_personalized, cross_institutional_friction. An optional perception_gap object documents which schools are present and absent — what they see, what they would see, what no one sees. This is the formalization of the perceptual fragmentation rule.
Resolution and Aftermath
Resolution requires a mechanism, resolution_type (synthesis_succeeded, synthesis_partial, synthesis_failed, synthesis_weaponized), cost_paid (with pov_cost required), and what_remains_unresolved (minimum length 1 — the canon rule that something must remain unresolved is a hard constraint). Aftermath requires a hope object with form and description — hope must be specific, not thematic (minimum length 1 enforced on description).
POV Instrumentation
Every POV character requires a pov_instrumentation object with three required fields: epistemic_lens, abstraction_level (1–5, where 1 is concrete and 5 is meta-structural), and stress_response. Optional fields: somatic_anchor (what the character feels in the body under pressure — specific, not abstract), metaphor_domain (source of figurative language), compression_ratio (how much the character leaves unsaid: low/medium/high).
These fields define how the reader perceives the world through this character — not who the character is, but what instrument the character is. The same world event perceived through an instrumental epistemic lens (measuring, quantifying) versus a relational epistemic lens (feeling, connecting) produces different sentences, different omissions, different failures of understanding.
Canon Compliance
The canon_compliance section is populated during gatekeeper review, not during initial submission. All boolean fields accept true, false, or null (not yet assessed). The section covers four domains: magic_system, institutions, world_consistency, and narrative_rules. An overall_grade field uses the enumeration: canonical, minor_deviations, needs_revision, non_canonical.
Key narrative_rules checks: uncontrollable_event_present, resolution_has_cost, something_remains_unresolved, hope_is_specific_not_thematic, no_clean_victory, human_failing_present, moral_compromise_present. A story may pass schema validation and still receive needs_revision from the gatekeeper if any of these checks fails — the schema catches structural errors; the gatekeeper catches narrative canon violations.