Releases: daichunghy/patchgate
Release list
v0.1.0-beta.5 — current public shadow release
Current public documentation-synchronized beta. The Action behavior is unchanged from beta4; the README, usage guide, support/security pages, AGENTS.md, changelog, and release record now point to beta5. Pin the immutable commit attached to this release and keep fail-on: never. This is shadow-only, not production, Marketplace, v0.1, or adoption evidence.
v0.1.0-beta.4 — Action defaults, ergonomics, dependency pins
v0.1.0-beta.4 ships the CLI ergonomics and Action-defaults work on top of beta.3. It supersedes v0.1.0-beta.3 as the pinned reference for shadow evaluation.
What changed since beta.3
- Install from GitHub without cloning (PR #36):
npx github:daichunghy/patchgatenow works — apreparescript buildsdist/during a Git dependency install, verified by a real clean-directory install smoke (--version,--help,doctor, and.github/patchgate.ymldiscovery end to end). Registry publication remains a maintainer-gated decision;prepublishOnlynow runs the full verification chain. CLI--fail-onparity and glob hardening (?is a literal character in path patterns, not a regex quantifier) are included, plus adocs/demo.mdwalkthrough with captured CLI output. evaluate --outputalias, fail-closed conflicts (PR #40):--outputis now an alias of--reportonevaluate; passing both with different receipt paths exits2withREPORT_OUTPUT_CONFLICTinstead of picking a winner.--reportremains the documented flag; the committed Action bundle catches up with this parser change.create-check-rundefaults totrue(PR #42): the Action posts its idempotent Check Run by default, matching how every recorded shadow evaluation was configured; the input parser default mirrorsaction.yml. Also carries the combined CodeQL 4.37.7 action pin bump.- Dependency pins (PRs #38, #39, #42):
actions/setup-node7.0.0 andactions/checkout7.0.1 full-SHA pins across all five repository workflows, plus the CodeQL action runner bump above. - Docs: PR #41 records the PR #40 maintainer merge and status snapshot.
Full record: docs/CHANGELOG.md, docs/releases/2026-08-23-beta.4.md.
Consumer reference (shadow, non-blocking)
- name: PatchGate beta shadow gate
uses: daichunghy/patchgate@d8c67a848a95d456707e6c580a43e4e56e6071a0
with:
fail-on: never
create-check-run: true
github-token: ${{ github.token }}Consumer guidance is unchanged: pin this full commit SHA, keep fail-on: never, and run in shadow only. With github.token the evaluation fails closed with GITHUB_PROVENANCE_AMBIGUOUS (native-control visibility needs a PAT or GitHub App token with administration: read); a rejected snapshot posts a neutral rejection Check Run and exits 0 under fail-on: never.
Verification
Fresh-checkout npm run verify at the tagged commit: lint, typecheck, budget/pin/event/doc-link/community/dossier checks, audit (0 vulnerabilities), full test suites (146 tests: unit, security, GitHub integration, CLI process incl. --output conflict and --fail-on cases), clean-room action bundle, consumer fixture and release-candidate checks all pass; public CI and CodeQL runs pass on the same commit (d8c67a8). Maintainer smoke repository: daichunghy/patchgate-beta-smoke.
Beta shadow-evidence scope only — this is not a production release, not external adoption evidence, and not a v0.1 claim. It blocks merges nowhere unless a maintainer configures it as a required status check with an expected-source setting. Two consenting external shadow installations, a live external consumer E2E, and fork/merge-group E2E remain open gates before any v0.1 claim.
v0.1.0-beta.3 — determinism, contract and first-run hardening
v0.1.0-beta.3 consolidates the multi-persona review fixes and first-run improvements on top of beta.2. It supersedes v0.1.0-beta.2 as the pinned reference for shadow evaluation.
What changed since beta.2
- Determinism: five adapter collection sorts that used
localeComparenow use a locale-independent code-unit comparator; positional requirement IDs (codeowners.N,native.*.check.N) and native-control digests are reproducible across runtimes with different ICU collation. - Receipt contract: receipts now include
nativeControlswhen present, sodecisionInputDigestis recomputable from the receipt alone; the receipt schema accepts any semantic-version-shapedevaluatorVersioninstead of pinning one build, so future version bumps no longer self-invalidate. - CLI parity:
evaluateandgithub snapshotaccept--fail-onwith the same five levels and precedence semantics as the Action (defaultblocked); root help documents--jsonand--fail-on. - First-run experience:
initwrites a fully commented draft policy and supports.github/patchgate.yml; localdoctor/preflightaccept the.github/policy location with the same root-first order as the live adapter; preflight resolves Git refs without--repo; an honest clone-first install path is documented (the npmpatchgatename is taken by an unrelated package — a scoped package name decision is pending). - Action hardening: summary/check-run cell content is HTML-encoded against markup breakout; rejected snapshots now post a neutral rejection Check Run when
create-check-run: true. - Policy-change detection matches the loaded policy source identity, so a nested policy path is flagged without manual duplication.
Full record: docs/reviews/2026-08-22-multi-persona-review.md, docs/reviews/2026-08-22-live-smoke-findings.md, docs/CHANGELOG.md.
Consumer reference (shadow, non-blocking)
- name: PatchGate beta shadow gate
uses: daichunghy/patchgate@a22812b6b802a31786a9607648b978031bd82e7b
with:
fail-on: never
create-check-run: true
github-token: ${{ github.token }}Pin to this full commit SHA. With github.token the evaluation fails closed with GITHUB_PROVENANCE_AMBIGUOUS (native-control visibility needs a PAT or GitHub App token with administration: read); a rejected snapshot posts a neutral rejection Check Run and exits 0 under fail-on: never.
Verification
Fresh-checkout npm run verify at the tagged commit: lint, typecheck, budget/pin/event/doc-link/community/dossier checks, audit (0 vulnerabilities), full test suites (unit, security, GitHub integration, CLI process incl. --fail-on precedence cases), clean-room action bundle, consumer fixture and release-candidate checks all pass; public CI, CodeQL and Dependabot runs pass on the same commit. Maintainer smoke repository: daichunghy/patchgate-beta-smoke.
Beta status unchanged: pre-release for shadow evaluation; not production-declared, not externally piloted, and blocks merges only where a maintainer configures it as a required status check with an expected-source setting.
v0.1.0-beta.2 — critical Action input fix
v0.1.0-beta.2 fixes a critical input-parsing bug found by the first live consumer smoke test of beta.1, and supersedes v0.1.0-beta.1 for any shadow evaluation.
Critical fix: Action inputs were unreadable on real runners
The GitHub Actions runner exports inputs with dashes preserved (github-token becomes INPUT_GITHUB-TOKEN), but the Action read underscore names (INPUT_GITHUB_TOKEN). On real runners every input was therefore unreadable: github-token fell back to empty (the Action aborted with "GitHub token is missing"), while fail-on, create-check-run and check-name silently fell back to defaults. Local unit tests missed this because they injected the same underscore names the parser read.
The parser now prefers runner-native dashed names with underscore fallbacks, locked by regression and precedence tests. The repository's own Shadow Gate failures previously attributed to the documented non-ready boundary were caused by this same bug; those runs never reached evaluation and their evidence is void.
Other changes
- Corrected the beta.1 release-notes consumer reference from the invalid
daichunghy/patchgate/action@<SHA>subpath form to the rootdaichunghy/patchgate@<SHA>form (the runbooks were already correct). - Migrated
action.ymlfromnode20tonode24per the runner deprecation. - Findings record:
docs/reviews/2026-08-22-live-smoke-findings.mdin the repository.
Consumer reference (shadow, non-blocking)
- name: PatchGate beta shadow gate
uses: daichunghy/patchgate@edab0ece5dd404bbe05cd349d60d9ccb190b57c8
with:
fail-on: never
create-check-run: true
github-token: ${{ github.token }}Pin to this full commit SHA; do not treat a branch reference as immutable.
Verification
Fresh-checkout npm run verify at the tagged commit: lint, typecheck, budget/pin/event/doc-link/community/dossier checks, audit (0 vulnerabilities), 138 tests (94 unit including 16 action tests with runner-native input names, 14 security, 25 GitHub integration, 5 CLI process), clean-room action bundle, consumer fixture and release-candidate checks all pass; public CI (Node 20/22, ubuntu/macos), CodeQL and Dependabot runs pass on the same commit. Maintainer smoke repository: daichunghy/patchgate-beta-smoke.
Beta status unchanged: pre-release for shadow evaluation; not production-declared, not externally piloted, and blocks merges only where a maintainer configures it as a required status check with an expected-source setting.
v0.1.0-beta.1 — first public beta
PatchGate v0.1.0-beta.1 is the first public beta of a review-readiness gate for pull requests. It ships one deterministic evaluator behind both a CLI and a GitHub Action.
What it does
PatchGate reads trusted base-commit policy (patchgate.yml, CODEOWNERS, branch protection/Rulesets subset), pull-request metadata, changed paths, ownership requirements and SHA-bound check evidence, then emits a versioned ContributionReceipt with one final status: ready_for_review, blocked, human_review_required, evidence_missing or policy_ambiguous.
It is not an AI-authorship detector, a code-correctness oracle, or a replacement for GitHub Rulesets or maintainer judgment.
Supported surface (GitHub.com)
pull_requestevents, head or merge target (merge-group membership is explicitly unsupported and reported non-ready);- read-only metadata: repository identity, PR identity, changed paths, reviews, linked issues (GraphQL), check runs and workflow runs bound to the tested SHA;
- base-commit policy reading only — a PR can never relax the rules that govern it;
- optional idempotent Check Run (
create-check-run: true).
Required permissions
The adapter is read-only: repository metadata, pull requests, contents, checks, actions read, collaborator visibility, and (for teams) members read. Creating a Check Run additionally needs checks: write. Fail-closed behavior: a 404 is treated as unknown unless confirmed absence is explicitly supplied, a 403 is an insufficient-capability diagnostic, and unsupported Ruleset semantics remain non-ready rather than guessed.
Known limitations
- merge-group membership is not representable and reports non-ready;
- unsupported Ruleset semantics fail closed;
human_review_requiredmeans a declared human gate is unsatisfied — it is not proof of human review;- the receipt is digest-bound and reproducible, not cryptographically signed;
- shadow evidence is pending: this beta ships with a documented no-go decision on shadow installations rather than pilot results (see
docs/releases/beta-release-and-rollback.md).
Consumer reference (shadow, non-blocking)
- name: PatchGate beta shadow gate
uses: daichunghy/patchgate@301c7001e34fa4eee705b2a8a83e8e2a65797049
with:
fail-on: never
create-check-run: true
github-token: ${{ github.token }}Pin to this full commit SHA; do not treat a branch reference as immutable.
Verification
Fresh-checkout npm run verify at the tagged commit: lint, typecheck, budget/pin/event/doc-link/community/dossier checks, audit (0 vulnerabilities), 138 tests (94 unit, 14 security, 25 GitHub integration, 5 CLI process), clean-room action bundle, consumer fixture and release-candidate checks all pass; public CI (Node 20/22, ubuntu/macos), CodeQL and Dependabot runs pass on the same commit. Beta status: this is a pre-release for shadow evaluation; it is not production-declared, not externally piloted, and blocks merges only where a maintainer configures it as a required status check with an expected-source setting.
Correction (2026-08-22): the consumer reference below was originally published as
daichunghy/patchgate/action@<SHA>, which resolves to a nonexistent subdirectory and fails at workflow setup. Use the root form shown now. A critical input-parsing fix (runner exportsINPUT_GITHUB-TOKEN-style dashed names) ships inv0.1.0-beta.2— prefer beta.2 for any shadow evaluation.