Skip to content

refactor: rename autobuild package and CLI to autohands #177

Description

@Jammy2211

Overview

The Hands repo was renamed PyAutoBuildPyAutoHands, but its payload package and CLI kept the old autobuild name. This task closes that seam: autobuild/autohands/ and bin/autobuildbin/autohands, plus every live reference across the organism (~283 lines / ~110 files in 17 repos).

Landing is atomic, no back-compat shim (human decision): the directory move breaks PyAutoHeart's workspace-validation.yml and every workspace's run_smoke.py the moment it merges, so all PRs must merge in one pass — Hands → Heart → Brain → workspaces — while CI is quiet.

Plan

  • Move the package and CLI in PyAutoHands via git mv so history follows the files.
  • Update PyAutoHands' own consumers: dotted test imports, pre_build.sh, docs, workflows.
  • Update PyAutoHeart's workspace-validation.yml (five hard-coded PyAutoHands/autobuild/*.py invocations) and its check comments.
  • Update PyAutoBrain's binary resolver, policy config, repo maps and organ docs.
  • Update the 13 workspace / HowTo / assistant repos — AGENTS.md generate commands, run_smoke.py sys.path.insert, config and workflow comments.
  • Update the two live PyAutoMind files (scripts/repos_sync.py, ROUTING.md) while leaving ~150 historical records alone.
  • Verify by grep: zero lowercase autobuild outside the explicit preserve-list.
Detailed implementation plan

Affected Repositories

  • PyAutoHands (primary) — 173 lines / 35 files
  • PyAutoHeart — 27 / 14
  • PyAutoBrain — 37 / 21
  • autolens_workspace (5/5), autogalaxy_workspace (6/6), autofit_workspace (5/5)
  • autolens_workspace_test (5/3), autogalaxy_workspace_test (5/3), autofit_workspace_test (4/2), autocti_workspace_test (3/1)
  • HowToLens (3/3), HowToGalaxy (3/3), HowToFit (3/3)
  • autolens_assistant (3/2), autofit_assistant (3/2), autocti_assistant (2/1)
  • PyAutoMind — 2 live files only
  • admin_jammy — 1 line (drive-by)

Branch Survey

Repository Current Branch Dirty?
./PyAutoHands main clean
./PyAutoHeart main clean
./PyAutoBrain main clean
./autolens_workspace main clean
./autogalaxy_workspace main clean
./autofit_workspace main clean
./autolens_workspace_test main clean
./autogalaxy_workspace_test main clean
./autofit_workspace_test main clean
./autocti_workspace_test main clean
./HowToLens main clean
./HowToGalaxy main clean
./HowToFit main clean
./autolens_assistant main clean
./autofit_assistant main clean
./autocti_assistant main clean
./admin_jammy main 3 modified (unrelated)

No worktree conflicts: the four active tasks claim PyAutoCTI, PyAutoFit, autolens_profiling, autolens_jax_joss and autolens_workspace_developer — none of them targets here.

Suggested branch: feature/rename-autobuild-to-autohands
Worktree root: ~/Code/PyAutoLabs-wt/rename-autobuild-to-autohands/
Work Classification: Library (Hands is the primary), with a broad workspace follow-on in the same branch.

Implementation Steps

  1. PyAutoHandsgit mv autobuild autohands; git mv bin/autobuild bin/autohands. In the CLI: AUTOBUILD_DIRAUTOHANDS_DIR, header comment, autobuild help usage strings, the ~/.bashrc alias suggestion. Then tests/ dotted imports (from autobuild.build_util import …autohands.build_util), pre_build.sh, docs/{internals,nightly_release_design,env_profile_redesign,pre_build_failure_audit}.md, README.md, AGENTS.md, CONTRIBUTING.md, MIGRATION.md, .github/workflows/{release,navigator_check}.yml, autohands/config/workspaces.yaml.
  2. PyAutoHeart.github/workflows/workspace-validation.yml lines ~135/179/295/322/411/445 (script_matrix.py, generate.py, run_python.py ×2, run.py, aggregate_results.py); scripts/health_release.sh:42; comments in heart/checks/{script_timing,test_run,url_check_live}.py.
  3. PyAutoBrainagents/_common.sh (resolve_autobuildresolve_autohands, both the function and the _resolve_bin fallback path); config/policy.yaml extra_organism_targets + the intake keyword list; agents/conductors/build/{build.sh,BUILD_CAPABILITIES.md,AGENTS.md}; agents/conductors/{release,intake,bug,clone}; agents/faculties/vitals/HEART_CAPABILITIES.md; docs/organs/build.md; docs/adoption/config_surfaces.md; ORGANISM.md; skills/ship_library/reference.md; tests/test_policy_seams.py.
  4. Workspaces / HowTos / assistantsAGENTS.md PYTHONPATH=../PyAutoHands/autobuild python3 ../PyAutoHands/autobuild/generate.py <project>; .github/scripts/run_smoke.py (sys.path.insert(… "PyAutoHands" / "autobuild") and the docstring); .claude/skills/{generate_and_merge,run_all_script_fix_failures}/SKILL.md; config/build/visualise_notebooks.yaml header comment; .github/workflows/navigator_check.yml comment; .navigator_check_ignore comment; autoassistant/to_notebook.py docstrings.
  5. PyAutoMind (live only)scripts/repos_sync.py:558-570 dict keys; ROUTING.md:38.
  6. admin_jammyREADME.md:25 PyAutoBuild/skills/PyAutoHands/skills/.
  7. Verifypytest in PyAutoHands, PyAutoBrain/tests/test_policy_seams.py, bash -n bin/autohands + autohands help, python3 PyAutoMind/scripts/repos_sync.py --check, and a final grep asserting zero lowercase autobuild outside the preserve-list.

Explicitly preserved (do not rewrite)

48 historical references: PyAutoBuild#118/#120/#121/#126/#127/#155/#156 issue citations; rhayes777/PyAutoBuild patterns in PyAutoHeart/config/url_fixups.yaml and heart/checks/url_check.sh; the pyautobuild: pyautohands back-compat alias in PyAutoBrain/config/policy.yaml; ~150 PyAutoMind historical records; PyAutoMind/planned.md:121 and dashboard.md:92 (registry pointers to real prompt-file paths); and the two gitignored .claude/settings.local.json allowlists.

Key Files

  • PyAutoHands/bin/autobuild — the dispatcher; AUTOBUILD_DIR and all help text.
  • PyAutoHands/autobuild/ — 27 modules + config/workspaces.yaml; has __init__.py, so it is a real package.
  • PyAutoHeart/.github/workflows/workspace-validation.yml — five path-invocations; the highest-blast-radius file.
  • PyAutoBrain/agents/_common.shresolve_autobuild, the PATH/sibling fallback.
  • PyAutoMind/scripts/repos_sync.py — hard-coded PyAutoHands/autobuild/*.py dict keys; breaks silently if missed.

Notes on risk

  • Two import styles must both keep working: dotted (from autobuild.build_util import …, Hands' own tests) and flat-on-PYTHONPATH (from build_util import …, workspaces — only the sys.path string changes).
  • No setup.py/pyproject.toml, so no PyPI package name is at stake.
  • autobuild is not on PATH and has no shell alias, so no user shell config is affected.
  • Accepted risk: workspace CI is broken between the Hands merge and the last workspace merge. That window is the cost of no shim.

Run conditions

  • Phasing override. The Brain Feature Agent scored this too-large (37) and recommended split-into-phases. Not taken, with human approval: the score is driven by repo count (16), not conceptual complexity; there is no design phase in a mechanical rename; and sequential phases would violate the atomic-landing guardrail. Still ~18 PRs sharing one branch.
  • Heart was RED (score 0) at launch — 13 test failures, 33 stale parked scripts, release validation integrate:fail. None caused by this task, and the corrective-PR exception does not apply (this rename repairs no RED reason). Per AUTONOMY.md, RED forbids commit/push/PR-open at every autonomy level, so this run is expected to park at the ship gate. Effective autonomy = min(supervised header, safe refactor cap) = supervised.

Original Prompt

Click to expand starting prompt
# Rename `PyAutoHands/autobuild` to `PyAutoHands/autohands`

Type: refactor
Target: PyAutoHands
Repos:
- PyAutoHands
- PyAutoBrain
- PyAutoHeart
- autolens_workspace
- autogalaxy_workspace
- autofit_workspace
- autolens_workspace_test
- autogalaxy_workspace_test
- autofit_workspace_test
- autocti_workspace_test
- HowToLens
- HowToGalaxy
- HowToFit
- autolens_assistant
- autofit_assistant
- autocti_assistant
- admin_jammy
- PyAutoMind
Difficulty: medium
Autonomy: supervised
Priority: normal
Status: formalised

## Original request (verbatim)

> rename - PyAutoHands/autobuild to - PyAutoHands/autohands and make sure this
> new word is used throughout

## Why

The Hands repo was renamed `PyAutoBuild``PyAutoHands`, but its payload
package and CLI kept the old `autobuild` name. The organ and its package now
disagree, which is the one naming seam the rename left behind.

## Scope

Rename the package directory, the CLI, and every **live** reference to the new
word across the organism.

- **PyAutoHands** (primary): `autobuild/``autohands/` (27 modules +
  `config/workspaces.yaml`), `bin/autobuild``bin/autohands` (and its internal
  `AUTOBUILD_DIR` / help text / alias suggestion), `pre_build.sh`, `tests/`
  (including the dotted imports `from autobuild.build_util import …`), `docs/`,
  `README.md`, `AGENTS.md`, `CONTRIBUTING.md`, `.github/workflows/`.
- **PyAutoHeart**: `.github/workflows/workspace-validation.yml` invokes
  `PyAutoHands/autobuild/*.py` by path in five places; also
  `heart/checks/*.py` comments and `scripts/health_release.sh`.
- **PyAutoBrain**: `config/policy.yaml` (`extra_organism_targets`, alias map),
  `agents/_common.sh` (`resolve_autobuild`), the intake/bug repo maps, the
  build-conductor docs and `build.sh` dispatch.
- **Workspaces / HowTos / assistants**: `AGENTS.md` generate commands
  (`PYTHONPATH=../PyAutoHands/autobuild …`), `.github/scripts/run_smoke.py`
  (`sys.path.insert(… "autobuild")`), `.github/workflows/navigator_check.yml`
  comments, `config/build/visualise_notebooks.yaml` header comments,
  `.claude/skills/*/SKILL.md`.

## Guardrails

- **No back-compat shim.** Land atomically, library-first: the directory move
  breaks PyAutoHeart's `workspace-validation.yml` and every workspace's
  `run_smoke.py` the moment it merges, so all PRs must be merged in one pass
  before the next nightly.
- **Preserve historical old-name references.** Do *not* rewrite `PyAutoBuild#NNN`
  issue citations, `rhayes777/PyAutoBuild` URL-fixup patterns in
  `PyAutoHeart/config/url_fixups.yaml` / `url_check.sh`, or the back-compat
  alias `pyautobuild: pyautohands` in `PyAutoBrain/config/policy.yaml`. These
  point at real historical artifacts; rewriting them makes them wrong.
- **Leave PyAutoMind historical records untouched** (~150 files under
  `complete/`, `active/`, `draft/`, `issued/`, records) — dated records of past
  work. Two further exclusions of the same kind: `planned.md:121` and
  `dashboard.md:92` reference Mind *prompt paths* (`feature/pyautobuild/…`,
  `research/autobuild/git_docs.md`); those are registry pointers to real files
  on disk, so rewriting the string without moving the files breaks the link.
- **But PyAutoMind has two LIVE exceptions that must change** (found on the
  deep sweep; they are code and routing, not records):
  - `scripts/repos_sync.py:558-570` — a hard-coded dict keyed by
    `PyAutoHands/autobuild/<module>.py` paths. `repos_sync.py --write`
    regenerates the AGENTS.md repo tables and breaks silently without this.
  - `ROUTING.md:38` — lists `autobuild` as a routing target.
- Confirmed absent, do not go hunting again: no root-level `PyAutoLabs/*.md`
  references, and no `auto_build` / `autoBuild` / `Autobuild` spelling variants
  anywhere in the workspace.
- Two import styles must both keep working: dotted (`from autobuild.build_util
  import …`, PyAutoHands' own tests) and flat-on-`PYTHONPATH`
  (`from build_util import …`, workspaces — only the `sys.path` string changes).
- Use `git mv` so history follows the files.
- No `setup.py`/`pyproject.toml` exists, so no PyPI package name is at stake.

## Run conditions (recorded at launch, 2026-07-23)

- **Phasing override.** The Brain Feature Agent scored this `too-large (37)` and
  recommended `split-into-phases` (design / core-api / workspace-examples /
  docs). Not taken, with the human's approval: the score is driven by repo count
  (16), not conceptual complexity; there is no design phase in a mechanical
  rename; and sequential phases would violate the atomic-landing guardrail above
  by leaving a window where Hands has moved and Heart's CI still points at the
  old path. The work is still ~18 PRs (one per repo) sharing one branch name.
- **Heart was RED (score 0) at launch** — 13 test failures, 33 stale parked
  scripts, release validation `integrate:fail`. None caused by this task, and
  the corrective-PR exception does not apply (this rename repairs no RED
  reason). Per `AUTONOMY.md`, RED forbids commit/push/PR-open at every autonomy
  level, so this run is expected to park at the ship gate. Effective autonomy
  = min(`supervised` header, `safe` refactor cap) = **supervised**.

<!-- authored by start_dev from a direct user request on 2026-07-23; scope
     decisions (all live code + docs / preserve historical refs / no shim)
     confirmed with the user before planning -->

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions