diff --git a/.github/workflows/warden-sweep.yml b/.github/workflows/warden-sweep.yml index 3bb10dab..00286c6b 100644 --- a/.github/workflows/warden-sweep.yml +++ b/.github/workflows/warden-sweep.yml @@ -4,7 +4,11 @@ on: workflow_dispatch: schedule: # 06:00 UTC every Monday - - cron: "0 6 * * 1" + - cron: '0 6 * * 1' + +concurrency: + group: ${{ github.workflow }} + cancel-in-progress: false # contents: write required for sweep to open draft fix PRs # issues: write required for the sweep tracking issue @@ -17,12 +21,13 @@ permissions: jobs: sweep: runs-on: ubuntu-latest + timeout-minutes: 120 env: WARDEN_MODEL: ${{ secrets.WARDEN_MODEL }} WARDEN_SENTRY_DSN: ${{ secrets.WARDEN_SENTRY_DSN }} steps: - - uses: actions/checkout@v4 - - uses: getsentry/warden@v0 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 + - uses: getsentry/warden@2130c979dec0163048d954d9599504e2d9fa2b07 with: anthropic-api-key: ${{ secrets.WARDEN_ANTHROPIC_API_KEY }} @@ -79,7 +84,7 @@ jobs: - name: Upload Warden findings if: always() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 with: name: warden-findings path: ${{ runner.temp }}/warden-findings.json diff --git a/.github/workflows/warden.yml b/.github/workflows/warden.yml index f2ff0532..916f1066 100644 --- a/.github/workflows/warden.yml +++ b/.github/workflows/warden.yml @@ -4,6 +4,10 @@ on: pull_request: types: [opened, synchronize, reopened] +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + # contents: write required for resolving review threads via GraphQL # See: https://github.com/orgs/community/discussions/44650 permissions: @@ -14,11 +18,12 @@ permissions: jobs: review: runs-on: ubuntu-latest + timeout-minutes: 20 env: WARDEN_MODEL: ${{ secrets.WARDEN_MODEL }} WARDEN_SENTRY_DSN: ${{ secrets.WARDEN_SENTRY_DSN }} steps: - - uses: actions/checkout@v4 - - uses: getsentry/warden@v0 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 + - uses: getsentry/warden@2130c979dec0163048d954d9599504e2d9fa2b07 with: anthropic-api-key: ${{ secrets.WARDEN_ANTHROPIC_API_KEY }} diff --git a/warden.toml b/warden.toml index 2ca7fd74..444e77e5 100644 --- a/warden.toml +++ b/warden.toml @@ -16,6 +16,8 @@ version = 1 failOn = "high" # reportOn: minimum severity that creates PR annotations reportOn = "medium" +# Avoid noisy no-op PR reporting. +reportOnSuccess = false # warden-sweep is a full-repo sweep. PR-trigger is intentionally omitted so # it does not run on every PR. It runs: @@ -41,6 +43,8 @@ fixBranchPrefix = "warden-sweep" [[skills]] name = "xcodebuildmcp-docs-release-review" +maxTurns = 10 +maxFindings = 5 paths = [ "README.md", "CHANGELOG.md", @@ -57,6 +61,8 @@ actions = ["opened", "synchronize", "reopened"] [[skills]] name = "xcodebuildmcp-docs-command-review" +maxTurns = 8 +maxFindings = 5 paths = [ "CHANGELOG.md", ] @@ -67,6 +73,8 @@ actions = ["opened", "synchronize", "reopened"] [[skills]] name = "xcodebuildmcp-packaging-resource-review" +maxTurns = 10 +maxFindings = 5 paths = [ "package.json", "scripts/copy-build-assets.js", @@ -84,6 +92,8 @@ actions = ["opened", "synchronize", "reopened"] [[skills]] name = "xcodebuildmcp-rendering-streaming-review" +maxTurns = 10 +maxFindings = 5 paths = [ "src/rendering/**", "src/types/domain-fragments.ts", @@ -101,6 +111,8 @@ actions = ["opened", "synchronize", "reopened"] [[skills]] name = "xcodebuildmcp-runtime-boundary-review" +maxTurns = 8 +maxFindings = 5 paths = [ "src/runtime/tool-catalog.ts", "src/runtime/tool-invoker.ts", @@ -119,12 +131,15 @@ actions = ["opened", "synchronize", "reopened"] [[skills]] name = "xcodebuildmcp-snapshot-fixture-review" +maxTurns = 10 +maxFindings = 5 paths = [ "src/snapshot-tests/contracts.ts", "src/snapshot-tests/fixture-io.ts", "src/snapshot-tests/__tests__/fixture-io.test.ts", "src/snapshot-tests/__tests__/json-normalize.test.ts", "src/snapshot-tests/__tests__/json-fixture-schema.test.ts", + "src/snapshot-tests/__fixtures__/**", "xcodebuildmcp.com/app/docs/_content/testing.mdx", ] @@ -134,6 +149,8 @@ actions = ["opened", "synchronize", "reopened"] [[skills]] name = "xcodebuildmcp-structured-output-review" +maxTurns = 8 +maxFindings = 5 paths = [ "schemas/structured-output/**", "src/core/structured-output-schema.ts", @@ -150,6 +167,8 @@ actions = ["opened", "synchronize", "reopened"] [[skills]] name = "xcodebuildmcp-test-boundary-review" +maxTurns = 15 +maxFindings = 10 paths = [ "src/**/__tests__/**", "src/test-utils/**", @@ -168,6 +187,8 @@ actions = ["opened", "synchronize", "reopened"] [[skills]] name = "xcodebuildmcp-tool-contract-review" +maxTurns = 8 +maxFindings = 5 paths = [ "src/mcp/tools/**", "src/core/manifest/schema.ts", @@ -187,19 +208,33 @@ actions = ["opened", "synchronize", "reopened"] [[skills]] name = "wrdn-pii" -remote = "getsentry/warden-skills" -paths = ["**/*"] +remote = "getsentry/warden-skills@6f720b5c4894e374f7a09707bae0de60d8b825df" +paths = [ + "src/**/*.ts", + "scripts/**/*.{js,mjs,sh,ts}", + ".github/workflows/*.yml", + ".github/workflows/*.yaml", + "README.md", + "CHANGELOG.md", + "xcodebuildmcp.com/app/docs/_content/**", +] ignorePaths = [ + "**/*.test.ts", + "**/__tests__/**", + "**/__fixtures__/**", + "**/__snapshots__/**", "src/snapshot-tests/__fixtures__/**", ] +# Temporarily local-only until the Pi model selector failure seen in PR checks is resolved. [[skills.triggers]] -type = "pull_request" -actions = ["opened", "synchronize", "reopened"] +type = "local" [[skills]] name = "wrdn-authz" -remote = "getsentry/warden-skills" +remote = "getsentry/warden-skills@6f720b5c4894e374f7a09707bae0de60d8b825df" +maxTurns = 15 +maxFindings = 5 paths = ["src/**/*.ts"] ignorePaths = [ "**/*.test.ts", @@ -209,13 +244,27 @@ ignorePaths = [ ] [[skills.triggers]] -type = "pull_request" -actions = ["opened", "synchronize", "reopened"] +type = "schedule" [[skills]] name = "wrdn-code-execution" -remote = "getsentry/warden-skills" -paths = ["src/**/*.ts", "scripts/**/*.{js,mjs,sh,ts}"] +remote = "getsentry/warden-skills@6f720b5c4894e374f7a09707bae0de60d8b825df" +maxTurns = 10 +maxFindings = 5 +paths = [ + "src/cli.ts", + "src/cli/**", + "src/daemon.ts", + "src/daemon/**", + "src/doctor-cli.ts", + "src/integrations/**", + "src/mcp/resources/**", + "src/mcp/tools/**", + "src/runtime/tool-invoker.ts", + "src/utils/execution/**", + "src/utils/xcodemake/**", + "scripts/**/*.{js,mjs,sh,ts}", +] ignorePaths = [ "**/*.test.ts", "**/__tests__/**", @@ -229,7 +278,9 @@ actions = ["opened", "synchronize", "reopened"] [[skills]] name = "wrdn-data-exfil" -remote = "getsentry/warden-skills" +remote = "getsentry/warden-skills@6f720b5c4894e374f7a09707bae0de60d8b825df" +maxTurns = 15 +maxFindings = 5 paths = ["src/**/*.ts", "scripts/**/*.{js,mjs,sh,ts}"] ignorePaths = [ "**/*.test.ts", @@ -239,12 +290,13 @@ ignorePaths = [ ] [[skills.triggers]] -type = "pull_request" -actions = ["opened", "synchronize", "reopened"] +type = "schedule" [[skills]] name = "wrdn-gha-workflows" -remote = "getsentry/warden-skills" +remote = "getsentry/warden-skills@6f720b5c4894e374f7a09707bae0de60d8b825df" +maxTurns = 8 +maxFindings = 5 paths = [ ".github/workflows/*.yml", ".github/workflows/*.yaml", @@ -262,8 +314,23 @@ actions = ["opened", "synchronize", "reopened"] [[skills]] name = "find-bugs" -remote = "getsentry/skills" -paths = ["src/**/*.ts", "scripts/**/*.{js,mjs,ts}"] +remote = "getsentry/skills@b10e2db21d3165de1904bdf3fa64285016765fe5" +maxTurns = 10 +maxFindings = 5 +paths = [ + "src/cli.ts", + "src/cli/**", + "src/daemon.ts", + "src/daemon/**", + "src/doctor-cli.ts", + "src/integrations/**", + "src/mcp/resources/**", + "src/mcp/tools/**", + "src/runtime/**", + "src/server/**", + "src/utils/execution/**", + "scripts/**/*.{js,mjs,ts}", +] ignorePaths = [ "**/*.test.ts", "**/__tests__/**", @@ -277,7 +344,9 @@ actions = ["opened", "synchronize", "reopened"] [[skills]] name = "code-review" -remote = "getsentry/skills" +remote = "getsentry/skills@b10e2db21d3165de1904bdf3fa64285016765fe5" +maxTurns = 15 +maxFindings = 5 paths = ["src/**/*.ts"] ignorePaths = [ "**/*.test.ts", @@ -287,12 +356,13 @@ ignorePaths = [ ] [[skills.triggers]] -type = "pull_request" -actions = ["opened", "synchronize", "reopened"] +type = "schedule" [[skills]] name = "code-simplifier" -remote = "getsentry/skills" +remote = "getsentry/skills@b10e2db21d3165de1904bdf3fa64285016765fe5" +maxTurns = 10 +maxFindings = 5 paths = ["src/**/*.ts"] ignorePaths = [ "**/*.test.ts", @@ -302,5 +372,4 @@ ignorePaths = [ ] [[skills.triggers]] -type = "pull_request" -actions = ["opened", "synchronize", "reopened"] +type = "local"