diff --git a/.github/workflows/claude-issue-to-pr.yml b/.github/workflows/claude-issue-to-pr.yml index ba9bc2ef69..a42bb06bb9 100644 --- a/.github/workflows/claude-issue-to-pr.yml +++ b/.github/workflows/claude-issue-to-pr.yml @@ -22,11 +22,11 @@ concurrency: jobs: work: - uses: HarperFast/ai-review-prompts/.github/workflows/_claude-issue-to-pr.yml@54d9e61c9c827d19e34229a5c460773a9fb080a0 # main 2026-07-24 (#79: deep path / :bug,:test escalation -> claude-opus-5) + uses: HarperFast/ai-review-prompts/.github/workflows/_claude-issue-to-pr.yml@be549ad08aa6d34b909ea8b542a7ffebdaae1e81 # main 2026-08-25 (#90 cost gates: draft skip, mechanical-diff skip, effort-by-size, debounce; #89 defaults; #88 lenses) with: # Same SHA as the `uses:` ref above. See the comment in # claude-mention.yml for why the duplication is unavoidable. - ai-review-prompts-ref: 54d9e61c9c827d19e34229a5c460773a9fb080a0 + ai-review-prompts-ref: be549ad08aa6d34b909ea8b542a7ffebdaae1e81 repo-specific-conventions: | ## Harper core notes diff --git a/.github/workflows/claude-mention.yml b/.github/workflows/claude-mention.yml index 56853acd73..a19072a1bf 100644 --- a/.github/workflows/claude-mention.yml +++ b/.github/workflows/claude-mention.yml @@ -24,7 +24,7 @@ concurrency: jobs: mention: - uses: HarperFast/ai-review-prompts/.github/workflows/_claude-mention.yml@54d9e61c9c827d19e34229a5c460773a9fb080a0 # main 2026-07-24 (#79: deep path / :bug,:test escalation -> claude-opus-5) + uses: HarperFast/ai-review-prompts/.github/workflows/_claude-mention.yml@be549ad08aa6d34b909ea8b542a7ffebdaae1e81 # main 2026-08-25 (#90 cost gates: draft skip, mechanical-diff skip, effort-by-size, debounce; #89 defaults; #88 lenses) with: # Same SHA as the `uses:` ref above. The reusable uses this to # check out HarperFast/ai-review-prompts (parse + auth scripts) @@ -34,7 +34,7 @@ jobs: # introspect their own ref (`github.workflow_ref` resolves to # the CALLER's ref in `workflow_call` context), and `uses: …@` # is parsed literally so we can't interpolate a variable. - ai-review-prompts-ref: 54d9e61c9c827d19e34229a5c460773a9fb080a0 + ai-review-prompts-ref: be549ad08aa6d34b909ea8b542a7ffebdaae1e81 repo-specific-conventions: | ## Harper core notes diff --git a/.github/workflows/claude-review.yml b/.github/workflows/claude-review.yml index 77d438c5ff..ebb021868a 100644 --- a/.github/workflows/claude-review.yml +++ b/.github/workflows/claude-review.yml @@ -18,7 +18,7 @@ on: pull_request: # `labeled` admits the `claude-review` label gesture for # bot-authored PRs (renovate, dependabot). See ai-review-prompts#38. - types: [opened, synchronize, reopened, labeled] + types: [opened, synchronize, reopened, ready_for_review, labeled] concurrency: group: claude-review-${{ github.event.pull_request.number }} @@ -32,8 +32,11 @@ jobs: # label. The reusable's authorize job still owns WHO is admitted. # Note: the `claude-review` label name is matched there too — # `_claude-review.yml`'s authorize `if:`, not in this caller. - if: ${{ vars.CLAUDE_ALWAYS_ON == 'true' || github.event.action == 'labeled' }} - uses: HarperFast/ai-review-prompts/.github/workflows/_claude-review.yml@4b59dc0ddb15aff517884127b58204f79193b4f2 # main 2026-08-20 (#86 reliable review evidence, context, and run binding) + # `ready_for_review` is admitted when the PR still carries the + # opt-in label, so a draft opted in via `claude-review` resumes + # review when it flips ready even with CLAUDE_ALWAYS_ON unset. + if: ${{ vars.CLAUDE_ALWAYS_ON == 'true' || github.event.action == 'labeled' || (github.event.action == 'ready_for_review' && contains(github.event.pull_request.labels.*.name, 'claude-review')) }} + uses: HarperFast/ai-review-prompts/.github/workflows/_claude-review.yml@be549ad08aa6d34b909ea8b542a7ffebdaae1e81 # main 2026-08-25 (#90 cost gates: draft skip, mechanical-diff skip, effort-by-size, debounce; #89 defaults; #88 lenses) # Caller-side permissions at the calling-job level (NOT workflow- # level — that placement caps the reusable's per-job grants below # what they need and breaks the workflow at startup; see @@ -60,15 +63,7 @@ jobs: # introspect their own ref (`github.workflow_ref` resolves to the # CALLER's ref in `workflow_call` context), and `uses: …@` # is parsed literally so we can't interpolate a variable. - ai-review-prompts-ref: 4b59dc0ddb15aff517884127b58204f79193b4f2 - # CANARY (2026-07-11): run this repo's Claude reviews on Sonnet 5 - # while the fleet default stays claude-sonnet-4-6. Every ai-review-log - # entry records `Model:`, so calibration can compare sonnet-5 vs - # sonnet-4-6 verdict mix directly — watch the severity-deflation rate - # (Sonnet 5 follows blocker-only instructions more literally; known - # code-review-harness effect). Promote to the reusable's default or - # revert based on the next calibration cycle. - model: claude-sonnet-5 + ai-review-prompts-ref: be549ad08aa6d34b909ea8b542a7ffebdaae1e81 review-layers: | universal harper/common diff --git a/.github/workflows/gemini-review.yml b/.github/workflows/gemini-review.yml index 46462868b6..272e609d08 100644 --- a/.github/workflows/gemini-review.yml +++ b/.github/workflows/gemini-review.yml @@ -32,7 +32,7 @@ on: # `labeled` admits the `gemini-review` opt-in gesture. `vars.*` # can't be read in `on:` (only in a job `if:`), so the trigger # lists the union and the `review` job gates on GEMINI_ALWAYS_ON. - types: [opened, synchronize, reopened, labeled] + types: [opened, synchronize, reopened, ready_for_review, labeled] concurrency: # Different group key from claude-review so the two providers can run @@ -51,8 +51,10 @@ jobs: # (CODEOWNERS trust set; the labeler, not the author, on `labeled`). # Note: the `gemini-review` label name is matched there too — # `_gemini-review.yml`'s authorize `if:`, not in this caller. - if: ${{ vars.GEMINI_ALWAYS_ON == 'true' || github.event.action == 'labeled' }} - uses: HarperFast/ai-review-prompts/.github/workflows/_gemini-review.yml@4b59dc0ddb15aff517884127b58204f79193b4f2 # main 2026-08-20 (#86 reliable review evidence, context, and run binding) + # `ready_for_review` is admitted when the PR still carries the + # opt-in label — mirrors claude-review.yml. + if: ${{ vars.GEMINI_ALWAYS_ON == 'true' || github.event.action == 'labeled' || (github.event.action == 'ready_for_review' && contains(github.event.pull_request.labels.*.name, 'gemini-review')) }} + uses: HarperFast/ai-review-prompts/.github/workflows/_gemini-review.yml@be549ad08aa6d34b909ea8b542a7ffebdaae1e81 # main 2026-08-25 (#90 cost gates: draft skip, mechanical-diff skip, effort-by-size, debounce; #89 defaults; #88 lenses) # Caller-side permissions at the calling-job level (NOT workflow- # level — that placement caps the reusable's per-job grants below # what they need and breaks the workflow at startup; see @@ -70,7 +72,7 @@ jobs: # duplication is unavoidable: reusable workflows can't introspect # their own ref (`github.workflow_ref` resolves to the CALLER's # ref in workflow_call context), and `uses: …@` is literal. - ai-review-prompts-ref: 4b59dc0ddb15aff517884127b58204f79193b4f2 + ai-review-prompts-ref: be549ad08aa6d34b909ea8b542a7ffebdaae1e81 review-layers: | universal harper/common diff --git a/.github/workflows/validate-caller-workflows.yml b/.github/workflows/validate-caller-workflows.yml index bc820f47c9..3d11870bd6 100644 --- a/.github/workflows/validate-caller-workflows.yml +++ b/.github/workflows/validate-caller-workflows.yml @@ -27,9 +27,9 @@ on: jobs: validate: - uses: HarperFast/ai-review-prompts/.github/workflows/_validate-caller-workflows.yml@4b59dc0ddb15aff517884127b58204f79193b4f2 # main 2026-08-20 (#86 reliable review evidence, context, and run binding) + uses: HarperFast/ai-review-prompts/.github/workflows/_validate-caller-workflows.yml@be549ad08aa6d34b909ea8b542a7ffebdaae1e81 # main 2026-08-25 (#90 cost gates: draft skip, mechanical-diff skip, effort-by-size, debounce; #89 defaults; #88 lenses) with: # Same SHA as the `uses:` ref above — the reusable uses this # to check out the validator script at the matching version. # Same SHA-twice pattern as the other caller workflows. - ai-review-prompts-ref: 4b59dc0ddb15aff517884127b58204f79193b4f2 + ai-review-prompts-ref: be549ad08aa6d34b909ea8b542a7ffebdaae1e81