@webpresso/plugin-opencode 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/plugin-skill-ownership.json +21 -15
- package/skills/ai-deslop/SKILL.md +6 -1
- package/skills/autopilot/SKILL.md +6 -1
- package/skills/best-practice-research/SKILL.md +6 -1
- package/skills/deep-interview/SKILL.md +5 -4
- package/skills/delivery-program/SKILL.md +5 -0
- package/skills/fix/SKILL.md +15 -3
- package/skills/handoff/SKILL.md +68 -0
- package/skills/hooks-doctor/SKILL.md +35 -9
- package/skills/plan-refine/SKILL.md +89 -19
- package/skills/plan-refine/references/full-methodology.md +99 -90
- package/skills/ralplan/SKILL.md +155 -28
- package/skills/team/SKILL.md +1 -1
- package/skills/tech-debt/SKILL.md +7 -2
- package/skills/testing-philosophy/SKILL.md +1 -1
- package/skills/tooling-friction/SKILL.md +159 -0
- package/skills/ultragoal/SKILL.md +126 -8
- package/skills/verify/SKILL.md +102 -25
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: skill
|
|
3
|
+
slug: tooling-friction
|
|
4
|
+
title: Tooling Friction
|
|
5
|
+
status: active
|
|
6
|
+
scope: repo
|
|
7
|
+
applies_to: [agents]
|
|
8
|
+
related: [verify, ultragoal, tech-debt, devex-review, land-policy]
|
|
9
|
+
created: "2026-08-03"
|
|
10
|
+
last_reviewed: "2026-08-03"
|
|
11
|
+
name: tooling-friction
|
|
12
|
+
description: "After land, capture MCP/CLI friction tips (optional; never blocks.)"
|
|
13
|
+
argument-hint: "[--promote] [blueprint-slug|pr-number|session]"
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Tooling Friction
|
|
17
|
+
|
|
18
|
+
Optional post-land **product signal** for MCP/CLI/hooks/CI pain so Webpresso tooling can improve. Not a land gate. Not a full session debrief.
|
|
19
|
+
|
|
20
|
+
## Boundary
|
|
21
|
+
|
|
22
|
+
| Owns | Does not own |
|
|
23
|
+
| ---------------------------------------------------- | -------------------------------------------------- |
|
|
24
|
+
| Structured friction tips after land-ish success | Code bugs (`/investigate` → `/fix`) |
|
|
25
|
+
| Optional promote to tech-debt (`--category tooling`) | Blueprint claim corrections (`blueprints/errata/`) |
|
|
26
|
+
| Local planning-state JSON (gitignored) | Human DX audits (`/devex-review`) |
|
|
27
|
+
| Soft bookend from `/verify` Phase 7 | Required PR section, finalize/merge blockers |
|
|
28
|
+
|
|
29
|
+
## When
|
|
30
|
+
|
|
31
|
+
- After `/verify` Phase 7 (esp. green or `--merge-ready`) **and** medium+ tooling waste is already recalled
|
|
32
|
+
- Explicit `/tooling-friction` or user asks for tooling papercuts / agent tax feedback
|
|
33
|
+
- Blueprint completed or PR merged **and** gates burned meaningful tokens
|
|
34
|
+
|
|
35
|
+
## When not
|
|
36
|
+
|
|
37
|
+
- Work still in-flight (stay in fix/verify)
|
|
38
|
+
- Smooth session with no tooling pain → **silence** (do not invent tips)
|
|
39
|
+
- Product-code root cause unknown → investigate first
|
|
40
|
+
- One-off transient network blips without a product fix
|
|
41
|
+
|
|
42
|
+
## Workflow
|
|
43
|
+
|
|
44
|
+
1. **Recall only** — do not re-ingest full CI logs or transcripts.
|
|
45
|
+
2. If zero medium+ findings → stop: `skipped: no tooling friction`.
|
|
46
|
+
3. Emit **1–3** findings (hard cap 8 for schema headroom; prefer ≤3).
|
|
47
|
+
4. Write JSON to:
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
.agent/planning/state/tooling-friction/YYYY-MM-DD-<slug|pr|session>.json
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Create parent dirs as needed. Path is under the durable planning **state** surface (see `Agents.md`). `.agent/` is gitignored — **never** `git add` captures.
|
|
54
|
+
|
|
55
|
+
5. Optional `--promote` or severity `high`/`critical`:
|
|
56
|
+
`wp tech-debt new "<short title>" --severity <s> --category tooling --status accepted`
|
|
57
|
+
Set `promoted_to` to the resulting path.
|
|
58
|
+
6. Optional one-line `wp_session_capture` pointer to the JSON path — no paste-back walls.
|
|
59
|
+
|
|
60
|
+
**Rate limit:** at most **one** capture per verify bookend.
|
|
61
|
+
|
|
62
|
+
## Store path (SSOT)
|
|
63
|
+
|
|
64
|
+
`.agent/planning/state/tooling-friction/*.json` — planning `state/`, not a new top-level under `planning/`.
|
|
65
|
+
|
|
66
|
+
## Schema v1
|
|
67
|
+
|
|
68
|
+
```json
|
|
69
|
+
{
|
|
70
|
+
"schema_version": 1,
|
|
71
|
+
"captured_at": "2026-08-03T15:00:00Z",
|
|
72
|
+
"session": {
|
|
73
|
+
"host": "claude",
|
|
74
|
+
"session_id": "optional-max-128",
|
|
75
|
+
"blueprint_slug": "optional",
|
|
76
|
+
"pr_number": 1239,
|
|
77
|
+
"branch": "optional-max-200"
|
|
78
|
+
},
|
|
79
|
+
"findings": [
|
|
80
|
+
{
|
|
81
|
+
"id": "tf-status-ci-skew",
|
|
82
|
+
"severity": "high",
|
|
83
|
+
"surface": "pr",
|
|
84
|
+
"tool": "wp_pr_status",
|
|
85
|
+
"kind": "friction",
|
|
86
|
+
"signal": "status_ci_skew",
|
|
87
|
+
"symptom": "wp_pr_merge blocked while GitHub CLEAN and PR Policy green.",
|
|
88
|
+
"token_waste": "high",
|
|
89
|
+
"time_waste_minutes": 25,
|
|
90
|
+
"recurrence": "session",
|
|
91
|
+
"suggested_fix": "Align land readiness evidence with PR Policy (body+trailers; git-diff subject).",
|
|
92
|
+
"evidence_refs": ["pr:1239"],
|
|
93
|
+
"promoted_to": null
|
|
94
|
+
}
|
|
95
|
+
],
|
|
96
|
+
"notes": "optional ≤400 chars theme"
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Closed enums
|
|
101
|
+
|
|
102
|
+
| Field | Values |
|
|
103
|
+
| ----------- | -------------------------------------------------------------------------------------------------------------------- |
|
|
104
|
+
| severity | `low` `medium` `high` `critical` |
|
|
105
|
+
| surface | `mcp` `cli` `hook` `pr` `ci` `review-gate` `session-memory` `host` `docs` |
|
|
106
|
+
| kind | `friction` `missing` `docs` `workaround` `incident` |
|
|
107
|
+
| signal | `retry_loop` `schema_confuse` `timeout` `wrong_facade` `missing_capability` `docs_mismatch` `status_ci_skew` `other` |
|
|
108
|
+
| token_waste | `none` `low` `medium` `high` |
|
|
109
|
+
| host | `claude` `codex` `opencode` `grok` `other` |
|
|
110
|
+
| recurrence | `once` `session` `chronic` |
|
|
111
|
+
|
|
112
|
+
### Limits
|
|
113
|
+
|
|
114
|
+
- findings: prefer ≤3 (schema max 8)
|
|
115
|
+
- `symptom` / `suggested_fix`: ≤280 chars
|
|
116
|
+
- `notes`: ≤400 chars
|
|
117
|
+
- `evidence_refs`: ≤5 items × ≤200 chars (run ids, receipt names, `pr:N` — **not** log bodies)
|
|
118
|
+
- `token_waste` bands: none <1k · low 1–5k · medium 5–20k · high >20k or multi-retry (estimate only)
|
|
119
|
+
|
|
120
|
+
## Few-shot tips
|
|
121
|
+
|
|
122
|
+
**Good**
|
|
123
|
+
|
|
124
|
+
- `wp_pr_merge: land readiness disagrees with GitHub CLEAN / PR Policy (status_ci_skew, high)`
|
|
125
|
+
- `wp_review_gate: re-approve after ledger-only commits; subject binding unclear (retry_loop, medium)`
|
|
126
|
+
- `wp_pr_upsert: bare Review model "Grok" fails provider regex; needs "grok reviewer" (schema_confuse, low)`
|
|
127
|
+
|
|
128
|
+
**Bad**
|
|
129
|
+
|
|
130
|
+
- Full CI log paste
|
|
131
|
+
- "Tools are confusing sometimes"
|
|
132
|
+
- `suggested_fix: raise the timeout` (forbidden; see no-timeout-as-fix)
|
|
133
|
+
|
|
134
|
+
## Anti-patterns (iron)
|
|
135
|
+
|
|
136
|
+
1. No secrets, tokens, `.env`, auth headers
|
|
137
|
+
2. No full logs/transcripts
|
|
138
|
+
3. **Never block land** — missing capture ≠ incomplete
|
|
139
|
+
4. No inventing tips on smooth runs
|
|
140
|
+
5. No timeout-as-fix suggestions
|
|
141
|
+
6. No blueprint errata misuse
|
|
142
|
+
7. No committing `.agent/` captures
|
|
143
|
+
8. No auto-open GitHub issues per tip
|
|
144
|
+
|
|
145
|
+
## Integration
|
|
146
|
+
|
|
147
|
+
- **Canonical soft bookend:** `/verify` Phase 7 — if medium+ tooling waste recalled, run once.
|
|
148
|
+
- Other surfaces (ultragoal/delivery): optional cross-link only — do not multi-prompt.
|
|
149
|
+
- Land policy, finalize, and merge tools must not require this skill.
|
|
150
|
+
|
|
151
|
+
## Output (agent reply)
|
|
152
|
+
|
|
153
|
+
```text
|
|
154
|
+
tooling-friction: wrote .agent/planning/state/tooling-friction/<file>.json
|
|
155
|
+
findings: 2 (high=1, medium=1)
|
|
156
|
+
promoted: none | tech-debt/...
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Or: `tooling-friction: skipped: no tooling friction`
|
|
@@ -7,14 +7,20 @@ scope: repo
|
|
|
7
7
|
applies_to: [agents]
|
|
8
8
|
related: [autopilot, plan-refine, verify, fix, opencode-go]
|
|
9
9
|
created: "2026-07-10"
|
|
10
|
-
last_reviewed: "2026-
|
|
10
|
+
last_reviewed: "2026-08-03"
|
|
11
11
|
name: ultragoal
|
|
12
|
-
description: "
|
|
12
|
+
description: "Multi-blueprint ultragoal with budgets. Use for overnight, parallel execute, sleep with stop."
|
|
13
13
|
argument-hint: "<new|status|handoff|run|cancel> [brief]"
|
|
14
14
|
---
|
|
15
15
|
|
|
16
16
|
# Ultragoal
|
|
17
17
|
|
|
18
|
+
## Use when (freeform)
|
|
19
|
+
|
|
20
|
+
- "ultragoal", "overnight", "go to sleep", "full autopilot" **with** named budgets/stop
|
|
21
|
+
- "spawn many in parallel", multi-blueprint ready-set execution
|
|
22
|
+
- Reject unbound "complete everything while I sleep" without stop condition / budgets
|
|
23
|
+
|
|
18
24
|
Use `wp ultragoal` / MCP `wp_ultragoal_*` as the durable controller for work spanning
|
|
19
25
|
one or more blueprints. Prefer this spine over host-local mega-sessions or ad-hoc
|
|
20
26
|
multi-agent swarms.
|
|
@@ -32,6 +38,105 @@ Reject unbudgeted sleep-mode briefs (“complete all”, “full autopilot”,
|
|
|
32
38
|
unless they name a blueprint/slug, budgets, and a stop condition. Route vague briefs
|
|
33
39
|
through `plan-refine` first (or require `force:` only when the user explicitly opts out).
|
|
34
40
|
|
|
41
|
+
## Executor preflight
|
|
42
|
+
|
|
43
|
+
`wp ultragoal start` validates every requested host before it persists a durable run or
|
|
44
|
+
permits supervisor worktree allocation. Built-in hosts validate both the executable and the
|
|
45
|
+
CLI grammar Ultragoal invokes; the generic `process` host validates executable availability
|
|
46
|
+
only. An incompatible wrapper fails with `UG_HOST_UNAVAILABLE`, the configured invocation
|
|
47
|
+
path, the missing surface, and its remediation variable. Diagnostics mention the canonical
|
|
48
|
+
target as secondary context only when the invocation path is a symlink.
|
|
49
|
+
|
|
50
|
+
| Host | Override variable |
|
|
51
|
+
| -------- | ------------------------------- |
|
|
52
|
+
| Claude | `WP_ULTRAGOAL_CLAUDE_COMMAND` |
|
|
53
|
+
| Codex | `WP_ULTRAGOAL_CODEX_COMMAND` |
|
|
54
|
+
| Grok | `WP_ULTRAGOAL_GROK_COMMAND` |
|
|
55
|
+
| OpenCode | `WP_ULTRAGOAL_OPENCODE_COMMAND` |
|
|
56
|
+
| Process | `WP_ULTRAGOAL_PROCESS_COMMAND` |
|
|
57
|
+
|
|
58
|
+
Upgrade the installed CLI or point the named variable at a compatible executable. Then
|
|
59
|
+
restart the process that owns the adapter: probe successes and failures are cached by
|
|
60
|
+
canonical executable for that adapter's lifetime. Missing paths are rechecked and symlink
|
|
61
|
+
retargeting is re-probed, but an in-place executable repair still requires an adapter-owner
|
|
62
|
+
restart. Grok execution requires a separately installed and authenticated Grok Build CLI.
|
|
63
|
+
`wp install` does not install or authenticate Grok Build.
|
|
64
|
+
|
|
65
|
+
Existing `WP_ULTRAGOAL_<HOST>_COMMAND` configurations remain supported; no environment
|
|
66
|
+
variable migration is required. Their executables must satisfy the current semantic probe
|
|
67
|
+
and invocation contract after an upgrade. The generic process host is additive: integrations
|
|
68
|
+
that opt into it configure `WP_ULTRAGOAL_PROCESS_COMMAND` and, when needed, the JSON argument
|
|
69
|
+
array described below.
|
|
70
|
+
|
|
71
|
+
Start probes each unique requested host concurrently, then reports the first failure in
|
|
72
|
+
requested-host order. A failed preflight occurs before durable run creation, ledger writes,
|
|
73
|
+
supervisor launch, or attempt/worktree allocation. Built-in probes validate the grammar they
|
|
74
|
+
invoke: Codex `exec --json --sandbox workspace-write`, Claude prompt/streaming output/bypass
|
|
75
|
+
permission flags, OpenCode `run --format json --auto`, and Grok headless prompt/streaming
|
|
76
|
+
output/approval/workspace-sandbox flags. Grok also runs an auth-free `inspect --json` check
|
|
77
|
+
against a temporary working directory so invalid sandbox profiles fail before execution.
|
|
78
|
+
|
|
79
|
+
Preflight does **not** validate authentication, provider quota or billing, network
|
|
80
|
+
reachability, or secrets isolation. Those failures remain runtime/provider concerns.
|
|
81
|
+
|
|
82
|
+
### Host normalization and recovery
|
|
83
|
+
|
|
84
|
+
Ultragoal trims and normalizes the default host and per-task `taskHosts` values once when it
|
|
85
|
+
resolves the plan, then persists that normalized mapping. Task IDs are never normalized: a
|
|
86
|
+
per-task entry must use the exact executable task ID. Blank host values, missing task IDs,
|
|
87
|
+
and overrides for controller-only tasks fail with `UG_HOST_CONFIG_INVALID`; an unrecognized
|
|
88
|
+
normalized host fails with `UG_HOST_UNKNOWN`.
|
|
89
|
+
|
|
90
|
+
An initial host failure still occurs before owner-head lookup, durable run or ledger creation,
|
|
91
|
+
supervisor launch, and worktree allocation. Once a run already exists, the supervisor fills
|
|
92
|
+
only the ready executable tasks that fit the currently free concurrency slots. If one host is
|
|
93
|
+
unavailable, available siblings in that ready slice start and are durably attached to the run;
|
|
94
|
+
the unavailable task gets no attempt or worktree. The supervisor then records its exit and
|
|
95
|
+
reports the first host failure in task order. The `supervisor-exited` record leaves the run
|
|
96
|
+
nonterminal and the attached handles/worktrees recoverable.
|
|
97
|
+
|
|
98
|
+
After upgrading or overriding the unavailable host, adopt the run. Adoption creates a fresh
|
|
99
|
+
host registry and probe cache, recovers the already attached work, and schedules the task that
|
|
100
|
+
could not start. Do not convert a cached availability failure into a retry attempt or mark an
|
|
101
|
+
otherwise recoverable run terminal.
|
|
102
|
+
|
|
103
|
+
### Generic process contract
|
|
104
|
+
|
|
105
|
+
Set `WP_ULTRAGOAL_PROCESS_COMMAND` to an executable. Optional
|
|
106
|
+
`WP_ULTRAGOAL_PROCESS_ARGS_JSON` must be a JSON array of string arguments. Ultragoal appends
|
|
107
|
+
these fixed arguments after the configured arguments; process integrations must accept them:
|
|
108
|
+
|
|
109
|
+
```text
|
|
110
|
+
--task <task.json> --events <events.jsonl> --responses <responses.jsonl>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
The same absolute paths are available as `UG_TASK_PATH`, `UG_EVENTS_PATH`, and
|
|
114
|
+
`UG_RESPONSES_PATH`; `UG_ATTEMPT_ID` and `UG_WORKTREE` identify the attempt and its working
|
|
115
|
+
tree. The executable runs with that worktree as its current directory. It writes one JSON
|
|
116
|
+
object per line to the events file using one of these shapes:
|
|
117
|
+
|
|
118
|
+
```json
|
|
119
|
+
{"type":"attention","attentionId":"question-1","prompt":"Proceed?"}
|
|
120
|
+
{"type":"response-ack","attentionId":"question-1"}
|
|
121
|
+
{"type":"completed"}
|
|
122
|
+
{"type":"failed","reason":"optional explanation"}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Ultragoal appends responses as JSONL objects with `type: "response"`, the matching
|
|
126
|
+
`attentionId`, `response`, and `createdAt`. The process must emit `response-ack` with that
|
|
127
|
+
identifier after consuming a response. The protocol paths and `UG_*` variables are fixed;
|
|
128
|
+
the configured JSON arguments may add process-specific flags but cannot replace them.
|
|
129
|
+
|
|
130
|
+
### Execution authority and isolation
|
|
131
|
+
|
|
132
|
+
Ultragoal worktrees protect git integration boundaries; they are **not** operating-system
|
|
133
|
+
sandboxes. Codex uses its `workspace-write` sandbox. Grok's `workspace` sandbox may read
|
|
134
|
+
anywhere, write in its current directory, `~/.grok`, and temporary directories, and permits
|
|
135
|
+
child-process network access. Claude `bypassPermissions`, OpenCode `--auto` mode, and custom
|
|
136
|
+
`process` executables retain substantial user authority. OpenCode disables automatic updates
|
|
137
|
+
and sharing and denies external-directory access, but those policy settings do not make it an
|
|
138
|
+
OS sandbox. Run Ultragoal only with providers, configuration, and task content you trust.
|
|
139
|
+
|
|
35
140
|
## Tooling map (use these; do not reimplement with Bash)
|
|
36
141
|
|
|
37
142
|
| Phase | Prefer MCP / CLI | Purpose |
|
|
@@ -70,6 +175,8 @@ Fallback to `wp …` CLI only when the matching MCP tool is unavailable. Prefer
|
|
|
70
175
|
7. **Validate / land:** local proof with `wp_qa` / targeted tools; outside review only when
|
|
71
176
|
merge-ready and within `review_budget` — **exactly one sequential** outside voice unless
|
|
72
177
|
the user sets N (the default value lives in `workflow-skills-routing.md`).
|
|
178
|
+
Controller validation evidence is **machine-qa (prior QA phase) + N outside voices**
|
|
179
|
+
(default N=1), not two outside model reviewers at budget 1.
|
|
73
180
|
Use `wp_review_gate` only for exact-version draft plan approval/auto-promotion.
|
|
74
181
|
Use advisory `wp_review_run` for implementation/phase outside voice; it never
|
|
75
182
|
mutates blueprint approval state. A CLI delivery gate is explicit
|
|
@@ -171,9 +278,20 @@ start the gate again instead of spinning a wait loop.
|
|
|
171
278
|
|
|
172
279
|
## Snapshot / dirty worktree
|
|
173
280
|
|
|
174
|
-
-
|
|
175
|
-
|
|
176
|
-
-
|
|
177
|
-
|
|
178
|
-
-
|
|
179
|
-
|
|
281
|
+
- **Never edit primary.** Ultragoal and locked blueprint mutations refuse
|
|
282
|
+
primary-like checkouts; planning SSOT lives only in managed owner worktrees.
|
|
283
|
+
- On a **linked managed worktree**, uncommitted `blueprints/**` dirt (review
|
|
284
|
+
ledgers, `_overview.md` lifecycle, promote/finalize renames) is
|
|
285
|
+
controller-owned and must not fail `createCleanSourceSnapshot` / block
|
|
286
|
+
`wp ultragoal run` after task_verify or promotion.
|
|
287
|
+
- On a **primary-like checkout**, only review ledgers/artifacts are ignored;
|
|
288
|
+
dirty `_overview.md` still fails closed so primary never silently absorbs
|
|
289
|
+
planning pollution. Product source outside blueprints always fails closed.
|
|
290
|
+
- Committed blueprint documents still participate in the HEAD source snapshot
|
|
291
|
+
hash (QA/land identity). Commit blueprint + product changes when claiming
|
|
292
|
+
merge-ready.
|
|
293
|
+
|
|
294
|
+
## After land (optional)
|
|
295
|
+
|
|
296
|
+
If MCP/CLI/hooks/CI gates burned medium+ tokens this program, consider
|
|
297
|
+
`/tooling-friction` once. Never required for land complete.
|
package/skills/verify/SKILL.md
CHANGED
|
@@ -5,16 +5,22 @@ title: Verify
|
|
|
5
5
|
status: active
|
|
6
6
|
scope: repo
|
|
7
7
|
applies_to: [agents]
|
|
8
|
-
related: [testing-philosophy, tph]
|
|
8
|
+
related: [testing-philosophy, tph, land-policy]
|
|
9
9
|
created: "2026-05-07"
|
|
10
|
-
last_reviewed: "2026-
|
|
10
|
+
last_reviewed: "2026-08-03"
|
|
11
11
|
name: verify
|
|
12
|
-
description: "Post-
|
|
12
|
+
description: "Post-impl quality gate. Use for verify, merge-ready, land, done. Local=0 outside voice."
|
|
13
13
|
argument-hint: "<target> [--full|--merge-ready] where target is: package|file|plan-slug|all"
|
|
14
14
|
---
|
|
15
15
|
|
|
16
16
|
# Verify
|
|
17
17
|
|
|
18
|
+
## Use when (freeform)
|
|
19
|
+
|
|
20
|
+
- "verify", "are we done?", "merge-ready", "land", "merge it" (with land-policy)
|
|
21
|
+
- final completeness before push or PR claim
|
|
22
|
+
- **Not** for multi-host review swarms — default local has **0** outside voice
|
|
23
|
+
|
|
18
24
|
Post-implementation quality gate. Run after implementation exists, before claiming `done`.
|
|
19
25
|
|
|
20
26
|
`/fix` owns investigation-if-missing, root-cause analysis, and the minimal
|
|
@@ -55,12 +61,13 @@ No completion claim without fresh verification evidence.
|
|
|
55
61
|
Before saying `done`, `fixed`, `passes`, or `clean`:
|
|
56
62
|
|
|
57
63
|
1. Identify the command or log that proves the claim.
|
|
58
|
-
2. Run it
|
|
64
|
+
2. Run it **at the entry point the consumer or CI actually invokes** — not a narrower one that happens to be handy. If you substituted a narrower entry point, say which, and check the side effect (did the artifact appear?) rather than pass/fail alone.
|
|
59
65
|
3. Read the exit code and summary — do not infer from partial output.
|
|
60
|
-
4.
|
|
61
|
-
5.
|
|
66
|
+
4. If the claim covers a SET, enumerate it first: state the command, the count it returned, and that every member was addressed. "The one I found" is not the class.
|
|
67
|
+
5. State the actual result, including the log path when the repo records one.
|
|
68
|
+
6. If another agent made the change, inspect the diff yourself before repeating the claim.
|
|
62
69
|
|
|
63
|
-
Not sufficient: "should pass", "looks correct", lint-only evidence for runtime claims,
|
|
70
|
+
Not sufficient: "should pass", "looks correct", lint-only evidence for runtime claims, another agent's success report without independent verification, or a guard that asserts a token is _present_ when the claim is that every site was fixed.
|
|
64
71
|
|
|
65
72
|
## Usage
|
|
66
73
|
|
|
@@ -148,10 +155,11 @@ wp ci-preflight
|
|
|
148
155
|
```
|
|
149
156
|
|
|
150
157
|
That is fail-fast branch-scoped format → guardrails → typecheck → lint →
|
|
151
|
-
test.
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
158
|
+
test. Run it after the final commit and make no further worktree or base-ref
|
|
159
|
+
changes before pushing. Agent-kit's `.husky/pre-push` checks the resulting
|
|
160
|
+
exact-state receipt without rerunning the suite after Git opens the remote
|
|
161
|
+
transport; consumer repos may keep pre-push checks user-owned. Do **not** claim
|
|
162
|
+
push-ready if preflight failed. Do **not** bypass hooks to ship red work.
|
|
155
163
|
|
|
156
164
|
Rules:
|
|
157
165
|
|
|
@@ -217,26 +225,79 @@ If behavior is already locked and the remaining work is purely anti-slop
|
|
|
217
225
|
cleanup, route that pass through `ai-deslop` first rather than broadening
|
|
218
226
|
`verify` into a writer lane.
|
|
219
227
|
|
|
228
|
+
**Default branch when green:** if behavioral proof is green and the diff still
|
|
229
|
+
shows machine-shaped noise, dead wrappers, or elegance debt, run or recommend
|
|
230
|
+
`ai-deslop` on the changed scope before the final done claim.
|
|
231
|
+
|
|
220
232
|
This phase exists to catch the garbage that often slips in beside otherwise-correct work.
|
|
221
233
|
|
|
222
234
|
## Phase 6 — Outside-model approval gate (**`--merge-ready` only**)
|
|
223
235
|
|
|
236
|
+
**Anti-stampede:** never fan out parallel multi-host reviews. Default local
|
|
237
|
+
verify uses **zero** outside voice. Merge-ready uses **exactly one sequential**
|
|
238
|
+
outside voice unless the user sets N. If you needed "600 reviews", the bug is
|
|
239
|
+
in outside-voice usage — stop and fix the gate, do not multiply reviewers.
|
|
240
|
+
|
|
224
241
|
**Skip this entire phase** for default `/verify` and `/verify --full`. Local
|
|
225
242
|
`done` claims do not require outside voice.
|
|
226
243
|
|
|
227
|
-
|
|
244
|
+
This phase implements **land-policy M7** (delivery vs advisory). Full land
|
|
245
|
+
language and dual-label contract:
|
|
246
|
+
[`catalog/agent/rules/land-policy.md`](../../rules/land-policy.md).
|
|
247
|
+
|
|
248
|
+
Before claiming **merge-ready** / land:
|
|
249
|
+
|
|
250
|
+
### 1. Classify with immutable refs
|
|
251
|
+
|
|
252
|
+
Run `wp_audit` with `kind: "risk-review-coverage"` using:
|
|
253
|
+
|
|
254
|
+
- immutable PR **base** SHA
|
|
255
|
+
- immutable **authority** (head) SHA
|
|
256
|
+
- PR-description body (`--pr-body-file`)
|
|
257
|
+
|
|
258
|
+
Do not substitute mutable branch names for authority when the audit needs a SHA.
|
|
259
|
+
SSOT: `evaluateSensitiveReviewPolicy` in `src/review/sensitive-review-policy.ts`;
|
|
260
|
+
CI job in `.github/workflows/pr-policy.yml`.
|
|
261
|
+
|
|
262
|
+
### 2. Sensitive → delivery until satisfied
|
|
263
|
+
|
|
264
|
+
When classification is **sensitive**:
|
|
228
265
|
|
|
229
|
-
|
|
266
|
+
- Require delivery review via `risk-review-coverage` / `wp_review_gate`
|
|
267
|
+
(purpose delivery) / qualifying lane approvals for the current
|
|
268
|
+
`wp-git-diff-v1` subject until `policySatisfied`.
|
|
269
|
+
- Launch **exactly one** `wp_review_gate` delivery attempt with
|
|
270
|
+
`--base-ref <base-sha>` and `--authority-ref <head-sha>`. Do not substitute
|
|
271
|
+
`HEAD` for the authority SHA, and do not relaunch while the same subject has
|
|
272
|
+
an in-progress gate.
|
|
273
|
+
- `Review-skip` is **FORBIDDEN** (`sensitive-review-skip-forbidden`).
|
|
274
|
+
- Completed owner blueprint must be present in the PR
|
|
275
|
+
(`sensitive-no-completed-owner` otherwise).
|
|
276
|
+
- Process label when blocked: `sensitive-blocked`. When delivery lane
|
|
277
|
+
approves: `delivery-approved`.
|
|
230
278
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
-
|
|
239
|
-
|
|
279
|
+
### 3. Standard → skip or one advisory outside voice
|
|
280
|
+
|
|
281
|
+
When classification is **standard**:
|
|
282
|
+
|
|
283
|
+
- Prefer a specific trailer when justified:
|
|
284
|
+
|
|
285
|
+
```text
|
|
286
|
+
Review-skip: SKIP standard-risk; <why ≥8 chars>
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
Must be start-of-line. Process label: `standard-skip`.
|
|
290
|
+
|
|
291
|
+
- Otherwise obtain **exactly one sequential** advisory outside voice
|
|
292
|
+
(`wp_review_run` or host skill). Process label: `outside-approved`.
|
|
293
|
+
- At most **one OpenCode Go reviewer** counts unless the user asks for more.
|
|
294
|
+
- Invoke the selected reviewer **once**. Do not probe, retry, or rotate
|
|
295
|
+
providers automatically, and **never** fan out parallel multi-host review
|
|
296
|
+
swarms.
|
|
297
|
+
- If the user asks for more, fewer, zero, or specific reviewers, follow that
|
|
298
|
+
instruction and report the chosen requirement.
|
|
299
|
+
- These approvals are model outside-voice approvals, not a substitute for human
|
|
300
|
+
GitHub reviews or branch-protection approvals.
|
|
240
301
|
|
|
241
302
|
Reviewer preference (pick **one** path):
|
|
242
303
|
|
|
@@ -246,7 +307,16 @@ Reviewer preference (pick **one** path):
|
|
|
246
307
|
- Prefer skills: `claude`, `codex`, `grok`, or one of `opencode-go` / `qwen` /
|
|
247
308
|
`deepseek` / `glm` / `kimi` / `minimax` / `mimo`.
|
|
248
309
|
|
|
249
|
-
|
|
310
|
+
### 4. Dual product/process labels on every land claim
|
|
311
|
+
|
|
312
|
+
Always emit:
|
|
313
|
+
|
|
314
|
+
- **Product status:** `complete` | `incomplete`
|
|
315
|
+
- **Process status:** `outside-approved` | `standard-skip` | `sensitive-blocked` | `delivery-approved`
|
|
316
|
+
|
|
317
|
+
Never invent a land-now skip. See `land-policy` for the full table.
|
|
318
|
+
|
|
319
|
+
### Approval evidence requirements
|
|
250
320
|
|
|
251
321
|
- Blueprint plan approval: use `wp_review_gate` with the current `bpv1` version.
|
|
252
322
|
It records the review and promotes an approved draft atomically by default.
|
|
@@ -255,8 +325,10 @@ Approval evidence requirements:
|
|
|
255
325
|
observed; wait timeout/abort/in-progress/not-found are not reviewer verdicts.
|
|
256
326
|
`not_found` means there is no active or terminal gate for that subject; refresh
|
|
257
327
|
state and start the gate again instead of continuing to wait.
|
|
258
|
-
- Implementation approval:
|
|
259
|
-
|
|
328
|
+
- Implementation / delivery approval: for sensitive PRs use `wp_review_gate`
|
|
329
|
+
purpose delivery on the immutable subject; for standard advisory use
|
|
330
|
+
`wp_review_run` exactly once with the selected provider and an expected
|
|
331
|
+
verdict marker. Do not run a separate provider probe.
|
|
260
332
|
- Each gate reviewer must return exactly one schema-valid JSON review object;
|
|
261
333
|
never infer a verdict from Markdown. The gate derives approval from typed
|
|
262
334
|
findings: blockers reject, nits approve with nits, and no findings approve.
|
|
@@ -281,3 +353,8 @@ Report:
|
|
|
281
353
|
When catalog assets or generated instruction surfaces changed, include public-package-safety or package-surface leak checks.
|
|
282
354
|
|
|
283
355
|
If any required check is missing, the correct result is **not done yet**, not a softer claim.
|
|
356
|
+
|
|
357
|
+
**Tooling friction (optional):** if this session burned medium+ tokens on MCP/CLI/hooks/CI
|
|
358
|
+
gates (not product code), run `/tooling-friction` once and write tips under
|
|
359
|
+
`.agent/planning/state/tooling-friction/`. Skip when the path was smooth. Never
|
|
360
|
+
blocks land — see the `tooling-friction` skill.
|