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
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).
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).
board/AGENTS.md: one line naming the Pulse strip among the sibling strips (Cortex, Eyes) in the Resume row or the Configuration boards note.
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.
docs/organs/pulse.md: the state.json/cockpit paragraph + phase 3 in the phases list.
- Full
pytest -q tests (≈25 min; run under env -u PYAUTO_MIND to avoid the known grouped-checkout artefact).
Implementation Steps — pyautolabs.github.io
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
- 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.
- 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).
- 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.
- 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.
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 owndashboard.mdhead counts, exactly as the Cortex and Eyes strips are), a Pulse card to the public cockpit (fed fromPyAutoPulse/state.json), and names the organ in the profiling conductor's prose. Human decision 2026-10-02: narrowed scope — PyAutoBrain + pyautolabs.github.io only; theautolens_profilingcockpit-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 draftpyautobrain/register_profiling_dashboard_on_brain_board.mdnever shipped), so there is no source transition to perform — only a card to add. Heart at the door: YELLOW 85.Plan
collect_pulse()strip (head counts ofPyAutoPulse/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.skills/profiling/profiling.mdsay drift candidates are read from the Pulse board and measurement semantics live inautolens_profiling; the skill learns that a/profiling triage <comparison_key>prompt from Pulse names a row on the Pulse board (the CLItriageverb takes no target — no CLI change).cockpit/index.html,{organ: "Pulse", repo: "PyAutoPulse", feed: BASE + "PyAutoPulse/state.json"}.docs/organs/pulse.mdgains the state.json/cockpit paragraph (templatedocs/organs/eyes.md:43-45) and the phase 3 row.Detailed implementation plan
Affected Repositories
Branch Survey
worktree_check_conflictclear for these two. Suggested branch:feature/pyautopulse-brain-board-cockpit.Implementation Steps — PyAutoBrain
board/_board.py: aftercollect_eyes(:715) add:934)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). Incollect()(pulse = collect_pulse(board_family.get("pulse", "PyAutoPulse")); add"pulse": pulseto the data dict (:954).:1341):render_mdResume (- Pulse: <k n · …> — [Pulse board](boards.pulse). HTML (~:1723):Run times on the <a …>Pulse board ↗</a>+ pills, same shape as Eyes. Never intostate.json(strips are display-only).tests/test_board.py: add"pulse"toSURFACE_KEYS; addPULSE_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## Projectsbody table that must not be counted);_fabricatewritesPyAutoPulse/dashboard.md;test_the_pulse_strip_composes_the_pulse_own_head_countsmirroring :340-357 (counts dict,boards["pulse"]endswith/PyAutoPulse/, md line- Pulse: projects 1 · records 159 · …,--htmlcontainsPulse boardanddata-organ="pulse", strip is None when the file is missing).board/AGENTS.md: one line naming the Pulse strip among the sibling strips (Cortex, Eyes) in the Resume row or the Configurationboardsnote.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_profilingowns 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 withtriage). No change to_profiling.py.docs/organs/pulse.md: thestate.json/cockpit paragraph + phase 3 in the phases list.pytest -q tests(≈25 min; run underenv -u PYAUTO_MINDto avoid the known grouped-checkout artefact).Implementation Steps — pyautolabs.github.io
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 hubAGENTS.md:43if it lists cockpit cards. Open the file in a browser or runnode -esyntax 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 modelpyautolabs.github.io/cockpit/index.html:238-251,307— card list + identity checkorgans/PyAutoPulse/dashboard.mdhead — the live counts table the strip parsesOut of scope
autolens_profiling (
build_state()identity; follow-up promptdraft/feature/autolens_profiling/cockpit_feed_project_identity.md, blocked on taskevaluation-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:
Themes:
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'sstate.json; theautolens_profilingproject page stays reachable from it;board/_state.pyvalidates both feeds; no duplicate card for the same scope; Brain pytest greenReview-minutes: 10
Unattended: ready
Filed: 2026-10-02
Epic: profiling-organ-birth
Phase: 3
Blocked on: phase 2 shipped (the organ's
state.jsonexists and is published).Phase 3 of the
profiling-organ-birthepic — the organ → Brain boardinterface. Human decision 2026-10-02: the organ is PyAutoPulse (organ key
pulse).Context
autolens_profiling/dashboard/state.jsonemitsorgan: profilingtoday, alegacy 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
board/_board.py: acollect_pulse()strip composed likecollect_eyes()(the organ's renderer decides the numbers, the Brain boardshows them), fed from the organ's
state.json/board head; theboardsfamily already lists the organ from phase 0.
board/_theme.pyORGANS keyand footer;
board/AGENTS.mdone line among the sibling boards. The striplinks the organ board and, through it, the project page.
/profiling triage …prompt as aprompt-kind action; confirm theprofiling conductor's
triageverb accepts that argument shape (read-onlycheck, fix the prompt text in the organ if not).
build_dashboard.pybuild_state(): once the organstrip is live, the project's own cockpit feed stops claiming
organ: profiling— eitherorgan: autolens_profilingas a project feedif
board/_state.pyadmits project keys, or the project keepsstate.jsonfor its own Pages badge only and the Brain reads the organ. Decide on the
issue from what
_state.pyand_theme.pyactually accept; record thechoice in the organ's
REFERENCE.md.agents/conductors/profiling/AGENTS.mdandskills/profiling/profiling.mdname the organ board as where driftcandidates are read from, and
autolens_profilingas where the measurementsemantics 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). Brainmerges after the organ's
state.jsonis published and validated.