|
| 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`. |
0 commit comments