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
7 changes: 4 additions & 3 deletions .github/workflows/release_board.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: Release Board
name: Dashboard

# Publishes the release board — WHAT THE HANDS SHIPPED — three ways from one
# Publishes the PyAutoHands Dashboard — WHAT THE HANDS SHIPPED — three ways from one
# renderer (autohands/board.py, the Heart-dashboard pattern):
# * the GitHub Pages page (one-tap 📋 copy prompts for a phone),
# * badge.json (the shields endpoint the README badge reads),
Expand Down Expand Up @@ -33,7 +33,7 @@ concurrency:

jobs:
board:
name: Render + publish the release board
name: Render + publish the dashboard
runs-on: ubuntu-latest
environment:
name: github-pages
Expand Down Expand Up @@ -61,6 +61,7 @@ jobs:
render --html > _site/index.html
render --badge > _site/badge.json
render --md > board.md
cp board.md _site/dashboard.md
render --md-brief > readme_strip.md

- name: Write the board to the job step summary
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ notebooks, and publishes the PyAuto libraries and their workspaces to PyPI.
It executes on behalf of the Brain and never decides for itself: no readiness
checks, no gate decisions — those belong to the Heart.

See the **[PyAutoHands Release Board](https://pyautolabs.github.io/PyAutoHands/)**
(mobile phone dashboard) for what shipped: the released library versions and
See the **[PyAutoHands Dashboard](https://pyautolabs.github.io/PyAutoHands/)**
for what shipped: the released library versions and
their PyPI status, the release train's recent runs, and the nightly cadence —
each actionable item carrying a one-tap 📋 button that copies a ready-made
Claude command (`/release`, `/release rehearse`, `/release validate`,
Expand All @@ -26,7 +26,7 @@ Claude command (`/release`, `/release rehearse`, `/release validate`,
<!-- The line below is auto-updated by .github/workflows/release_board.yml (everything -->
<!-- between the hands:begin/hands:end markers is replaced with the rendered strip). -->
<!-- hands:begin -->
📦 **2026.8.20.1** · shipped 2026-08-20 (5h ago) · last train run ✗ [2026-08-20](https://github.com/PyAutoLabs/PyAutoHands/actions/runs/32331123177) · [release board →](https://pyautolabs.github.io/PyAutoHands/)
📦 **2026.8.20.1** · shipped 2026-08-20 (5h ago) · last train run ✗ [2026-08-20](https://github.com/PyAutoLabs/PyAutoHands/actions/runs/32331123177) · [dashboard →](https://pyautolabs.github.io/PyAutoHands/)
<!-- hands:end -->

## How PyAutoHands works
Expand Down
14 changes: 7 additions & 7 deletions autohands/board.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
"""autohands/board.py — the PyAutoHands release board.
"""autohands/board.py — the PyAutoHands Dashboard.

A phone-readable record of **what the Hands shipped**: the released library
versions (from git tags — the authoritative record; version stamps are
Expand Down Expand Up @@ -289,7 +289,7 @@ def _bug_prompt(snapshot: dict, run: dict) -> str:

# --- renderers ----------------------------------------------------------------
def _render_md(snapshot: dict) -> str:
lines = ["# PyAutoHands release board", "",
lines = ["# PyAutoHands Dashboard", "",
"_What the Hands shipped — a record of execution. Whether it is "
"safe to release lives with the Heart._", ""]
latest = _latest(snapshot)
Expand Down Expand Up @@ -318,7 +318,7 @@ def _render_md(snapshot: dict) -> str:
+ "; ".join(snapshot["errors"]) + "_"]
url = pages_url(snapshot)
if url:
lines += ["", f"[Release board]({url}) · [Health board]({_heart_board_url(snapshot)})"]
lines += ["", f"[Dashboard]({url}) · [PyAutoHeart Dashboard]({_heart_board_url(snapshot)})"]
return "\n".join(lines)


Expand All @@ -337,7 +337,7 @@ def _render_md_brief(snapshot: dict) -> str:
bits.append(f"last train run {mark} [{_day(last.get('date'))}]({last.get('url')})")
url = pages_url(snapshot)
if url:
bits.append(f"[release board →]({url})")
bits.append(f"[dashboard →]({url})")
return " · ".join(bits)


Expand Down Expand Up @@ -455,11 +455,11 @@ def _render_html(snapshot: dict) -> str:
function fb(t){{window.prompt('Copy this:',t)}}
</script></head>
<body><div class="wrap">
<h1>PyAuto release board</h1>
<p><span class="version">{head}</span> <span class="meta">{head_age}</span></p>
<h1>PyAutoHands Dashboard</h1>
<p><span class="version">{head}</span> <span class="meta">{head_age}</span> <span class="meta"><a href="dashboard.md">markdown version</a></span></p>
<p class="meta">What the Hands shipped — a record of execution, newest first.
Whether it is <em>safe</em> to release lives with the
<a href="{heart}">Heart's health board</a>.</p>
<a href="{heart}">PyAutoHeart Dashboard</a>.</p>
<p>{chips}</p>
<p class="meta">📋 copies the command into your clipboard, ready to paste
into a Claude Code chat.</p>
Expand Down
2 changes: 1 addition & 1 deletion tests/test_board.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
"""tests/test_board.py — the release board renderer (autohands/board.py).
"""tests/test_board.py — the PyAutoHands Dashboard renderer (autohands/board.py).

Render is pure (snapshot in → string out), so everything here runs from
fixtures — no network. Fixture names are deliberately fake (SomeOrg, RepoA):
Expand Down
Loading