pi-gauntlet 7.12.0 → 7.13.0
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.
- package/CHANGELOG.md +12 -0
- package/README.md +2 -2
- package/package.json +1 -1
- package/skills/gatekeep-pr/SKILL.md +1 -1
- package/skills/gatekeep-pr/reference/assessment.md +1 -1
- package/skills/gatekeep-pr/reference/decision-menu.md +1 -1
- package/skills/gatekeep-pr/reference/post-selection-loop.md +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v7.13.0 - 2026-10-16
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- **gatekeep-pr `merge policy: rebase`.** The `## PR gate` key accepts `rebase` beside `squash` (default) and `merge-commit`; the `merge` pick maps the policy to `gh pr merge --squash | --merge | --rebase --match-head-commit <assessed-sha>`. Before merging, the gate reads the repo's allowed methods with `gh api repos/{owner}/{repo} --jq '{allow_squash_merge,allow_merge_commit,allow_rebase_merge}'` and a policy the repo disables is a named blocker on the `merge` pick instead of a `gh` failure. A menu pick authorizes every command it needs; the agent runs them itself and never prints one for the human to paste.
|
|
8
|
+
|
|
9
|
+
## v7.12.1 - 2026-10-16
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- One-sample noninteractive judgment recovery with `node eval/run.mjs <target> <sample> --refresh-judgments`: reuses current saved replies, refreshes LLM judgments and preserves a bounded previous/refreshed audit without accepting variance or replacing primary replies. Documents admission, interruption and failure handling in the [eval process](eval/README.md#recover-a-disputed-saved-judgment). (#64)
|
|
14
|
+
|
|
3
15
|
## v7.12.0 - 2026-10-16
|
|
4
16
|
|
|
5
17
|
### Changed
|
package/README.md
CHANGED
|
@@ -163,7 +163,7 @@ pi install -l ~/repos/pi-gauntlet
|
|
|
163
163
|
|
|
164
164
|
## Evals
|
|
165
165
|
|
|
166
|
-
Run `node eval/run.mjs <target>` to check a wording change on fixed inputs: two frozen replay models produce before/after outputs, and one frozen judge checks must-hold facts against a committed `intent.md`. The [eval process](eval/README.md) explains the single driver, target and sample layout, newest-only
|
|
166
|
+
Run `node eval/run.mjs <target>` to check a wording change on fixed inputs: two frozen replay models produce before/after outputs, and one frozen judge checks must-hold facts against a committed `intent.md`. The [eval process](eval/README.md) explains the single driver, target and sample layout, newest-only primary replies with a bounded judgment-refresh audit, and anonymization rule. Model calls run manually, never in CI; CI runs deterministic library tests, structural lint, and hygiene checks. `eval/` is checkout-only and excluded from the npm tarball.
|
|
167
167
|
|
|
168
168
|
## Use from Claude Code
|
|
169
169
|
|
|
@@ -481,7 +481,7 @@ customization lives in three places, never in the wrapper itself:
|
|
|
481
481
|
- ci checks: <comma-separated check names> # optional; narrows which checks count as evidence; absent = all checks on the assessed head
|
|
482
482
|
- worktree wrapper: <command> # optional
|
|
483
483
|
- issue fetch: <command with <ref> placeholder> # optional, replaces gh issue view
|
|
484
|
-
- merge policy: squash | merge-commit
|
|
484
|
+
- merge policy: squash | merge-commit | rebase # optional; default squash
|
|
485
485
|
```
|
|
486
486
|
|
|
487
487
|
- **The gauntlet overrides file, `## cleanup` section** - the ordered post-gate steps the `cleanup` menu row runs (contract under Project-specific overrides above).
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@ argument-hint: "<pr> [issue-ref] [--rebase [base]] (e.g. 123, 123 gh-45, 123 --
|
|
|
6
6
|
|
|
7
7
|
# gatekeep-pr
|
|
8
8
|
|
|
9
|
-
Verify, don't trust: a PR description is a claim, and over-claimed coverage, hallucinated references, and "tests pass" that never ran are the normal case on generated code. Judge the mechanism only - whether code, tests, and docs at the assessed head make each promised behavior possible - and leave what can be seen only after merge (a staging run, production data, an external system) to `/skill:check-delivery`. Retain repair consent only through `reference/post-selection-loop.md`'s portable run record and next-action boundary; keep final merge/approval and external posts separately selected. Before initial selection, permit only provisioning and the `--rebase` sync: steps 1-5 read, provision a worktree, run the `--rebase` sync when asked, and draft; execute repair writes through explicit selections or validated retained grants; execute other writes only on their own selection or the sync's `--rebase` authority. Running the verification command executes PR code with your ambient credentials and no sandbox - gate only PRs you are willing to execute.
|
|
9
|
+
Verify, don't trust: a PR description is a claim, and over-claimed coverage, hallucinated references, and "tests pass" that never ran are the normal case on generated code. Judge the mechanism only - whether code, tests, and docs at the assessed head make each promised behavior possible - and leave what can be seen only after merge (a staging run, production data, an external system) to `/skill:check-delivery`. Retain repair consent only through `reference/post-selection-loop.md`'s portable run record and next-action boundary; keep final merge/approval and external posts separately selected. Before initial selection, permit only provisioning and the `--rebase` sync: steps 1-5 read, provision a worktree, run the `--rebase` sync when asked, and draft; execute repair writes through explicit selections or validated retained grants; execute other writes only on their own selection or the sync's `--rebase` authority. A menu pick authorizes every command that pick needs: run them yourself, never print a command for the human to paste. Running the verification command executes PR code with your ambient credentials and no sandbox - gate only PRs you are willing to execute.
|
|
10
10
|
|
|
11
11
|
## Arguments
|
|
12
12
|
|
|
@@ -34,7 +34,7 @@ Resolve per concern, first match wins, evaluated unconditionally - never delegat
|
|
|
34
34
|
- ci checks: <comma-separated check names> # optional; narrows which checks count as evidence; absent = all checks on the assessed head
|
|
35
35
|
- worktree wrapper: <command> # optional
|
|
36
36
|
- issue fetch: <command with <ref> placeholder> # optional, replaces gh issue view
|
|
37
|
-
- merge policy: squash | merge-commit
|
|
37
|
+
- merge policy: squash | merge-commit | rebase # optional; default squash
|
|
38
38
|
```
|
|
39
39
|
|
|
40
40
|
Read every ladder source from the **merge-base of the PR's base branch**, never from the PR's head tree - a PR cannot weaken its own rubric or swap the command that will gate it: `MB=$(git merge-base origin/<baseRefName> <headRefOid>)`, then `git show "$MB:<path>"` per source (`git show "$MB:REVIEW.md"`, `git show "$MB:AGENTS.md"`). A plain cwd read (`cat REVIEW.md`, the file open in the PR worktree) is invalid for any ladder source. Exception: a PR that itself changes `REVIEW.md` or the overrides file makes that diff review subject matter, surfaced as a finding - never applied to this run's configuration.
|
|
@@ -20,7 +20,7 @@ Rows are `<n>. <verb> - <consequence>`; every row, `stop` included, carries its
|
|
|
20
20
|
- `approve workflow run` - `gh api --method POST repos/<base-owner>/<base-repo>/actions/runs/<id>/approve` for a held run on the assessed head, then re-enter the refresh (`post-selection-loop.md` `### Pre-menu refresh`)
|
|
21
21
|
- `update branch` - `gh pr update-branch <N>`, then fast-forward the worktree to the new head (`fix-wave.md` `## Conflicts`); renders on a conflict with no wave commit, or when `merge_state_status` is `BEHIND` at the merge preconditions
|
|
22
22
|
- `merge base` - retain merging the recorded base and resolving conflicts through reviewed helper work and push during this run until readiness or a new decision boundary (`fix-wave.md`)
|
|
23
|
-
- `merge` - `gh pr merge --match-head-commit <assessed-sha>` with the resolved `merge policy` (default squash); preconditions per `post-selection-loop.md` `### Merge preconditions
|
|
23
|
+
- `merge` - `gh pr merge --match-head-commit <assessed-sha>` with the flag of the resolved `merge policy` (`squash` -> `--squash`, `merge-commit` -> `--merge`, `rebase` -> `--rebase`; default squash); preconditions per `post-selection-loop.md` `### Merge preconditions`, including the repo allowing that method
|
|
24
24
|
- `merge anyway` - merge while the pending-reviewer overlay withholds it; prints what it overrode
|
|
25
25
|
- `reply` - post the drafted replies under `PR comments` (`reply <n>` for one)
|
|
26
26
|
- `post coverage to ticket` - post the rendered `AC coverage` block as a comment on the source ticket via the resolved tracker verb (`gh issue comment`, the overrides' tracker mapping, or `/skill:linear`); renders only under the `own merge` overlay
|
|
@@ -72,6 +72,7 @@ All must hold before `merge` executes; a `merge` pick while one fails is refused
|
|
|
72
72
|
- `merge_state_status` is not `BLOCKED`, `UNKNOWN`, or `unreadable`, and the pre-menu refresh succeeded (`### Pre-menu refresh`); a non-`BLOCKED` value is never a verdict - it only leaves this row satisfied, and a `gh pr merge` refusal is reported verbatim
|
|
73
73
|
- no retained, unreviewed comment delta (`### Re-render` step 4)
|
|
74
74
|
- worktree tracked-clean and synced with the remote head (fixes pushed first)
|
|
75
|
+
- the repo allows the resolved merge policy: read `gh api repos/<owner>/<repo> --jq '{allow_squash_merge,allow_merge_commit,allow_rebase_merge}'` and require the policy's flag (`squash` -> `allow_squash_merge`, `merge-commit` -> `allow_merge_commit`, `rebase` -> `allow_rebase_merge`) to be `true`; a `false` is a blocker on the `merge` pick, named as `merge policy <policy> is disabled on <owner>/<repo>`, never a `gh pr merge` failure
|
|
75
76
|
- the compare-and-swap below passes
|
|
76
77
|
|
|
77
78
|
### Compare-and-swap
|
|
@@ -88,7 +89,7 @@ Apply per `fix-wave.md`: the local conflict check, one fresh implementer helper
|
|
|
88
89
|
|
|
89
90
|
### Merge course
|
|
90
91
|
|
|
91
|
-
`merge` executes as `gh pr merge --match-head-commit <assessed-sha>` with the resolved merge policy
|
|
92
|
+
`merge` executes as `gh pr merge --match-head-commit <assessed-sha>` with the flag of the resolved merge policy: `squash` -> `--squash`, `merge-commit` -> `--merge`, `rebase` -> `--rebase`. Push and merge are never one pick.
|
|
92
93
|
|
|
93
94
|
After `gh pr merge` returns, read `gh pr view <N> --json state,mergeCommit`. `state: MERGED` -> write the returned `state` into `pr.state` and `mergeCommit.oid` into `pr.merge_commit` (the same two writes when a queued merge's `wait` re-read returns `MERGED`), render the `AC coverage` block once and re-render the menu under the `own merge` overlay (`decision-menu.md`); any other state (a merge queue) -> one `PR comments` line `The merge is queued, so coverage posts wait. (<state>)` and the menu `wait` (re-run the read) / `show evidence` / `stop`. The block, `<sha>` = `mergeCommit.oid`, one row per `scope.rows` entry in row order with its outcome (`covered`, `deferred per spec to <ref>`, `deviates per spec: <why>`, `elsewhere per spec: <repo>`, `venue: <env> - <observation>, checked before prod deploy`); with no rows (`source: pr`, or an empty `scope.rows`) the block has no row lines and `post coverage to ticket` is not offered. With `source: pr` the header line drops `, spec <path>`. An `in-scope` row whose observation half is `not judged here` renders `covered; observable half checked after merge`.
|
|
94
95
|
|