Repository navigation
Commit 93c46ee
committed
VERDICT on PlasticityEngine: reimagine, do not port — 8 chassis violations + 1 live defect
Answers the operator's question (age + does it need reimagining) and connects
the four-philosopher Doppelspalt framing.
AGE: 27 days by calendar (2026-07-02 13:47, PR #629), NOT 1-4 months. But the
calendar is the wrong clock: 825 commits have landed since, and 2026-07-02 is
PRECISELY the V3 flip date — E-V3-FACET-4-PLUS-12 and the classid canon-high
flip were both operator-locked that day. So the crate did not arrive before V3;
it arrived ON the boundary, inside the v3-substrate-migration-review PR itself,
and was never adapted to what that same PR ratified. Every invariant it violates
was locked that day or later; the zero-copy law is from today. Generalizable
lesson: a migration PR is the easiest place for un-migrated code to enter,
because the diff is already enormous and one more crate reads as part of the
sweep. One commit ever, 1575 LOC, zero external consumers.
The MECHANISM is sound neuroscience — STDP + Hebbian + homeostatic scaling is
the right triad and weight_change's exponential windows are reusable as-is. The
CHASSIS is pre-V3 on eight counts: (1) HebbianMatrix stores connectivity in a
HashMap<(usize,usize), f32> BESIDE EdgeBlock and CausalEdge64 — a second
projection of connectivity, which already has a home; (2) hash lookup per pair
is pointer CHASING, the exact thing ruled against today, where the substrate's
edges are computed displacements; (3) fire(&mut self) mutates while computing,
against data-flow's "no &mut self during computation, ever"; (4) raw = write-back
instead of gated XOR / BUNDLE; (5) f32 per connection where the LE contract is
byte/nibble-quantized; (6) a private timestep counter beside episodic = Lance
versions / last_active_cycle; (7) no notion of PlasticityState, whose 3-bit
S/P/O hot-frozen gate is exactly this engine's missing input and the measured
disconnect; (8) O(n^2) pair space where the substrate's answer is EdgeBlock's
bounded degree.
LIVE DEFECT (9): depression is computed and DISCARDED. StdpRule::weight_change
returns negative dw for LTD, but fire() applies only `if dw > 0.0` under a
"TODO: directional hebbian for depression". So `a_minus: 0.012, // Slightly
stronger depression (homeostasis)` is an inert doc-comment claim — the
homeostasis it documents never happens, the engine can only potentiate, and
wiring it as-is produces exactly the unbounded reinforcement runaway that
falsifier P2 exists to catch. P0 falsifiability at substrate level: a
doc-comment claim is not a behaviour.
DOPPELSPALT (operator): the four philosophers are four LENSES over one crystal;
interference shows in the projections while the bytes never move. rl_ops.rs
already says "STDP for crystal cells" / "crystal lattice" — the right noun with
the wrong mechanism, addressing crystal cells as usize hash keys instead of
lensing the SoA crystal. Plasticity's job is to modulate WHICH SLIT IS ELECTED —
the conductance of the projections — never to accumulate a private matrix beside
the crystal. Same statement as violation (1), reached from the physics side
rather than the storage side, and it is why P4 requires non-elected stances to
stay REACHABLE: closing a slit destroys the interference pattern.
Reimagined shape, as a lane and not a port: conductance in an EdgeBlock slot /
CausalEdge64 magnitude (bounded degree by construction); update by BUNDLE
because conductance is a magnitude and I-SUBSTRATE-MARKOV forbids XOR there;
gated by the existing PlasticityState 3-bit S/P/O, which is what consuming that
bit means and why it is currently inert; quantized u8/i4; clock = Lance version;
no &mut self compute (a pass returns deltas, write-back is a separate gated
builder step); and LTD must actually land or be deleted with its homeostasis
claim removed — half a mechanism whose disabled half is documented as active is
worse than an honest omission.
Treat rl_ops.rs as a reference implementation to read, not a dependency to wire.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3RyLEbuNSHxxB3NTTrGki1 parent 32077e6 commit 93c46ee
1 file changed
Lines changed: 73 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
95 | 95 | | |
96 | 96 | | |
97 | 97 | | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
98 | 171 | | |
99 | 172 | | |
100 | 173 | | |
| |||
0 commit comments