Oracle's sharp reads adopted: ans_mass collapse is the primary signal not a nuisance;
||J^T w|| pre-norm magnitude is the missing diagnostic (already logged, we discard it
by unit-normalizing); no-think zero-shot sweep is the cheapest test of CoT-buffering vs
off-target-direction; meandiff tie => Jacobian adds nothing for persona-contrast on a
verdict. AGENTS records the result + next steps.
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
At rep=0.35 edge ans_mass collapses (0.00-0.40 vs base 0.56); swings are artifacts,
score correctly ~0. Partly reverses "rep alone": dual-gate structure was right,
ans_mass is readout-validity (binds before coherence for a verdict). Fix pending
wassname nod.
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
C is not comparable across methods (per-vector norm); report rho=||C*v||/||h||
instead. max_C should never bind; real limiter is budget (Illinois +-20%,
robust methods cap via too-few step-outs -> at_budget=False). Current
swing/score directional only, not a meaningful comparable scale yet.
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
Checked the saved results: 11/14 edges stopped on ans_mass<0.5 with rep still
0.00-0.02. rep never fired, so the fix is rep-alone calibration + ans_mass as a
readout-validity flag, not a new graded measure. Corrects my prior overclaim.
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
rep is a breakdown detector not a graded dial; ans_mass is confidence not
coherence and should not drive calibration. Plan: one graded degeneracy
measure D(C), search per method to a common off-target budget, compare
on-target there. rep-non-monotone anomaly flagged as unchecked (read traces).
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
Ported from the verified j-steer-dev experiment (word pullback beat random
on 3/5 moral foundations, Qwen3-4B n=3). jacobian.py wraps jlens fit/save/
load and derives steering vectors by CPU matvec against the cached J;
vjp.py is the one-backward parity path; applies.py registers the methods
and delivery modes into steering-lite.
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>