From 18d22dc76664bf486a86e4466001feaf55009398 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 12 Jul 2026 20:11:56 +0000 Subject: [PATCH 1/4] research: stage PyAutoGut build follow-ups as ideas.md bullets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The PyAutoGut organ decision (research/pyautobrain/pyautogut_organ_decision.md) is decided and merged: grow a new peer organ repo owning the lifecycle of condemned self-material. Per the research skill's scholar mode, advance the decided run by staging its two named build follow-ups as provenance-tagged ideas.md bullets (not prompt files — intake formalises later): - feature/pyautogut: stand up the repo skeleton (attic remote, archive-ref convention, condemned.md manifest schema; add to repos.yaml + ORGANISM.md). - feature/pyautobrain: the hygiene->PyAutoGut drive seam (async tidy filing + batch sweep, mirroring the Heart<->vitals organ/conductor template). Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01FB9NRvwNjXfqo9HwqsPaKP --- ideas.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ideas.md b/ideas.md index 10806b5a..c711be14 100644 --- a/ideas.md +++ b/ideas.md @@ -26,3 +26,5 @@ - [from: PyAutoBuild/to_do_list] Workspace tagging. - [from: PyAutoBuild/to_do_list] Remove annoying report.log and root.log once and for all. - [from: pyautoscientist-3b-smoke, 2026-07-10] Extend spawn --stamp-family to stamp the smoke thin-caller workflow + a starter smoke_install.sh into the template family (spec-gated on the reusable smoke workflow, which is now live). +- [from: research pyautogut-organ-decision · research/pyautobrain/pyautogut_organ_decision.md] Stand up the PyAutoGut repo skeleton — the new peer organ repo owning condemned self-material: the attic remote, the `refs/archive/condemned/` archive-ref convention (stays out of `git branch -a`), and the `condemned.md` Mind manifest schema (type/locator/confidence/reason/merged?/condemned/sweep-after/breaks-if-wrong/archive-ref+SHA). Work-type feature/pyautogut; also adds PyAutoGut to repos.yaml + ORGANISM.md as a peer organ. +- [from: research pyautogut-organ-decision · research/pyautobrain/pyautogut_organ_decision.md] Add the hygiene→PyAutoGut drive seam in the Brain — a PyAutoGut-aware hygiene `tidy` mode that files condemned candidates into `condemned.md` async (no synchronous per-item gate, replacing the mid-sweep repo_cleanup interrogation), plus a batch `sweep` mode that runs the existing repo_cleanup safety gates against the manifest at a user-chosen time. Mirrors the Heart↔vitals template: the organ holds+voids, the conductor drives. Work-type feature/pyautobrain. From 3a930cda8f542ef5da690b9e3c03f1914a6cfb12 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 12 Jul 2026 20:20:39 +0000 Subject: [PATCH 2/4] intake: formalise the two PyAutoGut build follow-ups into feature prompts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ran the Brain intake agent over ideas.md; reviewed and corrected its deterministic classification (it cannot resolve PyAutoGut — a repo not yet in repos.yaml — and guessed bug/refactor from surface keywords). Materialised the two follow-ups at the paths the decision doc names: - feature/pyautogut/repo_skeleton.md (attic remote, archive-ref convention, condemned.md manifest schema, register as a peer organ) - feature/pyautobrain/hygiene_pyautogut_drive_seam.md (async tidy filing + batch sweep, mirroring the Heart<->vitals organ/conductor template) Marked both ideas.md bullets `[formalised -> ]` per intake's convention. Provenance: research/pyautobrain/pyautogut_organ_decision.md. Files a prompt each; does not start dev. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01FB9NRvwNjXfqo9HwqsPaKP --- .../hygiene_pyautogut_drive_seam.md | 42 +++++++++++++++ feature/pyautogut/repo_skeleton.md | 54 +++++++++++++++++++ ideas.md | 4 +- 3 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 feature/pyautobrain/hygiene_pyautogut_drive_seam.md create mode 100644 feature/pyautogut/repo_skeleton.md diff --git a/feature/pyautobrain/hygiene_pyautogut_drive_seam.md b/feature/pyautobrain/hygiene_pyautogut_drive_seam.md new file mode 100644 index 00000000..0ff9e8ab --- /dev/null +++ b/feature/pyautobrain/hygiene_pyautogut_drive_seam.md @@ -0,0 +1,42 @@ +# Add the hygiene → PyAutoGut drive seam + +Type: feature +Target: PyAutoBrain +Repos: +- PyAutoBrain +- PyAutoGut +- PyAutoMind +Difficulty: medium +Autonomy: supervised +Priority: normal +Status: formalised + +Add the drive seam that lets the hygiene conductor use **@PyAutoGut** — the +second build follow-up from `research/pyautobrain/pyautogut_organ_decision.md`. +Depends on the repo skeleton (`feature/pyautogut/repo_skeleton.md`) existing +first. + +The seam mirrors the **Heart ↔ vitals** template exactly: the organ *holds and +voids*; the @PyAutoBrain hygiene conductor *drives* it (decides what to condemn, +triggers a sweep) and owns none of the storage. + +- **PyAutoGut-aware `tidy` mode.** Instead of the synchronous, one-item-at-a-time + `repo_cleanup` interrogation (the decision doc's pain #1 — decision fatigue at + the point of least context), `tidy` *files candidates into `condemned.md`* + asynchronously, with no per-item gate. This gives the 95%-confident-but-not- + certain items a home (pain #2) and captures the fragile forms' bytes as durable + archive refs before deletion (pain #3). +- **Batch `sweep` mode.** Runs the *existing* `repo_cleanup` safety gates + (`yes, force delete `; stash keep/apply/drop) in batch against the + manifest, at a time the user chooses — the transit-window clock: items with a + past `sweep-after` date are voided; anything still wanted is reabsorbed + (recovered) before then. + +No second gate implementation — reuse `repo_cleanup`'s gates. The conductor +reasons and delegates; @PyAutoGut performs the actual deletion (elimination is a +gut function). + + diff --git a/feature/pyautogut/repo_skeleton.md b/feature/pyautogut/repo_skeleton.md new file mode 100644 index 00000000..c0cc15a4 --- /dev/null +++ b/feature/pyautogut/repo_skeleton.md @@ -0,0 +1,54 @@ +# Stand up the PyAutoGut repo skeleton + +Type: feature +Target: PyAutoGut +Repos: +- PyAutoGut +- PyAutoMind +- PyAutoBrain +Difficulty: medium +Autonomy: supervised +Priority: normal +Status: formalised + +Stand up **@PyAutoGut**, the new peer organ repo that owns the lifecycle of +*condemned self-material* — decided in +`research/pyautobrain/pyautogut_organ_decision.md`. This is the first of that +decision's two build follow-ups (the Brain-side drive seam is the sibling +`feature/pyautobrain/hygiene_pyautogut_drive_seam.md`). + +Scope — the storage substrate only (organ holds + voids; the reasoning stays in +the Brain conductor): + +- **Attic remote + archive-ref convention.** Fragile forms (local unmerged + branches, `git stash` entries) are materialised as real commits and pushed + under an archive namespace — `refs/archive/condemned/` — which stays out + of `git branch -a`, into PyAutoGut as the attic remote, *before* the local + copy is deleted. Recovery is a checkout; a stash becomes a branch/commit via + `git stash branch` or a tagged stash commit. +- **The `condemned.md` manifest schema** (lands in @PyAutoMind, symmetric to + `parked.md`): one entry per item — `type` (branch/stash/file/test), `locator`, + `confidence`, `reason`, `merged?`, `condemned` date, `sweep-after` date, + `breaks-if-wrong`, and the archive ref/SHA to recover from. The `.md` is the + index; the git refs are the payload. Merged branches skip the pen (reachable + from `main` forever); committed code/test deletions need only the pre-delete + SHA recorded. +- **Register PyAutoGut as a peer organ**: add it to @PyAutoMind `repos.yaml` and + to @PyAutoBrain `ORGANISM.md` (then `python3 scripts/repos_sync.py --write`), + as a body organ peer to Heart/Memory/Hands — the storage mirror of Memory + (Memory keeps; Gut sheds, recoverable until voided). + +Boundaries to settle in PyAutoGut's `AGENTS.md` (from the decision doc): vs +Immune/`bug` (self+spent, not foreign+pathological), vs the hygiene conductor +(Heart↔vitals template — the conductor drives, the organ stores/voids), vs +Memory (retention vs release), vs Heart/profiling (no verdict, no compute +measure). + +Note: creating the GitHub repo itself is a human-required step; the rest of the +skeleton (conventions, manifest schema, doctrine wiring) is the supervised work. + + diff --git a/ideas.md b/ideas.md index c711be14..adab56d8 100644 --- a/ideas.md +++ b/ideas.md @@ -26,5 +26,5 @@ - [from: PyAutoBuild/to_do_list] Workspace tagging. - [from: PyAutoBuild/to_do_list] Remove annoying report.log and root.log once and for all. - [from: pyautoscientist-3b-smoke, 2026-07-10] Extend spawn --stamp-family to stamp the smoke thin-caller workflow + a starter smoke_install.sh into the template family (spec-gated on the reusable smoke workflow, which is now live). -- [from: research pyautogut-organ-decision · research/pyautobrain/pyautogut_organ_decision.md] Stand up the PyAutoGut repo skeleton — the new peer organ repo owning condemned self-material: the attic remote, the `refs/archive/condemned/` archive-ref convention (stays out of `git branch -a`), and the `condemned.md` Mind manifest schema (type/locator/confidence/reason/merged?/condemned/sweep-after/breaks-if-wrong/archive-ref+SHA). Work-type feature/pyautogut; also adds PyAutoGut to repos.yaml + ORGANISM.md as a peer organ. -- [from: research pyautogut-organ-decision · research/pyautobrain/pyautogut_organ_decision.md] Add the hygiene→PyAutoGut drive seam in the Brain — a PyAutoGut-aware hygiene `tidy` mode that files condemned candidates into `condemned.md` async (no synchronous per-item gate, replacing the mid-sweep repo_cleanup interrogation), plus a batch `sweep` mode that runs the existing repo_cleanup safety gates against the manifest at a user-chosen time. Mirrors the Heart↔vitals template: the organ holds+voids, the conductor drives. Work-type feature/pyautobrain. +- [formalised -> feature/pyautogut/repo_skeleton.md] [from: research pyautogut-organ-decision · research/pyautobrain/pyautogut_organ_decision.md] Stand up the PyAutoGut repo skeleton — the new peer organ repo owning condemned self-material: the attic remote, the `refs/archive/condemned/` archive-ref convention (stays out of `git branch -a`), and the `condemned.md` Mind manifest schema (type/locator/confidence/reason/merged?/condemned/sweep-after/breaks-if-wrong/archive-ref+SHA). Work-type feature/pyautogut; also adds PyAutoGut to repos.yaml + ORGANISM.md as a peer organ. +- [formalised -> feature/pyautobrain/hygiene_pyautogut_drive_seam.md] [from: research pyautogut-organ-decision · research/pyautobrain/pyautogut_organ_decision.md] Add the hygiene→PyAutoGut drive seam in the Brain — a PyAutoGut-aware hygiene `tidy` mode that files condemned candidates into `condemned.md` async (no synchronous per-item gate, replacing the mid-sweep repo_cleanup interrogation), plus a batch `sweep` mode that runs the existing repo_cleanup safety gates against the manifest at a user-chosen time. Mirrors the Heart↔vitals template: the organ holds+voids, the conductor drives. Work-type feature/pyautobrain. From 55b91112a8ea0749af261dcf9ddf8d553319f25f Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 12 Jul 2026 20:28:51 +0000 Subject: [PATCH 3/4] feature(pyautogut): add the condemned.md manifest to the Mind MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The repo-independent piece of feature/pyautogut/repo_skeleton.md: the catalog of condemned self-material, symmetric to parked.md, as decided in research/pyautobrain/pyautogut_organ_decision.md ("Catalog = a manifest in the Mind"). Documents the entry schema (type/locator/confidence/reason/merged/ condemned/sweep-after/breaks-if-wrong/archive-ref) and the condemn -> transit -> void lifecycle. Index only; the payload is durable git refs in PyAutoGut. No live entries yet — the hygiene tidy drive seam populates it once PyAutoGut exists as the attic remote. Organ registration in repos.yaml/ORGANISM.md is deliberately deferred until the repo exists (the body map must not point at a non-existent GitHub home). Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01FB9NRvwNjXfqo9HwqsPaKP --- condemned.md | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 condemned.md diff --git a/condemned.md b/condemned.md new file mode 100644 index 00000000..4f4eb264 --- /dev/null +++ b/condemned.md @@ -0,0 +1,75 @@ +# Condemned material + +The catalog of **condemned self-material** — stale branches, `git stash` +entries, dead code and retired tests that a hygiene / `repo_cleanup` sweep is +95%-but-not-100% sure is trash. Symmetric to `parked.md`: `parked.md` holds work +that is *paused and will resume*; this file holds material that is *spent and +awaiting elimination*, recoverable right up until it is voided. + +This is the **index**; the payload is durable **git refs**, not markdown. Fragile +forms (local unmerged branches, stashes) are first materialised as real commits +and pushed under the archive namespace `refs/archive/condemned/` (which +stays out of `git branch -a`) into **PyAutoGut** as the attic remote — *before* +the local copy is deleted. Recovery is a checkout. The organ (PyAutoGut) holds +and voids; the Brain hygiene conductor drives (decides what to condemn, triggers +a sweep), mirroring the Heart ↔ vitals template. See the decision: +`research/pyautobrain/pyautogut_organ_decision.md`. + +## Lifecycle + +1. **Condemn** — the hygiene `tidy` pass files an entry here (async, no + synchronous per-item gate). Fragile forms are archived to a durable ref + first; merged branches and committed deletions need only a SHA recorded. +2. **Transit** — the entry sits with a `sweep-after` date. Until then it is + recoverable (reabsorption): restore the branch/stash from its archive ref. +3. **Void** — a batch `sweep` runs the existing `repo_cleanup` safety gates + against entries past `sweep-after` and eliminates them; the entry moves out + of this file (to a voided log or is deleted). + +## Entry schema + +One `##` block per item. Fields: + +- `type` — `branch` | `stash` | `file` | `test` +- `locator` — the local name/path (e.g. `feature/old-thing`, + `stash@{2}`, `src/legacy/foo.py`) +- `confidence` — how sure it is trash (e.g. `0.95`) +- `reason` — why it is condemned +- `merged` — `yes` | `no` (a merged branch is reachable from `main` forever → + skips the pen; near-zero risk) +- `condemned` — date filed (YYYY-MM-DD) +- `sweep-after` — earliest date it may be voided (the transit clock) +- `breaks-if-wrong` — what is lost if this was a false positive (informs the + gate) +- `archive-ref` — the durable ref + SHA to recover from + (`refs/archive/condemned/` @ ``), or `n/a` for a merged branch / + committed deletion whose bytes live in remote history (record the pre-delete + SHA instead) + +### Recoverability is not uniform + +- **Merged branches** — reachable from `main` forever; `archive-ref: n/a`, a note + is enough. The conductor recommends these straight to deletion without staging. +- **Committed code / test deletions** — the old bytes live in remote history; + record only the pre-delete SHA. +- **Local-only unmerged branches / stashes** — exist in one machine's reflog and + are gc-pruned. These **must** be materialised as an archive ref before deletion; + a manifest that merely *points* at a stash is worthless the moment it is dropped. + + + + From f8cb575478e6f8009c1ca049a9853e5a4ee92734 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 12 Jul 2026 20:51:59 +0000 Subject: [PATCH 4/4] feature(pyautogut): register the Gut organ + revise the archive namespace MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Now that PyAutoLabs/PyAutoGut exists, register it as the Gut peer organ in the body map (repos.yaml) — the storage mirror of Memory (retention vs release). Regenerated blocks live in the Brain commit. Also revise condemned.md and the decision doc: the archive namespace is refs/heads/archive/condemned/ (a pushable branch prefix), not the decided custom refs/archive/* (unpushable — GitHub takes only refs/heads/* and refs/tags/*). The decision doc carries a dated implementation-revision note. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01FB9NRvwNjXfqo9HwqsPaKP --- condemned.md | 12 +++++++----- repos.yaml | 5 +++++ research/pyautobrain/pyautogut_organ_decision.md | 13 +++++++++++-- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/condemned.md b/condemned.md index 4f4eb264..5600c04e 100644 --- a/condemned.md +++ b/condemned.md @@ -8,9 +8,11 @@ awaiting elimination*, recoverable right up until it is voided. This is the **index**; the payload is durable **git refs**, not markdown. Fragile forms (local unmerged branches, stashes) are first materialised as real commits -and pushed under the archive namespace `refs/archive/condemned/` (which -stays out of `git branch -a`) into **PyAutoGut** as the attic remote — *before* -the local copy is deleted. Recovery is a checkout. The organ (PyAutoGut) holds +and pushed under the archive namespace `refs/heads/archive/condemned/` +(a branch prefix — GitHub only accepts pushes to `refs/heads/*` and +`refs/tags/*`, so a custom `refs/archive/*` namespace is unpushable; filter with +`git branch --list 'archive/condemned/*'`) into **PyAutoGut** as the attic remote +— *before* the local copy is deleted. Recovery is a checkout. The organ (PyAutoGut) holds and voids; the Brain hygiene conductor drives (decides what to condemn, triggers a sweep), mirroring the Heart ↔ vitals template. See the decision: `research/pyautobrain/pyautogut_organ_decision.md`. @@ -42,7 +44,7 @@ One `##` block per item. Fields: - `breaks-if-wrong` — what is lost if this was a false positive (informs the gate) - `archive-ref` — the durable ref + SHA to recover from - (`refs/archive/condemned/` @ ``), or `n/a` for a merged branch / + (`refs/heads/archive/condemned/` @ ``), or `n/a` for a merged branch / committed deletion whose bytes live in remote history (record the pre-delete SHA instead) @@ -67,7 +69,7 @@ One `##` block per item. Fields: - condemned: 2026-07-12 - sweep-after: 2026-08-12 - breaks-if-wrong: loses ~3 exploratory commits (delaunay prototype) -- archive-ref: refs/archive/condemned/abandoned-spike @ 0de4514 +- archive-ref: refs/heads/archive/condemned/abandoned-spike @ 0de4514 --> + - **Catalog = a manifest in the Mind** (`condemned.md`, symmetric to `parked.md`): one entry per item — `type` (branch/stash/file/test), `locator`, `confidence`, `reason`, `merged?`, `condemned` date, `sweep-after` date,