From 432e5b9202c255d14a661163774fce9040aeec41 Mon Sep 17 00:00:00 2001 From: Jammy2211 Date: Fri, 23 Oct 2026 15:25:10 +0100 Subject: [PATCH 1/2] analytic_gaussian: amend witness criterion 6 for NO_CHANGE updates (PyAutoFit#1711) Co-Authored-By: Claude Fable 5.1 --- archive/tasks/analytic_gaussian/ensemble_parity.md | 2 +- projects/analytic_gaussian.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/archive/tasks/analytic_gaussian/ensemble_parity.md b/archive/tasks/analytic_gaussian/ensemble_parity.md index 7441b8a..39f607d 100644 --- a/archive/tasks/analytic_gaussian/ensemble_parity.md +++ b/archive/tasks/analytic_gaussian/ensemble_parity.md @@ -67,7 +67,7 @@ relax so a wave can pass; changing one is its own task, with the reason in the r | 3 | autofit EP, leg A | ≥ 95% of seeds within (a 0.01, b 0.02) on **every** row, and no seed worse than a = 0.10 | | 4 | autofit EP, leg B | ≥ 90% of seeds within (a 0.15, b 0.25); E[sigma] inside the closed-form [q05, q95] for ≥ 90%; scale-collapse rate (sigma < 0.1) = 0 | | 5 | autofit graphical | ≥ 90% of seeds within (a 0.10, b 0.15) on both legs; scatter coverage ≥ 0.85 | -| 6 | EP flag health | no seed in which any factor ends the run with zero SUCCESS updates — the STALE state #1562/#1574/#1576/#1580 taught the library to report | +| 6 | EP flag health | no seed in which any factor ends the run without a completed update — no SUCCESS and no NO_CHANGE (the STALE state #1562/#1574/#1576/#1580 taught the library to report). Amended 2026-10-23 (PyAutoFit#1711): NO_CHANGE is a converged update — the factor's Laplace optimiser met its stop condition at the start point (`iter=0`) and the projection was accepted and the message updated — so a factor whose updates are all NO_CHANGE is not stale (leg A seed 140: the mu prior, whose posterior mean 50.0018 lies within the gradient tolerance of the prior mean; leg B: the sigma prior, whose cavity is still the prior because the mode path never moved the scatter). A BAD_PROJECTION-only factor remains a miss — that is the #1405 scatter state, cured by `projection="moments"` (#1656). The original wording counted SUCCESS only and scored 19/400 seed-legs as misses: 13 were NO_CHANGE-only prior factors (pass under the amended rule), 6 were BAD_PROJECTION-only hierarchical factors (still misses under the mode path; seeds 29 and 71 pass under moments) | Deliverable: `results/ens_n5/summary.json` (the witness file) and `parity_ensemble.md` committed in `analytic_gaussian`, carrying every criterion's measured number — including a Wilson interval diff --git a/projects/analytic_gaussian.md b/projects/analytic_gaussian.md index aa73f4b..7890f4f 100644 --- a/projects/analytic_gaussian.md +++ b/projects/analytic_gaussian.md @@ -11,6 +11,7 @@ Wave 1 (342413, 200 seeds at N=5) is accepted as the baseline: autofit EP is exa ## Log +- 2026-10-23 — note — criterion 6 amended (PyAutoFit#1711, PR #1712): the 19/400 zero-SUCCESS seed-legs of wave 1 split into 13 NO_CHANGE-only prior factors (zero-iteration Laplace convergence at the start point, projection accepted, closed-form match a 5e-5 / b 2e-5 on seed 140 leg A — a converged update, not stale; library reporting aligned, no EP maths changed) and 6 BAD_PROJECTION-only hierarchical factors (the #1405 scatter state, cured by projection="moments" #1656; seeds 29 and 71 re-run under moments give HierarchicalFactor SUCCESS 28 and 23). Criterion 6 now counts SUCCESS or NO_CHANGE as a completed update; the matching ensemble_seed.py any_factor_never_succeeded change is the human's to apply in the science checkout. Side finding: seed 29 leg B under moments still misses the sigma cell (a 0.225 / b 0.416) while sigma stays inside [q05, q95]. - 2026-10-14 — note — PyAutoFit#1656 (merged 2026-09-30, released 2026.10.7.1) ports the minimal-EP referee's moment matching as LaplaceOptimiser(projection="moments"); on analytic_gaussian.py leg B autofit EP sigma 6.3401 ± 2.4609 vs closed form 6.5667 ± 2.8832 (mode path 9.3722, BAD_PROJECTION=19). A wave-2 ensemble on the moments path needs a private PyAutoFit checkout on RAL: the shared mirror is 404b3e5f7 and lacks it. The criterion-2 mu-threshold diagnostic is still unrun. - 2026-10-14 — note — output/ vaulted to z_vault/ on laptop and RAL (mv, nothing deleted), anticipating reruns; output/ left empty, results/ untouched; z_vault/ gitignored locally - 2026-09-30 — note — astra (Codex gpt-6-astra) on criterion 2, verbatim: 'Neither is established as "wrong" by this result alone. I favour inadequate calibration of the threshold, with moderate confidence, but would not yet certify the control.' Decisive diagnostic: independently reconstruct the same EP factorisation at the fixed point on a passing, an edge and the worst mu seed and compare tilted vs q moments; audit the per-site sigma>0 clip (analytic_ep_minimal.py:333). Opus reviewer concurs independently (a_mu = 0.041*(E_ref[mu]-m0)/std_ref over 200 seeds, corr 0.98; calibration seeds 0-4 had |a_mu| 0.002-0.020 vs 95th pct 0.077). Full answer: PyAutoCortex#50 comment https://github.com/PyAutoLabs/PyAutoCortex/issues/50#issuecomment-5908448194 From a3815c43ae3617884d024ea30c83124ef04894ef Mon Sep 17 00:00:00 2001 From: Jammy2211 Date: Fri, 23 Oct 2026 15:36:32 +0100 Subject: [PATCH 2/2] dashboard: re-render for criterion 6 note Co-Authored-By: Claude Fable 5.1 --- dashboard.html | 12 ++++++------ dashboard.md | 12 ++++++------ state.json | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/dashboard.html b/dashboard.html index 920542c..628eb41 100644 --- a/dashboard.html +++ b/dashboard.html @@ -4,7 +4,7 @@ PyAutoCortex Dashboard - +