Skip to content

Commit a0817b2

Browse files
committed
prompt: complete claude-session-python-312-default — 35/37 repos on 3.12
Every Claude Code web/mobile session container now defaults to Python 3.12 instead of the image's 3.11, in 35 of the 37 repos in the body map: one canonical policy/session_start_hook.sh, installed and drift-checked by repos_sync.py, carrying blob f2d3154 identically everywhere. Records what shipped, what was deliberately left alone (the /usr/bin alternatives — conan is 3.11-only there), and the two repos this session's credential cannot reach (euclid_assistant, admin_jammy), which stay on 3.11 until someone with access runs --write against a checkout. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NcfSv6NpEuQcApGCZME3uW
1 parent cda552e commit a0817b2

5 files changed

Lines changed: 32 additions & 162 deletions

File tree

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
- issue: none — filed, planned and shipped inside one mobile session (2026-08-25); no GitHub issue was opened.
2+
- completed: 2026-08-25
3+
- prompt: draft/maintenance/ci/claude_session_python_311_default.md (audit + plan; removed by this record)
4+
- what shipped: every Claude Code web/mobile session container now runs Python 3.12 instead of the image's 3.11 default, in 35 of the 37 repos in `repos.yaml`. `policy/session_start_hook.sh` is the single source; `scripts/repos_sync.py --write` installs it as `<repo>/.claude/hooks/session-start.sh` (mode 100755) plus a `.claude/settings.json` SessionStart registration, and `--check` fails on a missing, non-executable, edited or unregistered copy ("session-start hooks (generated)"). Same one-source/N-copies shape as `policy/never_rewrite_history.md`. Every repo carries blob f2d3154 — identical everywhere by construction.
5+
- what the hook does, on three surfaces: (1) a 3.12 venv at `$HOME/.pyauto/session-py312` first on PATH — `python`, `python3`, `pip`, `pytest`; (2) `/usr/local/bin/python{,3}` repointed at 3.12, so a subprocess with a scrubbed environment gets 3.12 too; (3) the uv-managed tools (black, flake8, mypy, poetry, pyright, ruff) rebuilt on 3.12 **pinned to their installed versions** — an unpinned `uv tool install --force` moved mypy 1.19 -> 2.3 on the first run, a lint-behaviour change riding in on a Python upgrade.
6+
- deliberately NOT touched: the `update-alternatives` links under `/usr/bin`. Scripts with a literal `#!/usr/bin/python3` shebang follow those, and some image tools (conan) are installed for 3.11 only — flipping breaks them for no gain the three surfaces above don't already give. Verified after the change: `conan --version` still works.
7+
- why it mattered: the container's `pytest` was a uv tool on 3.11 with **no PyYAML**, so the Brain suite could not even be collected (`agents/faculties/sizing/_sizing.py` reads the body map at import). Sessions were the organism's only 3.11 surface — Mind CI runs 3.12/3.13, Brain CI 3.12+3.13 — i.e. the place code is written sat below the floor its own gates enforce.
8+
- the image's own switcher is a trap: `use-python 3.12` moves the alternatives under `/usr/bin` and prints `Switched to Python 3.12` followed by its own check reading `Python 3.11.15`, because `/usr/local/bin/python{,3}` (PATH slot 10) shadow `/usr/bin` (slot 12). Measured, not inferred.
9+
- per-repo dependencies: a repo needing more than pytest + PyYAML declares them in its own `.claude/session-python.txt` (one pip argument per line; `-e .`, a spec, `-r requirements.txt`), which the hook installs additively into the shared venv behind a checksum marker. Deliberately outside the hook so the copies stay byte-identical and the drift check stays meaningful. No repo declares one yet — that is the open follow-up for the library/workspace repos, whose suites need more than the base pair.
10+
- validation: cold run 16.7s, warm rerun 0.6s (second repo in the same session); after it, `python3`/`python`/`pip`/`pytest`/`black`/`flake8`/`mypy`/`poetry`/`pyright`/`ruff` all report 3.12 and `python3 -m venv` builds 3.12 venvs. Mind 197 passed (10 new drift-check tests, each proven to fail against the unfixed state), Brain 494 passed — the latter having been uncollectable on 3.11. Remote spot-check: mode 100755 survived the push.
11+
- NOT covered — needs access, not work: `euclid_assistant` and `admin_jammy` (2 of 37) — this session's GitHub credential has no access to either, so their sessions stay on 3.11 until someone with access runs `repos_sync.py --write` against a checkout.
12+
- follow-ups (unclaimed): (i) `.claude/session-python.txt` for the library and workspace repos once someone measures a real install (JAX/numpy sets will not be free at session start, and may want async mode); (ii) an environment-level setup script on the Claude Code web environment would make the per-repo file unnecessary — worth checking whether that surface exists before the next repo joins the map; (iii) a new repo added to `repos.yaml` gets the hook only when someone runs `--write` with it checked out — the drift check catches the omission but only for checked-out repos.

complete/index.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Token-light navigation over the finished-work records (schema:
66
only then grep a dated bucket. Curators: edit the band between the CURATED
77
markers; everything below GENERATED is rebuilt.
88

9-
1129 records across 7 buckets.
9+
1130 records across 7 buckets.
1010

1111
<!-- CURATED:START -->
1212
## Highlights
@@ -43,6 +43,7 @@ _(curate hard-won records here — survives regeneration.)_
4343
- [brain-readability-pass](2026/08/brain-readability-pass.md) — auto-closed on merge
4444
- [bump-autonerves-floor](2026/08/bump-autonerves-floor.md)
4545
- [circular-ell-comps-image-gradient](2026/08/circular-ell-comps-image-gradient.md) — Replaced the Sersic image path's Cartesian-to-polar ellipticity conversion with an algebraically equivalent Ca…
46+
- [claude-session-python-312-default](2026/08/claude-session-python-312-default.md)
4647
- [cli-noise-autonerves-batch](2026/08/cli-noise-autonerves-batch.md)
4748
- [cli-noise-pyautofit-batch](2026/08/cli-noise-pyautofit-batch.md)
4849
- [clipper-in-search-identifier](2026/08/clipper-in-search-identifier.md) — decided: option 2 — the clipper enters the MLE identifiers

dashboard.html

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@
185185
</head>
186186
<body>
187187
<header class="hero"><span class="orb"><svg class="mark" viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="24" cy="24" r="20.4"/><path d="M20.2,37.6 L20.2,33.6 C20.2,32.4 19.4,31.6 18.4,30.8 C16.8,29.6 15.8,28.2 15.6,26.6 C15.5,25.6 14.9,25.2 13.9,24.9 C12.6,24.5 12.3,23.7 13.0,22.7 C13.8,21.6 14.5,20.6 14.6,19.4 C15.0,15.4 18.2,12.2 22.4,11.8 C27.2,11.3 31.6,14.6 32.3,19.2 C32.8,22.4 31.6,25.0 30.6,27.0 C29.9,28.4 29.6,29.6 29.6,31.2 L29.6,37.6"/><circle cx="24.6" cy="19.6" r="4.4"/><path d="M22.5,19.7 L24.0,21.3 L26.8,18.1"/><path d="M34.2,16.5 L38.8,16.5 M35.2,21.0 L39.4,21.0 M33.6,25.5 L37.2,25.5"/><g fill="currentColor" stroke="none"><circle cx="40.1" cy="16.5" r="1.4"/><circle cx="40.7" cy="21.0" r="1.4"/><circle cx="38.5" cy="25.5" r="1.4"/></g></svg></span><h1>PyAuto<b>Mind</b><span class="kind">Dashboard</span></h1><div class="rule"></div><p class="tag">Intent. Priority. Flow.</p></header><p class="lede">Every task the Mind is holding. Tap a task's 📋 and its <code>/start_dev</code> command is on your clipboard — paste it into a Claude Code chat to route Claude straight to that task. <a href="#recent">Recent</a> is the same work by date — what has been happening rather than what to do next.</p>
188-
<ul class="stats"><li><b>1</b><span>In flight</span></li><li><b>3</b><span>Parked</span></li><li><b>5</b><span>Planned</span></li><li><b>141</b><span>Backlog</span></li></ul>
188+
<ul class="stats"><li><b>1</b><span>In flight</span></li><li><b>3</b><span>Parked</span></li><li><b>5</b><span>Planned</span></li><li><b>140</b><span>Backlog</span></li></ul>
189189
<div class="fresh"><p><b>Last updated 2026-08-25.</b> This page is generated from <code>active/</code>, <code>draft/</code> and the registry files, so it is only as current as they are. <code>dashboard_refresh.yml</code> re-renders it on every push to <code>main</code> — that heals a stale page, but not a stale prompt: a task that shipped without its prompt advancing to <code>complete/</code> keeps rendering here as pickable backlog. Reconciling those is the refresh below.</p>
190190
<div class="task"><button class="copy" data-cmd="Bring the PyAutoMind dashboard up to date. Work in the PyAutoMind checkout:
191191
@@ -251,7 +251,7 @@ <h2>Planned <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/blob
251251
<div class="task"><button class="copy" data-cmd="/route start the planned PyAutoMind task latent-nan-guard-honest-run — its record is in planned.md" aria-label="Copy the Claude command">📋</button><p><b>latent-nan-guard-honest-run</b><span class="facets"> — planned 2026-07-22</span></p></div>
252252
</details>
253253
<h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree/main/draft">markdown version</a></h2>
254-
<p class="muted">141 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.</p>
254+
<p class="muted">140 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.</p>
255255
<details>
256256
<summary>feature — 27</summary>
257257
<div class="task"><button class="copy" data-cmd="/start_dev draft/feature/autoarray/numba_cpu_likelihood_mge_convolution_and_caching.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/feature/autoarray/numba_cpu_likelihood_mge_convolution_and_caching.md">Numba CPU likelihood phase 1: batched MGE convolution + operated-matrix caching</a><span class="tags"><span class="pill w">✨ feature</span><span class="pill">autoarray</span><span class="pill n">medium</span><span class="pill n">supervised</span><span class="pill r">high</span></span></p></div>
@@ -308,7 +308,7 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
308308
<div class="task"><button class="copy" data-cmd="/start_dev draft/bug/autolens/interferometer_release_leg_oom.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/bug/autolens/interferometer_release_leg_oom.md">interferometer/start_here.py OOM in nightly release-validation integrate leg</a><span class="tags"><span class="pill w">🐛 bug</span><span class="pill">autolens</span></span></p></div>
309309
</details>
310310
<details>
311-
<summary>maintenance — 26</summary>
311+
<summary>maintenance — 25</summary>
312312
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/ci/autocti_workspace_navigator_check.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/ci/autocti_workspace_navigator_check.md">autocti_workspace has no Navigator Check, so its CI can never roll…</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">ci</span><span class="pill n">medium</span><span class="pill n">supervised</span><span class="pill r">high</span></span></p></div>
313313
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/libraries/untrack_generated_fits_test_artifacts.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/libraries/untrack_generated_fits_test_artifacts.md">Untrack the generated FITS test artifacts in autoarray</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">libraries</span><span class="pill n">small</span><span class="pill n">supervised</span><span class="pill n">medium</span></span></p></div>
314314
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/ci/smoke_install_stale_jax_pin.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/ci/smoke_install_stale_jax_pin.md">smoke_install.sh's stale <code>jax&lt;0.7</code> pin — CI is on the right jax…</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">ci</span><span class="pill n">low</span><span class="pill n">supervised</span><span class="pill n">medium</span></span></p></div>
@@ -319,7 +319,6 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
319319
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/workspaces/unpark_imaging_scaling_relation_slam.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/workspaces/unpark_imaging_scaling_relation_slam.md">Un-park imaging/features/scaling_relation/slam once PyAutoArray#431 merges</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">workspaces</span><span class="pill n">small</span><span class="pill n">supervised</span><span class="pill n">normal</span></span></p></div>
320320
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/workspaces/unpark_multi_galaxy_scaling_relation_slam.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/workspaces/unpark_multi_galaxy_scaling_relation_slam.md">Un-park multi_galaxy/features/scaling_relation/slam once a capped run passes</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">workspaces</span><span class="pill n">small</span><span class="pill n">supervised</span><span class="pill n">normal</span></span></p></div>
321321
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/autolens_workspace_developer/stale_api_rot_audit.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/autolens_workspace_developer/stale_api_rot_audit.md">autolens_workspace_developer: broad stale-API rot (56 symbols, no CI)</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">autolens_workspace_developer</span><span class="pill n">medium</span><span class="pill n">supervised</span><span class="pill n">normal</span></span></p></div>
322-
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/ci/claude_session_python_311_default.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/ci/claude_session_python_311_default.md">Claude web/mobile session containers default to Python 3.11 — below the organism's…</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">ci</span><span class="pill n">medium</span><span class="pill n">supervised</span><span class="pill n">normal</span></span></p></div>
323322
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/ci/heart_smoke_table_autocti.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/ci/heart_smoke_table_autocti.md">Heart's local smoke runner cannot run any CTI workspace — no autocti…</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">ci</span><span class="pill n">medium</span><span class="pill n">supervised</span><span class="pill n">normal</span></span></p></div>
324323
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/ci/run_smoke_copy_drift.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/ci/run_smoke_copy_drift.md">run_smoke.py: three runner variants across 10 repos, no sync mechanism</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">ci</span><span class="pill n">medium</span><span class="pill n">supervised</span><span class="pill n">normal</span></span></p></div>
325324
<div class="task"><button class="copy" data-cmd="/start_dev draft/maintenance/ci/wiki_currency_check_version_gate.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/ci/wiki_currency_check_version_gate.md">wiki-currency's --check-version gate rots on every library main merge</a><span class="tags"><span class="pill w">🧹 maintenance</span><span class="pill">ci</span><span class="pill n">medium</span><span class="pill n">supervised</span><span class="pill n">normal</span></span></p></div>
@@ -399,12 +398,6 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
399398
<p class="muted">The 50 newest things to happen to the work in hand, newest first — issued, parked, filed. Every other section on this page is laid out by state, which is exactly why none of them can answer “what has been happening?”. Shipped work is not here: it is read from <code>complete/index.md</code>, and a thousand records deep it would crowd out everything anyone can still act on. Showing the newest 10; … opens the next 10.</p>
400399
<table class="recent">
401400
<tr>
402-
<td class="when">2026-08-25</td>
403-
<td class="what">filed</td>
404-
<td><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/ci/claude_session_python_311_default.md">Claude web/mobile session containers default to Python 3.11 — below…</a></td>
405-
<td class="pick"><button class="copy" data-cmd="/start_dev draft/maintenance/ci/claude_session_python_311_default.md" aria-label="Copy the Claude command">📋</button></td>
406-
</tr>
407-
<tr>
408401
<td class="when">2026-08-24</td>
409402
<td class="what">filed</td>
410403
<td><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/ci/wiki_currency_check_version_gate.md">wiki-currency's --check-version gate rots on every library main merge</a></td>
@@ -458,7 +451,7 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
458451
<td><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/workspaces/pynufft_removal_downstream_residue.md">pynufft removal: unswept downstream residue (1 hard break + stale…</a></td>
459452
<td class="pick"><button class="copy" data-cmd="/start_dev draft/maintenance/workspaces/pynufft_removal_downstream_residue.md" aria-label="Copy the Claude command">📋</button></td>
460453
</tr>
461-
<tr hidden>
454+
<tr>
462455
<td class="when">2026-08-23</td>
463456
<td class="what">filed</td>
464457
<td><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/maintenance/workspaces/pynufft_removal_downstream_residue_phase_3_ci_install_docs.md">Phase 3: stop installing pynufft in Hands/Heart CI and PyAutoCTI…</a></td>
@@ -698,6 +691,12 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
698691
<td><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/triage/nightly_release_blocked_eight_nights.md">Nightly release has been blocked 8 nights running — triage the streak</a></td>
699692
<td class="pick"><button class="copy" data-cmd="/start_dev draft/triage/nightly_release_blocked_eight_nights.md" aria-label="Copy the Claude command">📋</button></td>
700693
</tr>
694+
<tr hidden>
695+
<td class="when">2026-08-04</td>
696+
<td class="what">filed</td>
697+
<td><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/docs/howtolens/ch4_mask_overlay_never_drawn.md">HowToLens ch4 tutorial 3: mask overlay is never actually drawn</a></td>
698+
<td class="pick"><button class="copy" data-cmd="/start_dev draft/docs/howtolens/ch4_mask_overlay_never_drawn.md" aria-label="Copy the Claude command">📋</button></td>
699+
</tr>
701700
</table>
702701
<button class="more" data-page="10">… 10 more (40 left)</button>
703702
<h2>Epics <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/epics.md">markdown version</a></h2>

0 commit comments

Comments
 (0)