@webpresso/plugin-codex 0.0.9 → 0.0.11

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.
@@ -41,18 +41,18 @@ the preferred skill (`claude` / `codex` / `grok` / one OpenCode Go), then stops.
41
41
 
42
42
  ## Tooling map
43
43
 
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` for plans; `wp_review_run` for implementation |
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` (authoritative) for plans; `wp_review_gate` with `mode: "advisory"` for implementation |
56
56
 
57
57
  ## Iron law — evidence before claims
58
58
 
@@ -145,17 +145,21 @@ Run the narrowest checks that prove the touched behavior:
145
145
  **Before push or PR open/update**, run the pre-push owner end-to-end:
146
146
 
147
147
  ```text
148
- wp_ci_preflight({})
148
+ start = wp_ci_preflight({})
149
+ wp_ci_preflight_wait({ runId: start.details.operation.runId })
149
150
  ```
150
151
 
152
+ The start result is not a gate verdict. Poll again when wait returns
153
+ `in_progress`; only terminal `success` authorizes push or PR mutation.
154
+
151
155
  MCP-unavailable CLI fallback:
152
156
 
153
157
  ```bash
154
158
  wp ci-preflight
155
159
  ```
156
160
 
157
- That is fail-fast branch-scoped format guardrails → typecheck → lint →
158
- test. Run it after the final commit and make no further worktree or base-ref
161
+ That runs the repository-owned, branch-scoped required-check plan fail-fast.
162
+ Run it after the final commit and make no further worktree or base-ref
159
163
  changes before pushing. Agent-kit's `.husky/pre-push` checks the resulting
160
164
  exact-state receipt without rerunning the suite after Git opens the remote
161
165
  transport; consumer repos may keep pre-push checks user-owned. Do **not** claim
@@ -168,7 +172,7 @@ Rules:
168
172
  - Never claim broader correctness than the commands actually proved.
169
173
  - If the repo documents a "full QA" bookend, reserve `wp_qa` / `--full` for the final broad pass rather than every iteration.
170
174
  - If CI is already red: read the failed job log, reproduce with the matching
171
- local `wp_ci_preflight` (or the `wp ci-preflight` CLI fallback), fix, then push **one**
175
+ local `wp_ci_preflight` + `wp_ci_preflight_wait` flow (or the `wp ci-preflight` CLI fallback), fix, then push **one**
172
176
  corrective commit — do not burn another full matrix “to check.”
173
177
 
174
178
  ## Phase 3 — Cross-surface impact scan
@@ -259,17 +263,33 @@ Do not substitute mutable branch names for authority when the audit needs a SHA.
259
263
  SSOT: `evaluateSensitiveReviewPolicy` in `src/review/sensitive-review-policy.ts`;
260
264
  CI job in `.github/workflows/pr-policy.yml`.
261
265
 
262
- ### 2. Sensitive → delivery until satisfied
266
+ ### 2. Sensitive → delivery to terminal verdict
263
267
 
264
268
  When classification is **sensitive**:
265
269
 
266
270
  - Require delivery review via `risk-review-coverage` / `wp_review_gate`
267
271
  (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
272
+ review subject until `policySatisfied` (**approval** or valid same-subject
273
+ **maintainer-override**). A formal **reject** is a terminal automated-review
274
+ outcome but does **not** satisfy land policy: Product status stays
275
+ `incomplete`, Process status stays `sensitive-blocked` until approval or
276
+ override. Tech-debt is **not** a substitute for delivery approval.
277
+ - Launch **exactly one at a time** `wp_review_gate` delivery attempt with
270
278
  `--base-ref <base-sha>` and `--authority-ref <head-sha>`. Do not substitute
271
279
  `HEAD` for the authority SHA, and do not relaunch while the same subject has
272
280
  an in-progress gate.
281
+ - On formal **reject**: surface the gate `next_action` (`report_delivery_reject`)
282
+ / reject projection to the user; free-triage against blueprint non-goals;
283
+ address the findings, then re-review only a changed exact subject. The shared
284
+ gate permits five distinct rejected delivery subjects by default. Once that
285
+ budget is exhausted, **do not** set `scope_continue=true` without explicit
286
+ user authorization; agents must not invent the grant. For plan or delivery,
287
+ only an operator may request an absolute finite same-slug ceiling through MCP
288
+ `scope_continue_limit` (10..32); the field still requires
289
+ `scope_continue=true`. MCP wins over `WP_REVIEW_SCOPE_CONTINUE_LIMIT`; when
290
+ neither is present, the plan/delivery defaults are 16/10. Machine enforcement
291
+ does not link successor slugs; creating one to launder or bypass the budget
292
+ remains procedurally forbidden, as do resets and retry schemes.
273
293
  - `Review-skip` is **FORBIDDEN** (`sensitive-review-skip-forbidden`).
274
294
  - Completed owner blueprint must be present in the PR
275
295
  (`sensitive-no-completed-owner` otherwise).
@@ -289,7 +309,7 @@ When classification is **standard**:
289
309
  Must be start-of-line. Process label: `standard-skip`.
290
310
 
291
311
  - Otherwise obtain **exactly one sequential** advisory outside voice
292
- (`wp_review_run` or host skill). Process label: `outside-approved`.
312
+ (`wp_review_gate` with `mode: "advisory"`, or host skill). Process label: `outside-approved`.
293
313
  - At most **one OpenCode Go reviewer** counts unless the user asks for more.
294
314
  - Invoke the selected reviewer **once**. Do not probe, retry, or rotate
295
315
  providers automatically, and **never** fan out parallel multi-host review
@@ -326,9 +346,25 @@ Never invent a land-now skip. See `land-policy` for the full table.
326
346
  `not_found` means there is no active or terminal gate for that subject; refresh
327
347
  state and start the gate again instead of continuing to wait.
328
348
  - 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.
349
+ purpose delivery, default authoritative mode, on the immutable subject; for
350
+ standard advisory use the same `wp_review_gate` call with `mode: "advisory"`
351
+ exactly once with the selected provider. Do not run a separate provider
352
+ probe. A later authoritative call on the same subject may promote a
353
+ matching complete advisory approval to authority with zero provider
354
+ invocation, unless a completed reject already exists for that content at
355
+ either stage.
356
+ - `advisory-exhausted` is a terminal outcome with no ledger event and no
357
+ verdict — treat it as terminal-without-authority. It means this exact
358
+ digest already used its advisory attempt budget; do not retry the same
359
+ content or report it as a failure. Change the reviewed content (which mints
360
+ a new digest) or spend real authoritative budget instead. It is always
361
+ returned synchronously; no `wp_review_gate_wait` poll is ever needed or
362
+ issued for it.
363
+ - An advisory gate and an authoritative gate on the same subject cannot run
364
+ concurrently — unlike the removed `wp_review_run`, an advisory
365
+ `wp_review_gate` call claims the same active marker an authoritative call
366
+ does. If a call reports marker contention, serialize the two calls rather
367
+ than treating contention as an error.
332
368
  - Each gate reviewer must return exactly one schema-valid JSON review object;
333
369
  never infer a verdict from Markdown. The gate derives approval from typed
334
370
  findings: blockers reject, nits approve with nits, and no findings approve.
@@ -356,7 +392,9 @@ If any required check is missing, the correct result is **not done yet**, not a
356
392
 
357
393
  **Tooling friction (optional):** if this session burned medium+ tokens on MCP/CLI/hooks/CI
358
394
  gates (not product code), run `/tooling-friction` once and resolve its capture
359
- destination with `wp_tooling_friction_path({"file":"<file>"})` (human CLI:
360
- `wp tooling-friction path --file <file>`). Skip when the path was smooth. If
361
- the surface cannot be resolved or written, report the skip and never fall
362
- back to a worktree path. Never blocks land see the `tooling-friction` skill.
395
+ destination with `wp_tooling_friction_path({"file":"<file>"})` copy the absolute
396
+ path from the tool summary (human CLI: `wp tooling-friction path --file <file>`).
397
+ Do not invent fleet folder slugs or worktree-keyed desktop-state paths. Skip when
398
+ the path was smooth. If the surface cannot be resolved or written, report the skip
399
+ and never fall back to a worktree path. Never blocks land — see the
400
+ `tooling-friction` skill.