diff --git a/.claude/pr-reviews/nsheaps/github-actions/1/1771874092/documentation/REPORT.md b/.claude/pr-reviews/nsheaps/github-actions/1/1771874092/documentation/REPORT.md index 47964ad..65c5390 100644 --- a/.claude/pr-reviews/nsheaps/github-actions/1/1771874092/documentation/REPORT.md +++ b/.claude/pr-reviews/nsheaps/github-actions/1/1771874092/documentation/REPORT.md @@ -100,15 +100,15 @@ This PR delivers strong, well-structured documentation that significantly exceed ### Summary of Deductions -| Category | Deduction | Reason | +| Category | Deduction | Reason | | ---------------------------------- | --------- | --------------------------------------------------------------------- | --- | -------------------------------- | -| Missing troubleshooting/error docs | -5 | No guidance on common failure modes | -| Missing prerequisites | -2 | No runner/dependency requirements noted | -| Incomplete edge-case docs | -4 | maxdepth 2 limit, root-path sync naming, never-deletes implications | -| env-vars behavior mismatch | -2 | README implies compose-level injection, script does GITHUB_ENV export | -| auth-type values underdocumented | -2 | No explanation of what each auth type requires | -| Missing function docstrings | -2 | `discover_compose_files` and `export_env_vars` lack docstrings | -| Minor inline comment gaps | -1 | ` | | true`on curl,`sort -z` rationale | +| Missing troubleshooting/error docs | -5 | No guidance on common failure modes | +| Missing prerequisites | -2 | No runner/dependency requirements noted | +| Incomplete edge-case docs | -4 | maxdepth 2 limit, root-path sync naming, never-deletes implications | +| env-vars behavior mismatch | -2 | README implies compose-level injection, script does GITHUB_ENV export | +| auth-type values underdocumented | -2 | No explanation of what each auth type requires | +| Missing function docstrings | -2 | `discover_compose_files` and `export_env_vars` lack docstrings | +| Minor inline comment gaps | -1 | ` | | true`on curl,`sort -z` rationale | ## References diff --git a/.github/workflows/dispatch-review.yaml b/.github/workflows/dispatch-review.yaml new file mode 100644 index 0000000..7206c0c --- /dev/null +++ b/.github/workflows/dispatch-review.yaml @@ -0,0 +1,64 @@ +# Runs the dispatch GATE for AI code reviews on this repo's PRs. +# Forwards to the shared decider workflow in nsheaps/agents, which evaluates +# whether to dispatch a review and (if yes) fires a repository_dispatch to the +# target agent repo's dispatch-receiver-review.yaml. +# +# This file is a template — copy into your repo at +# `.github/workflows/dispatch-review.yaml`. Synced via `nsheaps/.github` CI +# automation when configured; until then, copy-paste. +# +# Spec: https://github.com/nsheaps/agents/blob/main/plugins/claude-code/review-utils/specs/review-dispatch.md +# +# Requirements (provisioned via nsheaps/.github/secret-sync.yaml): +# - AUTOMATION_GITHUB_APP_ID +# - AUTOMATION_GITHUB_APP_PRIVATE_KEY (automation-nsheaps[bot]; installed on +# THIS repo for label edit + check_run +# posting, AND on the target agent repo +# so it can fire repository_dispatch) +# +# Why automation creds (not REVIEW_GITHUB_APP_*)? The gate is routing only — +# it never speaks AS the reviewer. It edits a label, posts a queued check, and +# fires a repository_dispatch. The reviewer-identity (REVIEW_GITHUB_APP_*) is +# owned by the target agent's `dispatch-receiver-review.yaml`, where the review +# actually executes. See plugins/claude-code/review-utils/specs/review-dispatch.md +# §Secrets for the gate-vs-receiver creds rationale. +# +# LLM-auth secrets (REVIEW_ANTHROPIC_API_KEY / CLAUDE_CODE_OAUTH_TOKEN) are +# NOT needed here — owned by the target agent's receiver for the same reason. + +name: Dispatch PR Review + +on: + pull_request: + types: [opened, reopened, synchronize, ready_for_review, labeled, converted_to_draft] + +jobs: + review: + # Gate at the template level (post-2026-05-23 redesign): only dispatch + # when the PR is open AND carries the request-review label. The + # `converted_to_draft` event also fires (PR is still in state=open while + # draft) so the receiver can short-circuit with a `neutral` check rather + # than running a review on a drafted PR. If you change the request label + # name, update the literal in the `contains(...)` expression below. + if: | + github.event.pull_request.state == 'open' && + contains(github.event.pull_request.labels.*.name, 'request-review') + # Explicit permissions: default_workflow_permissions is "read" in many + # repos but the called workflow needs pull-requests + checks write. + permissions: + contents: read + pull-requests: write + checks: write + # @main = rolling updates: any change merged to nsheaps/agents takes effect + # on the next PR event in repos using this template. This is intentional — + # operators who need pinned stability should replace @main with a commit SHA + # and update it in lock-step with plugin version bumps. + uses: nsheaps/agents/.github/workflows/review-dispatch.yaml@main + # secrets: inherit doesn't pass cross-repo (GitHub limitation). + secrets: + AUTOMATION_GITHUB_APP_ID: ${{ secrets.AUTOMATION_GITHUB_APP_ID }} + AUTOMATION_GITHUB_APP_PRIVATE_KEY: ${{ secrets.AUTOMATION_GITHUB_APP_PRIVATE_KEY }} + # Optional overrides (uncomment to use): + # with: + # target-repo: nsheaps/.ai-agent-henry # default + # event-type: pr-review # default repository_dispatch event_type diff --git a/LICENSE.md b/LICENSE.md index e70157b..c3fc5da 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -11,7 +11,7 @@ Copyright (c) 2026 Nathan Heaps. All rights reserved. > (https://polyformproject.org/licenses/internal-use/1.0.0), which is > purpose-built for "use the software for internal business operations, do > not distribute it." The one substantive adaptation is that PolyForm grants -> rights to *"you and your company"* (whoever accepts the license), whereas +> rights to _"you and your company"_ (whoever accepts the license), whereas > this license grants them to a **single, specifically named licensee** > (Oura, defined below). That is a real difference: the licensor here is not > a generic member of the licensee's organization, so the "permitted diff --git a/pages/index.html b/pages/index.html index 820fe74..caec1b6 100644 --- a/pages/index.html +++ b/pages/index.html @@ -319,8 +319,7 @@

Detailed setup walkthrough

 cp pages/index.html docs/index.html
-# Settings → Pages → Source: GitHub Actions (or branch /docs)
+# Settings → Pages → Source: GitHub Actions (or branch /docs)

Then use https://<your-org>.github.io/<repo>/ as the redirect. Any other HTTPS static host (Vercel, Netlify, etc.) works equally well.