From 3e4bb99a8de5a9fc804da649a311f26983bc6ce8 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 24 Aug 2026 20:45:47 +0000 Subject: [PATCH] prompt: file the three CTI CI follow-ups left open by Phase 5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All three were surfaced by the arcticpy / wiki-currency / Phase-5-smoke work shipped 2026-08-24 and deliberately not taken then, to avoid widening those tasks. Each carries the evidence already gathered so a fresh session does not re-derive it. draft/maintenance/ci/autocti_workspace_navigator_check.md (priority: high) Heart requires ["Smoke Tests", "Navigator Check"] for the `workspaces` group; autocti_workspace has only the former. This is not cosmetic: verified against heart/checks/ci_status.py that a required workflow with no runs never satisfies all_green, so the repo rolls up as permanently `in_progress` β€” never green, never red. It can go red but cannot go green, so the readiness gate can never see it as CI-clean. Adding Smoke Tests was necessary but not sufficient. draft/maintenance/ci/wiki_currency_check_version_gate.md The regenerated API baseline will rot again: --check-version gates on a hash of the ENTIRE public surface of autoarray and autofit, and the red it just produced was 14 symbols of which not one is cited by the assistant. The workflow installs from the libraries' main clones, so the clock is every export-touching merge. Two options written up (gate on removals only, or let --scope all subsume it); the task is to choose deliberately. Records that pinning to a released stack was already considered and rejected. draft/maintenance/ci/heart_smoke_table_autocti.md config/repos.yaml's `smoke:` block has no autocti entries and import_names has no PyAutoCTI, so heart/smoke.py cannot prepare or run either CTI smoke suite locally β€” a blind spot exactly where two suites just landed. Not a two-line config edit: a composite action cannot be called from smoke.py, so the arcticpy recipe needs an equivalent without re-creating the second copy PyAutoHeart#170 just removed. Three options written up. Declared Difficulty: medium on all three. The sizing faculty derives too-large/too-large/large, but it scores on prompt length and these are long because they carry measured evidence, not because the work is large. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_018nDAxBEavkzb6Zkz1cYHef --- dashboard.html | 89 +++---- dashboard.md | 222 ++++++++++-------- .../ci/autocti_workspace_navigator_check.md | 81 +++++++ .../ci/heart_smoke_table_autocti.md | 106 +++++++++ .../ci/wiki_currency_check_version_gate.md | 92 ++++++++ 5 files changed, 448 insertions(+), 142 deletions(-) create mode 100644 draft/maintenance/ci/autocti_workspace_navigator_check.md create mode 100644 draft/maintenance/ci/heart_smoke_table_autocti.md create mode 100644 draft/maintenance/ci/wiki_currency_check_version_gate.md diff --git a/dashboard.html b/dashboard.html index 3c7583c1..aa33b4a3 100644 --- a/dashboard.html +++ b/dashboard.html @@ -142,7 +142,7 @@

PyAutoMindDashboard

Intent. Priority. Flow.

Every task the Mind is holding. Tap a task's πŸ“‹ and its /start_dev command is on your clipboard β€” paste it into a Claude Code chat to route Claude straight to that task. Recent is the same work by date β€” what has been happening rather than what to do next.

- +

Last updated 2026-08-24. This page is generated from active/, draft/ and the registry files, so it is only as current as they are. dashboard_refresh.yml re-renders it on every push to main β€” that heals a stale page, but not a stale prompt: a task that shipped without its prompt advancing to complete/ keeps rendering here as pickable backlog. Reconciling those is the refresh below.

TRIAGE: needs manual review before routing❓ triagemediumsafehigh

Rectangular mesh split: Bilinear (fast CPU default) vs RTU (advanced/GPU)✨ featureautoarraymediumsupervisedhigh

+

autocti_workspace has no Navigator Check, so its CI can never rollβ€¦πŸ§Ή maintenancecimediumsupervisedhigh

Numba CPU likelihood phase 2: kernel-CDF numba fast path (the 49-88% lever)✨ featureautoarraylargesupervisedhigh

multi_galaxy package: new regime package in autolens_workspaceπŸ“– docsautolenslargesupervisedhigh

Deep research: Can we speed up Delaunay in PyAutoArray?πŸ”¬ researchautoarraytoo-largesupervisedhigh

@@ -184,7 +185,6 @@

Highest priority (filed as high) β€” showing 12 of 14

Re-baseline the MGE imaging JIT profiling regression valueπŸ§ͺ testautolens_workspace_developertoo-largesupervisedhigh

Fix release JAX runtime compatibility and likelihood parityπŸ› bughealth_fixestoo-largesupervisedhigh

Fix JIT quick-update visualization output regressionsπŸ› bughealth_fixestoo-largesupervisedhigh

-

Fix release result/sample parameter-path regressionsπŸ› bughealth_fixestoo-largesupervisedhigh

Quick wins (small enough, and safe enough to run unattended)

Defer the eager scipy.sparse import in derivative_util (~0.10 s of import)🧹 maintenancelibrariessmallsafenormal

@@ -209,7 +209,7 @@

Planned

latent-nan-guard-honest-run β€” planned 2026-07-22

Backlog markdown version

-

139 filed prompts, not started β€” sorted most-pickable first (priority, then size). 25 of them belong to an epic and are listed only under Epics below.

+

142 filed prompts, not started β€” sorted most-pickable first (priority, then size). 25 of them belong to an epic and are listed only under Epics below.

feature β€” 27 @@ -269,24 +269,8 @@

Backlog

interferometer/start_here.py OOM in nightly release-validation integrate legπŸ› bugautolens

-research β€” 14 -

Deep research: Can we speed up Delaunay in PyAutoArray?πŸ”¬ researchautoarraytoo-largesupervisedhigh

-

Delaunay-family JAX modules never hit the persistent compilation cacheπŸ”¬ researchautoarraymediumsupervisedmedium

-

Quick-update plotting cost β€” minutes per update, and it is not JAXβ€¦πŸ”¬ researchautolensmediumsupervisedmedium

-

Use readthedocs or migrate to GitHub docsπŸ”¬ researchautobuildsmallsupervisednormal

-

Re-baseline the slacs0008 acceptance parity after the HAP-dedupe fixπŸ”¬ researchpyautoreducesmallsupervisednormal

- -

We have lots of examples which profile how long JAXπŸ”¬ researchautolens_workspace_developermediumsupervisednormal

-

Is Intel macOS a supported platform, and what is the numpy-only contract?πŸ”¬ researchlibrariesmediumsupervisednormal

-

Checkerboard PSF-mismatch residual diagnostic β€” research + document + ingest papersπŸ”¬ researchpyautomemorymediumsupervisednormal

-

autofit_profiling: bootstrap the repo + general PyAutoFit profiling epicπŸ”¬ researchautofitlargesupervisednormal

-

Multi-band compile census completion β€” A100/multi-core + hetero GPU rowsπŸ”¬ researchautolens_profilingsmallsupervisedlow

-

Chase the ~6% flux scale between PyAutoReduce and legacy SLACS reductionsπŸ”¬ researchpyautoreducemediumsupervisedlow

- - -
-
-maintenance β€” 21 +maintenance β€” 24 +

autocti_workspace has no Navigator Check, so its CI can never rollβ€¦πŸ§Ή maintenancecimediumsupervisedhigh

Untrack the generated FITS test artifacts in autoarray🧹 maintenancelibrariessmallsupervisedmedium

smoke_install.sh's stale jax<0.7 pin β€” CI is on the right jaxβ€¦πŸ§Ή maintenancecilowsupervisedmedium

autolens_workspace_developer rectangular experiments β€” Gut stash + rename🧹 maintenanceautolens_workspace_developersmallsupervisednormal

@@ -295,6 +279,8 @@

Backlog

Un-park imaging/features/scaling_relation/slam once PyAutoArray#431 merges🧹 maintenanceworkspacessmallsupervisednormal

Un-park multi_galaxy/features/scaling_relation/slam once a capped run passes🧹 maintenanceworkspacessmallsupervisednormal

autolens_workspace_developer: broad stale-API rot (56 symbols, no CI)🧹 maintenanceautolens_workspace_developermediumsupervisednormal

+ +

wiki-currency's --check-version gate rots on every library main merge🧹 maintenancecimediumsupervisednormal

Dependency-cap refresh 2026-08: safe bumps, astropy 8 decision, two dead deps🧹 maintenancelibrariesmediumsupervisednormal

PyAutoMemory canonical-key TODO sweep🧹 maintenancepyautomemorymediumsupervisednormal

Capped smoke datasets were committed as if they were real🧹 maintenanceworkspacesmediumsupervisednormal

@@ -310,6 +296,23 @@

Backlog

Refactor Agent witness map lacks PyAutoNerves test suite🧹 maintenancepyautobrainlowsafelow

+research β€” 14 +

Deep research: Can we speed up Delaunay in PyAutoArray?πŸ”¬ researchautoarraytoo-largesupervisedhigh

+

Delaunay-family JAX modules never hit the persistent compilation cacheπŸ”¬ researchautoarraymediumsupervisedmedium

+

Quick-update plotting cost β€” minutes per update, and it is not JAXβ€¦πŸ”¬ researchautolensmediumsupervisedmedium

+

Use readthedocs or migrate to GitHub docsπŸ”¬ researchautobuildsmallsupervisednormal

+

Re-baseline the slacs0008 acceptance parity after the HAP-dedupe fixπŸ”¬ researchpyautoreducesmallsupervisednormal

+ +

We have lots of examples which profile how long JAXπŸ”¬ researchautolens_workspace_developermediumsupervisednormal

+

Is Intel macOS a supported platform, and what is the numpy-only contract?πŸ”¬ researchlibrariesmediumsupervisednormal

+

Checkerboard PSF-mismatch residual diagnostic β€” research + document + ingest papersπŸ”¬ researchpyautomemorymediumsupervisednormal

+

autofit_profiling: bootstrap the repo + general PyAutoFit profiling epicπŸ”¬ researchautofitlargesupervisednormal

+

Multi-band compile census completion β€” A100/multi-core + hetero GPU rowsπŸ”¬ researchautolens_profilingsmallsupervisedlow

+

Chase the ~6% flux scale between PyAutoReduce and legacy SLACS reductionsπŸ”¬ researchpyautoreducemediumsupervisedlow

+ + +
+
docs β€” 12

multi_galaxy package: new regime package in autolens_workspaceπŸ“– docsautolenslargesupervisedhigh

Split lensing regimes: multi_galaxy / group / cluster (epic plan)πŸ“– docsautolenstoo-largesupervisedhigh

@@ -357,12 +360,24 @@

Backlog 2026-08-24 filed +wiki-currency's --check-version gate rots on every library main merge + + + +2026-08-24 +filed interferometer/jax_grad/gradient.py: eager and jitted likelihoods… 2026-08-24 filed +autocti_workspace has no Navigator Check, so its CI can never roll… + + + +2026-08-24 +filed Un-park multi_galaxy/features/scaling_relation/slam once a capped run… @@ -373,6 +388,12 @@

Backlog +2026-08-24 +filed +Heart's local smoke runner cannot run any CTI workspace β€” no autocti… + + + 2026-08-23 filed pynufft removal: unswept downstream residue (1 hard break + stale… @@ -396,19 +417,19 @@

Backlog smoke_install.sh's stale jax<0.7 pin β€” CI is on the right jax… - + 2026-08-22 filed Untrack the generated FITS test artifacts in autoarray - + 2026-08-22 filed The reconstruction noise map describes a different estimator than the… - + 2026-08-22 filed Point-source JSON datasets record no resolution regime @@ -636,24 +657,6 @@

Backlog autolens_workspace_developer: broad stale-API rot (56 symbols, no CI) - -2026-08-04 -filed -aplt.Output stale-API drift in the remaining workspace repos - - - -2026-08-04 -filed -Nightly release has been blocked 8 nights running β€” triage the streak - - - -2026-08-04 -filed -HowToLens ch4 tutorial 3: mask overlay is never actually drawn - -

Epics markdown version

diff --git a/dashboard.md b/dashboard.md index c3cca801..24945eb2 100644 --- a/dashboard.md +++ b/dashboard.md @@ -45,11 +45,11 @@ anything you could not verify. | [In flight](#in-flight) (`active/`) | 1 | | [Parked](#parked) (`parked.md`) | 3 | | [Planned](#planned) (`planned.md`) | 5 | -| [Backlog](#backlog) (`draft/`) | 139 | +| [Backlog](#backlog) (`draft/`) | 142 | ## Start here -**Highest priority** (filed as `high`) β€” showing 12 of 14 +**Highest priority** (filed as `high`) β€” showing 12 of 15
πŸ“‹ TRIAGE: needs manual review before routing β€” medium Β· safe Β· high @@ -75,6 +75,14 @@ anything you could not verify.
+
πŸ“‹ autocti_workspace has no Navigator Check, so its CI can never roll… β€” ci Β· medium Β· supervised Β· high + +``` +/start_dev draft/maintenance/ci/autocti_workspace_navigator_check.md +``` + +
+
πŸ“‹ Numba CPU likelihood phase 2: kernel-CDF numba fast path (the 49-88% lever) β€” autoarray Β· large Β· supervised Β· high ``` @@ -139,14 +147,6 @@ anything you could not verify.
-
πŸ“‹ Fix release result/sample parameter-path regressions β€” health_fixes Β· too-large Β· supervised Β· high - -``` -/start_dev draft/bug/health_fixes/samples_parameter_paths.md -``` - -
- **Quick wins** (small enough, and safe enough to run unattended)
πŸ“‹ Defer the eager scipy.sparse import in derivative_util (~0.10 s of import) β€” libraries Β· small Β· safe Β· normal @@ -269,7 +269,7 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned. ## Backlog -**139** filed prompts, not started. Each section is sorted most-pickable first (priority, then size). **25** of them belong to an epic and are listed only under [Epics](#epics) below. +**142** filed prompts, not started. Each section is sorted most-pickable first (priority, then size). **25** of them belong to an epic and are listed only under [Epics](#epics) below.
feature β€” 27 @@ -698,289 +698,313 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.
-research β€” 14 +maintenance β€” 24 -
πŸ“‹ Deep research: Can we speed up Delaunay in PyAutoArray? β€” autoarray Β· too-large Β· supervised Β· high +
πŸ“‹ autocti_workspace has no Navigator Check, so its CI can never roll… β€” ci Β· medium Β· supervised Β· high ``` -/start_dev draft/research/autoarray/delaunay_research.md +/start_dev draft/maintenance/ci/autocti_workspace_navigator_check.md ```
-
πŸ“‹ Delaunay-family JAX modules never hit the persistent compilation cache β€” autoarray Β· medium Β· supervised Β· medium +
πŸ“‹ Untrack the generated FITS test artifacts in autoarray β€” libraries Β· small Β· supervised Β· medium ``` -/start_dev draft/research/autoarray/delaunay_callback_persistent_cache_miss.md +/start_dev draft/maintenance/libraries/untrack_generated_fits_test_artifacts.md ```
-
πŸ“‹ Quick-update plotting cost β€” minutes per update, and it is not JAX… β€” autolens Β· medium Β· supervised Β· medium +
πŸ“‹ smoke_install.sh's stale jax<0.7 pin β€” CI is on the right jax… β€” ci Β· low Β· supervised Β· medium ``` -/start_dev draft/research/autolens/quick_update_plotting_cost.md +/start_dev draft/maintenance/ci/smoke_install_stale_jax_pin.md ```
-
πŸ“‹ Use readthedocs or migrate to GitHub docs β€” autobuild Β· small Β· supervised Β· normal +
πŸ“‹ autolens_workspace_developer rectangular experiments β€” Gut stash + rename β€” autolens_workspace_developer Β· small Β· supervised Β· normal ``` -/start_dev draft/research/autobuild/git_docs.md +/start_dev draft/maintenance/autolens_workspace_developer/rectangular_experiments_gut_stash.md ```
-
πŸ“‹ Re-baseline the slacs0008 acceptance parity after the HAP-dedupe fix β€” pyautoreduce Β· small Β· supervised Β· normal +
πŸ“‹ Defer the eager scipy.sparse import in derivative_util (~0.10 s of import) β€” libraries Β· small Β· safe Β· normal ``` -/start_dev draft/research/pyautoreduce/acceptance_noise_rebaseline.md +/start_dev draft/maintenance/libraries/defer_scipy_sparse_import.md ```
-
πŸ“‹ Kernel-CDF bandwidth defaults β€” config-dependent quality, investigate adaptivity β€” autoarray Β· medium Β· supervised Β· normal +
πŸ“‹ Mirror drifted library config keys into the workspace configs β€” workspaces Β· small Β· supervised Β· normal ``` -/start_dev draft/research/autoarray/rectangular_kernel_bandwidth_defaults.md +/start_dev draft/maintenance/workspaces/config_key_mirror_drift.md ```
-
πŸ“‹ We have lots of examples which profile how long JAX β€” autolens_workspace_developer Β· medium Β· supervised Β· normal +
πŸ“‹ Un-park imaging/features/scaling_relation/slam once PyAutoArray#431 merges β€” workspaces Β· small Β· supervised Β· normal ``` -/start_dev draft/research/autolens_workspace_developer/jax_jit_profiling.md +/start_dev draft/maintenance/workspaces/unpark_imaging_scaling_relation_slam.md ```
-
πŸ“‹ Is Intel macOS a supported platform, and what is the numpy-only contract? β€” libraries Β· medium Β· supervised Β· normal +
πŸ“‹ Un-park multi_galaxy/features/scaling_relation/slam once a capped run passes β€” workspaces Β· small Β· supervised Β· normal ``` -/start_dev draft/research/libraries/intel_macos_support_policy.md +/start_dev draft/maintenance/workspaces/unpark_multi_galaxy_scaling_relation_slam.md ```
-
πŸ“‹ Checkerboard PSF-mismatch residual diagnostic β€” research + document + ingest papers β€” pyautomemory Β· medium Β· supervised Β· normal +
πŸ“‹ autolens_workspace_developer: broad stale-API rot (56 symbols, no CI) β€” autolens_workspace_developer Β· medium Β· supervised Β· normal ``` -/start_dev draft/research/pyautomemory/checkerboard_psf_mismatch_residual_diagnostic.md +/start_dev draft/maintenance/autolens_workspace_developer/stale_api_rot_audit.md ```
-
πŸ“‹ autofit_profiling: bootstrap the repo + general PyAutoFit profiling epic β€” autofit Β· large Β· supervised Β· normal +
πŸ“‹ Heart's local smoke runner cannot run any CTI workspace β€” no autocti… β€” ci Β· medium Β· supervised Β· normal ``` -/start_dev draft/research/autofit/autofit_profiling_bootstrap.md +/start_dev draft/maintenance/ci/heart_smoke_table_autocti.md ```
-
πŸ“‹ Multi-band compile census completion β€” A100/multi-core + hetero GPU rows β€” autolens_profiling Β· small Β· supervised Β· low +
πŸ“‹ wiki-currency's --check-version gate rots on every library main merge β€” ci Β· medium Β· supervised Β· normal ``` -/start_dev draft/research/autolens_profiling/multiband_compile_census_completion.md +/start_dev draft/maintenance/ci/wiki_currency_check_version_gate.md ```
-
πŸ“‹ Chase the ~6% flux scale between PyAutoReduce and legacy SLACS reductions β€” pyautoreduce Β· medium Β· supervised Β· low +
πŸ“‹ Dependency-cap refresh 2026-08: safe bumps, astropy 8 decision, two dead deps β€” libraries Β· medium Β· supervised Β· normal ``` -/start_dev draft/research/pyautoreduce/legacy_flux_scale_parity.md +/start_dev draft/maintenance/libraries/dep_cap_refresh_2026_08.md ```
-
πŸ“‹ PyAutoArray Delaunay interpolator's pure_callback vs vmap β€” minor efficiency follow-up β€” autoarray Β· too-large Β· supervised Β· low +
πŸ“‹ PyAutoMemory canonical-key TODO sweep β€” pyautomemory Β· medium Β· supervised Β· normal ``` -/start_dev draft/research/autoarray/delaunay_interpolator_pure_callback_vmap_memory.md +/start_dev draft/maintenance/pyautomemory/canonical_key_todo_sweep.md ```
-
πŸ“‹ Cluster-scale gradient-search benchmark (Prodigy vs Nautilus, point-source) β€” autolens_profiling +
πŸ“‹ Capped smoke datasets were committed as if they were real β€” workspaces Β· medium Β· supervised Β· normal ``` -/start_dev draft/research/autolens_profiling/cluster_gradient_search_benchmark.md +/start_dev draft/maintenance/workspaces/committed_capped_smoke_datasets.md ```
+
πŸ“‹ autolens_profiling is now a mature project, with a good separation β€” autolens_profiling Β· large Β· supervised Β· normal + +``` +/start_dev draft/maintenance/autolens_profiling/polish.md +``` +
-
-maintenance β€” 21 +
πŸ“‹ Auto-request GitHub Copilot code review on every PR, org-wide β€” ci Β· large Β· supervised Β· normal -
πŸ“‹ Untrack the generated FITS test artifacts in autoarray β€” libraries Β· small Β· supervised Β· medium +``` +/start_dev draft/maintenance/ci/copilot_auto_review.md +``` + +
+ +
πŸ“‹ autolens_workspace β€” workspaces Β· too-large Β· supervised Β· normal ``` -/start_dev draft/maintenance/libraries/untrack_generated_fits_test_artifacts.md +/start_dev draft/maintenance/workspaces/read_through_issues.md ```
-
πŸ“‹ smoke_install.sh's stale jax<0.7 pin β€” CI is on the right jax… β€” ci Β· low Β· supervised Β· medium +
πŸ“‹ pynufft removal: unswept downstream residue (1 hard break + stale docs/CI) β€” workspaces Β· low-medium Β· supervised Β· normal ``` -/start_dev draft/maintenance/ci/smoke_install_stale_jax_pin.md +/start_dev draft/maintenance/workspaces/pynufft_removal_downstream_residue.md ```
-
πŸ“‹ autolens_workspace_developer rectangular experiments β€” Gut stash + rename β€” autolens_workspace_developer Β· small Β· supervised Β· normal +
πŸ“‹ Phase 3: stop installing pynufft in Hands/Heart CI and PyAutoCTI install docs β€” workspaces Β· low Β· supervised Β· normal ``` -/start_dev draft/maintenance/autolens_workspace_developer/rectangular_experiments_gut_stash.md +/start_dev draft/maintenance/workspaces/pynufft_removal_downstream_residue_phase_3_ci_install_docs.md ```
-
πŸ“‹ Defer the eager scipy.sparse import in derivative_util (~0.10 s of import) β€” libraries Β· small Β· safe Β· normal +
πŸ“‹ dataset/imaging/jwst_lw is untracked because the gitignore was never extended for it β€” autolens_profiling Β· small Β· supervised Β· low ``` -/start_dev draft/maintenance/libraries/defer_scipy_sparse_import.md +/start_dev draft/maintenance/autolens_profiling/jwst_lw_untracked_gitignore_gap.md ```
-
πŸ“‹ Mirror drifted library config keys into the workspace configs β€” workspaces Β· small Β· supervised Β· normal +
πŸ“‹ cosmos_web_ring stores boolean masks as float64, wasting ~3.4 MB of the repo's… β€” autolens_workspace Β· small Β· supervised Β· low ``` -/start_dev draft/maintenance/workspaces/config_key_mirror_drift.md +/start_dev draft/maintenance/autolens_workspace/cosmos_web_ring_mask_dtype.md ```
-
πŸ“‹ Un-park imaging/features/scaling_relation/slam once PyAutoArray#431 merges β€” workspaces Β· small Β· supervised Β· normal +
πŸ“‹ The weekly smoke run's timings land in results-* under no discoverable name β€” pyautoheart Β· small Β· safe Β· low ``` -/start_dev draft/maintenance/workspaces/unpark_imaging_scaling_relation_slam.md +/start_dev draft/maintenance/pyautoheart/weekly_smoke_timings_artifact_naming.md ```
-
πŸ“‹ Un-park multi_galaxy/features/scaling_relation/slam once a capped run passes β€” workspaces Β· small Β· supervised Β· normal +
πŸ“‹ Regenerate setup_notebook-drifted notebooks in autogalaxy/autofit/HowToFit workspaces β€” workspaces Β· small Β· supervised Β· low ``` -/start_dev draft/maintenance/workspaces/unpark_multi_galaxy_scaling_relation_slam.md +/start_dev draft/maintenance/workspaces/notebook_setup_notebook_drift_siblings.md ```
-
πŸ“‹ autolens_workspace_developer: broad stale-API rot (56 symbols, no CI) β€” autolens_workspace_developer Β· medium Β· supervised Β· normal +
πŸ“‹ Refactor Agent witness map lacks PyAutoNerves test suite β€” pyautobrain Β· low Β· safe Β· low ``` -/start_dev draft/maintenance/autolens_workspace_developer/stale_api_rot_audit.md +/start_dev draft/maintenance/pyautobrain/refactor_witness_map_missing_autonerves.md ```
-
πŸ“‹ Dependency-cap refresh 2026-08: safe bumps, astropy 8 decision, two dead deps β€” libraries Β· medium Β· supervised Β· normal +
+ +
+research β€” 14 + +
πŸ“‹ Deep research: Can we speed up Delaunay in PyAutoArray? β€” autoarray Β· too-large Β· supervised Β· high ``` -/start_dev draft/maintenance/libraries/dep_cap_refresh_2026_08.md +/start_dev draft/research/autoarray/delaunay_research.md ```
-
πŸ“‹ PyAutoMemory canonical-key TODO sweep β€” pyautomemory Β· medium Β· supervised Β· normal +
πŸ“‹ Delaunay-family JAX modules never hit the persistent compilation cache β€” autoarray Β· medium Β· supervised Β· medium ``` -/start_dev draft/maintenance/pyautomemory/canonical_key_todo_sweep.md +/start_dev draft/research/autoarray/delaunay_callback_persistent_cache_miss.md ```
-
πŸ“‹ Capped smoke datasets were committed as if they were real β€” workspaces Β· medium Β· supervised Β· normal +
πŸ“‹ Quick-update plotting cost β€” minutes per update, and it is not JAX… β€” autolens Β· medium Β· supervised Β· medium ``` -/start_dev draft/maintenance/workspaces/committed_capped_smoke_datasets.md +/start_dev draft/research/autolens/quick_update_plotting_cost.md ```
-
πŸ“‹ autolens_profiling is now a mature project, with a good separation β€” autolens_profiling Β· large Β· supervised Β· normal +
πŸ“‹ Use readthedocs or migrate to GitHub docs β€” autobuild Β· small Β· supervised Β· normal ``` -/start_dev draft/maintenance/autolens_profiling/polish.md +/start_dev draft/research/autobuild/git_docs.md ```
-
πŸ“‹ Auto-request GitHub Copilot code review on every PR, org-wide β€” ci Β· large Β· supervised Β· normal +
πŸ“‹ Re-baseline the slacs0008 acceptance parity after the HAP-dedupe fix β€” pyautoreduce Β· small Β· supervised Β· normal ``` -/start_dev draft/maintenance/ci/copilot_auto_review.md +/start_dev draft/research/pyautoreduce/acceptance_noise_rebaseline.md ```
-
πŸ“‹ autolens_workspace β€” workspaces Β· too-large Β· supervised Β· normal +
πŸ“‹ Kernel-CDF bandwidth defaults β€” config-dependent quality, investigate adaptivity β€” autoarray Β· medium Β· supervised Β· normal ``` -/start_dev draft/maintenance/workspaces/read_through_issues.md +/start_dev draft/research/autoarray/rectangular_kernel_bandwidth_defaults.md ```
-
πŸ“‹ pynufft removal: unswept downstream residue (1 hard break + stale docs/CI) β€” workspaces Β· low-medium Β· supervised Β· normal +
πŸ“‹ We have lots of examples which profile how long JAX β€” autolens_workspace_developer Β· medium Β· supervised Β· normal ``` -/start_dev draft/maintenance/workspaces/pynufft_removal_downstream_residue.md +/start_dev draft/research/autolens_workspace_developer/jax_jit_profiling.md ```
-
πŸ“‹ Phase 3: stop installing pynufft in Hands/Heart CI and PyAutoCTI install docs β€” workspaces Β· low Β· supervised Β· normal +
πŸ“‹ Is Intel macOS a supported platform, and what is the numpy-only contract? β€” libraries Β· medium Β· supervised Β· normal ``` -/start_dev draft/maintenance/workspaces/pynufft_removal_downstream_residue_phase_3_ci_install_docs.md +/start_dev draft/research/libraries/intel_macos_support_policy.md ```
-
πŸ“‹ dataset/imaging/jwst_lw is untracked because the gitignore was never extended for it β€” autolens_profiling Β· small Β· supervised Β· low +
πŸ“‹ Checkerboard PSF-mismatch residual diagnostic β€” research + document + ingest papers β€” pyautomemory Β· medium Β· supervised Β· normal ``` -/start_dev draft/maintenance/autolens_profiling/jwst_lw_untracked_gitignore_gap.md +/start_dev draft/research/pyautomemory/checkerboard_psf_mismatch_residual_diagnostic.md ```
-
πŸ“‹ cosmos_web_ring stores boolean masks as float64, wasting ~3.4 MB of the repo's… β€” autolens_workspace Β· small Β· supervised Β· low +
πŸ“‹ autofit_profiling: bootstrap the repo + general PyAutoFit profiling epic β€” autofit Β· large Β· supervised Β· normal ``` -/start_dev draft/maintenance/autolens_workspace/cosmos_web_ring_mask_dtype.md +/start_dev draft/research/autofit/autofit_profiling_bootstrap.md ```
-
πŸ“‹ The weekly smoke run's timings land in results-* under no discoverable name β€” pyautoheart Β· small Β· safe Β· low +
πŸ“‹ Multi-band compile census completion β€” A100/multi-core + hetero GPU rows β€” autolens_profiling Β· small Β· supervised Β· low ``` -/start_dev draft/maintenance/pyautoheart/weekly_smoke_timings_artifact_naming.md +/start_dev draft/research/autolens_profiling/multiband_compile_census_completion.md ```
-
πŸ“‹ Regenerate setup_notebook-drifted notebooks in autogalaxy/autofit/HowToFit workspaces β€” workspaces Β· small Β· supervised Β· low +
πŸ“‹ Chase the ~6% flux scale between PyAutoReduce and legacy SLACS reductions β€” pyautoreduce Β· medium Β· supervised Β· low ``` -/start_dev draft/maintenance/workspaces/notebook_setup_notebook_drift_siblings.md +/start_dev draft/research/pyautoreduce/legacy_flux_scale_parity.md ```
-
πŸ“‹ Refactor Agent witness map lacks PyAutoNerves test suite β€” pyautobrain Β· low Β· safe Β· low +
πŸ“‹ PyAutoArray Delaunay interpolator's pure_callback vs vmap β€” minor efficiency follow-up β€” autoarray Β· too-large Β· supervised Β· low ``` -/start_dev draft/maintenance/pyautobrain/refactor_witness_map_missing_autonerves.md +/start_dev draft/research/autoarray/delaunay_interpolator_pure_callback_vmap_memory.md +``` + +
+ +
πŸ“‹ Cluster-scale gradient-search benchmark (Prodigy vs Nautilus, point-source) β€” autolens_profiling + +``` +/start_dev draft/research/autolens_profiling/cluster_gradient_search_benchmark.md ```
@@ -1234,21 +1258,24 @@ The 50 newest things to happen to the work in hand, newest first β€” issued, par | Date | Event | Task | |------|-------|------| +| 2026-08-24 | filed | wiki-currency's --check-version gate rots on every library main merge | | 2026-08-24 | filed | interferometer/jax_grad/gradient.py: eager and jitted likelihoods… | +| 2026-08-24 | filed | autocti_workspace has no Navigator Check, so its CI can never roll… | | 2026-08-24 | filed | Un-park multi_galaxy/features/scaling_relation/slam once a capped run… | | 2026-08-24 | filed | The weekly smoke run's timings land in results-* under no… | +| 2026-08-24 | filed | Heart's local smoke runner cannot run any CTI workspace β€” no autocti… | | 2026-08-23 | filed | pynufft removal: unswept downstream residue (1 hard break + stale… | | 2026-08-23 | filed | Phase 3: stop installing pynufft in Hands/Heart CI and PyAutoCTI… | | 2026-08-23 | filed | Brain board follow-ups: what real mornings surface | | 2026-08-22 | filed | smoke_install.sh's stale jax<0.7 pin β€” CI is on the right jax… | -| 2026-08-22 | filed | Untrack the generated FITS test artifacts in autoarray | -| 2026-08-22 | filed | The reconstruction noise map describes a different estimator than the… | -| 2026-08-22 | filed | Point-source JSON datasets record no resolution regime |
… 10 more (40 left) | Date | Event | Task | |------|-------|------| +| 2026-08-22 | filed | Untrack the generated FITS test artifacts in autoarray | +| 2026-08-22 | filed | The reconstruction noise map describes a different estimator than the… | +| 2026-08-22 | filed | Point-source JSON datasets record no resolution regime | | 2026-08-22 | filed | Is Intel macOS a supported platform, and what is the numpy-only… | | 2026-08-22 | filed | Defer the eager scipy.sparse import in derivative_util (~0.10 s of… | | 2026-08-22 | filed | Bug: fix the tracer.fits existence guard in autolens_workspace… | @@ -1256,14 +1283,14 @@ The 50 newest things to happen to the work in hand, newest first β€” issued, par | 2026-08-20 | filed | Numba CPU likelihood phase 2: kernel-CDF numba fast path (the 49-88%… | | 2026-08-20 | filed | Numba CPU likelihood phase 1: batched MGE convolution +… | | 2026-08-19 | filed | status.sh --repos sources a file that no longer exists | -| 2026-08-19 | filed | jax 0.11 breaks beta/gamma message log_partition under jit… | -| 2026-08-19 | filed | autolens_workspace_test jax_likelihood pins: 4 scripts fail smoke on… | -| 2026-08-19 | filed | autofit_profiling: bootstrap the repo + general PyAutoFit profiling… |
… 10 more (30 left) | Date | Event | Task | |------|-------|------| +| 2026-08-19 | filed | jax 0.11 breaks beta/gamma message log_partition under jit… | +| 2026-08-19 | filed | autolens_workspace_test jax_likelihood pins: 4 scripts fail smoke on… | +| 2026-08-19 | filed | autofit_profiling: bootstrap the repo + general PyAutoFit profiling… | | 2026-08-19 | filed | autoreduce 0.9 on PyPI never got the Python 3.12 floor | | 2026-08-19 | issued | @PyAutoFit TransformedMessage.factor_gradient crashes on first… | | 2026-08-19 | filed | Release board: local run_logs enrichment | @@ -1271,14 +1298,14 @@ The 50 newest things to happen to the work in hand, newest first β€” issued, par | 2026-08-19 | filed | RTD organism docs currency: Nerves page, organ-count drift, hands.md… | | 2026-08-19 | filed | PyAutoConf rename leftovers in Brain functional surfaces | | 2026-08-19 | filed | Deduplicate repos_sync.py's check/write pairs | -| 2026-08-19 | filed | Bug in autocti_workspace: the dataset_1d results/database example… | -| 2026-08-18 | parked | single-source-density-design | -| 2026-08-18 | parked | prior-message-collapse-design |
… 10 more (20 left) | Date | Event | Task | |------|-------|------| +| 2026-08-19 | filed | Bug in autocti_workspace: the dataset_1d results/database example… | +| 2026-08-18 | parked | single-source-density-design | +| 2026-08-18 | parked | prior-message-collapse-design | | 2026-08-18 | filed | @PyAutoFit TransformedMessage.logpdf/pdf omit the transform… | | 2026-08-17 | filed | Which other searches need prior-support handling β€” coverage audit… | | 2026-08-17 | filed | Teach repos_sync --write to stamp organ config surfaces | @@ -1286,14 +1313,14 @@ The 50 newest things to happen to the work in hand, newest first β€” issued, par | 2026-08-14 | filed | Three jax_likelihood pins are stale by ~1.24e-4 and fail the smoke… | | 2026-08-09 | found | isothermal-ell-sph-oversampling-at-the-cusp | | 2026-08-08 | parked | pyautoreduce-slacs1430-acs-comparison | -| 2026-08-08 | filed | Regenerate autolens_workspace markdown/ so the MGE pages show… | -| 2026-08-07 | filed | autofit.plot functions accept **kwargs and silently discard them | -| 2026-08-07 | filed | Regenerate setup_notebook-drifted notebooks in… |
… 10 more (10 left) | Date | Event | Task | |------|-------|------| +| 2026-08-08 | filed | Regenerate autolens_workspace markdown/ so the MGE pages show… | +| 2026-08-07 | filed | autofit.plot functions accept **kwargs and silently discard them | +| 2026-08-07 | filed | Regenerate setup_notebook-drifted notebooks in… | | 2026-08-06 | filed | Triage: Convolver "No blurring_image provided" warning in canonical… | | 2026-08-06 | filed | Rewrite PyAutoCTI docs/api β€” 55 of 89 autosummary entries are dead | | 2026-08-06 | filed | Dependency-cap refresh 2026-08: safe bumps, astropy 8 decision, two… | @@ -1301,9 +1328,6 @@ The 50 newest things to happen to the work in hand, newest first β€” issued, par | 2026-08-04 | filed | dataset/imaging/jwst_lw is untracked because the gitignore was never… | | 2026-08-04 | filed | cosmos_web_ring stores boolean masks as float64, wasting ~3.4 MB of… | | 2026-08-04 | filed | autolens_workspace_developer: broad stale-API rot (56 symbols, no CI) | -| 2026-08-04 | filed | aplt.Output stale-API drift in the remaining workspace repos | -| 2026-08-04 | filed | Nightly release has been blocked 8 nights running β€” triage the streak | -| 2026-08-04 | filed | HowToLens ch4 tutorial 3: mask overlay is never actually drawn |
diff --git a/draft/maintenance/ci/autocti_workspace_navigator_check.md b/draft/maintenance/ci/autocti_workspace_navigator_check.md new file mode 100644 index 00000000..7c29cb31 --- /dev/null +++ b/draft/maintenance/ci/autocti_workspace_navigator_check.md @@ -0,0 +1,81 @@ +# autocti_workspace has no Navigator Check, so its CI can never roll up green + +Type: maintenance +Target: autocti_workspace +Repos: +- @autocti_workspace +- @PyAutoHeart +Difficulty: medium +Autonomy: supervised +Priority: high +Status: formalised +Filed: 2026-08-24 + +`PyAutoHeart/config/repos.yaml` lists `autocti_workspace` in the `workspaces` +group, whose required workflows are: + +```yaml +required_workflows: + workspaces: ["Smoke Tests", "Navigator Check"] # smoke_tests.yml + navigator_check.yml +``` + +`Smoke Tests` now exists (autocti_workspace#27/#28, 2026-08-24 β€” the repo's first +CI). **`Navigator Check` does not.** That is not cosmetic. + +## Why this blocks readiness, not just tidiness + +`heart/checks/ci_status.py` rolls a repo up over its *required* workflows. A +required workflow with **no runs at all** is not scored as a failure β€” it simply +never satisfies `all_green`. Verified directly against the real function: + +``` +required for `workspaces`: ['Smoke Tests', 'Navigator Check'] + +Smoke green, Navigator MISSING -> {'conclusion': '', 'status': 'in_progress'} +both green -> {'conclusion': 'success', 'status': 'completed'} +smoke red, Navigator MISSING -> {'conclusion': 'failure', 'status': 'completed'} +``` + +So `autocti_workspace` rolls up as **permanently `in_progress`** β€” never green, +never red. It cannot reach `conclusion: success` no matter how healthy it is, +which means the readiness/release gate can never see this repo as CI-clean. +Adding Smoke Tests was necessary but not sufficient. + +Note the asymmetry in that table: a *red* Smoke Tests still reports failure +correctly. So the repo can go red but can never go green β€” the worst shape for a +gate to be in. + +## Work + +1. **Find out what `Navigator Check` actually is.** It is not a Heart reusable + workflow β€” `PyAutoHeart/.github/workflows/` has no `navigator_check.yml`; the + name appears only in `config/repos.yaml` and `heart/checks/ci_status.py`. + Each workspace owns its own `.github/workflows/navigator_check.yml`. Read a + sibling that has one (`autolens_workspace`, `autogalaxy_workspace`, + `autofit_workspace`, or a `HowTo*` repo) and mirror it. Do **not** invent a + check from the name. +2. **Add it to `autocti_workspace`**, adapted to this repo's actual navigator + surface. autocti_workspace has root-level catalogue files the assistant's + citation checks already lean on (`llms.txt`, `llms-full.txt`, + `workspace_index.json` are sparse-checked out by + `autocti_assistant/.github/workflows/wiki-currency.yml`), so there is a real + navigator surface here to validate. +3. **Confirm the roll-up flips to `success`** once both workflows are green on + `main` HEAD β€” that is the actual acceptance criterion, not "the workflow + passes". +4. **Consider the general case.** If other repos in a required group are missing + a required workflow, they have the same silent-never-green defect. A Heart-side + drift check ("every repo in a required group has a workflow file for each of + its required workflows") would catch this class rather than this instance. + Raise it as a proposal with findings; do not widen this task unilaterally. + +## Why it was left out of the smoke task + +autocti_workspace#28 was scoped to the ordered-trap smoke coverage (CTI epic +Phase 5). Adding a second, unrelated workflow would have widened that PR beyond +its task. Filed here instead, deliberately. + +## Context + +`PyAutoMind/complete/2026/08/phase5-smoke-ordered-trap-scripts.md` β€” how the +repo got its first CI, and the `arcticpy: true` caller convention it uses. diff --git a/draft/maintenance/ci/heart_smoke_table_autocti.md b/draft/maintenance/ci/heart_smoke_table_autocti.md new file mode 100644 index 00000000..f86d104b --- /dev/null +++ b/draft/maintenance/ci/heart_smoke_table_autocti.md @@ -0,0 +1,106 @@ +# Heart's local smoke runner cannot run any CTI workspace β€” no autocti entry + +Type: maintenance +Target: pyautoheart +Repos: +- @PyAutoHeart +Difficulty: medium +Autonomy: supervised +Priority: normal +Status: formalised +Filed: 2026-08-24 + +`PyAutoHeart/heart/smoke.py` is the local smoke runner β€” "one isolated +environment per workspace, prepared from the workspace-owned installer", the +local mirror of what CI does. Which workspaces it can prepare is declared in +`config/repos.yaml` under the `smoke:` block, and **the CTI repos are absent +from it entirely**: + +```yaml +smoke: + import_names: + PyAutoNerves: autonerves + PyAutoFit: autofit + PyAutoArray: autoarray + PyAutoGalaxy: autogalaxy + PyAutoLens: autolens # <- no PyAutoCTI + workspaces: + autofit: {directory: autofit_workspace, chain: [...]} + autogalaxy: {...} + autolens: {...} + autolens_test: {directory: autolens_workspace_test, chain: [...]} + euclid: {...} + howtolens: {...} # <- no autocti, no autocti_test +``` + +So `pyauto-heart smoke autocti` cannot work, and neither can a local smoke run of +`autocti_workspace_test` β€” the only way to exercise CTI smoke is to push and let +CI do it. That is a slow loop for the repo group that has just acquired two smoke +suites. + +## Why it matters now + +As of 2026-08-24 there are **two** CTI smoke surfaces: + +- `autocti_workspace_test` β€” its long-standing suite (3 scripts, ~20 s). +- `autocti_workspace` β€” new as of autocti_workspace#28 (3 curated scripts, + ~132 s cold), the repo's first CI. + +Both run in CI through PyAutoHeart's reusable `smoke-tests.yml`. Neither can be +run through Heart's *local* runner, so the Brain/Heart local loop has a blind +spot exactly where new coverage just landed. + +## Work + +1. **Add `PyAutoCTI: autocti` to `smoke.import_names`.** The block's docstring + calls it "the repo -> import-package map the preflight proves", so the + preflight cannot currently prove a CTI environment at all. +2. **Add the two workspace entries** with the correct chain + (`[PyAutoNerves, PyAutoFit, PyAutoArray, PyAutoCTI]` β€” matching what both + repos' CI callers declare; autocti does **not** depend on autogalaxy/autolens): + ```yaml + autocti: {directory: autocti_workspace, chain: [PyAutoNerves, PyAutoFit, PyAutoArray, PyAutoCTI]} + autocti_test: {directory: autocti_workspace_test, chain: [PyAutoNerves, PyAutoFit, PyAutoArray, PyAutoCTI]} + ``` +3. **Handle arcticpy.** This is the real design question, and the reason this is + not a two-line config edit. `import autocti` hard-requires arcticpy, which is + not a pip dependency: source-only C++ sdist, needs `libgsl-dev` + a toolchain, + and its own requirements downgrade numpy below 2.0. In CI this is solved β€” + `PyAutoHeart/.github/actions/install-arcticpy` owns the canonical recipe and + the single `arcticpy==2.6` pin, and the workspace callers pass `arcticpy: true`. + A **composite action cannot be invoked from `heart/smoke.py`**, so the local + runner needs an equivalent. Decide deliberately between: + - factoring the recipe into a shell script that both the action and + `smoke.py` call (keeps one owner, adds a file); + - a small Python leg in `smoke.py` that mirrors it (risks the exact + divergence the action was created to end β€” the recipe had drifted into four + copies before 2026-08-24); + - a per-workspace `arcticpy: true` flag in the `smoke:` block that + `smoke.py` honours. + + **Whatever is chosen, there must remain exactly one place the recipe and the + `2.6` pin live.** Re-creating a second copy would undo PyAutoHeart#170. +4. **Verify by actually running it** β€” prepare a CTI environment through the + local runner and run both suites, not just "the config parses". + +## The recipe, for reference (verified 2026-08-24 by building it) + +```bash +sudo apt-get install -y libgsl-dev +pip install --upgrade pip setuptools wheel # BUILD deps: --no-build-isolation +pip install numpy cython # will not supply these +pip install scipy matplotlib # RUNTIME deps --no-deps suppresses +pip install arcticpy==2.6 --no-build-isolation --no-deps +python -c "import arcticpy; from importlib.metadata import version; print(version('arcticpy'))" +``` + +Two traps that cost time if rediscovered: `--no-deps` suppresses arcticpy's +*runtime* imports too (`arcticpy/read_noise.py` imports `scipy` **and** +`matplotlib`, and `__init__.py` imports it), and **arcticpy exposes no +`__version__` attribute** β€” `arcticpy.__version__` raises `AttributeError` on a +perfectly healthy install. + +## Context + +`PyAutoMind/complete/2026/08/arcticpy-install-standardisation.md` β€” why the +recipe has one owner and what breaks when it does not. diff --git a/draft/maintenance/ci/wiki_currency_check_version_gate.md b/draft/maintenance/ci/wiki_currency_check_version_gate.md new file mode 100644 index 00000000..2a365d12 --- /dev/null +++ b/draft/maintenance/ci/wiki_currency_check_version_gate.md @@ -0,0 +1,92 @@ +# wiki-currency's --check-version gate rots on every library main merge + +Type: maintenance +Target: autocti_assistant +Repos: +- @autocti_assistant +Difficulty: medium +Autonomy: supervised +Priority: normal +Status: formalised +Filed: 2026-08-24 + +`wiki-currency` went red on `autocti_assistant` main and was fixed on 2026-08-24 +by regenerating `wiki/core/api_audit_baseline.json` (autocti_assistant#24, PR +#23). That fix is correct but **temporary**: the same red will return, and the +reason is structural, not incidental. + +## The structural problem + +`--check-version` compares a hash of the **entire public API surface** of +`autonerves`, `autoarray`, `autofit`, `autocti` and `autocti.plot` against a +committed baseline. The assistant documents almost none of that surface. + +Measured at the time of the fix β€” the drift that turned the repo red was: + +``` +autoarray 120 -> 121 + InterpolatorDelaunayNN, validate - TransformerNUFFTPyNUFFT +autofit 149 -> 159 + AbstractClipper, AbstractScaler, ApproxUpdater, + ClipperNone, ClipperPriorBox, DynamicUpdater, + FactorUpdater, NSS, ScalerNone, ScalerPriorWidth, + SimplerUpdater + - database +``` + +**Not one of those 14 symbols is cited anywhere in `wiki/`, `skills/` or +`modes/`.** `--scope all` β€” which audits exactly the symbols the docs *do* cite +β€” reported "All cited symbols resolve cleanly. No drift detected." throughout. +`autonerves`, `autocti` and `autocti.plot` were byte-identical. + +So a check whose job is "are the docs current?" went red because eleven unrelated +sampler-clipper classes were exported from autofit. + +The workflow installs the stack from the libraries' **`main` source clones** (not +a release β€” see the note below), so the clock is every merge into autofit or +autoarray `main` that touches an `__init__` export. That is fast. The new +baseline should be expected to rot within weeks. + +A check that goes red on a schedule nobody controls, for reasons that never +affect the thing it gates, trains reviewers to ignore it β€” and this repo's PRs +already opened red for over a month. + +## The decision to make + +Two coherent options; **this task is to choose one deliberately and implement +it**, not to guess: + +1. **Gate `--check-version` on removals only.** A symbol *disappearing* can break + a doc; a symbol *appearing* cannot. Report additions as informational, fail + only on removals from the surface. Keeps a cheap tripwire for the case that + actually matters. Note this still would not have caught the real risk here β€” + `TransformerNUFFTPyNUFFT` and `database` were both removed and neither was + cited, so even removals produce false reds; consider gating on + *removals of cited symbols*, which is what `--scope all` already computes. +2. **Accept that `--scope all` subsumes it as a gate.** Demote `--check-version` + to informational (still printed, still useful context in the report), and let + `--scope all` be the thing that can fail the workflow. Simplest, and the + check it leaves is the one with a direct causal link to doc correctness. + +Option 2 is the leaner one and is probably right; option 1 is defensible if a +whole-surface tripwire is wanted for release-time invocations +(`workflow_call` with `stack_version` set), where the surface really is the +contract. Consider keeping the strict behaviour for the pinned-release path and +relaxing only the native PR/dispatch path. + +Whichever is chosen, the baseline-regeneration story should be documented in +`skills/ac_audit_skill_apis.md` so the next person hitting a red knows whether +regenerating is the right response or a papering-over. + +## Do not "fix" this by pinning to a released stack + +Already considered and rejected on 2026-08-24: autocti's PyPI release is the +pre-resurrection `2024.11.13.2`, so pinning would grade today's docs against an +API that predates the work they describe β€” vacuously green, worse than noisily +red. The workflow's own install-step comment says as much. + +## Context worth reading first + +`PyAutoMind/complete/2026/08/wiki-currency-baseline-drift.md` β€” the full +investigation, including the fact that the drift report used to print +`stack_version: latest released` when the native path actually builds from +`main` source clones. That mislabel is fixed, and the report now records each +source tree's short SHA, so a future red is diagnosable from the artifact alone.