Repository navigation
feat: organ skeleton — registry, commit-pinned reader + receipts, board, CLI, workflows (phase 2) - #2
Merged
Conversation
…ard, CLI (PyAutoPulse#1) Phase 2 of profiling-organ-birth, modelled on the PyAutoEyes skeleton: - registry.yaml (lens -> autolens_profiling); repo location and GitHub identity resolved from PyAutoMind/repos.yaml, never a second catalogue - pulse/summary.py: the profiling-summary v1 exchange contract (envelope, records, comparisons, coverage) plus comparison pairing that refuses axis-mismatched or changed-hardware pairs and groups by hardware - pulse/ingest.py: branch -> one commit via the GitHub API, summary read at that SHA, receipts/<instance>.json, last-good snapshots/<instance>.json shown as cached (never re-aged) when a fetch fails; local --from reads report revision + dirty state and write nothing - pulse/board.py: dashboard.md/.html, badge.json, state.json (organ pulse); integrity / freshness / qualification kept separate, producer ratios verbatim, /profiling triage handoff as a scientific_judgement prompt - bin/pyauto-pulse: check, board, census, fetch - hermetic tests over tests/fixtures (acceptance cases, a second-producer fixture, a trimmed copy of the live feed) - lint, pages_dashboard and dashboard_refresh workflows; AGENTS/REFERENCE/README Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…Pulse#1) bin/pyauto-pulse board online: lens resolved to d9f385f0, profiling-summary@1 valid (159 records, 145 comparisons, producer_revision 227b5c91); receipt, last-good snapshot and the four board files. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… via the API (PyAutoPulse#1) github.com answers unauthenticated blob-page fetches with 503 (rate limit), which failed lint twice on identical link sets; lychee documents --github-token for this. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Phase 2 of
profiling-organ-birth(PyAutoPulse#1): the organ skeleton. PyAutoPulse reads, validates and links theprofiling-summary@1feed each registered<lib>_profilingproject publishes, pins every ingest to one commit, keeps a receipt, and renders the cross-project board + cockpit feed. Modelled on the PyAutoEyes skeleton (PyAutoEyes#2) and the specPyAutoBrain/docs/research/profiling_inference_organs.md. Human decisions 2026-10-02: one task, two PRs — merge this one first, then PyAutoBrain (witness row +boards: pulse).What is in the box
registry.yaml— lens row only;repois a body-map identity,path/githubresolve fromPyAutoMind/repos.yaml(no second catalogue, per spec).pulse/registry.py,summary.py,ingest.py,board.py,cli.py;bin/pyauto-pulse check | board | census | fetch [--instance K].summary_pathat that SHA (raw URL), validates the exchange contract (schema/version, envelope keys, unique ids, finite numerics, dates, safe evidence paths, axis/unit consistency, hardware identity on comparison pairs), writesreceipts/<instance>.jsonand a last-goodsnapshots/<instance>.json. A failed fetch renders cached with the original evidence time plus the new error; nothing is re-aged by a render.dashboard.md/.html,state.json,badge.json): one row per instance; transport integrity, evidence freshness (valid_untilnull → "freshness policy unspecified" + age) and scientific qualification shown as three separate notions; detail per instance = the producer's owncomparisons[](refused pairs listed apart with the reason, ratio hidden) andlimitations[]; drift items carry a/profiling triage <key>action (kind: prompt,safety: scientific_judgement). No recomputed ratio, no cross-project ranking, no Heart verdict.state.jsonisorgan: pulse, validated byPyAutoBrain/board/_state.py.autolens_profilingd9f385f0, 159 records, 145 comparisons, status yellow (157/159 records unqualified by the producer — healthy transport never turns unknown quality green).lint.yml(ruff, pytest,check --offline, lychee),pages_dashboard.yml(state validated against Brain before deploy),dashboard_refresh.yml(push main / PR dry-run / nightly /repository_dispatch: pulse-refresh, concurrencypulse-main-writers).AGENTS.md(boundaries + the spec's never-list; generated marker blocks untouched),REFERENCE.md(registry schema, the v1 contract as read, receipt format),README.md.API Changes
New organ package
pulseand CLIbin/pyauto-pulse. No PyAuto library API touched. Cockpit feedstate.json(organ: pulse,repo: PyAutoPulse) is new; the legacyorgan: profilinglabel inautolens_profiling/dashboard/state.jsonis left alone (phase 3).Test Plan
ruff check . && ruff format --check .cleanpytest -q tests— 76 passed (hermetic:no_networkautouse; fixtures valid_empty / unsupported_schema / duplicate_id / unknown_provenance / axis_mismatch / changed_hardware / second_producer / trimmed live feed; unavailable + stale-cached as scenarios)bin/pyauto-pulse check --offline→check: OK; onlinecheck→check: OK(lens d9f385f0)python3 PyAutoBrain/board/_state.py state.json→ okPages Dashboardrun fails until then (PyAutoEyes#2 precedent)Full API Changes (for automation & release notes)
Added
pulse.registry.load/validate/get,pulse.summary.validate,pulse.ingest.ingest/resolve_commit/fetch_at/write_receipt,pulse.board.collect/render_*/write,pulse.cli.mainbin/pyauto-pulse—check,board [--offline] [--from INSTANCE=PATH] [--mind PATH],census,fetch [--instance K]registry.yaml(schema 1),receipts/,snapshots/Removed
Migration
pulse-refreshdispatch sender inautolens_profiling/pages_dashboard.yml; the Brain board card + cockpit identity transition (phase 3).Design notes (deviations from the issue plan, all spec-conformant)
--mind PATHis consulted before$PYAUTO_MIND(Eyes order); an explicit--mindwithoutrepos.yamlis an error.<comparison_key>@<version>(the live feed stores release versions, not record ids).hostcounts as changed only when both records name one.fetched_atchanges, so nightly refreshes commit nothing.--fromlocal reads write no receipt and show the checkout basename only.lint.ymlchecks out Mind (_mind) and Brain (_brain) socheck --offlineresolves the body map and the state validator runs.Generated by the PyAutoLabs agent workflow.
🤖 Generated with Claude Code