# 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. ## Boundary for the next gate Before any recovery task run, R1 must freeze its development-only task seeds, forward/vectorizer rates, role-estimator cadence, cost accounting, and a stop rule requiring both positive derivative sign and actual learning. A sign that is positive merely because `delta_t` was inserted is not evidence of credit assignment. Confirmation seeds 10--15 from the original oral-B protocol remain untouched unless an R1 candidate passes every frozen learning, innovation, role-vectorization, and plasticity-lesion requirement.