From b3a7dd8937eb089e62f4f58b3d0917368a960a47 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 27 Aug 2026 17:10:54 +0000 Subject: [PATCH 1/5] =?UTF-8?q?prompt:=20retire=20autocti-workspace-naviga?= =?UTF-8?q?tor-check=20=E2=80=94=20shipped=202026-08-24,=20never=20recorde?= =?UTF-8?q?d?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit /start_dev on draft/maintenance/ci/autocti_workspace_navigator_check.md found the work already done: autocti_workspace#30 merged as 4b162ae on 2026-08-24 and issue #29 closed the same day. The prompt was never advanced out of draft/, so it kept rendering on the dashboard as pickable backlog. Retires it with a retrospective completion record built from the merged PR, the closed issue and its three comments: what landed, the untracked-catalogue trap (git diff --exit-code exits 0 on untracked paths, so the staleness job would have gone green while checking nothing), the roll-up acceptance criterion, and the 15-repo survey behind work item 4. Acceptance criterion re-verified against main HEAD ea3e424 (2026-08-27): Navigator Check and Smoke Tests both success on that sha, so rollup()'s on_head condition still holds and autocti_workspace reads conclusion: success. Work item 4 — a Heart-side "every repo in a required group has a workflow file for each required workflow" drift check — remains proposed but unfiled. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01KmWbYJw4cJJnt4eK6NoZjL --- .../08/autocti-workspace-navigator-check.md | 193 ++++++++++++++++++ complete/index.md | 3 +- dashboard.html | 25 ++- dashboard.md | 42 ++-- .../ci/autocti_workspace_navigator_check.md | 81 -------- 5 files changed, 224 insertions(+), 120 deletions(-) create mode 100644 complete/2026/08/autocti-workspace-navigator-check.md delete mode 100644 draft/maintenance/ci/autocti_workspace_navigator_check.md diff --git a/complete/2026/08/autocti-workspace-navigator-check.md b/complete/2026/08/autocti-workspace-navigator-check.md new file mode 100644 index 00000000..6861e191 --- /dev/null +++ b/complete/2026/08/autocti-workspace-navigator-check.md @@ -0,0 +1,193 @@ +- completed: 2026-08-24 +- issue: https://github.com/PyAutoLabs/autocti_workspace/issues/29 (closed 2026-08-24) +- prs: + - https://github.com/PyAutoLabs/autocti_workspace/pull/30 (merged, `4b162ae`) +- summary: | + `autocti_workspace` is in PyAutoHeart's `workspaces` group, whose + `required_workflows` are `["Smoke Tests", "Navigator Check"]`. Only the + former existed (added days earlier by #27/#28, the repo's first CI), and + `heart/checks/ci_status.rollup()` never satisfies `all_green` while a + required workflow has no runs — so the repo rolled up as permanently + `in_progress`: able to go red, never able to go green. This added the + missing `Navigator Check` and committed the catalogue it gates on. + +## What landed + +- `.github/workflows/navigator_check.yml` — a thin caller of PyAutoHands' + reusable `navigator_check.yml@main` with `project: autocti`, mirroring the + four sibling workspaces. +- `llms-full.txt` + `workspace_index.json` — the generated catalogue, 79 + scripts. +- 12 script docstrings: title underline `-----` → `=====`. +- `AGENTS.md` — a "Navigator catalogue (CI)" section. + +## Traps and findings + +**`Navigator Check` is a PyAutoHands reusable, not a Heart one.** Each workspace +owns a ~30-line thin caller of +`PyAutoLabs/PyAutoHands/.github/workflows/navigator_check.yml@main`, whose only +input is `project:`. The reusable runs three jobs: `check_navigator.py +--banners=fail` (paths + banner lint), `check_search_memory.py` (unbatched +multi-start guard), and a staleness job that regenerates the catalogue and then +`git diff --exit-code llms-full.txt workspace_index.json`. + +**The filing prompt's premise did not hold, and it was load-bearing.** The +prompt said the repo already had root-level catalogue files (`llms.txt`, +`llms-full.txt`, `workspace_index.json`). `git ls-files` found none of the +three — the line it drew that from, in `autocti_assistant`'s +`wiki-currency.yml`, is a comment about git's *cone-mode* behaviour, not an +assertion the files exist. That matters because `git diff --exit-code` on +**untracked** paths exits 0: the staleness job would have gone green while +checking nothing. Committing the generated pair is the substance of the fix, +not a side effect of it. + +**Twelve docstrings catalogued as a run of dashes.** The generator only treats a +line as a title underline when it is `=`, so twelve scripts whose underline was +`-----` catalogued with the dashes as their summary. Fixed one line per file, +line endings preserved (six of the twelve are CRLF). + +## Acceptance criterion — the roll-up, not the workflow + +The prompt was explicit that "the workflow passes" is not the criterion. Both +required workflows completed `success` on `main` HEAD `4b162ae` (Navigator Check +run 32778904395, Smoke Tests run 32778904379), and `rollup()` fed with the real +`workspaces` required list flipped: + +``` +BEFORE (Navigator Check had never run) -> {'conclusion': '', 'status': 'in_progress'} +AFTER (both green on 4b162ae) -> {'conclusion': 'success', 'status': 'completed'} +``` + +Re-verified on 2026-08-27 against the then-current `main` HEAD `ea3e424`: both +workflows `success` on that sha too, so `on_head` (the third of `rollup`'s three +per-workflow conditions, alongside `conclusion == "success"` and `status == +"completed"`) still holds. The repo can reach `conclusion: success`. + +## Work item 4 — the general case, surveyed not implemented + +The prompt asked for a proposal, not a widened task. All 15 repos in the four +groups carrying `required_workflows` were surveyed for "does a workflow file +exist whose `name:` matches each required entry": + +| group | required | missing a file | +|---|---|---| +| `libraries` | `Tests` | none (all carry `main.yml`) | +| `workspaces` | `Smoke Tests`, `Navigator Check` | **autocti_workspace** only | +| `workspaces_test` | `Smoke Tests` | none | +| `howto` | `Smoke Tests`, `Navigator Check` | none | + +So the class had exactly one instance, which #30 removed. It is still worth a +Heart-side drift check: the failure mode is silent by construction (a missing +gate reads as *pending*, indistinguishable from *a run is in flight*), and the +hole reopens on every edit to `repos.yaml` that adds a repo to a group or a +workflow to a group's required list. Suggested shape — a cheap static check in +the deep/on-demand tier (not the <30 s tick), matching on each workflow's parsed +`name:` field rather than its filename, and reporting a miss as a +**configuration** finding rather than red CI, since the repo's code is fine and +its gate is not wired up. Full survey: +https://github.com/PyAutoLabs/autocti_workspace/issues/29#issuecomment-5401319712 +**Not yet filed as a PyAutoMind prompt.** + +## Left for separate tasks + +- A hand-curated `llms.txt` (the siblings carry one; the generator never writes + it). +- 13 scripts that catalogue as `(no summary in script docstring)`. +- Notebook regeneration, blocked for this workspace entirely because `autocti` + is absent from `build_util.COLAB_PROJECTS`. + +## Mind-side note (why this record is late) + +The work shipped on 2026-08-24 but the prompt was never advanced out of +`draft/maintenance/ci/` — no `active.md` entry, no `active/` prompt, no record. +It therefore kept rendering on the dashboard as pickable backlog, and a +`/start_dev` run on 2026-08-27 picked it up before finding PR #30 already +merged. Nothing detects this class automatically (`lifecycle.py check` reported +OK throughout — a `draft/` prompt with no registry entry is a valid state); it +is the "shipped but never retired" drift `PyAutoMind/AGENTS.md` warns about. +This record is that retirement, written retrospectively from the merged PR, the +closed issue and its three comments. + +## Original prompt + +# 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/complete/index.md b/complete/index.md index 237a3b56..46077d79 100644 --- a/complete/index.md +++ b/complete/index.md @@ -6,7 +6,7 @@ Token-light navigation over the finished-work records (schema: only then grep a dated bucket. Curators: edit the band between the CURATED markers; everything below GENERATED is rebuilt. -1154 records across 7 buckets. +1155 records across 7 buckets. ## Highlights @@ -30,6 +30,7 @@ _(curate hard-won records here — survives regeneration.)_ - [autoarray-input-validation-guards](2026/08/autoarray-input-validation-guards.md) - [autoarray-pixel-scales-scalar-widening](2026/08/autoarray-pixel-scales-scalar-widening.md) - [autocti-util-dataset-export](2026/08/autocti-util-dataset-export.md) — no GitHub issue — worked directly from the draft prompt in a cloud session on explicit human instruction; the … +- [autocti-workspace-navigator-check](2026/08/autocti-workspace-navigator-check.md) - [autofit-mock-all-ones-ell-comps](2026/08/autofit-mock-all-ones-ell-comps.md) - [autofit-plot-functions-kwargs](2026/08/autofit-plot-functions-kwargs.md) - [autofit-sampler-database](2026/08/autofit-sampler-database.md) diff --git a/dashboard.html b/dashboard.html index ed2588ff..474dc953 100644 --- a/dashboard.html +++ b/dashboard.html @@ -204,7 +204,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-27. 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

- @@ -247,6 +246,7 @@

Highest priority (filed as high) — showing 12 of 17

einstein_radius_jit_from: replace static init_guess with a JAX-native seed finder♻️ refactorautogalaxytoo-largesupervisedhigh

Split lensing regimes: multi_galaxy / group / cluster (epic plan)📖 docsautolenstoo-largesupervisedhigh

Re-baseline the MGE imaging JIT profiling regression value🧪 testautolens_workspace_developertoo-largesupervisedhigh

+

Fix release JAX runtime compatibility and likelihood parity🐛 bughealth_fixestoo-largesupervisedhigh

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

(none right now)

In flight markdown version

@@ -269,7 +269,7 @@

Planned

latent-nan-guard-honest-run — planned 2026-07-22

Backlog markdown version

-

135 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.

+

134 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 — 28 @@ -319,8 +319,7 @@

Backlog

Cluster-scale gradient-search benchmark (Prodigy vs Nautilus, point-source)🔬 researchautolens_profiling

-maintenance — 22 - +maintenance — 21

Untrack the generated FITS test artifacts in autoarray🧹 maintenancelibrariessmallsupervisedmedium

autolens_workspace_developer rectangular experiments — Gut stash + rename🧹 maintenanceautolens_workspace_developersmallsupervisednormal

@@ -461,16 +460,10 @@

Backlog 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 Induct PyAutoReduce into the PyAutoHands release machinery (date… @@ -710,6 +703,12 @@

Backlog Un-park imaging/features/scaling_relation/slam — the PyAutoArray#431… + +2026-07-31 +filed +Quick-update plotting cost — minutes per update, and it is not JAX… + +

Epics markdown version

diff --git a/dashboard.md b/dashboard.md index 26688199..0f28ec48 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/`) | 135 | +| [Backlog](#backlog) (`draft/`) | 134 | ## Start here -**Highest priority** (filed as `high`) — showing 12 of 17 +**Highest priority** (filed as `high`) — showing 12 of 16
📋 TRIAGE: needs manual review before routing — medium · safe · high @@ -75,14 +75,6 @@ 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 ``` @@ -147,6 +139,14 @@ anything you could not verify.
+
📋 Fix release JAX runtime compatibility and likelihood parity — health_fixes · too-large · supervised · high + +``` +/start_dev draft/bug/health_fixes/jax_runtime_and_parity.md +``` + +
+ **Quick wins** (small enough, and safe enough to run unattended) - _(none right now)_ @@ -247,7 +247,7 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned. ## Backlog -**135** 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. +**134** 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 — 28 @@ -596,15 +596,7 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.
-maintenance — 22 - -
📋 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 -``` - -
+maintenance — 21
📋 Untrack the generated FITS test artifacts in autoarray — libraries · small · supervised · medium @@ -1188,14 +1180,13 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 2026-08-26 | filed | The Brain board should work in a session that has no gh | | 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 | Induct PyAutoReduce into the PyAutoHands release machinery (date… |
… 10 more (40 left) | Date | Event | Task | |------|-------|------| -| 2026-08-24 | filed | Induct PyAutoReduce into the PyAutoHands release machinery (date… | | 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… | @@ -1205,12 +1196,12 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 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-21 | filed | Rectangular mesh split: Bilinear (fast CPU default) vs RTU… |
… 10 more (30 left) | Date | Event | Task | |------|-------|------| -| 2026-08-21 | filed | Rectangular mesh split: Bilinear (fast CPU default) vs RTU… | | 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 | autofit_profiling: bootstrap the repo + general PyAutoFit profiling… | @@ -1220,12 +1211,12 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 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-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 | @@ -1235,12 +1226,12 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 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 | Regenerate setup_notebook-drifted notebooks in… | +| 2026-08-06 | filed | Triage: Convolver "No blurring_image provided" warning in canonical… |
… 10 more (10 left) | Date | Event | Task | |------|-------|------| -| 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… | | 2026-08-05 | filed | Give PyAutoFit searches a seed — today no search can be made… | @@ -1250,6 +1241,7 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 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 | | 2026-08-03 | filed | Un-park imaging/features/scaling_relation/slam — the PyAutoArray#431… | +| 2026-07-31 | filed | Quick-update plotting cost — minutes per update, and it is not JAX… |
diff --git a/draft/maintenance/ci/autocti_workspace_navigator_check.md b/draft/maintenance/ci/autocti_workspace_navigator_check.md deleted file mode 100644 index 7c29cb31..00000000 --- a/draft/maintenance/ci/autocti_workspace_navigator_check.md +++ /dev/null @@ -1,81 +0,0 @@ -# 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. From f8b433674bd1613b8accb10ee38f84eaae0dc31c Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 27 Aug 2026 17:18:37 +0000 Subject: [PATCH 2/5] intake: file the Heart required-workflow-file drift check (navigator-check work item 4) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The general case behind autocti_workspace#29/#30: heart/checks/ci_status.rollup() scores a repo over its group's required_workflows, and a required workflow with no runs is never scored as a failure — it just never satisfies all_green, so the repo sits at {"conclusion": "", "status": "in_progress"} forever. On the dashboard that is indistinguishable from a run in flight. The 2026-08-24 survey found autocti_workspace was the only instance across all 15 repos in the four required groups, and #30 removed it. The prompt is a guard against the hole reopening: every edit to config/repos.yaml that adds a repo to a group, or a workflow to a group's required list, silently makes repos un-greenable and produces no red anything. Corrects the original proposal on one point. It assumed a periodic Actions-API sweep or sibling checkouts; ci_status.sh already loops every polled repo in parallel making two cheap gh api metadata calls each, so a third (actions/workflows, the only call that tells "missing file" from "never ran") is the same shape and cost — measure it against the <30s tick before falling back to a deep tier. manifest_drift.py is the precedent for classifying it as a YELLOW configuration finding rather than red CI. Filed at draft/feature/pyautoheart/ rather than the intake router's suggested draft/feature/autocti/: the classifier read the autocti_workspace context references as the target, but the work is entirely in PyAutoHeart. Cross-referenced from the navigator-check completion record. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01KmWbYJw4cJJnt4eK6NoZjL --- .../08/autocti-workspace-navigator-check.md | 2 +- dashboard.html | 21 ++--- dashboard.md | 24 +++-- .../required_workflow_file_drift.md | 89 +++++++++++++++++++ 4 files changed, 117 insertions(+), 19 deletions(-) create mode 100644 draft/feature/pyautoheart/required_workflow_file_drift.md diff --git a/complete/2026/08/autocti-workspace-navigator-check.md b/complete/2026/08/autocti-workspace-navigator-check.md index 6861e191..9c4d9ed4 100644 --- a/complete/2026/08/autocti-workspace-navigator-check.md +++ b/complete/2026/08/autocti-workspace-navigator-check.md @@ -86,7 +86,7 @@ the deep/on-demand tier (not the <30 s tick), matching on each workflow's parsed **configuration** finding rather than red CI, since the repo's code is fine and its gate is not wired up. Full survey: https://github.com/PyAutoLabs/autocti_workspace/issues/29#issuecomment-5401319712 -**Not yet filed as a PyAutoMind prompt.** +Filed 2026-08-27 as `draft/feature/pyautoheart/required_workflow_file_drift.md`. ## Left for separate tasks diff --git a/dashboard.html b/dashboard.html index 474dc953..f9240cd1 100644 --- a/dashboard.html +++ b/dashboard.html @@ -204,7 +204,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.

-
  • 1In flight
  • 3Parked
  • 5Planned
  • 134Backlog
+
  • 1In flight
  • 3Parked
  • 5Planned
  • 135Backlog

Last updated 2026-08-27. 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.

latent-nan-guard-honest-run — planned 2026-07-22

Backlog markdown version

-

134 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.

+

135 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 — 28 +feature — 29 @@ -280,6 +280,7 @@

Backlog

Brain board follow-ups: what real mornings surface✨ featurepyautobrainsmallsupervisednormal

Can create a list of InversionMatrix objects for each dataset✨ featureautoarraymediumsupervisednormal

Tune cluster-scale JOSS benchmarks toward their 5-minute targets✨ featureautolens_workspacemediumsupervisednormal

+

Heart cannot see a required workflow that has no file…✨ featurepyautoheartmediumsupervisednormal

Token-light wiki index over the complete/ archive✨ featurepyautomindmediumsupervisednormal

@@ -430,6 +431,12 @@

Backlog 2026-08-27 filed +Heart cannot see a required workflow that has no file… + + + +2026-08-27 +filed Cross-validate multi-plane ray tracing @@ -463,7 +470,7 @@

Backlog Un-park multi_galaxy/features/scaling_relation/slam once a capped run… - + 2026-08-24 filed Induct PyAutoReduce into the PyAutoHands release machinery (date… @@ -703,12 +710,6 @@

Backlog Un-park imaging/features/scaling_relation/slam — the PyAutoArray#431… - -2026-07-31 -filed -Quick-update plotting cost — minutes per update, and it is not JAX… - -

Epics markdown version

diff --git a/dashboard.md b/dashboard.md index 0f28ec48..b6b77328 100644 --- a/dashboard.md +++ b/dashboard.md @@ -45,7 +45,7 @@ anything you could not verify. | [In flight](#in-flight) (`active/`) | 1 | | [Parked](#parked) (`parked.md`) | 3 | | [Planned](#planned) (`planned.md`) | 5 | -| [Backlog](#backlog) (`draft/`) | 134 | +| [Backlog](#backlog) (`draft/`) | 135 | ## Start here @@ -247,10 +247,10 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned. ## Backlog -**134** 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. +**135** 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 — 28 +feature — 29
📋 Numba CPU likelihood phase 1: batched MGE convolution + operated-matrix caching — autoarray · medium · supervised · high @@ -316,6 +316,14 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.
+
📋 Heart cannot see a required workflow that has no file… — pyautoheart · medium · supervised · normal + +``` +/start_dev draft/feature/pyautoheart/required_workflow_file_drift.md +``` + +
+
📋 Token-light wiki index over the complete/ archive — pyautomind · medium · supervised · normal ``` @@ -1175,18 +1183,19 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 2026-08-27 | filed | One construction path for plane-bound lensing quantities | | 2026-08-27 | filed | Multi-plane time delays | | 2026-08-27 | filed | LensCalc NumPy Hessian step is too coarse for multi-plane tracers | +| 2026-08-27 | filed | Heart cannot see a required workflow that has no file… | | 2026-08-27 | filed | Cross-validate multi-plane ray tracing | | 2026-08-26 | filed | jax_profiling/gradient/imaging/pixelization.py: 3.2% of its pin move… | | 2026-08-26 | filed | The Brain board should work in a session that has no gh | | 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 | Un-park multi_galaxy/features/scaling_relation/slam once a capped run… | -| 2026-08-24 | filed | Induct PyAutoReduce into the PyAutoHands release machinery (date… |
… 10 more (40 left) | Date | Event | Task | |------|-------|------| +| 2026-08-24 | filed | Induct PyAutoReduce into the PyAutoHands release machinery (date… | | 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… | @@ -1196,12 +1205,12 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 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-21 | filed | Rectangular mesh split: Bilinear (fast CPU default) vs RTU… |
… 10 more (30 left) | Date | Event | Task | |------|-------|------| +| 2026-08-21 | filed | Rectangular mesh split: Bilinear (fast CPU default) vs RTU… | | 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 | autofit_profiling: bootstrap the repo + general PyAutoFit profiling… | @@ -1211,12 +1220,12 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 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-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 | @@ -1226,12 +1235,12 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 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 | Regenerate setup_notebook-drifted notebooks in… | -| 2026-08-06 | filed | Triage: Convolver "No blurring_image provided" warning in canonical… |
… 10 more (10 left) | Date | Event | Task | |------|-------|------| +| 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… | | 2026-08-05 | filed | Give PyAutoFit searches a seed — today no search can be made… | @@ -1241,7 +1250,6 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 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 | | 2026-08-03 | filed | Un-park imaging/features/scaling_relation/slam — the PyAutoArray#431… | -| 2026-07-31 | filed | Quick-update plotting cost — minutes per update, and it is not JAX… |
diff --git a/draft/feature/pyautoheart/required_workflow_file_drift.md b/draft/feature/pyautoheart/required_workflow_file_drift.md new file mode 100644 index 00000000..1d6046da --- /dev/null +++ b/draft/feature/pyautoheart/required_workflow_file_drift.md @@ -0,0 +1,89 @@ +# Heart cannot see a required workflow that has no file — the silent never-green defect + +Type: feature +Target: pyautoheart +Repos: +- @PyAutoHeart +Difficulty: medium +Autonomy: supervised +Priority: normal +Status: formalised +Filed: 2026-08-27 + +`PyAutoHeart/config/repos.yaml` declares `required_workflows` per group, and +`heart/checks/ci_status.py`'s `rollup()` scores a repo over exactly those +workflows. A required workflow that has **no runs at all** is not scored as a +failure — it simply never satisfies `all_green`, so the repo sits at +`{"conclusion": "", "status": "in_progress"}` forever: able to go red, never +able to go green, and invisible to the readiness/release gate as CI-clean. + +That is indistinguishable, on the dashboard, from "a run is in flight". Nothing +anywhere says "this repo is missing a gate". + +This was found the hard way: `autocti_workspace` sat in that state from whenever +it was added to the `workspaces` group until 2026-08-24, when a human noticed the +asymmetry (a red Smoke Tests still reported failure correctly, so the repo could +go red but never green). Fixed for that instance by autocti_workspace#30; the +class was left as a proposal, deliberately, so the fix PR was not widened. This +is that proposal, filed. + +## Why it is worth a check even though the class is currently empty + +A survey of all 15 repos across the four groups carrying `required_workflows` +(run 2026-08-24, on the issue) found `autocti_workspace` was the **only** +instance, and #30 removed it. So this is not a bug hunt — it is a guard against +the hole reopening, which it does on every edit to `config/repos.yaml`: + +- adding a repo to a group silently makes it un-greenable until it carries a file + for each of that group's required workflows; +- adding a workflow to a group's `required_workflows` silently does the same to + **every** repo in the group at once. + +Both edits look harmless in review. Neither produces a red anything. + +## Shape + +A cheap per-repo assertion: for every repo in a group with `required_workflows`, +a workflow exists whose parsed `name:` field matches each required entry. Match +on `name:`, not the filename — `name:` is what `ci_status` matches against, so a +filename-based check could pass while the roll-up still starves. + +Two design notes, one of which corrects the original proposal: + +1. **It probably needs no new data source, and no sibling checkouts.** The + original proposal assumed either a periodic Actions-API sweep or a check that + runs where the workspace checkouts exist. But `heart/checks/ci_status.sh` + already loops every polled repo in parallel and makes two cheap `gh api` + metadata calls each (`actions/runs?branch=main`, `commits/main`). A third — + `GET /repos/{owner}/{repo}/actions/workflows`, which returns every workflow + file with its `name` — is the same shape and the same cost, and it is the + only call that can tell *missing file* from *file exists, has never run on + main*. Check whether that fits the <30 s tick budget before falling back to a + deep/on-demand tier; `ci_status.sh`'s own header argues the existing two calls + are cheap enough, so a third plausibly is too. +2. **A missing file is a configuration finding, not red CI.** The repo's code is + fine; its gate is not wired up. Colouring it red misattributes the fault. + `heart/checks/manifest_drift.py` is the precedent to mirror — a drift check + that classifies as YELLOW ("hygiene that will eventually break something, not + an immediate release blocker"), writes its own sidecar, and is consumed by + `readiness.py` as a caution rather than a gate. + +The `required_workflows` block in `config/repos.yaml` already carries each +group's filenames in a trailing comment (`# smoke_tests.yml + navigator_check.yml`), +which is a useful cross-check but not the matching key. + +## Acceptance + +- Adding a repo to a group whose required workflows it does not have produces a + named finding, not a silent `in_progress`. +- The finding distinguishes "no workflow file" from "workflow exists, no runs on + main HEAD yet" — the second is genuinely pending and must stay pending. +- A test in `PyAutoHeart/tests/` alongside `test_manifest_drift.py` / + `test_ci_status.py`. + +## Context + +- `PyAutoMind/complete/2026/08/autocti-workspace-navigator-check.md` — the + instance, and the roll-up table that shows the defect. +- https://github.com/PyAutoLabs/autocti_workspace/issues/29#issuecomment-5401319712 + — the original proposal and the full 15-repo survey. From 11f0898f1eea3a3a7405a62734fb08b94349feab Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 27 Aug 2026 17:29:57 +0000 Subject: [PATCH 3/5] prompt: issue + register required-workflow-file-drift (PyAutoHeart#188) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Advances the prompt filed earlier this session from draft/ to active/: issue PyAutoHeart#188 created, registered in active.md at status ready-to-ship with the pushed branch feature/required-workflow-file-drift, dashboard regenerated. The implementation landed in the same session — heart/checks/required_workflow_drift.py plus its wiring in state.py, tick.sh and readiness.py, 15 new tests, full Heart suite 656 passed. The branch is pushed with no PR opened. The entry records worktree: none — this ran in a remote web session, where PyAutoHeart is a flat clone rather than a ~/Code/PyAutoLabs-wt/ worktree, so a later session resuming this task should not go looking for one. Also repoints the navigator-check completion record's work-item-4 cross-link from the draft path to the issue, now that the prompt has moved. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01KmWbYJw4cJJnt4eK6NoZjL --- active.md | 19 ++++++++++++++ .../required_workflow_file_drift.md | 1 + .../08/autocti-workspace-navigator-check.md | 2 +- dashboard.html | 14 +++++----- dashboard.md | 26 +++++++++---------- 5 files changed, 41 insertions(+), 21 deletions(-) rename {draft/feature/pyautoheart => active}/required_workflow_file_drift.md (99%) diff --git a/active.md b/active.md index fb25a165..32d466cb 100644 --- a/active.md +++ b/active.md @@ -1,5 +1,24 @@ # Active Tasks +## required-workflow-file-drift +- issue: https://github.com/PyAutoLabs/PyAutoHeart/issues/188 +- issued: 2026-08-27 +- prompt: active/required_workflow_file_drift.md +- status: ready-to-ship +- worktree: none — remote web session; PyAutoHeart cloned flat at /home/user/pyautoheart +- repos: + - PyAutoHeart: feature/required-workflow-file-drift +- summary: | + Implemented and pushed in the same session that filed the prompt. + heart/checks/required_workflow_drift.py names a required workflow that has + no workflow file — the state ci_status.rollup() can only render as a + permanent `in_progress`, indistinguishable from a run in flight. Wired into + state.py, tick.sh and readiness.py (YELLOW per missing workflow; a stale + "unverified" reason when a repo's workflow list cannot be read, so a missing + gate cannot hide behind a 403). 15 new tests; full suite 656 passed; the + tenant-firewall gate verified clean with a canary. + Branch pushed, NO PR opened — awaiting the go-ahead. + ## transformed-message-factor-gradient-unpack - issue: https://github.com/PyAutoLabs/PyAutoFit/issues/1501 (issued 2026-08-19) - issued: 2026-08-19 diff --git a/draft/feature/pyautoheart/required_workflow_file_drift.md b/active/required_workflow_file_drift.md similarity index 99% rename from draft/feature/pyautoheart/required_workflow_file_drift.md rename to active/required_workflow_file_drift.md index 1d6046da..9ec7352a 100644 --- a/draft/feature/pyautoheart/required_workflow_file_drift.md +++ b/active/required_workflow_file_drift.md @@ -9,6 +9,7 @@ Autonomy: supervised Priority: normal Status: formalised Filed: 2026-08-27 +Issued: 2026-08-27 `PyAutoHeart/config/repos.yaml` declares `required_workflows` per group, and `heart/checks/ci_status.py`'s `rollup()` scores a repo over exactly those diff --git a/complete/2026/08/autocti-workspace-navigator-check.md b/complete/2026/08/autocti-workspace-navigator-check.md index 9c4d9ed4..289c4719 100644 --- a/complete/2026/08/autocti-workspace-navigator-check.md +++ b/complete/2026/08/autocti-workspace-navigator-check.md @@ -86,7 +86,7 @@ the deep/on-demand tier (not the <30 s tick), matching on each workflow's parsed **configuration** finding rather than red CI, since the repo's code is fine and its gate is not wired up. Full survey: https://github.com/PyAutoLabs/autocti_workspace/issues/29#issuecomment-5401319712 -Filed 2026-08-27 as `draft/feature/pyautoheart/required_workflow_file_drift.md`. +Filed and shipped 2026-08-27 as PyAutoHeart#188 — `active/required_workflow_file_drift.md`. ## Left for separate tasks diff --git a/dashboard.html b/dashboard.html index f9240cd1..ca452833 100644 --- a/dashboard.html +++ b/dashboard.html @@ -204,7 +204,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.

-
  • 1In flight
  • 3Parked
  • 5Planned
  • 135Backlog
+
  • 2In flight
  • 3Parked
  • 5Planned
  • 134Backlog

Last updated 2026-08-27. 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.

@PyAutoFit TransformedMessage.factor_gradient crashes on first callissue #1501 — issued 2026-08-19HOLD — do not start dev. Fix-or-delete hangs off the PyAutoFit#1498 logpdf-contract

+

Heart cannot see a required workflow that has no file…issue #188 — issued 2026-08-27ready-to-ship

Parked markdown version

3 task(s) @@ -269,9 +270,9 @@

Planned

latent-nan-guard-honest-run — planned 2026-07-22

Backlog markdown version

-

135 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.

+

134 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 — 29 +feature — 28 @@ -280,7 +281,6 @@

Backlog

Brain board follow-ups: what real mornings surface✨ featurepyautobrainsmallsupervisednormal

Can create a list of InversionMatrix objects for each dataset✨ featureautoarraymediumsupervisednormal

Tune cluster-scale JOSS benchmarks toward their 5-minute targets✨ featureautolens_workspacemediumsupervisednormal

-

Heart cannot see a required workflow that has no file…✨ featurepyautoheartmediumsupervisednormal

Token-light wiki index over the complete/ archive✨ featurepyautomindmediumsupervisednormal

@@ -430,9 +430,9 @@

Backlog 2026-08-27 -filed -Heart cannot see a required workflow that has no file… - +issued +Heart cannot see a required workflow that has no file… + 2026-08-27 diff --git a/dashboard.md b/dashboard.md index b6b77328..dcf9ceaf 100644 --- a/dashboard.md +++ b/dashboard.md @@ -42,10 +42,10 @@ anything you could not verify. | Where | Count | |-------|------:| -| [In flight](#in-flight) (`active/`) | 1 | +| [In flight](#in-flight) (`active/`) | 2 | | [Parked](#parked) (`parked.md`) | 3 | | [Planned](#planned) (`planned.md`) | 5 | -| [Backlog](#backlog) (`draft/`) | 135 | +| [Backlog](#backlog) (`draft/`) | 134 | ## Start here @@ -163,6 +163,14 @@ Issued — each has an open GitHub issue and usually a branch. The full record f

+
📋 Heart cannot see a required workflow that has no file…issue #188 — issued 2026-08-27 — ready-to-ship + +``` +/start_dev active/required_workflow_file_drift.md +``` + +
+ ## Parked Started or scoped, not currently in flight — resume by moving the row back to `active.md`. Full detail in [`parked.md`](parked.md). @@ -247,10 +255,10 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned. ## Backlog -**135** 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. +**134** 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 — 29 +feature — 28
📋 Numba CPU likelihood phase 1: batched MGE convolution + operated-matrix caching — autoarray · medium · supervised · high @@ -316,14 +324,6 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.
-
📋 Heart cannot see a required workflow that has no file… — pyautoheart · medium · supervised · normal - -``` -/start_dev draft/feature/pyautoheart/required_workflow_file_drift.md -``` - -
-
📋 Token-light wiki index over the complete/ archive — pyautomind · medium · supervised · normal ``` @@ -1183,7 +1183,7 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 2026-08-27 | filed | One construction path for plane-bound lensing quantities | | 2026-08-27 | filed | Multi-plane time delays | | 2026-08-27 | filed | LensCalc NumPy Hessian step is too coarse for multi-plane tracers | -| 2026-08-27 | filed | Heart cannot see a required workflow that has no file… | +| 2026-08-27 | issued | Heart cannot see a required workflow that has no file… | | 2026-08-27 | filed | Cross-validate multi-plane ray tracing | | 2026-08-26 | filed | jax_profiling/gradient/imaging/pixelization.py: 3.2% of its pin move… | | 2026-08-26 | filed | The Brain board should work in a session that has no gh | From 25d82e5ebbcd6089fa4dc03daea34ab16df3d639 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 27 Aug 2026 17:37:32 +0000 Subject: [PATCH 4/5] =?UTF-8?q?prompt:=20complete=20required-workflow-file?= =?UTF-8?q?-drift=20(#188)=20=E2=80=94=20PyAutoHeart#189=20MERGED?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Close-out for PyAutoHeart#188. PR #189 merged as 2a1391f with both Heart Tests legs green (pytest 3.12, 3.13); issue commented and closed. active/ -> complete/2026/08/required-workflow-file-drift.md, active.md section removed, complete/index.md and both dashboard pages regenerated. The record keeps three things worth re-reading before the next Heart change: the tenant firewall scans docstrings and test fixtures, not just code, so a module that recounts an incident by name reddens CI — name no instance fact rather than growing FIREWALL_ALLOWLIST; Heart's own gate reads YELLOW in a remote session purely from the environment (no gh, and add_repo's lowercase clone URL vs the body map's PyAutoHeart); and a --depth 1 clone is single-branch, so push -u leaves no origin/feature/* tracking ref and a local git-state check misreads a pushed branch as unpushed. Sweep found no stale references to the slug or prompt filename. Reconcile over draft/maintenance/ci flagged run_smoke_copy_drift.md, left standing: it is resemblance, not proof — this merge is entirely PyAutoHeart's required-workflow check and covers none of that prompt's smoke-runner scope. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01KmWbYJw4cJJnt4eK6NoZjL --- active.md | 19 -- active/required_workflow_file_drift.md | 90 ------ .../2026/08/required-workflow-file-drift.md | 291 ++++++++++++++++++ complete/index.md | 3 +- dashboard.html | 17 +- dashboard.md | 20 +- 6 files changed, 307 insertions(+), 133 deletions(-) delete mode 100644 active/required_workflow_file_drift.md create mode 100644 complete/2026/08/required-workflow-file-drift.md diff --git a/active.md b/active.md index 32d466cb..fb25a165 100644 --- a/active.md +++ b/active.md @@ -1,24 +1,5 @@ # Active Tasks -## required-workflow-file-drift -- issue: https://github.com/PyAutoLabs/PyAutoHeart/issues/188 -- issued: 2026-08-27 -- prompt: active/required_workflow_file_drift.md -- status: ready-to-ship -- worktree: none — remote web session; PyAutoHeart cloned flat at /home/user/pyautoheart -- repos: - - PyAutoHeart: feature/required-workflow-file-drift -- summary: | - Implemented and pushed in the same session that filed the prompt. - heart/checks/required_workflow_drift.py names a required workflow that has - no workflow file — the state ci_status.rollup() can only render as a - permanent `in_progress`, indistinguishable from a run in flight. Wired into - state.py, tick.sh and readiness.py (YELLOW per missing workflow; a stale - "unverified" reason when a repo's workflow list cannot be read, so a missing - gate cannot hide behind a 403). 15 new tests; full suite 656 passed; the - tenant-firewall gate verified clean with a canary. - Branch pushed, NO PR opened — awaiting the go-ahead. - ## transformed-message-factor-gradient-unpack - issue: https://github.com/PyAutoLabs/PyAutoFit/issues/1501 (issued 2026-08-19) - issued: 2026-08-19 diff --git a/active/required_workflow_file_drift.md b/active/required_workflow_file_drift.md deleted file mode 100644 index 9ec7352a..00000000 --- a/active/required_workflow_file_drift.md +++ /dev/null @@ -1,90 +0,0 @@ -# Heart cannot see a required workflow that has no file — the silent never-green defect - -Type: feature -Target: pyautoheart -Repos: -- @PyAutoHeart -Difficulty: medium -Autonomy: supervised -Priority: normal -Status: formalised -Filed: 2026-08-27 -Issued: 2026-08-27 - -`PyAutoHeart/config/repos.yaml` declares `required_workflows` per group, and -`heart/checks/ci_status.py`'s `rollup()` scores a repo over exactly those -workflows. A required workflow that has **no runs at all** is not scored as a -failure — it simply never satisfies `all_green`, so the repo sits at -`{"conclusion": "", "status": "in_progress"}` forever: able to go red, never -able to go green, and invisible to the readiness/release gate as CI-clean. - -That is indistinguishable, on the dashboard, from "a run is in flight". Nothing -anywhere says "this repo is missing a gate". - -This was found the hard way: `autocti_workspace` sat in that state from whenever -it was added to the `workspaces` group until 2026-08-24, when a human noticed the -asymmetry (a red Smoke Tests still reported failure correctly, so the repo could -go red but never green). Fixed for that instance by autocti_workspace#30; the -class was left as a proposal, deliberately, so the fix PR was not widened. This -is that proposal, filed. - -## Why it is worth a check even though the class is currently empty - -A survey of all 15 repos across the four groups carrying `required_workflows` -(run 2026-08-24, on the issue) found `autocti_workspace` was the **only** -instance, and #30 removed it. So this is not a bug hunt — it is a guard against -the hole reopening, which it does on every edit to `config/repos.yaml`: - -- adding a repo to a group silently makes it un-greenable until it carries a file - for each of that group's required workflows; -- adding a workflow to a group's `required_workflows` silently does the same to - **every** repo in the group at once. - -Both edits look harmless in review. Neither produces a red anything. - -## Shape - -A cheap per-repo assertion: for every repo in a group with `required_workflows`, -a workflow exists whose parsed `name:` field matches each required entry. Match -on `name:`, not the filename — `name:` is what `ci_status` matches against, so a -filename-based check could pass while the roll-up still starves. - -Two design notes, one of which corrects the original proposal: - -1. **It probably needs no new data source, and no sibling checkouts.** The - original proposal assumed either a periodic Actions-API sweep or a check that - runs where the workspace checkouts exist. But `heart/checks/ci_status.sh` - already loops every polled repo in parallel and makes two cheap `gh api` - metadata calls each (`actions/runs?branch=main`, `commits/main`). A third — - `GET /repos/{owner}/{repo}/actions/workflows`, which returns every workflow - file with its `name` — is the same shape and the same cost, and it is the - only call that can tell *missing file* from *file exists, has never run on - main*. Check whether that fits the <30 s tick budget before falling back to a - deep/on-demand tier; `ci_status.sh`'s own header argues the existing two calls - are cheap enough, so a third plausibly is too. -2. **A missing file is a configuration finding, not red CI.** The repo's code is - fine; its gate is not wired up. Colouring it red misattributes the fault. - `heart/checks/manifest_drift.py` is the precedent to mirror — a drift check - that classifies as YELLOW ("hygiene that will eventually break something, not - an immediate release blocker"), writes its own sidecar, and is consumed by - `readiness.py` as a caution rather than a gate. - -The `required_workflows` block in `config/repos.yaml` already carries each -group's filenames in a trailing comment (`# smoke_tests.yml + navigator_check.yml`), -which is a useful cross-check but not the matching key. - -## Acceptance - -- Adding a repo to a group whose required workflows it does not have produces a - named finding, not a silent `in_progress`. -- The finding distinguishes "no workflow file" from "workflow exists, no runs on - main HEAD yet" — the second is genuinely pending and must stay pending. -- A test in `PyAutoHeart/tests/` alongside `test_manifest_drift.py` / - `test_ci_status.py`. - -## Context - -- `PyAutoMind/complete/2026/08/autocti-workspace-navigator-check.md` — the - instance, and the roll-up table that shows the defect. -- https://github.com/PyAutoLabs/autocti_workspace/issues/29#issuecomment-5401319712 - — the original proposal and the full 15-repo survey. diff --git a/complete/2026/08/required-workflow-file-drift.md b/complete/2026/08/required-workflow-file-drift.md new file mode 100644 index 00000000..6ec5aff3 --- /dev/null +++ b/complete/2026/08/required-workflow-file-drift.md @@ -0,0 +1,291 @@ +- completed: 2026-08-27 +- issue: https://github.com/PyAutoLabs/PyAutoHeart/issues/188 (closed 2026-08-27) +- prs: + - https://github.com/PyAutoLabs/PyAutoHeart/pull/189 (merged, `2a1391f`) +- summary: | + The general case behind autocti_workspace#29/#30, filed and shipped the same + day. `heart/checks/ci_status.rollup()` scores a repo over its group's + `required_workflows`, and a required workflow with **no runs** is never + scored as a failure — it just never satisfies `all_green`, so the repo sits + at `{"conclusion": "", "status": "in_progress"}` forever: able to go red, + never able to go green. On the dashboard that is indistinguishable from a + run in flight, which is why the state survives unnoticed. + `heart/checks/required_workflow_drift.py` makes it nameable. + +## What landed + +- `heart/checks/required_workflow_drift.py` — for every repo in a group that + declares `required_workflows`, assert a workflow exists whose `name` matches + each required entry. `polled_repos` / `gating_repos` / `fetch_workflow_names` + / `check_one` / `run`, mirroring `manifest_drift.py`'s shape (own sidecar, + `available: false` when it cannot run, coloured one-line `main()`). +- `heart/state.py` — aggregates `required_workflow_drift.json` into `state.json`. +- `heart/tick.sh` — runs it, `|| heart_log WARN` like its siblings. +- `heart/readiness.py` — YELLOW per missing workflow (`required_workflow_drift`), + plus a stale `required workflows unverified` reason + (`required_workflow_unknown`); scoring weights for both keys. +- 15 new tests (`tests/test_required_workflow_drift.py` + four cases in + `tests/test_readiness.py`). Full suite 656 passed. + +## The two design calls, and why + +**Read the workflow list, not the runs.** The runs payload `ci_status` already +fetches cannot separate the two causes of "no runs" — a workflow file that does +not exist, and one that exists but has never run on `main`. Only +`GET /repos/{owner}/{repo}/actions/workflows` can, so that is the one call +added. The second case is genuinely pending and must stay pending; a test pins +it (`test_workflow_present_but_never_run_is_not_missing`). + +**Match on `name`, never the filename.** `name` is what `ci_status` matches runs +against, so a filename-based check could pass while the roll-up still starves. +Confirmed against a live repo: `actions/workflows` returns +`name: "Navigator Check"` with `path: ".github/workflows/navigator_check.yml"` — +exactly that case. + +Classified YELLOW and as a **configuration** finding rather than red CI: the +repo's code is fine, its gate is not wired up, and red would misattribute the +fault. + +## The trap: the tenant firewall scans docstrings and tests + +`heart-tests.yml` runs `repos_sync.py --only "tenant firewall (organ code)"` on +every Heart PR. It scans every organ `.py`/`.sh` **line** — docstrings, comments +and test fixtures included — for non-organ repo names and GitHub owners, and +treats *any* instance fact in an unlisted file as drift. + +The first draft named a workspace repo in the module docstring (recounting the +incident) and used real repo names in the test fixture config. Both would have +reddened CI. Rewritten to name no instance fact at all — the docstring says "one +workspace repo", the fixture uses invented names — rather than growing +`FIREWALL_ALLOWLIST`, which `repos_sync.py` explicitly warns against ("never +grow it casually — a new entry means a new file an adopting fork must rewrite"). +So this change added no allowlist entry, and the module is tenant-agnostic, +which is the better design anyway. + +Verified the gate genuinely scans the new files rather than trusting a green: +appended a canary token, watched the check fail naming the exact file and line, +removed it, watched it pass. + +## The prompt's cost note held up + +The original proposal (autocti_workspace#29) assumed a periodic Actions-API +sweep or a check that runs where sibling checkouts exist, and so belonged in a +deep/on-demand tier. `ci_status.sh` says otherwise: it already loops every +polled repo in parallel making two cheap `gh api` metadata calls each +(`actions/runs?branch=main`, `commits/main`). The third is the same shape and +cost, and only repos in a group that *gates* need it — 17 today; advisory groups +are skipped without a call. + +## Deliberately not done + +- Folding the finding into `ci_status`'s sidecar or `rollup()`'s return. + `rollup()` is the release gate; reshaping it to carry a configuration finding + would ripple through readiness, dashboard and publish for no gain. +- The release-ci profile's `unobserved` list, whose sentence is specifically + about dev-box-local evidence. This check is not dev-box-local. +- `docs/readiness_evidence_audit.md` — a dated 2026-07-16 audit deliverable with + "writer last ran" columns, not a living index; adding a 2026-08-27 row would + misdate it. + +## Session notes (remote web session) + +No `gh` and no task worktree: PyAutoHeart was attached with `add_repo` and cloned +flat at `/home/user/pyautoheart`, GitHub driven through the `mcp__github__*` +tools. Two consequences worth knowing: + +- **Heart's own gate read YELLOW, entirely from the environment.** 17 × + "CI status unavailable" (no `gh` for `ci_status.sh` to call) and one + "manifest drift: local checkout origins" — `add_repo` clones from + `PyAutoLabs/pyautoheart` while the body map says `PyAutoHeart`, and GitHub is + case-insensitive where `repos_sync.py` is not. Nothing about the diff. +- **`--depth 1` clones single-branch.** Its fetch refspec is + `+refs/heads/main:refs/remotes/origin/main`, so `git push -u` set the upstream + but no `origin/feature/*` tracking ref ever existed, and a local git-state + check read the pushed branch as unpushed. The remote branch was correct + throughout; the fix is to widen the refspec, never to re-push. + +## Original prompt + +# Heart cannot see a required workflow that has no file — the silent never-green defect + +Type: feature +Target: pyautoheart +Repos: +- @PyAutoHeart +Difficulty: medium +Autonomy: supervised +Priority: normal +Status: formalised +Filed: 2026-08-27 +Issued: 2026-08-27 + +`PyAutoHeart/config/repos.yaml` declares `required_workflows` per group, and +`heart/checks/ci_status.py`'s `rollup()` scores a repo over exactly those +workflows. A required workflow that has **no runs at all** is not scored as a +failure — it simply never satisfies `all_green`, so the repo sits at +`{"conclusion": "", "status": "in_progress"}` forever: able to go red, never +able to go green, and invisible to the readiness/release gate as CI-clean. + +That is indistinguishable, on the dashboard, from "a run is in flight". Nothing +anywhere says "this repo is missing a gate". + +This was found the hard way: `autocti_workspace` sat in that state from whenever +it was added to the `workspaces` group until 2026-08-24, when a human noticed the +asymmetry (a red Smoke Tests still reported failure correctly, so the repo could +go red but never green). Fixed for that instance by autocti_workspace#30; the +class was left as a proposal, deliberately, so the fix PR was not widened. This +is that proposal, filed. + +## Why it is worth a check even though the class is currently empty + +A survey of all 15 repos across the four groups carrying `required_workflows` +(run 2026-08-24, on the issue) found `autocti_workspace` was the **only** +instance, and #30 removed it. So this is not a bug hunt — it is a guard against +the hole reopening, which it does on every edit to `config/repos.yaml`: + +- adding a repo to a group silently makes it un-greenable until it carries a file + for each of that group's required workflows; +- adding a workflow to a group's `required_workflows` silently does the same to + **every** repo in the group at once. + +Both edits look harmless in review. Neither produces a red anything. + +## Shape + +A cheap per-repo assertion: for every repo in a group with `required_workflows`, +a workflow exists whose parsed `name:` field matches each required entry. Match +on `name:`, not the filename — `name:` is what `ci_status` matches against, so a +filename-based check could pass while the roll-up still starves. + +Two design notes, one of which corrects the original proposal: + +1. **It probably needs no new data source, and no sibling checkouts.** The + original proposal assumed either a periodic Actions-API sweep or a check that + runs where the workspace checkouts exist. But `heart/checks/ci_status.sh` + already loops every polled repo in parallel and makes two cheap `gh api` + metadata calls each (`actions/runs?branch=main`, `commits/main`). A third — + `GET /repos/{owner}/{repo}/actions/workflows`, which returns every workflow + file with its `name` — is the same shape and the same cost, and it is the + only call that can tell *missing file* from *file exists, has never run on + main*. Check whether that fits the <30 s tick budget before falling back to a + deep/on-demand tier; `ci_status.sh`'s own header argues the existing two calls + are cheap enough, so a third plausibly is too. +2. **A missing file is a configuration finding, not red CI.** The repo's code is + fine; its gate is not wired up. Colouring it red misattributes the fault. + `heart/checks/manifest_drift.py` is the precedent to mirror — a drift check + that classifies as YELLOW ("hygiene that will eventually break something, not + an immediate release blocker"), writes its own sidecar, and is consumed by + `readiness.py` as a caution rather than a gate. + +The `required_workflows` block in `config/repos.yaml` already carries each +group's filenames in a trailing comment (`# smoke_tests.yml + navigator_check.yml`), +which is a useful cross-check but not the matching key. + +## Acceptance + +- Adding a repo to a group whose required workflows it does not have produces a + named finding, not a silent `in_progress`. +- The finding distinguishes "no workflow file" from "workflow exists, no runs on + main HEAD yet" — the second is genuinely pending and must stay pending. +- A test in `PyAutoHeart/tests/` alongside `test_manifest_drift.py` / + `test_ci_status.py`. + +## Context + +- `PyAutoMind/complete/2026/08/autocti-workspace-navigator-check.md` — the + instance, and the roll-up table that shows the defect. +- https://github.com/PyAutoLabs/autocti_workspace/issues/29#issuecomment-5401319712 + — the original proposal and the full 15-repo survey. + +## Original prompt + +# Heart cannot see a required workflow that has no file — the silent never-green defect + +Type: feature +Target: pyautoheart +Repos: +- @PyAutoHeart +Difficulty: medium +Autonomy: supervised +Priority: normal +Status: formalised +Filed: 2026-08-27 +Issued: 2026-08-27 + +`PyAutoHeart/config/repos.yaml` declares `required_workflows` per group, and +`heart/checks/ci_status.py`'s `rollup()` scores a repo over exactly those +workflows. A required workflow that has **no runs at all** is not scored as a +failure — it simply never satisfies `all_green`, so the repo sits at +`{"conclusion": "", "status": "in_progress"}` forever: able to go red, never +able to go green, and invisible to the readiness/release gate as CI-clean. + +That is indistinguishable, on the dashboard, from "a run is in flight". Nothing +anywhere says "this repo is missing a gate". + +This was found the hard way: `autocti_workspace` sat in that state from whenever +it was added to the `workspaces` group until 2026-08-24, when a human noticed the +asymmetry (a red Smoke Tests still reported failure correctly, so the repo could +go red but never green). Fixed for that instance by autocti_workspace#30; the +class was left as a proposal, deliberately, so the fix PR was not widened. This +is that proposal, filed. + +## Why it is worth a check even though the class is currently empty + +A survey of all 15 repos across the four groups carrying `required_workflows` +(run 2026-08-24, on the issue) found `autocti_workspace` was the **only** +instance, and #30 removed it. So this is not a bug hunt — it is a guard against +the hole reopening, which it does on every edit to `config/repos.yaml`: + +- adding a repo to a group silently makes it un-greenable until it carries a file + for each of that group's required workflows; +- adding a workflow to a group's `required_workflows` silently does the same to + **every** repo in the group at once. + +Both edits look harmless in review. Neither produces a red anything. + +## Shape + +A cheap per-repo assertion: for every repo in a group with `required_workflows`, +a workflow exists whose parsed `name:` field matches each required entry. Match +on `name:`, not the filename — `name:` is what `ci_status` matches against, so a +filename-based check could pass while the roll-up still starves. + +Two design notes, one of which corrects the original proposal: + +1. **It probably needs no new data source, and no sibling checkouts.** The + original proposal assumed either a periodic Actions-API sweep or a check that + runs where the workspace checkouts exist. But `heart/checks/ci_status.sh` + already loops every polled repo in parallel and makes two cheap `gh api` + metadata calls each (`actions/runs?branch=main`, `commits/main`). A third — + `GET /repos/{owner}/{repo}/actions/workflows`, which returns every workflow + file with its `name` — is the same shape and the same cost, and it is the + only call that can tell *missing file* from *file exists, has never run on + main*. Check whether that fits the <30 s tick budget before falling back to a + deep/on-demand tier; `ci_status.sh`'s own header argues the existing two calls + are cheap enough, so a third plausibly is too. +2. **A missing file is a configuration finding, not red CI.** The repo's code is + fine; its gate is not wired up. Colouring it red misattributes the fault. + `heart/checks/manifest_drift.py` is the precedent to mirror — a drift check + that classifies as YELLOW ("hygiene that will eventually break something, not + an immediate release blocker"), writes its own sidecar, and is consumed by + `readiness.py` as a caution rather than a gate. + +The `required_workflows` block in `config/repos.yaml` already carries each +group's filenames in a trailing comment (`# smoke_tests.yml + navigator_check.yml`), +which is a useful cross-check but not the matching key. + +## Acceptance + +- Adding a repo to a group whose required workflows it does not have produces a + named finding, not a silent `in_progress`. +- The finding distinguishes "no workflow file" from "workflow exists, no runs on + main HEAD yet" — the second is genuinely pending and must stay pending. +- A test in `PyAutoHeart/tests/` alongside `test_manifest_drift.py` / + `test_ci_status.py`. + +## Context + +- `PyAutoMind/complete/2026/08/autocti-workspace-navigator-check.md` — the + instance, and the roll-up table that shows the defect. +- https://github.com/PyAutoLabs/autocti_workspace/issues/29#issuecomment-5401319712 + — the original proposal and the full 15-repo survey. diff --git a/complete/index.md b/complete/index.md index 46077d79..b90b6d04 100644 --- a/complete/index.md +++ b/complete/index.md @@ -6,7 +6,7 @@ Token-light navigation over the finished-work records (schema: only then grep a dated bucket. Curators: edit the band between the CURATED markers; everything below GENERATED is rebuilt. -1155 records across 7 buckets. +1156 records across 7 buckets. ## Highlights @@ -224,6 +224,7 @@ _(curate hard-won records here — survives regeneration.)_ - [repo-settings-bash-e-abort](2026/08/repo-settings-bash-e-abort.md) - [repo-settings-org-enumeration](2026/08/repo-settings-org-enumeration.md) - [repos-sync-target-repo-lint-awareness](2026/08/repos-sync-target-repo-lint-awareness.md) +- [required-workflow-file-drift](2026/08/required-workflow-file-drift.md) - [resolve-border-relocator-hazard](2026/08/resolve-border-relocator-hazard.md) — Reconciled the likelihood hazard instrument after the border-relocator source fix. The resolved backend-diverg… - [resolve-curvature-floor-doc-drift](2026/08/resolve-curvature-floor-doc-drift.md) — Reconciled the curvature-floor documentation finding after PyAutoArray#444. The detector now requires both run… - [resolve-sersic-ell-comps-gradient](2026/08/resolve-sersic-ell-comps-gradient.md) — Reconciled the numerical-hazard evidence after the Sersic Cartesian-radius fix. The stable conditional detecto… diff --git a/dashboard.html b/dashboard.html index ca452833..474dc953 100644 --- a/dashboard.html +++ b/dashboard.html @@ -204,7 +204,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.

-
  • 2In flight
  • 3Parked
  • 5Planned
  • 134Backlog
+
  • 1In flight
  • 3Parked
  • 5Planned
  • 134Backlog

Last updated 2026-08-27. 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.

@PyAutoFit TransformedMessage.factor_gradient crashes on first callissue #1501 — issued 2026-08-19HOLD — do not start dev. Fix-or-delete hangs off the PyAutoFit#1498 logpdf-contract

-

Heart cannot see a required workflow that has no file…issue #188 — issued 2026-08-27ready-to-ship

Parked markdown version

3 task(s) @@ -430,12 +429,6 @@

Backlog 2026-08-27 -issued -Heart cannot see a required workflow that has no file… - - - -2026-08-27 filed Cross-validate multi-plane ray tracing @@ -470,7 +463,7 @@

Backlog Un-park multi_galaxy/features/scaling_relation/slam once a capped run… - + 2026-08-24 filed Induct PyAutoReduce into the PyAutoHands release machinery (date… @@ -710,6 +703,12 @@

Backlog Un-park imaging/features/scaling_relation/slam — the PyAutoArray#431… + +2026-07-31 +filed +Quick-update plotting cost — minutes per update, and it is not JAX… + +

Epics markdown version

diff --git a/dashboard.md b/dashboard.md index dcf9ceaf..0f28ec48 100644 --- a/dashboard.md +++ b/dashboard.md @@ -42,7 +42,7 @@ anything you could not verify. | Where | Count | |-------|------:| -| [In flight](#in-flight) (`active/`) | 2 | +| [In flight](#in-flight) (`active/`) | 1 | | [Parked](#parked) (`parked.md`) | 3 | | [Planned](#planned) (`planned.md`) | 5 | | [Backlog](#backlog) (`draft/`) | 134 | @@ -163,14 +163,6 @@ Issued — each has an open GitHub issue and usually a branch. The full record f
-
📋 Heart cannot see a required workflow that has no file…issue #188 — issued 2026-08-27 — ready-to-ship - -``` -/start_dev active/required_workflow_file_drift.md -``` - -
- ## Parked Started or scoped, not currently in flight — resume by moving the row back to `active.md`. Full detail in [`parked.md`](parked.md). @@ -1183,19 +1175,18 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 2026-08-27 | filed | One construction path for plane-bound lensing quantities | | 2026-08-27 | filed | Multi-plane time delays | | 2026-08-27 | filed | LensCalc NumPy Hessian step is too coarse for multi-plane tracers | -| 2026-08-27 | issued | Heart cannot see a required workflow that has no file… | | 2026-08-27 | filed | Cross-validate multi-plane ray tracing | | 2026-08-26 | filed | jax_profiling/gradient/imaging/pixelization.py: 3.2% of its pin move… | | 2026-08-26 | filed | The Brain board should work in a session that has no gh | | 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 | Un-park multi_galaxy/features/scaling_relation/slam once a capped run… | +| 2026-08-24 | filed | Induct PyAutoReduce into the PyAutoHands release machinery (date… |
… 10 more (40 left) | Date | Event | Task | |------|-------|------| -| 2026-08-24 | filed | Induct PyAutoReduce into the PyAutoHands release machinery (date… | | 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… | @@ -1205,12 +1196,12 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 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-21 | filed | Rectangular mesh split: Bilinear (fast CPU default) vs RTU… |
… 10 more (30 left) | Date | Event | Task | |------|-------|------| -| 2026-08-21 | filed | Rectangular mesh split: Bilinear (fast CPU default) vs RTU… | | 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 | autofit_profiling: bootstrap the repo + general PyAutoFit profiling… | @@ -1220,12 +1211,12 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 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-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 | @@ -1235,12 +1226,12 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 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 | Regenerate setup_notebook-drifted notebooks in… | +| 2026-08-06 | filed | Triage: Convolver "No blurring_image provided" warning in canonical… |
… 10 more (10 left) | Date | Event | Task | |------|-------|------| -| 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… | | 2026-08-05 | filed | Give PyAutoFit searches a seed — today no search can be made… | @@ -1250,6 +1241,7 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 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 | | 2026-08-03 | filed | Un-park imaging/features/scaling_relation/slam — the PyAutoArray#431… | +| 2026-07-31 | filed | Quick-update plotting cost — minutes per update, and it is not JAX… |
From ed3ec5f075960e8d4e640acae2870bf2af2d1e06 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 27 Aug 2026 17:46:02 +0000 Subject: [PATCH 5/5] =?UTF-8?q?prompt:=20retire=20run=5Fsmoke=5Fcopy=5Fdri?= =?UTF-8?q?ft=20=E2=80=94=20a=20stale=20draft=20copy=20of=20a=20shipped=20?= =?UTF-8?q?task?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The prompt was issued from a copy rather than moved, so draft/maintenance/ci/run_smoke_copy_drift.md stayed behind when the task went to active/ and then into complete/2026/08/smoke-runner-delegation.md. It is a strict prefix of the copy that record folds — identical through the re-scoped task list, missing only the Issued:/Filed: headers and the 2026-08-24 re-measurement — so it kept rendering on the dashboard as pickable backlog for work already merged. Proof, not resemblance. Verified against the merged end state rather than the record: autolens_workspace and autogalaxy_workspace .github/scripts/run_smoke.py are both 119-line shims on origin/main and the vestigial _BUILD_DIR line the prompt's step 4 asked about is gone; and the acceptance criterion that consolidation must not cost autolens_workspace_test its per-script timeout holds through the shared path, build_util.execute_scripts_in_folder -> execute_script -> timeout_for(env) with run_capped(timeout=...) and TimeoutExpired handling. Recorded in the existing completion record rather than writing a second one for the same task. Reconcile over draft/maintenance/ci is now clean (0 suspects of 133); dashboard and complete/index.md regenerated. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01KmWbYJw4cJJnt4eK6NoZjL --- complete/2026/08/smoke-runner-delegation.md | 23 +++ dashboard.html | 45 +++-- dashboard.md | 164 +++++++++---------- draft/maintenance/ci/run_smoke_copy_drift.md | 97 ----------- 4 files changed, 123 insertions(+), 206 deletions(-) delete mode 100644 draft/maintenance/ci/run_smoke_copy_drift.md diff --git a/complete/2026/08/smoke-runner-delegation.md b/complete/2026/08/smoke-runner-delegation.md index 7298e8bb..d9101e16 100644 --- a/complete/2026/08/smoke-runner-delegation.md +++ b/complete/2026/08/smoke-runner-delegation.md @@ -117,6 +117,29 @@ The merged `claude/smoke-copy-drift-ci-docs-ozntvv` branches across nine repos were not deleted — this session's git proxy refuses delete refspecs (`send-pack: unexpected disconnect`). They are all proven merged into `main`. +## Mind-side note: a stale draft copy survived this record (removed 2026-08-27) + +The prompt was issued from a copy, not moved: `draft/maintenance/ci/run_smoke_copy_drift.md` +stayed behind when the task went to `active/` and then into this record. It was a +strict prefix of the folded copy below — identical through the re-scoped task +list, missing only the `Issued:`/`Filed:` headers and the 2026-08-24 +re-measurement — so it kept rendering on the dashboard as pickable backlog for +work that had already shipped. Nothing detects this: `lifecycle.py check` reports +OK, because a `draft/` prompt with no registry entry is a valid state. + +Removed under `/prm`'s reconcile leg on 2026-08-27, after verifying the merged +end state rather than trusting this record: + +- `autolens_workspace` and `autogalaxy_workspace` `.github/scripts/run_smoke.py` + are both 119-line shims on `origin/main`, and `_BUILD_DIR` — the vestigial line + the prompt's step 4 asked about — is gone, that step being moot once the + variant was replaced wholesale. +- The acceptance criterion that consolidation must not cost + `autolens_workspace_test` its per-script timeout holds through the shared path: + `build_util.execute_scripts_in_folder` → `execute_script` → `timeout_for(env)` + with `run_capped(timeout=…)` and `TimeoutExpired` handling, so every delegating + repo enforces the cap the one repo used to carry alone. + ## Original prompt # run_smoke.py: three runner variants across 10 repos, no sync mechanism diff --git a/dashboard.html b/dashboard.html index 474dc953..3eab0279 100644 --- a/dashboard.html +++ b/dashboard.html @@ -204,7 +204,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.

-
  • 1In flight
  • 3Parked
  • 5Planned
  • 134Backlog
+
  • 1In flight
  • 3Parked
  • 5Planned
  • 133Backlog

Last updated 2026-08-27. 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.

latent-nan-guard-honest-run — planned 2026-07-22

Backlog markdown version

-

134 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.

+

133 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 — 28 @@ -319,7 +319,26 @@

Backlog

Cluster-scale gradient-search benchmark (Prodigy vs Nautilus, point-source)🔬 researchautolens_profiling

-maintenance — 21 +bug — 16 + +

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

+

LogGaussianPrior misreports its own support as (-inf, inf)🐛 bugautofitsmallsupervisednormal

+ + + + + + +

Resolve release-profile timeout scripts deliberately🐛 bughealth_fixestoo-largesupervisednormal

+ +

Priors & Messages cleanup — tracker🐛 bugpriorstoo-largesupervisednormal

+ +

Point-source JSON datasets record no resolution regime🐛 bugpyautolensmediumsupervisedlow

+
+
+maintenance — 20

Untrack the generated FITS test artifacts in autoarray🧹 maintenancelibrariessmallsupervisedmedium

autolens_workspace_developer rectangular experiments — Gut stash + rename🧹 maintenanceautolens_workspace_developersmallsupervisednormal

@@ -328,7 +347,6 @@

Backlog

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

-

PyAutoMemory canonical-key TODO sweep🧹 maintenancepyautomemorymediumsupervisednormal

@@ -343,25 +361,6 @@

Backlog

Regenerate setup_notebook-drifted notebooks in autogalaxy/autofit/HowToFit workspaces🧹 maintenanceworkspacessmallsupervisedlow

-bug — 16 - -

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

-

LogGaussianPrior misreports its own support as (-inf, inf)🐛 bugautofitsmallsupervisednormal

- - - - - - -

Resolve release-profile timeout scripts deliberately🐛 bughealth_fixestoo-largesupervisednormal

- -

Priors & Messages cleanup — tracker🐛 bugpriorstoo-largesupervisednormal

- -

Point-source JSON datasets record no resolution regime🐛 bugpyautolensmediumsupervisedlow

-
-
docs — 12

Split lensing regimes: multi_galaxy / group / cluster (epic plan)📖 docsautolenstoo-largesupervisedhigh

diff --git a/dashboard.md b/dashboard.md index 0f28ec48..c18dcecd 100644 --- a/dashboard.md +++ b/dashboard.md @@ -45,7 +45,7 @@ anything you could not verify. | [In flight](#in-flight) (`active/`) | 1 | | [Parked](#parked) (`parked.md`) | 3 | | [Planned](#planned) (`planned.md`) | 5 | -| [Backlog](#backlog) (`draft/`) | 134 | +| [Backlog](#backlog) (`draft/`) | 133 | ## Start here @@ -247,7 +247,7 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned. ## Backlog -**134** 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. +**133** 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 — 28 @@ -596,305 +596,297 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.
-maintenance — 21 +bug — 16 -
📋 Untrack the generated FITS test artifacts in autoarray — libraries · small · supervised · medium +
📋 LensCalc NumPy Hessian step is too coarse for multi-plane tracers — autogalaxy · large · supervised · high ``` -/start_dev draft/maintenance/libraries/untrack_generated_fits_test_artifacts.md +/start_dev draft/bug/autogalaxy/lenscalc_numpy_hessian_step_is_too_coarse.md ```
-
📋 smoke_install.sh's stale jax<0.7 pin — CI is on the right jax… — ci · low · supervised · medium +
📋 Fix release JAX runtime compatibility and likelihood parity — health_fixes · too-large · supervised · high ``` -/start_dev draft/maintenance/ci/smoke_install_stale_jax_pin.md +/start_dev draft/bug/health_fixes/jax_runtime_and_parity.md ```
-
📋 autolens_workspace_developer rectangular experiments — Gut stash + rename — autolens_workspace_developer · small · supervised · normal +
📋 Fix JIT quick-update visualization output regressions — health_fixes · too-large · supervised · high ``` -/start_dev draft/maintenance/autolens_workspace_developer/rectangular_experiments_gut_stash.md +/start_dev draft/bug/health_fixes/jit_visualization_outputs.md ```
-
📋 Mirror drifted library config keys into the workspace configs — workspaces · small · supervised · normal +
📋 Fix release result/sample parameter-path regressions — health_fixes · too-large · supervised · high ``` -/start_dev draft/maintenance/workspaces/config_key_mirror_drift.md +/start_dev draft/bug/health_fixes/samples_parameter_paths.md ```
-
📋 Un-park imaging/features/scaling_relation/slam — the PyAutoArray#431 gate has cleared — workspaces · small · supervised · normal +
📋 LogGaussianPrior misreports its own support as (-inf, inf) — autofit · small · supervised · normal ``` -/start_dev draft/maintenance/workspaces/unpark_imaging_scaling_relation_slam.md +/start_dev draft/bug/autofit/loggaussian_prior_declares_own_support.md ```
-
📋 Un-park multi_galaxy/features/scaling_relation/slam once a capped run passes — workspaces · small · supervised · normal +
📋 Three jax_likelihood pins are stale by ~1.24e-4 and fail the smoke gate… — workspaces · small · supervised · normal ``` -/start_dev draft/maintenance/workspaces/unpark_multi_galaxy_scaling_relation_slam.md +/start_dev draft/bug/workspaces/jax_likelihood_pins_stale_by_1e4.md ```
-
📋 autolens_workspace_developer: broad stale-API rot (56 symbols, no CI) — autolens_workspace_developer · medium · supervised · normal +
📋 PROBE: is Adapt's 4th-power coefficient dependence (double square) intentional? — autoarray · medium · supervised · normal ``` -/start_dev draft/maintenance/autolens_workspace_developer/stale_api_rot_audit.md +/start_dev draft/bug/autoarray/PROBE_adapt_double_square_coefficient.md ```
-
📋 Heart's local smoke runner cannot run any CTI workspace — no autocti… — ci · medium · supervised · normal +
📋 JIT cache not hit in modeling_visualization delaunay/rectangular scripts — autolens · medium · supervised · normal ``` -/start_dev draft/maintenance/ci/heart_smoke_table_autocti.md +/start_dev draft/bug/autolens/jit_cache_not_hit_modeling_visualization.md ```
-
📋 run_smoke.py: three runner variants across 10 repos, no sync mechanism — ci · medium · supervised · normal +
📋 interferometer/jax_grad/gradient.py: eager and jitted likelihoods diverge ~5e-7 on Python 3.13 only — autolens_workspace_test · medium · supervised · normal ``` -/start_dev draft/maintenance/ci/run_smoke_copy_drift.md +/start_dev draft/bug/autolens_workspace_test/gradient_eager_jit_divergence_py313.md ```
-
📋 wiki-currency's --check-version gate rots on every library main merge — ci · medium · supervised · normal +
📋 @PyAutoFit TransformedMessage.logpdf/pdf omit the transform Jacobian — priors · medium · supervised · normal ``` -/start_dev draft/maintenance/ci/wiki_currency_check_version_gate.md +/start_dev draft/bug/priors/15_transformed_message_logpdf_jacobian.md ```
-
📋 Dependency-cap refresh 2026-08: safe bumps, astropy 8 decision, two dead deps — libraries · medium · supervised · normal +
📋 jax_profiling/gradient/imaging/pixelization.py: 3.2% of its pin move is unattributed — workspaces · medium · supervised · normal ``` -/start_dev draft/maintenance/libraries/dep_cap_refresh_2026_08.md +/start_dev draft/bug/workspaces/gradient_pixelization_pin_residual_drift.md ```
-
📋 PyAutoMemory canonical-key TODO sweep — pyautomemory · medium · supervised · normal +
📋 Resolve release-profile timeout scripts deliberately — health_fixes · too-large · supervised · normal ``` -/start_dev draft/maintenance/pyautomemory/canonical_key_todo_sweep.md +/start_dev draft/bug/health_fixes/release_timeout_policy.md ```
-
📋 Capped smoke datasets were committed as if they were real — workspaces · medium · supervised · normal +
📋 @PyAutoFit Refactor: replace hand-rolled AbstractDensityTransform with tfp.bijectors / numpyro.distributions.transforms — priors · too-large · supervised · normal ``` -/start_dev draft/maintenance/workspaces/committed_capped_smoke_datasets.md +/start_dev draft/bug/priors/14_replace_transform_stack_with_bijectors.md ```
-
📋 autolens_profiling is now a mature project, with a good separation — autolens_profiling · large · supervised · normal +
📋 Priors & Messages cleanup — tracker — priors · too-large · supervised · normal ``` -/start_dev draft/maintenance/autolens_profiling/polish.md +/start_dev draft/bug/priors/z_features.md ```
-
📋 Auto-request GitHub Copilot code review on every PR, org-wide — ci · large · supervised · normal +
📋 The reconstruction noise map describes a different estimator than the default solver — autoarray · medium · human-required · low ``` -/start_dev draft/maintenance/ci/copilot_auto_review.md +/start_dev draft/bug/autoarray/reconstruction_noise_map_solver_mismatch.md ```
-
📋 autolens_workspace — workspaces · too-large · supervised · normal +
📋 Point-source JSON datasets record no resolution regime — pyautolens · medium · supervised · low ``` -/start_dev draft/maintenance/workspaces/read_through_issues.md +/start_dev draft/bug/pyautolens/point_source_json_datasets_record_no_regime.md ```
-
📋 pynufft removal: unswept downstream residue (1 hard break + stale docs/CI) — workspaces · low-medium · supervised · normal - -``` -/start_dev draft/maintenance/workspaces/pynufft_removal_downstream_residue.md -``` -
-
📋 Phase 3: stop installing pynufft in Hands/Heart CI and PyAutoCTI install docs — workspaces · low · supervised · normal +
+maintenance — 20 + +
📋 Untrack the generated FITS test artifacts in autoarray — libraries · small · supervised · medium ``` -/start_dev draft/maintenance/workspaces/pynufft_removal_downstream_residue_phase_3_ci_install_docs.md +/start_dev draft/maintenance/libraries/untrack_generated_fits_test_artifacts.md ```
-
📋 dataset/imaging/jwst_lw is untracked because the gitignore was never extended for it — autolens_profiling · small · supervised · low +
📋 smoke_install.sh's stale jax<0.7 pin — CI is on the right jax… — ci · low · supervised · medium ``` -/start_dev draft/maintenance/autolens_profiling/jwst_lw_untracked_gitignore_gap.md +/start_dev draft/maintenance/ci/smoke_install_stale_jax_pin.md ```
-
📋 cosmos_web_ring stores boolean masks as float64, wasting ~3.4 MB of the repo's… — autolens_workspace · small · supervised · low +
📋 autolens_workspace_developer rectangular experiments — Gut stash + rename — autolens_workspace_developer · small · supervised · normal ``` -/start_dev draft/maintenance/autolens_workspace/cosmos_web_ring_mask_dtype.md +/start_dev draft/maintenance/autolens_workspace_developer/rectangular_experiments_gut_stash.md ```
-
📋 Regenerate setup_notebook-drifted notebooks in autogalaxy/autofit/HowToFit workspaces — workspaces · small · supervised · low +
📋 Mirror drifted library config keys into the workspace configs — workspaces · small · supervised · normal ``` -/start_dev draft/maintenance/workspaces/notebook_setup_notebook_drift_siblings.md +/start_dev draft/maintenance/workspaces/config_key_mirror_drift.md ```
-
- -
-bug — 16 - -
📋 LensCalc NumPy Hessian step is too coarse for multi-plane tracers — autogalaxy · large · supervised · high +
📋 Un-park imaging/features/scaling_relation/slam — the PyAutoArray#431 gate has cleared — workspaces · small · supervised · normal ``` -/start_dev draft/bug/autogalaxy/lenscalc_numpy_hessian_step_is_too_coarse.md +/start_dev draft/maintenance/workspaces/unpark_imaging_scaling_relation_slam.md ```
-
📋 Fix release JAX runtime compatibility and likelihood parity — health_fixes · too-large · supervised · high +
📋 Un-park multi_galaxy/features/scaling_relation/slam once a capped run passes — workspaces · small · supervised · normal ``` -/start_dev draft/bug/health_fixes/jax_runtime_and_parity.md +/start_dev draft/maintenance/workspaces/unpark_multi_galaxy_scaling_relation_slam.md ```
-
📋 Fix JIT quick-update visualization output regressions — health_fixes · too-large · supervised · high +
📋 autolens_workspace_developer: broad stale-API rot (56 symbols, no CI) — autolens_workspace_developer · medium · supervised · normal ``` -/start_dev draft/bug/health_fixes/jit_visualization_outputs.md +/start_dev draft/maintenance/autolens_workspace_developer/stale_api_rot_audit.md ```
-
📋 Fix release result/sample parameter-path regressions — health_fixes · too-large · supervised · high +
📋 Heart's local smoke runner cannot run any CTI workspace — no autocti… — ci · medium · supervised · normal ``` -/start_dev draft/bug/health_fixes/samples_parameter_paths.md +/start_dev draft/maintenance/ci/heart_smoke_table_autocti.md ```
-
📋 LogGaussianPrior misreports its own support as (-inf, inf) — autofit · small · supervised · normal +
📋 wiki-currency's --check-version gate rots on every library main merge — ci · medium · supervised · normal ``` -/start_dev draft/bug/autofit/loggaussian_prior_declares_own_support.md +/start_dev draft/maintenance/ci/wiki_currency_check_version_gate.md ```
-
📋 Three jax_likelihood pins are stale by ~1.24e-4 and fail the smoke gate… — workspaces · small · supervised · normal +
📋 Dependency-cap refresh 2026-08: safe bumps, astropy 8 decision, two dead deps — libraries · medium · supervised · normal ``` -/start_dev draft/bug/workspaces/jax_likelihood_pins_stale_by_1e4.md +/start_dev draft/maintenance/libraries/dep_cap_refresh_2026_08.md ```
-
📋 PROBE: is Adapt's 4th-power coefficient dependence (double square) intentional? — autoarray · medium · supervised · normal +
📋 PyAutoMemory canonical-key TODO sweep — pyautomemory · medium · supervised · normal ``` -/start_dev draft/bug/autoarray/PROBE_adapt_double_square_coefficient.md +/start_dev draft/maintenance/pyautomemory/canonical_key_todo_sweep.md ```
-
📋 JIT cache not hit in modeling_visualization delaunay/rectangular scripts — autolens · medium · supervised · normal +
📋 Capped smoke datasets were committed as if they were real — workspaces · medium · supervised · normal ``` -/start_dev draft/bug/autolens/jit_cache_not_hit_modeling_visualization.md +/start_dev draft/maintenance/workspaces/committed_capped_smoke_datasets.md ```
-
📋 interferometer/jax_grad/gradient.py: eager and jitted likelihoods diverge ~5e-7 on Python 3.13 only — autolens_workspace_test · medium · supervised · normal +
📋 autolens_profiling is now a mature project, with a good separation — autolens_profiling · large · supervised · normal ``` -/start_dev draft/bug/autolens_workspace_test/gradient_eager_jit_divergence_py313.md +/start_dev draft/maintenance/autolens_profiling/polish.md ```
-
📋 @PyAutoFit TransformedMessage.logpdf/pdf omit the transform Jacobian — priors · medium · supervised · normal +
📋 Auto-request GitHub Copilot code review on every PR, org-wide — ci · large · supervised · normal ``` -/start_dev draft/bug/priors/15_transformed_message_logpdf_jacobian.md +/start_dev draft/maintenance/ci/copilot_auto_review.md ```
-
📋 jax_profiling/gradient/imaging/pixelization.py: 3.2% of its pin move is unattributed — workspaces · medium · supervised · normal +
📋 autolens_workspace — workspaces · too-large · supervised · normal ``` -/start_dev draft/bug/workspaces/gradient_pixelization_pin_residual_drift.md +/start_dev draft/maintenance/workspaces/read_through_issues.md ```
-
📋 Resolve release-profile timeout scripts deliberately — health_fixes · too-large · supervised · normal +
📋 pynufft removal: unswept downstream residue (1 hard break + stale docs/CI) — workspaces · low-medium · supervised · normal ``` -/start_dev draft/bug/health_fixes/release_timeout_policy.md +/start_dev draft/maintenance/workspaces/pynufft_removal_downstream_residue.md ```
-
📋 @PyAutoFit Refactor: replace hand-rolled AbstractDensityTransform with tfp.bijectors / numpyro.distributions.transforms — priors · too-large · supervised · normal +
📋 Phase 3: stop installing pynufft in Hands/Heart CI and PyAutoCTI install docs — workspaces · low · supervised · normal ``` -/start_dev draft/bug/priors/14_replace_transform_stack_with_bijectors.md +/start_dev draft/maintenance/workspaces/pynufft_removal_downstream_residue_phase_3_ci_install_docs.md ```
-
📋 Priors & Messages cleanup — tracker — priors · too-large · supervised · normal +
📋 dataset/imaging/jwst_lw is untracked because the gitignore was never extended for it — autolens_profiling · small · supervised · low ``` -/start_dev draft/bug/priors/z_features.md +/start_dev draft/maintenance/autolens_profiling/jwst_lw_untracked_gitignore_gap.md ```
-
📋 The reconstruction noise map describes a different estimator than the default solver — autoarray · medium · human-required · low +
📋 cosmos_web_ring stores boolean masks as float64, wasting ~3.4 MB of the repo's… — autolens_workspace · small · supervised · low ``` -/start_dev draft/bug/autoarray/reconstruction_noise_map_solver_mismatch.md +/start_dev draft/maintenance/autolens_workspace/cosmos_web_ring_mask_dtype.md ```
-
📋 Point-source JSON datasets record no resolution regime — pyautolens · medium · supervised · low +
📋 Regenerate setup_notebook-drifted notebooks in autogalaxy/autofit/HowToFit workspaces — workspaces · small · supervised · low ``` -/start_dev draft/bug/pyautolens/point_source_json_datasets_record_no_regime.md +/start_dev draft/maintenance/workspaces/notebook_setup_notebook_drift_siblings.md ```
diff --git a/draft/maintenance/ci/run_smoke_copy_drift.md b/draft/maintenance/ci/run_smoke_copy_drift.md deleted file mode 100644 index 1b738b63..00000000 --- a/draft/maintenance/ci/run_smoke_copy_drift.md +++ /dev/null @@ -1,97 +0,0 @@ -# run_smoke.py: three runner variants across 10 repos, no sync mechanism - -Type: maintenance -Target: ci -Repos: -- @PyAutoHands -Difficulty: medium -Autonomy: supervised -Priority: normal -Status: draft - -> **Re-scoped 2026-08-05.** The original finding below is preserved for history -> but its two headline claims are now measured to be wrong: step 1 is already -> done, and "9 copies in 5 revisions" conflates three structurally different -> programs. Read the correction block first — it is the current statement of -> the task. - -## Original finding (2026-07-25, during the notebook skip-guard fix) - -Every workspace's PR smoke gate runs its own copy of -`.github/scripts/run_smoke.py`. There are **9 copies across the workspace -repos in 5 distinct revisions** — they have already drifted: -autofit_workspace + autolens_workspace share one revision; HowToLens + -HowToGalaxy + autofit_workspace_test share another; autogalaxy_workspace, -autogalaxy_workspace_test, autolens_workspace_test and autocti_workspace_test -are each unique. PyAutoHeart's reusable smoke-tests.yml deliberately leaves -the runner in the workspace, but nothing keeps the copies aligned. - -Immediate consequence: PyAutoHands#198 taught the authoritative executor -(`autohands/build_util.py::execute_notebook`) to treat a clean `SystemExit: 0` -notebook exit as a PASS (the optional-dep skip-guard idiom), but the 9 smoke -copies still carry their own `execute_notebook` and keep reporting the -spurious FAIL until each adopts it. Adoption is ~2 lines per repo (they -already import `env_config` and `build_util.py_to_notebook` from PyAutoHands); -the exact snippet + full copy inventory is documented in -PyAutoHands `docs/internals.md`. - -## Correction (2026-08-05, measured during the jupyter-guard fix) - -Measured across the checkouts, not inferred. There are **10** copies, not 9, -and they are **three different programs**, not five revisions of one: - -| Variant | Repos | Lines | Notebook leg | `is_clean_skip_exit` | -|---|---|---|---|---| -| **workspace** | autofit_workspace, autogalaxy_workspace, autolens_workspace | ~266 | yes | **already adopted** | -| **workspace_test** | autofit_workspace_test, autogalaxy_workspace_test, autocti_workspace_test | 113 | no | n/a | -| **workspace_test + timeout** | autolens_workspace_test | 193 | no | n/a | -| **HowTo** | HowToLens, HowToGalaxy, HowToFit | 75 | no | n/a | - -Consequences for the original task, in order of how much they change it: - -1. **Step 1 is done, and was never applicable beyond three repos.** The - skip-guard is adopted in all three notebook-capable copies. The other seven - have no `execute_notebook` at all — they never shell out to `jupyter`, so - there is no spurious FAIL for them to fix. The acceptance criterion "a - notebook exiting via the skip-guard passes every workspace's PR smoke gate" - is already met, because only three gates run notebooks. -2. **The variants differ by feature, not only by drift.** `workspace_test` - exposes `load_smoke_scripts`/`run_one` and no notebook machinery; - `autolens_workspace_test` additionally carries `TIMEOUT_SECS` - (`BUILD_SCRIPT_TIMEOUT`) and a `_kill_group` process-group kill that no - other copy has. That is a capability, not staleness — a naive - "make them byte-identical" would delete it. -3. **The HowTo tier is already the proposed end-state.** Those three are - 75-line delegators (`PROJECT = "howtolens"`, straight into PyAutoHands - `build_util`) — the thin-wrapper design step 2 asks whether to build - already exists in-tree as a working precedent to copy. -4. Real remaining drift inside the workspace variant is now **two lines**: - autofit_workspace and autolens_workspace are byte-identical; autogalaxy's - only divergence is an unused `_BUILD_DIR` intermediate variable. The - jupyter-guard fix (autolens_workspace#470) landed the identical patch in all - three, so it did not widen this. - -## Task (re-scoped) - -1. ~~Roll the 2-line skip-guard adoption across the copies.~~ **Done** — verify - and close out, do not redo. -2. Decide the shared-module question **per variant**, not globally, using the - HowTo delegator as the reference shape: - - Is one PyAutoHands-owned runner with per-repo config the right target, or - two (notebook-capable and script-only)? - - Does `autolens_workspace_test`'s timeout/kill behaviour get promoted to - everyone, or does that repo keep a documented divergence? **Answer this - before writing any code** — it is the only place consolidation destroys - behaviour. -3. Implement whichever shape is chosen, one PR per repo. -4. Drop the vestigial `_BUILD_DIR` line in autogalaxy_workspace if the - workspace variant is not being replaced wholesale. - -## Acceptance - -- A stated, written decision on the timeout/kill divergence — promoted or - documented-as-intentional — before any repo is touched. -- Each variant is either a thin wrapper over a PyAutoHands-owned module, or - carries a documented reason why it diverges. -- No repo loses behaviour it has today; `autolens_workspace_test` still - enforces its per-script timeout.