@gtrabanco/pi-agentic-workflow 0.15.1 → 0.15.3
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/audit-docs/SKILL.md +3 -3
- package/skills/audit-pr/SKILL.md +8 -8
- package/skills/audit-pr/references/01_MERGE_GATES.md +3 -3
- package/skills/audit-pr/references/02_CLOSURE_AND_SCOPE_GATES.md +4 -5
- package/skills/audit-pr/references/03_AUDIT_PROCESS.md +1 -1
- package/skills/audit-pr/references/04_VERDICT.md +3 -3
- package/skills/audit-pr/references/05_ROUTING_AND_GUARDRAILS.md +2 -2
- package/skills/discover-repository-state/SKILL.md +3 -4
- package/skills/execute-phase/SKILL.md +1 -1
- package/skills/execute-phase/references/DESCOPE.md +1 -1
- package/skills/fold-findings/SKILL.md +8 -8
- package/skills/fold-findings/references/FOLD_PROCESS.md +6 -5
- package/skills/orchestration-envelope/SKILL.md +4 -3
- package/skills/phase-contract/SKILL.md +3 -4
- package/skills/pre-execution-review/SKILL.md +10 -7
- package/skills/pre-execution-review/references/POLICY.md +17 -8
- package/skills/product-audit/SKILL.md +12 -13
- package/skills/product-audit/references/AUDIT_PROCESS.md +1 -1
- package/skills/resolve-repository-state/SKILL.md +2 -3
- package/skills/review-change/SKILL.md +3 -3
- package/skills/review-change/references/ADVERSARIAL_RECOMMENDATION.md +1 -1
- package/skills/review-change/references/ADVERSARIAL_SETUP.md +1 -1
- package/skills/review-change/references/OUTPUT_AND_GUARDRAILS.md +5 -5
- package/skills/review-change/references/PERSIST_AND_DECIDE.md +7 -6
- package/skills/review-implementation/SKILL.md +1 -1
- package/skills/review-implementation/references/CLASSIFY.md +13 -11
- package/skills/triage-issue/SKILL.md +11 -10
- package/skills/triage-issue/references/ISSUE_PROCESS.md +11 -10
- package/skills/triage-issue/references/LABELS.md +3 -3
- package/skills/triage-issue/references/REVIEW_FINDING_PROCESS.md +6 -6
- package/skills/unit-lane/SKILL.md +24 -9
- package/skills/workflow-status/SKILL.md +22 -17
- package/skills/workflow-status/references/CRASH_RECOVERY.md +6 -6
- package/skills/workflow-status/references/ENVELOPE_CORE.md +1 -4
- package/skills/workflow-status/references/ENVELOPE_FIELDS.md +42 -7
- package/skills/workflow-status/references/PRE_EXECUTION.md +5 -0
- package/skills/workflow-status/references/SENSOR_SIGNALS.md +1 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: audit-docs
|
|
3
3
|
user-invocable: true
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.2.0
|
|
5
5
|
argument-hint: "[--fix]"
|
|
6
6
|
author: "Gabriel Trabanco <1969593+gtrabanco@users.noreply.github.com>"
|
|
7
7
|
license: MIT
|
|
@@ -156,7 +156,7 @@ enables:
|
|
|
156
156
|
|
|
157
157
|
## Relationship to other skills
|
|
158
158
|
|
|
159
|
-
- Complements `
|
|
159
|
+
- Complements `unit-lane` (which *creates* the docs this audits) and
|
|
160
160
|
`triage-issue` (which keeps the fix index honest).
|
|
161
161
|
- Run standalone anytime; no required predecessor.
|
|
162
162
|
|
|
@@ -168,6 +168,6 @@ enables:
|
|
|
168
168
|
|
|
169
169
|
```
|
|
170
170
|
→ Next: apply the approved low-risk fixes, then re-run /audit-docs to confirm clean
|
|
171
|
-
· real drift (not cosmetic) → /triage-issue · a concrete defect → /
|
|
171
|
+
· real drift (not cosmetic) → /triage-issue · a concrete defect → /unit-lane --fix <n>
|
|
172
172
|
· already clean → nothing to do
|
|
173
173
|
```
|
package/skills/audit-pr/SKILL.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: audit-pr
|
|
3
3
|
user-invocable: true
|
|
4
|
-
version: 5.
|
|
4
|
+
version: 5.4.0
|
|
5
5
|
argument-hint: <pr-number> (optional — defaults to the current branch's PR)
|
|
6
6
|
author: "Gabriel Trabanco <1969593+gtrabanco@users.noreply.github.com>"
|
|
7
7
|
license: MIT
|
|
@@ -19,7 +19,7 @@ The manager's **"can this ship?"** gate. A read-first audit over the *entire* PR
|
|
|
19
19
|
its SPEC, all phases, docs, CI status, and review receipt — that returns a single
|
|
20
20
|
verdict: **merge-ready** or a ranked list of **blockers**. **Never edits,
|
|
21
21
|
refactors, or merges.** The human merges, or an active
|
|
22
|
-
`
|
|
22
|
+
`advance --fullauto` invocation consumes the SHA-bound verdict and performs
|
|
23
23
|
its separate fail-closed merge step.
|
|
24
24
|
|
|
25
25
|
`audit-pr` does **not** re-review the diff. It consumes the current SHA-bound
|
|
@@ -159,7 +159,7 @@ the user previously approved a merge, or a tool retained an earlier permission.
|
|
|
159
159
|
Those signals cannot change this skill's read-first boundary.
|
|
160
160
|
|
|
161
161
|
The **sole automated merge authority** is the AUDIT stage of an actively invoked
|
|
162
|
-
`
|
|
162
|
+
`advance --continue --fullauto` run. Its MERGE-READY comment is evidence,
|
|
163
163
|
not permission; the repository wrapper independently verifies that comment,
|
|
164
164
|
the forge's current head/default base, green checks, and the `merge: fullauto`
|
|
165
165
|
decision fetched at that head. The wrapper owns fresh sync checks, transient
|
|
@@ -179,13 +179,13 @@ execute-phase (all phases done) ─▶ review-change (REVIEW-PASS receipt posted
|
|
|
179
179
|
│
|
|
180
180
|
blockers ─┬─ receipt absent/stale ──▶ /review-change ──────┘ (re-review, re-audit)
|
|
181
181
|
├─ in-scope ──▶ execute-phase ────────┘ (fold, re-audit)
|
|
182
|
-
├─ out-of-scope ──▶
|
|
182
|
+
├─ out-of-scope ──▶ unit-lane --fix
|
|
183
183
|
└─ deferral ──▶ triage-issue
|
|
184
184
|
```
|
|
185
185
|
|
|
186
186
|
- Consumes the `review-change` `REVIEW-PASS` receipt (its scope/axes, acceptance
|
|
187
|
-
coverage, invariant result, manual checks) plus the artifacts of `
|
|
188
|
-
`
|
|
187
|
+
coverage, invariant result, manual checks) plus the artifacts of `unit-lane` /
|
|
188
|
+
`execute-phase` (SPEC, phases, docs, `Closes #N`).
|
|
189
189
|
- `audit-docs` is the cross-document coherence check; `audit-pr` is per-PR merge
|
|
190
190
|
readiness; `product-audit` is the periodic, product-wide full sweep.
|
|
191
191
|
|
|
@@ -199,8 +199,8 @@ execute-phase (all phases done) ─▶ review-change (REVIEW-PASS receipt posted
|
|
|
199
199
|
reported **with the PR's full URL in the header**, each blocker routed, with the
|
|
200
200
|
human's manual-verification list explicit.
|
|
201
201
|
- On MERGE-READY the merge owner is explicit: a standalone audit hands the URL
|
|
202
|
-
to the human; an active `
|
|
202
|
+
to the human; an active `advance --fullauto` AUDIT stage receives the
|
|
203
203
|
SHA-bound verdict and owns every later merge check.
|
|
204
204
|
- The **closing `→ Next:` block is printed** (merge link → then the next unit via
|
|
205
|
-
`/
|
|
205
|
+
`/unit-lane <unit>` or `/triage-issue`; BLOCKED → the routed fix, then re-audit).
|
|
206
206
|
- Nothing was edited, refactored, or merged.
|
|
@@ -6,14 +6,14 @@ A gate that can't be confirmed is a **blocker**, not a pass — never assume gre
|
|
|
6
6
|
| Gate | What it means | Blocker when |
|
|
7
7
|
|---|---|---|
|
|
8
8
|
| **Acceptance coverage** | The receipt's acceptance-coverage field accounts for every SPEC acceptance criterion (review-change verified the mapping). This gate confirms the receipt *names* the criteria — it never remaps diff hunks to criteria itself. | The receipt omits a criterion the SPEC lists, or its coverage field is absent/generic. |
|
|
9
|
-
| **All phases complete** | Feature: every
|
|
9
|
+
| **All phases complete** | Feature: every task in the unit doc's `Tasks` section is done and logged in its `Progress log`. Fix: the SPEC is fully implemented. | Any unchecked task or unimplemented phase without an explicit, tracked deferral. |
|
|
10
10
|
| **Scope integrity (creep)** | The PR implements the SPEC and no more; out-of-scope work was split out. | Undocumented scope creep, or in-scope work missing. |
|
|
11
11
|
| **Docs updated** | Every "Affected docs" criterion is satisfied; per-phase docs (`progress`/`testing`/`known-issues`/`decisions`) reflect reality; the doc map still resolves. **Never merge with documentation still pending.** | A doc the map or SPEC requires is stale, missing, pending, or contradicts the code. |
|
|
12
|
-
| **Traceability** | `Closes #N` is in the PR body when the work is issue-born (from
|
|
12
|
+
| **Traceability** | `Closes #N` is in the PR body when the work is issue-born (from `/unit-lane --from-issue <n>` or `/unit-lane --fix <n>`); the roadmap/fix-index entry matches, is **still present** (removed only *after* merge, never before), and carries the linked PR reference (`done · [#<pr>](<pr-url>)`). | Issue-born work without `Closes #N`; a roadmap/index entry out of sync; the entry dropped before merge; or a `done` row without its PR link. |
|
|
13
13
|
| **Verification gate / CI** | The project's gate passes — type-check, tests, build — and `statusCheckRollup` is green at the current head. | Any required check failing, pending, or absent where the project requires one. |
|
|
14
14
|
| **Mergeability** | Branch is off the default base, independently mergeable (no conflicts), not stacked on another PR, not draft. | Wrong base, conflicts, stacked dependency, or still draft. |
|
|
15
15
|
| **Review receipt** | A current `REVIEW-PASS` receipt is posted on the PR: the newest comment carrying `<!-- review-change:pass sha=<40-hex> contract=v1 -->` whose `sha` equals the PR's current head SHA. Its scope/axes, acceptance coverage, invariant result, and manual checks are the review evidence this audit consumes. | Receipt absent, or its marker `sha` predates the current head (any later commit voids it). The blocker routes to `/review-change`; never re-review the diff from here (AC 13). |
|
|
16
|
-
| **Closure integrity** | The governing **feature** SPEC's capability closure was taken and recorded — `design
|
|
16
|
+
| **Closure integrity** | The governing **feature** SPEC's capability closure was taken and recorded — the lane's `design` step was actually run, not bypassed. Fix-governed PRs: `n/a` (no closure block by design). | A present `Capability closure` block has a blank row, or a resolved non-`n/a` row with no matching acceptance criterion. |
|
|
17
17
|
| **Scope integrity (descope)** | An issue born during this unit that maps to an unmet SPEC acceptance criterion or phase task has a matching, user-approved, dated `## Amendments` entry — descoped scope was recorded, not silently exported. Detection is two-path: a slug/issue-number text match, **or** an issue linked from an `## Amendments` row (`#89`) — either is sufficient to enumerate the issue, so a descoped issue with a generic title/body is not invisible to the gate. | An issue born since branch divergence that references this unit (by either detection path) maps to an unmet criterion/task with no matching `## Amendments` entry, or an `## Amendments` row that is undated, unapproved, or unlinked to an issue. |
|
|
18
18
|
| **Architectural invariants** | The **receipt** records the invariant result review-change took against the optional project invariant document; this gate confirms that result is explicit (`pass | blocker | n-a`) and does not reclassify it (AC 13). No document → `n/a: no project invariants declared`, not a blocker. | The receipt's invariant result is absent/ambiguous, or a recorded `blocker`/`violates`/`introduces`/`changes` lacks the cited decision the review surfaced. |
|
|
19
19
|
| **Hygiene — tree clean** | `git status --porcelain` is empty at the audited head: every artifact is committed, so nothing rides along to the next conversation (the field failure of issue #182). | Any modified or untracked path — the blocker names each one. |
|
|
@@ -17,15 +17,15 @@
|
|
|
17
17
|
> decision was *taken and recorded*, never that UI/API surface exists. Never
|
|
18
18
|
> push a blank row into inventing surface to pass this gate.
|
|
19
19
|
> - **Feature SPEC, block absent** → the SPEC predates or bypassed
|
|
20
|
-
> `
|
|
20
|
+
> `unit-lane`. Never a blocker — emit a dated **warning**, PR still
|
|
21
21
|
> merges:
|
|
22
22
|
> ```
|
|
23
23
|
> design-debt: closure absent, SPEC predates the rule (dated <YYYY-MM-DD>)
|
|
24
24
|
> ```
|
|
25
25
|
> This warning is itself the **retrofit trigger**: the next unit of work that
|
|
26
|
-
> touches this feature must fill the closure via `/
|
|
26
|
+
> touches this feature must fill the closure via `/unit-lane <slug>`
|
|
27
27
|
> (upsert — fills only the missing rows, destroys nothing recorded) *before*
|
|
28
|
-
> that new work is planned. See `
|
|
28
|
+
> that new work is planned. See `unit-lane`'s design-step upsert semantics for the
|
|
29
29
|
> other half of this contract.
|
|
30
30
|
|
|
31
31
|
> **`done` ≠ merge-ready.** A unit flips to `done` when its PR opens (built, not
|
|
@@ -96,8 +96,7 @@ verdict:
|
|
|
96
96
|
feature unit — its named `— spec` parent re-derives the same way. Bound artifacts
|
|
97
97
|
are frozen: new implementation-phase files are allowed, edits to a bound artifact
|
|
98
98
|
are not. Stale, missing, wrong-stage **or impossible-timeline** lineage → **BLOCKED**,
|
|
99
|
-
`→ Next: /
|
|
100
|
-
broken link). A `SPEC-REVIEW-PASS` never satisfies the plan hop, and vice versa.
|
|
99
|
+
`→ Next: /unit-lane <unit>` (the lane's `review` step re-derives the artifact). A `SPEC-REVIEW-PASS` never satisfies the plan hop, and vice versa.
|
|
101
100
|
2. **Obligations are closed.** Every row of the unit's obligation ledger is
|
|
102
101
|
`verified` — with the validator that ran on this candidate — or an explicit
|
|
103
102
|
`n/a: <reason>`. Any `planned`, `in-progress`, blank, or `deferred` row is
|
|
@@ -53,5 +53,5 @@
|
|
|
53
53
|
SHA re-posts (newest wins) — and it **refuses to post for a BLOCKED verdict**,
|
|
54
54
|
so the page never shows a stale green flag.
|
|
55
55
|
8. **Report** — the verdict block below, always headed by the PR's full URL.
|
|
56
|
-
In an active `
|
|
56
|
+
In an active `advance --fullauto` AUDIT stage, return the verdict to the
|
|
57
57
|
conductor; never run its merge wrapper from this skill.
|
|
@@ -27,14 +27,14 @@ Before merge, a human should still verify:
|
|
|
27
27
|
also print the closure bullet (a warning never blocks, so it co-occurs with a
|
|
28
28
|
MERGE-READY verdict; the two lines print together, never one instead of the other):
|
|
29
29
|
· MERGE-READY, standalone/manual audit → you merge: <full PR URL>, then
|
|
30
|
-
/
|
|
31
|
-
· MERGE-READY inside active
|
|
30
|
+
/unit-lane <next-roadmap-unit> (the next roadmap unit) or pick an issue with /triage-issue
|
|
31
|
+
· MERGE-READY inside active advance --fullauto → return this SHA-bound
|
|
32
32
|
verdict to the conductor; it runs the transient merge wrapper
|
|
33
33
|
· BLOCKED → clear the top blocker (routed above), then re-run /audit-pr
|
|
34
34
|
· Receipt absent/stale blocker → /review-change (re-review at the head), then
|
|
35
35
|
re-run /audit-pr — never re-review from this audit
|
|
36
36
|
· Closure warning (in addition to the verdict above) or a closure blocker →
|
|
37
|
-
/
|
|
37
|
+
/unit-lane <slug> — re-runs the design step to fill the missing closure rows (upsert, destroys
|
|
38
38
|
nothing) before further work on this feature is planned; re-run /audit-pr after
|
|
39
39
|
· Scope-bleed blocker → record the missing `## Amendments` entry (user-approved,
|
|
40
40
|
dated, linking the issue) in the governing SPEC, or re-classify the issue as
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
re-run `audit-pr`) — never re-review from here.
|
|
5
5
|
- **Incomplete in-scope work** → fold into this branch via `execute-phase`
|
|
6
6
|
(the relevant phase or `--fix`); re-run `audit-pr` after.
|
|
7
|
-
- **Out-of-scope defect surfaced** →
|
|
7
|
+
- **Out-of-scope defect surfaced** → `/unit-lane --fix <n>` (new fix entry), not this PR.
|
|
8
8
|
- **Deferred finding lacking a home** → `triage-issue` to file + classify it.
|
|
9
9
|
- **Stale/missing docs** → update per the doc map (often a quick `execute-phase`
|
|
10
10
|
doc commit), then re-audit.
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
- **Read-first verdict. Never push, edit, refactor, or merge.** Its only forge
|
|
16
16
|
write is the **MERGE-READY comment** (Process step 7 — idempotent,
|
|
17
17
|
comment-only, never a commit tag). Fullauto merge execution belongs only to
|
|
18
|
-
the active `
|
|
18
|
+
the active `advance --fullauto` conductor.
|
|
19
19
|
- **Never re-review the diff.** The `REVIEW-PASS` receipt is the review evidence;
|
|
20
20
|
a missing/stale receipt is a blocker routed to `/review-change`. The audit does
|
|
21
21
|
not compose `review-change`, rescan axes, judge test quality, remap diff hunks
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: discover-repository-state
|
|
3
3
|
user-invocable: true
|
|
4
|
-
version: 1.2.
|
|
4
|
+
version: 1.2.2
|
|
5
5
|
description: >
|
|
6
6
|
Discover repository evidence and write a frozen Normalized Repository State.
|
|
7
7
|
Produces verified repository evidence and keeps facts, decisions, planned
|
|
@@ -79,6 +79,5 @@ If a contradiction was recorded:
|
|
|
79
79
|
|
|
80
80
|
Otherwise:
|
|
81
81
|
|
|
82
|
-
→ Next: /
|
|
83
|
-
·
|
|
84
|
-
(planned is not executable: no current `PLAN-REVIEW-PASS` → /review-plan <NN>)
|
|
82
|
+
→ Next: /unit-lane <slug> — triage and run the lane from frozen facts
|
|
83
|
+
· already-triaged unit → /execute-phase <NN>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: execute-phase
|
|
3
3
|
user-invocable: true
|
|
4
|
-
version: 5.0.
|
|
4
|
+
version: 5.0.1
|
|
5
5
|
argument-hint: <NN-slug> [P<k>|step] [--max-attempts N] [--force]
|
|
6
6
|
allowed-tools: [Bash, Read, Edit, Write, MultiEdit]
|
|
7
7
|
author: "Gabriel Trabanco <1969593+gtrabanco@users.noreply.github.com>"
|
|
@@ -42,4 +42,4 @@ from the triage catalog, not step descopes):
|
|
|
42
42
|
`audit-pr`'s obligation-closure check all key off this same `## References` log
|
|
43
43
|
— it is the single authoritative record of every descope, defined once here.
|
|
44
44
|
Nothing else in the pre-execution route creates an issue: a missing or failed
|
|
45
|
-
`
|
|
45
|
+
the lane's `review` step closes it, never a tracker item.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: fold-findings
|
|
3
3
|
user-invocable: true
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.7.0
|
|
5
5
|
argument-hint: [finding-id …]
|
|
6
6
|
author: "Gabriel Trabanco <1969593+gtrabanco@users.noreply.github.com>"
|
|
7
7
|
license: MIT
|
|
@@ -123,9 +123,9 @@ frozen class is `replan-in-unit` or `decision-required`, nothing folds: no
|
|
|
123
123
|
`folded: yes` flips, no commits. The receipt records the `REPLAN-ROUTE` branch
|
|
124
124
|
and every retained (unfolded) row id, and the loop stops. The consumer is the
|
|
125
125
|
conclusion the already-run router printed, never the invocation itself: on
|
|
126
|
-
`route: replan` the planner it
|
|
127
|
-
`/
|
|
128
|
-
surface the decision to the user, never a planner. `<unit>` is the bare folder number or the full slug (both resolve). The invocation
|
|
126
|
+
`route: replan` the planner command it printed — `/unit-lane <slug>` for a
|
|
127
|
+
feature unit or `/unit-lane --fix <n>` for a fix unit; on `route: decision` stop
|
|
128
|
+
and surface the decision to the user, never a planner. `<unit>` is the bare folder number or the full slug (both resolve). The invocation
|
|
129
129
|
`node scripts/unit-route.mjs <unit>` is the discovery step the fold already
|
|
130
130
|
ran; it is never the recommendation.
|
|
131
131
|
|
|
@@ -173,7 +173,7 @@ or touched outside the queue.
|
|
|
173
173
|
· all FOLDED (<F1> + <F2> + …) → /review-change — re-review the branch now that all listed findings are fixed
|
|
174
174
|
· any DISPUTED (<F1> + <F2> + …) → user decision — resolve every evidenced dispute without creating backlog
|
|
175
175
|
· any BLOCKED (<F1> + <F2> + …) → supply the listed missing inputs, then re-run /fold-findings
|
|
176
|
-
· any REPLAN (<F1> + <F2> + …) → /
|
|
176
|
+
· any REPLAN (<F1> + <F2> + …) → /unit-lane <slug> or /unit-lane --fix <n> — the lane re-runs its plan step, appends the phases to the unit's SPEC; its review step gates before /execute-phase on this unit
|
|
177
177
|
· any DECISION (<F1> + <F2> + …) → stop and surface the decision to the user — a `route: decision` conclusion names no planner, so the unit waits on the user before any plan or code change
|
|
178
178
|
```
|
|
179
179
|
|
|
@@ -182,8 +182,8 @@ several lines, never joined into one prose line.
|
|
|
182
182
|
|
|
183
183
|
Replace placeholders with every actual affected finding ID before printing; never
|
|
184
184
|
print `<F2>`, `…`, or a single representative ID in a live hand-off. Resolve the
|
|
185
|
-
`/
|
|
186
|
-
`<
|
|
185
|
+
`/unit-lane <slug>` / `/unit-lane --fix <n>` unit argument the same way — never
|
|
186
|
+
carry `<slug>` or `<n>` into a live hand-off.
|
|
187
187
|
|
|
188
188
|
## Closing-block decision branch (choose one, at emission)
|
|
189
189
|
|
|
@@ -193,7 +193,7 @@ decision to skip.
|
|
|
193
193
|
|
|
194
194
|
| Batch state | Branch | `→ Next:` (consumer) |
|
|
195
195
|
|---|---|---|
|
|
196
|
-
| freeze-batch (≥ 1 replan-class row) | `REPLAN-ROUTE` | `/
|
|
196
|
+
| freeze-batch (≥ 1 replan-class row) | `REPLAN-ROUTE` | `/unit-lane <slug>` (feature) or `/unit-lane --fix <n>` (fix) when the router concludes `replan` — user confirms, the lane's `plan` step appends the phases and its `review` step gates, then `/execute-phase` on this unit; on `route: decision` stop and surface the decision to the user — the conclusion printed by `node scripts/unit-route.mjs <unit>` (discovery step the fold already ran) |
|
|
197
197
|
| `all-repair-in-place` + docs-only + no folded row severity `high` + prior consumer skip decision | `RE-REVIEW-SKIPPED` | skip — consumer has explicitly decided to skip the re-review |
|
|
198
198
|
| `all-repair-in-place` + docs-only + no folded row severity `high` | `RE-REVIEW-OPTIONAL` | `/review-change` (default, delta mode) — or the consumer's recorded skip decision |
|
|
199
199
|
| empty batch (class `none`) | `RE-REVIEW-OPTIONAL` | `/review-change` by default — safe: the head is unchanged |
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
|
|
44
44
|
| Condition over the taken batch | Batch class | Fold behavior |
|
|
45
45
|
|---|---|---|
|
|
46
|
-
| ≥ 1 row with frozen class `replan-in-unit` or `decision-required` | `frozen (replan present)` | **freeze-batch** — nothing folds, no `folded: yes` flips, no commits; the receipt records the REPLAN-ROUTE and every retained (unfolded) row id; the loop stops; the consumer is the conclusion printed by `node scripts/unit-route.mjs <unit>` (discovery step the fold already ran), where `<unit>` is the bare folder number or the full slug (both resolve): on `route: replan` the planner — `/
|
|
46
|
+
| ≥ 1 row with frozen class `replan-in-unit` or `decision-required` | `frozen (replan present)` | **freeze-batch** — nothing folds, no `folded: yes` flips, no commits; the receipt records the REPLAN-ROUTE and every retained (unfolded) row id; the loop stops; the consumer is the conclusion printed by `node scripts/unit-route.mjs <unit>` (discovery step the fold already ran), where `<unit>` is the bare folder number or the full slug (both resolve): on `route: replan` the planner command the router printed — `/unit-lane <slug>` (feature) or `/unit-lane --fix <n>` (fix) — the lane appends the phases and its `review` step gates, then `/execute-phase` on this unit; on `route: decision` stop and surface the decision to the user, never a planner |
|
|
47
47
|
| all taken rows foldable, none replan-class | `all-repair-in-place` | fold as today (group → fix → gate → commit → flip) |
|
|
48
48
|
| empty queue (zero findings taken) | `none` | receipt only |
|
|
49
49
|
|
|
@@ -58,11 +58,12 @@
|
|
|
58
58
|
`DISPUTED <evidence → user decision>`; never edit classification or create an
|
|
59
59
|
issue.
|
|
60
60
|
9. **Replan.** If the smallest correct group exceeds a reviewable correction,
|
|
61
|
-
run `node scripts/unit-route.mjs <unit>` — its `route: replan` line
|
|
62
|
-
planner (`/
|
|
61
|
+
run `node scripts/unit-route.mjs <unit>` — its `route: replan` line prints the
|
|
62
|
+
planner command (`/unit-lane <slug>` for a feature, `/unit-lane --fix <n>` for
|
|
63
|
+
a fix) that appends the proposed
|
|
63
64
|
phases to the unit's SPEC. The `<unit>` argument accepts the bare folder number
|
|
64
|
-
or the full slug (both resolve). After the user confirms and
|
|
65
|
-
|
|
65
|
+
or the full slug (both resolve). After the user confirms and the lane's
|
|
66
|
+
`review` step passes, `/execute-phase <unit>` completes them and ticks
|
|
66
67
|
the rows. When the router concludes `route: decision` instead — a
|
|
67
68
|
`decision-required` row with no replan row — stop and surface the decision to
|
|
68
69
|
the user; no planner runs until the user decides.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: orchestration-envelope
|
|
3
3
|
user-invocable: false
|
|
4
|
-
version: 2.2.
|
|
4
|
+
version: 2.2.1
|
|
5
5
|
author: "Gabriel Trabanco <1969593+gtrabanco@users.noreply.github.com>"
|
|
6
6
|
license: MIT
|
|
7
7
|
description: >
|
|
@@ -36,8 +36,9 @@ copy a second schema here.
|
|
|
36
36
|
driver appends `renderOutputInstruction(skill)` to that invocation. It has
|
|
37
37
|
the small model-owned fields: outcome, next intent/targets, blockers,
|
|
38
38
|
questions, discoveries, and evidence references.
|
|
39
|
-
- `
|
|
40
|
-
|
|
39
|
+
- `advance` (the companion pi package command) is the conductor, not a worker
|
|
40
|
+
profile: it runs as deterministic code over the sensor envelope and never
|
|
41
|
+
emits a worker SkillOutcome.
|
|
41
42
|
- Interactive invocations emit their normal human-readable reports; no driver
|
|
42
43
|
result is required.
|
|
43
44
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: phase-contract
|
|
3
3
|
user-invocable: false
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.6
|
|
5
5
|
author: "Gabriel Trabanco <1969593+gtrabanco@users.noreply.github.com>"
|
|
6
6
|
license: MIT
|
|
7
7
|
description: >
|
|
8
8
|
Internal contract: the single owner of the eight phase-lint rules, the fixed
|
|
9
9
|
PASS/BLOCKED result, and the normalized phase fingerprint. Consumed by
|
|
10
|
-
|
|
10
|
+
`execute-phase` and the lane's `plan` step. Not a menu entry.
|
|
11
11
|
---
|
|
12
12
|
|
|
13
13
|
# Phase Contract (internal)
|
|
@@ -18,8 +18,7 @@ the same rules before any edit. Nothing else may define what a valid phase is.
|
|
|
18
18
|
|
|
19
19
|
## When to use
|
|
20
20
|
|
|
21
|
-
- `plan
|
|
22
|
-
- `plan-fix` — lint every phase of a fix SPEC before commit.
|
|
21
|
+
- The lane's `plan` step — lint every phase before emission.
|
|
23
22
|
- `execute-phase` — phase-lint pre-flight guard before editing a phase.
|
|
24
23
|
- Templates store the contract version + fingerprint + lint result, never the
|
|
25
24
|
eight rules (they point here).
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: pre-execution-review
|
|
3
3
|
user-invocable: false
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.6.0
|
|
5
5
|
author: "Gabriel Trabanco <1969593+gtrabanco@users.noreply.github.com>"
|
|
6
6
|
license: MIT
|
|
7
7
|
description: >
|
|
8
8
|
Internal owner of the pre-execution review cycle and the planning ledgers:
|
|
9
9
|
independence, unioned findings, counter-evidence dismissal, no-progress,
|
|
10
10
|
`CONVERGENCE-ANOMALY`, and the evidence/obligation/findings tables. Consumed by
|
|
11
|
-
`
|
|
11
|
+
`execute-phase`, `review-change`, and the lane's authoring steps for the
|
|
12
|
+
**planning-ledger shapes and ownership**; the pre-execution verdict owners
|
|
13
|
+
(`review-spec`/`review-plan`) were retired by feature 61. Not a menu entry.
|
|
12
14
|
---
|
|
13
15
|
|
|
14
16
|
# Pre-Execution Review Policy (internal)
|
|
@@ -22,15 +24,16 @@ writes nothing, and emits no verdict of its own.
|
|
|
22
24
|
evidence-grounding = how an author prepares and self-checks an artifact.
|
|
23
25
|
pre-execution-review = how any pre-execution reviewer judges it, and what the
|
|
24
26
|
frozen ledgers look like.
|
|
25
|
-
|
|
27
|
+
lane (design/plan/review steps) = the surviving pre-execution path; feature 61
|
|
28
|
+
P8b retired the standalone review-spec / review-plan
|
|
29
|
+
verdict skills, so this pack now owns the ledger shapes
|
|
30
|
+
the lane and execute-phase consume, not a verdict gate.
|
|
26
31
|
```
|
|
27
32
|
|
|
28
33
|
## When to use
|
|
29
34
|
|
|
30
|
-
-
|
|
31
|
-
|
|
32
|
-
- `design-feature`, `plan-feature`, `plan-feature-scaffold`, `plan-fix` — when
|
|
33
|
-
writing the ledgers and when a review comes back failed.
|
|
35
|
+
- The lane's `plan`/`review` steps — when writing the ledgers and when a review
|
|
36
|
+
comes back failed.
|
|
34
37
|
- Nothing else. Candidate-source review (`review-change`), merge gating
|
|
35
38
|
(`audit-pr`) and execution (`execute-phase`) keep their own contracts; this
|
|
36
39
|
skill adds no authority over them.
|
|
@@ -1,6 +1,14 @@
|
|
|
1
|
+
## Status (feature 61 P8b)
|
|
2
|
+
|
|
3
|
+
`review-spec` and `review-plan` are retired and
|
|
4
|
+
absorbed into the lane. This document now governs the **planning-ledger shapes
|
|
5
|
+
and ownership** (`LEDGERS.md`) that `execute-phase` and `review-change` consume;
|
|
6
|
+
the spec/plan review-cycle semantics below are retained for the legacy units
|
|
7
|
+
that still carry those receipts and are not applied by any live skill.
|
|
8
|
+
|
|
1
9
|
## The pre-execution review cycle
|
|
2
10
|
|
|
3
|
-
Both `review-spec` and `review-plan`
|
|
11
|
+
Both `review-spec` and `review-plan` ran this cycle. The stage files added only
|
|
4
12
|
what is specific to their artifact set.
|
|
5
13
|
|
|
6
14
|
### 1. Independence
|
|
@@ -97,10 +105,11 @@ outside this policy and can never be translated into a PASS.
|
|
|
97
105
|
|
|
98
106
|
A **third cycle never** starts without explicit user instruction: after two
|
|
99
107
|
consecutive unconverged cycles the orchestrator's `stop-review-loop-cap` refusal
|
|
100
|
-
stops a further
|
|
108
|
+
stops a further spec/plan review-cycle invocation, names the lane's `design` step
|
|
109
|
+
as
|
|
101
110
|
the human route, and a PASS resets the count. An unconverged loop ends in the
|
|
102
111
|
`needs-design` verdict where the verdict vocabulary sanctions it (the spec stage)
|
|
103
|
-
and in the refusal plus `design
|
|
112
|
+
and in the refusal plus the lane's `design` routing at the plan stage. The guards
|
|
104
113
|
above gate **blind re-reviews** — an identical snapshot with the identical
|
|
105
114
|
question — and never a repair performed in response to a persisted verdict: a
|
|
106
115
|
repair turn whose input is a FAIL/NEEDS-DESIGN receipt produces a new snapshot by
|
|
@@ -115,9 +124,9 @@ a count and never waives a finding.
|
|
|
115
124
|
- A PASS earned by dropping a finding to `info`, by narrowing a check, or by
|
|
116
125
|
editing a validator/test to accept the artifact.
|
|
117
126
|
- A silent second cycle, a silent dismissal, or a silent substitute receipt.
|
|
118
|
-
- An automatic forge issue. No route in the pre-execution set —
|
|
119
|
-
|
|
120
|
-
`
|
|
127
|
+
- An automatic forge issue. No route in the pre-execution set — the lane's
|
|
128
|
+
`research`/`design`/`plan`/`review` steps, `execute-phase`, `workflow-status`,
|
|
129
|
+
`advance`, `review-change`,
|
|
121
130
|
`audit-pr` — creates one for a planning gap, and none defers
|
|
122
131
|
an obligation to a future issue: the row stays in the unit's ledger, open, until
|
|
123
132
|
the **user** amends the governing SPEC. A blocker that says "file an issue" is a
|
|
@@ -142,8 +151,8 @@ One rule, same shape for every consumer:
|
|
|
142
151
|
and obligation ledgers, built from the artifacts as they stand today — and leave
|
|
143
152
|
`ACCEPTANCE.md`, `PLAN.md`, `TASKS.md`, the phase commits and any older receipt
|
|
144
153
|
byte-identical. Rewriting an old verdict, its digest, or its date is forgery.
|
|
145
|
-
- **Re-review, then resume.** The adopted unit runs
|
|
146
|
-
`execute-phase` resumes **only** on that current
|
|
154
|
+
- **Re-review, then resume.** The adopted unit re-runs the lane's `review` step like any other and
|
|
155
|
+
`execute-phase` resumes **only** on that current verdict. A pre-lane unit
|
|
147
156
|
is never grandfathered in on the strength of its roadmap status.
|
|
148
157
|
- **No retroactive defect.** A missing ledger means the unit predates the gate, not
|
|
149
158
|
that its author was wrong; report it as `legacy`, never as a finding against them.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: product-audit
|
|
3
3
|
user-invocable: true
|
|
4
4
|
disable-model-invocation: true
|
|
5
|
-
version: 3.
|
|
5
|
+
version: 3.3.0
|
|
6
6
|
metadata:
|
|
7
7
|
opencode/autoinvoke: false
|
|
8
8
|
argument-hint: <path-or-area> (optional — defaults to the whole product)
|
|
@@ -117,7 +117,7 @@ Verdict: <one-line honest health verdict>
|
|
|
117
117
|
(none — <why>)
|
|
118
118
|
|
|
119
119
|
### Roadmap — add
|
|
120
|
-
- <feature> — from: F<k> — <rationale & opportunity> — route:
|
|
120
|
+
- <feature> — from: F<k> — <rationale & opportunity> — route: /unit-lane --from-issue <n>
|
|
121
121
|
(none — <why>)
|
|
122
122
|
|
|
123
123
|
### Roadmap — remove / revise
|
|
@@ -126,7 +126,7 @@ Verdict: <one-line honest health verdict>
|
|
|
126
126
|
|
|
127
127
|
### Tooling — register / re-design
|
|
128
128
|
- <skill|MCP> — register in AGENTS.md (Optional review extras): <why> — route: user edits AGENTS.md
|
|
129
|
-
- <skill|MCP> — would change <feature> scope: <why> — route: /
|
|
129
|
+
- <skill|MCP> — would change <feature> scope: <why> — route: /unit-lane <slug>
|
|
130
130
|
(none — <why>)
|
|
131
131
|
|
|
132
132
|
## Manual-verification checklist (what automation can't confirm)
|
|
@@ -134,7 +134,7 @@ Verdict: <one-line honest health verdict>
|
|
|
134
134
|
|
|
135
135
|
Finding set: F<k> + F<j> + F<m> (print every proposed finding; one finding → F<k>)
|
|
136
136
|
→ Next: /triage-issue <id> F<k> F<j> F<m> — classify the complete finding set in one batch (opens the ones that warrant it)
|
|
137
|
-
· accepted bug/debt → /
|
|
137
|
+
· accepted bug/debt → /unit-lane --fix <n> · accepted capability → /unit-lane --from-issue <n>
|
|
138
138
|
· nothing to act on → the persisted report is the record; move on
|
|
139
139
|
```
|
|
140
140
|
|
|
@@ -159,12 +159,12 @@ security items to track first").
|
|
|
159
159
|
order, never a different letter per problem type. Once persisted, ids are
|
|
160
160
|
frozen: a later audit gets a new audit id, never renumbers an old file; cross-audit
|
|
161
161
|
lineage lives only in Delta mappings as `<audit-id> F<k>`, never global slugs or
|
|
162
|
-
replaced ids. When the user accepts, route: `triage-issue` files/classifies,
|
|
163
|
-
|
|
162
|
+
replaced ids. When the user accepts, route: `triage-issue` files/classifies, `/unit-lane`
|
|
163
|
+
adds roadmap work or scopes a concrete fix.
|
|
164
164
|
- **Never registers tooling or edits `AGENTS.md`.** The tooling sweep proposes a
|
|
165
|
-
skill/MCP to register, but the user (or a routed
|
|
165
|
+
skill/MCP to register, but the user (or a routed `/unit-lane <slug>` run)
|
|
166
166
|
performs the edit; a scope-affecting discovery routes to
|
|
167
|
-
`/
|
|
167
|
+
`/unit-lane <slug>`, which the user approves.
|
|
168
168
|
- Platform-adaptive: run only applicable axes; always list what you skipped and why.
|
|
169
169
|
- **No silent caps.** If you sampled, prioritized, or time-boxed a dimension, say
|
|
170
170
|
so — never present partial coverage as exhaustive.
|
|
@@ -198,10 +198,10 @@ product-audit (whole product, all axes, periodic)
|
|
|
198
198
|
├─ composes review-change axes (codebase-wide) + audit-docs (doc coherence)
|
|
199
199
|
├─ mines feature docs (decisions / known-issues / architecture-notes)
|
|
200
200
|
├─ sweeps installed skills / connected MCP servers (product-wide, periodic)
|
|
201
|
-
└─ proposes ─┬─ Issues to open ........ ▶ triage-issue /
|
|
202
|
-
├─ Roadmap: add .......... ▶
|
|
201
|
+
└─ proposes ─┬─ Issues to open ........ ▶ triage-issue / unit-lane --fix
|
|
202
|
+
├─ Roadmap: add .......... ▶ unit-lane --from-issue
|
|
203
203
|
├─ Roadmap: remove/revise ▶ triage-issue / roadmap edit (user decides)
|
|
204
|
-
└─ Tooling: register/re-design ▶ user edits AGENTS.md /
|
|
204
|
+
└─ Tooling: register/re-design ▶ user edits AGENTS.md / unit-lane
|
|
205
205
|
```
|
|
206
206
|
|
|
207
207
|
- Broader than `review-change` (one change) and `audit-pr` (one PR); subsumes
|
|
@@ -221,5 +221,4 @@ product-audit (whole product, all axes, periodic)
|
|
|
221
221
|
with the next incremental audit id, and printed in chat.
|
|
222
222
|
- Nothing else was fixed, filed, or changed — the user decides what to act on.
|
|
223
223
|
- The **closing `→ Next:` block is printed** — typically a batch
|
|
224
|
-
`/triage-issue <id> F<k> …` for the proposed issues, then `/
|
|
225
|
-
`/plan-fix` for the accepted work.
|
|
224
|
+
`/triage-issue <id> F<k> …` for the proposed issues, then `/unit-lane` for the accepted work.
|
|
@@ -32,7 +32,7 @@ step (2–5). Each item ends with exactly one fallback; never pick another one m
|
|
|
32
32
|
inventory freshness**: cross-check `docs/CAPABILITIES.md` against the code —
|
|
33
33
|
roles, permissions, or cross-cutting subsystems present in the code but
|
|
34
34
|
missing from the inventory (or vice versa) are a Process & docs finding
|
|
35
|
-
(`
|
|
35
|
+
(`unit-lane`'s design step Integration closure is only as good as this file). If
|
|
36
36
|
the project has no inventory file, propose seeding it from the template —
|
|
37
37
|
a finding, never an auto-fix.
|
|
38
38
|
4. **Mine accumulated suggestions** — read every feature folder's `decisions.md`,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: resolve-repository-state
|
|
3
3
|
user-invocable: true
|
|
4
|
-
version: 1.2.
|
|
4
|
+
version: 1.2.2
|
|
5
5
|
argument-hint: <contradiction-id>
|
|
6
6
|
description: >
|
|
7
7
|
Resolve an explicit Normalized Repository State contradiction. This is the
|
|
@@ -74,7 +74,6 @@ If human input is required:
|
|
|
74
74
|
Otherwise:
|
|
75
75
|
|
|
76
76
|
→ Next: resume the interrupted workflow named by `Reported by` — continue from the resolved snapshot
|
|
77
|
-
· planning was interrupted → /
|
|
77
|
+
· planning was interrupted → /unit-lane <slug>
|
|
78
78
|
· implementation was interrupted → /execute-phase <NN>
|
|
79
|
-
(only while its `PLAN-REVIEW-PASS` is still current → else /review-plan <NN>)
|
|
80
79
|
· review, audit, or status was interrupted → rerun that same skill
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: review-change
|
|
3
3
|
user-invocable: true
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.8.0
|
|
5
5
|
argument-hint: <path-or-glob> [--adversarial N] [--synthesize]
|
|
6
6
|
author: "Gabriel Trabanco <1969593+gtrabanco@users.noreply.github.com>"
|
|
7
7
|
license: MIT
|
|
@@ -42,8 +42,8 @@ finding.
|
|
|
42
42
|
## Review-end turn boundary
|
|
43
43
|
|
|
44
44
|
On `REVIEW-FAIL` or `NEEDS-DECISION`, this skill **ends at the report**: it
|
|
45
|
-
never invokes `/fold-findings`, `/execute-phase`, `/
|
|
46
|
-
`/
|
|
45
|
+
never invokes `/fold-findings`, `/execute-phase`, `/unit-lane` or
|
|
46
|
+
`/triage-issue` — those are separate user-initiated invocations,
|
|
47
47
|
run in a fresh turn (a programmatic outer driver may compose the same
|
|
48
48
|
sequence in-turn, per `REVIEW_PROCESS.md`). The review's only mutations are the
|
|
49
49
|
ledger commit (persist step 11) and, on `REVIEW-PASS` with a PR, the
|
|
@@ -23,7 +23,7 @@ model identity, so this skill never tries; it states the condition in prose
|
|
|
23
23
|
and lets the human (or the orchestrator that knows which model is running)
|
|
24
24
|
judge it.
|
|
25
25
|
|
|
26
|
-
**N ladder (fixed).** `N=2` is the default (the `
|
|
26
|
+
**N ladder (fixed).** `N=2` is the default (the `advance` floor). Bump to
|
|
27
27
|
`N=3` when either holds: the change has a security/auth surface, or all
|
|
28
28
|
available reviewers share one model family (the third reviewer buys back some
|
|
29
29
|
of the decorrelation a single family can't provide). `N>3` is **explicitly
|
|
@@ -11,7 +11,7 @@ fused table.
|
|
|
11
11
|
no message (today's default). `--adversarial` passed **without** a valid N
|
|
12
12
|
(no number given, or a number `< 2`) → usage error: state that `--adversarial`
|
|
13
13
|
needs an integer N≥2 and fall back to the single-reviewer path — never
|
|
14
|
-
silently run 1. `
|
|
14
|
+
silently run 1. `advance`'s hard floor always passes `N=2`.
|
|
15
15
|
|
|
16
16
|
**Why N reviewers.** A single adversarial, context-clean reviewer (see the
|
|
17
17
|
turn-contract box) decorrelates some blind spots; running N independent
|
|
@@ -22,16 +22,16 @@ 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
24
|
routed to the current phase's fold cycle (`/fold-findings`, invoked after this review ends)
|
|
25
|
-
— never a tracked issue, never
|
|
25
|
+
— never a tracked issue, never a standalone replan. Classification honors
|
|
26
26
|
`review-implementation`'s **current-unit contract**: in-scope defects are
|
|
27
27
|
always fix-now / replan-in-unit — never a postpone/tradeoff/wontfix/new-issue
|
|
28
28
|
escape.
|
|
29
29
|
- **fix-now / `replan-in-unit`** (too large to fold as-is) → keeps its fix-now
|
|
30
30
|
class and ledger row; run `node scripts/unit-route.mjs <unit>` — its
|
|
31
|
-
`route: replan` line
|
|
32
|
-
`/
|
|
33
|
-
user confirms the appended SPEC phase(s),
|
|
34
|
-
and only then `execute-phase` runs them.
|
|
31
|
+
`route: replan` line prints the planner command (`/unit-lane <unit>` for a
|
|
32
|
+
feature, `/unit-lane --fix <n>` for a fix). The lane re-runs its plan step on
|
|
33
|
+
this branch, the user confirms the appended SPEC phase(s), its review step
|
|
34
|
+
gates, and only then `execute-phase` runs them.
|
|
35
35
|
- **fix-now / `decision-required`** → stop and surface the decision to the user;
|
|
36
36
|
the unit blocks until decided. No issue is created.
|
|
37
37
|
- **proposal** (independent future capability) → batched in the report with a
|
|
@@ -126,13 +126,14 @@ exact command tokens.
|
|
|
126
126
|
third cycle never starts without an explicit user instruction)
|
|
127
127
|
· /audit-pr → only after the table is clean (not yet — findings open)
|
|
128
128
|
· any finding routed replan-in-unit or owned by plan? → `node
|
|
129
|
-
scripts/unit-route.mjs <unit>` prints `route: replan` and
|
|
130
|
-
|
|
131
|
-
the
|
|
132
|
-
|
|
129
|
+
scripts/unit-route.mjs <unit>` prints `route: replan` and the planner
|
|
130
|
+
command (`/unit-lane <unit>` for a feature, `/unit-lane --fix <n>` for a
|
|
131
|
+
fix); the lane re-runs its plan step on this branch, its review step
|
|
132
|
+
gates, then `/execute-phase <unit>` (yes: list the finding ids; no: omit
|
|
133
133
|
this line)
|
|
134
|
-
· any finding owned by product? → /
|
|
135
|
-
|
|
134
|
+
· any finding owned by product? → /unit-lane <unit> — the lane's design
|
|
135
|
+
step repairs the half, its review step re-judges it (yes: list the ids;
|
|
136
|
+
no: omit this line)
|
|
136
137
|
· independent proposals → present to the user; only the user routes them
|
|
137
138
|
to /triage-issue
|
|
138
139
|
· adversarial recommendation checklist fired AND this run was
|
|
@@ -85,7 +85,7 @@ in-scope capability complete (D2: complete capabilities, not short unit
|
|
|
85
85
|
duration). Current-unit work has **only blocking outcomes**:
|
|
86
86
|
|
|
87
87
|
- **fix-now** — it can fold directly. It is NEVER a tracked issue and NEVER
|
|
88
|
-
routes to
|
|
88
|
+
routes to a standalone replan: it folds into the current unit's open phase (AC 12).
|
|
89
89
|
- **replan-in-unit** — it needs additional user-confirmed phases (see *Large
|
|
90
90
|
in-scope fix-now → replan, never downgrade* below).
|
|
91
91
|
- **decision-required** — a new product/architecture decision is unavoidable.
|
|
@@ -109,11 +109,12 @@ the user routes a proposal to `triage-issue`.
|
|
|
109
109
|
An in-scope fix-now too large to fold as-is (multi-file redesign, or evidence
|
|
110
110
|
the unit should have been split) keeps its **fix-now** class — size is never a
|
|
111
111
|
reason to downgrade. Set its `Route` to **`replan-in-unit`**: run
|
|
112
|
-
`node scripts/unit-route.mjs <unit>` — its `route: replan` line
|
|
113
|
-
(`/
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
`
|
|
112
|
+
`node scripts/unit-route.mjs <unit>` — its `route: replan` line prints the
|
|
113
|
+
planner command (`/unit-lane <unit>` for a feature, `/unit-lane --fix <n>` for a
|
|
114
|
+
fix) — and the unit's SPEC `## Phases`
|
|
115
|
+
ledger gets one or more new phases covering the work, on the SAME branch, the
|
|
116
|
+
lane's own `review` step passing before `execute-phase` runs them. It never routes to
|
|
117
|
+
a standalone planner for a new unit or a new issue (AC 12). Placement
|
|
117
118
|
depends on whether the final `Hardening & PR` phase has already run:
|
|
118
119
|
|
|
119
120
|
- **Hardening not yet executed** → insert the new phase(s) BEFORE it; the
|
|
@@ -150,10 +151,11 @@ your domains):
|
|
|
150
151
|
## Routing (what each class feeds)
|
|
151
152
|
|
|
152
153
|
- **fix-now** → fold directly into the current unit's open phase; never a
|
|
153
|
-
tracked issue, never
|
|
154
|
+
tracked issue, never a standalone planner (AC 12).
|
|
154
155
|
- **fix-now / `replan-in-unit`** → `node scripts/unit-route.mjs <unit>` prints
|
|
155
|
-
`route: replan`; the planner it
|
|
156
|
-
|
|
156
|
+
`route: replan`; the planner command it prints re-cuts the SPEC `## Phases`
|
|
157
|
+
ledger
|
|
158
|
+
(user confirms), the lane's `review` step gates, then `execute-phase`
|
|
157
159
|
runs the new phases — never a downgrade, never a tracked issue (AC 12).
|
|
158
160
|
- **fix-now / `decision-required`** → stop and surface the decision; the unit
|
|
159
161
|
blocks until the user decides. No issue is created.
|
|
@@ -172,8 +174,8 @@ finding in its `Route` cell.
|
|
|
172
174
|
| Owning stage | Hand-off | Never |
|
|
173
175
|
|---|---|---|
|
|
174
176
|
| `source` | fold locally: `/fold-findings`, then re-run `/review-change` on the changed HEAD | — |
|
|
175
|
-
| `plan` | run `node scripts/unit-route.mjs <unit>` → `route: replan`; 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
|
|
176
|
-
| `product` | `/
|
|
177
|
+
| `plan` | run `node scripts/unit-route.mjs <unit>` → `route: replan`; 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 the lane's **`review` step** precedes `execute-phase` | fold it in code and leave the plan describing the old build |
|
|
178
|
+
| `product` | `/unit-lane <unit>` repairs the half through its `design` step, its `review` step re-judges it | patch the product claim into agreement in code |
|
|
177
179
|
| `environment` / `runtime` | the existing retry/`BLOCKED` paths | translate into a PASS, or an issue |
|
|
178
180
|
|
|
179
181
|
- `fix-now` with a `plan` or `product` owner keeps its severity but is **not**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: triage-issue
|
|
3
3
|
user-invocable: true
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.9.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 <1969593+gtrabanco@users.noreply.github.com>"
|
|
7
7
|
license: MIT
|
|
@@ -106,20 +106,21 @@ classification, label ownership, and persisted-output contracts do not change.
|
|
|
106
106
|
## Relationship to other skills
|
|
107
107
|
|
|
108
108
|
```
|
|
109
|
-
┌─ fix-now ─────────▶
|
|
109
|
+
┌─ fix-now ─────────▶ /unit-lane --fix <n> ─▶ the lane's implement step
|
|
110
110
|
├─ fix-in-unit ─────▶ execute-phase <NN> P<k> (fold into phase)
|
|
111
111
|
triage-issue ────┤ or fold-findings (ledger row)
|
|
112
|
-
│ or unit-route →
|
|
113
|
-
├─ promote ─────────▶
|
|
112
|
+
│ or unit-route <unit> → /unit-lane <unit> (replan)
|
|
113
|
+
├─ promote ─────────▶ /unit-lane --from-issue <n> (feature from issue)
|
|
114
114
|
├─ postpone ────────▶ dated comment, leave open
|
|
115
115
|
└─ wontfix ─────────▶ propose close
|
|
116
116
|
```
|
|
117
117
|
|
|
118
118
|
In review-finding mode, `replan-in-unit` runs `node scripts/unit-route.mjs
|
|
119
|
-
<unit>`: its `route: replan` line
|
|
120
|
-
feature, `/
|
|
121
|
-
|
|
122
|
-
|
|
119
|
+
<unit>`: its `route: replan` line prints the planner command — `/unit-lane
|
|
120
|
+
<unit>` for a feature, `/unit-lane --fix <n>` for a fix — which re-runs the
|
|
121
|
+
lane's `plan` catalog step and appends new `P<n>` phases to the same unit. The
|
|
122
|
+
lane's own `review` step is the gate before execution. The user manually runs
|
|
123
|
+
those phases; this skill never implements them.
|
|
123
124
|
|
|
124
125
|
## Done when
|
|
125
126
|
|
|
@@ -136,8 +137,8 @@ phases; this skill never implements them.
|
|
|
136
137
|
|
|
137
138
|
Batch:
|
|
138
139
|
→ Next: apply every verdict: #<n1> → <command> + #<n2> → <command> + #<n3> → <command>
|
|
139
|
-
· fix-now → /
|
|
140
|
-
· fix-in-unit → /execute-phase <NN> P<k> or /fold-findings — never
|
|
140
|
+
· fix-now → /unit-lane --fix <n> · promote → /unit-lane --from-issue <n>
|
|
141
|
+
· fix-in-unit → /execute-phase <NN> P<k> or /fold-findings — never a new planner skill
|
|
141
142
|
· postpone → dated comment, leave open · wontfix → propose close
|
|
142
143
|
· same inconsistency across several issues → /product-audit (a recurring pattern,
|
|
143
144
|
not isolated tickets — sweep the product rather than triaging one by one)
|
|
@@ -25,12 +25,11 @@
|
|
|
25
25
|
append a provenance-marked row to the unit's `review-findings.md` (see
|
|
26
26
|
*Ledger-append mechanism* below).
|
|
27
27
|
- *changes the unit's shape* → **incremental replan** on the same unit:
|
|
28
|
-
name the exact command —
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
three applies and why.
|
|
28
|
+
name the exact command — `/unit-lane <slug>` (the lane re-reads the
|
|
29
|
+
SPEC, re-triages, and re-runs its `design`/`plan` catalog steps) — or a
|
|
30
|
+
user-approved, dated `## Amendments` entry per #66's mechanism (fix
|
|
31
|
+
units). Never write "replan if needed" — always name which applies and
|
|
32
|
+
why.
|
|
34
33
|
- *born as an un-amended descope of an unmerged unit* →
|
|
35
34
|
**scope-bleed restore**: the route is restore-the-criterion-in-the-unit
|
|
36
35
|
(no matching `## Amendments` entry); the issue closes as
|
|
@@ -38,13 +37,15 @@
|
|
|
38
37
|
- No candidate matched → fall through to today's four-verdict
|
|
39
38
|
classification below, unchanged.
|
|
40
39
|
4. **Classify** into one of:
|
|
41
|
-
- **fix-now** — defect or trigger met → route to
|
|
42
|
-
|
|
40
|
+
- **fix-now** — defect or trigger met → route to `/unit-lane --fix <n>`
|
|
41
|
+
(creates the fix unit and triages it; the lane's `implement` step runs
|
|
42
|
+
it); add the entry to the fix index. **High severity** →
|
|
43
43
|
apply the urgency label per *Urgency label vocabulary* above (`urgent` by
|
|
44
44
|
default; `fix-next` when the call is "queue it next" rather than "maybe
|
|
45
45
|
interrupt now" — see that section's table). Non-high severity → no label.
|
|
46
|
-
- **promote-to-feature** — really new capability → route to
|
|
47
|
-
|
|
46
|
+
- **promote-to-feature** — really new capability → route to
|
|
47
|
+
`/unit-lane --from-issue <n>` (creates the feature unit from the issue and
|
|
48
|
+
triages it). Apply the `promoted` disposition
|
|
48
49
|
label per *Disposition label vocabulary* above.
|
|
49
50
|
- **postpone** — valid but trigger unmet → leave open; post a **dated
|
|
50
51
|
re-confirmation** comment stating what you checked and why it stays
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
This skill is the **sole owner and sole writer** of the workflow's urgency
|
|
4
4
|
labels. No other skill defines, spells, or applies them — `workflow-status`
|
|
5
|
-
only *reads* them (labels-only, presence-only) and `
|
|
5
|
+
only *reads* them (labels-only, presence-only) and `advance` only
|
|
6
6
|
*consumes* what `workflow-status` reports.
|
|
7
7
|
|
|
8
8
|
| Label | Color | Meaning |
|
|
@@ -38,8 +38,8 @@ verdict — never a separate, silent step:
|
|
|
38
38
|
landing).
|
|
39
39
|
|
|
40
40
|
A **fix-now + non-high** severity verdict routes normally (fix index +
|
|
41
|
-
|
|
42
|
-
tier.
|
|
41
|
+
`/unit-lane --fix <n>`) but applies **no** label — only high severity reaches
|
|
42
|
+
the urgent tier.
|
|
43
43
|
|
|
44
44
|
## Disposition label vocabulary (owned here)
|
|
45
45
|
|
|
@@ -15,11 +15,11 @@ after `/fold-findings` leaves rows unresolved.
|
|
|
15
15
|
remains on the current unit. Route it to `/fold-findings` or an explicit
|
|
16
16
|
`/execute-phase <unit> P<n>`.
|
|
17
17
|
- A correction too large for the current fold is `replan-in-unit`. Run
|
|
18
|
-
`node scripts/unit-route.mjs <unit>`; its `route: replan` line
|
|
19
|
-
planner
|
|
20
|
-
for a fix
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
`node scripts/unit-route.mjs <unit>`; its `route: replan` line prints the
|
|
19
|
+
planner command — `/unit-lane <unit>` for a feature, `/unit-lane --fix <n>`
|
|
20
|
+
for a fix — which re-runs the lane's `plan` step and appends concrete
|
|
21
|
+
`P<n>` phases to the unit's SPEC, preserving the finding's acceptance
|
|
22
|
+
evidence. The lane's `review` step gates execution.
|
|
23
23
|
- A product, architecture, or acceptance decision that blocks safe work is
|
|
24
24
|
`decision-required`. Ask the user; do not guess or weaken the finish line.
|
|
25
25
|
- A finding disproved by current evidence is `disputed`. Preserve the row
|
|
@@ -35,7 +35,7 @@ Return exactly one block per finding:
|
|
|
35
35
|
REVIEW FINDING <F-k> — <short title>
|
|
36
36
|
Checked: <commands and evidence>
|
|
37
37
|
VERDICT: fix-now | replan-in-unit | decision-required | disputed
|
|
38
|
-
Action taken: <current-unit fold/phase |
|
|
38
|
+
Action taken: <current-unit fold/phase | unit-lane | user decision>
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
Close with every finding ID mapped to its own command, joined with ` + `, and
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: unit-lane
|
|
3
3
|
user-invocable: true
|
|
4
|
-
version: 1.
|
|
5
|
-
argument-hint: <NN-slug | "<idea>"> [--retriage]
|
|
4
|
+
version: 1.1.0
|
|
5
|
+
argument-hint: <NN-slug | "<idea>"> [--retriage] | --fix <issue-number> | --from-issue <issue-number>
|
|
6
6
|
description: >
|
|
7
7
|
One-shot lane conductor for a delivery unit: triage, implement, evidence, and
|
|
8
8
|
close in a single document. Triggers: "unit-lane", "run the lane",
|
|
@@ -36,8 +36,14 @@ done:
|
|
|
36
36
|
|
|
37
37
|
- A known unit slug: `unit-lane <NN-slug>`
|
|
38
38
|
- A raw idea (no slug yet): `unit-lane "<idea description>"`
|
|
39
|
+
- A tracked fix issue (no fix folder yet): `unit-lane --fix <issue-number>`
|
|
40
|
+
- A tracked roadmap feature issue (no feature folder yet): `unit-lane --from-issue <issue-number>`
|
|
39
41
|
- Force re-triage: `unit-lane <NN-slug> --retriage`
|
|
40
42
|
|
|
43
|
+
Both `--fix <n>` and `--from-issue <n>` are the exact forms
|
|
44
|
+
`scripts/unit-route.mjs` prints for a tracked issue with no unit folder
|
|
45
|
+
(`route: plan-from-issue`) — never invent a different spelling.
|
|
46
|
+
|
|
41
47
|
## Step 0 — Discover the project
|
|
42
48
|
|
|
43
49
|
Per the agent guide's **Workflow conventions** + **documentation map**, then read
|
|
@@ -48,11 +54,20 @@ exists, read its current `SPEC.md` to avoid overwriting.
|
|
|
48
54
|
|
|
49
55
|
### 1. Resolve or create the unit doc
|
|
50
56
|
|
|
51
|
-
If the
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
57
|
+
If the unit folder already exists, read its `SPEC.md` and continue. Otherwise
|
|
58
|
+
create it from the tree the unit belongs to:
|
|
59
|
+
|
|
60
|
+
| Invocation | Folder | Template | Index to register |
|
|
61
|
+
|---|---|---|---|
|
|
62
|
+
| `<NN-slug>` / `"<idea>"` | `docs/features/<NN>-<slug>/` | `docs/features/_TEMPLATE/SPEC.md` | `docs/features/ROADMAP.md` |
|
|
63
|
+
| `--fix <issue-number>` | `docs/fix/<issue-number>-<topic>/` | `docs/fix/_TEMPLATE/SPEC.md` | `docs/fix/README.md` |
|
|
64
|
+
| `--from-issue <issue-number>` | `docs/features/<NN>-<slug>/` | `docs/features/_TEMPLATE/SPEC.md` | `docs/features/ROADMAP.md` (row links `#<issue-number>`) |
|
|
65
|
+
|
|
66
|
+
For `--fix`/`--from-issue`, read the tracked issue in the forge first and keep
|
|
67
|
+
its number; the folder name carries it (`fix/<issue-number>-<topic>`). Fill
|
|
68
|
+
objective, why, user outcome, and non-goals from the invocation (or the issue).
|
|
69
|
+
Acceptance criteria are induced from user scenarios — **ask-don't-infer**; if the
|
|
70
|
+
request is too vague, STOP and ask the user with concrete options. See
|
|
56
71
|
[the unit doc template](references/STEPS.md) for section order.
|
|
57
72
|
|
|
58
73
|
### 2. Triage — read the catalog, never re-derive
|
|
@@ -119,8 +134,8 @@ unit doc's status, and print the closing block.
|
|
|
119
134
|
|
|
120
135
|
## Relationship to other skills
|
|
121
136
|
|
|
122
|
-
`unit-lane`
|
|
123
|
-
review-spec, review-plan) into catalog steps. The review pack axes
|
|
137
|
+
`unit-lane` absorbed the retired fixed-pipeline skills (design-feature,
|
|
138
|
+
plan-feature, review-spec, review-plan) into catalog steps. The review pack axes
|
|
124
139
|
(`review-implementation`, `review-code`, `review-security`, `review-perf`,
|
|
125
140
|
`review-a11y`, `review-debt`) compose the review step; `triage-issue` feeds
|
|
126
141
|
issues into the lane; `workflow-status` computes the next lane invocation.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: workflow-status
|
|
3
3
|
user-invocable: true
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.9.1
|
|
5
5
|
author: "Gabriel Trabanco <1969593+gtrabanco@users.noreply.github.com>"
|
|
6
6
|
license: MIT
|
|
7
|
-
argument-hint: "[--json-only] [--last-envelope <json|path>]"
|
|
7
|
+
argument-hint: "[--json-only] [--last-envelope <json|path>] [--compact]"
|
|
8
8
|
description: >
|
|
9
9
|
Read-only workflow sensor: run the deterministic script, read the fixed
|
|
10
10
|
machine envelope, interpret the recommendation. Never edits. Triggers:
|
|
@@ -25,20 +25,19 @@ report — it never assembles the envelope by hand.
|
|
|
25
25
|
|
|
26
26
|
```
|
|
27
27
|
✓ The script was RUN — `bun scripts/workflow-status.mjs [--json-only]
|
|
28
|
-
[--last-envelope <json|path>]` (node is the fallback when bun is
|
|
29
|
-
the repository's runtime convention); the envelope is the script's
|
|
30
|
-
assembled by the model
|
|
28
|
+
[--last-envelope <json|path>] [--compact]` (node is the fallback when bun is
|
|
29
|
+
absent, per the repository's runtime convention); the envelope is the script's
|
|
30
|
+
stdout, never assembled by the model
|
|
31
31
|
✓ Nothing was edited, committed, pushed, or created — read-only, always
|
|
32
32
|
✓ `next.recommended` is non-bare (carries the unit's slug/NN, never a bare
|
|
33
|
-
`/
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
current `PLAN-REVIEW-PASS`, else `/review-plan <NN>` (step 6a)
|
|
33
|
+
`/unit-lane`) AND the script computed it from the unit's resolved status:
|
|
34
|
+
`idea`/`defined` → `/unit-lane <slug>` (or `/unit-lane --fix <n>` for a fix);
|
|
35
|
+
`planned`/`in-progress` → `/execute-phase <NN>` (its triage block is the
|
|
36
|
+
authority; no separate plan-receipt currency check, step 6a)
|
|
38
37
|
✓ `detail.crash_recovery` carries a verdict from the decision table and the
|
|
39
38
|
envelope `state` matches it (CLEAN→OK, RESUMABLE→CONTINUE,
|
|
40
39
|
AMBIGUOUS→NEEDS_INPUT)
|
|
41
|
-
✓ Every `detail.design_candidates[].next` begins with `/
|
|
40
|
+
✓ Every `detail.design_candidates[].next` begins with `/unit-lane `
|
|
42
41
|
✓ Every degraded dimension is named in `detail.degradations` as
|
|
43
42
|
`unavailable-<source>-<cause>` — and, when `--last-envelope` was supplied, the
|
|
44
43
|
no-progress guard's `workflow_observations` note is present (never a silently
|
|
@@ -51,6 +50,12 @@ report — it never assembles the envelope by hand.
|
|
|
51
50
|
|
|
52
51
|
With `--json-only`, skip the human-readable summary: print the envelope alone.
|
|
53
52
|
|
|
53
|
+
## Compact mode — `--compact`
|
|
54
|
+
|
|
55
|
+
`--compact` emits the same envelope with repository history dropped (~half the
|
|
56
|
+
bytes on a mature repo); the exact keep/drop set is in
|
|
57
|
+
[envelope fields](references/ENVELOPE_FIELDS.md).
|
|
58
|
+
|
|
54
59
|
## When to use
|
|
55
60
|
|
|
56
61
|
- Between orchestration steps: an external driver runs it to decide the next
|
|
@@ -93,11 +98,11 @@ the JSON contract.
|
|
|
93
98
|
|
|
94
99
|
## Relationship to other skills
|
|
95
100
|
|
|
96
|
-
- The **sensor** counterpart to `
|
|
97
|
-
orchestrator calls `workflow-status` → routes on the
|
|
98
|
-
`
|
|
99
|
-
`triage-issue` directly, choosing the model per step — the same
|
|
100
|
-
the in-agent autopilot.
|
|
101
|
+
- The **sensor** counterpart to `advance`'s conductor: an external
|
|
102
|
+
orchestrator (or `advance` itself) calls `workflow-status` → routes on the
|
|
103
|
+
envelope → invokes `unit-lane` / `execute-phase` / `review-change` /
|
|
104
|
+
`audit-pr` / `triage-issue` directly, choosing the model per step — the same
|
|
105
|
+
loop without the in-agent autopilot.
|
|
101
106
|
- Read-only sibling of `audit-docs` (which judges coherence and can fix) and
|
|
102
107
|
`product-audit` (which judges health): this one only reports state.
|
|
103
108
|
- Schema owner: `orchestration-envelope` (internal).
|
|
@@ -112,7 +117,7 @@ the JSON contract.
|
|
|
112
117
|
`detail.crash_recovery` were read from the envelope, and the envelope `state`
|
|
113
118
|
matches the crash-recovery verdict.
|
|
114
119
|
- With `--last-envelope` supplied: the no-progress guard ran — a stalled
|
|
115
|
-
`/
|
|
120
|
+
`/unit-lane` hint surfaces as a `workflow_observations`
|
|
116
121
|
note, never a silent bland repeat, with no new write path introduced.
|
|
117
122
|
- The human summary (unless `--json-only`) and the envelope are printed, envelope
|
|
118
123
|
last.
|
|
@@ -23,12 +23,12 @@ section *classifies*; the resume command it recommends does the acting.
|
|
|
23
23
|
caller's persisted envelope against the recomputed state and report the
|
|
24
24
|
divergence in one line. The hint never overrides recomputed state.
|
|
25
25
|
- ✓ **No-progress guard (optional, requires `--last-envelope`).** When the
|
|
26
|
-
hint's `next.recommended` was `/
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
26
|
+
hint's `next.recommended` was `/unit-lane <slug>` for a given unit, and this
|
|
27
|
+
run's own recomputed status for that **same unit** is still at the **same
|
|
28
|
+
pre-advance status** the hint expected to move it off of (`idea`/`defined` —
|
|
29
|
+
the lane's triage write lands when the unit doc is created) — either the
|
|
30
|
+
recommended command ran but its status write was dropped, or it never ran at
|
|
31
|
+
all; this guard cannot distinguish the
|
|
32
32
|
two from the envelope alone, so the note names it as a **suspected** stall,
|
|
33
33
|
not a confirmed dropped write. Emit a `workflow_observations` note (see
|
|
34
34
|
`## Machine envelope` for the exact note shape). This is strictly additive:
|
|
@@ -108,15 +108,12 @@ the key's presence.
|
|
|
108
108
|
|---|---|
|
|
109
109
|
| `/discover-repository-state` | `strong` |
|
|
110
110
|
| `/resolve-repository-state` | `strong` |
|
|
111
|
-
| `/
|
|
112
|
-
| `/design-feature` | `strong` |
|
|
111
|
+
| `/unit-lane` | `strong` |
|
|
113
112
|
| `/review-change` | `strong` |
|
|
114
113
|
| `/audit-pr` | `strong` |
|
|
115
114
|
| `/triage-issue` | `strong` |
|
|
116
115
|
| `/product-audit` | `strong` |
|
|
117
116
|
| `/execute-phase` | `cheap` |
|
|
118
|
-
| `/review-spec` | `strong` |
|
|
119
|
-
| `/review-plan` | `strong` |
|
|
120
117
|
|
|
121
118
|
`next.tier` is read off this map by matching the resolved `next.recommended`
|
|
122
119
|
command's name (ignoring its arguments) — never guessed and never copied from
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
**No-progress guard note (`workflow_observations`, requires `--last-envelope`,
|
|
4
4
|
see the crash-recovery checklist above)** — when the hint's `next.recommended`
|
|
5
|
-
targeted `/
|
|
5
|
+
targeted `/unit-lane <slug>` and this run still
|
|
6
6
|
classifies that same unit at the same pre-advance status, append a note of the
|
|
7
7
|
exact shape:
|
|
8
|
-
`"<slug> still 'defined' after the hint's /
|
|
9
|
-
(
|
|
10
|
-
|
|
8
|
+
`"<slug> still 'defined' after the hint's /unit-lane <slug> recommendation — triage not yet applied"`
|
|
9
|
+
(the note fires for a `defined` unit; the lane's triage write is what moves it
|
|
10
|
+
off `idea`/`defined`). The recommendation itself is unaffected — this only adds visibility.
|
|
11
11
|
|
|
12
12
|
**Shape vs. current output — read this before trusting the example below.** The
|
|
13
13
|
example is the envelope's **intended shape**, not everything the deterministic
|
|
@@ -33,10 +33,10 @@ absent-legacy` or `issues_born.n: 0`; the owning note is
|
|
|
33
33
|
"dependencies": {"unmet": [], "build_order": []},
|
|
34
34
|
"recommendations": {"product_audit": false, "reason": null},
|
|
35
35
|
"needs_input": null,
|
|
36
|
-
"next": {"recommended": "/review-change", "alternatives": ["/
|
|
36
|
+
"next": {"recommended": "/review-change", "alternatives": ["/unit-lane 05"], "tier": "strong",
|
|
37
37
|
"suggested": [{"command": "/review-change", "trigger": "accumulation: 420 changed lines since last-reviewed sha", "source_skill": "execute-phase"}]},
|
|
38
38
|
"detail": {
|
|
39
|
-
"design_candidates": [{"id": "08-billing-webhooks", "status": "idea", "next": "/
|
|
39
|
+
"design_candidates": [{"id": "08-billing-webhooks", "status": "idea", "next": "/unit-lane 08-billing-webhooks"}],
|
|
40
40
|
"pre_execution": [{"unit": "12-export-api", "unitDir": "docs/features/12-export-api", "stage": "lane", "label": "current", "verdict": "READY", "boundDigest": null, "observedDigest": null, "recommended": "/unit-lane 12-export-api", "reason": "unit-doc currency is checked per step by unit-lane/execute-phase"}],
|
|
41
41
|
"features": [
|
|
42
42
|
{"id": "07-csv-export", "status": "in-progress", "deps": ["01"], "deps_unmet": [],
|
|
@@ -87,4 +87,39 @@ fully in `features`/`fixes` — an `idea` unit appears ONLY in
|
|
|
87
87
|
`design_candidates` (and `detail.features`), never in `startable_now`, since
|
|
88
88
|
it has no deps-met check to pass (design precedes dependency startability).
|
|
89
89
|
`05-auth` above illustrates `defined` (not yet `planned`): startable, next
|
|
90
|
-
`/
|
|
90
|
+
`/unit-lane`, phase fields null (no planning artifacts yet).
|
|
91
|
+
|
|
92
|
+
## The `--compact` projection
|
|
93
|
+
|
|
94
|
+
The envelope above is the complete one. `--compact` emits the **same shape and the
|
|
95
|
+
same decisions** with repository history dropped, because a poll loop pays for
|
|
96
|
+
that history in context on every read while no consumer of "what can I do now"
|
|
97
|
+
reads it. On this repository it is roughly half the bytes.
|
|
98
|
+
|
|
99
|
+
Exactly two fields change:
|
|
100
|
+
|
|
101
|
+
- `detail.features` / `detail.fixes`: a `done` row is dropped **only on positive
|
|
102
|
+
proof its linked PR merged** (the merge resolver). An unmerged `done` row is
|
|
103
|
+
still at the merge gate and stays; every row in `idea`/`defined`/`planned`/
|
|
104
|
+
`in-progress` stays in both modes, so `detail.startable_now` and
|
|
105
|
+
`detail.blocked_units` keep naming every unit either way.
|
|
106
|
+
- `findings.fix_now[].route`: the reviewer's multi-paragraph evidence memo becomes
|
|
107
|
+
`...(N char evidence, see the unit review-findings.md)`, keeping the original
|
|
108
|
+
length visible. `id`, `file`, `axis`, `severity`, `class` and `suggested_tier`
|
|
109
|
+
are untouched, and the memo is on disk in the unit's `review-findings.md`, which
|
|
110
|
+
is where the fold reads it.
|
|
111
|
+
|
|
112
|
+
`detail.workflow_observations` is **not** reduced in either mode. Every note the
|
|
113
|
+
sensor writes is a signal — an unmapped roadmap status, a slug that refused its
|
|
114
|
+
files, a ledger severity outside the published enum, git and forge state, the
|
|
115
|
+
`--last-envelope` guard's divergence note — and they total about a kilobyte, so
|
|
116
|
+
trimming them would trade a real signal for no measurable win. The size comes from
|
|
117
|
+
`features` and the route memos, which are an order of magnitude larger and pure
|
|
118
|
+
history.
|
|
119
|
+
|
|
120
|
+
Everything else is byte-identical: `state`, `summary`, `unit`, `phase`, `pr`,
|
|
121
|
+
`gates`, `blockers`, `dependencies`, `recommendations`, `needs_input`, all of
|
|
122
|
+
`next` (`recommended`, `alternatives`, `tier`, `reason`, `candidate_count`,
|
|
123
|
+
`suggested`, `continuation`), `detail.repository_state`, `design_candidates`,
|
|
124
|
+
`pre_execution`, `review_loop_cycles`, `crash_recovery` and `urgent`. A consumer
|
|
125
|
+
may therefore switch modes per read without changing how it parses.
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
## Pre-execution receipt sensing (step 6a)
|
|
2
2
|
|
|
3
|
+
> **Legacy (feature 61 P8b):** the spec/plan pre-execution receipt stages are
|
|
4
|
+
> retired — the sensor now senses the unit doc's single triage block
|
|
5
|
+
> (`stage: lane`, see `ENVELOPE_FIELDS.md`). This reference is retained for
|
|
6
|
+
> units that still carry those receipts; the live sensing is the `lane` stage.
|
|
7
|
+
|
|
3
8
|
Roadmap status says what exists; only a receipt bound to the current bytes says
|
|
4
9
|
whether the unit may be executed. Sense it like every other signal — read the file,
|
|
5
10
|
recompute the digest, never trust the prose sitting around the block.
|
|
@@ -145,5 +145,5 @@ mechanized.*
|
|
|
145
145
|
`CRASH RECOVERY` sub-block to the report.
|
|
146
146
|
18. **Report.** Print a short human summary (table: unit | status | deps unmet |
|
|
147
147
|
PR | next gate) plus a **design candidates** line (`idea` units and their
|
|
148
|
-
`/
|
|
148
|
+
`/unit-lane` next command) plus the `CRASH RECOVERY` sub-block, then
|
|
149
149
|
the envelope. With `--json-only`, envelope only.
|