Skip to content

Commit 9888814

Browse files
cameroncookecodex
andauthored
ci(warden): Refine PR review checks (#438)
* ci(warden): Refine PR review checks Narrow PR-time Warden coverage to a smaller fast lane with explicit budgets. Move broad or noisy skills out of normal PR cadence and pin remote Warden skills/actions so check behavior is reproducible. Add workflow timeout and concurrency guardrails so obsolete Warden runs do not continue delaying PR feedback after newer commits arrive. Co-Authored-By: OpenAI Codex <noreply@openai.com> * ci(warden): Address PR review feedback Include runtime entrypoints and MCP resources in the remaining PR fast-lane Warden checks so source-only changes to those surfaces still get reviewed. Let Warden sweep runs queue instead of cancelling in-progress repository mutation work. Co-Authored-By: OpenAI Codex <noreply@openai.com> --------- Co-authored-by: OpenAI Codex <noreply@openai.com>
1 parent 59d5ca3 commit 9888814

3 files changed

Lines changed: 106 additions & 27 deletions

File tree

.github/workflows/warden-sweep.yml

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@ on:
44
workflow_dispatch:
55
schedule:
66
# 06:00 UTC every Monday
7-
- cron: "0 6 * * 1"
7+
- cron: '0 6 * * 1'
8+
9+
concurrency:
10+
group: ${{ github.workflow }}
11+
cancel-in-progress: false
812

913
# contents: write required for sweep to open draft fix PRs
1014
# issues: write required for the sweep tracking issue
@@ -17,12 +21,13 @@ permissions:
1721
jobs:
1822
sweep:
1923
runs-on: ubuntu-latest
24+
timeout-minutes: 120
2025
env:
2126
WARDEN_MODEL: ${{ secrets.WARDEN_MODEL }}
2227
WARDEN_SENTRY_DSN: ${{ secrets.WARDEN_SENTRY_DSN }}
2328
steps:
24-
- uses: actions/checkout@v4
25-
- uses: getsentry/warden@v0
29+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
30+
- uses: getsentry/warden@2130c979dec0163048d954d9599504e2d9fa2b07
2631
with:
2732
anthropic-api-key: ${{ secrets.WARDEN_ANTHROPIC_API_KEY }}
2833

@@ -79,7 +84,7 @@ jobs:
7984
8085
- name: Upload Warden findings
8186
if: always()
82-
uses: actions/upload-artifact@v4
87+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
8388
with:
8489
name: warden-findings
8590
path: ${{ runner.temp }}/warden-findings.json

.github/workflows/warden.yml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ on:
44
pull_request:
55
types: [opened, synchronize, reopened]
66

7+
concurrency:
8+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
9+
cancel-in-progress: true
10+
711
# contents: write required for resolving review threads via GraphQL
812
# See: https://github.com/orgs/community/discussions/44650
913
permissions:
@@ -14,11 +18,12 @@ permissions:
1418
jobs:
1519
review:
1620
runs-on: ubuntu-latest
21+
timeout-minutes: 20
1722
env:
1823
WARDEN_MODEL: ${{ secrets.WARDEN_MODEL }}
1924
WARDEN_SENTRY_DSN: ${{ secrets.WARDEN_SENTRY_DSN }}
2025
steps:
21-
- uses: actions/checkout@v4
22-
- uses: getsentry/warden@v0
26+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
27+
- uses: getsentry/warden@2130c979dec0163048d954d9599504e2d9fa2b07
2328
with:
2429
anthropic-api-key: ${{ secrets.WARDEN_ANTHROPIC_API_KEY }}

warden.toml

Lines changed: 90 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ version = 1
1616
failOn = "high"
1717
# reportOn: minimum severity that creates PR annotations
1818
reportOn = "medium"
19+
# Avoid noisy no-op PR reporting.
20+
reportOnSuccess = false
1921

2022
# warden-sweep is a full-repo sweep. PR-trigger is intentionally omitted so
2123
# it does not run on every PR. It runs:
@@ -41,6 +43,8 @@ fixBranchPrefix = "warden-sweep"
4143

4244
[[skills]]
4345
name = "xcodebuildmcp-docs-release-review"
46+
maxTurns = 10
47+
maxFindings = 5
4448
paths = [
4549
"README.md",
4650
"CHANGELOG.md",
@@ -57,6 +61,8 @@ actions = ["opened", "synchronize", "reopened"]
5761

5862
[[skills]]
5963
name = "xcodebuildmcp-docs-command-review"
64+
maxTurns = 8
65+
maxFindings = 5
6066
paths = [
6167
"CHANGELOG.md",
6268
]
@@ -67,6 +73,8 @@ actions = ["opened", "synchronize", "reopened"]
6773

6874
[[skills]]
6975
name = "xcodebuildmcp-packaging-resource-review"
76+
maxTurns = 10
77+
maxFindings = 5
7078
paths = [
7179
"package.json",
7280
"scripts/copy-build-assets.js",
@@ -84,6 +92,8 @@ actions = ["opened", "synchronize", "reopened"]
8492

8593
[[skills]]
8694
name = "xcodebuildmcp-rendering-streaming-review"
95+
maxTurns = 10
96+
maxFindings = 5
8797
paths = [
8898
"src/rendering/**",
8999
"src/types/domain-fragments.ts",
@@ -101,6 +111,8 @@ actions = ["opened", "synchronize", "reopened"]
101111

102112
[[skills]]
103113
name = "xcodebuildmcp-runtime-boundary-review"
114+
maxTurns = 8
115+
maxFindings = 5
104116
paths = [
105117
"src/runtime/tool-catalog.ts",
106118
"src/runtime/tool-invoker.ts",
@@ -119,12 +131,15 @@ actions = ["opened", "synchronize", "reopened"]
119131

120132
[[skills]]
121133
name = "xcodebuildmcp-snapshot-fixture-review"
134+
maxTurns = 10
135+
maxFindings = 5
122136
paths = [
123137
"src/snapshot-tests/contracts.ts",
124138
"src/snapshot-tests/fixture-io.ts",
125139
"src/snapshot-tests/__tests__/fixture-io.test.ts",
126140
"src/snapshot-tests/__tests__/json-normalize.test.ts",
127141
"src/snapshot-tests/__tests__/json-fixture-schema.test.ts",
142+
"src/snapshot-tests/__fixtures__/**",
128143
"xcodebuildmcp.com/app/docs/_content/testing.mdx",
129144
]
130145

@@ -134,6 +149,8 @@ actions = ["opened", "synchronize", "reopened"]
134149

135150
[[skills]]
136151
name = "xcodebuildmcp-structured-output-review"
152+
maxTurns = 8
153+
maxFindings = 5
137154
paths = [
138155
"schemas/structured-output/**",
139156
"src/core/structured-output-schema.ts",
@@ -150,6 +167,8 @@ actions = ["opened", "synchronize", "reopened"]
150167

151168
[[skills]]
152169
name = "xcodebuildmcp-test-boundary-review"
170+
maxTurns = 15
171+
maxFindings = 10
153172
paths = [
154173
"src/**/__tests__/**",
155174
"src/test-utils/**",
@@ -168,6 +187,8 @@ actions = ["opened", "synchronize", "reopened"]
168187

169188
[[skills]]
170189
name = "xcodebuildmcp-tool-contract-review"
190+
maxTurns = 8
191+
maxFindings = 5
171192
paths = [
172193
"src/mcp/tools/**",
173194
"src/core/manifest/schema.ts",
@@ -187,19 +208,33 @@ actions = ["opened", "synchronize", "reopened"]
187208

188209
[[skills]]
189210
name = "wrdn-pii"
190-
remote = "getsentry/warden-skills"
191-
paths = ["**/*"]
211+
remote = "getsentry/warden-skills@6f720b5c4894e374f7a09707bae0de60d8b825df"
212+
paths = [
213+
"src/**/*.ts",
214+
"scripts/**/*.{js,mjs,sh,ts}",
215+
".github/workflows/*.yml",
216+
".github/workflows/*.yaml",
217+
"README.md",
218+
"CHANGELOG.md",
219+
"xcodebuildmcp.com/app/docs/_content/**",
220+
]
192221
ignorePaths = [
222+
"**/*.test.ts",
223+
"**/__tests__/**",
224+
"**/__fixtures__/**",
225+
"**/__snapshots__/**",
193226
"src/snapshot-tests/__fixtures__/**",
194227
]
195228

229+
# Temporarily local-only until the Pi model selector failure seen in PR checks is resolved.
196230
[[skills.triggers]]
197-
type = "pull_request"
198-
actions = ["opened", "synchronize", "reopened"]
231+
type = "local"
199232

200233
[[skills]]
201234
name = "wrdn-authz"
202-
remote = "getsentry/warden-skills"
235+
remote = "getsentry/warden-skills@6f720b5c4894e374f7a09707bae0de60d8b825df"
236+
maxTurns = 15
237+
maxFindings = 5
203238
paths = ["src/**/*.ts"]
204239
ignorePaths = [
205240
"**/*.test.ts",
@@ -209,13 +244,27 @@ ignorePaths = [
209244
]
210245

211246
[[skills.triggers]]
212-
type = "pull_request"
213-
actions = ["opened", "synchronize", "reopened"]
247+
type = "schedule"
214248

215249
[[skills]]
216250
name = "wrdn-code-execution"
217-
remote = "getsentry/warden-skills"
218-
paths = ["src/**/*.ts", "scripts/**/*.{js,mjs,sh,ts}"]
251+
remote = "getsentry/warden-skills@6f720b5c4894e374f7a09707bae0de60d8b825df"
252+
maxTurns = 10
253+
maxFindings = 5
254+
paths = [
255+
"src/cli.ts",
256+
"src/cli/**",
257+
"src/daemon.ts",
258+
"src/daemon/**",
259+
"src/doctor-cli.ts",
260+
"src/integrations/**",
261+
"src/mcp/resources/**",
262+
"src/mcp/tools/**",
263+
"src/runtime/tool-invoker.ts",
264+
"src/utils/execution/**",
265+
"src/utils/xcodemake/**",
266+
"scripts/**/*.{js,mjs,sh,ts}",
267+
]
219268
ignorePaths = [
220269
"**/*.test.ts",
221270
"**/__tests__/**",
@@ -229,7 +278,9 @@ actions = ["opened", "synchronize", "reopened"]
229278

230279
[[skills]]
231280
name = "wrdn-data-exfil"
232-
remote = "getsentry/warden-skills"
281+
remote = "getsentry/warden-skills@6f720b5c4894e374f7a09707bae0de60d8b825df"
282+
maxTurns = 15
283+
maxFindings = 5
233284
paths = ["src/**/*.ts", "scripts/**/*.{js,mjs,sh,ts}"]
234285
ignorePaths = [
235286
"**/*.test.ts",
@@ -239,12 +290,13 @@ ignorePaths = [
239290
]
240291

241292
[[skills.triggers]]
242-
type = "pull_request"
243-
actions = ["opened", "synchronize", "reopened"]
293+
type = "schedule"
244294

245295
[[skills]]
246296
name = "wrdn-gha-workflows"
247-
remote = "getsentry/warden-skills"
297+
remote = "getsentry/warden-skills@6f720b5c4894e374f7a09707bae0de60d8b825df"
298+
maxTurns = 8
299+
maxFindings = 5
248300
paths = [
249301
".github/workflows/*.yml",
250302
".github/workflows/*.yaml",
@@ -262,8 +314,23 @@ actions = ["opened", "synchronize", "reopened"]
262314

263315
[[skills]]
264316
name = "find-bugs"
265-
remote = "getsentry/skills"
266-
paths = ["src/**/*.ts", "scripts/**/*.{js,mjs,ts}"]
317+
remote = "getsentry/skills@b10e2db21d3165de1904bdf3fa64285016765fe5"
318+
maxTurns = 10
319+
maxFindings = 5
320+
paths = [
321+
"src/cli.ts",
322+
"src/cli/**",
323+
"src/daemon.ts",
324+
"src/daemon/**",
325+
"src/doctor-cli.ts",
326+
"src/integrations/**",
327+
"src/mcp/resources/**",
328+
"src/mcp/tools/**",
329+
"src/runtime/**",
330+
"src/server/**",
331+
"src/utils/execution/**",
332+
"scripts/**/*.{js,mjs,ts}",
333+
]
267334
ignorePaths = [
268335
"**/*.test.ts",
269336
"**/__tests__/**",
@@ -277,7 +344,9 @@ actions = ["opened", "synchronize", "reopened"]
277344

278345
[[skills]]
279346
name = "code-review"
280-
remote = "getsentry/skills"
347+
remote = "getsentry/skills@b10e2db21d3165de1904bdf3fa64285016765fe5"
348+
maxTurns = 15
349+
maxFindings = 5
281350
paths = ["src/**/*.ts"]
282351
ignorePaths = [
283352
"**/*.test.ts",
@@ -287,12 +356,13 @@ ignorePaths = [
287356
]
288357

289358
[[skills.triggers]]
290-
type = "pull_request"
291-
actions = ["opened", "synchronize", "reopened"]
359+
type = "schedule"
292360

293361
[[skills]]
294362
name = "code-simplifier"
295-
remote = "getsentry/skills"
363+
remote = "getsentry/skills@b10e2db21d3165de1904bdf3fa64285016765fe5"
364+
maxTurns = 10
365+
maxFindings = 5
296366
paths = ["src/**/*.ts"]
297367
ignorePaths = [
298368
"**/*.test.ts",
@@ -302,5 +372,4 @@ ignorePaths = [
302372
]
303373

304374
[[skills.triggers]]
305-
type = "pull_request"
306-
actions = ["opened", "synchronize", "reopened"]
375+
type = "local"

0 commit comments

Comments
 (0)