@gtrabanco/pi-agentic-workflow 0.7.1 → 0.7.2

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.7.1",
3
+ "version": "0.7.2",
4
4
  "description": "Pi package: canonical agentic-workflow skills, friendly slash commands, and per-command model routing.",
5
5
  "keywords": [
6
6
  "pi-package",
@@ -36,24 +36,26 @@
36
36
  "LICENSE"
37
37
  ],
38
38
  "engines": {
39
- "node": ">=18"
39
+ "node": ">=18",
40
+ "bun": ">=1.4"
40
41
  },
41
42
  "publishConfig": {
42
43
  "access": "public"
43
44
  },
44
45
  "scripts": {
45
46
  "build": "tsc",
46
- "bundle:skills": "node scripts/bundle-skills.mjs",
47
- "test": "tsc && node --test test/*.test.mjs",
48
- "prepublishOnly": "npm run build && npm test",
49
- "mutation": "node scripts/mutation-check.mjs",
50
- "prepare": "npm run build"
47
+ "bundle:skills": "bun scripts/bundle-skills.mjs",
48
+ "test": "tsc && bun test test/*.test.mjs",
49
+ "test:node": "tsc && node --test test/*.test.mjs",
50
+ "prepublishOnly": "bun run build && bun run test",
51
+ "mutation": "bun scripts/mutation-check.mjs",
52
+ "prepare": "bun run build"
51
53
  },
52
54
  "peerDependencies": {
53
55
  "@earendil-works/pi-coding-agent": ">=0.85.1"
54
56
  },
55
57
  "devDependencies": {
56
- "@types/node": "^24",
58
+ "@types/node": "24.13.3",
57
59
  "typescript": "6"
58
60
  }
59
61
  }
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: execute-phase
3
3
  user-invocable: true
4
- version: 4.4.0
4
+ version: 4.4.1
5
5
  argument-hint: <NN> [P<k>] | --fix <n> [P<k>] | [--max-attempts N] [--force]
6
6
  allowed-tools: [Bash, Read, Edit, Write, MultiEdit]
7
7
  author: "Gabriel Trabanco <gtrabanco@users.noreply.github.com>"
@@ -115,8 +115,9 @@ use its fallback; never skip the workflow step.
115
115
  Planned by `plan-feature`/`plan-fix`; executes their SPEC. Explicit phases may
116
116
  hand off to `review-change` at layer/accumulation/sensitivity checkpoints and must
117
117
  at unit end. Unit-loop skips intermediate checkpoints and recommends the manual
118
- `/fold-findings` → re-run `/review-change` path after opening the PR; direct
119
- `review-change` remains the manual entry.
118
+ `/review-change` → `/fold-findings` (only on `REVIEW-FAIL`) → re-run
119
+ `/review-change` path after opening the PR; `review-change` remains the manual
120
+ entry.
120
121
  Independent work stays a proposal. A finished unit always opens its PR and flips
121
122
  to `done`; `audit-pr` gates merge. Every invocation prints the next step.
122
123
 
@@ -127,5 +128,6 @@ to `done`; `audit-pr` gates merge. Every invocation prints the next step.
127
128
  committed on the correct branch with nothing bundled beyond scope.
128
129
  - `git status --porcelain` is empty and an open-PR branch has nothing unpushed.
129
130
  - A finished unit is `done`, has an opened PR (URL printed), and recommends the
130
- mandatory `/fold-findings` → re-run `/review-change` hand-off, with `/audit-pr`
131
+ mandatory `/review-change` end review, then `/fold-findings` (only on
132
+ `REVIEW-FAIL`) and a re-run `/review-change`, with `/audit-pr`
131
133
  as the merge gate.
@@ -9,7 +9,8 @@ The normal omitted-phase command is already the batch:
9
9
 
10
10
  It selects every unfinished phase, gates and commits each one, skips
11
11
  intermediate review stops, opens the PR, then recommends the manual
12
- `/fold-findings` → re-run `/review-change` path. An explicit `P<n>` keeps the
12
+ `/review-change` → `/fold-findings` (only on `REVIEW-FAIL`) → re-run
13
+ `/review-change` path. An explicit `P<n>` keeps the
13
14
  atomic/manual path.
14
15
 
15
16
  ### Fresh-context driver (recommended for cheap models)
@@ -20,8 +21,9 @@ slice, and compact receipts. An external driver may implement the same contract:
20
21
 
21
22
  1. Call `workflow-status` and choose the next unfinished phase.
22
23
  2. Invoke `/execute-phase <unit> P<n>` on the cheap tool-capable tier.
23
- 3. Repeat `CONTINUE`; route `READY_FOR_REVIEW` to `/fold-findings`, then re-run
24
- `/review-change`, on the required review/fold tiers.
24
+ 3. Repeat `CONTINUE`; route `READY_FOR_REVIEW` to `/review-change`, then
25
+ `/fold-findings` (only on `REVIEW-FAIL`), then re-run `/review-change`, on
26
+ the required review/fold tiers.
25
27
  4. Stop on `NEEDS_INPUT`, `HALT`, repeated unchanged evidence, or the declared
26
28
  attempt budget.
27
29
 
@@ -22,9 +22,10 @@ Write `docs/features/<NN>-<slug>/CHECKLIST.md`: schema migration applied (if any
22
22
  ## Review checkpoint & finishing a unit
23
23
 
24
24
  **Independent final review is mandatory — every unit gets one before merge.**
25
- Recommend the manual `/fold-findings` → re-run `/review-change` path because it
26
- preserves fresh review contexts while handling bounded corrections; direct
27
- `review-change` remains the manual entry. Review
25
+ Recommend the mandatory `/review-change` → `/fold-findings` (only on
26
+ `REVIEW-FAIL`) → re-run `/review-change` path because it preserves fresh review
27
+ contexts while handling bounded corrections; direct `review-change` remains the
28
+ manual entry. Review
28
29
  runs in its own turn (hand-off, not composed): a skill's model and
29
30
  effort are fixed at turn start, so invoking `review-change` from here would run it at
30
31
  execute-phase's `sonnet`/`medium` rather than its own `opus`/`high` — under-powering
@@ -46,7 +47,8 @@ one).
46
47
  **Finishing a unit (single-pass, `--fix`, or a feature's final phase): the last step
47
48
  is always an open PR.** Mark the unit `done`, commit the flip, push, and `gh pr create`
48
49
  (see the mode steps above) — regardless of the review/audit still to come. Then hand
49
- off to `/fold-findings`, then re-run `/review-change`, which feeds `audit-pr`
50
+ off to `/review-change` (the mandatory end review) → `/fold-findings` (only
51
+ on `REVIEW-FAIL`) → re-run `/review-change`, which feeds `audit-pr`
50
52
  (the merge gate).
51
53
 
52
54
  **Adversarial pass at that mandatory end review.** `review-change` evaluates its
@@ -41,7 +41,8 @@ Final-phase / single-pass / fix hand-off:
41
41
  <unit> implemented, gate green, marked done.
42
42
  PR opened: <FULL PR URL — always printed here; not every agent shows open PRs>
43
43
  Roadmap/fix-index row: done · #<n> (linked and pushed)
44
- → Next: /fold-findings, then re-run /review-change (unresolved findings go to triage/replan)
44
+ → Next: /review-change on the changed HEAD (the mandatory end review)
45
+ · REVIEW-FAIL → /fold-findings (only on a REVIEW-FAIL), then re-run /review-change (unresolved findings go to triage/replan)
45
46
  · clean → /audit-pr (merge gate) → human merges
46
47
  · findings → fold fix-now into this PR; independent work remains a proposal until user triage; re-review
47
48
  · docs site declared (documentation map has a `Docs site` block) →
@@ -82,6 +82,7 @@ UNIT LOOP — <unit> COMPLETE
82
82
  Phases: <n> · Commits: <sha list> · Acceptance: <blob> · Gate: PASS
83
83
  PR: <url>
84
84
 
85
- → Next: /fold-findings, then re-run /review-change on the changed HEAD — triage or replan unresolved findings
85
+ → Next: /review-change on the changed HEAD — the mandatory end review (fold-findings only after a REVIEW-FAIL)
86
+ · findings → /fold-findings (only on a REVIEW-FAIL), then re-run /review-change — triage or replan unresolved findings
86
87
  · merge gate after REVIEW-PASS → /audit-pr
87
88
  ```
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: pre-execution-review
3
3
  user-invocable: false
4
- version: 2.2.0
4
+ version: 2.2.1
5
5
  author: "Gabriel Trabanco <gtrabanco@users.noreply.github.com>"
6
6
  license: MIT
7
7
  description: >
@@ -130,17 +130,20 @@ durable ledger its row does not name it for. Cells carry bare values: ` · ` joi
130
130
  ledgers, ` + ` joins owners, an owner is `<skill>:<column-set>` (the literal
131
131
  `human-owner` marks the person, the only authority for an amendment), and a `#`
132
132
  line is a directive. A script that writes only generated artifacts names no ledger
133
- and is out of scope; a copy or shell rewrite stays the reviewer's job.
133
+ and is out of scope; a copy or shell rewrite stays the reviewer's job. Validator
134
+ commands follow the repository's runtime convention: **bun first** (`bun test …`),
135
+ with the same command under `node --test …` when bun is absent — both runtimes
136
+ must pass; the CI node-compat job enforces the fallback.
134
137
 
135
138
  ```text
136
139
  ledger-ownership@1
137
140
  truth-class | ledger | owner | annotator | annotator-token | validator
138
- review-findings | docs/features/<NN>-<slug>/review-findings.md · docs/fix/<issue>-<topic>/review-findings.md | review-change:finding-rows + review-change:finding-mark + review-change:review-mark + audit-pr:audit-rows + triage-issue:triage-rows + fold-findings:folded-flag | scripts/ledger-provenance.mjs | · fold <sha> + · ticked <sha> + · REOPENED | node --test scripts/ledger-provenance.test.mjs
139
- planning-findings | docs/features/<NN>-<slug>/planning-findings.md · docs/fix/<issue>-<topic>/planning-findings.md | review-spec:spec-stage-rows + review-plan:plan-stage-rows + design-feature:product-class-resolutions + plan-feature:plan-class-resolutions + plan-fix:fix-plan-class-resolutions + fold-findings:source-class-resolutions | none | none | node --test scripts/pre-execution-quality.test.mjs
140
- progress | docs/features/<NN>-<slug>/progress.md · docs/fix/<issue>-<topic>/progress.md | plan-feature-scaffold:create + execute-phase:phase-entries + execute-phase:gate-rejection-traces + review-spec:product-receipt + review-plan:plan-receipt | none | none | node --test scripts/pre-execution-sensor.test.mjs
141
- known-issues | docs/features/<NN>-<slug>/known-issues.md · docs/fix/<issue>-<topic>/known-issues.md | plan-feature-scaffold:create + execute-phase:blocker-entries-and-status | none | none | node --test scripts/ledger-ownership.test.mjs
142
- decisions | docs/features/<NN>-<slug>/decisions.md · docs/fix/<issue>-<topic>/decisions.md | plan-feature-scaffold:create + design-feature:product-decisions + plan-feature:engineering-decisions + execute-phase:phase-decisions + human-owner:ratified-verdicts | none | none | node --test scripts/ledger-ownership.test.mjs
143
- roadmap | docs/features/ROADMAP.md · docs/fix/README.md | design-feature:idea-or-defined-row + plan-feature-scaffold:planned-row + plan-fix:fix-index-row + execute-phase:status-and-pr-link + ship-roadmap:founding-and-flip + audit-docs:low-risk-row-repair | none | none | node --test scripts/bounded-delivery-loops.test.mjs
141
+ review-findings | docs/features/<NN>-<slug>/review-findings.md · docs/fix/<issue>-<topic>/review-findings.md | review-change:finding-rows + review-change:finding-mark + review-change:review-mark + audit-pr:audit-rows + triage-issue:triage-rows + fold-findings:folded-flag | scripts/ledger-provenance.mjs | · fold <sha> + · ticked <sha> + · REOPENED | bun test scripts/ledger-provenance.test.mjs
142
+ planning-findings | docs/features/<NN>-<slug>/planning-findings.md · docs/fix/<issue>-<topic>/planning-findings.md | review-spec:spec-stage-rows + review-plan:plan-stage-rows + design-feature:product-class-resolutions + plan-feature:plan-class-resolutions + plan-fix:fix-plan-class-resolutions + fold-findings:source-class-resolutions | none | none | bun test scripts/pre-execution-quality.test.mjs
143
+ progress | docs/features/<NN>-<slug>/progress.md · docs/fix/<issue>-<topic>/progress.md | plan-feature-scaffold:create + execute-phase:phase-entries + execute-phase:gate-rejection-traces + review-spec:product-receipt + review-plan:plan-receipt | none | none | bun test scripts/pre-execution-sensor.test.mjs
144
+ known-issues | docs/features/<NN>-<slug>/known-issues.md · docs/fix/<issue>-<topic>/known-issues.md | plan-feature-scaffold:create + execute-phase:blocker-entries-and-status | none | none | bun test scripts/ledger-ownership.test.mjs
145
+ decisions | docs/features/<NN>-<slug>/decisions.md · docs/fix/<issue>-<topic>/decisions.md | plan-feature-scaffold:create + design-feature:product-decisions + plan-feature:engineering-decisions + execute-phase:phase-decisions + human-owner:ratified-verdicts | none | none | bun test scripts/ledger-ownership.test.mjs
146
+ roadmap | docs/features/ROADMAP.md · docs/fix/README.md | design-feature:idea-or-defined-row + plan-feature-scaffold:planned-row + plan-fix:fix-index-row + execute-phase:status-and-pr-link + ship-roadmap:founding-and-flip + audit-docs:low-risk-row-repair | none | none | bun test scripts/bounded-delivery-loops.test.mjs
144
147
  acceptance-manifest | docs/features/<NN>-<slug>/ACCEPTANCE.md · docs/fix/<issue>-<topic>/ACCEPTANCE.md | plan-feature-scaffold:feature-freeze + plan-fix:fix-freeze + human-owner:approved-amendment | none | none | git hash-object docs/features/<NN>-<slug>/ACCEPTANCE.md
145
148
  # no-script-writer: SPEC.md · PLAN.md · TASKS.md · CHECKLIST.md · testing.md · architecture-notes.md · planning-evidence.md · planning-obligations.md · delegated-evidence.md
146
149
  ```
@@ -5,7 +5,7 @@ digest**. One command produces it, so an author, a reviewer and a consumer canno
5
5
  drift apart while reading the same bytes.
6
6
 
7
7
  ```bash
8
- node scripts/pre-execution-snapshot.mjs build --stage <spec|plan> --unit <NN-slug|fix-N> \
8
+ bun scripts/pre-execution-snapshot.mjs build --stage <spec|plan> --unit <NN-slug|fix-N> \
9
9
  [--dir <artifact-dir>] [--unit-kind <feature|fix>] [--artifact-revision <id>] \
10
10
  [--source-revision <sha>] [--parent <64-hex>] [--json <out-file>]
11
11
  ```
@@ -61,7 +61,7 @@ Rules the builder enforces and no caller may improvise around:
61
61
  ### Re-verifying a receipt (consumers)
62
62
 
63
63
  ```bash
64
- node scripts/pre-execution-snapshot.mjs verify --stage <spec|plan> --unit <NN-slug|fix-N> \
64
+ bun scripts/pre-execution-snapshot.mjs verify --stage <spec|plan> --unit <NN-slug|fix-N> \
65
65
  [--dir <artifact-dir>] [--unit-kind <feature|fix>] [--receipt <receipt-id-or-digest>] \
66
66
  [--parent <64-hex>] [--policy <version>] [--source-revision <sha>] [--artifact-revision <id>]
67
67
  ```
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: review-change
3
3
  user-invocable: true
4
- version: 3.4.0
4
+ version: 3.5.0
5
5
  argument-hint: <path-or-glob> [--adversarial N] [--synthesize]
6
6
  author: "Gabriel Trabanco <gtrabanco@users.noreply.github.com>"
7
7
  license: MIT
@@ -37,6 +37,18 @@ For `REVIEW-FAIL` or `NEEDS-DECISION`, list every open finding ID in the closing
37
37
  recommendation, joined with ` + `; the review must never hand off only the first
38
38
  finding.
39
39
 
40
+ ## Review-end turn boundary
41
+
42
+ On `REVIEW-FAIL` or `NEEDS-DECISION`, this skill **ends at the report**: it
43
+ never invokes `/fold-findings`, `/execute-phase`, `/plan-feature`,
44
+ `/design-feature` or `/triage-issue` — those are separate user-initiated invocations,
45
+ run in a fresh turn (a programmatic outer driver may compose the same
46
+ sequence in-turn, per `REVIEW_PROCESS.md`). The review's only mutations are the
47
+ ledger commit (persist step 11) and, on `REVIEW-PASS` with a PR, the
48
+ receipt comment (persist step 12); it never folds a finding, executes a phase,
49
+ or edits code. A `REVIEW-FAIL`/`NEEDS-DECISION` turn closes when the report
50
+ block is printed (report step 13).
51
+
40
52
  Consume the internal [verification contract](<../verification-contract/SKILL.md>);
41
53
  the reviewer checks the same frozen `ACCEPTANCE.md` blob as the executor before
42
54
  mapping candidate evidence.
@@ -140,7 +152,8 @@ Orchestrates internal finders (`review-code`, `review-security`, `review-verify`
140
152
  one `review-implementation` classifier and `review-debt` transform, isolated by
141
153
  default; installed platform packs are optional. `triage-issue` is user-invoked
142
154
  only for independent proposals (D3). It is Stage 4: checkpoint reviews are
143
- optional, the end review is mandatory and fresh. `fix-now` folds in-unit,
155
+ optional, the end review is mandatory and fresh. `fix-now` is routed to the
156
+ unit's fold cycle — a separate `/fold-findings` invocation, never run by this review;
144
157
  `replan-in-unit` adds user-confirmed phases, and independent work becomes
145
158
  proposals. `audit-pr` consumes only the verified PR-comment receipt, never the
146
159
  chat report; `product-audit` is the periodic sweep. On `REVIEW-FAIL` the manual
@@ -21,10 +21,11 @@ Every finding gets a destination under the current-unit contract — none silent
21
21
  lost, and none becomes reviewer-created backlog (D3):
22
22
 
23
23
  - **fix-now** → persisted to the unit's `review-findings.md` fold ledger, then
24
- folded into the current phase (unmerged work) — never a tracked issue, never
25
- `plan-fix`. Classification honors `review-implementation`'s **current-unit
26
- contract**: in-scope defects are always fix-now / replan-in-unit — never a
27
- postpone/tradeoff/wontfix/new-issue escape.
24
+ routed to the current phase's fold cycle (`/fold-findings`, invoked after this review ends)
25
+ — never a tracked issue, never `plan-fix`. Classification honors
26
+ `review-implementation`'s **current-unit contract**: in-scope defects are
27
+ always fix-now / replan-in-unit — never a postpone/tradeoff/wontfix/new-issue
28
+ escape.
28
29
  - **fix-now / `replan-in-unit`** (too large to fold as-is) → keeps its fix-now
29
30
  class and ledger row; propose the new SPEC phase(s) to the user, then
30
31
  `execute-phase` on the same branch folds it.
@@ -37,6 +37,10 @@
37
37
  an uncommitted append hands the next review a dirty-tree stop. On
38
38
  `REVIEW-PASS` with an open PR no ledger write happens (the SHA-bound
39
39
  receipt is the durable record): head and posted receipt stay identical.
40
+ This skill's only mutations are this ledger commit (step 11) and, on
41
+ `REVIEW-PASS` with a PR, the receipt comment (step 12) — it never runs a
42
+ fold, executes a phase, or edits source (see the review-end turn boundary in
43
+ the SKILL.md Turn contract).
40
44
  12. **Close out the final-review receipt before reporting.** First derive the
41
45
  `Decision` from step 7 and persist step 11. Then, before printing any line of
42
46
  the fixed report block or the `→ Next:` block, complete the receipt action
@@ -112,6 +116,10 @@
112
116
  line — each sub-bullet is its own line, exactly as quoted below.
113
117
  For `REVIEW-FAIL` or `NEEDS-DECISION`, list every open finding ID in the
114
118
  closing recommendation, joined with ` + `; never hand off only the first.
119
+ The `→ Next:` block is a **recommendation, not a to-do list**: it names what
120
+ the *next* user-initiated invocation should be, and this turn ends when the
121
+ report block (step 13) is printed — emit the block and end the run; do not
122
+ begin the recommended command.
115
123
 
116
124
  **`Decision: REVIEW-FAIL`** (any fix-now finding open) — the recommended line
117
125
  is the fold, never the merge gate. Findings were persisted in step 11; **no
@@ -148,8 +148,8 @@
148
148
  and a human must check — visual correctness, real-device/locale behavior, UX
149
149
  feel, perf under load, anything marked *verify*. Be explicit so the dev has zero
150
150
  doubt about what to eyeball.
151
- 11. **Route the outcomes.** fix-now findings fold into the current unit (or gain
152
- user-confirmed phases via replan-in-unit); decision-required stops for the
151
+ 11. **Route the outcomes.** fix-now findings are routed to the unit's fold cycle (a separate `/fold-findings` invocation, never run by this review), or gain
152
+ user-confirmed phases via replan-in-unit; decision-required stops for the
153
153
  user's decision; genuinely independent future capabilities become
154
154
  **non-blocking proposals** — batched in the report with a trigger, and
155
155
  **never** sent to `triage-issue` automatically (D3). `review-change` creates
@@ -176,4 +176,5 @@ A **third cycle never starts** unless the user explicitly instructs it — it is
176
176
  the user's escape, never a reviewer election. The residue routes to
177
177
  `triage-issue --prioritize-now` (or the programmatic outer driver), and a unit
178
178
  that needs a third cycle has a planning or root-cause defect, not a review
179
- deficit.
179
+ deficit. Re-runs count **separate review invocations**, not in-session steps:
180
+ `/review-change` is invoked by the user in a fresh turn each time.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: review-plan
3
3
  user-invocable: true
4
- version: 1.6.0
4
+ version: 1.6.1
5
5
  argument-hint: <NN-slug | fix-N | path/to/SPEC.md> [--adversarial N]
6
6
  author: "Gabriel Trabanco <gtrabanco@users.noreply.github.com>"
7
7
  license: MIT
@@ -51,7 +51,7 @@ tables is a finding. Either way `review-plan` reads the **whole** table
51
51
 
52
52
  Then digest it with the recipe owner —
53
53
  `pre-execution-review`'s [`SKILL.md`](<../../pre-execution-review/SKILL.md>) →
54
- SNAPSHOT reference: `node scripts/pre-execution-snapshot.mjs build --stage plan
54
+ SNAPSHOT reference: `bun scripts/pre-execution-snapshot.mjs build --stage plan
55
55
  --unit <unitId> --parent <Product snapshot digest>`
56
56
  (`verify` mode is what consumers run afterwards, and it shares the builder, so pass
57
57
  `--parent` there too on a feature unit; a **fix** unit omits it and binds `null`).
@@ -59,9 +59,9 @@ answer beside the verdict block before reporting. A feature plan run names `--pa
59
59
 
60
60
  ```bash
61
61
  # feature plan — binds the Product snapshot it descends from
62
- node scripts/pre-execution-snapshot.mjs verify --stage plan --unit <NN-slug> --dir docs/features/<NN>-<slug> --unit-kind feature --parent <64-hex>
62
+ bun scripts/pre-execution-snapshot.mjs verify --stage plan --unit <NN-slug> --dir docs/features/<NN>-<slug> --unit-kind feature --parent <64-hex>
63
63
  # fix unit — no Product half exists (D6)
64
- node scripts/pre-execution-snapshot.mjs verify --stage plan --unit fix-<N> --dir docs/fix/<N> --unit-kind fix
64
+ bun scripts/pre-execution-snapshot.mjs verify --stage plan --unit fix-<N> --dir docs/fix/<N> --unit-kind fix
65
65
  ```
66
66
 
67
67
  A digest-bound receipt requires `structural.fresh: true` (and, for a PASS verdict,
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: review-spec
3
3
  user-invocable: true
4
- version: 1.7.0
4
+ version: 1.7.1
5
5
  argument-hint: <NN-slug | path/to/SPEC.md>
6
6
  author: "Gabriel Trabanco <gtrabanco@users.noreply.github.com>"
7
7
  license: MIT
@@ -43,7 +43,7 @@ contract failures, not style.
43
43
 
44
44
  Then build the snapshot with the recipe owner —
45
45
  `pre-execution-review`'s [`SKILL.md`](<../../pre-execution-review/SKILL.md>) →
46
- SNAPSHOT reference: `node scripts/pre-execution-snapshot.mjs build --stage spec
46
+ SNAPSHOT reference: `bun scripts/pre-execution-snapshot.mjs build --stage spec
47
47
  --unit <unitId>` (canonical serializer: sorted keys, context rows ordered by kind
48
48
  then identifier, UTF-8, lowercase SHA-256). The digest is stdout's first line, so
49
49
  this recipe writes no file; `--json` is in-repository only. Paste the digest it
@@ -47,7 +47,7 @@ receipt, run the recipe owner's re-verify for this stage and paste the sensor's
47
47
  answer beside the verdict block before reporting:
48
48
 
49
49
  ```bash
50
- node scripts/pre-execution-snapshot.mjs verify --stage spec --unit <NN-slug> --dir docs/features/<NN>-<slug> --unit-kind <feature|fix>
50
+ bun scripts/pre-execution-snapshot.mjs verify --stage spec --unit <NN-slug> --dir docs/features/<NN>-<slug> --unit-kind <feature|fix>
51
51
  ```
52
52
 
53
53
  A digest-bound receipt requires `structural.fresh: true` (and, for a PASS verdict,
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: ship-roadmap
3
3
  user-invocable: true
4
- version: 5.2.0
4
+ version: 5.2.1
5
5
  author: "Gabriel Trabanco <1969593+gtrabanco@users.noreply.github.com>"
6
6
  license: MIT
7
7
  argument-hint: "[--fullauto] | --continue [--fullauto]"
@@ -102,7 +102,7 @@ fallback only when a primitive is unavailable; keep stage order and safety floor
102
102
 
103
103
  | Relation | Skills/policy |
104
104
  |---|---|
105
- | Compose (same/lower tier) | `init-workspace`; JIT `design-feature` + `plan-feature-scaffold`; `plan-feature`; the review→fold manual path (`/fold-findings` → re-run `/review-change`); verdict-only `audit-pr`; `audit-docs`. |
105
+ | Compose (same/lower tier) | `init-workspace`; JIT `design-feature` + `plan-feature-scaffold`; `plan-feature`; the review→fold manual path (`/review-change` → `/fold-findings` on `REVIEW-FAIL` → re-run `/review-change`); verdict-only `audit-pr`; `audit-docs`. |
106
106
  | Cheap workers | `execute-phase` (fresh context/phase), mechanical folds, audit-blocker fixes; use the validated worker model. |
107
107
  | Human hand-off | Default merges, `product-audit` (higher effort), and report issue batches via `triage-issue`. |
108
108
  | Sibling | `workflow-status` supplies the strict sensor result; worker skills use the package-owned output profiles, while the conductor keeps its native `SHIP:` turn contract. |
@@ -70,9 +70,7 @@
70
70
  when the PR opens; any flips left at run end ride the report commit).
71
71
  Stop before the literal final `Hardening & PR` phase: PR owns that explicit
72
72
  phase so close-out has one owner. Never bundle phases into one worker.
73
- - **REVIEW** — compose the manual review→fold path in-turn (equal tier) once,
74
- `/fold-findings`, then re-run `/review-change`, over the complete PR
75
- candidate. It reuses a current exact-SHA receipt or runs `review-change`
73
+ - **REVIEW** — compose the review→fold path (equal tier) once: `/review-change`, then `/fold-findings` (on `REVIEW-FAIL`), then re-run `/review-change`. It reuses a current exact-SHA receipt or runs `review-change`
76
74
  context-clean, batches compatible fixes through `fold-findings`, and
77
75
  re-reviews only changed HEADs. Default correction budget is two; unchanged
78
76
  evidence stops NO-PROGRESS. L/sensitive features
@@ -9,7 +9,7 @@
9
9
  | Product review (REVIEW-SPEC) | opus/high | `review-spec` in a **clean context** (fresh subagent or outside headless call) — never the turn that wrote the product half; tier equals or exceeds the author's, so the ≥ rule holds |
10
10
  | Plan review (REVIEW-PLAN) | opus/high | `review-plan` in a **clean context**, same rule; it judges the plan the previous stage froze |
11
11
  | Phase execution, single-pass, fixes | **cheap worker** | fresh context per phase following `execute-phase`; Claude branch maps this role to `sonnet`, portable drivers use their validated worker tier |
12
- | Final review/correction loop | opus/high | compose the manual path `/fold-findings`, then re-run `/review-change`; it reuses a current exact-SHA receipt or reviews context-clean, and routes unresolved findings to `triage-issue --prioritize-now` |
12
+ | Final review/correction loop | opus/high | compose the manual path `/review-change`, then `/fold-findings` (only on `REVIEW-FAIL`), then re-run `/review-change`; it reuses a current exact-SHA receipt or reviews context-clean, and routes unresolved findings to `triage-issue --prioritize-now` |
13
13
  | Merge gate | opus/high | compose `audit-pr` in-turn (the highest-stakes automated verdict; must share one turn with the floor checks) |
14
14
  | Forge/git mechanics | — | Bash tool calls; no model judgment involved |
15
15
  | Final-report evidence gathering | haiku (optional) | fan-out subagents for grep-shaped per-feature log collection when ultracode is on; synthesis stays opus |
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: workflow-status
3
3
  user-invocable: true
4
- version: 3.2.0
4
+ version: 3.2.1
5
5
  author: "Gabriel Trabanco <gtrabanco@users.noreply.github.com>"
6
6
  license: MIT
7
7
  argument-hint: "[--json-only] [--last-envelope <json|path>]"
@@ -12,7 +12,7 @@ For every unit whose resolved status is `defined`, `planned` or `in-progress`:
12
12
  unit's `progress.md` (no `progress.md`, or no block for that stage → `missing`).
13
13
  2. The `snapshot` line — the `sha256:` digest the receipt binds — and each bound
14
14
  artifact's current bytes: re-derive the digest with the recipe owner's verify
15
- mode — `node scripts/pre-execution-snapshot.mjs verify --stage <spec|plan> --unit
15
+ mode — `bun scripts/pre-execution-snapshot.mjs verify --stage <spec|plan> --unit
16
16
  <id> [--parent <64-hex>]` (`pre-execution-review` owns the recipe; a feature plan
17
17
  check needs the Product digest it descended from, a fix check binds no parent).
18
18
  Read `structural.reasonCode` and `structural.changedPaths` out of the JSON — they
@@ -71,7 +71,7 @@ live evidence against a frozen ledger remains a contradiction candidate.
71
71
  missing receipt there surfaces as a gate blocker; merged units stay excluded
72
72
  (the merge itself closes their gates). Read the stage's
73
73
  newest receipt block, re-derive the bound digest with the recipe owner's
74
- verify mode (`node scripts/pre-execution-snapshot.mjs verify --stage
74
+ verify mode (`bun scripts/pre-execution-snapshot.mjs verify --stage
75
75
  <spec|plan> --unit <id> [--parent <64-hex>]` — a snapshot digest is a canonical SHA-256, never a
76
76
  git blob id; `structural.reasonCode` names the dimension that drifted), and
77
77
  label the stage `current`/`missing`/`stale`/`wrong-stage`/`substitute`/