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.
- patchrail-0.1.0/.agents/skills/patchrail-ci-triage/SKILL.md +33 -0
- patchrail-0.1.0/.agents/skills/patchrail-release-captain/SKILL.md +36 -0
- patchrail-0.1.0/.agents/skills/patchrail-review-guardrails/SKILL.md +39 -0
- patchrail-0.1.0/.gitignore +12 -0
- patchrail-0.1.0/ADOPTERS.md +37 -0
- patchrail-0.1.0/AGENTS.md +44 -0
- patchrail-0.1.0/CHANGELOG.md +95 -0
- patchrail-0.1.0/CODE_OF_CONDUCT.md +31 -0
- patchrail-0.1.0/CONTRIBUTING.md +83 -0
- patchrail-0.1.0/ETHICS.md +35 -0
- patchrail-0.1.0/GOVERNANCE.md +21 -0
- patchrail-0.1.0/LICENSE +202 -0
- patchrail-0.1.0/PKG-INFO +279 -0
- patchrail-0.1.0/README.md +249 -0
- patchrail-0.1.0/SECURITY.md +48 -0
- patchrail-0.1.0/docs/agent-control-plane.md +332 -0
- patchrail-0.1.0/docs/agent-workflows.md +24 -0
- patchrail-0.1.0/docs/api-reference.md +591 -0
- patchrail-0.1.0/docs/ci-failure-zoo.md +157 -0
- patchrail-0.1.0/docs/ci-janitor.md +75 -0
- patchrail-0.1.0/docs/codex-workflows.md +93 -0
- patchrail-0.1.0/docs/funded-issues-ethics.md +79 -0
- patchrail-0.1.0/docs/github-action.md +106 -0
- patchrail-0.1.0/docs/metrics.md +157 -0
- patchrail-0.1.0/docs/open-source-program-evidence.md +342 -0
- patchrail-0.1.0/docs/openai-open-source-evidence.md +381 -0
- patchrail-0.1.0/docs/pilot-guide.md +207 -0
- patchrail-0.1.0/docs/pilot-request-package.md +137 -0
- patchrail-0.1.0/docs/public-workflow-ledger.md +135 -0
- patchrail-0.1.0/docs/quickstart.md +114 -0
- patchrail-0.1.0/docs/release-process.md +251 -0
- patchrail-0.1.0/docs/release-v0.1.0-evidence.md +169 -0
- patchrail-0.1.0/docs/release-v0.2.0-evidence.md +93 -0
- patchrail-0.1.0/docs/release-v0.3.0-evidence.md +175 -0
- patchrail-0.1.0/docs/release-v0.4.0-evidence.md +90 -0
- patchrail-0.1.0/docs/roadmap.md +92 -0
- patchrail-0.1.0/docs/threat-model.md +68 -0
- patchrail-0.1.0/examples/ci-triage/browser-playwright-navigation-timeout.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/browser-playwright-navigation-timeout.log +8 -0
- patchrail-0.1.0/examples/ci-triage/browser-playwright-webserver-timeout.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/browser-playwright-webserver-timeout.log +4 -0
- patchrail-0.1.0/examples/ci-triage/cypress-browser-launch.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/cypress-browser-launch.log +4 -0
- patchrail-0.1.0/examples/ci-triage/demo-output.md +28 -0
- patchrail-0.1.0/examples/ci-triage/dependency-failure.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/dependency-failure.log +4 -0
- patchrail-0.1.0/examples/ci-triage/docker-base-image-manifest-not-found.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/docker-base-image-manifest-not-found.log +5 -0
- patchrail-0.1.0/examples/ci-triage/docker-buildkit-missing-context.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/docker-buildkit-missing-context.log +5 -0
- patchrail-0.1.0/examples/ci-triage/docker-buildkit-missing-stage.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/docker-buildkit-missing-stage.log +6 -0
- patchrail-0.1.0/examples/ci-triage/docker-compose-healthcheck.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/docker-compose-healthcheck.log +5 -0
- patchrail-0.1.0/examples/ci-triage/docker-compose-missing-env-file.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/docker-compose-missing-env-file.log +3 -0
- patchrail-0.1.0/examples/ci-triage/dotnet-csharp-compile-error.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/dotnet-csharp-compile-error.log +8 -0
- patchrail-0.1.0/examples/ci-triage/dotnet-nuget-package-downgrade.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/dotnet-nuget-package-downgrade.log +4 -0
- patchrail-0.1.0/examples/ci-triage/dotnet-nuget-version-conflict.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/dotnet-nuget-version-conflict.log +7 -0
- patchrail-0.1.0/examples/ci-triage/dotnet-sdk-target-framework-mismatch.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/dotnet-sdk-target-framework-mismatch.log +5 -0
- patchrail-0.1.0/examples/ci-triage/dotnet-xunit-assertion.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/dotnet-xunit-assertion.log +9 -0
- patchrail-0.1.0/examples/ci-triage/github-actions-bad-shell.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/github-actions-bad-shell.log +2 -0
- patchrail-0.1.0/examples/ci-triage/github-actions-invalid-workflow.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/github-actions-invalid-workflow.log +3 -0
- patchrail-0.1.0/examples/ci-triage/github-actions-matrix-expression.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/github-actions-matrix-expression.log +2 -0
- patchrail-0.1.0/examples/ci-triage/github-actions-missing-workflow-ref.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/github-actions-missing-workflow-ref.log +2 -0
- patchrail-0.1.0/examples/ci-triage/github-actions-permission-id-token.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/github-actions-permission-id-token.log +2 -0
- patchrail-0.1.0/examples/ci-triage/github-actions-permission.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/github-actions-permission.log +3 -0
- patchrail-0.1.0/examples/ci-triage/github-actions-token-permission.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/github-actions-token-permission.log +2 -0
- patchrail-0.1.0/examples/ci-triage/github-actions-unresolved-action.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/github-actions-unresolved-action.log +3 -0
- patchrail-0.1.0/examples/ci-triage/github-actions-unresolved-checkout.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/github-actions-unresolved-checkout.log +2 -0
- patchrail-0.1.0/examples/ci-triage/github-actions-yaml-syntax.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/github-actions-yaml-syntax.log +2 -0
- patchrail-0.1.0/examples/ci-triage/go-assertion-fail.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/go-assertion-fail.log +4 -0
- patchrail-0.1.0/examples/ci-triage/go-compile-failure.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/go-compile-failure.log +4 -0
- patchrail-0.1.0/examples/ci-triage/go-compile-interface.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/go-compile-interface.log +4 -0
- patchrail-0.1.0/examples/ci-triage/go-data-race-test.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/go-data-race-test.log +4 -0
- patchrail-0.1.0/examples/ci-triage/go-module-missing-symbol.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/go-module-missing-symbol.log +4 -0
- patchrail-0.1.0/examples/ci-triage/go-panic-in-test.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/go-panic-in-test.log +4 -0
- patchrail-0.1.0/examples/ci-triage/go-timeout-race.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/go-timeout-race.log +5 -0
- patchrail-0.1.0/examples/ci-triage/go-timeout.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/go-timeout.log +3 -0
- patchrail-0.1.0/examples/ci-triage/go-undefined-function.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/go-undefined-function.log +4 -0
- patchrail-0.1.0/examples/ci-triage/go-undefined-symbol.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/go-undefined-symbol.log +5 -0
- patchrail-0.1.0/examples/ci-triage/java-gradle-dependency-resolution.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/java-gradle-dependency-resolution.log +10 -0
- patchrail-0.1.0/examples/ci-triage/java-gradle-no-tests-found.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/java-gradle-no-tests-found.log +6 -0
- patchrail-0.1.0/examples/ci-triage/java-gradle-toolchain-version.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/java-gradle-toolchain-version.log +9 -0
- patchrail-0.1.0/examples/ci-triage/java-gradle-unsupported-major-version.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/java-gradle-unsupported-major-version.log +4 -0
- patchrail-0.1.0/examples/ci-triage/java-maven-compilation.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/java-maven-compilation.log +7 -0
- patchrail-0.1.0/examples/ci-triage/javascript-biome-format.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/javascript-biome-format.log +3 -0
- patchrail-0.1.0/examples/ci-triage/javascript-eslint-a11y.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/javascript-eslint-a11y.log +5 -0
- patchrail-0.1.0/examples/ci-triage/javascript-eslint-config-parser-drift.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/javascript-eslint-config-parser-drift.log +6 -0
- patchrail-0.1.0/examples/ci-triage/javascript-eslint-import-order.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/javascript-eslint-import-order.log +5 -0
- patchrail-0.1.0/examples/ci-triage/javascript-eslint-no-undef.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/javascript-eslint-no-undef.log +5 -0
- patchrail-0.1.0/examples/ci-triage/javascript-eslint-react-hooks.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/javascript-eslint-react-hooks.log +5 -0
- patchrail-0.1.0/examples/ci-triage/javascript-eslint-unused-vars.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/javascript-eslint-unused-vars.log +4 -0
- patchrail-0.1.0/examples/ci-triage/javascript-eslint.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/javascript-eslint.log +4 -0
- patchrail-0.1.0/examples/ci-triage/javascript-prettier-format.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/javascript-prettier-format.log +4 -0
- patchrail-0.1.0/examples/ci-triage/javascript-prettier-generated-client-drift.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/javascript-prettier-generated-client-drift.log +6 -0
- patchrail-0.1.0/examples/ci-triage/javascript-prettier.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/javascript-prettier.log +4 -0
- patchrail-0.1.0/examples/ci-triage/node-lockfile-drift.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/node-lockfile-drift.log +4 -0
- patchrail-0.1.0/examples/ci-triage/node-npm-ci-lock-outdated.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/node-npm-ci-lock-outdated.log +2 -0
- patchrail-0.1.0/examples/ci-triage/node-npm-engine-mismatch.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/node-npm-engine-mismatch.log +4 -0
- patchrail-0.1.0/examples/ci-triage/node-npm-eresolve-react.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/node-npm-eresolve-react.log +3 -0
- patchrail-0.1.0/examples/ci-triage/node-npm-missing-lockfile.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/node-npm-missing-lockfile.log +4 -0
- patchrail-0.1.0/examples/ci-triage/node-npm-missing-package-lock.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/node-npm-missing-package-lock.log +2 -0
- patchrail-0.1.0/examples/ci-triage/node-npm-workspace-lock-drift.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/node-npm-workspace-lock-drift.log +5 -0
- patchrail-0.1.0/examples/ci-triage/node-peer-dependency.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/node-peer-dependency.log +3 -0
- patchrail-0.1.0/examples/ci-triage/node-pnpm-catalog-drift.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/node-pnpm-catalog-drift.log +4 -0
- patchrail-0.1.0/examples/ci-triage/node-pnpm-frozen-lockfile.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/node-pnpm-frozen-lockfile.log +2 -0
- patchrail-0.1.0/examples/ci-triage/node-pnpm-lockfile-config-drift.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/node-pnpm-lockfile-config-drift.log +4 -0
- patchrail-0.1.0/examples/ci-triage/node-pnpm-peer-conflict-react.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/node-pnpm-peer-conflict-react.log +4 -0
- patchrail-0.1.0/examples/ci-triage/node-pnpm-peer-optional.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/node-pnpm-peer-optional.log +3 -0
- patchrail-0.1.0/examples/ci-triage/node-pnpm-workspace-protocol.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/node-pnpm-workspace-protocol.log +2 -0
- patchrail-0.1.0/examples/ci-triage/node-yarn-constraints-peer-drift.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/node-yarn-constraints-peer-drift.log +4 -0
- patchrail-0.1.0/examples/ci-triage/node-yarn-immutable-cache-drift.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/node-yarn-immutable-cache-drift.log +4 -0
- patchrail-0.1.0/examples/ci-triage/node-yarn-immutable-install.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/node-yarn-immutable-install.log +2 -0
- patchrail-0.1.0/examples/ci-triage/node-yarn-peer-dependency.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/node-yarn-peer-dependency.log +4 -0
- patchrail-0.1.0/examples/ci-triage/node-yarn-peer-version.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/node-yarn-peer-version.log +2 -0
- patchrail-0.1.0/examples/ci-triage/php-composer-lock-drift.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/php-composer-lock-drift.log +6 -0
- patchrail-0.1.0/examples/ci-triage/php-composer-missing-package.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/php-composer-missing-package.log +6 -0
- patchrail-0.1.0/examples/ci-triage/php-composer-platform-version.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/php-composer-platform-version.log +9 -0
- patchrail-0.1.0/examples/ci-triage/php-phpunit-autoload-class-not-found.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/php-phpunit-autoload-class-not-found.log +5 -0
- patchrail-0.1.0/examples/ci-triage/php-phpunit-failure.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/php-phpunit-failure.log +10 -0
- patchrail-0.1.0/examples/ci-triage/playwright-missing-browsers.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/playwright-missing-browsers.log +5 -0
- patchrail-0.1.0/examples/ci-triage/playwright-selector-timeout.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/playwright-selector-timeout.log +5 -0
- patchrail-0.1.0/examples/ci-triage/python-hatch-build-dependency.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-hatch-build-dependency.log +4 -0
- patchrail-0.1.0/examples/ci-triage/python-module-import.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-module-import.log +3 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-conflicting-constraints.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-conflicting-constraints.log +6 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-constraint-marker-drift.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-constraint-marker-drift.log +6 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-constraint-pin-drift.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-constraint-pin-drift.log +5 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-extra-conflict.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-extra-conflict.log +6 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-index-timeout-backtrack.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-index-timeout-backtrack.log +3 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-marker-py310.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-marker-py310.log +3 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-missing-musllinux-wheel.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-missing-musllinux-wheel.log +5 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-no-matching-distribution.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-no-matching-distribution.log +3 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-platform-arm64-wheel.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-platform-arm64-wheel.log +3 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-platform-wheel.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-platform-wheel.log +4 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-prerelease-range.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-prerelease-range.log +3 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-python-version-marker.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-python-version-marker.log +4 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-tools-backtracking.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-tools-backtracking.log +3 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-tools-conflict.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-tools-conflict.log +4 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-tools-extra-marker-conflict.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-tools-extra-marker-conflict.log +6 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-yanked-only-candidate.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-yanked-only-candidate.log +4 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-yanked-release.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-pip-yanked-release.log +4 -0
- patchrail-0.1.0/examples/ci-triage/python-poetry-python-range-drift.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-poetry-python-range-drift.log +5 -0
- patchrail-0.1.0/examples/ci-triage/python-poetry-solver-conflict.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-poetry-solver-conflict.log +4 -0
- patchrail-0.1.0/examples/ci-triage/python-poetry-transitive-conflict.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-poetry-transitive-conflict.log +3 -0
- patchrail-0.1.0/examples/ci-triage/python-pytest-env-token-redacted.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-pytest-env-token-redacted.log +4 -0
- patchrail-0.1.0/examples/ci-triage/python-test-assert-json.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-test-assert-json.log +3 -0
- patchrail-0.1.0/examples/ci-triage/python-test-failure.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-test-failure.log +3 -0
- patchrail-0.1.0/examples/ci-triage/python-test-fixture-timeout.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-test-fixture-timeout.log +3 -0
- patchrail-0.1.0/examples/ci-triage/python-test-import-mode.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-test-import-mode.log +2 -0
- patchrail-0.1.0/examples/ci-triage/python-test-module-not-found.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-test-module-not-found.log +2 -0
- patchrail-0.1.0/examples/ci-triage/python-test-parametrize-regression.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-test-parametrize-regression.log +3 -0
- patchrail-0.1.0/examples/ci-triage/python-test-snapshot-diff.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-test-snapshot-diff.log +3 -0
- patchrail-0.1.0/examples/ci-triage/python-tox-constraint-conflict.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-tox-constraint-conflict.log +7 -0
- patchrail-0.1.0/examples/ci-triage/python-uv-constraint-backtrack-fail.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-uv-constraint-backtrack-fail.log +5 -0
- patchrail-0.1.0/examples/ci-triage/python-uv-extra-marker-conflict.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-uv-extra-marker-conflict.log +3 -0
- patchrail-0.1.0/examples/ci-triage/python-uv-extra-python-marker-drift.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-uv-extra-python-marker-drift.log +6 -0
- patchrail-0.1.0/examples/ci-triage/python-uv-resolution-no-solution.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/python-uv-resolution-no-solution.log +3 -0
- patchrail-0.1.0/examples/ci-triage/ruby-bundler-conflict.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/ruby-bundler-conflict.log +5 -0
- patchrail-0.1.0/examples/ci-triage/ruby-bundler-missing-gem.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/ruby-bundler-missing-gem.log +5 -0
- patchrail-0.1.0/examples/ci-triage/ruby-bundler-platform-lock.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/ruby-bundler-platform-lock.log +4 -0
- patchrail-0.1.0/examples/ci-triage/ruby-gem-native-extension.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/ruby-gem-native-extension.log +4 -0
- patchrail-0.1.0/examples/ci-triage/ruby-rake-aborted.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/ruby-rake-aborted.log +5 -0
- patchrail-0.1.0/examples/ci-triage/ruby-rspec-failure.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/ruby-rspec-failure.log +6 -0
- patchrail-0.1.0/examples/ci-triage/ruby-ruby-version-lock.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/ruby-ruby-version-lock.log +5 -0
- patchrail-0.1.0/examples/ci-triage/ruby-yanked-gem.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/ruby-yanked-gem.log +5 -0
- patchrail-0.1.0/examples/ci-triage/rust-compile-error.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/rust-compile-error.log +4 -0
- patchrail-0.1.0/examples/ci-triage/rust-e0277-trait-bound.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/rust-e0277-trait-bound.log +3 -0
- patchrail-0.1.0/examples/ci-triage/rust-e0308-mismatched-types.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/rust-e0308-mismatched-types.log +4 -0
- patchrail-0.1.0/examples/ci-triage/rust-e0382-moved-value.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/rust-e0382-moved-value.log +4 -0
- patchrail-0.1.0/examples/ci-triage/rust-e0502-borrow-checker.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/rust-e0502-borrow-checker.log +3 -0
- patchrail-0.1.0/examples/ci-triage/rust-e0599-method-not-found.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/rust-e0599-method-not-found.log +3 -0
- patchrail-0.1.0/examples/ci-triage/rust-panic-thread.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/rust-panic-thread.log +3 -0
- patchrail-0.1.0/examples/ci-triage/rust-snapshot-failure.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/rust-snapshot-failure.log +3 -0
- patchrail-0.1.0/examples/ci-triage/rust-test-failure.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/rust-test-failure.log +4 -0
- patchrail-0.1.0/examples/ci-triage/rust-trait-bound-error.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/rust-trait-bound-error.log +4 -0
- patchrail-0.1.0/examples/ci-triage/security-cargo-audit-rustsec.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/security-cargo-audit-rustsec.log +9 -0
- patchrail-0.1.0/examples/ci-triage/security-gosec-findings.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/security-gosec-findings.log +7 -0
- patchrail-0.1.0/examples/ci-triage/security-npm-audit-critical.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/security-npm-audit-critical.log +8 -0
- patchrail-0.1.0/examples/ci-triage/security-pip-audit-vulnerability.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/security-pip-audit-vulnerability.log +6 -0
- patchrail-0.1.0/examples/ci-triage/security-trivy-container-critical.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/security-trivy-container-critical.log +7 -0
- patchrail-0.1.0/examples/ci-triage/typescript-generated-client-schema-drift.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-generated-client-schema-drift.log +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-import-type-drift.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-import-type-drift.log +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-jsx-prop-mismatch.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-jsx-prop-mismatch.log +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-missing-name.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-missing-name.log +3 -0
- patchrail-0.1.0/examples/ci-triage/typescript-path-alias-drift.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-path-alias-drift.log +3 -0
- patchrail-0.1.0/examples/ci-triage/typescript-route-param-mismatch.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-route-param-mismatch.log +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-schema-drift.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-schema-drift.log +3 -0
- patchrail-0.1.0/examples/ci-triage/typescript-ts2304-missing-global.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-ts2304-missing-global.log +3 -0
- patchrail-0.1.0/examples/ci-triage/typescript-ts2322-prop.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-ts2322-prop.log +3 -0
- patchrail-0.1.0/examples/ci-triage/typescript-ts2345-route-param.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-ts2345-route-param.log +2 -0
- patchrail-0.1.0/examples/ci-triage/typescript-ts2416-class-override.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-ts2416-class-override.log +2 -0
- patchrail-0.1.0/examples/ci-triage/typescript-ts2551-import-name.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-ts2551-import-name.log +3 -0
- patchrail-0.1.0/examples/ci-triage/typescript-ts2741-required-prop.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-ts2741-required-prop.log +2 -0
- patchrail-0.1.0/examples/ci-triage/typescript-ts2769-overload.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-ts2769-overload.log +3 -0
- patchrail-0.1.0/examples/ci-triage/typescript-ts7006-implicit-any.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-ts7006-implicit-any.log +3 -0
- patchrail-0.1.0/examples/ci-triage/typescript-tsconfig-lib-drift.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-tsconfig-lib-drift.log +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-typecheck.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-typecheck.log +3 -0
- patchrail-0.1.0/examples/ci-triage/typescript-vite-env-drift.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-vite-env-drift.log +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-zod-schema-drift.expected.json +4 -0
- patchrail-0.1.0/examples/ci-triage/typescript-zod-schema-drift.log +4 -0
- patchrail-0.1.0/examples/control-plane-demo/README.md +23 -0
- patchrail-0.1.0/examples/control-plane-demo/demo-output.md +30 -0
- patchrail-0.1.0/examples/funded-issues-readonly/README.md +71 -0
- patchrail-0.1.0/examples/funded-issues-readonly/client-profile-python.json +10 -0
- patchrail-0.1.0/examples/funded-issues-readonly/competition-observations.json +34 -0
- patchrail-0.1.0/examples/funded-issues-readonly/demo-summary.expected.json +31 -0
- patchrail-0.1.0/examples/funded-issues-readonly/issues.json +46 -0
- patchrail-0.1.0/examples/funded-issues-readonly/payout-effort-observations.json +35 -0
- patchrail-0.1.0/examples/funded-issues-readonly/provider-github-export.json +37 -0
- patchrail-0.1.0/examples/funded-issues-readonly/run_demo.py +209 -0
- patchrail-0.1.0/examples/funded-issues-readonly/staleness-observations.json +32 -0
- patchrail-0.1.0/examples/funded-issues-readonly/testability-observations.json +34 -0
- patchrail-0.1.0/examples/github-action/README.md +96 -0
- patchrail-0.1.0/examples/github-action/patchrail-ci-triage-artifact/ci-report.md +23 -0
- patchrail-0.1.0/examples/github-action/patchrail-ci-triage-artifact/ci-result.json +26 -0
- patchrail-0.1.0/examples/github-action/patchrail-ci-triage-artifact/doctor.json +19 -0
- patchrail-0.1.0/examples/github-action/patchrail-ci-triage-artifact/fixture-benchmark-summary.md +26 -0
- patchrail-0.1.0/examples/github-action/patchrail-ci-triage-artifact/fixture-benchmark.json +1476 -0
- patchrail-0.1.0/examples/local-agent-queue/README.md +257 -0
- patchrail-0.1.0/examples/local-agent-queue/demo-summary.expected.json +76 -0
- patchrail-0.1.0/examples/local-agent-queue/run_demo.py +523 -0
- patchrail-0.1.0/examples/pilot-outcome/README.md +103 -0
- patchrail-0.1.0/examples/pilot-outcome/patchrail-own-repo-20260603.md +29 -0
- patchrail-0.1.0/examples/pilot-outcome/patchrail-own-repo-20260603.summary.json +39 -0
- patchrail-0.1.0/pyproject.toml +79 -0
- patchrail-0.1.0/schemas/application_dossier.schema.json +305 -0
- patchrail-0.1.0/schemas/ci_result.schema.json +120 -0
- patchrail-0.1.0/schemas/queue_audit_event.schema.json +44 -0
- patchrail-0.1.0/schemas/queue_audit_summary.schema.json +169 -0
- patchrail-0.1.0/schemas/queue_gate_report.schema.json +158 -0
- patchrail-0.1.0/schemas/queue_policy_resolution.schema.json +188 -0
- patchrail-0.1.0/schemas/queue_policy_scan.schema.json +175 -0
- patchrail-0.1.0/schemas/queue_proposal.schema.json +61 -0
- patchrail-0.1.0/schemas/queue_review.schema.json +218 -0
- patchrail-0.1.0/schemas/queue_status.schema.json +179 -0
- patchrail-0.1.0/schemas/queue_work_item.schema.json +64 -0
- patchrail-0.1.0/schemas/reviewer_quick_check_artifacts.schema.json +104 -0
- patchrail-0.1.0/scripts/release_readiness.py +206 -0
- patchrail-0.1.0/scripts/reviewer_quick_check.py +13 -0
- patchrail-0.1.0/scripts/update_ci_evidence_reference.py +110 -0
- patchrail-0.1.0/src/patchrail/__init__.py +7 -0
- patchrail-0.1.0/src/patchrail/__main__.py +7 -0
- patchrail-0.1.0/src/patchrail/ci/__init__.py +7 -0
- patchrail-0.1.0/src/patchrail/ci/classify.py +888 -0
- patchrail-0.1.0/src/patchrail/cli.py +8566 -0
- patchrail-0.1.0/src/patchrail/funded_issues/__init__.py +138 -0
- patchrail-0.1.0/src/patchrail/funded_issues/algora_board.py +240 -0
- patchrail-0.1.0/src/patchrail/funded_issues/blocklist.py +112 -0
- patchrail-0.1.0/src/patchrail/funded_issues/discovery.py +4091 -0
- patchrail-0.1.0/src/patchrail/funded_issues/importers.py +316 -0
- patchrail-0.1.0/src/patchrail/funded_issues/source_noise.py +349 -0
- patchrail-0.1.0/src/patchrail/funded_issues/store.py +459 -0
- patchrail-0.1.0/src/patchrail/queue/__init__.py +75 -0
- patchrail-0.1.0/src/patchrail/queue/server.py +273 -0
- patchrail-0.1.0/src/patchrail/queue/status.py +756 -0
- patchrail-0.1.0/src/patchrail/queue/store.py +600 -0
- patchrail-0.1.0/src/patchrail/reviewer_quick_check.py +650 -0
- patchrail-0.1.0/src/patchrail/schemas/__init__.py +1 -0
- patchrail-0.1.0/src/patchrail/schemas/application-dossier.v1.schema.json +305 -0
- patchrail-0.1.0/src/patchrail/schemas/ci-benchmark.v1.schema.json +174 -0
- patchrail-0.1.0/src/patchrail/schemas/ci-fixture-check.v1.schema.json +122 -0
- patchrail-0.1.0/src/patchrail/schemas/ci-pilot-metrics.v1.schema.json +164 -0
- patchrail-0.1.0/src/patchrail/schemas/ci-pilot-summary.v1.schema.json +146 -0
- patchrail-0.1.0/src/patchrail/schemas/ci-result.v1.schema.json +133 -0
- patchrail-0.1.0/src/patchrail/schemas/funded-issues-client-report.v1.schema.json +524 -0
- patchrail-0.1.0/src/patchrail/schemas/funded-issues-recheck-queue.v1.schema.json +333 -0
- patchrail-0.1.0/src/patchrail/schemas/funded-issues-recheck-summary.v1.schema.json +136 -0
- patchrail-0.1.0/src/patchrail/schemas/funded-issues-report.v1.schema.json +836 -0
- patchrail-0.1.0/src/patchrail/schemas/funded-issues-shortlist.v1.schema.json +953 -0
- patchrail-0.1.0/src/patchrail/schemas/funded-issues-store-status.v1.schema.json +96 -0
- patchrail-0.1.0/src/patchrail/schemas/funded-issues-store.v1.schema.json +117 -0
- patchrail-0.1.0/src/patchrail/schemas/queue-audit-event.v1.schema.json +44 -0
- patchrail-0.1.0/src/patchrail/schemas/queue-audit-summary.v1.schema.json +169 -0
- patchrail-0.1.0/src/patchrail/schemas/queue-gate-report.v1.schema.json +158 -0
- patchrail-0.1.0/src/patchrail/schemas/queue-policy-resolution.v1.schema.json +188 -0
- patchrail-0.1.0/src/patchrail/schemas/queue-policy-scan.v1.schema.json +175 -0
- patchrail-0.1.0/src/patchrail/schemas/queue-proposal.v1.schema.json +61 -0
- patchrail-0.1.0/src/patchrail/schemas/queue-review.v1.schema.json +218 -0
- patchrail-0.1.0/src/patchrail/schemas/queue-status.v1.schema.json +179 -0
- patchrail-0.1.0/src/patchrail/schemas/queue-work-item.v1.schema.json +64 -0
- patchrail-0.1.0/src/patchrail/schemas/reviewer-quick-check-artifacts.v1.schema.json +104 -0
- patchrail-0.1.0/src/patchrail/web_metrics.py +649 -0
- patchrail-0.1.0/tests/test_ci_classify_expansion.py +572 -0
- patchrail-0.1.0/tests/test_ci_cli.py +1567 -0
- patchrail-0.1.0/tests/test_funded_issues_algora_board.py +292 -0
- patchrail-0.1.0/tests/test_funded_issues_apply_recheck.py +368 -0
- patchrail-0.1.0/tests/test_funded_issues_blocklist.py +170 -0
- patchrail-0.1.0/tests/test_funded_issues_cli.py +2670 -0
- patchrail-0.1.0/tests/test_funded_issues_client_report.py +361 -0
- patchrail-0.1.0/tests/test_funded_issues_competition.py +212 -0
- patchrail-0.1.0/tests/test_funded_issues_payout_effort.py +230 -0
- patchrail-0.1.0/tests/test_funded_issues_source_noise.py +528 -0
- patchrail-0.1.0/tests/test_funded_issues_staleness.py +222 -0
- patchrail-0.1.0/tests/test_funded_issues_store.py +313 -0
- patchrail-0.1.0/tests/test_funded_issues_testability.py +206 -0
- patchrail-0.1.0/tests/test_public_workflows.py +2600 -0
- patchrail-0.1.0/tests/test_queue_cli.py +1654 -0
- patchrail-0.1.0/tests/test_queue_http_api.py +142 -0
- patchrail-0.1.0/tests/test_web_metrics_cli.py +305 -0
- 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,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.
|