@gtrabanco/pi-agentic-workflow 0.2.0 → 0.4.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/README.es.md +0 -1
- package/README.md +0 -1
- package/package.json +1 -1
- package/skills/design-feature/SKILL.md +31 -2
- package/skills/evidence-grounding/SKILL.md +13 -2
- package/skills/evidence-grounding/references/ROWS.md +1 -1
- package/skills/execute-phase/SKILL.md +6 -4
- package/skills/execute-phase/references/BATCH_AND_PORTABILITY.md +5 -4
- package/skills/execute-phase/references/CLOSEOUT.md +5 -4
- package/skills/execute-phase/references/FOLDING.md +3 -2
- package/skills/execute-phase/references/UNIT_LOOP.md +1 -2
- package/skills/fold-findings/SKILL.md +1 -1
- package/skills/fold-findings/references/FOLD_POLICY.md +7 -0
- package/skills/log-session/SKILL.md +7 -1
- package/skills/plan-feature-scaffold/SKILL.md +13 -1
- package/skills/plan-fix/SKILL.md +13 -1
- package/skills/pre-execution-review/SKILL.md +1 -1
- package/skills/pre-execution-review/references/LEDGERS.md +23 -1
- package/skills/pre-execution-review/references/POLICY.md +1 -1
- package/skills/review-a11y/SKILL.md +10 -1
- package/skills/review-brand/SKILL.md +10 -1
- package/skills/review-change/SKILL.md +10 -7
- package/skills/review-change/references/OUTPUT_AND_GUARDRAILS.md +3 -1
- package/skills/review-change/references/PERSIST_AND_DECIDE.md +35 -15
- package/skills/review-change/references/REVIEW_PROCESS.md +73 -13
- package/skills/review-code/SKILL.md +12 -1
- package/skills/review-design/SKILL.md +10 -1
- package/skills/review-implementation/SKILL.md +1 -1
- package/skills/review-implementation/references/CLASSIFY.md +9 -1
- package/skills/review-perf/SKILL.md +10 -1
- package/skills/review-plan/SKILL.md +1 -1
- package/skills/review-plan/references/OUTPUT.md +9 -0
- package/skills/review-security/SKILL.md +10 -1
- package/skills/review-seo/SKILL.md +10 -1
- package/skills/review-spec/SKILL.md +1 -1
- package/skills/review-spec/references/OUTPUT.md +9 -0
- package/skills/review-verify/SKILL.md +10 -1
- package/skills/ship-roadmap/SKILL.md +2 -2
- package/skills/ship-roadmap/references/ADVANCE.md +6 -5
- package/skills/ship-roadmap/references/MODEL_ROUTING.md +1 -1
- package/skills/triage-issue/SKILL.md +1 -1
- package/skills/triage-issue/references/REVIEW_FINDING_PROCESS.md +1 -1
- package/skills/verification-contract/SKILL.md +22 -2
- package/skills/loop-review-fold/SKILL.md +0 -191
|
@@ -10,6 +10,17 @@
|
|
|
10
10
|
check, run `git rev-parse HEAD` once and retain its 40-hex output as the
|
|
11
11
|
**reviewed head SHA**. The final PR receipt may be written only for that exact
|
|
12
12
|
commit; a PR whose head changes during the review requires a fresh review.
|
|
13
|
+
**Read the unit's fold ledger (`review-findings.md`) before any pass — it is
|
|
14
|
+
the review's memory — and state the cycle number** in the report (`Cycle: <n>`,
|
|
15
|
+
completed `REVIEW-RAN` marks + 1). From cycle 2 on, **every `folded: yes` row
|
|
16
|
+
is re-verified at its cited location** before anything else: defect gone →
|
|
17
|
+
pass; defect still present → one new row marked `regression of <id>` (that is
|
|
18
|
+
the only legitimate bypass of the `file:line`+axis dedupe, and it is folded
|
|
19
|
+
with the same evidence bar as any finding); reviewer disagreement with a
|
|
20
|
+
user-approved amendment → `DISPUTED`, never a fresh row re-litigating the
|
|
21
|
+
same location. A cycle ≥ 2 that produces any new fix-now row appends the
|
|
22
|
+
`CONVERGENCE-ANOMALY` block (`pre-execution-review/references/POLICY.md` §4)
|
|
23
|
+
to the report.
|
|
13
24
|
2. **Frozen acceptance + SPEC drift check (structural).** Locate sibling
|
|
14
25
|
`ACCEPTANCE.md`, recompute its blob, and require an exact match with the
|
|
15
26
|
execution receipt before assessing the candidate. Missing/mismatch is a
|
|
@@ -34,14 +45,27 @@
|
|
|
34
45
|
commits follow `<type>(<scope>): <summary>`; phase labels in touched
|
|
35
46
|
planning docs are `P1, P2, …` (never `S1`/"Steps"); the phase's per-phase
|
|
36
47
|
docs were updated (TASKS ticks, progress entry); no commit landed on the
|
|
37
|
-
default branch; artifacts are in the project's declared docs language
|
|
38
|
-
**
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
48
|
+
default branch; artifacts are in the project's declared docs language.
|
|
49
|
+
**Workspace state is a precondition, not a finding.** Run
|
|
50
|
+
`git status --porcelain`, and when the branch has an open PR `git fetch` +
|
|
51
|
+
`git status -sb`. Any tracked modification, or being ahead of/behind the
|
|
52
|
+
remote, stops the review **before any pass runs** — no findings table, no
|
|
53
|
+
ledger write, no verdict, and never a `workflow` finding persisted for it
|
|
54
|
+
(a review that filed its own dirty tree would hand the next review the
|
|
55
|
+
same finding, forever):
|
|
56
|
+
|
|
57
|
+
```text
|
|
58
|
+
REVIEW BLOCKED — workspace state
|
|
59
|
+
- `git status --porcelain`: <lines, or `clean`>
|
|
60
|
+
- `git status -sb`: <line, or n/a: no open PR>
|
|
61
|
+
→ Next: commit or stash the listed files, then re-run /review-change.
|
|
62
|
+
Untracked, non-ignored harness/toolstate nobody authored for this unit
|
|
63
|
+
(.engram/, .pi/, .serena/, session files) is committed once or added to
|
|
64
|
+
.gitignore — named here, never reviewed. A verdict on a workspace whose
|
|
65
|
+
state the forge cannot see is withheld, not filed.
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Run the greps/`git log`/`git status` — don't infer compliance.
|
|
45
69
|
4. **Applicable pack passes (the finders).** For each axis the matrix +
|
|
46
70
|
footprint mark as relevant, run the workflow's own internal skill for it
|
|
47
71
|
(`review-code`, `review-security`, `review-verify`, `review-design`,
|
|
@@ -54,14 +78,30 @@
|
|
|
54
78
|
(stack-specific linters, framework skills) and they are installed, run them
|
|
55
79
|
**in addition** — their findings merge into the same table. Never treat an
|
|
56
80
|
absent extra as a gap; the pack already covered the axis.
|
|
57
|
-
6. **
|
|
81
|
+
6. **Verify, then synthesize.** Before fusing anything, every candidate finding
|
|
82
|
+
is **verified in an isolated context against the reviewed head's bytes** (the
|
|
83
|
+
SHA frozen in step 1) and marked `confirmed` or `refuted`. The recheck method
|
|
84
|
+
follows the finding's axis:
|
|
85
|
+
- a **code / behavioral** claim confirms only with a **failing reproducer** —
|
|
86
|
+
a red test written first and run against **unchanged code**, or
|
|
87
|
+
**reproducible command output**;
|
|
88
|
+
- a **documentation / wording** claim confirms by **direct read** of the
|
|
89
|
+
cited text (typos and wording are corrected without ceremony, no test);
|
|
90
|
+
- a **missing-documentation** claim confirms the named user path is
|
|
91
|
+
undocumented.
|
|
92
|
+
Only **confirmed** candidates flow to synthesis; a **refuted** candidate is
|
|
93
|
+
reported with its counter-evidence in the same report and never becomes a
|
|
94
|
+
row, a fold task, or a re-review trigger. The per-finding durable mark is
|
|
95
|
+
`finding-mark@1` (contract in `pre-execution-review/references/LEDGERS.md`).
|
|
96
|
+
|
|
97
|
+
7. **Synthesize.** Fuse all findings into **one** findings table, deduped by
|
|
58
98
|
`file:line` + axis, per the synthesis contract (the same fusion rules apply
|
|
59
99
|
in the default single-reviewer case). Columns: `# | Finding | Axis | Sev |
|
|
60
100
|
Evidence | Suggested fix` — **unclassified**. Overlapping signals on the same
|
|
61
101
|
defect collapse into one row. Add a **`Reviewers n/N`** column when running
|
|
62
102
|
in `--adversarial N` mode (omitted entirely in the default single-reviewer
|
|
63
103
|
case).
|
|
64
|
-
|
|
104
|
+
8. **Classify (once).** Run `review-implementation` over the synthesized table
|
|
65
105
|
(isolated, per the *Isolation rule*) — the single classification engine
|
|
66
106
|
(D5). It verifies axis coverage (every applicable axis represented; a
|
|
67
107
|
missing axis is a `coverage` finding) and applies the current-unit contract:
|
|
@@ -70,17 +110,37 @@
|
|
|
70
110
|
→ the **classified decision table** (Sev, Class, WHY, impl risk, long-term
|
|
71
111
|
impact, premature-opt?, Route). No per-pass or per-reviewer classification,
|
|
72
112
|
no re-litigation.
|
|
73
|
-
|
|
113
|
+
9. **Debt transform.** Run `review-debt` over the classified table — it
|
|
74
114
|
transforms debt-shaped findings into explicit TRIGGER-carrying debt items;
|
|
75
115
|
it does not rescan the diff (SPEC contract).
|
|
76
|
-
|
|
116
|
+
10. **Manual-verification checklist.** List what automated review **cannot** confirm
|
|
77
117
|
and a human must check — visual correctness, real-device/locale behavior, UX
|
|
78
118
|
feel, perf under load, anything marked *verify*. Be explicit so the dev has zero
|
|
79
119
|
doubt about what to eyeball.
|
|
80
|
-
|
|
120
|
+
11. **Route the outcomes.** fix-now findings fold into the current unit (or gain
|
|
81
121
|
user-confirmed phases via replan-in-unit); decision-required stops for the
|
|
82
122
|
user's decision; genuinely independent future capabilities become
|
|
83
123
|
**non-blocking proposals** — batched in the report with a trigger, and
|
|
84
124
|
**never** sent to `triage-issue` automatically (D3). `review-change` creates
|
|
85
125
|
no backlog work. No non-fix-now finding may end without a destination — none
|
|
86
126
|
silently lost.
|
|
127
|
+
|
|
128
|
+
## Two-cycle cap
|
|
129
|
+
|
|
130
|
+
The review→fold loop runs at most **two** review→fold cycles per unit, counted
|
|
131
|
+
unit-level and family-agnostic from the ledger's `REVIEW-RAN` marks and forge
|
|
132
|
+
receipts — new finding families do not reset the count. After two cycles without
|
|
133
|
+
convergence, the review prints
|
|
134
|
+
|
|
135
|
+
```text
|
|
136
|
+
LOOP CAP REACHED — <unit>
|
|
137
|
+
- Finding ids: <every open id>
|
|
138
|
+
- Cycles: 2 (REVIEW-RAN marks + forge receipts)
|
|
139
|
+
- Route: /triage-issue --prioritize-now <unit> F<k> … (or the programmatic outer driver)
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
A **third cycle never starts** unless the user explicitly instructs it — it is
|
|
143
|
+
the user's escape, never a reviewer election. The residue routes to
|
|
144
|
+
`triage-issue --prioritize-now` (or the programmatic outer driver), and a unit
|
|
145
|
+
that needs a third cycle has a planning or root-cause defect, not a review
|
|
146
|
+
deficit.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: review-code
|
|
3
3
|
user-invocable: false
|
|
4
|
-
version: 1.0
|
|
4
|
+
version: 1.2.0
|
|
5
5
|
author: "Gabriel Trabanco <gtrabanco@users.noreply.github.com>"
|
|
6
6
|
license: MIT
|
|
7
7
|
description: >
|
|
@@ -41,9 +41,20 @@ default branch. State the scope at the top of the returned table.
|
|
|
41
41
|
✓ No new dependency not justified in the SPEC
|
|
42
42
|
✓ Simplification: any changed block that can lose lines without losing
|
|
43
43
|
behavior (cite before/after)
|
|
44
|
+
✓ Reference trace: every changed symbol/API got a reference search —
|
|
45
|
+
un-updated callers are findings
|
|
44
46
|
✓ Edge cases the SPEC's dev scenarios name are actually handled in code, not
|
|
45
47
|
just in tests
|
|
46
48
|
|
|
49
|
+
## Materiality bar
|
|
50
|
+
|
|
51
|
+
Report a row only when a competent user's outcome changes or a rule the project
|
|
52
|
+
explicitly declares is violated — cite the rule it violates beside the evidence.
|
|
53
|
+
Not findings: comment/punctuation typos, formatting-only drift, style preference
|
|
54
|
+
with no cited rule, hypothetical robustness beyond the SPEC's named scenarios.
|
|
55
|
+
An empty table with `Decision: PASS` is the expected result for a well-formed
|
|
56
|
+
change — never pad the table.
|
|
57
|
+
|
|
47
58
|
## Return exactly
|
|
48
59
|
|
|
49
60
|
```
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: review-design
|
|
3
3
|
user-invocable: false
|
|
4
|
-
version: 1.0
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
author: "Gabriel Trabanco <gtrabanco@users.noreply.github.com>"
|
|
6
6
|
license: MIT
|
|
7
7
|
description: >
|
|
@@ -35,6 +35,15 @@ default branch. State the scope at the top of the returned table.
|
|
|
35
35
|
✓ Destructive actions require confirmation and are visually distinct
|
|
36
36
|
✓ Feedback on every user action (submit, save, fail) — no silent operations
|
|
37
37
|
|
|
38
|
+
## Materiality bar
|
|
39
|
+
|
|
40
|
+
Report a row only when a competent user's outcome changes or a rule the project
|
|
41
|
+
explicitly declares is violated — cite the rule it violates beside the evidence.
|
|
42
|
+
Not findings: comment/punctuation typos, formatting-only drift, style preference
|
|
43
|
+
with no cited rule, hypothetical robustness beyond the SPEC's named scenarios.
|
|
44
|
+
An empty table with `Decision: PASS` is the expected result for a well-formed
|
|
45
|
+
change — never pad the table.
|
|
46
|
+
|
|
38
47
|
## Return exactly
|
|
39
48
|
|
|
40
49
|
```
|
|
@@ -15,6 +15,14 @@ only with a rationale.
|
|
|
15
15
|
|
|
16
16
|
### Step 2 — Is it current-unit work? (only blocking outcomes)
|
|
17
17
|
|
|
18
|
+
**Severity floor first.** A `low` finding (taste, cosmetics, micro-optimization
|
|
19
|
+
without a measured need) is **never persisted and never blocks**: it is carried
|
|
20
|
+
as a report note with its evidence, and the fold ledger never sees it. But a
|
|
21
|
+
real defect mislabeled `low` stays real: when the evidence shows a correctness,
|
|
22
|
+
security, behavioral, or data-integrity defect, classify it at `med` minimum —
|
|
23
|
+
deflating a real defect to `low` to unblock a review is itself a review defect.
|
|
24
|
+
Only `high` and `med` findings run through the current-unit gate below.
|
|
25
|
+
|
|
18
26
|
A finding belongs to the **current unit** when it maps to the governing SPEC, a
|
|
19
27
|
phase, a documented invariant, correctness, security, accessibility, a required
|
|
20
28
|
UX/error state, or an expectation necessary for a competent user to consider an
|
|
@@ -105,7 +113,7 @@ finding in its `Route` cell.
|
|
|
105
113
|
|
|
106
114
|
| Owning stage | Hand-off | Never |
|
|
107
115
|
|---|---|---|
|
|
108
|
-
| `source` | fold locally: `/
|
|
116
|
+
| `source` | fold locally: `/fold-findings`, then re-run `/review-change` on the changed HEAD | — |
|
|
109
117
|
| `plan` | 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 a **fresh `/review-plan <unit>`** precedes `execute-phase` | fold it in code and leave the plan describing the old build |
|
|
110
118
|
| `product` | `/design-feature <unit>` repairs the half, then `/review-spec <unit>` re-judges it | patch the product claim into agreement in code |
|
|
111
119
|
| `environment` / `runtime` | the existing retry/`BLOCKED` paths | translate into a PASS, or an issue |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: review-perf
|
|
3
3
|
user-invocable: false
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.0
|
|
5
5
|
author: "Gabriel Trabanco <gtrabanco@users.noreply.github.com>"
|
|
6
6
|
license: MIT
|
|
7
7
|
description: >
|
|
@@ -54,6 +54,15 @@ default branch. State the scope at the top of the returned table.
|
|
|
54
54
|
add a **minor** finding recommending the project adopt the tooling via
|
|
55
55
|
`init-workspace`'s Performance tooling round.
|
|
56
56
|
|
|
57
|
+
## Materiality bar
|
|
58
|
+
|
|
59
|
+
Report a row only when a competent user's outcome changes or a rule the project
|
|
60
|
+
explicitly declares is violated — cite the rule it violates beside the evidence.
|
|
61
|
+
Not findings: comment/punctuation typos, formatting-only drift, style preference
|
|
62
|
+
with no cited rule, hypothetical robustness beyond the SPEC's named scenarios.
|
|
63
|
+
An empty table with `Decision: PASS` is the expected result for a well-formed
|
|
64
|
+
change — never pad the table.
|
|
65
|
+
|
|
57
66
|
## Return exactly
|
|
58
67
|
|
|
59
68
|
```
|
|
@@ -89,6 +89,15 @@ stage.
|
|
|
89
89
|
|
|
90
90
|
### Routes
|
|
91
91
|
|
|
92
|
+
**Resolution map — the finding's `class` cell names its resolver, and only that
|
|
93
|
+
resolver:** class `plan` → `plan-feature` / `plan-fix` (the author re-cuts, then
|
|
94
|
+
`/review-plan` re-judges) · class `product` → `design-feature` repairs the
|
|
95
|
+
Product half (then `/review-spec`, then the plan re-derives) · class `source` |
|
|
96
|
+
`environment` | `runtime` → the executor's fold path (`/fold-findings`, then re-run
|
|
97
|
+
`/review-change`), never by editing the plan to hide the row.
|
|
98
|
+
**`fold-findings` never repairs a planning artifact** — folding repairs source,
|
|
99
|
+
not authority.
|
|
100
|
+
|
|
92
101
|
| Verdict / class | Who acts | What happens next |
|
|
93
102
|
|---|---|---|
|
|
94
103
|
| `PLAN-REVIEW-PASS` | nobody | `/execute-phase <NN>` binds this receipt + exact snapshot digest |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: review-security
|
|
3
3
|
user-invocable: false
|
|
4
|
-
version: 1.0
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
author: "Gabriel Trabanco <gtrabanco@users.noreply.github.com>"
|
|
6
6
|
license: MIT
|
|
7
7
|
description: >
|
|
@@ -40,6 +40,15 @@ default branch. State the scope at the top of the returned table.
|
|
|
40
40
|
✓ Error responses don't leak stack traces or internal paths
|
|
41
41
|
✓ Unsafe deserialization / dynamic evaluation of untrusted data absent
|
|
42
42
|
|
|
43
|
+
## Materiality bar
|
|
44
|
+
|
|
45
|
+
Report a row only when a competent user's outcome changes or a rule the project
|
|
46
|
+
explicitly declares is violated — cite the rule it violates beside the evidence.
|
|
47
|
+
Not findings: comment/punctuation typos, formatting-only drift, style preference
|
|
48
|
+
with no cited rule, hypothetical robustness beyond the SPEC's named scenarios.
|
|
49
|
+
An empty table with `Decision: PASS` is the expected result for a well-formed
|
|
50
|
+
change — never pad the table.
|
|
51
|
+
|
|
43
52
|
## Return exactly
|
|
44
53
|
|
|
45
54
|
```
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: review-seo
|
|
3
3
|
user-invocable: false
|
|
4
|
-
version: 1.0
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
author: "Gabriel Trabanco <gtrabanco@users.noreply.github.com>"
|
|
6
6
|
license: MIT
|
|
7
7
|
description: >
|
|
@@ -40,6 +40,15 @@ default branch. State the scope at the top of the returned table.
|
|
|
40
40
|
- ✓ No render-blocking regression for primary content (content present without
|
|
41
41
|
JS where the project declares SSR/SSG)
|
|
42
42
|
|
|
43
|
+
## Materiality bar
|
|
44
|
+
|
|
45
|
+
Report a row only when a competent user's outcome changes or a rule the project
|
|
46
|
+
explicitly declares is violated — cite the rule it violates beside the evidence.
|
|
47
|
+
Not findings: comment/punctuation typos, formatting-only drift, style preference
|
|
48
|
+
with no cited rule, hypothetical robustness beyond the SPEC's named scenarios.
|
|
49
|
+
An empty table with `Decision: PASS` is the expected result for a well-formed
|
|
50
|
+
change — never pad the table.
|
|
51
|
+
|
|
43
52
|
## Return exactly
|
|
44
53
|
|
|
45
54
|
```
|
|
@@ -76,6 +76,15 @@ fourth verdict.
|
|
|
76
76
|
|
|
77
77
|
### Routes
|
|
78
78
|
|
|
79
|
+
**Resolution map — the finding's `class` cell names its resolver, and only that
|
|
80
|
+
resolver:** class `product` → `design-feature` (then `/review-spec` re-judges the
|
|
81
|
+
new revision) · class `plan` → `plan-feature` / `plan-fix` re-cuts the plan (then
|
|
82
|
+
`/review-plan` re-judges) · class `source` | `environment` | `runtime` → the
|
|
83
|
+
executor's fold path (`/fold-findings`, then re-run `/review-change`).
|
|
84
|
+
**`fold-findings` never repairs a planning artifact**, and a planning finding is
|
|
85
|
+
never resolved by patching the artifact during review — folding repairs source,
|
|
86
|
+
not authority.
|
|
87
|
+
|
|
79
88
|
| Verdict | Who repairs | What happens next |
|
|
80
89
|
|---|---|---|
|
|
81
90
|
| `SPEC-REVIEW-PASS` | nobody | `/plan-feature <NN-slug>` binds this receipt + exact snapshot digest |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: review-verify
|
|
3
3
|
user-invocable: false
|
|
4
|
-
version: 1.0
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
author: "Gabriel Trabanco <gtrabanco@users.noreply.github.com>"
|
|
6
6
|
license: MIT
|
|
7
7
|
description: >
|
|
@@ -40,6 +40,15 @@ default branch. State the scope at the top of the returned table.
|
|
|
40
40
|
✓ Anything that can only be confirmed by a human (visual, device, locale,
|
|
41
41
|
load) is listed explicitly under "Manual" — never silently dropped
|
|
42
42
|
|
|
43
|
+
## Materiality bar
|
|
44
|
+
|
|
45
|
+
Report a row only when a competent user's outcome changes or a rule the project
|
|
46
|
+
explicitly declares is violated — cite the rule it violates beside the evidence.
|
|
47
|
+
Not findings: comment/punctuation typos, formatting-only drift, style preference
|
|
48
|
+
with no cited rule, hypothetical robustness beyond the SPEC's named scenarios.
|
|
49
|
+
An empty table with `Decision: PASS` is the expected result for a well-formed
|
|
50
|
+
change — never pad the table.
|
|
51
|
+
|
|
43
52
|
## Return exactly
|
|
44
53
|
|
|
45
54
|
```
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ship-roadmap
|
|
3
3
|
user-invocable: true
|
|
4
|
-
version: 5.
|
|
4
|
+
version: 5.1.0
|
|
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`; `
|
|
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`. |
|
|
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,11 +70,12 @@
|
|
|
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
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
`fold-findings`, and
|
|
77
|
-
budget is two; unchanged
|
|
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`
|
|
76
|
+
context-clean, batches compatible fixes through `fold-findings`, and
|
|
77
|
+
re-reviews only changed HEADs. Default correction budget is two; unchanged
|
|
78
|
+
evidence stops NO-PROGRESS. L/sensitive features
|
|
78
79
|
forward `--adversarial 2` (security/auth: `3`) as the unattended floor;
|
|
79
80
|
other units use one final reviewer. There are no intermediate phase
|
|
80
81
|
reviews in autopilot: phase gates + frozen acceptance guard execution,
|
|
@@ -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
|
|
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` |
|
|
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: triage-issue
|
|
3
3
|
user-invocable: true
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.7.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 <gtrabanco@users.noreply.github.com>"
|
|
7
7
|
license: MIT
|
|
@@ -25,7 +25,7 @@ after `/fold-findings` leaves rows unresolved.
|
|
|
25
25
|
|
|
26
26
|
4. Never implement the new phases in this triage turn. After a replan, ask the
|
|
27
27
|
user to continue manually with `/execute-phase <unit> P<n>` (or the fix
|
|
28
|
-
equivalent), then re-run `/
|
|
28
|
+
equivalent), then re-run `/review-change` on the resulting HEAD (the manual path).
|
|
29
29
|
|
|
30
30
|
Return exactly one block per finding:
|
|
31
31
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: verification-contract
|
|
3
3
|
user-invocable: false
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.1
|
|
5
5
|
author: "Gabriel Trabanco <gtrabanco@users.noreply.github.com>"
|
|
6
6
|
license: MIT
|
|
7
7
|
description: >
|
|
8
8
|
Internal contract: one compact frozen ACCEPTANCE.md per delivery unit, its
|
|
9
9
|
validation ladder, anti-weakening rules, and blob-bound execution receipt.
|
|
10
|
-
Consumed by planners, execute-phase,
|
|
10
|
+
Consumed by planners, execute-phase, and review-change.
|
|
11
11
|
---
|
|
12
12
|
|
|
13
13
|
# Verification Contract (internal)
|
|
@@ -24,6 +24,15 @@ commands. Prefer commands, otherwise use `read-verified: <evidence>` or
|
|
|
24
24
|
`manual: <exact observation>`. Unlabelled prose is invalid. A planned test may
|
|
25
25
|
name its future project runner; it cannot substitute a narrower runner later.
|
|
26
26
|
|
|
27
|
+
**Validator stability.** A validator must never gate on a surface other workflow
|
|
28
|
+
actors mutate — the branch diff as a whole, the session log, progress entries,
|
|
29
|
+
review ledgers, or forge state — because any out-of-unit commit (a session-log
|
|
30
|
+
append, another unit's fold) then re-fails a frozen criterion on a finished unit
|
|
31
|
+
and re-opens its review loop. Grep the unit's own files and outputs; a
|
|
32
|
+
diff-based validator enumerates the unit's paths or excludes the
|
|
33
|
+
workflow-mutated surfaces explicitly (docs/LOGS.md, the unit's own docs
|
|
34
|
+
directory, harness/toolstate).
|
|
35
|
+
|
|
27
36
|
## Freeze and receipt
|
|
28
37
|
|
|
29
38
|
At first execution run `git hash-object <unit>/ACCEPTANCE.md` and append to the
|
|
@@ -71,6 +80,17 @@ stub, hard-coded answer, or no-op fix used to manufacture green. A command canno
|
|
|
71
80
|
prove an untested read/manual row. Stronger regression tests are allowed. Repair
|
|
72
81
|
test setup only when assertions stay at least as strong and the reason is logged.
|
|
73
82
|
|
|
83
|
+
## Test immutability
|
|
84
|
+
|
|
85
|
+
A test, once written, is **immutable**. The executor fixes code until green,
|
|
86
|
+
never the test — editing an expectation to match behaviour is not a fix, it is
|
|
87
|
+
a cover-up. The sole legitimate amendment is a **proven mis-encoding of external semantics**: the test's expectation contradicts the actual
|
|
88
|
+
documented semantics of the platform/library/language, cited from authoritative documentation — not a product decision change. Even that surfaces as a
|
|
89
|
+
**finding plus a SPEC amendment**, never a silent edit to go green.
|
|
90
|
+
|
|
91
|
+
Prevention rides the research gate (**research-before-encode**): platform
|
|
92
|
+
semantics are verified against authoritative documentation **before a test encodes them**, so **adding stronger tests stays allowed**; **editing expectations never** (except the proven-mis-encoding path above).
|
|
93
|
+
|
|
74
94
|
## Done when
|
|
75
95
|
|
|
76
96
|
Frozen manifest + current blob receipt + named validators + literal quality
|