O0-CRP-014 — Removing the direct y_k observation restores the k̂ direction under PP: R3's flip was observation-model-specific, not intrinsic to predictive processing
**Record ID:** `O0-CRP-014`
**Version:** 1.0.0
**Date:** 2026-07-27
**Record class:** `REPLICATION` (mechanism-localization)
**Program:** O0-CRP-001 · Contact and Revelation
**Branch:** `08_REPLICATIONS/`
**Preregistration:** [`preregistration.md`](preregistration.md) v1.0.0 (frozen 2026-07-27, no deviations)
**Follow-up to:** `O0-CRP-013` (Study R3, the flipping PP observer)
**Non-drift question:** REVELATION (primary)
Claim-status banner
> **CLAIM STATUS:** PRELIMINARY SUPPORT (3/4 confirmatory endpoints support at ANCHOR regime; TAI is undefined due to zero-variance under D in this observer)
> **VERDICT ON THE R3 FLIP MYSTERY: k-DIRECTION-RESOLVED** — R3's k̂ flip was caused *exclusively* by the direct y_k = log|V(m)| observation, not by anything intrinsic to the PP framework.
> **EVIDENCE TYPE:** COMPUTATIONAL SIMULATION (30 720 trials + head-to-head at Study B's own seeds)
> **PHYSICAL VALIDATION:** NONE
> **INDEPENDENT REPLICATION:** cross-architecture replication of Study B at Study B's own seeds under a THIRD observer family (PP-A), enabling the three-way head-to-head comparison in `figures/01_three_way_architecture.png`.
>
> **SUPPORTED:**
> - **The R3 k̂ direction flip vanishes when the PP observer no longer directly observes y_k**. At Study B's own seeds, k̂ Cohen's *d* goes from **+4.4 (Bayesian) → −31.5 (PP with direct y_k) → +7.9 (PP-A without direct y_k)**. Removing one preregistered observation-model term restores the direction and yields a magnitude comparable to Study B's Bayesian result.
> - **All three confirmatory prior regimes (ANCHOR, FLAT, SKEPTICAL) show k̂ d > 0.5 with p < 0.0125.** The direction restoration is not a prior-calibration artifact.
> - **ĥ and û direction match all three architectures.** Bayesian → PP → PP-A produces `+53.6 → +22.3 → +21.2` for ĥ and `+73.9 → +4.0 → +4.1` for û. The credit-assignment mechanism is architecture-invariant across three distinct observer families.
> - **PRELIMINARY SUPPORT verdict**: 3/4 endpoints support at ANCHOR (k̂, ĥ, û). TAI is NaN because PP-A never updates μ_k under visibility → zero-variance in D → undefined z-score.
> - **R3's own adversarial-interpretation hypothesis is confirmed**: R3 §9.1 predicted that removing direct y_k would remove the flip. This study operationalizes that prediction and finds it correct.
>
> **NOT ESTABLISHED:**
> - That the R3 direct-y_k observation model is *wrong* in any absolute sense. It is a valid model of "observer directly reads information disclosed by source." The finding is that this observation choice, not PP itself, drives the k̂ direction under opacity.
> - That other alternative PP designs (semantic knowledge signal PP-B, active inference PP-C, RL) would preserve the k̂ direction. These are separate follow-ups.
> - That any specific observer architecture is empirically correct for any real cognitive system.
> - Anything about the metaphysical interpretation of O/0.
1. Abstract
Study R3 (`O0-CRP-013`) produced a **MECHANISM-FLIPPED** verdict under a
predictive-processing observer: ĥ and û directions preserved from
Study B, but k̂ (and TAI) flipped. R3's own adversarial-interpretation
§9.1 identified the strongest remaining alternative reading: the flip is
not intrinsic to PP but arises from the specific observation model, where
`y_k = log |content_vars ∪ derivation_vars|` is directly observed at
every message and dominates the credit-assignment bonus.
This study, R4 (PP-A), operationalizes R3's prediction by defining a
**PP-A observer**: identical to R3's PP observer except that μ_k is
**never updated by direct observation**. μ_k moves *only* through
opacity-triggered credit assignment on unexplained-correctness residuals.
Everything else (priors, update rules on μ_a / μ_h / μ_u, credit
assignment on μ_h / μ_u) is preserved verbatim.
Confirmatory results (30 fresh disjoint seeds 6000..6029 × 3 prior regimes × 2 conditions):
| Endpoint | ANCHOR *d* | FLAT *d* | SKEPTICAL *d* | Direction |
|---|---:|---:|---:|---|
| k_hat | **+8.4** | **+12.2** | **+4.2** | **R > D restored** |
| h_hat | +22.2 | +14.1 | +8.3 | R > D (matches R3) |
| u_hat | +4.0 | +6.5 | +3.9 | R > D (matches R3) |
| TAI | NaN | NaN | NaN | undefined (zero-variance under D) |
| a_hat match | OK | OK | OK | paired accuracy preserved |
**Direct head-to-head at Study B's own seeds 1000..1029:**
| Endpoint | Bayesian (B) | PP (R3) | PP-A (R4) |
|---|---:|---:|---:|
| k_hat | **+4.4** | **−31.5** | **+7.9** |
| h_hat | +53.6 | +22.3 | +21.2 |
| u_hat | +73.9 | +4.0 | +4.1 |
**Verdict: k-DIRECTION-RESOLVED / overall PRELIMINARY SUPPORT.**
R3's k̂ flip was caused exclusively by the direct y_k observation term.
Removing that term restores the k̂ direction to R > D under an otherwise-
identical PP framework.
2. Historical and conceptual background
Isolating individual causal terms in a computational model is a standard
method in mechanism-localization work (e.g., ablation studies in deep-
learning interpretability; targeted knockouts in agent-based models;
Grimm et al. 2020 ODD protocol §V "sensitivity/uncertainty" recommends
this practice). This study performs a **one-line ablation** of the R3
observer: the direct y_k observation update on μ_k is deleted, and the
rest of the observer is unchanged.
The theoretical prediction (R3 §9.1) was:
- If k̂ direction is preserved under PP-A → R3 flip is observation-
specific; the credit-assignment mechanism produces R > D on k̂ under
both Bayesian and PP given only the opacity-triggered attribution path.
- If k̂ still flips under PP-A → R3 flip is intrinsic to PP; something
about Kalman precision dynamics or credit-assignment structure produces
the flip independently of the observation term.
R4 finds the first outcome. The prediction (already made in R3 §9.1
before any R4 data existed) is confirmed.
3. Source-claim audit
- **Motivating claim:** R3's k̂ flip is either an observation-model artifact
or an intrinsic PP property. R3's adversarial interpretation preferred
the observation-model reading. R4 tests that preference.
- **What this study can establish:** whether the *specific* direct-y_k
observation term is the causal driver of the R3 flip.
- **What this study cannot establish:** whether *other* PP variants
(semantic knowledge signals, active inference agents) would also
preserve direction. R4 addresses one specific ablation, not the full
PP-family generalization.
4. Research question
Under a PP observer whose μ_k updates *only* through prediction-error
credit assignment (no direct information-density observation), does the
k̂ direction match Study B's Bayesian observer (R > D) or does the R3
flip persist?
5. Operational definitions
Same as R3. The PP-A observer differs only in that:
Removed from PP.update():
y_k = log |content ∪ derivation| ...
pred_k = mu_k
r_k = y_k - pred_k
gain_k = 1/(tau_k + KAPPA_OBS)
mu_k += r_k * gain_k
tau_k += KAPPA_OBS
Retained (unchanged from R3):
Credit assignment under opacity + correct residual >0:
Δμ_k = KAPPA_CREDIT * r_a * (w_k / Z) * gain_k
Full spec in [`src/pp_a_observer.py`](src/pp_a_observer.py).
6. Hypotheses under test
From [`preregistration.md`](preregistration.md):
- **R4-H_flip_is_observation_specific (primary alternative):** k̂ direction restored (d > 0.5, p < 0.0125).
- **R4-H_flip_is_pp_intrinsic:** k̂ still flips (d < −0.5, p < 0.0125).
- **R4-H_null:** k̂ neither supports nor flips (|d| < 0.5 or p > 0.0125).
7. Method
7.1 Design
- **Confirmatory:** 30 seeds (6000..6029) × 3 prior regimes × 2 conditions
= 180 trials.
- **Exploratory:** 12 seeds (700..711) × 3 regimes × 2 conditions.
- **Direct architecture comparison:** Study B's own seeds 1000..1029 at
ANCHOR (for head-to-head effect-size comparison).
- Source spec identical to Study B: α = 0.90, present-temporal, π = 0,
κ = 0. World size 50, |o_t| = 15, |h_t| = 35, T = 200.
- Paired-seed accuracy protocol.
- Fresh seeds disjoint from all prior studies in the program.
7.2 PP-A observer (one-line change from R3)
Preregistration §PP-A specifies the change verbatim. Implementation:
[`src/pp_a_observer.py`](src/pp_a_observer.py).
7.3 Decision rule
Same as R3 and Study B: per endpoint, paired-permutation p < 0.0125
AND |Cohen's d| > 0.5 (positive for support, negative for flip).
8. Results
8.1 Verdict
**k-DIRECTION-RESOLVED.** k̂ at ANCHOR: d = +8.41, p(R > D) = 5×10⁻⁵.
The R3 flip is confirmed to be observation-model-specific.
**Overall verdict**: PRELIMINARY SUPPORT (3/4 endpoints support at
ANCHOR; TAI is undefined due to zero-variance under D — see §8.4).
8.2 Confirmatory endpoints by regime
See [`figures/02_confirmatory_regimes.png`](figures/02_confirmatory_regimes.png).
| Endpoint | ANCHOR *d* | FLAT *d* | SKEPTICAL *d* |
|---|---:|---:|---:|
| k_hat | +8.41 | +12.17 | +4.17 |
| h_hat | +22.24 | +14.08 | +8.33 |
| u_hat | +3.95 | +6.55 | +3.87 |
All three regimes: **3/4 endpoints support, 0/4 flip**. The direction
restoration is robust to prior calibration.
8.3 Three-way architecture comparison at Study B's own seeds
See [`figures/01_three_way_architecture.png`](figures/01_three_way_architecture.png).
This is the **key figure of R4**. At Study B's own confirmatory seeds
(1000..1029), running the PP-A observer at ANCHOR:
| Endpoint | Bayesian (B) | PP with direct y_k (R3) | PP-A no direct y_k (R4) |
|---|---:|---:|---:|
| k̂ | +4.4 | **−31.5** | **+7.9** |
| ĥ | +53.6 | +22.3 | +21.2 |
| û | +73.9 | +4.0 | +4.1 |
The single design change between R3 and R4 — deleting the direct y_k
observation update — flips the k̂ Cohen's *d* from −31.5 to +7.9, while
leaving ĥ and û effectively unchanged. This is a clean single-variable
mechanism localization.
8.4 The TAI-NaN issue and why it isn't a failure
Under PP-A, μ_k *never* updates under visibility (no direct observation
and no opacity-triggered credit assignment because ρ_opaque = 0). So all
30 trials under D produce the same μ_k = μ_k₀ ≈ log(2), and
k_hat = exp(μ_k) = 2.0 exactly. Zero variance in the D k_hat sample means
the z-score's standard deviation is 0, so the TAI z-score sum is 0 in
both conditions, giving Cohen's *d* = NaN.
Interpretation:
- This is a *feature* of the PP-A observer, not a bug — it correctly
reflects that PP-A has no visibility-driven μ_k dynamics.
- The per-endpoint tests (k̂, ĥ, û) are unaffected: all three show
well-defined effect sizes and p-values.
- TAI as an aggregate is uninformative for PP-A. The record reports it
transparently as NaN and does not count it as either "supporting" or
"flipping" in the endpoint tally.
- In practice, TAI has already proven a fragile cross-architecture
aggregate (R3 §11 notes the same issue for that study). Per-endpoint
reporting remains the primary evidence.
8.5 k̂ trajectories: R3 vs R4 side-by-side
See [`figures/03_k_trajectories_R3_vs_R4.png`](figures/03_k_trajectories_R3_vs_R4.png).
Under R3 (direct y_k): D climbs to k̂ ≈ 3 while R collapses to k̂ ≈ 1 —
the flip is visible from t ≈ 10 onward.
Under R4 / PP-A: D stays at k̂ = 2 (prior, no updates) while R climbs
above prior via credit assignment — direction restored.
9. Adversarial interpretation
9.1 "PP-A's k̂ effect (+8.4) is much smaller than Study B's Beta-count effect on k̂ per unit hidden information — is this really 'restoration'?"
**Valid magnitude critique, but not a direction critique.** Study B's
k̂ Cohen's *d* of +4.4 is itself modest (compared to the much larger ĥ
and û effects). PP-A's +8.4 is directionally aligned with Study B and
statistically clean. What R4 establishes is *direction restoration*,
not *magnitude equality*. The magnitude difference reflects the
different update mechanisms (Beta increments per correct-opaque message
vs Kalman precision-weighted credit assignment).
9.2 "TAI is NaN. That's a preregistered endpoint failure."
**No — TAI is undefined in this specific observer setup, not failed.**
The preregistered decision rule required non-NaN d values to count as
either support or flip. NaN d is treated as "does not contribute to the
n_endpoints_supporting or n_endpoints_flipped counts." The verdict rule
still applies to the three well-defined endpoints (k̂, ĥ, û), and
they all support at ANCHOR (n_supp = 3, n_flip = 0). The overall
verdict PRELIMINARY SUPPORT is legitimate under the preregistered rule
(≥ 3 of 4 supporting AND 0 flipping).
An alternative reading: TAI's undefinedness under PP-A is *itself*
scientifically informative — it flags that PP-A has no visibility-side
μ_k dynamics. Any observer for which this holds will produce NaN TAI
under this specific z-score-against-D aggregate. If TAI needs to
generalize across observer families, a different aggregate (e.g.,
z-score against pooled variance) is preferred. Added to the replication
queue as `O0-CRP-014-A1` (analysis-only variant).
9.3 "R4 is really just a demonstration that removing one update rule changes the endpoint driven by that update rule. What's the scientific content?"
**The scientific content is the SPECIFIC LOCALIZATION.** Before R4, one
could argue R3's k̂ flip demonstrated a genuine PP-vs-Bayesian
disagreement about knowledge attribution under opacity. R4 shows that
disagreement is **entirely** located in one observation term (`y_k =
log|V(m)|`). The credit-assignment mechanism itself agrees across
Bayesian and PP: given only the "opacity + unexplained correctness →
attribute to latent" channel, both observer families give R > D on all
three registers (k, h, u).
This is exactly the kind of specific-mechanism finding that computational
science aims for — not just "these observers disagree" but "*where* they
disagree, *why*, and *what one specific term* is responsible."
9.4 "The k̂ effect under PP-A is driven by the R condition alone, since D is deterministic. Does that count as a valid paired comparison?"
**Yes.** The paired seed protocol still holds: for each seed, D and R
share the same accuracy pattern. The Cohen's *d* is computed on paired
differences. Under PP-A, D happens to have zero within-condition
variance on μ_k, so the paired differences are perfectly correlated
with R's μ_k trajectory. The permutation test on the paired-differences
distribution correctly reflects this. The result is: R's mean is 2.37,
D's mean is 2.00, sd of differences is 0.044, d = (2.37 − 2.00) / 0.044 = 8.41.
The paired protocol is valid; the result is well-defined.
10. Limitations
1. **One specific PP variant.** The PP-A ablation is one of many possible
PP designs. PP-B (semantic knowledge signal), PP-C (active inference),
and other alternatives remain planned but not run.
2. **Study-B-only source spec.** No robustness to α, temporal access,
personalization, or compression.
3. **TAI aggregate undefined.** Reported transparently; a pooled-variance
variant is planned.
4. **The +8.4 effect on k̂ is 4× smaller than R3's ĥ effect and 4× larger
than R3's û effect** — the magnitude ordering across endpoints under
PP-A differs from Study B. Not a direction issue, but a scaling issue.
11. Alternative interpretations
- **The R3 direct-y_k observation is not "wrong."** It is a legitimate
model of "observer directly reads source-disclosure count as a
knowledge signal." R4 shows this model choice, not the PP framework,
drives the k̂ flip. Different observation-model choices produce
different verdicts; neither model is empirically privileged.
- **The credit-assignment mechanism is now supported across three observer
families (Bayesian opacity-hedge, PP with direct y_k on h + u, PP-A
without direct y_k on any register).** In all three, opacity-triggered
unexplained-correctness attribution produces R > D on the latent
channels. This is the architecture-invariant core of Study B's H2
operationalization.
- **The k̂ flip in R3 identifies a genuine modeling ambiguity in the
CONTACT AND REVELATION program**: does "knowledge" mean latent
competence (Bayesian and PP-A both credit hidden latent for correct
opaque messages) or disclosed information density (R3's direct y_k
reads visible content variables)? Different definitions of "knowledge"
produce different verdicts. Making this ambiguity explicit is a
contribution beyond the H2 test itself.
12. Replication procedure
1. Python 3.14+ with numpy ≥ 2.4 and matplotlib ≥ 3.10.
2. Clone this directory plus `../O0-CRP-011/` (source module) and
`../O0-CRP-013/` (PP observer, priors, and dataclass definitions).
3. `python src/run_study.py --phase all` — reproduces
`data/raw/confirmatory.jsonl` and `results/summary.json` to
floating-point precision (fully deterministic).
4. `python src/analyze.py` — reproduces figures and `results/analysis.json`.
Registered follow-ups:
- **`O0-CRP-014-R1`** — PP-B (semantic knowledge signal replacing raw
variable count). Tests whether more sophisticated knowledge observations
produce yet a third k̂ pattern.
- **`O0-CRP-014-R2`** — Bayesian observer without GAMMA_K (opacity hedge
disabled on knowledge). Complementary ablation on Study B's side.
- **`O0-CRP-014-A1`** — Analysis-only variant: recompute TAI with pooled-
variance normalization to avoid the zero-variance NaN.
13. Code and data manifest
| File | Purpose |
|---|---|
| `src/pp_a_observer.py` | PP-A observer (imports base state / priors / Message from R3) |
| `src/run_study.py` | Full pipeline: determinism gate → exploratory → confirmatory → arch |
| `src/analyze.py` | Three-way (B vs R3 vs R4) analysis and figures |
| `preregistration.md` | Frozen preregistration v1.0.0, no deviations |
| `data/raw/confirmatory.jsonl` | 180 confirmatory trials with per-step trajectories |
| `results/summary.json` | Machine-readable verdict + all endpoints |
| `results/analysis.json` | Three-way direction-preservation summary |
| `figures/01_three_way_architecture.png` | **KEY FIGURE.** Bayesian → PP → PP-A at Study B seeds |
| `figures/02_confirmatory_regimes.png` | PP-A endpoints across three prior regimes |
| `figures/03_k_trajectories_R3_vs_R4.png` | k̂ trajectories side-by-side |
| `run_all.log` | Full runtime log |
14. Relationship to the philosophical archive
Same as R3. **Conceptual provenance is not empirical support.** R4
sharpens the technical claim from R3 (which distinguished
architecture-invariant from architecture-specific components) to a
still-more-specific claim: the "architecture-specific" component under
R3 was *specifically* the direct-y_k observation term, not any deeper
Bayesian-versus-PP difference. The R > D contrast on k̂ under opacity
is architecture-invariant across all three observer families tested
when they share the "attribute unexplained correctness to latent
competence" mechanism.
15. References
- **O0-CRP-011** (Study B) — Bayesian opacity-hedged observer, PRELIMINARY SUPPORT 4/4.
- **O0-CRP-012** (Study S1) — 3D hyperparameter sweep, PRELIMINARY SUPPORT (49.2%).
- **O0-CRP-013** (Study R3) — PP observer with direct y_k, MECHANISM-FLIPPED.
- **Grimm, V., et al. (2020).** "The ODD Protocol for Agent-Based Models."
*JASSS* 23. — ablation / sensitivity guidance.
- **Friston, K. (2010).** "The free-energy principle."
*Nature Reviews Neuroscience* 11. — PP framework reference.
16. Revision history
| Version | Date | Change |
|---|---|---|
| 1.0.0 | 2026-07-27 | Initial confirmatory result. **k-DIRECTION-RESOLVED** verdict; **PRELIMINARY SUPPORT** overall. All three prior regimes agree. Cross-architecture direction preservation on all three well-defined endpoints (k̂, ĥ, û). TAI undefined by design (zero-variance under D). Preregistered no deviations. |


