patchrail 0.1.1__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (601) hide show
  1. {patchrail-0.1.1 → patchrail-0.3.0}/.gitignore +3 -0
  2. patchrail-0.3.0/CHANGELOG.md +217 -0
  3. {patchrail-0.1.1 → patchrail-0.3.0}/CONTRIBUTING.md +6 -1
  4. patchrail-0.3.0/PKG-INFO +221 -0
  5. patchrail-0.3.0/README.md +190 -0
  6. patchrail-0.3.0/actions/ci-triage/action.yml +105 -0
  7. patchrail-0.3.0/actions/ci-triage/scripts/ci_triage_action_outputs.py +221 -0
  8. patchrail-0.3.0/examples/ci-triage/appveyor-dotnet-test-xunit.log +10 -0
  9. patchrail-0.3.0/examples/ci-triage/azure-pipelines-dotnet-test.log +18 -0
  10. patchrail-0.3.0/examples/ci-triage/bitbucket-pipelines-composer-platform.log +10 -0
  11. patchrail-0.3.0/examples/ci-triage/bitbucket-pipelines-npm-eresolve.log +18 -0
  12. patchrail-0.3.0/examples/ci-triage/bitbucket-pipelines-vue-tsc-typecheck.log +14 -0
  13. patchrail-0.3.0/examples/ci-triage/buildkite-docker-build.log +8 -0
  14. patchrail-0.3.0/examples/ci-triage/buildkite-pnpm-frozen-lockfile.log +11 -0
  15. patchrail-0.3.0/examples/ci-triage/cargo-test-panic-failure.log +11 -0
  16. patchrail-0.3.0/examples/ci-triage/circleci-bundler-native-extension.log +15 -0
  17. patchrail-0.3.0/examples/ci-triage/circleci-checkout-lfs-failure.expected.json +4 -0
  18. patchrail-0.3.0/examples/ci-triage/circleci-checkout-lfs-failure.log +9 -0
  19. patchrail-0.3.0/examples/ci-triage/circleci-oom-exit-137.expected.json +4 -0
  20. patchrail-0.3.0/examples/ci-triage/circleci-oom-exit-137.log +12 -0
  21. patchrail-0.3.0/examples/ci-triage/cirrus-ci-cargo-test-panic.log +18 -0
  22. patchrail-0.3.0/examples/ci-triage/cloudbuild-golangci-lint-failure.expected.json +4 -0
  23. patchrail-0.3.0/examples/ci-triage/cloudbuild-golangci-lint-failure.log +6 -0
  24. patchrail-0.3.0/examples/ci-triage/codebuild-jest-test-failure.expected.json +4 -0
  25. patchrail-0.3.0/examples/ci-triage/codebuild-jest-test-failure.log +19 -0
  26. patchrail-0.3.0/examples/ci-triage/codefresh-trivy-critical.expected.json +4 -0
  27. patchrail-0.3.0/examples/ci-triage/codefresh-trivy-critical.log +15 -0
  28. patchrail-0.3.0/examples/ci-triage/concourse-ci-pip-resolution.log +11 -0
  29. patchrail-0.3.0/examples/ci-triage/db-migration-alembic-revision.expected.json +4 -0
  30. patchrail-0.3.0/examples/ci-triage/db-migration-alembic-revision.log +8 -0
  31. patchrail-0.3.0/examples/ci-triage/db-migration-prisma-drift.expected.json +4 -0
  32. patchrail-0.3.0/examples/ci-triage/db-migration-prisma-drift.log +8 -0
  33. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/demo-output.md +1 -3
  34. patchrail-0.3.0/examples/ci-triage/docker-compose-missing-env-file.expected.json +4 -0
  35. patchrail-0.3.0/examples/ci-triage/docs-build-docusaurus-broken-links.expected.json +4 -0
  36. patchrail-0.3.0/examples/ci-triage/docs-build-docusaurus-broken-links.log +21 -0
  37. patchrail-0.3.0/examples/ci-triage/docs-build-mkdocs-strict.expected.json +4 -0
  38. patchrail-0.3.0/examples/ci-triage/docs-build-mkdocs-strict.log +7 -0
  39. patchrail-0.3.0/examples/ci-triage/docs-build-sphinx-toctree.expected.json +4 -0
  40. patchrail-0.3.0/examples/ci-triage/docs-build-sphinx-toctree.log +18 -0
  41. patchrail-0.3.0/examples/ci-triage/dotnet-nuget-package-downgrade.expected.json +4 -0
  42. patchrail-0.3.0/examples/ci-triage/dotnet-sdk-target-framework-mismatch.expected.json +4 -0
  43. patchrail-0.3.0/examples/ci-triage/drone-ci-go-test-panic.log +12 -0
  44. patchrail-0.3.0/examples/ci-triage/elixir-mix-compile-error.expected.json +4 -0
  45. patchrail-0.3.0/examples/ci-triage/elixir-mix-compile-error.log +12 -0
  46. patchrail-0.3.0/examples/ci-triage/elixir-mix-exunit-failure.expected.json +4 -0
  47. patchrail-0.3.0/examples/ci-triage/elixir-mix-exunit-failure.log +15 -0
  48. patchrail-0.3.0/examples/ci-triage/github-actions-go-test-failure.log +8 -0
  49. patchrail-0.3.0/examples/ci-triage/github-actions-sbt-scala-compile.log +14 -0
  50. patchrail-0.3.0/examples/ci-triage/gitlab-ci-bundler-incompatible.log +16 -0
  51. patchrail-0.3.0/examples/ci-triage/gitlab-ci-gradle-kotlin-compile.log +15 -0
  52. patchrail-0.3.0/examples/ci-triage/gitlab-ci-job-timeout.expected.json +4 -0
  53. patchrail-0.3.0/examples/ci-triage/gitlab-ci-job-timeout.log +11 -0
  54. patchrail-0.3.0/examples/ci-triage/gitlab-ci-network-dns-failure.expected.json +4 -0
  55. patchrail-0.3.0/examples/ci-triage/gitlab-ci-network-dns-failure.log +12 -0
  56. patchrail-0.3.0/examples/ci-triage/go-integration-test-network-noise.log +14 -0
  57. patchrail-0.3.0/examples/ci-triage/go-timeout-race.expected.json +4 -0
  58. patchrail-0.3.0/examples/ci-triage/go-timeout.expected.json +4 -0
  59. patchrail-0.3.0/examples/ci-triage/go-undefined-function.expected.json +4 -0
  60. patchrail-0.3.0/examples/ci-triage/govulncheck-vulnerability.expected.json +4 -0
  61. patchrail-0.3.0/examples/ci-triage/govulncheck-vulnerability.log +14 -0
  62. patchrail-0.3.0/examples/ci-triage/harness-ci-tsc-noemit-ts2322.log +14 -0
  63. patchrail-0.3.0/examples/ci-triage/helm-lint-schema-and-kubeversion.expected.json +4 -0
  64. patchrail-0.3.0/examples/ci-triage/helm-lint-schema-and-kubeversion.log +6 -0
  65. patchrail-0.3.0/examples/ci-triage/helm-upgrade-template-nil-pointer.expected.json +4 -0
  66. patchrail-0.3.0/examples/ci-triage/helm-upgrade-template-nil-pointer.log +2 -0
  67. patchrail-0.3.0/examples/ci-triage/java-gradle-unsupported-major-version.expected.json +4 -0
  68. patchrail-0.3.0/examples/ci-triage/java-maven-compilation.expected.json +4 -0
  69. patchrail-0.3.0/examples/ci-triage/jenkins-maven-compilation.expected.json +4 -0
  70. patchrail-0.3.0/examples/ci-triage/jenkins-maven-compilation.log +13 -0
  71. patchrail-0.3.0/examples/ci-triage/jenkins-pytest-collection-error.log +14 -0
  72. patchrail-0.3.0/examples/ci-triage/k8s-deploy-admission-webhook.expected.json +4 -0
  73. patchrail-0.3.0/examples/ci-triage/k8s-deploy-admission-webhook.log +2 -0
  74. patchrail-0.3.0/examples/ci-triage/k8s-deploy-immutable-field.expected.json +4 -0
  75. patchrail-0.3.0/examples/ci-triage/k8s-deploy-immutable-field.log +4 -0
  76. patchrail-0.3.0/examples/ci-triage/nightwatch-element-not-found.log +10 -0
  77. patchrail-0.3.0/examples/ci-triage/node-yarn-immutable-install.expected.json +4 -0
  78. patchrail-0.3.0/examples/ci-triage/node-yarn-peer-version.expected.json +4 -0
  79. patchrail-0.3.0/examples/ci-triage/npm-ci-lockfile-mismatch-failure.expected.json +4 -0
  80. patchrail-0.3.0/examples/ci-triage/npm-ci-lockfile-mismatch-failure.log +12 -0
  81. patchrail-0.3.0/examples/ci-triage/php-phpunit-autoload-class-not-found.expected.json +4 -0
  82. patchrail-0.3.0/examples/ci-triage/playwright-e2e-timeout-failure.log +14 -0
  83. patchrail-0.3.0/examples/ci-triage/playwright-missing-browsers.expected.json +4 -0
  84. patchrail-0.3.0/examples/ci-triage/playwright-selector-timeout.expected.json +4 -0
  85. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-hatch-build-dependency.log +1 -1
  86. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-no-matching-distribution.log +1 -1
  87. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-prerelease-range.log +1 -1
  88. patchrail-0.3.0/examples/ci-triage/python-test-snapshot-diff.expected.json +4 -0
  89. patchrail-0.3.0/examples/ci-triage/python-uv-resolution-no-solution.expected.json +4 -0
  90. patchrail-0.3.0/examples/ci-triage/ruby-rspec-parallel-failure.expected.json +4 -0
  91. patchrail-0.3.0/examples/ci-triage/ruby-rspec-parallel-failure.log +10 -0
  92. patchrail-0.3.0/examples/ci-triage/ruby-ruby-version-lock.expected.json +4 -0
  93. patchrail-0.3.0/examples/ci-triage/ruby-yanked-gem.expected.json +4 -0
  94. patchrail-0.3.0/examples/ci-triage/rust-snapshot-failure.expected.json +4 -0
  95. patchrail-0.3.0/examples/ci-triage/rust-test-failure.expected.json +4 -0
  96. patchrail-0.3.0/examples/ci-triage/semaphore-ci-pytest-assertion.expected.json +4 -0
  97. patchrail-0.3.0/examples/ci-triage/semaphore-ci-pytest-assertion.log +17 -0
  98. patchrail-0.3.0/examples/ci-triage/shell-lint-shellcheck.expected.json +4 -0
  99. patchrail-0.3.0/examples/ci-triage/shell-lint-shellcheck.log +10 -0
  100. patchrail-0.3.0/examples/ci-triage/shell-lint-shfmt.expected.json +4 -0
  101. patchrail-0.3.0/examples/ci-triage/shell-lint-shfmt.log +12 -0
  102. patchrail-0.3.0/examples/ci-triage/teamcity-maven-compilation.expected.json +4 -0
  103. patchrail-0.3.0/examples/ci-triage/teamcity-maven-compilation.log +12 -0
  104. patchrail-0.3.0/examples/ci-triage/terraform-plan-undeclared-resource-failure.expected.json +4 -0
  105. patchrail-0.3.0/examples/ci-triage/terraform-plan-undeclared-resource-failure.log +15 -0
  106. patchrail-0.3.0/examples/ci-triage/travis-bundler-native-extension.expected.json +4 -0
  107. patchrail-0.3.0/examples/ci-triage/travis-bundler-native-extension.log +12 -0
  108. patchrail-0.3.0/examples/ci-triage/trivy-scan-critical-failure.expected.json +4 -0
  109. patchrail-0.3.0/examples/ci-triage/trivy-scan-critical-failure.log +16 -0
  110. patchrail-0.3.0/examples/ci-triage/tsc-noemit-typecheck-failure.log +14 -0
  111. patchrail-0.3.0/examples/ci-triage/typescript-typecheck.expected.json +4 -0
  112. patchrail-0.3.0/examples/ci-triage/typescript-vite-env-drift.expected.json +4 -0
  113. patchrail-0.3.0/examples/ci-triage/typescript-zod-schema-drift.expected.json +4 -0
  114. patchrail-0.3.0/examples/ci-triage/webdriverio-session-timeout.expected.json +4 -0
  115. patchrail-0.3.0/examples/ci-triage/webdriverio-session-timeout.log +9 -0
  116. patchrail-0.3.0/examples/ci-triage/woodpecker-ci-docker-build-copy.expected.json +4 -0
  117. patchrail-0.3.0/examples/ci-triage/woodpecker-ci-docker-build-copy.log +9 -0
  118. patchrail-0.3.0/examples/ci-triage/xcode-swift-compile-error.expected.json +4 -0
  119. patchrail-0.3.0/examples/ci-triage/xcode-swift-compile-error.log +14 -0
  120. patchrail-0.3.0/examples/ci-triage/xcode-swiftpm-resolution-failure.expected.json +4 -0
  121. patchrail-0.3.0/examples/ci-triage/xcode-swiftpm-resolution-failure.log +10 -0
  122. patchrail-0.3.0/examples/ci-triage/xcode-xctest-failure.expected.json +4 -0
  123. patchrail-0.3.0/examples/ci-triage/xcode-xctest-failure.log +13 -0
  124. patchrail-0.3.0/examples/ci-triage-action/README.md +121 -0
  125. patchrail-0.3.0/examples/ci-triage-action/sample/ci-report.md +17 -0
  126. patchrail-0.3.0/examples/ci-triage-action/sample/ci-result.json +20 -0
  127. patchrail-0.3.0/examples/ci-triage-action/sample/github-output.txt +16 -0
  128. patchrail-0.3.0/examples/ci-triage-action/sample/step-summary.md +8 -0
  129. {patchrail-0.1.1 → patchrail-0.3.0}/pyproject.toml +4 -5
  130. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/__init__.py +1 -1
  131. patchrail-0.3.0/src/patchrail/ci/__init__.py +7 -0
  132. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/ci/classify.py +379 -35
  133. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/cli.py +790 -212
  134. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/funded_issues/discovery.py +3 -3
  135. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/application-dossier.v1.schema.json +1 -1
  136. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/ci-result.v1.schema.json +9 -1
  137. {patchrail-0.1.1 → patchrail-0.3.0}/uv.lock +1 -1
  138. patchrail-0.1.1/CHANGELOG.md +0 -113
  139. patchrail-0.1.1/PKG-INFO +0 -324
  140. patchrail-0.1.1/README.md +0 -294
  141. patchrail-0.1.1/docs/agent-control-plane.md +0 -332
  142. patchrail-0.1.1/docs/agent-workflows.md +0 -24
  143. patchrail-0.1.1/docs/api-reference.md +0 -591
  144. patchrail-0.1.1/docs/assets/ci-explain-demo.gif +0 -0
  145. patchrail-0.1.1/docs/assets/ci-explain-demo.png +0 -0
  146. patchrail-0.1.1/docs/ci-failure-zoo.md +0 -157
  147. patchrail-0.1.1/docs/ci-janitor.md +0 -75
  148. patchrail-0.1.1/docs/codex-workflows.md +0 -93
  149. patchrail-0.1.1/docs/fix/README.md +0 -45
  150. patchrail-0.1.1/docs/fix/artifact-or-cache-failure.md +0 -42
  151. patchrail-0.1.1/docs/fix/browser-test-failure.md +0 -42
  152. patchrail-0.1.1/docs/fix/ci-job-timeout.md +0 -41
  153. patchrail-0.1.1/docs/fix/code-coverage-threshold.md +0 -42
  154. patchrail-0.1.1/docs/fix/cpp-build-failure.md +0 -42
  155. patchrail-0.1.1/docs/fix/docker-build-failure.md +0 -42
  156. patchrail-0.1.1/docs/fix/dotnet-build-failure.md +0 -42
  157. patchrail-0.1.1/docs/fix/git-checkout-failure.md +0 -42
  158. patchrail-0.1.1/docs/fix/git-merge-conflict.md +0 -42
  159. patchrail-0.1.1/docs/fix/github-actions-workflow.md +0 -41
  160. patchrail-0.1.1/docs/fix/go-lint.md +0 -42
  161. patchrail-0.1.1/docs/fix/go-test-failure.md +0 -41
  162. patchrail-0.1.1/docs/fix/java-build-failure.md +0 -42
  163. patchrail-0.1.1/docs/fix/javascript-lint.md +0 -41
  164. patchrail-0.1.1/docs/fix/network-transient-failure.md +0 -42
  165. patchrail-0.1.1/docs/fix/node-dependency-install.md +0 -42
  166. patchrail-0.1.1/docs/fix/node-test-failure.md +0 -42
  167. patchrail-0.1.1/docs/fix/php-composer-failure.md +0 -42
  168. patchrail-0.1.1/docs/fix/python-dependency-resolution.md +0 -42
  169. patchrail-0.1.1/docs/fix/python-lint.md +0 -42
  170. patchrail-0.1.1/docs/fix/python-test-failure.md +0 -41
  171. patchrail-0.1.1/docs/fix/python-type-check.md +0 -42
  172. patchrail-0.1.1/docs/fix/release-publish-failure.md +0 -42
  173. patchrail-0.1.1/docs/fix/ruby-bundle-failure.md +0 -42
  174. patchrail-0.1.1/docs/fix/runner-resource-exhaustion.md +0 -42
  175. patchrail-0.1.1/docs/fix/rust-lint.md +0 -41
  176. patchrail-0.1.1/docs/fix/rust-test-failure.md +0 -41
  177. patchrail-0.1.1/docs/fix/secrets-or-permissions-failure.md +0 -42
  178. patchrail-0.1.1/docs/fix/security-scan-failure.md +0 -42
  179. patchrail-0.1.1/docs/fix/terraform-iac-failure.md +0 -42
  180. patchrail-0.1.1/docs/fix/typescript-typecheck.md +0 -42
  181. patchrail-0.1.1/docs/funded-issues-ethics.md +0 -79
  182. patchrail-0.1.1/docs/github-action.md +0 -106
  183. patchrail-0.1.1/docs/metrics.md +0 -157
  184. patchrail-0.1.1/docs/open-source-program-evidence.md +0 -342
  185. patchrail-0.1.1/docs/openai-open-source-evidence.md +0 -381
  186. patchrail-0.1.1/docs/pilot-guide.md +0 -208
  187. patchrail-0.1.1/docs/pilot-request-package.md +0 -138
  188. patchrail-0.1.1/docs/public-workflow-ledger.md +0 -135
  189. patchrail-0.1.1/docs/quickstart.md +0 -119
  190. patchrail-0.1.1/docs/release-process.md +0 -251
  191. patchrail-0.1.1/docs/release-v0.1.0-evidence.md +0 -169
  192. patchrail-0.1.1/docs/release-v0.2.0-evidence.md +0 -93
  193. patchrail-0.1.1/docs/release-v0.3.0-evidence.md +0 -175
  194. patchrail-0.1.1/docs/release-v0.4.0-evidence.md +0 -90
  195. patchrail-0.1.1/docs/roadmap.md +0 -92
  196. patchrail-0.1.1/docs/threat-model.md +0 -68
  197. patchrail-0.1.1/schemas/application_dossier.schema.json +0 -305
  198. patchrail-0.1.1/schemas/ci_result.schema.json +0 -120
  199. patchrail-0.1.1/schemas/queue_audit_event.schema.json +0 -44
  200. patchrail-0.1.1/schemas/queue_audit_summary.schema.json +0 -169
  201. patchrail-0.1.1/schemas/queue_gate_report.schema.json +0 -158
  202. patchrail-0.1.1/schemas/queue_policy_resolution.schema.json +0 -188
  203. patchrail-0.1.1/schemas/queue_policy_scan.schema.json +0 -175
  204. patchrail-0.1.1/schemas/queue_proposal.schema.json +0 -61
  205. patchrail-0.1.1/schemas/queue_review.schema.json +0 -218
  206. patchrail-0.1.1/schemas/queue_status.schema.json +0 -179
  207. patchrail-0.1.1/schemas/queue_work_item.schema.json +0 -64
  208. patchrail-0.1.1/schemas/reviewer_quick_check_artifacts.schema.json +0 -104
  209. patchrail-0.1.1/scripts/release_readiness.py +0 -206
  210. patchrail-0.1.1/scripts/reviewer_quick_check.py +0 -13
  211. patchrail-0.1.1/scripts/update_ci_evidence_reference.py +0 -110
  212. patchrail-0.1.1/src/patchrail/ci/__init__.py +0 -7
  213. patchrail-0.1.1/src/patchrail/web_metrics.py +0 -653
  214. patchrail-0.1.1/tests/test_ci_classify_expansion.py +0 -600
  215. patchrail-0.1.1/tests/test_ci_cli.py +0 -1644
  216. patchrail-0.1.1/tests/test_funded_issues_algora_board.py +0 -288
  217. patchrail-0.1.1/tests/test_funded_issues_apply_recheck.py +0 -368
  218. patchrail-0.1.1/tests/test_funded_issues_blocklist.py +0 -168
  219. patchrail-0.1.1/tests/test_funded_issues_cli.py +0 -4880
  220. patchrail-0.1.1/tests/test_funded_issues_client_report.py +0 -361
  221. patchrail-0.1.1/tests/test_funded_issues_competition.py +0 -212
  222. patchrail-0.1.1/tests/test_funded_issues_payout_effort.py +0 -230
  223. patchrail-0.1.1/tests/test_funded_issues_source_noise.py +0 -528
  224. patchrail-0.1.1/tests/test_funded_issues_staleness.py +0 -222
  225. patchrail-0.1.1/tests/test_funded_issues_store.py +0 -1276
  226. patchrail-0.1.1/tests/test_funded_issues_testability.py +0 -206
  227. patchrail-0.1.1/tests/test_public_workflows.py +0 -2618
  228. patchrail-0.1.1/tests/test_queue_cli.py +0 -1654
  229. patchrail-0.1.1/tests/test_queue_http_api.py +0 -142
  230. patchrail-0.1.1/tests/test_web_metrics_cli.py +0 -305
  231. {patchrail-0.1.1 → patchrail-0.3.0}/.agents/skills/patchrail-ci-triage/SKILL.md +0 -0
  232. {patchrail-0.1.1 → patchrail-0.3.0}/.agents/skills/patchrail-release-captain/SKILL.md +0 -0
  233. {patchrail-0.1.1 → patchrail-0.3.0}/.agents/skills/patchrail-review-guardrails/SKILL.md +0 -0
  234. {patchrail-0.1.1 → patchrail-0.3.0}/ADOPTERS.md +0 -0
  235. {patchrail-0.1.1 → patchrail-0.3.0}/AGENTS.md +0 -0
  236. {patchrail-0.1.1 → patchrail-0.3.0}/CODE_OF_CONDUCT.md +0 -0
  237. {patchrail-0.1.1 → patchrail-0.3.0}/ETHICS.md +0 -0
  238. {patchrail-0.1.1 → patchrail-0.3.0}/GOVERNANCE.md +0 -0
  239. {patchrail-0.1.1 → patchrail-0.3.0}/LICENSE +0 -0
  240. {patchrail-0.1.1 → patchrail-0.3.0}/SECURITY.md +0 -0
  241. /patchrail-0.1.1/examples/ci-triage/dotnet-nuget-package-downgrade.expected.json → /patchrail-0.3.0/examples/ci-triage/appveyor-dotnet-test-xunit.expected.json +0 -0
  242. /patchrail-0.1.1/examples/ci-triage/dotnet-sdk-target-framework-mismatch.expected.json → /patchrail-0.3.0/examples/ci-triage/azure-pipelines-dotnet-test.expected.json +0 -0
  243. /patchrail-0.1.1/examples/ci-triage/php-composer-missing-package.expected.json → /patchrail-0.3.0/examples/ci-triage/bitbucket-pipelines-composer-platform.expected.json +0 -0
  244. /patchrail-0.1.1/examples/ci-triage/node-npm-ci-lock-outdated.expected.json → /patchrail-0.3.0/examples/ci-triage/bitbucket-pipelines-npm-eresolve.expected.json +0 -0
  245. /patchrail-0.1.1/examples/ci-triage/typescript-generated-client-schema-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/bitbucket-pipelines-vue-tsc-typecheck.expected.json +0 -0
  246. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/browser-playwright-navigation-timeout.expected.json +0 -0
  247. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/browser-playwright-navigation-timeout.log +0 -0
  248. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/browser-playwright-webserver-timeout.expected.json +0 -0
  249. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/browser-playwright-webserver-timeout.log +0 -0
  250. /patchrail-0.1.1/examples/ci-triage/docker-base-image-manifest-not-found.expected.json → /patchrail-0.3.0/examples/ci-triage/buildkite-docker-build.expected.json +0 -0
  251. /patchrail-0.1.1/examples/ci-triage/node-npm-engine-mismatch.expected.json → /patchrail-0.3.0/examples/ci-triage/buildkite-pnpm-frozen-lockfile.expected.json +0 -0
  252. /patchrail-0.1.1/examples/ci-triage/rust-compile-error.expected.json → /patchrail-0.3.0/examples/ci-triage/cargo-test-panic-failure.expected.json +0 -0
  253. /patchrail-0.1.1/examples/ci-triage/ruby-bundler-conflict.expected.json → /patchrail-0.3.0/examples/ci-triage/circleci-bundler-native-extension.expected.json +0 -0
  254. /patchrail-0.1.1/examples/ci-triage/rust-e0277-trait-bound.expected.json → /patchrail-0.3.0/examples/ci-triage/cirrus-ci-cargo-test-panic.expected.json +0 -0
  255. /patchrail-0.1.1/examples/ci-triage/python-pip-constraint-pin-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/concourse-ci-pip-resolution.expected.json +0 -0
  256. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/cypress-browser-launch.expected.json +0 -0
  257. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/cypress-browser-launch.log +0 -0
  258. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/dependency-failure.expected.json +0 -0
  259. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/dependency-failure.log +0 -0
  260. /patchrail-0.1.1/examples/ci-triage/docker-buildkit-missing-context.expected.json → /patchrail-0.3.0/examples/ci-triage/docker-base-image-manifest-not-found.expected.json +0 -0
  261. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/docker-base-image-manifest-not-found.log +0 -0
  262. /patchrail-0.1.1/examples/ci-triage/docker-buildkit-missing-stage.expected.json → /patchrail-0.3.0/examples/ci-triage/docker-buildkit-missing-context.expected.json +0 -0
  263. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/docker-buildkit-missing-context.log +0 -0
  264. /patchrail-0.1.1/examples/ci-triage/docker-compose-healthcheck.expected.json → /patchrail-0.3.0/examples/ci-triage/docker-buildkit-missing-stage.expected.json +0 -0
  265. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/docker-buildkit-missing-stage.log +0 -0
  266. /patchrail-0.1.1/examples/ci-triage/docker-compose-missing-env-file.expected.json → /patchrail-0.3.0/examples/ci-triage/docker-compose-healthcheck.expected.json +0 -0
  267. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/docker-compose-healthcheck.log +0 -0
  268. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/docker-compose-missing-env-file.log +0 -0
  269. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/dotnet-csharp-compile-error.expected.json +0 -0
  270. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/dotnet-csharp-compile-error.log +0 -0
  271. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/dotnet-nuget-package-downgrade.log +0 -0
  272. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/dotnet-nuget-version-conflict.expected.json +0 -0
  273. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/dotnet-nuget-version-conflict.log +0 -0
  274. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/dotnet-sdk-target-framework-mismatch.log +0 -0
  275. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/dotnet-xunit-assertion.expected.json +0 -0
  276. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/dotnet-xunit-assertion.log +0 -0
  277. /patchrail-0.1.1/examples/ci-triage/go-assertion-fail.expected.json → /patchrail-0.3.0/examples/ci-triage/drone-ci-go-test-panic.expected.json +0 -0
  278. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-bad-shell.expected.json +0 -0
  279. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-bad-shell.log +0 -0
  280. /patchrail-0.1.1/examples/ci-triage/go-compile-interface.expected.json → /patchrail-0.3.0/examples/ci-triage/github-actions-go-test-failure.expected.json +0 -0
  281. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-invalid-workflow.expected.json +0 -0
  282. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-invalid-workflow.log +0 -0
  283. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-matrix-expression.expected.json +0 -0
  284. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-matrix-expression.log +0 -0
  285. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-missing-workflow-ref.expected.json +0 -0
  286. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-missing-workflow-ref.log +0 -0
  287. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-permission-id-token.expected.json +0 -0
  288. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-permission-id-token.log +0 -0
  289. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-permission.expected.json +0 -0
  290. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-permission.log +0 -0
  291. /patchrail-0.1.1/examples/ci-triage/java-gradle-dependency-resolution.expected.json → /patchrail-0.3.0/examples/ci-triage/github-actions-sbt-scala-compile.expected.json +0 -0
  292. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-token-permission.expected.json +0 -0
  293. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-token-permission.log +0 -0
  294. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-unresolved-action.expected.json +0 -0
  295. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-unresolved-action.log +0 -0
  296. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-unresolved-checkout.expected.json +0 -0
  297. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-unresolved-checkout.log +0 -0
  298. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-yaml-syntax.expected.json +0 -0
  299. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-yaml-syntax.log +0 -0
  300. /patchrail-0.1.1/examples/ci-triage/ruby-bundler-missing-gem.expected.json → /patchrail-0.3.0/examples/ci-triage/gitlab-ci-bundler-incompatible.expected.json +0 -0
  301. /patchrail-0.1.1/examples/ci-triage/java-gradle-no-tests-found.expected.json → /patchrail-0.3.0/examples/ci-triage/gitlab-ci-gradle-kotlin-compile.expected.json +0 -0
  302. /patchrail-0.1.1/examples/ci-triage/go-data-race-test.expected.json → /patchrail-0.3.0/examples/ci-triage/go-assertion-fail.expected.json +0 -0
  303. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-assertion-fail.log +0 -0
  304. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-compile-failure.expected.json +0 -0
  305. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-compile-failure.log +0 -0
  306. /patchrail-0.1.1/examples/ci-triage/go-module-missing-symbol.expected.json → /patchrail-0.3.0/examples/ci-triage/go-compile-interface.expected.json +0 -0
  307. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-compile-interface.log +0 -0
  308. /patchrail-0.1.1/examples/ci-triage/go-panic-in-test.expected.json → /patchrail-0.3.0/examples/ci-triage/go-data-race-test.expected.json +0 -0
  309. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-data-race-test.log +0 -0
  310. /patchrail-0.1.1/examples/ci-triage/go-timeout-race.expected.json → /patchrail-0.3.0/examples/ci-triage/go-integration-test-network-noise.expected.json +0 -0
  311. /patchrail-0.1.1/examples/ci-triage/go-timeout.expected.json → /patchrail-0.3.0/examples/ci-triage/go-module-missing-symbol.expected.json +0 -0
  312. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-module-missing-symbol.log +0 -0
  313. /patchrail-0.1.1/examples/ci-triage/go-undefined-function.expected.json → /patchrail-0.3.0/examples/ci-triage/go-panic-in-test.expected.json +0 -0
  314. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-panic-in-test.log +0 -0
  315. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-timeout-race.log +0 -0
  316. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-timeout.log +0 -0
  317. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-undefined-function.log +0 -0
  318. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-undefined-symbol.expected.json +0 -0
  319. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-undefined-symbol.log +0 -0
  320. /patchrail-0.1.1/examples/ci-triage/typescript-import-type-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/harness-ci-tsc-noemit-ts2322.expected.json +0 -0
  321. /patchrail-0.1.1/examples/ci-triage/java-gradle-toolchain-version.expected.json → /patchrail-0.3.0/examples/ci-triage/java-gradle-dependency-resolution.expected.json +0 -0
  322. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/java-gradle-dependency-resolution.log +0 -0
  323. /patchrail-0.1.1/examples/ci-triage/java-gradle-unsupported-major-version.expected.json → /patchrail-0.3.0/examples/ci-triage/java-gradle-no-tests-found.expected.json +0 -0
  324. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/java-gradle-no-tests-found.log +0 -0
  325. /patchrail-0.1.1/examples/ci-triage/java-maven-compilation.expected.json → /patchrail-0.3.0/examples/ci-triage/java-gradle-toolchain-version.expected.json +0 -0
  326. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/java-gradle-toolchain-version.log +0 -0
  327. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/java-gradle-unsupported-major-version.log +0 -0
  328. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/java-maven-compilation.log +0 -0
  329. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-biome-format.expected.json +0 -0
  330. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-biome-format.log +0 -0
  331. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-a11y.expected.json +0 -0
  332. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-a11y.log +0 -0
  333. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-config-parser-drift.expected.json +0 -0
  334. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-config-parser-drift.log +0 -0
  335. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-import-order.expected.json +0 -0
  336. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-import-order.log +0 -0
  337. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-no-undef.expected.json +0 -0
  338. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-no-undef.log +0 -0
  339. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-react-hooks.expected.json +0 -0
  340. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-react-hooks.log +0 -0
  341. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-unused-vars.expected.json +0 -0
  342. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-unused-vars.log +0 -0
  343. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint.expected.json +0 -0
  344. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint.log +0 -0
  345. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-prettier-format.expected.json +0 -0
  346. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-prettier-format.log +0 -0
  347. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-prettier-generated-client-drift.expected.json +0 -0
  348. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-prettier-generated-client-drift.log +0 -0
  349. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-prettier.expected.json +0 -0
  350. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-prettier.log +0 -0
  351. /patchrail-0.1.1/examples/ci-triage/python-module-import.expected.json → /patchrail-0.3.0/examples/ci-triage/jenkins-pytest-collection-error.expected.json +0 -0
  352. /patchrail-0.1.1/examples/ci-triage/playwright-missing-browsers.expected.json → /patchrail-0.3.0/examples/ci-triage/nightwatch-element-not-found.expected.json +0 -0
  353. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-lockfile-drift.expected.json +0 -0
  354. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-lockfile-drift.log +0 -0
  355. /patchrail-0.1.1/examples/ci-triage/node-npm-eresolve-react.expected.json → /patchrail-0.3.0/examples/ci-triage/node-npm-ci-lock-outdated.expected.json +0 -0
  356. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-npm-ci-lock-outdated.log +0 -0
  357. /patchrail-0.1.1/examples/ci-triage/node-npm-missing-package-lock.expected.json → /patchrail-0.3.0/examples/ci-triage/node-npm-engine-mismatch.expected.json +0 -0
  358. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-npm-engine-mismatch.log +0 -0
  359. /patchrail-0.1.1/examples/ci-triage/node-npm-workspace-lock-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/node-npm-eresolve-react.expected.json +0 -0
  360. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-npm-eresolve-react.log +0 -0
  361. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-npm-missing-lockfile.expected.json +0 -0
  362. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-npm-missing-lockfile.log +0 -0
  363. /patchrail-0.1.1/examples/ci-triage/node-peer-dependency.expected.json → /patchrail-0.3.0/examples/ci-triage/node-npm-missing-package-lock.expected.json +0 -0
  364. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-npm-missing-package-lock.log +0 -0
  365. /patchrail-0.1.1/examples/ci-triage/node-pnpm-catalog-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/node-npm-workspace-lock-drift.expected.json +0 -0
  366. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-npm-workspace-lock-drift.log +0 -0
  367. /patchrail-0.1.1/examples/ci-triage/node-pnpm-frozen-lockfile.expected.json → /patchrail-0.3.0/examples/ci-triage/node-peer-dependency.expected.json +0 -0
  368. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-peer-dependency.log +0 -0
  369. /patchrail-0.1.1/examples/ci-triage/node-pnpm-lockfile-config-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/node-pnpm-catalog-drift.expected.json +0 -0
  370. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-pnpm-catalog-drift.log +0 -0
  371. /patchrail-0.1.1/examples/ci-triage/node-pnpm-peer-conflict-react.expected.json → /patchrail-0.3.0/examples/ci-triage/node-pnpm-frozen-lockfile.expected.json +0 -0
  372. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-pnpm-frozen-lockfile.log +0 -0
  373. /patchrail-0.1.1/examples/ci-triage/node-pnpm-peer-optional.expected.json → /patchrail-0.3.0/examples/ci-triage/node-pnpm-lockfile-config-drift.expected.json +0 -0
  374. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-pnpm-lockfile-config-drift.log +0 -0
  375. /patchrail-0.1.1/examples/ci-triage/node-pnpm-workspace-protocol.expected.json → /patchrail-0.3.0/examples/ci-triage/node-pnpm-peer-conflict-react.expected.json +0 -0
  376. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-pnpm-peer-conflict-react.log +0 -0
  377. /patchrail-0.1.1/examples/ci-triage/node-yarn-constraints-peer-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/node-pnpm-peer-optional.expected.json +0 -0
  378. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-pnpm-peer-optional.log +0 -0
  379. /patchrail-0.1.1/examples/ci-triage/node-yarn-immutable-cache-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/node-pnpm-workspace-protocol.expected.json +0 -0
  380. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-pnpm-workspace-protocol.log +0 -0
  381. /patchrail-0.1.1/examples/ci-triage/node-yarn-immutable-install.expected.json → /patchrail-0.3.0/examples/ci-triage/node-yarn-constraints-peer-drift.expected.json +0 -0
  382. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-yarn-constraints-peer-drift.log +0 -0
  383. /patchrail-0.1.1/examples/ci-triage/node-yarn-peer-version.expected.json → /patchrail-0.3.0/examples/ci-triage/node-yarn-immutable-cache-drift.expected.json +0 -0
  384. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-yarn-immutable-cache-drift.log +0 -0
  385. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-yarn-immutable-install.log +0 -0
  386. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-yarn-peer-dependency.expected.json +0 -0
  387. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-yarn-peer-dependency.log +0 -0
  388. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-yarn-peer-version.log +0 -0
  389. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/php-composer-lock-drift.expected.json +0 -0
  390. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/php-composer-lock-drift.log +0 -0
  391. /patchrail-0.1.1/examples/ci-triage/php-phpunit-autoload-class-not-found.expected.json → /patchrail-0.3.0/examples/ci-triage/php-composer-missing-package.expected.json +0 -0
  392. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/php-composer-missing-package.log +0 -0
  393. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/php-composer-platform-version.expected.json +0 -0
  394. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/php-composer-platform-version.log +0 -0
  395. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/php-phpunit-autoload-class-not-found.log +0 -0
  396. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/php-phpunit-failure.expected.json +0 -0
  397. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/php-phpunit-failure.log +0 -0
  398. /patchrail-0.1.1/examples/ci-triage/playwright-selector-timeout.expected.json → /patchrail-0.3.0/examples/ci-triage/playwright-e2e-timeout-failure.expected.json +0 -0
  399. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/playwright-missing-browsers.log +0 -0
  400. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/playwright-selector-timeout.log +0 -0
  401. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-hatch-build-dependency.expected.json +0 -0
  402. /patchrail-0.1.1/examples/ci-triage/python-pytest-env-token-redacted.expected.json → /patchrail-0.3.0/examples/ci-triage/python-module-import.expected.json +0 -0
  403. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-module-import.log +0 -0
  404. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-conflicting-constraints.expected.json +0 -0
  405. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-conflicting-constraints.log +0 -0
  406. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-constraint-marker-drift.expected.json +0 -0
  407. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-constraint-marker-drift.log +0 -0
  408. /patchrail-0.1.1/examples/ci-triage/python-pip-index-timeout-backtrack.expected.json → /patchrail-0.3.0/examples/ci-triage/python-pip-constraint-pin-drift.expected.json +0 -0
  409. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-constraint-pin-drift.log +0 -0
  410. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-extra-conflict.expected.json +0 -0
  411. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-extra-conflict.log +0 -0
  412. /patchrail-0.1.1/examples/ci-triage/python-pip-marker-py310.expected.json → /patchrail-0.3.0/examples/ci-triage/python-pip-index-timeout-backtrack.expected.json +0 -0
  413. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-index-timeout-backtrack.log +0 -0
  414. /patchrail-0.1.1/examples/ci-triage/python-pip-platform-arm64-wheel.expected.json → /patchrail-0.3.0/examples/ci-triage/python-pip-marker-py310.expected.json +0 -0
  415. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-marker-py310.log +0 -0
  416. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-missing-musllinux-wheel.expected.json +0 -0
  417. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-missing-musllinux-wheel.log +0 -0
  418. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-no-matching-distribution.expected.json +0 -0
  419. /patchrail-0.1.1/examples/ci-triage/python-pip-tools-backtracking.expected.json → /patchrail-0.3.0/examples/ci-triage/python-pip-platform-arm64-wheel.expected.json +0 -0
  420. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-platform-arm64-wheel.log +0 -0
  421. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-platform-wheel.expected.json +0 -0
  422. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-platform-wheel.log +0 -0
  423. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-prerelease-range.expected.json +0 -0
  424. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-python-version-marker.expected.json +0 -0
  425. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-python-version-marker.log +0 -0
  426. /patchrail-0.1.1/examples/ci-triage/python-pip-tools-conflict.expected.json → /patchrail-0.3.0/examples/ci-triage/python-pip-tools-backtracking.expected.json +0 -0
  427. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-tools-backtracking.log +0 -0
  428. /patchrail-0.1.1/examples/ci-triage/python-pip-tools-extra-marker-conflict.expected.json → /patchrail-0.3.0/examples/ci-triage/python-pip-tools-conflict.expected.json +0 -0
  429. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-tools-conflict.log +0 -0
  430. /patchrail-0.1.1/examples/ci-triage/python-pip-yanked-only-candidate.expected.json → /patchrail-0.3.0/examples/ci-triage/python-pip-tools-extra-marker-conflict.expected.json +0 -0
  431. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-tools-extra-marker-conflict.log +0 -0
  432. /patchrail-0.1.1/examples/ci-triage/python-poetry-solver-conflict.expected.json → /patchrail-0.3.0/examples/ci-triage/python-pip-yanked-only-candidate.expected.json +0 -0
  433. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-yanked-only-candidate.log +0 -0
  434. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-yanked-release.expected.json +0 -0
  435. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-yanked-release.log +0 -0
  436. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-poetry-python-range-drift.expected.json +0 -0
  437. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-poetry-python-range-drift.log +0 -0
  438. /patchrail-0.1.1/examples/ci-triage/python-poetry-transitive-conflict.expected.json → /patchrail-0.3.0/examples/ci-triage/python-poetry-solver-conflict.expected.json +0 -0
  439. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-poetry-solver-conflict.log +0 -0
  440. /patchrail-0.1.1/examples/ci-triage/python-uv-extra-marker-conflict.expected.json → /patchrail-0.3.0/examples/ci-triage/python-poetry-transitive-conflict.expected.json +0 -0
  441. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-poetry-transitive-conflict.log +0 -0
  442. /patchrail-0.1.1/examples/ci-triage/python-test-assert-json.expected.json → /patchrail-0.3.0/examples/ci-triage/python-pytest-env-token-redacted.expected.json +0 -0
  443. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pytest-env-token-redacted.log +0 -0
  444. /patchrail-0.1.1/examples/ci-triage/python-test-failure.expected.json → /patchrail-0.3.0/examples/ci-triage/python-test-assert-json.expected.json +0 -0
  445. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-test-assert-json.log +0 -0
  446. /patchrail-0.1.1/examples/ci-triage/python-test-fixture-timeout.expected.json → /patchrail-0.3.0/examples/ci-triage/python-test-failure.expected.json +0 -0
  447. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-test-failure.log +0 -0
  448. /patchrail-0.1.1/examples/ci-triage/python-test-import-mode.expected.json → /patchrail-0.3.0/examples/ci-triage/python-test-fixture-timeout.expected.json +0 -0
  449. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-test-fixture-timeout.log +0 -0
  450. /patchrail-0.1.1/examples/ci-triage/python-test-module-not-found.expected.json → /patchrail-0.3.0/examples/ci-triage/python-test-import-mode.expected.json +0 -0
  451. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-test-import-mode.log +0 -0
  452. /patchrail-0.1.1/examples/ci-triage/python-test-parametrize-regression.expected.json → /patchrail-0.3.0/examples/ci-triage/python-test-module-not-found.expected.json +0 -0
  453. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-test-module-not-found.log +0 -0
  454. /patchrail-0.1.1/examples/ci-triage/python-test-snapshot-diff.expected.json → /patchrail-0.3.0/examples/ci-triage/python-test-parametrize-regression.expected.json +0 -0
  455. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-test-parametrize-regression.log +0 -0
  456. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-test-snapshot-diff.log +0 -0
  457. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-tox-constraint-conflict.expected.json +0 -0
  458. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-tox-constraint-conflict.log +0 -0
  459. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-uv-constraint-backtrack-fail.expected.json +0 -0
  460. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-uv-constraint-backtrack-fail.log +0 -0
  461. /patchrail-0.1.1/examples/ci-triage/python-uv-resolution-no-solution.expected.json → /patchrail-0.3.0/examples/ci-triage/python-uv-extra-marker-conflict.expected.json +0 -0
  462. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-uv-extra-marker-conflict.log +0 -0
  463. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-uv-extra-python-marker-drift.expected.json +0 -0
  464. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-uv-extra-python-marker-drift.log +0 -0
  465. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-uv-resolution-no-solution.log +0 -0
  466. /patchrail-0.1.1/examples/ci-triage/ruby-bundler-platform-lock.expected.json → /patchrail-0.3.0/examples/ci-triage/ruby-bundler-conflict.expected.json +0 -0
  467. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/ruby-bundler-conflict.log +0 -0
  468. /patchrail-0.1.1/examples/ci-triage/ruby-gem-native-extension.expected.json → /patchrail-0.3.0/examples/ci-triage/ruby-bundler-missing-gem.expected.json +0 -0
  469. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/ruby-bundler-missing-gem.log +0 -0
  470. /patchrail-0.1.1/examples/ci-triage/ruby-rake-aborted.expected.json → /patchrail-0.3.0/examples/ci-triage/ruby-bundler-platform-lock.expected.json +0 -0
  471. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/ruby-bundler-platform-lock.log +0 -0
  472. /patchrail-0.1.1/examples/ci-triage/ruby-rspec-failure.expected.json → /patchrail-0.3.0/examples/ci-triage/ruby-gem-native-extension.expected.json +0 -0
  473. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/ruby-gem-native-extension.log +0 -0
  474. /patchrail-0.1.1/examples/ci-triage/ruby-ruby-version-lock.expected.json → /patchrail-0.3.0/examples/ci-triage/ruby-rake-aborted.expected.json +0 -0
  475. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/ruby-rake-aborted.log +0 -0
  476. /patchrail-0.1.1/examples/ci-triage/ruby-yanked-gem.expected.json → /patchrail-0.3.0/examples/ci-triage/ruby-rspec-failure.expected.json +0 -0
  477. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/ruby-rspec-failure.log +0 -0
  478. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/ruby-ruby-version-lock.log +0 -0
  479. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/ruby-yanked-gem.log +0 -0
  480. /patchrail-0.1.1/examples/ci-triage/rust-e0308-mismatched-types.expected.json → /patchrail-0.3.0/examples/ci-triage/rust-compile-error.expected.json +0 -0
  481. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/rust-compile-error.log +0 -0
  482. /patchrail-0.1.1/examples/ci-triage/rust-e0382-moved-value.expected.json → /patchrail-0.3.0/examples/ci-triage/rust-e0277-trait-bound.expected.json +0 -0
  483. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/rust-e0277-trait-bound.log +0 -0
  484. /patchrail-0.1.1/examples/ci-triage/rust-e0502-borrow-checker.expected.json → /patchrail-0.3.0/examples/ci-triage/rust-e0308-mismatched-types.expected.json +0 -0
  485. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/rust-e0308-mismatched-types.log +0 -0
  486. /patchrail-0.1.1/examples/ci-triage/rust-e0599-method-not-found.expected.json → /patchrail-0.3.0/examples/ci-triage/rust-e0382-moved-value.expected.json +0 -0
  487. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/rust-e0382-moved-value.log +0 -0
  488. /patchrail-0.1.1/examples/ci-triage/rust-panic-thread.expected.json → /patchrail-0.3.0/examples/ci-triage/rust-e0502-borrow-checker.expected.json +0 -0
  489. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/rust-e0502-borrow-checker.log +0 -0
  490. /patchrail-0.1.1/examples/ci-triage/rust-snapshot-failure.expected.json → /patchrail-0.3.0/examples/ci-triage/rust-e0599-method-not-found.expected.json +0 -0
  491. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/rust-e0599-method-not-found.log +0 -0
  492. /patchrail-0.1.1/examples/ci-triage/rust-test-failure.expected.json → /patchrail-0.3.0/examples/ci-triage/rust-panic-thread.expected.json +0 -0
  493. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/rust-panic-thread.log +0 -0
  494. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/rust-snapshot-failure.log +0 -0
  495. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/rust-test-failure.log +0 -0
  496. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/rust-trait-bound-error.expected.json +0 -0
  497. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/rust-trait-bound-error.log +0 -0
  498. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/security-cargo-audit-rustsec.expected.json +0 -0
  499. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/security-cargo-audit-rustsec.log +0 -0
  500. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/security-gosec-findings.expected.json +0 -0
  501. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/security-gosec-findings.log +0 -0
  502. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/security-npm-audit-critical.expected.json +0 -0
  503. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/security-npm-audit-critical.log +0 -0
  504. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/security-pip-audit-vulnerability.expected.json +0 -0
  505. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/security-pip-audit-vulnerability.log +0 -0
  506. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/security-trivy-container-critical.expected.json +0 -0
  507. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/security-trivy-container-critical.log +0 -0
  508. /patchrail-0.1.1/examples/ci-triage/typescript-jsx-prop-mismatch.expected.json → /patchrail-0.3.0/examples/ci-triage/tsc-noemit-typecheck-failure.expected.json +0 -0
  509. /patchrail-0.1.1/examples/ci-triage/typescript-path-alias-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-generated-client-schema-drift.expected.json +0 -0
  510. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-generated-client-schema-drift.log +0 -0
  511. /patchrail-0.1.1/examples/ci-triage/typescript-route-param-mismatch.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-import-type-drift.expected.json +0 -0
  512. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-import-type-drift.log +0 -0
  513. /patchrail-0.1.1/examples/ci-triage/typescript-ts2304-missing-global.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-jsx-prop-mismatch.expected.json +0 -0
  514. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-jsx-prop-mismatch.log +0 -0
  515. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-missing-name.expected.json +0 -0
  516. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-missing-name.log +0 -0
  517. /patchrail-0.1.1/examples/ci-triage/typescript-ts2322-prop.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-path-alias-drift.expected.json +0 -0
  518. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-path-alias-drift.log +0 -0
  519. /patchrail-0.1.1/examples/ci-triage/typescript-ts2345-route-param.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-route-param-mismatch.expected.json +0 -0
  520. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-route-param-mismatch.log +0 -0
  521. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-schema-drift.expected.json +0 -0
  522. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-schema-drift.log +0 -0
  523. /patchrail-0.1.1/examples/ci-triage/typescript-ts2416-class-override.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-ts2304-missing-global.expected.json +0 -0
  524. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-ts2304-missing-global.log +0 -0
  525. /patchrail-0.1.1/examples/ci-triage/typescript-ts2551-import-name.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-ts2322-prop.expected.json +0 -0
  526. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-ts2322-prop.log +0 -0
  527. /patchrail-0.1.1/examples/ci-triage/typescript-ts2741-required-prop.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-ts2345-route-param.expected.json +0 -0
  528. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-ts2345-route-param.log +0 -0
  529. /patchrail-0.1.1/examples/ci-triage/typescript-ts2769-overload.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-ts2416-class-override.expected.json +0 -0
  530. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-ts2416-class-override.log +0 -0
  531. /patchrail-0.1.1/examples/ci-triage/typescript-ts7006-implicit-any.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-ts2551-import-name.expected.json +0 -0
  532. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-ts2551-import-name.log +0 -0
  533. /patchrail-0.1.1/examples/ci-triage/typescript-tsconfig-lib-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-ts2741-required-prop.expected.json +0 -0
  534. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-ts2741-required-prop.log +0 -0
  535. /patchrail-0.1.1/examples/ci-triage/typescript-typecheck.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-ts2769-overload.expected.json +0 -0
  536. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-ts2769-overload.log +0 -0
  537. /patchrail-0.1.1/examples/ci-triage/typescript-vite-env-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-ts7006-implicit-any.expected.json +0 -0
  538. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-ts7006-implicit-any.log +0 -0
  539. /patchrail-0.1.1/examples/ci-triage/typescript-zod-schema-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-tsconfig-lib-drift.expected.json +0 -0
  540. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-tsconfig-lib-drift.log +0 -0
  541. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-typecheck.log +0 -0
  542. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-vite-env-drift.log +0 -0
  543. {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-zod-schema-drift.log +0 -0
  544. {patchrail-0.1.1 → patchrail-0.3.0}/examples/control-plane-demo/README.md +0 -0
  545. {patchrail-0.1.1 → patchrail-0.3.0}/examples/control-plane-demo/demo-output.md +0 -0
  546. {patchrail-0.1.1 → patchrail-0.3.0}/examples/funded-issues-readonly/README.md +0 -0
  547. {patchrail-0.1.1 → patchrail-0.3.0}/examples/funded-issues-readonly/client-profile-python.json +0 -0
  548. {patchrail-0.1.1 → patchrail-0.3.0}/examples/funded-issues-readonly/competition-observations.json +0 -0
  549. {patchrail-0.1.1 → patchrail-0.3.0}/examples/funded-issues-readonly/demo-summary.expected.json +0 -0
  550. {patchrail-0.1.1 → patchrail-0.3.0}/examples/funded-issues-readonly/issues.json +0 -0
  551. {patchrail-0.1.1 → patchrail-0.3.0}/examples/funded-issues-readonly/payout-effort-observations.json +0 -0
  552. {patchrail-0.1.1 → patchrail-0.3.0}/examples/funded-issues-readonly/provider-github-export.json +0 -0
  553. {patchrail-0.1.1 → patchrail-0.3.0}/examples/funded-issues-readonly/run_demo.py +0 -0
  554. {patchrail-0.1.1 → patchrail-0.3.0}/examples/funded-issues-readonly/staleness-observations.json +0 -0
  555. {patchrail-0.1.1 → patchrail-0.3.0}/examples/funded-issues-readonly/testability-observations.json +0 -0
  556. {patchrail-0.1.1 → patchrail-0.3.0}/examples/github-action/README.md +0 -0
  557. {patchrail-0.1.1 → patchrail-0.3.0}/examples/github-action/patchrail-ci-triage-artifact/ci-report.md +0 -0
  558. {patchrail-0.1.1 → patchrail-0.3.0}/examples/github-action/patchrail-ci-triage-artifact/ci-result.json +0 -0
  559. {patchrail-0.1.1 → patchrail-0.3.0}/examples/github-action/patchrail-ci-triage-artifact/doctor.json +0 -0
  560. {patchrail-0.1.1 → patchrail-0.3.0}/examples/github-action/patchrail-ci-triage-artifact/fixture-benchmark-summary.md +0 -0
  561. {patchrail-0.1.1 → patchrail-0.3.0}/examples/github-action/patchrail-ci-triage-artifact/fixture-benchmark.json +0 -0
  562. {patchrail-0.1.1 → patchrail-0.3.0}/examples/local-agent-queue/README.md +0 -0
  563. {patchrail-0.1.1 → patchrail-0.3.0}/examples/local-agent-queue/demo-summary.expected.json +0 -0
  564. {patchrail-0.1.1 → patchrail-0.3.0}/examples/local-agent-queue/run_demo.py +0 -0
  565. {patchrail-0.1.1 → patchrail-0.3.0}/examples/pilot-outcome/README.md +0 -0
  566. {patchrail-0.1.1 → patchrail-0.3.0}/examples/pilot-outcome/patchrail-own-repo-20260603.md +0 -0
  567. {patchrail-0.1.1 → patchrail-0.3.0}/examples/pilot-outcome/patchrail-own-repo-20260603.summary.json +0 -0
  568. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/__main__.py +0 -0
  569. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/funded_issues/__init__.py +0 -0
  570. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/funded_issues/algora_board.py +0 -0
  571. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/funded_issues/blocklist.py +0 -0
  572. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/funded_issues/importers.py +0 -0
  573. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/funded_issues/source_noise.py +0 -0
  574. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/funded_issues/store.py +0 -0
  575. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/queue/__init__.py +0 -0
  576. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/queue/server.py +0 -0
  577. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/queue/status.py +0 -0
  578. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/queue/store.py +0 -0
  579. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/reviewer_quick_check.py +0 -0
  580. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/__init__.py +0 -0
  581. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/ci-benchmark.v1.schema.json +0 -0
  582. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/ci-fixture-check.v1.schema.json +0 -0
  583. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/ci-pilot-metrics.v1.schema.json +0 -0
  584. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/ci-pilot-summary.v1.schema.json +0 -0
  585. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/funded-issues-client-report.v1.schema.json +0 -0
  586. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/funded-issues-recheck-queue.v1.schema.json +0 -0
  587. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/funded-issues-recheck-summary.v1.schema.json +0 -0
  588. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/funded-issues-report.v1.schema.json +0 -0
  589. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/funded-issues-shortlist.v1.schema.json +0 -0
  590. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/funded-issues-store-status.v1.schema.json +0 -0
  591. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/funded-issues-store.v1.schema.json +0 -0
  592. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/queue-audit-event.v1.schema.json +0 -0
  593. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/queue-audit-summary.v1.schema.json +0 -0
  594. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/queue-gate-report.v1.schema.json +0 -0
  595. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/queue-policy-resolution.v1.schema.json +0 -0
  596. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/queue-policy-scan.v1.schema.json +0 -0
  597. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/queue-proposal.v1.schema.json +0 -0
  598. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/queue-review.v1.schema.json +0 -0
  599. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/queue-status.v1.schema.json +0 -0
  600. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/queue-work-item.v1.schema.json +0 -0
  601. {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/reviewer-quick-check-artifacts.v1.schema.json +0 -0
@@ -1,4 +1,7 @@
1
1
  .venv/
2
+ .venv*/
3
+ venv/
4
+ .DS_Store
2
5
  .pkg-smoke/
3
6
  .patchrail-release-smoke/
4
7
  __pycache__/
@@ -0,0 +1,217 @@
1
+ # Changelog
2
+
3
+ ## 0.3.0 - 2026-07-09
4
+
5
+ ### Fixed
6
+
7
+ - Deterministic Go test failures are no longer misread as
8
+ `network_transient_failure` when their logs contain incidental
9
+ network-shaped noise (`dial tcp`, `connection refused`, `context deadline
10
+ exceeded`, `i/o timeout`). The classifier now defers a broad transient-network
11
+ match built *entirely* from these ambiguous signals to the concrete failure
12
+ when one also matched, so a real bug isn't mislabeled "just retry". Genuine
13
+ outages still classify as transient because they trip a terminal signal (DNS
14
+ resolution, rate limit, gateway error, TLS handshake, or a git remote hang-up)
15
+ outside the ambiguous set. `go_test_failure` also now recognises the canonical
16
+ `--- FAIL:` marker. New `go-integration-test-network-noise` fixture guards this,
17
+ bringing the benchmark zoo to 208 cases.
18
+
19
+ ### Added
20
+
21
+ - `patchrail --version` now prints the installed version (e.g. `patchrail 0.3.0`)
22
+ and exits, so a maintainer can confirm which release they are running without
23
+ invoking a subcommand.
24
+ - `java_build_failure` now also recognises **sbt** (Scala on the JVM). sbt prints
25
+ none of the Maven/Gradle banners the rule keyed on, so a genuine
26
+ `(project / Test / compileIncremental) Compilation failed` — or an
27
+ `sbt.TestsFailedException` — previously fell through to `unknown`. New signals
28
+ cover the sbt session banner, incremental-compile failure, Scala
29
+ `not found: value`/`not found: type` errors, and the sbt test-failure
30
+ exception; the reproduction command now suggests `sbt test`. New sanitized
31
+ `github-actions-sbt-scala-compile` fixture (modelled on a real
32
+ `scalatest/scalatest` GitHub Actions run) guards this, bringing the benchmark
33
+ zoo to 209 cases.
34
+ - New sanitized `ruby-rspec-parallel-failure` fixture captures a real
35
+ `rubocop/rubocop` RSpec failure tail (parallel/turbo_tests summary with
36
+ `pending` before `failures`), bringing the benchmark zoo to 207 cases.
37
+ - New `xcode_build_failure` class classifies Apple-platform build and test
38
+ failures from `xcodebuild`, `swift build`/`swift test`, and Swift Package
39
+ Manager — Swift compile errors, missing modules (`error: no such module`),
40
+ unresolved package dependencies, and XCTest failures (`** BUILD FAILED **`,
41
+ `** TEST FAILED **`, `The following build commands failed:`). Backed by three
42
+ sanitized fixtures in `examples/ci-triage/`, bringing the benchmark zoo to 169
43
+ cases and the classifier to 40 failure classes.
44
+ - New `docs_build_failure` class classifies documentation-site build failures
45
+ from Sphinx (`sphinx-build -W` warnings-as-errors, missing toctree entries),
46
+ MkDocs (`mkdocs build --strict` broken links), and Docusaurus (`docusaurus
47
+ build` broken links). Backed by three sanitized fixtures in
48
+ `examples/ci-triage/`, bringing the benchmark zoo to 166 cases.
49
+ - `patchrail ci classes` lists every supported failure class with its likely
50
+ subsystem and reproduction command (plus the `unknown` fallback), in stable
51
+ order. Supports `--format text|json|markdown` and `--out`, so the set of
52
+ classes the classifier can diagnose is discoverable from the CLI instead of
53
+ only in the source. Closes #150.
54
+
55
+ ### Fixed
56
+
57
+ - Real RSpec failures now classify as `ruby_bundle_failure` instead of
58
+ `unknown`. RSpec prints its rerun list as `rspec ./path/to/thing_spec.rb[…]`
59
+ and its summary as `N examples, [K pending, ]M failures` (rspec, parallel and
60
+ turbo_tests) — neither of which the old `rspec .*failures?` pattern matched,
61
+ so a pasted spec-failure tail without bundler setup lines fell through to
62
+ `unknown`. Two shape-matching patterns were added to the rule. Surfaced by
63
+ dogfooding a real `rubocop/rubocop` CI run.
64
+ - Python CI logs no longer misclassify as `python_dependency_resolution` just
65
+ because they run `python -m pip install`. That bare command line was a
66
+ detection pattern, but it appears in almost every Python CI job regardless of
67
+ what actually failed, so any failing Python job with no stronger signal was
68
+ reported as a dependency-resolution conflict with the misleading "pin or relax
69
+ the conflicting dependency range" advice. Dogfooded against a real
70
+ `pandas-dev/pandas` 32-bit CI run whose `pip install` failed at
71
+ `metadata-generation-failed` (a package build error, `Rust not found`) — it was
72
+ reported as `python_dependency_resolution` (0.53). The boilerplate pattern is
73
+ dropped, so a build/metadata failure with no genuine resolution signal now
74
+ stays honest (`unknown`) instead. To keep recall on real conflicts, two
75
+ genuine pip signals were added: pip's actual Requires-Python wording
76
+ (`requires a different Python:`) and its no-distribution `(from versions: …)`
77
+ line; the three synthetic no-matching-distribution fixtures were updated to
78
+ include the real `(from versions: …)` output pip prints. Benchmark stays at
79
+ 206/206 top-1 with all confidence floors met; the bundled dependency-failure
80
+ demo now reports 0.89 (three genuine resolution signals) instead of 0.95.
81
+ Regression covered in `tests/`.
82
+ - `patchrail ci explain`/`classify` no longer hangs on large CI logs. The
83
+ `github_actions_workflow` rule paired two unanchored lookaheads
84
+ (`(?=[\s\S]*.github/workflows/…)(?=[\s\S]*Invalid workflow file…)`); under
85
+ `re.search` that compound is retried at every start position, so a log that
86
+ mentions `.github/workflows/*.yml` (every `actions/checkout` step does) but not
87
+ a workflow-error phrase drove the matcher into O(n²) backtracking and pegged a
88
+ core at 100% for minutes. Dogfooded against a real `cli/cli` Go CI run
89
+ (~200 KB) that never returned. The lookahead is now anchored with `\A` so it is
90
+ evaluated once, in linear time; the "workflow path AND error phrase present"
91
+ signal is unchanged. Regression covered in `tests/`.
92
+ - Rust CI failures no longer misclassify as `node_dependency_install`,
93
+ `dotnet_build_failure`, or `java_build_failure` because of generic boilerplate.
94
+ The `Swatinem/rust-cache` action prints `Lockfiles considered:` (which matched
95
+ the old bare `lockfile` node signal) and cargo prints `build failed, waiting
96
+ for other jobs to finish` (which matched the case-insensitive `Build FAILED` /
97
+ `BUILD FAILED` banners). The node lockfile signal now requires a whole-word
98
+ `lockfile`, and the .NET/Gradle banners are matched case-sensitively so they
99
+ fire only on the tool's actual `Build FAILED` / `BUILD FAILED` output. A real
100
+ `tokio-rs/tokio` rustdoc failure (`error[E0433]`) now classifies as
101
+ `rust_test_failure`. Regression covered in `tests/`.
102
+ - Sharper reproduce commands for three failure classes surfaced by `patchrail ci
103
+ classes` / `ci explain`. `node_script_missing` no longer suggests `npm run
104
+ build` (which just re-triggers the "missing script" error) and instead runs
105
+ `npm run` to list the scripts `package.json` actually defines, so you can
106
+ compare against the one your workflow calls. `security_scan_failure` names the
107
+ concrete scanners to rerun locally (`npm audit`, `pip-audit`, `cargo audit`,
108
+ `trivy fs .`, `bandit -r .`, `semgrep --config auto`) instead of the generic
109
+ "rerun the failing security scan locally". `github_actions_workflow` points at
110
+ `actionlint .github/workflows/`, which validates workflow syntax and action
111
+ refs locally, rather than only printing the YAML back with `gh workflow view`.
112
+ - Real GitHub Actions logs no longer misclassify as `git_checkout_failure` when
113
+ checkout actually succeeded. The rule dropped three boilerplate signals that
114
+ appear in almost every Actions log regardless of outcome — the `actions/checkout`
115
+ setup step, the `git submodule foreach` post-job cleanup line, and a bare
116
+ `git-lfs` mention — keeping only genuine checkout/clone/submodule/LFS *failure*
117
+ markers (`fatal: ...`, `Failed to fetch submodule`, `smudge filter lfs failed`,
118
+ `error downloading object`, …). Dogfooded against a real `pallets/flask` CI run
119
+ whose pytest jobs failed on a conftest `SyntaxError` but were reported as a git
120
+ checkout problem.
121
+ - `python_test_failure` now also recognizes pytest collection failures
122
+ (`ImportError while loading conftest ...`, `N errors during collection`), so a
123
+ broken `conftest.py` or import-time error surfaces as a test failure with the
124
+ `python -m pytest -q` reproduce line instead of falling through to a weaker or
125
+ wrong class.
126
+ - `patchrail ci explain` and `ci classify` now fail clearly on empty or
127
+ whitespace-only input (from `--log` or stdin) instead of silently reporting
128
+ `failure_class: unknown` with confidence `0.15` and exit code `0`. They print
129
+ `log input is empty` to stderr, exit with code `2`, and write nothing to
130
+ `--out`, so a bad shell redirect is no longer mistaken for an unclassifiable
131
+ log. Closes #151.
132
+ - Added `node_script_missing` to the published `ci-result` schema enum; the
133
+ classifier could already emit it, so a valid classification previously failed
134
+ schema validation for downstream consumers. A new test guards that every rule
135
+ class is declared in the schema enum.
136
+
137
+ ## 0.2.0 - 2026-07-07
138
+
139
+ ### Removed
140
+
141
+ - Removed the commercial `Guide:` link that `ci explain` appended to text and
142
+ Markdown reports, and the matching guide URL outputs from the GitHub Action.
143
+ Reports now end after the classification; per-class remediation write-ups
144
+ live in-repo under `docs/fix/`.
145
+ - Removed commercial product links and campaign-tagged URLs from the README,
146
+ docs, and the PyPI project URL list.
147
+ - Removed the distribution and web-metrics tooling (`ci share-links` and the
148
+ web metrics commands and store). PatchRail no longer ships link-tracking or
149
+ distribution helpers.
150
+
151
+ ### Changed
152
+
153
+ - `funded-issues` is now explicitly labeled experimental. Discovery commands
154
+ default to safe-only filtering, and risky entries require an explicit
155
+ `--include-risky` flag.
156
+ - Rewrote the README around the open-source CI triage workflow: quickstart
157
+ with real classifier output, honest feature table, local-first safety
158
+ section, and the fixture contribution path.
159
+
160
+ ### Added
161
+
162
+ - Added `node_script_missing` CI classification so npm/pnpm/yarn jobs that
163
+ call a missing package script are separated from dependency-install failures
164
+ and routed to a workflow/script repair path.
165
+ - Added a permanent source-level blocklist to the funded-issues tracker:
166
+ owners manually verified as fake-bounty sources are dropped at the
167
+ `merge_into_store` choke point (counted as `blocked` in the merge summary)
168
+ and `purge_blocklisted_entries` removes any legacy entries; `track` runs the
169
+ purge on every merge so existing stores self-heal.
170
+ - Added `funded-issues import-algora-board`, an offline parser for a locally
171
+ saved Algora organization bounty-board page. It extracts the funder-stated
172
+ USD amount, GitHub issue reference, posting age, and declared claim count
173
+ per bounty, and can merge the scored records into a tracker store. No
174
+ network access is performed.
175
+ - Added read-only competition and payout-vs-effort scoring signals plus the
176
+ `funded-issues competition` and `funded-issues payout-effort` batch
177
+ commands, all derived from public metadata observations with no claims,
178
+ comments, or maintainer contact.
179
+ - Added an offline owner-level `source_noise` heuristic and
180
+ `funded-issues apply-recheck`, a local-file-only command that transitions
181
+ tracker entries to closed / stale / active from recheck observations.
182
+ - Added .NET/NuGet/C# and xUnit fixture coverage for `dotnet restore`,
183
+ `dotnet build`, and `dotnet test` failure modes, growing the public CI
184
+ fixture zoo to 153 cases.
185
+
186
+ ## 0.1.1 - 2026-06-12
187
+
188
+ - `ci explain` now ends text and Markdown reports with a `Guide:` link to the
189
+ matching getpatchrail.com `/fix` remediation page; unknown or unpublished
190
+ failure classes fall back to the `/fix` index without a network call.
191
+ - Added `funded-issues fresh`, a local read-only radar over the tracker store
192
+ that surfaces recently posted or recently labeled funded issues for fast
193
+ solver-side triage.
194
+ - Added `pre_commit_hook_failure` CI classification so pre-commit hook output is
195
+ recognized directly while the CLI still avoids linking to a missing `/fix`
196
+ page until that guide exists.
197
+
198
+ ## 0.1.0 - 2026-06-02
199
+
200
+ - Initial public CI Janitor snapshot.
201
+ - Added `patchrail ci explain` and `patchrail ci classify`.
202
+ - Added local Markdown, JSON, and text reports.
203
+ - Added Apache-2.0 license and safety/ethics documentation.
204
+ - Added fixture-backed tests, local benchmark command, and GitHub Actions CI.
205
+ - Expanded the initial CI fixture zoo to 101 sanitized synthetic examples across
206
+ Python, Node, TypeScript, Go, Rust, and GitHub Actions failure modes.
207
+ - Added a read-only GitHub Actions triage artifact workflow.
208
+ - Added the experimental local Agent Control Plane queue with SQLite-backed
209
+ work items, approval states, audit export, CI result import, and proposal
210
+ records.
211
+ - Added the experimental read-only `funded-issues` CLI over local metadata,
212
+ with safe-only filtering and explicit anti-abuse blocked actions.
213
+ - Added permission-only adopter reporting and a public metrics tracker for
214
+ pilot outcomes, adoption signals, and open-source program evidence gaps.
215
+ - Added release-prep evidence docs, package smoke checks, and manual publish
216
+ gates. Release tags, PyPI publishing, GitHub Releases, and public
217
+ announcements remain maintainer actions.
@@ -22,7 +22,8 @@ patchrail redact --log failed-ci.log > failed-ci.redacted.log
22
22
 
23
23
  3. Review `failed-ci.redacted.log` manually and remove anything PatchRail should
24
24
  not publish: secrets, emails, private repo names, user names, customer names,
25
- local home paths, and private URLs.
25
+ local home paths, and private URLs. See `docs/redaction.md` for exactly
26
+ which categories `patchrail redact` covers and which it doesn't.
26
27
  4. Reduce the log to the shortest excerpt that still shows the root cause.
27
28
  5. Add the fixture and expected metadata under `examples/ci-triage/`.
28
29
  6. Run the fixture hygiene gate and benchmark:
@@ -38,6 +39,10 @@ patchrail ci benchmark examples/ci-triage --format json
38
39
  If a real log cannot be safely redacted, create a minimal synthetic fixture that
39
40
  preserves the error pattern without preserving private identifiers.
40
41
 
42
+ To catch a forgotten secret or a malformed fixture before it reaches a pull
43
+ request, see `docs/pre-commit-example.md` for an optional pre-commit hook
44
+ that runs `patchrail ci fixture-check` and `patchrail redact` automatically.
45
+
41
46
  ## Adding a CI fixture
42
47
 
43
48
  1. Copy the smallest failing log excerpt that still shows the root cause.
@@ -0,0 +1,221 @@
1
+ Metadata-Version: 2.4
2
+ Name: patchrail
3
+ Version: 0.3.0
4
+ Summary: Local-first maintainer automation for open-source CI triage
5
+ Project-URL: Homepage, https://github.com/patchrail/patchrail
6
+ Project-URL: Documentation, https://github.com/patchrail/patchrail/tree/main/docs
7
+ Project-URL: Changelog, https://github.com/patchrail/patchrail/blob/main/CHANGELOG.md
8
+ Project-URL: Issues, https://github.com/patchrail/patchrail/issues
9
+ Project-URL: GitHub Action, https://github.com/patchrail/ci-triage-action
10
+ Author: Pablo Guillén
11
+ License-Expression: Apache-2.0
12
+ License-File: LICENSE
13
+ Keywords: ci,github-actions,maintenance,open-source,triage
14
+ Classifier: Development Status :: 3 - Alpha
15
+ Classifier: Environment :: Console
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: License :: OSI Approved :: Apache Software License
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Topic :: Software Development :: Build Tools
23
+ Classifier: Topic :: Software Development :: Quality Assurance
24
+ Requires-Python: >=3.11
25
+ Provides-Extra: dev
26
+ Requires-Dist: build>=1.2; extra == 'dev'
27
+ Requires-Dist: pytest>=8; extra == 'dev'
28
+ Requires-Dist: ruff>=0.5; extra == 'dev'
29
+ Requires-Dist: twine>=5.1; extra == 'dev'
30
+ Description-Content-Type: text/markdown
31
+
32
+ # PatchRail
33
+
34
+ Local-first CI failure triage for open-source maintainers. Paste a failing CI
35
+ log, get the failure class, the reproduction command, and a suggested fix
36
+ strategy — in seconds, fully offline.
37
+
38
+ [![PyPI](https://img.shields.io/pypi/v/patchrail)](https://pypi.org/project/patchrail/)
39
+ [![CI](https://github.com/patchrail/patchrail/actions/workflows/ci.yml/badge.svg)](https://github.com/patchrail/patchrail/actions/workflows/ci.yml)
40
+ [![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
41
+ [![Python](https://img.shields.io/pypi/pyversions/patchrail)](https://pypi.org/project/patchrail/)
42
+
43
+ ![patchrail ci explain reading a failed CI log and emitting root cause, confidence, and a reproduce command](docs/assets/ci-explain-demo.gif)
44
+
45
+ The recording above is real output from the bundled
46
+ `examples/ci-triage/typescript-import-type-drift.log` fixture. No model calls,
47
+ no network, no telemetry: the classifier is a curated rule engine that runs
48
+ entirely on your machine.
49
+
50
+ ## Why maintainers use it
51
+
52
+ - **40 failure classes** backed by real log signatures — dependency
53
+ resolution, flaky network, OOM-killed runners, Docker builds, lint,
54
+ type checks, docs-site builds, and test failures across Python, Node,
55
+ TypeScript, Go, Rust, Java, .NET, Ruby, PHP, C++, and Swift/Xcode. Run
56
+ `patchrail ci classes` to list them all (add `--format json` to check
57
+ coverage from a script).
58
+ - **169 sanitized CI log fixtures** keep the classifier honest: every rule is
59
+ benchmarked against the public fixture zoo in `examples/ci-triage/` on every
60
+ test run.
61
+ - **23 secret-redaction patterns** (GitHub/GitLab/npm/PyPI/AWS tokens, private
62
+ keys, JWTs, emails, home paths) so logs can be shared safely.
63
+ - **Local-first by design**: no network access, no billing, no external model,
64
+ no telemetry. Nothing leaves the machine.
65
+ - **Markdown for humans, JSON for automation** — pipe the same result into a
66
+ PR comment or a workflow step.
67
+
68
+ ## Quickstart
69
+
70
+ PatchRail is published on PyPI:
71
+
72
+ ```bash
73
+ pipx install patchrail
74
+ ```
75
+
76
+ Classify any failed CI log:
77
+
78
+ ```bash
79
+ patchrail ci explain --log failed-ci.log
80
+ ```
81
+
82
+ Or try it on a bundled fixture from a clone of this repo:
83
+
84
+ ```bash
85
+ git clone https://github.com/patchrail/patchrail
86
+ cd patchrail
87
+ patchrail ci explain --log examples/ci-triage/dependency-failure.log --format markdown
88
+ ```
89
+
90
+ Real output:
91
+
92
+ ```markdown
93
+ # PatchRail CI Report
94
+
95
+ - Root cause: `python_dependency_resolution`
96
+ - Confidence: `0.89`
97
+ - Subsystem: Python dependency installation
98
+ - Reproduce: `python -m pip install -r requirements.txt`
99
+ - Suggested action: Pin or relax the conflicting dependency range, then rerun the same install command and the affected tests.
100
+
101
+ ## Evidence signals
102
+
103
+ - `Could not find a version that satisfies the requirement`
104
+ - `Cannot install .*because these package versions have conflicting dependencies`
105
+ - `ResolutionImpossible`
106
+ ```
107
+
108
+ It also reads from stdin, so you can pipe a log straight in:
109
+
110
+ ```bash
111
+ tail -n 200 failed-ci.log | patchrail ci explain
112
+ ```
113
+
114
+ Every failure class has a step-by-step remediation write-up in
115
+ [docs/fix/](docs/fix/README.md).
116
+
117
+ ## GitHub Action
118
+
119
+ Run the same triage on every red CI run with
120
+ [`patchrail/ci-triage-action`](https://github.com/patchrail/ci-triage-action)
121
+ (also on the
122
+ [GitHub Marketplace](https://github.com/marketplace/actions/patchrail-ci-triage)).
123
+ It classifies the log locally on the runner — no PR, no comment, nothing
124
+ leaves the job:
125
+
126
+ ```yaml
127
+ - name: PatchRail CI triage
128
+ if: failure()
129
+ uses: patchrail/ci-triage-action@v1
130
+ with:
131
+ log-path: test.log
132
+ ```
133
+
134
+ The `@v1` drop-in exposes `failure-class`, `confidence`, and `guide-url`, plus a
135
+ run annotation and job summary. See
136
+ [docs/using-the-action.md](docs/using-the-action.md) for its full inputs and
137
+ outputs, or [examples/ci-triage-action](examples/ci-triage-action/README.md) for
138
+ the artifact shapes of both `@v1` and the richer in-repo composite.
139
+
140
+ ## Features
141
+
142
+ | Feature | Status | Notes |
143
+ | --- | --- | --- |
144
+ | CI failure triage (`ci explain`, `ci classify`, `ci classes`) | Beta | 40 failure classes for GitHub Actions-style logs and common toolchains |
145
+ | Secret redaction (`redact`, `ci explain --redact`) | Beta | 23 patterns for tokens, keys, emails, and home paths |
146
+ | Reports | Beta | Markdown, JSON, and plain text |
147
+ | Fixture benchmark (`ci benchmark`) | Beta | Scores the classifier against all 153 public fixtures |
148
+ | GitHub Action | Beta | Read-only triage artifact on failed workflows |
149
+ | Local queue / control plane (`queue`) | Experimental | SQLite-backed work items with human approval states |
150
+ | Funded issue discovery (`funded-issues`) | Experimental (read-only) | Safe-only defaults, no claiming or commenting; see [docs/funded-issues-ethics.md](docs/funded-issues-ethics.md) |
151
+
152
+ ## Local-first & safety
153
+
154
+ PatchRail never phones home. The classifier needs no API key, no GitHub App,
155
+ no repo write permission, and no external model call. Write actions (PRs,
156
+ comments, claims) are out of scope; anything that could become one sits behind
157
+ an explicit human approval state.
158
+
159
+ Secret redaction is a first-class feature, not an afterthought. Redact a log
160
+ before sharing it anywhere:
161
+
162
+ ```bash
163
+ patchrail redact --log failed.log > failed.redacted.log
164
+ patchrail ci explain --redact --log failed.log
165
+ ```
166
+
167
+ The redaction pass covers GitHub, GitLab, npm, PyPI, AWS, Stripe, Slack,
168
+ Google, Hugging Face, and SendGrid credentials, private key blocks, JWTs,
169
+ bearer tokens, URL-embedded credentials, `*_TOKEN`/`*_SECRET` environment
170
+ assignments, email addresses, and user home paths.
171
+
172
+ See [ETHICS.md](ETHICS.md), [SECURITY.md](SECURITY.md), and
173
+ [docs/threat-model.md](docs/threat-model.md).
174
+
175
+ ## Roadmap
176
+
177
+ - **v0.3** — public demo of the local agent control plane: SQLite-backed work
178
+ queue, approval gates, and audit export.
179
+ - **v0.4** — ethical funded-maintenance workflow: read-only discovery with
180
+ human-gated follow-up, no automated claiming.
181
+
182
+ Details in [docs/roadmap.md](docs/roadmap.md).
183
+
184
+ ## Documentation
185
+
186
+ - [Quickstart](docs/quickstart.md)
187
+ - [jq cookbook for the JSON classifier output](docs/json-cookbook.md)
188
+ - [Fix guides per failure class](docs/fix/README.md)
189
+ - [CI Failure Zoo](docs/ci-failure-zoo.md)
190
+ - [GitHub Actions CI triage](docs/github-action.md)
191
+ - [Using the action in your own repository](docs/using-the-action.md)
192
+ - [Agent Control Plane](docs/agent-control-plane.md)
193
+ - [API reference](docs/api-reference.md)
194
+ - [Threat model](docs/threat-model.md)
195
+ - [Funded issue ethics](docs/funded-issues-ethics.md)
196
+
197
+ ## Contributing
198
+
199
+ The fastest way in is **adding a CI fixture — it takes about 10 minutes**:
200
+ grab a failed log, redact it, trim it to the smallest excerpt that still shows
201
+ the root cause, and add it with its expected classification under
202
+ `examples/ci-triage/`. The full path is in
203
+ [CONTRIBUTING.md](CONTRIBUTING.md), and the
204
+ [CI failure fixture issue template](.github/ISSUE_TEMPLATE/ci_failure_fixture.md)
205
+ works if you are not ready to open a pull request.
206
+
207
+ Issues labeled
208
+ [`good first issue`](https://github.com/patchrail/patchrail/labels/good%20first%20issue)
209
+ are scoped for first-time contributors.
210
+
211
+ Run the checks locally before opening a PR:
212
+
213
+ ```bash
214
+ uv run --extra dev pytest -q
215
+ uv run --extra dev ruff check .
216
+ uv run --extra dev patchrail ci benchmark examples/ci-triage --format json
217
+ ```
218
+
219
+ ## License
220
+
221
+ Apache-2.0.
@@ -0,0 +1,190 @@
1
+ # PatchRail
2
+
3
+ Local-first CI failure triage for open-source maintainers. Paste a failing CI
4
+ log, get the failure class, the reproduction command, and a suggested fix
5
+ strategy — in seconds, fully offline.
6
+
7
+ [![PyPI](https://img.shields.io/pypi/v/patchrail)](https://pypi.org/project/patchrail/)
8
+ [![CI](https://github.com/patchrail/patchrail/actions/workflows/ci.yml/badge.svg)](https://github.com/patchrail/patchrail/actions/workflows/ci.yml)
9
+ [![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
10
+ [![Python](https://img.shields.io/pypi/pyversions/patchrail)](https://pypi.org/project/patchrail/)
11
+
12
+ ![patchrail ci explain reading a failed CI log and emitting root cause, confidence, and a reproduce command](docs/assets/ci-explain-demo.gif)
13
+
14
+ The recording above is real output from the bundled
15
+ `examples/ci-triage/typescript-import-type-drift.log` fixture. No model calls,
16
+ no network, no telemetry: the classifier is a curated rule engine that runs
17
+ entirely on your machine.
18
+
19
+ ## Why maintainers use it
20
+
21
+ - **40 failure classes** backed by real log signatures — dependency
22
+ resolution, flaky network, OOM-killed runners, Docker builds, lint,
23
+ type checks, docs-site builds, and test failures across Python, Node,
24
+ TypeScript, Go, Rust, Java, .NET, Ruby, PHP, C++, and Swift/Xcode. Run
25
+ `patchrail ci classes` to list them all (add `--format json` to check
26
+ coverage from a script).
27
+ - **169 sanitized CI log fixtures** keep the classifier honest: every rule is
28
+ benchmarked against the public fixture zoo in `examples/ci-triage/` on every
29
+ test run.
30
+ - **23 secret-redaction patterns** (GitHub/GitLab/npm/PyPI/AWS tokens, private
31
+ keys, JWTs, emails, home paths) so logs can be shared safely.
32
+ - **Local-first by design**: no network access, no billing, no external model,
33
+ no telemetry. Nothing leaves the machine.
34
+ - **Markdown for humans, JSON for automation** — pipe the same result into a
35
+ PR comment or a workflow step.
36
+
37
+ ## Quickstart
38
+
39
+ PatchRail is published on PyPI:
40
+
41
+ ```bash
42
+ pipx install patchrail
43
+ ```
44
+
45
+ Classify any failed CI log:
46
+
47
+ ```bash
48
+ patchrail ci explain --log failed-ci.log
49
+ ```
50
+
51
+ Or try it on a bundled fixture from a clone of this repo:
52
+
53
+ ```bash
54
+ git clone https://github.com/patchrail/patchrail
55
+ cd patchrail
56
+ patchrail ci explain --log examples/ci-triage/dependency-failure.log --format markdown
57
+ ```
58
+
59
+ Real output:
60
+
61
+ ```markdown
62
+ # PatchRail CI Report
63
+
64
+ - Root cause: `python_dependency_resolution`
65
+ - Confidence: `0.89`
66
+ - Subsystem: Python dependency installation
67
+ - Reproduce: `python -m pip install -r requirements.txt`
68
+ - Suggested action: Pin or relax the conflicting dependency range, then rerun the same install command and the affected tests.
69
+
70
+ ## Evidence signals
71
+
72
+ - `Could not find a version that satisfies the requirement`
73
+ - `Cannot install .*because these package versions have conflicting dependencies`
74
+ - `ResolutionImpossible`
75
+ ```
76
+
77
+ It also reads from stdin, so you can pipe a log straight in:
78
+
79
+ ```bash
80
+ tail -n 200 failed-ci.log | patchrail ci explain
81
+ ```
82
+
83
+ Every failure class has a step-by-step remediation write-up in
84
+ [docs/fix/](docs/fix/README.md).
85
+
86
+ ## GitHub Action
87
+
88
+ Run the same triage on every red CI run with
89
+ [`patchrail/ci-triage-action`](https://github.com/patchrail/ci-triage-action)
90
+ (also on the
91
+ [GitHub Marketplace](https://github.com/marketplace/actions/patchrail-ci-triage)).
92
+ It classifies the log locally on the runner — no PR, no comment, nothing
93
+ leaves the job:
94
+
95
+ ```yaml
96
+ - name: PatchRail CI triage
97
+ if: failure()
98
+ uses: patchrail/ci-triage-action@v1
99
+ with:
100
+ log-path: test.log
101
+ ```
102
+
103
+ The `@v1` drop-in exposes `failure-class`, `confidence`, and `guide-url`, plus a
104
+ run annotation and job summary. See
105
+ [docs/using-the-action.md](docs/using-the-action.md) for its full inputs and
106
+ outputs, or [examples/ci-triage-action](examples/ci-triage-action/README.md) for
107
+ the artifact shapes of both `@v1` and the richer in-repo composite.
108
+
109
+ ## Features
110
+
111
+ | Feature | Status | Notes |
112
+ | --- | --- | --- |
113
+ | CI failure triage (`ci explain`, `ci classify`, `ci classes`) | Beta | 40 failure classes for GitHub Actions-style logs and common toolchains |
114
+ | Secret redaction (`redact`, `ci explain --redact`) | Beta | 23 patterns for tokens, keys, emails, and home paths |
115
+ | Reports | Beta | Markdown, JSON, and plain text |
116
+ | Fixture benchmark (`ci benchmark`) | Beta | Scores the classifier against all 153 public fixtures |
117
+ | GitHub Action | Beta | Read-only triage artifact on failed workflows |
118
+ | Local queue / control plane (`queue`) | Experimental | SQLite-backed work items with human approval states |
119
+ | Funded issue discovery (`funded-issues`) | Experimental (read-only) | Safe-only defaults, no claiming or commenting; see [docs/funded-issues-ethics.md](docs/funded-issues-ethics.md) |
120
+
121
+ ## Local-first & safety
122
+
123
+ PatchRail never phones home. The classifier needs no API key, no GitHub App,
124
+ no repo write permission, and no external model call. Write actions (PRs,
125
+ comments, claims) are out of scope; anything that could become one sits behind
126
+ an explicit human approval state.
127
+
128
+ Secret redaction is a first-class feature, not an afterthought. Redact a log
129
+ before sharing it anywhere:
130
+
131
+ ```bash
132
+ patchrail redact --log failed.log > failed.redacted.log
133
+ patchrail ci explain --redact --log failed.log
134
+ ```
135
+
136
+ The redaction pass covers GitHub, GitLab, npm, PyPI, AWS, Stripe, Slack,
137
+ Google, Hugging Face, and SendGrid credentials, private key blocks, JWTs,
138
+ bearer tokens, URL-embedded credentials, `*_TOKEN`/`*_SECRET` environment
139
+ assignments, email addresses, and user home paths.
140
+
141
+ See [ETHICS.md](ETHICS.md), [SECURITY.md](SECURITY.md), and
142
+ [docs/threat-model.md](docs/threat-model.md).
143
+
144
+ ## Roadmap
145
+
146
+ - **v0.3** — public demo of the local agent control plane: SQLite-backed work
147
+ queue, approval gates, and audit export.
148
+ - **v0.4** — ethical funded-maintenance workflow: read-only discovery with
149
+ human-gated follow-up, no automated claiming.
150
+
151
+ Details in [docs/roadmap.md](docs/roadmap.md).
152
+
153
+ ## Documentation
154
+
155
+ - [Quickstart](docs/quickstart.md)
156
+ - [jq cookbook for the JSON classifier output](docs/json-cookbook.md)
157
+ - [Fix guides per failure class](docs/fix/README.md)
158
+ - [CI Failure Zoo](docs/ci-failure-zoo.md)
159
+ - [GitHub Actions CI triage](docs/github-action.md)
160
+ - [Using the action in your own repository](docs/using-the-action.md)
161
+ - [Agent Control Plane](docs/agent-control-plane.md)
162
+ - [API reference](docs/api-reference.md)
163
+ - [Threat model](docs/threat-model.md)
164
+ - [Funded issue ethics](docs/funded-issues-ethics.md)
165
+
166
+ ## Contributing
167
+
168
+ The fastest way in is **adding a CI fixture — it takes about 10 minutes**:
169
+ grab a failed log, redact it, trim it to the smallest excerpt that still shows
170
+ the root cause, and add it with its expected classification under
171
+ `examples/ci-triage/`. The full path is in
172
+ [CONTRIBUTING.md](CONTRIBUTING.md), and the
173
+ [CI failure fixture issue template](.github/ISSUE_TEMPLATE/ci_failure_fixture.md)
174
+ works if you are not ready to open a pull request.
175
+
176
+ Issues labeled
177
+ [`good first issue`](https://github.com/patchrail/patchrail/labels/good%20first%20issue)
178
+ are scoped for first-time contributors.
179
+
180
+ Run the checks locally before opening a PR:
181
+
182
+ ```bash
183
+ uv run --extra dev pytest -q
184
+ uv run --extra dev ruff check .
185
+ uv run --extra dev patchrail ci benchmark examples/ci-triage --format json
186
+ ```
187
+
188
+ ## License
189
+
190
+ Apache-2.0.