Skip to content

feat(board): Pulse strip + cockpit card (profiling organ phase 3, narrowed) #450

Description

@Jammy2211

Overview

Phase 3 of profiling-organ-birth: the organ → Brain board interface for PyAutoPulse. Adds the Pulse strip to the Brain board (composed from the organ's own dashboard.md head counts, exactly as the Cortex and Eyes strips are), a Pulse card to the public cockpit (fed from PyAutoPulse/state.json), and names the organ in the profiling conductor's prose. Human decision 2026-10-02: narrowed scope — PyAutoBrain + pyautolabs.github.io only; the autolens_profiling cockpit-feed identity change (organ: profiling → a project label) is split into its own prompt, blocked on another session's claim of that repo. The Brain never consumed the project feed (the superseding draft pyautobrain/register_profiling_dashboard_on_brain_board.md never shipped), so there is no source transition to perform — only a card to add. Heart at the door: YELLOW 85.

Plan

  • Brain board: collect_pulse() strip (head counts of PyAutoPulse/dashboard.md), rendered in Resume beside Eyes in markdown and HTML, linking the Pulse board; test mirroring the Eyes strip test; board AGENTS.md line.
  • Conductor prose: profiling conductor AGENTS.md + skills/profiling/profiling.md say drift candidates are read from the Pulse board and measurement semantics live in autolens_profiling; the skill learns that a /profiling triage <comparison_key> prompt from Pulse names a row on the Pulse board (the CLI triage verb takes no target — no CLI change).
  • Cockpit: Pulse card after Hands in cockpit/index.html, {organ: "Pulse", repo: "PyAutoPulse", feed: BASE + "PyAutoPulse/state.json"}.
  • Docs: docs/organs/pulse.md gains the state.json/cockpit paragraph (template docs/organs/eyes.md:43-45) and the phase 3 row.
  • Close-out retires the superseded draft prompt against this record.
Detailed implementation plan

Affected Repositories

  • PyAutoBrain (primary)
  • pyautolabs.github.io

Branch Survey

Repository Current Branch Dirty?
organs/PyAutoBrain main clean
pyautolabs.github.io main clean

worktree_check_conflict clear for these two. Suggested branch: feature/pyautopulse-brain-board-cockpit.

Implementation Steps — PyAutoBrain

  1. board/_board.py: after collect_eyes (:715) add collect_pulse(repo="PyAutoPulse") returning _dashboard_counts(repo, head_only=True) with a docstring in the Eyes style (the organ's renderer decides the numbers; no checkout or no board → strip absent, not degraded). In collect() (:934) pulse = collect_pulse(board_family.get("pulse", "PyAutoPulse")); add "pulse": pulse to the data dict (:954). render_md Resume (:1341): - Pulse: <k n · …> — [Pulse board](boards.pulse). HTML (~:1723): Run times on the <a …>Pulse board ↗</a> + pills, same shape as Eyes. Never into state.json (strips are display-only).
  2. tests/test_board.py: add "pulse" to SURFACE_KEYS; add PULSE_DASHBOARD_MD (head: # PyAutoPulse — profiling dashboard, | Where | Count |, rows Projects 1 / Records 159 / Comparisons 145 / Drifted 0 / Refused pairs 0 / Cached 0 / Failed 0, then a ## Projects body table that must not be counted); _fabricate writes PyAutoPulse/dashboard.md; test_the_pulse_strip_composes_the_pulse_own_head_counts mirroring :340-357 (counts dict, boards["pulse"] endswith /PyAutoPulse/, md line - Pulse: projects 1 · records 159 · …, --html contains Pulse board and data-organ="pulse", strip is None when the file is missing).
  3. board/AGENTS.md: one line naming the Pulse strip among the sibling strips (Cortex, Eyes) in the Resume row or the Configuration boards note.
  4. agents/conductors/profiling/AGENTS.md + skills/profiling/profiling.md: one paragraph — the Pulse board is where cross-project drift candidates and their provenance are read; autolens_profiling owns producers, pins and drift policy; a /profiling triage <comparison_key> prompt arriving from a Pulse drift item refers to that row on the Pulse board (open it, read the pair of records + evidence paths, then judge with triage). No change to _profiling.py.
  5. docs/organs/pulse.md: the state.json/cockpit paragraph + phase 3 in the phases list.
  6. Full pytest -q tests (≈25 min; run under env -u PYAUTO_MIND to avoid the known grouped-checkout artefact).

Implementation Steps — pyautolabs.github.io

  1. cockpit/index.html (~:238-251): insert after the Hands line { organ: "Pulse", icon: "⏱️", repo: "PyAutoPulse", feed: BASE + "PyAutoPulse/state.json" }, (canonical order after Hands, before Nerves). Also update the order prose in the hub AGENTS.md:43 if it lists cockpit cards. Open the file in a browser or run node -e syntax check if available; otherwise eyeball the JS literal.

Key Files

  • organs/PyAutoBrain/board/_board.py:682-725,901-954,1341-1345,1716-1729 — strip model (Eyes)
  • organs/PyAutoBrain/tests/test_board.py:28-40,190-245,340-357 — test model
  • pyautolabs.github.io/cockpit/index.html:238-251,307 — card list + identity check
  • organs/PyAutoPulse/dashboard.md head — the live counts table the strip parses

Out of scope

autolens_profiling (build_state() identity; follow-up prompt draft/feature/autolens_profiling/cockpit_feed_project_identity.md, blocked on task evaluation-grid-cap-field); any new judgment in the Brain board; Heart readiness; the inference organ.

Original Prompt

Click to expand starting prompt

Profiling organ phase 3 — Brain board card and cockpit transition

Type: feature
Target: PyAutoPulse
Repos:

  • PyAutoBrain
  • autolens_profiling
  • PyAutoPulse
    Themes:
  • profiling
    Difficulty: medium
    Autonomy: supervised
    Priority: normal
    Status: draft
    Consequence: judge
    Witness: the Brain board (board/_board.py) renders one organ strip for the profiling organ beside Cortex/Eyes, reading the organ's state.json; the autolens_profiling project page stays reachable from it; board/_state.py validates both feeds; no duplicate card for the same scope; Brain pytest green
    Review-minutes: 10
    Unattended: ready
    Filed: 2026-10-02
    Epic: profiling-organ-birth
    Phase: 3

Blocked on: phase 2 shipped (the organ's state.json exists and is published).

Phase 3 of the profiling-organ-birth epic — the organ → Brain board
interface. Human decision 2026-10-02: the organ is PyAutoPulse (organ key
pulse).

Context

autolens_profiling/dashboard/state.json emits organ: profiling today, a
legacy wire label from before the organ existed. The spec (Brain #444, "Two
interfaces") says: keep the project page/feed working during transition; when
a real organ is registered, update the Brain board's source and identity in
the same rollout step
, keep a clear link to the project page, and avoid
duplicate cards for the same scope. Do not silently repoint a feed before the
new consumer contract is tested — which is what phase 2's tests and this
phase's witness establish.

This phase supersedes
draft/feature/pyautobrain/register_profiling_dashboard_on_brain_board.md
(register the project feed on the Brain board) if that task has not shipped
first; if it has, this phase moves the card from the project feed to the
organ feed and retires nothing the project publishes.

Task

  1. PyAutoBrain board/_board.py: a collect_pulse() strip composed like
    collect_eyes() (the organ's renderer decides the numbers, the Brain board
    shows them), fed from the organ's state.json/board head; the boards
    family already lists the organ from phase 0. board/_theme.py ORGANS key
    and footer; board/AGENTS.md one line among the sibling boards. The strip
    links the organ board and, through it, the project page.
  2. Prompt wiring: the organ's drift items carry the producer's
    /profiling triage … prompt as a prompt-kind action; confirm the
    profiling conductor's triage verb accepts that argument shape (read-only
    check, fix the prompt text in the organ if not).
  3. autolens_profiling build_dashboard.py build_state(): once the organ
    strip is live, the project's own cockpit feed stops claiming
    organ: profiling — either organ: autolens_profiling as a project feed
    if board/_state.py admits project keys, or the project keeps state.json
    for its own Pages badge only and the Brain reads the organ. Decide on the
    issue from what _state.py and _theme.py actually accept; record the
    choice in the organ's REFERENCE.md.
  4. Profiling conductor prose: agents/conductors/profiling/AGENTS.md and
    skills/profiling/profiling.md name the organ board as where drift
    candidates are read from, and autolens_profiling as where the measurement
    semantics live.

Out of scope

Any new judgment in the Brain board (the organ displays, the conductor judges);
Heart readiness (the cockpit status is the organ's own monitoring scope, never
release readiness); the inference organ.

Ship policy

Supervised: plan on the issue, end at PR-open, merge human (/prm). Brain
merges after the organ's state.json is published and validated.

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