Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ Canonical boundaries live in `PyAutoBrain/ORGANISM.md`; the full body map
| **Hands** | PyAutoHands | Packaging, tagging, notebook generation, PyPI release execution. |
| **Pulse** | PyAutoPulse | The Pulse — cross-project profiling dashboard over the `<lib>_profiling` repos: campaign intent, instance registry, the versioned `profiling-summary` read contract, ingest receipts and the Pages board. Validates the contract only; never judges, scores or issues verdicts (the Brain's profiling conductor judges). |
| **Insight** | PyAutoInsight | Inference campaign intent, the cross-project inference instance registry, the versioned `inference-summary` read contract, ingest receipts and the evidence dashboard. Projects execute, Cortex records the science, Mind owns task state; never infers scientific acceptance or submits compute. |
| **DNA** | PyAutoDNA | Software-stack specifications, environment inventory receipts, support rationale, upgrade campaigns and adoption history. Brain coordinates, Heart validates readiness, Hands releases, Nerves enforces runtime compatibility; collection never upgrades environments. |
| **Nerves** | PyAutoNerves | The Nerves — the configuration/serialization layer connecting workspace conventions to libraries (layered config, version handshake, test_mode), delivered as the `autonerves` package. |
| **Gut** | PyAutoGut | Lifecycle of condemned self-material (stale branches, stashes, dead code/tests): held as recoverable git refs through a transit window, voided on a sweep. The storage mirror of Memory. |

Expand Down
20 changes: 20 additions & 0 deletions ORGANISM.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ organs plan, build, test and release it, and you make every judgment call.
| **Hands** | PyAutoHands | Builds and releases — packaging, tagging, notebook generation, PyPI via `release.yml`. A pure executor: runs no readiness checks and never re-derives a gate decision. |
| **Pulse** | PyAutoPulse | Feels *how fast the organism runs* across the `<lib>_profiling` project repos. Owns profiling campaign intent and pending domain tasks, the profiling instance registry, the versioned `profiling-summary` read contract, the ingest receipts (resolved commit per project per render) and the cross-project board. Validates the exchange contract only; project repos own producers, results, pins, drift policy and their own Pages page. Never moves pins, combines unmatched timings, applies the compile threshold to runtime, computes an ecosystem-wide speed score or issues a readiness verdict; the Brain's profiling conductor (`triage`) is the only judge. |
| **Insight** | PyAutoInsight | Owns inference campaign intent and pending domain tasks, the cross-project inference instance registry, versioned `inference-summary` read contract, ingest receipts and evidence dashboard. Projects own execution, producers and raw samples; Cortex owns scientific run records, observations and human conclusions; Mind owns bounded implementation lifecycle and repository claims. Never infers scientific acceptance from execution, ranks incompatible runs or submits compute on refresh. |
| **DNA** | PyAutoDNA | Owns software-stack specifications, environment inventory receipts, compatibility decisions, upgrade campaigns and adoption history across local, RAL and CI. Brain coordinates updates; Heart owns validation/readiness; Hands owns release execution/provenance; Nerves owns runtime compatibility. Package repositories remain authoritative for requirements. Collection never upgrades an environment or treats missing observations as passing evidence. |
| **Nerves** | PyAutoNerves | The configuration/serialization layer (`autonerves`) — layered config with overrides, the workspace↔library version handshake, `test_mode`, FITS/JSON I/O. Connects the organism's conventions to every library; the base layer the scientific libraries all import. |
| **Gut** | PyAutoGut | Owns the lifecycle of *condemned self-material* — stale branches, stashes, dead code/tests. Holds each as a durable, recoverable git ref through a transit window and **voids** it on a sweep. The storage mirror of Memory (retention ↔ release); the hygiene conductor drives it, as vitals reads Heart. |

Expand Down Expand Up @@ -129,3 +130,22 @@ conclusions; Mind retains implementation lifecycle and claims. A dashboard alone
waive the state-or-effects requirement for a new organ. The human interaction
layer is the command surface (`/route` + the verb commands), which is part of
Brain.

## Software-stack identity and adoption

DNA owns the persistent environment registry and immutable stack specifications,
plus support rationale, inventory receipts and upgrade/adoption history. This is
state distinct from runtime configuration in Nerves and readiness in Heart.
Source checkouts are identified by commit and dirty state; published wheels by
version and source provenance; workspace declarations are compatibility floors.
Frozen source version stamps are not compared to wheel versions as an equality
check. Upstream availability, declared compatibility, tested combinations,
recommended stacks and observed installations remain separate facts.

Brain coordinates proposals using DNA records and existing development/release
workflows. Heart retains the authoritative validation and readiness verdict;
DNA links evidence without re-deriving it. Hands retains release execution and
provenance. Mind tracks implementation tasks. Project campaigns retain their
original stack identity; adoption changes the default for new work only through
an explicit operation. Dashboard refreshes collect and render, never install,
submit compute or mutate live environments.
12 changes: 12 additions & 0 deletions board/_theme.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,12 @@
"ink_light": "#995500", "ink_dark": "#ffc163", "glow": "#ffb347",
"hero": ("#392600", "#000000"),
},
"dna": {
"organ": "DNA",
"tagline": "Specify. Compare. Evolve.",
"ink_light": "#087b88", "ink_dark": "#67e8f9", "glow": "#22d3ee",
"hero": ("#08343c", "#00060a"),
},
"nerves": {
"organ": "Nerves",
"tagline": "Signal. Connect. Understand.",
Expand Down Expand Up @@ -376,6 +382,11 @@
'<circle cx="24" cy="20" r="13"/>'
'<path d="M18,32 L18,38 L30,38 L30,32 M20,43 L28,43 M24,7 L24,20 L31,24"/>'
),
"dna": (
'<path stroke="currentColor" d="M15,5 C15,19 33,29 33,43 M33,5 C33,19 15,29 15,43"/>'
'<path d="M15.5,8 L32.5,8 M18,15 L30,15 M21,21 L27,21 '
'M21,27 L27,27 M18,33 L30,33 M15.5,40 L32.5,40"/>'
),
"nerves": (
'<circle cx="24" cy="24" r="20.4"/>'
'<circle cx="16" cy="23" r="3.4"/>'
Expand Down Expand Up @@ -833,6 +844,7 @@ def navigation_cards(items, label="Board sections", *, columns=None):
"memory": ("Build your ", "Memory", ""),
"pulse": ("Check your ", "Pulse", ""),
"insight": ("Find your next ", "Insight", ""),
"dna": ("Check your ", "DNA", " for stack drift"),
"nerves": ("Check your ", "Nerves", " for config drift"),
"gut": ("Clear out your ", "Gut", ""),
"eyes": ("Review figures with your ", "Eyes", ""),
Expand Down
2 changes: 2 additions & 0 deletions config/policy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ test_witness:
pyautoears: PyAutoEars/tests
pyautopulse: PyAutoPulse/tests
pyautoinsight: PyAutoInsight/tests
pyautodna: PyAutoDNA/tests
# PyAutoGut has no test suite — deliberately absent, so the conductor's
# "strengthen tests first" advice is correct there rather than noise.

Expand Down Expand Up @@ -170,6 +171,7 @@ board:
hands: PyAutoHands
pulse: PyAutoPulse
insight: PyAutoInsight
dna: PyAutoDNA
nerves: PyAutoNerves
gut: PyAutoGut
organism: PyAutoScientist
1 change: 1 addition & 0 deletions docs/board-navigation.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ The authoritative membership is `config/policy.yaml` → `board.boards`.
| Heart | Heart `heart/dashboard.py` | Downstream shared-theme consumer; retain readiness semantics |
| Hands | Hands `autohands/board.py` | Downstream shared-theme consumer |
| Pulse | Pulse `pulse/board.py` | Downstream shared-theme consumer |
| DNA | DNA `dna/board.py` | Shared components; environment, compatibility, decision and campaign sections |
| Nerves | Nerves `scripts/board.py` | Downstream shared-theme consumer |
| Gut | Gut `scripts/board.py` | Downstream shared-theme consumer |
| Scientist | Scientist `scripts/organism_board.py` | Downstream shared-theme consumer |
Expand Down
2 changes: 2 additions & 0 deletions docs/board-orchestration.md
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ destinations, prompts and other presentation must still be detected.
| Memory | snapshot `generated` | `knowledge_board.yml` |
| Pulse | oldest successful ingest refresh receipt, preserved offline | `dashboard_refresh.yml` |
| Insight | oldest successful ingest refresh receipt, preserved offline | `dashboard_refresh.yml` |
| DNA | DNA inventory collection receipts; unknown while any required environment is unobserved | `pages.yml` |
| Nerves | snapshot `generated`, unknown on collection errors | `nerves_board.yml` |
| Gut | snapshot `generated`, unknown on collection errors/missing ref listing | `gut_board.yml` |
| Eyes | oldest successful manifest collection `captured_at`, not figure age | `dashboard_refresh.yml` |
Expand All @@ -140,6 +141,7 @@ The shared component must land before consumers of its new keyword arguments.
| Memory | Memory `scripts/board.py` | Knowledge and reading queue review; resolved Memory remote; paper actions retained |
| Pulse | Pulse `pulse/campaigns.py` and `pulse/board.py` | Existing profiling check-in; Pulse ledger and every registered project repository; separate systematic-fix action retained |
| Insight | Insight `insight/campaigns.py` and `insight/board.py` | Existing inference check-in; Insight ledger and registered inference project repositories |
| DNA | DNA `dna/board.py` | Stack inventory, compatibility and upgrade check-in; DNA work repository; refresh never installs packages or promotes a stack |
| Nerves | Nerves `scripts/board.py` index | Configuration review; Nerves and named source repositories from the collected body-map identities; source detail pages retain their specific controls |
| Gut | Gut `scripts/board.py` | Retention/recovery review; Gut and the associated Mind retention ledger; permanent void still requires explicit human authorization |
| Eyes | Eyes `eyes/board.py` | Figure review; Eyes plus every registered visualization project repository; per-figure copy/critique actions retained |
Expand Down
1 change: 1 addition & 0 deletions docs/board-sizing.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ adoption. This task edits Brain only; other repository entries are audit results
| Hands | `PyAutoHands/autohands/board.py` → shared theme | Automatic; no outer override found | `release_board.yml` renders with Brain checkout |
| Pulse | `PyAutoPulse/pulse/board.py` → `pulse/setup_browser.py::theme()` | Automatic: current main already imports Brain; intake's independent-width assessment is obsolete | Refresh regenerates HTML using Brain, then Pages copies it |
| Insight | `PyAutoInsight/insight/board.py` → `insight/theme.py` | Independent 1200px main container and 16px gutters; explicit adoption and overflow repair follow-up | Refresh generates output; Pages copies it and validates feed with Brain |
| DNA | `PyAutoDNA/dna/board.py` → shared theme | New consumer; requires matching Brain registration and DNA merge, then publication verification | `pages.yml` renders and publishes |
| Nerves | `PyAutoNerves/scripts/board.py` → shared theme | Automatic; no outer override found | `nerves_board.yml` renders with Brain checkout |
| Gut | `PyAutoGut/scripts/board.py` → shared theme | Automatic; no outer override found | `gut_board.yml` renders with Brain checkout |
| Scientist | `PyAutoScientist/scripts/organism_board.py` → shared theme | Automatic for the organ board; embedded/cockpit presentation needs its own later verification | `organism_board.yml` renders with Brain checkout |
Expand Down
4 changes: 2 additions & 2 deletions tests/test_board_theme.py
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ def test_board_links_reads_the_declared_family_in_file_order():
# the order `config/policy.yaml` declares — the ruled organ order.
links = _theme.board_links("https://example.invalid")
assert list(links) == ["brain", "mind", "cortex", "memory", "eyes", "ears",
"heart", "hands", "pulse", "insight", "nerves", "gut", "organism"]
"heart", "hands", "pulse", "insight", "dna", "nerves", "gut", "organism"]
assert list(links) == POLICY_BOARDS
assert links["cortex"] == "https://example.invalid/PyAutoCortex/"

Expand All @@ -302,7 +302,7 @@ def test_board_links_renders_the_family_footer_end_to_end():
_theme.board_links("https://example.invalid", "heart"), "heart")
order = re.findall(r'data-organ="(\w+)"', footer)
assert order == ["brain", "mind", "cortex", "memory", "eyes", "ears", "hands",
"pulse", "insight", "nerves", "gut", "organism"]
"pulse", "insight", "dna", "nerves", "gut", "organism"]


def test_board_links_returns_nothing_when_the_config_is_unreadable():
Expand Down
Loading