From 042889fc7116c28b399f794bfa0f7949679328c9 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 11 Aug 2026 16:40:31 +0000 Subject: [PATCH 1/2] mind: link the task dashboard from the README and keep it fresh in CI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The dashboard existed but nothing pointed at it: not the README, not AGENTS.md, not REFERENCE.md. You had to already know the filename to find the one page that lists what there is to work on, which on a phone means it did not exist. It is now the first thing under the org banners, and a row in the "what lives here" table. Linking it makes staleness a real problem. Between its first commit and today the page was regenerated by hand 4 times while 33 commits touched `draft/` — fine while only the session that changed the backlog read it, misleading once the README sends people there. `dashboard_refresh.yml` follows lifecycle_drift.yml (#116): stale on a PR is an error the author fixes, stale on main is self-healed with a bot commit, because Mind pushes land on main from many concurrent sessions. The generation stamp is excluded from the drift check, so it never commits merely because the date rolled. Spawn: `dashboard.md` becomes EMPTY rather than DROP — README.md ships verbatim and now links it, so dropping it would hand every spawned org a broken front-page link. `dashboard_refresh.yml` is DROP under rule 9c: it checks out PyAutoBrain for the renderer, a sibling a fresh org does not have. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_0126JUwjCAuzCJZEs47ymHdT --- .github/workflows/dashboard_refresh.yml | 97 +++++ AGENTS.md | 5 + README.md | 6 + REFERENCE.md | 2 + dashboard.md | 486 ++++++++++++++---------- docs/pyautobrain/spawn_spec.md | 5 +- scripts/spawn.py | 13 +- tests/test_spawn_template_contract.py | 4 + 8 files changed, 415 insertions(+), 203 deletions(-) create mode 100644 .github/workflows/dashboard_refresh.yml diff --git a/.github/workflows/dashboard_refresh.yml b/.github/workflows/dashboard_refresh.yml new file mode 100644 index 00000000..79d28619 --- /dev/null +++ b/.github/workflows/dashboard_refresh.yml @@ -0,0 +1,97 @@ +name: Dashboard Refresh + +# Keeps the generated task page (`dashboard.md`, linked from the README) in +# step with the Mind it describes. The page is rendered by PyAutoBrain's intake +# conductor from `draft/`, `active/` and the registry files, so any push that +# files, issues, parks or ships a task makes it stale. +# +# It went stale before this workflow existed: between its first commit and +# 2026-08-11 the page was regenerated by hand 4 times while 33 commits touched +# `draft/`. A dashboard nobody trusts is worse than no dashboard, and a linked +# one is read by people who were not in the session that changed the backlog. +# +# Same shape as lifecycle_drift.yml (issue #116): on pull requests a stale page +# is an error the author fixes on the branch; on pushes to main it is SELF- +# HEALED with a bot commit, because Mind pushes land directly on main from many +# concurrent agent sessions and an alarm-only check would just email a human. +# +# The generation stamp is excluded from the drift comparison (`--check`), so a +# re-render on an unchanged Mind is not drift and this never commits daily. + +on: + push: + branches: [main] + paths: + - "draft/**" + - "active/**" + - "active.md" + - "parked.md" + - "planned.md" + - "dashboard.md" + pull_request: + paths: + - "draft/**" + - "active/**" + - "active.md" + - "parked.md" + - "planned.md" + - "dashboard.md" + workflow_dispatch: + +# contents: write is needed by the self-heal push on main; PR runs never push. +permissions: + contents: write + +jobs: + refresh: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + path: PyAutoMind + # The renderer lives with the intake conductor, not here — the Mind holds + # the state, the Brain reasons over it (ORGANISM.md). + - uses: actions/checkout@v4 + with: + repository: PyAutoLabs/PyAutoBrain + path: PyAutoBrain + - name: dashboard freshness (self-healing on push to main) + working-directory: PyAutoMind + run: | + BRAIN=../PyAutoBrain/agents/conductors/intake/_intake.py + if python3 "$BRAIN" --mind . dashboard --check; then + exit 0 + fi + if [ "${GITHUB_EVENT_NAME}" != "push" ]; then + echo "::error::dashboard.md is stale — run 'pyauto-brain intake --apply dashboard' on this branch and commit the result" + exit 1 + fi + echo "dashboard.md is stale on main — self-healing" + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + # Each attempt rebuilds on the current tip of main, so a concurrent + # push (the usual cause of a rejected push) never needs a rebase. + # The heal push uses the default GITHUB_TOKEN, which does not trigger + # workflow runs, so it cannot loop. + for attempt in 1 2 3; do + git fetch origin main + git reset --hard FETCH_HEAD + if python3 "$BRAIN" --mind . dashboard --check; then + echo "tip of main is already fresh (healed by a concurrent push)" + exit 0 + fi + python3 "$BRAIN" --mind . --apply dashboard + if ! python3 "$BRAIN" --mind . dashboard --check; then + echo "::error::'--apply dashboard' did not converge — renderer bug, repair by hand" + exit 1 + fi + git add dashboard.md + git commit -m "mind: self-heal stale dashboard.md" + if git push origin HEAD:main; then + echo "healed on attempt ${attempt}" + exit 0 + fi + echo "push rejected (attempt ${attempt}) — retrying on the new tip of main" + done + echo "::error::could not push the healed dashboard after 3 attempts" + exit 1 diff --git a/AGENTS.md b/AGENTS.md index cca34859..002aeaf4 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -48,6 +48,11 @@ For the full workflow narrative, conventions, and registry schemas, read input for `register_and_iterate --queue`), `ideas.md` (raw inbox swept by `$intake`, `/intake` in Claude). Mutate these only via the skills in `skills/` so commit messages stay consistent. + `dashboard.md` is the **generated** read-only view over all of it (the page + the README links): regenerate with `pyauto-brain intake --apply dashboard` + after any registry or `draft/` change you want reflected immediately — never + hand-edit it. `dashboard_refresh.yml` self-heals it on pushes to `main`, so a + missed regeneration is drift that fixes itself, not a broken page. `parked.md` holds tasks that were started or scoped but are not currently in flight (e.g. work parked in a stash, orphan worktrees); move back to `active.md` (or `planned.md` if re-scoping) when resuming. diff --git a/README.md b/README.md index 9d94b398..44dba77a 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,11 @@ 📖 **Full documentation → ** — the whole PyAutoScientist organism, including how to fork and run your own. +📋 **[Task dashboard → `dashboard.md`](dashboard.md)** — every task the Mind is +holding, on one page: what to pick up now, what is in flight, and the whole +backlog. Reads on a phone; regenerated from this repo, so it is never a +second copy of the truth. + The Mind of the PyAuto organism: every piece of work in the ecosystem starts here, as a markdown file describing what you want in plain English. An AI agent (or a human) picks the file up and turns it into a tracked GitHub @@ -19,6 +24,7 @@ What lives here: | File / folder | What it is | |---------------|------------| +| [`dashboard.md`](dashboard.md) | **generated** — every task on one page, to pick from | | `ideas.md` | raw incubating ideas, no structure required | | `draft///*.md` | scoped prompts, **not started** (`feature/`, `bug/`, `docs/`, …) | | `active/.md` | **issued** prompts — an open issue, in flight | diff --git a/REFERENCE.md b/REFERENCE.md index 0816961d..61a01a9c 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -134,6 +134,8 @@ over the registry without starting work: ``` PyAutoMind/ ├── README.md ← short front page +├── dashboard.md ← GENERATED task page (picks / in flight / parked / planned / backlog) +│ `pyauto-brain intake --apply dashboard`; CI self-heals it on main ├── REFERENCE.md ← this file (schemas + conventions) ├── .gitignore │ diff --git a/dashboard.md b/dashboard.md index bcd6d001..290e60cd 100644 --- a/dashboard.md +++ b/dashboard.md @@ -1,208 +1,296 @@ -# PyAutoMind backlog dashboard +# PyAutoMind task dashboard -**133** filed prompts in the backlog · **7** already dispatched to issues (`active/`). Backlog view only — organism health lives with the Heart (`/health`), not here. - -| Work-type | Prompts | -|-----------|--------:| -| bug | 39 | -| feature | 25 | -| maintenance | 21 | -| research | 18 | -| docs | 17 | -| refactor | 5 | -| test | 3 | -| triage | 3 | -| experiment | 1 | -| release | 1 | - -## bug (39) - -| Prompt | Target | Difficulty | Autonomy | Priority | -|--------|--------|------------|----------|----------| -| [PROBE: is Adapt's 4th-power coefficient dependence (double square) intentional?](draft/bug/autoarray/PROBE_adapt_double_square_coefficient.md) | autoarray | medium | supervised | normal | -| [ConstantZeroth regularization is broken twice over — dead code presenting](draft/bug/autoarray/constant_zeroth_broken_dead_code.md) | autoarray | small | supervised | normal | -| [`pixel_scales` given as an `int` (or `np.float64`) is never widened](draft/bug/autoarray/pixel_scales_int_not_widened_to_tuple.md) | autoarray | small | supervised | medium | -| [PyNUFFT dev extra is incompatible with current SciPy on Python](draft/bug/autoarray/pynufft_scipy_pinv2_dev_extra.md) | autoarray | small | supervised | normal | -| [EP: cure the hierarchical parent-scale collapse basin (and make F10](draft/bug/autofit/ep_hierarchical_scale_collapse_moment_match.md) | autofit | medium | supervised | high | -| [`autofit.plot` functions accept `**kwargs` and silently discard them](draft/bug/autofit/plot_functions_discard_kwargs.md) | autofit | small | supervised | normal | -| [TEST_MODE bypass crashes on ordered-parameter assertion ties](draft/bug/autofit/test_mode_bypass_ordered_assertion_ties.md) | autofit | small | supervised | normal | -| [python_matrix smoke fails: autofit_workspace searches/mle.py needs optax not in smoke](draft/bug/autofit_workspace/searches_mle_optax_smoke_dependency.md) | autofit_workspace | small | safe | normal | -| [`NFWTruncatedSph.potential_2d_from`: MGE potential fails `grad(psi)=alpha` self-consistency](draft/bug/autogalaxy/nfw_truncated_potential_accuracy.md) | autogalaxy | too-large | supervised | high | -| [interferometer Delaunay pixelization — non-PD FitException in test-mode bypass](draft/bug/autolens/interferometer_delaunay_nonpd_fitexception.md) | autolens | medium | supervised | normal | -| [interferometer/start_here.py OOM in nightly release-validation integrate leg](draft/bug/autolens/interferometer_release_leg_oom.md) | autolens | - | - | - | -| [JAX point-source smoke sentinel: point.py returns -1e99 instead of -83.38](draft/bug/autolens/jax_point_source_point_smoke_sentinel.md) | autolens | medium | supervised | normal | -| [JIT cache not hit in modeling_visualization delaunay/rectangular scripts](draft/bug/autolens/jit_cache_not_hit_modeling_visualization.md) | autolens | medium | supervised | normal | -| [Investigate eager `FitImaging.figure_of_merit` vs JIT/step-by-step divergence in rectangular pixelization](draft/bug/autolens/pixelization_eager_vs_jit_divergence.md) | autolens | too-large | supervised | high | -| [point.py JAX-vmap parity assert is non-deterministic under the smoke env](draft/bug/autolens/point_jax_vmap_parity_nondeterministic.md) | autolens | small | supervised | normal | -| [hpc/sync first-push race — parallel rsyncs before remote base dir](draft/bug/autolens_assistant/hpc_sync_first_push_race.md) | autolens_assistant | small | safe | normal | -| [Scripts derive geometry from a hardcoded pixel_scale while the dataset](draft/bug/autolens_workspace/script_local_pixel_scale_vs_dataset_pixel_scales.md) | autolens_workspace | small | supervised | normal | -| [jax_grad scripts fail assertions locally that PASS in CI](draft/bug/autolens_workspace_test/jax_grad_local_assertions_fail_but_pass_in_ci.md) | autolens_workspace_test | medium | supervised | medium | -| [`add_notebook_quotes` mistakes a code string literal's closing delimiter for a](draft/bug/hands/notebook_quotes_string_literal_closing_delimiter.md) | hands | small | safe | low | -| [Fix Autofit release sampler and database regressions](draft/bug/health_fixes/autofit_sampler_database.md) | health_fixes | too-large | supervised | high | -| [Fix release JAX runtime compatibility and likelihood parity](draft/bug/health_fixes/jax_runtime_and_parity.md) | health_fixes | too-large | supervised | high | -| [Fix JIT quick-update visualization output regressions](draft/bug/health_fixes/jit_visualization_outputs.md) | health_fixes | too-large | supervised | high | -| [Fix release-profile numerical inversion failures](draft/bug/health_fixes/numerical_inversion_failures.md) | health_fixes | too-large | supervised | high | -| [Resolve release-profile timeout scripts deliberately](draft/bug/health_fixes/release_timeout_policy.md) | health_fixes | too-large | supervised | normal | -| [Fix release result/sample parameter-path regressions](draft/bug/health_fixes/samples_parameter_paths.md) | health_fixes | too-large | supervised | high | -| [Audit HowTo tutorials for missing setup_notebook() line](draft/bug/howto/missing_setup_notebook_audit.md) | howto | small | safe | normal | -| [HowToGalaxy small API drifts: ellipse kwargs + plot_grid_lines (parked NEEDS_FIX)](draft/bug/howtogalaxy/small_api_drift_ellipse_and_plot_grid_lines.md) | howtogalaxy | small | supervised | normal | -| [`@PyAutoFit` Add property-based correctness tests for every `Prior` subclass](draft/bug/priors/09_prior_property_tests.md) | priors | large | supervised | normal | -| [`@PyAutoFit` `TransformedMessage` reversal convention is undocumented foot-gun](draft/bug/priors/11_transformed_message_semantics_doc.md) | priors | large | supervised | normal | -| [`@PyAutoFit` Refactor: each density should live in one place, not](draft/bug/priors/12_single_source_density_refactor.md) | priors | too-large | supervised | normal | -| [`@PyAutoFit` Refactor: collapse the `Prior` / `Message` two-layer hierarchy](draft/bug/priors/13_collapse_prior_and_message.md) | priors | too-large | supervised | normal | -| [`@PyAutoFit` Refactor: replace hand-rolled `AbstractDensityTransform` with `tfp.bijectors` / `numpyro.distributions.transforms`](draft/bug/priors/14_replace_transform_stack_with_bijectors.md) | priors | too-large | supervised | normal | -| [Priors & Messages cleanup — tracker](draft/bug/priors/z_features.md) | priors | too-large | supervised | normal | -| [Release does not sync __version__ stamps and workspace pins back](draft/bug/pyautobuild/release_version_sync_back_to_main.md) | pyautobuild | medium | supervised | high | -| [`generate.py` deletes notebooks/ before rejecting an unknown project](draft/bug/pyautohands/generate_rejects_autocti_after_deleting_notebooks.md) | pyautohands | small | supervised | normal | -| [pre_build stages untracked files, publishing uncommitted human work](draft/bug/pyautohands/pre_build_stages_untracked_wip.md) | pyautohands | small | supervised | high | -| [Heart script_timing baselines are orphaned by path moves and filled](draft/bug/pyautoheart/script_timing_baselines_orphaned_and_window_filled.md) | pyautoheart | small | supervised | medium | -| [Tenant firewall: release_run.py carries an unlisted 'PyAutoLabs' instance fact](draft/bug/pyautoheart/tenant_firewall_release_run_instance_fact.md) | pyautoheart | small | safe | normal | -| [`aplt.Output` stale-API drift in the remaining workspace repos](draft/bug/workspaces/aplt_output_drift_remaining_repos.md) | workspaces | small | supervised | normal | - -## feature (25) - -| Prompt | Target | Difficulty | Autonomy | Priority | -|--------|--------|------------|----------|----------| -| [Claude Development Prompt: Arcsecond Tick Label Decimal Placement](draft/feature/autoarray/arcsecond_to_decimal.md) | autoarray | large | supervised | normal | -| [Can create a list of InversionMatrix objects for each dataset](draft/feature/autoarray/multiwavelength_inversion.md) | autoarray | medium | supervised | normal | -| [Follow-up to `rectangular_adapt_cdf.md` (issue #322) and Path A](draft/feature/autoarray/rectangular_multi_submesh.md) | autoarray | too-large | supervised | normal | -| [EP analytic updates — implement the four planned work packages](draft/feature/autofit/ep_analytic_updates.md) | autofit | large | supervised | normal | -| [The project @z_projects/ic50_workspace is our IC50 use case which we](draft/feature/autofit/ep_lbfgs_jax.md) | autofit | medium | safe | normal | -| [Give PyAutoFit searches a `seed` — today no search can](draft/feature/autofit/search_seed_reproducibility.md) | autofit | medium | supervised | medium | -| [Remote-MCP deployment tiers (2 + 3) for the results-inspector server](draft/feature/autofit_assistant/remote_mcp_deployment_tiers.md) | autofit_assistant | large | human-required | normal | -| [dPIE: optional central-dispersion (sigma_0) parameterization](draft/feature/autogalaxy/dpie_sigma0_parameterization.md) | autogalaxy | small | supervised | low | -| [`PIEMass.potential_2d_from`: implement the missing lensing potential](draft/feature/autogalaxy/piemass_potential.md) | autogalaxy | too-large | supervised | normal | -| [autolens_jax_joss benchmark repo + real-data start_here pairing](draft/feature/autolens_jax_joss/autolens_jax_joss_benchmark_repo.md) | autolens_jax_joss | too-large | supervised | normal | -| [Profile and speed up JAX likelihood-function compile times (all use](draft/feature/autolens_profiling/jax_compile_time_profiling.md) | autolens_profiling | large | supervised | high | -| [Search settings-estimation + profiling infrastructure (n_starts / batch_size / n_batch)](draft/feature/autolens_profiling/search_settings_estimation_infrastructure.md) | autolens_profiling | large | supervised | normal | -| [Tune cluster-scale JOSS benchmarks toward their 5-minute targets](draft/feature/autolens_workspace/joss_cluster_benchmark_tuning.md) | autolens_workspace | medium | supervised | normal | -| [Adopt oversampled PSFs in the start-here dataset chain (option a)](draft/feature/autolens_workspace/oversampled_psf_dataset_adoption.md) | autolens_workspace | large | supervised | normal | -| [Scheduled runs — overnight queue passes with a morning report](draft/feature/autonomy/10_scheduled_runs.md) | autonomy | medium | supervised | low | -| [Context: PyAutoLens issue #542 follow-up (Gap 1, deferred during the](draft/feature/jax_substructure/5_prng_key_vmap_noise.md) | jax_substructure | too-large | supervised | normal | -| [Context: PyAutoLens issue #542 follow-up (Gap 2, deferred during the](draft/feature/jax_substructure/6_deflection_equivalence_test.md) | jax_substructure | too-large | supervised | normal | -| [Give the Profiling Agent a compile-time axis — the arc](draft/feature/profiling/profiling_agent_jax_compile_time_scope.md) | profiling | large | supervised | high | -| [Token-light wiki index over the complete/ archive](draft/feature/pyautomind/complete_archive_wiki.md) | pyautomind | medium | supervised | normal | -| [Make draft/ staleness detectable — `intake reconcile` measured, and the](draft/feature/pyautomind/draft_staleness_detection_signals.md) | pyautomind | medium | supervised | high | -| [LACosmic per-frame CR masking option + decouple PSF-star pass from](draft/feature/pyautoreduce/lacosmic_cr_option_and_star_pass_decoupling.md) | pyautoreduce | medium | supervised | high | -| [Gallery runner: add visualization_upper + decide the modeling_visualization_jit tier](draft/feature/workspaces/gallery_runner_missing_tiers.md) | workspaces | small | supervised | low | -| [The imaging `features/advanced/los_halos` example needs improving and padding out before](draft/feature/workspaces/group_los_halos.md) | workspaces | medium | safe | normal | -| [The imaging `features/advanced/subhalo/sensitivity` example needs improving and padding out before](draft/feature/workspaces/group_subhalo_sensitivity.md) | workspaces | medium | safe | normal | -| [Once https://github.com/PyAutoLabs/PyAutoLens/issues/480 is fixed (PointSolver](draft/feature/workspaces/restore_multiple_sources_lensing_of_lens.md) | workspaces | too-large | supervised | normal | - -## maintenance (21) - -| Prompt | Target | Difficulty | Autonomy | Priority | -|--------|--------|------------|----------|----------| -| [dataset/imaging/jwst_lw is untracked because the gitignore was never extended for](draft/maintenance/autolens_profiling/jwst_lw_untracked_gitignore_gap.md) | autolens_profiling | small | supervised | low | -| [autolens_profiling is now a mature project, with a good separation](draft/maintenance/autolens_profiling/polish.md) | autolens_profiling | large | supervised | normal | -| [cosmos_web_ring stores boolean masks as float64, wasting ~3.4 MB of](draft/maintenance/autolens_workspace/cosmos_web_ring_mask_dtype.md) | autolens_workspace | small | supervised | low | -| [LaTeX in non-raw docstrings emits SyntaxWarning: invalid escape sequence](draft/maintenance/autolens_workspace/latex_docstrings_invalid_escape_warnings.md) | autolens_workspace | small | supervised | low | -| [autolens_workspace_developer rectangular experiments — Gut stash + rename](draft/maintenance/autolens_workspace_developer/rectangular_experiments_gut_stash.md) | autolens_workspace_developer | small | supervised | normal | -| [autolens_workspace_developer: broad stale-API rot (56 symbols, no CI)](draft/maintenance/autolens_workspace_developer/stale_api_rot_audit.md) | autolens_workspace_developer | medium | supervised | normal | -| [Auto-request GitHub Copilot code review on every PR, org-wide](draft/maintenance/ci/copilot_auto_review.md) | ci | large | supervised | normal | -| [run_smoke.py: three runner variants across 10 repos, no sync mechanism](draft/maintenance/ci/run_smoke_copy_drift.md) | ci | medium | supervised | normal | -| [Dependency-cap refresh 2026-08: safe bumps, astropy 8 decision, two dead](draft/maintenance/libraries/dep_cap_refresh_2026_08.md) | libraries | medium | supervised | normal | -| [PyAutoNerves committed version stamp behind sibling consensus](draft/maintenance/libraries/nerves_version_stamp_behind_consensus.md) | libraries | small | safe | low | -| [PyAutoFit CLI-noise batch: unclosed search.log handler + four small warning](draft/maintenance/pyautofit/cli_noise_pyautofit_batch.md) | pyautofit | small | safe | normal | -| [PyAutoMemory canonical-key TODO sweep](draft/maintenance/pyautomemory/canonical_key_todo_sweep.md) | pyautomemory | medium | supervised | normal | -| [Single-source the "Never rewrite history" policy as a generated AGENTS.md](draft/maintenance/pyautomind/history_policy_generated_block.md) | pyautomind | medium | supervised | normal | -| [Silence the three autonerves-rooted CLI-noise sources (fits leak, pytest collection,](draft/maintenance/pyautonerves/cli_noise_autonerves_batch.md) | pyautonerves | small | safe | normal | -| [Capped smoke datasets were committed as if they were real](draft/maintenance/workspaces/committed_capped_smoke_datasets.md) | workspaces | medium | supervised | normal | -| [Mirror drifted library config keys into the workspace configs](draft/maintenance/workspaces/config_key_mirror_drift.md) | workspaces | small | supervised | normal | -| [Raw-string the LaTeX docstrings emitting SyntaxWarnings (HowToFit + HowToLens)](draft/maintenance/workspaces/latex_raw_string_docstrings.md) | workspaces | small | safe | low | -| [Regenerate setup_notebook-drifted notebooks in autogalaxy/autofit/HowToFit workspaces](draft/maintenance/workspaces/notebook_setup_notebook_drift_siblings.md) | workspaces | small | supervised | low | -| [autolens_workspace](draft/maintenance/workspaces/read_through_issues.md) | workspaces | too-large | supervised | normal | -| [Refresh the stale `.script_sizes.json` snapshot in @autolens_workspace](draft/maintenance/workspaces/script_sizes_snapshot_drift.md) | workspaces | small | safe | low | -| [Un-park imaging/features/scaling_relation/slam once PyAutoArray#431 merges](draft/maintenance/workspaces/unpark_imaging_scaling_relation_slam.md) | workspaces | small | supervised | normal | - -## research (18) - -| Prompt | Target | Difficulty | Autonomy | Priority | -|--------|--------|------------|----------|----------| -| [Delaunay-family JAX modules never hit the persistent compilation cache](draft/research/autoarray/delaunay_callback_persistent_cache_miss.md) | autoarray | medium | supervised | medium | -| [PyAutoArray Delaunay interpolator's `pure_callback` vs vmap — minor efficiency follow-up](draft/research/autoarray/delaunay_interpolator_pure_callback_vmap_memory.md) | autoarray | too-large | supervised | low | -| [Deep research: Can we speed up Delaunay in PyAutoArray?](draft/research/autoarray/delaunay_research.md) | autoarray | too-large | supervised | high | -| [Kernel-CDF bandwidth defaults — config-dependent quality, investigate adaptivity](draft/research/autoarray/rectangular_kernel_bandwidth_defaults.md) | autoarray | medium | supervised | normal | -| [Use readthedocs or migrate to GitHub docs](draft/research/autobuild/git_docs.md) | autobuild | small | supervised | normal | -| [Census of priors and messages — confirmed bugs + redesign](draft/research/autofit/priors_and_messages_math_audit.md) | autofit | too-large | supervised | high | -| [Quick-update plotting cost — minutes per update, and it is](draft/research/autolens/quick_update_plotting_cost.md) | autolens | medium | supervised | medium | -| [Cluster-scale gradient-search benchmark (Prodigy vs Nautilus, point-source)](draft/research/autolens_profiling/cluster_gradient_search_benchmark.md) | autolens_profiling | - | - | - | -| [Multi-band compile census completion — A100/multi-core + hetero GPU rows](draft/research/autolens_profiling/multiband_compile_census_completion.md) | autolens_profiling | small | supervised | low | -| [We have lots of examples which profile how long JAX](draft/research/autolens_workspace_developer/jax_jit_profiling.md) | autolens_workspace_developer | medium | supervised | normal | -| [Expectation Propagation Scale-Up — Scoping](draft/research/graphical_ep/ep_scoping.md) | graphical_ep | too-large | supervised | high | -| [Graphical Model Scale-Up — Scoping](draft/research/graphical_ep/graphical_scoping.md) | graphical_ep | too-large | supervised | high | -| [slope_hierarchy: methods write-up (NUTS headline, EP cautionary)](draft/research/graphical_ep/slope_hierarchy_methods_writeup.md) | graphical_ep | medium | supervised | normal | -| [slope_hierarchy: scale the hierarchical slope recovery to N=25–50](draft/research/graphical_ep/slope_hierarchy_n25_scale_up.md) | graphical_ep | medium | supervised | normal | -| [Adopt Python 3.12 as the PyAuto ecosystem minimum](draft/research/libraries/python_312_minimum.md) | libraries | - | - | - | -| [Checkerboard PSF-mismatch residual diagnostic — research + document + ingest](draft/research/pyautomemory/checkerboard_psf_mismatch_residual_diagnostic.md) | pyautomemory | medium | supervised | normal | -| [Re-baseline the slacs0008 acceptance parity after the HAP-dedupe fix](draft/research/pyautoreduce/acceptance_noise_rebaseline.md) | pyautoreduce | small | supervised | normal | -| [Chase the ~6% flux scale between PyAutoReduce and legacy SLACS](draft/research/pyautoreduce/legacy_flux_scale_parity.md) | pyautoreduce | medium | supervised | low | - -## docs (17) - -| Prompt | Target | Difficulty | Autonomy | Priority | -|--------|--------|------------|----------|----------| -| [Rewrite PyAutoCTI docs/api — 55 of 89 autosummary entries are](draft/docs/autocti/api_rst_rewrite.md) | autocti | medium | supervised | normal | -| [PyAutoLens RTD docs: three-regime restructure (multi_galaxy / group / cluster)](draft/docs/autolens/docs_three_regime_restructure.md) | autolens | medium | supervised | high | -| [multi_galaxy package: new regime package in autolens_workspace](draft/docs/autolens/multi_galaxy_package.md) | autolens | large | supervised | high | -| [Split lensing regimes: multi_galaxy / group / cluster (epic plan)](draft/docs/autolens/split_lensing_regimes.md) | autolens | too-large | supervised | high | -| [Regenerate autolens_workspace markdown/ so the MGE pages show sigma_min](draft/docs/autolens_workspace/markdown_regeneration_sigma_min.md) | autolens_workspace | small | supervised | normal | -| [Phase 2 — drop the hand-written quick-update sentence from the](draft/docs/autolens_workspace/sampler_cli_output_workspace_sweep.md) | autolens_workspace | - | - | - | -| [HowToLens ch4 tutorial 3: mask overlay is never actually drawn](draft/docs/howtolens/ch4_mask_overlay_never_drawn.md) | howtolens | small | supervised | low | -| [Markdown renderings batch 2a — leftovers (ellipse/modeling + PNG size)](draft/docs/pyautobuild/markdown_renderings_2a_leftovers.md) | pyautobuild | small | safe | low | -| [add-vincken-2026-wiki-and-cite-in-euclid](draft/docs/workspaces/add_vincken_2026_wiki_and_cite_in_euclid.md) | workspaces | small | safe | normal | -| [Assistants: regime-aware routing for multi_galaxy / group / cluster (follow-up)](draft/docs/workspaces/assistants_regime_extension.md) | workspaces | medium | supervised | low | -| [Cluster package: point-source-default narrative + extended-source follow-up feature](draft/docs/workspaces/cluster_regime_narrative.md) | workspaces | medium | supervised | high | -| [extra_galaxies feature parity: point_source + multi_galaxy (both workspaces)](draft/docs/workspaces/extra_galaxies_feature_parity.md) | workspaces | medium | supervised | normal | -| [plot coverage — follow-ups deferred from plot-coverage-gaps](draft/docs/workspaces/plot_coverage_followups.md) | workspaces | - | - | - | -| [Advanced workspace guide: `Preloads` (PyAutoArray)](draft/docs/workspaces/preloads_advanced_workspace_guide.md) | workspaces | too-large | supervised | high | -| [Propagate the shear_galaxy-at-(0,0) idiom to group/ and cluster/](draft/docs/workspaces/propagate_shear_galaxy_idiom_to_group_cluster.md) | workspaces | small | supervised | normal | -| [Rectangular mesh Enzi citation — user-workspace pixelization examples](draft/docs/workspaces/rectangular_mesh_enzi_citation_examples.md) | workspaces | small | supervised | normal | -| [Phase 2: Make workspace READMEs assistant-first](draft/docs/workspaces/unify_ai_assistant_workspace_readmes.md) | workspaces | - | - | - | - -## refactor (5) - -| Prompt | Target | Difficulty | Autonomy | Priority | -|--------|--------|------------|----------|----------| -| [Vendor `bessel_kve` into autoarray and drop the tensorflow-probability dependency](draft/refactor/autoarray/matern_vendor_bessel_kve.md) | autoarray | large | supervised | medium | -| [Split `Fitness.batch_size` into `lh_batch_size` and `latent_batch_size`](draft/refactor/autofit/split_fitness_batch_size_lh_vs_latent.md) | autofit | small | supervised | normal | -| [`einstein_radius_jit_from`: replace static init_guess with a JAX-native seed finder](draft/refactor/autogalaxy/einstein_radius_jit_native_seed_finder.md) | autogalaxy | too-large | supervised | high | -| [Slow imports: autolens 4.3s, autogalaxy 3.4s (hygiene perf tier, >3s](draft/refactor/libraries/import_time_autolens_autogalaxy.md) | libraries | medium | supervised | normal | -| [Remove the dead EDEN packaging tooling from PyAutoFit](draft/refactor/pyautofit/remove_eden_packaging_tooling.md) | pyautofit | medium | supervised | normal | - -## test (3) - -| Prompt | Target | Difficulty | Autonomy | Priority | -|--------|--------|------------|----------|----------| -| [Re-baseline the MGE imaging JIT profiling regression value](draft/test/autolens_workspace_developer/mge_jit_regression_rebaseline.md) | autolens_workspace_developer | too-large | supervised | high | -| [Restore absolute NumPy likelihood regression baselines in the `_workspace_test`](draft/test/workspaces/restore_workspace_test_likelihood_baselines.md) | workspaces | too-large | supervised | high | -| [The new workspace smoke-test GitHub Actions (added via feature/smoke-test-ci) surfaced](draft/test/workspaces/smoke_workspace_fixes.md) | workspaces | too-large | supervised | normal | - -## triage (3) - -| Prompt | Target | Difficulty | Autonomy | Priority | -|--------|--------|------------|----------|----------| -| [Triage: Convolver "No blurring_image provided" warning in canonical workspace scripts](draft/triage/convolver_blurring_image_warning.md) | - | small | supervised | normal | -| [