Skip to content

Commit 711fb65

Browse files
author
Claude
committed
complete: status-sh-repos-missing-source (#331#332)
1 parent 70dda35 commit 711fb65

6 files changed

Lines changed: 91 additions & 57 deletions

File tree

active.md

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,5 @@
11
# Active Tasks
22

3-
## status-sh-repos-missing-source
4-
- issue: https://github.com/PyAutoLabs/PyAutoMind/issues/331
5-
- issued: 2026-08-26
6-
- prompt: active/status_sh_repos_missing_source.md
7-
- status: infra-dev — Mind infrastructure (neither library nor workspace)
8-
- worktree: n/a — web-github session (no local task worktree); branch work only
9-
- repos:
10-
- PyAutoMind: claude/status-sh-repos-missing-source-rj332c
11-
123
## transformed-message-factor-gradient-unpack
134
- issue: https://github.com/PyAutoLabs/PyAutoFit/issues/1501 (issued 2026-08-19)
145
- issued: 2026-08-19

active/status_sh_repos_missing_source.md

Lines changed: 0 additions & 24 deletions
This file was deleted.
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
- issue: https://github.com/PyAutoLabs/PyAutoMind/issues/331 (closed on ship)
2+
- shipped: 2026-08-26 — PyAutoMind PR https://github.com/PyAutoLabs/PyAutoMind/pull/332
3+
(merge commit `70dda35`)
4+
- classification: bug (PyAutoMind only; Mind infrastructure — neither library nor workspace)
5+
- summary: `scripts/status.sh --repos` sourced `scripts/pyauto_status.sh` and called a
6+
`pyauto-status` shell function; both went with the cross-repo git sync dashboard when it
7+
became a leg of the Heart-owned `$health` door (`/health status`), leaving the branch
8+
sourcing a file absent from the repo. Decided **delete, not repoint** — see key traps.
9+
The branch is gone; `--repos` now names its replacement on stderr and exits 2.
10+
- shipped changes:
11+
- `scripts/status.sh`: the `source "$ROOT/scripts/pyauto_status.sh"` + `pyauto-status` +
12+
`exit 0` block deleted, replaced by a heredoc pointing at `/health status` and `exit 2`.
13+
Usage header narrowed to `[--full]`, with a comment recording where the dashboard went
14+
and why the branch could not be repointed.
15+
- `tests/test_status_script.py` (new, 4 tests): the retired flag exits non-zero and names
16+
`/health status`; it raises no `No such file or directory` / `command not found`; every
17+
file the script `source`s resolves to a real path (the root cause, generalised); a bare
18+
run still exits 0 and prints `== Registry ==`. Fictional-fixture-free, per the
19+
`tests/**` KEEP-copy rule.
20+
- validation: 216/216 PyAutoMind tests; all four new assertions confirmed to FAIL against the
21+
pre-fix script extracted from `git show HEAD:scripts/status.sh`; `lifecycle.py check` OK.
22+
CI green on every run and every leg — Lifecycle Drift, Dashboard Refresh, and Spawn Drift
23+
`privacy` (`pytest tests/`); Spawn Drift's `drift` job is `skipped` by its own
24+
`if: github.event_name != 'pull_request'`, not a failure.
25+
- key traps:
26+
- **The obvious fix — repoint at the replacement — is not available.** `pyauto-status`
27+
retired into `$health status`, which is an *agent-driven procedure*
28+
(`PyAutoHeart/skills/pyauto-status/reference.md`), not a sourceable shell function. There
29+
is no shell entrypoint for `status.sh` to call, so "repoint" would have meant reinventing
30+
the dashboard inside the Mind — the wrong organ. Deletion plus a pointer was the only
31+
honest option.
32+
- **The failure mode was silent success, not a crash.** `set -uo pipefail` has no `-e`, and
33+
the branch ended in `exit 0`, so a failed `source` printed two shell errors and still
34+
returned 0. Anything scripting the flag would have read it as working. The regression test
35+
asserts the non-zero exit specifically for that reason.
36+
- Callers were checked before deleting, as the prompt asked: nothing in PyAutoMind,
37+
PyAutoBrain or PyAutoHeart invokes `status.sh` with any argument. The Brain/Heart files the
38+
prompt named (`nightly.sh`, `bin/overnight_status.sh`, `tick.sh`, `ci_status.sh`,
39+
`heart-health.yml`) reference `overnight_status.sh` / `ci_status.sh` — unrelated scripts
40+
with similar names. `heart/checks/url_check_live.py` has its own `--repos` flag; also
41+
unrelated.
42+
- `skills/OWNERSHIP.md` already recorded the retirement and `REFERENCE.md` already pointed
43+
readers at `/health status`, so no doc offering the flag survived — the script's own usage
44+
header was the last one.
45+
- environment note: shipped from a `web-github` session (no task worktree, no `gh`; issue and
46+
PR driven through the GitHub MCP surface). The session clone was shallow, which makes
47+
`merge-base --is-ancestor` lie across the graft boundary — `git fetch --unshallow` before
48+
trusting any ancestry check in that environment.
49+
50+
## Original prompt
51+
52+
# status.sh --repos sources a file that no longer exists
53+
54+
Type: bug
55+
Target: pyautomind
56+
Repos:
57+
- PyAutoMind
58+
Difficulty: small
59+
Autonomy: supervised
60+
Priority: low
61+
Status: formalised
62+
Filed: 2026-08-19 (backfilled from git)
63+
Issued: 2026-08-26
64+
65+
Found by the 2026-08-19 readability-pass census (#248).
66+
@PyAutoMind/scripts/status.sh's `--repos` branch does
67+
`source scripts/pyauto_status.sh`, and that file does not exist in `scripts/`
68+
`bash scripts/status.sh --repos` fails. `skills/OWNERSHIP.md` records that
69+
`pyauto-status` was retired into the `$health status` leg (PyAutoHeart), so
70+
the branch is probably vestigial.
71+
72+
Decide and fix: either delete the `--repos` branch (and any docs offering it),
73+
or repoint it at the Heart-owned replacement. Check the callers first
74+
(Brain `wake_up.md`, `nightly.sh`, `bin/overnight_status.sh`; Heart `tick.sh`,
75+
`ci_status.sh`, `heart-health.yml`) to confirm none of them pass `--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-
1140 records across 7 buckets.
9+
1141 records across 7 buckets.
1010

1111
<!-- CURATED:START -->
1212
## Highlights
@@ -238,6 +238,7 @@ _(curate hard-won records here — survives regeneration.)_
238238
- [spawn-github-instance-automation](2026/08/spawn-github-instance-automation.md)
239239
- [sph-transform-name-check](2026/08/sph-transform-name-check.md) — auto-closed by the merge via "Closes #555"
240240
- [stale-remedies-on-the-heart-board](2026/08/stale-remedies-on-the-heart-board.md)
241+
- [status-sh-repos-missing-source](2026/08/status-sh-repos-missing-source.md) — closed on ship
241242
- [stored-sample-reconstruction-guard](2026/08/stored-sample-reconstruction-guard.md) — stored samples that current model validation rejects no longer raise raw
242243
- [sub-312-install-tombstone](2026/08/sub-312-install-tombstone.md)
243244
- [tenant-firewall-drift-aug](2026/08/tenant-firewall-drift-aug.md) — issue #198; 9 → OK, and a green `--check` is only evidence for the organs actually checked out

dashboard.html

Lines changed: 8 additions & 9 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>2</b><span>In flight</span></li><li><b>3</b><span>Parked</span></li><li><b>5</b><span>Planned</span></li><li><b>136</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>136</b><span>Backlog</span></li></ul>
189189
<div class="fresh"><p><b>Last updated 2026-08-26.</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
@@ -233,7 +233,6 @@ <h3>Quick wins <span class="facets">(small enough, and safe enough to run unatte
233233
<h2>In flight <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/active.md">markdown version</a></h2>
234234
<p class="muted">Issued — each has an open GitHub issue and usually a branch.</p>
235235
<div class="task"><button class="copy" data-cmd="/start_dev active/16_transformed_message_factor_gradient_unpack.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/active/16_transformed_message_factor_gradient_unpack.md"><code>@PyAutoFit</code> <code>TransformedMessage.factor_gradient</code> crashes on first call</a><a href="https://github.com/PyAutoLabs/PyAutoFit/issues/1501">issue #1501</a><span class="facets"> — issued 2026-08-19</span><span class="facets">HOLD — do not start dev. Fix-or-delete hangs off the PyAutoFit#1498 logpdf-contract</span></p></div>
236-
<div class="task"><button class="copy" data-cmd="/start_dev active/status_sh_repos_missing_source.md" aria-label="Copy the Claude command">📋</button><p><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/active/status_sh_repos_missing_source.md">status.sh --repos sources a file that no longer exists</a><a href="https://github.com/PyAutoLabs/PyAutoMind/issues/331">issue #331</a><span class="facets"> — issued 2026-08-26</span><span class="facets">infra-dev — Mind infrastructure (neither library nor workspace)</span></p></div>
237236
<h2>Parked <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/parked.md">markdown version</a></h2>
238237
<details>
239238
<summary>3 task(s)</summary>
@@ -394,12 +393,6 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
394393
<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>
395394
<table class="recent">
396395
<tr>
397-
<td class="when">2026-08-26</td>
398-
<td class="what">issued</td>
399-
<td><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/active/status_sh_repos_missing_source.md">status.sh --repos sources a file that no longer exists</a></td>
400-
<td class="pick"><button class="copy" data-cmd="/start_dev active/status_sh_repos_missing_source.md" aria-label="Copy the Claude command">📋</button></td>
401-
</tr>
402-
<tr>
403396
<td class="when">2026-08-24</td>
404397
<td class="what">filed</td>
405398
<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>
@@ -453,7 +446,7 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
453446
<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>
454447
<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>
455448
</tr>
456-
<tr hidden>
449+
<tr>
457450
<td class="when">2026-08-23</td>
458451
<td class="what">filed</td>
459452
<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>
@@ -693,6 +686,12 @@ <h2>Backlog <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/tree
693686
<td><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/research/autolens/quick_update_plotting_cost.md">Quick-update plotting cost — minutes per update, and it is not JAX…</a></td>
694687
<td class="pick"><button class="copy" data-cmd="/start_dev draft/research/autolens/quick_update_plotting_cost.md" aria-label="Copy the Claude command">📋</button></td>
695688
</tr>
689+
<tr hidden>
690+
<td class="when">2026-07-31</td>
691+
<td class="what">filed</td>
692+
<td><a href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/draft/research/autolens_profiling/cluster_gradient_search_benchmark.md">Cluster-scale gradient-search benchmark (Prodigy vs Nautilus…</a></td>
693+
<td class="pick"><button class="copy" data-cmd="/start_dev draft/research/autolens_profiling/cluster_gradient_search_benchmark.md" aria-label="Copy the Claude command">📋</button></td>
694+
</tr>
696695
</table>
697696
<button class="more" data-page="10">… 10 more (40 left)</button>
698697
<h2>Epics <a class="mdsrc" href="https://github.com/PyAutoLabs/PyAutoMind/blob/main/epics.md">markdown version</a></h2>

0 commit comments

Comments
 (0)