feat(sim): emotions are a right-brain output (Right knob alone) #24

Merged
benstull merged 1 commits from feat/affect-right-brain-only into main 2026-06-26 11:29:36 +00:00
Owner

The affect channel previously gated on BOTH knobs (strength = min(left, right)), so the analytical Left brain co-controlled the emotion words. Per operator direction, emotions are now driven by the Right (dreamlike) knob alone — Left no longer gates them. Sharpens the split: Left = measurement, Right = the dream AND the feeling it evokes.\n\n- player/alteration.py: _affect_strength(right) = right; intensity keyed off Right; docs updated.\n- app.js: renderAffect comments (logic already keyed off the passed strength).\n- Affect design spec: revision note + every min(left,right)right.\n- Tests rewritten for the Right-driven model.\n\n271 passed, 2 skipped. Live API verified (left=0/right=4 → strength 4; left=4/right=0 → 0).\n\n🤖 Generated with Claude Code

The affect channel previously gated on BOTH knobs (`strength = min(left, right)`), so the analytical Left brain co-controlled the emotion words. Per operator direction, **emotions are now driven by the Right (dreamlike) knob alone** — Left no longer gates them. Sharpens the split: Left = measurement, Right = the dream AND the feeling it evokes.\n\n- `player/alteration.py`: `_affect_strength(right) = right`; intensity keyed off Right; docs updated.\n- `app.js`: renderAffect comments (logic already keyed off the passed strength).\n- Affect design spec: revision note + every `min(left,right)` → `right`.\n- Tests rewritten for the Right-driven model.\n\n271 passed, 2 skipped. Live API verified (left=0/right=4 → strength 4; left=4/right=0 → 0).\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)
benstull added 1 commit 2026-06-26 11:29:34 +00:00
The affect channel previously gated on BOTH knobs (strength = min(left, right)),
so the analytical Left brain co-controlled the emotion words. Per operator
direction, emotions are now driven by the Right (dreamlike) knob ALONE — Left no
longer gates them. This sharpens the split: Left = measurement (detections +
measurements), Right = the dream AND the feeling it evokes.

- player/alteration.py: `_affect_strength(right) = right` (was min(left,right));
  `_affect_intensity` keyed off Right. AffectOverlay + is_identity docs updated
  (is_identity still holds: right>0 ⇒ dream.strength>0).
- simulator/static/app.js: renderAffect comments (gating is Right via `strength`);
  the client logic already keyed min_level/tier off the passed strength + right.
- Affect design spec: revision note + every min(left,right) → right.
- Tests rewritten: affect is Right-driven (full Right + Left 0 surfaces affect;
  Right 0 + Left 4 surfaces none).

271 passed, 2 skipped. Live API verified: left=0/right=4 → strength 4; left=4/
right=0 → strength 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
benstull merged commit d0ad9a9ac9 into main 2026-06-26 11:29:36 +00:00
Sign in to join this conversation.