1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
# Oral-B recovery: temporal-difference somato-dendritic innovation
This branch follows the complete negative result in `ORAL_B.md`; it does not
reinterpret or overwrite that preregistration. It is motivated by Fig. 5 and
Extended Data Fig. 13 of Francioni et al. (2026): P+ versus P- SD residuals
separate epochs by the sign of recent error change, whereas absolute error
magnitude alone does not separate the populations.
## Structural diagnosis
The failed model always calibrated its vectorizer against the instantaneous
squared-loss descent direction `e_t s_i`. Its P+ minus P- residual contrast is
therefore proportional to current error magnitude. Conditional on lower
current error during improving epochs, the preregistered sign-inversion index
must be negative. Supplying error velocity as a second regressor cannot alter
the target being regressed. All 36 negative signs are consistent with this
structural mismatch.
## Candidate mechanism
The recovery factorizes the instruction into two locally obtainable terms:
1. a slowly learned per-cell causal-role coefficient `m_i`, estimated from
sparse antithetic perturbations and the scalar BCI cursor difference;
2. the within-episode performance innovation
`delta_t = |e_(t-1)| - |e_t|`, reset at episode boundaries.
The task instruction is `m_i delta_t`. Ordinary soma-predictable apical
traffic is added before the same per-cell neutral predictor, so the plasticity
signal remains the somato-dendritic innovation rather than a directly supplied
role label. Forward updates use only current presynaptic context, local
postsynaptic gain, and that innovation. The first recovery is plasticity-only
(`kappa=0`): the empirical residual points along observed performance change,
not necessarily a corrective online-control direction.
For perturbation vector `xi`, the role target is
```text
q_i = [(z(h + sigma xi) - z(h - sigma xi)) / (2 sigma)] xi_i,
```
whose expectation is the unknown causal role `s_i`. This consumes scalar
cursor observations rather than gradients or reverse-mode differentiation.
## R0 mechanics gate
R0 generates no task endpoint and touches no development or confirmation
environment. It passes only if deterministic checks establish all of:
- the mean perturbation role target has cosine above 0.99 with the analytic
role used only by the diagnostic;
- the local vectorizer update moves toward that role without reading it;
- the neutral predictor exactly removes affine soma traffic in the controlled
synthetic check;
- episode-initial performance velocity is zero;
- perfect role identification gives a strictly positive P+/P- error-change
sign-inversion index; and
- all original BCI pairing, lesion-mask, decoder, and finite checks still pass.
R0 is implemented by `performance_velocity` in `sdil/bci.py` and audited by
`experiments/bci_smoke.py` plus `experiments/verify_theory.py`. Passing R0
only permits a separately committed training-only structural screen after the
D4 accept confirmation closes. No success-rate endpoint, hyperparameter
selection, or oral-B score change is authorized by R0.
## R1 frozen development gate
R1 is hard-gated in code on a complete D4 pass with reviewer score 7. It reuses
only the already-development task seeds 0--2 and model seed 0; confirmation
seeds 10--15 remain untouched. It tests exactly two forward rates, `{0.03,
0.1}`, with vectorizer rate `0.03`, 14 days, 64 episodes per day, 28 steps per
episode, one role perturbation event every four temporal steps, `kappa=0`, and
all other dynamics copied from the failed original screen.
Before task learning, every condition receives 100 instruction-off batches of
64 neural-state probes. The per-cell neutral predictor uses these batches; two
scalar antithetic cursor observations per example calibrate the learned-role
conditions. Fixed-vectorizer ignores the role targets but consumes the same
observations and random stream. The oracle-role condition explicitly reads the
synthetic environment map only as a labelled diagnostic ceiling and is
ineligible for selection. Neutral warmup must leave maximum predictor error at
most `1e-5`; all warmup and online scalar observations are reported.
For each rate and task seed, run four paired conditions on identical context,
noise, perturbations, and evaluation trajectories:
1. intact learned-role temporal-difference innovation;
2. fixed random vectorizer;
3. plasticity lesion with role learning intact; and
4. an exact-role diagnostic oracle.
Every one of the three task seeds must pass every requirement:
- early-to-late success gain at least 10 points and final development success
at least 70%;
- final success at least 20 points above fixed vectorizer and no more than 10
points below the exact-role oracle;
- causal-role sign-inversion index at least `0.01` and absolute CV correlation
advantage of performance velocity over error magnitude at least `0.05`;
- mean absolute innovation-soma correlation at most `0.10`, with raw minus
innovation correlation at least `0.20`;
- the plasticity lesion retains at most half the intact learning gain; and
- learned role cosine at least `0.80`, with all trajectories and audited values
finite.
Select the eligible rate with the largest worst-task final success, breaking a
tie by the smaller rate. If neither rate is eligible, the recovery closes and
no confirmation is run. R1 is development evidence and cannot change the
reviewer score. A sign that is positive merely because `delta_t` was inserted
is therefore insufficient: it must coexist with actual learning, vectorizer
necessity, innovation identification, and a causal plasticity lesion.
The executable runner, complete-grid analyzer, and shell entry point are
`experiments/bci_td_run.py`, `experiments/analyze_bci_td_development.py`, and
`experiments/bci_td_development_screen.sh`. None may run before D4 closes.
|