Skip to content

feat: strip PyAutoEyes to the organ skeleton — registry, eyes/ package, pyauto-eyes, Pages (PyAutoEyes 1b) #448

Description

@Jammy2211

Overview

Phase 1b of the pyautoeyes-birth epic. Under the layered design (human decision 2026-09-28), each <lib>_visualization project repo makes, stores and tracks its figures; the organ PyAutoEyes becomes the cross-project dashboard over them. This task strips PyAutoEyes of the lens gallery content that phase 1a (#446) moved to PyAutoLabs/autolens_visualization, and builds the organ skeleton: registry.yaml, the versioned manifest contract, the eyes/ package, bin/pyauto-eyes, and the Pages dashboard workflows. The organ renders nothing, copies no figures, never judges, and never edits library plot code.

Plan

  • Strip (commit 1, reviewable alone): delete producers, simulators, dataset/, tracked PNGs, GALLERY.md, instruments/, config/, gallery/, _viz_cli.py, activate.sh, lint.yml/render.yml. The history is preserved in git and on PyAutoLabs/autolens_visualization (refs/heads/main 8f3e712).
  • Skeleton (commit 2): registry.yaml (lens row only), REFERENCE.md (manifest contract schema 1), the eyes/ package (registry, manifest reader, board builder), bin/pyauto-eyes (board, check, survey), organ prose stating the layering and boundary, hermetic tests, and the workflows lint.yml, pages_dashboard.yml and dashboard_refresh.yml (repository_dispatch eyes-refresh plus a daily cron, the Cortex pattern).
  • Brain (one change): replace the PyAutoEyes WITNESS_EXEMPT entry in tests/test_policy_seams.py with a pyautoeyes: PyAutoEyes/tests row in the config/policy.yaml test_witness map.
  • Ship order: PyAutoEyes first, then PyAutoBrain. PRs wait until PyAutoMind#447 (phase 1a) is merged. Merge stays human.
Detailed implementation plan

Affected Repositories

  • PyAutoEyes (primary)
  • PyAutoBrain (witness row only)

Branch Survey

Repository Current Branch Dirty?
./organs/PyAutoEyes main (8f3e712 = origin) clean
./organs/PyAutoBrain main clean

worktree_check_conflict: PyAutoEyes is free. PyAutoBrain is claimed by eyes-organ-order (#439) and autolens-visualization-rebirth (#446). A parallel claim was human-approved in-session on 2026-09-28. The files do not overlap: 1b touches only tests/test_policy_seams.py and config/policy.yaml, #446 touches the eyes conductor prose, docs and clean_slate, and #439 touches _pyauto_root and docs.

Suggested branch: feature/eyes-organ-skeleton

Implementation Steps

  1. PyAutoEyes commit 1 (strip): git rm of scripts/, dataset/, config/, instruments/, gallery/, GALLERY.md, _viz_cli.py, activate.sh, .github/workflows/{lint,render}.yml. Keep LICENSE, AI_POLICY.md, ruff.toml, the CLAUDE.md stub, .claude/ hooks, and the repos_sync:* marker blocks in AGENTS.md.
  2. PyAutoEyes commit 2 (skeleton):
    • registry.yaml: lens row with name, repo, path, github, library, import_name, manifest, images_base_url, gallery, dispatch_event.
    • REFERENCE.md: the manifest contract, schema 1 (schema, generated, rendered_with{...}, figure_count, figures[{file, producer, domain, source, bytes, sha256}]), what the organ reads, and the versioning rule.
    • eyes/registry.py, eyes/manifest.py (local path or raw GitHub URL; validates schema 1), eyes/board.py (dashboard.md + dashboard.html: per instance the figure count, rendered_with, generated date, freshness vs the latest library release with a graceful offline fallback, a thumbnail grid linking the raw PNGs, and a copyable /eyes review <instance> <figure> line per figure).
    • bin/pyauto-eyes: board [--offline] [--from <instance>=<path>], check, survey [<instance>|--all] (delegates to pyauto-brain eyes survey <instance path>).
    • AGENTS.md / README.md / CLAUDE.md: state the layering and the boundary.
    • tests/: hermetic tests for the registry, the manifest reader, the board builder and check.
    • .github/workflows/lint.yml (ruff, pytest, pyauto-eyes check, lychee), pages_dashboard.yml, dashboard_refresh.yml.
  3. PyAutoBrain: move PyAutoEyes out of WITNESS_EXEMPT into the test_witness row in config/policy.yaml. Run the policy_seams and skill_seams tests.

Key Files

  • PyAutoEyes/registry.yaml, PyAutoEyes/REFERENCE.md, PyAutoEyes/eyes/*.py, PyAutoEyes/bin/pyauto-eyes, PyAutoEyes/tests/, PyAutoEyes/.github/workflows/*.yml
  • PyAutoBrain/config/policy.yaml (test_witness), PyAutoBrain/tests/test_policy_seams.py (WITNESS_EXEMPT)
  • Read contract source: autolens_visualization/gallery/viz_manifest.yaml, gallery/gallery_build.py, .github/workflows/render.yml (fires eyes-refresh)

Feature Agent note

The Feature Agent sized this as large and suggested splitting it further. The epic's declared phasing (1a / 1b / 2) wins: the dashboard content is kept modest here, and phase 2 (eyes_p2_board_and_conductor_registry.md) expands it.

Original Prompt

Click to expand starting prompt

PyAutoEyes phase 1b — strip the organ to its dashboard skeleton

Type: feature
Target: PyAutoEyes
Repos:

  • PyAutoEyes
  • PyAutoBrain
    Themes:
  • visualization
  • infrastructure
    Difficulty: large
    Autonomy: supervised
    Priority: high
    Lane: local-dev
    Status: draft
    Consequence: judge
    Witness: pyauto-eyes check green against the lens registry row (manifest resolves, every listed PNG URL resolves); hermetic tests green (registry, manifest reader, board builder on a fabricated manifest, check); lint.yml green on the PR; pyauto-eyes board writes dashboard.md/.html with a lens row linking into PyAutoLabs/autolens_visualization
    Review-minutes: 15
    Epic: pyautoeyes-birth
    Phase: 1b
    Filed: 2026-09-28

Blocked on: phase 1a shipped (history confirmed on PyAutoLabs/autolens_visualization).

Task

PyAutoEyes becomes the cross-project dashboard of the layered design (human
decision 2026-09-28): it reads each <lib>_visualization project repo's
tracked manifest and links to its PNGs. It renders nothing, copies no
figures, never judges (the Brain Eyes conductor does), never edits library
plot code (critiques route through intake).

  • Strip, in one PR. Delete from the organ everything phase 1a moved to
    autolens_visualization: scripts/ producers + simulators, dataset/,
    the tracked PNGs, GALLERY.md, instruments/, config/, gallery/,
    _viz_cli.py, activate.sh, render.yml. History stays in git and in
    the project repo.
  • registry.yaml — one row per instance: name, path, github, library, import_name, manifest (tracked path in the project repo, e.g.
    gallery/viz_manifest.yaml), images_base_url (raw.githubusercontent
    base), dispatch (the library release event the project repo re-renders
    on). Lens row only.
  • Manifest contract — REFERENCE.md specifies the fields the project
    repos commit (figure list + rendered stack version) and what the organ
    reads; versioned so project repos and organ can move independently.
  • eyes/ package — registry.py (read + validate registry.yaml),
    manifest.py (read a manifest from a local checkout or its GitHub raw URL),
    board.py (build dashboard.md/.html from registry + manifests; phase 2
    fills the content).
  • bin/pyauto-eyes — board, check (registry valid, every manifest
    reachable and parseable, every PNG URL resolves), survey (runs
    pyauto-brain eyes survey <instance root> per registered instance).
  • Organ prose — AGENTS.md / README.md / REFERENCE.md / CLAUDE.md stub
    stating the layering (project repos make, store and track figures; the
    organ is where the human checks in on visualization across all projects;
    same layering as autolens_profiling / autolens_inference under the
    Brain board), repos_sync:map markers kept.
  • Workflows — lint.yml (ruff, pytest, pyauto-eyes check, lychee);
    pages_dashboard.yml + dashboard_refresh.yml on repository_dispatch
    (eyes-refresh, fired by each project repo's render.yml) and a daily
    cron (Cortex pattern).
  • Tests — hermetic: registry, manifest reader, board builder on a
    fabricated manifest, check. Then replace the Brain WITNESS_EXEMPT
    entry (tests/test_policy_seams.py) with a pyautoeyes: row in
    config/policy.yaml's witness map.

Ship policy

PyAutoBrain (witness row) merges after PyAutoEyes. While Heart is RED the PRs
ship only under a contemporaneous human RED override. Merge stays human.

Activity

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