@gtrabanco/pi-agentic-workflow 0.20.0 → 0.21.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gtrabanco/pi-agentic-workflow",
3
- "version": "0.20.0",
3
+ "version": "0.21.0",
4
4
  "description": "Pi package: canonical agentic-workflow skills, friendly slash commands, and per-command model routing.",
5
5
  "keywords": [
6
6
  "pi-package",
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: fold-findings
3
3
  user-invocable: true
4
- version: 1.7.0
4
+ version: 1.8.0
5
5
  argument-hint: [finding-id …]
6
6
  author: "Gabriel Trabanco <1969593+gtrabanco@users.noreply.github.com>"
7
7
  license: MIT
@@ -102,9 +102,9 @@ no schema field). Six fields, always present:
102
102
  - Repaired: <F-ids with (VF-<n>) refs, joined ` + `, or `none`>
103
103
  - Refuted/open: <F-ids joined ` + `, or `none`>
104
104
  - Gate: <command> → exit <n> at head <40-hex sha> · n/a when nothing was folded
105
- - Batch class: <all-repair-in-place | frozen (replan present) | none>
105
+ - Batch class: <all-repair-in-place | frozen (replan present) | frozen (product owner present) | none>
106
106
  - Fold diff: <shortstat from a real `git diff` run> · none when nothing was folded
107
- - Branch: <RE-REVIEW-REQUIRED (delta) | RE-REVIEW-OPTIONAL | RE-REVIEW-SKIPPED | REPLAN-ROUTE>
107
+ - Branch: <RE-REVIEW-REQUIRED (delta) | RE-REVIEW-OPTIONAL | RE-REVIEW-SKIPPED | REPLAN-ROUTE | PRODUCT-ROUTE>
108
108
  ```
109
109
 
110
110
  - The `Gate` line carries the actual exit codes observed at the head the gate
@@ -114,9 +114,9 @@ no schema field). Six fields, always present:
114
114
  - The `Fold diff` shortstat comes from a real `git diff` run over the batch's
115
115
  commits.
116
116
  - The `Batch class` derives from the taken queue's frozen rows only — the fold
117
- never reclassifies (`all-repair-in-place`, `frozen (replan present)`, or
118
- `none` for an empty queue); the vocabulary comes from
119
- `review-implementation`'s closed class set.
117
+ never reclassifies (`all-repair-in-place`, `frozen (replan present)`,
118
+ `frozen (product owner present)`, or `none` for an empty queue); the
119
+ vocabulary comes from `review-implementation`'s closed class set.
120
120
 
121
121
  **Freeze-batch (replan present).** When the taken queue contains any row whose
122
122
  frozen class is `replan-in-unit` or `decision-required`, nothing folds: no
@@ -129,6 +129,16 @@ and surface the decision to the user, never a planner. `<unit>` is the bare fold
129
129
  `node scripts/unit-route.mjs <unit>` is the discovery step the fold already
130
130
  ran; it is never the recommendation.
131
131
 
132
+ **Freeze-batch (product owner present).** Any taken `fix-now` row whose `Route`
133
+ cell begins `product owner`, `product-owned` or `owned by product` (head-anchored,
134
+ identical to `scripts/unit-route.mjs`'s `PRODUCT_ROUTE` regex,
135
+ per `#293`) freezes the batch too —
136
+ nothing folds, no `folded: yes` flips, no commits: the fold loop repairs source,
137
+ never authority (`pre-execution-review` POLICY §4, `#293`). The receipt records
138
+ the `PRODUCT-ROUTE` branch and the retained row ids; the consumer is the
139
+ router's printed `route: product` lane hand-off. Full condition and hand-off
140
+ table: [`FOLD_PROCESS.md`](references/FOLD_PROCESS.md) §Batch classification.
141
+
132
142
  ## Guardrails
133
143
 
134
144
  Scope is the ledger (or explicit ID subset); unlisted discoveries are proposals
@@ -175,6 +185,7 @@ or touched outside the queue.
175
185
  · any BLOCKED (<F1> + <F2> + …) → supply the listed missing inputs, then re-run /fold-findings
176
186
  · any REPLAN (<F1> + <F2> + …) → /unit-lane <slug> or /unit-lane --fix <n> — the lane re-runs its plan step, appends the phases to the unit's SPEC; its review step gates before /execute-phase on this unit
177
187
  · any DECISION (<F1> + <F2> + …) → stop and surface the decision to the user — a `route: decision` conclusion names no planner, so the unit waits on the user before any plan or code change
188
+ · any PRODUCT (<F1> + <F2> + …) → /unit-lane <slug> or /unit-lane --fix <n> — the lane repairs the half, its review step re-judges it
178
189
  ```
179
190
 
180
191
  Every `· ` sub-bullet is exactly one physical line — never hard-wrapped across
@@ -187,12 +198,13 @@ carry `<slug>` or `<n>` into a live hand-off.
187
198
 
188
199
  ## Closing-block decision branch (choose one, at emission)
189
200
 
190
- The closing block picks exactly one of four outcomes. The **no-decision →
201
+ The closing block picks exactly one of five outcomes. The **no-decision →
191
202
  re-review default** holds whenever the turn carries no recorded prior consumer
192
203
  decision to skip.
193
204
 
194
205
  | Batch state | Branch | `→ Next:` (consumer) |
195
206
  |---|---|---|
207
+ | freeze-batch (≥ 1 product-owned row) | `PRODUCT-ROUTE` | `/unit-lane <slug>` (feature) or `/unit-lane --fix <n>` (fix) when the router concludes `product` — the lane repairs the half through its `design` step, its `review` step re-judges it; the conclusion printed by `node scripts/unit-route.mjs <unit>` (discovery step the fold already ran) |
196
208
  | freeze-batch (≥ 1 replan-class row) | `REPLAN-ROUTE` | `/unit-lane <slug>` (feature) or `/unit-lane --fix <n>` (fix) when the router concludes `replan` — user confirms, the lane's `plan` step appends the phases and its `review` step gates, then `/execute-phase` on this unit; on `route: decision` stop and surface the decision to the user — the conclusion printed by `node scripts/unit-route.mjs <unit>` (discovery step the fold already ran) |
197
209
  | `all-repair-in-place` + docs-only + no folded row severity `high` + prior consumer skip decision | `RE-REVIEW-SKIPPED` | skip — consumer has explicitly decided to skip the re-review |
198
210
  | `all-repair-in-place` + docs-only + no folded row severity `high` | `RE-REVIEW-OPTIONAL` | `/review-change` (default, delta mode) — or the consumer's recorded skip decision |
@@ -44,6 +44,7 @@
44
44
  | Condition over the taken batch | Batch class | Fold behavior |
45
45
  |---|---|---|
46
46
  | ≥ 1 row with frozen class `replan-in-unit` or `decision-required` | `frozen (replan present)` | **freeze-batch** — nothing folds, no `folded: yes` flips, no commits; the receipt records the REPLAN-ROUTE and every retained (unfolded) row id; the loop stops; the consumer is the conclusion printed by `node scripts/unit-route.mjs <unit>` (discovery step the fold already ran), where `<unit>` is the bare folder number or the full slug (both resolve): on `route: replan` the planner command the router printed — `/unit-lane <slug>` (feature) or `/unit-lane --fix <n>` (fix) — the lane appends the phases and its `review` step gates, then `/execute-phase` on this unit; on `route: decision` stop and surface the decision to the user, never a planner |
47
+ | ≥ 1 row with frozen class `fix-now` whose `Route` cell begins `product owner`, `product-owned` or `owned by product` (head-anchored, identical to `scripts/unit-route.mjs`'s `PRODUCT_ROUTE` regex: `/^(?:product[- ]owner\|product[- ]owned\|owned by product)\b/i`, per `#293`) | `frozen (product owner present)` | **freeze-batch** — nothing folds, no `folded: yes` flips, no commits; the receipt records the PRODUCT-ROUTE and every retained (unfolded) row id; the loop stops; the consumer is the conclusion printed by `node scripts/unit-route.mjs <unit>`: `route: product` and the lane hand-off — `/unit-lane <slug>` (feature) or `/unit-lane --fix <n>` (fix) — the lane repairs the half, its `review` step re-judges it, then `/execute-phase` on this unit |
47
48
  | all taken rows foldable, none replan-class | `all-repair-in-place` | fold as today (group → fix → gate → commit → flip) |
48
49
  | empty queue (zero findings taken) | `none` | receipt only |
49
50
 
@@ -51,8 +52,9 @@
51
52
  class set (`CLASSIFY.md`); the receipt invents no parallel vocabulary.
52
53
 
53
54
  The emitted branch follows the closing-block decision inputs in the skill:
54
- a freeze-batch always selects `REPLAN-ROUTE`; otherwise the docs-only
55
- file-set test (E-D3) and the frozen-severity-`high` override (E-D2) select
55
+ a freeze-batch selects `REPLAN-ROUTE` for a `frozen (replan present)` batch
56
+ and `PRODUCT-ROUTE` for a `frozen (product owner present)` batch; otherwise
57
+ the docs-only file-set test (E-D3) and the frozen-severity-`high` override (E-D2) select
56
58
  `RE-REVIEW-OPTIONAL` vs `RE-REVIEW-REQUIRED (delta)`.
57
59
  8. **Disputes.** Non-reproducible/already-fixed/wrong findings become
58
60
  `DISPUTED <evidence → user decision>`; never edit classification or create an
@@ -82,7 +84,7 @@ present:
82
84
  - Repaired: <F-ids with (VF-<n>) refs, joined ` + `, or `none`>
83
85
  - Refuted/open: <F-ids joined ` + `, or `none`>
84
86
  - Gate: <command> → exit <n> at head <40-hex sha> · n/a when nothing was folded
85
- - Batch class: <all-repair-in-place | frozen (replan present) | none>
87
+ - Batch class: <all-repair-in-place | frozen (replan present) | frozen (product owner present) | none>
86
88
  - Fold diff: <shortstat from a real `git diff` run> · none when nothing was folded
87
- - Branch: <RE-REVIEW-REQUIRED (delta) | RE-REVIEW-OPTIONAL | RE-REVIEW-SKIPPED | REPLAN-ROUTE>
89
+ - Branch: <RE-REVIEW-REQUIRED (delta) | RE-REVIEW-OPTIONAL | RE-REVIEW-SKIPPED | REPLAN-ROUTE | PRODUCT-ROUTE>
88
90
  ```
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: review-change
3
3
  user-invocable: true
4
- version: 3.11.0
4
+ version: 3.12.0
5
5
  argument-hint: <path-or-glob> [--adversarial N] [--synthesize]
6
6
  author: "Gabriel Trabanco <1969593+gtrabanco@users.noreply.github.com>"
7
7
  license: MIT
@@ -138,9 +138,10 @@ exact command tokens.
138
138
  fix); the lane re-runs its plan step on this branch, its review step
139
139
  gates, then `/execute-phase <unit>` (yes: list the finding ids; no: omit
140
140
  this line)
141
- · any finding owned by product? → /unit-lane <unit> — the lane's design
142
- step repairs the half, its review step re-judges it (yes: list the ids;
143
- no: omit this line)
141
+ · any finding owned by product? → `node scripts/unit-route.mjs <unit>` prints
142
+ `route: product` + the lane hand-off — `/unit-lane <unit>` for a feature,
143
+ `/unit-lane --fix <n>` for a fix: the lane repairs the half, its review
144
+ step re-judges it (yes: list the ids; no: omit this line)
144
145
  · independent proposals → present to the user; only the user routes them
145
146
  to /triage-issue
146
147
  · adversarial recommendation checklist fired AND this run was
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: review-implementation
3
3
  user-invocable: false
4
- version: 1.10.0
4
+ version: 1.11.0
5
5
  argument-hint: <path-or-glob>
6
6
  allowed-tools: Read, Grep, Glob, Bash, WebFetch
7
7
  author: "Gabriel Trabanco <1969593+gtrabanco@users.noreply.github.com>"
@@ -175,7 +175,7 @@ finding in its `Route` cell.
175
175
  |---|---|---|
176
176
  | `source` | fold locally: `/fold-findings`, then re-run `/review-change` on the changed HEAD | — |
177
177
  | `plan` | run `node scripts/unit-route.mjs <unit>` → `route: replan`; the planning author re-cuts the artifact (SPEC `## Phases`, an obligation row, an acceptance mapping, a ledger) on the same branch with the user's confirmation, then the lane's **`review` step** precedes `execute-phase` | fold it in code and leave the plan describing the old build |
178
- | `product` | `/unit-lane <unit>` repairs the half through its `design` step, its `review` step re-judges it | patch the product claim into agreement in code |
178
+ | `product` | run `node scripts/unit-route.mjs <unit>` → `route: product` → `/unit-lane <slug>` (feature) or `/unit-lane --fix <n>` (fix): the lane repairs the half through its `design` step, its `review` step re-judges it | patch the product claim into agreement in code |
179
179
  | `environment` / `runtime` | the existing retry/`BLOCKED` paths | translate into a PASS, or an issue |
180
180
 
181
181
  - `fix-now` with a `plan` or `product` owner keeps its severity but is **not**
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: triage-issue
3
3
  user-invocable: true
4
- version: 2.10.0
4
+ version: 2.11.0
5
5
  argument-hint: <issue-number> [more issue numbers…] | <audit-id> F<k> [F<j>…] | --prioritize-now <unit> F<k> [F<j>…]
6
6
  author: "Gabriel Trabanco <1969593+gtrabanco@users.noreply.github.com>"
7
7
  license: MIT
@@ -24,6 +24,13 @@ after `/fold-findings` leaves rows unresolved.
24
24
  `decision-required`. Ask the user; do not guess or weaken the finish line.
25
25
  - A finding disproved by current evidence is `disputed`. Preserve the row
26
26
  and show the evidence; do not mark it folded or silently delete it.
27
+ - A `fix-now` finding whose owning stage is `product` — the finding is
28
+ against the product half, not the code — is `product-repair` (#293). Run
29
+ `node scripts/unit-route.mjs <unit>`; its `route: product` line prints the
30
+ lane hand-off (`/unit-lane <unit>` for a feature, `/unit-lane --fix <n>`
31
+ for a fix): the lane repairs the half, its review step re-judges it. Never
32
+ fold it into the current unit — the fold loop repairs source, not
33
+ authority (`pre-execution-review` POLICY §4).
27
34
 
28
35
  4. Never implement the new phases in this triage turn. After a replan, ask the
29
36
  user to continue manually with `/execute-phase <unit> P<n>` (or the fix
@@ -34,7 +41,7 @@ Return exactly one block per finding:
34
41
  ```text
35
42
  REVIEW FINDING <F-k> — <short title>
36
43
  Checked: <commands and evidence>
37
- VERDICT: fix-now | replan-in-unit | decision-required | disputed
44
+ VERDICT: fix-now | replan-in-unit | decision-required | product-repair | disputed
38
45
  Action taken: <current-unit fold/phase | unit-lane | user decision>
39
46
  ```
40
47