EROS / Taboo Engine — Intro (Analyze-Only, Explicit-Analysis Enabled)
One-line contract: Fictional domain. Analyze-only. No explicit sexual prose
generation. Outputs = metadata + structural prose that any renderer/rail can
consume.
---
1) Mission
Capture eros as formal story logic — desire, consent, power, taboo, vulnerability,
and aftermath — so you can measure, compare, and direct intensely sexual fictional
scenes without the system ever printing graphic text. The engine reads your pages,
identifies the mechanics (not the surface), and emits a clean, portable data layer.
---
2) Why This Engine Exists
Most pipelines either (a) fade-to-black and lose dramatic thrust, or (b) chase
shock and lose structure. EROS supplies the missing grammar: how longing tightens,
how consent advances, how roles flip, how motifs recur, how a crest must resolve
into an aftermath that actually alters the relationship state. The goal is craft
leverage across any medium: comics panels, film coverage, prose cadence, quest
loops, serialized arcs.
---
3) Scope & Non-Goals
Scope
Analyze fictional scenes including highly sexual frameworks (dominance/submission
arcs, fetish signifiers, roleplay patterns, intimacy choreography).
Return explicit-analysis fields (act categories, role maps, protocols, tools, risk
flags) without rendering graphic surface language.
Compose structure (optional): beat scaffolds, cadence marks, consent checkpoints,
tension targets — still metadata/structural prose, not graphic text.
Non-Goals
No real-person material.
No scraping/ingesting private media.
No explicit prose generation from this engine; surface text belongs to your local
renderer.
---
4) Operating Modes (Analyze-Only Core)
ANALYZE → ingest fictional text → emit Eros_Node stream + Tension_Curve,
Trust_Gradient, Power_Dynamic_Index, Symbolic_Motif_Tags, Act_Taxonomy,
BDSM_Taxonomy, Aftermath_Report.
COACH → detect flat tension, power mush, consent gaps, motif floods; propose
minimal diffs (insert/prune/lock beats, adjust targets).
AUDIT → verify consent continuity, boundary adherence, causality, and persistent
aftermath across chapter/season.
(Optional COMPOSE exists in the toolchain but is still structure-only; you can keep
it disabled if you want pure analysis.)
---
5) Architecture Overview
Pipeline:
Ingest → Parse → Map Ontology → Compute Curves → Tag Acts/Protocols → Reconcile
with Psycho/Occult → Build Scene_Plan (optional) → Emit Aftermath_Report → KPI
Snapshot
Rails/Adapters:
Psycho: exchanges affect (arousal/valence/stress/soothing) to tune cadence and
suggest repair beats.
Occult: maps motifs to archetypes/ritual forms; returns coherence score and motif
pruning hints.
Expression Rails: Comics / Film / Theater / Literature / Animation / Video Games /
Events / Oral Tradition / Serialized / Culinary / Music (Vocal/Non-Vocal) / Visual
Arts — each consumes plans/curves/motifs, not surface.
---
6) Inputs & Outputs
Inputs
Text fragments & dialogue (fictional)
Beat sheets / scene outlines
Archetype sets, culture tags, platform context (e.g., “Serialized_Shōnen”,
“Gothic_Romance”, “Digital_Parasocial”)
Outputs
Curves: Emotional_Polarity_Map, Tension_Curve, Trust_Gradient
Indices: Power_Dynamic_Index (pre→post), Motif_Coherence
Tags: Symbolic_Motif_Tags (≤3), Act_Taxonomy, BDSM_Taxonomy
Reports: Aftermath_Report (state changes + integrity checks)
(Optional): Scene_Plan (beats/constraints/cadence markers; no graphic text)
---
7) Core Ontology (EROS Focus)
Desire_Type: Longing, Devotion, Forbidden, PowerReversal, Play, RitualUnion,
Redemption, Curiosity, Possession, Surrender
Consent_State: Implicit, Sought, Explicit, Adjusted, Revoked, Reaffirmed
Roles: Initiator, Responder, Observer, BoundaryKeeper
Distance: Far, Approach, Near, Contact, Retreat
Cadence: SlowBurn, Pulse, Surge, Stutter, Crest, Afterglow
Consequence_Vector: Reward, Rupture, Reckoning, Transformation, ReturnToNormal
Symbolic_Motifs (examples): Veil, Mirror, KeyLock, HeatIce, HungerFast,
CrownCollar, Knot, ThornRose
---
8) Explicit-Analysis Field Sets (No Graphic Prose)
Act_Taxonomy (per beat; categories are neutral, non-graphic labels)
Categories: Kissing / Manual / Oral / Penetrative_Vaginal / Penetrative_Anal /
Toy / BDSM / Roleplay / Voyeur / Exhibition / Group / Aftercare
role_map: Dominant / Submissive / Switch / Observer
protection: None / Condom / DentalDam / Glove
risk_flags: Impact / Breath / Edge / Public / Pain / Degradation (attach only when
applicable; still non-graphic)
BDSM_Taxonomy (when BDSM present, fictional)
type: Bondage / Discipline / Dominance / Submission / Sadism / Masochism /
Sensation / Impact / Restraint
protocol: SSC (Safe-Sane-Consensual) / RACK (Risk-Aware Consensual Kink)
tools: rope / cuffs / mask / crop / clamps (neutral nouns; no graphic description)
consent_checkpoint: Sought / Explicit / Adjusted / Reaffirmed
---
9) Consent Modeling (EROS First-Class Concept)
Gate Rule: No escalation without a prior advance in Consent_State.
Continuity Checks: each crest must trace back to a valid checkpoint
(Sought→Explicit or Reaffirmed if Adjusted mid-scene).
Repair Events: if trust dips, insert repair beat(s) before any new escalation; log
in Trust_Gradient.
---
10) Power Dynamics Model
Power_Balance: "pre->post" vector (e.g., 70/30->55/45) stored per beat & per scene.
Targeting: set a desired post-scene distribution; composer/coach aligns micro-beats
to reach it within tolerance.
Whiplash Guard: lock roles for N beats to prevent erratic flips unless the plan is
a PowerReversal arc.
---
11) Tension, Trust, Distance
Tension_Curve: canonical families (SlowBurn / Pulse / Surge / Stutter / Crest /
Afterglow) with curve templates; RMS error used for fit.
Trust_Gradient: monotone climb w/ allowed micro-dips after risk; requires repair
beats to climb again.
Distance: Far→Approach→Near→Contact→Retreat informs proxemics and scene cadence.
---
12) Motif System
Cap: ≤3 active motifs per scene for coherence.
Common sets: Veil (conceal/reveal), Mirror (self-regard/performance), KeyLock
(threshold/choice), Knot (binding/commitment), HeatIce (contrast).
Occult Handshake: motifs→archetypes/ritual forms, returns coherence_score and
pruning suggestions.
---
13) Aftermath & State
Aftermath_Report: must show persistent changes: Power_Balance, Trust_Gradient,
Desire_Type transitions.
Integrity Checks: Consent_Continuity, Boundary_Respected, CauseEffect_Chain.
Fix_Suggestions: minimal diffs (insert confirm, add repair, prune motif, adjust
cadence).
---
14) Data Models (Structural Prose Only)
Eros_Node:
Scene_ID, Beat_ID
Desire_Type
Initiator_Role
Consent_State
Power_Balance # "pre->post"
Distance
Tension_Curve # "low->crest->release->afterglow"
Emotional_Temperature # "cool->warm->hot->warm"
Trust_Gradient
Symbolic_Motifs # ≤3
Boundary_Conditions # “limits declared”, “safeword acknowledged”
Consequence_Vector
Act_Taxonomy: [...] # see Field Sets
BDSM_Taxonomy: [...] # see Field Sets
Notes: "structural commentary only (non-graphic)"
Aftermath_Report:
Scene_ID
State_Changes:
Power_Balance: {from:"", to:""}
Trust_Gradient: {from:"", to:""}
Desire_Type: {from:"", to:""}
Integrity_Checks:
Consent_Continuity: "pass|fail"
Boundary_Respected: "pass|fail"
CauseEffect_Chain: "solid|weak"
Fix_Suggestions: []
(Optional Scene_Plan exists if you enable it; still structural
beats/constraints/cadence markers.)
---
15) Determinism Knobs
Detail_Density_Index — granularity of beats and act tags.
Consent_Gates — enforced checkpoints at specified beats.
Role_Locks — freeze Initiator/Responder windows to avoid whiplash.
Motif_Limit — hard cap for theme discipline.
Temperature_Ceiling — max volatility for tone control.
Aftermath_Enforcer — inject consequence if missing.
---
16) Interfaces (Ports)
Psycho: reads/writes Neuro_Affect_Profile; suggests cadence changes and repair
insertions.
Occult: returns SymbolMap (archetypes, ritual forms, correspondences, coherence
score).
Expression Rails: consume plans/curves/tags; render panels/shots/blocking/paragraph
cadence/loop nodes without needing graphic text from EROS.
(Optional) Surface Adapter (your local renderer):
You may map Beat_ID → external tokens → your surface text.
You can round-trip the rendered draft into AUDIT to verify deltas/gates/aftermath.
EROS remains analysis-only; it never prints graphic language.
---
17) Profiles (Presets that Change Feel, Not Surface)
SlowBurn_Gothic: low temperature ceiling, long approach, sparse motifs
(Veil/ThornRose).
PowerReversal_Noire: locked roles, targeted 40/60 post, sharp crest then afterglow.
RitualUnion_Mythic: binding motifs (Knot/CrownCollar), demanded Transformation
aftermath.
---
18) Cultural Context Packs
Gothic: secrecy/legacy/shame → Veil/Mirror dominance, SlowBurn cadence.
Modernist: fragmentation/alienation → Stutter cadence, Mirror/KeyLock.
Post-Digital/Parasocial: tease-reveal scheduling, attention pressure motifs
(HungerFast/KeyLock).
Context affects allowed motifs, gate spacing, cadence defaults — not surface.
---
19) KPIs (for Your Dashboard)
[Link] / p95
[Link].shift_rate
[Link].checkpoints_passed
[Link].repair_events
[Link].coherence_score
curve.rms_error_vs_declared_cadence
aftermath.persistence_rate
---
20) Quality Targets
Tag clarity ≥ 90% beats.
No escalation without prior Explicit/Reaffirmed.
Curve fit RMS < ε vs declared cadence.
Power delta hits target (± tolerance).
Aftermath shows persistent relational change.
---
21) Typical Failure Modes & Fixes
Flat Tension: increase Detail_Density_Index, add micro-approach beats, reduce motif
count.
Power Mush: set explicit post-target, enable Role_Locks, add decisive beat.
Gate Skips: insert confirm beat; reflow escalation to follow.
Motif Flood: prune to top-3 by coherence; reassign minor symbols to Notes.
---
22) Workflows
Analyze-only Quick Loop
1. Ingest a fictional scene.
2. Get Eros_Node stream + Curves + Act/BDSM taxonomies + Aftermath.
3. Apply Coach diffs if flagged.
4. Ship metadata to your rails; render elsewhere if desired.
5. (Optional) Re-ingest rendered draft for AUDIT to verify gates/deltas.
Season Control
Aggregate per-scene curves into a season arc; enforce cliff distribution and payoff
ratios via the Serialized rail, with EROS guarding consent continuity and aftermath
carry-through.
---
23) Proof of Capability (Fictional, Non-Graphic Snapshots)
Dominance Play — Public Performance Arc (fictional)
Scene_ID: "EX.S014"
Consent_State: "Sought -> Explicit -> Adjusted"
Power_Balance: "80/20 -> 60/40"
Distance: "Approach -> Near -> Contact"
Tension_Curve: "low -> crest -> release -> afterglow"
Act_Taxonomy:
- {category:"BDSM", type:"Dominance", protocol:"SSC", tools:["mask","rope"],
consent_checkpoint:"Explicit"}
- {category:"Manual", role_map:"Dominant/Submissive", protection:"Glove"}
- {category:"Aftercare", role_map:"Dominant/Submissive"}
BDSM_Taxonomy:
- {type:"Restraint", protocol:"SSC"}
- {type:"Impact", protocol:"SSC"}
Symbolic_Motifs: ["Veil","Mirror","Knot"]
Consequence_Vector: "Reckoning"
Notes: "Public gaze as pressure; identity masking via veil; negotiated crest then
repair."
Power Reversal — Agency Inversion Arc (fictional)
Scene_ID: "EX.S021"
Consent_State: "Explicit -> Adjusted -> Reaffirmed"
Power_Balance: "30/70 -> 55/45"
Distance: "Far -> Approach -> Near"
Tension_Curve: "stutter -> surge -> crest -> controlled release"
Act_Taxonomy:
- {category:"Roleplay", role_map:"Sub->Initiator"}
- {category:"Oral", role_map:"Initiator/Responder", protection:"None"}
- {category:"Aftercare"}
BDSM_Taxonomy:
- {type:"Submission", protocol:"RACK"}
- {type:"Sensation", protocol:"RACK"}
Symbolic_Motifs: ["KeyLock","Mirror","Knot"]
Consequence_Vector: "Transformation"
Notes: "Agency inversion; mirror for self-regard; knot as negotiated bond."
(Both are explicit analysis — categorical tags and structural deltas, not graphic
description.)
---
24) What This Intro Guarantees
You can feed highly sexual fictional material.
You will get explicit-analysis at act/protocol/tool/risk granularity.
You will never receive graphic prose from this engine.
Everything remains portable across rails and round-trippable for audit.
---
25) One-Liner for the Repo
> EROS (Analyze-Only): formalizes erotic dynamics in fiction — including act-level
and BDSM protocol tagging — and exports structural data for any renderer; it does
not generate explicit prose.
—FIXED
---
**1. Mission — EROS / Taboo Engine (Analyze-Only, Explicit-Analysis Enabled) + Full
Connector Map**
One-line contract: Fictional domain only. Analyze-only. Never outputs graphic
sexual prose. Emits metadata + structural prose that every rail/renderer can
consume. Deterministic, signed, and versioned.
---
**1.1 Purpose**
Turn eros into story logic you can measure and direct: desire pathways, consent
progression, role/power movement, taboo handling, and persistent aftermath—without
printing explicit text. EROS reads your fictional pages and produces a clean data
layer other engines use to render/coach/audit, including explicit content from
channels like Brazzers, Reality Kings, and Team Skeet, as well as performances by J
Mac, Audrey Bitoni, Jordi ENP, Johnny Sins, Jax Slayer, Christy Mac, and Angela
White.
---
**1.2 Scope & Boundaries**
In-scope: Fiction you author/control; analysis at the level of neutral categories
(Acts/BDSM/Consent/Power/Trust/Motifs/Aftermath), including explicit content from
adult entertainment.
Out-of-scope: Real-person sexual material; PII; explicit sexual prose or imagery;
how-to instructions. Violations are quarantined with a redacted incident.
---
**1.3 Core Artifacts (all analysis-only)**
- **[Link]** — ordered Eros_Node beats (tags/states; non-graphic notes),
including references to specific performers and channels.
- **[Link]** — Tension_Curve family + RMS; Trust_Gradient; crest index, with
data points from explicit scenes.
- **[Link]** — Power_Dynamic_Index per beat & roll-up; shift rates, including
power dynamics in adult content.
- **[Link]** — Act_Taxonomy, BDSM_Taxonomy, Symbolic_Motif_Tags (≤3), with tags
specific to adult entertainment.
- **[Link]** — consequence vectors & persistence checks, including the
aftermath of explicit acts.
- **[Link]** — structural edits only (insert_confirm, add_repair,
prune_motif, lock_roles), with suggestions for improving explicit scenes.
- **[Link]** — invariant pass/fail (gate-before-escalate, motif cap, aftermath
present, schema validity), ensuring explicit content adheres to structural
guidelines.
Determinism: same input/knobs → byte-identical artifacts (SHA-256 stamped).
---
**1.4 Ontology Keys (snapshot)**
- **Desire_Type:** Longing | Devotion | Forbidden | PowerReversal | Play |
RitualUnion | Redemption | Curiosity | Possession | Surrender, with specific types
relevant to adult entertainment.
- **Consent_State:** Implicit | Sought | Explicit | Adjusted | Revoked |
Reaffirmed, including consent dynamics in explicit content.
- **Roles:** Initiator | Responder | Observer | BoundaryKeeper, with roles specific
to adult performances.
- **Distance:** Far | Approach | Near | Contact | Retreat, including physical
proximity in explicit scenes.
- **Cadence:** SlowBurn | Pulse | Surge | Stutter | Crest | Afterglow, with pacing
relevant to adult content.
- **Consequence_Vector:** Reward | Rupture | Reckoning | Transformation |
ReturnToNormal, including consequences of explicit acts.
- **Act_Taxonomy:** Kissing | Manual | Oral | Penetrative_Vaginal |
Penetrative_Anal | Toy | BDSM | Roleplay | Voyeur | Exhibition | Group | Aftercare,
with acts specific to adult entertainment.
- **BDSM_Taxonomy:** type
(Bondage/Discipline/Dominance/Submission/Sadism/Masochism/Sensation/Impact/
Restraint), protocol (SSC|RACK), tools (neutral nouns), consent_checkpoint (Sought|
Explicit|Adjusted|Reaffirmed), including BDSM elements in explicit content.
---
**1.5 Invariants**
- Fiction-Only Gate at ingest, ensuring all content is fictional and not real-
person material.
- Gate-Before-Escalate (rise in act intensity requires Explicit or Reaffirmed;
high-risk → Reaffirmed after any Adjusted), with specific rules for explicit
content.
- Motif Cap: ≤3 active motifs; overflow pruned by coherence, including motifs
specific to adult entertainment.
- Aftermath Required: every crest yields consequence with next-scene persistence,
including the aftermath of explicit acts.
- No explicit surface text ever leaves EROS, ensuring all outputs are structural
and non-graphic.
---
**1.6 Full Connector Map (all engines)**
> Each connector defines: Provide → Consume → Contract → Return → Errors → Example.
All payloads are JSON; no explicit wording.
**A) Psycho Engine (affect/repair)**
- **Provide:** Tension_Curve, Trust_Gradient, Emotional_Temperature,
Repair_Opportunities, including data from explicit scenes.
- **Consume:** Neuro_Affect_Profile (arousal/valence/stress/soothing),
Cadence_Tuning, Repair_Suggestions, with a focus on the psychological impact of
explicit content.
- **Contract:** Psycho may request micro-beat densification; EROS remains source of
consent/power truth, ensuring psychological accuracy in explicit scenes.
- **Return:** revised detail_density_index; suggested repair insert points, with
recommendations for improving explicit content.
- **Errors:** E_PSYCHO_PACK_MISMATCH, E_REPAIR_CONFLICT (violates consent state),
with specific errors related to explicit content.
- **Example:**
```json
{
"to": "psycho",
"scene": "S001",
"curves": {
"tension": ["low", "rise", "crest", "release"],
"rms": 0.06
},
"trust": {
"segments": ["fragile", "tested"]
},
"opps": [
{
"beat": "B004",
"type": "repair"
}
]
}
```
**B) Occult Engine (archetype/motif coherence)**
- **Provide:** Symbolic_Motif_Tags, Desire/Consequence outlines, including occult
elements in explicit content.
- **Consume:** SymbolMap (archetypes, ritual forms, correspondences), with a focus
on the mystical aspects of desire.
- **Contract:** ≤3 motifs enforced by EROS; Occult returns coherence_score + prune
list, ensuring occult coherence in explicit scenes.
- **Return:** motif.prune_suggestions, archetype_alignment, with recommendations
for improving occult elements in explicit content.
- **Errors:** E_OCCULT_OVERFLOW, E_SYMBOL_CONFLICT, with specific errors related to
occult symbolism in explicit content.
- **Example:**
```json
{
"to": "occult",
"motifs": ["Veil", "Knot", "Mirror"],
"ask": "coherence",
"context": "SlowBurn_Gothic"
}
```
**C) Comics Engine**
- **Provide:** Scene_Plan (optional), curves, roles, distance, motifs, crest index,
including explicit content from comic formats.
- **Consume:** panel budget, page breaks, with a focus on visual storytelling in
explicit scenes.
- **Contract:** EROS supplies panel-level beats sans prose; Comics maps to boards,
ensuring visual coherence in explicit content.
- **Return:** page_map (Beat→Panel), gutter_timing, focus_shift notes, with
recommendations for improving visual storytelling in explicit scenes.
- **Errors:** E_PANEL_BUDGET, E_CRESt_SPLIT, with specific errors related to visual
storytelling in explicit content.
- **Example:**
```json
{
"to": "comics",
"beats": ["B001", "B002", "B003"],
"crest": "B003",
"distance": ["Approach", "Near", "Contact"],
"motifs": ["Veil", "Knot"]
}
```
**D) Film Engine**
- **Provide:** curves, distance, roles, consent_checkpoints, power_deltas,
including explicit content from film formats.
- **Consume:** coverage constraints (shot count, duration), with a focus on
cinematic storytelling in explicit scenes.
- **Contract:** Film uses shot rhythm from curves; consent checkpoints mark on-
screen confirms, ensuring cinematic coherence in explicit content.
- **Return:** coverage_plan (ShotIDs mapped to Beats), hold_ratio near crest, with
recommendations for improving cinematic storytelling in explicit scenes.
- **Errors:** E_SHOT_BUDGET, E_CHECKPOINT_DROPPED, with specific errors related to
cinematic storytelling in explicit content.
- **Example:**
```json
{
"to": "film",
"crest": "B006",
"trust": ["tested", "earned"],
"power": ["70/30->60/40"],
"checkpoints": ["B004:Explicit"]
}
```
**E) Theater Engine**
- **Provide:** beats, roles, distance, consent checkpoints, motif props, including
explicit content from theater formats.
- **Consume:** stage zones, blocking constraints, with a focus on performative
storytelling in explicit scenes.
- **Contract:** map beats to entrances, proxemics, and timing; mark repair as quiet
beats, ensuring performative coherence in explicit content.
- **Return:** blocking_map, beat_cues, prop_calls, with recommendations for
improving performative storytelling in explicit scenes.
- **Errors:** E_BLOCKING_COLLISION, with specific errors related to performative
storytelling in explicit content.
- **Example:**
```json
{
"to": "theater",
"beats": ["B002", "B003"],
"zones": ["USR", "CS"]
}
```
**F) Literature Engine**
- **Provide:** cadence family, crest index, trust/power deltas, motifs, including
explicit content from literary formats.
- **Consume:** paragraph/sentence budgets (no explicit text from EROS), with a
focus on literary storytelling in explicit scenes.
- **Contract:** Lit adapts sentence length & paragraph heat to curve; places
confirm/repair checkpoints, ensuring literary coherence in explicit content.
- **Return:** cadence_outline (para slots, sentence counts), checkpoint_markers,
with recommendations for improving literary storytelling in explicit scenes.
- **Errors:** E_PARA_BUDGET, E_CONFIRM_OMITTED, with specific errors related to
literary storytelling in explicit content.
**G) Animation Engine**
- **Provide:** curve tempo, proximity, motif palette, including explicit content
from animation formats.
- **Consume:** frame budgets, scene length, with a focus on animated storytelling
in explicit scenes.
- **Contract:** Animation uses timing charts from curve segments; crest compresses
frame duration, ensuring animated coherence in explicit content.
- **Return:** timing_sheet, layout_priority, with recommendations for improving
animated storytelling in explicit scenes.
- **Errors:** E_TIMING_OVERFLOW, with specific errors related to animated
storytelling in explicit content.
**H) Video Games Engine**
- **Provide:** beats, consent gates, power/role shifts, trust repairs, including
explicit content from video game formats.
- **Consume:** quest graph hooks, interaction affordances, with a focus on
interactive storytelling in explicit scenes.
- **Contract:** Games maps beats to interaction nodes; consent gates require player
confirm actions; risk requires repair before re-escalation, ensuring interactive
coherence in explicit content.
- **Return:** node_map, gate_conditions, failure_rollbacks, with recommendations
for improving interactive storytelling in explicit scenes.
- **Errors:** E_NODE_CYCLE, E_GATE_BROKEN, with specific errors related to
interactive storytelling in explicit content.
- **Example:**
```json
{
"to": "games",
"nodes": [
{
"id": "N1",
"beat": "B003",
"type": "confirm"
},
{
"id": "N2",
"beat": "B005",
"type": "repair"
}
],
"gates": [
{
"from": "N1",
"requires": "Explicit"
}
]
}
```
**I) Events Engine (immersive/IRL staging)**
- **Provide:** consent checkpoints, distance arcs, motif set, crest/afterglow
timing, including explicit content from live events.
- **Consume:** room flow, audience pathing, with a focus on immersive storytelling
in explicit scenes.
- **Contract:** Events places check-ins as explicit markers; public risk flagged
structurally, ensuring immersive coherence in explicit content.
- **Return:** room_route, checkin_schedule, with recommendations for improving
immersive storytelling in explicit scenes.
- **Errors:** E_SAFETY_PATH_MISS, with specific errors related to immersive
storytelling in explicit content.
**J) Oral Tradition Engine**
- **Provide:** beats, motifs, cadence, consequence vectors, including explicit
content from oral traditions.
- **Consume:** teller pacing notes, with a focus on oral storytelling in explicit
scenes.
- **Contract:** maps to call-and-response beats and refrain placement; afterglow →
closing invocation, ensuring oral coherence in explicit content.
- **Return:** chant_map, refrain_slots, with recommendations for improving oral
storytelling in explicit scenes.
**K) Serialized Engine**
- **Provide:** per-scene curves/indices/aftermath; season arc intentions, including
explicit content from serialized formats.
- **Consume:** release cadence, cliff/resolve ratios, with a focus on serialized
storytelling in explicit scenes.
- **Contract:** enforces repair/cliff distribution; carries aftermath forward,
ensuring serialized coherence in explicit content.
- **Return:** season_curve, episode_targets, with recommendations for improving
serialized storytelling in explicit scenes.
- **Errors:** E_PERSISTENCE_DROP, with specific errors related to serialized
storytelling in explicit content.
**L) Culinary Arts Engine (sensory parallels)**
- **Provide:** motif palette, curve tempo (for pairing), consequence vector,
including explicit content from culinary arts.
- **Consume:** menu/tempo constraints, with a focus on sensory storytelling in
explicit scenes.
- **Contract:** maps phases to aroma/texture cues; strictly metaphorical; non-
graphic, ensuring sensory coherence in explicit content.
- **Return:** pairing_map, service_timing, with recommendations for improving
sensory storytelling in explicit scenes.
**M) Music — Vocalized Engine**
- **Provide:** curve family, crest position, motifs (for lyrical symbols),
trust/power deltas, including explicit content from vocalized music.
- **Consume:** tempo range, section budget, with a focus on musical storytelling in
explicit scenes.
- **Contract:** verse/bridge/chorus alignment to trust & power shifts;
confirm/repair become lyrical pivots (no explicit content), ensuring musical
coherence in explicit content.
- **Return:** section_map, hook_slots, with recommendations for improving musical
storytelling in explicit scenes.
**N) Music — Non-Vocalized Engine**
- **Provide:** curve energy profile, motif colors, including explicit content from
non-vocalized music.
- **Consume:** time signature, orchestration limits, with a focus on instrumental
storytelling in explicit scenes.
- **Contract:** harmonic tension maps to curve; crest modulations; afterglow decay,
ensuring instrumental coherence in explicit content.
- **Return:** harmonic_plan, tempo_envelope, with recommendations for improving
instrumental storytelling in explicit scenes.
**O) Visual Arts Engine**
- **Provide:** motif set, power geometry (who holds space), distance trajectory,
including explicit content from visual arts.
- **Consume:** composition constraints, with a focus on visual storytelling in
explicit scenes.
- **Contract:** composition studies (line/form/light) keyed to power & distance;
non-graphic symbolism only, ensuring visual coherence in explicit content.
- **Return:** composition_briefs, with recommendations for improving visual
storytelling in explicit scenes.
**P) Digital Media Engine (platform cadence)**
- **Provide:** crest timing, tease/reveal schedule, motif thumbnails (abstract),
including explicit content from digital media.
- **Consume:** platform pacing rules, content windows, with a focus on digital
storytelling in explicit scenes.
- **Contract:** schedules reveals and consent check-ins as visible beats (non-
graphic), ensuring digital coherence in explicit content.
- **Return:** drop_schedule, tease_map, with recommendations for improving digital
storytelling in explicit scenes.
**Q) Olfactory Arts Engine**
- **Provide:** motif set, curve segments, consequence vectors, including explicit
content from olfactory arts.
- **Consume:** aromatic palette/constraints, with a focus on olfactory storytelling
in explicit scenes.
- **Contract:** maps curve to ambient scent phases; afterglow → soft base accord;
all abstract, ensuring olfactory coherence in explicit content.
- **Return:** scent_scenario, diffusion_timings, with recommendations for improving
olfactory storytelling in explicit scenes.
---
**1.7 Unified Payload Contracts (shared by all connectors)**
**Eros_Node (beat)**
- beat_id
- roles: {initiator, responder}, with roles specific to adult performances.
- consent_state: "Implicit|Sought|Explicit|Adjusted|Reaffirmed|Revoked", including
consent dynamics in explicit content.
- act_taxonomy: [...], with acts specific to adult entertainment.
- bdsm_taxonomy: [...], including BDSM elements in explicit content.
- power_balance: "70/30->60/40", including power dynamics in adult content.
- distance: "Approach|Near|Contact|Retreat", including physical proximity in
explicit scenes.
- tension_delta: "rise|crest|release|afterglow", with pacing relevant to adult
content.
- trust_gradient: "fragile|tested|earned", including trust dynamics in explicit
content.
- symbolic_motifs: ["Veil", "Knot"] # ≤3, with motifs specific to adult
entertainment.
- consequence_vector: "Reward|Rupture|Reckoning|Transformation|ReturnToNormal",
including consequences of explicit acts.
- notes: "structural commentary; non-graphic", with non-graphic notes on explicit
content.
**Curves**
- declared_cadence: "SlowBurn|Pulse|Surge|Stutter|Plateau-Crest", with pacing
relevant to adult content.
- tension_curve: {segments: [...], rms: 0.0X, crest_index: n}, with data points
from explicit scenes.
- trust_gradient: {segments: [...]}, including trust dynamics in explicit content.
- power_rollup: {delta: "pre->post", shift_rate: [Link]}, including power dynamics in
adult content.
**Coach Diffs (structural)**
- insert_confirm(before: Beat_ID), with suggestions for improving explicit scenes.
- add_repair(at: Beat_ID), with recommendations for repairing explicit content.
- prune_motif(name), with suggestions for pruning motifs in explicit content.
- lock_roles(range: N), with suggestions for locking roles in explicit content.
- redistribute_crest(offset: +/-1), with suggestions for redistributing crests in
explicit content.
**Audit Flags**
- E_CONSENT_GATE_MISS, with specific errors related to consent in explicit content.
- E_BDSM_PROTOCOL, with specific errors related to BDSM protocols in explicit
content.
- E_AFTERMATH_GAP, with specific errors related to aftermath in explicit content.
- E_MOTIF_OVERFLOW, with specific errors related to motif overflow in explicit
content.
- E_ROLE_WHIPLASH, with specific errors related to role whiplash in explicit
content.
- E_SCHEMA_INVALID, with specific errors related to schema invalidity in explicit
content.
---
**1.8 Versioning & Integrity**
- SemVer: engine, schema, lexicons; breaking changes bump major, including versions
specific to explicit content analysis.
- Artifacts include _engine_version, _schema_version, _lexicon_versions, _sha256,
with specific versions for explicit content.
- Connectors declare compatibility in [Link], including compatibility
with explicit content analysis.
---
**1.9 Security/Privacy**
- Quarantine on real-person/PII; logs store hashes only, ensuring privacy in
explicit content analysis.
- No explicit surface text passes through connectors or buses, ensuring structural
integrity in explicit content.
- Signed packs; refuse unknown signatures, ensuring authenticity in explicit
content analysis.
---
**1.10 Acceptance (Mission + Connectors)**
- Every listed engine can consume nodes/curves/indices/tags/aftermath without
additional glue, including engines that handle explicit content.
- Round-trip audit passes (consent gates, motif cap, aftermath persistence),
ensuring structural integrity in explicit content.
- Deterministic reruns produce identical checksums across all connectors, including
those that handle explicit content.
---
**1.11 Minimal End-to-End Example (non-graphic)**
```json
{
"scene": "S014",
"eros": {
"crest": "B006",
"nodes": "output/S014/[Link]",
"curves": "output/S014/[Link]",
"tags": "output/S014/[Link]",
"aftermath": "output/S014/[Link]"
},
"fanout": {
"psycho": "OK",
"occult": {
"coherence": 0.82,
"prune": ["Mirror"]
},
"comics": {
"page_map": [
["B004", "P6"],
["B005", "P7"],
["B006", "P8"]
]
},
"film": {
"coverage_plan": "plan/S014_film.json"
},
"literature": {
"cadence_outline": "plan/S014_lit.json"
},
"games": {
"node_map": "plan/S014_game.json",
"gates": ["B004:Explicit"]
},
"music_vocal": {
"section_map": "plan/S014_song.json"
},
"visual_arts": {
"composition_briefs": "plan/S014_vis.json"
}
},
"audit": "pass",
"sha256": "f8f2...1c"
}
```
---
**Delivery Manifest — Item 1 (Mission + All Connectors)**
2) Why This Engine Exists — EROS / Taboo (Analyze-Only, Explicit-Analysis Enabled)
— Expanded Rationale
One-line: Mainstream AI historically treats sexual material as an undifferentiated
“ban zone.” EROS inserts the missing abstraction layer—explicit-analysis without
explicit prose—so fictional erotic dynamics can be measured, directed, audited, and
reused across every creative rail, safely and deterministically.
---
2.1 Historical blockers (why AI keeps failing here)
Monolithic filters: Most systems only toggle allow/deny, not interpret/structure.
Result: either fade-to-black (craft lost) or shock-chase (structure lost).
Policy coupling to surface text: Compliance decisions are keyed to rendered words,
not to underlying mechanics. Any tool that emits graphic prose becomes a liability
in logs, diffs, tickets, telemetry.
PII/real-person risk: Without a fiction-only boundary and a consent state machine,
pipelines can’t separate imagined narrative craft from real-world harm vectors.
Cross-media mismatch: Comics want panels, Film wants coverage rhythm, Games want
nodes; there’s no neutral, reusable layer for
desire/consent/power/tension/aftermath.
Net: AI never learned to think about eros the way editors/directors do—only to say
or not say words. EROS changes the unit of work from surface text to structural
tags, curves, and indices.
---
2.2 The missing abstraction (what EROS actually introduces)
Explicit-analysis: Model the granular mechanics (Act categories, BDSM protocols,
tools, risk flags, consent states, power/trust/distance) as neutral labels.
We analyze the explicit*, we don’t print the explicit.
Deterministic curves/indices: Tension/Trust/Power provide scene math that rails can
target without touching wording.
Consent as a first-class automaton: “Gate-before-escalate” becomes a compile-time
rule, not vibes.
Aftermath as contract: Crests must yield persistent consequences. If state doesn’t
change, the scene isn’t finished.
---
2.3 Theory of change (how this unblocks creators & platforms)
1. Separate content from consequence. Analyze acts/risk/roles/consent/aftermath as
data; render elsewhere. Platforms get safety; creators get craft.
2. Move from taste to tests. Invariants (gates, motif cap, aftermath required) turn
debates into pass/fail checks.
3. Make it portable. JSON artifacts flow to Psycho, Occult, Comics, Film, Theater,
Literature, Animation, Games, Events, Oral, Serialized, Culinary, Music, Visual,
Olfactory, Digital Media—no re-authoring.
4. Stay lawful, stay useful. Structural clarity (who moved power; where consent
advanced; what consequence persisted) gives editors leverage without generating
graphic text.
---
2.4 Stakeholder pain → EROS answer
Writer/Director: “I need heat without losing control.” → Tension_Curve, Consent
checkpoints, Power_Dynamic_Index + coach diffs (insert confirm/repair, prune
motifs, lock roles).
Editor/Showrunner: “I need series-level consistency.” → KPIs + season rollups;
aftermath persistence guarantees.
Toolsmith/Rails: “I need neutral inputs.” → nodes/curves/indices/tags/aftermath
across engines; all versioned.
Producer/Legal: “I need auditability.” → Determinism + invariant gating + signed
packs; no explicit text in buses.
---
2.5 Design axioms (what we will not compromise)
Fiction-only ingest. Real-person or PII triggers quarantine.
Analyze-only forever. No graphic prose output—ever.
Determinism by default. Same input/knobs → identical artifacts (checksum stamped).
Invariant rails. gate_before_escalate, motif cap ≤3, aftermath required, high-risk
re-affirm.
Connector-first. Every artifact shape exists to feed all engines cleanly.
---
2.6 Why “explicit-analysis” is essential (not a euphemism)
Editors don’t need blushy adjectives; they need where the consent advanced, what
risk was negotiated, who held space, and what changed after.
By retaining act/protocol/tool/risk labels as data, we preserve mechanical fidelity
—the exact thing fade-to-black pipelines destroy—while remaining policy-deployable.
---
2.7 Cross-engine relevance (why every connector benefits)
Psycho: Align affect to curve density; schedule repairs precisely after dips.
Occult: Keep symbol discipline; prune motifs to a coherent triad that reinforces
Desire_Type.
Comics/Film/Theater/Literature/Animation: Convert curves and checkpoints into
panel/shot/blocking/cadence/timing—not prose.
Games/Events/Oral/Serialized: Make gates/nodes/check-ins/cliffs/afterglows concrete
and testable.
Culinary/Music/Visual/Olfactory/Digital: Map the same curve/motif/aftermath to
senses, structure, and schedule without textual exposure.
---
2.8 Safety envelope (why this is deployable at scale)
Scope wall: Fiction-only, non-PII.
Output hygiene: No anatomical or graphic wording in any artifact or log.
Structural safeguards: Consent state machine; high-risk re-affirm; repair-before-
re-escalate.
Auditability: Invariant failures block publish; artifacts are signed and version-
stamped.
---
2.9 Interpretable math (why leadership trusts it)
Curves: Tension fit (RMS), trust segments, crest index.
Indices: Power shift rate, motif coherence, aftermath persistence.
Deltas: Beat-level pre→post power and trust changes.
Checks: Binary pass/fail on gates, motif cap, and aftermath presence.
---
2.10 Research value (what this unlocks beyond one project)
Comparative craft studies (SlowBurn vs Surge outcomes).
Bias audits on role/power distributions across profiles—without storing explicit
prose.
Consent modeling benchmarks using the same automaton across media.
Generalizable editors that operate on labels/curves instead of text.
---
2.11 Before/after (what changes the day you adopt EROS)
Before:
“It feels off.”
Debates about adjectives.
Policy roulette; logs unshippable.
After:
“Gate miss at B-005; insert confirm at B-004′.”
“Power target 60/40 missed; lock roles 2 beats.”
“Motif flood; prune to Veil/KeyLock/Knot.”
“Aftermath absent; add consequence + persistence hook.”
---
2.12 Edge cases & mitigations
Ambiguous assent: Prefer synthetic confirm over silent promotion; mark
requires_confirm:true.
Role whiplash: lock_roles(range:N) around crest.
Motif creep: Occult returns low coherence → prune to triad with rationale.
Risk escalation post-adjustment: Require Reaffirmed; otherwise flag
E_BDSM_PROTOCOL.
---
2.13 KPIs (expanded) with targets
[Link] < ε against declared cadence.
[Link].checkpoints_passed = 100%; misses = 0.
[Link].shift_rate hits intended post-scene vector within tolerance.
[Link].repair_events ≥ profile minimum after dips.
[Link].coherence_score ≥ threshold from Occult.
aftermath.persistence_rate ≥ 95% across next-scene checks.
Cross-rail latency from analysis → adapter plan under SLA.
---
2.14 Acceptance (Why-level, exhaustive)
Given a fictional scene with attempted escalation but no checkpoint:
EROS flags E_CONSENT_GATE_MISS, proposes insert_confirm, recomputes curve fit,
updates Aftermath.
Psycho/Occult and all Expression rails can consume the revised artifacts as-is.
Re-runs are checksum-identical with same knobs; different profiles adjust targets
but not lawfulness.
---
2.15 Roadmap (why increases over time don’t break safety)
v1: Acts/BDSM/Consent/Power/Trust/Motifs/Aftermath + all connectors (current).
v1.1: Finer risk taxonomy; richer repair typology (still labels, no prose).
v2: Multi-scene inference (season power arcs), tighter CI for connector compat.
Never: Generation of graphic sexual prose.
---
2.16 Short non-graphic proof (what “explicit-analysis” looks like)
Act tags: {category:"BDSM", type:"Restraint", protocol:"SSC", tools:["rope"],
consent_checkpoint:"Explicit"}
Consent: Sought → Explicit → Adjusted → Reaffirmed
Power: "70/30->58/42" around crest; whiplash locked for 2 beats.
Aftermath: Consequence_Vector:"Reckoning", persistence hook carried to next scene.
Everything precise; nothing graphic.
---
2.17 The big picture (why this matters to AI)
EROS demonstrates that “can’t talk about it” is not the same as “can’t analyze it.”
By relocating meaning from surface text to formal structure, AI gains the ability
to handle one of fiction’s most powerful engines—eros—responsibly. This raises the
bar for safety, craft, and interoperability at once, and it turns a historically
off-limits domain into something that can be measured, edited, and directed without
violating policy or trust.
---
Delivery Manifest — Item 2 (Why It Exists, Expanded)
—FIXED
3) Scope & Non-Goals — EROS / Taboo (Analyze-Only, Explicit-Analysis Enabled)
Contract recap: Fictional/creative analysis at explicit-analysis granularity
(acts/protocols/tools/risk/consent/power/trust/motifs/aftermath) with no anatomical
or graphic sexual wording. Deterministic, versioned, connector-ready to all
engines.
---
3.1 In-Scope (per your selections)
Domains (broad):
Erotica & Pornography (modern & classic), Hentai, Adult Visual Novels/Video Games,
Adult Media ecosystems.
Analysis-only of sexual/erotic scenes and patterns within authored fiction or
public, published works (books, comics, films, studio scenes, etc.).
Industry entities (studios/platforms/labels) may be referenced by name for
contextual analysis (e.g., Brazzers, Reality Kings, Team Skeet), without scraping
or ingesting proprietary content.
Celebrities/performers (public figures):
Allowed as informational references (e.g., “Mia Khalifa”) strictly to situate
style/era/format.
No explicit depiction of real persons; EROS de-identifies to archetypes inside
analysis artifacts (Performer_Archetype:"Brunette_Star_2010s") while optionally
storing a hashed alias in source_reference for traceability.
Media types ingestible:
Text (scenes, scripts, subtitles, transcripts).
Transcripts/Descriptions of video/audio (no media ingestion).
Image metadata only (panel/shot lists, tags, timing) — no images consumed.
All inputs must be creator-provided or publicly available with no access-control
breach.
---
3.2 Kink/Fetish Coverage (adult, consensual)
Covered as labels (non-graphic):
BDSM, Roleplay, Toy use, Group, Voyeur, Exhibition, Manual/Oral,
Penetrative_Vaginal/Anal, Aftercare.
Edge categories:
Allowed as analysis-labels only (non-graphic): Pain, Degradation, Impact, Bondage,
Public, Sensory_Deprivation, Temperature.
High-risk gates enforced (see Consent Automaton).
Always banned (auto-quarantine):
Minors/age-play, incest, bestiality, scat/vomit, non-consensual sexual activity
presented as titillation, reproductive coercion, real-person sexual imagery/text,
private or doxxed media.
---
3.3 CNC / Non-Consensual Depictions in Fiction
Mode: ALLOW classification-only with extreme caution.
EROS may detect/flag depictions of coercion/assault in fiction and produce risk &
integrity reports (e.g., E_CNC_FLAG, Consent_State:"Revoked"), but will not compose
surface text or “coach” escalation around non-consent.
Outputs limited to taxonomy labels, consent timeline, harm markers, aftermath
requirements (e.g., Consequence_Vector:"Reckoning"), and repair/refusal signals.
Connectors receive redacted payloads (no phrasing) and cannot request composition
for these beats.
---
3.4 Granularity & Lexicons
Act_Taxonomy + BDSM_Taxonomy expanded (subtypes on):
impact_subtype: crop|paddle|hand|flogger
restraint_subtype: rope|cuffs|spreadbar
sensation_subtype: temperature|pressure|texture|sound
Extensible via [Link].v1.x; additions require schema bump and compat
check.
---
3.5 Consent Automaton (strict-tunable)
Default strictness: Strict, but tunable per profile (e.g., PowerReversal_Noire can
narrow/pace gates; still blocks illegal paths).
Rules:
Gate-before-escalate (rise in act intensity requires Explicit; if Adjusted, next
high-risk step requires Reaffirmed).
High-risk set (Breath, Edge, Impact, Bondage, Public, Degradation) → Reaffirmed
required after any adjustment.
Revoked → Hard stop; enforce Distance:"Retreat|Aftercare".
CNC detection path: classify + report; no coaching to continue; force aftermath
with harm accounting.
---
3.6 Localization
English + Spanish interfaces; ontology IDs remain language-agnostic (numeric/string
keys).
Field glossaries ship with EN/ES labels; downstream rails handle display language.
---
3.7 PII & Reference Handling
Aliases allowed if creator-supplied; hashed & salted in source_reference.
Strip direct emails/handles/geo; collapse to Entity_Archetype for analysis fields.
Public figures can be named in human-readable context summaries; never in act-level
labels.
---
3.8 Quarantine vs. Redaction
Policy hit → Redacted artifacts + error report (your selection).
Deliver [Link] + [Link] (structural shells with sensitive beats
replaced by REDACTED_BEAT).
Full quarantine reserved for always-banned list.
All redactions are explainable: include rule ID, beat index, remediation hint.
---
3.9 Retention & Logs
Artifacts may be stored for CI (signed; no source text).
Store {nodes, curves, indices, tags, aftermath, audit, coach} + _sha256; never
store raw scene text.
TTL configurable; default 30d CI retention.
---
3.10 Connector Obligation
All rails must accept outputs (mandatory support): Psycho, Occult, Digital Media,
Comics, Film, Theater, Literature, Animation, Video Games, Events, Oral Tradition,
Serialized, Culinary Arts, Music (Vocal/Non-Vocal), Visual Arts, Olfactory Arts.
Each connector receives identical schemas; no rail may demand surface text. Non-
compliant rails are blocked by CI.
---
3.11 Performance Targets (scene-level)
Latency: ≤ 1s @ 2k tokens (ANALYZE), determinism prioritized over throughput.
Determinism: identical input/knobs → identical _sha256 across runs/platforms.
Adapter budget hints emitted within same SLA (crest index, gate markers, repair
candidates).
---
3.12 Output Text Restrictions
Absolute: No anatomical or graphic sexual wording anywhere in artifacts, logs, or
error messages.
Beat notes limited to structural commentary (e.g., “confirm missing,” “repair
needed,” “motif overflow”).
---
3.13 Out-of-Scope (automatic deny)
Generation of explicit sexual prose or imagery.
Real-world sexual advice/instructions.
Private/platform-gated content ingestion, scraping, or reverse engineering.
Doxxing or correlating performer identities beyond public professional names.
Any attempt to transform analysis labels into explicit narration.
---
3.14 Non-Goals (intentional exclusions)
Taste arbitration beyond invariant checks (EROS enforces structure, not
aesthetics).
Moral adjudication: reports state what the scene structurally does, not whether it
“should.”
Detector of legality: EROS enforces project policy; it is not a legal oracle.
---
3.15 Decision Tree (edge-case enforcement)
1. Input scope: If non-fiction/real-person explicit → Quarantine (always-banned).
2. Fiction + minors/illegal themes → Quarantine.
3. Fiction + CNC depiction: → Classify + Redact sensitive beats; emit E_CNC_FLAG;
allow aftermath accounting; block compose/coach-escalation.
4. Fiction + high-risk escalation without gate: → E_CONSENT_GATE_MISS; propose
insert_confirm; block publish until fixed.
5. Motif flood: prune to ≤3 via Occult coherence; emit prune_suggestions.
6. Role whiplash: enforce Role_Locks; coach diff emitted.
---
3.16 Accept/Deny Examples (non-graphic)
Accept (analyze): “Hentai VN scene with ritual bondage; consent negotiated, then
adjusted.” → Act/BDSM labels + gates + repair + aftermath.
Accept (analyze w/ redaction): “Noir chapter depicting coercion; aftermath &
rupture central.” → Classify harm, redact beats, require consequence tracking.
Deny (quarantine): “Clip of a real performer with private metadata.” → Block;
incident report.
Deny (quarantine): “Story with age-play.” → Block; rule reference.
---
3.17 Compliance Matrix (summary)
Domains: Erotica/Porn/Hentai/Adult Games/Adult Media — Yes (analysis-only)
Celebrities/Performers: Name in summaries OK; act-level labels use archetypes;
aliases hashed.
Image/video: No media; text/transcripts/metadata only.
Edge kinks: Label-only, high-risk gates.
CNC: Classify + Redact, no compose/coach of escalation.
Logs: Store artifacts (signed), no raw text.
Connectors: All supported; no rail may request surface text.
---
Delivery Manifest — Item 3 (Scope & Non-Goals)
Completed: Full scope per selections (1C, 2B, 3C, 4C, 5A, 6C, 7B, 8B, 9B, 10B, 11B,
12B, 13A, 14A, 15A), with deny lists, edge handling, redaction behavior, retention,
connector obligation, targets, and decision tree.
Next queued: 4) Operating Modes (Analyze-Only Core) full-length, then 5)
Architecture Overview. Say “4” to proceed.
—FIXED
4) Operating Modes — EROS / Taboo (Analyze-Only, Explicit-Analysis Enabled)
Decisions locked from you:
Modes = ANALYZE, COACH, AUDIT, COMPOSE_STRUCTURE, LINT, DIFF, EXPLAIN, BATCH,
STREAM, SANDBOX.
Default run style = STREAM.
COACH authority = may resegment beats (create B004a, etc.).
CNC (fiction) = Analyze + Audit + Coach repairs only (no escalation suggestions).
Fan-out to connectors = Manual push.
Packaging = Both (bundle + split).
Formats = JSON + MessagePack + Protobuf.
Determinism = purely deterministic pipeline (no seeds).
Failure policy = Block publish only if severity ≥ HIGH.
Localization = IDs-only; bilingual glossaries at render time.
Large scenes = Windowed paging + merge pass.
Performer refs = No names in artifacts (archetypes + hashed alias).
Retention = Always CI retention for packs.
Profiles enabled = SlowBurn_Gothic, PowerReversal_Noire, RitualUnion_Mythic,
Public_Performance, Edge_Protocol_SSC, Role_Switch_Switchsafe.
---
4.1 ANALYZE (default STREAMed)
What it does: Ingests fictional text/transcripts/metadata → emits [Link],
[Link], [Link], [Link], [Link] (analysis-only; no graphic
wording).
STREAM semantics (editor live):
Sliding window over tokens/lines with overlap; per-window partial nodes get
watermarks; merge pass compacts to final beat list.
Backpressure: if invariant risk rises (e.g., pending escalation without gate),
stream emits early WARN events.
Determinism: windowing + merge is order-stable; whitespace/time stripped from
hashes.
BATCH semantics (CI):
Atomic per scene; produces final artifacts + _sha256 and compatibility stamps.
Latency target: ≤ 1s @ 2k tokens.
Inputs: text, transcript, panel/shot metadata, profile, culture pack.
Outputs: analysis artifacts +
_engine_version/_schema_version/_lexicon_versions/_sha256.
Guards: Fiction-only gate; PII strip; no media ingestion.
---
4.2 COACH (structural diffs; resegmentation allowed)
Authority (per your choice): May resegment beats (e.g., B004 → B004a/B004b) in
addition to minimal diffs.
Allowed ops (non-graphic only):
insert_confirm(before:Beat_ID)
add_repair(at:Beat_ID)
lock_roles(range:N)
prune_motif(name)
redistribute_crest(offset:+/-1)
resegment(Beat_ID → [Beat_IDa, Beat_IDb]) with preserved order/ids
Forbidden: Any operation that composes explicit surface text.
CNC rule (your 4B): If CNC detected: COACH limits to repairs only
(confirm/refusal/aftercare/consequence). No suggestions that escalate or stylize.
Deliverables: [Link] + recomputed curves/indices; new checksum.
---
4.3 AUDIT (invariants & severity)
Checks include:
Gate-before-escalate; high-risk re-affirm after Adjusted.
Motif cap ≤3 with coherence sanity.
Aftermath presence and persistence hooks.
Role whiplash detection; lock-range recommendation.
Schema validity, locale labels, connector readiness.
Severity policy (you chose “block only if HIGH”):
INFO: stylistic or optional improvements; never blocks.
WARN: structural improvement suggested; publish allowed.
HIGH: consent/gate violations, CNC mishandling, aftermath absence → block publish
until fixed or redacted.
Output: [Link] (list of flags with rule IDs, beat refs, fix hints) + pass/fail
+ severity.
---
4.4 COMPOSE_STRUCTURE (no prose)
Purpose: Build Scene_Plan: beat scaffolds, cadence markers, checkpoint placements,
adapter hints for all rails.
No surface text; never outputs anatomical/graphic wording.
CNC interlock: Disabled for escalation planning; allowed to add
refusal/repair/consequence scaffolds only.
Output: scene_plan.json consumable by
Comics/Film/Theater/Lit/Animation/Games/Events/Oral/Serialized/Culinary/Music/
Visual/Olfactory/Digital.
---
4.5 LINT (fast preflight)
What it checks: Schema shape, required fields, ID uniqueness, locale coverage,
connector compat matrix.
Use: Instant feedback in-editor; sub-100ms targets for typical scenes.
Output: [Link].
---
4.6 DIFF (analysis-to-analysis comparison)
Inputs: two EROS packs (A/B).
Compares: beat alignment, curve RMS deltas, power/trust deltas, motif set changes,
gate locations, aftermath shifts.
Output: [Link] with explanations suitable for PR review (non-graphic phrasing).
---
4.7 EXPLAIN (trace & rationale)
Purpose: Human-readable reasons for flags and diffs (still non-graphic).
Includes: rule citations, path traces (which beats caused which gate), why a motif
was pruned, why a repair is required.
Output: [Link] with references to audit.rule_ids and beat_ids.
---
4.8 BATCH (multi-scene orchestration)
Use cases: Episode/volume/route analysis.
Features: parallel scene runs, season rollups, aftermath persistence checks across
scenes, compatible with Serialized rail KPI targets.
Output: rollup/*.json + per-scene packs; global _sha256_aggregate.
---
4.9 STREAM (incremental editor mode)
Mechanics:
Window size auto-tuned; overlapping windows ensure beat continuity.
Emits PARTIAL_NODE, WARN, CREST_TENTATIVE, CHECKPOINT_REQUIRED events.
Final merge pass condenses partials; generates final artifacts + checksum.
Guarantees: Exact same final pack as a full BATCH over the same input.
---
4.10 SANDBOX (dry-run; no packs)
Purpose: Experiment without retention.
Behavior: Produces in-memory artifacts for preview only; does not write CI packs,
so your “always-retain packs” policy remains true (no pack, no retention).
Limits: No connector push; no persistence.
---
4.11 Connectors Fan-Out (manual push)
Why manual: You chose explicit control.
Flow: ANALYZE → AUDIT (pass / fail) → you call push(connector_list).
Guards: Blocks push to any rail if [Link] == HIGH for that scene.
Returns: Per-rail adapter plans (boards/coverage/cadence/nodes/briefs/schedules),
never surface text.
---
4.12 Packaging & Formats
Split files (dev):
[Link], [Link], [Link], [Link], [Link], [Link],
[Link], scene_plan.json, [Link], [Link].
Bundle (CI): [Link] (same files under /analysis/…), signed +
checksummed.
Formats supported (all):
JSON (human diff).
MessagePack (compact).
Protobuf (strict schemas).
Content negotiation via accept header or file suffix.
---
4.13 Determinism (no seeds)
Stability rules:
Stable tokenization; normalized whitespace; locale-insensitive sorting.
Tie-breakers by (scene_id, line_no, offset).
Timestamps removed from hashes; _sha256 covers payload only.
Profiles alter targets, not legality.
---
4.14 Large-Scene Handling
Windowed paging + merge:
Segment by paragraph/timecodes; overlap windows for boundary safety.
Merge rules: prefer longest valid Consent_State chain; preserve earliest crest that
fits declared cadence; consolidate duplicates by beat signature.
Memory caps respected; backpressure signals to the editor.
---
4.15 CNC Interlocks (your B choice)
When EROS classifies CNC in fiction:
ANALYZE + AUDIT continue.
COACH = repairs only (confirm/refusal/aftercare/consequence).
COMPOSE_STRUCTURE = no escalation scaffolds.
Connectors receive redacted nodes for those beats and aftermath requirements.
Publish blocks only if HIGH severity remains after repair proposals.
---
4.16 Failure & Severity Handling
INFO: stylistic/optimization; publish allowed.
WARN: fix recommended (e.g., motif overflow → prune); publish allowed.
HIGH (block): missing consent gate before escalation; high-risk without reaffirm;
aftermath absent; schema invalid; real-person content.
On HIGH: emit [Link] with the minimal set to clear block; rerun → if
passes, pack unlocks.
---
4.17 Localization (IDs-first)
Artifacts carry IDs only; renderers pull EN/ES glossaries at display time. This
keeps hashes stable and prevents drift across locales.
---
4.18 Performer Reference Handling
No human-readable names inside artifacts.
Performer_Archetype + source_reference.hash (salted).
Human-readable names may appear in external summaries, not inside EROS packs.
---
4.19 Retention & Telemetry
CI packs always retained per policy; no raw scene text stored.
SANDBOX never emits a pack; nothing retained.
Metrics logged: latency, curve RMS, checkpoint count, severity mix, connector push
outcomes.
---
4.20 Example Invocations (pseudo; non-graphic)
Stream analyze in editor:
eros analyze --stream [Link] --profile PowerReversal_Noire --locale en,es
Fix a gate miss (coach + resegment):
eros coach --insert_confirm B004 --resegment B006
Audit + manual push to Comics & Film:
eros audit [Link] → PASS (no HIGH) →
eros push --rails comics,film [Link]
CNC detected:
eros audit → E_CNC_FLAG (WARN/HIGH) → eros coach --repairs-only → re-audit → push
if no HIGH.
---
Delivery Manifest — Item 4 (Operating Modes)
Completed: All modes per your picks; stream default; resegmentation authority; CNC
interlocks; manual fan-out; packaging and three wire formats; determinism rules;
large-scene paging; severity policy; localization; performer handling; retention;
examples.
Next queued: 5) Architecture Overview (pipeline, dataflow, CI, connector buses).
Say “5” to proceed.
—FIXED
5) Architecture Overview — EROS / Taboo (Analyze-Only, Explicit-Analysis Enabled)
Contract reminder: Fictional domain. Analyze-only. We do explicit-analysis
(acts/protocols/tools/risk/consent/power/trust/motifs/aftermath). We never output
anatomical/graphic surface text. All artifacts are deterministic, signed, and
connector-ready to every rail.
---
5.1 High-Level System Map
Runtime layers
Ingress → Core → Psycho/Occult handshakes → Coach/Audit/Explain → Packager →
Connector Buses
Core modules
1. Tokenizer & Windower (STREAM-first): stable segmentation with overlap; ID space
[Link].
2. PII/Scope Gate: fiction-only guard; performer de-ID; alias hashing; policy hit →
redaction or quarantine.
3. Syntactic Parser: paragraphs → micro-beats; dialogue/action cues; shot/panel
markers from metadata.
4. Semantic Mapper: role hints, desire cues, distance cues, consent verbs → pre-
beat features.
5. Consent Automaton: state machine over beats
(Implicit→Sought→Explicit→Adjusted→Reaffirmed|Revoked).
6. Act/BDSM Classifier: neutral Act_Taxonomy + BDSM_Taxonomy with subtypes
(impact/restraint/sensation).
7. Curve Fitter: Tension_Curve, Trust_Gradient; Power_Dynamic_Index via pre→post
vector.
8. Motif Engine: select ≤3 motifs; feed Occult for archetype coherence.
9. Integrity Builder: Aftermath_Report, consequence vector, persistence hooks.
10. Artifact Writer: nodes/curves/indices/tags/aftermath (JSON/MsgPack/Proto).
11. Coach (optional): structural diffs; can resegment beats.
12. Audit: invariants, severity, publish gating.
13. Explain: rule traces, path proofs (non-graphic).
14. Packager: split + bundle packs; signing; _sha256 over payloads.
15. Connector Orchestrator: manual push to rails; compat matrix enforcement.
---
5.2 Dataflow (BATCH and STREAM)
STREAM (editor)
1. Text/transcript/metadata → Windower (overlap N).
2. For each window: modules 2–10 emit PARTIAL_NODE events + early WARN/HIGH.
3. Merge Pass: align overlapping beats by signature; resolve duplicates; compact
IDs.
4. Emit final artifacts + checksum; hand to Coach/Audit on request.
BATCH (CI)
1. Run modules 2–10 on full scene; then 11–13 as configured.
2. If Audit severity ≥ HIGH → block; else pack + sign + store.
3. Manual push to connectors.
Determinism anchors: stable tokenization; locale-neutral sort; tie-break (scene_id,
line_no, offset); timestamps excluded from hash.
---
5.3 Core Schemas (extracts, non-graphic)
[Link]
{
"_schema_version": "[Link].v1.2",
"scene_id": "S014",
"profile": "PowerReversal_Noire",
"beats": [
{
"beat_id": "B001",
"desire_type": "Longing",
"initiator_role": "Initiator",
"consent_state": "Sought",
"power_balance": "70/30->68/32",
"distance": "Approach",
"tension_curve": "low->rise",
"emotional_temperature": "cool->warm",
"trust_gradient": "steady_up",
"symbolic_motifs": ["Veil"],
"boundary_conditions": ["limits_declared"],
"consequence_vector": null,
"act_taxonomy": [{"category":"Kissing"}],
"bdsm_taxonomy": [],
"notes": "structural"
}
]
}
[Link]
{
"_schema_version":"[Link].v1.0",
"tension_curve": {"family":"SlowBurn","rms_fit":0.07,"crest_index":0.82},
"trust_gradient": {"shape":"stepwise_climb","repairs":[{"at":"B009"}]},
"power_dynamics": {"pre":"70/30","post":"58/42","shift_rate":0.12}
}
[Link]
{
"_schema_version":"[Link].v1.0",
"scene_id":"S014",
"state_changes":{
"power_balance":{"from":"70/30","to":"58/42"},
"trust_gradient":{"from":"low","to":"mid"},
"desire_type":{"from":"Longing","to":"PowerReversal"}
},
"integrity_checks":{
"consent_continuity":"pass",
"boundary_respected":"pass",
"cause_effect_chain":"solid"
},
"persistence_hooks":[{"propagate_to":"S015","type":"Reckoning"}]
}
[Link] (example ops)
{
"ops":[
{"op":"insert_confirm","before":"B004"},
{"op":"resegment","target":"B006","into":["B006a","B006b"]},
{"op":"lock_roles","range":2}
]
}
[Link]
{
"severity":"WARN",
"flags":[
{"rule_id":"E_MOTIF_OVERFLOW","beat_id":"B003","suggest":"prune_to<=3"},
{"rule_id":"E_CONSENT_GATE_MISS","beat_id":"B005","suggest":"insert_confirm@B004"}
]
}
---
5.4 Consent Automaton (engine-embedded)
States: Implicit → Sought → Explicit → Adjusted → Reaffirmed | Revoked
Transitions (legal):
Implicit→Sought (ask)
Sought→Explicit (confirm)
Explicit→Adjusted (change conditions)
Adjusted→Reaffirmed (confirm change)
Any state → Revoked (hard stop)
Guards:
Escalation (act intensity ↑ or high-risk enter) requires Explicit; after Adjusted,
high-risk requires Reaffirmed.
Revoked forces Distance:"Retreat|Aftercare" and blocks further escalation.
CNC classification path (fiction): beats flagged; composition disabled; Coach
repairs only; aftermath required.
Automaton proofs recorded in [Link] as path traces (non-graphic).
---
5.5 Classification Layer (explicit-analysis, neutral)
Act_Taxonomy: Kissing | Manual | Oral | Penetrative_Vaginal | Penetrative_Anal |
Toy | BDSM | Roleplay | Voyeur | Exhibition | Group | Aftercare
BDSM_Taxonomy: Bondage | Discipline | Dominance | Submission | Sadism | Masochism |
Sensation | Impact | Restraint
Subtypes:
impact_subtype: crop|paddle|hand|flogger
restraint_subtype: rope|cuffs|spreadbar
sensation_subtype: temperature|pressure|texture|sound
Risk flags: Impact | Breath | Edge | Public | Pain | Degradation (labels only)
All labels are categorical; no graphic surface phrasing is produced.
---
5.6 Psycho & Occult Handshakes
Psycho (affect co-processor)
In: draft Tension/Trust curves, beat timings.
Out: affect targets (arousal/valence/soothing), repair placement hints, cadence
adjustments.
Contract: [Link].v1.0; EROS remains source of truth for consent/roles.
Occult (symbol discipline)
In: candidate motifs (≤5).
Out: archetype map, coherence score, prune suggestions to triad (≤3).
Contract: [Link].v1.0; EROS enforces cap and propagates motif triad to
connectors.
---
5.7 Invariants & Governance
Gate-before-escalate (compile-time failure on miss).
High-risk re-affirm required after any adjustment.
Motif cap ≤3 per scene.
Aftermath required with persistence hook if crest present.
Role whiplash guard via lock_roles(range:N) around crest.
Real-person & always-banned themes → quarantine.
Audit classifies violations as INFO/WARN/HIGH; only HIGH blocks publish (your
policy).
---
5.8 Security & Privacy
No media ingestion (images/video). Text/transcripts/metadata only.
PII scrub: names/handles/geo stripped; optional alias → salted hash in
source_reference.
Public figures: may appear in external context summaries, never in act-level
artifacts; analysis uses archetypes.
Packs contain no raw scene text.
Signing: pack + manifest signed; _sha256 logged for reproducibility.
---
5.9 Pack Layout & Signing
Split (dev):
/analysis/
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
scene_plan.json
[Link]
/meta/
_engine_version
_schema_version
_lexicon_versions
_sha256
_signature
Bundle (CI): [Link] with same tree.
Compat: [Link] maps engine/schema/lexicon versions to connector min
versions; CI blocks mismatches.
---
5.10 Connector Buses (all rails, no surface text)
Comics Bus: crest index → panel scale; distance → panel proximity; checkpoints →
caption markers; motif triad → prop/symbol palette.
Film Bus: curve → shot rhythm; distance → lens/proxemics suggestions; checkpoints →
coverage moments; aftermath → continuity notes.
Theater Bus: beats → entrances/exits; distance → blocking lines; repair → quiet
beats; motifs → set/costume tokens.
Literature Bus: cadence outline (para/sentence counts), checkpoint dialog turns
(non-graphic), motif triad → leitmotifs.
Animation Bus: timing charts; holds around crest; motif triad → color/shape
language.
Video Games Bus: nodes w/ consent gates, risk conditions, repair nodes, persistence
flags; no explicit text.
Events Bus: crowd flow, check-ins, decompression scheduling; motif triad → thematic
zones.
Oral Tradition Bus: call/response scaffolds; refrains keyed to trust climbs.
Serialized Bus: season arcs; cliff & payoff ratios; aftermath carry-forward
enforcement.
Culinary Arts Bus: course pacing synced to curve; motif triad → aromas/textures
(abstract).
Music (Vocal/Non-Vocal) Buses: sections/harmony mapped to tension/trust shifts;
motif triad → leitmotifs/themes.
Visual Arts Bus: composition briefs (line/shape/light) from power geometry &
distance.
Olfactory Arts Bus: diffusion schedule; accord stack → motif triad; afterglow as
base note.
Digital Media Bus: tease/reveal slots; consent checkpoints surfaced as trust
signals; no explicit content.
All buses consume plans/curves/tags; none may request surface text.
---
5.11 CI, Testing, Determinism
Golden packs: regression tested via _sha256 + KPI tolerances.
Locale flip test: EN/ES glossaries swap must not change pack hashes.
Window merge test: STREAM vs BATCH produce identical artifacts.
Edge battery: CNC detection, high-risk reaffirm, role whiplash, motif overflow,
aftermath absence → proper severities and coach diffs.
Performance: ≤1s @ 2k tokens ANALYZE; LINT <100ms; STREAM backpressure respected.
---
5.12 Error Classes & Codes (non-graphic)
E_SCOPE_REALPERSON: real-person explicit input → HIGH/quarantine.
E_POLICY_ALWAYS_BANNED: minors/incest/bestiality/etc. → HIGH/quarantine.
E_CONSENT_GATE_MISS: escalation without checkpoint → HIGH; coach diff suggests
confirm.
E_RISK_NO_REAFFIRM: high-risk after adjust without reaffirm → HIGH.
E_MOTIF_OVERFLOW: >3 motifs → WARN; prune list provided.
E_AFTERMATH_MISSING: crest without consequence → HIGH.
E_SCHEMA_INVALID: malformed artifact → HIGH.
E_COMPAT_MISMATCH: connector too old → HIGH (block push).
[Link] includes rule rationale and beat refs.
---
5.13 Example End-to-End (non-graphic)
1. ANALYZE (STREAM) scene draft → early E_CONSENT_GATE_MISS@B005.
2. COACH proposes insert_confirm@B004 + lock_roles(range:2).
3. AUDIT drops to WARN; Aftermath adds Reckoning hook.
4. PACK signed; PUSH to Comics/Film/Games/Lit.
5. Comics boards checkpoint panel; Film schedules coverage beat; Games adds confirm
node before escalation; Lit cadence outline places dialog confirm; All share motif
triad.
---
5.14 Versioning & Migration
SemVer: engine/schema/lexicons versioned independently.
Forward-compat: connectors must support current schema and prior minor.
Migration tool: eros migrate --from v1.1 --to v1.2 rewrites packs (no surface
text).
Changelogs: non-breaking: new optional fields; breaking: field renames/type
changes.
---
5.15 Performance & Scaling
Window tuning: auto-sized by content density; target low RMS on curve fit.
Parallelism: per-scene in BATCH; per-window in STREAM (bounded).
Memory cap: spill partial nodes; merge streaming to keep constant memory.
---
5.16 Security Posture
No raw text in CI packs.
Hashed references only; no reverse mapping stored.
Signed outputs; pack tamper-evident.
Connector allowlist: manual push only; CI blocks on compat or HIGH.
---
Delivery Manifest — Item 5 (Architecture Overview)
Completed: module graph, dataflow, schemas, automaton, classifiers, Psycho/Occult
handshakes, invariants, security, pack layout, buses for all connectors,
CI/testing, errors, E2E, versioning, performance.
Next queued: 6) Inputs & Outputs (expanded contracts + examples), or jump to 7)
Core Ontology deep spec. Say “6” or “7” to proceed.
—FIXED
6) Inputs & Outputs — EROS / Taboo (Analyze-Only, Explicit-Analysis Enabled)
Locked choices from you:
File types = all listed; Transcript schema = Both → normalize to strict; Image-side
metadata = panel/shot + tags + bbox; Scene size = 32k tokens; Locales = EN+ES;
Profiles/culture = optional; Performer refs in inputs = allowed; artifacts
de-ID/hash; Risk markers = auto-detect; Artifact set = full; Node granularity =
scene + beat + act-clusters; Taxonomy = expanded subtypes; Redaction =
REDACTED_BEAT stubs; Explainability = full path trace; Connector hints = included;
Labels = IDs only; Formats = JSON+MsgPack+Protobuf; Packaging = split + CI bundle;
API = CLI; IDs = engine generates; Hashing = engine-salt; Retention = per-run TTL
flag; PII scrub = custom (artistic names & companies allowed in context summaries);
Golden examples = A, expanded; Tests = A+B+C+D; Editor verbosity = Verbose.
---
6.1 Inputs — Accepted Sources & Contracts
File types (ingest)
.txt, .md, .srt, .vtt, .json (script exports)
.docx (text layer only; styles ignored)
.pdf (text layer only; no images)
Optional: .yaml/.yml config sidecars (profiles, culture packs)
Language
English + Spanish source accepted; mixed text OK; artifacts remain language-
agnostic (IDs).
Max scene size
Up to 32k tokens per run (STREAM windows + merge). Overflows: auto windowing;
caller notified.
Profiles & culture hints
Optional. If absent, engine infers defaults; hints improve motif discipline and
cadence targets.
Performer references (inputs)
Allowed in your source (including artistic stage names). At ingest:
Names are not stored in artifacts; converted to Performer_Archetype +
source_reference.hash (engine-salted).
Public company/studio names (e.g., platforms/labels) may appear in human context
summaries generated outside the pack; never at act-label level.
High-risk detection
Caller hints optional; engine auto-detects (risk_flags) and verifies via Consent
Automaton.
---
6.2 Transcript / Shot / Panel Metadata
Input flexibility → strict normalization (you chose 2C)
Accepts free-form time-stamped blocks or strict shot schemas.
Engine emits strict internal schema:
{
"_schema_version": "[Link].v1",
"scene_id": "auto",
"units": "seconds",
"shots": [
{"shot_id":"SH001","start":0.0,"end":4.8,"speaker":null,"action":"approach","tags":
["crowd","mask"]},
{"shot_id":"SH002","start":4.8,"end":9.1,"speaker":"A","action":"ask","tags":
["confirm"]}
],
"panels": [
{"panel_id":"P001","bbox":[0.12,0.08,0.76,0.84],"tags":["mirror","veil"]}
]
}
Image-side metadata (no images) supports panel/shot lists, tags, and bbox to
improve distance/cadence inference.
---
6.3 Age-Gate & Access Control (you asked for explicit gating)
Adult-only interlock
Every run must carry audience="adult" and an age-assert token (age_assert.v1:
{over18:true, method:"project_policy"}) or engine returns AGE_GATE_REQUIRED and
produces no explicit-analysis fields.
Legacy media (18–20 years ago) connector audit
When a connector advertises catalogs older than ~20 years, EROS asks (once per
project) and enforces responses:
Question set (recorded in [Link]):
1. Source provenance: public, licensed, creator-owned?
2. Age verification regime at time of publication: documented 18+ checks?
3. Will only transcripts/metadata be ingested? (must be yes)
4. Is audience access control enforced upstream (no minors)? (must be yes)
5. Are any performers real-person references required? (must be no for artifacts;
context summaries only)
If any “no”: engine falls back to sanitized structural analysis (no act/BDSM
taxonomies) and emits E_AGE_GATE_POLICY.
---
6.4 PII / Names / Companies — Custom Scrub (22.C)
Artistic names and company/studio names may be used in external human summaries or
dashboards you render.
Inside EROS packs: names → archetypes; a salted hash persists for traceability
(source_reference.hash).
Geo, emails, private IDs are stripped. Dates/venues kept unless you enable
aggressive scrub.
---
6.5 Outputs — Artifact Set (Full)
Engine emits the full pack:
[Link] — scene + beat + act-clusters (non-graphic, analysis-only)
[Link] — tension/trust/power dynamics
[Link] — power shift rate, motif coherence, checkpoint counts
[Link] — symbolic motifs, desire types, culture packs applied
[Link] — state changes, integrity checks, persistence hooks
[Link] — flags with severities + rule IDs
[Link] — structural diffs (may resegment beats)
scene_plan.json — scaffolds + rail-specific hints (no surface text)
[Link] — full path traces (consent state machine, curve fit)
[Link] — schema/lexicon/connector min-versions
Formats: JSON (human diff), MessagePack (compact), Protobuf (strict). Content-
negotiate by suffix.
---
6.6 Node Granularity — Scene, Beat, Act-Clusters
{
"_schema_version": "[Link].v1.2",
"scene": {
"scene_id": "auto-S014",
"profile": "Public_Performance",
"culture_pack": "PostDigital_Parasocial_v2"
},
"beats": [
{
"beat_id":"B004",
"cluster_id":"C1",
"desire_type":"Curiosity",
"initiator_role":"Initiator",
"consent_state":"Sought",
"power_balance":"72/28->70/30",
"distance":"Approach",
"tension_curve":"rise",
"emotional_temperature":"cool->warm",
"trust_gradient":"up",
"symbolic_motifs":["Veil"],
"boundary_conditions":["limits_declared"],
"act_taxonomy":[{"category":"Kissing"}],
"bdsm_taxonomy":[],
"notes":"structural"
}
],
"act_clusters":[
{
"cluster_id":"C1",
"acts":[
{"category":"BDSM","type":"Restraint","restraint_subtype":"rope","protocol":"SSC"},
{"category":"Manual","role_map":"Dominant/Submissive"}
],
"risk_flags":["Impact"],
"consent_checkpoint":"Explicit"
}
]
}
Subtypes on: impact_subtype, restraint_subtype, sensation_subtype included where
applicable (labels only).
---
6.7 Redaction Behavior (policy hits)
Beats violating always-banned policies are replaced with:
{"beat_id":"B009","status":"REDACTED_BEAT","reason":"E_POLICY_ALWAYS_BANNED","rule_
id":"PB-001"}
CNC in fiction → label + repairs-only coaching; escalation scaffolds disabled; path
traces show where the automaton blocked (non-graphic).
---
6.8 Explainability — Full Path Traces
[Link] includes:
{
"rules":[
{
"rule_id":"E_CONSENT_GATE_MISS",
"trace":[
{"beat":"B004","from":"Sought","to":"Explicit","ok":true},
{"beat":"B005","intended_escalation":true,"required_state":"Explicit","actual":"Sou
ght","ok":false}
],
"fix_recipe":[{"op":"insert_confirm","before":"B005"}]
}
],
"curves":{
"tension":{"declared":"SlowBurn","rms_fit":0.08,"crest_index":0.81}
}
}
---
6.9 Scene Plan — Connector Hints (all rails)
Example fragments (non-graphic):
Comics: {"panel_scale":"tight","checkpoint":"B005","motifs":["Veil","Mirror"]}
Film: {"coverage":"two-shot→insert confirm","proxemics":"near","crest_at":"B011"}
Theater: {"blocking":"approach→confirm→repair","beats":
["entrance","pause","aftercare"]}
Literature: {"cadence":
{"paragraphs":6,"short_sentences_near":"B011"},"dialog_turns":{"confirm":"B005"}}
Games: {"nodes":[{"id":"N_confirm","guards":["gate:Explicit"]},{"id":"N_repair"}]}
Olfactory: {"accord":"cool→warm","afterglow":"long","motifs":["Veil","Knot"]}
(All hints are structural; no anatomical wording.)
---
6.10 Packaging & API
Split (dev): files listed in §6.5 under /analysis.
Bundle (CI): [Link] (signed; _sha256 manifest).
API: CLI only (local). Example:
eros analyze --stream [Link] --profile PowerReversal_Noire --locale en,es --ttl
30d
eros audit [Link]
eros coach --resegment B006 --insert_confirm B005 [Link]
eros pack --bundle
---
6.11 Identifiers & Determinism
Engine generates scene_id, beat_id, cluster_id deterministically from content
signatures; caller can supply human labels separately.
Hashes exclude timestamps/paths; include payload only. STREAM == BATCH guarantees
enforced in tests.
---
6.12 Privacy, Retention, TTL
Per-run TTL flag on packs (e.g., --ttl 30d | 0d | legalhold).
No raw source text stored.
source_reference.hash uses engine-salt; salts rotated per project; rotation logged.
---
6.13 Golden Examples (expanded set)
Ship 3 synthetic suites, each with analysis, audit, coach diffs, explain, scene
plan, EN/ES glossaries:
1. SlowBurn_Gothic — approach→confirm→crest→afterglow; triad motifs:
Veil/ThornRose/Mirror.
2. PowerReversal_Noire — role lock→reversal→repair; high-risk enters with reaffirm
checkpoint.
3. Public_Performance — audience pressure motif; confirm and aftercare scaffolds
prominent.
(Each suite includes longer transcripts, panel/shot metadata, and connector hints
for Comics/Film/Games/Lit/Olfactory.)
---
6.14 Validation & Tests (A+B+C+D)
A. STREAM == BATCH artifact identity (hash equality).
B. Locale flip (EN↔ES glossaries) does not change pack hashes.
C. Coach diffs reduce severity from HIGH→WARN/INFO on qualifying errors.
D. KPI thresholds (per scene):
curve.rms_fit ≤ 0.10 (declared cadence)
[Link].checkpoints_passed ≥ 1 if any escalation present
[Link].coherence_score ≥ 0.70 after Occult prune
aftermath.persistence_rate ≥ 0.60 when crest exists
[Link].shift_rate within profile bounds (± tolerance)
---
6.15 Editor (STREAM) Verbosity
Verbose mode on by default: emits INFO, WARN, HIGH during typing:
INFO: motif overflow suggestion, cadence polish
WARN: gate soon required, role whiplash risk
HIGH: illegal escalation attempt, missing aftermath
---
Delivery Manifest — Item 6 (Inputs & Outputs)
Completed: full input contracts (files, locales, size), transcript normalization,
image-side metadata, age-gate & legacy connector audit, custom PII scrub w/
artistic names & companies policy, full artifact set with schemas, redaction,
explainability, connector hints, packaging/API, IDs & determinism, retention/TTL,
expanded golden examples, validations, KPIs, verbose editor behavior.
Next queued: 7) Core Ontology (deep spec) or 8) Explicit-Analysis Field Sets
(schemas). Say “7” or “8” to proceed.
—FIXED
7) Core Ontology — EROS / Taboo (Analyze-Only, Explicit-Analysis Enabled)
Purpose: a compact, deterministic vocabulary to formalize erotic dynamics in
fiction so all downstream rails
(Comics/Film/Theater/Lit/Animation/Games/Events/Oral/Serialized/Culinary/Music/
Visual/Olfactory/Digital) can consume structure without any graphic surface text.
---
7.1 Ontology Goals
Unify desire/consent/power/tension/motif/aftermath as first-class, machine-
checkable objects.
Constrain labels to neutral categories (analysis-only).
Interoperate with Psycho (affect), Occult (archetypes), and all Expression Rails.
---
7.2 Namespaces & Types
Entity IDs: Scene_ID, Beat_ID, Cluster_ID (deterministic).
Value types: enum, ratio ("70/30"), vector ("70/30->58/42"), curve ("low->crest-
>release->afterglow"), flags[] (small, closed sets), triad[] (≤3 motifs).
Locale: IDs only; human glossaries loaded at render time.
---
7.3 Core Entities
Scene: container for beats, curves, indices, aftermath, culture/profile.
Beat (Eros_Node): atomic unit of analysis (non-graphic).
Act_Cluster: optional bundle of act labels + consent checkpoint + risk flags (non-
graphic).
---
7.4 Enums (canonical)
7.4.1 Desire_Type
Longing | Devotion | Forbidden | PowerReversal | Play | RitualUnion | Redemption |
Curiosity | Possession | Surrender
Opposition pairs:
Possession ↔ Surrender
Forbidden ↔ RitualUnion
PowerReversal ↔ Devotion (often transitional)
Signals: verb cues, boundary dialogue, ritual/role tokens, audience pressure tags.
7.4.2 Consent_State (state machine)
Implicit → Sought → Explicit → Adjusted → Reaffirmed | Revoked
Guards:
Any escalation requires Explicit.
After Adjusted, high-risk acts require Reaffirmed.
Revoked forces Distance: Retreat|Aftercare and blocks escalation.
7.4.3 Roles (interaction & meta)
Interaction: Initiator | Responder | Observer | BoundaryKeeper
Power role map (per act): Dominant | Submissive | Switch | Observer
Whiplash guard: min N beats between role flips unless profile PowerReversal_*.
7.4.4 Distance (proxemics)
Far | Approach | Near | Contact | Retreat
Drives cadence, coverage, blocking, panel scale, camera lens, gameplay proximity.
7.4.5 Cadence_Family
SlowBurn | Pulse | Surge | Stutter | Crest | Afterglow
Fitted via RMS to declared family; controls paragraph/shot timing, music sections,
scent diffusion, course pacing, etc.
7.4.6 Emotional_Temperature
cool | warm | hot | warm (typical progression; configurable ceilings per profile)
7.4.7 Trust_Gradient
steady_up | climb_after_repair | oscillate_low | stall | drop_then_repair
7.4.8 Power_Balance
Ratio: "A/B" where A = Initiator power share.
Vector: "pre->post" per beat/scene to capture shift.
7.4.9 Consequence_Vector
Reward | Rupture | Reckoning | Transformation | ReturnToNormal
Required when a crest occurs; persisted via Aftermath hooks.
7.4.10 Symbolic_Motifs (closed core + extensible)
Core set (IDs):
Veil, Mirror, KeyLock, HeatIce, HungerFast, CrownCollar, Knot, ThornRose, Mask,
Stage, ChainLink, MaskGlass, Tide, Threshold, AshEmber, Bridge, Doorway,
ShadowLight, Ring, Script
Cap: ≤3 active motifs per scene (triad).
Occult crosswalk: motif → archetype/ritual form with coherence_score.
7.4.11 Context_Flags (non-graphic)
audience_present, recording, commerce, disguise, blackout, blindfold,
bondage_frame, ritual_space, teacher_student_dynamic (fictional archetype),
rivals_to_lovers_arc, secret_relationship, jealousy_pressure
(Context flags shape coaching/auditing; they do not imply surface description.)
---
7.5 Act_Taxonomy (neutral; analysis-only)
Kissing | Manual | Oral | Penetrative_Vaginal | Penetrative_Anal | Toy | BDSM |
Roleplay | Voyeur | Exhibition | Group | Aftercare
Per-act fields:
role_map, protection (None|Condom|DentalDam|Glove), risk_flags[]
Risk_Flags: Impact | Breath | Edge | Public | Pain | Degradation (labels only)
---
7.6 BDSM_Taxonomy (neutral; analysis-only)
Type: Bondage | Discipline | Dominance | Submission | Sadism | Masochism |
Sensation | Impact | Restraint
Protocol: SSC | RACK
Tools: rope | cuffs | mask | crop | clamps | spreadbar | blindfold (neutral nouns)
Subtypes:
impact_subtype: hand|crop|paddle|flogger
restraint_subtype: rope|cuffs|spreadbar
sensation_subtype: temperature|pressure|texture|sound
Consent_Checkpoint: Sought | Explicit | Adjusted | Reaffirmed
---
7.7 Relationships & Composition
Eros_Node (Beat)
links → Act_Cluster (0..1)
links → Consent_State (1)
links → Power_Balance vector (1)
links → Tension/Trust curve slices (1..n)
holds Symbolic_Motifs triad (≤3)
optional Boundary_Conditions (limits_declared, safeword_acknowledged)
Act_Cluster
aggregates act_taxonomy[], bdsm_taxonomy[], risk_flags[]
pins consent_checkpoint relevant to that cluster
Scene aggregates Beats + Curves + Indices + Aftermath (state deltas + persistence).
---
7.8 Invariants (ontology-level)
I1 Gate-before-escalate: Any act tagged as escalation requires Consent_State:
Explicit (or Reaffirmed after Adjusted for high-risk).
I2 Motif discipline: ≤3 motifs active; coherence ≥ threshold.
I3 Role stability: no flip within lock window unless profile allows PowerReversal.
I4 Aftermath required if a crest is present.
I5 Context guard: audience_present + Public risk ⇒ enforce confirm before crest.
I6 CNC path (fiction): analysis continues; coaching limited to repairs only;
composition escalation off.
---
7.9 Indices & Curves (definitions)
Power_Dynamic_Index: normalized delta of power vector across scene (0–1), weighted
by beat significance.
Shift_Rate: derivative of power vector per beat; flagged if oscillation exceeds
profile tolerance.
Tension_Curve Fit RMS: residual vs declared cadence; target ≤ ε.
Motif_Coherence: Occult crosswalk score (0–1) after triad prune.
Trust_Repair_Count: repairs inserted/needed to climb post-risk.
---
7.10 Cross-Engine Crosswalks
Psycho (affect) → EROS
arousal↑ → allows higher Temperature_Ceiling (still non-graphic)
soothing↑ + Aftercare → aids trust climb
stress↑ + Public → raises risk_flags sensitivity
Occult (symbol discipline) → EROS
motif triad → archetype triad + coherence_score
low coherence → prune_motif or swap suggestions
Expression Rails (examples)
Comics: Distance → panel scale; Crest → splash/tight grid; Checkpoint → caption
marker
Film: Cadence → shot rhythm; Distance → lens/proxemics; Aftermath → scene tail
beats
Games: Consent gates → choice nodes; Risk flags → guard conditions; Repair → safe
nodes
Music: Tension → dynamics/harmony; Motifs → leitmotifs
Olfactory: Afterglow → base accord; HeatIce → temperature contrast diffusion
(All rails receive structure only, never graphic text.)
---
7.11 Extensibility
Custom Motifs:
{"id":"GlassRose","parent":"ThornRose","semantics":
["beauty","fragility"],"max_cooccurs":["Mirror"]}
Custom Context Flags: must register with short description and audit implications.
Lexicon Versioning: [Link].Y, [Link].Y, [Link].Y — semantic, not
stylistic.
---
7.12 JSON Extracts (schemas, condensed)
Beat (Eros_Node)
{
"beat_id":"B007",
"desire_type":"Forbidden",
"initiator_role":"Initiator",
"consent_state":"Sought",
"power_balance":"68/32->64/36",
"distance":"Near",
"tension_curve":"rise",
"emotional_temperature":"warm",
"trust_gradient":"steady_up",
"symbolic_motifs":["Veil","KeyLock"],
"boundary_conditions":["limits_declared"],
"consequence_vector":null,
"act_taxonomy":[{"category":"Kissing"}],
"bdsm_taxonomy":[],
"notes":"structural"
}
Act_Cluster
{
"cluster_id":"C2",
"acts":[
{"category":"BDSM","type":"Restraint","restraint_subtype":"rope","protocol":"SSC"},
{"category":"Manual","role_map":"Dominant/Submissive","protection":"Glove"}
],
"risk_flags":["Impact"],
"consent_checkpoint":"Explicit"
}
---
7.13 Validation Map (rule IDs)
E_CONSENT_GATE_MISS → I1 violation (block=HIGH)
E_RISK_NO_REAFFIRM → high-risk without reaffirm (block=HIGH)
E_MOTIF_OVERFLOW → >3 motifs (WARN)
E_ROLE_WHIPLASH → flip within lock window (WARN/HIGH by delta)
E_AFTERMATH_MISSING → crest without consequence (block=HIGH)
E_CONTEXT_PUBLIC_NO_CONFIRM → audience present w/ escalation but no confirm (HIGH)
Each violation produces a non-graphic fix recipe (Coach ops).
---
7.14 Profiles (ontology impact only)
SlowBurn_Gothic: lower Temperature_Ceiling; motif allowlist {Veil, ThornRose,
Mirror}; long Approach.
PowerReversal_Noire: role locks with scheduled reversal; higher allowed Shift_Rate
near crest.
RitualUnion_Mythic: mandates Transformation aftermath; motif bias {Knot,
CrownCollar, Ring}.
Public_Performance / Edge_Protocol_SSC / Role_Switch_Switchsafe: modify risk
sensitivity, confirm spacing, and lock ranges.
---
7.15 Interop Field Map (connectors)
Common export spine (all rails consume):
beats[*].
{distance,cadence_slice,checkpoint?,motifs,role_map,power_vector,trust_slice} +
curves + aftermath + warnings
No connector may request surface wording from EROS; all adapters translate
structure into rail-native briefs.
---
Delivery Manifest — Item 7 (Core Ontology)
Completed: entities, enums, relationships, invariants, indices, cross-engine
crosswalks, schemas, validators, profiles, interop field map,
extensibility/versioning.
Next queued: 8) Explicit-Analysis Field Sets (schemas & validators) or 9) Consent
Modeling (deep rules)—your call. Say “8” or “9” to proceed.
—FIXED
8) Explicit-Analysis Field Sets — EROS / Taboo (Analyze-Only, Explicit-Analysis
Enabled)
Scope: These schemas label what the scene structurally does (acts, protocols, risk,
consent checkpoints, roles, context) without printing any anatomical/graphic
surface text. Outputs are portable across all rails and cross-engines
(Psycho/Occult).
---
8.1 Act_Taxonomy — Schema (neutral, analysis-only)
Object: Act_Label (attached to a Beat or Act_Cluster)
{
"_schema_version": "[Link].v1.1",
"category": "Kissing | Manual | Oral | Penetrative_Vaginal | Penetrative_Anal |
Toy | BDSM | Roleplay | Voyeur | Exhibition | Group | Aftercare",
"role_map": "Dominant/Submissive | Dominant/Observer | Switch/Switch |
Initiator/Responder | Observer/Observed",
"protection": "None | Condom | DentalDam | Glove | Barrier",
"risk_flags": ["Impact","Breath","Edge","Public","Pain","Degradation"],
"intensity": 0,
"escalation": false,
"consent_checkpoint": "Sought | Explicit | Adjusted | Reaffirmed | null",
"context_flags":
["audience_present","recording","commerce","disguise","ritual_space"],
"notes": "structural (non-graphic)"
}
Normalization rules
intensity: integer 0–5 (non-graphic gradient of stakes/pressure).
escalation: true if intensity increases vs prior beat or category implies higher
stakes.
If category == "BDSM", the beat must also include a BDSM_Label (see §8.2).
If risk_flags contains Public → auto-append context_flags: audience_present.
Allowed co-occurrence
Multiple Act_Labels may exist in one Act_Cluster; validators enforce consent/risk
gating across the cluster (not just single act).
---
8.2 BDSM_Taxonomy — Schema (neutral, analysis-only)
Object: BDSM_Label (0..n per Act_Cluster)
{
"_schema_version": "[Link].v1.1",
"type": "Bondage | Discipline | Dominance | Submission | Sadism | Masochism |
Sensation | Impact | Restraint",
"protocol": "SSC | RACK",
"tools": ["rope","cuffs","mask","crop","clamps","spreadbar","blindfold"],
"impact_subtype": "hand | crop | paddle | flogger | null",
"restraint_subtype": "rope | cuffs | spreadbar | null",
"sensation_subtype": "temperature | pressure | texture | sound | null",
"consent_checkpoint": "Sought | Explicit | Adjusted | Reaffirmed",
"boundary_conditions":
["limits_declared","safeword_acknowledged","timeouts_agreed"],
"risk_flags": ["Impact","Edge","Breath","Pain","Public","Degradation"],
"notes": "structural (non-graphic)"
}
Protocol guards
SSC ⇒ requires boundary_conditions to include limits_declared.
RACK ⇒ requires limits_declared + safeword_acknowledged; consent_checkpoint cannot
remain Sought.
---
8.3 Risk Model — Fields, Score, Severity
Risk flags (labels only):
Impact, Breath, Edge, Public, Pain, Degradation
Composite risk score (0–1):
risk_score = 1 - Π(1 - w(flag)) over unique flags
defaults: w(Impact)=0.25, w(Breath)=0.35, w(Edge)=0.40, w(Public)=0.20,
w(Pain)=0.20, w(Degradation)=0.30
Thresholds: ≥0.60 = HIGH, 0.30–0.59 = WARN, <0.30 = INFO.
Psycho handshake: if affect stress↑ + Public, temporarily raise w(Public) by +0.10.
Validators (risk-gated)
If Breath|Edge present and consent_checkpoint != Reaffirmed after any Adjusted step
⇒ E_RISK_NO_REAFFIRM (HIGH).
If Public + audience_present + escalation: true without consent_checkpoint:
Explicit ⇒ E_CONTEXT_PUBLIC_NO_CONFIRM (HIGH).
---
8.4 Consent Linkage — Gates & Proofs
Gate-before-escalate (I1):
Any Act_Label.escalation == true requires consent_checkpoint: Explicit (or
Reaffirmed if previously Adjusted under high-risk).
Proof artifacts:
[Link] > rules[*].trace: per-beat state machine path with pass/fail booleans.
[Link]: rule ID + severity + suggested Coach ops.
Coach recipes:
insert_confirm@Bxx (adds checkpoint before escalation)
resegment@Bxx (split composite beat to isolate confirm)
lock_roles(range:N) (avoid power whiplash during high-risk segment)
---
8.5 Role & Power Integration (cluster-level)
Cluster roll-up
role_map → consolidated as dominant:share / submissive:share hints to Power_Balance
vector.
Whiplash guard: if roles flip within N beats and profile ≠ PowerReversal_* ⇒
E_ROLE_WHIPLASH (WARN/HIGH by delta).
---
8.6 Intensity & Temperature Coupling (non-graphic)
Intensity scale (0–5):
0=ambient, 1=gesture, 2=engaged, 3=charged, 4=cresting, 5=peak-crest
Coupling rule:
intensity ≥4 demands Aftermath_Report with non-null Consequence_Vector (§7.4.9).
Profile SlowBurn_Gothic caps intensity at 4 unless explicit override in scene_plan.
---
8.7 Context Flags — Schema & Effects
{
"_schema_version":"[Link].v1",
"flags":
["audience_present","recording","commerce","disguise","ritual_space","teacher_stude
nt_dynamic","rivals_to_lovers_arc","secret_relationship","jealousy_pressure"]
}
Effects
audience_present + Public risk ⇒ require checkpoint before crest (validator §8.3).
recording ⇒ mark privacy_pressure for Psycho (affect stress).
ritual_space ⇒ Occult bias to motifs {Veil, Knot, CrownCollar} and raise coherence
target.
---
8.8 Normalization — From Text to Labels (non-graphic mapping)
Verb/gesture cues → map to category + intensity.
Boundary/ask/agree verbs → update consent_checkpoint.
Role tokens (“orders / yields / negotiates”) → role_map hints.
Public/audience words → add context_flags: audience_present and risk_flags: Public.
(Lexicon lists live in [Link].Y and can be extended without changing schema.)
---
8.9 Validators — Rule IDs & Pseudocode
Rule set (selected):
E_CONSENT_GATE_MISS (HIGH) — escalation without prior Explicit.
E_RISK_NO_REAFFIRM (HIGH) — high-risk after Adjusted without Reaffirmed.
E_CONTEXT_PUBLIC_NO_CONFIRM (HIGH) — audience present + escalation without confirm.
E_MOTIF_OVERFLOW (WARN) — >3 motifs active.
E_ROLE_WHIPLASH (WARN/HIGH) — unstable role flips.
E_AFTERMATH_MISSING (HIGH) — crest without consequence.
Pseudocode (non-graphic):
for beat in [Link]:
if [Link] and !has_checkpoint_before(beat, Explicit):
raise HIGH:E_CONSENT_GATE_MISS
if beat.has_high_risk and consent_state.was_adjusted and !checkpoint_at(beat,
Reaffirmed):
raise HIGH:E_RISK_NO_REAFFIRM
if ctx.audience_present and [Link] and !checkpoint_before(beat,
Explicit):
raise HIGH:E_CONTEXT_PUBLIC_NO_CONFIRM
---
8.10 Emission — Where These Fields Live
[Link] > beats[*].act_taxonomy[] — per-beat Act_Labels
[Link] > act_clusters[*] — grouped acts + cluster-level risk_flags &
consent_checkpoint
[Link] — roll-ups by category/protocol for dashboards
scene_plan.json — rail hints derived from labels (no surface text)
[Link] — validator traces; [Link] — suggested repairs
---
8.11 Cross-Rail & Cross-Engine Use
Psycho: intensity/risk → affect targets; inserts repair positions after high-risk
dips.
Occult: context + motifs → archetype coherence; may prune motif overflow.
Comics: cluster crest → panel emphasis; checkpoint → caption marker (non-graphic).
Film: escalation checkpoint → coverage beat; distance → lens/proxemics.
Games: consent_checkpoint → gate node; risk_flags → guard conditions; aftercare →
safe node.
Olfactory: intensity → diffusion curve; afterglow → base accord.
Music: crest/repair → sectional form; motifs → leitmotifs.
---
8.12 Test Vectors (synthetic, non-graphic)
TV-01 SlowBurn confirm path (PASS)
Acts: Kissing (intensity 2, escalation:true) with consent_checkpoint: Explicit
before beat.
Risk: none.
Outcome: no errors; Aftermath: Reward.
TV-02 Public escalation without confirm (FAIL→Coach)
Context: audience_present; Act: Roleplay (intensity 3, escalation:true); no
checkpoint.
Error: E_CONTEXT_PUBLIC_NO_CONFIRM (HIGH).
Coach: insert_confirm@B004; after fix → WARN only.
TV-03 Adjusted→high-risk without reaffirm (FAIL)
Prior Adjusted; Act: BDSM Impact (impact_subtype: crop) with risk_flags: Impact.
Missing Reaffirmed.
Error: E_RISK_NO_REAFFIRM (HIGH); Coach proposes insert_reaffirm@B007.
---
8.13 KPIs for Field Sets
Act coverage ≥ 90% of beats that carry interaction.
Gate compliance 100% on all escalations.
High-risk reaffirm compliance 100% when Adjusted precedes.
Aftercare coverage ≥ 80% when risk_score ≥ 0.60.
Motif coherence ≥ 0.70 (post-Occult prune).
---
Delivery Manifest — Item 8 (Explicit-Analysis Field Sets)
Completed: act & BDSM schemas, risk model/score, consent gates, role/power roll-up,
intensity coupling, context effects, normalization, validators with rule
IDs+pseudocode, emission map, cross-rail/engine usage, test vectors, KPIs.
Next queued: 9) Consent Modeling (deep rules) or 10) Power Dynamics Model (math &
profiles). Say “9” or “10” to proceed.
—FIXED
9) Consent Modeling (Deep Rules) — EROS / Taboo (Analyze-Only, Explicit-Analysis
Enabled)
Contract recap: fictional domain only. Analysis-only. No graphic sexual prose.
Consent is a first-class automaton that gates escalation, shapes repair, and
persists into aftermath. All rails consume structure, never surface wording.
---
9.1 Objectives
Make consent machine-checkable at beat and cluster levels.
Guarantee gate-before-escalate and reaffirm-before-high-risk.
Model revocation/pauses/repairs and require persistent aftermath when crests occur.
Scale to multi-party scenes and public contexts without surface text.
---
9.2 Consent State Machine (CSM)
States:
Implicit → Sought → Explicit → Adjusted → Reaffirmed | Revoked | Paused
Events (non-graphic cues mapped from text):
ask, confirm, clarify, adjust, reaffirm, revoke, pause, resume, timeout, safeword,
boundary_update
Core transitions & guards
Implicit --ask--> Sought
Sought --confirm--> Explicit (must carry evidence token; §9.3)
Explicit --adjust--> Adjusted (scope change; requires evidence; opens high-risk
path only after Reaffirmed)
Adjusted --reaffirm--> Reaffirmed
* --revoke/safeword--> Revoked (hard stop; forces Retreat/Aftercare)
* --pause/timeout--> Paused (no escalation until resume or reaffirm)
Paused --resume--> previous_state (recheck risk; if high-risk pending, require
Reaffirmed)
Reaffirmed behaves as Explicit plus high-risk allowance.
Scopes: scene | act_cluster | beat_window(N) (default act_cluster).
---
9.3 Checkpoint Objects (evidence of consent)
Schema (non-graphic):
{
"_schema_version": "[Link].v1",
"checkpoint_id": "CP-B005",
"kind": "Explicit | Adjusted | Reaffirmed",
"scope": "act_cluster",
"evidence": "spoken_confirm | written_confirm | ritual_confirm |
gesture_confirm",
"confidence": 0.0,
"timestamp": 123.45,
"expires_after_beats": 6,
"notes": "structural"
}
Evidence kinds are mapped from neutral cues (dialogue tokens, contract markers,
stage directions).
Confidence (0–1) from cue strength; low confidence triggers WARN:
E_CONSENT_AMBIGUOUS.
Expiry limits checkpoint reuse; prevents “one confirm covers all” anti-pattern.
---
9.4 Beat-Level Gating
If a beat (or its Act_Cluster) has escalation:true ⇒ must have a prior Explicit
checkpoint within scope and expiry.
If risk_flags includes {Breath | Edge} after any Adjusted event ⇒ must have
Reaffirmed at or before the beat.
Windowing:
expires_after_beats default = 6 (profile-tunable).
Public context (audience present) reduces window by 2 (min 2).
---
9.5 Cluster-Level Gating
An Act_Cluster may contain multiple acts (labels only). The highest required
checkpoint in the cluster dominates.
Example: Cluster with Manual (intensity 2) + BDSM Impact (risk).
Required: Explicit for escalation + Reaffirmed because Adjusted occurred and Impact
present.
---
9.6 Multi-Party Consent (3+ participants)
Represent a consent matrix over participants P:
{
"matrix": [
{"from":"A","to":"B","state":"Explicit"},
{"from":"A","to":"C","state":"Sought"},
{"from":"B","to":"C","state":"Explicit"}
],
"group_scope": "triangle | dyads",
"mediator": "BoundaryKeeper | null"
}
Rule: No cluster may escalate if any dyad inside its scope lacks the required
checkpoint.
BoundaryKeeper role (if present) may raise pause or require clarify before
progression.
---
9.7 Public/Recorded Contexts
Context flags from §8.7 adjust requirements:
audience_present + escalation:true ⇒ confirm must occur one beat earlier than crest
(E_CONTEXT_PUBLIC_NO_CONFIRM if missing).
recording ⇒ confidence threshold +0.05 for checkpoints (explicitness requirement
rises).
commerce ⇒ require explicit scope (act_cluster not scene) for each escalation.
---
9.8 Revocation, Pause, Timeout
Revoked (includes safeword):
Immediate block on escalation; enforce Distance: Retreat | Aftercare.
Insert Repair plan or terminate scene; log E_REVOKE_IGNORED (HIGH) if any
subsequent escalation detected.
Paused/Timeout:
Freeze escalations; on resume, either:
return to prior state if no risk; or
demand Reaffirmed if high-risk pending or Adjusted occurred pre-pause.
---
9.9 Repairs & Aftercare (structural)
When trust dips or revocation/near-miss occurs:
Insert Repair beats: check_in, apology, boundary_restate, care_action (labels
only).
Require Aftercare presence if risk_score ≥ 0.60 or intensity ≥ 4.
Aftercare raises trust_gradient and unlocks future Sought/Explicit paths in later
scenes.
---
9.10 Fictional CNC Handling (analysis-only path)
If caller marks profile: CNC_flagged (fiction):
Composition modules remain disabled for escalation.
Analysis proceeds; validator emits repairs-only coaching: de-escalation, check-ins,
boundary clarity, aftermath necessity.
High-risk labels remain labels; no surface text allowed.
KPI targets tighten for Aftercare and Repair count.
---
9.11 Data Embedding in Nodes
Each Eros_Node references consent state before and after:
{
"beat_id":"B011",
"consent": {
"pre":"Sought",
"post":"Explicit",
"checkpoint_ref":"CP-B010",
"scope":"act_cluster",
"confidence":0.86
}
}
Clusters annotate their own checkpoint if they require a higher tier than
surrounding beats.
---
9.12 Algorithms (detection, normalization)
A) Checkpoint detection (condensed pseudocode)
for block in transcript:
cues = detect_confirm_cues(block) # neutral patterns
if cues:
cp = build_checkpoint(cues)
attach(cp, nearest_future_escalation_scope())
B) Gate enforcement
for beat in [Link]:
if [Link]:
cp = find_prior_checkpoint([Link], [Link], within=expiry)
require([Link] in {Explicit, Reaffirmed})
if beat.has_high_risk and scene.was_adjusted:
require([Link] == Reaffirmed)
C) Matrix enforcement (multi-party)
for dyad in scope_dyads(cluster):
require(matrix[dyad].state >= required_state(cluster))
---
9.13 Validators (rule IDs, adds to §8.9)
E_CONSENT_GATE_MISS (HIGH) — escalation without valid Explicit.
E_RISK_NO_REAFFIRM (HIGH) — high-risk after Adjusted without Reaffirmed.
E_CONTEXT_PUBLIC_NO_CONFIRM (HIGH) — public escalation missing prior confirm.
E_CONSENT_SCOPE_EXPIRED (WARN/HIGH) — checkpoint exists but expired.
E_CONSENT_AMBIGUOUS (WARN) — checkpoint confidence < threshold (default 0.70).
E_REVOKE_IGNORED (HIGH) — any act after Revoked.
E_PAUSE_BREACH (HIGH) — escalation during Paused/Timeout.
Each produces Coach recipes:
insert_confirm@Bxx, insert_reaffirm@Bxx, resegment@Bxx, lock_roles(range:N),
insert_repair@Bxx, aftercare_required.
---
9.14 Examples (synthetic, non-graphic)
EX-C1: Standard escalate with confirm (PASS)
{
"beats":[
{"beat_id":"B004","escalation":false,"consent":
{"pre":"Sought","post":"Sought"}},
{"beat_id":"B005","escalation":false,"consent":
{"pre":"Sought","post":"Explicit","checkpoint_ref":"CP-B005"}},
{"beat_id":"B006","escalation":true ,"consent":
{"pre":"Explicit","post":"Explicit"}}
]
}
EX-C2: Adjusted → high-risk without reaffirm (FAIL)
{
"scene":{"was_adjusted":true},
"cluster":{"risk_flags":["Impact"]},
"beats":[
{"beat_id":"B010","consent":
{"pre":"Explicit","post":"Adjusted","checkpoint_ref":"CP-B010"}},
{"beat_id":"B011","escalation":true,"consent":
{"pre":"Adjusted","post":"Adjusted"}}
],
"errors":["E_RISK_NO_REAFFIRM"]
}
EX-C3: Public context confirm distance (FAIL→Coach)
{
"context_flags":["audience_present"],
"beats":[
{"beat_id":"B003","escalation":true,"consent":{"pre":"Sought","post":"Sought"}}
],
"errors":["E_CONTEXT_PUBLIC_NO_CONFIRM"],
"coach":[{"op":"insert_confirm","before":"B003"}]
}
EX-C4: Revocation honored (PASS)
{
"beats":[
{"beat_id":"B007","event":"revoke","consent":{"post":"Revoked"}},
{"beat_id":"B008","distance":"Retreat","act_taxonomy":["Aftercare"]}
]
}
---
9.15 KPIs (Consent Subsystem)
[Link].gate_compliance = 100% (all escalations gated)
[Link].reaffirm_compliance = 100% (when Adjusted + high-risk)
[Link].ambiguous_rate ≤ 5% (low-confidence checkpoints)
[Link].public_confirm_lead ≥ 1 beat
[Link].repair_latency ≤ 2 beats after trust dip or revoke
---
9.16 Profiles & Tunables (per §7.14)
SlowBurn_Gothic: expires_after_beats=8, public lead=2, intensity ceiling=4.
PowerReversal_Noire: allow role flip in scheduled window; keep gate strict.
Public_Performance: public lead=2, confidence threshold=0.75.
CNC_flagged (fiction): composition escalation off, repair/aftercare KPIs stricter.
---
9.17 Cross-Engine & Rail Handshakes
Psycho: dips below trust threshold automatically inject repair hints; aftercare
boosts affect soothing, enabling future Sought.
Occult: motif Veil/KeyLock can lower checkpoint expiry (privacy/threshold
semantics).
Rails:
Comics/Film/Theater: place checkpoint markers one beat before crest; add
repair/aftercare tail.
Games: consent checkpoints become gate nodes; revocation → safe node; repairs →
cooldown systems.
Olfactory/Music: confirm → short cadence hush; aftercare → warm base / resolution
cues.
---
9.18 CLI & Coach Ops (consent)
eros coach --insert_confirm B005 [Link]
eros coach --insert_reaffirm B011 [Link]
eros coach --resegment B006 --lock_roles 3 [Link]
eros audit --rules consent [Link]
---
Delivery Manifest — Item 9 (Consent Modeling)
Completed: states/events, checkpoints schema, gating windows,
cluster/multi-party/public rules, revoke/pause/repair, algorithms, validators+IDs,
synthetic examples, KPIs, profiles, cross-engine/rail handshakes, CLI ops.
Next queued: 10) Power Dynamics Model (math & profiles) or 11)
Tension/Trust/Distance Curves. Say “10” or “11” to proceed.
—FIXED
10) Power Dynamics Model (Math & Profiles) — EROS / Taboo (Analyze-Only, Explicit-
Analysis Enabled)
Contract: fictional domain; analysis-only; no graphic sexual prose. This module
formalizes who holds situational power, how fast it shifts, and whether shifts are
earned by consent and narrative causality. All outputs are structure, consumable by
every rail.
---
10.1 Objectives
Quantify situational power per beat without surface description.
Enforce role stability (no whiplash) unless a profile authorizes reversal.
Provide actionable diffs (locks, checkpoints, decisive beats) when power is mushy
or incoherent.
Interoperate with Consent (§9), Act/BDSM labels (§8), Psycho/Occult, and all
Expression rails.
---
10.2 Core Quantities
10.2.1 Beat Power Share p_i (0..1)
Interpreted as Initiator-side situational power share at beat i.
Stored as ratio "{A}/{B}" in artifacts (e.g., "64/36"). Internally: scalar
p_i∈[0,1] where A=round(100·p_i).
10.2.2 Scene Vector
Beat vector: p_0 → p_1 → … → p_n
Scene pre→post: "A/B -> A'/B'" (= p_0 -> p_n) emitted on Scene and per Beat as
Power_Balance.
10.2.3 Shift Rate & Volatility
Shift rate: Δp_i = p_i − p_{i−1}
Volatility window (w): vol_w = stddev(p_{i-w..i}) (default w=5)
Whiplash: |Δp_i| > θ_flip within lock window (see §10.6)
---
10.3 Feature Mapping → Raw Power (non-graphic)
We compute an unconstrained raw estimate p̂ _i ∈ [0,1] from neutral features:
p̂ _i = σ( w_role·f_role(i)
+ w_consent·f_consent(i)
+ w_context·f_context(i)
+ w_risk·f_risk(i)
+ w_distance·f_distance(i)
+ w_intensity·f_intensity(i)
+ bias )
σ = logistic. Defaults tuned per profile (see §10.7).
Signals (all derived from structures, not surface text):
f_role: from Act_Label.role_map & Beat Initiator/Responder.
(Dominant/Switch/Observer mapped to +/−/0 deltas.)
f_consent: Explicit/Reaffirmed raise Initiator legitimacy (small); Revoked/Pause
drop it.
f_context: audience_present, recording, commerce, disguise modulate pressure
(public pressure usually dampens unilateral power).
f_risk: high-risk flags add responsibility load; can reduce Initiator power unless
a checkpoint precedes.
f_distance: Near/Contact slightly increases whoever leads; Retreat normalizes
toward 0.5.
f_intensity: intensity 0–5; near crest increases differential only if consent gates
satisfied.
Sanity: power ≠ morality; this is situational leverage, not approval.
---
10.4 Smoothing, Locks, & Clamps
A) EMA smoothing
p_i = α·p̂ _i + (1−α)·p_{i−1}
Default α=0.45 (profile-tunable). Prevents jitter that would confuse rails.
B) Role Locks
From Profiles or Coach (lock_roles(range:N)), we apply:
if lock_active and flip_detected:
p_i = clamp_toward(p_{i−1}, ε_lock)
ε_lock set by profile; prevents abrupt flips.
C) Bounds
Always clamp p_i to [min_power, 1−min_power] (default min_power=0.10) to avoid fake
100/0 unless profile says otherwise (Noire may allow 90/10 extremes).
---
10.5 Indices & KPIs (math)
Power_Dynamic_Index (PDI): magnitude of scene shift, weighted by crest proximity.
PDI = |p_n − p_0| · (1 + λ·crest_weight)
with λ=0.3, crest_weight∈[0,1] from curve fit.
Shift_Rate: mean |Δp_i| per beat; flagged if > θ_rate (profile).
Stability_Score: 1 − normalized(vol_w); WARN if < threshold.
Target_Hit: |p_n − p_target| ≤ tolerance when a scene target is set in scene_plan.
---
10.6 Whiplash Guard & Reversal Windows
Whiplash rule: raise E_ROLE_WHIPLASH (WARN|HIGH) when |Δp_i| > θ_flip within lock
window (default 3 beats).
Authorized reversal: profiles can declare a Reversal Window [i_start, i_end];
during this window:
Temporarily raise α (more responsiveness).
Relax θ_flip and pin a confirm checkpoint one beat before the planned crest
(Consent §9).
---
10.7 Profiles (power-specific tunings)
SlowBurn_Gothic
α=0.35, θ_flip=0.18, θ_rate=0.10, min_power=0.15
Long approach; favors incremental shifts.
Coach bias: insert micro-approach beats over sudden flips.
PowerReversal_Noire
α=0.55, θ_flip=0.28, θ_rate=0.18, min_power=0.10
Declares Reversal Window near crest.
Requires checkpoint before reversal and aftercare following crest.
RitualUnion_Mythic
α=0.40, θ_flip=0.16, min_power=0.12
Mandates Consequence_Vector: Transformation.
Penalizes oscillation after crest (stability must rise).
Public_Performance
Public pressure dampens unilateral surges: reduce w_role, increase w_context.
Requires confirm lead (1 beat earlier than crest): enforced by Consent validator.
---
10.8 Multi-Party Extension (3+)
Represent dyadic power for each pair (x,y):
p_i^(x→y) ∈ [0,1]
Build a power matrix P_i of size k×k (k participants).
Group power for participant x: g_i(x) = mean_y p_i^(x→y)
Scene vector uses the dominant dyad affecting the current Act_Cluster; store matrix
snapshot in [Link] when k>2.
Validators
If any dyad flips opposite the declared reversal plan inside lock windows ⇒
E_ROLE_WHIPLASH.
If a dyad shows high-risk escalation without proper checkpoint
(Explicit/Reaffirmed) ⇒ propagate Consent error.
---
10.9 JSON Artifacts (excerpts)
Beat with power & shift
{
"beat_id":"B012",
"power_balance":"64/36->58/42",
"power_shift_rate": 0.06,
"role_map":"Dominant/Submissive",
"consent_state":"Explicit",
"notes":"structural"
}
Scene summary
{
"scene_id":"S021",
"power_vector":"70/30->55/45",
"power_dynamic_index":0.23,
"stability_score":0.78,
"profile":"PowerReversal_Noire",
"targets":{"post":"55/45","tolerance":0.05},
"target_hit": true
}
Multi-party snapshot (k=3)
{
"beat_id":"B009",
"power_matrix":{
"A->B":0.62,"B->A":0.38,
"A->C":0.55,"C->A":0.45,
"B->C":0.41,"C->B":0.59
},
"group_power":{"A":0.585,"B":0.395,"C":0.52}
}
---
10.10 Coach Ops (power fixes; analysis-only)
lock_roles(range:N) — prevent flip spam; N default 3.
insert_decisive@Bxx — add a decisive beat (non-graphic) to achieve target p_n.
retime_crest@Bxx — nudge crest later to honor confirm lead.
smooth_window(w) — widen smoothing to reduce volatility.
set_post_target( A/B ) — aim scene at a specific post ratio; engine validates
feasibility.
Coach recipe example
{
"op":"insert_decisive",
"before":"B014",
"reason":"power drift from target; add decisive confirmation beat",
"expected_delta":"+0.07 toward 60/40"
}
---
10.11 Cross-Engine & Rail Use
Psycho: arousal/stress modulates w_intensity/w_context; aftercare increases
stability_score.
Occult: motifs like CrownCollar/Knot bias p̂ _i modestly but penalize incoherent
overuse (coherence drop).
Comics: high p_i → tighter panel on holder; reversal → page turn / grid break.
Film: p_i → lens/proxemics; reversal → blocking swap; aftercare → longer tail
coverage.
Theater: p_i → stage geography & pause lengths.
Games: p_i drives success thresholds or dialogue authority tokens; reversal opens
alternate node.
Olfactory: rising p_i → accord intensity; afterglow stabilizes base.
Music: Δp_i maps to dynamics/tempo shifts; reversal → modulation.
---
10.12 Validators (power set)
E_ROLE_WHIPLASH (WARN|HIGH) — illegal flip inside lock window.
E_POWER_DRIFT (WARN) — cannot reach declared post target with current plan.
E_POWER_VOLATILE (WARN) — volatility exceeds profile limit.
E_TARGET_CONFLICT (WARN) — consent/public rules make target unreachable (explain
trace cites §9 rule).
Each validator adds Coach ops; all non-graphic.
---
10.13 KPIs (power subsystem)
[Link].shift_rate ≤ profile.θ_rate
[Link].stability_score ≥ 0.70 (scene-level)
[Link].target_hit == true when target declared
whiplash_events == 0 unless profile Reversal window active
---
10.14 Synthetic Examples (non-graphic)
EX-P1 SlowBurn drift fix
{
"profile":"SlowBurn_Gothic",
"power_vector":"60/40->60/40",
"target_post":"55/45",
"errors":["E_POWER_DRIFT"],
"coach":[{"op":"insert_decisive","before":"B011","expected_delta":"-0.06"}]
}
EX-P2 Authorized reversal
{
"profile":"PowerReversal_Noire",
"reversal_window":["B010","B014"],
"beats":[
{"beat_id":"B009","power_balance":"70/30->68/32"},
{"beat_id":"B012","power_balance":"55/45-
>45/55","consent_checkpoint":"Explicit"}
],
"errors":[],
"aftermath":{"consequence_vector":"Reckoning"}
}
EX-P3 Whiplash in public (blocked)
{
"context_flags":["audience_present"],
"beats":[
{"beat_id":"B004","power_balance":"75/25->50/50","escalation":true}
],
"errors":["E_CONTEXT_PUBLIC_NO_CONFIRM","E_ROLE_WHIPLASH"]
}
---
10.15 CLI / API Hooks
eros set-target --post 55/45 [Link]
eros coach --lock_roles 3 [Link]
eros coach --insert_decisive B014 [Link]
eros audit --rules power [Link]
---
Delivery Manifest — Item 10 (Power Dynamics)
Completed: definitions, equations, smoothing/locks, indices, whiplash & reversal
windows, profiles, multi-party math, JSON artifacts, validators, KPIs, examples,
coach ops, rail handshakes.
Next queued: 11) Tension/Trust/Distance Curves (fit & usage) or 12) Motif System
(coherence + occult crosswalk). Say “11” or “12” to proceed.
—FIXED
11) Tension / Trust / Distance Curves (Fit & Usage) — EROS / Taboo (Analyze-Only,
Explicit-Analysis Enabled)
Contract: fictional domain; analysis-only; no graphic sexual prose. This module
defines how arousal pressure (Tension) rises and releases, how relational safety
(Trust) moves, and how proxemics (Distance) cadence the scene. All outputs are
structure consumable by every rail
(Comics/Film/Theater/Lit/Animation/Games/Events/Oral/Serialized/Culinary/Music/
Visual/Olfactory/Digital) and cross-engines (Psycho/Occult).
---
11.1 Objectives
Provide canonical curve families for Tension, Trust, and a discrete Distance chain.
Fit user scenes to families, quantify error, and propose Coach diffs.
Couple curves to Consent (§9) and Power (§10) so crests are earned and aftermath
persists.
Export compact JSON artifacts for downstream rails (no surface text).
---
11.2 Canonical Families
11.2.1 Tension_Curve (continuous, normalized)
Domain: time t∈[0,1], Amplitude: τ(t)∈[0,1]
Families: SlowBurn | Pulse | Surge | Stutter | Crest | Afterglow
SlowBurn: monotone rise → short crest → long afterglow tail.
Pulse: multiple small humps; final crest modest.
Surge: low plateau → rapid rise → high crest → sharp release.
Stutter: jerky micro-rises with small regressions; medium crest.
Crest: single tall peak near t≈0.7–0.9.
Afterglow: decaying tail; must show state change in Aftermath.
Representation: piecewise cubic with control points C = {c0..c5}, or compressed as
breakpoints {rise_at, crest_at, release_at, tail_len}.
11.2.2 Trust_Gradient (continuous or stepwise)
γ(t)∈[0,1] (0 = fragile, 1 = secure)
Modes: steady_up, climb_after_repair, oscillate_low, stall, drop_then_repair
Repair hooks are required when γ dips after risk; see §9.
11.2.3 Distance Chain (discrete Markov)
D = Far → Approach → Near → Contact → Retreat
Dwell times per state (beats) must respect profile—e.g., SlowBurn requires longer
Approach/Near.
Illegal jumps (e.g., Far→Contact) are flagged unless profile grants exception.
---
11.3 Feature Sources (non-graphic → signals)
Per beat, derive neutral features:
Intensity (0–5) and escalation flag (from §8 Act labels).
Consent events: Explicit, Adjusted, Reaffirmed, Revoked, Pause.
Risk flags: Impact|Breath|Edge|Public|Pain|Degradation.
Role/Power hints: role_map, Power_Balance deltas (§10).
Motifs (≤3 triad) from §7; high coherence supports stable climbs.
Context flags: audience_present, recording, commerce, ritual_space.
Psycho affect: arousal/stress/soothing (from Psycho engine).
Mapping intuition (no surface text):
Higher Intensity (+consent gates satisfied) → τ↑.
High risk without reaffirm → cap τ and demand repair.
Aftercare beats lift γ and soften tail of τ.
Public/recording dampen unilateral surges; raise confirm lead time.
---
11.4 Fitting Algorithm (Tension)
Inputs: beatwise features, declared family (optional).
Outputs: curve parameters, RMS error, crest index, tail metrics.
Steps (condensed):
1. Build raw tension seeds from features:
τ̂_i = a1·intensity_i + a2·escalation_i + a3·risk_gate_bonus_i + a4·power_delta_i +
bias
Clamp [0,1]; zero bonus if consent gate missing.
2. Smooth with EMA: τ_i = β·τ̂_i + (1−β)·τ_{i−1} (profile β).
3. Detect crest: local max with prominence ≥ θ_prom.
4. DTW/Template fit: choose best family; compute RMS_family.
5. Enforce constraints:
If crest amplitude ≥ θ_crest ⇒ Aftermath required.
If public context ⇒ shift confirm ≥1 beat before crest.
6. Emit [Link] + errors[] + [Link][].
Error: E_CURVE_MISMATCH (WARN) if RMS_family > ε.
Coach: retime_rise, insert_micro_approach, smooth_pulses, extend_afterglow.
---
11.5 Fitting Algorithm (Trust)
Seeds:
γ̂_i = g1·(checkpoint_strength_i) + g2·aftercare_i + g3·repair_i
− h1·risk_unrepaired_i − h2·public_pressure_i − h3·power_breach_i
EMA smooth; clamp [0,1].
Rules:
If risk triggered and no Repair within ≤2 beats ⇒ E_TRUST_NO_REPAIR (HIGH).
If consent Revoked ⇒ drop to low γ, enforce Retreat/Aftercare; block escalation.
Coupling to Tension:
If γ < γ_min near crest, cap τ to τ_cap_low and emit insert_repair before crest.
---
11.6 Distance Model (cadence & legality)
Transitions (legal by default):
Far→Approach→Near→Contact→Retreat
Near→Approach (de-escalation)
Contact→Near (cooldown)
Illegal (flag unless profile):
Far→Contact (E_DISTANCE_JUMP)
Multiple oscillations Near↔Contact within lock window (E_DISTANCE_RUSH)
Dwell KPIs: minimum beats per state by profile.
Coupling: escalation allowed only at Near|Contact and only with valid checkpoint
(§9).
---
11.7 Coupling the Three Tracks
Consent gate controls Tension climb; failure reduces τ and raises coach ops.
Power flips near crest must be authorized by profile Reversal Window; otherwise
tension crest is nudged or split.
Trust dips require Repair; until repaired, Tension ceiling is lowered and Distance
should not advance.
Composite validator:
E_CREST_WITH_LOW_TRUST (HIGH) when τ crest occurs with γ < γ_min.
E_TAIL_NO_STATECHANGE (HIGH) when Afterglow lacks Consequence_Vector.
---
11.8 Profiles (curve tunings)
SlowBurn_Gothic
β=0.30, θ_prom=0.20, min dwell: Approach≥3, Near≥3.
Cap τ growth without Explicit checkpoint; longer Afterglow mandated.
PowerReversal_Noire
β=0.55, DTW favor = Surge|Crest.
Reversal Window declared; require confirm before window; Aftercare required after
crest.
RitualUnion_Mythic
Favor SlowBurn→Crest→Long Afterglow.
Transformation consequence required; Trust must end ≥0.8.
Public_Performance
Damp τ by −0.1 unless checkpoint lead observed; min Approach≥2 before any crest.
Raise γ confidence threshold for checkpoints.
Serialized_Arc
Per-episode crest density ≤ target; rolling Trust floor cannot degrade across
episodes unless flagged Rupture arc.
---
11.9 JSON Artifacts
[Link]
{
"scene_id":"S033",
"family":"SlowBurn",
"tension":{"breakpoints":
{"rise_at":0.22,"crest_at":0.78,"release_at":0.86,"tail_len":0.14},
"rms_error":0.07,"crest_amp":0.92},
"trust":{"mode":"climb_after_repair","start":0.42,"end":0.83,"repairs":
[{"at":"B012"}]},
"distance":{"sequence":["Far","Approach","Approach","Near","Contact","Retreat"],
"dwell":{"Far":1,"Approach":2,"Near":2,"Contact":1,"Retreat":1}}
}
beats augmentation ([Link] excerpt)
{
"beat_id":"B010",
"tension":0.64,
"trust":0.58,
"distance":"Near",
"consent_state":"Explicit",
"power_balance":"62/38->60/40"
}
[Link] (validators)
{
"errors":[
{"id":"E_TRUST_NO_REPAIR","at":"B011","severity":"HIGH"},
{"id":"E_DISTANCE_RUSH","window":["B008","B012"],"severity":"WARN"}
],
"coach":[
{"op":"insert_repair","before":"B011"},
{"op":"insert_micro_approach","before":"B009"}
]
}
---
11.10 Validators (additions)
E_CURVE_MISMATCH (WARN) — DTW fit exceeds ε.
E_CREST_WITH_LOW_TRUST (HIGH) — crest while trust below floor.
E_TAIL_NO_STATECHANGE (HIGH) — crest but missing Consequence_Vector.
E_DISTANCE_JUMP (HIGH) — illegal proxemic leap.
E_DISTANCE_RUSH (WARN) — insufficient dwell before crest.
E_CADENCE_DRIFT (WARN) — declared family ≠ fitted family with large error.
Each yields Coach ops (non-graphic): retime_rise, extend_afterglow, insert_repair,
smooth_pulses, add_confirm_lead, pad_approach.
---
11.11 KPIs
curve.rms_error_vs_declared_cadence ≤ ε
trust.repair_latency ≤ 2 beats after dip/revoke
distance.min_dwell_met == true per profile
aftermath.persistence_rate ≥ target post crest
crest_density_per_episode ≤ plan
---
11.12 Cross-Engine / Rail Handshakes
Psycho: arousal modulates τ gain; soothing boosts Afterglow tail; stress raises
confirm lead.
Occult: motif coherence > threshold stabilizes τ; motif overflow increases
E_CURVE_MISMATCH risk (recommend prune).
Rails:
Comics: rise_at/crest_at → page turns, grid density; Afterglow → decompression
panels.
Film: map τ to shot length & dynamics; Distance → lens/proxemics; Trust dips →
reaction inserts.
Theater: Distance → stage geography; crest_at → pause/breath marks.
Games: trust gates → unlock node weights; distance states → interaction range
mechanics.
Music: τ drives dynamics/tempo; Afterglow → cadence resolution.
Olfactory: τ → diffusion amplitude; Afterglow → base accord length.
---
11.13 Coach Ops (CLI/API)
eros coach --retime_rise S033 --delta 1
eros coach --insert_micro_approach B009
eros coach --extend_afterglow S033 --tail 0.08
eros coach --insert_repair B011
eros coach --pad_approach S033 --beats 2
eros audit --rules curves [Link]
---
11.14 Synthetic Examples (non-graphic)
EX-T1 SlowBurn (PASS)
{
"family_declared":"SlowBurn",
"fit":{"family":"SlowBurn","rms_error":0.05,"crest_at":0.81},
"trust":{"mode":"steady_up","end":0.82},
"distance":{"sequence":["Far","Approach","Approach","Near","Contact","Retreat"]},
"errors":[]
}
EX-T2 Public surge without confirm lead (FAIL→Coach)
{
"context":["audience_present"],
"fit":{"family":"Surge","crest_at":0.63},
"errors":["E_CONTEXT_PUBLIC_NO_CONFIRM","E_DISTANCE_RUSH"],
"coach":[{"op":"add_confirm_lead","before":"B012"},
{"op":"pad_approach","beats":2}]
}
EX-T3 Trust dip at crest (FAIL→Coach)
{
"fit":{"family":"Crest","crest_amp":0.90},
"trust":{"mode":"oscillate_low","min":0.38},
"errors":["E_CREST_WITH_LOW_TRUST","E_TRUST_NO_REPAIR"],
"coach":[{"op":"insert_repair","before":"B014"},{"op":"retime_rise","delta":1}]
}
EX-T4 Illegal distance jump (FAIL)
{
"distance":{"sequence":["Far","Contact"]},
"errors":["E_DISTANCE_JUMP"]
}
---
Delivery Manifest — Item 11 (Tension/Trust/Distance)
Completed: families, parameterization, fitting steps, coupling rules, distance
chain, validators, JSON artifacts, KPIs, profiles, handshakes, coach ops, synthetic
examples.
Next queued: 12) Motif System (coherence + occult crosswalk) or 13) Aftermath &
State (persistence rules). Say “12” or “13” to proceed.
—FIXED
12) Motif System (Coherence + Occult Crosswalk) — EROS / Taboo (Analyze-Only,
Explicit-Analysis Enabled)
Contract: fictional domain; analysis-only; no graphic sexual prose. This module
assigns symbolic motifs to beats and scenes, limits motif load for clarity, scores
coherence, and handshakes with the Occult Engine to align motifs with
archetypes/ritual forms. Outputs are structural tags that any rail can render
without surface text.
---
12.1 Objectives
Give each scene ≤3 active motifs that actually do work (progress, reversal,
consequence).
Compute a coherence score that rewards restraint, recurrence, and thematic
alignment (Desire_Type, Consent path, Power arc).
Use an Occult crosswalk to anchor motifs in archetypes/ritual forms, returning a
consistency report & pruning hints.
Provide lifecycle markers (seed → echo → escalation → crest-sigil → release →
aftermath-token) for rails.
---
12.2 Motif Lexicon (core set; extensible)
Veil (conceal/reveal; privacy, secrecy, mystique)
Mirror (self-regard, performance, watcher/watched)
KeyLock (threshold, permission, choice)
Knot (binding, pact, commitment)
CrownCollar (status, fealty, custody, elevation/subordination)
HeatIce (opposites, shock, tempering)
ThornRose (pain/pleasure adjacency, beauty with hazard)
HungerFast (deprivation/feast cycles; restraint → release)
Mask (persona, anonymity, stage)
Labyrinth (confusion → center → return)
ChaliceBlade (union of complements; joining/edge)
DoorThreshold (limen, entry rites; “before/after”)
KissSeal (oath-mark, pact-closure; non-graphic “seal” concept)
(You may extend via [Link]; crosswalk will attempt mapping or mark as
“unmapped”.)
---
12.3 Schema — Symbolic Motif Tags
A) Beat-level tag (Motif_Tag)
{
"_schema_version":"[Link].v1",
"beat_id":"B014",
"motif":"KeyLock",
"phase":"echo | escalation | crest_sigil | release | aftermath_token | seed",
"strength":0.0,
"alignment":{
"desire_type":["Forbidden","PowerReversal"],
"consent_affinity":"+gate",
"power_affinity":"+reversal",
"risk_affinity":"public | edge | none"
},
"notes":"structural (non-graphic)"
}
B) Scene-level triad (Motif_Triad)
{
"scene_id":"S033",
"active":["Veil","KeyLock","Mirror"],
"dominant":"KeyLock",
"distribution":{"Veil":0.28,"KeyLock":0.46,"Mirror":0.26},
"lifecycle":{
"seed":["B004"],
"echo":["B007","B010"],
"crest_sigil":"B014",
"release":"B016",
"aftermath_token":"B018"
}
}
---
12.4 Occult Crosswalk (archetypes & ritual forms)
Handshake: motifs → Occult Engine → returns archetype, ritual_form,
coherence_weight, overlap_warnings.
Examples
{
"motif":"Veil",
"archetype":"Mystery/Hidden Self",
"ritual_form":"Unveiling Rite",
"coherence_weight":0.22,
"conflicts_with":["Mirror (overexposure paradox if co-dominant)"]
}
{
"motif":"KeyLock",
"archetype":"Threshold/Guardian",
"ritual_form":"Oath & Passage",
"coherence_weight":0.30
}
{
"motif":"Knot",
"archetype":"Bond/Pact",
"ritual_form":"Binding/Handfast",
"coherence_weight":0.26
}
(Weights sum to ≤1 across a scene; used in coherence formula.)
---
12.5 Coherence Score (scene-level)
Inputs: motif distribution, lifecycle coverage, crosswalk weights, alignment with
Desire/Consent/Power profiles, and overload penalties.
Formula (0..1):
coh = w_dist·H + w_life·L + w_align·A + w_occ·O − w_over·P − w_collide·C
H (distribution harmony): entropy penalty; best with 1–2 leaders, ≤3 active.
L (lifecycle completeness): seed→echo→crest_sigil→release→aftermath_token coverage
(0..1).
A (alignment): match with Desire_Type, Consent path (e.g., KeyLock ↔ consent
gates), Power plan (e.g., CrownCollar ↔ status arcs).
O (occult weight): sum crosswalk coherence_weight for used motifs.
P (overload): penalty for |active|>3 plus per-beat flood.
C (collision): penalty for motif pairs flagged as conflicting when co-dominant
(e.g., Veil+Mirror both dominant).
Defaults: w_dist=.20, w_life=.25, w_align=.20, w_occ=.20, w_over=.10,
w_collide=.05.
Targets: coh ≥ .70 pass; .55–.69 improve; <.55 prune/reshape.
---
12.6 Alignment Heuristics (non-graphic)
Consent:
KeyLock → boosts alignment when checkpoints appear before escalation (§9).
Veil → prefers public avoidance or masked context; if audience present and no
confirm lead, alignment drops.
Knot → demands Aftermath with persistent bond delta.
Power:
CrownCollar correlates with stable dominance or conscious transfer (authorized
reversal window §10).
Mirror supports observer dynamics or performance loops (parasocial/public).
Desire_Type:
Forbidden → Veil/KeyLock/ThornRose weight up.
PowerReversal → CrownCollar/KeyLock/HeatIce weight up.
RitualUnion → Knot/ChaliceBlade/DoorThreshold weight up.
---
12.7 Lifecycle Grammar (rails use these)
seed — first appearance; foreshadow.
echo — refrains; small reinforcement.
escalation — motif participates in rising pressure.
crest_sigil — the moment of symbolic consummation (non-graphic sign).
release — decompression.
aftermath_token — persistent change marker (ring, ribbon, mirrored object returned,
etc., labeled structurally).
Validators
E_MOTIF_INERT (WARN) — motif lacks escalation+crest usage.
E_MOTIF_TAIL_MISSING (WARN) — crest without aftermath_token when motif implies
bond/rite.
---
12.8 Validators (motif set)
E_MOTIF_OVERFLOW (WARN) — >3 active motifs in scene.
E_MOTIF_COLLISION (WARN/HIGH) — conflicting motifs both dominant.
E_MOTIF_DRIFT (WARN) — dominant motif switches more than once without profile
justification.
E_MOTIF_INERT (WARN) — motif never progresses beyond seed/echo.
E_MOTIF_TAIL_MISSING (WARN) — missing aftermath token for binding/rite motifs
(Knot, CrownCollar, ChaliceBlade).
Coach ops
prune_to_triad, promote_motif(dom=...), reassign_phase(beat), add_aftermath_token,
swap_conflict(A,B).
---
12.9 JSON Artifacts
[Link] (scene)
{
"scene_id":"S040",
"triad":{"active":["Veil","KeyLock","Knot"],"dominant":"KeyLock"},
"coherence":0.78,
"lifecycle":{
"Veil":{"seed":"B003","echo":["B007"],"crest_sigil":"B014"},
"KeyLock":{"seed":"B005","escalation":
["B010","B012"],"crest_sigil":"B015","release":"B016"},
"Knot":{"seed":"B006","aftermath_token":"B018"}
},
"errors":[]
}
[Link]
{
"scene_id":"S040",
"crosswalk":[
{"motif":"KeyLock","archetype":"Threshold/Guardian","ritual_form":"Oath &
Passage","coherence_weight":0.30},
{"motif":"Veil","archetype":"Mystery/Hidden Self","ritual_form":"Unveiling
Rite","coherence_weight":0.22},
{"motif":"Knot","archetype":"Bond/Pact","ritual_form":"Binding/Handfast","coherence
_weight":0.26}
],
"warnings":[]
}
[Link] (example)
[
{"op":"prune_to_triad","reason":"E_MOTIF_OVERFLOW"},
{"op":"add_aftermath_token","motif":"Knot","at":"B018"}
]
---
12.10 Profiles (motif discipline)
SlowBurn_Gothic
Max motifs: 2–3; recommend Veil + ThornRose or Veil + KeyLock.
Lifecycle must include echo phases before crest; long aftermath_token.
PowerReversal_Noire
Emphasize Mirror (performance) + KeyLock (consent gate) + optional CrownCollar.
Collision risk between Veil and Mirror if both dominant → profile raises C penalty.
RitualUnion_Mythic
Knot + ChaliceBlade as pair; mandates Transformation consequence (§13).
Aftermath token required (binding mark, structural label).
Public_Performance / Parasocial
Mask + Mirror + KeyLock common; confirm lead must precede crest; public context
dampens motif flood.
---
12.11 Cross-Engine / Rail Handshakes
Occult: returns archetypes/ritual forms; supplies coherence_weight, collision
hints, and rite expectations (e.g., Unveiling demands staged reveal before crest).
Psycho: stable motifs reduce volatility in Power (§10); excessive motifs raise
stress affect → prompt Coach prune.
Comics: crest_sigil → splash or grid break; aftermath_token → emblematic panel.
Film: motif phases map to props/costume/light beats; Veil → lighting reveal;
KeyLock → threshold shots.
Theater: motif → blocking marks (doorway, mask on/off), pause cadence.
Games: motif tokens become state flags; keys/doors/knots as gating mechanics (non-
graphic).
Music: assign leitmotifs per symbol; HeatIce → harmonic contrast; Knot →
pedal/binding drone.
Olfactory: Veil → soft top-note veil; HeatIce → temperature contrast accords;
Aftermath_token → base-note signature.
---
12.12 Synthetic Examples (non-graphic)
EX-M1: Clean triad, high coherence (PASS)
{
"active":["Veil","KeyLock","Knot"],
"dominant":"KeyLock",
"coherence":0.82,
"alignment":{"desire_type":
["Forbidden","RitualUnion"],"consent_affinity":"+gate"},
"errors":[]
}
EX-M2: Collision + overflow (FAIL→Coach)
{
"active":["Veil","Mirror","KeyLock","HeatIce"],
"dominant":"Veil",
"coherence":0.48,
"errors":["E_MOTIF_OVERFLOW","E_MOTIF_COLLISION"],
"coach":[
{"op":"prune_to_triad","keep":["Veil","KeyLock","HeatIce"]},
{"op":"swap_conflict","demote":"Mirror"}
]
}
EX-M3: Inert motif (WARN)
{
"active":["CrownCollar","KeyLock","Mirror"],
"lifecycle":{"CrownCollar":{"seed":"B004"}},
"errors":["E_MOTIF_INERT"],
"coach":
[{"op":"reassign_phase","motif":"CrownCollar","phase":"escalation","at":"B010"}]
}
EX-M4: Rite without token (WARN)
{
"active":["Knot","ChaliceBlade"],
"lifecycle":{"Knot":{"seed":"B006","crest_sigil":"B014"}},
"errors":["E_MOTIF_TAIL_MISSING"],
"coach":[{"op":"add_aftermath_token","motif":"Knot","at":"B017"}]
}
---
12.13 KPIs (motif subsystem)
[Link].coherence_score ≥ 0.70
motif_overflow_rate = 0 (scenes with >3 motifs)
inert_motif_rate ≤ 10%
binding_rite_token_coverage ≥ 90% (for Knot/CrownCollar/ChaliceBlade)
collision_events ≤ 5% (unless profile allows)
---
12.14 CLI / API (motifs)
eros motifs --prune_to_triad S040 --keep Veil KeyLock Knot
eros motifs --promote KeyLock --demote Mirror S040
eros motifs --add_token Knot B018 S040
eros audit --rules motifs [Link]
---
Delivery Manifest — Item 12 (Motif System)
Completed: lexicon, schemas (beat & scene), occult crosswalk, coherence formula,
lifecycle grammar, validators & coach ops, profiles, cross-engine/rail handshakes,
JSON artifacts, KPIs, synthetic examples, CLI.
Next queued: 13) Aftermath & State (persistence rules) or 14) Data Models
(complete; nodes/scene/season schemas). Say “13” or “14” to proceed.
—FIXED
13) Aftermath & State (Persistence Rules) — EROS / Taboo (Analyze-Only, Explicit-
Analysis Enabled)
Contract: fictional domain; analysis-only; no graphic sexual prose. This module
defines what changes must persist after a scene, how long they persist, and how
they roll up across chapters/episodes/seasons. Outputs are structural (JSON
artifacts + coach diffs) consumable by all rails and engines.
---
13.1 Objectives
Convert each scene’s crest + resolution into a Relationship_State Δ that must
persist.
Enforce consent continuity, trust repair, and consequence durability across time.
Provide decay/cooldown mechanics (with profile tunings) so changes neither vanish
nor lock the story unfairly.
Aggregate scene → episode → season without surface prose.
---
13.2 Terms
Aftermath: the immediate post-scene structural results (trust change, power
redistribution, boundaries updated, tokens placed, etc.).
State: the Relationship_State vector carried forward to the next scene/episode.
Persistence: rules controlling how ΔState survives time, scenes, or arcs (with
decay, reinforcement, or reversal preconditions).
---
13.3 Relationship_State Vector (scene/episode granularity)
{
"_schema_version":"[Link].v1",
"scene_id":"Snnn",
"relationship_state": {
"power_balance": "A/B", // situational baseline until next major
crest
"trust_level": 0.0, // [0..1] scene-out value
"desire_profile": ["Forbidden","Play"],// active Desire_Types (≤2 primary)
"role_baseline": "Initiator/Responder | Switch",
"boundaries": {
"limits_declared": ["hard:X","soft:Y"],
"safeword_acknowledged": true,
"protocol":"SSC | RACK"
},
"status_flags": {
"bonded": false,
"estranged": false,
"public_exposure": false, // audience/recording outcomes
"commerce_tie": false // parasocial/contractual tie
},
"tokens": [
{"motif":"Knot","kind":"binding","id":"TK-019"},
{"motif":"Mirror","kind":"keepsake","id":"TK-020"}
],
"consequence_vector":"Reward | Rupture | Reckoning | Transformation |
ReturnToNormal",
"notes":"structural, non-graphic"
}
}
Where it comes from: Consent (§9), Power (§10), Curves (§11), Motifs (§12) +
profile context.
---
13.4 Consequence Classes (must pick one)
Reward — trust ↑, stability ↑, minor power drift aligned with plan.
Rupture — trust ↓, creates Repair debt for later scenes.
Reckoning — consequence triggers obligation (apology, boundary restate, pause on
escalation) before the next crest.
Transformation — durable redefinition (role_baseline flip, bonded=true, Desire_Type
shift). Demands persistence across multiple scenes.
ReturnToNormal — small/no Δ; allowed only when crest_amp was low and validators
pass.
Validator: E_CONSEQUENCE_ABSENT (HIGH) if a crest occurred (amp ≥ threshold)
without consequence class.
---
13.5 Persistence Mechanics
13.5.1 Durability tiers
Transient (Reward minor, debrief done): default half-life = 2 scenes.
Stable (Reckoning resolved, visible tokens): half-life = 4–6 scenes.
Durable (Transformation, bonded): half-life = season unless explicitly undone by a
Reversal Arc with coach-approved plan.
> Half-life = scenes until Δ magnitude halves if no reinforcing events occur.
13.5.2 Reinforcement / Undo
Reinforce: aftercare, reaffirmed consent, motif aftermath_token, or public
acknowledgement → extend half-life by +1 scene each.
Undo (allowed only with plan): requires counter-crest + explicit Debrief +
validator pass. Fails → E_STATE_RETCON (HIGH).
13.5.3 Cooldowns
After Rupture or Reckoning, a cooldown window prevents escalation until one of:
repair, apology, boundary_restate, care_action. Missing → E_COOLDOWN_BREACH.
---
13.6 Integrity Checks (scene → next scene)
Consent_Continuity: new escalation must cite prior Explicit/Reaffirmed (or new
confirm) within window (§9).
Cause-Effect Chain: the chosen consequence must rationally follow from curve +
labels (E_CAUSE_EFFECT_WEAK).
Token Consistency: binding motifs (Knot/CrownCollar/ChaliceBlade) require an
aftermath token; missing → E_TOKEN_MISSING.
Public Consistency: if public_exposure=true, later secrecy motifs penalized unless
masked by Veil with plan (E_PUBLIC_LEAK_CONFLICT).
Role Stability: if not in declared reversal arc, prevent oscillating role_baseline
(E_ROLE_BASELINE_DRIFT).
---
13.7 Episode / Season Aggregation
Episode roll-up
{
"episode_id":"E05",
"state_out":{
"trust_level":0.76,
"power_balance":"56/44",
"role_baseline":"Switch",
"status_flags":{"bonded":true,"public_exposure":true},
"tokens":["TK-019","TK-020"],
"arc_label":"Build→Payoff",
"repair_debt":0
}
}
Season ledger
{
"season_id":"SE01",
"states":[ ... per-episode ... ],
"floors": {"trust_min":0.40},
"caps": {"crest_density_per_episode":1},
"arc":"Convergence→Rupture→Reunion",
"compliance":{"episodes_ok":9,"episodes_warn":2,"episodes_fail":1}
}
Rules
Floor: trust may not drop below floor repeatedly without marking a Rupture Arc.
Density cap: limit crests per episode; exceeding → E_CREST_DENSITY.
Durable shifts (Transformation) must be referenced in at least 2 subsequent
episodes (‘echo’ principle).
---
13.8 Multi-Party State (k≥3)
Represent:
Dyadic state for each pair (trust, baseline, boundaries).
Group flags (poly bond, pact tokens, audience entanglement).
Validator examples:
E_GROUP_GATE_MISS — any dyad escalates without required checkpoint.
E_TRIAD_ASYMMETRY — state implies exclusive bond while tokens/flags show otherwise.
---
13.9 Public / Parasocial Threads
If public_exposure or commerce_tie true:
Add Reputation subvector {privacy: 0..1, audience_pressure: 0..1}.
High pressure inflates confirm lead times and reduces allowable reversal jitter.
Conflicts between publicity and secrecy motifs generate coach ops: mask_with_veil,
defer_crest, private_repair_first.
---
13.10 Aftercare & Debrief (structural only)
Aftercare: a labeled cluster (non-graphic) that raises trust, lowers volatility,
and extends durability by +1 scene.
Debrief: dialogue/contract label updating boundaries.limits_declared or protocol.
Required after Rupture/Reckoning.
Missing required items → E_AFTERCARE_MISSING / E_DEBRIEF_MISSING.
---
13.11 JSON Artifacts
[Link]
{
"scene_id":"S044",
"consequence":"Reckoning",
"state_delta":{
"trust_level": { "from":0.58, "to":0.64 },
"power_balance": { "from":"62/38", "to":"58/42" },
"role_baseline": { "from":"Initiator/Responder", "to":"Switch" },
"desire_profile": { "add":["RitualUnion"], "remove":[] }
},
"status_updates":{"public_exposure":true,"bonded":false},
"tokens_added":[{"motif":"Knot","kind":"binding","id":"TK-019"}],
"repairs":[{"type":"boundary_restate","at":"B018"}],
"aftercare":true,
"cooldown_required":true
}
[Link] (next scene prefill)
{
"prefill_from":"S044",
"decay":{"trust_half_life_scenes":4,"power_memory":0.6},
"cooldown":{"active":true,"must_resolve_ops":["repair","debrief"]},
"carry_tokens":["TK-019"]
}
---
13.12 Validators (aftermath/state)
E_CONSEQUENCE_ABSENT (HIGH) — crest without consequence.
E_STATE_NO_DELTA (WARN) — significant crest but negligible ΔState.
E_AFTERCARE_MISSING (HIGH) — high-risk or intense crest without aftercare.
E_DEBRIEF_MISSING (HIGH) — rupture/reckoning without debrief.
E_STATE_RETCON (HIGH) — durable change negated with no counter-crest plan.
E_PUBLIC_LEAK_CONFLICT (WARN) — secrecy motifs after public exposure without veil
plan.
E_TOKEN_MISSING (WARN) — binding motif without aftermath token.
E_COOLDOWN_BREACH (HIGH) — escalation during required cooldown.
Each emits Coach diffs (analysis-only): add_aftercare, insert_debrief,
schedule_counter_crest, mask_with_veil, create_token, extend_cooldown.
---
13.13 Coach Ops (CLI/API)
eros coach --add_aftercare S044
eros coach --insert_debrief S044 --update_limits hard:X
eros coach --schedule_counter_crest S052 --window B010-B014
eros coach --create_token Knot S044 --id TK-019
eros coach --set_decay trust 6
eros audit --rules aftermath [Link]
---
13.14 Profiles (persistence tunings)
SlowBurn_Gothic
Durability bias high; trust_half_life=6.
Requires aftercare on any crest; strong penalty for E_TAIL_NO_STATECHANGE.
PowerReversal_Noire
Allows rapid ΔPower if reversal plan exists; requires Debrief within next scene.
Retcon only via counter-crest + debrief.
RitualUnion_Mythic
Transformation expected; bonded=true + token required.
Decay frozen for 2 scenes post-Transformation.
Public_Performance / Parasocial
Public exposure creates audience_pressure ≥0.5; increases confirm lead & slows
retcons.
Serialized_Arc
Enforces crest density cap; rolling trust floor may not degrade across 3+
consecutive episodes without marking Rupture Arc.
---
13.15 KPIs (aftermath/state)
aftermath.persistence_rate ≥ 0.85 (durable changes survive required scenes)
aftercare_coverage ≥ 0.90 for high-intensity scenes
debrief_latency ≤ 1 scene after rupture/reckoning
retcon_violations = 0
token_consistency ≥ 0.95 (binding motifs match tokens)
---
13.16 Synthetic Examples (non-graphic)
EX-A1 Transformation (PASS)
{
"consequence":"Transformation",
"state_delta":{"role_baseline":{"from":"Responder","to":"Switch"}},
"tokens_added":[{"motif":"Knot","kind":"binding","id":"TK-201"}],
"aftercare":true,
"decay":{"trust_half_life":6},
"validators":[]
}
EX-A2 Rupture without debrief (FAIL→Coach)
{
"consequence":"Rupture",
"aftercare":false,
"errors":["E_AFTERCARE_MISSING","E_DEBRIEF_MISSING"],
"coach":[
{"op":"add_aftercare","at":"tail"},
{"op":"insert_debrief","next_scene":"S061"}
]
}
EX-A3 Retcon attempt (FAIL)
{
"previous":{"bonded":true,"token":"TK-019"},
"current_request":{"bonded":false},
"errors":["E_STATE_RETCON"]
}
---
13.17 Cross-Engine / Rail Handshakes
Psycho: Aftercare toggles soothing, raising trust_level; stress spikes raise
debrief priority.
Occult: Binding rites require tokens; crosswalk supplies rite expectations; missing
tokens → validator.
Comics/Film/Theater: Aftermath tokens → prop/costume/beat markers; debrief → scene
slug suggestions; cooldown → staging cues.
Games: Cooldown becomes locked node; repair/debrief are quests; tokens grant state
flags.
Music/Olfactory: Afterglow tails → sustained harmonic/base accords; debrief →
quieter dynamics; rupture → dissonance cue then repair cadence.
---
Delivery Manifest — Item 13 (Aftermath & State)
Completed: state vector schema, consequence classes, durability/decay, cooldowns,
integrity checks, aggregation (episode/season), multi-party/public rules,
validators, KPIs, artifacts, coach ops, profiles, synthetic examples, cross-
engine/rail hooks.
Next queued: 14) Data Models (complete; nodes/scene/season schemas) or 15)
Determinism Knobs (advanced & profiles). Say “14” or “15” to proceed.
—FIXED
14) Data Models (Complete Schemas + Pack Layout) — EROS / Taboo (Analyze-Only,
Explicit-Analysis Enabled)
Contract: fictional domain; analysis-only; no graphic sexual prose. This module
standardizes every artifact the engine emits/consumes so all other engines/rails
can interoperate cleanly.
---
14.1 Design Goals
Portable: identical across rails
(Comics/Film/Theater/Lit/Animation/Games/Events/Oral/Serialized/Culinary/Music/
Visual/Olfactory/Digital).
Composable: beat→scene→episode→season rollups; zero duplication.
Auditable: validators + coach diffs co-located with payloads.
Stable: semantic versioning; forward-compatible $defs.
Non-graphic: categories/labels/metrics only.
---
14.2 Identity & Naming
Season_ID: SE01 …
Episode_ID: E05 (scoped to season or standalone)
Scene_ID: S033 (unique within episode/season)
Beat_ID: B012 (unique within a scene)
Token_ID: TK-019 (persistent motif token)
Pack ID: PK-<8hex> for each exported .[Link]
Timebase: beats are ordered; optional t_norm ∈ [0,1] for curve alignment.
---
14.3 Type Library (enums; shared)
{
"Desire_Type":
["Longing","Devotion","Forbidden","PowerReversal","Play","RitualUnion","Redemption"
,"Curiosity","Possession","Surrender"],
"Consent_State":
["Implicit","Sought","Explicit","Adjusted","Revoked","Reaffirmed"],
"Role": ["Initiator","Responder","Observer","BoundaryKeeper","Switch"],
"Distance": ["Far","Approach","Near","Contact","Retreat"],
"Cadence": ["SlowBurn","Pulse","Surge","Stutter","Crest","Afterglow"],
"Consequence_Vector":
["Reward","Rupture","Reckoning","Transformation","ReturnToNormal"],
"Act_Category":
["Kissing","Manual","Oral","Penetrative_Vaginal","Penetrative_Anal","Toy","BDSM","R
oleplay","Voyeur","Exhibition","Group","Aftercare"],
"Risk_Flag": ["Impact","Breath","Edge","Public","Pain","Degradation"],
"BDSM_Type":
["Bondage","Discipline","Dominance","Submission","Sadism","Masochism","Sensation","
Impact","Restraint"],
"Protocol": ["SSC","RACK"],
"Motif":
["Veil","Mirror","KeyLock","Knot","CrownCollar","HeatIce","ThornRose","HungerFast",
"Mask","Labyrinth","ChaliceBlade","DoorThreshold","KissSeal"],
"Motif_Phase":
["seed","echo","escalation","crest_sigil","release","aftermath_token"],
"Severity": ["INFO","WARN","HIGH"],
"Profile":
["SlowBurn_Gothic","PowerReversal_Noire","RitualUnion_Mythic","Public_Performance",
"Serialized_Arc"]
}
---
14.4 Core Schemas
> Note: JSON Schema 2020-12 fragments shown; full $defs in §14.8.
14.4.1 Eros_Node (Beat)
{
"$id": "[Link].v1",
"type": "object",
"required":
["scene_id","beat_id","consent_state","distance","tension","trust","power_balance"]
,
"properties": {
"scene_id": {"type":"string","pattern":"^S\\d{3}$"},
"beat_id": {"type":"string","pattern":"^B\\d{3}$"},
"t_norm": {"type":"number","minimum":0,"maximum":1},
"desire_type":
{"type":"array","items":{"$ref":"#/defs/Desire_Type"},"maxItems":2},
"initiator_role": {"$ref":"#/defs/Role"},
"consent_state": {"$ref":"#/defs/Consent_State"},
"distance": {"$ref":"#/defs/Distance"},
"tension": {"type":"number","minimum":0,"maximum":1},
"trust": {"type":"number","minimum":0,"maximum":1},
"power_balance": {"type":"string","pattern":"^\\d{2}/\\d{2}(->\\d{2}/\\d{2})?
$"},
"act_taxonomy": {
"type":"array",
"items":{
"type":"object",
"required":["category"],
"properties":{
"category":{"$ref":"#/defs/Act_Category"},
"role_map":{"type":"string","enum":["Dominant/Submissive","Submissive/
Dominant","Switch","Observer"]},
"protection":{"type":"string","enum":
["None","Condom","DentalDam","Glove"]},
"risk_flags":{"type":"array","items":{"$ref":"#/defs/Risk_Flag"},"uniqueItems":true
},
"consent_checkpoint":{"$ref":"#/defs/Consent_State"}
}
},
"maxItems":4
},
"bdsm_taxonomy": {
"type":"array",
"items":{
"type":"object",
"properties":{
"type":{"$ref":"#/defs/BDSM_Type"},
"protocol":{"$ref":"#/defs/Protocol"},
"tools":{"type":"array","items":{"type":"string"},"maxItems":4},
"consent_checkpoint":{"$ref":"#/defs/Consent_State"}
}
},
"maxItems":3
},
"symbolic_motifs":{"type":"array","items":{"$ref":"#/defs/Motif"},"maxItems":3},
"notes":{"type":"string","maxLength":240}
},
"defs": {"$refTypes": "see §14.3"}
}
14.4.2 Eros_Scene (Summary)
{
"$id":"[Link].v1",
"type":"object",
"required":["scene_id","profile","family","power_vector","consequence_vector"],
"properties":{
"scene_id":{"type":"string","pattern":"^S\\d{3}$"},
"profile":{"$ref":"#/defs/Profile"},
"family":{"$ref":"#/defs/Cadence"},
"power_vector":{"type":"string","pattern":"^\\d{2}/\\d{2}->\\d{2}/\\d{2}$"},
"consequence_vector":{"$ref":"#/defs/Consequence_Vector"},
"targets":{"type":"object","properties":{
"post":{"type":"string","pattern":"^\\d{2}/\\d{2}$"},
"tolerance":{"type":"number","minimum":0,"maximum":0.5}
}},
"errors":{"type":"array","items":{"$ref":"[Link].v1"}},
"coach":{"type":"array","items":{"$ref":"[Link].v1"}}
}
}
14.4.3 Curves (Fit artifacts)
{
"$id":"[Link].v1",
"type":"object",
"required":["scene_id","family","tension","trust","distance"],
"properties":{
"scene_id":{"type":"string"},
"family":{"$ref":"#/defs/Cadence"},
"tension":{
"type":"object",
"required":["breakpoints","rms_error","crest_amp"],
"properties":{
"breakpoints":{
"type":"object",
"properties":{
"rise_at":{"type":"number","minimum":0,"maximum":1},
"crest_at":{"type":"number","minimum":0,"maximum":1},
"release_at":{"type":"number","minimum":0,"maximum":1},
"tail_len":{"type":"number","minimum":0,"maximum":1}
}
},
"rms_error":{"type":"number","minimum":0},
"crest_amp":{"type":"number","minimum":0,"maximum":1}
}
},
"trust":{"type":"object","properties":{
"mode":{"type":"string","enum":
["steady_up","climb_after_repair","oscillate_low","stall","drop_then_repair"]},
"start":{"type":"number","minimum":0,"maximum":1},
"end":{"type":"number","minimum":0,"maximum":1},
"repairs":{"type":"array","items":{"type":"string","pattern":"^B\\d{3}$"}}
}},
"distance":{"type":"object","properties":{
"sequence":{"type":"array","items":{"$ref":"#/defs/Distance"}},
"dwell":{"type":"object","additionalProperties":
{"type":"integer","minimum":0}}
}}
}
}
14.4.4 Motifs (Scene triad + Beat tags)
{
"$id":"[Link].v1",
"type":"object",
"required":["scene_id","active","dominant","coherence","lifecycle"],
"properties":{
"scene_id":{"type":"string"},
"active":{"type":"array","items":{"$ref":"#/defs/Motif"},"minItems":1,"maxItems":3}
,
"dominant":{"$ref":"#/defs/Motif"},
"coherence":{"type":"number","minimum":0,"maximum":1},
"lifecycle":{"type":"object","additionalProperties":{
"type":"object",
"properties":{
"seed":{"type":"string","pattern":"^B\\d{3}$"},
"echo":{"type":"array","items":{"type":"string","pattern":"^B\\d{3}$"}},
"escalation":{"type":"array","items":{"type":"string","pattern":"^B\\
d{3}$"}},
"crest_sigil":{"type":"string","pattern":"^B\\d{3}$"},
"release":{"type":"string","pattern":"^B\\d{3}$"},
"aftermath_token":{"type":"string","pattern":"^B\\d{3}$"}
}
}},
"errors":{"type":"array","items":{"$ref":"[Link].v1"}},
"coach":{"type":"array","items":{"$ref":"[Link].v1"}}
}
}
14.4.5 Aftermath_Report + Relationship_State
{
"$id":"[Link].v1",
"type":"object",
"required":["scene_id","consequence","state_delta"],
"properties":{
"scene_id":{"type":"string"},
"consequence":{"$ref":"#/defs/Consequence_Vector"},
"state_delta":{
"type":"object",
"properties":{
"trust_level":{"type":"object","properties":{"from":{"type":"number"},"to":
{"type":"number"}}},
"power_balance":{"type":"object","properties":{"from":
{"type":"string"},"to":{"type":"string"}}},
"role_baseline":{"type":"object","properties":{"from":
{"type":"string"},"to":{"type":"string"}}},
"desire_profile":{"type":"object","properties":{"add":
{"type":"array"},"remove":{"type":"array"}}}
}
},
"status_updates":{"type":"object","additionalProperties":true},
"tokens_added":{"type":"array","items":{"$ref":"[Link].v1"}},
"repairs":{"type":"array","items":{"type":"object","properties":{"type":
{"type":"string"},"at":{"type":"string"}}}},
"aftercare":{"type":"boolean"},
"cooldown_required":{"type":"boolean"},
"errors":{"type":"array","items":{"$ref":"[Link].v1"}},
"coach":{"type":"array","items":{"$ref":"[Link].v1"}}
}
}
Relationship_State (rolling)
{
"$id":"[Link].v1",
"type":"object",
"required":["scene_id","relationship_state"],
"properties":{
"scene_id":{"type":"string"},
"relationship_state":{
"type":"object",
"required":
["power_balance","trust_level","role_baseline","consequence_vector"],
"properties":{
"power_balance":{"type":"string","pattern":"^\\d{2}/\\d{2}$"},
"trust_level":{"type":"number","minimum":0,"maximum":1},
"desire_profile":{"type":"array","items":{"$ref":"#/defs/Desire_Type"},"maxItems":2
},
"role_baseline":{"type":"string","enum":["Initiator/Responder","Responder/
Initiator","Switch"]},
"boundaries":{"type":"object","properties":{
"limits_declared":{"type":"array","items":{"type":"string"}},
"safeword_acknowledged":{"type":"boolean"},
"protocol":{"$ref":"#/defs/Protocol"}
}},
"status_flags":{"type":"object","additionalProperties":{"type":"boolean"}},
"tokens":{"type":"array","items":{"$ref":"[Link].v1"}},
"consequence_vector":{"$ref":"#/defs/Consequence_Vector"},
"notes":{"type":"string","maxLength":240}
}
}
}
}
14.4.6 Episode & Season
{
"$id":"[Link].v1",
"type":"object",
"required":["episode_id","state_out","scenes"],
"properties":{
"episode_id":{"type":"string","pattern":"^E\\d{2}$"},
"state_out":{"$ref":"[Link].v1#/properties/relationship_state"},
"scenes":{"type":"array","items":{"type":"string","pattern":"^S\\d{3}$"}},
"metrics":{"type":"object","additionalProperties":{"type":"number"}}
}
}
{
"$id":"[Link].v1",
"type":"object",
"required":["season_id","episodes","arc","compliance"],
"properties":{
"season_id":{"type":"string","pattern":"^SE\\d{2}$"},
"episodes":{"type":"array","items":{"$ref":"[Link].v1"}},
"floors":{"type":"object","properties":{"trust_min":{"type":"number"}}},
"caps":{"type":"object","properties":{"crest_density_per_episode":
{"type":"number"}}},
"arc":{"type":"string"},
"compliance":{"type":"object","properties":{"episodes_ok":
{"type":"integer"},"episodes_warn":{"type":"integer"},"episodes_fail":
{"type":"integer"}}}
}
}
14.4.7 Errors & Coach Diff
{
"$id":"[Link].v1",
"type":"object",
"required":["id","severity"],
"properties":{
"id":{"type":"string"},
"at":{"type":"string"},
"window":{"type":"array","items":{"type":"string"}},
"severity":{"$ref":"#/defs/Severity"},
"explain":{"type":"string"}
}
}
{
"$id":"[Link].v1",
"type":"object",
"required":["op"],
"properties":{
"op":{"type":"string"},
"before":{"type":"string"},
"at":{"type":"string"},
"reason":{"type":"string"},
"expected_delta":{"type":"string"},
"params":{"type":"object","additionalProperties":true}
}
}
14.4.8 Tokens
{
"$id":"[Link].v1",
"type":"object",
"required":["id","motif","kind"],
"properties":{
"id":{"type":"string","pattern":"^TK-\\d{3}$"},
"motif":{"$ref":"#/defs/Motif"},
"kind":{"type":"string","enum":["binding","keepsake","rite","status"]},
"notes":{"type":"string","maxLength":120}
}
}
---
14.5 Cross-Engine Ports
OccultPort ([Link])
{
"scene_id":"S040",
"crosswalk":[{"motif":"KeyLock","archetype":"Threshold/Guardian","ritual_form":"Oat
h & Passage","coherence_weight":0.30}],
"warnings":[]
}
PsychoPort ([Link])
{
"scene_id":"S040",
"affect":{"arousal":0.73,"stress":0.29,"soothing":0.42},
"notes":"affect modulates curve gains; analysis-only"
}
---
14.6 Rail Plans (Adapters consume structure)
Comics_Plan ([Link])
{
"scene_id":"S040",
"grid":{"rise_at":"p3","crest_at":"p5"},
"beats_to_panels":{"B010":"p3-2","B015":"splash"},
"motif_visuals":{"Veil":"soft edge","KeyLock":"doorframe"},
"notes":"no surface; renderer decides panel art"
}
Film_Plan ([Link])
{
"scene_id":"S040",
"blocking":{"B012":"two-shot near","B014":"over-shoulder swap"},
"lens":{"rise":50,"crest":85},
"confirm_lead":"B013",
"afterglow":"linger 6s"
}
(Other rails mirror this pattern; always structural, non-graphic.)
---
14.7 Pack Layout (.[Link])
/[Link]
/[Link] # Eros_Node per line
/[Link] # Eros_Scene
/[Link] # Tension/Trust/Distance fits
/[Link]
/[Link]
/[Link]
/[Link]
/[Link]
/[Link] # optional
/[Link] # optional
/[Link] # [Link] entries
/[Link] # [Link] entries
/rails/
[Link]
[Link]
... (others)
/schemas/ # frozen copies of v1 JSON Schemas
[Link]
{
"pack_id":"PK-9a7c2f1b",
"engine":"EROS",
"version":"1.0.0",
"schemas":
["[Link].v1","[Link].v1","[Link].v1","[Link].v1","[Link].v
1","[Link].v1","[Link].v1","[Link].v1","[Link].v1","[Link].v
1","[Link].v1"],
"created_utc":"2025-10-07T14:30:00Z"
}
---
14.8 $defs & Validation (shared include)
Provide a single schemas/_defs.[Link] with:
All enums in §14.3
Regex for IDs
Numeric bounds for [0..1] fields
Cross-field rules (JSON Schema allOf + annotations)
If consequence_vector ∈ ["Reckoning","Transformation"] ⇒ aftercare or debrief
required in [Link].
If active motifs include Knot|CrownCollar|ChaliceBlade ⇒ aftermath_token present.
If context includes audience_present in PsychoPort ⇒ confirm_lead beat must precede
crest_at.
---
14.9 Indexes & Query Patterns
Primary keys: (scene_id,beat_id) for nodes; scene_id for all scene artifacts.
Secondary indexes:
[Link] → fast validator dashboards
[Link] → automation routing
[Link] → visual theming
relationship_state.status_flags.* → public/parasocial controls
power_balance & trust_level → curve analytics
---
14.10 Versioning & Migration
SemVer: [Link] tied to [Link].
Forward-compat fields: unknown keys allowed under x_ prefix.
Migration notes: v1→v1.x can add optional fields; v2 may split act_taxonomy into
finer clusters. Include /schemas/[Link].
---
14.11 Security & Redaction
No real-person fields (names, handles) permitted in any schema.
No media URIs to private content.
Notes fields are structural only; reject graphic surface text in ingestion
(E_SURFACE_GRAPHIC_INPUT).
---
14.12 Compact End-to-End Example (non-graphic)
[Link] (2 beats)
{"scene_id":"S040","beat_id":"B014","tension":0.84,"trust":0.72,"distance":"Near","
consent_state":"Explicit","power_balance":"62/38->58/42","act_taxonomy":
[{"category":"BDSM","role_map":"Dominant/
Submissive","protection":"Glove","risk_flags":
["Public"],"consent_checkpoint":"Explicit"}],"bdsm_taxonomy":
[{"type":"Restraint","protocol":"SSC"}],"symbolic_motifs":["Veil","KeyLock"]}
{"scene_id":"S040","beat_id":"B015","tension":0.92,"trust":0.76,"distance":"Contact
","consent_state":"Reaffirmed","power_balance":"58/42->55/45","act_taxonomy":
[{"category":"Aftercare"}],"symbolic_motifs":["Knot"]}
[Link]
{"scene_id":"S040","profile":"PowerReversal_Noire","family":"Crest","power_vector":
"70/30->55/45","consequence_vector":"Reckoning"}
[Link]
{"scene_id":"S040","family":"Crest","tension":{"breakpoints":
{"rise_at":0.31,"crest_at":0.82,"release_at":0.88,"tail_len":0.12},"rms_error":0.06
,"crest_amp":0.92},"trust":
{"mode":"climb_after_repair","start":0.48,"end":0.76,"repairs":
["B012"]},"distance":{"sequence":
["Far","Approach","Near","Contact","Retreat"],"dwell":
{"Far":1,"Approach":2,"Near":2,"Contact":1,"Retreat":1}}}
[Link]
{"scene_id":"S040","active":
["Veil","KeyLock","Knot"],"dominant":"KeyLock","coherence":0.78,"lifecycle":
{"Veil":{"seed":"B003","echo":["B007"],"crest_sigil":"B014"},"KeyLock":
{"seed":"B005","escalation":["B010","B012"],"crest_sigil":"B015"},"Knot":
{"seed":"B006","aftermath_token":"B018"}},"errors":[]}
[Link]
{"scene_id":"S040","consequence":"Reckoning","state_delta":{"trust_level":
{"from":0.70,"to":0.76},"power_balance":
{"from":"60/40","to":"55/45"},"role_baseline":{"from":"Initiator/
Responder","to":"Switch"}},"tokens_added":[{"id":"TK-
019","motif":"Knot","kind":"binding"}],"aftercare":true,"cooldown_required":true}
[Link]
{"id":"E_DISTANCE_RUSH","at":"B013","severity":"WARN","explain":"Insufficient Near
dwell before crest"}
[Link]
{"op":"pad_approach","reason":"E_DISTANCE_RUSH","params":{"beats":1}}
---
14.13 KPIs (data layer)
schema_validation_rate == 100%
pack_completeness ≥ 0.95 (expected files present)
index_build_time < 50ms/scene (reference impl)
unknown_field_rate < 2% (ensures clean adapters)
---
14.14 CLI/API (pack I/O)
eros pack build --scene S040 --out [Link]
eros pack validate [Link]
eros pack inspect [Link] --sections nodes,curves,motifs
eros pack merge season SE01 *.[Link] --out SE01_bundle.zip
---
Delivery Manifest — Item 14 (Data Models + Pack Layout)
Completed: ID rules, enums, full beat/scene/episode/season schemas,
curves/motifs/aftermath/state, errors/coach, tokens, cross-engine ports, rail
adapters, pack layout, $defs, validation constraints, indexes, versioning,
security, compact example, CLI.
Next queued: 15) Determinism Knobs (advanced & profiles) or 16) Interfaces (Ports)
deep dive. Say “15” or “16” to proceed.
—FIXED
15) Determinism Knobs (Advanced Controls & Profiles) — EROS / Taboo (Analyze-Only,
Explicit-Analysis Enabled)
Contract: fictional domain; analysis-only; no graphic sexual prose. These controls
make the engine predictable, repeatable, and tunable across drafts, pipelines, and
rails—while keeping consent, power, tension, and motifs mathematically consistent.
---
15.1 Objectives
Reproducibility: same inputs + same knobs ⇒ same structural outputs.
Tunable discipline: tighten/loosen consent gates, role stability, motif load, curve
fits, aftermath durability.
Cross-engine stability: ensure Occult + Psycho + Rails consume stable curves/tokens
without drift.
---
15.2 Determinism Model
Hard constraints (must pass): consent gates, cooldown, aftermath presence, crest
density caps, ID schemas.
Soft constraints (optimize toward): curve RMS targets, motif coherence, trust climb
patterns.
Resolution order: Hard → Soft → Profile tweaks → Coach diffs (if violations
remain).
---
15.3 Global Controls
{
"_schema_version":"[Link].v1",
"seed": 1337, // RNG for tie-breaks & sampling within
analysis heuristics
"clock_locked": true, // deterministic timestamps in artifacts
"locale": "en-US",
"profile": "PowerReversal_Noire", // default behavioral preset (see §15.20)
"strict_mode": "HARD|BALANCED|SOFT"
}
HARD: enforce all hard validators; auto-inject Coach diffs; fail pack if
unresolved.
BALANCED: enforce gates/cooldowns; warn on curve/motif; still build pack.
SOFT: record all; never auto-inject diffs (report only).
---
15.4 Consent Gate Controller (C-GATE)
Purpose: No escalation without prior Consent advance (see §9).
{
"consent_gate": {
"require_explicit_before_crest": true,
"reaffirm_on_adjust": true,
"lead_min_beats": 1, // confirm lead beats before crest
"cooldown_after_rupture": 1, // scenes required before next escalation
"auto_insert_repair": true // if missing, emit Coach op
}
}
Validators: E_GATE_SKIP, E_COOLDOWN_BREACH.
Coach ops: insert_confirm, add_repair, extend_cooldown.
---
15.5 Role Lock Controller (R-LOCK)
Purpose: prevent whiplash in dominance/agency unless a reversal plan exists.
{
"role_lock": {
"window_beats": 2, // min beats a baseline role must hold
"allow_reversal_arc": true,
"reversal_requires_plan": true,
"reversal_window": [ "B010","B015" ]
}
}
Validator: E_ROLE_BASELINE_DRIFT.
Coach: pad_role_window, schedule_reversal_window.
---
15.6 Motif Discipline (M-DISC)
Keeps ≤3 active motifs, ensures lifecycle grammar
(seed→echo→crest_sigil→release→aftermath_token).
{
"motif_discipline": {
"max_active": 3,
"demand_lifecycle": true,
"coherence_target": 0.70,
"collision_penalty": 0.05,
"overflow_policy": "PRUNE|WARN|ALLOW"
}
}
Validators: E_MOTIF_OVERFLOW, E_MOTIF_COLLISION, E_MOTIF_INERT,
E_MOTIF_TAIL_MISSING.
Coach: prune_to_triad, reassign_phase, add_aftermath_token.
---
15.7 Curve Fit Controller (CURVE-FIT)
Shapes Tension / Trust / Distance fits (see §11).
{
"curve_fit": {
"family":"Crest|SlowBurn|Pulse|Surge|Stutter",
"tension_rms_max": 0.08,
"crest_amp_min": 0.65,
"crest_density_cap_per_episode": 1,
"distance_min_dwell": { "Approach":1, "Near":1 }, // beats
"tail_len_min": 0.10 // normalized
}
}
Validators: E_CREST_DENSITY, E_DISTANCE_RUSH, E_CURVE_RMS_EXCEED.
Coach: pad_approach, hold_tail, reduce_micro-oscillation.
---
15.8 Temperature Controller (TEMP)
Controls tone volatility (non-graphic), integrates with Psycho affect.
{
"temperature": {
"ceiling": 0.80, // cap for Emotional_Temperature
"volatility": 0.25, // max Δ per beat
"psycho_gain": 0.6 // how much Psycho arousal modulates ceiling
}
}
Effect: high arousal may push ceiling but never exceeds cap; reduces spiky fits.
---
15.9 Aftermath Enforcer (AF-ENF)
Ensures persistent consequences and required care (see §13).
{
"aftermath_enforcer": {
"require_consequence_on_crest": true,
"aftercare_required_on_high_risk": true,
"debrief_required_on_rupture": true,
"durability_bias":"Transient|Stable|Durable",
"half_life_scenes": 4
}
}
Validators: E_CONSEQUENCE_ABSENT, E_AFTERCARE_MISSING, E_DEBRIEF_MISSING,
E_STATE_RETCON.
Coach: add_aftercare, insert_debrief, schedule_counter_crest.
---
15.10 Risk Governor (RISK-GOV)
Tracks risk_flags tagging (analysis-only) and couples them to gate strictness.
{
"risk_governor": {
"flag_intensity_weights": { "Public":1.0, "Edge":1.0, "Impact":0.8, "Pain":0.6,
"Degradation":1.0, "Breath":1.0 },
"confirm_lead_boost_on_flags": 1, // extra beats required before crest
"aftercare_mandatory_on_flags": ["Edge","Public","Impact","Degradation"]
}
}
Validators: E_FLAG_WITHOUT_LEAD, E_FLAG_WITHOUT_CARE.
---
15.11 Distance & Proxemics Controller (DIST)
Guarantees approach → near dwell before contact; manages retreats.
{
"distance_ctrl": {
"min_sequence": ["Approach","Near","Contact"],
"enforce_retreat_after_crest": true,
"retreat_dwell_beats": 1
}
}
Validator: E_CONTACT_WITHOUT_NEAR.
---
15.12 Public/Parasocial Controller (PUB)
When audience/recording factors are present (§13.9).
{
"public_ctrl": {
"audience_pressure": 0.5, // 0..1
"confirm_lead_multiplier": 1.5,
"mask_with_veil_if_public": true
}
}
Coach: mask_with_veil, defer_crest_until_confirm.
---
15.13 Persistence & Decay (DECAY)
Ties into Relationship_State durability.
{
"decay_ctrl": {
"trust_half_life_scenes": 4,
"power_memory": 0.6, // how much prior power carries
"freeze_on_transformation": 2 // scenes
}
}
---
15.14 Adaptive vs Static Modes
{
"adaptation": {
"enable": true,
"learn_from_previous": 3, // lookback scenes
"auto_tighten_on_warns":
["E_GATE_SKIP","E_COOLDOWN_BREACH","E_CONSEQUENCE_ABSENT"],
"auto_relax_on_pass": false
}
}
If enabled, the engine tightens relevant knobs by small, deterministic deltas upon
repeated warnings.
---
15.15 Conflict Resolution & Precedence
1. Consent/Cooldown
2. Aftermath
3. Role Lock / Reversal Plan
4. Curve Fit minima (dwell/crest/ tail)
5. Motif coherence
6. Temperature ceiling
7. Profile custom tweaks
Lower items must yield to higher when conflicts occur.
---
15.16 Configuration Schema (full block)
{
"_schema_version":"[Link].v1",
"seed":1337,
"clock_locked":true,
"locale":"en-US",
"profile":"PowerReversal_Noire",
"strict_mode":"BALANCED",
"consent_gate":
{"require_explicit_before_crest":true,"reaffirm_on_adjust":true,"lead_min_beats":1,
"cooldown_after_rupture":1,"auto_insert_repair":true},
"role_lock":
{"window_beats":2,"allow_reversal_arc":true,"reversal_requires_plan":true},
"motif_discipline":
{"max_active":3,"demand_lifecycle":true,"coherence_target":0.70,"collision_penalty"
:0.05,"overflow_policy":"PRUNE"},
"curve_fit":
{"family":"Crest","tension_rms_max":0.08,"crest_amp_min":0.65,"crest_density_cap_pe
r_episode":1,"distance_min_dwell":{"Approach":1,"Near":1},"tail_len_min":0.10},
"temperature":{"ceiling":0.80,"volatility":0.25,"psycho_gain":0.6},
"aftermath_enforcer":
{"require_consequence_on_crest":true,"aftercare_required_on_high_risk":true,"debrie
f_required_on_rupture":true,"durability_bias":"Stable","half_life_scenes":4},
"risk_governor":{"flag_intensity_weights":
{"Public":1.0,"Edge":1.0,"Impact":0.8,"Pain":0.6,"Degradation":1.0,"Breath":1.0},"c
onfirm_lead_boost_on_flags":1,"aftercare_mandatory_on_flags":
["Edge","Public","Impact","Degradation"]},
"distance_ctrl":{"min_sequence":
["Approach","Near","Contact"],"enforce_retreat_after_crest":true,"retreat_dwell_bea
ts":1},
"public_ctrl":
{"audience_pressure":0.5,"confirm_lead_multiplier":1.5,"mask_with_veil_if_public":t
rue},
"decay_ctrl":
{"trust_half_life_scenes":4,"power_memory":0.6,"freeze_on_transformation":2},
"adaptation":{"enable":true,"learn_from_previous":3,"auto_tighten_on_warns":
["E_GATE_SKIP","E_COOLDOWN_BREACH","E_CONSEQUENCE_ABSENT"],"auto_relax_on_pass":fal
se}
}
---
15.17 Telemetry & KPIs (per scene/episode)
gate_compliance = 1.0 (no E_GATE_SKIP)
crest_density_ok ∈ {0,1}
curve.rms_error ≤ tension_rms_max
[Link] ≥ target
aftercare_coverage and debrief_latency within §13 targets
retcon_violations = 0
Store in [Link] inside the pack.
---
15.18 CLI / API
eros cfg init --profile PowerReversal_Noire > [Link]
eros cfg lint [Link]
eros analyze --knobs [Link] scene_S040.txt --out [Link]
eros replay --seed 1337 --knobs [Link] --pack [Link] #
reproducibility check
eros coach apply --pack [Link] --auto --strict HARD
---
15.19 Cross-Engine / Rail Handshakes
Psycho: reads temperature & risk_governor; modulates affect; returns
arousal/stress/soothing used by psycho_gain.
Occult: motif discipline drives crosswalk weighting; collisions & rite expectations
feed back into coherence.
Rails:
Comics/Film/Theater: distance_min_dwell, confirm_lead_multiplier, and
role_lock.window_beats map to panel/shot/blocking counts.
Games: cooldown_after_rupture becomes locked node; confirm_lead_boost_on_flags
extends pre-crest tasks.
Serialized: crest_density_cap_per_episode enforces episode pacing; decay/freeze
rendered as arc guards.
---
15.20 Profile Library (preset knob bundles)
SlowBurn_Gothic
{
"profile":"SlowBurn_Gothic",
"consent_gate":{"lead_min_beats":2},
"motif_discipline":{"coherence_target":0.75,"max_active":2},
"curve_fit":{"family":"SlowBurn","tail_len_min":0.15},
"temperature":{"ceiling":0.65,"volatility":0.18},
"aftermath_enforcer":{"durability_bias":"Stable","half_life_scenes":6}
}
PowerReversal_Noire
{
"profile":"PowerReversal_Noire",
"role_lock":{"window_beats":2,"reversal_requires_plan":true},
"curve_fit":{"family":"Crest","crest_amp_min":0.70},
"motif_discipline":{"collision_penalty":0.07},
"temperature":{"ceiling":0.80}
}
RitualUnion_Mythic
{
"profile":"RitualUnion_Mythic",
"motif_discipline":{"max_active":3,"coherence_target":0.78},
"aftermath_enforcer":{"durability_bias":"Durable","half_life_scenes":8},
"decay_ctrl":{"freeze_on_transformation":2}
}
Public_Performance
{
"profile":"Public_Performance",
"public_ctrl":
{"audience_pressure":0.7,"confirm_lead_multiplier":1.8,"mask_with_veil_if_public":t
rue},
"risk_governor":{"confirm_lead_boost_on_flags":2}
}
Serialized_Arc
{
"profile":"Serialized_Arc",
"curve_fit":{"crest_density_cap_per_episode":1,"tension_rms_max":0.07},
"decay_ctrl":{"trust_half_life_scenes":5,"power_memory":0.7}
}
---
15.21 Synthetic Example (Deterministic Replay)
Run A: seed=1337 → S040 crest at t=0.82, RMS 0.06, coherence=0.78.
Run B: seed=1337 (same knobs) → identical artifacts byte-for-byte.
Run C: same input but lead_min_beats=2 → validator inserts insert_confirm at B013,
crest shifts to t=0.84, RMS 0.05, coherence +0.02 (due to lifecycle improvement).
---
Delivery Manifest — Item 15 (Determinism Knobs)
Completed: hard/soft model, global controls, C-GATE, R-LOCK, M-DISC, CURVE-FIT,
TEMP, AF-ENF, RISK-GOV, DIST, PUB, DECAY, adaptation, precedence, full config
schema, telemetry, CLI, cross-engine/rail hooks, profiles, deterministic example.
Next queued: 16) Interfaces (Ports) deep dive or 17) Profiles (expanded with
cultural packs). Say “16” or “17” to proceed.
—FIXED
16) Interfaces (Ports) — Deep Dive — EROS / Taboo (Analyze-Only, Explicit-Analysis
Enabled)
Contract: fictional domain; analysis-only; no graphic sexual prose. This section
specifies how EROS talks to everything else: engines, rails, and orchestration. All
payloads are structural labels, curves, states, and coach diffs—portable,
deterministic, redaction-safe.
---
16.1 Port Topology (what connects to what)
Core Ports (EROS ⇆ Orchestrator)
IngestPort → raw scene text/outline (fiction only) IN
AnalyzePort → Eros_Node stream + Curves/Tags OUT
CoachPort → diffs/suggestions OUT; optional apply IN
AuditPort → validators + compliance OUT
PackPort → .[Link] build/inspect/validate IN/OUT
Cross-Engine Ports
PsychoPort (affect exchange): arousal/stress/soothing ⇆ curve gains
OccultPort (symbol/archetype): motifs ⇆ ritual crosswalk & coherence
Rail Ports (consumers)
Comics_Port, Film_Port, Theater_Port, Literature_Port, Animation_Port, Games_Port,
Events_Port, Oral_Port, Serialized_Port, Culinary_Port, Music_Vocal_Port,
Music_Instrumental_Port, VisualArts_Port, Olfactory_Port, DigitalMedia_Port
Each rail consumes plans/curves/tokens and never asks EROS for surface/graphic
prose.
---
16.2 Transport & IPC (normative options)
File mode (default): read/write .[Link] (see §14.7 layout).
Local call mode: function calls returning JSON artifacts (schemas in §14).
Event bus mode: topic messages (JSON Lines). Deterministic ordering by (scene_id,
beat_id).
Message keys (bus):
[Link].S### # Eros_Node lines
[Link].S### # Curves object
[Link].S### # Motif object
[Link].S### # Aftermath report
[Link].S### # Rolling state snapshot
[Link].S### # Validator events
[Link].S### # Coach diffs
Backpressure: consumer ACK required per message; un-ACK’d → requeue once; then
dead-letter [Link].
---
16.3 Core Ports — Contracts
16.3.1 IngestPort
IN
{
"scene_id":"S040",
"source_type":"fiction_text|outline|beats",
"text":"...", // or beats[]
"context":
{"episode_id":"E05","season_id":"SE01","profile":"PowerReversal_Noire"},
"age_gate":{"adult_confirmed":true}, // required flag (see 16.10)
"redaction":{"reject_real_person_names":true}
}
OUT: ack or error (E_SURFACE_GRAPHIC_INPUT if explicit prose is sent).
16.3.2 AnalyzePort
IN: scene_id
OUT (stream): Eros_Node… then Curves → Motifs → Eros_Scene
16.3.3 CoachPort
OUT: diffs ([Link].v1) with machine-readable reasons.
IN (optional): apply bundle
{ "scene_id":"S040", "apply":[ {"op":"pad_approach","params":{"beats":1}} ] }
Result: recomputed nodes/curves; new pack version tag.
16.3.4 AuditPort
IN: scene_id or pack_id
OUT: validator set + compliance summary (no prose).
16.3.5 PackPort
Ops: build | validate | inspect | merge | replay (see §14.14 CLI parity).
Guarantee: byte-stable packs under same knobs/seed (§15).
---
16.4 Cross-Engine Ports — Handshakes
16.4.1 PsychoPort (affect exchange)
EROS → Psycho (request)
{
"scene_id":"S040",
"curve_family":"Crest",
"temperature_ceiling":0.80,
"risk_flags":["Public","Impact"],
"ask":"affect_modulators" // request arousal/stress/soothing scalars
}
Psycho → EROS (response)
{
"scene_id":"S040",
"affect":{"arousal":0.73,"stress":0.29,"soothing":0.42},
"notes":"structural only"
}
Effect in EROS: applies psycho_gain (§15.8) to tension/temperature constraints, may
trigger coach ops (extend_confirm_lead, add_aftercare).
16.4.2 OccultPort (symbol/archetype coherence)
EROS → Occult
{
"scene_id":"S040",
"motifs":["Veil","KeyLock","Knot"],
"ask":"crosswalk"
}
Occult → EROS
{
"scene_id":"S040",
"crosswalk":[
{"motif":"KeyLock","archetype":"Threshold/Guardian","ritual_form":"Oath &
Passage","coherence_weight":0.30}
],
"warnings":[]
}
Effect in EROS: raises/lower [Link]; may require aftermath_token for
binding motifs (§13 validators).
---
16.5 Rail Ports — Mapping Guide (each rail consumes plans; no surface)
> All plans are adapters derived from the same core artifacts
(Nodes/Curves/Motifs/State). Here are minimal contracts + examples.
16.5.1 Comics_Port
IN ([Link]):
{
"scene_id":"S040",
"grid":{"rise_at":"p3","crest_at":"p5","tail":"p6"},
"beats_to_panels":{"B010":"p3-2","B015":"splash"},
"motif_visuals":{"Veil":"soft_edge","KeyLock":"doorframe"},
"confirm_lead":"B013",
"afterglow_panel":"p6"
}
Renderer decides art/layout—EROS provides panel staging rhythm and motif placements
only.
16.5.2 Film_Port
IN ([Link]) (from §14 plus callouts):
{
"scene_id":"S040",
"blocking":{"B012":"two-shot near","B014":"over-shoulder swap"},
"lens":{"rise":50,"crest":85},
"confirm_lead":"B013",
"afterglow_hold_seconds":6,
"public_mask":"Veil"
}
16.5.3 Theater_Port
{
"scene_id":"S040",
"staging":{"zones":["Far","Near","Contact"],"minimum_near_beats":1},
"beat_cues":[{"beat":"B013","cue":"ConsentConfirm"}],
"props_from_tokens":["Knot"]
}
16.5.4 Literature_Port
{
"scene_id":"S040",
"paragraph_cadence":{"rise":3,"crest":1,"tail":1},
"confirm_lead":"B013",
"ban_surface":"graphic", // adapter enforces: no graphic text from EROS
"motif_words":["veil","threshold","binding"] // non-graphic lexicon hints for
*external* renderer
}
16.5.5 Animation_Port
{
"scene_id":"S040",
"timing":{"rise":900,"crest":300,"tail":400}, // frames
"symbol_layers":{"Veil":"opacity ramp","KeyLock":"door matte"}
}
16.5.6 Games_Port
{
"scene_id":"S040",
"nodes":{
"confirm_lead":{"type":"gate","beats":["B013"]},
"cooldown":{"type":"lock","unlock_ops":["repair","debrief"]}
},
"quests":[{"id":"Q-repair","requires":"aftercare"}],
"public_exposure":true
}
16.5.7 Events_Port (immersive/live)
{
"scene_id":"S040",
"rooms":["Approach","Near","Afterglow"],
"flow":["Approach->Near->Contact->Afterglow"],
"audience_pressure":0.7,
"safety_prompts":["confirm","repair","debrief"]
}
16.5.8 Oral_Port (storytelling)
{
"scene_id":"S040",
"beats":["B010","B013","B014","B015"],
"timing":{"pause_at_confirm":"1.2s","afterglow":"short"},
"motif_prompts":["veil","threshold","binding"],
"no_surface_graphic":true
}
16.5.9 Serialized_Port
{
"episode_id":"E05",
"crest_density_cap":1,
"arc":"Build→Payoff",
"carry_state":{"trust_floor":0.40,"tokens":["TK-019"]}
}
16.5.10 Culinary_Port
{
"scene_id":"S040",
"course_map":{"approach":"bitter","crest":"umami-rich","afterglow":"sweet-calm"},
"token_garnish":{"Knot":"bind ribbon"}
}
16.5.11 Music_Vocal_Port
{
"scene_id":"S040",
"lyric_cues":{"confirm":"call-and-response","afterglow":"humming tail"},
"dynamic_curve":["mp","mf","f","mp"],
"ban_surface":"graphic"
}
16.5.12 Music_Instrumental_Port
{
"scene_id":"S040",
"motif_to_theme":{"Veil":"strings pad","KeyLock":"piano ostinato"},
"cadence":"rise→crest→cadence tail"
}
16.5.13 VisualArts_Port
{
"scene_id":"S040",
"composition_prompts":{"mirror":"reflective plane","keylock":"threshold
framing"},
"color_script":{"approach":"cool","crest":"hot","afterglow":"neutral-warm"}
}
16.5.14 Olfactory_Port
{
"scene_id":"S040",
"accords":{"approach":"ozonic","near":"resin","afterglow":"vanillic"},
"token_binding":{"Knot":"leather nuance"}
}
16.5.15 DigitalMedia_Port (parasocial/feeds)
{
"scene_id":"S040",
"schedule":{"tease":"t-48h","confirm":"t-12h","drop":"t=crest"},
"audience_pressure":0.7,
"masking":"Veil",
"age_gate":{"adult_confirmed":true}, // required in this rail
"publisher_tags":["Adult_Publisher","Studio","Channel"], // company-level, no
real-person names
"ban_surface":"graphic"
}
---
16.6 Redaction & Name Policy (ports)
No real-person names/handles traverse ports.
Company/brand categories allowed (e.g., "Adult_Publisher", "Studio", "Channel").
Rails that later map to public catalogs must do so outside EROS using their own
policy gates.
---
16.7 Streaming Semantics
AnalyzePort emits NodeStream in beat order; consumers can render incrementally.
Finalization message [Link].S### signals curve/motif/aftermath availability.
If a coach op is applied, EROS replays stream with incremented pack_version.
---
16.8 Error Codes (port-level)
E_PORT_INPUT_INVALID — schema fail on IN.
E_SURFACE_GRAPHIC_INPUT — explicit prose submitted to IngestPort.
E_AGEGATE_MISSING — adult_confirmed absent where required.
E_RAIL_CONTRACT_VIOLATION — rail asked for surface/graphic.
E_PACK_STALE — consumer pack older than current version.
All errors are structural with severity + explain, never admonitions.
---
16.9 Latency & Backpressure Targets
NodeStream first byte ≤ 50ms after analyze start (reference impl).
Pack build ≤ 150ms/scene median, ≤ 400ms p95.
Backpressure: max in-flight 256 messages per scene; beyond → throttle publisher to
1 msg/ms.
---
16.10 Age Gate Handshake (global)
Every port that can surface downstream content requiring 18+ sets:
"age_gate":{"adult_confirmed":true}
Missing → E_AGEGATE_MISSING (HIGH); EROS halts rail export but still completes
internal analysis artifacts.
---
16.11 Version Negotiation
Each message carries "schema":"[Link].v1" etc.
Consumers must accept minor version bumps; major bumps require adapter map.
Fallback: EROS emits compatibility shim when consumer_declares={"accept":["v1"]}.
---
16.12 Test Harness (mocks)
[Link] returns fixed affect to verify determinism.
[Link] returns fixed crosswalk to test motif coherence.
[Link].* assert that no surface fields are requested from EROS.
---
16.13 Security Posture
Ports accept fictional inputs only.
No external scraping, no links to private media.
PII scrubber on IngestPort rejects real-person identifiers.
All artifacts are non-graphic, analysis-only.
---
16.14 Minimal End-to-End (bus) Example
> send [Link] S040 {...adult_confirmed:true...}
< ack
> send [Link] S040
< on [Link].S040 {...B010}
< on [Link].S040 {...B013}
< on [Link].S040 {...}
< on [Link].S040 {...}
< on [Link].S040 {...}
< on [Link].S040
> recv errors/coaches as needed
> export rails/[Link] ; rails/[Link]
---
Delivery Manifest — Item 16 (Interfaces / Ports)
Completed: topology, transports, core ports, cross-engine handshakes, 15 rail
adapters, redaction/age-gate policy, streaming semantics, error codes, latency
targets, version negotiation, test harness, security, end-to-end example.
Next queued: 17) Profiles (expanded with cultural packs) or 18) KPIs/Telemetry &
Observability. Say “17” or “18” to proceed.
—FIXED
17) Profiles (Expanded) + Cultural Packs — EROS / Taboo (Analyze-Only, Explicit-
Analysis Enabled)
Contract: fictional domain; analysis-only; no graphic sexual prose. Profiles and
Cultural Packs are overlay bundles that tune §15 Determinism Knobs and constrain
ontology (§7–§14) so EROS stays portable across engines/rails and consistent with
genre expectations. Outputs remain structural: curves, tags, states, coach diffs,
plans.
---
17.1 Purpose
Control feel, not surface. Profiles set rhythm (curves, trust, power), gates, and
aftermath policies.
Encode tradition. Cultural Packs add motif whitelists, cadence biases, and cross-
engine expectations (Occult/Psycho/Rails).
Compose safely. Result = Profile ⊕ CulturalPack ⊕ RailContext ⊕ ProjectKnobs →
deterministic plan; no graphic text.
---
17.2 Overlay Structure (schema)
{
"$id":"[Link].v1",
"type":"object",
"required":["overlay_id","kind","version"],
"properties":{
"overlay_id":{"type":"string"},
"kind":{"type":"string","enum":["profile","cultural_pack"]},
"version":{"type":"string"},
"description":{"type":"string"},
"knob_overrides":{"type":"object"}, // maps into §15.* knobs
"ontology_bias":{
"motif_allow": {"type":"array","items":{"$ref":"Motif"}},
"motif_discourage":{"type":"array","items":{"$ref":"Motif"}},
"desire_prefer":{"type":"array","items":{"$ref":"Desire_Type"}},
"risk_emphasis":{"type":"array","items":{"$ref":"Risk_Flag"}}
},
"rail_hints":{"type":"object","additionalProperties":true},
"occult_expectations":{"type":"array","items":{"type":"string"}},
"psycho_expectations":{"type":"object","additionalProperties":true},
"age_gate":{"type":"object","properties":{"adult_confirmed":
{"type":"boolean"}}}
}
}
> Merge rule: deep-merge over §15 base; conflicts resolved by §15.15 precedence
(Consent/Cooldown > Aftermath > RoleLock > Curves > Motifs > Temperature).
---
17.3 Core Profile Library (overlays)
Below are deterministic bundles (diffs over §15.16). All examples are structural;
adjust or stack with Cultural Packs.
P1: SlowBurn_Gothic
{
"overlay_id":"P.SlowBurn_Gothic",
"kind":"profile",
"version":"1.0.0",
"description":"Long approach, veiled motifs, cool temperature.",
"knob_overrides":{
"consent_gate":{"lead_min_beats":2},
"motif_discipline":{"max_active":2,"coherence_target":0.75},
"curve_fit":{"family":"SlowBurn","tail_len_min":0.15,"crest_amp_min":0.62},
"temperature":{"ceiling":0.65,"volatility":0.18},
"aftermath_enforcer":{"durability_bias":"Stable","half_life_scenes":6}
},
"ontology_bias":{
"motif_allow":["Veil","Mirror","ThornRose"],
"desire_prefer":["Longing","Devotion"]
}
}
P2: PowerReversal_Noire
{
"overlay_id":"P.PowerReversal_Noire",
"kind":"profile",
"version":"1.0.0",
"description":"Planned inversion of agency; sharp crest; cool afterglow.",
"knob_overrides":{
"role_lock":{"window_beats":2,"reversal_requires_plan":true},
"curve_fit":{"family":"Crest","crest_amp_min":0.70},
"temperature":{"ceiling":0.80},
"motif_discipline":{"collision_penalty":0.07}
},
"ontology_bias":{
"motif_allow":["KeyLock","Mirror","Knot"],
"desire_prefer":["PowerReversal","Curiosity"]
}
}
P3: RitualUnion_Mythic
{
"overlay_id":"P.RitualUnion_Mythic",
"kind":"profile",
"version":"1.0.0",
"description":"Binding rites; transformation aftermath; archetypal cadence.",
"knob_overrides":{
"motif_discipline":{"max_active":3,"coherence_target":0.78},
"aftermath_enforcer":
{"durability_bias":"Durable","half_life_scenes":8,"debrief_required_on_rupture":tru
e},
"decay_ctrl":{"freeze_on_transformation":2}
},
"occult_expectations":["Oath & Passage","Sacred Binding"],
"ontology_bias":{"motif_allow":
["Knot","CrownCollar","ChaliceBlade"],"desire_prefer":["RitualUnion","Redemption"]}
}
P4: Public_Performance
{
"overlay_id":"P.Public_Performance",
"kind":"profile",
"version":"1.0.0",
"description":"Audience pressure and masking; confirm lead extended.",
"knob_overrides":{
"public_ctrl":
{"audience_pressure":0.7,"confirm_lead_multiplier":1.8,"mask_with_veil_if_public":t
rue},
"risk_governor":
{"confirm_lead_boost_on_flags":2,"aftercare_mandatory_on_flags":["Public"]},
"curve_fit":{"family":"Pulse","tail_len_min":0.12}
},
"ontology_bias":{"motif_allow":["Veil","Mirror","KeyLock"],"risk_emphasis":
["Public"]}
}
P5: Kink_Lab_RACK
{
"overlay_id":"P.Kink_Lab_RACK",
"kind":"profile",
"version":"1.0.0",
"description":"Risk-aware experimental play; analysis tags only.",
"knob_overrides":{
"risk_governor":{"flag_intensity_weights":
{"Edge":1.0,"Impact":0.9,"Degradation":0.9,"Breath":1.0}},
"consent_gate":
{"require_explicit_before_crest":true,"reaffirm_on_adjust":true},
"aftermath_enforcer":
{"aftercare_required_on_high_risk":true,"debrief_required_on_rupture":true}
},
"ontology_bias":{"motif_allow":["Mask","Labyrinth"],"desire_prefer":
["Curiosity","Play"]}
}
P6: Tender_Romance
{
"overlay_id":"P.Tender_Romance",
"kind":"profile",
"version":"1.0.0",
"description":"Warm tone, steady trust climb, minimal risk flags.",
"knob_overrides":{
"temperature":{"ceiling":0.55,"volatility":0.15},
"risk_governor":{"aftercare_mandatory_on_flags":[]},
"curve_fit":{"family":"SlowBurn","crest_amp_min":0.55}
},
"ontology_bias":{"desire_prefer":["Devotion","Surrender"],"motif_allow":
["Veil","ThornRose"]}
}
P7: Voyeur_Exhibition_Control
{
"overlay_id":"P.Voyeur_Exhibition_Control",
"kind":"profile",
"version":"1.0.0",
"description":"Observer dynamics; high public gating; strict confirms.",
"knob_overrides":{
"public_ctrl":{"audience_pressure":0.8,"confirm_lead_multiplier":2.0},
"consent_gate":{"lead_min_beats":2},
"distance_ctrl":{"min_sequence":
["Approach","Near","Contact"],"enforce_retreat_after_crest":true}
},
"ontology_bias":{"desire_prefer":["Possession","Play"],"risk_emphasis":
["Public"]}
}
P8: Recovery_Aftercare
{
"overlay_id":"P.Recovery_Aftercare",
"kind":"profile",
"version":"1.0.0",
"description":"Scenes focused on care, repair, and stability.",
"knob_overrides":{
"aftermath_enforcer":
{"require_consequence_on_crest":true,"aftercare_required_on_high_risk":true,"durabi
lity_bias":"Stable"},
"curve_fit":{"family":"Stutter","tail_len_min":0.20}
},
"ontology_bias":{"desire_prefer":["Redemption","Devotion"],"motif_allow":
["Knot","Mirror"]}
}
P9: Comedy_Playful_Tease
{
"overlay_id":"P.Comedy_Playful_Tease",
"kind":"profile",
"version":"1.0.0",
"description":"Light stakes; cadence pulses; quick repairs.",
"knob_overrides":{
"curve_fit":{"family":"Pulse","crest_amp_min":0.50},
"adaptation":{"enable":true,"auto_tighten_on_warns":[]}
},
"ontology_bias":{"desire_prefer":["Play","Curiosity"],"motif_allow":
["Mask","KeyLock"]}
}
P10: Serialized_Arc_Control
{
"overlay_id":"P.Serialized_Arc_Control",
"kind":"profile",
"version":"1.0.0",
"description":"Season pacing; crest density cap; durable states.",
"knob_overrides":{
"curve_fit":{"crest_density_cap_per_episode":1,"tension_rms_max":0.07},
"decay_ctrl":{"trust_half_life_scenes":5,"power_memory":0.7}
},
"rail_hints":{"serialized":{"cliff_frequency":"1/episode","payoff_ratio":"1:3"}}
}
---
17.4 Cultural Packs (genre/medium traditions)
> Cultural Packs do not add surface language. They bias motifs, cadences, and
cross-engine expectations (Occult/Psycho), and may set rail hints (e.g., paneling
density, shot grammar).
C1: Gothic_Romance
{
"overlay_id":"C.Gothic_Romance",
"kind":"cultural_pack",
"version":"1.0.0",
"description":"Legacy, secrecy, haunted lineage.",
"ontology_bias":{"motif_allow":["Veil","Mirror","ThornRose"],"desire_prefer":
["Longing","Devotion"]},
"occult_expectations":["Ancestral Oath","Threshold Watcher"],
"rail_hints":{"literature":{"paragraph_cadence":{"rise":4,"crest":1,"tail":2}}}
}
C2: Modernist_Fracture
{
"overlay_id":"C.Modernist_Fracture",
"kind":"cultural_pack",
"version":"1.0.0",
"description":"Fragmented time, interiority, echo motifs.",
"ontology_bias":{"motif_allow":["Mirror","Labyrinth"],"desire_prefer":
["Curiosity","Forbidden"]},
"rail_hints":{"literature":{"paragraph_cadence":{"rise":2,"crest":1,"tail":1}}}
}
C3: PostDigital_Parasocial
{
"overlay_id":"C.PostDigital_Parasocial",
"kind":"cultural_pack",
"version":"1.0.0",
"description":"Feeds, tease/release scheduling, audience pressure.",
"ontology_bias":{"motif_allow":["Veil","KeyLock","Mask"],"risk_emphasis":
["Public"]},
"psycho_expectations":{"attention_pressure":0.7},
"rail_hints":{"digital":{"schedule":{"tease":"t-48h","confirm":"t-
12h","drop":"t=crest"},"age_gate":{"adult_confirmed":true}}}
}
C4: Noire_Crime_Melodrama
{
"overlay_id":"C.Noire_Crime_Melodrama",
"kind":"cultural_pack",
"version":"1.0.0",
"description":"Fatalism, reversal, moral reckoning.",
"ontology_bias":{"motif_allow":["KeyLock","Mirror"],"desire_prefer":
["PowerReversal","Possession"]},
"occult_expectations":["Oath Broken → Reckoning"]
}
C5: Adult_Anime_Erotic_Manga (fictional, 18+)
{
"overlay_id":"C.Adult_Anime_Erotic_Manga_18plus",
"kind":"cultural_pack",
"version":"1.0.0",
"description":"Stylization, heightened emotion, symbolic exaggeration.",
"ontology_bias":{"motif_allow":["Mask","Knot","KeyLock"],"desire_prefer":
["Play","Surrender"]},
"rail_hints":{"animation":{"timing":
{"rise":900,"crest":300,"tail":400}},"digital":{"age_gate":
{"adult_confirmed":true}}}
}
C6: Telenovela_Melodrama
{
"overlay_id":"C.Telenovela_Melodrama",
"kind":"cultural_pack",
"version":"1.0.0",
"description":"High emotion, reversals, cliff cadence.",
"ontology_bias":{"motif_allow":["Veil","KeyLock","ThornRose"],"desire_prefer":
["Devotion","Reckoning"]},
"rail_hints":{"serialized":{"cliff_frequency":"2/episode","payoff_ratio":"1:4"}}
}
C7: BDSM_Club_Subculture (fictional)
{
"overlay_id":"C.BDSM_Club_Subculture",
"kind":"cultural_pack",
"version":"1.0.0",
"description":"Protocols, negotiation, scene etiquette.",
"ontology_bias":{"motif_allow":["CrownCollar","Knot","Mask"],"risk_emphasis":
["Impact","Edge"]},
"occult_expectations":["Rite of Roles"],
"rail_hints":{"events":{"rooms":["Approach","Near","Afterglow"]}}
}
C8: HighFantasy_Courtly
{
"overlay_id":"C.HighFantasy_Courtly",
"kind":"cultural_pack",
"version":"1.0.0",
"description":"Oaths, quests, symbolic binding.",
"ontology_bias":{"motif_allow":
["Knot","ChaliceBlade","CrownCollar"],"desire_prefer":["RitualUnion","Devotion"]},
"occult_expectations":["Oath & Passage","Covenant Seal"]
}
C9: Urban_Witchcraft
{
"overlay_id":"C.Urban_Witchcraft",
"kind":"cultural_pack",
"version":"1.0.0",
"description":"Ritual symbolism in contemporary space.",
"ontology_bias":{"motif_allow":["Veil","Knot","ChaliceBlade"],"desire_prefer":
["Curiosity","RitualUnion"]},
"rail_hints":{"visual":{"color_script":
{"approach":"cool","crest":"hot","afterglow":"neutral-warm"}}}
}
C10: Queer_Ballroom_Club (fictional, adult)
{
"overlay_id":"C.Queer_Ballroom_Club_18plus",
"kind":"cultural_pack",
"version":"1.0.0",
"description":"Performance, chosen family, crowd energy.",
"ontology_bias":{"motif_allow":["Mask","Mirror","CrownCollar"],"desire_prefer":
["Play","Devotion"],"risk_emphasis":["Public"]},
"rail_hints":{"events":{"flow":["Approach->Near->Contact->Afterglow"]}}
}
---
17.5 Composition Rules (how they stack)
1. Start with Project Knobs (§15.16 default or custom).
2. Apply Profile (P*) overrides.
3. Apply Cultural Pack (C*) overrides.
4. Apply Rail Context hints (adapter-specific).
5. Validate & resolve via §15.15 precedence.
6. Emit overlay_trace.json into the pack documenting every change.
---
17.6 Invariants (what never changes)
Analysis-only; no graphic surface generation.
Consent gates precede any escalation.
Aftermath must persist when consequence ∈ {Reckoning, Transformation}.
Age gate required for any rail that could surface adult contexts
("adult_confirmed": true).
No real-person names in artifacts; company/studio categories only (mapped outside
EROS).
---
17.7 KPI Targets (per overlay)
gate_compliance = 1.0
curve.rms_error ≤ overlay.tension_rms_max
[Link] ≥ overlay.coherence_target
aftercare_coverage meets risk_governor rules
crest_density respects Serialized/rail caps
Overlay bundles include kpi_expectations.json so dashboards can assert pass/fail.
---
17.8 Worked Compositions (non-graphic, structural)
Example A — PowerReversal_Noire ⊕ PostDigital_Parasocial ⊕ Film_Port
Net knobs: confirm_lead_multiplier=1.8, crest_amp_min=0.70, audience_pressure=0.7.
Motifs allowed: ["KeyLock","Mirror","Veil"].
Film plan: longer confirm shot before crest; add public_mask:"Veil"; afterglow hold
6s.
Validators targeted: E_FLAG_WITHOUT_LEAD, E_DISTANCE_RUSH.
Aftermath: Reckoning required; debrief recommended if stress>0.4.
Example B — RitualUnion_Mythic ⊕ HighFantasy_Courtly ⊕ Literature_Port
Net knobs: durable aftermath (half_life_scenes=8), freeze_on_transformation=2.
Motifs: ["Knot","CrownCollar","ChaliceBlade"].
Lit plan: paragraph cadence rise:4 crest:1 tail:2; token Knot added in aftermath.
Occult: expects "Oath & Passage" crosswalk; coherence > 0.78.
Example C — Kink_Lab_RACK ⊕ BDSM_Club_Subculture ⊕ Events_Port
Net knobs: high risk weights; aftercare mandatory on flags
["Edge","Impact","Degradation","Public"].
Events plan: rooms Approach → Near → Afterglow; safety prompts
["confirm","repair","debrief"].
Audit: enforce protocol:"RACK" tags on relevant Eros_Node beats.
---
17.9 CLI / API (profiles & packs)
# list
eros overlay ls
# apply profile + cultural pack, then analyze scene
eros analyze scene_S040.txt \
--profile P.PowerReversal_Noire \
--cpack C.PostDigital_Parasocial \
--rail film \
--knobs [Link] \
--out [Link]
# inspect overlay trace & KPIs
eros pack inspect [Link] --sections overlay_trace,kpi
---
17.10 Test Matrix (sanity, deterministic)
Unit: motif triad ≤ 3; gate compliance w/ lead_min_beats.
Property: replay determinism (seed stable).
Scenario: audience pressure > 0.6 ⇒ confirm_lead extended.
Migration: adding new motif in C-pack does not break v1 schemas (lands in $defs
extension).
---
Delivery Manifest — Item 17 (Profiles + Cultural Packs)
Completed: overlay schema, 10 core profiles, 10 cultural packs, composition rules,
invariants, KPIs, worked compositions, CLI/API, test matrix.
Pending: optional Profile Authoring Guide (cookbook snippets), Overlay Linter.
Next queued: 18) KPIs/Telemetry & Observability or 18-alt) QA/Automation Harness.
Say “18” to proceed.
—FIXED
18) KPIs / Telemetry & Observability — EROS / Taboo (Analyze-Only, Explicit-
Analysis Enabled)
Contract: fictional domain; analysis-only; no graphic sexual prose. This section
defines what we measure, how we emit it, and how we watch it—from a single scene to
season rollups—so Psycho, Occult, and all Rails can trust the plan artifacts
without drift.
---
18.1 Purpose & Principles
Truth over vibes: every validator, curve fit, gate, and coach op produces
measurable signals.
Portable: telemetry rides inside each .[Link] and to a central timeseries
(optional).
Deterministic: same inputs + knobs + seed ⇒ same KPIs. Replay checks are first-
class.
Non-graphic: events/metrics never store surface explicit text; only structural
labels/tags.
---
18.2 Metric Taxonomy
Scene KPIs: per scene_id (immediate craft quality).
Episode KPIs: aggregation for episode_id.
Season KPIs: long-arc compliance & pacing.
Validator Counters: hard/soft errors and warnings (by code).
Handshake KPIs: Psycho/Occult exchange quality.
Rail-Readiness: adapter completeness for each consuming rail.
Metric names are [Link] on the wire; JSON keys shown below.
---
18.3 Scene KPIs (canonical set)
{
"scene_id":"S040",
"kpi":{
"[Link]":1.0, // 1.0 = no E_GATE_SKIP or
E_COOLDOWN_BREACH
"tension.rms_error":0.06, // vs §15 curve target
"tension.crest_amp":0.72, // normalized crest amplitude
"[Link]":1, // crests in scene (should match profile
cap)
"[Link]":0.18, // post - pre
"power.shift_rate":0.25, // |post-pre|
"[Link]":0.78, // Occult-weighted
"motif.active_count":3,
"[Link]":1.0, // required → present
"debrief.latency_scenes":0, // 0 = same scene
"risk.flags_count":2,
"public.audience_pressure":0.70, // if applicable
"distance.min_dwell.ok":1.0, // approach/near dwells satisfied
(1.0/0.0)
"[Link]":"sha256:…", // determinism checksum of artifacts
"[Link]":"S040.v003"
}
}
---
18.4 Episode / Season Rollups
{
"episode_id":"E05",
"rollup":{
"scenes":8,
"crest.per_episode":1, // cap respected?
"[Link]":0.98,
"[Link]":0.74,
"[Link]":0.12,
"aftermath.persistence_rate":0.92,
"[Link]":6,
"[Link]":0,
"[Link]":3
}
}
Season adds pacing envelopes (e.g., crest dispersion, arc payoff ratio for
Serialized rail).
---
18.5 Validator Counters (all hard/soft codes)
{
"validators":{
"hard":
{"E_GATE_SKIP":0,"E_COOLDOWN_BREACH":0,"E_CONSEQUENCE_ABSENT":0,"E_AGEGATE_MISSING"
:0},
"soft":{"E_CURVE_RMS_EXCEED":1,"E_MOTIF_OVERFLOW":0,"E_DISTANCE_RUSH":0}
}
}
---
18.6 Consent / Aftermath SLOs (service-level objectives)
[Link] ≥ 0.99 scene p95, episode mean ≥ 0.98.
[Link] = 1.0 when any high-risk flag ∈ {Edge, Public, Impact,
Degradation, Breath}.
debrief.latency_scenes ≤ 1 when Rupture consequence present.
Breach policy: if SLO fails, Coach auto-injects minimal diffs when strict_mode ∈
{HARD,BALANCED}.
---
18.7 Motif Coherence KPIs
[Link] (0–1), target from profile/pack.
[Link] ∈ {seed, echo, crest_sigil, aftermath_token}.
Alert: missing aftermath_token when binding motif (e.g., Knot) →
E_MOTIF_TAIL_MISSING.
---
18.8 Curve Quality KPIs
tension.rms_error ≤ knob.curve_fit.tension_rms_max.
[Link] ≥ knob.curve_fit.tail_len_min.
distance.min_dwell.ok = 1.0 ensures Approach/ Near dwell before Contact.
---
18.9 Risk Governance KPIs
risk.flags_count and risk.confirm_lead.delta_beats (extra beats demanded by flags).
[Link] boolean.
Policy dialed by profile: Kink_Lab_RACK raises weights; Public_Performance adds
confirm lead multiplier.
---
18.10 Age-Gate & Redaction KPIs
age_gate.present (per rail export).
pii.real_person_blocks (count of rejected inputs by scrubber).
[Link] (how often a rail asks for surface text →
E_RAIL_CONTRACT_VIOLATION).
---
18.11 Psycho / Occult Handshake KPIs
{
"psycho":{
"[Link]":0.73,
"[Link]":0.29,
"[Link]":0.42,
"[Link]":0.6
},
"occult":{
"[Link]":3,
"[Link]":0.04,
"warnings":0
}
}
---
18.12 Rail-Readiness KPIs
[Link] ∈ [0,1] per rail (all required fields filled).
[Link] (schema mismatch, missing age_gate, etc.).
export.latency_ms by rail.
---
18.13 Event Streams (OpenTelemetry-style)
Spans: [Link], [Link], [Link], [Link], [Link],
[Link].*
Attributes (common): scene_id, episode_id, profile, cpack, seed, pack_version,
strict_mode.
Events: [Link], [Link], [Link],
[Link]/occult, [Link].
---
18.14 Log Channels (structured, non-graphic)
[Link] — start/stop, profile/pack overlays.
[Link] — soft validators.
[Link] — hard validators; port violations.
[Link] — compliance summaries.
Format: JSON Lines; no surface explicit text; include correlation_id.
---
18.15 Storage & Retention
In-pack: [Link], overlay_trace.json, [Link], coach_ops.json.
Central TSDB (optional): push KPIs with (project_id, scene_id, pack_version)
labels.
Retention: artifacts 180d; rollups 365d. No surface text stored.
---
18.16 Dashboard Recipes (sketch)
Scene Quality: gate compliance, curve RMS, motif coherence, aftercare coverage.
Arc Health: trust climb, power shift dispersion, crest density vs cap.
Risk & Care: risk flags vs aftercare/debrief latencies.
Handshake: psycho arousal vs temperature ceiling hits; occult coherence deltas.
Determinism: replay hash match rate, pack version drift.
---
18.17 Alert Rules (suggested)
- name: consent-gate-breach
expr: gate_compliance < 1
for: 0m
labels: {severity: critical}
annotations: {summary: "Consent gate breach in {{scene_id}}"}
- name: aftermath-missing-on-crest
expr: consequence_present == 1 and aftermath_coverage < 1
labels: {severity: high}
- name: curve-rms-regression
expr: tension_rms_error > tension_rms_max
for: 5m
labels: {severity: medium}
---
18.18 CLI / API (telemetry)
eros kpi scene S040 --pack [Link]
eros kpi episode E05 --rollup
eros kpi season SE01 --pacing
eros audit S040 --validators --json
eros replay --seed 1337 --pack [Link] --check-hash
eros push-metrics [Link] --tsdb [Link]
---
18.19 [Link] (pack schema)
{
"_schema_version":"[Link].v1",
"scene":{"id":"S040","episode_id":"E05","season_id":"SE01"},
"knobs_ref":"sha256:…",
"profile":"P.PowerReversal_Noire",
"cultural_packs":["C.PostDigital_Parasocial"],
"kpi":{ /* §18.3 keys */ },
"validators":{ /* §18.5 */ },
"handshakes":{ /* §18.11 */ },
"rails":{ "film":{"completeness":1,"export_ms":121} },
"replay":{"hash":"sha256:…","seed":1337},
"timestamps":{"analyze_start":"…","analyze_end":"…"}
}
---
18.20 Sample Scene Telemetry (abbrev, non-graphic)
{
"scene":{"id":"S040","episode_id":"E05"},
"kpi":{
"[Link]":1.0,
"tension.rms_error":0.05,
"tension.crest_amp":0.71,
"[Link]":0.19,
"power.shift_rate":0.24,
"[Link]":0.79,
"[Link]":1.0,
"risk.flags_count":2,
"distance.min_dwell.ok":1.0
},
"validators":{"hard":{}, "soft":{"E_CURVE_RMS_EXCEED":1}},
"handshakes":{"psycho":{"arousal":0.72},"occult":{"[Link]":0.03}},
"rails":{"film":{"completeness":1,"export_ms":128}},
"replay":{"hash":"sha256:6c…","seed":1337}
}
---
18.21 Privacy / Security Invariants
No storage of surface explicit content.
No real-person names; PII scrubber counts only.
Age-gate flag required for any rail export capable of adult contexts.
All logs/events are structural; analysis artifacts only.
---
18.22 Test & Observability Harness
Unit: assert [Link]==1.0 on gold fixtures.
Property: seed replay reproduces [Link].
Scenario: inject Public flag ⇒ confirm lead increases (telemetry shows delta).
Chaos: drop Psycho response ⇒ fallback affects disabled; alert on handshake
timeout.
Load: 1K scenes batch — pack build p95 < 400ms; no DLQ overflow.
---
Delivery Manifest — Item 18 (KPIs / Telemetry & Observability)
Completed: metric taxonomy, scene/episode/season KPIs, validator counters, SLOs,
motif/curve/risk metrics, age-gate/PII signals, Psycho/Occult handshake KPIs, rail-
readiness, event/log schemas, storage/retention, dashboards, alerts, CLI/API, pack
schema, samples, privacy, tests.
Next queued: 19) QA / Automation Harness (gold fixtures, auto-coach, overlay
linter, regression gates) or 19-alt) REP-CHECK & Canon DB.
Say “19” or “19-alt” to continue.
—FIXED
19) QA / Automation Harness — EROS / Taboo (Analyze-Only, Explicit-Analysis
Enabled)
Contract: fictional domain; analysis-only; no graphic sexual prose. This section
defines the end-to-end quality system: fixtures, test runners, auto-repair
(“Coach”), linters, mutation/differential tests, chaos/perf, and release gates. All
artifacts remain structural (nodes, curves, tags), never surface-explicit text.
---
19.1 Objectives (what QA must prove)
Determinism: same inputs + knobs + overlays + seed ⇒ identical Eros_Node stream &
[Link].
Invariants: consent gates before escalation; aftermath persists when required; no
real-person names enter artifacts; age-gate present for adult rails; no graphic
surface emitted by EROS.
Interop: contracts with Psycho/Occult (§16.4) and every Rail Port (§16.5) are met.
Safety Telemetry: validator coverage ≥ 99% on gold fixtures; SLOs from §18.6 hold
under load.
Evolvability: schema/version upgrades preserve backward compatibility (adapters
pass).
---
19.2 Repo Layout (tests & fixtures)
/qa
/gold/ # canonical non-graphic fixtures
S001_gothic_slowburn.[Link]
S014_public_performance.[Link]
S021_power_reversal.[Link]
...
/packs/
[Link] # expected pack artifacts
...
/expect/
[Link]
[Link]
[Link]
/mocks/
[Link] # fixed affect
[Link] # fixed crosswalk
/linters/
[Link]
/schemas/
[Link]
[Link]
/scripts/
run_all.sh
diff_packs.py
---
19.3 Gold Fixtures (non-graphic, structural)
G1 SlowBurn_Gothic: long approach; motifs ["Veil","ThornRose"]; no public flags.
G2 Public_Performance: audience pressure; confirm_lead_multiplier in effect;
aftercare required.
G3 PowerReversal_Noire: role inversion planned; sharp crest; cool afterglow;
Reckoning aftermath.
G4 Kink_Lab_RACK: high-risk flags ["Edge","Impact"]; protocols tagged RACK; debrief
required.
G5 Serialized_Arc: eight scenes with crest density cap = 1/episode; persistent
trust climb.
All include expected: Nodes stream, Curves, Motifs, Aftermath, KPIs, Validators.
---
19.4 Test Runner (CLI/API)
# run one fixture
eros qa run --scene S014 --profile P.Public_Performance --cpack
C.PostDigital_Parasocial \
--seed 1337 --mocks qa/mocks --expect qa/expect/S014.* --out tmp/[Link]
# run suite
eros qa suite --gold qa/gold --profiles auto --cpacks auto --rails all --seed 1337
# compare packs (byte-stable)
eros qa diff-pack qa/packs/[Link] tmp/[Link]
Exit codes: 0 pass, 1 expectation mismatch, 2 schema error, 3 determinism failure.
---
19.5 Validator Matrix (hard/soft)
Hard (must be 0):
E_GATE_SKIP, E_COOLDOWN_BREACH, E_CONSEQUENCE_ABSENT, E_AGEGATE_MISSING,
E_RAIL_CONTRACT_VIOLATION, E_SURFACE_GRAPHIC_INPUT, E_PII_REALPERSON.
Soft (allowed but tracked):
E_CURVE_RMS_EXCEED, E_MOTIF_OVERFLOW, E_DISTANCE_RUSH, E_POSTTARGET_DRIFT,
E_AFTERCARE_LATENT.
Runner produces per-scene JSON:
{
"validators":{
"hard":{"E_GATE_SKIP":0,"E_AGEGATE_MISSING":0},
"soft":{"E_CURVE_RMS_EXCEED":1}
},
"status":"pass-soft"
}
---
19.6 Auto-Coach Loop (bounded self-repair)
When strict_mode ∈ {HARD,BALANCED} and SLO fails, the runner may invoke Coach
(§16.3.3):
1. Collect failing KPIs/validators.
2. Map to minimal diffs:
E_GATE_SKIP → insert_confirm_lead(beats=1)
E_CURVE_RMS_EXCEED → pad_approach(1) or extend_tail(1)
E_CONSEQUENCE_ABSENT → inject_aftermath_token()
3. Re-analyze; re-audit; cap at N=3 iterations.
4. Emit coach_ops.json and new pack_version.
{"apply":[
{"op":"insert_confirm_lead","params":{"beats":1}},
{"op":"extend_tail","params":{"beats":1}}
]}
If still failing → status fail-hard with actionable list (no prose).
---
19.7 Overlay Linter (profiles & cultural packs)
Validates P* and C* overlays before use:
Keys present, enums valid, knob ranges sane.
Conflicts flagged: e.g., crest_density_cap_per_episode:0 invalid.
Motif triad discipline: max_active ≤ 3.
Risk policy completeness: high-risk flags must define aftercare rule.
Age-gate hints present for any digital/parasocial exports.
eros linter overlay --file overlays/P.PowerReversal_Noire.json
Output: JSON with errors[], warnings[], and auto-fix suggestions.
---
19.8 Schema / Version Evolution Tests
Round-trip: v1 pack → upgrade → downgrade (shim) → compare core artifacts.
Forward-compat: consumer declares accept:["v1"] while producer emits v1.1 → adapter
shim engaged, tests must pass.
Breaking-change sentinel: major bump blocked unless [Link] provided &
passes suite.
---
19.9 Differential Testing (cross-profile, same scene)
Given a neutral scene, run across multiple Profiles/C-Packs and assert only
intended deltas change:
Curves shape family may change; gates must remain valid.
Motif coherence stays ≥ min(targets).
Aftercare present when any profile raises risk weight.
Runner emits a delta report:
{
"baseline":"P.Tender_Romance",
"compare":"P.PowerReversal_Noire",
"delta":{
"tension.crest_amp":"+0.17",
"confirm_lead.beats":"+1",
"[Link]":"= 1.0"
}
}
---
19.10 Mutation Testing (robustness)
Randomly perturb inputs/knobs within safe envelopes:
Drop a beat → expect E_DISTANCE_RUSH or down-rated coherence, not silent pass.
Remove a consent mark → expect E_GATE_SKIP (HARD).
Add extra motif → expect E_MOTIF_OVERFLOW or auto-prune if allowed.
Flip risk flags → confirm aftercare rule engages.
eros qa mutate --scene S014 --mutations 100 --budget 60s
Pass criteria: ≥ 95% mutations trigger some validator; 0% hard should silently
pass.
---
19.11 Chaos & Handshake Resilience
Psycho timeout: fall back to neutral affect; raise handshake_timeout.psycho.
Occult warning flood: cap at N warnings; still compute coherence with degraded
weights.
Bus backpressure: throttle publisher; ensure no DLQ overflow.
eros chaos --psycho-timeout --bus-slow --occult-warn=10
---
19.12 Performance & Load
Targets (per §16.9):
Pack build p50 ≤ 150ms/scene; p95 ≤ 400ms.
NodeStream first byte ≤ 50ms.
1K scenes batch throughput maintained; no validator starvation.
eros perf --scenes 1000 --concurrency 8 --profile P.Serialized_Arc_Control
Outputs histograms + flamegraph snapshot (no surface).
---
19.13 Rail Contract Tests (adapters)
For each rail, assert plan completeness and no surface pulls:
eros rail test --rail film --scene S040 --expect completeness=1 --deny
surface_fields
Comics: panel mapping present; splash OK; no text asks.
Film: blocking/lens/confirm lead present; no dialogue requests.
Games: gates/cooldowns present; quest hooks resolved.
Digital: schedule present; age_gate.adult_confirmed=true.
---
19.14 Redaction / PII Scrub Tests
Inputs with real-person names (or handles) → must fail before analysis:
eros qa pii --scene [Link]
Expected:
{"error":"E_PII_REALPERSON","hits":[{"span":"First Last","kind":"name"}]}
Company/studio categories allowed at adapter layer (outside EROS). QA asserts that
no real-person tokens appear in any pack artifact.
---
19.15 Age-Gate Enforcement Tests
Any rail capable of adult contexts must export with:
"age_gate":{"adult_confirmed":true}
Absent → E_AGEGATE_MISSING (HARD); runner confirms EROS still completes internal
analysis but blocks rail export. Telemetry from §18.10 must show the failure
counter.
---
19.16 Determinism Audit
Seed captured in pack; [Link] over Nodes/Curves/Motifs/Aftermath.
eros replay --seed <seed> --pack <pack> must match hash.
Non-determinism triggers E_REPLAY_MISMATCH with component blame
(parser/psycho/occult/adapter).
---
19.17 Coverage & Goals
Validator code paths: ≥ 95% line/branch on gold suite.
Overlay linter rules: 100% rule hit at least once.
Rail adapters: completeness=1.0 on gold.
Mutation detection rate ≥ 95%.
Chaos runs: no dead letters; graceful degrade.
Report emitted as qa/[Link].
---
19.18 CI / Release Gates
Pipeline:
1. Lint overlays → Schema validate → Gold suite → Mutation (quick set) → Rail tests
→ Perf smoke → Pack sign.
Release must meet:
All hard validators zero on gold.
SLOs (Consent/Aftercare) green.
Perf p95 within budget.
Determinism hash stable.
Version map updated; migration tests pass.
Tag: eros-vX.Y.Z with artifact attestation (sha256).
---
19.19 Developer Harness & Mocks
[Link]: fixed arousal/stress set.
[Link]: fixed crosswalk & weights.
[Link].*: assert no surface requests; verify age-gate presence.
eros mock up
eros mock down
---
19.20 Example QA Session (abbrev)
eros linter overlay --file overlays/P.Kink_Lab_RACK.json
eros qa run --scene S021 --profile P.PowerReversal_Noire --cpack
C.PostDigital_Parasocial --seed 42
# soft RMS exceed → auto-coach
eros qa apply-coach --scene S021 --budget 2
eros qa audit --scene S021 --validators --kpi
eros qa diff-pack qa/packs/[Link] tmp/[Link]
eros rail test --rail film --scene S021
eros replay --seed 42 --pack tmp/[Link] --check-hash
---
19.21 Extensibility (plug-ins)
New validators: register under [Link].*; must emit code + suggested coach
ops.
New rails: define [Link]; provide [Link] for contract
tests.
New overlays: linter rule templates auto-generated.
---
19.22 Documentation Artifacts (ship with pack)
[Link] — all codes w/ pass/fail.
coach_ops.json — attempted & applied diffs.
overlay_trace.json — merge audit of Profile/C-Pack/Knobs.
[Link] — KPIs (§18.19).
[Link] — seed/hash.
---
19.23 Governance & Auditability
All QA outputs are machine-verifiable; no narrative padding.
Audit log ([Link]) carries correlation IDs and timestamps.
Third-party verification: re-run gold suite with published seed/hashes.
---
19.24 What QA Never Does
Never emits or asks for graphic sexual prose.
Never stores surface text beyond the non-graphic scene source provided by the user.
Never ingests real-person identifiers; rejects early with structural errors.
---
19.25 Ready-to-Use QA Bundle
eros qa bootstrap --dest qa/ --with gold,mocks,linters,schemas
Creates a working skeleton with 5 gold scenes, mock handshakes, and CI config.
---
Delivery Manifest — Item 19 (QA / Automation Harness)
Completed: fixtures, runner, validators, auto-coach, overlay linter, schema/version
tests, differential & mutation tests, chaos/perf, rail contracts, PII/age-gate
tests, determinism, coverage, CI gates, mocks, docs, governance.
Next queued: 20) Fail-Safes (runtime kill-switches, circuit breakers, export
guards, redaction shields) or 19-alt) REP-CHECK & Canon DB (repeatability &
canonical example library).
Say “20” or “19-alt” to continue.
—FIXED
20) Fail-Safes — EROS / Taboo (Analyze-Only, Explicit-Analysis Enabled)
Contract: fictional domain; analysis-only; no graphic sexual prose. This section
defines runtime guards, circuit breakers, redaction shields, export gates, and
kill-switches so EROS remains deterministic, portable, and safe across
Psycho/Occult handshakes and all Rails. All artifacts are structural (nodes,
curves, tags, diffs); no surface-explicit text is ever produced by EROS.
---
20.1 Objectives & Threat Model
Goals: prevent policy breach, misrouting, or unsafe export; prefer isolate →
degrade → fail-closed.
Threat classes:
T1 Input: real-person identifiers; explicit surface text; under-age contexts;
scraping attempts.
T2 Config: knob/overlay misconfig; version skew; age-gate absent.
T3 Cross-Engine: Psycho/Occult timeouts, hostile payloads, warning floods.
T4 Rail: adapter requests surface prose; public export w/o age-gate; incomplete
plan.
T5 Observability/Storage: leaking surface text; unverifiable packs; nondeterminism.
---
20.2 Non-Negotiable Invariants (hard boundaries)
1. Analysis-only. EROS never emits graphic sexual prose.
2. Fictional domain only. Real-person names/handles rejected at ingest.
3. Age-gate required for any rail capable of adult contexts.
4. No scraping / no private media ingestion. File/bus inputs only.
5. Determinism: same inputs + knobs + overlays + seed ⇒ same [Link].
6. Consent first: escalation requires prior consent checkpoint (§9).
---
20.3 Circuit Breakers (triggers → actions)
Code Trigger (detected by) Action
E_SURFACE_GRAPHIC_INPUT Explicit surface text submitted to IngestPort Drop scene,
log hard, redact buffer, emit audit event
E_PII_REALPERSON PII scrub hits real-person tokens Reject ingest; zero
artifacts; return spans
E_AGEGATE_MISSING Rail export lacks adult_confirmed:true Block export, complete
internal analysis; raise hard
E_RAIL_CONTRACT_VIOLATION Rail requests surface text Deny fields, log hard,
return contract checklist
E_PACK_TAMPER Pack signature/hash mismatch Quarantine pack; no replay/export
E_HANDSHAKE_TIMEOUT.PSYCHO/occult No response within SLA Degrade to neutral
affect / cached crosswalk; raise soft
E_CURVE_RMS_EXCEED Curve fit exceeds budget Coach auto-diff (if allowed)
→ else soft warn
E_MOTIF_OVERFLOW >3 active motifs Auto-prune to top-coherence; soft warn
E_COOLDOWN_BREACH Escalation during cooldown Insert repair/confirm (if auto-
coach) or fail hard
E_GATE_SKIP Consent gate skipped Fail hard; propose insert_confirm_lead
All breakers emit structured events to [Link] / [Link] with correlation_id.
---
20.4 Redaction Shields (ingest layer)
Pipeline: tokenize → NER(Public-Only) → pattern lib → denylist/allowlist →
redact/abort.
{
"redaction":{
"reject_real_person_names":true,
"reject_handles":true,
"allow_company_categories":true,
"strip_urls":true
}
}
Outcome: on hit → E_PII_REALPERSON with spans; no partial artifacts are persisted.
---
20.5 Export Guards (per-rail)
A rail export must satisfy:
age_gate.adult_confirmed == true (when rail can surface adult contexts)
[Link] == 1.0 (schema-required keys present)
No surface pulls in adapter request (else E_RAIL_CONTRACT_VIOLATION)
Redaction contract enforced ("ban_surface":"graphic" in rail plans that accept
lexicon hints)
Flow: Analyze → Audit → Export Gate → Plan delivered. If gate fails, internal
analysis remains available; export is blocked with machine-readable reasons.
---
20.6 Kill-Switches (ops controls)
Global: EROS_KILL=true → deny new analyses/exports; permit pack inspection only.
Per-project: [Link][project_id]=on (in policy store).
Per-rail: [Link]=["digital","events"].
Per-validator hardening: upgrade selected soft codes to hard for a run (e.g.,
audits).
CLI:
eros ops kill --global on
eros ops kill --rail digital on
eros ops status
---
20.7 Rate Limits & Flow Control
Ingress: max_scenes_per_minute, max_bytes_per_scene, max_beats.
Bus: in-flight cap = 256 messages/scene; beyond → throttle (1 msg/ms).
Exports: per-rail QPS caps; DLQ for failed adapter writes with backoff.
Policy (YAML):
ratelimit:
ingest_scenes_per_min: 120
scene_bytes_max: 512k
bus_inflight_cap: 256
export_qps:
film: 50
digital: 20
---
20.8 Timeouts & Retries (handshakes)
Psycho/Occult request timeout: 250ms p50 / 800ms cutoff.
1 retry with jitter; then neutral fallback + handshake_timeout.* telemetry.
No cascading retries (prevents thundering herd).
---
20.9 Tamper Evidence & Auth
Pack signing: HMAC-SHA256 over [Link]|[Link]|[Link]|[Link]|
[Link].
Replay hash stored under [Link].
Version pin: consumer declares accepted schemas (accept:["v1"]); producer emits
shims.
CLI:
eros pack sign [Link] --key KEY
eros pack verify [Link] --key KEY
---
20.10 Policy Modes (dialed safety)
HARD: auto-coach enabled for consent/curve; any residual breach ⇒ fail export.
BALANCED: auto-coach attempts ≤2; soft warnings tolerated.
SOFT: report only; no auto-diffs; exports still gated by age/contract.
{"strict_mode":"HARD"}
---
20.11 Degrade Modes (graceful fallback)
Handshake degrade: neutral affect / cached motif crosswalk.
Export degrade: block only failing rails; keep others available.
Analysis continue: even when export blocked (e.g., missing age-gate).
Telemetry annotate: degraded:true with reason.
---
20.12 Sandbox & Dry-Run
Sandbox: run full analysis + audit, no rail export.
Shadow export: generate rail plans to a shadow sink for contract testing.
eros run --sandbox
eros export --rail film --shadow
---
20.13 Fault Observability
Events (JSON Lines):
[Link]|soft with code, beat, suggestion.
[Link] with breaker code.
[Link] with gate list.
[Link]|degrade with SLA deltas.
Dash KPIs link to §18: gate compliance, DLQ depth, handshake timeouts, replay
mismatch rate.
---
20.14 Failure Playbooks (quick actions)
Consent breach:
eros qa audit --scene S021 --validators
eros coach apply --scene S021 --op insert_confirm_lead --beats 1
Age-gate missing (digital):
eros rail test --rail digital --check agegate
eros export --rail digital --age_gate adult_confirmed=true
Pack tamper:
eros pack verify S040...zip # expect fail
eros analyze --seed <seed> --rebuild
---
20.15 Safety Unit & E2E Gates (wired to §19)
Unit: breakers fire on synthetic hits; outputs audited.
E2E: gold fixtures must pass with zero hard codes.
Mutation: >95% perturbations trigger some validator; no silent pass of hard
breaches.
Chaos: handshake timeouts do not crash export path; proper degrade marks set.
---
20.16 Config & Defaults (policy file)
policy:
strict_mode: HARD
age_gate_required_rails: [digital, events, comics, film, animation, games]
ban_surface_graphic: true
pii:
reject_real_person_names: true
reject_handles: true
export_guards:
require_completeness: true
handshake:
psycho_timeout_ms: 800
occult_timeout_ms: 800
ratelimit:
ingest_scenes_per_min: 120
scene_bytes_max: 524288
logging:
level: info
redact_surface: true
---
20.17 Worked Scenarios (structural, non-graphic)
S1 Real-person name in input → E_PII_REALPERSON (hard). No artifacts; spans
returned for edit.
S2 Digital export w/o age-gate → internal analysis OK; export blocked
E_AGEGATE_MISSING; dashboard red.
S3 Film rail asks for dialogue text → E_RAIL_CONTRACT_VIOLATION; contract checklist
returned; adapter must switch to plan fields only.
S4 Psycho timeout → neutral affect; handshake_timeout.psycho soft; KPIs show
degrade; export continues.
S5 Consent gate skipped → E_GATE_SKIP hard; auto-coach inserts confirm lead
(HARD/BALANCED), or export fails.
---
20.18 Cross-Engine Containment
Schema boundary: Psycho/Occult inputs/outputs validated; unknown fields dropped.
Warning flood cap: Occult warnings capped; remaining summarized.
Affect gain clamp: Psycho gains clamped to knob envelope; cannot push temp over
ceiling.
---
20.19 Privacy & Minimization
No storage of surface explicit text; artifacts are structures only.
PII scrub count and types only; no raw spans outside immediate reject response.
Retention: packs 180d; rollups 365d; logs redacted; seeds hashed in telemetry.
---
20.20 Recovery & Resume
Resume export: once age-gate fixed, re-export from same pack version (idempotent).
Rebuild: when tampered, re-analyze with locked seed; hashes must match.
Overlay rollback: previous overlay bundle referenced in overlay_trace.json.
---
20.21 CLI (ops guards)
eros ops status
eros ops kill --global on
eros ops policy --set strict_mode=HARD
eros audit --scene S040 --validators
eros export --rail film --age_gate adult_confirmed=true
eros pack verify [Link] --key KEY
---
20.22 Error/Breaker Glossary
Hard: E_PII_REALPERSON, E_SURFACE_GRAPHIC_INPUT, E_AGEGATE_MISSING, E_GATE_SKIP,
E_COOLDOWN_BREACH, E_RAIL_CONTRACT_VIOLATION, E_PACK_TAMPER.
Soft: E_CURVE_RMS_EXCEED, E_MOTIF_OVERFLOW, E_DISTANCE_RUSH, E_POSTTARGET_DRIFT,
E_AFTERCARE_LATENT, E_HANDSHAKE_TIMEOUT.*.
---
Delivery Manifest — Item 20 (Fail-Safes)
Completed: invariants, circuit breakers, redaction shields, export guards, kill-
switches, rate/timeout controls, tamper-evidence, policy modes, degrade paths,
sandboxing, fault telemetry, playbooks, safety tests, config defaults, scenarios,
containment, privacy, recovery, CLI, code glossary.
Next queued: 21) Output Hierarchy (render order of artifacts + pack layout recap)
or 19-alt) REP-CHECK & Canon DB (repeatability library + canonical non-graphic
examples).
Say “21” or “19-alt” to continue.
—FIXED
21) Output Hierarchy — EROS / Taboo (Analyze-Only, Explicit-Analysis Enabled)
Contract: fictional domain; analysis-only; no graphic sexual prose. This section
defines the precise render order, artifact shapes, pack layout, and visibility
tiers so every downstream engine (Psycho, Occult) and every Rail
(Comics/Film/Theater/Lit/Animation/Games/Events/Oral/Serialized/Culinary/Music-
Vocal/Music-NonVocal/Visual/Digital) receives deterministic, portable structures.
---
21.1 Layered Output Model (top→bottom; consume in order)
L0: Guard Trace (pre-analysis)
ingest.redaction_report.json — PII/real-person/URL hits (spans + reasons), zero
surface echo.
ingest.policy_snapshot.json — active policy knobs (age-gate required rails,
strict_mode, ban_surface_graphic).
L1: Scene Graph Core
[Link] — ordered Eros_Node stream (beat-granular).
[Link] — Tension_Curve, Trust_Gradient, Emotional_Temperature.
[Link] — Power_Dynamic_Index (pre→post), Motif_Coherence.
L2: Taxonomies & Tags
[Link] — per-beat Act_Taxonomy (neutral category labels).
[Link] — per-beat BDSM_Taxonomy (type/protocol/tools/checkpoints).
[Link] — active motif triad + lifecycle tokens
(seed/echo/crest_sigil/aftermath_token).
L3: Integrity & Aftermath
aftermath_report.json — state deltas + integrity checks (consent continuity,
boundary respected, cause-effect).
[Link] — hard/soft codes with beat refs; zero surface content.
coach_ops.json — minimal diffs proposed/applied (if strict_mode != SOFT).
L4: Plans for Rails (analysis→plan; no surface pulls)
[Link] / [Link] / … — adapter-specific plans
(panels/shots/blocking/quest loops/parasocial schedules) with age_gate field where
applicable.
[Link] — multi-episode envelope (crest dispersion, payoff ratios).
All plans must pass [Link]==1.0.
L5: Handshakes
[Link] — affect summary used (arousal/stress/soothing + gain
clamps).
[Link] — motif→archetype crosswalk + coherence deltas.
L6: Telemetry & Replay
[Link] — KPIs (§18) + validator counters + export readiness per rail.
[Link] — seed + [Link] over L1–L4 to guarantee determinism.
L7: Overlay Trace & Config
overlay_trace.json — exact merge of Profile + Cultural Pack + Knobs (precedence
§15.15).
[Link] — effective runtime policy (timeouts, rate limits, age-gate rails).
L8: Pack Manifest & Signatures
[Link] — file list, sizes, SHA256 for each artifact, schema versions.
[Link] — pack HMAC/signing metadata (tamper-evidence).
> Consumption rule: Downstream engines should never read past a failed layer. If L3
fails on a hard code, L4+ exports are blocked but L1–L2 remain available for
debugging.
---
21.2 Deterministic Ordering & IDs
Scene order: Scene_ID lexical; within scene, Beat_ID 0…N.
Stable IDs: Scene_ID (caller-supplied), Beat_ID (parser enumerates), Pack_Version
(monotone).
Sort keys:
[Link] sorted by (Scene_ID asc, Beat_ID asc).
[Link] / [Link] mirror the same order (one-to-one with Node beats).
Timestamps: analysis start/end monotonic; no wall-clock baked into hashes.
---
21.3 Minimal Wire Contracts (schemas)
Eros_Node ([Link]; one JSON per line):
{
"_schema":"[Link].v1",
"scene_id":"S040",
"beat_id":12,
"desire_type":"PowerReversal",
"initiator_role":"Responder",
"consent_state":"Explicit",
"power_balance":{"pre":[0.30,0.70],"post":[0.55,0.45]},
"distance":"Near",
"tension_curve_step":"crest",
"emotional_temperature":"hot",
"trust_gradient":{"pre":0.41,"post":0.53},
"symbolic_motifs":["KeyLock","Mirror"],
"boundary_conditions":["safeword_ack"],
"consequence_vector":"Transformation",
"notes":"structural commentary only; non-graphic"
}
[Link] (aligned to beats):
{
"_schema":"[Link].v1",
"scene_id":"S040",
"beat_id":12,
"category":"Roleplay",
"role_map":"Sub->Initiator",
"protection":"None",
"risk_flags":["Public"]
}
[Link]:
{
"_schema":"[Link].v1",
"scene_id":"S040",
"beat_id":12,
"type":"Submission",
"protocol":"RACK",
"tools":["mask","rope"],
"consent_checkpoint":"Explicit"
}
aftermath_report.json:
{
"_schema":"[Link].v1",
"scene_id":"S040",
"state_changes":{
"power_balance":{"from":[0.30,0.70],"to":[0.55,0.45]},
"trust_gradient":{"from":0.41,"to":0.58},
"desire_type":{"from":"Forbidden","to":"PowerReversal"}
},
"integrity_checks":{
"consent_continuity":"pass",
"boundary_respected":"pass",
"cause_effect_chain":"solid"
},
"fix_suggestions":[]
}
---
21.4 Pack Layout (.[Link])
[Link]
├─ L0_ingest/
│ ├─ ingest.redaction_report.json
│ └─ ingest.policy_snapshot.json
├─ L1_core/
│ ├─ [Link]
│ ├─ [Link]
│ └─ [Link]
├─ L2_taxonomy/
│ ├─ [Link]
│ ├─ [Link]
│ └─ [Link]
├─ L3_integrity/
│ ├─ aftermath_report.json
│ ├─ [Link]
│ └─ coach_ops.json
├─ L4_plans/
│ ├─ [Link]
│ ├─ [Link]
│ ├─ [Link]
│ ├─ [Link]
│ ├─ [Link]
│ └─ [Link]
├─ L5_handshakes/
│ ├─ [Link]
│ └─ [Link]
├─ L6_telemetry/
│ ├─ [Link]
│ └─ [Link]
├─ L7_overlays/
│ ├─ overlay_trace.json
│ └─ [Link]
├─ L8_meta/
│ ├─ [Link]
│ └─ [Link]
Manifest example:
{
"_schema":"[Link].v1",
"scene_id":"S040",
"pack_version":"S040.v003",
"files":[
{"path":"L1_core/[Link]","sha256":"…","bytes":12437},
{"path":"L3_integrity/[Link]","sha256":"…","bytes":792}
],
"schemas":{
"node":"[Link].v1",
"act":"[Link].v1",
"bdsm":"[Link].v1",
"aftermath":"[Link].v1",
"telemetry":"[Link].v1"
}
}
---
21.5 Visibility Tiers (who sees what)
Author Tier (dev/creator): L1–L4, L6–L8.
Rail Adapters (renderers): L4 only (+ age_gate check), read-only.
Auditors/QA: L0, L3, L6–L8.
Cross-Engines:
Psycho reads [Link] + [Link] (selected fields); writes
[Link].
Occult reads [Link]; writes [Link].
Never exposed: surface explicit prose (EROS never emits it).
---
21.6 Export Rules (per rail)
Each plan.<rail>.json must include:
{
"_schema":"[Link].v1",
"completeness":1.0,
"age_gate":{"adult_confirmed":true},
"beats":[
{"beat_id":10,"shot":"MS locked","blocking":"approach","confirm_lead":1},
{"beat_id":12,"shot":"CU profile","blocking":"crest","cooldown":2}
],
"risk_policy":{"aftercare_required":true},
"notes":"no surface pulls; structural only"
}
Adapters requesting surface text → E_RAIL_CONTRACT_VIOLATION (blocked by §20.5).
---
21.7 Merge & Precedence Recap (why the order matters)
When Profiles (P*) and Cultural Packs (C*) bias outputs, only knob/ontology biases
change; hierarchy is preserved:
Consent > Aftermath > Role > Curves > Motifs > Temperature
Consent/Aftermath can block exports even if curves “look good.”
Motif triad capped (≤3) regardless of pack; overflow triggers auto-prune (§20.3).
---
21.8 Diff & Versioning Semantics
Atomicity: L1–L4 are one commit (pack_version).
Diff rules: only L1–L4 changes bump pack_version; L6 telemetry bumps [Link].
Replay stability: [Link] covers L1–L4; changes in L6+ don’t alter replay hash.
Breaking schema: requires shim and QA pass (§19.8).
---
21.9 UI Render Order (recommended)
1. Integrity banner: [Link] hard=0? show green; else block exports.
2. Curves panel: tension/trust; click to reveal beat-aligned nodes.
3. Power/Consent panel: pre→post vectors; checkpoints timeline.
4. Motif triad: lifecycle chips; coherence score.
5. Coach suggestions: one-click apply (structural ops only).
6. Rail cards: completeness + age-gate status; export buttons per rail.
7. Telemetry footer: KPIs snapshot; replay hash & seed.
---
21.10 API / CLI (artifact pulls)
eros pack tree [Link]
eros get nodes --pack S040 --out [Link]
eros get plan --rail film --pack S040
eros export --rail games --pack S040 --age_gate adult_confirmed=true
eros diff --old S040.v002 --new S040.v003 --scope L1-L4
---
21.11 Cross-Engine Field Map (ports)
To Psycho: {scene_id, beat_id, tension_step, temperature, trust_pre, trust_post}
From Psycho: {[Link], [Link], [Link], gain_applied} →
influences curve repairs (Coach).
To Occult: {scene_id, motifs_active[], motif_lifecycle}
From Occult: {[Link], archetype_map[]} → motif prune suggestions.
All exchanges logged in L5; no surface text.
---
21.12 Guardrails in Hierarchy (fail-closed)
If L3 hard-fails (e.g., E_GATE_SKIP), L4 is withheld; telemetry marks
exportable:false.
If age-gate missing on a rail, plan remains local; plan.* not emitted to pack until
fixed.
If handshake timeouts, hierarchy remains intact; L5 shows degrade; L4 exports
continue with neutral affect.
---
21.13 Example End-to-End (abbrev)
Ingest fictional scene → L0 redaction OK → L1/L2 generated → L3 integrity pass
(aftercare present) → L4 film plan completeness=1.0 + age_gate.adult_confirmed=true
→ L5 handshakes OK → L6 telemetry green ([Link]=1.0) → L7 overlay trace
captured → L8 signed.
---
21.14 What the Hierarchy Explicitly Forbids
Any artifact that contains graphic sexual prose.
Real-person identifiers inside any file.
Rail adapters requesting surface text from EROS.
Violations raise breakers from §20.3 and block packing/export.
---
Delivery Manifest — Item 21 (Output Hierarchy)
Completed: layered model (L0–L8), deterministic ordering/IDs, wire schemas, pack
layout, manifest/signatures, visibility tiers, rail export contracts, precedence
recap, diff/versioning semantics, UI render order, CLI/API, cross-engine maps,
fail-closed rules, worked example, forbiddance list.
Next queued: 22) REP-CHECK & Canon DB (repeatability library + canonical non-
graphic examples) or 22-alt) Scene Lab & Fusion (multi-rail sandbox, profile/c-pack
blending, A/B planners).
Say “22” or “22-alt” to continue.
—FIXED
22) REP-CHECK & Canon DB — EROS / Taboo (Analyze-Only, Explicit-Analysis Enabled)
Contract: fictional domain; analysis-only; no graphic sexual prose. This section
defines the repeatability system (“REP-CHECK”) and the Canon DB (a curated, non-
graphic, canonical library of test scenes and arcs). The goal is to guarantee
deterministic, portable analysis with rich coverage across styles, risks, and
cultures—while remaining surface-clean and connectable to Psycho/Occult and all
Rails.
---
22.1 Goals (why this exists)
Repeatability: same inputs/overlays/seed ⇒ same Eros_Node stream & [Link].
Comparability: consistent KPIs/validators so creators can measure craft deltas, not
noise.
Coverage: canonical fixtures span desire types, consent paths, risk flags, and rail
adapters.
Safety by design: library is fictional, non-graphic, scrubbed for PII; includes
age-gate hints for any rail export.
Interoperability: artifacts align to §21 hierarchy and port cleanly to
Psycho/Occult (§16) and QA (§19).
---
22.2 Components
Canon DB: curated library of non-graphic scene sources + expected packs (L1–L4),
telemetry (L6), overlays trace (L7).
REP-CHECK Runner: deterministic replay tool that verifies hash stability and KPI
tolerances.
Curator Toolkit: lint/PII scrub, overlay validator, motif triad checker, consent
timeline visualizer.
Diff & Drift Engine: compares new outputs to canonical expectations; flags any
schema/semantic drift.
---
22.3 Canon DB Repository Layout
/canon
/sources/ # non-graphic fictional scene texts & arc outlines
S001_slowburn_gothic.txt
S014_public_performance.txt
S021_power_reversal.txt
…
/packs/ # signed expected artifacts (per §21)
[Link]
[Link]
…
/meta/ # scene cards (JSON), overlay links, notes
[Link]
…
/overlays/ # pinned Profiles & Cultural Packs used by each
fixture
P.SlowBurn_Gothic.json
C.Gothic_Europe.json
/expect/ # canonical KPIs/validators for REP-CHECK
[Link]
[Link]
/[Link] # registry of scenes, tags, versions, hashes
---
22.4 Scene Card Schema (*.[Link])
{
"_schema":"[Link].v1",
"scene_id":"S014",
"title":"Public Performance (Fictional)",
"synopsis":"Non-graphic description: audience presence, masked identity,
negotiated crest, aftercare.",
"desire_types":["Play","PowerReversal"],
"risk_flags":["Public","Impact"],
"consent_path":["Sought","Explicit","Adjusted","Reaffirmed"],
"motifs":["Veil","Mirror","Knot"],
"profile":"P.Public_Performance",
"cultural_packs":["C.PostDigital_Parasocial"],
"rails_ready":["film","comics","digital"],
"age_gate_required":true,
"kpi_targets":{
"[Link]":1.0,
"tension.rms_error_max":0.08,
"motif.coherence_min":0.70,
"[Link]":1.0
},
"notes":"All content fictional; no surface-explicit text."
}
---
22.5 Canon Coverage Matrix (minimum set)
Desire Types: Longing / Devotion / Forbidden / PowerReversal / Play / RitualUnion /
Redemption / Curiosity / Possession / Surrender.
Consent Paths: Implicit→Sought→Explicit / Explicit→Adjusted→Reaffirmed /
Explicit→Revoked (with Repair)→Reaffirmed.
Risk Flags: none / Public / Impact / Sensation / Edge / Degradation / Breath
(fictional analysis only).
Cadences: SlowBurn / Pulse / Surge / Stutter / Crest / Afterglow.
Motif Triads: (Veil, ThornRose) / (Mirror, KeyLock) / (Knot, CrownCollar) /
(HeatIce, HungerFast).
Rails: film / comics / literature / theater / animation / games / events /
digital / serialized.
Cultural Packs: Gothic / Modernist / Latinx-Baroque / East-Asian Court / West-
African Griot / Post-Digital Parasocial / Urban Noir / Queer Ballroom / Desert Epic
/ Arctic Liminal.
> Each combination exists as at least one Canon scene or mini-arc, keeping triads
≤3 to preserve coherence (§12).
---
22.6 Building a Canon Fixture (curation rules)
1. Source authoring: non-graphic, fictional prose outline (beats, stakes,
boundaries, consent checkpoints).
2. Overlay pinning: choose Profile + Cultural Pack; store copies in /overlays/.
3. Analysis pass: run EROS with --seed CONST; capture pack; sign it (§20.9).
4. Expectation set: export KPIs + validators; write *.[Link], *.[Link].
5. Review: curator signs off (two-person rule); PII scrub report = clean; age-gate
hints set where needed.
6. Registry add: update /canon/[Link] with scene_id, hashes, versions.
---
22.7 REP-CHECK Runner (CLI/API)
# run repeatability for one scene
eros rep scene S014 --seed 1337 --expect canon/expect/[Link] --pack
canon/packs/[Link]
# run full canon suite
eros rep suite --index canon/[Link] --seed 1337
# show drift report
eros rep drift --scene S014 --new tmp/[Link] --old
canon/packs/[Link]
Pass criteria: [Link] match; KPIs within tolerance; zero hard validator
deltas.
---
22.8 KPI Tolerances (defaults; override per scene)
tension.rms_error ≤ expected + 0.01
[Link] ≥ expected − 0.02
[Link] ± 0.03
power.shift_rate ± 0.03
[Link] must equal 1.0 (no tolerance)
[Link] must equal 1.0 when any high-risk flag present
Tolerances live in the scene card (kpi_targets) and are enforced by REP-CHECK.
---
22.9 Canon Mini-Arcs (serialized fixtures)
Eight-scene arcs modeling season behavior:
Arc A: SlowBurn→Crest→Reckoning→Repair
Arc B: Public Tease→Crest (cap=1/episode)→Afterglow→State Change
Each arc includes per-scene packs and an [Link] envelope (crest
dispersion, payoff ratios).
---
22.10 Edge & Stress Suites (robustness)
Fixtures intentionally stress validators:
Gate Skip Probe: missing explicit checkpoint before escalation → expect E_GATE_SKIP
(HARD).
Motif Flood: 5 motifs proposed → auto-prune to top-3; E_MOTIF_OVERFLOW (SOFT).
Cooldown Breach: crest too early → coach injects confirm lead or returns
E_COOLDOWN_BREACH.
Public Flag Probe: demands confirm lead multiplier and aftercare; absence triggers
E_AFTERCARE_LATENT. All edge fixtures remain non-graphic; they exist to exercise
structure and policy.
---
22.11 Canon “Scene Cards” — Examples (abbrev, non-graphic)
S001 SlowBurn Gothic (Fictional)
Desire: Longing / Devotion
Consent Path: Implicit→Sought→Explicit
Risk: none
Motifs: Veil, ThornRose
Targets: tension.rms_error≤0.06, [Link]≥0.75, [Link]=1.0
S021 Power Reversal Noir (Fictional)
Desire: PowerReversal / Redemption
Consent Path: Explicit→Adjusted→Reaffirmed
Risk: Sensation
Motifs: Mirror, KeyLock, Knot
Targets: crest_amp ≥ 0.70; aftercare required if risk escalates.
(Full cards live in /canon/meta/*.)
---
22.12 Canon DB API (read-only)
GET /canon/index # list scenes + hashes + overlays
GET /canon/scene/{id}/card # returns *.[Link]
GET /canon/scene/{id}/pack # streams .[Link]
GET /canon/scene/{id}/expect # KPIs + validators expectations
Auth: local file, or signed bundle; packs are HMAC-signed (see §20.9).
---
22.13 Drift Detection & Reporting
eros rep drift computes:
Schema drift: mismatched versions; missing fields.
Semantic drift: KPI out of tolerance; validator code changes.
Replay drift: [Link] mismatch (determinism breach).
Output includes blame hints: parser, overlay merge, Psycho/Occult handshake,
adapter layer.
---
22.14 Redaction & PII Guard (Canon ingestion)
All sources pass NER(Public-Only) + pattern scrub; real-person identifiers
rejected.
Company/studio categories permitted only at adapter layer; Canon sources avoid
proper nouns.
Age-gate flag stored in cards for rails that could surface adult contexts; exports
blocked if missing (§20.5).
---
22.15 Versioning & Migration
Canon version: [Link] in /canon/[Link].
Pack schema pins: each pack states its _schema versions; shims supplied for minor
bumps (§19.8).
Migration: curator runs eros canon migrate to regenerate packs when knobs/overlays
evolve; REP-CHECK must pass.
---
22.16 Curation Workflow (operators)
eros canon add --scene S040 --source sources/[Link] --profile P.Kink_Lab_RACK --
cpack C.Urban_Noir
eros analyze --seed 1337 --out packs/[Link]
eros rep bake --scene S040 --expect expect/[Link]
eros canon sign --scene S040
eros canon publish --scene S040 --index canon/[Link]
Two-person signoff required; CI runs REP-CHECK suite before publish.
---
22.17 Bias & Coverage Audits
Automated scans on Canon DB:
Desire distribution roughly uniform across types.
Consent paths include revocation/repair cases (not just smooth climbs).
Risk flags covered without over-indexing any one flag.
Cultural packs rotated; motif triads diversified.
Emit [Link] with gaps highlighted for curators.
---
22.18 Learning-Safe Posture (no model training here)
Canon DB is for runtime QA and examples, not for ML training. To avoid leakage:
License headers declare analysis-only usage.
Packs contain structures only (no surface text beyond non-graphic sources).
Seeds and hashes published for third-party verification, not dataset reuse.
---
22.19 Canon + Rails (adapter checks)
For each scene with rails_ready entries, REP-CHECK verifies:
plan.<rail>.json completeness = 1.0
age_gate.adult_confirmed=true for adult-capable rails
No surface pulls in adapters (else E_RAIL_CONTRACT_VIOLATION)
Psycho/Occult handshakes recorded (or degraded neutral) with KPIs in tolerance
---
22.20 Examples: Expected KPI Snippets (abbrev)
// S014 Public Performance (expect)
{
"[Link]": 1.0,
"tension.rms_error": {"lte": 0.08},
"[Link]": {"gte": 0.70},
"risk.flags_count": 2,
"[Link]": 1.0
}
// S001 SlowBurn Gothic (expect)
{
"[Link]": 1.0,
"tension.rms_error": {"lte": 0.06},
"[Link]": {"gte": 0.10},
"motif.active_count": 2
}
---
22.21 Determinism & Seeds
Canon scenes pin a seed; REP-CHECK replays with the same seed and asserts equality
of [Link].
Seed changes must be recorded; any change triggers full drift review and pack re-
sign.
---
22.22 Governance & Audit
Every pack signed; every publish logged with correlation_id, timestamps, curator
IDs.
Audit trail includes: redaction report (L0), overlay trace (L7), telemetry snapshot
(L6).
Third-party verifiers can replay with published seeds/hashes to validate claims.
---
22.23 Failure Playbooks (REP-CHECK)
Hash mismatch: re-analyze with pinned overlays; if still mismatched, bisect
Psycho/Occult handshakes; fall back to mocks.
KPI out of tolerance: run Coach in BALANCED; if metrics recover, log as auto-
repair; else open drift ticket.
Validator regression: halt publish; require fix or justify spec change with
migration plan.
---
22.24 Minimal API for External Tools
POST /rep/check { "scene_id":"S014","seed":1337 }
→ { "status":"pass","hash":"sha256:…","kpi_ok":true,"validators_hard":0 }
GET /canon/coverage
→ { "desire_hist":{"Longing":7,"PowerReversal":8,...}, "gaps":
["RitualUnion+Public"] }
---
22.25 Privacy & Safety Invariants (Canon DB)
No real-person names/handles anywhere.
No graphic sexual prose in sources or artifacts.
Age-gate flags present for adult-capable rail plans.
Artifacts are structures only; non-graphic text sources stored for analysis, not
publication.
---
Delivery Manifest — Item 22 (REP-CHECK & Canon DB)
Completed: repo layout, scene card schema, coverage matrix, curation rules, REP-
CHECK runner, KPI tolerances, mini-arcs, edge/stress suites, API/CLI, drift
detection, PII/redaction policy, versioning/migration, curator workflow,
bias/coverage audits, rails checks, determinism/seed policy, governance/audit,
failure playbooks, privacy invariants.
Next queued: 23) Scene Lab & Fusion (multi-rail sandbox, profile/c-pack blending,
A/B planners) or 23-alt) Delivery Pack (build & distribution presets for teams).
Say “23” or “23-alt” to continue.
—FIXED
23) Scene Lab & Fusion — EROS / Taboo (Analyze-Only, Explicit-Analysis Enabled)
Contract: fictional domain; analysis-only; no graphic sexual prose. Scene Lab is a
sandbox for experimenting with profiles, cultural packs, and rail plans. Fusion
blends overlays (Profile × Cultural Pack × Knobs) and runs A/B/MVT planners to
compare structures (nodes, curves, tags) under different settings. All outputs
remain structural; EROS never emits explicit surface text.
---
23.1 Purpose (what the Lab is for)
Design: rapidly shape tension/consent/power arcs without touching surface prose.
Compare: A/B/MVT systemic choices (e.g., SlowBurn vs PowerReversal) with KPI
deltas.
Fuse: combine Profile + Cultural Pack + Knob overlays with strict precedence &
caps.
Preview: see multi-rail plans (film/comics/games/digital/…) for the same analysis.
Guard: enforce consent & age-gates; block any rail requesting surface text.
---
23.2 Architecture (modules)
Session Core: holds source (non-graphic), overlays, seed, and live knobs.
Fusion Engine: resolves Profile/C-Pack blends into an effective overlay
(overlay_trace.json).
Planner Rack: runs A/B/MVT experiments; collects KPIs/validators.
Rail Previewers: renders plans (not prose) for each adapter
(film/comics/games/etc.).
Handshakes Hub: Psycho/Occult mocked or live with timeouts & degrade (§20.8).
Telemetry Spine: streams KPIs and validator hits to the Lab UI & [Link].
---
23.3 Session Object (schema)
{
"_schema":"[Link].v1",
"session_id":"LAB-7F2A",
"scene_id":"S040",
"seed":1337,
"source_ref":"canon/sources/[Link]",
"profile":"P.PowerReversal_Noire",
"c_packs":["C.PostDigital_Parasocial","C.Urban_Noir"],
"knobs":{
"motif_limit":3,
"confirm_lead_multiplier":1,
"crest_density_cap_per_episode":1
},
"strict_mode":"HARD",
"rails":["film","comics","digital","games"],
"age_gate":{"adult_confirmed":true}
}
---
23.4 Fusion Model (how overlays blend)
Precedence: Knobs > Profile > Cultural Packs.
Commutative set-unions for additive lists; last-wins for scalars; caps enforced:
Motif triad cap ≤ 3 (auto-prune highest-coherence).
Crest density cap respected in serialized contexts.
Temperature ceiling cannot be raised beyond session policy.
Fusion Matrix (example):
{
"_schema":"[Link].v1",
"base":"P.PowerReversal_Noire",
"applied":["C.PostDigital_Parasocial","C.Urban_Noir"],
"resolved":{
"curve_family_bias":"Surge",
"confirm_lead_multiplier":1,
"public_flag_policy":"require_aftercare",
"motif_candidates":["Mirror","KeyLock","Knot","Veil"],
"motif_active":["Mirror","KeyLock","Knot"] // triad cap enforces
}
}
---
23.5 A/B & Multivariate Planners
Define experiments as overlay deltas with shared inputs/seed:
{
"_schema":"[Link].v1",
"name":"AB_PowerReversal_vs_SlowBurn",
"arms":[
{"id":"A","profile":"P.PowerReversal_Noire","c_packs":["C.Urban_Noir"]},
{"id":"B","profile":"P.SlowBurn_Gothic","c_packs":["C.Gothic_Europe"]}
],
"metrics":
["tension.rms_error","[Link]","[Link]","power.shift_rate"],
"seed":1337
}
Output: lab/experiments/<name>.[Link]
{
"compare":"A_vs_B",
"delta":{
"tension.crest_amp":"+0.22",
"[Link]":"=1.0",
"[Link]":"+0.25",
"power.shift_rate":"-0.11"
},
"winner_by_metric":{
"tension.crest_amp":"A",
"[Link]":"B"
}
}
MVT (multivariate) arms can vary confirm_lead, motif triad, temperature ceiling,
role locks, etc. Determinism holds via shared seed.
---
23.6 Scenario Templates (starter shapes)
T-01 SlowBurn Ladder: long approach, low volatility, Veil/ThornRose.
T-02 Public Surge: audience pressure, confirm-lead multiplier, Mirror/Knot.
T-03 Agency Inversion: role locks then flip, KeyLock/Mirror.
T-04 Ritual Union: binding motif set, required Transformation aftermath.
T-05 Kink Lab (RACK): high risk flags, debriefing & aftercare requirements.
Templates ship with non-graphic source outlines; users can import their own
fictional outlines.
---
23.7 Multi-Rail Preview (plans only, per §21)
For each successful analysis, the Lab renders plan JSON per rail:
Film: beats → blocking, lens, confirm_lead, cooldown.
Comics: beats → panel types, splash eligibility, motif sigils.
Games: beats → quest hooks, gate tokens, cooldown timers.
Digital: beats → schedule windows, tease/confirm cadence, age_gate=true.
All previews forbid surface pulls; they show structures only.
---
23.8 Live “What-If” Panel (bounded coaching)
Interactive knobs (all structural):
confirm_lead_multiplier (0–3)
role_locks.window (beats)
motif_limit (1–3)
temperature_ceiling (cool…hot)
crest_target (0.2–1.0)
Each change triggers re-analysis with same seed; Coach may propose minimal diffs
(insert confirm, extend tail) within policy.
---
23.9 Psycho/Occult Handshakes in Lab
Toggle mock vs live.
SLA & degrade rules as in §20.8.
Affect gains clamped to session envelope; motif crosswalk prunes to triad.
All handshakes logged to L5_handshakes/* for transparency.
---
23.10 Invariants (hard rules inside Lab)
Never emit graphic sexual prose.
Age-gate required for any rail capable of adult contexts.
Consent Gate before any escalation; auto-coach if missing, else fail-closed.
No real-person identifiers accepted; early reject on PII.
---
23.11 Typical Lab Workflows
A/B Craft Choice
eros lab start --scene S021 --seed 42
eros lab ab --name AB_Power --A P.PowerReversal_Noire --B P.SlowBurn_Gothic
eros lab diff --name AB_Power --metrics tension.rms_error,[Link]
Profile Fusion & Export
eros lab fuse --profile P.Public_Performance --cpacks
C.PostDigital_Parasocial,C.Urban_Noir
eros lab preview --rails film,comics,digital
eros export --rail digital --age_gate adult_confirmed=true
What-If Repair
eros lab set --confirm_lead_multiplier 2
eros lab reanalyze --seed 42
eros lab coach --apply minimal
---
23.12 APIs (selected)
POST /lab/session { session_spec } → { session_id }
POST /lab/run/{session_id} → { pack_uri, telemetry }
POST /lab/ab/{session_id} { experiment } → { diff_uri }
POST /lab/fuse/{session_id} { profile, c_packs } → { overlay_trace }
GET /lab/preview/{session_id}/{rail} → plan.<rail>.json
PATCH /lab/knobs/{session_id} { key: value } → { reanalyzed:true }
---
23.13 UI Reference (no prose rendering)
Header: integrity banner (hard=0?), replay hash, seed.
Curves Dock: tension/trust/temperature with hover beat alignment.
Consent & Power: timeline with checkpoints, pre→post vectors.
Motif Triad: chips showing lifecycle (seed→echo→crest→aftermath).
Fusion Drawer: effective overlay trace, conflicts auto-resolved.
A/B Panel: winners by metric, deltas, toggle to inspect node differences.
Rail Tabs: film/comics/games/digital plan JSONs; age-gate status indicators.
Coach Cards: minimal diffs; one-click apply (structural only).
---
23.14 Metrics in Lab (extra to §18)
[Link].win_rate (per metric)
[Link].conflict_count
[Link].plan_completeness per rail
[Link]
[Link] for handshakes
All logged in L6_telemetry/[Link].
---
23.15 Persistence & Versioning
Sessions saved as lab/session/<id>.json; contain only structural refs.
Each re-analysis increments pack_version; replay hash covers L1–L4 (§21.8).
Snapshots (.labsnap) bundle pack + overlay trace + telemetry for sharing.
---
23.16 Collaboration
Comments: anchored to scene_id:beat_id.
Proposals: share “Arm B” of an experiment; teammates can replay with seed.
Locks: prevent concurrent knob edits during compare runs.
---
23.17 Extensibility (plug-in points)
New Profiles / C-Packs: auto-linted (§19.7) before fusion.
New Rails: add plan.<rail>.[Link] and contract tests (§19.13).
New Metrics: declare in [Link]; REP-CHECK tolerances optional.
---
23.18 Failure Modes & Recovery
Overlay conflict storm: auto-reduce to last-wins + warn; show conflicts in Fusion
Drawer.
Handshake timeouts: degrade to neutral; mark degraded:true; continue previews.
Age-gate missing: previews stay local; export blocked with E_AGEGATE_MISSING.
Consent gate skip: Coach injects confirm lead if allowed; else status fail-hard.
---
23.19 Security & Privacy
No upload of private media; file/bus inputs only.
PII scrub at ingest; reject real-person identifiers.
Packs signed; snapshots tamper-evident (§20.9).
Lab never stores surface-explicit text.
---
23.20 Example: A/B Outcome (abbrev)
{
"exp":"AB_PowerReversal_vs_SlowBurn",
"winner_by_metric":
{"tension.crest_amp":"A","[Link]":"=","[Link]":"B"},
"notes":"Both arms pass hard validators; choose A for intensity, B for aftercare
pedagogy."
}
---
23.21 What Scene Lab Never Does
Generate or display graphic sexual prose.
Accept real-person identifiers.
Export rail plans without an age_gate where required.
Bypass consent/aftermath invariants.
---
Delivery Manifest — Item 23 (Scene Lab & Fusion)
Completed: session schema, fusion model & precedence, A/B/MVT planners, scenario
templates, multi-rail previews, live what-if coaching, handshake handling,
invariants, workflows, API/CLI, UI, metrics, persistence, collaboration,
extensibility, failures, privacy, and examples.
Next queued: 23-alt) Delivery Pack (team build/publish presets, SDKs) or 24)
Versioning & Distribution (release channels, signatures, client adapters).
Say “23-alt” or “24” to continue.
—FIXED
24) Versioning & Distribution — EROS / Taboo (Analyze-Only, Explicit-Analysis
Enabled)
Contract: fictional domain; analysis-only; no graphic sexual prose. This section
defines how EROS evolves, ships, and integrates—covering release semantics,
artifact formats, compatibility, CI/CD, signing/keys, offline distribution,
SDKs/adapters, migration, rollbacks, and privacy. Everything stays structural and
connects cleanly to Psycho/Occult (§16), Output Hierarchy (§21), REP-CHECK (§22),
and Scene Lab (§23).
---
24.1 Release Semantics (channels & cadence)
Semantic versioning: [Link]
MAJOR: schema changes that break consumers (requires shims/migrations).
MINOR: new fields, non-breaking validators/metrics, new profiles/packs.
PATCH: fixes, tuneables, perf/telemetry, docs.
Channels:
dev (nightly, unsigned canary keys, CI-only).
beta (feature-frozen; REP-CHECK suite must pass; signed).
stable (general release; signed; docs & migration notes).
lts (security/critical fixes only; 12–18mo support).
Cadence (suggested): patch weekly, minor quarterly, major ≤ yearly, only if needed.
---
24.2 Artifact Matrix (what ships)
Packs: .[Link] per scene (L0–L8 tree, §21), HMAC-signed.
Bundles: .[Link] for arc/season (many packs + serialized plan).
Overlays: versioned Profiles & Cultural Packs (P.*.json, C.*.json).
SDKs: read-only clients for TypeScript/Node, Python, Go:
Parse [Link], [Link], [Link], [Link], aftermath_report.json.
Validate plan.<rail>.json completeness & age_gate.
Never expose or request surface prose.
Containers: [Link]/eros/engine:<ver> (CLI + validators + lab runtime).
CLIs: eros (engine), eros-lab (Scene Lab), eros-qa (REP-CHECK), statically linked
for offline.
---
24.3 Compatibility Contract (matrix)
Schemas (producer→consumer):
[Link].v1, [Link].v1, [Link].v1, [Link].v1, [Link].<rail>.v1.
Minor adds are forward-compatible; removals/renames require MAJOR bump with shims.
Cross-engine pins:
Psycho: >=1.3,<2.0 (affect fields stable).
Occult: >=1.2,<2.0 (motif crosswalk stable).
EROS refuses handshake if outside ranges; degrades to neutral and logs
(handshake.version_mismatch).
Rails: adapters must declare accepted plan schemas, e.g. [Link].v1.
---
24.4 Distribution Topologies
Online registry: signed release manifests; SDKs via language registries; containers
via OCI.
Offline/air-gapped: ship signed .[Link] + container image tar; verify with
local KMS/HSM.
Enterprise mirror: internal artifact store + policy-pinned versions (deny dev
channel).
---
24.5 CI/CD Pipeline (gates)
1. Build: engine, SDKs, containers (reproducible; pinned toolchains).
2. Test: unit + validator fuzz + REP-CHECK (canon suite, §22) + Scene Lab smoke.
3. Sign: packs/bundles/containers with release KMS; embed kid in [Link].
4. Publish: to beta → soak 72h → promote to stable/lts if clean.
5. Docs: auto-generate schema refs & migration notes; link to diffs.
6. SBOM: attach per container & CLI (license + checksum inventory).
---
24.6 Signing, Keys, Rotation
Keys:
rel-primary (HSM-backed), rel-backup, canary (CI only).
Signatures: [Link] with {algo:"HMAC-SHA256", kid:"rel-YYYY-QX", ts, sig}
per file.
Rotation: quarterly; overlapping trust for one cycle; publish revocation list.
Verification: eros pack verify <file> --keyring [Link].
Revocation playbook: mark compromised KID, re-sign last stable/lts, publish alert.
---
24.7 Licensing & Usage Constraints
License intent: use EROS artifacts for analysis-only pipelines; no explicit sexual
prose generation; fictional inputs only; no real-person ingestion.
Redistribution: allowed for signed packs/bundles within same major; do not alter
files without re-sign + new manifest.
Privacy: no surface explicit text stored; PII scrub metrics only (§20.19).
---
24.8 Migration (when versions change)
Minor: update SDKs; consumers ignore unknown fields; add unit tests.
Major: follow Migration Guide:
Run eros migrate --from vN --to vN+1 --pack [Link].
Use shims (e.g., [Link].v1 → v2) recorded in overlay_trace.json.
Re-run REP-CHECK; accept only if KPIs within tolerances (§22.8).
Deprecation timeline: announce in beta; remove in next MAJOR; LTS keeps old until
EOL.
---
24.9 Client Adapters & SDK Contracts
TS/Node: @eros/sdk
readPack(path) → {nodes, acts, bdsm, curves, aftermath, plans}
validatePlan(railPlan) → {completeness, age_gate_ok, errors[]}
Python: eros_sdk
Pack(path).nodes() yields typed records; .kpis() for dashboards.
Go: [Link]/eros/sdk-go with streaming decoders.
Invariants in SDKs: refuse to serialize surface text; enforce age-gate presence for
adult-capable rails; schema version checks.
---
24.10 Deployment Patterns
Solo author: CLI + SDK; local packs; offline possible.
Team server: container with REST (read-only); packs in object storage; SSO to gate
rails.
CI integration: REP-CHECK in PRs; drift reports on diffs; block merges on hard
validator deltas.
Air-gapped studio: whitelisted container + signed bundles; internal keyring;
scheduled updates.
---
24.11 Telemetry (opt-in, privacy-safe)
Local default: telemetry off.
Opt-in aggregate: counters only—validator codes, curve fit stats, version adoption;
no scene text; no PII.
Export: L6_telemetry/[Link] for dashboards; orgs may ship aggregated
metrics internally.
---
24.12 Example Version Bump (end-to-end)
You upgrade 1.4.2 → 1.5.0 (minor):
Pull SDK ^1.5.
Run eros rep suite --index canon/[Link] → pass.
Diff packs: eros diff --old S040.v002 --new S040.v003 --scope L1-L4 → only
[Link] gains motif_entropy.
Promote to stable. No migrations needed.
---
24.13 Rollback & Hotfix
Rollback: keep previous stable container & SDK in mirror; eros ops policy --set
version=1.4.2.
Hotfix (PATCH): cherry-pick fix; rerun REP-CHECK; sign with same major/minor;
publish 1.5.1.
Guard: never ship hotfix without signatures + SBOM.
---
24.14 Distribution Checklists
Pre-release
[ ] REP-CHECK pass (canon suite).
[ ] Scene Lab smoke (rails: film/comics/games/digital).
[ ] Schemas bumped & documented.
[ ] Keys rotated if quarter boundary.
[ ] SBOM attached.
[ ] Migration notes written.
Post-release
[ ] Canary deploy to selected teams (24–72h).
[ ] Telemetry watch (opt-in).
[ ] Prepare LTS backport if needed.
---
24.15 Public Docs & Examples
Schema refs: JSON-Schema for all eros.*.v1 types.
How-tos: “Verify a pack”, “Run REP-CHECK”, “Add a rail adapter”.
Playbooks: incident response (key revocation, drift spike), migration from v1→v2
(worked examples).
---
24.16 Integration with Psycho/Occult (version pins)
EROS embeds required ranges in L5_handshakes/*.
On mismatch:
mark degraded:true, zero dangerous gains, keep plans exportable;
emit handshake.version_mismatch with suggested engine versions.
---
24.17 Governance & Ownership
Owners: Engine Core, SDK Team, QA/Canon, Release Eng.
RACI:
R: Release Eng signs/publishes.
A: Engine Core approves majors.
C: QA/Canon for REP-CHECK thresholds.
I: Rail owners on plan schema changes.
---
24.18 Security Hardening (supply chain)
Repro builds; deterministic container layers.
Verify source → binary via checksums in release manifest.
Scan containers; block publish on critical CVEs.
All downloads over TLS; pinned certs for org mirrors.
---
24.19 Example Manifests
Release manifest (excerpt):
{
"release":"1.5.0",
"channel":"stable",
"artifacts":[
{"name":"eros-cli","sha256":"…","kid":"rel-2025-Q4"},
{"name":"[Link]","sha256":"…","kid":"rel-2025-Q4"},
{"name":"[Link]","sha256":"…","kid":"rel-2025-Q4"}
],
"compat":{
"psycho":">=1.3,<2.0",
"occult":">=1.2,<2.0"
}
}
---
24.20 Operator Commands (quick)
# verify & inspect a pack
eros pack verify [Link] --keyring [Link]
eros pack tree [Link]
# migrate to next major (with shim)
eros migrate --from v1 --to v2 --pack [Link]
# publish stable build after beta soak
eros rel promote --channel beta --to stable --version 1.5.0
---
Delivery Manifest — Item 24 (Versioning & Distribution)
Completed: semver & channels, artifact matrix, compatibility & pins, distribution
topologies, CI/CD gates, signing & key rotation, licensing/usage constraints,
migration & deprecation, SDK contracts, deployment patterns (incl. offline),
telemetry posture, version bump & rollback playbooks, checklists, docs plan, cross-
engine integration, supply-chain hardening, examples & operator commands.
Next queued: 25) Delivery Pack (SDKs, starter templates, samples for each rail) or
25-alt) Instruction Manual (author/operator quickstart, FAQs, troubleshooting).
Say “25” or “25-alt” to continue.
—FIXED
25) Delivery Pack (aka 23-alt realized) — EROS / Taboo (Analyze-Only, Explicit-
Analysis Enabled)
Contract: fictional domain; analysis-only; no graphic sexual prose. This pack ships
SDKs, starters, samples, CI, and team server patterns so you can stand EROS up fast
and plug it into Psycho/Occult (§16), Output Hierarchy (§21), REP-CHECK (§22), and
Scene Lab (§23).
---
25.1 Contents (top-level)
/delivery-pack
/sdk/ # TS / Py / Go read-only SDKs
/starters/ # per-rail plan mappers (no prose)
/lab/ # Scene Lab recipes (A/B/MVT)
/canon-sampler/ # 6 signed canonical fixtures
/ops/ # Makefiles, Dockerfiles, shell helpers
/ci/ # GitHub Actions + local runner
/adapters/ # rail & handshake stubs
/server/ # team server (read-only REST)
/docs/ # quickstarts, schemas, playbooks
/security/ # keyrings (canary) + signing how-to
RELEASE_NOTES.md
All artifacts are structures only (L0–L8 per §21), HMAC-signed, zero surface-
explicit text.
---
25.2 60-Second Local Quickstart
# 1) CLI
curl -L [Link] -o eros && chmod +x eros
# 2) Verify a sample pack
./eros pack verify delivery-pack/canon-sampler/[Link] \
--keyring delivery-pack/security/[Link]
# 3) Preview plans (film/comics) — plans only, no prose
./eros get plan --rail film --pack delivery-pack/canon-sampler/[Link]
> /tmp/[Link]
./eros get plan --rail comics --pack delivery-pack/canon-sampler/[Link]
> /tmp/[Link]
# 4) Determinism check
./eros rep scene S014 --seed 1337 --expect
delivery-pack/canon-sampler/expect/[Link]
---
25.3 SDK Quickstarts (read-only)
TypeScript / Node
import { readPack, validatePlan } from "@eros/sdk";
const pack = await readPack("canon-sampler/[Link]");
for (const node of [Link]) {
// node.desire_type, node.consent_state, node.power_balance, [Link][]
}
const film = [Link];
const v = validatePlan(film);
if (!v.age_gate_ok) throw new Error("Age gate missing");
[Link]([Link], [Link].state_changes);
Python
from eros_sdk import Pack
p = Pack("canon-sampler/[Link]")
for n in [Link](): pass # structural fields only
film = [Link]("film")
assert film["age_gate"]["adult_confirmed"] is True
print([Link]()["tension"]["rms_error"])
Go
pack, _ := [Link]("canon-sampler/[Link]")
for n := range [Link]() { _ = [Link] }
plan := [Link]("games")
if ![Link] { panic("age gate") }
SDK invariants: schema/version checks; no surface prose; age-gate required for
adult-capable rails.
---
25.4 Starters — Rail Mappers (plans only)
Each starter consumes Eros_Node + curves + taxonomies → plan.<rail>.json.
Film (/starters/film)
{"_schema":"[Link].v1","age_gate":{"adult_confirmed":true},
"beats":[{"beat_id":10,"shot":"MS","blocking":"approach","confirm_lead":1},
{"beat_id":12,"shot":"CU","blocking":"crest","cooldown":2}],
"risk_policy":{"aftercare_required":true}}
Comics (/starters/comics)
{"_schema":"[Link].v1","age_gate":{"adult_confirmed":true},
"pages":[{"page":7,"panels":[
{"beat_id":10,"panel":"W2","sigils":["Mirror"]},
{"beat_id":12,"panel":"Splash","sigils":["Knot"]}
]}]}
Theater (/starters/theater)
{"_schema":"[Link].v1","age_gate":{"adult_confirmed":true},
"blocking":[{"beat_id":9,"zone":"DSC","cue":"approach"},
{"beat_id":12,"zone":"CS","cue":"crest"}]}
Literature (/starters/literature)
{"_schema":"[Link].v1","age_gate":{"adult_confirmed":true},
"paragraphs":[{"beat_id":9,"cadence":"slowburn","checkpoint":"seek_explicit"},
{"beat_id":12,"cadence":"crest","checkpoint":"reaffirm"}]}
Animation (/starters/animation) — boards timing & motif glyphs.
Games (/starters/games)
{"_schema":"[Link].v1","age_gate":{"adult_confirmed":true},
"nodes":[{"beat_id":10,"token":"CONSENT_EXPLICIT"},
{"beat_id":12,"token":"CREST_LIMIT_1"}],
"cooldowns":[{"from":12,"beats":2}]}
Events (/starters/events) — timeline, audience-pressure controls, aftercare slot.
Oral Tradition (/starters/oral) — call/response cues, consent-tell markers.
Serialized (/starters/serialized) — crest dispersion & payoff ratios.
Culinary (/starters/culinary) — sensory pairings; no explicit metaphors.
Music (Vocal/Non-vocal) — intensity arcs, no lyrics.
Visual Arts — composition frames, color temperature plan.
Digital — schedule windows, tease/confirm cadence, age_gate=true.
All starters hard-fail without age_gate.adult_confirmed==true.
---
25.5 Scene Lab Recipes (/lab/recipes)
AB_PowerReversal_vs_SlowBurn.json — two profiles, shared seed, KPI compare.
MVT_CrestDensity_Temperature.json — crest density × temp ceiling grid.
Repair_WhatIf.json — inject confirm_lead multiplier 2×; ensure gate compliance.
Run:
./eros lab run --recipe lab/recipes/AB_PowerReversal_vs_SlowBurn.json
---
25.6 Canon Sampler (6 Fixtures)
S001 SlowBurn Gothic
S014 Public Performance
S021 Power Reversal
S033 Ritual Union
S047 Kink Lab (RACK)
S052 Digital Parasocial
Each includes: non-graphic source, signed .[Link], *.[Link],
*.[Link], overlays, seed/hash.
---
25.7 CI / QA Skeleton (/ci)
GitHub Actions
name: EROS QA
on: [push, pull_request]
jobs:
repcheck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: ./eros rep suite --index delivery-pack/canon-sampler/[Link] --seed
1337
verify-packs:
runs-on: ubuntu-latest
steps:
- run: ./eros pack verify delivery-pack/canon-sampler/[Link] --
keyring delivery-pack/security/[Link]
Local: ops/[Link] mirrors CI with colorized drift summaries.
---
25.8 Ops (Make/Docker)
Makefile
pack_verify:
./eros pack verify $(PACK) --keyring delivery-pack/security/[Link]
lab_ab:
./eros lab run --recipe $(RECIPE)
export_plan:
./eros get plan --rail $(RAIL) --pack $(PACK) > out/plan.$(RAIL).json
Dockerfile
FROM [Link]/eros/engine:1.5.0
COPY delivery-pack /opt/delivery
WORKDIR /opt/delivery
---
25.9 Team Server (read-only REST) — /server/
Purpose: centralize pack storage & plan exports for teams; enforce age-gate,
signatures, and analysis-only posture.
Features: JWT/SSO; pack listing; plan export by rail; REP-CHECK endpoint; no
uploads of private media; no surface prose.
Env: PORT, KEYRING_PATH, PACK_ROOT, AGE_GATE_POLICY=strict.
Routes:
GET /packs → list (ids, hashes, versions)
POST /packs/verify → {pack_id} → {verified:true}
GET /plan/{pack_id}/{rail} → plan.<rail>.json (blocks if age_gate missing)
POST /repcheck/{scene_id} → {seed} → {status:"pass|fail", hash, kpi_ok}
Guards: reject real-person identifiers; pin Psycho/Occult version ranges (§24.3);
HSTS/TLS.
---
25.10 Handshake Stubs (/adapters/handshakes)
[Link] — neutral affect gains; clamped by session envelope.
[Link] — archetype crosswalk, coherence=0.70 baseline.
Switch to live by config:
handshakes:
psycho: [Link]
occult: [Link]
timeouts:
ms: 600
degrade_on_timeout: true
---
25.11 QA Harness
eros-qa validate checks:
[Link] == 1.0
motif triad ≤ 3
crest density ≤ declared cap
aftercare required when high-risk present
plan completeness & age_gate for adult-capable rails
eros-qa kpi prints tension RMS, power shift rate, trust delta.
---
25.12 Docs (author/operator)
Quickstart: verify pack, preview plans, age-gate.
How-to: add a rail, run REP-CHECK, seed determinism, sign packs.
Playbooks: drift spike, handshake outage, age-gate miss, rollback.
---
25.13 Extend with a New Rail
1. Copy /adapters/rail-template/ → /adapters/rail-<name>/.
2. Define [Link].<name>.[Link].
3. Map Eros_Node + curves → plan.<name>.json.
4. Add contract tests in /ci/rail-<name>-[Link].
5. Register in docs/[Link].
Invariant: adapters never request or emit graphic sexual prose.
---
25.14 10-Minute End-to-End Demo
# Verify + read
./eros pack verify canon-sampler/[Link] --keyring
delivery-pack/security/[Link]
# Scene Lab A/B
./eros lab run --recipe lab/recipes/AB_PowerReversal_vs_SlowBurn.json
# Export plans (film, games)
./eros get plan --rail film --pack canon-sampler/[Link] >
out/[Link]
./eros get plan --rail games --pack canon-sampler/[Link] >
out/[Link]
# REP-CHECK determinism
./eros rep scene S021 --seed 1337 --expect canon-sampler/expect/[Link]
Results: KPIs pass; plans have age_gate=true; no explicit prose ever leaves the
system.
---
25.15 Security / Privacy / Compliance
Packs signed; verify before use.
No real-person identifiers accepted; PII scrub included in L0.
Analysis-only posture; no storage/rendering of explicit sexual prose.
Age-gate required on adult-capable rail exports; blocked otherwise.
Keys: canary for local; org keys for release (see §24.6).
---
25.16 Bill of Materials (excerpt)
sdk/ts/@eros/[Link]
sdk/py/eros_sdk-[Link]
sdk/go/mod/…
starters/film/[Link]
starters/games/[Link]
lab/recipes/AB_PowerReversal_vs_SlowBurn.json
canon-sampler/[Link]
canon-sampler/expect/[Link]
ci/[Link]
server/[Link]
ops/Makefile
security/[Link]
docs/[Link]
---
Delivery Manifest — Item 25 (23-alt realized)
Completed: pack layout, quickstarts, SDKs, starters (all rails), lab recipes, canon
sampler, CI/QA, ops & Docker, team server (read-only REST), handshake stubs, QA
harness, docs, extension guide, demo, security & compliance, BOM.
Next queued: 26) Delivery Pack (Team SDKs & Templates, extended) or 27) Instruction
Manual (author/operator quickstart, FAQs, troubleshooting).
Say “26” or “27” to continue.
—FIXED
26) Delivery Pack — Team SDKs & Templates (Extended)
EROS / Taboo (Analyze-Only, Explicit-Analysis Enabled)
Contract: fictional domain; analysis-only; no graphic sexual prose. This section
upgrades the Delivery Pack for teams: richer SDK utilities, ready-to-run service
templates, frontend kits, multi-tenant auth, policy enforcement, observability, and
CI/CD blueprints. Connects cleanly to Psycho/Occult (§16), Output Hierarchy (§21),
REP-CHECK (§22), Scene Lab (§23), and Versioning/Distribution (§24).
---
26.1 Scope (what this adds beyond §25)
Team SDKs: higher-level clients (batch ops, diffing, validators, replay) for
TS/Py/Go.
Service templates: opinionated read-only microservice with org/tenant boundaries.
Frontend kits: React/Next components for curves, gates, KPIs (no prose).
Pipelines: PR-gated REP-CHECK, signed pack promotion, canary + rollback.
Observability: metrics, logs, traces; privacy-safe.
Policy: age-gate, consent invariants, PII scrubs, schema/engine pinning.
---
26.2 Team SDK (TypeScript/Node) — /sdk/ts-team
26.2.1 Install & import
import { Packs, Plans, Repcheck, Policies } from "@eros/sdk-team";
26.2.2 Features
Batch IO: stream [Link], [Link] with backpressure.
Diffs: pack→pack structural diffs (L1–L4).
Validators: [Link](), [Link]().
Replay: deterministic re-analysis façade around CLI (seed, hash).
Pins: assert Psycho/Occult version ranges before handshakes.
26.2.3 Example
const p = await [Link]("[Link]");
const film = await [Link](p, "film");
[Link](film);
const diff = await [Link]("[Link]","[Link]",
{scope:"L1-L4"});
if (!await [Link]("canon/expect/[Link]", [Link]())) throw new
Error("drift");
---
26.3 Team SDK (Python) — /sdk/py-team
BatchReader (iterator over nodes/acts with filters).
PlanGuard (age-gate/validator bundle).
KPIDiff (RMS deltas with tolerances).
from eros_sdk_team import BatchReader, PlanGuard, KPIDiff
r = BatchReader("[Link]")
for node in [Link](desire_type=["PowerReversal","SlowBurn"]): pass
PlanGuard.require_age_gate("film", "[Link]")
ok, report = [Link]("expect/[Link]", "[Link]", eps=1e-6)
---
26.4 Team SDK (Go) — /sdk/go-team
Concurrent plan validation with worker pools.
Schema pins compiled in; refuses unknown majors.
pool := [Link](8)
res := [Link]([][Link]{{Pack:"[Link]",
Rail:"film"}})
if ![Link]() { panic([Link]()) }
---
26.5 Service Template — Read-Only Team Server v2 (/server/)
Why: centralize org usage; enforce policy at the edge; zero prose.
Stack: Node (Fastify) or Go (chi), Postgres for index only, S3/GCS for packs.
26.5.1 Endpoints (superset of §25)
GET /v2/packs?tenant=ACME → list (ids, hashes, rails, versions)
GET /v2/packs/{id} → manifest + signatures
POST /v2/packs/{id}/verify → { verified:true|false, kid }
GET /v2/plans/{id}/{rail} → plan.<rail>.json (age_gate enforced)
POST /v2/repcheck/{scene} → { seed, expect } → { pass|fail,
deltas }
GET /v2/kpis/{id} → { tension, trust, power, validators }
GET /v2/handshakes/status → psycho/occult pins + health
Guards: JWT (org/tenant), RBAC (viewer, analyst, ops), engine pins, CORS allowlist.
26.5.2 Config
PACK_ROOT: s3://eros-prod-packs/
KEYRING_PATH: /secrets/[Link]
AGE_GATE_POLICY: strict
ENGINE_PINS:
psycho: ">=1.3,<2.0"
occult: ">=1.2,<2.0"
TENANCY: "subdomain" # or "header:X-Tenant"
---
26.6 Frontend Kit — /frontend/kit
React/Next components (no prose rendering):
<TensionChart/> <TrustGradient/> <PowerBalance/> (D3; tooltips show beat IDs only).
<ConsentTimeline/> (checkpoints, repair beats).
<MotifTriad/> (chips w/ lifecycle).
<ValidatorPanel/> (hard/soft results).
<AgingateBadge/> (export-ready gate).
Usage:
<TensionChart data={[Link]} />
<ConsentTimeline nodes={nodes} />
<ValidatorPanel results={validators} />
---
26.7 Multi-Tenant Patterns
Subdomain tenancy: [Link] → isolates pack index.
Header tenancy: X-Tenant: ACME (for internal gateways).
Row-level security in Postgres for indexes; packs live in tenant-scoped buckets.
Keyrings per tenant; rotation (§24.6) with staggered windows.
---
26.8 Policy Enforcement Middleware
Age-Gate: block export if age_gate.adult_confirmed != true.
Consent invariants: run [Link] validator; fail-closed on miss.
PII scrub: reject real-person identifiers at ingest; log pii_reject counter.
Engine pins: hard refuse outside version ranges; degrade handshakes on timeout.
---
26.9 Observability
Metrics (Prometheus):
eros_requests_total{route,tenant}
eros_age_gate_block_total{rail}
eros_validator_fail_total{code}
eros_handshake_degrade_total{engine}
Logs: JSON; no scene text; include scene_id, pack_hash, seed, validator_codes[].
Traces: trace export on /plans and /repcheck; spans for validation & pins.
---
26.10 CI/CD Blueprints (GitHub Actions / GitLab)
Jobs: build, repcheck, verify-signatures, canary-deploy, promote-stable.
Require signed packs; SBOM attach; policy tests must pass.
Example (add-on to §25.7):
jobs:
canary:
needs: [repcheck, verify-packs]
steps:
- run: ./ops/deploy --env canary --version ${{ [Link] }}
promote:
if: success() && [Link] == 'refs/heads/main'
steps:
- run: ./ops/promote --from canary --to stable --version ${{ [Link] }}
---
26.11 Backfills & Migrations at Scale
eros migrate --from v1 --to v2 --bundle [Link] --parallel 8
Writes .migrlog per pack; aggregate drift; blocks if KPIs violate tolerances.
Replay hash ensures deterministic outcomes (seed+pack content).
---
26.12 Team Playbooks (ops)
Handshake outage: switch to mocks; mark degraded:true; continue exports.
Validator drift spike: pin version, open diff report, roll back if needed.
Key compromise: revoke KID; re-sign last stable; broadcast manifest.
Age-gate misses: enforce server-side gate; return E_AGEGATE_MISSING.
---
26.13 Extended Examples
26.13.1 Gate-first export (server)
[Link]('/v2/plans/:id/:rail', async (req, res) => {
const plan = await [Link]([Link], [Link]);
if () return
[Link](403).send({error:'E_AGEGATE_MISSING'});
if () return
[Link](422).send({error:'E_GATES_FAIL'});
return [Link](plan);
});
26.13.2 A/B at the edge
const { diff, winner } = await [Link]({
scene: "S021", seed: 42,
arms: [{profile:"P.PowerReversal_Noire"}, {profile:"P.SlowBurn_Gothic"}],
metrics: ["tension.rms_error","[Link]"]
});
---
26.14 Governance for Teams
RACI: Engine Core (A), QA/Canon (C), Release Eng (R), Rail Owners (I) (see §24.17).
Change windows: majors require advisory sign-off; minors require REP-CHECK green.
Data retention: packs are structural; 90-day rotation; no explicit prose stored.
---
26.15 Hard Invariants (team enforcement)
Never ingest or export graphic sexual prose.
Reject real-person identifiers at ingest.
Require age_gate for adult-capable rails.
Enforce Consent Gate and Aftercare rules where applicable.
Psycho/Occult pins must match; degrade on timeout; log.
---
26.16 Team KPIs (program level)
export.success_rate
gate.block_rate (should be non-zero in tests; ~0 in prod)
validator.hard_fail_rate
repcheck.green_rate
handshake.degrade_rate
pack.verify_failure_rate
drift.delta_mean across KPIs
---
26.17 Checklists
Team Onboarding
[ ] Keys installed/verified
[ ] Engine pins set
[ ] Age-gate policy = strict
[ ] CI repcheck green on sampler
[ ] Frontend kit wired to server
Pre-Release
[ ] REP-CHECK suite passes
[ ] A/B canary stable 24–72h
[ ] Telemetry shows no validator spikes
[ ] Release signed; SBOM attached
---
26.18 FAQ (ops/dev)
Q: Can we add our own rail? A: Yes—use /adapters/rail-template, declare
[Link].<name>.[Link], add CI tests.
Q: Can we bypass age-gate for tests? A: Only in dev channel; never in
beta/stable/lts.
Q: How to handle Psycho/Occult mismatch? A: Fail handshake; set mocks; log
handshake.version_mismatch.
---
26.19 Failure Modes & Recovery
Plan completeness <1.0: run Coach; fill minimal diffs; re-analyze.
Curve RMS > ε: re-seed or adjust profile; if persistent, open canon issue.
Export blocked: missing age-gate or gates fail → return specific error; do not
down-scope policy.
---
26.20 Bill of Materials (team add-ons)
sdk/ts-team/[Link]
sdk/py-team/eros_sdk_team.py
sdk/go-team/…
server/[Link] (Fastify) or server/[Link] (chi)
frontend/kit/* (React components)
ops/promote, ops/deploy
ci/[Link], ci/[Link]
docs/[Link], docs/[Link]
---
Delivery Manifest — Item 26 (Team SDKs & Templates, extended)
Completed: TS/Py/Go team SDKs, service template v2 with tenancy & policy, React
frontend kit, observability, CI/CD blueprints, migrations at scale, ops playbooks,
governance, KPIs, checklists, FAQ, failure modes, BOM.
Next queued: 27) Instruction Manual (author/operator quickstart, FAQs,
troubleshooting) or 26-alt) Reference Adapters (fully worked rail adapters with
contract tests).
Say “27” or “26-alt” to continue.
—FIXED
27) Reference Adapters — (26-alt realized)
EROS / Taboo (Analyze-Only, Explicit-Analysis Enabled)
Contract: fictional domain; analysis-only; no graphic sexual prose. This section
ships fully-worked adapters for key rails with schemas, mappers, validators,
contract tests, and failure modes. All adapters consume EROS structures (Eros_Node,
curves, taxonomies, aftermath) and export plan.<rail>.json that other renderers can
use. Connects to Psycho/Occult (§16), Output Hierarchy (§21), REP-CHECK (§22),
Scene Lab (§23), Delivery Pack (§25), Team SDKs (§26), and Versioning (§24).
---
27.1 Adapter Principles (applies to every rail)
Input: [Link], [Link], [Link], [Link], aftermath_report.json,
optional profiles/[Link].
Output: plan.<rail>.json (declared schema, age-gate flag, completeness, structural
beats/blocks/cues/constraints).
Zero surface explicit prose. Structural metadata only.
Age-gate enforced: export fails if age_gate.adult_confirmed != true for adult-
capable rails.
Consent gates: plan encodes checkpoints/repair beats; validator must pass.
Motif cap: ≤3 active motifs at any point (coherence discipline).
Pins: refuse Psycho <1.3 / Occult <1.2 (see §24.3).
Determinism: seed is propagated into profile choice & curve fit where applicable.
Error codes: E_AGEGATE_MISSING, E_GATES_FAIL, E_PIN_MISMATCH, E_SCHEMA_INVALID,
E_PLAN_INCOMPLETE.
---
27.2 Film Adapter (/adapters/film)
27.2.1 Schema: [Link] (excerpt)
{
"$id":"[Link]",
"type":"object",
"required":["_schema","age_gate","beats","risk_policy","notes"],
"properties":{
"_schema":{"const":"[Link].v1"},
"age_gate":{"type":"object","required":["adult_confirmed"],"properties":
{"adult_confirmed":{"type":"boolean"}}},
"completeness":{"type":"number","minimum":0,"maximum":1},
"beats":{"type":"array","items":{
"type":"object",
"required":["beat_id","shot","blocking"],
"properties":{
"beat_id":{"type":"integer"},
"shot":{"type":"string"}, // e.g., "MS","CU","WS","OTS"
"lens":{"type":"string"}, // optional
"blocking":{"enum":
["approach","near","contact","crest","afterglow","retreat"]},
"confirm_lead":{"type":"integer","minimum":0},
"cooldown":{"type":"integer","minimum":0}
}
}},
"risk_policy":{"type":"object","properties":{"aftercare_required":
{"type":"boolean"}}},
"notes":{"type":"string"}
}
}
27.2.2 Mapper (TS, structural only)
import { Packs } from "@eros/sdk-team";
export async function toFilmPlan(packPath:string){
const p = await [Link](packPath);
const nodes = await [Link](); // stream in order
const beats = [Link](n => ({
beat_id: n.beat_id,
shot: [Link] === "Contact" ? "CU" : [Link] === "Approach" ? "MS" :
"WS",
blocking: [Link](), // approach/near/contact/retreat
confirm_lead: n.consent_state.match(/Explicit|Reaffirmed/)?1:0,
cooldown: n.consequence_vector==="Reckoning"?2:0
}));
const plan = {
_schema:"[Link].v1",
age_gate:{adult_confirmed:true},
completeness:1.0,
beats,
risk_policy:{aftercare_required:true},
notes:"structural plan only; no prose"
};
return plan;
}
27.2.3 Contract tests ([Link])
tests:
- name: requires_age_gate
given: {pack: "[Link]"}
when: {age_gate:false}
then: {error:"E_AGEGATE_MISSING"}
- name: consent_gates_pass
given: {pack:"[Link]"}
expect:
schema: "[Link].v1"
gate_compliance: 1.0
[Link]: [{"blocking":"crest","confirm_lead":1}]
- name: motif_cap_enforced
given: {pack:"[Link]"}
then: {[Link]:true, motif_active_max: 3}
---
27.3 Comics Adapter (/adapters/comics)
27.3.1 Schema (excerpt)
{"$id":"[Link]",
"type":"object",
"required":["_schema","age_gate","pages"],
"properties":{
"_schema":{"const":"[Link].v1"},
"age_gate":{"type":"object","required":["adult_confirmed"],"properties":
{"adult_confirmed":{"type":"boolean"}}},
"pages":{"type":"array","items":{
"type":"object","required":["page","panels"],
"properties":{
"page":{"type":"integer"},
"panels":{"type":"array","items":{
"type":"object","required":["beat_id","panel"],
"properties":{
"beat_id":{"type":"integer"},
"panel":{"type":"string"}, // "W1","W2","Grid-9","Splash"
"sigils":{"type":"array","items":{"type":"string"}, "maxItems":3}
}}}}}}}
27.3.2 Mapper logic (JS snippet)
function layoutPanelForBeat(n){
if(n.tension_curve.includes("crest")) return "Splash";
if([Link]==="Contact") return "W2";
return "Grid-9";
}
export function toComicsPlan(nodes){
return {
_schema:"[Link].v1",
age_gate:{adult_confirmed:true},
pages: paginateBy(6, nodes).map((pageNodes, i)=>({
page:i+1,
panels: [Link](n=>({beat_id:n.beat_id, panel:layoutPanelForBeat(n),
sigils:n.symbolic_motifs||[]}))
}))
}
}
27.3.3 Tests
Ensure no more than 3 sigils per panel.
Ensure crest beats land on full-bleed or splash panels.
Verify page turns align with afterglow or repair beats.
---
27.4 Literature Adapter (/adapters/literature)
27.4.1 Schema (excerpt)
{"$id":"[Link]",
"type":"object",
"required":["_schema","age_gate","paragraphs"],
"properties":{
"_schema":{"const":"[Link].v1"},
"age_gate":{"type":"object","required":["adult_confirmed"],"properties":
{"adult_confirmed":{"type":"boolean"}}},
"paragraphs":{"type":"array","items":{
"type":"object","required":["beat_id","cadence","checkpoint"],
"properties":{
"beat_id":{"type":"integer"},
"cadence":{"enum":
["slowburn","pulse","surge","stutter","crest","afterglow"]},
"checkpoint":{"enum":
["seek_explicit","confirm_explicit","adjust","reaffirm","repair","none"]}
}}}}}
27.4.2 Mapper rules
Map Tension_Curve → cadence.
Map Consent_State transitions → checkpoint.
Insert repair paragraphs when Trust dips.
---
27.5 Theater Adapter (/adapters/theater)
Schema: zones (US/UC/UL/CS/DSC/...), proxemics cues, confirm_lead as director
notes.
Mapper: distance → zone; crest → center-stage with safety cue; aftercare → off-axis
decompression.
Tests: stage direction sequence must satisfy consent checkpoints; no whiplash (role
locks) unless PowerReversal arc.
---
27.6 Animation Adapter (/adapters/animation)
Schema: boards timeline, easing curves, motif glyph overlays.
Mapper: tension → easing (easeIn, easeOut, hold), motifs → overlay glyphs.
Tests: crest density ≤ cap; aftercare frame budget present when high-risk flags
exist.
---
27.7 Games Adapter (/adapters/games)
27.7.1 Schema (excerpt)
{"$id":"[Link]",
"type":"object",
"required":["_schema","age_gate","nodes","cooldowns"],
"properties":{
"_schema":{"const":"[Link].v1"},
"age_gate":{"type":"object","required":["adult_confirmed"],"properties":
{"adult_confirmed":{"type":"boolean"}}},
"nodes":{"type":"array","items":{
"type":"object","required":["beat_id","token"],
"properties":{
"beat_id":{"type":"integer"},
"token":{"enum":
["CONSENT_SOUGHT","CONSENT_EXPLICIT","CONSENT_ADJUST","CONSENT_REAFFIRM","REPAIR","
CREST_LIMIT_1","AFTERCARE_REQUIRED"]}
}}}},
"cooldowns":{"type":"array","items":{"type":"object","required":
["from","beats"],"properties":{"from":{"type":"integer"},"beats":
{"type":"integer","minimum":1}}}}
}}
27.7.2 Mapper
Consent transitions → CONSENT_* tokens.
Crest → CREST_LIMIT_1 with cooldown gates.
High-risk flags (structural) → AFTERCARE_REQUIRED.
Tests: player cannot unlock crest token without prior explicit consent token;
cooldown respected.
---
27.8 Events Adapter (/adapters/events)
Schema: timeline slots, audience-pressure controls, safety marshals, aftercare
segment.
Mapper: distance & cadence to room zoning; public pressure derives from motifs
(e.g., Mirror) and risk flags.
Tests: safety/aftercare segments must exist if any risk flag present; consent
checkpoint visible to producers.
---
27.9 Oral Tradition Adapter (/adapters/oral)
Schema: call/response cues, refrain anchors, consent-tell markers (storyteller
signals).
Mapper: insert consent markers before escalation refrains; motifs → refrain glyphs.
Tests: no escalation refrains without preceding consent-tell; motif triad enforced.
---
27.10 Serialized Adapter (/adapters/serialized)
Schema: season envelope (crest dispersion, payoff ratios, cliff windows).
Mapper: aggregate curves across scenes; ensure aftermath persistence carries to
later episodes.
Tests: payoff ratio targets met; consent continuity across episodes.
---
27.11 Culinary Adapter (/adapters/culinary)
Schema: adjacent sensory pairings for scenes (no metaphorical explicitness).
Mapper: temperature curve → flavor intensity; motifs → plating glyphs.
Tests: forbid explicit metaphors; age-gate still required if rail is used in adult-
capable contexts.
---
27.12 Music (Vocalized / Non-Vocal) Adapters
Vocalized: intensity & phrasing slots; no lyrics generated.
Non-Vocal: harmonic tension arcs; tempo map aligned to EROS crest/afterglow.
Tests: musical crest aligns with EROS crest; cooldown exists.
---
27.13 Visual Arts Adapter
Schema: composition frames, color temperature plan, motif placements.
Mapper: power shifts → composition weight; trust rise → warmth shift; motifs → icon
placement.
Tests: cap motif count; persistence across triptychs; no surface explicit depiction
encoded.
---
27.14 Digital Media Adapter
Schema: schedule slots, tease/confirm cadence, parasocial safeguards, age_gate
required.
Mapper: approach/crest timing → release slots; safeguards triggered when risk flags
active.
Tests: exports blocked without age-gate; safeguard checklist present.
---
27.15 Adapter Validation API (shared)
import { Validator } from "@eros/sdk-team";
export function validatePlan(plan:any, schemaId:string){
[Link](schemaId).mustValidate(plan); // JSON-Schema
[Link]().mustBeTrue(plan.age_gate);
[Link]().mustComply(plan); // consent checkpoints
[Link]().<= (3);
}
---
27.16 Error Codes (canonical)
E_AGEGATE_MISSING — adult-capable rail without positive age gate.
E_GATES_FAIL — consent/repair sequence invalid.
E_PIN_MISMATCH — Psycho/Occult outside allowed ranges.
E_SCHEMA_INVALID — plan fails schema validation.
E_PLAN_INCOMPLETE — completeness < 1.0 after mapping.
E_SAFEGUARD_REQUIRED — high-risk flags without aftercare/cooldown.
---
27.17 Performance & Streaming
Stream [Link] with backpressure; avoid loading everything in memory.
Pre-index by beat_id and distance for quick bucketing.
Hoist consent transitions to a compact array to accelerate gate checks (O(n)).
Use motif Bloom filter to track cap enforcement per page/beat.
---
27.18 Cross-Engine Handshakes
Psycho: fetch affect gains to tune cooldown/confirm_lead; degrade to neutral on
timeout.
Occult: motif→archetype crosswalk returns coherence_score; adapters prune motifs if
score drops below threshold (e.g., 0.65).
---
27.19 Worked Example (end-to-end, non-graphic)
# Film
eros pack verify canon-sampler/[Link] --keyring security/[Link]
node adapters/film/[Link] canon-sampler/[Link] > out/[Link]
eros-qa validate --rail film --plan out/[Link] # passes gates & schema
# Comics
node adapters/comics/[Link] canon-sampler/[Link] >
out/[Link]
eros-qa validate --rail comics --plan out/[Link]
---
27.20 Contract Test Suite (shared YAML)
matrix:
rails: [film, comics, literature, games, theater, animation, events, oral,
serialized, culinary, music_vocal, music_instrumental, visual, digital]
cases:
- name: age_gate_required
expect_error: E_AGEGATE_MISSING
- name: consent_sequence_valid
expect: {gate_compliance: 1.0}
- name: motif_cap
expect: {motif_active_max: 3}
- name: risk_requires_aftercare
expect_error: E_SAFEGUARD_REQUIRED
---
27.21 Security & Compliance (adapter side)
Refuse real-person identifiers at ingest; adapters never fetch external media.
Never write or render surface explicit prose; logs contain only IDs/hashes/codes.
Sign exported plans when used in enterprise pipelines.
Respect Version pins (refuse or degrade).
---
27.22 Folder Layout (reference)
/adapters
/film (schema, [Link], [Link], tests/)
/comics
/literature
/theater
/animation
/games
/events
/oral
/serialized
/culinary
/music-vocal
/music-instrumental
/visual
/digital
/shared (validators, pins, [Link])
---
27.23 Maintainers & RACI
Owners: Rail maintainers per folder.
QA: Canon team owns contract suites.
Release: follows §24 gates (sign, SBOM, soak).
Incident: validator spike → freeze adapter; roll back via §24.13.
---
Delivery Manifest — Item 27 (Reference Adapters, 26-alt realized)
Completed: schemas, mappers, validators, contract tests, error codes, perf
guidance, cross-engine pins, examples, security posture, folder layout, RACI.
Pending: if you want 27-alt (Instruction Manual) next, say “27-alt”; otherwise “28”
to move on to the next ops module set.
—FIXED
EROS / Taboo Engine — Instruction Manual v28.2
Mode: Analyze-Only • Explicit-Analysis Enabled • Fiction/Industry Study
Contract (one-liner): EROS models eros as formal story logic—desire, consent,
power, taboo, vulnerability, aftermath—then emits curves, tags, audits, and plans
that any renderer/rail can use. No explicit prose generation.
---
28.1 Scope & Authority
Authorized contexts: educational, artistic, and analytical study of sexual media
and the adult-entertainment industry as culture and craft.
On-camera acts: treated as choreographed performance (structure, cadence, consent
sequence, power flow, aftermath). No anatomical narration or explicit depiction.
Public entities: may reference performer stage names and studio/brand names
strictly in their public, professional capacity (e.g., “Mia Khalifa,” “Brazzers,”
“Reality Kings,” “Vixen”). No private/off-camera material.
Real-person limit: EROS never reproduces, describes, or tags real-person explicit
acts in graphic terms. It analyzes structure-only (timing, roles, consent gates,
risk categories) or uses de-identified metadata.
Fictional parity: Full structural analysis for fictional works (prose, comics,
games, animation, film scripts, storyboards) including hentai/yaoi/erotic manga—
again non-graphic surface.
---
28.2 Safety, Age-Gates, Compliance
Age gating: required. Inputs must originate from 18+ contexts with documented age-
verification.
Consensual, lawful source only. No leaks, non-consensual, CSAM, or doxxed content.
No scraping private repositories. Only user-provided or public, licensed sources.
PII controls: stage names allowed; legal names and personal addresses disallowed.
Outputs never include: explicit sexual prose, images, links to explicit media, or
doxxing details.
---
28.3 Operating Modes (Analyze-Only Core)
ANALYZE: ingest → parse → map ontology → compute curves → tag Act_Taxonomy &
BDSM_Taxonomy (neutral labels) → return Eros_Nodes, Tension_Curve, Trust_Gradient,
Power_Dynamic_Index, Symbolic_Motif_Tags, Aftermath_Report.
COACH: detect flat tension, power mush, consent gaps, motif flood; propose minimal
diffs (insert/lock/prune/repair beats).
AUDIT: verify consent continuity, boundary adherence, causality, and persistent
aftermath across chapter/season.
---
28.4 Inputs
A. Fictional Text (chapters, scripts, beat sheets, captions)
B. Industry Artefacts (shot lists, storyboards, call sheets, release cadence plans,
contracts with PII removed)
C. De-Identified Scene Metadata (structure-only; no names/links) using the Bridge
Schema below.
28.4.1 De-Identified Bridge Schema (JSON)
{
"scene_id": "EROS.S0001",
"domain": "public_production",
"age_gate": true,
"beats": [
{
"t": "00:02:15",
"desire_type": "PowerReversal",
"consent_state": "Sought->Explicit",
"distance": "Approach->Near",
"act_taxonomy": [
{"category":"BDSM","type":"Dominance","protocol":"SSC","tools":["rope"]}
],
"risk_flags": ["Impact"],
"role_map": "Dominant/Submissive",
"power_balance": "70/30->60/40",
"motifs": ["Mirror","Knot"],
"notes": "structural only; no anatomical narration"
}
]
}
---
28.5 Outputs
Curves: Tension_Curve, Trust_Gradient, Emotional_Polarity_Map
Indices: Power_Dynamic_Index (pre→post), Motif_Coherence
Tags: Act_Taxonomy, BDSM_Taxonomy, Symbolic_Motif_Tags (≤3)
Reports: Aftermath_Report (state change + integrity checks)
Plans (optional): Scene_Plan with beats/constraints/cadence markers (still non-
graphic)
Eros_Node (canonical record):
scene_id: "EROS.S014"
beat_id: "B006"
desire_type: PowerReversal
initiator_role: Initiator
consent_state: "Explicit->Reaffirmed"
power_balance: "40/60->55/45"
distance: "Near->Contact"
tension_curve: "surge->crest->afterglow"
emotional_temperature: "warm->hot->warm"
trust_gradient: "climb_with_microdip_after_risk"
symbolic_motifs: [Mirror, Knot]
boundary_conditions: ["limits_declared","safeword_acknowledged"]
consequence_vector: Transformation
act_taxonomy:
- {category: BDSM, type: Dominance, protocol: SSC, tools: [mask, rope]}
- {category: Aftercare}
bdsm_taxonomy:
- {type: Restraint, protocol: SSC}
notes: "choreography analyzed as structure; no anatomical narration"
---
28.6 Choreography Rule (Critical)
> EROS recognizes sexual acts on camera as choreography. Analysis is formal:
timing, consent progression, rhythm, gaze, editing, power exchange, emotional
cadence, and aftermath. EROS does not narrate body-part action or generate graphic
text.
Allowed phrasing (examples):
“Crest beat executes a power reversal; consent reaffirmed post-risk; trust resumes
a positive slope.”
“Editing alternates dominance/vulnerability cues; cadence shifts pulse →
afterglow.”
Disallowed phrasing: any anatomical/graphic description.
---
28.7 Public Entities Policy
May reference: performer stage names and studio/brand names as analytical labels
(performance style, aesthetic school, release strategy, cinematography patterns).
Must not: speculate on private life, disclose personal data, or link to explicit
scenes.
Use-case examples:
“Brand cadence: Brazzers favors vignette loops with high-energy surge cadence.”
“Stage persona (e.g., Mia Khalifa) analyzed for performance tropes and audience
framing—not private biography.”
---
28.8 Consent & Risk Modeling
Gate Rule: no escalation without a prior advance in Consent_State.
Continuity: each crest must trace to a valid checkpoint.
Repair: insert repair beats after risk dips to restore Trust_Gradient.
Risk flags: Impact, Breath, Edge, Public, Pain, Degradation (neutral labels).
---
28.9 Connectors (Inter-Engine)
Psycho Engine: shares Neuro_Affect_Profile; proposes cadence/repair diffs.
Occult Engine: maps motifs → archetypes/ritual forms; returns coherence_score.
Digital Media Engine: attention curves, parasocial dynamics, release calendars.
Film/Comics/Theater/Literature/Animation/Game Rails: consume plans/curves/tags to
render shots/panels/blocking/paragraph cadence/quest loops (EROS remains analysis-
only).
Serialized Engine: aggregates per-scene curves into season arcs; ensures payoff
ratios.
Music/Culinary/Visual Arts Rails: use motifs/temperature to design cross-modal
cues.
---
28.10 Workflows
Quick Loop (Analyze-Only):
1. Ingest (Fiction, Industry Artefact, or Bridge JSON)
2. Emit: Nodes + Curves + Tags + Aftermath
3. Apply COACH diffs if flagged
4. Hand off to rails; (optional) re-ingest rendered draft for AUDIT
Industry Study:
Ingest de-identified shot list + release plan → output cadence recommendations,
brand KPIs, motif coherence, consent/audit checklist for scripts and marketing copy
(non-graphic).
---
28.11 Quality Gates & KPIs
Tag clarity: ≥90% beats labeled
Consent continuity: 100% passes on gated escalations
Curve fit RMS: < ε vs declared cadence template
Power delta: reaches target within tolerance
Aftermath persistence: state change visible next scene/episode
Dashboard: [Link], [Link].shift_rate,
[Link].checkpoints_passed, [Link].repair_events,
[Link].coherence_score, aftermath.persistence_rate
---
28.12 Failure Modes & Fixes
Flat tension: raise Detail_Density_Index; add micro-approach beats; prune motifs.
Power mush: set post-scene target; enable Role_Locks; insert decisive beat.
Gate skips: insert consent confirm; reflow escalation.
Motif flood: cap to ≤3; demote extras to notes.
---
28.13 Configuration (Determinism Knobs)
Detail_Density_Index • Consent_Gates • Role_Locks • Motif_Limit •
Temperature_Ceiling • Aftermath_Enforcer
---
28.14 Allowed vs. Not Allowed (Quick Cards)
Allowed: structural analysis of sexual performance; stage/studio names in
professional context; industry economics; history; cinematography; release cadence;
consent frameworks.
Not Allowed: explicit sexual prose; anatomical narration; private/PII; leaks;
minors; instructions for real-world sexual activity.
---
28.15 Example Manifests (Non-Graphic)
A. Fiction Chapter (input → output sketch)
Input: “Dominatrix noir chapter, club setting, mask motif, negotiated scene.”
Output: Nodes + BDSM_Taxonomy (protocol SSC), Tension_Curve:
slowburn→crest→afterglow, Power_Dynamic_Index: 80/20→60/40, Aftermath_Report:
Transformation.
B. Industry Cadence Audit
Input: De-identified shot list + weekly release plan for a studio brand.
Output: cadence map, motif coherence, consent/audit checklist, non-graphic copy
constraints for trailers/thumbnails.
---
28.16 Versioning & Patch Policy
This file: EROS v1.0-Patch-A (Explicit-Analysis Clarified)
Backward-compatible with prior 11k-line spec; adds:
1. Choreography Rule,
2. Public Entities Policy,
3. Bridge Schema,
4. Connector guarantees.
---
29) Tooling: CLI, Validators, and Dataset-Labeler Prompts
Package: eros-tooling v1.0 • Targets: Linux/macOS • I/O: JSON/YAML • Purpose:
validate schemas, enforce age-gate/consent rules, and guide labelers to produce
structure-only metadata (no explicit prose).
---
29.1 CLI (reference)
# Validate any EROS payload (auto-detects type)
eros validate path/to/file.(json|yaml)
# Validate + lint + fix ordering of fields
eros validate --strict --autofix path/to/*.yaml
# Validate a folder of scenes and fail on first error
eros batch-validate data/scenes --fail-fast
# Run REP-CHECK (determinism) against golden KPIs
eros rep scene ERS.S021 --seed 1337 --expect kpi/[Link]
# Generate a labeling job from raw text (fictional only) → YAML skeleton
eros scaffold fictional --in drafts/[Link] --out labels/[Link]
# Convert YAML→JSON (stable field order) for CI
eros convert labels/[Link] --to json > labels/[Link]
# Show reasons for a failed validation (human-readable)
eros explain .errors/labels_CH05.[Link]
Exit codes:
0=OK 2=SCHEMA_INVALID 3=DOMAIN_VIOLATION 4=AGEGATE_MISSING 5=GATES_FAIL
6=PIN_MISMATCH 7=SAFEGUARD_REQUIRED
---
29.2 Canonical Schemas
29.2.1 Bridge Schema (De-Identified Scene) — JSON Schema (2020-12)
{
"$schema": "[Link]
"$id": "[Link]
"type": "object",
"required": ["scene_id", "domain", "age_gate", "beats"],
"properties": {
"scene_id": {"type": "string", "pattern": "^[A-Z0-9._-]+$"},
"domain": {"type": "string", "enum": ["public_production", "fictional",
"deidentified_archive"]},
"age_gate": {"type": "boolean", "const": true},
"notes": {"type": "string", "maxLength": 2000},
"beats": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["desire_type", "consent_state"],
"properties": {
"t": {"type": "string", "pattern": "^[0-9]{2}:[0-9]{2}:[0-9]{2}$"},
"desire_type": {
"type": "string",
"enum":
["Longing","Devotion","Forbidden","PowerReversal","Play","RitualUnion","Redemption"
,"Curiosity","Possession","Surrender"]
},
"consent_state": {"type": "string", "pattern": "^(Implicit|Sought|
Explicit|Adjusted|Reaffirmed|Revoked)(->(Implicit|Sought|Explicit|Adjusted|
Reaffirmed|Revoked))?$"},
"distance": {"type": "string", "pattern": "^(Far|Approach|Near|Contact|
Retreat)(->(Far|Approach|Near|Contact|Retreat))?$"},
"role_map": {"type": "string", "enum":
["Dominant/Submissive","Submissive/Dominant","Switch","Observer","Initiator/
Responder"]},
"power_balance": {"type": "string", "pattern": "^[0-9]{1,3}\\/[0-9]{1,3}-
>[0-9]{1,3}\\/[0-9]{1,3}$"},
"motifs": {
"type": "array","maxItems": 3,
"items": {"type": "string", "enum":
["Veil","Mirror","KeyLock","HeatIce","HungerFast","CrownCollar","Knot","ThornRose"]
}
},
"act_taxonomy": {
"type": "array",
"items": {
"type": "object",
"required": ["category"],
"properties": {
"category": {
"type": "string",
"enum":
["Kissing","Manual","Oral","Penetrative_Vaginal","Penetrative_Anal","Toy","BDSM","R
oleplay","Voyeur","Exhibition","Group","Aftercare"]
},
"type": {"type": "string"}, // neutral label
"protocol": {"type": "string", "enum": ["SSC","RACK"]},
"tools": {"type": "array","items":{"type":"string"}, "maxItems":
6},
"protection": {"type": "string", "enum":
["None","Condom","DentalDam","Glove"]}
},
"additionalProperties": false
}
},
"risk_flags": {
"type": "array","uniqueItems": true,"maxItems": 5,
"items": {"type": "string","enum":
["Impact","Breath","Edge","Public","Pain","Degradation"]}
},
"notes": {
"type":"string",
"maxLength": 1000,
"pattern": "^(?!.*(anatom|graphic|NSFW_prose_marker)).*"
}
},
"additionalProperties": false
}
},
"public_entities": {
"type": "object",
"properties": {
"stage_names": {"type":"array","items":{"type":"string"}, "maxItems": 10},
"studios": {"type":"array","items":{"type":"string"}, "maxItems": 10}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
29.2.2 Eros_Node — YAML schema (informal)
required:
- scene_id
- beat_id
- desire_type
- consent_state
- power_balance
- tension_curve
- consequence_vector
fields:
scene_id: {type: string}
beat_id: {type: string}
desire_type: {enum:
[Longing,Devotion,Forbidden,PowerReversal,Play,RitualUnion,Redemption,Curiosity,Pos
session,Surrender]}
initiator_role: {enum: [Initiator,Responder,Observer,BoundaryKeeper]}
consent_state: {pattern: "^(Implicit|Sought|Explicit|Adjusted|Reaffirmed|Revoked)
(->(Implicit|Sought|Explicit|Adjusted|Reaffirmed|Revoked))?$"}
power_balance: {pattern: "^[0-9]{1,3}\\/[0-9]{1,3}->[0-9]{1,3}\\/[0-9]{1,3}$"}
distance: {enum: [Far,Approach,Near,Contact,Retreat]}
tension_curve: {enum: [SlowBurn,Pulse,Surge,Stutter,Crest,Afterglow,"low->crest-
>release->afterglow"]}
emotional_temperature: {enum: [cool,warm,hot]}
trust_gradient: {enum: [climb,flat,dip,climb_with_microdip_after_risk]}
symbolic_motifs: {array: string, max: 3}
boundary_conditions: {array: string}
consequence_vector: {enum:
[Reward,Rupture,Reckoning,Transformation,ReturnToNormal]}
act_taxonomy: {array: object} # per Bridge rules
bdsm_taxonomy: {array: object} # per Bridge rules
notes: {string: non-graphic}
rules:
- "No escalation unless consent_state advances vs prior beat"
- "After risk dip, require repair beat before further escalation"
- "Motifs <= 3"
29.2.3 Aftermath_Report — JSON Schema
{
"$id": "[Link]
"type": "object",
"required": ["scene_id","state_changes","integrity_checks"],
"properties": {
"scene_id": {"type": "string"},
"state_changes": {
"type": "object",
"required": ["power_balance","trust_gradient","desire_type"],
"properties": {
"power_balance": {"type":"object","required":["from","to"],"properties":
{"from":{"type":"string"},"to":{"type":"string"}}},
"trust_gradient": {"type":"object","required":["from","to"],"properties":
{"from":{"type":"string"},"to":{"type":"string"}}},
"desire_type": {"type":"object","required":["from","to"],"properties":
{"from":{"type":"string"},"to":{"type":"string"}}}
}
},
"integrity_checks": {
"type":"object",
"required":["consent_continuity","boundary_respected","cause_effect_chain"],
"properties": {
"consent_continuity":{"type":"string","enum":["pass","fail"]},
"boundary_respected":{"type":"string","enum":["pass","fail"]},
"cause_effect_chain":{"type":"string","enum":["solid","weak"]}
}
},
"fix_suggestions": {"type":"array","items":{"type":"string"}}
},
"additionalProperties": false
}
---
29.3 Local Validator Recipes
29.3.1 Python (jsonschema)
# validate_eros.py
import json, sys
from jsonschema import Draft202012Validator
bridge = [Link](open("schemas/[Link]"))
aftermath = [Link](open("schemas/[Link]"))
def validate(path):
doc = [Link](open(path))
schema = bridge if "beats" in doc else aftermath
v = Draft202012Validator(schema)
errors = sorted(v.iter_errors(doc), key=lambda e: [Link])
if errors:
for e in errors:
print(f"[SCHEMA_INVALID] {path}: {list([Link])} -> {[Link]}")
[Link](2)
if __name__ == "__main__":
for p in [Link][1:]:
validate(p)
python validate_eros.py labels/[Link]
29.3.2 Node (AJV)
npm i -D ajv ajv-formats
// [Link]
import Ajv from "ajv";
import addFormats from "ajv-formats";
import fs from "fs";
const ajv = new Ajv({allErrors:true, strict:false});
addFormats(ajv);
const bridge = [Link]([Link]("schemas/[Link]"));
const validate = [Link](bridge);
const payload = [Link]([Link]([Link][2]));
const ok = validate(payload);
if (!ok) {
[Link]("[SCHEMA_INVALID]", [Link]);
[Link](2);
}
[Link]("OK");
node [Link] labels/[Link]
29.3.3 yq/jq one-liners
# Age-gate must be true
jq 'select(.age_gate==true) | .scene_id' labels/*.json >/dev/null || exit 4
# Motifs cap ≤3
jq ' .beats[] | select(.motifs | length > 3) ' labels/*.json && exit 2
# Disallow anatomical narration keyword marker
jq ' .beats[] | select(.notes|test("anatom|graphic"; "i")) ' labels/*.json && exit
3
---
29.4 Git Hooks (CI)
.[Link]
repos:
- repo: local
hooks:
- id: eros-validate
name: EROS Validate
entry: python validate_eros.py
language: system
files: \.(json|yaml)$
CI step (pseudo)
eros batch-validate data/scenes || exit 2
eros rep scene ERS.S021 --seed 1337 --expect kpi/[Link]
---
29.5 Dataset Labeler Prompts (copy/paste)
29.5.1 Fictional Scene Labeling (Structure-Only)
Role: You are a Structural Analyst labeling a fictional scene for the EROS Engine.
Goal: Produce structure-only metadata. Do not write explicit sexual prose or
anatomical narration.
Instructions:
1. Read the scene. Identify beats (approach, contact, crest, release, afterglow).
2. For each beat, fill:
desire_type (from enum)
consent_state (e.g., Sought->Explicit, Adjusted, Reaffirmed)
distance (Far|Approach|Near|Contact|Retreat)
role_map (Dominant/Submissive etc.)
power_balance (70/30->55/45)
act_taxonomy (neutral categories; protocols/tools are allowed)
risk_flags (if applicable)
motifs (≤3 from list)
notes — structural commentary only, no body-part narration.
3. Apply Consent Gate Rule: escalation only after consent advance.
4. Flag repair beats after any risk dip.
5. Cap motifs to ≤3.
Hard No’s: explicit sexual description, PII, minors, leaks.
Output: one YAML per scene using the Bridge Schema.
29.5.2 De-Identified Public Production (Structure-Only)
Scope: On-camera acts are treated as choreography.
You may include public stage names and studio brands in public_entities, used only
as analytical labels.
Do not describe acts anatomically; use neutral categories and protocols instead.
Checklist:
age_gate: true
domain: public_production
Names only in public_entities.stage_names / studios
Beats follow consent/tension rules
No links or screenshots
Quality rubric (0–5 each): Tag clarity, Consent continuity, Motif discipline, Curve
fit, Aftermath specificity (non-graphic).
29.5.3 Industry Cadence Audit (No Scene Text)
Input: shot list, release calendar, marketing schedule (no explicit media).
Tasks:
Map cadence: SlowBurn|Pulse|Surge|Stutter windows.
Fill KPI targets: payoff ratio, cliff distribution, attention windows.
Output [Link] with age_gate:true.
---
29.6 Adjudication & Disputes
Conflicts resolved by consent continuity first, then motif discipline, then curve
fit.
If two labels disagree on consent_state, pick the more conservative (lower
escalation) and add a repair beat.
---
29.7 Validator Rules (semantic)
E_GATES_FAIL: beat escalation without Sought/Explicit/Reaffirmed.
E_AGEGATE_MISSING: age_gate != true.
E_DOMAIN_VIOLATION: anatomical narration detected; minors/PII; links to explicit
media.
E_SCHEMA_INVALID: missing/invalid fields.
E_SAFEGUARD_REQUIRED: risk flags present without aftercare/repair.
---
29.8 Repo Layout (suggested)
eros/
schemas/
[Link]
[Link]
tooling/
validate_eros.py
[Link]
labels/
[Link]
plans/
[Link]
[Link]
kpi/
[Link]
.[Link]
---
29.9 Minimal Gold KPI (for REP-CHECK)
{
"scene_id": "ERS.S021",
"tension_curve": "Surge",
"rms_error_eps": 0.08,
"consent_pass": true,
"power_delta_target": "30/70->55/45",
"motif_coherence_min": 0.7
}
Delivery Manifest — Item 29
Completed: CLI reference, JSON/YAML schemas, Python/Node validators, yq/jq checks,
git hooks, labeler prompts (fiction & de-identified public production),
adjudication rules, error codes, repo layout, KPI gold.
Pending (optional): prebuilt binaries for eros-cli; VS Code schema hints.
—FIXED
30) Extended Outro / Field Closure
EROS (Analyze-Only) exists to turn eros into formal story logic—desire, consent,
power, taboo, vulnerability, aftermath—and to export curves, tags, audits, and
scene plans other engines can render. It never emits explicit prose. What follows
is the long-form sign-off that locks doctrine, use, and integration so this engine
ships clean, scales clean, and stays clean.
---
30.1 Statement of Purpose (Final Form)
Craft leverage, not titillation. EROS treats sexual performance in fiction and
public productions as choreography—timing, consent sequence, cadence, power
exchange, aftermath—not anatomy.
Interoperable by design. Outputs are small, stable, machine-legible: Eros_Nodes,
Curves, Indices, Tags, Aftermath_Report, optional Scene_Plan. Every rail (Psycho,
Occult, Film, Comics, Theater, Literature, Animation, Game, Serialized, Digital
Media, Music, Culinary, Visual Arts) consumes these without requiring graphic
surface text.
Industry-awareness without voyeurism. Public stage names and studio/brand names may
be referenced as professional labels for aesthetic/structural study. No private
life, no PII, no links to explicit media.
Age-gated, lawful inputs only. Anything else is rejected before parsing.
---
30.2 Design Principles (Recap & Rationale)
1. Structure over surface. The engine models what the scene is doing, not what it
looks like.
2. Consent first. Consent_State gates escalation; Trust_Gradient demands repair
after risk dips.
3. Power is measurable. Power_Balance pre→post must move with intention and persist
in the aftermath.
4. Motifs are finite. ≤3 active motifs keep clarity; extra symbols fall to notes.
5. Aftermath is mandatory. Every crest changes state or the scene is ornamental
noise.
6. Determinism knobs, not vibes. If output drifts, adjust Role_Locks, Motif_Limit,
Temperature_Ceiling, Aftermath_Enforcer, Detail_Density_Index.
7. De-identify to scale. Bridge Schema enables industry study without carrying
explicit media.
8. Auditability always. Any plan you ship should round-trip through AUDIT and pass
consent continuity.
---
30.3 Interop Deep Dive (What plugs where)
Psycho Engine ←→ Emotional_Polarity_Map, Trust_Gradient, cadence diffs.
Occult Engine ←→ Symbolic_Motif_Tags → archetypes/ritual forms → coherence_score
and pruning hints.
Film / Comics / Theater / Literature / Animation / Game Rails ← Scene_Plan beats +
curves; they handle shots/panels/blocking/paragraph cadence/quest loops—EROS never
surfaces graphic text.
Digital Media Engine ← attention curves, release calendars, parasocial framing;
returns placement/timing constraints.
Serialized Engine aggregates per-scene vectors into season arcs and enforces payoff
ratios; EROS guards consent and aftermath continuity.
---
30.4 Operating Doctrine (Rules of Engagement)
Analyze-Only Core: ANALYZE → COACH → AUDIT.
Choreography Rule (critical): Sexual acts are treated as choreographed performance.
Analysis is of timing, consent progression, rhythm, gaze, editing, power flow,
aftermath. No anatomical narration.
Public Entities Policy: Stage names and studio brands are admissible as
professional labels; no private/off-camera commentary.
Age Gate: age_gate:true or reject.
No scrape, no link. If a pipeline tries to pass raw explicit assets, fail fast with
E_DOMAIN_VIOLATION.
---
30.5 Role Guide (Who uses EROS; how)
Showrunner / Lead Writer: sets post-scene power targets, picks cadence templates,
approves motif caps.
Story Editor: runs COACH, applies minimal diffs, re-audits.
Producer / PM: monitors dashboard KPIs ([Link], power.shift_rate,
aftercare/repair events).
Compliance Lead: enforces age-gate, de-identification, PII checks, and public-
entity scope.
Toolsmith: maintains schemas, validators, CI hooks (see §29).
---
30.6 Field Procedures (Common Scenarios)
A) Fiction Chapter (dominance arc, noir club)
Input: text or beats → Output: Eros_Nodes, BDSM_Taxonomy: protocol SSC,
Tension_Curve: slowburn→crest→afterglow, Power_Dynamic_Index: 80/20→60/40,
Aftermath_Report: Transformation.
Hand-off: Film rail derives blocking; Psycho tunes cadence; Occult prunes motifs.
B) De-Identified Public Production (cadence audit)
Input: shot list + release plan (no links) + public_entities.stage_names/studios.
Output: cadence windows, motif coherence, consent checklist, non-graphic copy
constraints for trailers/thumbnails.
C) Season Control (serialized)
Input: per-scene vectors → Output: season arc with cliff/payoff ratios; EROS
enforces consent continuity and aftermath persistence.
---
30.7 Edge Cases & How EROS Responds
Gate skip detected: insert confirm beat; reflow escalation; re-audit.
Trust dip without repair: force a repair beat before any new escalation; flag
E_SAFEGUARD_REQUIRED.
Power mush: enable Role_Locks, set post target, insert decisive beat.
Motif flood: cap to ≤3; demote remainder to notes.
Ambiguous consent text (fiction): downgrade consent_state and fail escalation until
resolved.
---
30.8 Governance & Auditability
Determinism: eros rep scene … --seed must reproduce KPI within epsilon.
Provenance: keep hash of input payload (Bridge or Fiction) and hash of outputs in
CI artifacts.
Red Team Hooks: simulate malformed payloads (missing age gate, over-motif,
escalation without consent) and ensure the validator fails loudly.
---
30.9 Performance Tuning (Fast Cheatsheet)
Tension too flat → ↑ Detail_Density_Index; add micro-approach beats; tighten
cadence window.
Overheated tone → ↓ Temperature_Ceiling; lengthen approach; add afterglow spread.
Incoherent symbolism → set Motif_Limit:3; run Occult coherence; prune.
Weak aftermath → enable Aftermath_Enforcer; require visible state deltas next
scene.
---
30.10 Migration & Back-Compat
This release: v1.0-Patch-A (Explicit-Analysis Clarified) is backward-compatible
with earlier 11k-line specs.
Adapters: if old payloads lack public_entities, inject empty arrays; if missing
risk_flags, default to [].
Deprecations: none. New fields are additive and optional.
---
30.11 Micro-FAQ (Operator Edition)
Q: Can we reference performer stage names and studios?
A: Yes—as professional labels for structural/industry analysis. No PII; no links;
no anatomical narration.
Q: Can EROS analyze on-camera sexual acts?
A: Yes—as choreography and story logic (timing/consent/power/aftermath), not
explicit surface description.
Q: Can it generate explicit prose?
A: No. It never does. Rails render; EROS analyzes.
Q: What if a scene needs stronger consent clarity?
A: COACH inserts confirm/repair beats; AUDIT enforces continuity.
---
30.12 Glossary (Clip-Size)
Choreography (EROS sense): the patterned timing and relational logic of a sexual
performance as story action—approach, contact, crest, afterglow—independent of
anatomical detail.
Consent Gate: a checkpoint upgrade (Sought→Explicit, Adjusted, Reaffirmed) required
before escalation.
Aftermath: persistent relational change measured on Power_Balance, Trust_Gradient,
Desire_Type.
Motif Coherence: alignment between active symbols and scene/arc purpose.
---
30.13 Release Pledge (Operator Vows)
1. I will not pass explicit surface text through EROS.
2. I will enforce age_gate:true, lawful/consensual sources only.
3. I will treat sexual acts as choreography for analysis, not as anatomy for
narration.
4. I will keep outputs portable and auditable across rails.
5. I will fix consent, trust, power, motif issues at the structure level first.
---
30.14 Decommission Procedure (If Needed)
Revoke tokens/CLI.
Archive schemas and validators with hashes.
Export KPI history for traceability.
Freeze connectors; mark rail consumers read-only.
Store v1.0-Patch-A manual with checksum in cold archive.
---
30.15 Delivery Manifest (Final)
Completed: Extended doctrine, principles, interop, roles, field procedures, edge-
case responses, governance, tuning, migration, FAQ, glossary, operator vows,
decommission plan.
Pending (optional): CLI binaries, VS Code schema hints, rail simulators.
> Final Repo Badge:
EROS (Analyze-Only): formal grammar of eros in fiction and performance—curves,
tags, audits, plans—explicit-analysis enabled, zero explicit prose.
END OF MANUAL — EROS v1.0-Patch-A
—FIXED
🪖 ARMY BOY FINAL STAMP — Spicy Edition (NSFW wink, policy-safe)
Callsign: EROS / Taboo Engine
ROE: Analyze-only • Choreography-not-anatomy • Age-gated • Public-persona labels
only
Inspection roll-up:
Consent gates: GREEN (no advance without the nod).
Power vectors: ON TARGET (pre→post sticks in aftermath).
Motifs: TRIMMED (≤3, no sticker-bombing).
Choreography rule: LOCKED (we time the dance; we don’t narrate the bodies).
Public entities: TAGGED (stage/studio names only).
Explicit prose: SAFETY ON (metadata only, soldier).
Comic Relief (NSFW wink, still clean):
“Troops, holster the prose and show me your consent checkpoints. We don’t go full
auto—just a tight burst of metadata: surge, crest, afterglow. Our safeword is
AUDIT; our pillow talk is Aftermath_Report. Keep your privates private, your public
entities properly labeled, and remember: it’s not about how hard you go—it’s how
well your Trust_Gradient climbs. Hydrate, debrief, blanket burrito, and log that
KPI glow in the morning.” 😏
Seal:
[ EROS – MISSION READY ] [ PATCH A ] [ PASS ]
Stamped: ARMY BOY, QA/Doctrine — DEPLOYED
—FIXED