pi-gauntlet 7.24.0 → 7.25.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 CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## v7.25.0 - 2026-10-21
4
+
5
+ ### Changed
6
+
7
+ - **Decision menus render 1-N after a numbered list.** A numbered option menu placed directly below an ordered list, separated only by a blank line, rendered as `4.`-`6.` because CommonMark merged the two lists; a human replying `5` was then read against a three-option menu. One shared reference, `skills/brainstorming/reference/menu-layout.md`, owns the three permitted layouts (a prose line, a `---` rule, or bullets above the menu) and the reply mapping: a bare reply above the option count resolves to `R - L` when it lands in range, the agent echoes the resolved option in one sentence (`Taking 5 as option 2 - merge`) before acting, and any other out-of-range reply gets a clarifying question. Every menu site in shape-ticket, chase-bug, gatekeep-pr, check-delivery, finishing-a-development-branch, and gauntlet-resume cites it with one line; no site restates the rule. (#73)
8
+ - **check-delivery's confirmation gate is a two-option menu** (`1. approve the write` / `2. decline`); a typed `yes` still approves. (#73)
9
+
10
+ ### Added
11
+
12
+ - Eval target `check-delivery` and a `menu-after-numbered-findings` sample in six targets; `shape-ticket`, `gatekeep-pr`, and `check-delivery` load the shared reference through `target.json`. (#73)
13
+
3
14
  ## v7.24.0 - 2026-10-21
4
15
 
5
16
  ### Changed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-gauntlet",
3
- "version": "7.24.0",
3
+ "version": "7.25.0",
4
4
  "description": "Opinionated, gated workflow skills, subagent personas, and runtime extensions for the pi coding agent.",
5
5
  "author": "Jacek Juraszek",
6
6
  "type": "module",
@@ -0,0 +1,37 @@
1
+ ## Exposure
2
+ A numbered option list directly after an ordered list with only a blank line merges under CommonMark, displaying `N+1.`-`N+k.` after `N` preceding items. This control renders the options as `4.`-`6.`:
3
+ ```markdown
4
+ 1. Finding A
5
+ 2. Finding B
6
+ 3. Finding C
7
+
8
+ 1. Keep
9
+ 2. Merge
10
+ 3. Stop
11
+ ```
12
+
13
+ ## Permitted layouts
14
+ Separate numbered options from preceding ordered content. Default to a prose line (`Pick one:` or `Verdict:`); alternatively insert a `---` rule or write preceding content as bullets:
15
+ ```markdown
16
+ 1. Finding
17
+
18
+ Pick one:
19
+ 1. Merge
20
+ ```
21
+ ```markdown
22
+ 1. Finding
23
+
24
+ ---
25
+
26
+ 1. Merge
27
+ ```
28
+ ```markdown
29
+ - Finding
30
+
31
+ 1. Merge
32
+ ```
33
+
34
+ ## Reply mapping
35
+ Apply only to bare numeric replies to numbered option menus. Leave #63 compound replies such as `1: cache=A` and its bare-`1` shortcut to [disposition-protocol.md](../../finishing-a-development-branch/reference/disposition-protocol.md).
36
+ Count `N` options and let `L` count every preceding item in the entire contiguous ordered run adjoining the options through blank lines alone. Stop at prose, a rule, or bullets; earlier separated lists contribute nothing. Set `L = 0` after a separator.
37
+ Take replies `1`-`N` unchanged, without echo, even when they also equal `L + k`. Only map `R > N` with `1 <= R - L <= N` to option `R - L`; echo the resolution before acting: `Taking 5 as option 2 - merge`. For every other out-of-range reply, ask a clarifying question naming the valid range `1`-`N`.
@@ -167,6 +167,8 @@ change request, not a menu row.
167
167
  **Real bug** - four actions (all rendered unless noted), exactly one tagged
168
168
  `[recommended]`. Untracked origin:
169
169
 
170
+ Read and apply [menu-layout](../brainstorming/reference/menu-layout.md) before presenting these options and before acting on a numeric reply.
171
+
170
172
  ```
171
173
  1. [ ] File a ticket - /skill:shape-ticket, seeded with this evidence.
172
174
  2. [ ] Brainstorm now - /skill:brainstorming with this evidence as the seed.
@@ -176,6 +178,8 @@ change request, not a menu row.
176
178
 
177
179
  Tracker/GitHub origin (ticket row omitted as today, renumbered):
178
180
 
181
+ Read and apply [menu-layout](../brainstorming/reference/menu-layout.md) before presenting these options and before acting on a numeric reply.
182
+
179
183
  ```
180
184
  1. [ ] Brainstorm now - /skill:brainstorming with this evidence as the seed.
181
185
  2. [ ] Implement hotfix now - follow hotfix.md; add "as a PR" for a PR.
@@ -241,6 +245,8 @@ A verdict without its named citation is a red flag (see Red Flags - STOP).
241
245
  For a negative verdict, render the verdict with its citation, then a short
242
246
  numbered menu:
243
247
 
248
+ Read and apply [menu-layout](../brainstorming/reference/menu-layout.md) before presenting these options and before acting on a numeric reply.
249
+
244
250
  ```
245
251
  Verdict: <verdict name> - <citation>
246
252
 
@@ -254,6 +260,8 @@ way; for `cannot-replicate`, renumber the discovery-ticket row to 2.
254
260
 
255
261
  For `cannot-replicate` only, add a third row offering a discovery ticket:
256
262
 
263
+ Read and apply [menu-layout](../brainstorming/reference/menu-layout.md) before presenting these options and before acting on a numeric reply.
264
+
257
265
  ```
258
266
  3. [ ] File a discovery ticket - /skill:shape-ticket, seeded with what's missing.
259
267
  ```
@@ -379,6 +387,8 @@ rendered is out of skill scope - the skill has ended.
379
387
 
380
388
  **Real-bug example:**
381
389
 
390
+ Read and apply [menu-layout](../brainstorming/reference/menu-layout.md) before presenting these options and before acting on a numeric reply.
391
+
382
392
  ```
383
393
  Fault story: user pastes a URL with a trailing slash -> the router's path
384
394
  matcher does an exact string compare instead of normalizing -> the route
@@ -260,7 +260,18 @@ explicit yes-gate as the success path. Never posted unprompted.
260
260
  All-clear path -> **one confirmation gate**: present the shipped SHA,
261
261
  deliverable set, stage results (including any skip), the per-AC verdict
262
262
  table with evidence, the reviewer script, and the exact write about to
263
- happen. On approval, one batched write. The numbered steps below are the
263
+ happen.
264
+
265
+ Read and apply [menu-layout](../brainstorming/reference/menu-layout.md) before presenting these options and before acting on a numeric reply.
266
+
267
+ ```text
268
+ 1. approve the write
269
+ 2. decline
270
+ ```
271
+
272
+ Treat option `1` or typed `yes` as explicit approval; option `2` or any
273
+ unrecognized/non-approval reply means no write. On approval, one batched
274
+ write. The numbered steps below are the
264
275
  ordinary-run shape; when a ratified descope strike is in play, the
265
276
  body-edit half precedes step 1 - see the `descope edits` paragraph below
266
277
  for its mechanics, not repeated here:
@@ -180,6 +180,8 @@ Omit the block when N = 0.
180
180
 
181
181
  **Normal repo and named-branch worktree — present exactly these 5 options:**
182
182
 
183
+ Read and apply [menu-layout](../brainstorming/reference/menu-layout.md) before presenting these options and before acting on a numeric reply.
184
+
183
185
  ```
184
186
  Implementation complete. What would you like to do?
185
187
 
@@ -194,6 +196,8 @@ Which option?
194
196
 
195
197
  **Detached HEAD — present exactly these 4 options:**
196
198
 
199
+ Read and apply [menu-layout](../brainstorming/reference/menu-layout.md) before presenting these options and before acting on a numeric reply.
200
+
197
201
  ```
198
202
  Implementation complete. You're on a detached HEAD (externally managed workspace).
199
203
 
@@ -8,6 +8,8 @@ Read from SKILL.md step 6. Input: the report's verdict and the PR state. Output:
8
8
 
9
9
  Render fix consequences with the applicable lifetime from `post-selection-loop.md` `### Continuation record`. For named fixes, state that authority retains only the selected stable IDs for later independent reassessments, with the same lifetime as broad fixes; link active pre-push retries to `fix-wave.md` `## Review before push`. For clarification-only fixes, state one-shot authority for the exactly selected payload; keep nit consequences one-shot.
10
10
 
11
+ Read and apply [menu-layout](../../brainstorming/reference/menu-layout.md) before presenting these options and before acting on a numeric reply.
12
+
11
13
  Rows are `<n>. <verb> - <consequence>`; every row, `stop` included, carries its consequence clause. `stop` is always last, before the compose hint. `show evidence` is always offered and never `[recommended]`. A row the actor cannot execute - by `## Availability` below, or because the forge would refuse it (branch protection, a withhold) - is omitted and named in the compose line's `Not offered:` sentence; it is never `[recommended]`. Exactly one row is `[recommended]`. A **terminal overlay** is `own merge`, `merge queued` (once its read returns `MERGED` it re-renders as `own merge`), `approved`, or `merged or closed PR`; every other menu is an ordinary open-PR menu. **Landed** means the PR's `state` is `MERGED`; under `approved` and under a closed-unmerged PR nothing has landed.
12
14
 
13
15
  - `accept contract change` - invoke the concrete proposal's owning amendment process through `post-selection-loop.md` `### Contract decision`; settle the baseline only after completion
@@ -93,6 +93,8 @@ Apply per `fix-wave.md`: the local conflict check, one fresh implementer helper
93
93
 
94
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`.
95
95
 
96
+ Read and apply [menu-layout](../../brainstorming/reference/menu-layout.md) before presenting these options and before acting on a numeric reply.
97
+
96
98
  ```markdown
97
99
  ## AC coverage
98
100
  Informational - the ticket's rows are unchanged. PR <url>, merged <sha>, spec <path>
@@ -8,6 +8,8 @@ Render bottom-up for a terminal: least important first, verdict and menu last. E
8
8
 
9
9
  Section order is fixed:
10
10
 
11
+ Read and apply [menu-layout](../../brainstorming/reference/menu-layout.md) before presenting these options and before acting on a numeric reply.
12
+
11
13
  ```
12
14
  Delivers: <one sentence: what the PR does. With source: spec, a second sentence built from these clauses in
13
15
  order, each present only when it applies, joined with semicolons: covered rows ("ACs 1, 2, 4";
@@ -39,6 +39,8 @@ optional pasted text after the command line. Count tokens first; then first matc
39
39
  Spec dirs resolve per `reference/reconstruction.md` "Candidates" (`flowGuards.specDirs`
40
40
  precedence).
41
41
 
42
+ Read and apply [menu-layout](../brainstorming/reference/menu-layout.md) before presenting these options and before acting on a numeric reply.
43
+
42
44
  | Input | Route |
43
45
  |---|---|
44
46
  | no tokens, no pasted text | discovery: `<tmpdir>` via `node -p "require('os').tmpdir()"`; candidates are the regular files directly under `<tmpdir>/pi-handoff/` ending `.md` (non-recursive) whose line 1 starts `# Handoff:`; sorted by mtime, newest first; displayed one per line as `<n>. <title line> - <worktree: field value> - <mtime ISO-8601>` with `worktree: unavailable` when the field is absent; the human picks `<n>` (a single candidate is still confirmed); none -> STOP "no handoff briefs found under <tmpdir>/pi-handoff" |
@@ -118,6 +118,8 @@ Present, per proposed issue:
118
118
  - Proposed comment and supported relations, verbatim, if any - one approval covers the exact title + body + metadata + comment + relation payload.
119
119
  - For overlap, show mutually exclusive supported enrichment/create-anyway/no-write alternatives and coverage under the gathered reference; show failing alternatives unavailable. Selecting an option approves that displayed payload without another authorization prompt.
120
120
 
121
+ Read and apply [menu-layout](../brainstorming/reference/menu-layout.md) before presenting these options and before acting on a numeric reply.
122
+
121
123
  Number the options. A split offers per-issue subset selection, e.g. "approve 1,3; decline 2". **No affirmative answer on the exact presented diff = no write.**
122
124
 
123
125
  ### 9 - Write