From c44eda56a1a1ffda6597d74bf50f925102eff96c Mon Sep 17 00:00:00 2001 From: John McCall Date: Wed, 17 Jun 2026 10:40:06 -0400 Subject: [PATCH 1/9] [ENHANCEMENT] Skip binary/image/asset files in Overture PRojection by default Extends the default ignore-files list to exclude common binary and asset file types (images, SVGs, fonts, archives, minified bundles) that have no reviewable code logic. This preserves the diff budget for source files that actually matter. Fixes #35 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: John McCall --- .../actions/overture-projection/action.yml | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/.github/actions/overture-projection/action.yml b/.github/actions/overture-projection/action.yml index bf53c4c..ae5383f 100644 --- a/.github/actions/overture-projection/action.yml +++ b/.github/actions/overture-projection/action.yml @@ -131,6 +131,35 @@ inputs: go.sum *.lock *.snap + *.png + *.jpg + *.jpeg + *.gif + *.ico + *.webp + *.bmp + *.tiff + *.svg + *.woff + *.woff2 + *.ttf + *.eot + *.otf + *.zip + *.tar + *.gz + *.tgz + *.jar + *.war + *.class + *.pyc + *.pyo + *.mp4 + *.mp3 + *.wav + *.pdf + *.min.js + *.min.css comment-mode: description: >- Controls how the review is posted. 'update' posts a single issue comment From 3b478b8d61ff8e51265d009467b41d3f161d2183 Mon Sep 17 00:00:00 2001 From: John McCall Date: Wed, 17 Jun 2026 10:53:26 -0400 Subject: [PATCH 2/9] chore: temp point action ref to branch for testing Revert to @main before merge. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: John McCall --- .github/workflows/overture-projection.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/overture-projection.yml b/.github/workflows/overture-projection.yml index e37b3ca..2371511 100644 --- a/.github/workflows/overture-projection.yml +++ b/.github/workflows/overture-projection.yml @@ -182,7 +182,7 @@ jobs: steps: - name: Run Overture PRojection - uses: OvertureMaps/workflows/.github/actions/overture-projection@main # zizmor: ignore[unpinned-uses] -- self-referential; SHA updated in follow-up commit + uses: OvertureMaps/workflows/.github/actions/overture-projection@lowlydba/feat-skip-binary-files-in-reviewer # zizmor: ignore[unpinned-uses] -- TEMP: testing binary-file exclusions; revert to @main before merge with: always-skills: "pr-review" repository: ${{ github.event_name == 'pull_request' && github.event.repository.full_name || inputs.repository || github.event.repository.full_name }} From 4bee66d22e09d68a1e4c1ddf5f71d9b1c2d92161 Mon Sep 17 00:00:00 2001 From: John McCall Date: Wed, 17 Jun 2026 10:58:10 -0400 Subject: [PATCH 3/9] [ENHANCEMENT] Deprioritize test files in diff budget MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sort test files to the end of the file list before applyFileBudget so source files win the context window when budget is tight. Test files are still reviewed when budget allows — they are never ignored outright. Matches: __tests__/, *.test.*, *.spec.*, test_*.*, *_test.* Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: John McCall --- .../overture-projection/scripts/fetch-diff.js | 7 ++-- .../scripts/lib/__tests__/diff.test.js | 32 +++++++++++++++++++ .../overture-projection/scripts/lib/diff.js | 14 ++++++++ 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/.github/actions/overture-projection/scripts/fetch-diff.js b/.github/actions/overture-projection/scripts/fetch-diff.js index 681acd2..48ad07c 100644 --- a/.github/actions/overture-projection/scripts/fetch-diff.js +++ b/.github/actions/overture-projection/scripts/fetch-diff.js @@ -34,7 +34,7 @@ module.exports = async ({ github, context, core }) => { const fs = require('fs'); const path = require('path'); - const { buildIgnorePatterns, isIgnored, applyFileBudget } = require('./lib/diff'); + const { buildIgnorePatterns, isIgnored, isTestFile, applyFileBudget } = require('./lib/diff'); const { resolveRepo, resolvePrNumber } = require('./lib/github'); const { DEFAULT_MAX_DIFF_CHARS } = require('./lib/defaults'); @@ -81,7 +81,10 @@ module.exports = async ({ github, context, core }) => { core.info(`⏭️ Ignored ${ignoredFiles.length} file(s): ${ignoredFiles.map(f => f.filename).join(', ')}`); } - const { included: files, skipped: budgetSkippedFiles } = applyFileBudget(includedFiles, fetchCeiling); + // ponytail: stable sort — test files last so source files win the budget race + const prioritized = [...includedFiles.filter(f => !isTestFile(f)), ...includedFiles.filter(isTestFile)]; + + const { included: files, skipped: budgetSkippedFiles } = applyFileBudget(prioritized, fetchCeiling); core.info(`📐 Fetch ceiling: ${fetchCeiling} chars — fetched ${files.length} file(s), ceiling-skipped ${budgetSkippedFiles.length} file(s)`); if (budgetSkippedFiles.length > 0) { core.info(`⚠️ Ceiling-skipped (not fetched): ${budgetSkippedFiles.map(f => f.filename).join(', ')}`); diff --git a/.github/actions/overture-projection/scripts/lib/__tests__/diff.test.js b/.github/actions/overture-projection/scripts/lib/__tests__/diff.test.js index a18c85c..88331d3 100644 --- a/.github/actions/overture-projection/scripts/lib/__tests__/diff.test.js +++ b/.github/actions/overture-projection/scripts/lib/__tests__/diff.test.js @@ -6,6 +6,7 @@ const { diffCharBudget, buildIgnorePatterns, isIgnored, + isTestFile, applyFileBudget, } = require('../diff'); @@ -81,6 +82,37 @@ describe('isIgnored', () => { }); }); +// --------------------------------------------------------------------------- +// isTestFile +// --------------------------------------------------------------------------- + +describe('isTestFile', () => { + it('matches __tests__ directory', () => { + assert.equal(isTestFile({ filename: 'src/__tests__/foo.js' }), true); + }); + + it('matches *.test.* files', () => { + assert.equal(isTestFile({ filename: 'src/foo.test.ts' }), true); + }); + + it('matches *.spec.* files', () => { + assert.equal(isTestFile({ filename: 'src/foo.spec.js' }), true); + }); + + it('matches test_* prefix', () => { + assert.equal(isTestFile({ filename: 'tests/test_parser.py' }), true); + }); + + it('matches *_test suffix', () => { + assert.equal(isTestFile({ filename: 'parser_test.go' }), true); + }); + + it('does not match regular source files', () => { + assert.equal(isTestFile({ filename: 'src/parser.ts' }), false); + assert.equal(isTestFile({ filename: 'src/routes.ts' }), false); + }); +}); + // --------------------------------------------------------------------------- // applyFileBudget // --------------------------------------------------------------------------- diff --git a/.github/actions/overture-projection/scripts/lib/diff.js b/.github/actions/overture-projection/scripts/lib/diff.js index 7fc0da8..234a74f 100644 --- a/.github/actions/overture-projection/scripts/lib/diff.js +++ b/.github/actions/overture-projection/scripts/lib/diff.js @@ -141,9 +141,23 @@ function applyFileBudget(files, totalChars) { return { included, skipped }; } +/** + * Returns `true` if the file is a test file (should be deprioritized in the + * diff budget so source files are reviewed first when context is tight). + * + * Matches: __tests__/ directories, *.test.*, *.spec.*, test_*.*, *_test.* + * + * @param {{ filename: string }} file + * @returns {boolean} + */ +function isTestFile(file) { + return /(__tests__|\.test\.|\.spec\.|\/test_|_test\.)/i.test(file.filename); +} + module.exports = { diffCharBudget, buildIgnorePatterns, isIgnored, + isTestFile, applyFileBudget, }; From f32260798130960eeded05b7b385d5a07c2309c3 Mon Sep 17 00:00:00 2001 From: John McCall Date: Wed, 17 Jun 2026 11:01:50 -0400 Subject: [PATCH 4/9] [ENHANCEMENT] Add model choice dropdowns to workflow_dispatch Replaces freeform model/selection_model/model_provider strings with type:choice dropdowns for manual runs. Each option includes an inline comment describing context window / speed / cost tradeoffs. workflow_call inputs are unchanged (type:choice is unsupported there). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: John McCall --- .github/workflows/overture-projection.yml | 36 +++++++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/.github/workflows/overture-projection.yml b/.github/workflows/overture-projection.yml index 2371511..f8eca72 100644 --- a/.github/workflows/overture-projection.yml +++ b/.github/workflows/overture-projection.yml @@ -136,18 +136,42 @@ on: description: omf-devex ref to load skills from required: false default: main + model_provider: + description: "Model provider" + required: false + type: choice + default: github-models + options: + - github-models + - anthropic model: - description: "Review model ID (e.g. gpt-4.1 or claude-opus-4-6). Defaults automatically by provider when not set." + description: "Review model (leave blank to use provider default)" required: false + type: choice default: "" + options: + - "" # provider default (gpt-4.1 / claude-opus-4-6) + - gpt-4.1 # GitHub Models default — best quality, 8k ctx + - gpt-4.1-mini # faster, cheaper + - gpt-4.1-nano # fastest, cheapest + - gpt-4o # previous gen + - o4-mini # reasoning model, slower + - claude-opus-4-5 # best Claude via GitHub Models + - claude-sonnet-4-5 # mid-tier Claude + - claude-haiku-4-5 # fast Claude + - claude-opus-4-6 # Anthropic provider only + - claude-haiku-4-6 # Anthropic selection model default selection_model: - description: "Skill selection model ID. Defaults automatically by provider when not set." + description: "Skill selection model (leave blank to use provider default)" required: false + type: choice default: "" - model_provider: - description: "'github-models' (default) or 'anthropic'" - required: false - default: github-models + options: + - "" # provider default (gpt-4.1-mini / claude-haiku-4-6) + - gpt-4.1-mini # GitHub Models default + - gpt-4.1-nano + - claude-haiku-4-5 + - claude-haiku-4-6 # Anthropic default max_input_tokens: description: "Max input tokens. Defaults automatically by provider when not set (6200 for github-models, 190000 for anthropic)." required: false From a74d1643719fc679ee71361d9821aa271ffa0382 Mon Sep 17 00:00:00 2001 From: John McCall Date: Wed, 17 Jun 2026 11:03:21 -0400 Subject: [PATCH 5/9] chore: restore Anthropic model options to dispatch dropdown Adds claude-opus-4-6, claude-sonnet-4-5, claude-haiku-4-6 back to the model choice list with provider annotations. Description clarifies which options require model_provider=anthropic. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: John McCall --- .github/workflows/overture-projection.yml | 31 ++++++++++------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/.github/workflows/overture-projection.yml b/.github/workflows/overture-projection.yml index f8eca72..82cc8f0 100644 --- a/.github/workflows/overture-projection.yml +++ b/.github/workflows/overture-projection.yml @@ -145,33 +145,30 @@ on: - github-models - anthropic model: - description: "Review model (leave blank to use provider default)" + description: "Review model. GitHub Models options work with github-models provider; claude-* options require model_provider=anthropic." required: false type: choice default: "" options: - "" # provider default (gpt-4.1 / claude-opus-4-6) - - gpt-4.1 # GitHub Models default — best quality, 8k ctx - - gpt-4.1-mini # faster, cheaper - - gpt-4.1-nano # fastest, cheapest - - gpt-4o # previous gen - - o4-mini # reasoning model, slower - - claude-opus-4-5 # best Claude via GitHub Models - - claude-sonnet-4-5 # mid-tier Claude - - claude-haiku-4-5 # fast Claude - - claude-opus-4-6 # Anthropic provider only - - claude-haiku-4-6 # Anthropic selection model default + - gpt-4.1 # github-models — best quality, 8k ctx + - gpt-4.1-mini # github-models — faster, cheaper + - gpt-4.1-nano # github-models — fastest, cheapest + - gpt-4o # github-models — previous gen + - o4-mini # github-models — reasoning model, slower + - claude-opus-4-6 # anthropic — best quality, 200k ctx + - claude-sonnet-4-5 # anthropic — mid-tier + - claude-haiku-4-6 # anthropic — fast, cheap selection_model: - description: "Skill selection model (leave blank to use provider default)" + description: "Skill selection model. Leave blank to use provider default (gpt-4.1-mini / claude-haiku-4-6)." required: false type: choice default: "" options: - - "" # provider default (gpt-4.1-mini / claude-haiku-4-6) - - gpt-4.1-mini # GitHub Models default - - gpt-4.1-nano - - claude-haiku-4-5 - - claude-haiku-4-6 # Anthropic default + - "" # provider default + - gpt-4.1-mini # github-models default + - gpt-4.1-nano # github-models — cheapest + - claude-haiku-4-6 # anthropic default max_input_tokens: description: "Max input tokens. Defaults automatically by provider when not set (6200 for github-models, 190000 for anthropic)." required: false From 037e3b8adb2b610100f7ec677dbd33974acaa2fe Mon Sep 17 00:00:00 2001 From: John McCall Date: Wed, 17 Jun 2026 11:08:01 -0400 Subject: [PATCH 6/9] docs: note GitHub Models retirement in README and defaults.js GitHub announced GitHub Models retirement on 2026-06-16 (existing customers unaffected for now, timeline TBD). Documents the migration path (model-provider: anthropic + ANTHROPIC_API_KEY) where someone will naturally look when it becomes urgent. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: John McCall --- .github/actions/overture-projection/README.md | 2 ++ .github/actions/overture-projection/scripts/lib/defaults.js | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/actions/overture-projection/README.md b/.github/actions/overture-projection/README.md index 311cb4d..3025eda 100644 --- a/.github/actions/overture-projection/README.md +++ b/.github/actions/overture-projection/README.md @@ -4,6 +4,8 @@ Posts an AI-generated code review comment on a pull request. Skills drive what t Supports [GitHub Models](https://docs.github.com/en/github-models) (default) and [Anthropic](https://docs.anthropic.com/en/docs/about-claude/models) as model providers. +> **⚠️ GitHub Models sunset notice (2026-06-16):** GitHub has stopped onboarding new GitHub Models customers and has announced full retirement, with timeline TBD. Existing OvertureMaps usage continues for now. When a sunset date is published, migrate by setting `model-provider: anthropic` and adding the `ANTHROPIC_API_KEY` org secret — the Anthropic path is already fully wired. See the [changelog](https://github.blog/changelog/2026-06-16-github-models-is-no-longer-available-to-new-customers/). + ## How it works 1. **Load skills** — sparse-checkouts `omf-devex/skills/`, parses frontmatter, filters to `pr-reviewer` surface. Raw content is stored; nothing is fetched yet. diff --git a/.github/actions/overture-projection/scripts/lib/defaults.js b/.github/actions/overture-projection/scripts/lib/defaults.js index 9684741..a4b0051 100644 --- a/.github/actions/overture-projection/scripts/lib/defaults.js +++ b/.github/actions/overture-projection/scripts/lib/defaults.js @@ -15,7 +15,11 @@ // ── Model IDs ───────────────────────────────────────────────────────────────── -/** Default model provider. */ +/** Default model provider. + * NOTE: GitHub Models is being retired (announced 2026-06-16, timeline TBD). + * To migrate: set DEFAULT_PROVIDER to 'anthropic' and ensure ANTHROPIC_API_KEY is set. + * See: https://github.blog/changelog/2026-06-16-github-models-is-no-longer-available-to-new-customers/ + */ const DEFAULT_PROVIDER = 'github-models'; /** Default review model when model-provider is 'github-models'. */ From 59e4e58daf39c523e0dca2254636e19463ba646c Mon Sep 17 00:00:00 2001 From: John McCall Date: Wed, 17 Jun 2026 11:09:42 -0400 Subject: [PATCH 7/9] [ENHANCEMENT] Ignore geospatial data files; deprioritize fixture dirs Ignore outright (no reviewable diff): *.geojson, *.parquet, *.geoparquet, *.pmtiles, *.mbtiles, *.csv Deprioritize (reviewed when budget allows, cut first when tight): fixtures/, testdata/, test-fixtures/, __fixtures__/ package.json, tools.json, tsconfig.json etc. are unaffected. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: John McCall --- .../actions/overture-projection/action.yml | 6 ++++ .../overture-projection/scripts/fetch-diff.js | 7 +++-- .../scripts/lib/__tests__/diff.test.js | 29 +++++++++++++++++++ .../overture-projection/scripts/lib/diff.js | 14 +++++++++ 4 files changed, 53 insertions(+), 3 deletions(-) diff --git a/.github/actions/overture-projection/action.yml b/.github/actions/overture-projection/action.yml index ae5383f..4e3f110 100644 --- a/.github/actions/overture-projection/action.yml +++ b/.github/actions/overture-projection/action.yml @@ -160,6 +160,12 @@ inputs: *.pdf *.min.js *.min.css + *.geojson + *.parquet + *.geoparquet + *.pmtiles + *.mbtiles + *.csv comment-mode: description: >- Controls how the review is posted. 'update' posts a single issue comment diff --git a/.github/actions/overture-projection/scripts/fetch-diff.js b/.github/actions/overture-projection/scripts/fetch-diff.js index 48ad07c..ddaa80b 100644 --- a/.github/actions/overture-projection/scripts/fetch-diff.js +++ b/.github/actions/overture-projection/scripts/fetch-diff.js @@ -34,7 +34,7 @@ module.exports = async ({ github, context, core }) => { const fs = require('fs'); const path = require('path'); - const { buildIgnorePatterns, isIgnored, isTestFile, applyFileBudget } = require('./lib/diff'); + const { buildIgnorePatterns, isIgnored, isTestFile, isFixtureFile, applyFileBudget } = require('./lib/diff'); const { resolveRepo, resolvePrNumber } = require('./lib/github'); const { DEFAULT_MAX_DIFF_CHARS } = require('./lib/defaults'); @@ -81,8 +81,9 @@ module.exports = async ({ github, context, core }) => { core.info(`⏭️ Ignored ${ignoredFiles.length} file(s): ${ignoredFiles.map(f => f.filename).join(', ')}`); } - // ponytail: stable sort — test files last so source files win the budget race - const prioritized = [...includedFiles.filter(f => !isTestFile(f)), ...includedFiles.filter(isTestFile)]; + // ponytail: stable sort — fixtures last, then tests, source files first + const isLowPriority = f => isTestFile(f) || isFixtureFile(f); + const prioritized = [...includedFiles.filter(f => !isLowPriority(f)), ...includedFiles.filter(isLowPriority)]; const { included: files, skipped: budgetSkippedFiles } = applyFileBudget(prioritized, fetchCeiling); core.info(`📐 Fetch ceiling: ${fetchCeiling} chars — fetched ${files.length} file(s), ceiling-skipped ${budgetSkippedFiles.length} file(s)`); diff --git a/.github/actions/overture-projection/scripts/lib/__tests__/diff.test.js b/.github/actions/overture-projection/scripts/lib/__tests__/diff.test.js index 88331d3..ec0711e 100644 --- a/.github/actions/overture-projection/scripts/lib/__tests__/diff.test.js +++ b/.github/actions/overture-projection/scripts/lib/__tests__/diff.test.js @@ -7,6 +7,7 @@ const { buildIgnorePatterns, isIgnored, isTestFile, + isFixtureFile, applyFileBudget, } = require('../diff'); @@ -113,6 +114,34 @@ describe('isTestFile', () => { }); }); +// --------------------------------------------------------------------------- +// isFixtureFile +// --------------------------------------------------------------------------- + +describe('isFixtureFile', () => { + it('matches fixtures/ directory', () => { + assert.equal(isFixtureFile({ filename: 'tests/fixtures/sample.json' }), true); + }); + + it('matches testdata/ directory', () => { + assert.equal(isFixtureFile({ filename: 'pkg/testdata/input.json' }), true); + }); + + it('matches test-fixtures/ directory', () => { + assert.equal(isFixtureFile({ filename: 'src/test-fixtures/mock.json' }), true); + }); + + it('matches __fixtures__/ directory', () => { + assert.equal(isFixtureFile({ filename: 'src/__fixtures__/response.json' }), true); + }); + + it('does not match regular source or config files', () => { + assert.equal(isFixtureFile({ filename: 'src/parser.ts' }), false); + assert.equal(isFixtureFile({ filename: 'package.json' }), false); + assert.equal(isFixtureFile({ filename: 'tools.json' }), false); + }); +}); + // --------------------------------------------------------------------------- // applyFileBudget // --------------------------------------------------------------------------- diff --git a/.github/actions/overture-projection/scripts/lib/diff.js b/.github/actions/overture-projection/scripts/lib/diff.js index 234a74f..17e3bfb 100644 --- a/.github/actions/overture-projection/scripts/lib/diff.js +++ b/.github/actions/overture-projection/scripts/lib/diff.js @@ -154,10 +154,24 @@ function isTestFile(file) { return /(__tests__|\.test\.|\.spec\.|\/test_|_test\.)/i.test(file.filename); } +/** + * Returns `true` if the file is a fixture or data file (should be deprioritized + * in the diff budget behind source and test files). + * + * Matches: fixtures/, testdata/, test-fixtures/, __fixtures__/ directories. + * + * @param {{ filename: string }} file + * @returns {boolean} + */ +function isFixtureFile(file) { + return /(\/fixtures\/|\/testdata\/|\/test-fixtures\/|__fixtures__)/i.test(file.filename); +} + module.exports = { diffCharBudget, buildIgnorePatterns, isIgnored, isTestFile, + isFixtureFile, applyFileBudget, }; From a5cde945e0e89c88184da184e4bbf9934d6dde50 Mon Sep 17 00:00:00 2001 From: John McCall Date: Wed, 17 Jun 2026 11:14:04 -0400 Subject: [PATCH 8/9] =?UTF-8?q?fix:=20correctly=20signal=20Tests:=20?= =?UTF-8?q?=E2=9C=85=20when=20tests=20are=20budget-cut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When test files are deprioritized and dropped from the diff budget, the Tests: signal was showing ❌ none in diff even though tests exist in the PR — causing the model to falsely flag missing test coverage. Now checks budgetSkippedFiles as well as included files. Distinguishes three states: ✅ — tests reviewed in diff ✅ (not reviewed — budget-cut) — tests present but cut for context ❌ none in diff — no tests in the PR at all Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: John McCall --- .../scripts/lib/__tests__/prompt.test.js | 7 +++++++ .../actions/overture-projection/scripts/lib/prompt.js | 10 ++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.github/actions/overture-projection/scripts/lib/__tests__/prompt.test.js b/.github/actions/overture-projection/scripts/lib/__tests__/prompt.test.js index 7a56949..e096504 100644 --- a/.github/actions/overture-projection/scripts/lib/__tests__/prompt.test.js +++ b/.github/actions/overture-projection/scripts/lib/__tests__/prompt.test.js @@ -256,6 +256,13 @@ describe('buildUserPrompt', () => { assert.match(result, /Tests: ✅/); }); + it('shows Tests: ✅ (not reviewed — budget-cut) when tests are only in budgetSkippedFiles', () => { + const result = buildUserPrompt(makePRData({ + budgetSkippedFiles: ['src/__tests__/parser.test.ts'], + })); + assert.match(result, /Tests: ✅ \(not reviewed — budget-cut\)/); + }); + it('shows Tests: ❌ none in diff when no test files are present', () => { const result = buildUserPrompt(makePRData()); assert.match(result, /Tests: ❌ none in diff/); diff --git a/.github/actions/overture-projection/scripts/lib/prompt.js b/.github/actions/overture-projection/scripts/lib/prompt.js index ea388c9..b7e68ff 100644 --- a/.github/actions/overture-projection/scripts/lib/prompt.js +++ b/.github/actions/overture-projection/scripts/lib/prompt.js @@ -161,8 +161,14 @@ function buildUserPromptParts(prData) { prData.files.every(f => DOCS_EXTENSIONS.has('.' + f.filename.split('.').pop().toLowerCase())); const prTypeNote = docsOnly ? 'PR type: docs-only' : 'PR type: code'; - const hasTests = prData.files.some(f => isTestFile(f.filename)); - const testsNote = docsOnly ? '' : ` | Tests: ${hasTests ? '✅' : '❌ none in diff'}`; + const testsInDiff = prData.files.some(f => isTestFile(f.filename)); + const testsSkipped = prData.budgetSkippedFiles?.some(f => isTestFile(f)); + const hasTests = testsInDiff || testsSkipped; + const testsNote = docsOnly ? '' : ` | Tests: ${ + !hasTests ? '❌ none in diff' : + testsInDiff ? '✅' : + '✅ (not reviewed — budget-cut)' + }`; const authorNote = prData.authorAssociation ? ` | Author: ${prData.authorAssociation}` : ''; const prHeader = From 2c0e97acc536b621015bf7c1a62e24ac0069d510 Mon Sep 17 00:00:00 2001 From: John McCall Date: Wed, 17 Jun 2026 11:19:22 -0400 Subject: [PATCH 9/9] chore: repoint action ref back to @main Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: John McCall --- .github/workflows/overture-projection.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/overture-projection.yml b/.github/workflows/overture-projection.yml index 82cc8f0..d20f758 100644 --- a/.github/workflows/overture-projection.yml +++ b/.github/workflows/overture-projection.yml @@ -203,7 +203,7 @@ jobs: steps: - name: Run Overture PRojection - uses: OvertureMaps/workflows/.github/actions/overture-projection@lowlydba/feat-skip-binary-files-in-reviewer # zizmor: ignore[unpinned-uses] -- TEMP: testing binary-file exclusions; revert to @main before merge + uses: OvertureMaps/workflows/.github/actions/overture-projection@main # zizmor: ignore[unpinned-uses] -- self-referential; SHA updated in follow-up commit with: always-skills: "pr-review" repository: ${{ github.event_name == 'pull_request' && github.event.repository.full_name || inputs.repository || github.event.repository.full_name }}