zone.hyperreal.enterprises
War Machine · explanations before construction

R3 update

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

Situation and design problem

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.

Governing checklist snapshot

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 applications

R3-1 — Identify the applicable update law

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.

R3-2 — Bind the prior and event

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.

R3-3 — Compute the admitted update

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.

R3-4 — Carry the posterior to the next decision

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.

Composition and interfaces

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.

Worked situation

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.

Implementation sequence and closure evidence

  1. Bind the first application to the actual source, task and authority. Resolve the decisions below before their dependent change; do not reproduce a known gap merely to claim activity.
  2. Implement only the specifically dispatched producer/consumer change from the middle applications. Retain the meaningful pre-change failure and relevant post-change controls; do not start a general infrastructure project.
  3. Acquire the final application’s evidence and independent review. Compare it against every clause of the exact TODO, identifying any still-open dependency. Source, tests, serving state, ordinary use and whole-run validation receive different credit.

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.

Dependencies and authority boundaries

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.

Pattern and source scope

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.

Existing pattern source snapshots

Reference text; historical examples and prescriptions retain the scope stated above.

aif/predictive-coding-belief-update
@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.
aif/declare-the-conditioning
@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.