diff --git a/.github/workflows/dashboard_refresh.yml b/.github/workflows/dashboard_refresh.yml new file mode 100644 index 00000000..6469ef60 --- /dev/null +++ b/.github/workflows/dashboard_refresh.yml @@ -0,0 +1,112 @@ +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 + # Exit 1 is drift and nothing else. Any other non-zero code means the + # renderer itself could not run — a Brain/Mind version skew, say — + # and reporting that as "the page is stale" sends whoever reads the + # log to fix the wrong file. (This PR's own first run: PyAutoBrain + # main had no `--check` yet, argparse exited 2, and the step blamed + # dashboard.md.) + check() { + local rc=0 + python3 "$BRAIN" --mind . dashboard --check || rc=$? + if [ "$rc" -gt 1 ]; then + echo "::error::the dashboard renderer exited ${rc} — that is not drift. Check that PyAutoBrain main still provides 'intake dashboard --check'." + exit 1 + fi + return "$rc" + } + if 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 check; then + echo "tip of main is already fresh (healed by a concurrent push)" + exit 0 + fi + python3 "$BRAIN" --mind . --apply dashboard + if ! 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 | -| [