diff --git a/complete/2026/08/smoke-install-stale-jax-pin.md b/complete/2026/08/smoke-install-stale-jax-pin.md new file mode 100644 index 00000000..19c394c6 --- /dev/null +++ b/complete/2026/08/smoke-install-stale-jax-pin.md @@ -0,0 +1,168 @@ +## smoke-install-stale-jax-pin +- issue: https://github.com/PyAutoLabs/autolens_workspace_test/issues/266 +- completed: 2026-08-23 +- workspace-pr: https://github.com/PyAutoLabs/autolens_workspace_test/pull/268 (merged a97f052) +- sibling-pr: autogalaxy_workspace_test — companion PR, identical change; its smoke_install.sh on main carries the same JAXCHECK block +- summary: Dropped the vestigial `jax<0.7 jaxlib<0.7` pin from smoke_install.sh. Added in #82 solely to keep tensorflow-probability==0.25.0 importable; #184 removed that dependency for tfp-nightly and left the pin behind. Not inert: jax is a base dep of autonerves (>=0.7.0,<0.12.0), so the pin downgraded a conforming install to 0.6.2 and only the following `[optional]` re-resolution pulled it back to 0.10.2 — CI green by line ordering, not by constraint. Replaced with a #82→#184 trail comment plus a JAXCHECK heredoc asserting the resolved version in [0.7.0, 0.12.0). +- mind-drift: shipped without touching Mind state; retired to complete/ on 2026-08-27 after the still-live dashboard chip caused a re-pick. See the close-out note below. + +`autolens_workspace_test/.github/scripts/smoke_install.sh` pinned +`jax<0.7 jaxlib<0.7`. The pin was added in #82 for exactly one reason, stated in +its own commit message: keeping `tensorflow-probability==0.25.0` importable, +since `tfp.substrates.jax` referenced `jax.interpreters.xla.pytype_aval_mappings`, +removed in JAX 0.7.0. #184 then deleted `pip install tensorflow-probability==0.25.0` +when the stack moved to `tfp-nightly` (pinned by `PyAutoArray[optional]`, whose +own comment documents the nightly as the `jax>=0.7`-compatible one). The pin +outlived the dependency it protected. + +The framing that made it worth fixing rather than shrugging at: it was **not +inert**. `jax` is a *base* dependency of `autonerves` (`jax>=0.7.0,<0.12.0`, +PyAutoLens#702), so the preceding line already installed a conforming jax; the +pin then downgraded it to 0.6.2 — a configuration the stack does not claim to +support — and only the *following* `[optional]` re-resolution pulled it back to +0.10.2. CI was green by **line ordering, not by constraint**. Reordering those +two lines, or a change in what the extras resolve, would have dropped the whole +smoke suite onto jax 0.6.2 silently, surfacing as unexplained smoke breakage +rather than as an install error. + +## PRs + +- autolens_workspace_test#268 → `a97f052` (issue autolens_workspace_test#266 closed), + branch `feature/smoke-install-stale-jax-pin`, merged 2026-08-23. +23/−1, one file. +- `autogalaxy_workspace_test` carried the identical line and was fixed in a + companion PR; its `smoke_install.sh` on `main` now carries the same `JAXCHECK` + block. + +## The fix + +Delete the pin and let `autonerves`' base requirement govern. In its place: + +1. A comment recording the #82 → #184 trail, so the pin is not reintroduced by + someone reading the file cold. +2. A `JAXCHECK` heredoc appended after the final + `pip install --force-reinstall --no-deps ./PyAutoNerves`, asserting + `(0, 7) <= (major, minor) < (0, 12)` on the resolved `jax.__version__` and + printing it to the CI log. With `set -e` at the top, a violation aborts the + install step. + +The `tfp-nightly` NOTE block and the trailing `--force-reinstall --no-deps +./PyAutoNerves` were preserved verbatim — both remain accurate. + +Two decisions worth not "simplifying" later: + +- **Deleted, not rewritten as an honest `jax>=0.7,<0.12`.** A second copy of the + constraint drifts, and this one already had: the range was `<0.11` when the + defect was filed and `<0.12` by the time it was fixed. The assertion checks the + range without owning it. +- **The guard compares a major/minor tuple, not `packaging.version`.** It runs + inside the install epilogue, where an undeclared import would fail the install + rather than fail softly. `import jax` is deliberately unguarded: the workflow + runs on `ubuntu-latest`, where `autonerves`' platform marker always installs + jax, so an absent jax is itself worth catching. That would need softening only + if this workflow ever ran on Intel macOS. + +## Verification + +The PR's own Smoke Tests run **is** the from-scratch install replay the prompt +asked for; the guard is what turns it from an inference into a check. Before +that: `bash -n` clean; the guard executed as a real bash heredoc against a stub +`jax` (`0.10.2` prints and exits 0; `0.6.2` and `0.12.0` exit 1 with the +explanatory message); boundary cases `0.7.0`/`0.9.0`/`0.10.2`/`0.11.4` pass and +`0.6.2`/`0.12.0`/`1.0.0` fail. + +## Sibling sweep (the prompt's scope item 4) + +`autocti_workspace_test` and `autofit_workspace_test` were checked at fix time +and carry no jax pin. Re-confirmed at close-out: an org-wide code search for +`jaxlib<0.7` across PyAutoLabs returns **no live script** — only this prompt's +own text in PyAutoMind and one prose mention in +`complete/2026/08/jax-grad-local-vs-ci-assertions.md`. + +## Close-out note: this record is late, and why + +The task shipped on 2026-08-23 without ever touching Mind state — no `active.md` +entry, no `active/` move, no record. The prompt sat in +`draft/maintenance/ci/` and kept rendering on `dashboard.md` as pickable +backlog with a live `/start_dev` chip, which is how it came to be picked again on +2026-08-27. Nothing downstream could tell the difference: as `AGENTS.md` notes, +a shipped-but-unretired prompt renders faithfully and no workflow detects it. +`lifecycle.py check` did not catch it either — its invariant is that no +`active.md` slug has a record, and this task was in neither place. + +The re-pick cost only a verification pass, because the prompt named the file and +the file's current contents were the answer. The generalisable check for the next +one: before opening an issue, read the prompt's own target file on `main`. If the +defect it describes is not there, look for the merged PR before doing anything +else. + +## Original prompt + +# smoke_install.sh's stale `jax<0.7` pin — CI is on the right jax by accident + +Type: maintenance +Target: ci +Repos: +- @autolens_workspace_test +Difficulty: low +Autonomy: supervised +Priority: medium +Status: formalised +Filed: 2026-08-22 (backfilled from git) + +Found 2026-08-22 while building a CI-equivalent environment to reproduce +autolens_workspace_test#260. Latent — CI is green today — but it is green for the +wrong reason. + +## The defect + +`autolens_workspace_test/.github/scripts/smoke_install.sh:9`: + +```bash +pip install "jax<0.7" "jaxlib<0.7" +``` + +Replaying the install script verbatim, that line **downgrades jax to 0.6.2** and +raises a resolver conflict against autonerves' own requirement: + +``` +autonerves 9999.0.0.dev0 requires jax<0.11.0,>=0.7.0; ... but you have jax 0.6.2 +which is incompatible. +Successfully installed jax-0.6.2 jaxlib-0.6.2 +``` + +The install only ends up on the intended **0.10.2** because the *next* line's +`[optional]` extras happen to pull it back up: + +```bash +pip install "./PyAutoArray[optional]" "./PyAutoGalaxy[optional]" "./PyAutoLens[optional]" +``` + +## Why it matters + +The pin no longer expresses the intent it was written for, and the correct +outcome now depends on line ordering rather than on the constraint. Any +reordering of those two lines, or a change to what the `[optional]` extras +resolve, would silently drop the entire smoke suite onto jax 0.6.2 — and because +`autonerves` declares `jax>=0.7`, that is a configuration the stack does not +claim to support. The failure would surface as unexplained smoke breakage, not as +an install error. + +The comment block immediately below that line (about `tfp-nightly` vs +`tensorflow-probability`) is still accurate and should be preserved. + +## Suggested scope + +1. Establish what the `jax<0.7` pin was originally protecting against, and whether + that reason still holds — do not simply delete it because it looks stale. +2. Either remove it (letting `autonerves`' `jax<0.11.0,>=0.7.0` govern) or replace + it with a pin that states the real intended range. +3. Verify by replaying the install from scratch and asserting the resolved jax + version, rather than inferring it from a green run. +4. Check whether sibling workspaces' install epilogues carry the same stale pin. + + + + diff --git a/complete/index.md b/complete/index.md index 840b5f1f..8d06832e 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. -1168 records across 7 buckets. +1169 records across 7 buckets. ## Highlights @@ -253,6 +253,7 @@ _(curate hard-won records here — survives regeneration.)_ - [small-datasets-loader-pixel-scales](2026/08/small-datasets-loader-pixel-scales.md) - [small-datasets-regime-stamp](2026/08/small-datasets-regime-stamp.md) - [small-datasets-rmtree-committed-data](2026/08/small-datasets-rmtree-committed-data.md) +- [smoke-install-stale-jax-pin](2026/08/smoke-install-stale-jax-pin.md) — Dropped the vestigial `jax<0.7 jaxlib<0.7` pin from smoke_install.sh. Added in #82 solely to keep tensorflow-p… - [smoke-runner-delegation](2026/08/smoke-runner-delegation.md) - [smoke-runner-jupyter-guard](2026/08/smoke-runner-jupyter-guard.md) - [smoke-surface-retime-sweep](2026/08/smoke-surface-retime-sweep.md) diff --git a/dashboard.html b/dashboard.html index 63741c99..d116c46b 100644 --- a/dashboard.html +++ b/dashboard.html @@ -272,12 +272,13 @@

Planned markdown version

134 filed prompts, not started — sorted most-pickable first (priority, then size). 24 of them belong to an epic and are listed only under Epics below.

-feature — 30 +feature — 31

Numba CPU likelihood phase 1: batched MGE convolution + operated-matrix caching✨ featureautoarraymediumsupervisedhigh

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

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

Which other searches need prior-support handling — coverage audit after Prodigy✨ featureautofitmediumsupervisedmedium

Give PyAutoFit searches a seed — today no search can be made…✨ featureautofitmediumsupervisedmedium

+

intake reconcile cannot see a prompt that shipped with no Mind-side trace✨ featurepyautobrainmediumsupervisedmedium

Board phase 2: the remaining four legs onto the seam✨ featurepyautobrainsmallsupervisednormal

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

intake reconcile should score prompts against each other, not only against records✨ featurepyautobrainsmallsafenormal

@@ -323,8 +324,7 @@

Backlog

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

-maintenance — 21 -

smoke_install.sh's stale jax<0.7 pin — CI is on the right jax…🧹 maintenancecilowsupervisedmedium

+maintenance — 20

autolens_workspace_developer rectangular experiments — Gut stash + rename🧹 maintenanceautolens_workspace_developersmallsupervisednormal

Two organs are missing this session's fixes, and the hook still ships…🧹 maintenanceorganssmallsupervisednormal

Mirror drifted library config keys into the workspace configs🧹 maintenanceworkspacessmallsupervisednormal

@@ -419,6 +419,12 @@

Backlog 2026-08-27 +filed +intake reconcile cannot see a prompt that shipped with no Mind-side… + + + +2026-08-27 issued Why does XLA CPU's Eigen thread pool wedge on the multi_dataset vmap… @@ -465,7 +471,7 @@

Backlog Cross-validate multi-plane ray tracing - + 2026-08-27 filed Board phase 2: the remaining four legs onto the seam @@ -534,12 +540,6 @@

Backlog 2026-08-22 filed -smoke_install.sh's stale jax<0.7 pin — CI is on the right jax… - - - -2026-08-22 -filed The reconstruction noise map describes a different estimator than the… diff --git a/dashboard.md b/dashboard.md index 7bc2fff7..58da6de5 100644 --- a/dashboard.md +++ b/dashboard.md @@ -264,7 +264,7 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned. **134** filed prompts, not started. Each section is sorted most-pickable first (priority, then size). **24** of them belong to an epic and are listed only under [Epics](#epics) below.
-feature — 30 +feature — 31
📋 Numba CPU likelihood phase 1: batched MGE convolution + operated-matrix caching — autoarray · medium · supervised · high @@ -306,6 +306,14 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.
+
📋 intake reconcile cannot see a prompt that shipped with no Mind-side trace — pyautobrain · medium · supervised · medium + +``` +/start_dev draft/feature/pyautobrain/intake_reconcile_absence_signal.md +``` + +
+
📋 Board phase 2: the remaining four legs onto the seam — pyautobrain · small · supervised · normal ``` @@ -634,15 +642,7 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned.
-maintenance — 21 - -
📋 smoke_install.sh's stale jax<0.7 pin — CI is on the right jax… — ci · low · supervised · medium - -``` -/start_dev draft/maintenance/ci/smoke_install_stale_jax_pin.md -``` - -
+maintenance — 20
📋 autolens_workspace_developer rectangular experiments — Gut stash + rename — autolens_workspace_developer · small · supervised · normal @@ -1195,6 +1195,7 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | Date | Event | Task | |------|-------|------| | 2026-08-27 | filed | intake reconcile should score prompts against each other, not only… | +| 2026-08-27 | filed | intake reconcile cannot see a prompt that shipped with no Mind-side… | | 2026-08-27 | issued | Why does XLA CPU's Eigen thread pool wedge on the multi_dataset vmap… | | 2026-08-27 | filed | Two organs are missing this session's fixes, and the hook still ships… | | 2026-08-27 | filed | Should TransformedMessage carry its own support, rather than the… | @@ -1203,12 +1204,12 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 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 | Cross-validate multi-plane ray tracing | -| 2026-08-27 | filed | Board phase 2: the remaining four legs onto the seam |
… 10 more (40 left) | Date | Event | Task | |------|-------|------| +| 2026-08-27 | filed | Board phase 2: the remaining four legs onto the seam | | 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 | @@ -1218,13 +1219,12 @@ The 50 newest things to happen to the work in hand, newest first — issued, par | 2026-08-24 | filed | Heart's local smoke runner cannot run any CTI workspace — no autocti… | | 2026-08-23 | filed | pynufft removal: unswept downstream residue (1 hard break + stale… | | 2026-08-23 | filed | Phase 3: stop installing pynufft in Hands/Heart CI and PyAutoCTI… | -| 2026-08-23 | filed | Brain board follow-ups: what real mornings surface |
… 10 more (30 left) | Date | Event | Task | |------|-------|------| -| 2026-08-22 | filed | smoke_install.sh's stale jax<0.7 pin — CI is on the right jax… | +| 2026-08-23 | filed | Brain board follow-ups: what real mornings surface | | 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… | diff --git a/draft/feature/pyautobrain/intake_reconcile_absence_signal.md b/draft/feature/pyautobrain/intake_reconcile_absence_signal.md new file mode 100644 index 00000000..0041fdd6 --- /dev/null +++ b/draft/feature/pyautobrain/intake_reconcile_absence_signal.md @@ -0,0 +1,84 @@ +# `intake reconcile` cannot see a prompt that shipped with no Mind-side trace + +Type: feature +Target: pyautobrain +Repos: +- @PyAutoBrain +Difficulty: medium +Autonomy: supervised +Priority: medium +Status: formalised +Filed: 2026-08-27 + +Add the inverted signal: a prompt quoting a literal line that is GONE upstream. + +Found 2026-08-27 by re-picking draft/maintenance/ci/smoke_install_stale_jax_pin.md +via /start_dev. The prompt had shipped four days earlier +(autolens_workspace_test#266, closed by PR #268, a97f052, merged 2026-08-23) and +had never been retired: no active.md entry, no active/ move, no complete/ record. +It kept rendering on dashboard.md as pickable backlog with a live /start_dev chip, +which is exactly how it got picked again. + +Nothing detects this class today. Two guards were checked directly against the +restored prompt: + +1. `lifecycle.py check` — its invariant is that no active.md slug has a record. + A task that skips Mind state entirely is in NEITHER place, so the check passes. +2. `pyauto-brain intake reconcile` — every signal it emits (`referenced`, + `record-says-shipped`, `shared-identifiers`, `rare-topic-overlap`, + `stale-status`) needs a Mind-side trace. With the prompt restored, + `intake reconcile maintenance/ci` did not flag it. Neither did + `intake reconcile maintenance/ci --repo autolens_workspace_test`, pointed + straight at the right repo reading its live source: **0 suspects of 132 + scanned**. + +## Why --repo missed it + +`--repo` tests PRESENCE: "the prompt NAMES things that exist upstream". This +prompt names `smoke_install.sh`, which does still exist — so presence tells you +nothing. + +The defect this prompt described was an ABSENCE. It quoted a literal line: + +```bash +pip install "jax<0.7" "jaxlib<0.7" +``` + +That line is gone from upstream. A backlog prompt quoting a literal code line +that no longer exists in the file it names is close to a proof the work shipped — +far stronger than the presence signal already implemented, and it fires precisely +in the no-Mind-side-trace case the existing signals are blind to. + +## Suggested scope + +1. Add an absence signal to `intake reconcile --repo`: for each fenced code block + or backticked line in the prompt that looks like source (not prose), check + whether it still occurs in the file the prompt names. Quoted-and-now-absent + ranks higher than any current signal. +2. Keep it in the existing `needs-review` band and keep retirement human — the + same guard rail reconcile already states. A quoted line can vanish for reasons + other than the prompt shipping (an unrelated refactor, a reworded quote), so + this ranks for review, it does not retire. +3. Consider whether the prompt's `Repos:` header should drive the upstream target + automatically. Here the target FOLDER was `ci` (not a repo, so `--repo` is + refused and must be passed by hand) while the header named + `@autolens_workspace_test`. The header had the answer the flag had to be told. +4. Decide whether anything should run this on a schedule. Today reconcile is + on-demand and read-only, so the drift persists silently until someone re-picks + the prompt — which is a working detector, just an expensive one. + +Not in scope: closing the loop by having the ship skills record Mind state. That +is the upstream cause and deserves its own prompt if it is worth chasing; this one +is about detecting the drift that already exists. + + + + diff --git a/draft/maintenance/ci/smoke_install_stale_jax_pin.md b/draft/maintenance/ci/smoke_install_stale_jax_pin.md deleted file mode 100644 index 0431db40..00000000 --- a/draft/maintenance/ci/smoke_install_stale_jax_pin.md +++ /dev/null @@ -1,69 +0,0 @@ -# smoke_install.sh's stale `jax<0.7` pin — CI is on the right jax by accident - -Type: maintenance -Target: ci -Repos: -- @autolens_workspace_test -Difficulty: low -Autonomy: supervised -Priority: medium -Status: formalised -Filed: 2026-08-22 (backfilled from git) - -Found 2026-08-22 while building a CI-equivalent environment to reproduce -autolens_workspace_test#260. Latent — CI is green today — but it is green for the -wrong reason. - -## The defect - -`autolens_workspace_test/.github/scripts/smoke_install.sh:9`: - -```bash -pip install "jax<0.7" "jaxlib<0.7" -``` - -Replaying the install script verbatim, that line **downgrades jax to 0.6.2** and -raises a resolver conflict against autonerves' own requirement: - -``` -autonerves 9999.0.0.dev0 requires jax<0.11.0,>=0.7.0; ... but you have jax 0.6.2 -which is incompatible. -Successfully installed jax-0.6.2 jaxlib-0.6.2 -``` - -The install only ends up on the intended **0.10.2** because the *next* line's -`[optional]` extras happen to pull it back up: - -```bash -pip install "./PyAutoArray[optional]" "./PyAutoGalaxy[optional]" "./PyAutoLens[optional]" -``` - -## Why it matters - -The pin no longer expresses the intent it was written for, and the correct -outcome now depends on line ordering rather than on the constraint. Any -reordering of those two lines, or a change to what the `[optional]` extras -resolve, would silently drop the entire smoke suite onto jax 0.6.2 — and because -`autonerves` declares `jax>=0.7`, that is a configuration the stack does not -claim to support. The failure would surface as unexplained smoke breakage, not as -an install error. - -The comment block immediately below that line (about `tfp-nightly` vs -`tensorflow-probability`) is still accurate and should be preserved. - -## Suggested scope - -1. Establish what the `jax<0.7` pin was originally protecting against, and whether - that reason still holds — do not simply delete it because it looks stale. -2. Either remove it (letting `autonerves`' `jax<0.11.0,>=0.7.0` govern) or replace - it with a pin that states the real intended range. -3. Verify by replaying the install from scratch and asserting the resolved jax - version, rather than inferring it from a green run. -4. Check whether sibling workspaces' install epilogues carry the same stale pin. - - - -