@open-agent-toolkit/cli 0.3.12 → 0.3.14

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