@@ -455,3 +455,153 @@ Next cycle's F landscape is different (Column F awareness feeds back)
455455
456456** Total:** 24 deliverables. Phase 1 = 4 (all S). Phase 2 = 6 (2S + 3M + 1S).
457457Phase 3 = 9 (3S + 4M + 1L + 1M). Phase 4 = 5 (1S + 2M + 1S + 1M).
458+
459+ ---
460+
461+ ## §11 Addendum: Horizontal vs Vertical Perturbationslernen
462+
463+ ### The distinction
464+
465+ Two orthogonal perturbation-learning axes operate simultaneously:
466+
467+ ** Horizontal (spatial, within one cycle):**
468+ ```
469+ L1 (64²) → L2 (256²) → L3 (4K²) → L4 (16K²) → ONNX → L1
470+ ```
471+ The pyramid cascade is SPATIAL fan-out. One perturbation widens through
472+ cache-aligned levels in a single cycle. ONNX closes the loop by
473+ compressing L4 back to an L1 perturbation. This is Column G's domain.
474+
475+ ** Vertical (temporal, across cycles):**
476+ ```
477+ Cycle N: Column E emits OntologyDelta + Column F emits awareness
478+ │ │
479+ ▼ ▼
480+ Cycle N+1: Column E reads accumulated Column F reads prior
481+ ontology as CONTEXT for awareness as SEED for
482+ this cycle's detection this cycle's F-landscape
483+ │ │
484+ ▼ ▼
485+ Cycle N+2: ...ripples propagate...
486+ ```
487+ The ontology and awareness columns are TEMPORAL accumulators. Each cycle's
488+ output feeds the next cycle's input. This is "thinking about thinking" —
489+ the system's self-model (ontology) and self-confidence (awareness) evolve
490+ over time, and each cycle's reasoning is shaped by the accumulated
491+ epistemic state of all prior cycles.
492+
493+ ### Correction to D-E3 (novel pattern detection)
494+
495+ The original D-E3 was hand-waved: "emit OntologyDelta when the cycle
496+ discovers a novel triplet pattern." This implies fresh detection from
497+ scratch each cycle — WRONG.
498+
499+ ** Corrected D-E3:** The shader cycle READS the accumulated ontology state
500+ from prior cycles (wire accumulation), then COMPARES the current triplet
501+ against it. The delta IS the comparison:
502+
503+ ``` rust
504+ /// D-E3 corrected: ontology delta is a COMPARISON against accumulated prior,
505+ /// not a fresh heuristic detection.
506+ fn compute_ontology_delta (
507+ current_triplet : & CausalEdge64 ,
508+ accumulated_ontology : & AccumulatedOntology , // ← read-back from prior cycles
509+ pearl_rung : u8 ,
510+ ) -> OntologyDelta {
511+ let entity_type = accumulated_ontology . classify_entity (current_triplet . s_idx ());
512+ let relation_type = accumulated_ontology . classify_relation (current_triplet . p_idx ());
513+
514+ let kind = if entity_type == 0 && relation_type == 0 {
515+ DeltaKind :: None // routine — matches accumulated expectations
516+ } else if accumulated_ontology . has_entity (entity_type ) {
517+ DeltaKind :: Confirm // seen before, reinforces
518+ } else {
519+ DeltaKind :: Extend // genuinely new — accumulated ontology grows
520+ };
521+
522+ // Contradiction detection: does this triplet's truth disagree with
523+ // the accumulated truth for the same (S, P, O) pattern?
524+ let kind = if accumulated_ontology . contradicts (current_triplet ) {
525+ DeltaKind :: Contradict
526+ } else {
527+ kind
528+ };
529+
530+ OntologyDelta { entity_type_id : entity_type , kind , pearl_rung , .. }
531+ }
532+ ```
533+
534+ The ` AccumulatedOntology ` is the vertical read-back: it persists across
535+ cycles (not per-row, not per-dispatch — it's the running integral of all
536+ prior Column E deltas). It lives on ` ShaderDriver ` alongside ` awareness `
537+ but unlike awareness (which the prior epiphany criticized as driver-global),
538+ the accumulated ontology IS correctly global because it represents the
539+ system's learned structural knowledge, not per-stream epistemic state.
540+
541+ ### Column F vertical read-back
542+
543+ Similarly, Column F awareness from cycle N seeds cycle N+1:
544+
545+ ``` rust
546+ /// Vertical awareness composition: prior cycle's mean awareness
547+ /// becomes this cycle's awareness prior.
548+ fn seed_awareness_from_prior (
549+ prior_awareness : & [u8 ; 256 ], // ← last cycle's Column F output
550+ current_awareness : & mut [u8 ; 256 ],
551+ ) {
552+ // Exponential moving average: new = α·current + (1-α)·prior
553+ // α = 0.7 gives recent cycles more weight while preserving history
554+ for (cur , & prev ) in current_awareness . iter_mut (). zip (prior_awareness . iter ()) {
555+ * cur = ((* cur as u16 * 179 + prev as u16 * 76 ) / 255 ) as u8 ;
556+ }
557+ }
558+ ```
559+
560+ This is the "thinking about thinking" temporal axis: the system's
561+ confidence in each word-position accumulates over cycles. A word
562+ that consistently has high awareness (balanced density, strong matches)
563+ retains high awareness. A word that fluctuates (noisy, unbalanced)
564+ decays toward low awareness. The temporal integral IS the metacognitive
565+ self-model.
566+
567+ ### The two axes combined
568+
569+ ```
570+ Vertical (temporal, cross-cycle)
571+ ↑
572+ │ accumulated ontology + awareness
573+ │ feeds NEXT cycle as context + seed
574+ │
575+ Cycle N ────────────┼────────────────────────────────→ Horizontal (spatial, within-cycle)
576+ │ L1 → L2 → L3 → L4 → ONNX → L1
577+ │ pyramid cascade + ONNX feedback
578+ │
579+ │ Column E delta + Column F awareness
580+ │ emitted at END of this cycle
581+ │
582+ Cycle N+1 ──────────┼────────────────────────────────→
583+ │ reads N's accumulated state
584+ ▼
585+ ```
586+
587+ The horizontal axis IS Column G (ONNX spatial perturbation within one cycle).
588+ The vertical axis IS Columns E+F (ontology + awareness temporal perturbation
589+ across cycles). Both operate simultaneously. The system perturbs itself
590+ spatially AND temporally every cycle. Neither has a halt state.
591+
592+ ### What this changes in the build order
593+
594+ Phase 2 (Column E) needs an additional deliverable:
595+
596+ - ** D-E7:** ` AccumulatedOntology ` struct on ` ShaderDriver ` — the running
597+ integral of all prior OntologyDeltas. Methods: ` classify_entity(s_idx) ` ,
598+ ` classify_relation(p_idx) ` , ` contradicts(edge) ` , ` apply_delta(delta) ` .
599+ This is the vertical read-back state. Updated after each cycle's
600+ Column E emission.
601+
602+ Phase 3 (Column F) needs:
603+
604+ - ** D-F10:** ` seed_awareness_from_prior() ` — exponential moving average
605+ of prior cycle's Column F into current cycle's initial awareness state.
606+ This is the temporal integration mechanism.
607+
0 commit comments