You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Phase 1a of the pyautoeyes-birth epic, under the layered design the human chose on 2026-09-28: project repos<lib>_visualization make, store and track one library's figures; the organ PyAutoEyes is the cross-project dashboard that reads each project repo's tracked manifest and links to its PNGs (it renders nothing and copies no figures). This task puts the lens content back into its own project repo, PyAutoLabs/autolens_visualization, adds the tracked gallery/viz_manifest.yaml read contract, and registers the repo across Mind, Brain and Heart. Phase 1b (stripping the organ to its skeleton) must not start until this is merged.
Classification: feature, medium, direct; workflow library (start_library → ship_library). Autonomy: supervised. Feature Agent risk note: "Public-API change may ripple to downstream repos". It does not: this task changes no library code (PyAutoFit/Array/Galaxy/Lens untouched), so nothing ripples downstream. Heart at the door: YELLOW — "PyAutoMemory: open PR 7d old (updated 5h ago)". Parallel claim: human-approved 2026-09-28 over PyAutoMind / PyAutoBrain / PyAutoHeart alongside eyes-organ-order (#439). The only overlap is Mind repos.yaml: #439 reorders the organ rows; 1a adds a project row after autolens_inference and rewrites the PyAutoEyes role string.
Already done this session:
The human ran gh repo create PyAutoLabs/autolens_visualization --public.
The current PyAutoEyes main history (8f3e712) was pushed to it. git ls-remote shows refs/heads/main 8f3e7124dc….
Cloned at lens/autolens_visualization (origin = the new repo, 40 PNGs present).
Plan
Push the PyAutoEyes history to the new project repo and clone it at lens/autolens_visualization (done).
In autolens_visualization: retitle README/AGENTS/CLAUDE stub to the project-repo role, with the layering stated. The gallery builder writes a tracked gallery/viz_manifest.yaml (content hashes + rendered stack version), and --check fails on a stale manifest. render.yml commits it and fires an eyes-refreshrepository_dispatch at PyAutoEyes.
PyAutoMind: project row after autolens_inference (using the autolens_profiling row as the template), PyAutoEyes role rewritten to the dashboard wording, ROUTING target, then repos_sync --write and propagation.
PyAutoBrain: Eyes conductor AGENTS.md + skills/eyes/eyes.md default instance → lens/autolens_visualization, with the layering paragraph; bin/clean_slate.sh exclusion comment/path.
PyAutoHeart: the config/repos.yaml excluded list gains autolens_visualization beside autolens_profiling.
Ship Mind → Brain → Heart → autolens_visualization as separate PRs, with the witness from the prompt.
PyAutoMind/PyAutoBrain/PyAutoHeart are also claimed by eyes-organ-order (#439) on feature/eyes-organ-order. A parallel worktree was human-approved on 2026-09-28 (overlap: Mind repos.yaml only).
Suggested branch:feature/autolens-visualization-rebirth (all four repos) Worktree root:~/Code/PyAutoLabs-wt/autolens-visualization-rebirth (created by start_library)
Agent, after the human confirms the empty repo exists:
History carries over. From the current organs/PyAutoEyes checkout
(clean, in sync with origin/main), add the new repo as a remote and push
the current main history to it — git remote add autolens_visualization https://github.com/PyAutoLabs/autolens_visualization.git && git push autolens_visualization main — so every PNG keeps its provenance (PR docs: update stale admin_jammy/prompt/ refs to PyAutoPrompt/ #1,
the phase-0 commits). Then clone it to lens/autolens_visualization
(origin = the new repo). PyAutoEyes main is left untouched here; phase 1b
strips it.
In lens/autolens_visualization (task worktree, one PR):
README.md / AGENTS.md (+ CLAUDE.md stub) retitled to autolens_visualization, the layering stated: a project repo that owns
the lens figures — producers, simulators, datasets, plots.yaml,
instruments, tracked PNGs, GALLERY.md, the render harness — while the
organ PyAutoEyes only aggregates it on its dashboard. Remove organ prose
inherited from phase 0 (registry, board, "every library").
Tracked manifest.gallery/gallery_build.py writes viz_manifest.yaml to a tracked path (gallery/viz_manifest.yaml),
carrying every figure it holds (producer, domain, relative PNG path,
size, mtime-free content hash) plus the rendered stack version; output/gallery/gallery.html stays gitignored. render.yml commits the
manifest alongside the PNGs and GALLERY.md. --check fails on a stale
manifest. This is the organ's read contract (phase 1b reads it).
render.yml: keep the pyautolens-releaserepository_dispatch (plain
git PNGs, no LFS); add a final step that fires a repository_dispatch
(eyes-refresh) at PyAutoEyes so its dashboard refreshes (Cortex
pattern; token as the other cross-repo dispatches use).
autolens_visualization:
path: lens/autolens_visualizationgithub: PyAutoLabs/autolens_visualizationcategory: projectrole: "Rendered PyAutoLens figures — every visualizer output on realistic HST-scale imaging and SMA interferometer data, the producers and harness that render them, re-rendered on each release; aggregated by the PyAutoEyes dashboard."
and the PyAutoEyes role rewritten to the layered wording (the
cross-project visualization dashboard over the <lib>_visualization
project repos: registry, manifest contract, Pages board; renders nothing,
never judges, never edits plot code). ROUTING.md target list gains autolens_visualization. Then python3 scripts/repos_sync.py --write
and propagate the generated map blocks / organ tables to their repos
(watch the --write-from-bundle spill into canonical checkouts).
PyAutoBrain — Eyes conductor prose
(agents/conductors/eyes/AGENTS.md, skills/eyes/eyes.md): default
instance → lens/autolens_visualization, with the layering in one
paragraph (project repos hold the figures; the organ PyAutoEyes is the
dashboard; the registry that lists instances arrives in phase 2); bin/clean_slate.sh dataset-wipe exclusion for the new path. _eyes.py
stays repo-name-free.
Ship policy: PR order Mind → Brain → Heart → autolens_visualization. While Heart is RED, the PRs ship only under a contemporaneous human RED override. Merging stays human (/prm).
Witness:bash gallery/gallery_run.sh --all in lens/autolens_visualization reproduces the 40 PNGs (a byte-diff is acceptable only in the version string) and writes the tracked gallery/viz_manifest.yaml. python3 organs/PyAutoMind/scripts/repos_sync.py --check is clean (except the pre-existing hub-blurb leg, if it is still red). pyauto-brain eyes survey lens/autolens_visualization reports no gaps and no orphans.
Key Files
lens/autolens_visualization/README.md, AGENTS.md, CLAUDE.md — retitle to the project-repo role
infrastructure
Difficulty: medium
Autonomy: supervised
Priority: high
Lane: local-dev
Status: draft
Consequence: judge
Witness: bash gallery/gallery_run.sh --all in lens/autolens_visualization reproduces the 40 PNGs (byte-diff acceptable only in the version string) and writes the tracked gallery/viz_manifest.yaml; python3 organs/PyAutoMind/scripts/repos_sync.py --check clean (bar the pre-existing hub-blurb leg, if still red); pyauto-brain eyes survey lens/autolens_visualization reports no gaps and no orphans
Review-minutes: 15
Epic: pyautoeyes-birth
Phase: 1a
Filed: 2026-09-28
Blocked on: human repo creation (gh repo create PyAutoLabs/autolens_visualization --public — the agent is denied gh repo create).
Layering (human decision 2026-09-28)
Two layers, the same shape as autolens_profiling / autolens_inference
under the Brain board. Project repos<lib>_visualization make, store and
track the figures of one library. The organ PyAutoEyes is the cross-project
dashboard that reads every project repo's tracked manifest and links to its
PNGs; it renders nothing and copies no figures. This phase puts the lens
content back into its own project repo; phase 1b strips the organ to its
skeleton.
Agent, after the human confirms the empty repo exists:
History carries over. From the current organs/PyAutoEyes checkout
(clean, in sync with origin/main), add the new repo as a remote and push
the current main history to it — git remote add autolens_visualization https://github.com/PyAutoLabs/autolens_visualization.git && git push autolens_visualization main — so every PNG keeps its provenance (PR docs: update stale admin_jammy/prompt/ refs to PyAutoPrompt/ #1,
the phase-0 commits). Then clone it to lens/autolens_visualization
(origin = the new repo). PyAutoEyes main is left untouched here; phase 1b
strips it.
In lens/autolens_visualization (task worktree, one PR):
README.md / AGENTS.md (+ CLAUDE.md stub) retitled to autolens_visualization, the layering stated: a project repo that owns
the lens figures — producers, simulators, datasets, plots.yaml,
instruments, tracked PNGs, GALLERY.md, the render harness — while the
organ PyAutoEyes only aggregates it on its dashboard. Remove organ prose
inherited from phase 0 (registry, board, "every library").
Tracked manifest.gallery/gallery_build.py writes viz_manifest.yaml to a tracked path (gallery/viz_manifest.yaml),
carrying every figure it holds (producer, domain, relative PNG path,
size, mtime-free content hash) plus the rendered stack version; output/gallery/gallery.html stays gitignored. render.yml commits the
manifest alongside the PNGs and GALLERY.md. --check fails on a stale
manifest. This is the organ's read contract (phase 1b reads it).
render.yml: keep the pyautolens-releaserepository_dispatch (plain
git PNGs, no LFS); add a final step that fires a repository_dispatch
(eyes-refresh) at PyAutoEyes so its dashboard refreshes (Cortex
pattern; token as the other cross-repo dispatches use).
autolens_visualization:
path: lens/autolens_visualizationgithub: PyAutoLabs/autolens_visualizationcategory: projectrole: "Rendered PyAutoLens figures — every visualizer output on realistic HST-scale imaging and SMA interferometer data, the producers and harness that render them, re-rendered on each release; aggregated by the PyAutoEyes dashboard."
and the PyAutoEyes role rewritten to the layered wording (the
cross-project visualization dashboard over the <lib>_visualization
project repos: registry, manifest contract, Pages board; renders nothing,
never judges, never edits plot code). ROUTING.md target list gains autolens_visualization. Then python3 scripts/repos_sync.py --write
and propagate the generated map blocks / organ tables to their repos
(watch the --write-from-bundle spill into canonical checkouts).
PyAutoBrain — Eyes conductor prose
(agents/conductors/eyes/AGENTS.md, skills/eyes/eyes.md): default
instance → lens/autolens_visualization, with the layering in one
paragraph (project repos hold the figures; the organ PyAutoEyes is the
dashboard; the registry that lists instances arrives in phase 2); bin/clean_slate.sh dataset-wipe exclusion for the new path. _eyes.py
stays repo-name-free.
PR order Mind → Brain → Heart → autolens_visualization. While Heart is RED the
PRs ship only under a contemporaneous human RED override. Merge stays human
(/prm). Phase 1b must not start deleting organ content until this phase is
merged and the history is confirmed on the new repo (git ls-remote).
Overview
Phase 1a of the
pyautoeyes-birthepic, under the layered design the human chose on 2026-09-28: project repos<lib>_visualizationmake, store and track one library's figures; the organ PyAutoEyes is the cross-project dashboard that reads each project repo's tracked manifest and links to its PNGs (it renders nothing and copies no figures). This task puts the lens content back into its own project repo,PyAutoLabs/autolens_visualization, adds the trackedgallery/viz_manifest.yamlread contract, and registers the repo across Mind, Brain and Heart. Phase 1b (stripping the organ to its skeleton) must not start until this is merged.Classification: feature, medium, direct; workflow library (start_library → ship_library). Autonomy: supervised.
Feature Agent risk note: "Public-API change may ripple to downstream repos". It does not: this task changes no library code (PyAutoFit/Array/Galaxy/Lens untouched), so nothing ripples downstream.
Heart at the door: YELLOW — "PyAutoMemory: open PR 7d old (updated 5h ago)".
Parallel claim: human-approved 2026-09-28 over PyAutoMind / PyAutoBrain / PyAutoHeart alongside
eyes-organ-order(#439). The only overlap is Mindrepos.yaml: #439 reorders the organ rows; 1a adds a project row afterautolens_inferenceand rewrites the PyAutoEyesrolestring.Already done this session:
gh repo create PyAutoLabs/autolens_visualization --public.8f3e712) was pushed to it.git ls-remoteshowsrefs/heads/main 8f3e7124dc….lens/autolens_visualization(origin = the new repo, 40 PNGs present).Plan
lens/autolens_visualization(done).gallery/viz_manifest.yaml(content hashes + rendered stack version), and--checkfails on a stale manifest.render.ymlcommits it and fires aneyes-refreshrepository_dispatchat PyAutoEyes.autolens_inference(using theautolens_profilingrow as the template), PyAutoEyes role rewritten to the dashboard wording, ROUTING target, thenrepos_sync --writeand propagation.skills/eyes/eyes.mddefault instance →lens/autolens_visualization, with the layering paragraph;bin/clean_slate.shexclusion comment/path.config/repos.yamlexcluded list gainsautolens_visualizationbesideautolens_profiling.Detailed implementation plan
Affected Repositories
Branch Survey
PyAutoMind/PyAutoBrain/PyAutoHeart are also claimed by
eyes-organ-order(#439) onfeature/eyes-organ-order. A parallel worktree was human-approved on 2026-09-28 (overlap: Mindrepos.yamlonly).Suggested branch:
feature/autolens-visualization-rebirth(all four repos)Worktree root:
~/Code/PyAutoLabs-wt/autolens-visualization-rebirth(created by start_library)Implementation Steps
Human first, quoted verbatim for the session:
gh repo create PyAutoLabs/autolens_visualization --publicAgent, after the human confirms the empty repo exists:
History carries over. From the current
organs/PyAutoEyescheckout(clean, in sync with
origin/main), add the new repo as a remote and pushthe current main history to it —
git remote add autolens_visualization https://github.com/PyAutoLabs/autolens_visualization.git && git push autolens_visualization main— so every PNG keeps its provenance (PR docs: update stale admin_jammy/prompt/ refs to PyAutoPrompt/ #1,the phase-0 commits). Then clone it to
lens/autolens_visualization(origin = the new repo). PyAutoEyes main is left untouched here; phase 1b
strips it.
In
lens/autolens_visualization(task worktree, one PR):autolens_visualization, the layering stated: a project repo that ownsthe lens figures — producers, simulators, datasets,
plots.yaml,instruments, tracked PNGs,
GALLERY.md, the render harness — while theorgan PyAutoEyes only aggregates it on its dashboard. Remove organ prose
inherited from phase 0 (registry, board, "every library").
gallery/gallery_build.pywritesviz_manifest.yamlto a tracked path (gallery/viz_manifest.yaml),carrying every figure it holds (producer, domain, relative PNG path,
size, mtime-free content hash) plus the rendered stack version;
output/gallery/gallery.htmlstays gitignored.render.ymlcommits themanifest alongside the PNGs and
GALLERY.md.--checkfails on a stalemanifest. This is the organ's read contract (phase 1b reads it).
render.yml: keep thepyautolens-releaserepository_dispatch(plaingit PNGs, no LFS); add a final step that fires a
repository_dispatch(
eyes-refresh) at PyAutoEyes so its dashboard refreshes (Cortexpattern; token as the other cross-repo dispatches use).
_viz_cli.pykept;activate.sh, lint.yml unchanged except names.Keep
dataset/imaging/hstbyte-identical to profiling (neverre-simulate).
PyAutoMind — mirror the feat: birth autolens_visualization — permanent figure gallery repo #436 registration set
(
complete/2026/09/autolens-visualization-birth.md):repos.yamlrowafter
autolens_inference, template theautolens_profilingrow —and the PyAutoEyes
rolerewritten to the layered wording (thecross-project visualization dashboard over the
<lib>_visualizationproject repos: registry, manifest contract, Pages board; renders nothing,
never judges, never edits plot code).
ROUTING.mdtarget list gainsautolens_visualization. Thenpython3 scripts/repos_sync.py --writeand propagate the generated map blocks / organ tables to their repos
(watch the
--write-from-bundle spill into canonical checkouts).PyAutoBrain — Eyes conductor prose
(
agents/conductors/eyes/AGENTS.md,skills/eyes/eyes.md): defaultinstance →
lens/autolens_visualization, with the layering in oneparagraph (project repos hold the figures; the organ PyAutoEyes is the
dashboard; the registry that lists instances arrives in phase 2);
bin/clean_slate.shdataset-wipe exclusion for the new path._eyes.pystays repo-name-free.
PyAutoHeart —
config/repos.yamldrift exclusion / organism list entryfor
autolens_visualization, as feat: birth autolens_visualization — permanent figure gallery repo #436 had it.Ship policy: PR order Mind → Brain → Heart → autolens_visualization. While Heart is RED, the PRs ship only under a contemporaneous human RED override. Merging stays human (
/prm).Witness:
bash gallery/gallery_run.sh --allinlens/autolens_visualizationreproduces the 40 PNGs (a byte-diff is acceptable only in the version string) and writes the trackedgallery/viz_manifest.yaml.python3 organs/PyAutoMind/scripts/repos_sync.py --checkis clean (except the pre-existing hub-blurb leg, if it is still red).pyauto-brain eyes survey lens/autolens_visualizationreports no gaps and no orphans.Key Files
lens/autolens_visualization/README.md,AGENTS.md,CLAUDE.md— retitle to the project-repo rolelens/autolens_visualization/gallery/gallery_build.py— trackedgallery/viz_manifest.yaml+--checkstalenesslens/autolens_visualization/.github/workflows/render.yml— commit the manifest;eyes-refreshdispatch to PyAutoEyesorgans/PyAutoMind/repos.yaml,ROUTING.md— project row, PyAutoEyes role, routing targetorgans/PyAutoBrain/agents/conductors/eyes/AGENTS.md,skills/eyes/eyes.md,bin/clean_slate.sh— default instance + layeringorgans/PyAutoHeart/config/repos.yaml— excluded-list entryOriginal Prompt
Click to expand starting prompt
PyAutoEyes phase 1a — re-birth autolens_visualization as the lens project repo
Type: feature
Target: autolens_visualization
Repos:
Themes:
Difficulty: medium
Autonomy: supervised
Priority: high
Lane: local-dev
Status: draft
Consequence: judge
Witness:
bash gallery/gallery_run.sh --allinlens/autolens_visualizationreproduces the 40 PNGs (byte-diff acceptable only in the version string) and writes the trackedgallery/viz_manifest.yaml;python3 organs/PyAutoMind/scripts/repos_sync.py --checkclean (bar the pre-existing hub-blurb leg, if still red);pyauto-brain eyes survey lens/autolens_visualizationreports no gaps and no orphansReview-minutes: 15
Epic: pyautoeyes-birth
Phase: 1a
Filed: 2026-09-28
Blocked on: human repo creation (
gh repo create PyAutoLabs/autolens_visualization --public— the agent is deniedgh repo create).Layering (human decision 2026-09-28)
Two layers, the same shape as
autolens_profiling/autolens_inferenceunder the Brain board. Project repos
<lib>_visualizationmake, store andtrack the figures of one library. The organ PyAutoEyes is the cross-project
dashboard that reads every project repo's tracked manifest and links to its
PNGs; it renders nothing and copies no figures. This phase puts the lens
content back into its own project repo; phase 1b strips the organ to its
skeleton.
Task
Human first, quoted verbatim for the session:
gh repo create PyAutoLabs/autolens_visualization --publicAgent, after the human confirms the empty repo exists:
History carries over. From the current
organs/PyAutoEyescheckout(clean, in sync with
origin/main), add the new repo as a remote and pushthe current main history to it —
git remote add autolens_visualization https://github.com/PyAutoLabs/autolens_visualization.git && git push autolens_visualization main— so every PNG keeps its provenance (PR docs: update stale admin_jammy/prompt/ refs to PyAutoPrompt/ #1,the phase-0 commits). Then clone it to
lens/autolens_visualization(origin = the new repo). PyAutoEyes main is left untouched here; phase 1b
strips it.
In
lens/autolens_visualization(task worktree, one PR):autolens_visualization, the layering stated: a project repo that ownsthe lens figures — producers, simulators, datasets,
plots.yaml,instruments, tracked PNGs,
GALLERY.md, the render harness — while theorgan PyAutoEyes only aggregates it on its dashboard. Remove organ prose
inherited from phase 0 (registry, board, "every library").
gallery/gallery_build.pywritesviz_manifest.yamlto a tracked path (gallery/viz_manifest.yaml),carrying every figure it holds (producer, domain, relative PNG path,
size, mtime-free content hash) plus the rendered stack version;
output/gallery/gallery.htmlstays gitignored.render.ymlcommits themanifest alongside the PNGs and
GALLERY.md.--checkfails on a stalemanifest. This is the organ's read contract (phase 1b reads it).
render.yml: keep thepyautolens-releaserepository_dispatch(plaingit PNGs, no LFS); add a final step that fires a
repository_dispatch(
eyes-refresh) at PyAutoEyes so its dashboard refreshes (Cortexpattern; token as the other cross-repo dispatches use).
_viz_cli.pykept;activate.sh, lint.yml unchanged except names.Keep
dataset/imaging/hstbyte-identical to profiling (neverre-simulate).
PyAutoMind — mirror the feat: birth autolens_visualization — permanent figure gallery repo #436 registration set
(
complete/2026/09/autolens-visualization-birth.md):repos.yamlrowafter
autolens_inference, template theautolens_profilingrow —and the PyAutoEyes
rolerewritten to the layered wording (thecross-project visualization dashboard over the
<lib>_visualizationproject repos: registry, manifest contract, Pages board; renders nothing,
never judges, never edits plot code).
ROUTING.mdtarget list gainsautolens_visualization. Thenpython3 scripts/repos_sync.py --writeand propagate the generated map blocks / organ tables to their repos
(watch the
--write-from-bundle spill into canonical checkouts).PyAutoBrain — Eyes conductor prose
(
agents/conductors/eyes/AGENTS.md,skills/eyes/eyes.md): defaultinstance →
lens/autolens_visualization, with the layering in oneparagraph (project repos hold the figures; the organ PyAutoEyes is the
dashboard; the registry that lists instances arrives in phase 2);
bin/clean_slate.shdataset-wipe exclusion for the new path._eyes.pystays repo-name-free.
PyAutoHeart —
config/repos.yamldrift exclusion / organism list entryfor
autolens_visualization, as feat: birth autolens_visualization — permanent figure gallery repo #436 had it.Ship policy
PR order Mind → Brain → Heart → autolens_visualization. While Heart is RED the
PRs ship only under a contemporaneous human RED override. Merge stays human
(
/prm). Phase 1b must not start deleting organ content until this phase ismerged and the history is confirmed on the new repo (
git ls-remote).