Skip to content

feat: PyAutoEyes dashboard content, critique route, Brain board chip, conductor --instance (PyAutoEyes 2) #451

Description

@Jammy2211

Overview

Phase 2 of the PyAutoEyes birth epic (pyautoeyes-birth). Phase 1b (#448) gave the organ its skeleton: registry.yaml, the manifest reader, a dashboard with thumbnails and /eyes review lines. This phase fills the dashboard with the survey and critique content, gives every figure a route for suggesting an improvement, puts an Eyes chip on the Brain board family footer, and teaches the Brain Eyes conductor to resolve instances by name through the organ's registry.

Plan

  • Dashboard content: per instance, the figure count, the conductor survey (stale renders, gaps, orphans) when a local checkout exists, freshness against PyPI, and the open critiques (Mind drafts that mention the instance). Also a badge.json.
  • Critique route per figure: the copyable /eyes review <instance> <figure> line, plus a pre-filled GitHub "new issue" link on the project repo (title figure: <domain>/<file>, body with the raw PNG link and a "Suggested improvement:" stub, label eyes-critique). The dashboard files nothing itself.
  • Brain board chip: boards.eyes: PyAutoEyes in canonical organ order, an ORGANS["eyes"] palette and MARKS["eyes"] glyph, and a collect_eyes() strip that reads PyAutoEyes' dashboard.md counts.
  • Eyes conductor: --instance <name> resolved through PyAutoEyes registry.yaml. Given the organ root, survey/review cover every registered instance. The conductor stays repo-name-free. The recursive-producer bug is left to its own draft.
  • Hermetic tests for every new piece, ruff clean, and prose updated (PyAutoEyes README/AGENTS/REFERENCE, Brain eyes AGENTS.md and skills/eyes/eyes.md).

Feature Agent note: the Agent suggested split-into-phases. The epic's declared phasing wins, since this prompt is already phase 2 of 5, so it ships as one task.

Detailed implementation plan

Work Classification

Library (organ code: PyAutoEyes + PyAutoBrain). No workspace follow-up.

Affected Repositories

  • PyAutoEyes (primary)
  • PyAutoBrain

Branch Survey

Repository Current Branch Dirty?
organs/PyAutoEyes main 3 untracked leftover dirs (dataset/, output/, scripts/), not from this task and left untouched
organs/PyAutoBrain main clean

worktree_check_conflict shows no conflict. The #448 claim has already been removed by its close-out.

Suggested branch: feature/eyes-board-conductor-registry
Worktree root: ~/Code/PyAutoLabs-wt/eyes-board-conductor-registry/

Implementation Steps

  1. PyAutoEyes eyes/board.py
    • InstanceView gains survey (parsed pyauto-brain eyes --json survey of the local checkout, or None with a note) and critiques (titles and paths of Mind drafts under draft/*/ that mention the instance repo or name).
    • The summary table gains Figures, Stale/Gaps/Orphans and Critiques columns.
    • Each figure row or card gets the review line plus an "Suggest improvement" link to https://github.com/<github>/issues/new?title=…&body=…&labels=eyes-critique. The body carries the raw PNG URL, the manifest generated date and rendered version, and a Suggested improvement: stub.
    • badge.json is written beside the dashboard. The render stays deterministic: the survey is summarised as counts and names only, never mtimes.
  2. PyAutoEyes eyes/cli.py
    • board runs the survey (--no-survey opts out) and the critique grep (the Mind checkout comes from $PYAUTO_MIND or the workspace root).
    • pages_dashboard.yml also publishes badge.json.
  3. Brain config/policy.yaml: boards: eyes: PyAutoEyes goes between memory and heart.
  4. Brain board/_theme.py: ORGANS["eyes"], an amber palette with contrast of at least 4.5:1 and distinct from the Hands orange, and MARKS["eyes"], an eye glyph in line art inside a ring. Update the ordered-family assertions in tests/test_board_theme.py.
  5. Brain board/_board.py: collect_eyes() reads the PyAutoEyes dashboard.md summary table (instances, figures, behind), and the md and html renders gain an "Eyes" line next to Cortex. Add eyes to SURFACE_KEYS in the tests.
  6. Brain agents/conductors/eyes/_eyes.py
    • --instance <name> (repeatable) and --instances-from <organ root>. The PyAutoEyes checkout resolves via $PYAUTO_EYES, then the sibling, then _repo_paths.repo_path(root, "PyAutoEyes").
    • A stdlib parser reads registry.yaml. The instance path resolves from the workspace root (grouped path, then flat repo).
    • Given the organ root as the workspace argument, the conductor covers every registered instance.
    • The gallery check also looks at the registry's manifest path.
    • New hermetic tests use a fabricated organ and registry.
  7. Prose: PyAutoEyes README/AGENTS/REFERENCE, plus Brain agents/conductors/eyes/AGENTS.md and skills/eyes/eyes.md, cover --instance and the critique route.
  8. Label: create eyes-critique on PyAutoLabs/autolens_visualization.

Witness

  • PyAutoEyes pytest tests, a live bin/pyauto-eyes check, and bin/pyauto-eyes board (show the dashboard.md head).
  • pyauto-brain eyes survey --instance lens shows imaging 22 and interferometer 18 with no gaps.
  • The full Brain suite outside the bundle env reports 0 failed.
  • The Heart and Hands pytest tests -k footer runs pass against the Brain branch.

Key Files

  • PyAutoEyes/eyes/board.py, eyes/cli.py, tests/, .github/workflows/pages_dashboard.yml
  • PyAutoBrain/config/policy.yaml, board/_theme.py, board/_board.py, agents/conductors/eyes/_eyes.py, tests/test_board_theme.py, tests/test_board.py, tests/test_eyes_conductor.py

Original Prompt

Click to expand starting prompt

PyAutoEyes phase 2 — cross-project dashboard, critique route, Brain chip, conductor registry

Type: feature
Target: PyAutoEyes
Repos:

  • PyAutoEyes
  • PyAutoBrain
    Themes:
  • visualization
  • infrastructure
    Difficulty: large
    Autonomy: supervised
    Priority: high
    Lane: local-dev
    Status: draft
    Consequence: judge
    Witness: the PyAutoEyes Pages dashboard publishes with a thumbnail per lens figure linked to its raw PNG in autolens_visualization, a freshness line, and a working "suggest an improvement" affordance per figure; a render.yml run in autolens_visualization triggers dashboard_refresh.yml; the Brain board footer shows the Eyes chip; tests/test_board_theme.py green; pyauto-brain eyes survey --instance lens resolves through registry.yaml
    Review-minutes: 15
    Epic: pyautoeyes-birth
    Phase: 2
    Filed: 2026-09-25

Blocked on: none — phase 1b COMPLETE 2026-09-28 (PyAutoMind#448; record complete/2026/09/eyes-organ-skeleton.md).

Task

  • Dashboard content (eyes/board.py → dashboard.md/.html, the epic
    ledger): per registered instance, a thumbnail grid of every figure in its
    tracked manifest, each thumbnail linked to the raw PNG in the project
    repo (the organ never copies figures), click-through to full size, grouped
    by domain/producer; per-instance freshness (rendered stack version vs the
    latest library release on PyPI); survey gaps and orphans (from
    pyauto-eyes survey); open critiques (Mind drafts carrying the instance's
    target); badge.json.
  • Critique route. Each figure carries a "suggest an improvement"
    affordance that pre-fills a critique routed through intake: a copyable
    /eyes review <instance> <figure> command and/or a pre-filled GitHub issue
    link on the project repo (title + figure path + manifest version). The
    dashboard never files anything itself.
  • Brain board chip: config/policy.yaml boards.eyes: PyAutoEyes;
    board/_theme.py ORGANS["eyes"] palette + MARKS["eyes"] glyph
    (tests/test_board_theme.py enforces); optional collect_eyes() strip in
    board/_board.py reading the dashboard's counts.
  • Eyes conductor: --instance <name> resolving through the organ's
    registry.yaml (survey/review default to every registered instance
    when given the organ root); the conductor stays repo-name-free — the
    registry is data, not code. The non-recursive producer scan stays its own
    bug draft (draft/bug/pyautobrain/eyes_survey_recursive_producers.md).

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