Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 19 additions & 7 deletions docs/pre_build_failure_audit.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ What actually modifies files during a `pre_build.sh` run, and who commits what:
| notebooks (`*.ipynb`) | `generate.py` | `git add notebooks/` | regenerated + committed explicitly (`release_workspaces` → `git add *.ipynb`) | runner (local copy redundant) |
| `llms-full.txt`, `workspace_index.json` | `generate.py` (root) | **never** — `:88` is dead (§2) | swept by `git add -A` inside the *"bump Colab URL tag refs"* commit | **unowned — rides along, mislabeled** |
| README Colab URLs | not touched locally | — | `bump_colab_urls.sh` + the same `git add -A` | runner |
| README version pin (`<pkg> vX`) | `:55` sed (edits where a pin exists) | **never** — `:88` is dead | **nothing** — the runner-side step was deliberately removed (#120/#121; see the comment in `release.yml`) | **orphaned** |
| README version pin (`<pkg> vX`) | ~~`:55` sed~~ (deleted #158) | **never** — `:88` is dead | **nothing** — the runner-side step was deliberately removed (#120/#121; see the comment in `release.yml`) | ~~orphaned~~ → **RESOLVED**: pins removed, §1.1 |
| `dataset/`, `config/` | nothing in the run | `git add dataset|config/` | never | vestigial (stages only pre-existing human dirt) |
| black collateral outside staged dirs | `black .` | never (no rule covers them) | never | perpetual churn (§4) |

Expand All @@ -27,6 +27,21 @@ but have **no pin pattern in README.md at all** — for them the banner + sed ar
semantically empty on every run. The `"Bumping README version → …"` banner has
printed a false claim, 13/13 repos, on every release for months.

### 1.1 Resolution (2026-07-22, build-chain campaign Phase 4 task 4)

The pins are **gone**, not re-owned. The three surviving `<pkg> vX` lines
(`autofit_workspace`, `autofit_workspace_test`, `autolens_workspace_test`) were
replaced with "install the latest release"; the user-facing workspaces point at
`version.minimum_library_version` in `config/general.yaml`, which is the signal
Heart's `version_skew` check actually verifies (floor vs newest release tag) —
so the compatibility statement is now *checked* rather than hand-maintained.

Considered and rejected: giving the runner ownership again (an explicit sed +
commit in `release.yml release_workspaces`, next to the Colab bump). That
re-adds a commit-to-`main` step of the kind #120/#121 removed, to maintain a
string no gate reads. The pre_build `VERSION` variable that fed the deleted sed
was itself dead by then and was removed in the same change.

## 2. Complete enumeration of the failure class

The shape: a command whose failure is handled wrongly in one of two opposite
Expand Down Expand Up @@ -92,12 +107,9 @@ artifact; if the runner is the real producer, the local script stops pretending.
1. **Delete the dead lines** (no behaviour change, measured): the `:88` root
glob (a 13/13 no-op — deleting it changes nothing on main) and the `:55`
README bump (its artifact is orphaned; deleting the *false signal* beats
keeping a banner that lies). Decide the README pin's fate in Phase 4 of the
campaign (`release_version_sync_back_to_main.md`): either the runner owns it
again (one sed in `release_workspaces`, next to the Colab bump, committed
explicitly) or the pins come out of the READMEs in favour of "install the
latest release" + floors. **Either way the owner is the runner or nobody —
not a local sed whose output nothing stages.**
keeping a banner that lies). **DONE** (#158). The README pin's fate was then
decided in Phase 4 task 4 — the pins came out in favour of "install the
latest release" + floors; see §1.1.
2. **Give the swept artifacts an owner:** in `release_workspaces`, replace the
Colab step's `git add -A` with explicit paths (`llms-full.txt`,
`workspace_index.json`, README, notebooks dir) and an honest commit message.
Expand Down
18 changes: 12 additions & 6 deletions pre_build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,11 @@ PYAUTOBASE="$(cd "$(dirname "$SELF")/.." && pwd)"
AUTOBUILD="$PYAUTOBASE/PyAutoHands/autobuild"
PYTHONPATH_EXTRA="$AUTOBUILD"

# YYYY.M.D.<minor> — used to bump README version pins. %-m / %-d strip
# leading zeroes so the tag matches the canonical pattern (e.g. 2026.4.5.1).
VERSION="$(date +%Y.%-m.%-d).$MINOR_VERSION"
# (A `VERSION="$(date …).$MINOR_VERSION"` string used to be computed here for the
# README version-pin sed. That sed was deleted with the pin bump, and the pins
# themselves are gone — see the note above `run_workspace`'s call list. Nothing
# read VERSION afterwards, so it was removed too; `MINOR_VERSION` is still what
# the release dispatch below takes.)

# Ensure the canonical `pending-release` label exists with the right config
# across every release-window repo. Idempotent — no-ops when nothing drifted.
Expand Down Expand Up @@ -95,9 +97,13 @@ run_workspace() {
# The repo names are checked against PyAutoMind/repos.yaml (the body map) by
# `repos_sync.py --check`; the flags are Build policy and live only here.
# (The former readme_pkg arg / README version bump was deleted per the audit in
# docs/pre_build_failure_audit.md: its sed edit was never staged, the runner
# side was removed under #120, and the pins it targeted are owned by Phase 4 of
# the build-chain campaign — PyAutoBuild#155/#156.)
# docs/pre_build_failure_audit.md: its sed edit was never staged and the runner
# side was removed under #120. Phase 4 task 4 of the build-chain campaign
# (#155) then resolved the pins themselves: the three surviving `<pkg> vX` lines
# were REMOVED from the READMEs in favour of "install the latest release" plus
# the `version.minimum_library_version` floor, which Heart's version_skew check
# actually verifies. Do not re-add a README version bump here or on the runner —
# an unowned pin is what went 2 months stale.)
run_workspace "autofit_workspace" "autofit" true false
run_workspace "autogalaxy_workspace" "autogalaxy" true false
run_workspace "autolens_workspace" "autolens" true true
Expand Down