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
5 changes: 3 additions & 2 deletions docs/HANDOFF.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,9 @@ To-dos are the open `todo` issues on this repo since 2026-10-01 (#61–#64 carry

## Recommended next steps

1. **Make `bonsai-link` a required check per repo** — the wave has installed it everywhere `claude.yml`
is; the context is the job id `bonsai-link` (kit README). First, because step 2 waits.
1. ~~Make `bonsai-link` a required check per repo~~ — dropped (Maria, 2026-10-01): the check skips
PRs with no Bonsai mention, since most human PRs have no ticket and a red X read as a failing
build; a required check that passes when skipped would enforce nothing.
The wave also installs `claude-standards.md` beside `claude.yml` since 2026-10-01; the
`@.github/claude-standards.md` import is a `todo` issue in each repo that lacks it.
driver-agents joins the fleet as an implementer target (driver-agents #50, Maria 2026-10-01); the
Expand Down
3 changes: 2 additions & 1 deletion docs/claude-yml-wave-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,4 +59,5 @@ PRs as it refuses outsiders. Cost: no `@claude` on a contributor's fork PR.
and the "Mint the store token as a log mask" step must pass. Never print the token cache to
prove the mask: if the mask did not register, that writes the live token into the log.
7. Run one real ticket through with the transcript on (`show_full_output`) and read it before calling
the wave done. Then make `bonsai-link` a required check per repo.
the wave done. ~~Then make `bonsai-link` a required check per repo~~ — dropped 2026-10-01; the check
now skips PRs with no Bonsai mention (grey, not red).
2 changes: 1 addition & 1 deletion templates/github/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ workflow here touches it.

| File | Goes to | Does |
|---|---|---|
| `pr-bonsai-link.yml` | `.github/workflows/pr-bonsai-link.yml` — wherever `claude.yml` is | Fails a PR whose body names no Bonsai task: an `app.hellobonsai.com/tasks/<uuid>` URL, or a `Bonsai task: none` line. Dependabot PRs are exempt. Check-run context is the job id, **`bonsai-link`**; make it required per repo only once the wave has installed it. |
| `pr-bonsai-link.yml` | `.github/workflows/pr-bonsai-link.yml` — wherever `claude.yml` is | Checks the Bonsai link in a PR body: a PR with no Bonsai mention is skipped (grey, never red — most human PRs have no ticket), one that mentions a link must carry an `app.hellobonsai.com/tasks/<uuid>` URL. Check-run context is the job id, **`bonsai-link`**. |
| `pull_request_template.md` | `.github/pull_request_template.md` | Gives human PRs the `Bonsai task: <url> \| none` line `bonsai-link` checks for, and prompts them to **link the Bonsai issue** (`Closes #N`) so the dispatcher can resolve the task. AI PRs write both themselves. |
| `claude-standards.md` | `.github/claude-standards.md` — wherever `claude.yml` is | The house commit-message and code-comment standard. The repo's `CLAUDE.md` imports it with `@.github/claude-standards.md` (replacing any pasted copy), so local sessions load it (CI loading is unconfirmed — `../../docs/HANDOFF.md`). Lint-only repos are wave targets through it. |
| `shopify-tool-smoke.yml` | `.github/workflows/` — **STORE REPOS ONLY** | Manual (`workflow_dispatch`) diagnostic for the Shopify admin tool: secrets → `driver-agents` clone at the pin → token mint → Admin API, read-only. Fails **loudly** where `claude.yml` degrades — that's the point. Skip it in repos with no store. |
Expand Down
11 changes: 6 additions & 5 deletions templates/github/pr-bonsai-link.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: Bonsai task link

# Fails a PR whose body names no Bonsai task: an app.hellobonsai.com task URL, or a
# `Bonsai task: none` line. Dependabot PRs are exempt.
# Checks the Bonsai task link in a PR body: a PR that mentions no Bonsai link at all is skipped
# (grey, never red — most human PRs have no ticket), one that carries a link must carry a task URL.

on:
pull_request:
Expand All @@ -13,8 +13,9 @@ permissions: {}

jobs:
bonsai-link:
# A skipped job satisfies a required check, which is what the exemption needs.
if: github.event.pull_request.user.login != 'dependabot[bot]'
# Skipped is the neutral outcome: no Bonsai mention, nothing to check. The regex below is the
# precise test; this is only the coarse gate that keeps the job grey instead of red.
if: contains(github.event.pull_request.body, 'hellobonsai.com')
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
Expand All @@ -29,5 +30,5 @@ jobs:
if grep -qiE "$url|$none" <<<"$BODY"; then
echo "Bonsai task named"; exit 0
fi
echo "::error::Name the Bonsai task in the PR body: a line reading 'Bonsai task: <the app.hellobonsai.com/tasks/ URL>', or 'Bonsai task: none' when there is no task."
echo "::error::The Bonsai link in the PR body is not a task URL. Use the task's app.hellobonsai.com/tasks/<uuid> URL (or its board link with ?task=<uuid>)."
exit 1
Loading