Authored design — 2026-09-15. Section 3. This cascade elaborates the existing checklist item. It is not a dispatch, implementation receipt or completion verdict. Work outside WM-01–14 still requires Joe’s explicit greenlight; having a cascade is necessary but not permission.
Section 3/4 index · Exact TODO · Cascade JSON
A belief initialization and a real evidence update can look identical in a trace. R3 needs an actual event bound to the admitted transition and observation laws, followed by a consequential consumer.
R3 update. PARTIAL: real event/A/B/model-bound update witness and downstream effect; recorded initialization is not a measured update. Built evidence: Filter/update implementation and some pinned calculations
This is the checklist’s dated evidence account, not a new deployment census. Existing source/test evidence keeps its bounded credit. The acceptance obligation above governs this design.
Pattern: aif/predictive-coding-belief-update
Name whether this computation is a categorical update or a declared channel approximation. Retain its A, B, state and numeric meaning. The seeded Gaussian mean/variance example is not authority to apply that law to mission-status probabilities.
Pattern: aif/declare-the-conditioning
Join the pre-update belief, action/occurrence, controlled B, independent observation and cutoff. Produce one update context; reject future evidence, wrong model and an event already consumed.
Pattern: aif/predictive-coding-belief-update
Apply transition propagation once, then the observation update required by the declared law. Retain intermediates and output. Initialization, identity propagation or a no-observation case must have those names, not measured-update credit.
Pattern: wm-connected-learning/observation-to-next-choice
Prove that the next predictor reads this result, not a stale cached map. Retain producer and consumer bindings and explain both changed and unchanged choices. A rejected observation must not change counts behind the refusal.
Each node’s stated artifact is the input or constraint for the related node below. These are design dependencies, not a claim that a runtime scheduler automatically fires patterns. Existing WM producers are reused through the linked contracts; no second implementation is implied.
| From | To | Relation | Reason |
|---|---|---|---|
| R3-1 | R3-2 | requires-result | The model law determines which event and prior can be joined. |
| R3-2 | R3-3 | requires-result | That joined context is the only authorized input to the update. |
| R3-3 | R3-4 | requires-result | The posterior becomes operational evidence only through its next consumer. |
| R3-4 | R3-1 | revision-feedback | A failed distinguishing control or consumer mismatch reopens the original scope/meaning; retain the failed claim rather than weakening it. Relevant controls: Use a real eligible event and controls for duplicate ingestion, double B propagation, substituted A, stale posterior consumption and initialization mislabeled as update. |
Retain the actual subject, source/model revision, task/occurrence, cutoff, producer and consumer for each interface. A missing field is a named gap; a default that changes the meaning is not an adapter. Reuse existing records where they satisfy these obligations. If a new component is indispensable, identify its exact TODO/cascade clause before seeking a separately bounded implementation instruction.
A newly admitted mission starts at declared D. Its appearance is not learning. Later independent evidence may change its posterior; the next prediction must identify that exact update. Replaying the same evidence must not manufacture a second change.
This is a distinguishing design example, not a claimed production experiment.
Distinguishing controls: Use a real eligible event and controls for duplicate ingestion, double B propagation, substituted A, stale posterior consumption and initialization mislabeled as update.
Closure rule: every part of the quoted obligation must be supported by the indicated artifacts and actual connections. A useful rejection proves the rejecting boundary only. One accepted subclause does not tick the whole item. A bellback must supply the exact reviewed subject, executed checks, independent verdict and remaining clauses.
WM-02 · WM-03 · WM-04 · R1 · R2 · R4
WM-03 must settle shared B. Unsupported evidence does not justify choosing a convenient update formula.
Dependency links describe required interfaces; they do not authorize work on those items. No implementation outside the existing TODO list is approved. Publication does not select a numerical law, settle an unresolved operator ruling or authorize a run.
All seeded patterns are applied above. The JSON pins their source bytes and the governing checklist/rulings. Historical formulas, thresholds and examples in a pattern remain scoped examples unless the governing contract adopts them. This draft adds no pattern-library entries and claims no independent semantic ratification.
Reference text; historical examples and prescriptions retain the scope stated above.
@flexiarg aif/predictive-coding-belief-update
@title Predictive-Coding Belief Update with Variance Evolution
@sigils [🌀/由]
@audience fulab agents, aif implementers
@tone technical
@style pattern
@holds-at R3 ;; pegged 2026-08-30 (claude-15): the catalogue paragraph numbered R3 in p4ng/sec-catalog.tex; see PREREG-war-machine §1b
@see-also aif/predictive-entropy-as-ambiguity
@see-also aif/evidence-precision-registry
@see-also futon-theory/four-types
@why R3 dossier problem: R3 solves how observations change belief without either overwriting it or letting it become immovable: the roster places **“Belief update”** in BELIEVE (`p4ng/empirics-futon/control-stages.edn:18`; control-stage numbering). (source: futon2 holes labs wm-contract PROBLEMS-r1-r3-r3a-batch3.md, R3, The problem it solves; L3 rationale-backfill pilot, zai-1, 2026-09-05)
@how own mechanism: Update beliefs via predictive-coding (μ ← μ + α·Π·ε) and evolve variance with a sensor-variance floor so uncertainty stays meaningful. (source: this pattern's ! conclusion line; L3 rationale-backfill pilot, zai-1, 2026-09-05)
@why problems/r3-belief-update (L14 edge-resolution; basis: holds -- the problem node's own holds-at token covers this pattern; source: receipt runs/L14-edge-resolution.edn; zai-1, 2026-09-05)
! conclusion: Update beliefs via predictive-coding (μ ← μ + α·Π·ε) and evolve variance with a sensor-variance floor so uncertainty stays meaningful.
+ context: The agent receives an observation each tick and must integrate it into its belief state. The integration rule determines both mean trajectory and uncertainty trajectory.
+ IF:
You want belief updates to be principled (Bayesian-shaped under Gaussian approximation), tunable (single learning rate; per-channel precision), and operationally robust (variance doesn't collapse to zero; doesn't blow up).
+ HOWEVER:
Without an explicit update rule the agent either slams beliefs to each observation (over-trusts) or never moves them (over-anchors). Variance with no sensor-variance floor decays toward zero under any informative-observation history, killing the predictive-entropy term in EFE for later ticks.
+ THEN:
Implement two coupled updates per tick:
- Mean: μ ← μ + α · Π · ε, where ε = observation − μ, Π is per-channel precision, α is learning rate.
- Variance: var ← (1−α)·var + α·(observation − new-μ)² + σ²_sensor, where σ²_sensor is the sensor's intrinsic variance floor.
The residual against the *new* mean (not the old mean) is what informs the variance update — this matches the moment-matched EWMA approximation of Bayesian update under Gaussian likelihood.
+ BECAUSE:
The mean rule realises predictive coding (Friston et al.); the variance rule keeps belief uncertainty in a meaningful regime where ambiguity terms in EFE stay informative. σ²_sensor as a *configurable* parameter supports noiseless-mode sanity checks and sensitivity sweeps without recompilation.
+ NEXT-STEPS:
- Implement update-mu as a pure function: (mu, observed-state, opts) → BeliefState. Take α, Π, σ²_sensor from opts with named defaults.
- Use observation − new-mean (post-update residual) in the variance term, not observation − old-mean. The shorthand can confuse handoff specs; cite the acceptance-criterion hand-calculation as source of truth.
- Floor variance at 0 explicitly via (max 0 (...)); under σ²_sensor > 0 the floor is rarely tested in practice but the explicit floor protects against pathological inputs.
- DONE (UKRN v3 HO-02, 2026-05-14): update-mu and free-energy implemented at notebooks/ukrn_v3_belief.clj:1-51. α=0.4, Π=1.0, σ²_sensor=0.02 defaults configurable via thresholds map. Verified across 8 hand-computed test cases. Evidence: handoffs/v3_runner/validation_HO-02.md.
- Validation: variance should shrink under low-prediction-error observations (test A4: var goes from 0.04 to 0.024 under perfect prediction and σ²=0); grow under surprise (test A3: var goes from 0.04 to 0.080 under ε=0.5 and σ²=0.02). Both tests should be in the validation harness for any new AIF implementation following this pattern.
@flexiarg aif/declare-the-conditioning
@title Declare the Conditioning (Score the Fit, Not the Form)
@keywords conditioning, situation, context, fit, EFE, curried, referent
@audience aif implementers, pattern authors, futon developers
@tone technical
@style pattern
@references [aif/currency-before-merge aif/valuation-reads-the-paperwork]
@how aif/structured-observation-vector
@see-also aif/term-to-channel-traceability
@why no matching problem dossier node (@holds-at absent; not among the twenty dossier nodes R1-R17, R20, TRACE). Negative claim per the committed check futon2 holes labs library-loop runs l3_no_dossier_check.py, receipt runs L3-no-dossier-check.edn (enumerates every aif pattern's @holds-at against the dossier node set extracted from PROBLEMS-*.md headings). Rationale not invented (L3 rationale-backfill pilot, zai-1, 2026-09-05)
@how own mechanism: Every valuation surface must declare what slice of the situation it consumed; G(candidate) is a lambda — only G(candidate | situation) is a value. (source: this pattern's ! conclusion line; L3 rationale-backfill pilot, zai-1, 2026-09-05)
! conclusion: Every valuation surface must declare what slice of the situation it consumed; G(candidate) is a lambda — only G(candidate | situation) is a value.
+ context: A stack grows multiple valuation surfaces (blend terms, wholeness, ΔG legs, field diagrams), each labelled with the same vocabulary ("EFE", "value", "score").
+ IF:
You want valuations to be comparable, auditable, and honestly labelled.
+ HOWEVER:
Different surfaces silently consume different slices of the world — one eats the live observation vector, another a 160-char prose scrap, a third nothing at all — so identical labels name incomparable objects, and cross-surface comparisons are apples-to-oranges without anyone having lied.
+ THEN:
Give every valuation surface a three-axis declaration: SENSE (which formal object it claims), SELECTION-SEMANTICS (extremum / amortized sample / bound — over what menu), and CONDITIONING (what situation-slice it consumed). Render the declaration where the number is rendered. In pattern terms: Context → (Problem → Solution) — application is modus ponens; the world supplies the antecedent; score the fit, never the form alone.
+ BECAUSE:
Canonical expected free energy is G(π; Q(s), C) — conditioned on beliefs and preferences by definition; a policy has no value in vacuo, and Alexander says the same of form and context. Surfaces that skip the declaration re-invent the mislabeling one level up.
+ evidence: M-evaluate-policies §9.6–9.7 + exhibit "conditions on" column (futon2, 2026-07-03): the atomic-action lane conditioned on the live observation vector while the cascade lane ate a title+status scrap and two native components consumed no situation at all — one arena, incomparable conditioning. E5 measured the conditioning channel: situation-enriched ψ rebuilt 11/13 cascades. The fold contract already typed circumstance as an argument; the plumbing had starved it.
+ NEXT-STEPS:
- Add the sense × selection-semantics × conditioning triple to each EFE-labelled surface's declaration (extends the efe-referent-declaration shape).
- Route all lanes toward ONE situation source (the structured observation vector) where feasible.