@open-agent-toolkit/cli 0.3.13 → 0.3.15

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 (124) hide show
  1. package/README.md +1 -1
  2. package/assets/bundle-metadata.json +1 -1
  3. package/assets/docs/contributing/index.md +14 -1
  4. package/assets/docs/contributing/markdown-features.md +38 -0
  5. package/assets/docs/contributing/skills.md +64 -2
  6. package/assets/docs/contributing/smoke-testing.md +23 -16
  7. package/assets/docs/contributing/updating-model-guidance.md +2 -2
  8. package/assets/docs/contributing/verifying-cursor-pins.md +1 -1
  9. package/assets/docs/docs-tooling/add-docs-to-a-repo.md +32 -0
  10. package/assets/docs/docs-tooling/agent-instructions.md +131 -0
  11. package/assets/docs/docs-tooling/index.md +1 -0
  12. package/assets/docs/docs-tooling/meta.json +1 -1
  13. package/assets/docs/docs-tooling/workflows.md +338 -2
  14. package/assets/docs/{cli-utilities → getting-started}/bootstrap.md +60 -5
  15. package/assets/docs/getting-started/concepts.md +120 -0
  16. package/assets/docs/getting-started/index.md +68 -0
  17. package/assets/docs/getting-started/meta.json +4 -0
  18. package/assets/docs/getting-started/quickstart.md +174 -0
  19. package/assets/docs/{cli-utilities → getting-started}/tool-packs.md +142 -14
  20. package/assets/docs/index.md +47 -48
  21. package/assets/docs/meta.json +6 -7
  22. package/assets/docs/provider-sync/commands.md +25 -2
  23. package/assets/docs/provider-sync/config.md +60 -1
  24. package/assets/docs/provider-sync/index.md +31 -15
  25. package/assets/docs/provider-sync/instruction-sync.md +32 -1
  26. package/assets/docs/provider-sync/manifest-and-drift.md +92 -0
  27. package/assets/docs/provider-sync/meta.json +1 -0
  28. package/assets/docs/provider-sync/pilot-with-a-team.md +236 -0
  29. package/assets/docs/provider-sync/scope-and-surface.md +37 -3
  30. package/assets/docs/reference/cli-reference.md +33 -33
  31. package/assets/docs/{cli-utilities → reference}/config-and-local-state.md +25 -9
  32. package/assets/docs/{cli-utilities → reference}/configuration.md +151 -34
  33. package/assets/docs/reference/file-locations.md +4 -1
  34. package/assets/docs/reference/index.md +13 -1
  35. package/assets/docs/reference/meta.json +7 -1
  36. package/assets/docs/reference/oat-directory-structure.md +1 -1
  37. package/assets/docs/{workflows/projects/artifacts.md → reference/project-artifacts.md} +4 -4
  38. package/assets/docs/{workflows/projects/state-machine.md → reference/project-state-machine.md} +28 -21
  39. package/assets/docs/{workflows/projects/repo-analysis.md → reference/repository-pr-comments.md} +2 -2
  40. package/assets/docs/reference/troubleshooting.md +125 -10
  41. package/assets/docs/reference/what-oat-writes.md +410 -0
  42. package/assets/docs/skills/brainstorm.md +77 -0
  43. package/assets/docs/skills/diagnostics.md +56 -0
  44. package/assets/docs/{workflows/skills → skills}/explainer-kit.md +121 -0
  45. package/assets/docs/skills/index.md +416 -0
  46. package/assets/docs/{workflows/skills → skills}/meta.json +4 -2
  47. package/assets/docs/{workflows/skills → skills}/recon.md +49 -0
  48. package/assets/docs/skills/repo-improve.md +254 -0
  49. package/assets/docs/skills/research.md +237 -0
  50. package/assets/docs/skills/session-closeout.md +61 -0
  51. package/assets/docs/workflows/advanced/autonomy.md +344 -0
  52. package/assets/docs/workflows/{projects → advanced}/cursor-cloud.md +69 -1
  53. package/assets/docs/workflows/{projects → advanced}/dispatch-ceiling.md +163 -18
  54. package/assets/docs/workflows/{projects → advanced}/evidence-layers.md +20 -13
  55. package/assets/docs/workflows/advanced/index.md +19 -0
  56. package/assets/docs/workflows/advanced/meta.json +13 -0
  57. package/assets/docs/workflows/{projects → advanced}/orchestration-model.md +108 -35
  58. package/assets/docs/workflows/{projects → advanced}/programmatic-execution.md +4 -4
  59. package/assets/docs/{cli-utilities → workflows/advanced}/workflow-gates.md +162 -8
  60. package/assets/docs/workflows/advanced/worktree-bootstrap.md +83 -0
  61. package/assets/docs/workflows/approvals-and-automation.md +261 -0
  62. package/assets/docs/workflows/backlog-and-planning/backlog-lifecycle.md +348 -0
  63. package/assets/docs/workflows/backlog-and-planning/index.md +13 -0
  64. package/assets/docs/workflows/backlog-and-planning/meta.json +4 -0
  65. package/assets/docs/workflows/backlog-and-planning/remote-project-management.md +303 -0
  66. package/assets/docs/workflows/choose-workflow.md +114 -0
  67. package/assets/docs/workflows/ideas/index.md +3 -3
  68. package/assets/docs/workflows/ideas/lifecycle.md +225 -1
  69. package/assets/docs/workflows/index.md +11 -62
  70. package/assets/docs/workflows/meta.json +10 -2
  71. package/assets/docs/workflows/projects/closeout/closeout-skills.md +538 -0
  72. package/assets/docs/workflows/projects/closeout/index.md +14 -0
  73. package/assets/docs/workflows/projects/closeout/meta.json +4 -0
  74. package/assets/docs/workflows/projects/{pr-flow.md → closeout/pr-flow.md} +1 -1
  75. package/assets/docs/workflows/projects/{retro.md → closeout/retro.md} +1 -1
  76. package/assets/docs/workflows/projects/execution/execution-skills.md +258 -0
  77. package/assets/docs/workflows/projects/{implementation-execution.md → execution/implementation-execution.md} +52 -38
  78. package/assets/docs/workflows/projects/execution/index.md +15 -0
  79. package/assets/docs/workflows/projects/execution/meta.json +9 -0
  80. package/assets/docs/workflows/projects/execution/picking-up-projects.md +376 -0
  81. package/assets/docs/{cli-utilities → workflows/projects/execution}/project-log.md +1 -1
  82. package/assets/docs/workflows/projects/index.md +38 -49
  83. package/assets/docs/workflows/projects/lifecycle.md +159 -74
  84. package/assets/docs/workflows/projects/meta.json +2 -23
  85. package/assets/docs/workflows/projects/{design-modes.md → planning/design-modes.md} +29 -0
  86. package/assets/docs/workflows/projects/planning/hill-checkpoints.md +167 -0
  87. package/assets/docs/workflows/projects/planning/index.md +16 -0
  88. package/assets/docs/workflows/projects/planning/meta.json +10 -0
  89. package/assets/docs/workflows/projects/planning/planning-skills.md +381 -0
  90. package/assets/docs/workflows/projects/{splitting.md → planning/splitting.md} +3 -3
  91. package/assets/docs/workflows/projects/planning/starting-projects.md +511 -0
  92. package/assets/docs/workflows/projects/{reviews.md → reviews/index.md} +51 -5
  93. package/assets/docs/workflows/projects/reviews/meta.json +4 -0
  94. package/assets/docs/workflows/projects/reviews/review-flavors.md +650 -0
  95. package/assets/docs/workflows/projects/{reviewing-oat-prs.md → reviews/reviewing-oat-prs.md} +3 -3
  96. package/assets/docs/workflows/waves/index.md +12 -0
  97. package/assets/docs/workflows/waves/meta.json +4 -0
  98. package/assets/docs/workflows/waves/wave-workflows.md +206 -0
  99. package/assets/public-package-versions.json +4 -4
  100. package/assets/skills/oat-docs/SKILL.md +19 -19
  101. package/assets/skills/oat-docs-analyze/SKILL.md +1 -1
  102. package/assets/skills/oat-docs-apply/SKILL.md +1 -1
  103. package/assets/skills/oat-docs-authoring/SKILL.md +1 -1
  104. package/assets/skills/oat-docs-bootstrap/SKILL.md +1 -1
  105. package/assets/skills/oat-doctor/SKILL.md +25 -25
  106. package/assets/templates/docs-app-fuma/app/[[...slug]]/page.tsx +14 -2
  107. package/assets/templates/docs-app-fuma/app/globals.css +1 -0
  108. package/dist/release/public-package-contract.js +1 -1
  109. package/package.json +2 -2
  110. package/assets/docs/cli-utilities/backlog-lifecycle.md +0 -80
  111. package/assets/docs/cli-utilities/index.md +0 -74
  112. package/assets/docs/cli-utilities/meta.json +0 -13
  113. package/assets/docs/cli-utilities/remote-project-management.md +0 -191
  114. package/assets/docs/guide/concepts.md +0 -88
  115. package/assets/docs/guide/index.md +0 -31
  116. package/assets/docs/guide/meta.json +0 -4
  117. package/assets/docs/quickstart.md +0 -88
  118. package/assets/docs/workflows/projects/autonomy.md +0 -196
  119. package/assets/docs/workflows/projects/hill-checkpoints.md +0 -93
  120. package/assets/docs/workflows/projects/picking-up-projects.md +0 -124
  121. package/assets/docs/workflows/projects/review-flavors.md +0 -138
  122. package/assets/docs/workflows/skills/index.md +0 -184
  123. package/assets/docs/workflows/skills/repo-improve.md +0 -89
  124. package/assets/docs/workflows/wave-workflows.md +0 -77
@@ -0,0 +1,650 @@
1
+ ---
2
+ title: Review Flavors
3
+ description: 'The four OAT project review flavors, when each fires in the lifecycle, and who resolves its reviewer target.'
4
+ ---
5
+
6
+ # Review Flavors
7
+
8
+ Looking for which review skill to run? Skip to
9
+ [Choosing a Review Skill](#choosing-a-review-skill), which compares the eight
10
+ review skills and then describes each one. The sections before it explain how
11
+ OAT picks and isolates the reviewer model.
12
+
13
+ OAT projects run reviews at several different lifecycle points, and those points
14
+ have different independence requirements. A self-review that checks a freshly
15
+ written plan does not need the same producer isolation as a lifecycle gate that
16
+ signs off on the final artifact. Rather than force one reviewer-selection rule
17
+ onto every point, OAT recognizes **four review flavors**, each with its own
18
+ target-resolution policy layered on the shared reviewer role class.
19
+
20
+ The distinguishing question is always _"who resolves this review's target, and
21
+ how independent must that target be from whatever produced the work?"_ The four
22
+ flavors answer it differently while preserving one invariant: the reviewer runs
23
+ **at or above the ceiling** (see [Dispatch Policy](../../advanced/dispatch-ceiling.md)). Gate
24
+ independence is project policy layered on the generic reviewer role class
25
+ described in the `oat-project-dispatch-subagents` lifecycle-role table; this page
26
+ covers _which_ flavor fires _when_ and _who_ resolves its target, and links out
27
+ for the deep review request/receive mechanics.
28
+
29
+ ## Quick Look
30
+
31
+ - What it does: names the four review flavors and states who resolves each
32
+ one's reviewer target.
33
+ - When to use it: when you need to know which review fires at a lifecycle point
34
+ and whether it inherits, pins the ceiling, or requires an independent gate.
35
+ - Primary sources: `oat-project-implement` phase-execution mechanics, the
36
+ `oat-project-dispatch-subagents` lifecycle-role table, and the OAT design
37
+ decision that defined these four flavors.
38
+
39
+ ## Flow map
40
+
41
+ === "Diagram"
42
+
43
+ ![Review flavors: planning self-review inherits the planning parent; implementation self-review resolves the dispatch ceiling to an at-ceiling pin, inherit, or an exact CLI reviewer; phase and lifecycle gates run a separate reviewer CLI from a configured exec target, and the lifecycle gate's reviewer CLI may spawn a nested reviewer child](/diagrams/review-flavors-light.svg)
44
+ ![Review flavors: planning self-review inherits the planning parent; implementation self-review resolves the dispatch ceiling to an at-ceiling pin, inherit, or an exact CLI reviewer; phase and lifecycle gates run a separate reviewer CLI from a configured exec target, and the lifecycle gate's reviewer CLI may spawn a nested reviewer child](/diagrams/review-flavors-dark.svg)
45
+
46
+ === "Mermaid source"
47
+
48
+ ```mermaid
49
+ flowchart TD
50
+ subgraph Planning
51
+ PL["Planning-phase\nartifact self-review"] --> PLR["Inherit planning parent"]
52
+ PLR --> PLT["Parent model\n(root already at/above ceiling)"]
53
+ end
54
+
55
+ subgraph Implementation
56
+ IM["Root-owned phase\nself-review"] --> IMR["Resolve dispatch ceiling"]
57
+ IMR --> IMPIN["At-ceiling pin\n(ceiling final candidate)"]
58
+ IMR --> IMINH["Inherit\n(only if dispatcher known at/above ceiling)"]
59
+ IMR --> IMCLI["Exact CLI reviewer\n(selected pre-launch)"]
60
+ end
61
+
62
+ subgraph Gates
63
+ PG["Phase review gate\n(external)"] --> PGR["Configured exec target\n(gates.execTargets)"]
64
+ PGR --> PGT["Separate reviewer CLI\n(prefers another model family;\nfalls back with a warning)"]
65
+
66
+ LG["Lifecycle / final gate"] --> LGR["Configured exec target\n(gates.execTargets)"]
67
+ LGR --> LGT["Separate reviewer CLI\n(never replaced by self-review;\nfalls back with a warning)"]
68
+ LGT -. may spawn .-> LGN["Nested managed\nreviewer child inside gate"]
69
+ end
70
+ ```
71
+
72
+ The dotted branch marks the only flavor that may **spawn a nested managed
73
+ reviewer child** inside the gate exec target: the lifecycle/final gate.
74
+
75
+ ## The four flavors
76
+
77
+ | Flavor | Lifecycle point | Target resolution |
78
+ | ----------------------------------- | ------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
79
+ | Planning-phase artifact self-review | Auto artifact-review loop for plan/spec/design | Inherit the planning parent by default (root is already at/above ceiling) |
80
+ | Implementation-phase self-review | Phase and final code reviews dispatched by `oat-project-implement` | Resolve the dispatch ceiling; pin the ceiling's final candidate (at-ceiling pin); inherit only when the review-owning dispatcher is known to be at/above ceiling; else select an exact CLI reviewer pre-launch |
81
+ | Phase review gate (external) | Optional non-pausing gate after a phase passes its self-review | Separate reviewer CLI chosen from the configured exec targets (`gates.execTargets`), unconstrained by native catalog; prefers another model family but falls back with a warning; fails if no target can start |
82
+ | Lifecycle / final gate | End-of-lifecycle sign-off | Separate reviewer CLI chosen the same way; never replaced by a same-context self-review; fails if no target can start; may spawn a nested managed reviewer child inside the gate exec target |
83
+
84
+ The first two flavors are **self-reviews**. Planning review inherits its
85
+ producing parent by default; implementation phase review is dispatched by the
86
+ project root after the phase producer returns. The last two are **gates** — an
87
+ external, configured, producer-independent target. Phase implementation may run
88
+ _below_ the review ceiling for cost reasons, but review must never silently
89
+ inherit the below-ceiling phase agent.
90
+
91
+ Pre-plan inheritance has a narrow executable guard. When dispatch resolution
92
+ reports `unresolvedReason: policy`, an artifact review of `discovery`, `design`,
93
+ or `spec` deliberately inherits the current planning context and records
94
+ `selection_reason: inherit (pre-plan; no project policy)`. An explicit project
95
+ policy is still honored at those scopes. Missing or incomplete ladders
96
+ (`unresolvedReason: ladder | both`) fail closed, as do plan-scope artifact
97
+ reviews and every code review without a resolved policy. Gate exec-target
98
+ selection is separate and unaffected.
99
+
100
+ ## Independence: what blocks and what falls back
101
+
102
+ The invariant across all four flavors is that the reviewer runs **at or above
103
+ the ceiling**. What changes between flavors is the required _independence from
104
+ the producer_ (the agent that wrote the work). For the two gate flavors, three
105
+ different things can happen, and only two of them stop the workflow:
106
+
107
+ - **Findings that block.** The reviewer ran and reported findings at or above
108
+ the gate's threshold. The gate's `onFailure` setting decides what happens
109
+ next: `block` fixes and reruns, `prompt` asks a person, and `warn` records
110
+ the failure and continues.
111
+ - **Operational failures stay blocked.** The reviewer could not start, timed
112
+ out without writing a review, or wrote a review OAT could not validate or
113
+ match to this run. Nothing was reviewed. `oat-project-implement` and
114
+ `oat-project-lite` keep these failures blocked whatever `onFailure` says.
115
+ The planning skills handle them differently; see
116
+ [When the gate finds blocking problems](../../advanced/workflow-gates.md#when-the-gate-finds-blocking-problems).
117
+ - **Reviewer selection falls back.** By default (`--avoid same-family`) the gate
118
+ prefers a reviewer from a different model family than the producer. If none
119
+ is available, it runs the best available reviewer instead, which can be the
120
+ same model family or even the same agent CLI, and records a warning. It does
121
+ not block. The gate result's `diversity.achieved` field shows what happened:
122
+ only `different-family` means the reviewer came from another family. With
123
+ `--avoid same-runtime`, the gate does not fall back: it fails if no other
124
+ agent CLI is available, but it excludes the current CLI only when OAT
125
+ recognizes it, and it never checks the model family. See
126
+ [How independent the reviewer must be](../../advanced/workflow-gates.md#how-independent-the-reviewer-must-be).
127
+
128
+ So a gate never quietly replaces itself with a self-review in the producer's
129
+ own session, and it never reports a pass when no review ran. It does not
130
+ guarantee a reviewer from a different model family; check `diversity.achieved`
131
+ before you present a gate review as independent evidence.
132
+
133
+ Per flavor:
134
+
135
+ - **Planning self-review** needs the least independence. The planning root
136
+ already runs at or above the review ceiling, so inheriting the parent model
137
+ satisfies the invariant without managed re-pinning. Pinning is _possible_
138
+ once the ceiling is resolved during planning, but it is not the default.
139
+ - **Implementation self-review** needs ceiling-level capability but not
140
+ cross-family isolation. The root resolves the dispatch ceiling and pins the
141
+ tier's final candidate after the phase report. Inheritance is allowed only
142
+ when the root dispatcher is _known_ to be at or above the ceiling; otherwise
143
+ an exact provider CLI reviewer is selected before launch. Reviewer selection
144
+ is never delegated to the phase implementer.
145
+ - **Phase review gate** aims for cross-family independence. It runs a separate
146
+ reviewer CLI chosen from the exec targets in `gates.execTargets`,
147
+ unconstrained by the harness's native subagent catalog, and prefers a
148
+ different model family as described above. If no target can start at all,
149
+ the gate fails and stays blocked; it does not downgrade to a review in the
150
+ producer's context. If only a same-family target is available, it runs that
151
+ target and records a warning.
152
+ - **Lifecycle / final gate** also runs a separate reviewer CLI, chosen the same
153
+ way, outside the producer's session. It never substitutes a same-context
154
+ self-review, and it is the one flavor permitted to spawn a nested managed
155
+ reviewer child _inside_ the gate exec target when the gate's own contract
156
+ calls for it. Its reviewer can still fall back to the same model family, with
157
+ a warning.
158
+
159
+ Gate independence is not a property of the generic reviewer class; it is project
160
+ policy layered on top of it. The dispatch adapter resolves the configured gate
161
+ target before launch and passes it as exact selection input. What fails closed
162
+ is the review itself: a gate whose reviewer cannot start, or whose review
163
+ cannot be validated, blocks instead of quietly reusing whatever produced the
164
+ work. Reviewer selection is best effort, as described above. For the
165
+ gate configuration keys and non-pausing behavior, see
166
+ [Workflow gates](../../advanced/workflow-gates.md) and the
167
+ [phase review gate](index.md#phase-review-gate) section of the review doc.
168
+
169
+ ## Related
170
+
171
+ - [Reviews](index.md) — the review request/receive flows and the deep review
172
+ contract these flavors plug into.
173
+ - [Dispatch Policy](../../advanced/dispatch-ceiling.md) — named ceilings, at-ceiling reviewer
174
+ selection, and the Dispatch Report V1 / producer-provenance record.
175
+ - [HiLL Checkpoints](../planning/hill-checkpoints.md) — how the non-pausing phase review gate
176
+ relates to pauseable lifecycle checkpoints.
177
+ - [Orchestration Model](../../advanced/orchestration-model.md) — the native-first dispatch
178
+ topology these reviewer roles run inside.
179
+ - [Workflow gates](../../advanced/workflow-gates.md) — gate configuration
180
+ and exec-target selection.
181
+ - [Smoke testing](../../../contributing/smoke-testing.md) — how the fixture makes
182
+ these flavors observable and assertable.
183
+
184
+ ## Choosing a Review Skill
185
+
186
+ The four lifecycle flavors above describe reviewer selection and independence.
187
+ The eight skills below answer a different question: **where is the review,
188
+ and where should its findings go?**
189
+
190
+ - **Provide** examines work and produces findings; **receive** triages findings
191
+ that already exist.
192
+ - **Ad-hoc** produces standalone findings or tasks without changing project
193
+ lifecycle artifacts; **project** uses the project's requirements, plan and
194
+ review ledger.
195
+ - **Local** exchanges Markdown review artifacts; **remote** exchanges GitHub
196
+ PR reviews and comments. “Remote” describes the exchange, not a requirement
197
+ to own a second physical machine.
198
+
199
+ Put together, pick a skill by answering three questions:
200
+
201
+ 1. **Is this work tracked as an OAT project?** Yes: use an `oat-project-review-*`
202
+ skill. No, or you want findings kept out of the project: use an
203
+ `oat-review-*` (ad-hoc) skill.
204
+ 2. **Are you producing findings or acting on them?** Producing: a `provide`
205
+ skill. Acting on findings someone already produced: a `receive` skill.
206
+ 3. **Where do the findings live?** In a Markdown file in this checkout: the
207
+ local skill. On a GitHub pull request: the `-remote` skill.
208
+
209
+ The two project remote skills are normally used as a pair, often on different
210
+ machines or by different people: the reviewer runs
211
+ `oat-project-review-provide-remote` and posts findings to the PR, then the
212
+ author runs `oat-project-review-receive-remote` in the checkout that owns the
213
+ project, which turns those findings into project tasks. The ad-hoc remote
214
+ skills pair the same way without project tracking.
215
+
216
+ **Terms used in these skill guides:**
217
+
218
+ - **Active project:** the project OAT works on in this checkout when you do
219
+ not name one, stored as `activeProject` in the local, uncommitted
220
+ `.oat/config.local.json`.
221
+ - **Synced project:** a project whose artifacts travel on their own Git ref on
222
+ `origin` instead of on your branch. OAT saves its tracking changes by
223
+ pushing that ref (`oat project push`) instead of committing on your branch.
224
+ - **Review artifact:** the Markdown file a local review writes. Project
225
+ reviews go in the project's `reviews/` directory; once received, the file is
226
+ moved to `reviews/archived/`.
227
+ - **Dispatch policy:** the project's rule for which models and effort levels
228
+ OAT may use when it launches subagents such as the reviewer. See
229
+ [Dispatch Policy](../../advanced/dispatch-ceiling.md).
230
+ - **Gate:** a configured check, usually an independent review run by another
231
+ model, that must pass before the workflow continues. See
232
+ [Workflow gates](../../advanced/workflow-gates.md).
233
+
234
+ | You want to | Ad-hoc | Project-scoped |
235
+ | --------------------------------------- | --------------------------- | ----------------------------------- |
236
+ | Review local work | `oat-review-provide` | `oat-project-review-provide` |
237
+ | Triage a local review | `oat-review-receive` | `oat-project-review-receive` |
238
+ | Review and post findings on a GitHub PR | `oat-review-provide-remote` | `oat-project-review-provide-remote` |
239
+ | Triage GitHub feedback | `oat-review-receive-remote` | `oat-project-review-receive-remote` |
240
+
241
+ A project-required review does not always require a previously active pointer:
242
+ project provide can resolve an explicitly named project, and remote project
243
+ provide can resolve it from the PR or `--project`. Remote project **receive**
244
+ currently requires a valid active project with its tracking artifacts; select
245
+ it before receiving. Do not infer one variant's prerequisites from its twin.
246
+
247
+ All variants use Critical, High, Medium and Low severities. A reviewer reports
248
+ the issue; receive establishes its disposition. Remote posting, replies and
249
+ any optional ad-hoc remote fix-and-push flow have separate approval boundaries.
250
+ Examples below are agent skill invocations, not terminal `oat` subcommands.
251
+
252
+ ## oat-review-provide
253
+
254
+ Review a bounded set of local changes without creating or resuming an OAT
255
+ project. Scope can be unstaged changes, staged changes, an explicit file list
256
+ or a commit range. Neither this skill nor `oat-review-provide-remote` can send
257
+ the review to a different model or runtime: each runs the review inline in the
258
+ agent session where you invoke it, so to get a review from another model,
259
+ invoke the skill in that model's agent tool.
260
+
261
+ **Invocation:**
262
+
263
+ ```text
264
+ /oat-review-provide staged
265
+ ```
266
+
267
+ If you omit scope, the skill asks what to review and recommends unstaged work
268
+ for an in-progress review. It shows the resolved scope for confirmation.
269
+
270
+ **Needs an active OAT project:** no.
271
+
272
+ **Prerequisites:** The selected files or changes must be available locally.
273
+ No existing project or active pointer is required. Agree whether findings
274
+ should be local-only, tracked or inline; these are output policies, not
275
+ different code-review scopes.
276
+
277
+ **What it does without asking:** After you confirm the scope, it writes the
278
+ review artifact: by default to the untracked
279
+ `.oat/projects/local/orphan-reviews/`, or to `.oat/repo/reviews/` when that
280
+ directory exists and is tracked. It commits a tracked artifact only after
281
+ asking you; local and inline output is never committed unless you request it.
282
+
283
+ **Example scenario:** You staged a small callback fix that does not warrant a
284
+ tracked project. Use the ad-hoc local provide variant to review precisely that
285
+ staged diff. The reviewer can flag a missing input check without interpreting
286
+ the change as fulfillment of a project plan.
287
+
288
+ **Expected output:** Findings with severity, file locations and verification
289
+ guidance, plus the reviewed scope and artifact location or an explicit
290
+ inline-only result. File output defaults to local active orphan-review storage
291
+ unless the repository's tracked review convention applies; new findings are
292
+ not written directly into an archive.
293
+
294
+ **Next step:** Pass the active artifact to ad-hoc review-receive for triage.
295
+ If you chose inline-only output, request a file artifact when you need that
296
+ later artifact-based handoff. Reviewing does not implement the fixes; committing
297
+ a tracked review artifact is an explicit bookkeeping choice.
298
+
299
+ ## oat-review-receive
300
+
301
+ Turn an existing local review into standalone tasks, preserving explicit
302
+ decisions about what will be fixed, deferred or dismissed.
303
+
304
+ **Invocation:**
305
+
306
+ ```text
307
+ /oat-review-receive
308
+ ```
309
+
310
+ An explicit review-artifact path can select the input. Without one, the skill
311
+ discovers active artifacts under repository-review and local orphan-review
312
+ storage, orders candidates by their recorded generation time and reports which
313
+ it selected. Archived artifacts are history, not default triage inputs.
314
+
315
+ **Needs an active OAT project:** no.
316
+
317
+ **Prerequisites:** A readable, nonempty Markdown review artifact exists. No
318
+ project is required, and this rail does not mutate `plan.md`, `state.md` or
319
+ `implementation.md`.
320
+
321
+ **What it does without asking:** After triage, it moves the consumed artifact
322
+ into the sibling `archived/` directory, adding a timestamp suffix if a file
323
+ with that name is already there. It makes no commits: if the review came from
324
+ the tracked `.oat/repo/reviews/`, commit the move yourself.
325
+
326
+ **Example scenario:** The callback review has one High finding and a Low
327
+ cleanup note. Receive shows both before asking for dispositions. You convert
328
+ the missing input check into a task and either convert the cleanup or explain
329
+ why it should be deferred. Use this local ad-hoc variant because the input is
330
+ a Markdown artifact and the output should remain outside project tracking.
331
+
332
+ **Expected output:** Severity counts, converted/deferred/dismissed decisions
333
+ with rationale, and a standalone task list inline or at a requested path.
334
+ After triage, the consumed artifact moves to its sibling archive and the
335
+ archived location is reported. A zero-findings review reports a clean result
336
+ and stops.
337
+
338
+ **Next step:** Implement the accepted tasks through your chosen development
339
+ flow, then request another review if needed. This receive skill does not
340
+ change code or silently start implementation.
341
+
342
+ ## oat-review-provide-remote
343
+
344
+ Review a GitHub PR and post its findings without using project lifecycle
345
+ context. The GitHub review, rather than a local Markdown artifact on the
346
+ reviewing machine, is the handoff to the author.
347
+
348
+ **Invocation:**
349
+
350
+ ```text
351
+ /oat-review-provide-remote --pr 84
352
+ ```
353
+
354
+ **Needs an active OAT project:** no.
355
+
356
+ **Prerequisites:** The PR is reachable through the current repository remote,
357
+ and `gh` is installed and authenticated. No OAT project is required. The
358
+ `oat-review-provide` skill (utility pack) must also be installed, because its
359
+ review template supplies the checklist; without it the skill stops. Confirm
360
+ the selected PR, and separately approve the review body before posting it.
361
+
362
+ **What it does without asking:** After you confirm the PR number, it creates a
363
+ temporary worktree, runs `gh pr checkout` inside it and removes it when
364
+ finished; if the checkout fails, it switches to diff-only review with a
365
+ warning. It posts nothing to GitHub until you approve the review body, and it
366
+ writes no local artifact, commits nothing and pushes nothing.
367
+
368
+ **Example scenario:** A teammate opened PR 84 for the standalone callback fix.
369
+ Use remote ad-hoc provide so the findings arrive on that PR, even though the
370
+ reviewer has no active project. The skill normally acquires a temporary
371
+ worktree for context rather than changing the caller's checkout. Diff-only
372
+ mode is available with `--no-checkout`, with a degraded-context warning, and
373
+ is used automatically when the checkout fails.
374
+
375
+ **Expected output:** A single approved GitHub review containing severity
376
+ counts, inline findings where the diff supports them and body findings for
377
+ locations outside the diff. The report identifies the reviewed PR head,
378
+ scope and posting result. Critical or High findings produce
379
+ `REQUEST_CHANGES`; otherwise the verdict is `COMMENT`, not automatic approval.
380
+ No local review artifact, implementation commit or project bookkeeping is
381
+ created by this variant.
382
+
383
+ **Next step:** On the author's side, use ad-hoc remote receive to triage the
384
+ comments. For re-review, guarded prior-review metadata may narrow the scope;
385
+ if no valid prior review is available, the normal path reviews the full PR.
386
+ A failed post is not a delivered review: follow the reported diagnosis.
387
+
388
+ ## oat-review-receive-remote
389
+
390
+ Fetch unresolved GitHub review feedback and turn it into standalone tasks.
391
+ This is the receiving half of the remote ad-hoc flow.
392
+
393
+ **Invocation:**
394
+
395
+ ```text
396
+ /oat-review-receive-remote --pr 84
397
+ ```
398
+
399
+ **Needs an active OAT project:** no.
400
+
401
+ **Prerequisites:** `npx agent-reviews` is available and GitHub authentication
402
+ is configured. No project is required. The selected PR is confirmed before
403
+ comment ingestion.
404
+
405
+ **What it does without asking:** After you confirm the PR, it fetches the
406
+ unresolved comments and builds the task list. Every action beyond that needs
407
+ your explicit yes: applying fixes, committing them and running `git push`
408
+ happen only after you accept the offer, and replies are posted to GitHub only
409
+ after you approve them.
410
+
411
+ **Example scenario:** PR 84 now has the callback finding from remote provide
412
+ and a separate reviewer comment about an edge case. Use remote ad-hoc receive
413
+ to gather the unresolved feedback, classify the actual issues and decide what
414
+ to convert. This variant is appropriate because the source is GitHub and the
415
+ accepted work should become standalone tasks, not project task IDs.
416
+
417
+ **Expected output:** A finding register and task list, with severity and
418
+ converted/deferred/dismissed counts. No unresolved comments produces a clean
419
+ status and stops. Deferrals and dismissals need concrete rationale, including
420
+ for Low findings; a GitHub changes-requested state is evidence to inspect,
421
+ not an automatic severity assignment for every comment.
422
+
423
+ **Next step:** Decide whether to implement the tasks yourself or authorize the
424
+ skill's optional fix, verification, commit and push flow. That flow requires
425
+ explicit confirmation after the task list. Posting replies is another explicit
426
+ choice, and replies distinguish fixed work from merely acknowledged tasks.
427
+ Neither optional action changes project lifecycle artifacts on this ad-hoc rail.
428
+
429
+ ## oat-project-review-provide
430
+
431
+ Review project work against the requirements and artifacts appropriate to its
432
+ workflow mode. Use this when the question is not only “is the code sound?” but
433
+ also “does this work satisfy the agreed plan?”
434
+
435
+ **Invocation:**
436
+
437
+ ```text
438
+ /oat-project-review-provide code p02
439
+ ```
440
+
441
+ Code scope can select a task, phase, contiguous phase range or final review.
442
+ Artifact review selects an artifact instead, for example
443
+ `/oat-project-review-provide artifact plan`. Without arguments, the skill
444
+ proposes or asks for type and scope, then confirms a manual review.
445
+
446
+ **Needs an active OAT project:** yes, or a project you name explicitly in the
447
+ request.
448
+
449
+ **Prerequisites:** An initialized project must resolve from the active pointer
450
+ or an explicitly supplied project/review target. Its core artifacts must be
451
+ committed before review. Code review needs completed implementation work and
452
+ the mode-appropriate requirements sources; lite review does not require absent
453
+ discovery, spec or design artifacts. Code reviews and plan artifact reviews
454
+ also need a resolved dispatch policy (`oat_dispatch_policy` in `state.md` or
455
+ `workflow.dispatchPolicy.*` in config); without one the review stops before
456
+ launching a reviewer. Discovery, spec and design artifact reviews run without
457
+ a policy by using the current session's model.
458
+
459
+ **What it does without asking:** After you confirm the review type and scope,
460
+ it dispatches an `oat-reviewer` subagent when the host supports one (on Codex
461
+ it may first ask you to authorize that). It writes the review artifact to
462
+ `reviews/`, adds a `received` row to the Reviews table in `plan.md`, and
463
+ commits both as `chore(oat): record {scope} review artifact`; a synced project
464
+ pushes its project ref instead. It skips that commit only if you explicitly
465
+ ask to defer it and confirm. If the project's branch is checked out in another
466
+ worktree, the artifact and commit land there; if the branch differs from
467
+ yours and has no worktree, the skill stops and offers to `git checkout` that
468
+ branch, review inline only, or cancel. A review started by a gate runs with no
469
+ confirmation prompts.
470
+
471
+ **Example scenario:** Checkout-hardening has finished phase p02, including
472
+ caller updates. Request a local project code review of p02 to check those
473
+ changes against the plan and implementation evidence, not just an arbitrary
474
+ branch diff. If the project is not active, name its path or project explicitly
475
+ when asking for the review rather than switching to the ad-hoc rail by accident.
476
+
477
+ **Expected output:** A scoped review artifact in the project's active
478
+ `reviews/` directory, with requirements alignment, findings, verification
479
+ guidance and a next-step recommendation, plus a `received` row in `plan.md`
480
+ and the bookkeeping commit described above. An explicitly selected
481
+ inline-only flow does not create the ordinary artifact or commit. A blocked reviewer is not a passed
482
+ review with zero findings.
483
+
484
+ **Next step:** Use project review-receive for the active artifact. If findings
485
+ identify stale requirements artifacts rather than a code defect, preserve that
486
+ distinction during triage; do not automatically change defensible code to match
487
+ an outdated description.
488
+
489
+ ## oat-project-review-receive
490
+
491
+ Process an actionable local project review and reconnect its findings to the
492
+ project's execution or artifact-editing flow.
493
+
494
+ **Invocation:**
495
+
496
+ ```text
497
+ /oat-project-review-receive
498
+ ```
499
+
500
+ **Needs an active OAT project:** yes, or a project you name. Without one, the
501
+ skill can only offer to hand an ad-hoc review to `oat-review-receive`.
502
+
503
+ **Prerequisites:** A valid project and an active project review must resolve.
504
+ The normal input is an actionable artifact in the top level of its `reviews/`
505
+ directory. A named project can supply the target even without an active
506
+ pointer. Historical archived reviews are not automatically received again;
507
+ discovery of an ad-hoc review routes to the ad-hoc receive skill instead.
508
+
509
+ **What it does without asking:** For a manual code review it asks you to
510
+ decide each finding, then applies your decisions without further prompts: it
511
+ adds
512
+ fix tasks to `plan.md`, updates `implementation.md` and `state.md`, moves the
513
+ review artifact to `reviews/archived/`, and commits all of that together as
514
+ `chore(oat): record review findings and add fix tasks ({scope})`. A synced
515
+ project pushes its project ref instead. The commit is required; it is
516
+ deferred only if you explicitly approve. Reviews started by checkpoint
517
+ auto-review or by a gate are dispositioned with no prompts at all, and after a
518
+ passing gate it may apply small, contained fixes directly and commit them with
519
+ the bookkeeping. When the same scope has had 3 review cycles (not counting
520
+ gate reviews), further automated cycles are blocked and the skill asks
521
+ whether to review the findings manually, proceed to the PR, or explicitly
522
+ override the limit.
523
+
524
+ **Example scenario:** The p02 reviewer found a missed caller and a stale plan
525
+ statement. Project receive explains the findings before disposition. For a
526
+ manual code review, accepted fixes become stable review-fix task IDs in the
527
+ plan; for an artifact review, approved changes are applied directly to the
528
+ artifact rather than pretending they are implementation tasks. Use the project
529
+ local variant because the input is a local project review event and its
530
+ dispositions belong in the project ledger.
531
+
532
+ **Expected output:** Finding analysis and dispositions, updated project
533
+ tracking and the review artifact moved to `reviews/archived/` under a name that
534
+ does not overwrite earlier reviews. For a code review, the skill then commits
535
+ `plan.md`,
536
+ `implementation.md`, `state.md` and the archive move together (synced projects
537
+ push the project ref instead). The outcome reports added tasks or artifact
538
+ dispositions, the review cycle count out of 3, and the next route. Reviews
539
+ started automatically or by a gate have their own disposition rules; findings
540
+ below a passing gate's threshold are still recorded, not silently erased, and
541
+ small contained fixes may be applied directly during that sweep.
542
+
543
+ **Next step:** Review any added tasks, then run implementation when ready, or
544
+ choose its offered execution handoff: execute the fix tasks now (which can
545
+ invoke `oat-project-implement` directly), review the plan first, or exit. For artifact-review changes, request a
546
+ new artifact review or follow the phase's approval flow. Final review also
547
+ resurfaces deferred Medium findings; receiving one phase review does not
548
+ automatically close the project.
549
+
550
+ ## oat-project-review-provide-remote
551
+
552
+ Review a project's GitHub PR using its requirements context, then post findings
553
+ back without writing project tracking on the reviewing machine.
554
+
555
+ **Invocation:**
556
+
557
+ ```text
558
+ /oat-project-review-provide-remote code p02 --pr 84 --project .oat/projects/shared/checkout-hardening
559
+ ```
560
+
561
+ **Needs an active OAT project:** no. The project is found from the PR diff or
562
+ from `--project`, not from the active pointer.
563
+
564
+ **Prerequisites:** The PR is reachable and `gh` is installed and authenticated.
565
+ An existing project must resolve from exactly one project's `state.md` in the
566
+ PR diff or from the explicit `--project` path. The override is needed when the
567
+ diff identifies zero or multiple projects. Its artifacts must be available
568
+ for mode-aware review. A local active-project pointer is not required.
569
+
570
+ **What it does without asking:** After you confirm the PR number, it creates a
571
+ temporary worktree, runs `gh pr checkout` inside it (falling back to
572
+ diff-only review if that fails) and removes the worktree when finished. It
573
+ dispatches an `oat-reviewer` subagent to perform the review when the host
574
+ supports one. It posts to GitHub only after you approve the review body, and
575
+ it never writes project files, commits or pushes on the reviewing machine.
576
+
577
+ **Example scenario:** The checkout-hardening author asks another workstation
578
+ to review phase p02 on PR 84. That reviewer has no active project, and the PR
579
+ also touches an unrelated project's state. Use remote project provide with the
580
+ explicit project path so the review checks checkout-hardening's plan and posts
581
+ findings tagged for that project and scope, rather than mixing the two projects
582
+ or producing an ad-hoc review.
583
+
584
+ **Expected output:** After explicit posting approval, one GitHub review with
585
+ project and scope metadata, severity counts, supported inline findings and a
586
+ report of the PR head reviewed. The reviewing checkout is preserved through
587
+ temporary-worktree acquisition or the declared diff-only fallback. The skill
588
+ writes no local review artifact and makes no project bookkeeping, fixes,
589
+ commits or pushes on the reviewing machine. Its verdict is `REQUEST_CHANGES`
590
+ for Critical/High findings and `COMMENT` otherwise.
591
+
592
+ **Next step:** On the originating checkout, select the project and run project
593
+ remote receive. A re-review can narrow only against guarded prior metadata for
594
+ the same project, scope and invocation lineage; an unrelated project's review
595
+ must not become the baseline.
596
+
597
+ ## oat-project-review-receive-remote
598
+
599
+ Bring unresolved GitHub review feedback into an existing project's task and
600
+ review ledger. Unlike ad-hoc remote receive, this skill does not directly
601
+ implement code fixes.
602
+
603
+ **Invocation:**
604
+
605
+ ```text
606
+ /oat-project-open checkout-hardening
607
+ /oat-project-review-receive-remote --pr 84
608
+ ```
609
+
610
+ **Needs an active OAT project:** yes. Open the project first; the reviewing
611
+ machine's ability to infer a project from the PR does not apply here.
612
+
613
+ **Prerequisites:** The active project is valid and has `plan.md`,
614
+ `implementation.md` and `state.md`. `npx agent-reviews` is available and GitHub
615
+ authentication is configured. Confirm the selected PR; the reviewing machine's
616
+ ability to infer a project does not remove this receiving variant's active
617
+ project requirement.
618
+
619
+ **What it does without asking:** After you confirm the PR, it fetches the
620
+ unresolved comments and asks you to decide each finding. It then writes a new
621
+ review artifact for this receive, adds fix tasks for the findings you
622
+ converted to `plan.md`, updates `implementation.md` and `state.md`, and commits
623
+ them in one commit, `chore(oat): record remote review findings and add fix
624
+ tasks (pr-#<N>)`. A synced project pushes its project ref instead. The commit
625
+ is required; it is deferred only if you explicitly approve. If the PR has no
626
+ unresolved comments, it still records a `passed` review in `plan.md` and
627
+ commits it as `chore(oat): record clean remote review (pr-#<N>)`. After 3
628
+ receive cycles on the same scope, it stops and asks whether to escalate the
629
+ scope or resolve the findings manually. Replies are posted to GitHub only after
630
+ you approve them, and it never implements code fixes itself.
631
+
632
+ **Example scenario:** The remote p02 review on PR 84 identified a missing
633
+ caller check. Back in the authoring checkout, open checkout-hardening and
634
+ receive that PR's unresolved feedback. The agent presents the finding and
635
+ creates a stable review-fix task in the correct project, keeping later
636
+ implementation and re-review connected to the same event.
637
+
638
+ **Expected output:** Findings and dispositions, created `pNN-tNN` task IDs when
639
+ needed, a review artifact for this receive (each receive gets its own
640
+ timestamped file), and `plan.md`, `implementation.md` and `state.md` updated
641
+ and committed together with that artifact (synced projects push the project
642
+ ref). A PR with no unresolved comments is still recorded and committed as a
643
+ passed review. After 3 receive cycles on the same scope, the skill stops and
644
+ asks how to proceed rather than silently repeating ingestion. Optional GitHub
645
+ replies require explicit approval and describe the actual disposition.
646
+
647
+ **Next step:** Run implementation for added fix tasks, then request re-review
648
+ of the relevant scope. If no tasks were needed and the review passed, follow
649
+ the reported finalization route. Receiving feedback is not itself proof that
650
+ the changes were fixed, verified, pushed or approved for merge.
@@ -59,6 +59,6 @@ commands do not depend on editor discovery.
59
59
 
60
60
  ## Related
61
61
 
62
- - [PR Flow](pr-flow.md)
63
- - [Project Artifacts](artifacts.md)
64
- - [Picking Up Projects](picking-up-projects.md)
62
+ - [PR Flow](../closeout/pr-flow.md)
63
+ - [Project Artifacts](../../../reference/project-artifacts.md)
64
+ - [Picking Up Projects](../execution/picking-up-projects.md)
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: Waves
3
+ description: 'Wave-program planning and execution over a corpus of external plans.'
4
+ ---
5
+
6
+ # Waves
7
+
8
+ Use the wave guide to coordinate a corpus of external plans.
9
+
10
+ ## Contents
11
+
12
+ - [Wave Workflows](wave-workflows.md) - Program planning and wave execution.