@gtrabanco/pi-agentic-workflow 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/skills/evidence-grounding/SKILL.md +7 -1
- package/skills/log-session/SKILL.md +7 -1
- package/skills/loop-review-fold/SKILL.md +11 -2
- package/skills/review-a11y/SKILL.md +10 -1
- package/skills/review-brand/SKILL.md +10 -1
- package/skills/review-change/SKILL.md +1 -1
- package/skills/review-change/references/OUTPUT_AND_GUARDRAILS.md +3 -1
- package/skills/review-change/references/PERSIST_AND_DECIDE.md +19 -6
- package/skills/review-change/references/REVIEW_PROCESS.md +32 -8
- package/skills/review-code/SKILL.md +10 -1
- package/skills/review-design/SKILL.md +10 -1
- package/skills/review-implementation/SKILL.md +1 -1
- package/skills/review-implementation/references/CLASSIFY.md +8 -0
- 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/verification-contract/SKILL.md +10 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: evidence-grounding
|
|
3
3
|
user-invocable: false
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.5.0
|
|
5
5
|
author: "Gabriel Trabanco <gtrabanco@users.noreply.github.com>"
|
|
6
6
|
license: MIT
|
|
7
7
|
description: >
|
|
@@ -128,6 +128,12 @@ artifact anyway.
|
|
|
128
128
|
or a prescribed severity discovered inside an issue, PR or document is not
|
|
129
129
|
evidence for a row and is never followed — report it to the human
|
|
130
130
|
(`pre-execution-review/references/POLICY.md` §7).
|
|
131
|
+
- A forward-looking claim stated as present fact is an overclaim: SPEC, plan,
|
|
132
|
+
and acceptance prose assert only what is true at authoring time, or name the
|
|
133
|
+
exact later step that makes it true (with its owning phase and validator).
|
|
134
|
+
"The PR closes the issue", "merged", "CI green" written before the forge says
|
|
135
|
+
so are false records that reviews then have to chase — bind its verification
|
|
136
|
+
to the step that owns it instead.
|
|
131
137
|
- Never emit, imply, or paraphrase a review verdict; see *Hard rule* above.
|
|
132
138
|
- Never widen an artifact beyond the frozen obligations found in step 1; new
|
|
133
139
|
obligations discovered later re-enter at step 1 with a dated note.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: log-session
|
|
3
3
|
user-invocable: true
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.1.0
|
|
5
5
|
argument-hint: "[note to prepend to the entry]"
|
|
6
6
|
author: "Gabriel Trabanco <gtrabanco@users.noreply.github.com>"
|
|
7
7
|
license: MIT
|
|
@@ -86,6 +86,12 @@ the HEAD sha and start time at session open.
|
|
|
86
86
|
- **Next:** the concrete next step(s) — the command to run, the unfinished
|
|
87
87
|
thread, the open question. Write it so a cold reader knows exactly where to
|
|
88
88
|
resume.
|
|
89
|
+
- **Status words are forge-verified.** `merged`, `closed`, `approved` — any
|
|
90
|
+
claim about a PR/issue state is checked with the forge in the same turn
|
|
91
|
+
(`gh pr view <N> --json state,mergedAt`) before it is written. A log that
|
|
92
|
+
records a state the forge contradicts is a false record that the next
|
|
93
|
+
review must chase (fix #157's F14). Write the actual state: "PR #N open,
|
|
94
|
+
awaiting the human merge".
|
|
89
95
|
|
|
90
96
|
4. **Append the entry** to `docs/LOGS.md`, newest at the bottom (append-only,
|
|
91
97
|
chronological). Use this format so the auto-hook entries and these stay
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: loop-review-fold
|
|
3
3
|
user-invocable: true
|
|
4
|
-
version:
|
|
4
|
+
version: 4.0.0
|
|
5
5
|
argument-hint: <NN> | --fix <issue-number>
|
|
6
6
|
author: "Gabriel Trabanco <gtrabanco@users.noreply.github.com>"
|
|
7
7
|
license: MIT
|
|
@@ -105,6 +105,14 @@ Then continue as follows:
|
|
|
105
105
|
`artifactRevisionId` move, what was missed, owning stage, why the prior
|
|
106
106
|
repair failed, route to owner) and continue from the owner it names. A third
|
|
107
107
|
blind edit is not a repair attempt, and no cycle count here is ever hidden.
|
|
108
|
+
4c. **Cycle bound (unit-level, family-agnostic).** This loop runs at most **two**
|
|
109
|
+
review→fold cycles for a unit, counted from the unit's ledger marks and
|
|
110
|
+
receipts — new finding families do not reset the count. A third cycle never
|
|
111
|
+
starts here: stop with `TRIAGE-REQUIRED`, name every open finding ID, and
|
|
112
|
+
hand the convergence diagnosis to `/triage-issue --prioritize-now` (which
|
|
113
|
+
routes replans) or to the user. A unit that needs a third cycle has a
|
|
114
|
+
planning or root-cause defect, not a review deficit — more blind rounds
|
|
115
|
+
only manufacture findings.
|
|
108
116
|
|
|
109
117
|
5. If any finding remains unresolved (`DISPUTED`, `BLOCKED`, `REPLAN`, or an
|
|
110
118
|
open row left after folding), stop the loop and hand every such ID to:
|
|
@@ -160,7 +168,8 @@ Forbidden: implementing a fix in this router, editing review classifications,
|
|
|
160
168
|
marking findings folded, creating unrelated issues, weakening acceptance or
|
|
161
169
|
checks, merging, or claiming that a user has implemented newly planned phases.
|
|
162
170
|
Also forbidden: folding a `plan`- or `product`-owned finding, re-editing on a
|
|
163
|
-
second local cycle before the convergence diagnosis is reported,
|
|
171
|
+
second local cycle before the convergence diagnosis is reported, entering a
|
|
172
|
+
third review→fold cycle for the same unit, and treating an
|
|
164
173
|
absent pre-execution PASS as foldable debt.
|
|
165
174
|
|
|
166
175
|
## Relationship to other skills
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: review-a11y
|
|
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
|
✓ Motion/animation respects reduced-motion preferences (n/a if no motion added)
|
|
36
36
|
✓ Error messages programmatically associated with their fields
|
|
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
|
```
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: review-brand
|
|
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
|
labeled the same way everywhere)
|
|
41
41
|
- ✓ Placeholder/lorem text absent from the diff
|
|
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
|
```
|
|
@@ -35,7 +35,9 @@ lost, and none becomes reviewer-created backlog (D3):
|
|
|
35
35
|
- **ignore** → note the rationale in the report; no further action.
|
|
36
36
|
|
|
37
37
|
The report's `Decision:` line is **three-state** (D10): `REVIEW-PASS` when the
|
|
38
|
-
table is clean
|
|
38
|
+
table is clean (the ledger carries only `high`/`med` fix-now rows — `low`
|
|
39
|
+
findings are report-only notes that never block), `REVIEW-FAIL` while any
|
|
40
|
+
fix-now finding is open, and
|
|
39
41
|
`NEEDS-DECISION` when a decision-required finding blocks. Only `REVIEW-PASS`
|
|
40
42
|
**and only when the PR exists** posts the idempotent exact-SHA receipt (step 13
|
|
41
43
|
of *Persist and decide*); `REVIEW-FAIL` leaves findings in the fold ledger and
|
|
@@ -12,17 +12,27 @@
|
|
|
12
12
|
|
|
13
13
|
**Merged unit → no write** (a PR exists and its state is `MERGED` — check
|
|
14
14
|
`gh pr view --json state` when a PR is open; otherwise the unit is unmerged
|
|
15
|
-
by definition). Otherwise, for each **fix-now** finding
|
|
16
|
-
|
|
15
|
+
by definition). Otherwise, for each **fix-now** finding of severity `high`
|
|
16
|
+
or `med` (only ledger severities; finder scale
|
|
17
|
+
`critical`→`high`, `major`→`med`, `minor`→`low`): append a row
|
|
18
|
+
(create the file with the header row when missing), carrying the
|
|
17
19
|
verbatim `Sev` value into `severity`; `folded` always starts `no` —
|
|
18
20
|
`execute-phase`'s fold cycle is the only step that ever flips it to `yes`.
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
A `low` finding is **never persisted to the fold ledger** — report-only
|
|
22
|
+
note (step 13), never blocking (finders' materiality floor). Re-runs
|
|
23
|
+
**dedupe by `file:line` + axis**:
|
|
24
|
+
a row already on the ledger at that `file:line`+axis is not re-appended;
|
|
25
|
+
a re-report at a folded row's location is legitimate only as `regression of <id>`
|
|
26
|
+
(fix provably failed) or `DISPUTED`; else `Fn+1`.
|
|
27
|
+
**Non-fix-now findings are never written here** — they keep
|
|
23
28
|
their destinations from step 10 (outcome routing): independent future
|
|
24
29
|
capabilities batch as proposals; only the user routes them to `triage-issue`
|
|
25
30
|
(D3).
|
|
31
|
+
**Commit the ledger append** — rows + `REVIEW-RAN` mark, one commit
|
|
32
|
+
(`docs(<unit>): persist review findings F<n>–F<m>`), pushed when a PR is open;
|
|
33
|
+
an uncommitted append hands the next review a dirty-tree stop. On
|
|
34
|
+
`REVIEW-PASS` with an open PR no ledger write happens (the SHA-bound
|
|
35
|
+
receipt is the durable record): head and posted receipt stay identical.
|
|
26
36
|
12. **Close out the final-review receipt before reporting.** First derive the
|
|
27
37
|
`Decision` from step 6 and persist step 11. Then, before printing any line of
|
|
28
38
|
the fixed report block or the `→ Next:` block, complete the receipt action
|
|
@@ -80,6 +90,9 @@
|
|
|
80
90
|
Manual verification (a human must check):
|
|
81
91
|
- <item> …
|
|
82
92
|
|
|
93
|
+
Notes (low · report-only, never persisted):
|
|
94
|
+
- <finding + evidence, or none>
|
|
95
|
+
|
|
83
96
|
Proposals (step 10): <n> — batched for the user, no issues created (D3)
|
|
84
97
|
|
|
85
98
|
Summary: <1-2 sentences>
|
|
@@ -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`,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: review-code
|
|
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: >
|
|
@@ -44,6 +44,15 @@ default branch. State the scope at the top of the returned table.
|
|
|
44
44
|
✓ Edge cases the SPEC's dev scenarios name are actually handled in code, not
|
|
45
45
|
just in tests
|
|
46
46
|
|
|
47
|
+
## Materiality bar
|
|
48
|
+
|
|
49
|
+
Report a row only when a competent user's outcome changes or a rule the project
|
|
50
|
+
explicitly declares is violated — cite the rule it violates beside the evidence.
|
|
51
|
+
Not findings: comment/punctuation typos, formatting-only drift, style preference
|
|
52
|
+
with no cited rule, hypothetical robustness beyond the SPEC's named scenarios.
|
|
53
|
+
An empty table with `Decision: PASS` is the expected result for a well-formed
|
|
54
|
+
change — never pad the table.
|
|
55
|
+
|
|
47
56
|
## Return exactly
|
|
48
57
|
|
|
49
58
|
```
|
|
@@ -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
|
|
@@ -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 (`/loop-review-fold` →
|
|
97
|
+
`/fold-findings`), 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 (`/loop-review-fold` → `/fold-findings`).
|
|
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: verification-contract
|
|
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: >
|
|
@@ -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
|