# 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. |
