Every threshold, weight, and formula the thesis relies on — made explorable and, more importantly, judged. For each one: drag it, watch the result change, and read whether the number is grounded in real math, a sensible default, cosmetic, or a bug. All computation runs in your browser on real DB-verified values — nothing hits the backend.
Rerun gate (cold-start-first) — SEALED. Phase-2 anchor: N=96,727 · seal-bae44d1a · recorded JT is 5-D (prospective held at 0). Topology magnitude (papers): durable causal cross-concept ≈ +0.053 (full-corpus seal: N=1,976,020 first-encounters / 232,440 learners; past-mastery 0.091 − future-mastery placebo 0.038, the placebo removing ≈42% as state/selection; permutation p<0.01; supersedes the dead +0.020/+0.007). The method-grounding cascade is now 46/46 terminal (decision-aware) — explore the new Section H (causal decomposition) and Section I (acceptance), or /dashboard/method-grounding.
GROUNDEDSEMI-GROUNDEDCOSMETICBUGDISCLOSEDDEFERRED
Sandbox A
The ADC verdict — what actually decides ACTIVE vs DORMANT
The sealed run (run_sealing.py) classifies a governance dimension ACTIVE iff mean(jt_transfer_contribution) > α_floor AND std/mean ≥ signal_ratio. Drag the two thresholds and watch the four real datasets re-classify. Notice what is load-bearing.
α_floor (mean gate)0.0100
signal_ratio (std/mean gate)0.08
Try: drop α_floor below 0.00785 → STATICS flips ACTIVE (its std/mean already passes). That proves α_floor is the load-bearing gate.
α_floor 0.0100
Dataset
mean
std/mean
verdict
why
Junyi 2015 · Phase 2 · sealed
0.01543
1.645
ACTIVE
both gates pass
STATICS 2011
0.00785
0.150
DORMANT
mean ≤ α_floor (the load-bearing gate)
ASSISTments 2009 SB
0.00715
0.183
DORMANT
mean ≤ α_floor (the load-bearing gate)
ASSISTments 2012 SB · external
0.00760
—
DORMANT
mean ≤ α_floor (the load-bearing gate)
ASSISTments 2015 · external
0.00639
—
DORMANT
mean ≤ α_floor (the load-bearing gate)
Junyi 2015 · Phase 1
0.00603
0.010
DORMANT
mean ≤ α_floor (the load-bearing gate)
EdNet KT1 · external
0.00591
—
DORMANT
mean ≤ α_floor (the load-bearing gate)
CSEDM F19 · external
0.00589
—
DORMANT
mean ≤ α_floor (the load-bearing gate)
Why Phase 1 is DORMANT but Phase 2 is ACTIVE
Same dataset (Junyi 2015), same runtime, same governance. The only difference: Phase 2 injects 1,052 prerequisite DAG edges. Without a graph (Phase 1) the transfer dimension has nothing to look up, so its mean contribution stays at the floor (0.006 < 0.01 → DORMANT). Inject the graph and the mean rises to 0.0154 > 0.01 → ACTIVE. That single toggle is the core experiment.
Why only Junyi has a “Phase 2”
“Phase 2” means inject a prerequisite DAG. Only a dataset with an explicit prerequisite structure (Junyi) has a DAG to inject. STATICS (bipartite Q-matrix), ASSISTments (flat skill tags), EdNet (transition graph) and CSEDM (null graph) have no prerequisite DAG — nothing to inject, so no Phase 2 exists for them. That absence is not a gap; it is the topology-taxonomy result: only explicit-DAG topologies can activate transfer governance.
Datasets marked external were analysed offline (means from the reports; std not recomputed locally); the four live ones are queried from experiment_trajectories. All eight sit below α_floor except Phase 2 — so the verdict is driven by topology, not by raw signal size.
COSMETICHonest judgement — is this number real or cosmetic?
ACTIVE iff mean > α_floor (0.01) AND std/mean ≥ signal_ratio (0.08)
sealed signal_ratio = 1.6449 = 0.02539 / 0.01543 (std/mean, NOT mean/α_floor)
Sourcerun_sealing.py (the script that produced the sealed verdict + frozen_stats).
Math / literature basisstd/mean is the coefficient of variation — a real statistic. But here it is used as an 'is the dimension active?' gate, which it is not designed to measure.
Why this verdictThe std/mean ≥ 0.08 gate is near-inert: STATICS (0.150) and ASSIST09 (0.184) PASS it yet are DORMANT — purely because mean < 0.01. Only Phase 1 (CV 0.009, constant at the floor) is gated by it. So the verdict reduces to 'is the floor-influenced mean above 0.01?'. The repo also holds three other contradicting signal_ratio definitions (mean/std, mean/α_floor, a weight-collapse 0.05).
How it could be betterThe verdict is floor-sensitive and the gate is decorative. The thesis therefore does NOT rest on it — the topology effect is established by committed offline estimators (shuffled-DAG + time-placebo: durable causal cross-concept ≈ +0.053, sealed at the full corpus N=1.98M; permutation p<0.01), independent of any threshold. Explore it live in Section H. Recommended: drop std/mean or replace with a proper signal-detection test against a permutation null.
Sandbox B
JT governance weights — how much each signal counts
The Joint-Objective is a weighted sum of six governance signals (five active on the recorded path — T_prospective is held at 0). Drag the weights (they auto-normalize to sum 1) and watch the per-signal contribution and the JT value change. The defaults put mastery gain first.
ΔM · Mastery gain25%
T_realized · Realized transfer15%
T_prospective · Structural utility15%
C · Challenge15%
U · Uncertainty15%
Z · ZPD15%
JT(t) = Σ wᵢ · signalᵢ on a sample interaction →JT = 0.425
ΔM · signal 0.620.155
T_realized · signal 0.300.045
T_prospective · signal 0.100.015
C · signal 0.450.068
U · signal 0.550.083
Z · signal 0.400.060
Try: zero out ΔM and the system stops rewarding mastery progress (underweight); pile everything on one signal and it overfits to that dimension. The default 25/15×5 keeps mastery primary without starving the rest.
SEMI-GROUNDEDHonest judgement — is this number real or cosmetic?
Math / literature basisMulti-objective weighting is standard. The ADAPTATION is principled: momentum smoothing prevents oscillation, adaptive-rate decay prevents collapse, bounds keep weights valid (a constrained-optimization pattern).
Why this verdictThe adaptation machinery is real and well-motivated. The INITIAL values (ΔM=0.25 'primary', rest 0.15) are a sensible designed prior — mastery progression as the primary learning signal — but they are not derived from a specific result or learned from data; they are a reasonable default that then adapts.
How it could be betterLearn or fit the prior from held-out data; run a weight-sensitivity ablation (already partially done — Tier-2 JT ablations) and report how outcomes move with each weight, so the prior is justified empirically rather than asserted.
Sandbox C
The transfer normalizer — and the floor-artifact bug
jt_transfer_contribution = w2 · N(transfer_realized), where N is a centered sigmoid. Slide the raw transfer signal to 0 (no transfer) and watch what N returns. A correct normalizer should return 0; this one returns a floor.
transfer_realized (raw signal z)0.00
N(z) = 0.0759
jt_transfer = w2·N(z) = 0.0114
at z=0 → N = 0.0759 ✗ floor
With no zero-guard, even a dimension with zero real transfer is recorded as ≈ w2·0.076 of governance. That floor is what inflates "dormant" means toward the 0.01 α_floor gate (Section A) — the root of the fragile verdict. Tick the fix to see N(0) drop to 0.
BUGHonest judgement — is this number real or cosmetic?
N(z) = 1 / (1 + exp(−(z − 0.5)·5)) ← centered at 0.5, steepness 5
N(0) = σ(−2.5) ≈ 0.0759 (a non-zero FLOOR, even when transfer is exactly zero)
Sourceconstitutional_jt_governance.py — the transfer normalizer; proven on a live ednet row (w2=0.07775, transfer=0 → contribution=0.00590 = w2·0.0759).
Math / literature basisA logistic squashing function is a reasonable normalizer. But a normalizer of a magnitude that can be exactly zero MUST satisfy N(0)=0 — this one does not (no zero-guard).
Why this verdictThe missing zero-guard creates a constant ≈0.076 floor. That floor is what makes the structural_zero datasets' means hover at 0.006–0.008 (near the 0.01 gate) and is the proximate cause of the threshold-fragile verdict. The centering (0.5) and steepness (5) are also arbitrary — no literature or fitted basis is given.
How it could be betterAdd the zero-guard (return 0 when z≤ε), as toggled above. The cascade classifies this as DISCLOSED, not a silent bug: it is the §1.3.1 reflexive-calibration centerpiece. The F4 fix is staged future-work (deploying it needs a re-seal); the offline topology estimators (≈+0.053 causal, full-corpus seal) are unaffected because they never used this normalizer's verdict. Justify or fit the steepness/centering rather than hard-coding them.
Sandbox D
The mastery ensemble — how the system estimates what you know
Three independent learners update on every interaction. Press 'submit interaction' and watch them move. Two are textbook (a Bayesian conjugate update, a Kalman filter); the third wears a control-theory name over a heuristic.
difficulty0.50
BayesianGROUNDED
0.300
Beta(α=3, β=7)
α/(α+β) = 0.300
correct→α+1 · wrong→β+1
KalmanGROUNDED
0.300
K = P/(P+R) = 0.000
m += K·(y−m)
P = 0.100 · Q=.01 R=.1
BoundedStability (ex-Lyapunov)COSMETIC
0.300
α = 0.2(1−m)
gain = 0.0000
no Lyapunov fn — ~0.92 corr w/ Bayesian
Submit a few correct answers and watch the three diverge: Bayesian climbs as α grows, Kalman tracks with shrinking uncertainty, the heuristic moves with diminishing returns. They are tracked independently; a fourth layer (ConfidenceWeightedLearner) then modulates updates with hand-tuned K-12 constants.
SEMI-GROUNDEDHonest judgement — is this number real or cosmetic?
Bayesian: α/(α+β), conjugate Beta-Bernoulli
Kalman: K=P/(P+R); m+=K(y−m); P=(1−K)(P+Q)
"Lyapunov": m += 0.2(1−m)·(1−m)·d [correct], clip[0.05,0.95] ← no Lyapunov function
Math / literature basisBayesian conjugate updating and Kalman filtering are standard, correct estimators of a latent [0,1] mastery. The 'Lyapunov' learner has no Lyapunov function; ConfidenceWeightedLearner adds K-12-tuned heuristics (mastery bands 0.08/0.06/0.04/0.03, λ₁=0.1, momentum 0.6).
Why this verdictTwo of three learners are genuine (Bayesian, Kalman). The 'Lyapunov' is a misnamed heuristic (its own verdict is COSMETIC). The confidence-modulation layer is heavily hand-tuned — a code comment even reads 'Removed tanh clamp — it was killing learning by 83%', a sign of empirical tuning rather than derivation.
How it could be betterKeep Bayesian + Kalman. Rename or implement the Lyapunov learner (your call). Fit the confidence-weighting + K-12 constants on held-out data and report a sensitivity ablation, so the combination rule is justified rather than asserted.
Sandbox E
The bandit — how the system chooses what to show next
Each modality is an arm with a Beta(α,β) belief about its success. Thompson sampling draws one sample per arm and picks the highest. Run it on illustrative arms — or seed it from a real learner's live modality history and watch sampling continue from their actual beliefs.
The “true” rates are hidden from the bandit (this sim sets visual = 0.72 as the best). With few pulls all three beliefs are wide → it explores. As it pulls the winner, that belief narrows while the others stay wide → it exploits. That whole explore/exploit trade-off falls out of the Beta posteriors — no tuning required.
GROUNDEDHonest judgement — is this number real or cosmetic?
Math / literature basisThompson sampling over Beta-Bernoulli arms is the gold-standard, theoretically-justified bandit (near-optimal Bayesian regret). Sampling θ* from the posterior automatically balances explore/exploit.
Why this verdictThe core selection is real Thompson sampling — exactly what you see above. The add-on score terms (γ·uncertainty, η·JT, −difficulty) make it a sensible contextual variant; the weights γ=0.1, η=0.05 and the transfer-aware 0.3/0.5/0.2 are SEMI-grounded tuning, not derived.
How it could be betterKeep Thompson. Justify the γ/η/transfer weights with a tuning sweep, and report regret vs a plain Thompson baseline so the extra terms earn their place.
Sandbox F
Is every core signal justified? — the whole layer, on live data
Not just JT. Every core signal gets an honest verdict from its LIVE activation on the sealed run (N=96,727). The bar is honest characterization + evidence, not perfection — a near-constant or redundant signal is disclosed, not hidden. That disclosure is the ADC instrument working.
The normalizer floor is DISCLOSED (the §1.3.1 reflexive-calibration centerpiece), not silently patched. The F4 zero-guard is staged future-work — deploying it needs a re-seal. The topology effect is established by the shuffled-DAG control (Section H), independent of this normalizer, so the verdict does not rest on it. The V2 continuation anchor (run-13b43797) is sealed and audit-only (overlay) — it does not move these means.
Signalmeancv · infoverdictbasis · note
JT dim ΔM · mastery delta0.0830.43GROUNDEDBeta-Bernoulli / Kalman posterior change. informative; 100% active
JT dim T_realized0.0151.65SEMI-GROUNDEDtransfer-of-learning; prerequisite mastery. topology-responsive but target-blind; fires 18.3%
JT dim T_prospective0.000—DISCLOSEDforward structural utility (held at 0 in recorded JT → 5-D core). dormant. A durable ~+0.053 causal cross-concept topology effect exists in Junyi OUTCOMES (full-corpus seal, Section H), but the structural ESTIMATOR (C1–C5 bake-off, 3 DAGs, permuted-null) is not topology-specific — the only activating formula (fringe×depth) is redundant with difficulty (−89% when difficulty controlled). Estimator kept off-path for ranking; disclosed future-work.
JT dim Challenge0.1580.22COSMETICZPD/desirable difficulty — actually an inverted latency proxy. LARGEST contributor yet near-constant → low info
JT dim Uncertainty0.1190.58GROUNDEDensemble variance / active learning. informative
JT dim ZPD0.0441.29SEMI-GROUNDEDVygotsky ZPD. zpd_score saturated ~0.97 → weak discriminator
Ensemble BoundedStability (ex-Lyapunov)0.5700.30COSMETICbounded heuristic — NOT a Lyapunov function (renamed). 0.92 corr w/ Bayesian → near-redundant 3rd member
Bandit Thompson selector——GROUNDEDThompson (1933) θ*~Beta(α,β). the operative policy / selector — live
Bandit policy_multiplier1.0000.00COSMETICseparate policy-comparison library. ≡ 1.0 → inert; the bandit supersedes it
Bandit −difficulty term——BUGbandit score add-on. difficulty column is NULL → term is dead
The cv (coefficient of variation) is the tell: high = informative, near-zero = constant/decorative. Challenge has the largest contribution but the lowest cv — dominant yet uninformative. The ex-“Lyapunov” learner is 0.92-correlated with Bayesian (a near-redundant third member, now honestly renamed). Both are disclosed, not hidden — the ensemble’s real diversity is Bayesian + Kalman.
SEMI-GROUNDEDHonest judgement — is this number real or cosmetic?
defensible(signal) ⟺ honest( what · why/literature · math-faithful · carries-signal · impl = claim )
verdict drawn from LIVE activation on the sealed run — not asserted
Math / literature basisThe ADC exists to detect which signals are active vs structurally dormant. A near-constant challenge and a redundant third learner are the instrument's worked examples; disclosing them with evidence is the contribution, not a flaw.
Why this verdict7 signals are genuinely grounded (ΔM, Uncertainty, Bayesian, Kalman, Thompson, IRT, adaptive-rate). ~6 are fixable (normalizer F4 + bandit RNG F1 done in source; signal_ratio, challenge, difficulty term, confidence_interval pending). ~5 are honestly disclosed (prospective, ZPD, bounded-stability redundancy, policy-comparison, ensemble-weighting). Every signal has an evidence-backed packet.
How it could be betterRe-seal after F4/F1 + the renames, then refresh this table. Add per-signal ablation + predictive-validity (does each signal predict what it claims) as the deepest 'show-it' evidence.
Sandbox G
Provenance gate — what is sealed, and what must never be cited
Maps each citable claim to its data, script, output, and seal status. The rerun is DONE: topology magnitude is sealed at the full corpus (+0.053), matched baselines + ADC seal are green. Two rows are red on purpose — the lost +0.020/+0.007 estimator and the WITHDRAWN R12 ablation (confounded). Never cite a red row.
Path C 3-learner fusionENSEMBLE_REDESIGN_SPEC.md—🔴STAND DOWN
Full gate artifact: METHODS_SANDBOX_GATE.md in the repo root. Path C ensemble redesign is stood down — disclose Bayesian≈stiff-Kalman redundancy instead of rebuilding.
Sandbox H
The topology effect, decomposed — how +0.053 is the durable causal lift
The headline magnitude is not a raw correlation. A committed estimator (within-learner fixed effects + a time-placebo) splits the cross-concept past-mastery association into the part that is real durable transfer and the part that is just learner state/selection. Drag the two coefficients and watch the causal lift — and where it lands against the shuffled-DAG permutation null.
time-placebo removes ≈ 42% as learner state/selection (sealed)
The raw past association, split:
■ durable causal 0.053■ selection 0.038
Position vs the shuffled-DAG permutation null (K=100):
3.2 null-SDs above the null mean (-0.014) · sealed permutation p < 0.001 (K=1000)
At the sealed values (past 0.091, placebo 0.038) the durable causal lift is +0.053, well above a null built from degree-preserving DAG shuffles (p < 0.001 at K = 1000) — topology-specific, not graph-presence. Most of the raw effect is curriculum proximity (~0.13, reported in the thesis); this sandbox isolates the durable cross-concept core that survives the placebo.
GROUNDEDHonest judgement — is this number real or cosmetic?
Math / literature basisWithin-learner fixed effects remove ability; the future-mastery placebo (mastering the prerequisite AFTER the target — causally impossible) measures the state/selection share; past − future is the causal residual. The shuffled-DAG permutation null separates correct topology from graph presence.
Why this verdictA committed, conclusion-blind estimator on the FULL corpus (N=1,976,020): the placebo removes ≈42% as selection, leaving a durable cross-concept lift of +0.053 whose raw effect beats all 1000 degree-preserving permutations (p < 0.001; ≈4.9 null-SD on the full corpus, ≈5.3 on the registered 1/10 subsample). This is the sole causal-magnitude evidence after the R12 ablation was withdrawn as confounded.
How it could be betterAlready at full-N with a permutation null and a placebo control. Next: report per-prerequisite dose-response and replicate on a second explicit-DAG dataset to show the +0.053 magnitude is not Junyi-specific.
Sandbox I
Decision-aware acceptance — why “100% complete” is honest, not green-washed
The method-grounding cascade is 46/46 terminal. That is NOT because everything passes — it is because every limitation is adjudicated by a decision you locked in jt_design_decisions.json. Toggle a locked decision OFF and watch the criterion it covers revert from a terminal DISCLOSED/DEFERRED to an open WARN/UNMEASURED — and the cascade reopen.
Locked design decisions
✓ ACCEPTANCE COMPLETE — 9/9 terminal
Every A1–A5 criterion is PASS, or disclosed/deferred by a locked decision. Cascade: 46/46 terminal (42 pass + 4 deferred).
A1Matched AUC — ties BKT, beats deep KTmatched eval (tie-aware m_K) · HCIE 0.6051 vs BKT 0.5963 (Δ+0.0088)PASS
A2Bundle A cross-dataset zero-shotbundle_a_defer=DEFER · 3 external datasets not runDEFERRED
Math / literature basisAn acceptance scorer that ignores the locked decisions would WARN/UNMEASURED against thresholds the design-lock already superseded — that is the bug. Consuming the decisions is the fix; each reframe keeps the raw number and cites its decision_ref.
Why this verdict100% terminal ≠ all-green. 7 prior WARNs were the cascade doing its job — surfacing real disclosed limits (ensemble<Kalman, 0.92 redundancy, Junyi has no assessment data, Bundle A deferred). Each is now adjudicated by a decision you locked, with the raw finding still visible. Toggle one off above and the criterion honestly reopens.
How it could be betterTo turn a DISCLOSED into a PASS you must change the world, not the label: run Bundle A on a real external dataset (A2), or supply assessment-tagged data to measure Challenge_event (A4b). The cascade tells you exactly which measurement would do it.
All values DB-verified (experiment_trajectories; sealed anchor seal-bae44d1a, N=96,727; V2 continuation anchor run-13b43797 / seal-51b8b51a is audit-only overlay). The topology-transfer effect (durable causal cross-concept ≈ +0.053, full-corpus seal N=1.98M; shuffled-DAG + time-placebo controls) is computed offline by the committed estimator and reported as a result — explore its decomposition in Section H. The method-grounding cascade is 46/46 terminal (Section I); the F4 normalizer floor is disclosed, not patched.