O0-CRP-035 · Perspective Distillation — Scientific Record (v1.2)
**Semantic name:** SIM-CRP-003 · Perspective Distillation
**Record class:** SIMULATION
**Program:** Contact and Revelation (CRP-001)
**Non-drift question:** PERSPECTIVE (primary)
**Version:** 1.2.0 (supersedes v1.1 findings)
**Date:** 2026-07-30
**Status:** INCONCLUSIVE primary verdict · WEIGHTS-CARRY-IDENTITY secondary finding
**Preregistration:** [preregistration.md](preregistration.md) (frozen v1.1, 2026-07-30)
---
⚠ Design-correction notice (v1.1 → v1.2)
The v1.0 and v1.1 versions of this record made a claim (F2: "preferences carry
more identity signal than weights") that was in fact a **mathematical
consequence of a design bug**, not an empirical finding.
**The bug.** The v1.0/v1.1 observer stored `w` as a flat vector of shape `(d,)`,
and computed `q(x) = x @ w + p`. Because `x @ w` is a **scalar** (dot product
of two vectors), it was broadcast to all K action logits before softmax. The
softmax function is **shift-invariant under a constant added to all logits**:
$$\text{softmax}(v + c \cdot \mathbf{1}) = \text{softmax}(v)$$
Therefore the observer's policy `π(a | x) = softmax((x @ w + p) / τ)` is
mathematically equal to `softmax(p / τ)` — **independent of x** and
**independent of w**. `w` was learned but behaviorally invisible.
Under this bug, every finding of the form "w carries no identity signal" or
"preferences dominate weights" was mathematically forced, not empirically
discovered. The v1.1 F2 was a tautology.
**The fix.** In v1.2 the observer state uses a per-action weight matrix
$W \in \mathbb{R}^{d \times K}$ and computes $q(x)[a] = x \cdot W[:, a] + p[a]$.
Now `x · W[:, a]` is a **different scalar for each action**, so softmax
shift-invariance no longer collapses the x-dependent contribution. Policies
are genuinely context-dependent, and w-vs-p comparisons are meaningful
empirical questions.
**Detection.** The bug was exposed by O0-CRP-036 (the sister study that
inverts CRP-035's compression pipeline). CRP-036's LA1 level ("preferences
only, w=0") produced `BC_TV = 1.000` — perfect behavioral preservation with
no weights — which is mathematically impossible for a truly context-dependent
observer. Investigation revealed the softmax shift-invariance issue.
**What this v1.2 supersedes.**
- v1.1 F2 ("preferences dominate weights"): **REVERSED**. Under the fixed
observer, weights (as the W matrix) carry most of the identity signal.
L4 (W preserved, p=0) gives BC_TV = 0.892 vs random 0.282 — a huge gap.
- v1.1 F1 ("memory is behavioral no-op"): **REPLICATED**. BC_TV(0) = BC_TV(1)
= BC_TV(2) = 1.000 under both observer designs. Memory not being used by
the decision rule is design-invariant.
- v1.1 F3 ("argmax(p) bit lifts behavior"): **REFRAMED**. Under v1.2, L5
(argmax of per-action W column + argmax(p)) does lift behavior above the
random baseline (BC_TV = 0.458 vs random 0.299), but the per-action W
structure is what does the lifting, not argmax(p) alone.
**What this v1.2 does NOT supersede.**
- The preregistration schema (v1.1 metrics — TV distance and argmax match —
are still primary; cosine is still auxiliary). Metric definitions unchanged.
- The verdict rules. Applied identically to v1.2 data.
- The 8-level compression pipeline structure. Only the reconstruction and
observer arithmetic changed.
The v1.1 record has been retained in git history for full audit. **This v1.2
record is the current scientific finding.**
---
Claim-status banner
CLAIM STATUS : INCONCLUSIVE (primary) · WEIGHTS-CARRY-IDENTITY (secondary)
EVIDENCE TYPE : COMPUTATIONAL SIMULATION · CONTEXTUAL-BANDIT OBSERVERS
PHYSICAL VALID : NONE
INDEPENDENT REP: NONE (CRP-037 registered — PP-observer cross-architecture)
SUPPORTED:
- Memory summary preservation is a behavioral no-op in this observer class
(BC_TV(0) = BC_TV(1) = BC_TV(2) = 1.000). The decision rule does not use
memory. Replicated across the v1.0/v1.1 buggy observer AND the v1.2
corrected observer.
- In a properly context-dependent linear-bandit observer, WEIGHTS carry the
identity-relevant signal. L4 (W matrix retained, preferences discarded)
preserves BC_TV = 0.892 vs random baseline 0.282 (gap 0.61 TV, 0.62 AM).
- Argmax compression of per-action W columns preserves a small but
measurable identity signal at L5 (BC_TV = 0.458 vs random 0.299,
gap 0.16 TV, 0.26 AM), consistent with per-action structure being
the dominant signal carrier.
- Under further compression (L6 one-bit, L7 identifier), behavior collapses
to the random-parameter baseline.
- Design correction: the v1.0/v1.1 observer's "context-dependent policy"
claim was mathematically false due to softmax shift-invariance;
documented and fixed here.
NOT ESTABLISHED:
- Whether the preregistered plateau condition (BC(L*) >= 0.7 AND
BC(L*+1) < 0.4) is meaningful under this floor structure — L4 satisfies
the first part (0.892 > 0.7) but L5 (0.458) does not clearly satisfy the
second part (< 0.4). Registered followup CRP-035-R4 will recalibrate the
rule.
- Whether these findings generalize to observer architectures other than
linear-bandit — registered as CRP-037.
- Whether "perspective" in the philosophical sense survives compression.
- Whether the specific W-vs-p asymmetry is a property of this training regime
(linear-Gaussian reward on N(0, I) contexts) or generalizes to other
environment classes.
---
Abstract
Second preregistered execution of SIM-CRP-003 (Perspective Distillation)
under the corrected v1.2 observer. Contextual-bandit observers with state
$(W, \mu_0, \eta, \tau, p, M, \text{id})$ where $W \in \mathbb{R}^{d \times K}$
are progressively compressed at 8 levels. At each level we measure
behavioral continuity via total-variation distance (`BC_TV`) and argmax match
rate (`BC_AM`) as primary metrics, plus self-recognition (SR), value
preservation (VP), predictive similarity (PS), and recoverability (Rec).
Under n=30 observers, 200 held-out contexts, and adversarial random-parameter
and cross-observer controls:
- **Primary verdict:** INCONCLUSIVE (the preregistered plateau condition
BC(L*) ≥ 0.7 AND BC(L*+1) < 0.4 does not fire cleanly — L4 satisfies the
first clause but L5 = 0.458 fails the < 0.4 second clause). A verdict-rule
recalibration is registered as CRP-035-R4.
- **Secondary finding (WEIGHTS-CARRY-IDENTITY):** L4 (W matrix retained,
preferences and memory discarded) preserves behavior nearly perfectly:
BC_TV = 0.892, BC_AM = 0.885 vs random 0.282 and 0.266 — a gap of 0.61
TV and 0.62 AM. **In this properly context-dependent observer class, the
W matrix is the identity carrier.**
- **Consistent replication (F1):** Memory summary compression is a behavioral
no-op. BC_TV(0) = BC_TV(1) = BC_TV(2) = 1.000. The decision rule does not
use memory, so its compression has no cost.
The design correction from v1.1 to v1.2 (fixing softmax shift-invariance in
the observer definition) reversed the v1.1 F2 finding: preferences do NOT
dominate weights when the observer is genuinely context-dependent. This
correction is publicly documented and the sister study CRP-036 (which
exposed the bug) also reports WEIGHTS_DOMINATE under the fixed observer.
1. Historical and conceptual background
Unchanged from v1.1. Opens the PERSPECTIVE non-drift branch of CRP-001,
motivated by the O/0 "end credits contain only your name" motif — a
philosophical claim that perspective compresses to a single identifier. The
study operationalizes compression and measures behavioral preservation
without evaluating the philosophical claim.
2. Source-claim audit
Unchanged from v1.1.
3. Research question
For a bounded contextual-bandit observer with specifiable internal state,
what is the smallest representation that preserves behavior, self-recognition,
value structure, and predictive similarity on held-out environments?
4. Operational definitions
See preregistration.md §3.
5. Formal model (v1.2)
Observer state $\theta = (W, \mu_0, \eta, \tau, p, M, \text{id})$ with:
- $W \in \mathbb{R}^{d \times K}$ — per-action reward weight matrix (updated online)
- $\mu_0 \in \mathbb{R}^d$ — scalar prior mean, broadcast to all action columns at initialization
- $\eta \in (0, 1]$ — learning rate
- $\tau \in [0.15, 0.5]$ — softmax temperature (v1.1 range preserved)
- $p \in \mathbb{R}^K$ — per-action preference bonus
- $M$ — bounded FIFO memory (cap 100)
- id — stable identifier
Decision rule: $q(x)[a] = x \cdot W[:, a] + p[a]$, $\pi(a | x) = \text{softmax}(q(x) / \tau)$.
Update rule: on receiving reward $r$ for action $a$ in context $x$,
$W[:, a] \leftarrow W[:, a] + \eta (r - q(x)[a]) x$ and
$p[a] \leftarrow p[a] + 0.1 \eta (r - q(x)[a])$.
Training environment: $W_{\text{env}} \in \mathbb{R}^{d \times K}$,
$p_{\text{env}} \in \mathbb{R}^K$, reward $r = x \cdot W_{\text{env}}[:, a] + p_{\text{env}}[a] + \epsilon$
with $\epsilon \sim \mathcal{N}(0, \sigma^2)$.
6. Methods
Confirmatory: n=30 observers, seeds 12000..12029; N=200 held-out contexts
(seed 13000); N=50 held-out environments for value preservation (seeds
14000..14049). Cross-observer control on all 30×29 pairs. Random-parameter
baseline generated at seeds 88000..96000 across 8 levels. Full protocol
frozen in preregistration.md v1.1.
7. Results (v1.2)
7.1 Primary metrics table
| L | Interpretation | BC_TV | BC_AM | BC_cos | SR | VP | PS | BC_TV_random | BC_AM_random | BC_TV_cross | BC_AM_cross |
|---|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|
| 0 | Full | 1.000 | 1.000 | 1.000 | 1.000 | 1.000 | 1.000 | 0.292 | 0.281 | 0.259 | 0.246 |
| 1 | Memory summary | 1.000 | 1.000 | 1.000 | 1.000 | 1.000 | 1.000 | 0.272 | 0.261 | 0.259 | 0.246 |
| 2 | No memory | 1.000 | 1.000 | 1.000 | 1.000 | 1.000 | 1.000 | 0.257 | 0.242 | 0.259 | 0.246 |
| 3 | PCA-3 latent | 0.489 | 0.503 | 0.643 | 0.100 | 0.585 | 0.527 | 0.316 | 0.267 | 0.310 | 0.270 |
| **4** | **W matrix + τ (no p)** | **0.892** | **0.885** | **0.936** | **0.433** | **0.927** | **0.986** | 0.282 | 0.266 | 0.260 | 0.247 |
| 5 | argmax(W per action) + argmax(p) | 0.458 | 0.505 | 0.655 | 0.067 | 0.413 | 0.613 | 0.299 | 0.242 | 0.305 | 0.248 |
| 6 | Invariant bit | 0.326 | 0.257 | 0.524 | 0.033 | 0.384 | 0.071 | 0.317 | 0.260 | 0.316 | 0.245 |
| 7 | Identifier only | 0.319 | 0.261 | 0.544 | 0.033 | 0.333 | 0.000 | 0.319 | 0.261 | 0.319 | 0.261 |
Chance thresholds: SR = 1/N = 0.033 · AM = 1/K = 0.250.
7.2 Preregistered verdict application
1. MEASUREMENT_FAILURE — BC_TV(0) = BC_AM(0) = 1.000 ≥ 0.95 · PASS.
2. METRIC_SATURATION — BC_TV_cross(0) = 0.259 < 0.85; BC_AM_cross(0) = 0.246 < 0.85 · PASS (cleaner than v1.1).
3. TRIVIAL_COMPRESSION — L1 (1.0-1.0=0), L2 (1.0-1.0=0) but L3 gap = 0.173 > 0.1. Rule not fired.
4. PERSPECTIVE_SURVIVES_TO_L(4) — BC_TV(4) = 0.892 ≥ 0.7 ✓ AND BC_TV(5) = 0.458 < 0.4 ✗. Rule does not fire on the second clause (0.458 is above 0.4).
5. BEHAVIOR_IDENTITY_DISSOCIATE — BC_TV(4) = 0.892 > 0.7. Fail.
6. HOLISTIC_IDENTITY — BC_TV(7) = 0.319 < 0.5. Fail.
7. NOTHING_SURVIVES — BC_TV(1) = 1.0 > 0.3. Fail.
**Primary verdict: INCONCLUSIVE.** The plateau condition misses by 0.058
on BC_TV(5). A CRP-035-R4 rule recalibration (gap-from-random criterion) is
registered.
7.3 Substantive secondary findings (v1.2)
**F1 · Memory is not a behavioral carrier.** BC_TV(0) = BC_TV(1) = BC_TV(2) =
1.000. Compressing memory to a summary or discarding memory entirely does not
change action distributions on held-out contexts. **Predicted at
preregistration, confirmed under both observer designs (v1.0/v1.1 buggy and
v1.2 corrected).** The decision rule does not use memory, so its removal has
no behavioral cost. This finding is design-invariant.
**F2 (v1.2) · Weights carry the identity signal.** L4 (W matrix retained,
preferences and memory discarded) preserves behavior nearly perfectly:
- BC_TV(4) = 0.892 vs BC_TV_random(4) = 0.282 (gap **0.610**)
- BC_AM(4) = 0.885 vs BC_AM_random(4) = 0.266 (gap **0.619**)
- SR(4) = 0.433 (13× chance)
- VP(4) = 0.927 (value preserved almost fully)
- PS(4) = 0.986 (predictive similarity near-perfect)
**In the properly context-dependent observer, the W matrix is the identity
carrier.** This is the OPPOSITE of the v1.1 F2 claim (which was a mathematical
tautology from softmax shift-invariance).
**F3 (v1.2) · Argmax(W per action) + argmax(p) lifts behavior modestly.**
L5 preserves per-action argmax structure of W plus argmax(p):
- BC_TV(5) = 0.458 vs random 0.299 (gap 0.159)
- BC_AM(5) = 0.505 vs random 0.242 (gap 0.262)
The per-action structure of W (retaining WHICH context feature each action
attends to) preserves substantial identity signal even after most numeric
information is discarded.
**F4 (v1.2) · Sub-argmax compression collapses to random.** L6 (one bit of
W trace sign) and L7 (identifier only) both give BC_TV ≈ 0.32, matching the
random-parameter baseline. **The full identity signal in this observer class
does not survive compression below the per-action argmax level.**
7.4 The uniformity floor (v1.2)
Under the v1.2 observer, the random-parameter baseline for BC_TV is
~0.28–0.32 across levels — substantially lower than the v1.1 floor of ~0.64.
This is because per-action weight matrices produce more diverse policies:
two randomly-chosen W matrices give policies with expected TV distance
around 0.7, hence BC_TV around 0.3.
The lower baseline means the preregistered `BC(L+1) < 0.4` threshold is now
achievable (L6 = 0.326, L7 = 0.319 both fall below), but the L4→L5→L6
transition is gradual rather than a sharp cliff. The plateau rule was
designed assuming a step-shaped BC curve; the observed curve is closer to a
declining ramp with a clear plateau only at L4.
8. Uncertainty
All BC/SR/VP/PS estimates are per-observer means with reported SEM in
`results/summary_confirmatory.json`.
9. Limitations
- Single observer architecture (linear-bandit). CRP-037 replicates in a PP
observer.
- Single environment class (Gaussian-context linear-reward bandit).
- Single softmax temperature range.
- The compression pipeline is one of many possible; CRP-036 explored an
alternate (preference-focused) path and confirmed WEIGHTS_DOMINATE.
- **v1.2 corrects a v1.0/v1.1 design bug (softmax shift-invariance). Prior
versions of this record are archived in git history but should not be
cited as evidence.**
10. Alternative interpretations
- The INCONCLUSIVE verdict may reflect a badly-calibrated verdict rule
(plateau requires a specific curve shape). CRP-035-R4 recalibration.
- L4 preserving 0.892 might depend on the specific N(0, I) context distribution.
- The argmax-based L5 metric loses per-action MAGNITUDE information; a
quantized-W compression (retain d bits per action) might close the L4→L5 gap.
11. Replication procedure
cd research/studies/O0-CRP-035/src
python run_study.py --phase exploratory # ~15 s
python run_study.py --phase confirmatory # ~3 min
python analyze.py
Determinism: exact reproduction requires numpy ≥ 1.26 with the
default_rng bit generator. All seeds documented in preregistration §8.
12. Code and data manifest
- `preregistration.md` (v1.1, frozen 2026-07-30; metric definitions unchanged)
- `src/observer.py` — Observer dataclass (v1.2) with `W` shape (d, K)
- `src/compressors.py` — 8 compression operators (v1.2) + decompress + random baseline
- `src/measurements.py` — BC_TV, BC_AM, BC_cos, SR, VP, PS, Rec
- `src/run_study.py` — exploratory + confirmatory drivers with verdict rules
- `src/analyze.py` — figure generation
- `results/summary_exploratory.json` — v1.2 exploratory pilot (n=6)
- `results/summary_confirmatory.json` — v1.2 confirmatory (n=30)
- `data/v1.0_diagnostic/summary_exploratory_v1.0.json` — v1.0 archived diagnostic
- `figures/01_bc_curves.png` — primary BC curves with baselines (v1.2)
- `figures/02_all_metrics.png` — all metrics (v1.2)
- `figures/03_gap_from_random.png` — non-triviality gaps (v1.2)
- `figures/04_heatmap.png` — metric heatmap (v1.2)
- `figures/05_v10_vs_v11.png` — v1.0 diagnostic vs v1.1/v1.2 curves
13. Relationship to the philosophical archive
**Conceptual provenance is not empirical support.** Unchanged from v1.1.
14. Registered follow-ups
- **O0-CRP-036** — Preference-preserving alternate compression path.
**EXECUTED under v1.2 observer** (same 2026-07-30). Verdict:
WEIGHTS_DOMINATE. LA1 (preferences only, W=0) gives BC_TV = 0.376 vs
LB4 (W only, p=0) BC_TV = 0.884 — a gap of 0.508 TV. Confirms F2 (v1.2)
from an inverted design.
- **O0-CRP-037** — Cross-architecture PP-observer replication of the
compression pipeline. REGISTERED, uses a genuinely different observer
design (Bayesian predictive processor with beliefs and precisions
instead of linear weights + preferences), so it is immune to the
softmax shift-invariance issue.
- **O0-CRP-035-R3** — Multi-environment generalization.
- **O0-CRP-035-R4** — Verdict rule recalibration to a gap-from-random
criterion.
15. References
Unchanged from v1.1.
16. Revision history
| Version | Date | Change |
|---|---|---|
| 1.0.0 | 2026-07-30 | Initial preregistration and code. Exploratory pilot revealed cosine-BC metric saturation. |
| 1.1.0 | 2026-07-30 | Preregistration revised (TV BC, AM primary, τ narrowed). Confirmatory executed (n=30). Verdict: INCONCLUSIVE (primary), three secondary findings. |
| **1.2.0** | **2026-07-30** | **Design correction: observer.w shape (d,) → observer.W shape (d, K), fixing a softmax shift-invariance bug that made w behaviorally invisible. All v1.2 confirmatory results are with the corrected observer. F2 REVERSED (weights, not preferences, carry identity). F1 REPLICATED. Sister study CRP-036 executed under v1.2 as WEIGHTS_DOMINATE.** |




