@gtrabanco/pi-agentic-workflow 0.10.5 → 0.10.7
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 +1 -1
- package/skills/design-feature/SKILL.md +7 -4
- package/skills/design-feature/references/INTERVIEW.md +14 -9
- package/skills/orchestration-envelope/SKILL.md +1 -1
- package/skills/orchestration-envelope/references/TURN_CONTRACT.md +32 -0
- package/skills/review-change/references/PERSIST_AND_DECIDE.md +4 -0
- package/skills/review-plan/references/OUTPUT.md +4 -1
- package/skills/review-spec/references/OUTPUT.md +3 -1
- package/skills/ship-roadmap/SKILL.md +1 -1
- package/skills/ship-roadmap/references/RECOVERY_AND_SELECTION.md +1 -1
- package/skills/workflow-status/SKILL.md +4 -1
- package/skills/workflow-status/references/PRE_EXECUTION.md +6 -4
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: design-feature
|
|
3
3
|
user-invocable: true
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.4.0
|
|
5
5
|
argument-hint: <idea | NN-slug> [<instruction>]
|
|
6
6
|
author: "Gabriel Trabanco <gtrabanco@users.noreply.github.com>"
|
|
7
7
|
license: MIT
|
|
@@ -89,15 +89,18 @@ another `references/` path; in the DEFER column, bare names live in the same
|
|
|
89
89
|
directory as the links.
|
|
90
90
|
|
|
91
91
|
**Hard stop for an incomplete raw-idea interview:** LOAD exactly
|
|
92
|
-
`references/INTERVIEW.md` and no other reference.
|
|
93
|
-
|
|
92
|
+
`references/INTERVIEW.md` and no other reference. Present its ONE compact
|
|
93
|
+
form-turn — the ≤ 6 fixed rubric slots plus the identity rows, each carrying a
|
|
94
|
+
recommended default the user can accept with one word — then return
|
|
95
|
+
`NEEDS_INPUT` and end the turn when slots remain unresolved; genuine ambiguity
|
|
96
|
+
gets at most **2 follow-up turns**, never a third ask. `WRITE_AND_UPSERT.md` is
|
|
94
97
|
forbidden until every mandatory interview slot is resolved; that resource then
|
|
95
98
|
owns closure rows and writing.
|
|
96
99
|
|
|
97
100
|
| Condition now | LOAD now | DEFER / SKIP now |
|
|
98
101
|
|---|---|---|
|
|
99
102
|
| Bare existing slug, no instruction | [interview](references/INTERVIEW.md) through its interaction rule; report status and stop | `WRITE_AND_UPSERT.md`, `UPSERT_EXAMPLE.md`, `REPAIR.md`, `PORTABILITY.md` |
|
|
100
|
-
| Brand-new idea with any mandatory interview slot unresolved | [interview](references/INTERVIEW.md) only;
|
|
103
|
+
| Brand-new idea with any mandatory interview slot unresolved | [interview](references/INTERVIEW.md) only; present exactly one form-turn (≤ 6 slots + identity, each with a default) and stop | `WRITE_AND_UPSERT.md`, `UPSERT_EXAMPLE.md`, `REPAIR.md`, `PORTABILITY.md` |
|
|
101
104
|
| New idea after every mandatory interview slot resolves | [interview](references/INTERVIEW.md), then [closure, write, and upsert](references/WRITE_AND_UPSERT.md) | `UPSERT_EXAMPLE.md` unless shape is ambiguous; `REPAIR.md`, `PORTABILITY.md` |
|
|
102
105
|
| Existing slug plus instruction | interview, then closure/write/upsert | [upsert example](references/UPSERT_EXAMPLE.md) unless shape is ambiguous; `REPAIR.md`, `PORTABILITY.md` |
|
|
103
106
|
| Existing slug whose `progress.md` carries `SPEC-REVIEW-FAIL` or `NEEDS-DESIGN` | [interview](references/INTERVIEW.md), then [review repair](references/REPAIR.md) | `UPSERT_EXAMPLE.md`, `PORTABILITY.md` |
|
|
@@ -16,10 +16,13 @@
|
|
|
16
16
|
3. **Raw-idea interview (folded in, only when starting from zero or the
|
|
17
17
|
instruction leaves genuine gaps).** Fixed protocol — structural, not
|
|
18
18
|
judgement:
|
|
19
|
-
- **One
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
- **One form-turn, then at most 2 follow-up turns.** The first interview
|
|
20
|
+
turn is ONE compact form covering every rubric slot below plus the
|
|
21
|
+
identity slots, each row carrying a recommended default the user accepts
|
|
22
|
+
with one word (or edits in place). Ask nothing the docs or the instruction
|
|
23
|
+
already answer. Genuine ambiguity the form cannot resolve gets at most
|
|
24
|
+
**2 follow-up turns** — never a third ask.
|
|
25
|
+
- **Vagueness rubric (fixed slots — the form rows ARE this list).**
|
|
23
26
|
Probe each slot until it is filled or explicitly `n/a: <reason>`:
|
|
24
27
|
1. **Affected users/roles** — who uses it; who must not.
|
|
25
28
|
2. **Error & edge states** — what happens on failure / empty / invalid.
|
|
@@ -40,11 +43,13 @@
|
|
|
40
43
|
- **Escalation (structural).** If, after the interview, **≥ 3 rubric slots
|
|
41
44
|
remain empty** (neither filled nor `n/a`), do not guess: end the turn
|
|
42
45
|
`NEEDS_INPUT`, listing the empty slots verbatim as the pending
|
|
43
|
-
questions — the feature is not designable yet.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
questions — the feature is not designable yet. Ambiguity that survives the
|
|
47
|
+
follow-up budget escalates the same way (`interview:ambiguity-cap`): the
|
|
48
|
+
2-turn cap never licenses a third ask.
|
|
49
|
+
- The identity questions ride the same form-turn: problem & goal, business
|
|
50
|
+
goals, size estimate (`XS/S/M/L` — XS/S stays SPEC-only, M/L gets the
|
|
51
|
+
full artifact set), non-goals / future work, traceability (offer a
|
|
52
|
+
tracking issue; if created, the eventual PR will `Closes #n`).
|
|
48
53
|
4. **Proportional research.** Capability closure (step 5) is cheap and comes
|
|
49
54
|
first. Reach for external or domain research **only** when the feature
|
|
50
55
|
touches a domain genuinely new to the project (a regulation, an unfamiliar
|
|
@@ -20,6 +20,37 @@
|
|
|
20
20
|
|
|
21
21
|
**Push policy supplement:** Box 4 covers the end-of-unit push. Some consumers (e.g. `execute-phase/references/PREFLIGHT.md`) define additional push rules for mid-phase commits when a PR is already open — those per-consumer supplements extend this contract and must be loaded alongside it by the consumer skill.
|
|
22
22
|
|
|
23
|
+
## Machine-check profile (boxes 1–5)
|
|
24
|
+
|
|
25
|
+
Boxes 1–5 are mechanical. Demonstrate them by running the verifier — the
|
|
26
|
+
scaffold shim `template/.agentic-workflow/hooks/turn-contract.sh` (bash + git +
|
|
27
|
+
gh; presence-only box2 — the conditional phase-lint clause is engine-only, so
|
|
28
|
+
a shim receipt leaves that clause unverified, ED-52-3) or the producer-crate
|
|
29
|
+
engine `packages/agentic-workflow/bin/turn-contract.mjs` — and pasting its
|
|
30
|
+
one-line receipt beside the git/gh evidence. When the receipt is pasted,
|
|
31
|
+
reciting boxes 1–5 in prose is **not** required. Verifier unavailable (no bash,
|
|
32
|
+
or no shim/engine in the project)? Recite boxes 1–5 exactly as before — the
|
|
33
|
+
profile never weakens a box, and a turn with neither receipt nor recitation is
|
|
34
|
+
unverified. Boxes 6–11 are unchanged: they stay agent-attested judgment calls
|
|
35
|
+
no script may speak for. The closing `→ Next:` block may be echoed from the
|
|
36
|
+
`workflow-status` envelope instead of hand-authored: `next.recommended`
|
|
37
|
+
supplies the recommended line and `next.alternatives` the `·` sub-bullets,
|
|
38
|
+
preserving the fixed block shape.
|
|
39
|
+
|
|
40
|
+
```text
|
|
41
|
+
turn-contract-receipt@1
|
|
42
|
+
ok-line: TURN-CONTRACT ok
|
|
43
|
+
fail-line: TURN-CONTRACT fail box<N>: <code>
|
|
44
|
+
codes: branch-default | not-a-repo | no-commits | acceptance-missing |
|
|
45
|
+
phase-lint-failed | pr-not-open | pr-head-mismatch |
|
|
46
|
+
pr-unreachable | dirty-tree | ahead-of-remote
|
|
47
|
+
exit: 0 ok | 1 contract fail | 2 usage error
|
|
48
|
+
order: boxes 1→5, first failure wins; within box5, dirty-tree precedes
|
|
49
|
+
ahead-of-remote
|
|
50
|
+
stdout: exactly one line; diagnostics never (git/gh evidence stays in the
|
|
51
|
+
agent's transcript)
|
|
52
|
+
```
|
|
53
|
+
|
|
23
54
|
## Hand-off grammar (versioned — read by `scripts/normative-drift.test.mjs`)
|
|
24
55
|
|
|
25
56
|
Box 9's closing hand-off and box 10's machine result are ordered here, so the
|
|
@@ -51,5 +82,6 @@ next | recommended
|
|
|
51
82
|
next | alternatives
|
|
52
83
|
next | tier
|
|
53
84
|
next | suggested
|
|
85
|
+
next | continuation
|
|
54
86
|
```
|
|
55
87
|
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
## Persist and decide
|
|
2
2
|
|
|
3
|
+
When the unit's review receipt is missing or stale, the re-entry command is the
|
|
4
|
+
**emitted** `next.continuation` (`rendering` for display) — quote it, never author
|
|
5
|
+
exact command tokens.
|
|
6
|
+
|
|
3
7
|
11. **Persist fix-now findings to the fold ledger.** The unit's **fix-now fold
|
|
4
8
|
ledger** is `review-findings.md`, located beside its other docs
|
|
5
9
|
(`docs/features/<NN>-<slug>/review-findings.md` for a feature,
|
|
@@ -6,7 +6,10 @@ Append the receipt to `docs/features/<NN>-<slug>/progress.md` (fix units:
|
|
|
6
6
|
`docs/fix/<N>/progress.md`), then append every finding row to
|
|
7
7
|
`planning-findings.md` (ledger contract: `pre-execution-review/references/LEDGERS.md`).
|
|
8
8
|
Any later write to a reviewed plan artifact rotates `artifactRevisionId` and makes
|
|
9
|
-
this receipt stale — that is the contract working, not a mistake.
|
|
9
|
+
this receipt stale — that is the contract working, not a mistake. When a missing or
|
|
10
|
+
stale receipt is the reason for re-entry, the re-entry command is the **emitted**
|
|
11
|
+
`next.continuation` (`rendering` for display): quote it, never author exact command
|
|
12
|
+
tokens.
|
|
10
13
|
|
|
11
14
|
One `PreExecutionReviewReceipt v1`
|
|
12
15
|
(`agentic-workflow/pre-execution-review-receipt@1`) per review:
|
|
@@ -8,7 +8,9 @@ each finding row to the unit's `planning-findings.md`** with
|
|
|
8
8
|
create the file from that contract when the unit has none. A findings ledger the
|
|
9
9
|
reviewer cannot write is not a ledger. Any later write to a reviewed artifact
|
|
10
10
|
rotates `artifactRevisionId` and makes this receipt stale — that is the contract
|
|
11
|
-
working, not a mistake.
|
|
11
|
+
working, not a mistake. When a missing or stale receipt is the reason for re-entry,
|
|
12
|
+
the re-entry command is the **emitted** `next.continuation` (`rendering` for display):
|
|
13
|
+
quote it, never author exact command tokens.
|
|
12
14
|
|
|
13
15
|
One `PreExecutionReviewReceipt v1`
|
|
14
16
|
(`agentic-workflow/pre-execution-review-receipt@1`) per review, in a fenced block:
|
|
@@ -85,7 +85,7 @@ turns:
|
|
|
85
85
|
stages (`plan-fix` → REVIEW-PLAN → EXECUTE (`--fix`) → PR → REVIEW → AUDIT), same
|
|
86
86
|
budget caps, floors, and merge policy as features.
|
|
87
87
|
6. Nothing startable → `SHIP: BLOCKED` with the **unblock map** ("merging
|
|
88
|
-
|
|
88
|
+
issue `#<n>` unblocks features `05` and `07`") and the resume command.
|
|
89
89
|
|
|
90
90
|
`execute-phase`'s own dependency gate stays active inside every subagent —
|
|
91
91
|
it's the belt to this braces. **The autopilot never passes `--force`:** a
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: workflow-status
|
|
3
3
|
user-invocable: true
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.7.0
|
|
5
5
|
author: "Gabriel Trabanco <gtrabanco@users.noreply.github.com>"
|
|
6
6
|
license: MIT
|
|
7
7
|
argument-hint: "[--json-only] [--last-envelope <json|path>]"
|
|
@@ -117,6 +117,9 @@ the JSON contract.
|
|
|
117
117
|
- The human summary (unless `--json-only`) and the envelope are printed, envelope
|
|
118
118
|
last.
|
|
119
119
|
- Nothing was modified anywhere.
|
|
120
|
+
- When the envelope carries `next.continuation`, the next-command echo **quotes the
|
|
121
|
+
emitted `next.continuation`** (`rendering` for display), never author exact command
|
|
122
|
+
tokens; the human-facing prose `→ Next:` block below stays.
|
|
120
123
|
|
|
121
124
|
→ Next: the envelope's `next.recommended` command — it is computed from the
|
|
122
125
|
actual state, so it IS the recommendation
|
|
@@ -41,7 +41,7 @@ sensor reports a missing gate, never a verdict that no review ever happened.
|
|
|
41
41
|
|---|---|---|
|
|
42
42
|
| `current` | stage PASS verdict **and** recomputed digest = bound digest | spec: `/plan-feature <slug>` · plan: `/execute-phase <NN>` |
|
|
43
43
|
| `missing` | no receipt block for the stage | `defined` → `/review-spec <slug>` · planned/in-progress → `/review-plan <NN>` |
|
|
44
|
-
| `stale` | bound digest differs, or a bound context row moved | re-run **that stage's** review |
|
|
44
|
+
| `stale` | bound digest differs, or a bound context row moved | re-run **that stage's** review — quote the emitted planning-gate re-run continuation (`next.continuation`, `rendering` for display), never author exact tokens |
|
|
45
45
|
| `wrong-stage` | the only PASS belongs to the other stage | the stage that is missing — never the stage that passed |
|
|
46
46
|
| `substitute` | prose verdict, legacy block, or internal attestation stands where a receipt should be | that stage's review, and report the substitute as a blocker detail |
|
|
47
47
|
| `self-approved` | the author of the artifact recorded the PASS | that stage's review in a clean context |
|
|
@@ -50,9 +50,11 @@ sensor reports a missing gate, never a verdict that no review ever happened.
|
|
|
50
50
|
| `impossible-timeline` | `structural.fresh: false`, `structural.reasonCode: impossible-timeline` — digest and revision match by construction; a receipt's own recorded timeline is physically impossible (finish predating source revision's commit date beyond the published skew); a legacy receipt with no parsable Started/finished: line, or a source revision git cannot resolve, stays unflagged (fail-open) | that stage's review — the timeline is self-refuting, not a stale source |
|
|
51
51
|
|
|
52
52
|
A stale receipt re-runs the **review**, not the authoring skill: the artifacts may be
|
|
53
|
-
exactly right and simply need re-judging in a clean context.
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
exactly right and simply need re-judging in a clean context. The command to re-run is
|
|
54
|
+
the **emitted** `next.continuation` (`rendering` for display) — quoted as-is, never
|
|
55
|
+
authored as fresh command prose. A missing verdict block, or a verdict outside the
|
|
56
|
+
stage's fixed set, is `missing` with the reason recorded — never a guess in the
|
|
57
|
+
recommended direction.
|
|
56
58
|
|
|
57
59
|
### Envelope projection
|
|
58
60
|
|