Skip to content

Add a 3D view beside the gradient explorer #1310

Add a 3D view beside the gradient explorer

Add a 3D view beside the gradient explorer #1310

# Automatic Claude Code review of pull requests -- thin caller.
#
# The reusable workflow in Morrison-Lab/gha runs the `code-review` plugin,
# posts inline findings, ends every review with an explicit `### Verdict`
# line, and already skips drafts, Dependabot bumps, fork PRs, and PRs that
# edit this workflow file itself (the action can't review its own diff --
# see gha's own comments on the App-token validation 401). This caller only
# supplies mds's Quarto/R-specific review guidance on top.
# See https://github.com/Morrison-Lab/gha for inputs and versioning.
#
# Secrets are passed explicitly rather than via `secrets: inherit`: GitHub
# only inherits secrets into a reusable workflow owned by the same org/user,
# and Morrison-Lab/gha is a different owner than this repo.
name: Claude Code Review
on:
pull_request:
types: [opened, synchronize, ready_for_review, reopened]
# Allow claude.yml to dispatch a fresh review (e.g. after an @claude run
# pushes commits, or on an `@claude review` comment). GITHUB_TOKEN pushes
# don't fire `synchronize`, so an explicit dispatch path is needed.
workflow_dispatch:
inputs:
pr_number:
description: 'Pull request number to review'
required: true
type: string
# NOTE: no top-level `concurrency:` block here. The reusable workflow's own
# `claude-review` job already declares `concurrency: group:
# claude-review-<pr-number>, cancel-in-progress: true` internally -- a
# caller-level block with the same group name deadlocks the run ("Canceling
# since a deadlock was detected for concurrency group ... between a top
# level workflow and 'review / claude-review'"), so the per-PR dedup this
# used to provide is already handled inside the called workflow.
jobs:
review:
permissions:
contents: read
pull-requests: write # post review + inline comments
issues: write
actions: read # lets the reviewer read CI status
checks: read # required by gha v3's reviewer job (gha#833); without it the call fails at startup
uses: Morrison-Lab/gha/.github/workflows/claude-code-review.yml@v3
secrets:
CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} # Max-plan OAuth; empty when using API key
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} # direct API key; empty when using OAuth
SUBMODULES_TOKEN: ${{ secrets.SUBMODULES_TOKEN }} # optional; latex-macros/ is public, so unset is fine
with:
pr-number: ${{ inputs.pr_number }}
checkout-submodules: true # latex-macros/ so the reviewer can read it, not report it "not initialized"
# `claude` is included because a remote Claude session pushing a
# commit directly to a PR fires `synchronize` with `claude` as the
# actor, and a dispatched review's actor is `github-actions[bot]`
# (the default) -- without both, the action rejects the run as a
# "non-human actor".
allowed-bots: 'github-actions[bot],claude'
prompt-addendum: |
In addition to the standard checks above, this is a small,
prose-heavy Quarto website, so also prioritize:
1. **Quarto / prose correctness**
- `.qmd` syntax: chunk options use `#|` directives, fenced
blocks are balanced, cross-refs (`@fig-`, `@tbl-`, `@sec-`)
resolve to defined labels.
- Bullet-list rule: 3+ items use bullets with a blank line above.
- Code folds by default (site-wide `code-fold: true`); chunks
keep the default where the output (not the code) is the point,
and tutorial code sets `#| code-fold: false`.
2. **R code**
- Conforms to `.lintr.R` settings (snake_case, line length, etc.).
3. **Build hygiene**
- No accidental commits of `_site/`, `_freeze/`, or `.quarto/`.
- `README.md` is generated; edits should go to `README.Rmd`.
- Bibliography entries in `references.bib` are well-formed BibTeX.
4. **CI impact**
- Workflow changes don't break the `copilot-setup-steps.yml`
contract or the publish/preview pipelines.
- Spell-check / link-check failures are fixed at the source
(wordlist or content) rather than suppressed.
When you post findings, end the top-level summary with a
ready-to-paste draft of the PR comment the author would send to
kick off another `@claude` run on those findings. Wrap the draft in
a fenced code block (GitHub renders a copy button on code blocks,
so one click puts it on the clipboard) and embed a markdown link
back to your review summary so the next `@claude` run can find it.
The draft should read like:
```
@claude address review comments in [this review](https://github.com/${{ github.repository }}/pull/${{ inputs.pr_number || github.event.pull_request.number }})
```
Use the PR conversation URL above as the link target (you won't
know your own summary comment's anchor before posting it, and the
PR conversation is where the latest review lands anyway). Omit this
draft when the PR is clean (nothing to fix).