@open-agent-toolkit/cli 0.1.66 → 0.1.69

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.
Files changed (37) hide show
  1. package/assets/agents/oat-reviewer.md +0 -1
  2. package/assets/docs/cli-utilities/workflow-gates.md +24 -5
  3. package/assets/docs/reference/cli-reference.md +1 -1
  4. package/assets/docs/workflows/projects/dispatch-ceiling.md +11 -3
  5. package/assets/docs/workflows/projects/pr-flow.md +12 -1
  6. package/assets/docs/workflows/projects/reviews.md +21 -1
  7. package/assets/public-package-versions.json +4 -4
  8. package/assets/skills/oat-project-autonomous/SKILL.md +1 -1
  9. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +2 -2
  10. package/assets/skills/oat-project-complete/SKILL.md +20 -2
  11. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +2 -2
  12. package/assets/skills/oat-project-implement/SKILL.md +1 -1
  13. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +12 -1
  14. package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +24 -9
  15. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +2 -2
  16. package/assets/skills/oat-project-implement/references/phase-execution.md +5 -2
  17. package/assets/skills/oat-project-next/SKILL.md +21 -6
  18. package/assets/skills/oat-project-plan/SKILL.md +6 -1
  19. package/assets/skills/oat-project-plan-writing/SKILL.md +19 -2
  20. package/assets/skills/oat-project-pr-final/SKILL.md +20 -5
  21. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +2 -2
  22. package/assets/skills/oat-project-pr-progress/SKILL.md +18 -3
  23. package/assets/skills/oat-project-progress/SKILL.md +4 -1
  24. package/assets/skills/oat-project-quick-start/SKILL.md +6 -1
  25. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +2 -2
  26. package/assets/skills/oat-project-review-provide/SKILL.md +7 -2
  27. package/assets/skills/oat-project-review-receive/SKILL.md +46 -18
  28. package/assets/skills/oat-project-review-receive-remote/SKILL.md +41 -8
  29. package/dist/commands/cleanup/project/project.utils.d.ts.map +1 -1
  30. package/dist/commands/cleanup/project/project.utils.js +19 -1
  31. package/dist/commands/gate/index.d.ts +2 -0
  32. package/dist/commands/gate/index.d.ts.map +1 -1
  33. package/dist/commands/gate/index.js +29 -1
  34. package/dist/commands/review/latest.d.ts +1 -0
  35. package/dist/commands/review/latest.d.ts.map +1 -1
  36. package/dist/commands/review/latest.js +96 -22
  37. package/package.json +2 -2
@@ -400,7 +400,6 @@ Run these to verify the implementation:
400
400
  ## Recommended Next Step
401
401
 
402
402
  Run the `oat-project-review-receive` skill to convert findings into plan tasks.
403
-
404
403
  ````
405
404
 
406
405
  ```
@@ -520,11 +520,30 @@ Gate failure behavior is owned by the gate-aware skill:
520
520
  available target. Once a target actually runs, its exit code is the gate result;
521
521
  OAT does not try another target after a failed review.
522
522
 
523
- Gate target execution has a child-process timeout (default 15 minutes, override
524
- with `OAT_GATE_EXEC_TIMEOUT_MS`). When a review target times out, JSON output
525
- reports `status: review_failed`, `outcome: review_did_not_complete`,
526
- `timedOut: true`, and the timeout value so automation can distinguish a hung
527
- provider prompt from a completed review with findings.
523
+ Gate target execution has a child-process timeout. Set
524
+ `OAT_GATE_EXEC_TIMEOUT_MS` to a positive integer number of milliseconds to
525
+ override the 900,000 ms (15-minute) default. An unset, non-integer, or
526
+ non-positive value uses the default.
527
+
528
+ After a review target times out, OAT re-scans the project reviews for exactly
529
+ one artifact carrying that invocation's `oat_gate_run_id`. A recovered artifact
530
+ still passes through the normal project, timestamp, invocation, normalization,
531
+ threshold, and handoff checks. If those checks produce `status: ok` or
532
+ `status: blocked`, the envelope also includes `lateCompletion: true`. This is
533
+ additive recovery telemetry, not a new status: route review-receive from
534
+ `status`, `receiveEligible`, and `handoff` as usual.
535
+
536
+ When timeout recovery finds no matching run-ID path and no changed diagnostic
537
+ artifact, JSON output reports `status: review_failed`, `outcome:
538
+ review_did_not_complete`, `timedOut: true`, the timeout value, and
539
+ `noOutputProduced`. That field is `true` only when the timed-out child emitted
540
+ zero stdout and stderr bytes; it is `false` when the child emitted any captured
541
+ output.
542
+
543
+ Correlation anomalies keep their more specific failure. Multiple artifacts
544
+ carrying the run ID, or a changed artifact carrying a mismatched run ID, return
545
+ `targeting_correlation_failed` with `receiveEligible: false`. Do not receive
546
+ those artifacts; correct the project/run correlation and start a new gate run.
528
547
 
529
548
  ## Current limits
530
549
 
@@ -68,7 +68,7 @@ Notable commands introduced in the current CLI surface:
68
68
  - `oat repo archive sync [project-name]` - hydrate archived project snapshots from the configured repo-scoped S3 archive into `.oat/projects/archived/`. The old `oat project archive sync` path remains as a deprecated shim.
69
69
  - `oat project validate-plan --project-path <path>` - validates `oat_plan_parallel_groups` metadata in `plan.md`; exits non-zero on invalid. See [Implementation Execution](../workflows/projects/implementation-execution.md#plan-declared-parallelism).
70
70
  - `oat project set-mode` — deprecated no-op. Execution mode is no longer user-selectable; emits a deprecation warning and preserves the `--json` contract.
71
- - `oat gate review <prompt...>` - run a stateful OAT review through the target registry, parse the produced review artifact, and exit nonzero for configured blocking findings. With `--json`, the result envelope on exit is the canonical completion signal: `status` is `ok` | `blocked` | `review_failed` | `artifact_validation_failed` | `targeting_correlation_failed`, alongside `runId`, `generatedAt`, and `artifactPath` when available. Invoke `oat-project-review-receive` only when all three conditions hold: `status` is `ok` or `blocked`, `receiveEligible` is `true`, and `handoff` is non-null. For `artifact_validation_failed`, correct the artifact and rerun the gate for successful revalidation before receive. `targeting_correlation_failed` sets `receiveEligible: false`; do not run review-receive even if it reports an artifact path. Orchestrators should read the structured result rather than poll the filesystem. The command runs standalone (for example, `--review-scope final`), not only inside `oat-project-implement`. See [Workflow Gates → Gate completion signal](../cli-utilities/workflow-gates.md#gate-completion-signal).
71
+ - `oat gate review <prompt...>` - run a stateful OAT review through the target registry, parse the produced review artifact, and exit nonzero for configured blocking findings. With `--json`, the result envelope on exit is the canonical completion signal: `status` is `ok` | `blocked` | `review_failed` | `artifact_validation_failed` | `targeting_correlation_failed`, alongside `runId`, `generatedAt`, and `artifactPath` when available. Invoke `oat-project-review-receive` only when all three conditions hold: `status` is `ok` or `blocked`, `receiveEligible` is `true`, and `handoff` is non-null. For `artifact_validation_failed`, correct the artifact and rerun the gate for successful revalidation before receive. `targeting_correlation_failed` sets `receiveEligible: false`; do not run review-receive even if it reports an artifact path. The child-process timeout defaults to 900,000 ms (15 minutes); set `OAT_GATE_EXEC_TIMEOUT_MS` to a positive integer number of milliseconds to override it. After a timeout, a validated run-correlated artifact returns the ordinary `ok` or `blocked` envelope with additive `lateCompletion: true`. A timeout with no matching run-ID path and no changed diagnostic artifact returns `review_failed` with additive `noOutputProduced`, which is `true` only when the child emitted zero stdout and stderr bytes. Duplicate run-ID matches or a changed artifact with a mismatched run ID retain `targeting_correlation_failed` and `receiveEligible: false`. Neither additive field changes receive routing: continue to use `status`, `receiveEligible`, and `handoff`. Orchestrators should read the structured result rather than poll the filesystem. The command runs standalone (for example, `--review-scope final`), not only inside `oat-project-implement`. See [Workflow Gates → Gate completion signal](../cli-utilities/workflow-gates.md#gate-completion-signal).
72
72
  - `oat gate target set <id> --invocation-model <model|provider-default> --invocation-reasoning-effort <effort|provider-default>` - persist optional configured invocation metadata alongside an exec target without inferring it from the target command.
73
73
  - `oat gate target list --json` - inspect resolved gate targets without selecting or executing a reviewer. Each entry reports its config origin, whether it is explicitly configured and enabled, current availability, and normalized configured invocation values (`unknown` when omitted).
74
74
  - `oat gate cross-provider-exec <prompt...>` - choose an available exec target while avoiding the current runtime by default, then run the prompt with the chosen target's configured base command and exit with the child status.
@@ -253,9 +253,17 @@ ambiguous route, malformed ordering, a reviewer candidate request, or controls
253
253
  that cannot compile exactly. The root blocks instead of reusing its own target,
254
254
  a base role, or a provider default.
255
255
 
256
- `--preferred` remains available for legacy scalar ceilings and managed
257
- `Uncapped` compatibility. It is not the exact managed phase-agent selection
258
- path.
256
+ Implementer and fix resolution has two mutually exclusive selection branches:
257
+
258
+ - **Preferred selection:** pass `--preferred` for legacy scalar ceilings or
259
+ managed `Uncapped` compatibility. Do not include `--candidate-model` or
260
+ `--candidate-effort`.
261
+ - **Exact-candidate selection:** pass `--candidate-model` and, where applicable,
262
+ `--candidate-effort` for a managed capped phase or fix. Do not include
263
+ `--preferred`.
264
+
265
+ Never combine the branches in one resolver invocation. The exact-candidate
266
+ branch replaces, rather than supplements, preferred selection.
259
267
 
260
268
  ## Provider Enforcement
261
269
 
@@ -46,7 +46,18 @@ After `oat-project-pr-final` creates the PR, `state.md` transitions to `oat_phas
46
46
  From `pr_open`:
47
47
 
48
48
  - **Feedback received:** run `oat-project-revise` to create revision tasks and re-enter implementation
49
- - **Approved:** run `oat-project-complete` to finalize and archive the project. If `oat_pr_status: open` is already tracked, completion skips asking whether to open a PR again and can show the tracked `oat_pr_url` in its summary.
49
+ - **Ready for completion:** run `oat-project-complete` to finalize and archive the project. If `oat_pr_status: open` is already tracked, completion skips asking whether to open a PR again and can show the tracked `oat_pr_url` in its summary.
50
+
51
+ Both completion orderings are supported:
52
+
53
+ - **Complete before merge:** run `oat-project-complete` while the PR is open,
54
+ then merge.
55
+ - **Merge before completion:** merge the PR first, then run
56
+ `oat-project-complete`.
57
+
58
+ An open PR is not a completion blocker. When completion archives project
59
+ artifacts, the archive-aware flow regenerates and synchronizes the open PR body
60
+ so its artifact links remain valid.
50
61
 
51
62
  ## Reference artifacts
52
63
 
@@ -26,9 +26,12 @@ Use `oat review latest` when a skill or operator needs to resolve "the most rece
26
26
  ```bash
27
27
  oat review latest --json
28
28
  oat review latest --project .oat/projects/shared/example --json
29
+ oat review latest --project .oat/projects/shared/example --actionable-project --json
29
30
  ```
30
31
 
31
- The resolver orders candidates by `oat_generated_at` frontmatter, not filesystem mtime. With an active or explicit project, it scans the project's `reviews/` directory first, then `reviews/archived/`, then ad-hoc review locations (`.oat/repo/reviews/` and `.oat/projects/local/orphan-reviews/`). When candidates share the same generated time, active project reviews outrank archived and ad-hoc reviews, then lifecycle recency breaks remaining ties (`final` > higher phase/task scope > lower phase/task scope). The JSON response contains `path`, `scope`, `generatedAt`, `kind` (`project` or `adhoc`), `archived`, and `actionable`. Archived project reviews remain discoverable as history but return `actionable: false`; active top-level project reviews return `actionable: true`. If no review exists, those fields are `null`.
32
+ The default resolver is an all-history lookup. It orders candidates by `oat_generated_at` frontmatter, not filesystem mtime. With an active or explicit project, it scans the project's `reviews/` directory first, then `reviews/archived/`, then ad-hoc review locations (`.oat/repo/reviews/` and `.oat/projects/local/orphan-reviews/`). When candidates share the same generated time, active project reviews outrank archived and ad-hoc reviews, then lifecycle recency breaks remaining ties (`final` > higher phase/task scope > lower phase/task scope).
33
+
34
+ Use `--actionable-project` when project review-receive needs work waiting for disposition. A top-level artifact is actionable only when its scope, type, and artifact path identify a `received` event in the plan's Reviews ledger. Top-level placement alone is insufficient: passed, `fixes_added`, `fixes_completed`, mismatched, and archived events return `actionable: false`. The JSON response contains `path`, `scope`, `generatedAt`, `kind` (`project` or `adhoc`), `archived`, and `actionable`. If no matching review exists, those fields are `null`.
32
35
 
33
36
  `oat-project-review-receive` uses this resolver when it is invoked from natural language and needs to offer the latest project review, or route an ad-hoc result to `oat-review-receive`.
34
37
 
@@ -89,6 +92,23 @@ Status progression in `plan.md` Reviews table:
89
92
  - `fixes_completed`
90
93
  - `passed`
91
94
 
95
+ Each row is an append-ordered review event. Duplicate scope and type rows are
96
+ valid because separate reviews can cover the same subject. Scope, type, and the
97
+ artifact filename identify an event:
98
+
99
+ - The first event for a scope and type may claim an unbound `pending` row whose
100
+ artifact is `-`.
101
+ - A review with a distinct artifact filename appends a new row instead of
102
+ overwriting an earlier bound event.
103
+ - Later bookkeeping updates match the event by scope, type, and artifact
104
+ filename. Moving an artifact into `reviews/archived/` preserves that identity.
105
+ - An event advances through the status progression monotonically and never
106
+ moves backward. A later event can begin at `received` without changing an
107
+ earlier event that already reached `passed`.
108
+
109
+ Readers that need current lifecycle state use the latest appended event matching
110
+ the relevant scope and type.
111
+
92
112
  ## Current policy
93
113
 
94
114
  - Critical/Important: address before pass.
@@ -1,6 +1,6 @@
1
1
  {
2
- "cli": "0.1.66",
3
- "docs-config": "0.1.66",
4
- "docs-theme": "0.1.66",
5
- "docs-transforms": "0.1.66"
2
+ "cli": "0.1.69",
3
+ "docs-config": "0.1.69",
4
+ "docs-theme": "0.1.69",
5
+ "docs-transforms": "0.1.69"
6
6
  }
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-autonomous
3
- version: 1.0.1
3
+ version: 1.0.3
4
4
  description: Use when a user explicitly asks to run an OAT project autonomously end-to-end. Activates session-only autonomy, resumes the correct lifecycle phase, and drives the existing OAT skills through final PR or a reported boundary.
5
5
  argument-hint: '<goal | project-slug | ticket-ref>'
6
6
  disable-model-invocation: true
@@ -227,7 +227,7 @@ remains immutable baseline evidence for the original p01-t01 verification.
227
227
  | `oat-project-import-plan/SKILL.md` | `f7ca8635452f -> NG`; `c2e5fa410069 -> NG`; `655d61df0a8f -> NG`; `b137f73db20c -> IMPORT-01`; `45b699c1c0b5 -> IMPORT-01`; `ba6d120791c1 -> IMPORT-01`; `070ebc5259af -> IMPORT-03`; `c11552696e2e -> IMPORT-03`; `cfe661966baf -> IMPORT-04`; `baa91c0a0bf8 -> NG`; `e364e84b2702 -> NG`; `39031985a945 -> IMPORT-06`; `f106aa29a217 -> IMPORT-07`; `65038450aee3 -> IMPORT-07`; `bee4c4aa34c6 -> NG`; `3f0b53056edd -> IMPORT-09` |
228
228
  | `oat-project-implement/SKILL.md` | `c6732295bc8c -> NG`; `ffb3af0ba8ef -> NG`; `e0355c7a05e9 -> IMPLEMENT-11+IMPLEMENT-13+IMPLEMENT-16`; `6296f41ae11c -> NG`; `a167d03559fa -> NG`; `cf317c17c586 -> IMPLEMENT-01`; `8ce8a09feca4 -> NG` |
229
229
  | `oat-project-implement/references/completion-and-closeout.md` | `105600fbd045 -> IMPLEMENT-11`; `3e6055aede6c -> IMPLEMENT-11`; `0705f7533039 -> IMPLEMENT-11`; `0c39746f3cb5 -> IMPLEMENT-11`; `14d89fe39c8c -> IMPLEMENT-11`; `378a75543a72 -> IMPLEMENT-11`; `c7b25627e674 -> IMPLEMENT-11`; `51ef9a453323 -> IMPLEMENT-11`; `c67145e3fb00 -> IMPLEMENT-11`; `64fbeac64811 -> IMPLEMENT-11`; `19b13c17bddb -> NG`; `f7dab9c1f96c -> IMPLEMENT-12`; `c69c17a069a8 -> IMPLEMENT-14`; `a97fa5634a68 -> IMPLEMENT-14`; `3af58881811c -> IMPLEMENT-14`; `4203e1f49d0f -> IMPLEMENT-14`; `c3bd2458a3d3 -> IMPLEMENT-13`; `95b5eafc070d -> IMPLEMENT-13`; `25ecbe9c998b -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `f6f24fd71da4 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `f18283bc1cf9 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `2c1ffc4a82dd -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `3454a07aa843 -> IMPLEMENT-16`; `0d86e2098cfb -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `d5fe597d266f -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `55a152e944c1 -> IMPLEMENT-16`; `effac7cbd573 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `9d2a34d8b148 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `d27462aaed26 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `9d52ecb17268 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `5b91aabe3757 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `fd0ad919f702 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `63bf28df1474 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `a4ed471dbc78 -> IMPLEMENT-16`; `6b7a64cec6e5 -> IMPLEMENT-16`; `0a4fdba0ebc0 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `a5033c2aada5 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `e77609eddba0 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `351156e8dde4 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `51d45bd2bbd1 -> IMPLEMENT-16`; `f7796ffcc804 -> IMPLEMENT-16`; `990d730cb494 -> IMPLEMENT-16`; `6ed28bb7d384 -> IMPLEMENT-16`; `8b7d4b5bcf1b -> IMPLEMENT-16`; `88aad500e6e9 -> IMPLEMENT-16`; `877e3e3f9eda -> IMPLEMENT-16`; `fc03c97f834e -> IMPLEMENT-16`; `12939a3da5e0 -> IMPLEMENT-16`; `bdb418335a88 -> IMPLEMENT-16`; `fba97e596ebd -> IMPLEMENT-16`; `3d0b5e2f14f0 -> IMPLEMENT-17`; `f56a9ce88461 -> IMPLEMENT-17`; `9ba67b50d0ba -> IMPLEMENT-17`; `39ff911760af -> IMPLEMENT-17`; `5b560b5bd6e3 -> IMPLEMENT-17`; `fa21df5e5e01 -> IMPLEMENT-17`; `0fed77bec55e -> IMPLEMENT-17`; `6d81cfb0483f -> IMPLEMENT-17`; `bee4c4aa34c6 -> NG`; `3f0b53056edd -> IMPLEMENT-18` |
230
- | `oat-project-implement/references/dispatch-and-dry-run.md` | `21b85f5e4daa -> IMPLEMENT-08`; `74c92b32bb2a -> IMPLEMENT-08`; `8efd2d0517ab -> IMPLEMENT-09`; `461ed9b3e495 -> IMPLEMENT-09`; `b5ad64fd744d -> NG`; `14ce436cfffa -> NG`; `043ca36da3e2 -> NG`; `a23e45c1dc8d -> NG`; `498143bb41a7 -> NG`; `4fe3eb179023 -> NG`; `7f75485e5a33 -> NG`; `8ec3a96df029 -> NG`; `16c3f96e758d -> NG`; `5915c41fe058 -> NG`; `f51e43eeac56 -> NG`; `fd41c25623cb -> NG`; `58a932ed6453 -> NG`; `4718bd3ce12d -> NG`; `58c444a2126b -> NG` |
230
+ | `oat-project-implement/references/dispatch-and-dry-run.md` | `21b85f5e4daa -> IMPLEMENT-08`; `74c92b32bb2a -> IMPLEMENT-08`; `8efd2d0517ab -> IMPLEMENT-09`; `461ed9b3e495 -> IMPLEMENT-09`; `b5ad64fd744d -> NG`; `14ce436cfffa -> NG`; `043ca36da3e2 -> NG`; `a23e45c1dc8d -> NG`; `498143bb41a7 -> NG`; `4fe3eb179023 -> NG`; `7f75485e5a33 -> NG`; `8ec3a96df029 -> NG`; `16c3f96e758d -> NG`; `5915c41fe058 -> NG`; `f51e43eeac56 -> NG`; `fd41c25623cb -> NG`; `58a932ed6453 -> NG`; `4718bd3ce12d -> NG`; `58c444a2126b -> NG`; `2df3adae4120 -> NG`; `e75df892b55c -> NG` |
231
231
  | `oat-project-implement/references/docs/autonomy-contract.md` | `* -> NG` |
232
232
  | `oat-project-implement/references/phase-execution.md` | `27737e814790 -> NG`; `6dda2b8e62e2 -> IMPLEMENT-10`; `b3197086bb1e -> IMPLEMENT-10` |
233
233
  | `oat-project-implement/references/plan-and-resume.md` | `413829d31e32 -> IMPLEMENT-02`; `c7706cd8ad09 -> IMPLEMENT-03`; `a80a948df658 -> IMPLEMENT-03`; `b7ea139780ec -> IMPLEMENT-03+IMPLEMENT-04`; `8d438f2180ba -> IMPLEMENT-03`; `9e72e0518cda -> IMPLEMENT-03`; `3e177a1021e6 -> IMPLEMENT-03+IMPLEMENT-04`; `b59fc9eb9ce3 -> IMPLEMENT-03`; `a2b1d6855283 -> IMPLEMENT-03`; `44351a32e52a -> IMPLEMENT-03`; `b98b022f5523 -> IMPLEMENT-03`; `e9f5b949e214 -> IMPLEMENT-03`; `316fb6d9e980 -> IMPLEMENT-03`; `8b25a2c5c548 -> IMPLEMENT-03`; `1a59b1c0e705 -> IMPLEMENT-03`; `466cd562fc52 -> IMPLEMENT-03`; `083d896978d5 -> IMPLEMENT-03`; `f4ab11c13ae9 -> IMPLEMENT-03`; `7dc17ffcc1c4 -> IMPLEMENT-03`; `f731a90adabd -> IMPLEMENT-04`; `886ac01e7aa9 -> IMPLEMENT-04`; `b715db67df0c -> IMPLEMENT-04`; `2d9f26a539f3 -> IMPLEMENT-10`; `28384dee114f -> IMPLEMENT-05`; `f2591a4978b4 -> NG`; `8290823080b5 -> IMPLEMENT-06`; `f75789bf6c8e -> IMPLEMENT-07` |
@@ -238,7 +238,7 @@ remains immutable baseline evidence for the original p01-t01 verification.
238
238
  | `oat-project-pr-final/references/docs/autonomy-contract.md` | `* -> NG` |
239
239
  | `oat-project-complete/SKILL.md` | `6ed459f9e462 -> NG`; `a167d03559fa -> NG`; `79c2eeed668c -> COMPLETE-01`; `2c1514b9d9af -> COMPLETE-01`; `31c750b4fea7 -> COMPLETE-01`; `cfba413b1293 -> COMPLETE-01`; `ffcdc9d576c0 -> COMPLETE-01`; `7fcfce0423ac -> COMPLETE-01`; `9497d9f94eed -> COMPLETE-01`; `7b59c728d3fb -> COMPLETE-01`; `48e10a9636fe -> COMPLETE-01`; `c0dad37fc166 -> COMPLETE-01`; `aa9a36243ec1 -> COMPLETE-01`; `7bcbf58b54e9 -> NG`; `4c7f88a7f942 -> COMPLETE-02`; `6a1a95acc8cc -> COMPLETE-02`; `3b559956b3eb -> COMPLETE-03`; `14d161cdf99b -> COMPLETE-03`; `12f7c30a54c8 -> NG`; `fffe5eea5ebd -> NG` |
240
240
  | `oat-project-review-provide/SKILL.md` | `1f4b981cac8b -> NG`; `adaeca152bb2 -> NG`; `2f7c201c3c06 -> NG`; `88f79700afdc -> NG`; `655d61df0a8f -> NG`; `efafde9ef5a0 -> NG`; `d2a3861d6323 -> REVIEWPROVIDE-02`; `65f5b9cf49cd -> REVIEWPROVIDE-04`; `962cb38d246a -> REVIEWPROVIDE-04`; `1a568483ba0b -> REVIEWPROVIDE-04`; `610e27edfe85 -> REVIEWPROVIDE-04`; `fab62c510bd0 -> REVIEWPROVIDE-05`; `a9f30853c867 -> REVIEWPROVIDE-05`; `0929c916fc20 -> REVIEWPROVIDE-05`; `f9a37c63afab -> REVIEWPROVIDE-05`; `687bb9368f92 -> REVIEWPROVIDE-05`; `bb0096e95c47 -> REVIEWPROVIDE-06`; `55f6357a987d -> REVIEWPROVIDE-06`; `1bee61f8531c -> REVIEWPROVIDE-07`; `3d35091607a1 -> REVIEWPROVIDE-08`; `fb40c4341c4c -> NG`; `b22d16885150 -> NG`; `d2b25906242e -> REVIEWPROVIDE-08`; `fd8ebf72b3c4 -> NG`; `fcb9de611ff3 -> NG`; `d2a838dfb18d -> NG`; `c3d50ea7cf69 -> NG`; `09b1b8dd445c -> NG`; `7acc8f3718d2 -> REVIEWPROVIDE-09`; `b2fa883fc4a2 -> NG`; `fe4421531b4c -> NG` |
241
- | `oat-project-review-receive/SKILL.md` | `9b8a3743d626 -> NG`; `df49c8c6f192 -> NG`; `4ee8730382d3 -> NG`; `655d61df0a8f -> NG`; `765f897d67ac -> NG`; `53b58d16dd32 -> NG`; `fb8755a3bdf4 -> NG`; `c8ab5dd90075 -> NG`; `1f7dd98dff2f -> NG`; `56f78c6740e6 -> NG`; `76f5fb5a88cd -> NG`; `085abfa3599f -> REVIEWRECEIVE-01`; `3ad3aadb8c60 -> NG`; `a7d114059bb6 -> NG`; `ac88cfaa83d9 -> NG`; `3f758313fedb -> REVIEWRECEIVE-08`; `f31f07284718 -> REVIEWRECEIVE-02`; `aba178a21441 -> REVIEWRECEIVE-04`; `a37e601cd731 -> REVIEWRECEIVE-05`; `20e05e1a4381 -> REVIEWRECEIVE-06`; `90001dadf75f -> REVIEWRECEIVE-07`; `f8fd58180ecf -> NG`; `c3abcdc02d9f -> NG` |
241
+ | `oat-project-review-receive/SKILL.md` | `9b8a3743d626 -> NG`; `df49c8c6f192 -> NG`; `4ee8730382d3 -> NG`; `655d61df0a8f -> NG`; `765f897d67ac -> NG`; `53b58d16dd32 -> NG`; `fb8755a3bdf4 -> NG`; `c8ab5dd90075 -> NG`; `1f7dd98dff2f -> NG`; `56f78c6740e6 -> NG`; `76f5fb5a88cd -> NG`; `085abfa3599f -> REVIEWRECEIVE-01`; `3ad3aadb8c60 -> NG`; `a7d114059bb6 -> NG`; `ac88cfaa83d9 -> NG`; `3f758313fedb -> REVIEWRECEIVE-08`; `f31f07284718 -> REVIEWRECEIVE-02`; `aba178a21441 -> REVIEWRECEIVE-04`; `a37e601cd731 -> REVIEWRECEIVE-05`; `20e05e1a4381 -> REVIEWRECEIVE-06`; `90001dadf75f -> REVIEWRECEIVE-07`; `f8fd58180ecf -> NG`; `c3abcdc02d9f -> NG`; `f2ebdd6abb9b -> NG` |
242
242
  | `oat-dispatch-subagents/SKILL.md` | `cb4f86157fd6 -> DISPATCH-01`; `f165b1626192 -> DISPATCH-01`; `7ed5e2b1eb71 -> PDISPATCH-01`; `11c72bcdebad -> DISPATCH-02`; `0834ee701e12 -> DISPATCH-02`; `7fda54e1d519 -> PDISPATCH-01` |
243
243
  | `oat-dispatch-subagents/references/provider-claude.md` | `fbe3a21e9533 -> NG` |
244
244
  | `oat-dispatch-subagents/references/provider-codex.md` | `95b0f82018c7 -> NG` |
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-complete
3
- version: 1.5.0
3
+ version: 1.5.2
4
4
  description: Use when all implementation work is finished and the project is ready to close. Marks the OAT project lifecycle as complete.
5
5
  disable-model-invocation: true
6
6
  user-invocable: true
@@ -79,6 +79,15 @@ Use the same `state.md` read you already perform for `oat_pr_status`/`oat_pr_url
79
79
 
80
80
  Some questions can be answered automatically from workflow preferences. Read each preference before deciding whether to include its question in the batched prompt:
81
81
 
82
+ Both lifecycle orderings are supported:
83
+
84
+ - **Complete before merge:** run this skill while the PR is open, then merge.
85
+ - **Merge before completion:** merge first, then run this skill.
86
+
87
+ An open PR is not a blocker. When completion archives project artifacts, the
88
+ existing archive-aware flow regenerates and syncs the open PR body so its links
89
+ remain valid.
90
+
82
91
  ```bash
83
92
  ARCHIVE_PREF=$(oat config get workflow.archiveOnComplete 2>/dev/null || true)
84
93
  PR_ON_COMPLETE=$(oat config get workflow.createPrOnComplete 2>/dev/null || true)
@@ -149,7 +158,12 @@ Run all gate checks and collect warnings. These are informational — they don't
149
158
  PLAN_FILE="${PROJECT_PATH}/plan.md"
150
159
 
151
160
  if [[ -f "$PLAN_FILE" ]]; then
152
- final_row=$(grep -E "^\|\s*final\s*\|" "$PLAN_FILE" | head -1 || true)
161
+ reviews_section=$(awk '
162
+ /^## Reviews[[:space:]]*$/ { in_reviews = 1; next }
163
+ in_reviews && /^##[[:space:]]/ { exit }
164
+ in_reviews { print }
165
+ ' "$PLAN_FILE")
166
+ final_row=$(printf '%s\n' "$reviews_section" | grep -E "^\|\s*final\s*\|\s*code\s*\|" | tail -1 || true)
153
167
  if [[ -z "$final_row" ]]; then
154
168
  echo "Warning: No final review row found in plan.md."
155
169
  elif ! echo "$final_row" | grep -qE "\|\s*passed\s*\|"; then
@@ -161,6 +175,10 @@ else
161
175
  fi
162
176
  ```
163
177
 
178
+ `reviews_section` is strictly the `## Reviews` section through the next
179
+ level-two heading. Within that ledger, `final_row` is the latest appended event
180
+ whose Scope is `final` and Type is `code`; earlier events remain history.
181
+
164
182
  #### 3.2: Deferred Medium Findings
165
183
 
166
184
  ```bash
@@ -227,7 +227,7 @@ remains immutable baseline evidence for the original p01-t01 verification.
227
227
  | `oat-project-import-plan/SKILL.md` | `f7ca8635452f -> NG`; `c2e5fa410069 -> NG`; `655d61df0a8f -> NG`; `b137f73db20c -> IMPORT-01`; `45b699c1c0b5 -> IMPORT-01`; `ba6d120791c1 -> IMPORT-01`; `070ebc5259af -> IMPORT-03`; `c11552696e2e -> IMPORT-03`; `cfe661966baf -> IMPORT-04`; `baa91c0a0bf8 -> NG`; `e364e84b2702 -> NG`; `39031985a945 -> IMPORT-06`; `f106aa29a217 -> IMPORT-07`; `65038450aee3 -> IMPORT-07`; `bee4c4aa34c6 -> NG`; `3f0b53056edd -> IMPORT-09` |
228
228
  | `oat-project-implement/SKILL.md` | `c6732295bc8c -> NG`; `ffb3af0ba8ef -> NG`; `e0355c7a05e9 -> IMPLEMENT-11+IMPLEMENT-13+IMPLEMENT-16`; `6296f41ae11c -> NG`; `a167d03559fa -> NG`; `cf317c17c586 -> IMPLEMENT-01`; `8ce8a09feca4 -> NG` |
229
229
  | `oat-project-implement/references/completion-and-closeout.md` | `105600fbd045 -> IMPLEMENT-11`; `3e6055aede6c -> IMPLEMENT-11`; `0705f7533039 -> IMPLEMENT-11`; `0c39746f3cb5 -> IMPLEMENT-11`; `14d89fe39c8c -> IMPLEMENT-11`; `378a75543a72 -> IMPLEMENT-11`; `c7b25627e674 -> IMPLEMENT-11`; `51ef9a453323 -> IMPLEMENT-11`; `c67145e3fb00 -> IMPLEMENT-11`; `64fbeac64811 -> IMPLEMENT-11`; `19b13c17bddb -> NG`; `f7dab9c1f96c -> IMPLEMENT-12`; `c69c17a069a8 -> IMPLEMENT-14`; `a97fa5634a68 -> IMPLEMENT-14`; `3af58881811c -> IMPLEMENT-14`; `4203e1f49d0f -> IMPLEMENT-14`; `c3bd2458a3d3 -> IMPLEMENT-13`; `95b5eafc070d -> IMPLEMENT-13`; `25ecbe9c998b -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `f6f24fd71da4 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `f18283bc1cf9 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `2c1ffc4a82dd -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `3454a07aa843 -> IMPLEMENT-16`; `0d86e2098cfb -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `d5fe597d266f -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `55a152e944c1 -> IMPLEMENT-16`; `effac7cbd573 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `9d2a34d8b148 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `d27462aaed26 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `9d52ecb17268 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `5b91aabe3757 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `fd0ad919f702 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `63bf28df1474 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `a4ed471dbc78 -> IMPLEMENT-16`; `6b7a64cec6e5 -> IMPLEMENT-16`; `0a4fdba0ebc0 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `a5033c2aada5 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `e77609eddba0 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `351156e8dde4 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `51d45bd2bbd1 -> IMPLEMENT-16`; `f7796ffcc804 -> IMPLEMENT-16`; `990d730cb494 -> IMPLEMENT-16`; `6ed28bb7d384 -> IMPLEMENT-16`; `8b7d4b5bcf1b -> IMPLEMENT-16`; `88aad500e6e9 -> IMPLEMENT-16`; `877e3e3f9eda -> IMPLEMENT-16`; `fc03c97f834e -> IMPLEMENT-16`; `12939a3da5e0 -> IMPLEMENT-16`; `bdb418335a88 -> IMPLEMENT-16`; `fba97e596ebd -> IMPLEMENT-16`; `3d0b5e2f14f0 -> IMPLEMENT-17`; `f56a9ce88461 -> IMPLEMENT-17`; `9ba67b50d0ba -> IMPLEMENT-17`; `39ff911760af -> IMPLEMENT-17`; `5b560b5bd6e3 -> IMPLEMENT-17`; `fa21df5e5e01 -> IMPLEMENT-17`; `0fed77bec55e -> IMPLEMENT-17`; `6d81cfb0483f -> IMPLEMENT-17`; `bee4c4aa34c6 -> NG`; `3f0b53056edd -> IMPLEMENT-18` |
230
- | `oat-project-implement/references/dispatch-and-dry-run.md` | `21b85f5e4daa -> IMPLEMENT-08`; `74c92b32bb2a -> IMPLEMENT-08`; `8efd2d0517ab -> IMPLEMENT-09`; `461ed9b3e495 -> IMPLEMENT-09`; `b5ad64fd744d -> NG`; `14ce436cfffa -> NG`; `043ca36da3e2 -> NG`; `a23e45c1dc8d -> NG`; `498143bb41a7 -> NG`; `4fe3eb179023 -> NG`; `7f75485e5a33 -> NG`; `8ec3a96df029 -> NG`; `16c3f96e758d -> NG`; `5915c41fe058 -> NG`; `f51e43eeac56 -> NG`; `fd41c25623cb -> NG`; `58a932ed6453 -> NG`; `4718bd3ce12d -> NG`; `58c444a2126b -> NG` |
230
+ | `oat-project-implement/references/dispatch-and-dry-run.md` | `21b85f5e4daa -> IMPLEMENT-08`; `74c92b32bb2a -> IMPLEMENT-08`; `8efd2d0517ab -> IMPLEMENT-09`; `461ed9b3e495 -> IMPLEMENT-09`; `b5ad64fd744d -> NG`; `14ce436cfffa -> NG`; `043ca36da3e2 -> NG`; `a23e45c1dc8d -> NG`; `498143bb41a7 -> NG`; `4fe3eb179023 -> NG`; `7f75485e5a33 -> NG`; `8ec3a96df029 -> NG`; `16c3f96e758d -> NG`; `5915c41fe058 -> NG`; `f51e43eeac56 -> NG`; `fd41c25623cb -> NG`; `58a932ed6453 -> NG`; `4718bd3ce12d -> NG`; `58c444a2126b -> NG`; `2df3adae4120 -> NG`; `e75df892b55c -> NG` |
231
231
  | `oat-project-implement/references/docs/autonomy-contract.md` | `* -> NG` |
232
232
  | `oat-project-implement/references/phase-execution.md` | `27737e814790 -> NG`; `6dda2b8e62e2 -> IMPLEMENT-10`; `b3197086bb1e -> IMPLEMENT-10` |
233
233
  | `oat-project-implement/references/plan-and-resume.md` | `413829d31e32 -> IMPLEMENT-02`; `c7706cd8ad09 -> IMPLEMENT-03`; `a80a948df658 -> IMPLEMENT-03`; `b7ea139780ec -> IMPLEMENT-03+IMPLEMENT-04`; `8d438f2180ba -> IMPLEMENT-03`; `9e72e0518cda -> IMPLEMENT-03`; `3e177a1021e6 -> IMPLEMENT-03+IMPLEMENT-04`; `b59fc9eb9ce3 -> IMPLEMENT-03`; `a2b1d6855283 -> IMPLEMENT-03`; `44351a32e52a -> IMPLEMENT-03`; `b98b022f5523 -> IMPLEMENT-03`; `e9f5b949e214 -> IMPLEMENT-03`; `316fb6d9e980 -> IMPLEMENT-03`; `8b25a2c5c548 -> IMPLEMENT-03`; `1a59b1c0e705 -> IMPLEMENT-03`; `466cd562fc52 -> IMPLEMENT-03`; `083d896978d5 -> IMPLEMENT-03`; `f4ab11c13ae9 -> IMPLEMENT-03`; `7dc17ffcc1c4 -> IMPLEMENT-03`; `f731a90adabd -> IMPLEMENT-04`; `886ac01e7aa9 -> IMPLEMENT-04`; `b715db67df0c -> IMPLEMENT-04`; `2d9f26a539f3 -> IMPLEMENT-10`; `28384dee114f -> IMPLEMENT-05`; `f2591a4978b4 -> NG`; `8290823080b5 -> IMPLEMENT-06`; `f75789bf6c8e -> IMPLEMENT-07` |
@@ -238,7 +238,7 @@ remains immutable baseline evidence for the original p01-t01 verification.
238
238
  | `oat-project-pr-final/references/docs/autonomy-contract.md` | `* -> NG` |
239
239
  | `oat-project-complete/SKILL.md` | `6ed459f9e462 -> NG`; `a167d03559fa -> NG`; `79c2eeed668c -> COMPLETE-01`; `2c1514b9d9af -> COMPLETE-01`; `31c750b4fea7 -> COMPLETE-01`; `cfba413b1293 -> COMPLETE-01`; `ffcdc9d576c0 -> COMPLETE-01`; `7fcfce0423ac -> COMPLETE-01`; `9497d9f94eed -> COMPLETE-01`; `7b59c728d3fb -> COMPLETE-01`; `48e10a9636fe -> COMPLETE-01`; `c0dad37fc166 -> COMPLETE-01`; `aa9a36243ec1 -> COMPLETE-01`; `7bcbf58b54e9 -> NG`; `4c7f88a7f942 -> COMPLETE-02`; `6a1a95acc8cc -> COMPLETE-02`; `3b559956b3eb -> COMPLETE-03`; `14d161cdf99b -> COMPLETE-03`; `12f7c30a54c8 -> NG`; `fffe5eea5ebd -> NG` |
240
240
  | `oat-project-review-provide/SKILL.md` | `1f4b981cac8b -> NG`; `adaeca152bb2 -> NG`; `2f7c201c3c06 -> NG`; `88f79700afdc -> NG`; `655d61df0a8f -> NG`; `efafde9ef5a0 -> NG`; `d2a3861d6323 -> REVIEWPROVIDE-02`; `65f5b9cf49cd -> REVIEWPROVIDE-04`; `962cb38d246a -> REVIEWPROVIDE-04`; `1a568483ba0b -> REVIEWPROVIDE-04`; `610e27edfe85 -> REVIEWPROVIDE-04`; `fab62c510bd0 -> REVIEWPROVIDE-05`; `a9f30853c867 -> REVIEWPROVIDE-05`; `0929c916fc20 -> REVIEWPROVIDE-05`; `f9a37c63afab -> REVIEWPROVIDE-05`; `687bb9368f92 -> REVIEWPROVIDE-05`; `bb0096e95c47 -> REVIEWPROVIDE-06`; `55f6357a987d -> REVIEWPROVIDE-06`; `1bee61f8531c -> REVIEWPROVIDE-07`; `3d35091607a1 -> REVIEWPROVIDE-08`; `fb40c4341c4c -> NG`; `b22d16885150 -> NG`; `d2b25906242e -> REVIEWPROVIDE-08`; `fd8ebf72b3c4 -> NG`; `fcb9de611ff3 -> NG`; `d2a838dfb18d -> NG`; `c3d50ea7cf69 -> NG`; `09b1b8dd445c -> NG`; `7acc8f3718d2 -> REVIEWPROVIDE-09`; `b2fa883fc4a2 -> NG`; `fe4421531b4c -> NG` |
241
- | `oat-project-review-receive/SKILL.md` | `9b8a3743d626 -> NG`; `df49c8c6f192 -> NG`; `4ee8730382d3 -> NG`; `655d61df0a8f -> NG`; `765f897d67ac -> NG`; `53b58d16dd32 -> NG`; `fb8755a3bdf4 -> NG`; `c8ab5dd90075 -> NG`; `1f7dd98dff2f -> NG`; `56f78c6740e6 -> NG`; `76f5fb5a88cd -> NG`; `085abfa3599f -> REVIEWRECEIVE-01`; `3ad3aadb8c60 -> NG`; `a7d114059bb6 -> NG`; `ac88cfaa83d9 -> NG`; `3f758313fedb -> REVIEWRECEIVE-08`; `f31f07284718 -> REVIEWRECEIVE-02`; `aba178a21441 -> REVIEWRECEIVE-04`; `a37e601cd731 -> REVIEWRECEIVE-05`; `20e05e1a4381 -> REVIEWRECEIVE-06`; `90001dadf75f -> REVIEWRECEIVE-07`; `f8fd58180ecf -> NG`; `c3abcdc02d9f -> NG` |
241
+ | `oat-project-review-receive/SKILL.md` | `9b8a3743d626 -> NG`; `df49c8c6f192 -> NG`; `4ee8730382d3 -> NG`; `655d61df0a8f -> NG`; `765f897d67ac -> NG`; `53b58d16dd32 -> NG`; `fb8755a3bdf4 -> NG`; `c8ab5dd90075 -> NG`; `1f7dd98dff2f -> NG`; `56f78c6740e6 -> NG`; `76f5fb5a88cd -> NG`; `085abfa3599f -> REVIEWRECEIVE-01`; `3ad3aadb8c60 -> NG`; `a7d114059bb6 -> NG`; `ac88cfaa83d9 -> NG`; `3f758313fedb -> REVIEWRECEIVE-08`; `f31f07284718 -> REVIEWRECEIVE-02`; `aba178a21441 -> REVIEWRECEIVE-04`; `a37e601cd731 -> REVIEWRECEIVE-05`; `20e05e1a4381 -> REVIEWRECEIVE-06`; `90001dadf75f -> REVIEWRECEIVE-07`; `f8fd58180ecf -> NG`; `c3abcdc02d9f -> NG`; `f2ebdd6abb9b -> NG` |
242
242
  | `oat-dispatch-subagents/SKILL.md` | `cb4f86157fd6 -> DISPATCH-01`; `f165b1626192 -> DISPATCH-01`; `7ed5e2b1eb71 -> PDISPATCH-01`; `11c72bcdebad -> DISPATCH-02`; `0834ee701e12 -> DISPATCH-02`; `7fda54e1d519 -> PDISPATCH-01` |
243
243
  | `oat-dispatch-subagents/references/provider-claude.md` | `fbe3a21e9533 -> NG` |
244
244
  | `oat-dispatch-subagents/references/provider-codex.md` | `95b0f82018c7 -> NG` |
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-implement
3
- version: 2.1.0
3
+ version: 2.1.2
4
4
  description: Use when plan.md is ready for execution. Dispatches one phase implementer per phase, owns independent phase review and bounded fix routing, and supports plan-declared worktree-isolated parallel phases.
5
5
  oat_gateable: true
6
6
  argument-hint: '[--retry-limit <N>] [--dry-run]'
@@ -142,10 +142,21 @@ Before requesting final review, ensure the latest project-artifact bookkeeping i
142
142
  Check if final review already completed (preferred source of truth: plan.md Reviews table):
143
143
 
144
144
  ```bash
145
- FINAL_ROW=$(grep -E "^\\|\\s*final\\s*\\|" "$PROJECT_PATH/plan.md" 2>/dev/null | head -1)
145
+ REVIEWS_SECTION=$(awk '
146
+ /^## Reviews[[:space:]]*$/ { in_reviews = 1; next }
147
+ in_reviews && /^##[[:space:]]/ { exit }
148
+ in_reviews { print }
149
+ ' "$PROJECT_PATH/plan.md" 2>/dev/null)
150
+ FINAL_ROW=$(printf '%s\n' "$REVIEWS_SECTION" | grep -E "^\\|\\s*final\\s*\\|\\s*code\\s*\\|" | tail -1)
146
151
  echo "$FINAL_ROW"
147
152
  ```
148
153
 
154
+ `REVIEWS_SECTION` is strictly the `## Reviews` section through the next
155
+ level-two heading. `FINAL_ROW` is the latest appended event in that ledger
156
+ matching Scope `final` and Type `code`. Earlier events remain history and must
157
+ not override the latest event. When fixes advance this event, match its artifact
158
+ filename and never move its status backward.
159
+
149
160
  **If final review row exists and status is `passed`:**
150
161
 
151
162
  - Example row:
@@ -168,10 +168,19 @@ pass through (Codex: `variant` name; Claude: `model` string; Cursor: opaque
168
168
  `model` string). `selection` carries `role`, `selectedValue`, `capped`,
169
169
  `selectionMode`, and policy fields; `selection.target` and an optional
170
170
  `providers.<provider>.target` carry route data. For implementer/fix dispatch,
171
- pass `--preferred <preferred-effort>` and use `selection.selectedValue` as the
172
- selected axis value when it is present. Never re-derive these from the policy
173
- label or a ceiling-only variant the resolver is the single compilation/join
174
- point.
171
+ use exactly one of two mutually exclusive selection paths:
172
+
173
+ 1. **Preferred-selection branch:** pass `--preferred <preferred-value>` when
174
+ asking the resolver to choose from a preference under an uncapped or other
175
+ preference-driven policy. Do not include `--candidate-model` or
176
+ `--candidate-effort`.
177
+ 2. **Exact-candidate branch:** pass `--candidate-model` and, when applicable,
178
+ `--candidate-effort` after selecting a concrete configured candidate for a
179
+ managed-capped route. This branch must not include `--preferred`.
180
+
181
+ Use `selection.selectedValue` as the selected axis value when it is present.
182
+ Never re-derive these controls from the policy label or a ceiling-only variant
183
+ — the resolver is the single compilation/join point.
175
184
 
176
185
  Print before phase work:
177
186
 
@@ -338,7 +347,8 @@ requested; never silently downgrade to it.
338
347
  4. For managed `Uncapped` implementer/fix work, selected effort is the preferred effort with no cap.
339
348
  5. For inherit/default mode, the resolver returns no selected dispatch args. Use the base/unpinned Codex role, log `Selected effort: provider-default`, display provider default effort when known, and do not describe this as managed uncapped behavior.
340
349
  6. For managed capped phase-implementer/fix dispatch, choose an exact
341
- configured candidate. For implementation, call
350
+ configured candidate and use the exact-candidate branch, not the
351
+ preferred-selection branch. For implementation, call
342
352
  `oat project dispatch-ceiling resolve --provider codex --role implementer --ceiling-tier <project-or-phase-tier> --candidate-model <model> --candidate-effort <effort> --escalation-level <route-level> --report-scope <phase-id> --report-action implementation --json`.
343
353
  For a bounded fix, use the same phase target with
344
354
  `--report-scope <phase-or-fix-scope> --report-action fix`. Read
@@ -363,10 +373,15 @@ requested; never silently downgrade to it.
363
373
  Claude rules:
364
374
 
365
375
  - Claude policy selection is model-based: `haiku < sonnet < opus < fable`.
366
- - Implementer/fix dispatch: classify the preferred model (`haiku`, `sonnet`, `opus`, or `fable`) and pass it to the resolver as `--preferred <preferred-model>`.
367
- - Capped managed policy: the resolver selects `min(preferred, resolved_cap)`.
368
- - Managed `Uncapped`: the resolver selects the preferred model with no cap.
369
- - Inherit/default: the resolver returns no selected model; omit `model` so Claude Code inherits host/default behavior.
376
+ - Implementer/fix dispatch chooses one selection branch:
377
+ - Managed `Uncapped`: use the preferred-selection branch with
378
+ `--preferred <preferred-model>` so the resolver selects the classified
379
+ model with no cap.
380
+ - Capped managed policy: use the exact-candidate branch below. The
381
+ `--candidate-model` call replaces the preferred-selection call and must not
382
+ include `--preferred`.
383
+ - Inherit/default: use neither selection branch; the resolver returns no
384
+ selected model, so omit `model` and inherit host/default behavior.
370
385
  - Review dispatch:
371
386
  - Capped managed policy: target the configured policy cap directly.
372
387
  - Managed `Uncapped` or inherit/default: no reviewer target exists; omit `model` and log inherited/default model behavior.