@gtrabanco/pi-agentic-workflow 0.7.0 → 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/README.es.md +1 -1
- package/README.md +1 -1
- package/package.json +11 -10
- package/skills/execute-phase/SKILL.md +6 -4
- package/skills/execute-phase/references/BATCH_AND_PORTABILITY.md +5 -3
- package/skills/execute-phase/references/CLOSEOUT.md +6 -4
- package/skills/execute-phase/references/FOLDING.md +2 -1
- package/skills/execute-phase/references/UNIT_LOOP.md +2 -1
- package/skills/pre-execution-review/SKILL.md +1 -1
- package/skills/pre-execution-review/references/LEDGERS.md +10 -7
- package/skills/pre-execution-review/references/SNAPSHOT.md +2 -2
- package/skills/review-change/SKILL.md +15 -2
- package/skills/review-change/references/OUTPUT_AND_GUARDRAILS.md +5 -4
- package/skills/review-change/references/PERSIST_AND_DECIDE.md +8 -0
- package/skills/review-change/references/REVIEW_PROCESS.md +4 -3
- package/skills/review-plan/SKILL.md +1 -1
- package/skills/review-plan/references/CHECKS.md +1 -1
- package/skills/review-plan/references/OUTPUT.md +2 -2
- package/skills/review-spec/SKILL.md +1 -1
- package/skills/review-spec/references/CHECKS.md +1 -1
- package/skills/review-spec/references/OUTPUT.md +1 -1
- package/skills/ship-roadmap/SKILL.md +2 -2
- package/skills/ship-roadmap/references/ADVANCE.md +1 -3
- package/skills/ship-roadmap/references/MODEL_ROUTING.md +1 -1
- package/skills/workflow-status/SKILL.md +1 -1
- package/skills/workflow-status/references/PRE_EXECUTION.md +1 -1
- package/skills/workflow-status/references/SENSOR_CORE.md +1 -1
package/README.es.md
CHANGED
|
@@ -145,7 +145,7 @@ archivo de proyecto mientras el proyecto no sea de confianza.
|
|
|
145
145
|
|
|
146
146
|
## Notas
|
|
147
147
|
|
|
148
|
-
- Probado con Pi 0.85.
|
|
148
|
+
- Probado con Pi 0.85.1 (2026-09-05) (`pi install`, skills de paquete, registro de
|
|
149
149
|
comandos amigables, set/clear enrutado, round-trip de consola de ajustes,
|
|
150
150
|
`sendUserMessage` con expansión de plantillas).
|
|
151
151
|
- El paquete declara Pi como peer dependency; no incluye ninguna copia de Pi.
|
package/README.md
CHANGED
|
@@ -139,7 +139,7 @@ touch the project file while the project is untrusted.
|
|
|
139
139
|
|
|
140
140
|
## Notes
|
|
141
141
|
|
|
142
|
-
- Verified against Pi 0.85.
|
|
142
|
+
- Verified against Pi 0.85.1 (2026-09-05) (`pi install`, package skills, friendly
|
|
143
143
|
command registration, routed set/clear, settings console round-trip, `sendUserMessage`
|
|
144
144
|
with prompt template expansion).
|
|
145
145
|
- The package declares Pi as a peer dependency; it bundles no copy of Pi.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gtrabanco/pi-agentic-workflow",
|
|
3
|
-
"version": "0.7.
|
|
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,25 +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": "
|
|
47
|
-
"test": "tsc &&
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
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
|
-
"@earendil-works/pi-coding-agent": "
|
|
55
|
+
"@earendil-works/pi-coding-agent": ">=0.85.1"
|
|
54
56
|
},
|
|
55
57
|
"devDependencies": {
|
|
56
|
-
"@
|
|
57
|
-
"@types/node": "^24",
|
|
58
|
+
"@types/node": "24.13.3",
|
|
58
59
|
"typescript": "6"
|
|
59
60
|
}
|
|
60
61
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: execute-phase
|
|
3
3
|
user-invocable: true
|
|
4
|
-
version: 4.4.
|
|
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
|
-
`/
|
|
119
|
-
`review-change` remains the manual
|
|
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 `/
|
|
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
|
-
`/
|
|
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 `/
|
|
24
|
-
`/
|
|
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
|
|
26
|
-
|
|
27
|
-
`review-change` remains the
|
|
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 `/
|
|
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: /
|
|
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: /
|
|
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
|
```
|
|
@@ -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 |
|
|
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 |
|
|
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 |
|
|
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 |
|
|
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 |
|
|
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 |
|
|
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
|
-
|
|
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
|
-
|
|
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
|
+
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`
|
|
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
|
-
|
|
25
|
-
`plan-fix`. Classification honors
|
|
26
|
-
contract**: in-scope defects are
|
|
27
|
-
postpone/tradeoff/wontfix/new-issue
|
|
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
|
|
152
|
-
user-confirmed phases via replan-in-unit
|
|
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.
|
|
@@ -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: `
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
@@ -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: `
|
|
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
|
-
|
|
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.
|
|
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
|
|
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
|
|
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 |
|
|
@@ -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 — `
|
|
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 (`
|
|
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`/
|