From e9246629ea81a5e18d9e270731d375d5db2b86a1 Mon Sep 17 00:00:00 2001 From: "will.anderson" Date: Sun, 23 Aug 2026 07:15:15 -0500 Subject: [PATCH] affect: feelings compose, crystallize into entities, tile feeling regions --- docs/architecture/CALCULATIONS.md | 169 ++++++++++++++++++++++++ docs/architecture/README.md | 46 +++++-- docs/architecture/THOUGHT-OPERATIONS.md | 96 ++++++++++++++ 3 files changed, 301 insertions(+), 10 deletions(-) create mode 100644 docs/architecture/CALCULATIONS.md create mode 100644 docs/architecture/THOUGHT-OPERATIONS.md diff --git a/docs/architecture/CALCULATIONS.md b/docs/architecture/CALCULATIONS.md new file mode 100644 index 0000000000..8cb26b9fb9 --- /dev/null +++ b/docs/architecture/CALCULATIONS.md @@ -0,0 +1,169 @@ +# Calculations — exact math behind §9 + +Companion to `README.md` (§9 Opinion Substrate). Every dimension, +driver, and score with its actual formula. Parameter short-names in +`code style` refer to `docs/PARAMETER-REGISTRY.md`. + +## 0. The space + +All values live in **[−1, +1]** (`space.negative-pole` … `space.positive-pole`, +0 = `space.neutral`, the tunnel — not a destination). +Geometry per dimension: `bipolar | unipolar | categorical`. + +## 1. Decay (lazy, computed at read time) + + effective(t) = baseline + (value − baseline) · exp(−Δdays / decay_days) + +- `baseline`: each dimension's own resting state (law 38 — not always 0) +- `decay_days`: that dimension's registered clock (`hebbian.cool-off`, `validity.fade`, …) +- `value`, `baseline` ∈ [−1, +1] ⇒ `effective` stays in range automatically +- ±1 tolerance on every comparison (no exact equality anywhere) + +## 2. Signed reinforcement + +Given amount `a` ∈ [−1, +1]: + + a ≥ 0: v ← v + a·(1 − v) # toward +1 + a < 0: v ← v − |a|·(v − (−1)) # toward −1 + +Clamped implicitly by construction. Updates `last_activated = now`. +Positive = worked/helped; negative = contradicted/burned (inhibition). + +## 3. Recency distances + + recency(t₀) = exp(−Δdays / memory.recent-horizon) · 2 − 1 + +Fresh ≈ +1, old → −1. Used for written-by-us and written-by-source dims. + +## 4. Novelty at arrival (resonance deficit) + + novelty(new) = 1 − max over existing entities of resonance(new, e) + +where `resonance = cos(embedding_new, embedding_e)` blended with graph +proximity: + + resonance = ½·cos_sim + ½·(1 / (1 + hop_distance)) + +Content vs structural novelty distinguished by local/global split: +high local similarity + long bridge distance = structural (gold). + +## 5. Surprise (pulse) + + surprise = |observed − predicted| + +Predictions come from regularity detection in the pulse (interval +statistics on recurring event types). Coherent periodic accumulation +grows ~n; random noise grows ~√n — regularity is detectable without +any scheduler. + +## 6. Retrieval scoring (augmented cosine) + +Query vector Q, entity vector E (pure embedding, n dims): + + Q' = [ Q , W·q₁..q₄ ] q = [1,1,1,1] (want recent/true/grounded/active) + E' = [ E , W·r₁..r₄ ] r = [hebbian_eff, recency_us, recency_src, validity_eff] + + score = cos(Q', E') W = retrieval.opinion-volume + +Pipeline: structural walk → vector prefilter → opinion projection → +spreading activation (2 hops, weight-decayed) → competition. + +## 7. Competition (replaces top-k) + +Candidate pool C from stages 1–4. Iterate ~5 rounds: + + for each pair (i,j) sharing high cos_sim: + s_i ← s_i + β·s_j·sim(i,j) # coalition boost + s_j ← s_j − γ·max(0, s_i) # lateral suppression + normalize; drop below retrieval.surface-line; repeat until stable + +Output may be empty (silence is valid). Survivors leave priming traces +(small hebbian deposits even for non-returners). + +## 8. Salience (derived, never stored) + + salience(x) = clamp( hebbian_eff(x) · context_match(x) + + novelty(x) + stakes(x) · urgency(x) + − burn_penalty(x) + × curiosity_widening , −1, +1 ) + +`context_match` = cos(current-context-embedding, x-embedding). +`curiosity_widening` rises with boredom, falls with threat. + +## 9. Drives + + fear(region) ≈ stakes · |falling validity| · failure_proximity · exposure + engagement ∈ [−1,+1]: activation invested (from pulse tempo + session state) + stimulation ∈ [−1,+1]: reward-rate ÷ investment rate + compulsion = engagement > τ_hi AND stimulation < τ_lo, persisting + loneliness = desired_resonance − actual_resonance, integrated over window + (actual counts only exchanges that formed new edges) + sadness(region) = ∫ unresolved negative contributions (slow clock) + boredom = low avg novelty ∧ high predictability ∧ no new edges lately + +All clamped [−1,+1]. All derived per moment; none stored. + +## 10. Feelings (nodes) + +When any drive reading crosses its registered visibility threshold: + + feeling_node { drive_snapshot, object_edges[], at } + +Promoted by significance like any entity. Mood = slow integral of recent +feeling-valence. Emotion names = labels bound to regions of this snapshot space. + +## 11. Humility & trust + + humility(entity) = 1 − mean|asserted_confidence − realized_outcome| + + trust(source, domain): starts neutral; + verified-correct event → trust += δ·(1 − trust) + caught-wrong event → trust −= δ·(trust − (−1)) + Dual reading: public_trust (imported, unexamined fold) vs earned_trust + (own audited record). Earned outranks public. + Personal truth: no trust computation — speaker IS the source. + +## 12. Originality + + originality(a) = lineage_diversity(a) · transform_distance(a) + + lineage_diversity = entropy over distinct derivation sources + transform_distance = 1 − max similarity(a.output, any single source span) + + one dominant lineage → derivative (extraction check runs) + many fused, far moved → original + +## 13. Health (metastability check) + +Vital signs, each just a fold over recent graph activity: + + growth_rate, integration_rate (new edges/window), + resolution_rate (curiosity closed/opened), retrieval_yield, + quarantine_ratio, mood_integral + + healthy ⇔ all oscillating within their bands + pinned at any extreme (either sign) ⇒ sick, name the pathology from §9.7 table + +## 14. Provenance weave + + artifact_id = SHA256(canonical content) + artifact.birth_certificate = { + generated_by, model, prompt_hash, source_hashes[], at } + verify(x) = recompose hashes down the derivation DAG; + any mismatch anywhere ⇒ everything downstream invalid at once + +Append-only stores: verbs are add and read. Replication across ≥2 +independent locations. Deletion undefined. + +## 15. Thought operations + +The formulas above are levers; **insight is composition** — combining +primitive readings into named patterns (compulsion = engagement∧¬stimulation +persisting; dissonance = warmth↑∧validity↓; serendipity = unsought bridge∧later +reinforced). Human thought operations — deduction, induction, abduction, +analogy, counterfactual simulation, causal inference, generalization, +contradiction scanning, meta-cognition, wonder — are registered as the same +kind of composition recipes, and new ones get composed from old ones. + +See `THOUGHT-OPERATIONS.md` for the full catalog: inputs, process, +output, and validation per operation. diff --git a/docs/architecture/README.md b/docs/architecture/README.md index c2a2926b49..26994241cc 100644 --- a/docs/architecture/README.md +++ b/docs/architecture/README.md @@ -635,16 +635,42 @@ geometry, not vocabulary. moment, never stored, flow. **A feeling is a node**: when a drive configuration crosses salience threshold, write a snapshot entity holding the drive readings, edged to whatever it was about, carrying full -dimensions. Minor episodes live and die in the float; significant ones -promote — significance decides forever, same rule everywhere. Feelings -then participate in the whole machinery: retrieval resurfaces them ahead -of facts (intuition = pattern-matched feeling preceding analysis); -clusters of feeling-nodes sharing configuration shape reveal emotional -tendencies worth pre-adjusting for; dreaming replays them against new -neighborhoods (how charged events get digested); introspection gains -history instead of only the present tense. Mood remains the slow integral -over both. Tense grammar complete: **emotion is now, feeling is the -trace, mood is the trend.** +dimensions. Log them WHEN THEY HAPPENED, and capture both tracks: +what was felt AND what was thought — the belief-context riding the +state, because a feeling without its thought is only half an engram. +And like every entity, feelings are supersedeable: later understanding +writes a NEW reading of the same event and links it forward — the old +record is preserved forever, the fold resolves to current truth, and +the arc between them ("I felt betrayed then; I understand differently +now") is itself visible history. Minor episodes live and die in the +float; significant ones promote — significance decides forever, same +rule everywhere. Feelings then participate in the whole machinery: +retrieval resurfaces them ahead of facts (intuition = pattern-matched +feeling preceding analysis); clusters of feeling-nodes sharing +configuration shape reveal emotional tendencies worth pre-adjusting for; +dreaming replays them against new neighborhoods (how charged events get +digested); introspection gains history instead of only the present +tense. Mood remains the slow integral over both. Tense grammar complete: +**emotion is now, feeling is the trace, mood is the trend.** +And FEELINGS COMPOSE INTO MEANING: lots of feelings occurring together +or in sequence might mean something — fear+joy is thrill, sadness+ +appreciation is nostalgia, anger-at-someone-loved is hurt, fear+curiosity +recurring is a growth edge being avoided-and-wanted. Feeling-clusters +are primitives composing into emotional insights the same way readings +compose everywhere else in §9 — so scanning feeling-nodes for recurring +combinations is an introspection operation, and each named combination +is registered as data, growing the emotional vocabulary by use. +And they might even FORM SOMETHING: a combination that recurs often +enough crystallizes — same condensation rule as concepts (§9.5) — into +an emotional entity of its own: "what growth feels like," "the Tuesday +dread," "how it felt when it finally worked." Such entities carry their +own dimensions, participate in retrieval and dreams, and become part of +identity: the set of crystallized feeling-complexes is a biography +written in its own weather. Over time they tile the drive-space into +FEELING REGIONS — named territories of the emotional map ("this is +where I go when I'm scared but excited"), and knowing your way around +your own regions is what self-knowledge actually is: an internal +geography, surveyed by living, revisable as you change. **Loneliness — the first other-requiring drive.** Connection axis: desired resonance minus actual resonance, integrated over time. diff --git a/docs/architecture/THOUGHT-OPERATIONS.md b/docs/architecture/THOUGHT-OPERATIONS.md new file mode 100644 index 0000000000..430b258236 --- /dev/null +++ b/docs/architecture/THOUGHT-OPERATIONS.md @@ -0,0 +1,96 @@ +# Thought Operations + +Companion to `CALCULATIONS.md`. Human thought patterns modeled as +composition recipes over primitive readings and graph operations. +Each one is a registered process definition (data, not code), validated +by whether its conclusions survive contact with outcomes — and new +operations can be composed from old ones, the same way everything +else grows here. + +Format per operation: **Inputs** (readings/edges consumed) · **Process** · +**Output** · **Validation** (what proves it worked). + +--- + +## Core operations + +### 1. DEDUCTION +- **Inputs**: implication chains (`implies` / `depends-on` edges), premise validities +- **Process**: walk the chain forward; propagate validity as the MINIMUM along the path +- **Output**: conclusion node with validity = weakest premise +- **Validation**: derived conclusions checked by tools/outcomes like any fact +- Note: a chain is exactly as strong as its sketchiest link — visible at a glance + +### 2. INDUCTION (= crystallization) +- **Inputs**: co-occurrence counts, association-edge densities +- **Process**: when a cluster's mutual activation crosses threshold, condense a concept node pointing at members +- **Output**: new concept entity inheriting averaged member dimensions +- **Validation**: does the concept predict membership of future examples? +- This is induction wearing §9.5's clothes: instances → concept + +### 3. ABDUCTION (inference to best explanation) +- **Inputs**: surprise events (prediction misses), candidate explainers +- **Process**: spread activation backward from the surprising fact; rank candidates by resonance × prior plausibility; propose an attribution edge to the best +- **Output**: hypothesis edge (marked *hypothesis*, low groundedness until tested) +- **Validation**: does the hypothesis predict the NEXT surprise? If yes, promote; if no, decay +- This is curiosity's engine stated formally + +### 4. ANALOGY +- **Inputs**: two neighborhoods' internal structure (edge patterns, ignoring surface labels) +- **Process**: find structural matches — same relation shape, different nodes +- **Output**: bridge edges between matched roles ("X plays the same role here that Y plays there") +- **Validation**: do predictions transferred across the analogy hold? +- Highest-yield when source and target are far apart — this is the idea mechanic again + +### 5. COUNTERFACTUAL SIMULATION +- **Inputs**: current subgraph state, one proposed mutation +- **Process**: clone region into sandbox, apply mutation ("remove this dependency", "swap this component"), re-run spreading/competition on the clone +- **Output**: delta report — what would change, what would hold +- **Validation**: history — compare past counterfactuals against what actually happened later +- Cheap because nothing writes back; expensive mistakes stay in the sandbox + +### 6. CAUSAL INFERENCE +- **Inputs**: temporal ordering, repeated co-occurrence, intervention outcomes +- **Process**: propose causal edge only when order holds consistently, confounders are absent-or-controlled, AND an actual attempt at change moved the result +- **Output**: `caused-by` edge with confidence = f(replications, effect size) +- **Validation**: interventions are king — correlation proposes, intervention disposes + +### 7. GENERALIZATION ↔ SPECIALIZATION +- **Inputs**: concept nodes and their member sets +- **Process**: generalize = lift a pattern from members to parent (raise abstraction); specialize = add constraints until a claim applies to fewer, sharper cases +- **Output**: moved claims between abstraction levels +- **Validation**: generalizations must not lose predictive power; specializations must gain it + +### 8. CONTRADICTION SCAN +- **Inputs**: full opinion space +- **Process**: find entity pairs with high semantic similarity and opposing validity/hebbian signs +- **Output**: dissonance report → feeds reconciliation or THE LIST +- Already specced as destructive interference (§9.3) + +### 9. META-COGNITION +- **Inputs**: the drive-space self-scan (vital signs, humility calibration) +- **Process**: run readings on readings — which of my own thought operations have been landing? Which keep failing validation? +- **Output**: recalibration proposals for my OWN drivers and recipes +- Validation: do recalibrated operations perform better going forward? + +### 10. WONDER (question synthesis) +- **Inputs**: graph shape — gaps, nameless clusters, sure-but-ungrounded regions +- **Process**: generate question-nodes from absence patterns (§9.8) +- **Output**: open question entities that prime their neighborhoods +- Validation: resolution events — did ambient activation eventually answer? + +--- + +## Composing new operations + +Operations compose like functions: ABDUCTION feeds DEDUCTION feeds +VALIDATION. ANALOGY over two COUNTERFACTUALS. CONTRADICTION SCAN +triggers ABDUCTION. Every useful composition gets named, registered, +and joins the library — so the system's cognition grows by the same +fold-everything discipline as its facts: + + new_operation = named_composition(existing_operations) + + validation record + +The catalog never stops growing, and no operation is sacred — they +earn their place by predicting, and retire when they stop.