patchrail 0.1.1__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {patchrail-0.1.1 → patchrail-0.3.0}/.gitignore +3 -0
- patchrail-0.3.0/CHANGELOG.md +217 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/CONTRIBUTING.md +6 -1
- patchrail-0.3.0/PKG-INFO +221 -0
- patchrail-0.3.0/README.md +190 -0
- patchrail-0.3.0/actions/ci-triage/action.yml +105 -0
- patchrail-0.3.0/actions/ci-triage/scripts/ci_triage_action_outputs.py +221 -0
- patchrail-0.3.0/examples/ci-triage/appveyor-dotnet-test-xunit.log +10 -0
- patchrail-0.3.0/examples/ci-triage/azure-pipelines-dotnet-test.log +18 -0
- patchrail-0.3.0/examples/ci-triage/bitbucket-pipelines-composer-platform.log +10 -0
- patchrail-0.3.0/examples/ci-triage/bitbucket-pipelines-npm-eresolve.log +18 -0
- patchrail-0.3.0/examples/ci-triage/bitbucket-pipelines-vue-tsc-typecheck.log +14 -0
- patchrail-0.3.0/examples/ci-triage/buildkite-docker-build.log +8 -0
- patchrail-0.3.0/examples/ci-triage/buildkite-pnpm-frozen-lockfile.log +11 -0
- patchrail-0.3.0/examples/ci-triage/cargo-test-panic-failure.log +11 -0
- patchrail-0.3.0/examples/ci-triage/circleci-bundler-native-extension.log +15 -0
- patchrail-0.3.0/examples/ci-triage/circleci-checkout-lfs-failure.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/circleci-checkout-lfs-failure.log +9 -0
- patchrail-0.3.0/examples/ci-triage/circleci-oom-exit-137.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/circleci-oom-exit-137.log +12 -0
- patchrail-0.3.0/examples/ci-triage/cirrus-ci-cargo-test-panic.log +18 -0
- patchrail-0.3.0/examples/ci-triage/cloudbuild-golangci-lint-failure.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/cloudbuild-golangci-lint-failure.log +6 -0
- patchrail-0.3.0/examples/ci-triage/codebuild-jest-test-failure.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/codebuild-jest-test-failure.log +19 -0
- patchrail-0.3.0/examples/ci-triage/codefresh-trivy-critical.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/codefresh-trivy-critical.log +15 -0
- patchrail-0.3.0/examples/ci-triage/concourse-ci-pip-resolution.log +11 -0
- patchrail-0.3.0/examples/ci-triage/db-migration-alembic-revision.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/db-migration-alembic-revision.log +8 -0
- patchrail-0.3.0/examples/ci-triage/db-migration-prisma-drift.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/db-migration-prisma-drift.log +8 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/demo-output.md +1 -3
- patchrail-0.3.0/examples/ci-triage/docker-compose-missing-env-file.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/docs-build-docusaurus-broken-links.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/docs-build-docusaurus-broken-links.log +21 -0
- patchrail-0.3.0/examples/ci-triage/docs-build-mkdocs-strict.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/docs-build-mkdocs-strict.log +7 -0
- patchrail-0.3.0/examples/ci-triage/docs-build-sphinx-toctree.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/docs-build-sphinx-toctree.log +18 -0
- patchrail-0.3.0/examples/ci-triage/dotnet-nuget-package-downgrade.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/dotnet-sdk-target-framework-mismatch.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/drone-ci-go-test-panic.log +12 -0
- patchrail-0.3.0/examples/ci-triage/elixir-mix-compile-error.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/elixir-mix-compile-error.log +12 -0
- patchrail-0.3.0/examples/ci-triage/elixir-mix-exunit-failure.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/elixir-mix-exunit-failure.log +15 -0
- patchrail-0.3.0/examples/ci-triage/github-actions-go-test-failure.log +8 -0
- patchrail-0.3.0/examples/ci-triage/github-actions-sbt-scala-compile.log +14 -0
- patchrail-0.3.0/examples/ci-triage/gitlab-ci-bundler-incompatible.log +16 -0
- patchrail-0.3.0/examples/ci-triage/gitlab-ci-gradle-kotlin-compile.log +15 -0
- patchrail-0.3.0/examples/ci-triage/gitlab-ci-job-timeout.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/gitlab-ci-job-timeout.log +11 -0
- patchrail-0.3.0/examples/ci-triage/gitlab-ci-network-dns-failure.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/gitlab-ci-network-dns-failure.log +12 -0
- patchrail-0.3.0/examples/ci-triage/go-integration-test-network-noise.log +14 -0
- patchrail-0.3.0/examples/ci-triage/go-timeout-race.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/go-timeout.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/go-undefined-function.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/govulncheck-vulnerability.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/govulncheck-vulnerability.log +14 -0
- patchrail-0.3.0/examples/ci-triage/harness-ci-tsc-noemit-ts2322.log +14 -0
- patchrail-0.3.0/examples/ci-triage/helm-lint-schema-and-kubeversion.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/helm-lint-schema-and-kubeversion.log +6 -0
- patchrail-0.3.0/examples/ci-triage/helm-upgrade-template-nil-pointer.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/helm-upgrade-template-nil-pointer.log +2 -0
- patchrail-0.3.0/examples/ci-triage/java-gradle-unsupported-major-version.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/java-maven-compilation.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/jenkins-maven-compilation.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/jenkins-maven-compilation.log +13 -0
- patchrail-0.3.0/examples/ci-triage/jenkins-pytest-collection-error.log +14 -0
- patchrail-0.3.0/examples/ci-triage/k8s-deploy-admission-webhook.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/k8s-deploy-admission-webhook.log +2 -0
- patchrail-0.3.0/examples/ci-triage/k8s-deploy-immutable-field.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/k8s-deploy-immutable-field.log +4 -0
- patchrail-0.3.0/examples/ci-triage/nightwatch-element-not-found.log +10 -0
- patchrail-0.3.0/examples/ci-triage/node-yarn-immutable-install.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/node-yarn-peer-version.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/npm-ci-lockfile-mismatch-failure.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/npm-ci-lockfile-mismatch-failure.log +12 -0
- patchrail-0.3.0/examples/ci-triage/php-phpunit-autoload-class-not-found.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/playwright-e2e-timeout-failure.log +14 -0
- patchrail-0.3.0/examples/ci-triage/playwright-missing-browsers.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/playwright-selector-timeout.expected.json +4 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-hatch-build-dependency.log +1 -1
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-no-matching-distribution.log +1 -1
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-prerelease-range.log +1 -1
- patchrail-0.3.0/examples/ci-triage/python-test-snapshot-diff.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/python-uv-resolution-no-solution.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/ruby-rspec-parallel-failure.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/ruby-rspec-parallel-failure.log +10 -0
- patchrail-0.3.0/examples/ci-triage/ruby-ruby-version-lock.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/ruby-yanked-gem.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/rust-snapshot-failure.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/rust-test-failure.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/semaphore-ci-pytest-assertion.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/semaphore-ci-pytest-assertion.log +17 -0
- patchrail-0.3.0/examples/ci-triage/shell-lint-shellcheck.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/shell-lint-shellcheck.log +10 -0
- patchrail-0.3.0/examples/ci-triage/shell-lint-shfmt.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/shell-lint-shfmt.log +12 -0
- patchrail-0.3.0/examples/ci-triage/teamcity-maven-compilation.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/teamcity-maven-compilation.log +12 -0
- patchrail-0.3.0/examples/ci-triage/terraform-plan-undeclared-resource-failure.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/terraform-plan-undeclared-resource-failure.log +15 -0
- patchrail-0.3.0/examples/ci-triage/travis-bundler-native-extension.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/travis-bundler-native-extension.log +12 -0
- patchrail-0.3.0/examples/ci-triage/trivy-scan-critical-failure.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/trivy-scan-critical-failure.log +16 -0
- patchrail-0.3.0/examples/ci-triage/tsc-noemit-typecheck-failure.log +14 -0
- patchrail-0.3.0/examples/ci-triage/typescript-typecheck.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/typescript-vite-env-drift.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/typescript-zod-schema-drift.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/webdriverio-session-timeout.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/webdriverio-session-timeout.log +9 -0
- patchrail-0.3.0/examples/ci-triage/woodpecker-ci-docker-build-copy.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/woodpecker-ci-docker-build-copy.log +9 -0
- patchrail-0.3.0/examples/ci-triage/xcode-swift-compile-error.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/xcode-swift-compile-error.log +14 -0
- patchrail-0.3.0/examples/ci-triage/xcode-swiftpm-resolution-failure.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/xcode-swiftpm-resolution-failure.log +10 -0
- patchrail-0.3.0/examples/ci-triage/xcode-xctest-failure.expected.json +4 -0
- patchrail-0.3.0/examples/ci-triage/xcode-xctest-failure.log +13 -0
- patchrail-0.3.0/examples/ci-triage-action/README.md +121 -0
- patchrail-0.3.0/examples/ci-triage-action/sample/ci-report.md +17 -0
- patchrail-0.3.0/examples/ci-triage-action/sample/ci-result.json +20 -0
- patchrail-0.3.0/examples/ci-triage-action/sample/github-output.txt +16 -0
- patchrail-0.3.0/examples/ci-triage-action/sample/step-summary.md +8 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/pyproject.toml +4 -5
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/__init__.py +1 -1
- patchrail-0.3.0/src/patchrail/ci/__init__.py +7 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/ci/classify.py +379 -35
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/cli.py +790 -212
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/funded_issues/discovery.py +3 -3
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/application-dossier.v1.schema.json +1 -1
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/ci-result.v1.schema.json +9 -1
- {patchrail-0.1.1 → patchrail-0.3.0}/uv.lock +1 -1
- patchrail-0.1.1/CHANGELOG.md +0 -113
- patchrail-0.1.1/PKG-INFO +0 -324
- patchrail-0.1.1/README.md +0 -294
- patchrail-0.1.1/docs/agent-control-plane.md +0 -332
- patchrail-0.1.1/docs/agent-workflows.md +0 -24
- patchrail-0.1.1/docs/api-reference.md +0 -591
- patchrail-0.1.1/docs/assets/ci-explain-demo.gif +0 -0
- patchrail-0.1.1/docs/assets/ci-explain-demo.png +0 -0
- patchrail-0.1.1/docs/ci-failure-zoo.md +0 -157
- patchrail-0.1.1/docs/ci-janitor.md +0 -75
- patchrail-0.1.1/docs/codex-workflows.md +0 -93
- patchrail-0.1.1/docs/fix/README.md +0 -45
- patchrail-0.1.1/docs/fix/artifact-or-cache-failure.md +0 -42
- patchrail-0.1.1/docs/fix/browser-test-failure.md +0 -42
- patchrail-0.1.1/docs/fix/ci-job-timeout.md +0 -41
- patchrail-0.1.1/docs/fix/code-coverage-threshold.md +0 -42
- patchrail-0.1.1/docs/fix/cpp-build-failure.md +0 -42
- patchrail-0.1.1/docs/fix/docker-build-failure.md +0 -42
- patchrail-0.1.1/docs/fix/dotnet-build-failure.md +0 -42
- patchrail-0.1.1/docs/fix/git-checkout-failure.md +0 -42
- patchrail-0.1.1/docs/fix/git-merge-conflict.md +0 -42
- patchrail-0.1.1/docs/fix/github-actions-workflow.md +0 -41
- patchrail-0.1.1/docs/fix/go-lint.md +0 -42
- patchrail-0.1.1/docs/fix/go-test-failure.md +0 -41
- patchrail-0.1.1/docs/fix/java-build-failure.md +0 -42
- patchrail-0.1.1/docs/fix/javascript-lint.md +0 -41
- patchrail-0.1.1/docs/fix/network-transient-failure.md +0 -42
- patchrail-0.1.1/docs/fix/node-dependency-install.md +0 -42
- patchrail-0.1.1/docs/fix/node-test-failure.md +0 -42
- patchrail-0.1.1/docs/fix/php-composer-failure.md +0 -42
- patchrail-0.1.1/docs/fix/python-dependency-resolution.md +0 -42
- patchrail-0.1.1/docs/fix/python-lint.md +0 -42
- patchrail-0.1.1/docs/fix/python-test-failure.md +0 -41
- patchrail-0.1.1/docs/fix/python-type-check.md +0 -42
- patchrail-0.1.1/docs/fix/release-publish-failure.md +0 -42
- patchrail-0.1.1/docs/fix/ruby-bundle-failure.md +0 -42
- patchrail-0.1.1/docs/fix/runner-resource-exhaustion.md +0 -42
- patchrail-0.1.1/docs/fix/rust-lint.md +0 -41
- patchrail-0.1.1/docs/fix/rust-test-failure.md +0 -41
- patchrail-0.1.1/docs/fix/secrets-or-permissions-failure.md +0 -42
- patchrail-0.1.1/docs/fix/security-scan-failure.md +0 -42
- patchrail-0.1.1/docs/fix/terraform-iac-failure.md +0 -42
- patchrail-0.1.1/docs/fix/typescript-typecheck.md +0 -42
- patchrail-0.1.1/docs/funded-issues-ethics.md +0 -79
- patchrail-0.1.1/docs/github-action.md +0 -106
- patchrail-0.1.1/docs/metrics.md +0 -157
- patchrail-0.1.1/docs/open-source-program-evidence.md +0 -342
- patchrail-0.1.1/docs/openai-open-source-evidence.md +0 -381
- patchrail-0.1.1/docs/pilot-guide.md +0 -208
- patchrail-0.1.1/docs/pilot-request-package.md +0 -138
- patchrail-0.1.1/docs/public-workflow-ledger.md +0 -135
- patchrail-0.1.1/docs/quickstart.md +0 -119
- patchrail-0.1.1/docs/release-process.md +0 -251
- patchrail-0.1.1/docs/release-v0.1.0-evidence.md +0 -169
- patchrail-0.1.1/docs/release-v0.2.0-evidence.md +0 -93
- patchrail-0.1.1/docs/release-v0.3.0-evidence.md +0 -175
- patchrail-0.1.1/docs/release-v0.4.0-evidence.md +0 -90
- patchrail-0.1.1/docs/roadmap.md +0 -92
- patchrail-0.1.1/docs/threat-model.md +0 -68
- patchrail-0.1.1/schemas/application_dossier.schema.json +0 -305
- patchrail-0.1.1/schemas/ci_result.schema.json +0 -120
- patchrail-0.1.1/schemas/queue_audit_event.schema.json +0 -44
- patchrail-0.1.1/schemas/queue_audit_summary.schema.json +0 -169
- patchrail-0.1.1/schemas/queue_gate_report.schema.json +0 -158
- patchrail-0.1.1/schemas/queue_policy_resolution.schema.json +0 -188
- patchrail-0.1.1/schemas/queue_policy_scan.schema.json +0 -175
- patchrail-0.1.1/schemas/queue_proposal.schema.json +0 -61
- patchrail-0.1.1/schemas/queue_review.schema.json +0 -218
- patchrail-0.1.1/schemas/queue_status.schema.json +0 -179
- patchrail-0.1.1/schemas/queue_work_item.schema.json +0 -64
- patchrail-0.1.1/schemas/reviewer_quick_check_artifacts.schema.json +0 -104
- patchrail-0.1.1/scripts/release_readiness.py +0 -206
- patchrail-0.1.1/scripts/reviewer_quick_check.py +0 -13
- patchrail-0.1.1/scripts/update_ci_evidence_reference.py +0 -110
- patchrail-0.1.1/src/patchrail/ci/__init__.py +0 -7
- patchrail-0.1.1/src/patchrail/web_metrics.py +0 -653
- patchrail-0.1.1/tests/test_ci_classify_expansion.py +0 -600
- patchrail-0.1.1/tests/test_ci_cli.py +0 -1644
- patchrail-0.1.1/tests/test_funded_issues_algora_board.py +0 -288
- patchrail-0.1.1/tests/test_funded_issues_apply_recheck.py +0 -368
- patchrail-0.1.1/tests/test_funded_issues_blocklist.py +0 -168
- patchrail-0.1.1/tests/test_funded_issues_cli.py +0 -4880
- patchrail-0.1.1/tests/test_funded_issues_client_report.py +0 -361
- patchrail-0.1.1/tests/test_funded_issues_competition.py +0 -212
- patchrail-0.1.1/tests/test_funded_issues_payout_effort.py +0 -230
- patchrail-0.1.1/tests/test_funded_issues_source_noise.py +0 -528
- patchrail-0.1.1/tests/test_funded_issues_staleness.py +0 -222
- patchrail-0.1.1/tests/test_funded_issues_store.py +0 -1276
- patchrail-0.1.1/tests/test_funded_issues_testability.py +0 -206
- patchrail-0.1.1/tests/test_public_workflows.py +0 -2618
- patchrail-0.1.1/tests/test_queue_cli.py +0 -1654
- patchrail-0.1.1/tests/test_queue_http_api.py +0 -142
- patchrail-0.1.1/tests/test_web_metrics_cli.py +0 -305
- {patchrail-0.1.1 → patchrail-0.3.0}/.agents/skills/patchrail-ci-triage/SKILL.md +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/.agents/skills/patchrail-release-captain/SKILL.md +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/.agents/skills/patchrail-review-guardrails/SKILL.md +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/ADOPTERS.md +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/AGENTS.md +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/CODE_OF_CONDUCT.md +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/ETHICS.md +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/GOVERNANCE.md +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/LICENSE +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/SECURITY.md +0 -0
- /patchrail-0.1.1/examples/ci-triage/dotnet-nuget-package-downgrade.expected.json → /patchrail-0.3.0/examples/ci-triage/appveyor-dotnet-test-xunit.expected.json +0 -0
- /patchrail-0.1.1/examples/ci-triage/dotnet-sdk-target-framework-mismatch.expected.json → /patchrail-0.3.0/examples/ci-triage/azure-pipelines-dotnet-test.expected.json +0 -0
- /patchrail-0.1.1/examples/ci-triage/php-composer-missing-package.expected.json → /patchrail-0.3.0/examples/ci-triage/bitbucket-pipelines-composer-platform.expected.json +0 -0
- /patchrail-0.1.1/examples/ci-triage/node-npm-ci-lock-outdated.expected.json → /patchrail-0.3.0/examples/ci-triage/bitbucket-pipelines-npm-eresolve.expected.json +0 -0
- /patchrail-0.1.1/examples/ci-triage/typescript-generated-client-schema-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/bitbucket-pipelines-vue-tsc-typecheck.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/browser-playwright-navigation-timeout.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/browser-playwright-navigation-timeout.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/browser-playwright-webserver-timeout.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/browser-playwright-webserver-timeout.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/docker-base-image-manifest-not-found.expected.json → /patchrail-0.3.0/examples/ci-triage/buildkite-docker-build.expected.json +0 -0
- /patchrail-0.1.1/examples/ci-triage/node-npm-engine-mismatch.expected.json → /patchrail-0.3.0/examples/ci-triage/buildkite-pnpm-frozen-lockfile.expected.json +0 -0
- /patchrail-0.1.1/examples/ci-triage/rust-compile-error.expected.json → /patchrail-0.3.0/examples/ci-triage/cargo-test-panic-failure.expected.json +0 -0
- /patchrail-0.1.1/examples/ci-triage/ruby-bundler-conflict.expected.json → /patchrail-0.3.0/examples/ci-triage/circleci-bundler-native-extension.expected.json +0 -0
- /patchrail-0.1.1/examples/ci-triage/rust-e0277-trait-bound.expected.json → /patchrail-0.3.0/examples/ci-triage/cirrus-ci-cargo-test-panic.expected.json +0 -0
- /patchrail-0.1.1/examples/ci-triage/python-pip-constraint-pin-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/concourse-ci-pip-resolution.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/cypress-browser-launch.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/cypress-browser-launch.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/dependency-failure.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/dependency-failure.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/docker-buildkit-missing-context.expected.json → /patchrail-0.3.0/examples/ci-triage/docker-base-image-manifest-not-found.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/docker-base-image-manifest-not-found.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/docker-buildkit-missing-stage.expected.json → /patchrail-0.3.0/examples/ci-triage/docker-buildkit-missing-context.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/docker-buildkit-missing-context.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/docker-compose-healthcheck.expected.json → /patchrail-0.3.0/examples/ci-triage/docker-buildkit-missing-stage.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/docker-buildkit-missing-stage.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/docker-compose-missing-env-file.expected.json → /patchrail-0.3.0/examples/ci-triage/docker-compose-healthcheck.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/docker-compose-healthcheck.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/docker-compose-missing-env-file.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/dotnet-csharp-compile-error.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/dotnet-csharp-compile-error.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/dotnet-nuget-package-downgrade.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/dotnet-nuget-version-conflict.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/dotnet-nuget-version-conflict.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/dotnet-sdk-target-framework-mismatch.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/dotnet-xunit-assertion.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/dotnet-xunit-assertion.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/go-assertion-fail.expected.json → /patchrail-0.3.0/examples/ci-triage/drone-ci-go-test-panic.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-bad-shell.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-bad-shell.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/go-compile-interface.expected.json → /patchrail-0.3.0/examples/ci-triage/github-actions-go-test-failure.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-invalid-workflow.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-invalid-workflow.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-matrix-expression.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-matrix-expression.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-missing-workflow-ref.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-missing-workflow-ref.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-permission-id-token.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-permission-id-token.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-permission.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-permission.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/java-gradle-dependency-resolution.expected.json → /patchrail-0.3.0/examples/ci-triage/github-actions-sbt-scala-compile.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-token-permission.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-token-permission.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-unresolved-action.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-unresolved-action.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-unresolved-checkout.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-unresolved-checkout.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-yaml-syntax.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/github-actions-yaml-syntax.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/ruby-bundler-missing-gem.expected.json → /patchrail-0.3.0/examples/ci-triage/gitlab-ci-bundler-incompatible.expected.json +0 -0
- /patchrail-0.1.1/examples/ci-triage/java-gradle-no-tests-found.expected.json → /patchrail-0.3.0/examples/ci-triage/gitlab-ci-gradle-kotlin-compile.expected.json +0 -0
- /patchrail-0.1.1/examples/ci-triage/go-data-race-test.expected.json → /patchrail-0.3.0/examples/ci-triage/go-assertion-fail.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-assertion-fail.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-compile-failure.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-compile-failure.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/go-module-missing-symbol.expected.json → /patchrail-0.3.0/examples/ci-triage/go-compile-interface.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-compile-interface.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/go-panic-in-test.expected.json → /patchrail-0.3.0/examples/ci-triage/go-data-race-test.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-data-race-test.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/go-timeout-race.expected.json → /patchrail-0.3.0/examples/ci-triage/go-integration-test-network-noise.expected.json +0 -0
- /patchrail-0.1.1/examples/ci-triage/go-timeout.expected.json → /patchrail-0.3.0/examples/ci-triage/go-module-missing-symbol.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-module-missing-symbol.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/go-undefined-function.expected.json → /patchrail-0.3.0/examples/ci-triage/go-panic-in-test.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-panic-in-test.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-timeout-race.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-timeout.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-undefined-function.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-undefined-symbol.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/go-undefined-symbol.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/typescript-import-type-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/harness-ci-tsc-noemit-ts2322.expected.json +0 -0
- /patchrail-0.1.1/examples/ci-triage/java-gradle-toolchain-version.expected.json → /patchrail-0.3.0/examples/ci-triage/java-gradle-dependency-resolution.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/java-gradle-dependency-resolution.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/java-gradle-unsupported-major-version.expected.json → /patchrail-0.3.0/examples/ci-triage/java-gradle-no-tests-found.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/java-gradle-no-tests-found.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/java-maven-compilation.expected.json → /patchrail-0.3.0/examples/ci-triage/java-gradle-toolchain-version.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/java-gradle-toolchain-version.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/java-gradle-unsupported-major-version.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/java-maven-compilation.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-biome-format.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-biome-format.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-a11y.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-a11y.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-config-parser-drift.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-config-parser-drift.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-import-order.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-import-order.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-no-undef.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-no-undef.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-react-hooks.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-react-hooks.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-unused-vars.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint-unused-vars.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-eslint.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-prettier-format.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-prettier-format.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-prettier-generated-client-drift.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-prettier-generated-client-drift.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-prettier.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/javascript-prettier.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/python-module-import.expected.json → /patchrail-0.3.0/examples/ci-triage/jenkins-pytest-collection-error.expected.json +0 -0
- /patchrail-0.1.1/examples/ci-triage/playwright-missing-browsers.expected.json → /patchrail-0.3.0/examples/ci-triage/nightwatch-element-not-found.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-lockfile-drift.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-lockfile-drift.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/node-npm-eresolve-react.expected.json → /patchrail-0.3.0/examples/ci-triage/node-npm-ci-lock-outdated.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-npm-ci-lock-outdated.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/node-npm-missing-package-lock.expected.json → /patchrail-0.3.0/examples/ci-triage/node-npm-engine-mismatch.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-npm-engine-mismatch.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/node-npm-workspace-lock-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/node-npm-eresolve-react.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-npm-eresolve-react.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-npm-missing-lockfile.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-npm-missing-lockfile.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/node-peer-dependency.expected.json → /patchrail-0.3.0/examples/ci-triage/node-npm-missing-package-lock.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-npm-missing-package-lock.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/node-pnpm-catalog-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/node-npm-workspace-lock-drift.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-npm-workspace-lock-drift.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/node-pnpm-frozen-lockfile.expected.json → /patchrail-0.3.0/examples/ci-triage/node-peer-dependency.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-peer-dependency.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/node-pnpm-lockfile-config-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/node-pnpm-catalog-drift.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-pnpm-catalog-drift.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/node-pnpm-peer-conflict-react.expected.json → /patchrail-0.3.0/examples/ci-triage/node-pnpm-frozen-lockfile.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-pnpm-frozen-lockfile.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/node-pnpm-peer-optional.expected.json → /patchrail-0.3.0/examples/ci-triage/node-pnpm-lockfile-config-drift.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-pnpm-lockfile-config-drift.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/node-pnpm-workspace-protocol.expected.json → /patchrail-0.3.0/examples/ci-triage/node-pnpm-peer-conflict-react.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-pnpm-peer-conflict-react.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/node-yarn-constraints-peer-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/node-pnpm-peer-optional.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-pnpm-peer-optional.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/node-yarn-immutable-cache-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/node-pnpm-workspace-protocol.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-pnpm-workspace-protocol.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/node-yarn-immutable-install.expected.json → /patchrail-0.3.0/examples/ci-triage/node-yarn-constraints-peer-drift.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-yarn-constraints-peer-drift.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/node-yarn-peer-version.expected.json → /patchrail-0.3.0/examples/ci-triage/node-yarn-immutable-cache-drift.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-yarn-immutable-cache-drift.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-yarn-immutable-install.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-yarn-peer-dependency.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-yarn-peer-dependency.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/node-yarn-peer-version.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/php-composer-lock-drift.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/php-composer-lock-drift.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/php-phpunit-autoload-class-not-found.expected.json → /patchrail-0.3.0/examples/ci-triage/php-composer-missing-package.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/php-composer-missing-package.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/php-composer-platform-version.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/php-composer-platform-version.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/php-phpunit-autoload-class-not-found.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/php-phpunit-failure.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/php-phpunit-failure.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/playwright-selector-timeout.expected.json → /patchrail-0.3.0/examples/ci-triage/playwright-e2e-timeout-failure.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/playwright-missing-browsers.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/playwright-selector-timeout.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-hatch-build-dependency.expected.json +0 -0
- /patchrail-0.1.1/examples/ci-triage/python-pytest-env-token-redacted.expected.json → /patchrail-0.3.0/examples/ci-triage/python-module-import.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-module-import.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-conflicting-constraints.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-conflicting-constraints.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-constraint-marker-drift.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-constraint-marker-drift.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/python-pip-index-timeout-backtrack.expected.json → /patchrail-0.3.0/examples/ci-triage/python-pip-constraint-pin-drift.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-constraint-pin-drift.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-extra-conflict.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-extra-conflict.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/python-pip-marker-py310.expected.json → /patchrail-0.3.0/examples/ci-triage/python-pip-index-timeout-backtrack.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-index-timeout-backtrack.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/python-pip-platform-arm64-wheel.expected.json → /patchrail-0.3.0/examples/ci-triage/python-pip-marker-py310.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-marker-py310.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-missing-musllinux-wheel.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-missing-musllinux-wheel.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-no-matching-distribution.expected.json +0 -0
- /patchrail-0.1.1/examples/ci-triage/python-pip-tools-backtracking.expected.json → /patchrail-0.3.0/examples/ci-triage/python-pip-platform-arm64-wheel.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-platform-arm64-wheel.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-platform-wheel.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-platform-wheel.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-prerelease-range.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-python-version-marker.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-python-version-marker.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/python-pip-tools-conflict.expected.json → /patchrail-0.3.0/examples/ci-triage/python-pip-tools-backtracking.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-tools-backtracking.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/python-pip-tools-extra-marker-conflict.expected.json → /patchrail-0.3.0/examples/ci-triage/python-pip-tools-conflict.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-tools-conflict.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/python-pip-yanked-only-candidate.expected.json → /patchrail-0.3.0/examples/ci-triage/python-pip-tools-extra-marker-conflict.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-tools-extra-marker-conflict.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/python-poetry-solver-conflict.expected.json → /patchrail-0.3.0/examples/ci-triage/python-pip-yanked-only-candidate.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-yanked-only-candidate.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-yanked-release.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pip-yanked-release.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-poetry-python-range-drift.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-poetry-python-range-drift.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/python-poetry-transitive-conflict.expected.json → /patchrail-0.3.0/examples/ci-triage/python-poetry-solver-conflict.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-poetry-solver-conflict.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/python-uv-extra-marker-conflict.expected.json → /patchrail-0.3.0/examples/ci-triage/python-poetry-transitive-conflict.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-poetry-transitive-conflict.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/python-test-assert-json.expected.json → /patchrail-0.3.0/examples/ci-triage/python-pytest-env-token-redacted.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-pytest-env-token-redacted.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/python-test-failure.expected.json → /patchrail-0.3.0/examples/ci-triage/python-test-assert-json.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-test-assert-json.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/python-test-fixture-timeout.expected.json → /patchrail-0.3.0/examples/ci-triage/python-test-failure.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-test-failure.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/python-test-import-mode.expected.json → /patchrail-0.3.0/examples/ci-triage/python-test-fixture-timeout.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-test-fixture-timeout.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/python-test-module-not-found.expected.json → /patchrail-0.3.0/examples/ci-triage/python-test-import-mode.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-test-import-mode.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/python-test-parametrize-regression.expected.json → /patchrail-0.3.0/examples/ci-triage/python-test-module-not-found.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-test-module-not-found.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/python-test-snapshot-diff.expected.json → /patchrail-0.3.0/examples/ci-triage/python-test-parametrize-regression.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-test-parametrize-regression.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-test-snapshot-diff.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-tox-constraint-conflict.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-tox-constraint-conflict.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-uv-constraint-backtrack-fail.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-uv-constraint-backtrack-fail.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/python-uv-resolution-no-solution.expected.json → /patchrail-0.3.0/examples/ci-triage/python-uv-extra-marker-conflict.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-uv-extra-marker-conflict.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-uv-extra-python-marker-drift.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-uv-extra-python-marker-drift.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/python-uv-resolution-no-solution.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/ruby-bundler-platform-lock.expected.json → /patchrail-0.3.0/examples/ci-triage/ruby-bundler-conflict.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/ruby-bundler-conflict.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/ruby-gem-native-extension.expected.json → /patchrail-0.3.0/examples/ci-triage/ruby-bundler-missing-gem.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/ruby-bundler-missing-gem.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/ruby-rake-aborted.expected.json → /patchrail-0.3.0/examples/ci-triage/ruby-bundler-platform-lock.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/ruby-bundler-platform-lock.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/ruby-rspec-failure.expected.json → /patchrail-0.3.0/examples/ci-triage/ruby-gem-native-extension.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/ruby-gem-native-extension.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/ruby-ruby-version-lock.expected.json → /patchrail-0.3.0/examples/ci-triage/ruby-rake-aborted.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/ruby-rake-aborted.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/ruby-yanked-gem.expected.json → /patchrail-0.3.0/examples/ci-triage/ruby-rspec-failure.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/ruby-rspec-failure.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/ruby-ruby-version-lock.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/ruby-yanked-gem.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/rust-e0308-mismatched-types.expected.json → /patchrail-0.3.0/examples/ci-triage/rust-compile-error.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/rust-compile-error.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/rust-e0382-moved-value.expected.json → /patchrail-0.3.0/examples/ci-triage/rust-e0277-trait-bound.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/rust-e0277-trait-bound.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/rust-e0502-borrow-checker.expected.json → /patchrail-0.3.0/examples/ci-triage/rust-e0308-mismatched-types.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/rust-e0308-mismatched-types.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/rust-e0599-method-not-found.expected.json → /patchrail-0.3.0/examples/ci-triage/rust-e0382-moved-value.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/rust-e0382-moved-value.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/rust-panic-thread.expected.json → /patchrail-0.3.0/examples/ci-triage/rust-e0502-borrow-checker.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/rust-e0502-borrow-checker.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/rust-snapshot-failure.expected.json → /patchrail-0.3.0/examples/ci-triage/rust-e0599-method-not-found.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/rust-e0599-method-not-found.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/rust-test-failure.expected.json → /patchrail-0.3.0/examples/ci-triage/rust-panic-thread.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/rust-panic-thread.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/rust-snapshot-failure.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/rust-test-failure.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/rust-trait-bound-error.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/rust-trait-bound-error.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/security-cargo-audit-rustsec.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/security-cargo-audit-rustsec.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/security-gosec-findings.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/security-gosec-findings.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/security-npm-audit-critical.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/security-npm-audit-critical.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/security-pip-audit-vulnerability.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/security-pip-audit-vulnerability.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/security-trivy-container-critical.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/security-trivy-container-critical.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/typescript-jsx-prop-mismatch.expected.json → /patchrail-0.3.0/examples/ci-triage/tsc-noemit-typecheck-failure.expected.json +0 -0
- /patchrail-0.1.1/examples/ci-triage/typescript-path-alias-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-generated-client-schema-drift.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-generated-client-schema-drift.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/typescript-route-param-mismatch.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-import-type-drift.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-import-type-drift.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/typescript-ts2304-missing-global.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-jsx-prop-mismatch.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-jsx-prop-mismatch.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-missing-name.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-missing-name.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/typescript-ts2322-prop.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-path-alias-drift.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-path-alias-drift.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/typescript-ts2345-route-param.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-route-param-mismatch.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-route-param-mismatch.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-schema-drift.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-schema-drift.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/typescript-ts2416-class-override.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-ts2304-missing-global.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-ts2304-missing-global.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/typescript-ts2551-import-name.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-ts2322-prop.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-ts2322-prop.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/typescript-ts2741-required-prop.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-ts2345-route-param.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-ts2345-route-param.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/typescript-ts2769-overload.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-ts2416-class-override.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-ts2416-class-override.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/typescript-ts7006-implicit-any.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-ts2551-import-name.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-ts2551-import-name.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/typescript-tsconfig-lib-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-ts2741-required-prop.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-ts2741-required-prop.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/typescript-typecheck.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-ts2769-overload.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-ts2769-overload.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/typescript-vite-env-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-ts7006-implicit-any.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-ts7006-implicit-any.log +0 -0
- /patchrail-0.1.1/examples/ci-triage/typescript-zod-schema-drift.expected.json → /patchrail-0.3.0/examples/ci-triage/typescript-tsconfig-lib-drift.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-tsconfig-lib-drift.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-typecheck.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-vite-env-drift.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/ci-triage/typescript-zod-schema-drift.log +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/control-plane-demo/README.md +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/control-plane-demo/demo-output.md +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/funded-issues-readonly/README.md +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/funded-issues-readonly/client-profile-python.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/funded-issues-readonly/competition-observations.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/funded-issues-readonly/demo-summary.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/funded-issues-readonly/issues.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/funded-issues-readonly/payout-effort-observations.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/funded-issues-readonly/provider-github-export.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/funded-issues-readonly/run_demo.py +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/funded-issues-readonly/staleness-observations.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/funded-issues-readonly/testability-observations.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/github-action/README.md +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/github-action/patchrail-ci-triage-artifact/ci-report.md +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/github-action/patchrail-ci-triage-artifact/ci-result.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/github-action/patchrail-ci-triage-artifact/doctor.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/github-action/patchrail-ci-triage-artifact/fixture-benchmark-summary.md +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/github-action/patchrail-ci-triage-artifact/fixture-benchmark.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/local-agent-queue/README.md +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/local-agent-queue/demo-summary.expected.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/local-agent-queue/run_demo.py +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/pilot-outcome/README.md +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/pilot-outcome/patchrail-own-repo-20260603.md +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/examples/pilot-outcome/patchrail-own-repo-20260603.summary.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/__main__.py +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/funded_issues/__init__.py +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/funded_issues/algora_board.py +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/funded_issues/blocklist.py +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/funded_issues/importers.py +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/funded_issues/source_noise.py +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/funded_issues/store.py +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/queue/__init__.py +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/queue/server.py +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/queue/status.py +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/queue/store.py +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/reviewer_quick_check.py +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/__init__.py +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/ci-benchmark.v1.schema.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/ci-fixture-check.v1.schema.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/ci-pilot-metrics.v1.schema.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/ci-pilot-summary.v1.schema.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/funded-issues-client-report.v1.schema.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/funded-issues-recheck-queue.v1.schema.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/funded-issues-recheck-summary.v1.schema.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/funded-issues-report.v1.schema.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/funded-issues-shortlist.v1.schema.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/funded-issues-store-status.v1.schema.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/funded-issues-store.v1.schema.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/queue-audit-event.v1.schema.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/queue-audit-summary.v1.schema.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/queue-gate-report.v1.schema.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/queue-policy-resolution.v1.schema.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/queue-policy-scan.v1.schema.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/queue-proposal.v1.schema.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/queue-review.v1.schema.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/queue-status.v1.schema.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/queue-work-item.v1.schema.json +0 -0
- {patchrail-0.1.1 → patchrail-0.3.0}/src/patchrail/schemas/reviewer-quick-check-artifacts.v1.schema.json +0 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.3.0 - 2026-07-09
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- Deterministic Go test failures are no longer misread as
|
|
8
|
+
`network_transient_failure` when their logs contain incidental
|
|
9
|
+
network-shaped noise (`dial tcp`, `connection refused`, `context deadline
|
|
10
|
+
exceeded`, `i/o timeout`). The classifier now defers a broad transient-network
|
|
11
|
+
match built *entirely* from these ambiguous signals to the concrete failure
|
|
12
|
+
when one also matched, so a real bug isn't mislabeled "just retry". Genuine
|
|
13
|
+
outages still classify as transient because they trip a terminal signal (DNS
|
|
14
|
+
resolution, rate limit, gateway error, TLS handshake, or a git remote hang-up)
|
|
15
|
+
outside the ambiguous set. `go_test_failure` also now recognises the canonical
|
|
16
|
+
`--- FAIL:` marker. New `go-integration-test-network-noise` fixture guards this,
|
|
17
|
+
bringing the benchmark zoo to 208 cases.
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
- `patchrail --version` now prints the installed version (e.g. `patchrail 0.3.0`)
|
|
22
|
+
and exits, so a maintainer can confirm which release they are running without
|
|
23
|
+
invoking a subcommand.
|
|
24
|
+
- `java_build_failure` now also recognises **sbt** (Scala on the JVM). sbt prints
|
|
25
|
+
none of the Maven/Gradle banners the rule keyed on, so a genuine
|
|
26
|
+
`(project / Test / compileIncremental) Compilation failed` — or an
|
|
27
|
+
`sbt.TestsFailedException` — previously fell through to `unknown`. New signals
|
|
28
|
+
cover the sbt session banner, incremental-compile failure, Scala
|
|
29
|
+
`not found: value`/`not found: type` errors, and the sbt test-failure
|
|
30
|
+
exception; the reproduction command now suggests `sbt test`. New sanitized
|
|
31
|
+
`github-actions-sbt-scala-compile` fixture (modelled on a real
|
|
32
|
+
`scalatest/scalatest` GitHub Actions run) guards this, bringing the benchmark
|
|
33
|
+
zoo to 209 cases.
|
|
34
|
+
- New sanitized `ruby-rspec-parallel-failure` fixture captures a real
|
|
35
|
+
`rubocop/rubocop` RSpec failure tail (parallel/turbo_tests summary with
|
|
36
|
+
`pending` before `failures`), bringing the benchmark zoo to 207 cases.
|
|
37
|
+
- New `xcode_build_failure` class classifies Apple-platform build and test
|
|
38
|
+
failures from `xcodebuild`, `swift build`/`swift test`, and Swift Package
|
|
39
|
+
Manager — Swift compile errors, missing modules (`error: no such module`),
|
|
40
|
+
unresolved package dependencies, and XCTest failures (`** BUILD FAILED **`,
|
|
41
|
+
`** TEST FAILED **`, `The following build commands failed:`). Backed by three
|
|
42
|
+
sanitized fixtures in `examples/ci-triage/`, bringing the benchmark zoo to 169
|
|
43
|
+
cases and the classifier to 40 failure classes.
|
|
44
|
+
- New `docs_build_failure` class classifies documentation-site build failures
|
|
45
|
+
from Sphinx (`sphinx-build -W` warnings-as-errors, missing toctree entries),
|
|
46
|
+
MkDocs (`mkdocs build --strict` broken links), and Docusaurus (`docusaurus
|
|
47
|
+
build` broken links). Backed by three sanitized fixtures in
|
|
48
|
+
`examples/ci-triage/`, bringing the benchmark zoo to 166 cases.
|
|
49
|
+
- `patchrail ci classes` lists every supported failure class with its likely
|
|
50
|
+
subsystem and reproduction command (plus the `unknown` fallback), in stable
|
|
51
|
+
order. Supports `--format text|json|markdown` and `--out`, so the set of
|
|
52
|
+
classes the classifier can diagnose is discoverable from the CLI instead of
|
|
53
|
+
only in the source. Closes #150.
|
|
54
|
+
|
|
55
|
+
### Fixed
|
|
56
|
+
|
|
57
|
+
- Real RSpec failures now classify as `ruby_bundle_failure` instead of
|
|
58
|
+
`unknown`. RSpec prints its rerun list as `rspec ./path/to/thing_spec.rb[…]`
|
|
59
|
+
and its summary as `N examples, [K pending, ]M failures` (rspec, parallel and
|
|
60
|
+
turbo_tests) — neither of which the old `rspec .*failures?` pattern matched,
|
|
61
|
+
so a pasted spec-failure tail without bundler setup lines fell through to
|
|
62
|
+
`unknown`. Two shape-matching patterns were added to the rule. Surfaced by
|
|
63
|
+
dogfooding a real `rubocop/rubocop` CI run.
|
|
64
|
+
- Python CI logs no longer misclassify as `python_dependency_resolution` just
|
|
65
|
+
because they run `python -m pip install`. That bare command line was a
|
|
66
|
+
detection pattern, but it appears in almost every Python CI job regardless of
|
|
67
|
+
what actually failed, so any failing Python job with no stronger signal was
|
|
68
|
+
reported as a dependency-resolution conflict with the misleading "pin or relax
|
|
69
|
+
the conflicting dependency range" advice. Dogfooded against a real
|
|
70
|
+
`pandas-dev/pandas` 32-bit CI run whose `pip install` failed at
|
|
71
|
+
`metadata-generation-failed` (a package build error, `Rust not found`) — it was
|
|
72
|
+
reported as `python_dependency_resolution` (0.53). The boilerplate pattern is
|
|
73
|
+
dropped, so a build/metadata failure with no genuine resolution signal now
|
|
74
|
+
stays honest (`unknown`) instead. To keep recall on real conflicts, two
|
|
75
|
+
genuine pip signals were added: pip's actual Requires-Python wording
|
|
76
|
+
(`requires a different Python:`) and its no-distribution `(from versions: …)`
|
|
77
|
+
line; the three synthetic no-matching-distribution fixtures were updated to
|
|
78
|
+
include the real `(from versions: …)` output pip prints. Benchmark stays at
|
|
79
|
+
206/206 top-1 with all confidence floors met; the bundled dependency-failure
|
|
80
|
+
demo now reports 0.89 (three genuine resolution signals) instead of 0.95.
|
|
81
|
+
Regression covered in `tests/`.
|
|
82
|
+
- `patchrail ci explain`/`classify` no longer hangs on large CI logs. The
|
|
83
|
+
`github_actions_workflow` rule paired two unanchored lookaheads
|
|
84
|
+
(`(?=[\s\S]*.github/workflows/…)(?=[\s\S]*Invalid workflow file…)`); under
|
|
85
|
+
`re.search` that compound is retried at every start position, so a log that
|
|
86
|
+
mentions `.github/workflows/*.yml` (every `actions/checkout` step does) but not
|
|
87
|
+
a workflow-error phrase drove the matcher into O(n²) backtracking and pegged a
|
|
88
|
+
core at 100% for minutes. Dogfooded against a real `cli/cli` Go CI run
|
|
89
|
+
(~200 KB) that never returned. The lookahead is now anchored with `\A` so it is
|
|
90
|
+
evaluated once, in linear time; the "workflow path AND error phrase present"
|
|
91
|
+
signal is unchanged. Regression covered in `tests/`.
|
|
92
|
+
- Rust CI failures no longer misclassify as `node_dependency_install`,
|
|
93
|
+
`dotnet_build_failure`, or `java_build_failure` because of generic boilerplate.
|
|
94
|
+
The `Swatinem/rust-cache` action prints `Lockfiles considered:` (which matched
|
|
95
|
+
the old bare `lockfile` node signal) and cargo prints `build failed, waiting
|
|
96
|
+
for other jobs to finish` (which matched the case-insensitive `Build FAILED` /
|
|
97
|
+
`BUILD FAILED` banners). The node lockfile signal now requires a whole-word
|
|
98
|
+
`lockfile`, and the .NET/Gradle banners are matched case-sensitively so they
|
|
99
|
+
fire only on the tool's actual `Build FAILED` / `BUILD FAILED` output. A real
|
|
100
|
+
`tokio-rs/tokio` rustdoc failure (`error[E0433]`) now classifies as
|
|
101
|
+
`rust_test_failure`. Regression covered in `tests/`.
|
|
102
|
+
- Sharper reproduce commands for three failure classes surfaced by `patchrail ci
|
|
103
|
+
classes` / `ci explain`. `node_script_missing` no longer suggests `npm run
|
|
104
|
+
build` (which just re-triggers the "missing script" error) and instead runs
|
|
105
|
+
`npm run` to list the scripts `package.json` actually defines, so you can
|
|
106
|
+
compare against the one your workflow calls. `security_scan_failure` names the
|
|
107
|
+
concrete scanners to rerun locally (`npm audit`, `pip-audit`, `cargo audit`,
|
|
108
|
+
`trivy fs .`, `bandit -r .`, `semgrep --config auto`) instead of the generic
|
|
109
|
+
"rerun the failing security scan locally". `github_actions_workflow` points at
|
|
110
|
+
`actionlint .github/workflows/`, which validates workflow syntax and action
|
|
111
|
+
refs locally, rather than only printing the YAML back with `gh workflow view`.
|
|
112
|
+
- Real GitHub Actions logs no longer misclassify as `git_checkout_failure` when
|
|
113
|
+
checkout actually succeeded. The rule dropped three boilerplate signals that
|
|
114
|
+
appear in almost every Actions log regardless of outcome — the `actions/checkout`
|
|
115
|
+
setup step, the `git submodule foreach` post-job cleanup line, and a bare
|
|
116
|
+
`git-lfs` mention — keeping only genuine checkout/clone/submodule/LFS *failure*
|
|
117
|
+
markers (`fatal: ...`, `Failed to fetch submodule`, `smudge filter lfs failed`,
|
|
118
|
+
`error downloading object`, …). Dogfooded against a real `pallets/flask` CI run
|
|
119
|
+
whose pytest jobs failed on a conftest `SyntaxError` but were reported as a git
|
|
120
|
+
checkout problem.
|
|
121
|
+
- `python_test_failure` now also recognizes pytest collection failures
|
|
122
|
+
(`ImportError while loading conftest ...`, `N errors during collection`), so a
|
|
123
|
+
broken `conftest.py` or import-time error surfaces as a test failure with the
|
|
124
|
+
`python -m pytest -q` reproduce line instead of falling through to a weaker or
|
|
125
|
+
wrong class.
|
|
126
|
+
- `patchrail ci explain` and `ci classify` now fail clearly on empty or
|
|
127
|
+
whitespace-only input (from `--log` or stdin) instead of silently reporting
|
|
128
|
+
`failure_class: unknown` with confidence `0.15` and exit code `0`. They print
|
|
129
|
+
`log input is empty` to stderr, exit with code `2`, and write nothing to
|
|
130
|
+
`--out`, so a bad shell redirect is no longer mistaken for an unclassifiable
|
|
131
|
+
log. Closes #151.
|
|
132
|
+
- Added `node_script_missing` to the published `ci-result` schema enum; the
|
|
133
|
+
classifier could already emit it, so a valid classification previously failed
|
|
134
|
+
schema validation for downstream consumers. A new test guards that every rule
|
|
135
|
+
class is declared in the schema enum.
|
|
136
|
+
|
|
137
|
+
## 0.2.0 - 2026-07-07
|
|
138
|
+
|
|
139
|
+
### Removed
|
|
140
|
+
|
|
141
|
+
- Removed the commercial `Guide:` link that `ci explain` appended to text and
|
|
142
|
+
Markdown reports, and the matching guide URL outputs from the GitHub Action.
|
|
143
|
+
Reports now end after the classification; per-class remediation write-ups
|
|
144
|
+
live in-repo under `docs/fix/`.
|
|
145
|
+
- Removed commercial product links and campaign-tagged URLs from the README,
|
|
146
|
+
docs, and the PyPI project URL list.
|
|
147
|
+
- Removed the distribution and web-metrics tooling (`ci share-links` and the
|
|
148
|
+
web metrics commands and store). PatchRail no longer ships link-tracking or
|
|
149
|
+
distribution helpers.
|
|
150
|
+
|
|
151
|
+
### Changed
|
|
152
|
+
|
|
153
|
+
- `funded-issues` is now explicitly labeled experimental. Discovery commands
|
|
154
|
+
default to safe-only filtering, and risky entries require an explicit
|
|
155
|
+
`--include-risky` flag.
|
|
156
|
+
- Rewrote the README around the open-source CI triage workflow: quickstart
|
|
157
|
+
with real classifier output, honest feature table, local-first safety
|
|
158
|
+
section, and the fixture contribution path.
|
|
159
|
+
|
|
160
|
+
### Added
|
|
161
|
+
|
|
162
|
+
- Added `node_script_missing` CI classification so npm/pnpm/yarn jobs that
|
|
163
|
+
call a missing package script are separated from dependency-install failures
|
|
164
|
+
and routed to a workflow/script repair path.
|
|
165
|
+
- Added a permanent source-level blocklist to the funded-issues tracker:
|
|
166
|
+
owners manually verified as fake-bounty sources are dropped at the
|
|
167
|
+
`merge_into_store` choke point (counted as `blocked` in the merge summary)
|
|
168
|
+
and `purge_blocklisted_entries` removes any legacy entries; `track` runs the
|
|
169
|
+
purge on every merge so existing stores self-heal.
|
|
170
|
+
- Added `funded-issues import-algora-board`, an offline parser for a locally
|
|
171
|
+
saved Algora organization bounty-board page. It extracts the funder-stated
|
|
172
|
+
USD amount, GitHub issue reference, posting age, and declared claim count
|
|
173
|
+
per bounty, and can merge the scored records into a tracker store. No
|
|
174
|
+
network access is performed.
|
|
175
|
+
- Added read-only competition and payout-vs-effort scoring signals plus the
|
|
176
|
+
`funded-issues competition` and `funded-issues payout-effort` batch
|
|
177
|
+
commands, all derived from public metadata observations with no claims,
|
|
178
|
+
comments, or maintainer contact.
|
|
179
|
+
- Added an offline owner-level `source_noise` heuristic and
|
|
180
|
+
`funded-issues apply-recheck`, a local-file-only command that transitions
|
|
181
|
+
tracker entries to closed / stale / active from recheck observations.
|
|
182
|
+
- Added .NET/NuGet/C# and xUnit fixture coverage for `dotnet restore`,
|
|
183
|
+
`dotnet build`, and `dotnet test` failure modes, growing the public CI
|
|
184
|
+
fixture zoo to 153 cases.
|
|
185
|
+
|
|
186
|
+
## 0.1.1 - 2026-06-12
|
|
187
|
+
|
|
188
|
+
- `ci explain` now ends text and Markdown reports with a `Guide:` link to the
|
|
189
|
+
matching getpatchrail.com `/fix` remediation page; unknown or unpublished
|
|
190
|
+
failure classes fall back to the `/fix` index without a network call.
|
|
191
|
+
- Added `funded-issues fresh`, a local read-only radar over the tracker store
|
|
192
|
+
that surfaces recently posted or recently labeled funded issues for fast
|
|
193
|
+
solver-side triage.
|
|
194
|
+
- Added `pre_commit_hook_failure` CI classification so pre-commit hook output is
|
|
195
|
+
recognized directly while the CLI still avoids linking to a missing `/fix`
|
|
196
|
+
page until that guide exists.
|
|
197
|
+
|
|
198
|
+
## 0.1.0 - 2026-06-02
|
|
199
|
+
|
|
200
|
+
- Initial public CI Janitor snapshot.
|
|
201
|
+
- Added `patchrail ci explain` and `patchrail ci classify`.
|
|
202
|
+
- Added local Markdown, JSON, and text reports.
|
|
203
|
+
- Added Apache-2.0 license and safety/ethics documentation.
|
|
204
|
+
- Added fixture-backed tests, local benchmark command, and GitHub Actions CI.
|
|
205
|
+
- Expanded the initial CI fixture zoo to 101 sanitized synthetic examples across
|
|
206
|
+
Python, Node, TypeScript, Go, Rust, and GitHub Actions failure modes.
|
|
207
|
+
- Added a read-only GitHub Actions triage artifact workflow.
|
|
208
|
+
- Added the experimental local Agent Control Plane queue with SQLite-backed
|
|
209
|
+
work items, approval states, audit export, CI result import, and proposal
|
|
210
|
+
records.
|
|
211
|
+
- Added the experimental read-only `funded-issues` CLI over local metadata,
|
|
212
|
+
with safe-only filtering and explicit anti-abuse blocked actions.
|
|
213
|
+
- Added permission-only adopter reporting and a public metrics tracker for
|
|
214
|
+
pilot outcomes, adoption signals, and open-source program evidence gaps.
|
|
215
|
+
- Added release-prep evidence docs, package smoke checks, and manual publish
|
|
216
|
+
gates. Release tags, PyPI publishing, GitHub Releases, and public
|
|
217
|
+
announcements remain maintainer actions.
|
|
@@ -22,7 +22,8 @@ patchrail redact --log failed-ci.log > failed-ci.redacted.log
|
|
|
22
22
|
|
|
23
23
|
3. Review `failed-ci.redacted.log` manually and remove anything PatchRail should
|
|
24
24
|
not publish: secrets, emails, private repo names, user names, customer names,
|
|
25
|
-
local home paths, and private URLs.
|
|
25
|
+
local home paths, and private URLs. See `docs/redaction.md` for exactly
|
|
26
|
+
which categories `patchrail redact` covers and which it doesn't.
|
|
26
27
|
4. Reduce the log to the shortest excerpt that still shows the root cause.
|
|
27
28
|
5. Add the fixture and expected metadata under `examples/ci-triage/`.
|
|
28
29
|
6. Run the fixture hygiene gate and benchmark:
|
|
@@ -38,6 +39,10 @@ patchrail ci benchmark examples/ci-triage --format json
|
|
|
38
39
|
If a real log cannot be safely redacted, create a minimal synthetic fixture that
|
|
39
40
|
preserves the error pattern without preserving private identifiers.
|
|
40
41
|
|
|
42
|
+
To catch a forgotten secret or a malformed fixture before it reaches a pull
|
|
43
|
+
request, see `docs/pre-commit-example.md` for an optional pre-commit hook
|
|
44
|
+
that runs `patchrail ci fixture-check` and `patchrail redact` automatically.
|
|
45
|
+
|
|
41
46
|
## Adding a CI fixture
|
|
42
47
|
|
|
43
48
|
1. Copy the smallest failing log excerpt that still shows the root cause.
|
patchrail-0.3.0/PKG-INFO
ADDED
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: patchrail
|
|
3
|
+
Version: 0.3.0
|
|
4
|
+
Summary: Local-first maintainer automation for open-source CI triage
|
|
5
|
+
Project-URL: Homepage, https://github.com/patchrail/patchrail
|
|
6
|
+
Project-URL: Documentation, https://github.com/patchrail/patchrail/tree/main/docs
|
|
7
|
+
Project-URL: Changelog, https://github.com/patchrail/patchrail/blob/main/CHANGELOG.md
|
|
8
|
+
Project-URL: Issues, https://github.com/patchrail/patchrail/issues
|
|
9
|
+
Project-URL: GitHub Action, https://github.com/patchrail/ci-triage-action
|
|
10
|
+
Author: Pablo Guillén
|
|
11
|
+
License-Expression: Apache-2.0
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Keywords: ci,github-actions,maintenance,open-source,triage
|
|
14
|
+
Classifier: Development Status :: 3 - Alpha
|
|
15
|
+
Classifier: Environment :: Console
|
|
16
|
+
Classifier: Intended Audience :: Developers
|
|
17
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Topic :: Software Development :: Build Tools
|
|
23
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
24
|
+
Requires-Python: >=3.11
|
|
25
|
+
Provides-Extra: dev
|
|
26
|
+
Requires-Dist: build>=1.2; extra == 'dev'
|
|
27
|
+
Requires-Dist: pytest>=8; extra == 'dev'
|
|
28
|
+
Requires-Dist: ruff>=0.5; extra == 'dev'
|
|
29
|
+
Requires-Dist: twine>=5.1; extra == 'dev'
|
|
30
|
+
Description-Content-Type: text/markdown
|
|
31
|
+
|
|
32
|
+
# PatchRail
|
|
33
|
+
|
|
34
|
+
Local-first CI failure triage for open-source maintainers. Paste a failing CI
|
|
35
|
+
log, get the failure class, the reproduction command, and a suggested fix
|
|
36
|
+
strategy — in seconds, fully offline.
|
|
37
|
+
|
|
38
|
+
[](https://pypi.org/project/patchrail/)
|
|
39
|
+
[](https://github.com/patchrail/patchrail/actions/workflows/ci.yml)
|
|
40
|
+
[](LICENSE)
|
|
41
|
+
[](https://pypi.org/project/patchrail/)
|
|
42
|
+
|
|
43
|
+

|
|
44
|
+
|
|
45
|
+
The recording above is real output from the bundled
|
|
46
|
+
`examples/ci-triage/typescript-import-type-drift.log` fixture. No model calls,
|
|
47
|
+
no network, no telemetry: the classifier is a curated rule engine that runs
|
|
48
|
+
entirely on your machine.
|
|
49
|
+
|
|
50
|
+
## Why maintainers use it
|
|
51
|
+
|
|
52
|
+
- **40 failure classes** backed by real log signatures — dependency
|
|
53
|
+
resolution, flaky network, OOM-killed runners, Docker builds, lint,
|
|
54
|
+
type checks, docs-site builds, and test failures across Python, Node,
|
|
55
|
+
TypeScript, Go, Rust, Java, .NET, Ruby, PHP, C++, and Swift/Xcode. Run
|
|
56
|
+
`patchrail ci classes` to list them all (add `--format json` to check
|
|
57
|
+
coverage from a script).
|
|
58
|
+
- **169 sanitized CI log fixtures** keep the classifier honest: every rule is
|
|
59
|
+
benchmarked against the public fixture zoo in `examples/ci-triage/` on every
|
|
60
|
+
test run.
|
|
61
|
+
- **23 secret-redaction patterns** (GitHub/GitLab/npm/PyPI/AWS tokens, private
|
|
62
|
+
keys, JWTs, emails, home paths) so logs can be shared safely.
|
|
63
|
+
- **Local-first by design**: no network access, no billing, no external model,
|
|
64
|
+
no telemetry. Nothing leaves the machine.
|
|
65
|
+
- **Markdown for humans, JSON for automation** — pipe the same result into a
|
|
66
|
+
PR comment or a workflow step.
|
|
67
|
+
|
|
68
|
+
## Quickstart
|
|
69
|
+
|
|
70
|
+
PatchRail is published on PyPI:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
pipx install patchrail
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Classify any failed CI log:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
patchrail ci explain --log failed-ci.log
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Or try it on a bundled fixture from a clone of this repo:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
git clone https://github.com/patchrail/patchrail
|
|
86
|
+
cd patchrail
|
|
87
|
+
patchrail ci explain --log examples/ci-triage/dependency-failure.log --format markdown
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Real output:
|
|
91
|
+
|
|
92
|
+
```markdown
|
|
93
|
+
# PatchRail CI Report
|
|
94
|
+
|
|
95
|
+
- Root cause: `python_dependency_resolution`
|
|
96
|
+
- Confidence: `0.89`
|
|
97
|
+
- Subsystem: Python dependency installation
|
|
98
|
+
- Reproduce: `python -m pip install -r requirements.txt`
|
|
99
|
+
- Suggested action: Pin or relax the conflicting dependency range, then rerun the same install command and the affected tests.
|
|
100
|
+
|
|
101
|
+
## Evidence signals
|
|
102
|
+
|
|
103
|
+
- `Could not find a version that satisfies the requirement`
|
|
104
|
+
- `Cannot install .*because these package versions have conflicting dependencies`
|
|
105
|
+
- `ResolutionImpossible`
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
It also reads from stdin, so you can pipe a log straight in:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
tail -n 200 failed-ci.log | patchrail ci explain
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Every failure class has a step-by-step remediation write-up in
|
|
115
|
+
[docs/fix/](docs/fix/README.md).
|
|
116
|
+
|
|
117
|
+
## GitHub Action
|
|
118
|
+
|
|
119
|
+
Run the same triage on every red CI run with
|
|
120
|
+
[`patchrail/ci-triage-action`](https://github.com/patchrail/ci-triage-action)
|
|
121
|
+
(also on the
|
|
122
|
+
[GitHub Marketplace](https://github.com/marketplace/actions/patchrail-ci-triage)).
|
|
123
|
+
It classifies the log locally on the runner — no PR, no comment, nothing
|
|
124
|
+
leaves the job:
|
|
125
|
+
|
|
126
|
+
```yaml
|
|
127
|
+
- name: PatchRail CI triage
|
|
128
|
+
if: failure()
|
|
129
|
+
uses: patchrail/ci-triage-action@v1
|
|
130
|
+
with:
|
|
131
|
+
log-path: test.log
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
The `@v1` drop-in exposes `failure-class`, `confidence`, and `guide-url`, plus a
|
|
135
|
+
run annotation and job summary. See
|
|
136
|
+
[docs/using-the-action.md](docs/using-the-action.md) for its full inputs and
|
|
137
|
+
outputs, or [examples/ci-triage-action](examples/ci-triage-action/README.md) for
|
|
138
|
+
the artifact shapes of both `@v1` and the richer in-repo composite.
|
|
139
|
+
|
|
140
|
+
## Features
|
|
141
|
+
|
|
142
|
+
| Feature | Status | Notes |
|
|
143
|
+
| --- | --- | --- |
|
|
144
|
+
| CI failure triage (`ci explain`, `ci classify`, `ci classes`) | Beta | 40 failure classes for GitHub Actions-style logs and common toolchains |
|
|
145
|
+
| Secret redaction (`redact`, `ci explain --redact`) | Beta | 23 patterns for tokens, keys, emails, and home paths |
|
|
146
|
+
| Reports | Beta | Markdown, JSON, and plain text |
|
|
147
|
+
| Fixture benchmark (`ci benchmark`) | Beta | Scores the classifier against all 153 public fixtures |
|
|
148
|
+
| GitHub Action | Beta | Read-only triage artifact on failed workflows |
|
|
149
|
+
| Local queue / control plane (`queue`) | Experimental | SQLite-backed work items with human approval states |
|
|
150
|
+
| Funded issue discovery (`funded-issues`) | Experimental (read-only) | Safe-only defaults, no claiming or commenting; see [docs/funded-issues-ethics.md](docs/funded-issues-ethics.md) |
|
|
151
|
+
|
|
152
|
+
## Local-first & safety
|
|
153
|
+
|
|
154
|
+
PatchRail never phones home. The classifier needs no API key, no GitHub App,
|
|
155
|
+
no repo write permission, and no external model call. Write actions (PRs,
|
|
156
|
+
comments, claims) are out of scope; anything that could become one sits behind
|
|
157
|
+
an explicit human approval state.
|
|
158
|
+
|
|
159
|
+
Secret redaction is a first-class feature, not an afterthought. Redact a log
|
|
160
|
+
before sharing it anywhere:
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
patchrail redact --log failed.log > failed.redacted.log
|
|
164
|
+
patchrail ci explain --redact --log failed.log
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
The redaction pass covers GitHub, GitLab, npm, PyPI, AWS, Stripe, Slack,
|
|
168
|
+
Google, Hugging Face, and SendGrid credentials, private key blocks, JWTs,
|
|
169
|
+
bearer tokens, URL-embedded credentials, `*_TOKEN`/`*_SECRET` environment
|
|
170
|
+
assignments, email addresses, and user home paths.
|
|
171
|
+
|
|
172
|
+
See [ETHICS.md](ETHICS.md), [SECURITY.md](SECURITY.md), and
|
|
173
|
+
[docs/threat-model.md](docs/threat-model.md).
|
|
174
|
+
|
|
175
|
+
## Roadmap
|
|
176
|
+
|
|
177
|
+
- **v0.3** — public demo of the local agent control plane: SQLite-backed work
|
|
178
|
+
queue, approval gates, and audit export.
|
|
179
|
+
- **v0.4** — ethical funded-maintenance workflow: read-only discovery with
|
|
180
|
+
human-gated follow-up, no automated claiming.
|
|
181
|
+
|
|
182
|
+
Details in [docs/roadmap.md](docs/roadmap.md).
|
|
183
|
+
|
|
184
|
+
## Documentation
|
|
185
|
+
|
|
186
|
+
- [Quickstart](docs/quickstart.md)
|
|
187
|
+
- [jq cookbook for the JSON classifier output](docs/json-cookbook.md)
|
|
188
|
+
- [Fix guides per failure class](docs/fix/README.md)
|
|
189
|
+
- [CI Failure Zoo](docs/ci-failure-zoo.md)
|
|
190
|
+
- [GitHub Actions CI triage](docs/github-action.md)
|
|
191
|
+
- [Using the action in your own repository](docs/using-the-action.md)
|
|
192
|
+
- [Agent Control Plane](docs/agent-control-plane.md)
|
|
193
|
+
- [API reference](docs/api-reference.md)
|
|
194
|
+
- [Threat model](docs/threat-model.md)
|
|
195
|
+
- [Funded issue ethics](docs/funded-issues-ethics.md)
|
|
196
|
+
|
|
197
|
+
## Contributing
|
|
198
|
+
|
|
199
|
+
The fastest way in is **adding a CI fixture — it takes about 10 minutes**:
|
|
200
|
+
grab a failed log, redact it, trim it to the smallest excerpt that still shows
|
|
201
|
+
the root cause, and add it with its expected classification under
|
|
202
|
+
`examples/ci-triage/`. The full path is in
|
|
203
|
+
[CONTRIBUTING.md](CONTRIBUTING.md), and the
|
|
204
|
+
[CI failure fixture issue template](.github/ISSUE_TEMPLATE/ci_failure_fixture.md)
|
|
205
|
+
works if you are not ready to open a pull request.
|
|
206
|
+
|
|
207
|
+
Issues labeled
|
|
208
|
+
[`good first issue`](https://github.com/patchrail/patchrail/labels/good%20first%20issue)
|
|
209
|
+
are scoped for first-time contributors.
|
|
210
|
+
|
|
211
|
+
Run the checks locally before opening a PR:
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
uv run --extra dev pytest -q
|
|
215
|
+
uv run --extra dev ruff check .
|
|
216
|
+
uv run --extra dev patchrail ci benchmark examples/ci-triage --format json
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## License
|
|
220
|
+
|
|
221
|
+
Apache-2.0.
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# PatchRail
|
|
2
|
+
|
|
3
|
+
Local-first CI failure triage for open-source maintainers. Paste a failing CI
|
|
4
|
+
log, get the failure class, the reproduction command, and a suggested fix
|
|
5
|
+
strategy — in seconds, fully offline.
|
|
6
|
+
|
|
7
|
+
[](https://pypi.org/project/patchrail/)
|
|
8
|
+
[](https://github.com/patchrail/patchrail/actions/workflows/ci.yml)
|
|
9
|
+
[](LICENSE)
|
|
10
|
+
[](https://pypi.org/project/patchrail/)
|
|
11
|
+
|
|
12
|
+

|
|
13
|
+
|
|
14
|
+
The recording above is real output from the bundled
|
|
15
|
+
`examples/ci-triage/typescript-import-type-drift.log` fixture. No model calls,
|
|
16
|
+
no network, no telemetry: the classifier is a curated rule engine that runs
|
|
17
|
+
entirely on your machine.
|
|
18
|
+
|
|
19
|
+
## Why maintainers use it
|
|
20
|
+
|
|
21
|
+
- **40 failure classes** backed by real log signatures — dependency
|
|
22
|
+
resolution, flaky network, OOM-killed runners, Docker builds, lint,
|
|
23
|
+
type checks, docs-site builds, and test failures across Python, Node,
|
|
24
|
+
TypeScript, Go, Rust, Java, .NET, Ruby, PHP, C++, and Swift/Xcode. Run
|
|
25
|
+
`patchrail ci classes` to list them all (add `--format json` to check
|
|
26
|
+
coverage from a script).
|
|
27
|
+
- **169 sanitized CI log fixtures** keep the classifier honest: every rule is
|
|
28
|
+
benchmarked against the public fixture zoo in `examples/ci-triage/` on every
|
|
29
|
+
test run.
|
|
30
|
+
- **23 secret-redaction patterns** (GitHub/GitLab/npm/PyPI/AWS tokens, private
|
|
31
|
+
keys, JWTs, emails, home paths) so logs can be shared safely.
|
|
32
|
+
- **Local-first by design**: no network access, no billing, no external model,
|
|
33
|
+
no telemetry. Nothing leaves the machine.
|
|
34
|
+
- **Markdown for humans, JSON for automation** — pipe the same result into a
|
|
35
|
+
PR comment or a workflow step.
|
|
36
|
+
|
|
37
|
+
## Quickstart
|
|
38
|
+
|
|
39
|
+
PatchRail is published on PyPI:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
pipx install patchrail
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Classify any failed CI log:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
patchrail ci explain --log failed-ci.log
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Or try it on a bundled fixture from a clone of this repo:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
git clone https://github.com/patchrail/patchrail
|
|
55
|
+
cd patchrail
|
|
56
|
+
patchrail ci explain --log examples/ci-triage/dependency-failure.log --format markdown
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Real output:
|
|
60
|
+
|
|
61
|
+
```markdown
|
|
62
|
+
# PatchRail CI Report
|
|
63
|
+
|
|
64
|
+
- Root cause: `python_dependency_resolution`
|
|
65
|
+
- Confidence: `0.89`
|
|
66
|
+
- Subsystem: Python dependency installation
|
|
67
|
+
- Reproduce: `python -m pip install -r requirements.txt`
|
|
68
|
+
- Suggested action: Pin or relax the conflicting dependency range, then rerun the same install command and the affected tests.
|
|
69
|
+
|
|
70
|
+
## Evidence signals
|
|
71
|
+
|
|
72
|
+
- `Could not find a version that satisfies the requirement`
|
|
73
|
+
- `Cannot install .*because these package versions have conflicting dependencies`
|
|
74
|
+
- `ResolutionImpossible`
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
It also reads from stdin, so you can pipe a log straight in:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
tail -n 200 failed-ci.log | patchrail ci explain
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Every failure class has a step-by-step remediation write-up in
|
|
84
|
+
[docs/fix/](docs/fix/README.md).
|
|
85
|
+
|
|
86
|
+
## GitHub Action
|
|
87
|
+
|
|
88
|
+
Run the same triage on every red CI run with
|
|
89
|
+
[`patchrail/ci-triage-action`](https://github.com/patchrail/ci-triage-action)
|
|
90
|
+
(also on the
|
|
91
|
+
[GitHub Marketplace](https://github.com/marketplace/actions/patchrail-ci-triage)).
|
|
92
|
+
It classifies the log locally on the runner — no PR, no comment, nothing
|
|
93
|
+
leaves the job:
|
|
94
|
+
|
|
95
|
+
```yaml
|
|
96
|
+
- name: PatchRail CI triage
|
|
97
|
+
if: failure()
|
|
98
|
+
uses: patchrail/ci-triage-action@v1
|
|
99
|
+
with:
|
|
100
|
+
log-path: test.log
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
The `@v1` drop-in exposes `failure-class`, `confidence`, and `guide-url`, plus a
|
|
104
|
+
run annotation and job summary. See
|
|
105
|
+
[docs/using-the-action.md](docs/using-the-action.md) for its full inputs and
|
|
106
|
+
outputs, or [examples/ci-triage-action](examples/ci-triage-action/README.md) for
|
|
107
|
+
the artifact shapes of both `@v1` and the richer in-repo composite.
|
|
108
|
+
|
|
109
|
+
## Features
|
|
110
|
+
|
|
111
|
+
| Feature | Status | Notes |
|
|
112
|
+
| --- | --- | --- |
|
|
113
|
+
| CI failure triage (`ci explain`, `ci classify`, `ci classes`) | Beta | 40 failure classes for GitHub Actions-style logs and common toolchains |
|
|
114
|
+
| Secret redaction (`redact`, `ci explain --redact`) | Beta | 23 patterns for tokens, keys, emails, and home paths |
|
|
115
|
+
| Reports | Beta | Markdown, JSON, and plain text |
|
|
116
|
+
| Fixture benchmark (`ci benchmark`) | Beta | Scores the classifier against all 153 public fixtures |
|
|
117
|
+
| GitHub Action | Beta | Read-only triage artifact on failed workflows |
|
|
118
|
+
| Local queue / control plane (`queue`) | Experimental | SQLite-backed work items with human approval states |
|
|
119
|
+
| Funded issue discovery (`funded-issues`) | Experimental (read-only) | Safe-only defaults, no claiming or commenting; see [docs/funded-issues-ethics.md](docs/funded-issues-ethics.md) |
|
|
120
|
+
|
|
121
|
+
## Local-first & safety
|
|
122
|
+
|
|
123
|
+
PatchRail never phones home. The classifier needs no API key, no GitHub App,
|
|
124
|
+
no repo write permission, and no external model call. Write actions (PRs,
|
|
125
|
+
comments, claims) are out of scope; anything that could become one sits behind
|
|
126
|
+
an explicit human approval state.
|
|
127
|
+
|
|
128
|
+
Secret redaction is a first-class feature, not an afterthought. Redact a log
|
|
129
|
+
before sharing it anywhere:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
patchrail redact --log failed.log > failed.redacted.log
|
|
133
|
+
patchrail ci explain --redact --log failed.log
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
The redaction pass covers GitHub, GitLab, npm, PyPI, AWS, Stripe, Slack,
|
|
137
|
+
Google, Hugging Face, and SendGrid credentials, private key blocks, JWTs,
|
|
138
|
+
bearer tokens, URL-embedded credentials, `*_TOKEN`/`*_SECRET` environment
|
|
139
|
+
assignments, email addresses, and user home paths.
|
|
140
|
+
|
|
141
|
+
See [ETHICS.md](ETHICS.md), [SECURITY.md](SECURITY.md), and
|
|
142
|
+
[docs/threat-model.md](docs/threat-model.md).
|
|
143
|
+
|
|
144
|
+
## Roadmap
|
|
145
|
+
|
|
146
|
+
- **v0.3** — public demo of the local agent control plane: SQLite-backed work
|
|
147
|
+
queue, approval gates, and audit export.
|
|
148
|
+
- **v0.4** — ethical funded-maintenance workflow: read-only discovery with
|
|
149
|
+
human-gated follow-up, no automated claiming.
|
|
150
|
+
|
|
151
|
+
Details in [docs/roadmap.md](docs/roadmap.md).
|
|
152
|
+
|
|
153
|
+
## Documentation
|
|
154
|
+
|
|
155
|
+
- [Quickstart](docs/quickstart.md)
|
|
156
|
+
- [jq cookbook for the JSON classifier output](docs/json-cookbook.md)
|
|
157
|
+
- [Fix guides per failure class](docs/fix/README.md)
|
|
158
|
+
- [CI Failure Zoo](docs/ci-failure-zoo.md)
|
|
159
|
+
- [GitHub Actions CI triage](docs/github-action.md)
|
|
160
|
+
- [Using the action in your own repository](docs/using-the-action.md)
|
|
161
|
+
- [Agent Control Plane](docs/agent-control-plane.md)
|
|
162
|
+
- [API reference](docs/api-reference.md)
|
|
163
|
+
- [Threat model](docs/threat-model.md)
|
|
164
|
+
- [Funded issue ethics](docs/funded-issues-ethics.md)
|
|
165
|
+
|
|
166
|
+
## Contributing
|
|
167
|
+
|
|
168
|
+
The fastest way in is **adding a CI fixture — it takes about 10 minutes**:
|
|
169
|
+
grab a failed log, redact it, trim it to the smallest excerpt that still shows
|
|
170
|
+
the root cause, and add it with its expected classification under
|
|
171
|
+
`examples/ci-triage/`. The full path is in
|
|
172
|
+
[CONTRIBUTING.md](CONTRIBUTING.md), and the
|
|
173
|
+
[CI failure fixture issue template](.github/ISSUE_TEMPLATE/ci_failure_fixture.md)
|
|
174
|
+
works if you are not ready to open a pull request.
|
|
175
|
+
|
|
176
|
+
Issues labeled
|
|
177
|
+
[`good first issue`](https://github.com/patchrail/patchrail/labels/good%20first%20issue)
|
|
178
|
+
are scoped for first-time contributors.
|
|
179
|
+
|
|
180
|
+
Run the checks locally before opening a PR:
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
uv run --extra dev pytest -q
|
|
184
|
+
uv run --extra dev ruff check .
|
|
185
|
+
uv run --extra dev patchrail ci benchmark examples/ci-triage --format json
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## License
|
|
189
|
+
|
|
190
|
+
Apache-2.0.
|