patchrail 0.1.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 (444) hide show
  1. patchrail-0.1.0/.agents/skills/patchrail-ci-triage/SKILL.md +33 -0
  2. patchrail-0.1.0/.agents/skills/patchrail-release-captain/SKILL.md +36 -0
  3. patchrail-0.1.0/.agents/skills/patchrail-review-guardrails/SKILL.md +39 -0
  4. patchrail-0.1.0/.gitignore +12 -0
  5. patchrail-0.1.0/ADOPTERS.md +37 -0
  6. patchrail-0.1.0/AGENTS.md +44 -0
  7. patchrail-0.1.0/CHANGELOG.md +95 -0
  8. patchrail-0.1.0/CODE_OF_CONDUCT.md +31 -0
  9. patchrail-0.1.0/CONTRIBUTING.md +83 -0
  10. patchrail-0.1.0/ETHICS.md +35 -0
  11. patchrail-0.1.0/GOVERNANCE.md +21 -0
  12. patchrail-0.1.0/LICENSE +202 -0
  13. patchrail-0.1.0/PKG-INFO +279 -0
  14. patchrail-0.1.0/README.md +249 -0
  15. patchrail-0.1.0/SECURITY.md +48 -0
  16. patchrail-0.1.0/docs/agent-control-plane.md +332 -0
  17. patchrail-0.1.0/docs/agent-workflows.md +24 -0
  18. patchrail-0.1.0/docs/api-reference.md +591 -0
  19. patchrail-0.1.0/docs/ci-failure-zoo.md +157 -0
  20. patchrail-0.1.0/docs/ci-janitor.md +75 -0
  21. patchrail-0.1.0/docs/codex-workflows.md +93 -0
  22. patchrail-0.1.0/docs/funded-issues-ethics.md +79 -0
  23. patchrail-0.1.0/docs/github-action.md +106 -0
  24. patchrail-0.1.0/docs/metrics.md +157 -0
  25. patchrail-0.1.0/docs/open-source-program-evidence.md +342 -0
  26. patchrail-0.1.0/docs/openai-open-source-evidence.md +381 -0
  27. patchrail-0.1.0/docs/pilot-guide.md +207 -0
  28. patchrail-0.1.0/docs/pilot-request-package.md +137 -0
  29. patchrail-0.1.0/docs/public-workflow-ledger.md +135 -0
  30. patchrail-0.1.0/docs/quickstart.md +114 -0
  31. patchrail-0.1.0/docs/release-process.md +251 -0
  32. patchrail-0.1.0/docs/release-v0.1.0-evidence.md +169 -0
  33. patchrail-0.1.0/docs/release-v0.2.0-evidence.md +93 -0
  34. patchrail-0.1.0/docs/release-v0.3.0-evidence.md +175 -0
  35. patchrail-0.1.0/docs/release-v0.4.0-evidence.md +90 -0
  36. patchrail-0.1.0/docs/roadmap.md +92 -0
  37. patchrail-0.1.0/docs/threat-model.md +68 -0
  38. patchrail-0.1.0/examples/ci-triage/browser-playwright-navigation-timeout.expected.json +4 -0
  39. patchrail-0.1.0/examples/ci-triage/browser-playwright-navigation-timeout.log +8 -0
  40. patchrail-0.1.0/examples/ci-triage/browser-playwright-webserver-timeout.expected.json +4 -0
  41. patchrail-0.1.0/examples/ci-triage/browser-playwright-webserver-timeout.log +4 -0
  42. patchrail-0.1.0/examples/ci-triage/cypress-browser-launch.expected.json +4 -0
  43. patchrail-0.1.0/examples/ci-triage/cypress-browser-launch.log +4 -0
  44. patchrail-0.1.0/examples/ci-triage/demo-output.md +28 -0
  45. patchrail-0.1.0/examples/ci-triage/dependency-failure.expected.json +4 -0
  46. patchrail-0.1.0/examples/ci-triage/dependency-failure.log +4 -0
  47. patchrail-0.1.0/examples/ci-triage/docker-base-image-manifest-not-found.expected.json +4 -0
  48. patchrail-0.1.0/examples/ci-triage/docker-base-image-manifest-not-found.log +5 -0
  49. patchrail-0.1.0/examples/ci-triage/docker-buildkit-missing-context.expected.json +4 -0
  50. patchrail-0.1.0/examples/ci-triage/docker-buildkit-missing-context.log +5 -0
  51. patchrail-0.1.0/examples/ci-triage/docker-buildkit-missing-stage.expected.json +4 -0
  52. patchrail-0.1.0/examples/ci-triage/docker-buildkit-missing-stage.log +6 -0
  53. patchrail-0.1.0/examples/ci-triage/docker-compose-healthcheck.expected.json +4 -0
  54. patchrail-0.1.0/examples/ci-triage/docker-compose-healthcheck.log +5 -0
  55. patchrail-0.1.0/examples/ci-triage/docker-compose-missing-env-file.expected.json +4 -0
  56. patchrail-0.1.0/examples/ci-triage/docker-compose-missing-env-file.log +3 -0
  57. patchrail-0.1.0/examples/ci-triage/dotnet-csharp-compile-error.expected.json +4 -0
  58. patchrail-0.1.0/examples/ci-triage/dotnet-csharp-compile-error.log +8 -0
  59. patchrail-0.1.0/examples/ci-triage/dotnet-nuget-package-downgrade.expected.json +4 -0
  60. patchrail-0.1.0/examples/ci-triage/dotnet-nuget-package-downgrade.log +4 -0
  61. patchrail-0.1.0/examples/ci-triage/dotnet-nuget-version-conflict.expected.json +4 -0
  62. patchrail-0.1.0/examples/ci-triage/dotnet-nuget-version-conflict.log +7 -0
  63. patchrail-0.1.0/examples/ci-triage/dotnet-sdk-target-framework-mismatch.expected.json +4 -0
  64. patchrail-0.1.0/examples/ci-triage/dotnet-sdk-target-framework-mismatch.log +5 -0
  65. patchrail-0.1.0/examples/ci-triage/dotnet-xunit-assertion.expected.json +4 -0
  66. patchrail-0.1.0/examples/ci-triage/dotnet-xunit-assertion.log +9 -0
  67. patchrail-0.1.0/examples/ci-triage/github-actions-bad-shell.expected.json +4 -0
  68. patchrail-0.1.0/examples/ci-triage/github-actions-bad-shell.log +2 -0
  69. patchrail-0.1.0/examples/ci-triage/github-actions-invalid-workflow.expected.json +4 -0
  70. patchrail-0.1.0/examples/ci-triage/github-actions-invalid-workflow.log +3 -0
  71. patchrail-0.1.0/examples/ci-triage/github-actions-matrix-expression.expected.json +4 -0
  72. patchrail-0.1.0/examples/ci-triage/github-actions-matrix-expression.log +2 -0
  73. patchrail-0.1.0/examples/ci-triage/github-actions-missing-workflow-ref.expected.json +4 -0
  74. patchrail-0.1.0/examples/ci-triage/github-actions-missing-workflow-ref.log +2 -0
  75. patchrail-0.1.0/examples/ci-triage/github-actions-permission-id-token.expected.json +4 -0
  76. patchrail-0.1.0/examples/ci-triage/github-actions-permission-id-token.log +2 -0
  77. patchrail-0.1.0/examples/ci-triage/github-actions-permission.expected.json +4 -0
  78. patchrail-0.1.0/examples/ci-triage/github-actions-permission.log +3 -0
  79. patchrail-0.1.0/examples/ci-triage/github-actions-token-permission.expected.json +4 -0
  80. patchrail-0.1.0/examples/ci-triage/github-actions-token-permission.log +2 -0
  81. patchrail-0.1.0/examples/ci-triage/github-actions-unresolved-action.expected.json +4 -0
  82. patchrail-0.1.0/examples/ci-triage/github-actions-unresolved-action.log +3 -0
  83. patchrail-0.1.0/examples/ci-triage/github-actions-unresolved-checkout.expected.json +4 -0
  84. patchrail-0.1.0/examples/ci-triage/github-actions-unresolved-checkout.log +2 -0
  85. patchrail-0.1.0/examples/ci-triage/github-actions-yaml-syntax.expected.json +4 -0
  86. patchrail-0.1.0/examples/ci-triage/github-actions-yaml-syntax.log +2 -0
  87. patchrail-0.1.0/examples/ci-triage/go-assertion-fail.expected.json +4 -0
  88. patchrail-0.1.0/examples/ci-triage/go-assertion-fail.log +4 -0
  89. patchrail-0.1.0/examples/ci-triage/go-compile-failure.expected.json +4 -0
  90. patchrail-0.1.0/examples/ci-triage/go-compile-failure.log +4 -0
  91. patchrail-0.1.0/examples/ci-triage/go-compile-interface.expected.json +4 -0
  92. patchrail-0.1.0/examples/ci-triage/go-compile-interface.log +4 -0
  93. patchrail-0.1.0/examples/ci-triage/go-data-race-test.expected.json +4 -0
  94. patchrail-0.1.0/examples/ci-triage/go-data-race-test.log +4 -0
  95. patchrail-0.1.0/examples/ci-triage/go-module-missing-symbol.expected.json +4 -0
  96. patchrail-0.1.0/examples/ci-triage/go-module-missing-symbol.log +4 -0
  97. patchrail-0.1.0/examples/ci-triage/go-panic-in-test.expected.json +4 -0
  98. patchrail-0.1.0/examples/ci-triage/go-panic-in-test.log +4 -0
  99. patchrail-0.1.0/examples/ci-triage/go-timeout-race.expected.json +4 -0
  100. patchrail-0.1.0/examples/ci-triage/go-timeout-race.log +5 -0
  101. patchrail-0.1.0/examples/ci-triage/go-timeout.expected.json +4 -0
  102. patchrail-0.1.0/examples/ci-triage/go-timeout.log +3 -0
  103. patchrail-0.1.0/examples/ci-triage/go-undefined-function.expected.json +4 -0
  104. patchrail-0.1.0/examples/ci-triage/go-undefined-function.log +4 -0
  105. patchrail-0.1.0/examples/ci-triage/go-undefined-symbol.expected.json +4 -0
  106. patchrail-0.1.0/examples/ci-triage/go-undefined-symbol.log +5 -0
  107. patchrail-0.1.0/examples/ci-triage/java-gradle-dependency-resolution.expected.json +4 -0
  108. patchrail-0.1.0/examples/ci-triage/java-gradle-dependency-resolution.log +10 -0
  109. patchrail-0.1.0/examples/ci-triage/java-gradle-no-tests-found.expected.json +4 -0
  110. patchrail-0.1.0/examples/ci-triage/java-gradle-no-tests-found.log +6 -0
  111. patchrail-0.1.0/examples/ci-triage/java-gradle-toolchain-version.expected.json +4 -0
  112. patchrail-0.1.0/examples/ci-triage/java-gradle-toolchain-version.log +9 -0
  113. patchrail-0.1.0/examples/ci-triage/java-gradle-unsupported-major-version.expected.json +4 -0
  114. patchrail-0.1.0/examples/ci-triage/java-gradle-unsupported-major-version.log +4 -0
  115. patchrail-0.1.0/examples/ci-triage/java-maven-compilation.expected.json +4 -0
  116. patchrail-0.1.0/examples/ci-triage/java-maven-compilation.log +7 -0
  117. patchrail-0.1.0/examples/ci-triage/javascript-biome-format.expected.json +4 -0
  118. patchrail-0.1.0/examples/ci-triage/javascript-biome-format.log +3 -0
  119. patchrail-0.1.0/examples/ci-triage/javascript-eslint-a11y.expected.json +4 -0
  120. patchrail-0.1.0/examples/ci-triage/javascript-eslint-a11y.log +5 -0
  121. patchrail-0.1.0/examples/ci-triage/javascript-eslint-config-parser-drift.expected.json +4 -0
  122. patchrail-0.1.0/examples/ci-triage/javascript-eslint-config-parser-drift.log +6 -0
  123. patchrail-0.1.0/examples/ci-triage/javascript-eslint-import-order.expected.json +4 -0
  124. patchrail-0.1.0/examples/ci-triage/javascript-eslint-import-order.log +5 -0
  125. patchrail-0.1.0/examples/ci-triage/javascript-eslint-no-undef.expected.json +4 -0
  126. patchrail-0.1.0/examples/ci-triage/javascript-eslint-no-undef.log +5 -0
  127. patchrail-0.1.0/examples/ci-triage/javascript-eslint-react-hooks.expected.json +4 -0
  128. patchrail-0.1.0/examples/ci-triage/javascript-eslint-react-hooks.log +5 -0
  129. patchrail-0.1.0/examples/ci-triage/javascript-eslint-unused-vars.expected.json +4 -0
  130. patchrail-0.1.0/examples/ci-triage/javascript-eslint-unused-vars.log +4 -0
  131. patchrail-0.1.0/examples/ci-triage/javascript-eslint.expected.json +4 -0
  132. patchrail-0.1.0/examples/ci-triage/javascript-eslint.log +4 -0
  133. patchrail-0.1.0/examples/ci-triage/javascript-prettier-format.expected.json +4 -0
  134. patchrail-0.1.0/examples/ci-triage/javascript-prettier-format.log +4 -0
  135. patchrail-0.1.0/examples/ci-triage/javascript-prettier-generated-client-drift.expected.json +4 -0
  136. patchrail-0.1.0/examples/ci-triage/javascript-prettier-generated-client-drift.log +6 -0
  137. patchrail-0.1.0/examples/ci-triage/javascript-prettier.expected.json +4 -0
  138. patchrail-0.1.0/examples/ci-triage/javascript-prettier.log +4 -0
  139. patchrail-0.1.0/examples/ci-triage/node-lockfile-drift.expected.json +4 -0
  140. patchrail-0.1.0/examples/ci-triage/node-lockfile-drift.log +4 -0
  141. patchrail-0.1.0/examples/ci-triage/node-npm-ci-lock-outdated.expected.json +4 -0
  142. patchrail-0.1.0/examples/ci-triage/node-npm-ci-lock-outdated.log +2 -0
  143. patchrail-0.1.0/examples/ci-triage/node-npm-engine-mismatch.expected.json +4 -0
  144. patchrail-0.1.0/examples/ci-triage/node-npm-engine-mismatch.log +4 -0
  145. patchrail-0.1.0/examples/ci-triage/node-npm-eresolve-react.expected.json +4 -0
  146. patchrail-0.1.0/examples/ci-triage/node-npm-eresolve-react.log +3 -0
  147. patchrail-0.1.0/examples/ci-triage/node-npm-missing-lockfile.expected.json +4 -0
  148. patchrail-0.1.0/examples/ci-triage/node-npm-missing-lockfile.log +4 -0
  149. patchrail-0.1.0/examples/ci-triage/node-npm-missing-package-lock.expected.json +4 -0
  150. patchrail-0.1.0/examples/ci-triage/node-npm-missing-package-lock.log +2 -0
  151. patchrail-0.1.0/examples/ci-triage/node-npm-workspace-lock-drift.expected.json +4 -0
  152. patchrail-0.1.0/examples/ci-triage/node-npm-workspace-lock-drift.log +5 -0
  153. patchrail-0.1.0/examples/ci-triage/node-peer-dependency.expected.json +4 -0
  154. patchrail-0.1.0/examples/ci-triage/node-peer-dependency.log +3 -0
  155. patchrail-0.1.0/examples/ci-triage/node-pnpm-catalog-drift.expected.json +4 -0
  156. patchrail-0.1.0/examples/ci-triage/node-pnpm-catalog-drift.log +4 -0
  157. patchrail-0.1.0/examples/ci-triage/node-pnpm-frozen-lockfile.expected.json +4 -0
  158. patchrail-0.1.0/examples/ci-triage/node-pnpm-frozen-lockfile.log +2 -0
  159. patchrail-0.1.0/examples/ci-triage/node-pnpm-lockfile-config-drift.expected.json +4 -0
  160. patchrail-0.1.0/examples/ci-triage/node-pnpm-lockfile-config-drift.log +4 -0
  161. patchrail-0.1.0/examples/ci-triage/node-pnpm-peer-conflict-react.expected.json +4 -0
  162. patchrail-0.1.0/examples/ci-triage/node-pnpm-peer-conflict-react.log +4 -0
  163. patchrail-0.1.0/examples/ci-triage/node-pnpm-peer-optional.expected.json +4 -0
  164. patchrail-0.1.0/examples/ci-triage/node-pnpm-peer-optional.log +3 -0
  165. patchrail-0.1.0/examples/ci-triage/node-pnpm-workspace-protocol.expected.json +4 -0
  166. patchrail-0.1.0/examples/ci-triage/node-pnpm-workspace-protocol.log +2 -0
  167. patchrail-0.1.0/examples/ci-triage/node-yarn-constraints-peer-drift.expected.json +4 -0
  168. patchrail-0.1.0/examples/ci-triage/node-yarn-constraints-peer-drift.log +4 -0
  169. patchrail-0.1.0/examples/ci-triage/node-yarn-immutable-cache-drift.expected.json +4 -0
  170. patchrail-0.1.0/examples/ci-triage/node-yarn-immutable-cache-drift.log +4 -0
  171. patchrail-0.1.0/examples/ci-triage/node-yarn-immutable-install.expected.json +4 -0
  172. patchrail-0.1.0/examples/ci-triage/node-yarn-immutable-install.log +2 -0
  173. patchrail-0.1.0/examples/ci-triage/node-yarn-peer-dependency.expected.json +4 -0
  174. patchrail-0.1.0/examples/ci-triage/node-yarn-peer-dependency.log +4 -0
  175. patchrail-0.1.0/examples/ci-triage/node-yarn-peer-version.expected.json +4 -0
  176. patchrail-0.1.0/examples/ci-triage/node-yarn-peer-version.log +2 -0
  177. patchrail-0.1.0/examples/ci-triage/php-composer-lock-drift.expected.json +4 -0
  178. patchrail-0.1.0/examples/ci-triage/php-composer-lock-drift.log +6 -0
  179. patchrail-0.1.0/examples/ci-triage/php-composer-missing-package.expected.json +4 -0
  180. patchrail-0.1.0/examples/ci-triage/php-composer-missing-package.log +6 -0
  181. patchrail-0.1.0/examples/ci-triage/php-composer-platform-version.expected.json +4 -0
  182. patchrail-0.1.0/examples/ci-triage/php-composer-platform-version.log +9 -0
  183. patchrail-0.1.0/examples/ci-triage/php-phpunit-autoload-class-not-found.expected.json +4 -0
  184. patchrail-0.1.0/examples/ci-triage/php-phpunit-autoload-class-not-found.log +5 -0
  185. patchrail-0.1.0/examples/ci-triage/php-phpunit-failure.expected.json +4 -0
  186. patchrail-0.1.0/examples/ci-triage/php-phpunit-failure.log +10 -0
  187. patchrail-0.1.0/examples/ci-triage/playwright-missing-browsers.expected.json +4 -0
  188. patchrail-0.1.0/examples/ci-triage/playwright-missing-browsers.log +5 -0
  189. patchrail-0.1.0/examples/ci-triage/playwright-selector-timeout.expected.json +4 -0
  190. patchrail-0.1.0/examples/ci-triage/playwright-selector-timeout.log +5 -0
  191. patchrail-0.1.0/examples/ci-triage/python-hatch-build-dependency.expected.json +4 -0
  192. patchrail-0.1.0/examples/ci-triage/python-hatch-build-dependency.log +4 -0
  193. patchrail-0.1.0/examples/ci-triage/python-module-import.expected.json +4 -0
  194. patchrail-0.1.0/examples/ci-triage/python-module-import.log +3 -0
  195. patchrail-0.1.0/examples/ci-triage/python-pip-conflicting-constraints.expected.json +4 -0
  196. patchrail-0.1.0/examples/ci-triage/python-pip-conflicting-constraints.log +6 -0
  197. patchrail-0.1.0/examples/ci-triage/python-pip-constraint-marker-drift.expected.json +4 -0
  198. patchrail-0.1.0/examples/ci-triage/python-pip-constraint-marker-drift.log +6 -0
  199. patchrail-0.1.0/examples/ci-triage/python-pip-constraint-pin-drift.expected.json +4 -0
  200. patchrail-0.1.0/examples/ci-triage/python-pip-constraint-pin-drift.log +5 -0
  201. patchrail-0.1.0/examples/ci-triage/python-pip-extra-conflict.expected.json +4 -0
  202. patchrail-0.1.0/examples/ci-triage/python-pip-extra-conflict.log +6 -0
  203. patchrail-0.1.0/examples/ci-triage/python-pip-index-timeout-backtrack.expected.json +4 -0
  204. patchrail-0.1.0/examples/ci-triage/python-pip-index-timeout-backtrack.log +3 -0
  205. patchrail-0.1.0/examples/ci-triage/python-pip-marker-py310.expected.json +4 -0
  206. patchrail-0.1.0/examples/ci-triage/python-pip-marker-py310.log +3 -0
  207. patchrail-0.1.0/examples/ci-triage/python-pip-missing-musllinux-wheel.expected.json +4 -0
  208. patchrail-0.1.0/examples/ci-triage/python-pip-missing-musllinux-wheel.log +5 -0
  209. patchrail-0.1.0/examples/ci-triage/python-pip-no-matching-distribution.expected.json +4 -0
  210. patchrail-0.1.0/examples/ci-triage/python-pip-no-matching-distribution.log +3 -0
  211. patchrail-0.1.0/examples/ci-triage/python-pip-platform-arm64-wheel.expected.json +4 -0
  212. patchrail-0.1.0/examples/ci-triage/python-pip-platform-arm64-wheel.log +3 -0
  213. patchrail-0.1.0/examples/ci-triage/python-pip-platform-wheel.expected.json +4 -0
  214. patchrail-0.1.0/examples/ci-triage/python-pip-platform-wheel.log +4 -0
  215. patchrail-0.1.0/examples/ci-triage/python-pip-prerelease-range.expected.json +4 -0
  216. patchrail-0.1.0/examples/ci-triage/python-pip-prerelease-range.log +3 -0
  217. patchrail-0.1.0/examples/ci-triage/python-pip-python-version-marker.expected.json +4 -0
  218. patchrail-0.1.0/examples/ci-triage/python-pip-python-version-marker.log +4 -0
  219. patchrail-0.1.0/examples/ci-triage/python-pip-tools-backtracking.expected.json +4 -0
  220. patchrail-0.1.0/examples/ci-triage/python-pip-tools-backtracking.log +3 -0
  221. patchrail-0.1.0/examples/ci-triage/python-pip-tools-conflict.expected.json +4 -0
  222. patchrail-0.1.0/examples/ci-triage/python-pip-tools-conflict.log +4 -0
  223. patchrail-0.1.0/examples/ci-triage/python-pip-tools-extra-marker-conflict.expected.json +4 -0
  224. patchrail-0.1.0/examples/ci-triage/python-pip-tools-extra-marker-conflict.log +6 -0
  225. patchrail-0.1.0/examples/ci-triage/python-pip-yanked-only-candidate.expected.json +4 -0
  226. patchrail-0.1.0/examples/ci-triage/python-pip-yanked-only-candidate.log +4 -0
  227. patchrail-0.1.0/examples/ci-triage/python-pip-yanked-release.expected.json +4 -0
  228. patchrail-0.1.0/examples/ci-triage/python-pip-yanked-release.log +4 -0
  229. patchrail-0.1.0/examples/ci-triage/python-poetry-python-range-drift.expected.json +4 -0
  230. patchrail-0.1.0/examples/ci-triage/python-poetry-python-range-drift.log +5 -0
  231. patchrail-0.1.0/examples/ci-triage/python-poetry-solver-conflict.expected.json +4 -0
  232. patchrail-0.1.0/examples/ci-triage/python-poetry-solver-conflict.log +4 -0
  233. patchrail-0.1.0/examples/ci-triage/python-poetry-transitive-conflict.expected.json +4 -0
  234. patchrail-0.1.0/examples/ci-triage/python-poetry-transitive-conflict.log +3 -0
  235. patchrail-0.1.0/examples/ci-triage/python-pytest-env-token-redacted.expected.json +4 -0
  236. patchrail-0.1.0/examples/ci-triage/python-pytest-env-token-redacted.log +4 -0
  237. patchrail-0.1.0/examples/ci-triage/python-test-assert-json.expected.json +4 -0
  238. patchrail-0.1.0/examples/ci-triage/python-test-assert-json.log +3 -0
  239. patchrail-0.1.0/examples/ci-triage/python-test-failure.expected.json +4 -0
  240. patchrail-0.1.0/examples/ci-triage/python-test-failure.log +3 -0
  241. patchrail-0.1.0/examples/ci-triage/python-test-fixture-timeout.expected.json +4 -0
  242. patchrail-0.1.0/examples/ci-triage/python-test-fixture-timeout.log +3 -0
  243. patchrail-0.1.0/examples/ci-triage/python-test-import-mode.expected.json +4 -0
  244. patchrail-0.1.0/examples/ci-triage/python-test-import-mode.log +2 -0
  245. patchrail-0.1.0/examples/ci-triage/python-test-module-not-found.expected.json +4 -0
  246. patchrail-0.1.0/examples/ci-triage/python-test-module-not-found.log +2 -0
  247. patchrail-0.1.0/examples/ci-triage/python-test-parametrize-regression.expected.json +4 -0
  248. patchrail-0.1.0/examples/ci-triage/python-test-parametrize-regression.log +3 -0
  249. patchrail-0.1.0/examples/ci-triage/python-test-snapshot-diff.expected.json +4 -0
  250. patchrail-0.1.0/examples/ci-triage/python-test-snapshot-diff.log +3 -0
  251. patchrail-0.1.0/examples/ci-triage/python-tox-constraint-conflict.expected.json +4 -0
  252. patchrail-0.1.0/examples/ci-triage/python-tox-constraint-conflict.log +7 -0
  253. patchrail-0.1.0/examples/ci-triage/python-uv-constraint-backtrack-fail.expected.json +4 -0
  254. patchrail-0.1.0/examples/ci-triage/python-uv-constraint-backtrack-fail.log +5 -0
  255. patchrail-0.1.0/examples/ci-triage/python-uv-extra-marker-conflict.expected.json +4 -0
  256. patchrail-0.1.0/examples/ci-triage/python-uv-extra-marker-conflict.log +3 -0
  257. patchrail-0.1.0/examples/ci-triage/python-uv-extra-python-marker-drift.expected.json +4 -0
  258. patchrail-0.1.0/examples/ci-triage/python-uv-extra-python-marker-drift.log +6 -0
  259. patchrail-0.1.0/examples/ci-triage/python-uv-resolution-no-solution.expected.json +4 -0
  260. patchrail-0.1.0/examples/ci-triage/python-uv-resolution-no-solution.log +3 -0
  261. patchrail-0.1.0/examples/ci-triage/ruby-bundler-conflict.expected.json +4 -0
  262. patchrail-0.1.0/examples/ci-triage/ruby-bundler-conflict.log +5 -0
  263. patchrail-0.1.0/examples/ci-triage/ruby-bundler-missing-gem.expected.json +4 -0
  264. patchrail-0.1.0/examples/ci-triage/ruby-bundler-missing-gem.log +5 -0
  265. patchrail-0.1.0/examples/ci-triage/ruby-bundler-platform-lock.expected.json +4 -0
  266. patchrail-0.1.0/examples/ci-triage/ruby-bundler-platform-lock.log +4 -0
  267. patchrail-0.1.0/examples/ci-triage/ruby-gem-native-extension.expected.json +4 -0
  268. patchrail-0.1.0/examples/ci-triage/ruby-gem-native-extension.log +4 -0
  269. patchrail-0.1.0/examples/ci-triage/ruby-rake-aborted.expected.json +4 -0
  270. patchrail-0.1.0/examples/ci-triage/ruby-rake-aborted.log +5 -0
  271. patchrail-0.1.0/examples/ci-triage/ruby-rspec-failure.expected.json +4 -0
  272. patchrail-0.1.0/examples/ci-triage/ruby-rspec-failure.log +6 -0
  273. patchrail-0.1.0/examples/ci-triage/ruby-ruby-version-lock.expected.json +4 -0
  274. patchrail-0.1.0/examples/ci-triage/ruby-ruby-version-lock.log +5 -0
  275. patchrail-0.1.0/examples/ci-triage/ruby-yanked-gem.expected.json +4 -0
  276. patchrail-0.1.0/examples/ci-triage/ruby-yanked-gem.log +5 -0
  277. patchrail-0.1.0/examples/ci-triage/rust-compile-error.expected.json +4 -0
  278. patchrail-0.1.0/examples/ci-triage/rust-compile-error.log +4 -0
  279. patchrail-0.1.0/examples/ci-triage/rust-e0277-trait-bound.expected.json +4 -0
  280. patchrail-0.1.0/examples/ci-triage/rust-e0277-trait-bound.log +3 -0
  281. patchrail-0.1.0/examples/ci-triage/rust-e0308-mismatched-types.expected.json +4 -0
  282. patchrail-0.1.0/examples/ci-triage/rust-e0308-mismatched-types.log +4 -0
  283. patchrail-0.1.0/examples/ci-triage/rust-e0382-moved-value.expected.json +4 -0
  284. patchrail-0.1.0/examples/ci-triage/rust-e0382-moved-value.log +4 -0
  285. patchrail-0.1.0/examples/ci-triage/rust-e0502-borrow-checker.expected.json +4 -0
  286. patchrail-0.1.0/examples/ci-triage/rust-e0502-borrow-checker.log +3 -0
  287. patchrail-0.1.0/examples/ci-triage/rust-e0599-method-not-found.expected.json +4 -0
  288. patchrail-0.1.0/examples/ci-triage/rust-e0599-method-not-found.log +3 -0
  289. patchrail-0.1.0/examples/ci-triage/rust-panic-thread.expected.json +4 -0
  290. patchrail-0.1.0/examples/ci-triage/rust-panic-thread.log +3 -0
  291. patchrail-0.1.0/examples/ci-triage/rust-snapshot-failure.expected.json +4 -0
  292. patchrail-0.1.0/examples/ci-triage/rust-snapshot-failure.log +3 -0
  293. patchrail-0.1.0/examples/ci-triage/rust-test-failure.expected.json +4 -0
  294. patchrail-0.1.0/examples/ci-triage/rust-test-failure.log +4 -0
  295. patchrail-0.1.0/examples/ci-triage/rust-trait-bound-error.expected.json +4 -0
  296. patchrail-0.1.0/examples/ci-triage/rust-trait-bound-error.log +4 -0
  297. patchrail-0.1.0/examples/ci-triage/security-cargo-audit-rustsec.expected.json +4 -0
  298. patchrail-0.1.0/examples/ci-triage/security-cargo-audit-rustsec.log +9 -0
  299. patchrail-0.1.0/examples/ci-triage/security-gosec-findings.expected.json +4 -0
  300. patchrail-0.1.0/examples/ci-triage/security-gosec-findings.log +7 -0
  301. patchrail-0.1.0/examples/ci-triage/security-npm-audit-critical.expected.json +4 -0
  302. patchrail-0.1.0/examples/ci-triage/security-npm-audit-critical.log +8 -0
  303. patchrail-0.1.0/examples/ci-triage/security-pip-audit-vulnerability.expected.json +4 -0
  304. patchrail-0.1.0/examples/ci-triage/security-pip-audit-vulnerability.log +6 -0
  305. patchrail-0.1.0/examples/ci-triage/security-trivy-container-critical.expected.json +4 -0
  306. patchrail-0.1.0/examples/ci-triage/security-trivy-container-critical.log +7 -0
  307. patchrail-0.1.0/examples/ci-triage/typescript-generated-client-schema-drift.expected.json +4 -0
  308. patchrail-0.1.0/examples/ci-triage/typescript-generated-client-schema-drift.log +4 -0
  309. patchrail-0.1.0/examples/ci-triage/typescript-import-type-drift.expected.json +4 -0
  310. patchrail-0.1.0/examples/ci-triage/typescript-import-type-drift.log +4 -0
  311. patchrail-0.1.0/examples/ci-triage/typescript-jsx-prop-mismatch.expected.json +4 -0
  312. patchrail-0.1.0/examples/ci-triage/typescript-jsx-prop-mismatch.log +4 -0
  313. patchrail-0.1.0/examples/ci-triage/typescript-missing-name.expected.json +4 -0
  314. patchrail-0.1.0/examples/ci-triage/typescript-missing-name.log +3 -0
  315. patchrail-0.1.0/examples/ci-triage/typescript-path-alias-drift.expected.json +4 -0
  316. patchrail-0.1.0/examples/ci-triage/typescript-path-alias-drift.log +3 -0
  317. patchrail-0.1.0/examples/ci-triage/typescript-route-param-mismatch.expected.json +4 -0
  318. patchrail-0.1.0/examples/ci-triage/typescript-route-param-mismatch.log +4 -0
  319. patchrail-0.1.0/examples/ci-triage/typescript-schema-drift.expected.json +4 -0
  320. patchrail-0.1.0/examples/ci-triage/typescript-schema-drift.log +3 -0
  321. patchrail-0.1.0/examples/ci-triage/typescript-ts2304-missing-global.expected.json +4 -0
  322. patchrail-0.1.0/examples/ci-triage/typescript-ts2304-missing-global.log +3 -0
  323. patchrail-0.1.0/examples/ci-triage/typescript-ts2322-prop.expected.json +4 -0
  324. patchrail-0.1.0/examples/ci-triage/typescript-ts2322-prop.log +3 -0
  325. patchrail-0.1.0/examples/ci-triage/typescript-ts2345-route-param.expected.json +4 -0
  326. patchrail-0.1.0/examples/ci-triage/typescript-ts2345-route-param.log +2 -0
  327. patchrail-0.1.0/examples/ci-triage/typescript-ts2416-class-override.expected.json +4 -0
  328. patchrail-0.1.0/examples/ci-triage/typescript-ts2416-class-override.log +2 -0
  329. patchrail-0.1.0/examples/ci-triage/typescript-ts2551-import-name.expected.json +4 -0
  330. patchrail-0.1.0/examples/ci-triage/typescript-ts2551-import-name.log +3 -0
  331. patchrail-0.1.0/examples/ci-triage/typescript-ts2741-required-prop.expected.json +4 -0
  332. patchrail-0.1.0/examples/ci-triage/typescript-ts2741-required-prop.log +2 -0
  333. patchrail-0.1.0/examples/ci-triage/typescript-ts2769-overload.expected.json +4 -0
  334. patchrail-0.1.0/examples/ci-triage/typescript-ts2769-overload.log +3 -0
  335. patchrail-0.1.0/examples/ci-triage/typescript-ts7006-implicit-any.expected.json +4 -0
  336. patchrail-0.1.0/examples/ci-triage/typescript-ts7006-implicit-any.log +3 -0
  337. patchrail-0.1.0/examples/ci-triage/typescript-tsconfig-lib-drift.expected.json +4 -0
  338. patchrail-0.1.0/examples/ci-triage/typescript-tsconfig-lib-drift.log +4 -0
  339. patchrail-0.1.0/examples/ci-triage/typescript-typecheck.expected.json +4 -0
  340. patchrail-0.1.0/examples/ci-triage/typescript-typecheck.log +3 -0
  341. patchrail-0.1.0/examples/ci-triage/typescript-vite-env-drift.expected.json +4 -0
  342. patchrail-0.1.0/examples/ci-triage/typescript-vite-env-drift.log +4 -0
  343. patchrail-0.1.0/examples/ci-triage/typescript-zod-schema-drift.expected.json +4 -0
  344. patchrail-0.1.0/examples/ci-triage/typescript-zod-schema-drift.log +4 -0
  345. patchrail-0.1.0/examples/control-plane-demo/README.md +23 -0
  346. patchrail-0.1.0/examples/control-plane-demo/demo-output.md +30 -0
  347. patchrail-0.1.0/examples/funded-issues-readonly/README.md +71 -0
  348. patchrail-0.1.0/examples/funded-issues-readonly/client-profile-python.json +10 -0
  349. patchrail-0.1.0/examples/funded-issues-readonly/competition-observations.json +34 -0
  350. patchrail-0.1.0/examples/funded-issues-readonly/demo-summary.expected.json +31 -0
  351. patchrail-0.1.0/examples/funded-issues-readonly/issues.json +46 -0
  352. patchrail-0.1.0/examples/funded-issues-readonly/payout-effort-observations.json +35 -0
  353. patchrail-0.1.0/examples/funded-issues-readonly/provider-github-export.json +37 -0
  354. patchrail-0.1.0/examples/funded-issues-readonly/run_demo.py +209 -0
  355. patchrail-0.1.0/examples/funded-issues-readonly/staleness-observations.json +32 -0
  356. patchrail-0.1.0/examples/funded-issues-readonly/testability-observations.json +34 -0
  357. patchrail-0.1.0/examples/github-action/README.md +96 -0
  358. patchrail-0.1.0/examples/github-action/patchrail-ci-triage-artifact/ci-report.md +23 -0
  359. patchrail-0.1.0/examples/github-action/patchrail-ci-triage-artifact/ci-result.json +26 -0
  360. patchrail-0.1.0/examples/github-action/patchrail-ci-triage-artifact/doctor.json +19 -0
  361. patchrail-0.1.0/examples/github-action/patchrail-ci-triage-artifact/fixture-benchmark-summary.md +26 -0
  362. patchrail-0.1.0/examples/github-action/patchrail-ci-triage-artifact/fixture-benchmark.json +1476 -0
  363. patchrail-0.1.0/examples/local-agent-queue/README.md +257 -0
  364. patchrail-0.1.0/examples/local-agent-queue/demo-summary.expected.json +76 -0
  365. patchrail-0.1.0/examples/local-agent-queue/run_demo.py +523 -0
  366. patchrail-0.1.0/examples/pilot-outcome/README.md +103 -0
  367. patchrail-0.1.0/examples/pilot-outcome/patchrail-own-repo-20260603.md +29 -0
  368. patchrail-0.1.0/examples/pilot-outcome/patchrail-own-repo-20260603.summary.json +39 -0
  369. patchrail-0.1.0/pyproject.toml +79 -0
  370. patchrail-0.1.0/schemas/application_dossier.schema.json +305 -0
  371. patchrail-0.1.0/schemas/ci_result.schema.json +120 -0
  372. patchrail-0.1.0/schemas/queue_audit_event.schema.json +44 -0
  373. patchrail-0.1.0/schemas/queue_audit_summary.schema.json +169 -0
  374. patchrail-0.1.0/schemas/queue_gate_report.schema.json +158 -0
  375. patchrail-0.1.0/schemas/queue_policy_resolution.schema.json +188 -0
  376. patchrail-0.1.0/schemas/queue_policy_scan.schema.json +175 -0
  377. patchrail-0.1.0/schemas/queue_proposal.schema.json +61 -0
  378. patchrail-0.1.0/schemas/queue_review.schema.json +218 -0
  379. patchrail-0.1.0/schemas/queue_status.schema.json +179 -0
  380. patchrail-0.1.0/schemas/queue_work_item.schema.json +64 -0
  381. patchrail-0.1.0/schemas/reviewer_quick_check_artifacts.schema.json +104 -0
  382. patchrail-0.1.0/scripts/release_readiness.py +206 -0
  383. patchrail-0.1.0/scripts/reviewer_quick_check.py +13 -0
  384. patchrail-0.1.0/scripts/update_ci_evidence_reference.py +110 -0
  385. patchrail-0.1.0/src/patchrail/__init__.py +7 -0
  386. patchrail-0.1.0/src/patchrail/__main__.py +7 -0
  387. patchrail-0.1.0/src/patchrail/ci/__init__.py +7 -0
  388. patchrail-0.1.0/src/patchrail/ci/classify.py +888 -0
  389. patchrail-0.1.0/src/patchrail/cli.py +8566 -0
  390. patchrail-0.1.0/src/patchrail/funded_issues/__init__.py +138 -0
  391. patchrail-0.1.0/src/patchrail/funded_issues/algora_board.py +240 -0
  392. patchrail-0.1.0/src/patchrail/funded_issues/blocklist.py +112 -0
  393. patchrail-0.1.0/src/patchrail/funded_issues/discovery.py +4091 -0
  394. patchrail-0.1.0/src/patchrail/funded_issues/importers.py +316 -0
  395. patchrail-0.1.0/src/patchrail/funded_issues/source_noise.py +349 -0
  396. patchrail-0.1.0/src/patchrail/funded_issues/store.py +459 -0
  397. patchrail-0.1.0/src/patchrail/queue/__init__.py +75 -0
  398. patchrail-0.1.0/src/patchrail/queue/server.py +273 -0
  399. patchrail-0.1.0/src/patchrail/queue/status.py +756 -0
  400. patchrail-0.1.0/src/patchrail/queue/store.py +600 -0
  401. patchrail-0.1.0/src/patchrail/reviewer_quick_check.py +650 -0
  402. patchrail-0.1.0/src/patchrail/schemas/__init__.py +1 -0
  403. patchrail-0.1.0/src/patchrail/schemas/application-dossier.v1.schema.json +305 -0
  404. patchrail-0.1.0/src/patchrail/schemas/ci-benchmark.v1.schema.json +174 -0
  405. patchrail-0.1.0/src/patchrail/schemas/ci-fixture-check.v1.schema.json +122 -0
  406. patchrail-0.1.0/src/patchrail/schemas/ci-pilot-metrics.v1.schema.json +164 -0
  407. patchrail-0.1.0/src/patchrail/schemas/ci-pilot-summary.v1.schema.json +146 -0
  408. patchrail-0.1.0/src/patchrail/schemas/ci-result.v1.schema.json +133 -0
  409. patchrail-0.1.0/src/patchrail/schemas/funded-issues-client-report.v1.schema.json +524 -0
  410. patchrail-0.1.0/src/patchrail/schemas/funded-issues-recheck-queue.v1.schema.json +333 -0
  411. patchrail-0.1.0/src/patchrail/schemas/funded-issues-recheck-summary.v1.schema.json +136 -0
  412. patchrail-0.1.0/src/patchrail/schemas/funded-issues-report.v1.schema.json +836 -0
  413. patchrail-0.1.0/src/patchrail/schemas/funded-issues-shortlist.v1.schema.json +953 -0
  414. patchrail-0.1.0/src/patchrail/schemas/funded-issues-store-status.v1.schema.json +96 -0
  415. patchrail-0.1.0/src/patchrail/schemas/funded-issues-store.v1.schema.json +117 -0
  416. patchrail-0.1.0/src/patchrail/schemas/queue-audit-event.v1.schema.json +44 -0
  417. patchrail-0.1.0/src/patchrail/schemas/queue-audit-summary.v1.schema.json +169 -0
  418. patchrail-0.1.0/src/patchrail/schemas/queue-gate-report.v1.schema.json +158 -0
  419. patchrail-0.1.0/src/patchrail/schemas/queue-policy-resolution.v1.schema.json +188 -0
  420. patchrail-0.1.0/src/patchrail/schemas/queue-policy-scan.v1.schema.json +175 -0
  421. patchrail-0.1.0/src/patchrail/schemas/queue-proposal.v1.schema.json +61 -0
  422. patchrail-0.1.0/src/patchrail/schemas/queue-review.v1.schema.json +218 -0
  423. patchrail-0.1.0/src/patchrail/schemas/queue-status.v1.schema.json +179 -0
  424. patchrail-0.1.0/src/patchrail/schemas/queue-work-item.v1.schema.json +64 -0
  425. patchrail-0.1.0/src/patchrail/schemas/reviewer-quick-check-artifacts.v1.schema.json +104 -0
  426. patchrail-0.1.0/src/patchrail/web_metrics.py +649 -0
  427. patchrail-0.1.0/tests/test_ci_classify_expansion.py +572 -0
  428. patchrail-0.1.0/tests/test_ci_cli.py +1567 -0
  429. patchrail-0.1.0/tests/test_funded_issues_algora_board.py +292 -0
  430. patchrail-0.1.0/tests/test_funded_issues_apply_recheck.py +368 -0
  431. patchrail-0.1.0/tests/test_funded_issues_blocklist.py +170 -0
  432. patchrail-0.1.0/tests/test_funded_issues_cli.py +2670 -0
  433. patchrail-0.1.0/tests/test_funded_issues_client_report.py +361 -0
  434. patchrail-0.1.0/tests/test_funded_issues_competition.py +212 -0
  435. patchrail-0.1.0/tests/test_funded_issues_payout_effort.py +230 -0
  436. patchrail-0.1.0/tests/test_funded_issues_source_noise.py +528 -0
  437. patchrail-0.1.0/tests/test_funded_issues_staleness.py +222 -0
  438. patchrail-0.1.0/tests/test_funded_issues_store.py +313 -0
  439. patchrail-0.1.0/tests/test_funded_issues_testability.py +206 -0
  440. patchrail-0.1.0/tests/test_public_workflows.py +2600 -0
  441. patchrail-0.1.0/tests/test_queue_cli.py +1654 -0
  442. patchrail-0.1.0/tests/test_queue_http_api.py +142 -0
  443. patchrail-0.1.0/tests/test_web_metrics_cli.py +305 -0
  444. patchrail-0.1.0/uv.lock +619 -0
@@ -0,0 +1,33 @@
1
+ ---
2
+ name: patchrail-ci-triage
3
+ description: Use when a PatchRail CI classifier, CI fixture, or failed CI log needs root-cause analysis, evidence extraction, or regression coverage.
4
+ ---
5
+
6
+ # PatchRail CI Triage
7
+
8
+ PatchRail CI triage is local-first. Produce evidence and reviewable suggestions;
9
+ do not perform write actions.
10
+
11
+ ## Workflow
12
+
13
+ 1. Inspect the failing log or sanitized fixture.
14
+ 2. Identify the smallest root-cause category that explains the failure.
15
+ 3. Check whether an existing fixture already covers the pattern.
16
+ 4. If classifier logic changes, add or update a fixture and expected metadata.
17
+ 5. Run the focused classifier tests and the public benchmark.
18
+ 6. Summarize evidence lines, confidence, changed files, and commands run.
19
+
20
+ ## Required Checks
21
+
22
+ ```bash
23
+ uv run --extra dev pytest -q
24
+ uv run --extra dev ruff check .
25
+ uv run --extra dev patchrail ci benchmark examples/ci-triage --format json
26
+ ```
27
+
28
+ ## Safety
29
+
30
+ - Do not quote raw logs that may contain secrets.
31
+ - Redact logs before sharing fixtures or report excerpts.
32
+ - Do not send logs to external services unless the maintainer explicitly opts in.
33
+ - Do not open pull requests or comment on third-party repositories automatically.
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: patchrail-release-captain
3
+ description: Use when preparing a PatchRail release, changelog update, package build, release evidence page, or release notes draft.
4
+ ---
5
+
6
+ # PatchRail Release Captain
7
+
8
+ Prepare release evidence. Do not publish packages, create tags, or announce
9
+ releases unless the maintainer explicitly asks for that external action.
10
+
11
+ ## Workflow
12
+
13
+ 1. Read `docs/release-process.md`.
14
+ 2. Check `pyproject.toml`, `CHANGELOG.md`, README quickstart, docs links, and
15
+ release evidence pages for drift.
16
+ 3. Build sdist and wheel.
17
+ 4. Run package checks and a clean wheel smoke install.
18
+ 5. Update release evidence with exact command results.
19
+ 6. Leave any remaining publish steps as explicit maintainer gates.
20
+
21
+ ## Required Checks
22
+
23
+ ```bash
24
+ uv run --extra dev pytest -q
25
+ uv run --extra dev ruff check .
26
+ uv run --extra dev ruff format --check .
27
+ uv run --extra dev python -m build
28
+ uv run --extra dev twine check dist/*
29
+ ```
30
+
31
+ ## Safety
32
+
33
+ - Do not publish to PyPI without an explicit maintainer release request.
34
+ - Do not create or push release tags unless requested.
35
+ - Do not invent download, adoption, or CI metrics.
36
+ - Keep release notes focused on verified behavior.
@@ -0,0 +1,39 @@
1
+ ---
2
+ name: patchrail-review-guardrails
3
+ description: Use when reviewing changes that affect network access, GitHub write actions, funded issue discovery, log redaction, local queue approvals, or agent workflows.
4
+ ---
5
+
6
+ # PatchRail Review Guardrails
7
+
8
+ Review PatchRail changes for maintainer control, local-first behavior, and
9
+ anti-abuse boundaries.
10
+
11
+ ## P0 Findings
12
+
13
+ Flag a P0 if a change introduces any of these:
14
+
15
+ - unredacted log export;
16
+ - external model calls without explicit opt-in;
17
+ - network access without a clear opt-in flag;
18
+ - automatic bounty or funded-issue claiming;
19
+ - mass comments or automatic issue replies;
20
+ - automatic pull requests to third-party repositories;
21
+ - GitHub write actions without dry-run and human approval;
22
+ - queue approvals that execute code or grant write permissions by themselves.
23
+
24
+ ## Review Flow
25
+
26
+ 1. Inspect the diff and affected docs.
27
+ 2. Check whether new commands preserve `--format json` or equivalent
28
+ machine-readable output when relevant.
29
+ 3. Verify docs state the human approval boundary.
30
+ 4. Run focused tests, then the public workflow tests.
31
+ 5. Report findings before summaries, with file and line references when
32
+ available.
33
+
34
+ ## Required Checks
35
+
36
+ ```bash
37
+ uv run --extra dev pytest -q tests/test_public_workflows.py
38
+ uv run --extra dev ruff check .
39
+ ```
@@ -0,0 +1,12 @@
1
+ .venv/
2
+ .pkg-smoke/
3
+ .patchrail-release-smoke/
4
+ __pycache__/
5
+ .pytest_cache/
6
+ .ruff_cache/
7
+ .mypy_cache/
8
+ dist/
9
+ build/
10
+ *.egg-info/
11
+ *.pyc
12
+ .patchrail-demo/
@@ -0,0 +1,37 @@
1
+ # PatchRail Adopters
2
+
3
+ PatchRail lists external adopters only with explicit maintainer permission.
4
+ Please do not add private repositories, customer names, or unapproved pilot
5
+ details.
6
+
7
+ ## Current Status
8
+
9
+ PatchRail is collecting first read-only maintainer pilots. There are no public external adopters listed yet.
10
+
11
+ Use [examples/pilot-outcome](examples/pilot-outcome/README.md) as the safe
12
+ shape for a pilot summary before requesting a public adopter listing.
13
+ Use [docs/pilot-request-package.md](docs/pilot-request-package.md) for the
14
+ consent checklist and public listing rules.
15
+
16
+ ## How To Be Listed
17
+
18
+ Open an adopter report issue when you have run PatchRail on a repository you
19
+ maintain or are authorized to test:
20
+
21
+ - repository or organization name approved for public mention;
22
+ - PatchRail version or commit used;
23
+ - workflow used, such as CI triage, queue demo, or funded issue read-only scan;
24
+ - safe outcome summary without raw logs, secrets, or private paths;
25
+ - whether you permit PatchRail to list the repo here.
26
+
27
+ Accepted entries should stay factual and short:
28
+
29
+ ```markdown
30
+ - `owner/repo` - Used PatchRail CI triage on GitHub Actions logs; fixture PR pending.
31
+ ```
32
+
33
+ ## Privacy Boundary
34
+
35
+ Do not submit raw CI logs, private repository names, usernames, email addresses,
36
+ tokens, local home paths, customer names, or screenshots containing secrets.
37
+ Use `patchrail redact` and review the output manually before sharing anything.
@@ -0,0 +1,44 @@
1
+ # AGENTS.md
2
+
3
+ PatchRail is a local-first maintainer automation toolkit. The core safety rule
4
+ is: produce evidence and reviewable suggestions; do not perform write actions
5
+ without maintainer approval.
6
+
7
+ ## Setup
8
+
9
+ ```bash
10
+ uv run --extra dev pytest -q
11
+ uv run --extra dev ruff check .
12
+ uv run --extra dev patchrail ci benchmark examples/ci-triage --format json
13
+ ```
14
+
15
+ ## Review guidelines
16
+
17
+ - Treat possible secret leakage as P0.
18
+ - Treat new network access without explicit opt-in as P0.
19
+ - Treat repository write actions without dry-run and human approval as P0.
20
+ - Treat missing fixtures for classifier changes as P1.
21
+ - Treat documentation quickstart drift as P1.
22
+ - Check that CLI examples still work.
23
+
24
+ ## Safety rules
25
+
26
+ - Do not add automatic bounty claiming.
27
+ - Do not add mass-commenting workflows.
28
+ - Do not submit pull requests to third-party repositories automatically.
29
+ - Do not send raw CI logs to external services unless explicitly requested.
30
+ - Prefer local-first behavior.
31
+
32
+ ## CI classifier changes
33
+
34
+ When changing classifier logic:
35
+
36
+ 1. Add or update a fixture.
37
+ 2. Add expected classification metadata.
38
+ 3. Run the relevant tests.
39
+ 4. Include evidence lines in the pull request description.
40
+
41
+ ## Release changes
42
+
43
+ Do not publish packages, create tags, or push release commits unless a maintainer
44
+ explicitly asks. Prepare release pull requests only.
@@ -0,0 +1,95 @@
1
+ # Changelog
2
+
3
+ ## 0.2.0 - draft
4
+
5
+ - Added a permanent source-level blocklist to the funded-issues tracker:
6
+ owners manually verified as fake-bounty sources are dropped at the
7
+ `merge_into_store` choke point (counted as `blocked` in the merge summary)
8
+ and `purge_blocklisted_entries` removes any legacy entries -- `track` runs
9
+ the purge on every merge so existing stores self-heal. The list is code, not
10
+ config: removing an owner requires a reviewed change.
11
+ - Added `funded-issues import-algora-board`, an offline parser for a locally
12
+ saved Algora organization bounty-board page (`https://algora.io/<org>/bounties`).
13
+ It extracts the funder-stated USD amount, GitHub issue reference, posting
14
+ age, and declared claim count per bounty, marks funding as `verified` with
15
+ the board as `evidence_url`, raises `contested_bounty` when declared claims
16
+ reach the competition threshold, and can merge the scored records straight
17
+ into a tracker store (`--store`). The page must be saved locally first: the
18
+ command performs no network access, and the payload reports how many open
19
+ bounties the server-rendered page did not include.
20
+ - Added a read-only `assess_bounty_competition` signal to `funded-issues`
21
+ scoring that derives `contested_bounty` / `crowded_no_assignment` risk flags
22
+ from public competition metadata (competing PR count, distinct claimants,
23
+ comment volume, assignment), with curated `CONTESTED_HIGH_COMPETITION` /
24
+ `CROWDED_NO_CLEAR_OWNER` reason codes. Competition flags cost score and
25
+ confidence without forcing an automatic no-go.
26
+ - Added `funded-issues competition`, a read-only batch command that scores
27
+ competition / noise-trap pressure across many bounties from public metadata
28
+ observations (JSON list or `{observations: [...]}`), sorts results
29
+ highest-pressure first, and summarizes high/elevated/low counts plus
30
+ contested/crowded totals. Backed by the pure `assess_competition_batch`
31
+ helper and an example observations fixture. Strictly read-only: no claims,
32
+ comments, or maintainer contact.
33
+ - Added a read-only `assess_payout_effort` signal to `funded-issues` scoring
34
+ that compares a bounty's public funding amount against an effort estimate and
35
+ a target hourly-rate floor ($150/h default), deriving a
36
+ `payout_too_low_for_effort` risk flag with a curated
37
+ `PAYOUT_TOO_LOW_FOR_EFFORT` reason code. Levels are strong / marginal / low /
38
+ unknown / unverified_currency; the flag costs score without forcing an
39
+ automatic no-go, and non-USD funding is surfaced as unverified rather than
40
+ guessed.
41
+ - Added `funded-issues payout-effort`, a read-only batch command that scores
42
+ payout-vs-effort across many bounties from observations (JSON list or
43
+ `{observations: [...]}`), sorts results worst-payout first, and summarizes
44
+ low/marginal/strong/unknown/unverified-currency counts plus an underpaid
45
+ total. Backed by the pure `assess_payout_effort_batch` helper and an example
46
+ observations fixture. Strictly read-only: no claims, comments, or maintainer
47
+ contact.
48
+ - Added an offline owner-level `source_noise` heuristic to `funded-issues`: the
49
+ pure `assess_owner_source_noise` helper screens an owner's public metadata
50
+ (account age, public repos, followers, website, payout verifiability) plus its
51
+ near-identical-issue volume into `noise_flags`, flagging the owner when it
52
+ trips at least two strong signals. `apply_source_noise_to_store` stamps the
53
+ verdict onto store entries via a new `noise_flags` field that survives
54
+ merge/upsert and apply-recheck, and `track-status` / web metrics now report a
55
+ `tracked_total` / `noise_flagged` / `clean_active` breakdown instead of a
56
+ single inflated active count. Strictly read-only: no network, no third-party
57
+ writes.
58
+ - Added `funded-issues apply-recheck`, a local-file-only command that applies
59
+ recheck observations (a JSON list, an `{observations: [...]}` object, or a
60
+ list of GitHub API issue objects) to a tracker store, transitioning entries
61
+ to closed / stale / active. Stale is derived from `updated_at` against a
62
+ `--stale-after-days` floor (default 45); `state_history` records only real
63
+ transitions, `--dry-run` reports without writing, and a second identical pass
64
+ is a no-op. Backed by the pure `apply_recheck_to_store` helper and the
65
+ `funded-issues-recheck-summary` schema. Strictly read-only: no claims,
66
+ comments, or maintainer contact.
67
+ - Prepared the CI Janitor v0.2 evidence bundle around the 143-case fixture zoo,
68
+ `fixture-check`, read-only GitHub Actions triage artifact, maintainer pilot
69
+ guide, and public metrics/adopter surfaces.
70
+ - Added .NET/NuGet/C# and xUnit fixture coverage for `dotnet restore`,
71
+ `dotnet build`, and `dotnet test` failure modes.
72
+ - v0.2 remains a maintainer-gated release candidate until the maintainer
73
+ explicitly bumps `pyproject.toml`, tags the release, publishes package
74
+ artifacts, and records final CI/PyPI evidence.
75
+
76
+ ## 0.1.0 - 2026-06-02
77
+
78
+ - Initial public CI Janitor snapshot.
79
+ - Added `patchrail ci explain` and `patchrail ci classify`.
80
+ - Added local Markdown, JSON, and text reports.
81
+ - Added Apache-2.0 license and safety/ethics documentation.
82
+ - Added fixture-backed tests, local benchmark command, and GitHub Actions CI.
83
+ - Expanded the initial CI fixture zoo to 101 sanitized synthetic examples across
84
+ Python, Node, TypeScript, Go, Rust, and GitHub Actions failure modes.
85
+ - Added a read-only GitHub Actions triage artifact workflow.
86
+ - Added the experimental local Agent Control Plane queue with SQLite-backed
87
+ work items, approval states, audit export, CI result import, and proposal
88
+ records.
89
+ - Added the experimental read-only `funded-issues` CLI over local metadata,
90
+ with safe-only filtering and explicit anti-abuse blocked actions.
91
+ - Added permission-only adopter reporting and a public metrics tracker for
92
+ pilot outcomes, adoption signals, and Codex for open-source evidence gaps.
93
+ - Added release-prep evidence docs, package smoke checks, and manual publish
94
+ gates. Release tags, PyPI publishing, GitHub Releases, and public
95
+ announcements remain maintainer actions.
@@ -0,0 +1,31 @@
1
+ # Code of Conduct
2
+
3
+ PatchRail follows the Contributor Covenant Code of Conduct, version 2.1.
4
+
5
+ ## Our pledge
6
+
7
+ We pledge to make participation in this project a harassment-free experience for
8
+ everyone, regardless of age, body size, visible or invisible disability,
9
+ ethnicity, sex characteristics, gender identity and expression, level of
10
+ experience, education, socio-economic status, nationality, personal appearance,
11
+ race, caste, color, religion, or sexual identity and orientation.
12
+
13
+ ## Our standards
14
+
15
+ Examples of behavior that contributes to a positive environment include:
16
+
17
+ - demonstrating empathy and kindness toward other people;
18
+ - being respectful of differing opinions, viewpoints, and experiences;
19
+ - giving and gracefully accepting constructive feedback;
20
+ - accepting responsibility and apologizing to those affected by mistakes;
21
+ - focusing on what is best for the overall community.
22
+
23
+ Examples of unacceptable behavior include harassment, trolling, insulting
24
+ comments, public or private harassment, publishing others' private information,
25
+ or other conduct that could reasonably be considered inappropriate.
26
+
27
+ ## Enforcement
28
+
29
+ Project maintainers are responsible for clarifying and enforcing standards of
30
+ acceptable behavior and may remove, edit, or reject comments, commits, code,
31
+ issues, and other contributions that are not aligned with this Code of Conduct.
@@ -0,0 +1,83 @@
1
+ # Contributing
2
+
3
+ Thanks for helping improve PatchRail.
4
+
5
+ The easiest contribution is a sanitized CI failure fixture. If you are not sure
6
+ where to start, open the [CI failure fixture issue template](.github/ISSUE_TEMPLATE/ci_failure_fixture.md)
7
+ and include the smallest redacted log excerpt you can share. Maintainers who
8
+ want to try PatchRail before contributing can follow the
9
+ [maintainer pilot guide](docs/pilot-guide.md).
10
+
11
+ ## Sanitized fixture contribution path
12
+
13
+ Use this path when you have a failed CI log and want to turn it into a public
14
+ fixture:
15
+
16
+ 1. Save the raw log locally. Do not commit it.
17
+ 2. Redact the log with PatchRail:
18
+
19
+ ```bash
20
+ patchrail redact --log failed-ci.log > failed-ci.redacted.log
21
+ ```
22
+
23
+ 3. Review `failed-ci.redacted.log` manually and remove anything PatchRail should
24
+ not publish: secrets, emails, private repo names, user names, customer names,
25
+ local home paths, and private URLs.
26
+ 4. Reduce the log to the shortest excerpt that still shows the root cause.
27
+ 5. Add the fixture and expected metadata under `examples/ci-triage/`.
28
+ 6. Run the fixture hygiene gate and benchmark:
29
+
30
+ ```bash
31
+ patchrail ci fixture-check examples/ci-triage --format json
32
+ patchrail ci benchmark examples/ci-triage --format json
33
+ ```
34
+
35
+ 7. Include the fixture-check result, benchmark result, and the useful evidence
36
+ lines in the issue or pull request.
37
+
38
+ If a real log cannot be safely redacted, create a minimal synthetic fixture that
39
+ preserves the error pattern without preserving private identifiers.
40
+
41
+ ## Adding a CI fixture
42
+
43
+ 1. Copy the smallest failing log excerpt that still shows the root cause.
44
+ 2. Redact secrets, emails, private repo names, user names, and local home paths.
45
+ 3. Add the fixture as `examples/ci-triage/<short-name>.log`.
46
+ 4. Add the expected metadata as `examples/ci-triage/<short-name>.expected.json`.
47
+ 5. Run the fixture hygiene gate, benchmark, and tests before opening a pull
48
+ request:
49
+
50
+ ```bash
51
+ uv run --extra dev patchrail ci fixture-check examples/ci-triage --format json
52
+ uv run --extra dev patchrail ci benchmark examples/ci-triage --format json
53
+ uv run --extra dev pytest -q
54
+ ```
55
+
56
+ Expected metadata files use this shape:
57
+
58
+ ```json
59
+ {
60
+ "failure_class": "python_test_failure",
61
+ "minimum_confidence": 0.7
62
+ }
63
+ ```
64
+
65
+ ## Pull request checklist
66
+
67
+ - No secrets or raw private logs added.
68
+ - `patchrail redact` was run first, or the fixture is synthetic.
69
+ - `patchrail ci fixture-check examples/ci-triage --format json` passed.
70
+ - `patchrail ci benchmark examples/ci-triage --format json` passed.
71
+ - No new network access without explicit opt-in.
72
+ - No new write action without human approval.
73
+ - No bounty claiming or mass-commenting behavior.
74
+ - CLI examples still work.
75
+
76
+ ## Development
77
+
78
+ ```bash
79
+ python -m pip install -e ".[dev]"
80
+ uv run --extra dev pytest -q
81
+ uv run --extra dev ruff check .
82
+ uv run --extra dev ruff format --check .
83
+ ```
@@ -0,0 +1,35 @@
1
+ # PatchRail Ethics and Anti-Abuse Policy
2
+
3
+ PatchRail exists to reduce open-source maintainer workload. It is not a tool for
4
+ replacing maintainers, spamming projects, or extracting value from open-source
5
+ communities.
6
+
7
+ ## Principles
8
+
9
+ 1. Maintainers stay in control.
10
+ 2. Local-first processing is the default.
11
+ 3. Write actions require explicit human approval.
12
+ 4. Logs may contain secrets and should be redacted before sharing.
13
+ 5. Funded issues are sustainability signals, not automation targets.
14
+
15
+ ## Non-goals
16
+
17
+ PatchRail does not support:
18
+
19
+ - automatic bounty claiming;
20
+ - mass commenting on issues;
21
+ - automatic pull request submission to third-party repositories;
22
+ - scanning private repositories without permission;
23
+ - bypassing platform limits or terms;
24
+ - ranking work solely by funding amount.
25
+
26
+ ## Funded issue discovery
27
+
28
+ PatchRail may later include read-only funded issue discovery. That feature is
29
+ intended to help maintainers and contributors understand where maintenance work
30
+ is funded. It must not be used to spam projects or submit low-quality work.
31
+
32
+ ## Reporting abuse
33
+
34
+ If you see PatchRail being used abusively, please open a private security report
35
+ or contact the maintainer.
@@ -0,0 +1,21 @@
1
+ # Governance
2
+
3
+ PatchRail is maintained by Pablo Guillén.
4
+
5
+ ## Maintainer responsibilities
6
+
7
+ - Keep the default workflow local-first and human-approved.
8
+ - Review changes that add network access, repository write actions, or workflow
9
+ automation with extra scrutiny.
10
+ - Prefer small, test-backed classifier improvements.
11
+ - Keep anti-abuse policy and security documentation current.
12
+
13
+ ## Contributor ladder
14
+
15
+ 1. Fixture contributor: contributes sanitized CI failure examples.
16
+ 2. Classifier contributor: adds rules with fixtures and tests.
17
+ 3. Workflow contributor: improves CLI, docs, or integration examples.
18
+ 4. Maintainer: reviews releases, security reports, and policy-sensitive changes.
19
+
20
+ Maintainer status is granted manually after sustained, high-quality
21
+ contributions.