Skip to content

fix: retire PyAutoConf rename leftovers in Brain functional surfaces #267

Closed

Description

@Jammy2211

Overview

The PyAutoConf → PyAutoNerves rename (package autoconf → autonerves) was
completed in the reader-facing docs but left seven functional and comment sites
in PyAutoBrain still naming the old repo/package. Found by the 2026-08-19
readability census (#237). Each site was verified individually rather than
blind-renamed; four turn out to be live defects, not cosmetic drift — the
worst being that @PyAutoNerves and @PyAutoConf normalise to different
keys, neither of which the refactor witness map or the body map recognises.

Plan

  • Make autonerves the single canonical normalised repo key: add
    pyautonerves / autonerves aliases and retarget pyautoconf to it, the
    same shape as the existing pyautobuild: pyautohands back-compat alias.
  • Re-point the refactor test-witness map and the nightly activity gate at
    PyAutoNerves, so neither depends on a GitHub rename redirect.
  • Fix the /hygiene perf default so PyAutoNerves import timing is measured
    again instead of silently skipped.
  • Correct the four comment/prose sites, replacing two stale hardcoded owner
    mappings with the body map as the source of truth.
  • Add tests pinning each seam, including a drift guard that would have caught
    this, and update the fixture that pins the old name.
Detailed implementation plan

Affected Repositories

  • PyAutoBrain (primary)
  • PyAutoMind (prompt lifecycle only — no code)

Work Classification

Library / organism-infrastructure. No workspace leg.

Branch Survey

Repository Current Branch Dirty?
./PyAutoBrain claude/pyautoconf-rename-leftovers-38ia48 clean
./PyAutoMind claude/pyautoconf-rename-leftovers-38ia48 clean

Branch: claude/pyautoconf-rename-leftovers-38ia48
Worktree root: n/a — web-github session, working from the session clones
(worktree_check_conflict → 0, nothing claimed in active.md).

What each site actually is

Live defects

  1. config/policy.yaml repo_aliases — pyautoconf: autoconf.
    _sizing.normalise_repo("@PyAutoConf") → autoconf, which is in none of
    LIBRARY_REPOS / WORKSPACE_REPOS / ORGANISM_REPOS (those derive from
    PyAutoMind/repos.yaml, where the repo is PyAutoNerves, category: organ).
    There is no pyautonerves alias either, so @PyAutoNerves → pyautonerves
    while @autonerves → autonerves: two keys for one repo. That is why
    target_default_wiki carries three entries (autoconf, autonerves,
    pyautonerves) papering over the split.

  2. config/policy.yaml test_witness — autoconf: PyAutoConf/test_autoconf.
    Keyed by the normalised name, so it is reachable only via the stale alias and
    points at a repo path that no longer exists. Confirmed live: the sibling
    prompt draft/maintenance/pyautobrain/refactor_witness_map_missing_autonerves.md
    records pyauto-brain refactor reporting [unwitnessed: pyautonerves] and
    advising "strengthen tests first" for a repo with a 157-test suite.

  3. config/policy.yaml release.relevant_repos — contains PyAutoConf.
    agents/conductors/release/nightly.sh:196 fetches
    repos/PyAutoLabs/$repo/commits?sha=main&since=… for each name. Whether the
    rename redirect carries that call is unverified — see "Open question".
    The fix removes the dependency rather than relying on it.

  4. agents/conductors/hygiene/hygiene.sh:147 — not listed in the prompt.
    HYGIENE_PERF_LIBS defaults to autoconf autofit autoarray autogalaxy autolens; hygiene.sh:415-417 runs import autoconf and records a non-zero
    rc as autoconf:n/a, skipping it. PyAutoNerves import timing has been
    silently unmeasured since the rename.

Stale beyond the name

  1. bin/ensure_workspace_labels.sh:19-21 — header claims non-PyAutoLabs orgs
    rhayes777/PyAutoConf, rhayes777/PyAutoFit and
    Jammy2211/euclid_strong_lens_modeling_pipeline. The live REPOS array below
    it already lists all three under PyAutoLabs/. repos.yaml has only two
    non-PyAutoLabs homes (Jammy2211/euclid_assistant, Jammy2211/admin_jammy),
    neither in this script — so every line of that block is wrong.

  2. skills/repo_cleanup/reference.md:128 — "Owner mapping:
    PyAutoConf/PyAutoFit → rhayes777, else Jammy2211". Wrong on both halves.
    It is prose the agent follows in the web-github degrade path
    (gh api repos/<owner>/<repo>/…); no code keys on it, but a session
    following it queries dead owners.

  3. agents/conductors/health/health.sh:208,
    agents/conductors/feature/MIND_TAXONOMY.md:77 — comment/doc examples only.

Deliberate — left alone: ORGANISM.md:27 (the rename note itself),
agents/conductors/intake/_intake.py:96 ("autoconf": "PyAutoNerves", labelled
a legacy alias), tests/test_policy_seams.py:71 (covers both spellings on
purpose).

Implementation Steps

  1. config/policy.yaml
    • repo_aliases: pyautoconf: autonerves; add autoconf: autonerves
      (old package mentions in archived prompts) and pyautonerves: autonerves.
    • target_default_wiki: collapse the three entries to autonerves: methods.
    • test_witness: autoconf: PyAutoConf/test_autoconf →
      autonerves: PyAutoNerves/test_autonerves.
    • release.relevant_repos: PyAutoConf → PyAutoNerves.
  2. agents/conductors/hygiene/hygiene.sh:147 — autoconf → autonerves.
  3. bin/ensure_workspace_labels.sh:19-21 — replace the org block with a
    statement that every repo listed is under PyAutoLabs/, pointing at
    repos.yaml + repos_sync.py --check (already cited two lines below).
  4. skills/repo_cleanup/reference.md:128 — replace the hardcoded mapping with
    "resolve <owner>/<repo> from the github: field in PyAutoMind/repos.yaml".
  5. agents/conductors/health/health.sh:208,
    agents/conductors/feature/MIND_TAXONOMY.md:77 — name swap.
  6. Tests
    • tests/test_activity_gate.py:143 — fixture PyAutoConf → PyAutoNerves;
      add a case asserting a PyAutoNerves commit makes judge() return
      active: True (the acceptance criterion, offline and deterministic).
    • tests/test_policy_seams.py — assert all four spellings
      (PyAutoNerves / autonerves / PyAutoConf / autoconf) normalise to
      autonerves; assert that key is in KNOWN_REPOS; assert
      TEST_WITNESS["autonerves"]; assert every name in
      release.relevant_repos exists in the body map — the drift guard that
      would have caught this.
    • New guard test: PyAutoConf / autoconf appears in PyAutoBrain only at
      the three deliberate sites. This is the prompt's grep acceptance,
      enforced rather than asserted by hand.

Key Files

  • config/policy.yaml — the four map edits; the whole functional core of this task.
  • agents/faculties/sizing/_sizing.py — normalise_repo, sole consumer of repo_aliases.
  • agents/conductors/refactor/_refactor.py — TEST_WITNESS consumer.
  • agents/conductors/release/activity_gate.py + nightly.sh — relevant_repos consumer.
  • agents/conductors/hygiene/hygiene.sh — perf import timing.
  • tests/test_policy_seams.py, tests/test_activity_gate.py — the seam pins.

Trade-offs

  • Retargeting pyautoconf rather than deleting it keeps the ~150 archived Mind
    prompts that say @PyAutoConf routing correctly, for one back-compat line.
    Precedent: complete/2026/07/rename-autobuild-to-autohands.md, which kept
    autobuild as a router keyword for exactly this reason.
  • Risk is low: repo_aliases has one consumer, and each re-keyed map is read by
    exactly one module. Baseline suite is 462 tests, green before the change.

Testing

python3 -m pytest tests/ -q in PyAutoBrain — 462 green at baseline; expected
to stay green plus the new cases.

Open question (does not block this PR)

The prompt asks to verify whether the nightly activity gate counts activity
on PyAutoNerves today via GitHub's renamed-repo redirect. This session cannot
answer it empirically: the agent proxy 403s every api.github.com call for both
the old and new names, and gh is not installed here. Rather than depend on
redirect behaviour, this PR removes the dependency — the gate names
PyAutoNerves directly, and a new body-map drift test keeps the set honest. If
you want the historical question settled (i.e. were quiet-night verdicts between
the rename and this PR judged on a repo the fetch could not see), that needs one
gh api repos/PyAutoLabs/PyAutoConf/commits call from an authenticated session.

Related

draft/maintenance/pyautobrain/refactor_witness_map_missing_autonerves.md is a
sibling prompt whose headline finding — [unwitnessed: pyautonerves] — is
resolved by step 1 here. Its second ask ("audit the other organ/library
repos" for witness-map coverage) is broader than this rename and is deliberately
not absorbed (one prompt = one task = one PR); that prompt should be
re-scoped to the remaining audit once this merges.

Original Prompt

Click to expand starting prompt
# PyAutoConf rename leftovers in Brain functional surfaces

Type: bug
Target: pyautobrain
Repos:
- PyAutoBrain
Difficulty: small
Autonomy: supervised
Priority: normal
Status: formalised
Filed: 2026-08-19 (backfilled from git)

Found by the 2026-08-19 readability census (#237). The PyAutoConf → PyAutoNerves
rename (package `autoconf` → `autonerves`) was fixed in the reader-facing docs
(ORGANISM.md, docs/example.md, skill prose), but these FUNCTIONAL sites still
carry the old name and need per-site verification, not a blind rename:

- @PyAutoBrain/config/policy.yaml:74 — unit-test location map entry
  `autoconf: PyAutoConf/test_autoconf`. Is the map keyed by package (should the
  key become `autonerves: PyAutoNerves/test_autonerves`?) and does anything
  still resolve the old path?
- @PyAutoBrain/config/policy.yaml:84 — the nightly activity gate's
  `relevant_repos` lists `PyAutoConf`. A renamed GitHub repo answers via
  redirect for some API calls but not all — verify whether activity on
  PyAutoNerves is being COUNTED by the gate today, then update the list (and
  check `tests/test_activity_gate.py:143`, which pins the old name in its
  fixture).
- @PyAutoBrain/bin/ensure_workspace_labels.sh:20 — comment names
  `rhayes777/PyAutoConf`; verify the script's live repo list.
- @PyAutoBrain/agents/conductors/health/health.sh:208 — comment example only.
- @PyAutoBrain/skills/repo_cleanup/reference.md:128 — "Owner mapping:
  PyAutoConf/PyAutoFit → `rhayes777`" is stale beyond the name: the body map
  says PyAutoLabs owns PyAutoNerves and PyAutoFit. Fix the mapping, and check
  whether any repo_cleanup behaviour actually keys on it.

Acceptance: grep for PyAutoConf/autoconf across PyAutoBrain returns only
deliberate historical references; the activity gate demonstrably counts a
PyAutoNerves commit; tests updated.

Activity

  1. Jammy2211 commented on Aug 24, 2026

    @Jammy2211
    ContributorAuthor

    Parked at ship sign-off — awaiting-input

    Effective autonomy is supervised (prompt header supervised, bug
    work-type cap supervised). Per the levels table in AUTONOMY.md, ship PR
    sign-off at supervised parks and asks rather than opening the PR. The
    implementation is complete and pushed; the PR is the only thing waiting.

    Branch: claude/pyautoconf-rename-leftovers-38ia48
    (PyAutoBrain @ 2088bad, PyAutoMind @ a22800f) — 10 files, +158 / −18.

    What was done

    All eight sites resolved as planned, plus one the guard test found. The
    functional core is config/policy.yaml: autonerves is now the single
    canonical normalised key, with pyautonerves / autoconf / pyautoconf
    aliased onto it; test_witness and release.relevant_repos point at
    PyAutoNerves; hygiene.sh times import autonerves.

    Eighth site, found by the new guard test, not by the prompt:
    skills/OPERATIONS.md:41 — "autoconf lowercases YAML dict keys (muJy →
    mujy)". A live operational gotcha about current package behaviour, renamed to
    autonerves. This is the guard earning its place on its first run.

    Gate legs

    Leg Status
    1. Tests PASS — 467 passed (462 baseline + 5 new), full suite. No downstream dependents: PyAutoBrain is an organ, nothing imports it as a library.
    2. Smoke n/a — organism repo, no downstream script surface.
    3. Review CLEAN, with the claim dispositions below.
    4. Heart NOT EVALUATED — see the caveat below.

    Also green: repos_sync.py --check (all 11 checks, including the tenant
    firewall — which caught my own test comments hardcoding the org name, since
    fixed), bash -n on all four touched shell scripts, and live conductor runs
    (refactor, bug, sizing) against the changed policy.

    Live proof of the headline defect being fixed — bin/pyauto-brain refactor
    on this branch:

    Repos affected:       autofit, autonerves
    Witnesses:            {'autofit': 'PyAutoFit/test_autofit',
                           'autonerves': 'PyAutoNerves/test_autonerves'}
    

    No [unwitnessed: pyautonerves], which is exactly what the sibling prompt
    refactor_witness_map_missing_autonerves.md reported.

    Review-faculty claim dispositions

    The surface lifted one claim from the commit message. Disposing of it in three
    parts, because they do not share a basis:

    • claim: "PyAutoNerves/test_autonerves" → basis-cited. I did not take this
      from the Mind records. Cloned PyAutoLabs/PyAutoNerves@main and checked: the
      directory exists at the repo root beside the autonerves package, holding 17
      test_*.py files.
    • claim: "verified live" → basis-cited: the pyauto-brain refactor run
      above, plus tests/test_policy_seams.py::test_refactor_test_witness_loads
      which now pins the witness under every spelling.
    • claim: "157-test suite" → idle. That count is cited from
      PyAutoMind/complete/2026/08/cli-noise-autonerves-batch.md and I did not
      re-run the suite (numpy install timed out in this session). Nothing in the
      change depends on the count — only the path is load-bearing, and that is
      verified above. Flagging it because the commit message states the number
      without that qualifier, and the commit cannot be amended (pushed history).

    ⚠️ Leg 4 caveat — Heart was not consulted

    pyauto-heart is not on PATH here and PyAutoHeart is not in this session's repo
    scope, so bin/pyauto-brain vitals returns:

    pyauto-brain: 'pyauto-heart' not found on PATH or at /root/Code/PyAutoLabs/PyAutoHeart/bin/pyauto-heart
    

    Per WORKFLOW.md's fallback, the per-repo suite stands in as the gate and it is
    green — but that is the fallback, not a Heart verdict. No YELLOW was
    acknowledged and no RED was seen, because nothing was asked.
    If you want a
    real leg 4, the PR should be opened from a session that can reach Heart.

    The question

    Sign off on opening the PR for claude/pyautoconf-rename-leftovers-38ia48?

    • Yes → I open the PR against main (no pending-release label: PyAutoBrain
      is outside the release chain), set active.md to
      library-shipped, awaiting-merge, and stop. Merge stays yours.
    • Yes, but get a Heart verdict first → I hold until a Heart-reachable session
      can run the vitals leg, then open the PR.
    • No / changes wanted → tell me what to change; the branch stays parked.

    Two scope calls I made without asking

    Both are recorded here so you can reverse either:

    1. Retargeted pyautoconf rather than deleting it. ~150 archived Mind
      prompts say @PyAutoConf; deleting the alias would strand them. Precedent:
      complete/2026/07/rename-autobuild-to-autohands.md kept autobuild as a
      router keyword for the same reason.
    2. Did not absorb the sibling prompt's second ask.
      draft/maintenance/pyautobrain/refactor_witness_map_missing_autonerves.md
      also asks to "audit the other organ/library repos" for witness-map coverage
      — broader than this rename, so it stays a separate task (one prompt = one
      task = one PR). Its headline finding is resolved here; that prompt wants
      re-scoping to the remaining audit once this merges. Worth a look:
      test_witness still keys pyautoreduce with the PyAuto prefix while every
      other row is bare, which is the sort of thing that audit should settle.

    Generated by Claude Code

  2. Jammy2211 commented on Aug 24, 2026

    @Jammy2211
    ContributorAuthor

    Shipped

    Merged as #268 (2e7ea30) into main. CI green: Brain Tests on
    2088bad. Branch proven merged — 0 unmerged commits.

    All eight sites resolved. Four were live defects: the repo_aliases split that
    left @PyAutoConf and @PyAutoNerves resolving to two dead keys, the
    test_witness row pointing at a deleted repo path, the nightly gate polling the
    old repo name, and hygiene.sh silently skipping the Nerves import timing. Four
    were comment/prose, two of them stale beyond the name — both hardcoded owner
    mappings now defer to the body map.

    The eighth site (skills/OPERATIONS.md) was found by the new repo-wide guard
    test on its first run, not by the prompt's list.

    Follow-up shipped in the same session: the audit that
    refactor_witness_map_missing_autonerves.md asked for went out as
    #269 / PR #271. It found that Nerves was not a one-off — PyAutoCTI and five
    organs had no witness row at all, and PyAutoReduce carried the same split-key
    defect.

    Carried forward, not fixed: the redirect question in the PR body is still
    open. Whether the nightly gate was counting PyAutoNerves activity between the
    rename and this PR could not be answered from a web-github session (the proxy
    403s api.github.com for both names, gh is not installed). The gate no longer
    depends on the answer; settling the history needs one authenticated
    gh api repos/PyAutoLabs/PyAutoConf/commits call.

    Heart was never consulted on this task — pyauto-heart is unreachable here — so
    leg 4 of the ship gate did not run. Recorded that way in
    PyAutoMind/autonomy_log.md rather than logged as a clean four-leg gate.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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