From d523c37f987c97f8c6537c16e3ac75e971c4acdc Mon Sep 17 00:00:00 2001 From: Jammy2211 Date: Fri, 23 Oct 2026 19:36:45 +0100 Subject: [PATCH 1/2] =?UTF-8?q?docs:=20cluster-pointsolver=20spurious-core?= =?UTF-8?q?=20check-in=20(PyAutoLens#799=20=E2=86=92=20#800)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Qy3Nc9rZwKHwQgPt8kMyeD --- tasks/cluster_pointsolver_speed.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tasks/cluster_pointsolver_speed.md b/tasks/cluster_pointsolver_speed.md index 0b3971f..efe1846 100644 --- a/tasks/cluster_pointsolver_speed.md +++ b/tasks/cluster_pointsolver_speed.md @@ -40,6 +40,12 @@ not refresh measurements or authorize compute. Historical task text is retained. - Human decision TAKEN 2026-10-23 (chat): keep the 1.0″ starting grid, plus the validation check as mitigation. See the Decision section below. - Next bounded task: spurious-core candidates (`draft/feature/autolens/point_solver_spurious_core_candidates.md`, start_dev in progress), then the workspace validation check. - Review date does not refresh measurement dates. This check-in authorizes no compute, default change or merge. [Full dated check-in](../checkins/2026-10-23.md). +- Spurious-core candidates ISSUED and SHIPPED 2026-10-23: [PyAutoLens#799](https://github.com/PyAutoLabs/PyAutoLens/issues/799) → [PyAutoLens#800](https://github.com/PyAutoLabs/PyAutoLens/pull/800) (OPEN, `pending-release`, awaiting human `/prm`). It adds an opt-in `residual_threshold` (default `None`, behaviour unchanged) that rejects candidates with |β(θ̂) − β| > k · `pixel_scale_precision`; k = 10 is recommended. + - Mechanism: the host is a near-critical saddle at the `r_core = 0` members, so the core points have |μ| 0.1–0.3 and the magnification filter cannot remove them. + - Evidence (laptop CPU fp64, diagnostic): true candidates reach at most 3.58× the precision (viz), 2.21× (`simple`) and 1.075× (1c/1d near-cusp); the core points are at least 38.5×. At k = 10 all 4 viz core points are removed and nothing else changes in 238 cases, and the 1c/1d rows are bit-identical. + - The rejected rule, a triangle-area consistency check, drops true near-cusp candidates. + - Not tested: A2744. At precision 0.01 the cut (0.1″) is above the 0.04″ residuals. +- Next, after `/prm`: turning it on by default is a human decision. Then the workspace validation-check draft, and a workspace_test CI witness for `residual_threshold` (phase 2) once the rule is accepted. One task at a time. ## Knowledge (2026-10-22): phase 1, cluster-scale robust PointSolver settings From fc81800b0d02250159607bb71d68c00495d6fc9d Mon Sep 17 00:00:00 2001 From: Jammy2211 Date: Fri, 23 Oct 2026 22:16:48 +0100 Subject: [PATCH 2/2] docs: spurious-core filter on by default (human decision) + side issues Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Qy3Nc9rZwKHwQgPt8kMyeD --- tasks/cluster_pointsolver_speed.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tasks/cluster_pointsolver_speed.md b/tasks/cluster_pointsolver_speed.md index efe1846..3278294 100644 --- a/tasks/cluster_pointsolver_speed.md +++ b/tasks/cluster_pointsolver_speed.md @@ -40,12 +40,14 @@ not refresh measurements or authorize compute. Historical task text is retained. - Human decision TAKEN 2026-10-23 (chat): keep the 1.0″ starting grid, plus the validation check as mitigation. See the Decision section below. - Next bounded task: spurious-core candidates (`draft/feature/autolens/point_solver_spurious_core_candidates.md`, start_dev in progress), then the workspace validation check. - Review date does not refresh measurement dates. This check-in authorizes no compute, default change or merge. [Full dated check-in](../checkins/2026-10-23.md). -- Spurious-core candidates ISSUED and SHIPPED 2026-10-23: [PyAutoLens#799](https://github.com/PyAutoLabs/PyAutoLens/issues/799) → [PyAutoLens#800](https://github.com/PyAutoLabs/PyAutoLens/pull/800) (OPEN, `pending-release`, awaiting human `/prm`). It adds an opt-in `residual_threshold` (default `None`, behaviour unchanged) that rejects candidates with |β(θ̂) − β| > k · `pixel_scale_precision`; k = 10 is recommended. +- Spurious-core candidates ISSUED and SHIPPED 2026-10-23: [PyAutoLens#799](https://github.com/PyAutoLabs/PyAutoLens/issues/799) → [PyAutoLens#800](https://github.com/PyAutoLabs/PyAutoLens/pull/800) (OPEN, `pending-release`, awaiting human `/prm`). It adds `residual_threshold`, which rejects candidates with |β(θ̂) − β| > k · `pixel_scale_precision`. **Human decision 2026-10-23: on by default at k = 10** (the problem is common on cluster models; `None` disables it). - Mechanism: the host is a near-critical saddle at the `r_core = 0` members, so the core points have |μ| 0.1–0.3 and the magnification filter cannot remove them. - Evidence (laptop CPU fp64, diagnostic): true candidates reach at most 3.58× the precision (viz), 2.21× (`simple`) and 1.075× (1c/1d near-cusp); the core points are at least 38.5×. At k = 10 all 4 viz core points are removed and nothing else changes in 238 cases, and the 1c/1d rows are bit-identical. - The rejected rule, a triangle-area consistency check, drops true near-cusp candidates. - Not tested: A2744. At precision 0.01 the cut (0.1″) is above the 0.04″ residuals. -- Next, after `/prm`: turning it on by default is a human decision. Then the workspace validation-check draft, and a workspace_test CI witness for `residual_threshold` (phase 2) once the rule is accepted. One task at a time. + - Default-on checks against the branch: 952 library tests pass; workspace smoke passes (autolens 41 + 2 notebooks, workspace_test 37, euclid 9, HowToLens 50); 6 real-solve workspace_test point-source scripts pass. The filter costs one extra trace of the padded candidates per solve. + - Side issues filed: [PyAutoGalaxy#658](https://github.com/PyAutoLabs/PyAutoGalaxy/issues/658) (`MassSheet` fails under JAX); [autolens_profiling#445](https://github.com/PyAutoLabs/autolens_profiling/issues/445) (the stale auto-simulated `dataset/cluster/simple` is never regenerated). +- Next: the workspace validation-check draft, then a workspace_test CI witness for the default-on `residual_threshold` (phase 2). One task at a time. ## Knowledge (2026-10-22): phase 1, cluster-scale robust PointSolver settings