Repository navigation
AFFECT LAYER
An optional description of what a RISE experience is doing across text, pace, image, type, and sound. It does not admit configuration and it does not run inside the player.
Read docs/adr/0001-affective-semantic-layer.md for the decision and docs/affect/RESEARCH-LOG.md for what was refused. The passage-level outputs are in docs/affect/BENCHMARK.md.
| Kind | Examples |
|---|---|
| Measured | Words per minute, palette swatch converted to hue and luminance, a caller-supplied loudness or spectral density, visual mode off |
| Inferred | Text valence and the other lexicon-backed axes |
| Derived | Tension from several text features, perceptual density from type-token ratio, cross-modal contrast |
| Prior | The numeric map from pace onto arousal, from hue onto warmth, from letter-spacing onto expansiveness |
| Authored | A number a person wrote on an affect program |
| Offline witnesses | EmoPair checkpoints, the MiniLM probe, and the local teacher. They are benchmark columns. The player does not load them. |
A prior is a scale choice. It is not a result from this corpus.
npm run affect:benchmark
npm run affect:export-brief -- path/to/text.txt path/to/outdir
node scripts/affect/fit-readout.mjsaffect:export-brief writes affect-brief.json and affect-prompt.md. The brief is a proposal list. The prompt asks for rise.affect-program.v1. A returned program is admitted with admitAffectProgram and becomes user only when saveAffectProgram is called. The player does not read either file.
modulatePlateColorsAt(look, program, phraseIndex) turns a procedural plate's hue by warmth and scales its sat by arousal. modulateFlameColorsAt does the same to a Living Flame recipe's macros.hue and tone.vibrancy. Arousal at 0.5 leaves the authored strength. Valence does not move hue. A phrase with no span returns the same object. Palette names, grain, chroma, geometry, and motion stay put. The visual engines do not import this layer.
Home → More → Emotions opens the map. Texts with valence and arousal sit in the plane. Attractor colors and Living Flame scenes with warmth sit on a spectral ring. A Thomas attractor turns through that ring. Hue follows warmth. White, and any other axis that was not estimated, stays off the map.
modulateEnergyAt(engine, parameters, program, phraseIndex) scales the one energy parameter attractor, night-streaks, and Living Flame already expose. The signal is motionEnergy. At 0.5 the authored value stays. Attractor and night-streak speed stay between 0.25 and 4. Living Flame energy stays between 0 and 1, on the field or on the recipe. Arousal does not move it. Apparitio, Ostensoria, Harmonograph, Klee, and Genesis are not channels. Brightness, hue, palette, and transforms stay put.
fit-readout exits 2 until a JSON file of judgments contains 24 records with annotatorKind of human. It does not invent weights.
maybeEvaluate(candidate, env) returns { status: 'disabled' } unless env.RISE_AFFECT is 1 or true. evaluateCandidate always evaluates, never writes the candidate, and still returns a pacing or visual state when the text encoder throws.
The candidate is a plain object: text, visualConfig or visual.measured, audioFeatures, pacing (wpm, chunkMode, curve, revealMode), typography, and intent. intent.target names axes. intent.intentionalContrast keeps disagreement out of the conflict component. intent.weights is the only way a single composite is produced.
Published from docs/affect/AFFECT-LAYER.md. Edits made here are overwritten on the next push to main.
Start here
- COMPOSER-FIRST-ROADMAP
- VISION
- PROJECT-KNOWLEDGE
- ARCHITECTURE
- SYSTEM-DESIGN-REVIEW-2026-08-22
- ACCOUNT-SAVES
- RELEASING
- PLUS-CUSTOMER-LIFECYCLE
- AGENTS
Release
Pilot
- LIVE-CURRENT
- LIVE-HANDOFF
- LIVE-MCP
- DIRECTORY-SCREENSHOTS
- INSPECTOR-RUN-2026-10-10
- CLAUDE-RUN-2026-10-10
- CREATIVE-CONTROL-EVALS
- PERCEPTION-EVAL
- SOUND-LEVELS
- WORDING
- RUN-2026-10-08
- COMPOSER-INSTRUMENTS
- CHATGPT-DEMO
- EMBED-WITNESS
- RISE-GATE0
- CHATGPT-HOST-2026-10-04
- LIVE-002-HOST-2026-10-05
- EMBED-STAGE-HOST-2026-10-07
- RELEASE-GATES-2026-10-07
- EMBED-SAFETY-2026-10-05
- LIVE-GEMINI
- LIVE-EVALUATION
- LIVE-RED-TEAM
- CURRENT-CONSOLIDATION
- RISE-CHANGES
The Archive - texts and their editing
- ARCHIVE-CANON-SPEC
- ARCHIVE-CLEANSING-SPEC
- CORPUS-REVIEWER-PROMPT
- TYPESETTING-CANON
- PHRASE-CHUNKING-STUDY
- CHUNKER-AWARENESS-STUDY
- LIBRARY-SPEC
- SOL-PD-ACQUISITIONS-DOSSIER-LITERATURE-2026-07-28
Authoring - scores, rooms, and rendering
- EXPERIENCE-PROGRAM-SPEC
- LIVE-CURRENT-EVENTS-V1
- RISE-CURRENT-V1-SLICE
- RISE-SDK
- SCRIPTORIUM-SPEC
- WORKSHOP-COMPOSITION-STUDIO-SPEC
- AGENT-COMPOSITION-AND-RENDER-SPEC
- NARRATION-LANE-SPEC
- RECITATION-SPEC
- SCRIPTORIUM-STRENGTHENING-SPEC
Reading surfaces
- PAGE-MODE-SPEC
- RHYTHMIC-VISUAL-PRESENCE-SPEC
- LATERAL-TRAVERSAL-SPEC
- CONTINUOUS-FIELD-SPEC
- JEV-VARIANCE
- INVOCATION-SKINS
- PHASE-2-SAFETY-SPEC
- SPATIAL-CHAMBER-SPEC
- Premium_Mobile_Chamber
Imagery - what may be shown, and on whose authority
- MUSEUM-ATLAS
- SOURCE-CURATION-SPEC
- SOURCE-EXPANSION-SPEC
- ATRIUM-IMAGERY-SPEC
- PERICOPE-IMAGERY-SPEC
- icon-museum-request-draft
- TEXT-ATTUNED-IMAGERY-SPEC
The Chapel
Direction and unbuilt work
Affect and the Emotions room
Reading decision service and retired gate
Product direction and team tracking
- README
- READER-DIRECTION
- CONSOLIDATED-READER
- COMPOSER-FIRST-ROADMAP
- TRACKER-DESIGN
- 2026-10-03-direction-decisions
- 2026-10-04-composer-decision
- 2026-10-05-consolidated-reader-decisions
- 2026-10-05-embed-stage-decision
- 2026-10-06-score-speech-service-roadmap
- 2026-10-07-current-with-a-look
- 2026-10-07-reader-control-and-replay
- 2026-10-05-one-colour-vocabulary-design
- 2026-10-07-chrome-follows-theme
- 2026-10-07-gallery-follows-with-works
- 2026-10-05-canonical-home-design
- 2026-10-04-reader-evidence
- 2026-10-original-performance-roadmap
- 2026-10-08-voice-hardening-2-findings
- 2026-10-09-feelings-sounds-parked
- 2026-10-10-connector-directory-readiness
- 2026-10-10-connector-submission-packet
- 2026-10-16-mystery-school-complete-library
- 2026-10-13-mystery-school-plan