@webpresso/plugin-codex 0.0.15 → 0.0.17

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.
@@ -21,13 +21,13 @@ argument-hint: "<new|status|handoff|run|cancel> [brief]"
21
21
  - "spawn many in parallel", multi-blueprint ready-set execution
22
22
  - Reject unbound "complete everything while I sleep" without stop condition / budgets
23
23
 
24
- Use `wp ultragoal` / MCP `wp_ultragoal_*` as the durable controller for work spanning
24
+ Use `wp ultragoal` / MCP `ultragoal_*` as the durable controller for work spanning
25
25
  one or more blueprints. Prefer this spine over host-local mega-sessions or ad-hoc
26
26
  multi-agent swarms.
27
27
 
28
28
  ## Creating an ultragoal does NOT set a host stop-condition
29
29
 
30
- `wp_ultragoal_new` records a durable brief, budgets, and phase. It does **not**
30
+ `ultragoal_new` records a durable brief, budgets, and phase. It does **not**
31
31
  install the session Stop hook that keeps a host working until a condition holds
32
32
  — that hook belongs to the host's own goal surface (Claude Code's `/goal`), which
33
33
  this skill cannot reach. The two are independent: an ultragoal can sit in `plan`
@@ -151,23 +151,23 @@ OS sandbox. Run Ultragoal only with providers, configuration, and task content y
151
151
 
152
152
  ## Tooling map (use these; do not reimplement with Bash)
153
153
 
154
- | Phase | Prefer MCP / CLI | Purpose |
155
- | ---------------------- | -------------------------------------------------------------------------------------- | --------------------------------------------------- |
156
- | Create / resume | `wp_ultragoal_new`, `wp_ultragoal_status` | Durable controller state |
157
- | Isolation | `wp_worktree` | Owner / lane worktrees; never primary as controller |
158
- | Blueprint read | `wp_blueprint_list`, `wp_blueprint_get`, `wp_blueprint_context` | Ready-set and deps |
159
- | Blueprint write | `wp_blueprint_put`, `wp_blueprint_transition` | Spec edits (MCP-only for blueprints) |
160
- | Task done | `wp_blueprint_task_verify` only | Evidence-gated completion |
161
- | Parallel execute | `/goal` (autopilot) or ready-queue + host subagents | Max parallel when deps allow |
162
- | Context-light delegate | `wp_session_context` | Manifest for subagents (no history paste) |
163
- | Continuity | `wp_session_capture`, `wp_session_search`, `wp_session_restore`, `wp_session_snapshot` | Decisions / resume |
164
- | Large command / file | `wp_session_execute`, `wp_session_batch_execute`, `wp_session_execute_file` | Bounded output + index |
165
- | QA | `wp_qa` (or `wp_lint` + `wp_typecheck` + `wp_test`) | Affected quality gates |
166
- | PR / land | `wp_pr_upsert`, `wp_pr_status`, `wp_pr_wait`, `wp_pr_merge` | Open early; exact-head merge only |
167
- | Delivery programs | `wp_delivery_status` | Derive one dispatch/integration action |
168
- | Fleet / workers | `wp_fleet_status`, `wp_worker_tail` | Multi-session visibility |
169
- | Token gain | `wp_gain` | Optional efficiency check after heavy execute |
170
- | Advance loop | `wp_ultragoal_run`, `wp_ultragoal_handoff`, `wp_ultragoal_cancel` | Controller steps only |
154
+ | Phase | Prefer MCP / CLI | Purpose |
155
+ | ---------------------- | -------------------------------------------------------------------------- | --------------------------------------------------- |
156
+ | Create / resume | `ultragoal_new`, `ultragoal_status` | Durable controller state |
157
+ | Isolation | `worktree` | Owner / lane worktrees; never primary as controller |
158
+ | Blueprint read | `blueprint_list`, `blueprint_get`, `blueprint_context` | Ready-set and deps |
159
+ | Blueprint write | `blueprint_put`, `blueprint_transition` | Spec edits (MCP-only for blueprints) |
160
+ | Task done | `blueprint_task_verify` only | Evidence-gated completion |
161
+ | Parallel execute | `/goal` (autopilot) or ready-queue + host subagents | Max parallel when deps allow |
162
+ | Context-light delegate | `session_context` | Manifest for subagents (no history paste) |
163
+ | Continuity | `session_capture`, `session_search`, `session_restore`, `session_snapshot` | Decisions / resume |
164
+ | Large command / file | `session_execute`, `session_batch_execute`, `session_execute_file` | Bounded output + index |
165
+ | QA | `qa` (or `lint` + `typecheck` + `test`) | Affected quality gates |
166
+ | PR / land | `pr_upsert`, `pr_status`, `pr_wait`, `pr_merge` | Open early; exact-head merge only |
167
+ | Delivery programs | `delivery_status` | Derive one dispatch/integration action |
168
+ | Fleet / workers | `fleet_status`, `worker_tail` | Multi-session visibility |
169
+ | Token gain | `gain` | Optional efficiency check after heavy execute |
170
+ | Advance loop | `ultragoal_run`, `ultragoal_handoff`, `ultragoal_cancel` | Controller steps only |
171
171
 
172
172
  Fallback to `wp …` CLI only when the matching MCP tool is unavailable. Prefer `wp` >
173
173
  `vp` > raw package managers. Never raise timeouts to hide hangs.
@@ -175,25 +175,25 @@ Fallback to `wp …` CLI only when the matching MCP tool is unavailable. Prefer
175
175
  ## Protocol
176
176
 
177
177
  1. Create or resume the ultragoal in a **managed blueprint owner worktree**
178
- (`wp_worktree` / `wp_blueprint_put`). Never use `main` or the primary checkout
178
+ (`worktree` / `blueprint_put`). Never use `main` or the primary checkout
179
179
  as controller.
180
180
  2. Print the **ready-set**: tasks whose dependencies are satisfied (from blueprint tools).
181
181
  3. Launch up to `concurrency` independent ready tasks in parallel (worktree-isolated).
182
182
  Serialize only when file ownership overlaps or deps require it.
183
- 4. Execute only the current phase handoff; call `wp_ultragoal_run` again after evidence.
184
- 5. Mark tasks done **only** via `wp_blueprint_task_verify` with passing evidence.
183
+ 4. Execute only the current phase handoff; call `ultragoal_run` again after evidence.
184
+ 5. Mark tasks done **only** via `blueprint_task_verify` with passing evidence.
185
185
  6. **Opportunistic `/fix`:** at most `fix_budget` pre-existing issues per phase, each with
186
186
  named invariant + failing proof. Excess → handoff backlog (do not expand epic).
187
- 7. **Validate / land:** local proof with `wp_qa` / targeted tools; outside review only when
187
+ 7. **Validate / land:** local proof with `qa` / targeted tools; outside review only when
188
188
  merge-ready and within `review_budget` — **exactly one sequential** outside voice unless
189
189
  the user sets N (the default value lives in `workflow-skills-routing.md`).
190
190
  Controller validation evidence is **machine-qa (prior QA phase) + N outside voices**
191
191
  (default N=1), not two outside model reviewers at budget 1.
192
- `wp_review_gate` has one mode: purpose plan for exact-version draft plan
193
- approval/auto-promotion, purpose delivery for implementation/phase outside
192
+ `review_gate` has one mode: purpose plan for exact-version draft plan
193
+ approval (then `blueprint_promote`), purpose delivery for implementation/phase outside
194
194
  voice. Each new provider verdict is a formal round of the slug's budget and
195
195
  an approval is authority immediately. A CLI delivery gate is explicit MCP-unavailable
196
- compatibility only, not this MCP contract. Use `wp_pr_*` for PR babysit — no
196
+ compatibility only, not this MCP contract. Use `pr_*` for PR babysit — no
197
197
  multi-sleep poll loops; no parallel multi-reviewer stampede.
198
198
  8. Stop on `complete`, `cancelled`, blocked guard exhaustion, or `WP_ULTRAGOAL_DISABLE=1`.
199
199
 
@@ -206,83 +206,78 @@ primary checkout.
206
206
  - Hard fail on a task → mark blocked with reason; **cascade-skip** dependents that cannot
207
207
  proceed; continue independent ready work.
208
208
  - Lifecycle mutation failure → stop (do not continue on stale plan state).
209
- - On block: call `wp_ultragoal_handoff` and emit a **≤40-line handoff**: goal, done, blockers,
210
- evidence refs (`wp_session_*` ids if any), next 3 commands. Do not paste full transcripts.
209
+ - On block: call `ultragoal_handoff` and emit a **≤40-line handoff**: goal, done, blockers,
210
+ evidence refs (`session_*` ids if any), next 3 commands. Do not paste full transcripts.
211
211
 
212
212
  ## Outside-voice review (required for autopilot)
213
213
 
214
- Autopilot and agent-driven ultragoal loops **must** request an **OpenCode Go** outside-voice review after each **goal/phase milestone**, and must pick the model by purpose. Use **`wp_review_gate`** purpose plan for exact-version draft plan approval/auto-promotion and one single-shot **`wp_review_gate`** purpose delivery call for implementation/phase outside voice. The gate has one mode: each newly executed provider review that reaches a verdict is a formal round of the slug's budget, an approval is authority immediately, and an identical-subject call replays the recorded verdict without a new round. CLI delivery gates are explicit MCP-unavailable compatibility only, not this MCP contract.
214
+ Autopilot and agent-driven ultragoal loops **must** request an outside-voice review after each **goal/phase milestone**. Use **`review_gate`** purpose plan for exact-version draft plan approval (then promote with `blueprint_promote`) and one single-shot **`review_gate`** purpose delivery call for implementation/phase outside voice. The gate has one mode: each newly executed provider review that reaches a verdict is a formal round of the slug's budget, an approval is authority immediately, and an identical-subject call replays the recorded verdict without a new round. CLI delivery gates are explicit MCP-unavailable compatibility only, not this MCP contract.
215
215
 
216
- Count each milestone review against `review_budget` for merge-ready claims: **exactly one sequential** reviewer path unless the user sets N; the default value is owned by `workflow-skills-routing.md`. Prefer purpose-matched OpenCode Go first; do not fan out multi-host review swarms.
216
+ Count each milestone review against `review_budget` for merge-ready claims: **exactly one sequential** reviewer path unless the user sets N; the default value is owned by `workflow-skills-routing.md`. Do not fan out multi-host review swarms.
217
217
 
218
218
  ### Milestones that require a review
219
219
 
220
- Run `wp_review_gate` purpose plan for the plan approval milestone below and one
221
- single-shot `wp_review_gate` purpose delivery call for implementation/phase
220
+ Run `review_gate` purpose plan for the plan approval milestone below and one
221
+ single-shot `review_gate` purpose delivery call for implementation/phase
222
222
  milestones. Each new provider verdict is one formal round of the slug's budget.
223
223
 
224
224
  | Milestone | When |
225
225
  | ------------------ | -------------------------------------------------------------------------------------------------------------------------------- |
226
- | Plan gate | Before `draft` → `planned`, using the exact version returned by `wp_blueprint_put`; approval may auto-promote the same version |
226
+ | Plan gate | Before `draft` → `planned`, using the exact version returned by `blueprint_put`; then `blueprint_promote` the approved version |
227
227
  | Phase advance | After ultragoal advances `plan` → `execute`, `execute` → `qa`, `qa` → `validate`, `validate` → `land`, or lands `complete` |
228
228
  | Task batch handoff | After a meaningful execute batch when the phase remains `execute` (at least once per blueprint before claiming execute-complete) |
229
229
 
230
- Do **not** invent ledger approvals. If OpenCode Go is unavailable or hits a provider-wide usage limit, capture the failure evidence and end OpenCode Go review for the window; do not hop OpenCode families, substitute another host, or substitute a forged approval.
230
+ Do **not** invent ledger approvals. If the review provider is unavailable or hits a provider-wide usage limit, capture the failure evidence and end outside review for the window; do not hop reviewer families, substitute another host, or substitute a forged approval.
231
231
 
232
- ### Purpose → model routing (no hardcoding IDs)
232
+ ### Reviewer selection (the gate chooses, not the caller)
233
233
 
234
- Resolve models from the live catalog every time:
234
+ Pass `caller_model` with your own model id and omit `provider`, `model`, and
235
+ `effort`. The gate selects the reviewer route itself — a cross-family reviewer
236
+ chosen for capability, current provider limits, and measured daily cost — and
237
+ reports the choice in `policy_selection`. Never resolve models from a live
238
+ catalog at invocation time, never probe a provider CLI for its model list, and
239
+ never read a credential store to discover models; provider catalog discovery
240
+ belongs to the snapshot drift workflow. A human operator may still name an
241
+ explicit `provider`/`model` as an override; agents must not.
235
242
 
236
- ```bash
237
- opencode models opencode-go
238
- ```
239
-
240
- **Selection order and the purpose→family mapping live in one place: the committed
241
- reviewer policy (`packages/workflow-skills/src/opencode-reviewer-policy.ts`),
242
- rendered into the `opencode-go` skill and drift-gated against it.** Follow that
243
- skill; do not restate the ordering here. A second copy of a preference list is a
244
- second thing to update, and the copy that goes stale is the one an agent reads.
245
-
246
- Treat a provider-wide usage limit as terminal for every OpenCode Go model in the current review window; do not hop OpenCode families to evade a usage block. There is no substitute host: the window ends with the captured failure evidence.
243
+ Treat a provider-wide usage limit as terminal for the current review window; do not hop reviewer families to evade a usage block. There is no substitute host: the window ends with the captured failure evidence.
247
244
 
248
245
  ### Plan gate invocation shape
249
246
 
250
247
  ```text
251
- wp_review_gate({
248
+ review_gate({
252
249
  "project_id": "<project-id>",
253
250
  "slug": "<blueprint-slug>",
254
251
  "expected_version": "bpv1:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
255
252
  "repository_access": "read-only",
256
253
  "auto_promote": true,
257
- "provider": "opencode",
258
- "model": "<selected-model>",
259
- "effort": "medium"
254
+ "caller_model": "<your own model id>"
260
255
  })
261
256
  ```
262
257
 
263
258
  The plan gate has no `purpose` or `target` field. Pass the exact `bpv1:` token
264
- returned by `wp_blueprint_put`, never a commit hash or `HEAD`. An explicitly
259
+ returned by `blueprint_put`, never a commit hash or `HEAD`. An explicitly
265
260
  requested CLI delivery gate is an MCP-unavailable compatibility fallback only.
266
261
  If the MCP host returns before a terminal result, poll the same invocation with
267
- `wp_review_gate_wait`; treat in-progress, not-found, contention, waiter timeout,
262
+ `review_gate_wait`; treat in-progress, not-found, contention, waiter timeout,
268
263
  waiter abort, and cancellation as non-verdict observation states. `not_found`
269
264
  means no active or terminal gate exists for that subject; refresh state and
270
265
  start the gate again instead of spinning a wait loop.
271
266
 
272
267
  ### Honesty rules (non-negotiable)
273
268
 
274
- - Never self-approve or hand-edit `reviews.md` / `review-events.jsonl` / frontmatter approvals to fake OpenCode Go authority.
275
- - Never mark blueprint tasks done except through `wp_blueprint_task_verify` with real evidence.
269
+ - Never self-approve or hand-edit `reviews.md` / `review-events.jsonl` / frontmatter approvals to fake outside-review authority.
270
+ - Never mark blueprint tasks done except through `blueprint_task_verify` with real evidence.
276
271
  - Never run ultragoal mutations on `main` or a primary checkout; use the managed blueprint owner worktree.
277
272
  - Keep every loop bounded and never increase timeouts.
278
273
  - When the controller returns `waiting` (`blueprint-promotion`, `approval-gate`, `blueprint-tasks`, …), fix the named gap; do not spin `wp ultragoal run` without progress.
279
274
 
280
275
  ## Tooling-aligned evidence (QA / land)
281
276
 
282
- - **QA phase** prefers **GitHub required checks** for the worktree PR (`wp_pr_status` /
283
- `wp_pr_wait` or `gh pr checks --required`) when PR is `OPEN`/`MERGED`, checks green, and
277
+ - **QA phase** prefers **GitHub required checks** for the worktree PR (`pr_status` /
278
+ `pr_wait` or `gh pr checks --required`) when PR is `OPEN`/`MERGED`, checks green, and
284
279
  PR head matches clean worktree HEAD.
285
- - If no PR-bound green CI is available, fall back to local **`wp_qa`**.
280
+ - If no PR-bound green CI is available, fall back to local **`qa`**.
286
281
  - Open a PR early so CI can satisfy QA. Do **not** raise timeouts.
287
282
  - **Land** still requires a **MERGED** PR with green required checks bound to the projected
288
283
  source snapshot. Use `/verify --merge-ready` (merge-ready `review_budget`, per
@@ -37,22 +37,24 @@ integrated, and free of stale garbage?**
37
37
 
38
38
  Default `/verify` must **not** spawn outside reviewers. That stampede is a known
39
39
  token/time failure mode. Merge-ready runs **one** sequential outside voice via
40
- the preferred skill (`claude` / `codex` / one OpenCode Go), then stops.
40
+ one `review_gate` delivery gate (or a host review skill), then stops. Pass
41
+ `caller_model` with your own model id and omit `provider`/`model`/`effort`: the
42
+ gate selects the cross-family reviewer and reports it in `policy_selection`.
41
43
 
42
44
  ## Tooling map
43
45
 
44
- | Gate | Prefer |
45
- | ------------------------- | ---------------------------------------------------------------------------------------- |
46
- | Lint / types / tests / QA | `wp_lint`, `wp_typecheck`, `wp_test`, `wp_qa` |
47
- | Format | `wp_format` |
48
- | Audits | `wp_audit`, `wp_audits` |
49
- | Blueprint | blueprint MCP tools + `wp_audit` |
50
- | PR / CI wait | `wp_pr_status`, `wp_pr_wait` (not multi-sleep loops) |
51
- | Release | `wp_release_progress` for live Release phases; `wp_release_readiness` for package gates |
52
- | Large output | `wp_session_execute` / `batch_execute` / `execute_file` |
53
- | Continuity | `wp_session_capture` for verify summary; avoid paste-back walls |
54
- | E2E / act | `wp_e2e`, `wp_ci_act` when the change requires them |
55
- | Outside authority | `wp_review_gate` (purpose plan or delivery); each new provider verdict is a formal round |
46
+ | Gate | Prefer |
47
+ | ------------------------- | ------------------------------------------------------------------------------------- |
48
+ | Lint / types / tests / QA | `lint`, `typecheck`, `test`, `qa` |
49
+ | Format | `format` |
50
+ | Audits | `audit`, `audits` |
51
+ | Blueprint | blueprint MCP tools + `audit` |
52
+ | PR / CI wait | `pr_status`, `pr_wait` (not multi-sleep loops) |
53
+ | Release | `release_progress` for live Release phases; `release_readiness` for package gates |
54
+ | Large output | `session_execute` / `batch_execute` / `execute_file` |
55
+ | Continuity | `session_capture` for verify summary; avoid paste-back walls |
56
+ | E2E / act | `e2e`, `ci_act` when the change requires them |
57
+ | Outside authority | `review_gate` (purpose plan or delivery); each new provider verdict is a formal round |
56
58
 
57
59
  ## Iron law — evidence before claims
58
60
 
@@ -81,7 +83,7 @@ Not sufficient: "should pass", "looks correct", lint-only evidence for runtime c
81
83
 
82
84
  Follow the repo's current routing and command surface:
83
85
 
84
- - use MCP `wp_*` / repo-owned quality wrappers first
86
+ - use wp MCP tools / repo-owned quality wrappers first
85
87
  - use bounded session-memory tooling for large output
86
88
  - reuse fresh logs instead of re-running broad commands just to inspect output
87
89
 
@@ -102,7 +104,7 @@ workflow:
102
104
  2. Run the repo audit when available:
103
105
 
104
106
  ```text
105
- wp_audit({"kind":"test-smells"})
107
+ audit({"kind":"test-smells"})
106
108
  ```
107
109
 
108
110
  Use the global `wp audit test-smells` command only when MCP is unavailable.
@@ -137,16 +139,16 @@ Hard stop on any failure.
137
139
 
138
140
  Run the narrowest checks that prove the touched behavior:
139
141
 
140
- - `wp_lint` / targeted lint
141
- - `wp_typecheck` / targeted typecheck
142
- - `wp_test` / targeted tests
143
- - `wp_qa`, `wp_e2e`, build / package checks only when the change requires them
142
+ - `lint` / targeted lint
143
+ - `typecheck` / targeted typecheck
144
+ - `test` / targeted tests
145
+ - `qa`, `e2e`, build / package checks only when the change requires them
144
146
 
145
147
  **Before push or PR open/update**, run the pre-push owner end-to-end:
146
148
 
147
149
  ```text
148
- start = wp_ci_preflight({})
149
- wp_ci_preflight_wait({ runId: start.details.operation.runId })
150
+ start = ci_preflight({})
151
+ ci_preflight_wait({ runId: start.details.operation.runId })
150
152
  ```
151
153
 
152
154
  The start result is not a gate verdict. Poll again when wait returns
@@ -167,12 +169,12 @@ push-ready if preflight failed. Do **not** bypass hooks to ship red work.
167
169
 
168
170
  Rules:
169
171
 
170
- - Prefer MCP `wp_*` over raw underlying tools.
172
+ - Prefer wp MCP tools over raw underlying tools.
171
173
  - Reuse fresh logs / session-memory indexed output if the runner auto-saves them.
172
174
  - Never claim broader correctness than the commands actually proved.
173
- - If the repo documents a "full QA" bookend, reserve `wp_qa` / `--full` for the final broad pass rather than every iteration.
175
+ - If the repo documents a "full QA" bookend, reserve `qa` / `--full` for the final broad pass rather than every iteration.
174
176
  - If CI is already red: read the failed job log, reproduce with the matching
175
- local `wp_ci_preflight` + `wp_ci_preflight_wait` flow (or the `wp ci-preflight` CLI fallback), fix, then push **one**
177
+ local `ci_preflight` + `ci_preflight_wait` flow (or the `wp ci-preflight` CLI fallback), fix, then push **one**
176
178
  corrective commit — do not burn another full matrix “to check.”
177
179
 
178
180
  ## Phase 3 — Cross-surface impact scan
@@ -209,7 +211,7 @@ Check that:
209
211
  - UX or operator-facing flows include graceful-degradation coverage when applicable
210
212
 
211
213
  Run the folded TPH gate for every verification target. At minimum, execute
212
- `wp_audit` with the `test-smells` kind when available (use global `wp audit
214
+ `audit` with the `test-smells` kind when available (use global `wp audit
213
215
  test-smells` only as the CLI fallback) and inspect changed tests against the
214
216
  `testing-philosophy` checklist. Add E2E or integration evidence when the change
215
217
  touches user/operator-facing workflows, batch/list behavior, graceful
@@ -253,7 +255,7 @@ Before claiming **merge-ready** / land:
253
255
 
254
256
  ### 1. Classify with immutable refs
255
257
 
256
- Run `wp_audit` with `kind: "risk-review-coverage"` using:
258
+ Run `audit` with `kind: "risk-review-coverage"` using:
257
259
 
258
260
  - immutable PR **base** SHA
259
261
  - immutable **authority** (head) SHA
@@ -267,13 +269,13 @@ CI job in `.github/workflows/pr-policy.yml`.
267
269
 
268
270
  When classification is **sensitive**:
269
271
 
270
- - Require delivery review via `risk-review-coverage` / `wp_review_gate`
272
+ - Require delivery review via `risk-review-coverage` / `review_gate`
271
273
  (purpose delivery) / qualifying lane approvals for the current
272
274
  review subject until `policySatisfied` (**approval**). A formal **reject** is a terminal automated-review
273
275
  outcome but does **not** satisfy land policy: Product status stays
274
276
  `incomplete`, Process status stays `sensitive-blocked` until approval.
275
277
  Tech-debt is **not** a substitute for delivery approval.
276
- - Launch **exactly one at a time** `wp_review_gate` delivery attempt with
278
+ - Launch **exactly one at a time** `review_gate` delivery attempt with
277
279
  `--base-ref <base-sha>` and `--authority-ref <head-sha>`. Do not substitute
278
280
  `HEAD` for the authority SHA, and do not relaunch while the same subject has
279
281
  an in-progress gate.
@@ -312,8 +314,8 @@ When classification is **standard**:
312
314
  Must be start-of-line. Process label: `standard-skip`.
313
315
 
314
316
  - Otherwise obtain **exactly one sequential** outside voice: one
315
- `wp_review_gate` delivery gate (or host skill). Process label: `outside-approved`.
316
- - At most **one OpenCode Go reviewer** counts unless the user asks for more.
317
+ `review_gate` delivery gate (or host skill). Process label: `outside-approved`.
318
+ - At most **one outside reviewer** counts unless the user asks for more.
317
319
  - Invoke the selected reviewer **once**. Do not probe, retry, or rotate
318
320
  providers automatically, and **never** fan out parallel multi-host review
319
321
  swarms.
@@ -322,12 +324,13 @@ When classification is **standard**:
322
324
  - These approvals are model outside-voice approvals, not a substitute for human
323
325
  GitHub reviews or branch-protection approvals.
324
326
 
325
- Reviewer preference (pick **one** path):
326
-
327
- - From Codex → Claude (else one OpenCode Go).
328
- - From Claude → Codex (else one OpenCode Go).
329
- - Prefer skills: `claude`, `codex`, or one of `opencode-go` / `qwen` /
330
- `deepseek` / `glm` / `kimi` / `minimax` / `mimo`.
327
+ Reviewer preference: the gate owns it. State `caller_model` (your own model
328
+ id) and omit `provider`/`model`/`effort`; `review_gate` selects a
329
+ cross-family reviewer by capability, current provider limits, and measured
330
+ daily cost, and discloses the choice in `policy_selection`. Do not name a
331
+ reviewer host or model, do not probe provider catalogs, and do not rotate
332
+ providers yourself. A human operator may still name an explicit
333
+ `provider`/`model` override; agents must not.
331
334
 
332
335
  ### 4. Dual product/process labels on every land claim
333
336
 
@@ -340,14 +343,14 @@ Never invent a land-now skip. See `land-policy` for the full table.
340
343
 
341
344
  ### Approval evidence requirements
342
345
 
343
- - Blueprint plan approval: use `wp_review_gate` with the current `bpv1` version.
346
+ - Blueprint plan approval: use `review_gate` with the current `bpv1` version.
344
347
  It records the review and promotes an approved draft atomically by default.
345
348
  If the gate is still running or the host wait expires, poll the same exact
346
- invocation with `wp_review_gate_wait` until a terminal review outcome is
349
+ invocation with `review_gate_wait` until a terminal review outcome is
347
350
  observed; wait timeout/abort/in-progress/not-found are not reviewer verdicts.
348
351
  `not_found` means there is no active or terminal gate for that subject; refresh
349
352
  state and start the gate again instead of continuing to wait.
350
- - Implementation / delivery approval: use `wp_review_gate` purpose delivery
353
+ - Implementation / delivery approval: use `review_gate` purpose delivery
351
354
  on the immutable subject, exactly once with the selected provider, for
352
355
  sensitive and standard PRs alike. The gate has one mode: each newly executed
353
356
  provider review that reaches a verdict is one formal round of the slug's
@@ -358,7 +361,7 @@ Never invent a land-now skip. See `land-policy` for the full table.
358
361
  spends none). Do not run a separate
359
362
  provider probe.
360
363
  - Two gates on the same subject cannot run concurrently — every
361
- `wp_review_gate` call claims the subject's active marker. If a call reports
364
+ `review_gate` call claims the subject's active marker. If a call reports
362
365
  marker contention, serialize the two calls rather than treating contention
363
366
  as an error.
364
367
  - Each gate reviewer must return exactly one schema-valid JSON review object;
@@ -377,7 +380,7 @@ Never invent a land-now skip. See `land-policy` for the full table.
377
380
  Report:
378
381
 
379
382
  - mode used (`local` / `full` / `merge-ready`)
380
- - what was verified and which `wp_*` commands/logs prove it
383
+ - what was verified and which wp MCP tools commands/logs prove it
381
384
  - which docs/help/instruction surfaces were refreshed when guidance changed
382
385
  - outside models only if merge-ready (with PR comment links when applicable)
383
386
  - what remains intentionally out of scope
@@ -388,7 +391,7 @@ If any required check is missing, the correct result is **not done yet**, not a
388
391
 
389
392
  **Tooling friction (optional):** if this session burned medium+ tokens on MCP/CLI/hooks/CI
390
393
  gates (not product code), run `/tooling-friction` once and resolve its capture
391
- destination with `wp_tooling_friction_path({"file":"<file>"})` — copy the absolute
394
+ destination with `tooling_friction_path({"file":"<file>"})` — copy the absolute
392
395
  path from the tool summary (human CLI: `wp tooling-friction path --file <file>`).
393
396
  Do not invent fleet folder slugs or worktree-keyed desktop-state paths. Skip when
394
397
  the path was smooth. If the surface cannot be resolved or written, report the skip