Mixed_CFM was loading AdaLNBlock / SinusoidalTimeEmb / _sinkhorn_coupling
and flow-feature helpers from Unified_CFM via importlib spec hacks. Pulled
those symbols into Mixed_CFM/_layers.py (model primitives) and inlined
the flow-feature loader helpers into Mixed_CFM/data.py, then deleted
Unified_CFM/ entirely along with three dead aggregate shell scripts whose
referenced eval entry point (artifacts/verify_2026_04_24/) was already gone.
Verified: historic janus_iscxtor2016_seed42 checkpoint re-evaluated under
the absorbed code reproduces all 10 phase1 AUROC scores to 6 decimals;
same-seed retrain converges to within +/-0.001 on terminal_norm (residual
drift is CUDA non-determinism in MultiheadAttention + Sinkhorn argmax,
not the absorption).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
scripts/figures/ contains the per-dataset figure generators used to render
the JANUS mechanism figures (reverse-flow trajectory PCA, t=0.5 velocity
field view with sparse benign overlay, score-distribution histograms with
within-class fraction weighting). Outputs go to
artifacts/janus_mechanism_figures_<date>/ (gitignored under artifacts/).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replaces stale phase25_* checkpoint paths with the current janus_<ds>_seed<S>
layout under route_comparison/, adds CICIoT2023 to PCAP_GLOBS / WITHIN_DIRS,
and removes the per-dataset n_atk caps so within-dataset eval uses the same
sample budget as JANUS phase1.
Adds cython (3.2.4) — required by Kitsune's KitNET cluster compile path.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>