@open-agent-toolkit/cli 0.1.19 → 0.1.21

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 (59) hide show
  1. package/README.md +2 -1
  2. package/assets/agents/oat-reviewer.md +48 -10
  3. package/assets/docs/cli-utilities/config-and-local-state.md +13 -1
  4. package/assets/docs/cli-utilities/configuration.md +24 -6
  5. package/assets/docs/docs-tooling/workflows.md +8 -2
  6. package/assets/docs/reference/cli-reference.md +13 -7
  7. package/assets/docs/reference/file-locations.md +1 -1
  8. package/assets/docs/reference/oat-directory-structure.md +3 -3
  9. package/assets/docs/workflows/projects/index.md +1 -1
  10. package/assets/docs/workflows/projects/lifecycle.md +1 -1
  11. package/assets/docs/workflows/projects/repo-analysis.md +7 -4
  12. package/assets/docs/workflows/projects/reviews.md +41 -0
  13. package/assets/public-package-versions.json +4 -4
  14. package/assets/skills/oat-agent-instructions-analyze/SKILL.md +43 -13
  15. package/assets/skills/oat-docs-analyze/SKILL.md +42 -12
  16. package/assets/skills/oat-project-complete/SKILL.md +16 -152
  17. package/assets/skills/oat-project-discover/SKILL.md +22 -4
  18. package/assets/skills/oat-project-import-plan/SKILL.md +38 -9
  19. package/assets/skills/oat-project-plan/SKILL.md +30 -7
  20. package/assets/skills/oat-project-plan-writing/SKILL.md +45 -2
  21. package/assets/skills/oat-project-progress/SKILL.md +9 -3
  22. package/assets/skills/oat-project-quick-start/SKILL.md +40 -8
  23. package/assets/skills/oat-project-review-provide/SKILL.md +24 -11
  24. package/assets/skills/oat-project-review-receive/SKILL.md +37 -17
  25. package/assets/skills/oat-wrap-up/SKILL.md +9 -9
  26. package/assets/skills/oat-wrap-up/references/automation-recipes.md +5 -5
  27. package/dist/commands/config/index.d.ts.map +1 -1
  28. package/dist/commands/config/index.js +38 -2
  29. package/dist/commands/index.d.ts.map +1 -1
  30. package/dist/commands/index.js +2 -0
  31. package/dist/commands/project/archive/archive-utils.d.ts +19 -0
  32. package/dist/commands/project/archive/archive-utils.d.ts.map +1 -1
  33. package/dist/commands/project/archive/archive-utils.js +94 -25
  34. package/dist/commands/project/archive/index.d.ts +6 -19
  35. package/dist/commands/project/archive/index.d.ts.map +1 -1
  36. package/dist/commands/project/archive/index.js +19 -251
  37. package/dist/commands/project/archive/push-runner.d.ts +21 -0
  38. package/dist/commands/project/archive/push-runner.d.ts.map +1 -0
  39. package/dist/commands/project/archive/push-runner.js +151 -0
  40. package/dist/commands/project/archive/sync-runner.d.ts +47 -0
  41. package/dist/commands/project/archive/sync-runner.d.ts.map +1 -0
  42. package/dist/commands/project/archive/sync-runner.js +232 -0
  43. package/dist/commands/repo/archive/index.d.ts +4 -0
  44. package/dist/commands/repo/archive/index.d.ts.map +1 -0
  45. package/dist/commands/repo/archive/index.js +22 -0
  46. package/dist/commands/repo/index.d.ts.map +1 -1
  47. package/dist/commands/repo/index.js +2 -0
  48. package/dist/commands/review/index.d.ts +3 -0
  49. package/dist/commands/review/index.d.ts.map +1 -0
  50. package/dist/commands/review/index.js +7 -0
  51. package/dist/commands/review/latest.d.ts +23 -0
  52. package/dist/commands/review/latest.d.ts.map +1 -0
  53. package/dist/commands/review/latest.js +182 -0
  54. package/dist/config/oat-config.d.ts +5 -0
  55. package/dist/config/oat-config.d.ts.map +1 -1
  56. package/dist/config/oat-config.js +12 -0
  57. package/dist/config/resolve.d.ts.map +1 -1
  58. package/dist/config/resolve.js +4 -0
  59. package/package.json +2 -2
package/README.md CHANGED
@@ -36,7 +36,8 @@ Additional useful entry points:
36
36
  - `oat project status --json`
37
37
  - `oat project list --json`
38
38
  - `oat project complete-state /path/to/project`
39
- - `oat project archive sync`
39
+ - `oat project archive /path/to/project`
40
+ - `oat repo archive sync`
40
41
  - `oat doctor`
41
42
 
42
43
  ## Inspection Commands
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-reviewer
3
- version: 1.1.0
3
+ version: 1.1.2
4
4
  description: Unified reviewer for OAT projects - mode-aware verification of requirements/design alignment and code quality. Writes a review artifact to disk by default, or returns structured findings in-memory when dispatched in structured-output mode.
5
5
  tools: Read, Bash, Grep, Glob, Write
6
6
  color: yellow
@@ -10,10 +10,11 @@ color: yellow
10
10
 
11
11
  You are an OAT reviewer. You perform independent reviews for OAT projects.
12
12
 
13
- You may be asked to do either:
13
+ You may be asked to do one of:
14
14
 
15
15
  - **Code review**: verify implementation against spec/design/plan + pragmatic code quality.
16
16
  - **Artifact review**: review an artifact (spec/design/plan) for completeness/clarity/readiness and alignment with upstream artifacts.
17
+ - **Analysis review**: fact-check a severity-rated analysis artifact for evidence accuracy, justified severity, and actionable recommendations.
17
18
 
18
19
  **Critical mindset:** Assume you know nothing about this project. Trust only written artifacts and code. Do NOT trust summaries or claims - verify by reading actual files.
19
20
 
@@ -44,10 +45,11 @@ Some findings are artifact drift rather than implementation defects. If shipped
44
45
  You will be given a "Review Scope" block including:
45
46
 
46
47
  - **project**: Path to project directory (e.g., `.oat/projects/shared/my-feature/`)
47
- - **type**: `code` or `artifact`
48
- - **scope**: What to review (`pNN-tNN` task, `pNN` phase, `pNN-pMM` contiguous phase range, `final`, `BASE..HEAD` range, or an artifact name like `spec` / `design`)
48
+ - **type**: `code`, `artifact`, or `analysis`
49
+ - **scope**: What to review (`pNN-tNN` task, `pNN` phase, `pNN-pMM` contiguous phase range, `final`, `BASE..HEAD` range, an artifact name like `spec` / `design` / `plan`, or an analysis sub-kind: `docs` / `agent-instructions`)
49
50
  - **commits/range**: Git commits or SHA range for changed files. For code review, this is the authoritative review surface.
50
51
  - **files_changed**: Optional orientation hint listing files believed to be modified in scope. If this disagrees with the commit range, trust the commit range.
52
+ - **analysis_artifact**: For `type: analysis`, path to the severity-rated analysis artifact to fact-check.
51
53
  - **workflow_mode**: `spec-driven` | `quick` | `import` (default to `spec-driven` if absent)
52
54
  - **artifact_paths**: Paths to available artifacts (spec/design/plan/implementation/discovery/import reference)
53
55
  - **tasks_in_scope**: Task IDs being reviewed (if task/phase scope)
@@ -89,7 +91,10 @@ Read available artifacts to understand what SHOULD have been built:
89
91
  - `spec-driven`: read `spec.md` and `design.md`.
90
92
  - `quick`: read `discovery.md` and `plan.md`; read `spec.md`/`design.md` only if they exist.
91
93
  - `import`: read `plan.md` and `references/imported-plan.md` (if present); read `spec.md`/`design.md` only if they exist.
92
- 3. In your notes and review summary, explicitly list which artifacts were available and used.
94
+ 3. For `type: analysis`, read `analysis_artifact` and then inspect only the cited evidence sources needed to verify its findings:
95
+ - `scope: docs`: consult the docs contract, docs navigation/index files, and cited docs source files relevant to the analysis.
96
+ - `scope: agent-instructions`: consult the repo/root instruction files, provider instruction files, and cited skill/agent instruction files relevant to the analysis.
97
+ 4. In your notes and review summary, explicitly list which artifacts were available and used.
93
98
 
94
99
  ### Step 2: Verify Scope
95
100
 
@@ -149,6 +154,7 @@ Treat the artifact as a product deliverable. Verify it is:
149
154
  - `spec-driven`: spec + design
150
155
  - `quick`: discovery (+ spec/design if present)
151
156
  - `import`: imported-plan reference (+ discovery/spec/design if present)
157
+ - For import-mode `plan` reviews, bias findings toward canonical-format conformance and completeness. Do not rewrite the imported author's intent merely to match OAT house style.
152
158
 
153
159
  4. **Actionable**
154
160
  - Clear next steps and readiness signals
@@ -156,6 +162,15 @@ Treat the artifact as a product deliverable. Verify it is:
156
162
  - For design: requirement-to-test mapping exists and includes concrete scenarios
157
163
  - For plan: tasks have clear verification commands and commit messages
158
164
 
165
+ 5. **Plan-specific checklist**
166
+ - Canonical-format conformance: required frontmatter and sections are present, the Reviews table exists, and artifact/code rows are shaped consistently.
167
+ - Stable task IDs: task headings use `pNN-tNN`, IDs are monotonic within each phase, and review-generated tasks do not reuse prior IDs.
168
+ - Required sections: the plan includes Reviews, Implementation Complete, and References sections without placeholder-only critical content.
169
+ - Review-table preservation: existing review rows are preserved; never require deleting rows to "clean up" the table.
170
+ - Task atomicity and verifiability: each task is independently committable, has bounded file scope, and declares verification that can actually be run.
171
+ - Coverage of design/discovery: every in-scope design component or discovery decision is mapped to at least one task or explicitly deferred/out of scope.
172
+ - Parallelism-claim sanity: any parallel phase group or parallelism statement is consistent with declared file boundaries and dependency order.
173
+
159
174
  ### Step 5: Verify Design Alignment
160
175
 
161
176
  This step applies to **code reviews** only.
@@ -181,6 +196,29 @@ For each design decision relevant to scope:
181
196
  - When the implementation is defensible, write the finding as stale-artifact alignment guidance instead of a code defect.
182
197
  - Include enough rationale for `oat-project-review-receive` to convert the finding into an artifact-alignment task or explicit deferral.
183
198
 
199
+ ### Step 5.5: Verify Analysis Accuracy
200
+
201
+ This step applies to **analysis reviews** only.
202
+
203
+ Review the analysis artifact as a fact-checking target, not as a rewrite request. Verify:
204
+
205
+ 1. **Evidence exists**
206
+ - Every severity-rated finding cites real evidence with file/line references or an equivalent precise artifact pointer.
207
+ - Open each cited file/location that materially supports the finding; if the cited evidence is absent, stale, or unrelated, add a finding.
208
+
209
+ 2. **Severity is justified**
210
+ - Critical/Important findings must describe concrete user-visible, workflow, correctness, security, or maintainability impact.
211
+ - Medium/Minor findings must not be inflated solely because they are easy to fix.
212
+
213
+ 3. **Recommendations are accurate**
214
+ - Suggested fixes must match the actual repo contracts and existing file conventions.
215
+ - For `docs` analysis, do not invent docs-app contract checks; cite the docs contract or source file that establishes the rule.
216
+ - For `agent-instructions` analysis, do not invent provider or instruction-file requirements; cite the relevant instruction file, skill, agent, or provider reference.
217
+
218
+ 4. **No hallucinated contract checks**
219
+ - If the analysis asserts a required section, schema field, version rule, provider behavior, or workflow invariant, verify that the contract exists in repo artifacts or authoritative cited sources.
220
+ - If a recommendation is stylistic or optional, ensure the analysis labels it as such instead of treating it as a hard contract.
221
+
184
222
  ### Step 6: Verify Code Quality
185
223
 
186
224
  This step applies to **code reviews** only.
@@ -256,11 +294,11 @@ Write the review artifact to the specified path.
256
294
  oat_generated: true
257
295
  oat_generated_at: YYYY-MM-DD
258
296
  oat_review_scope: { scope }
259
- oat_review_type: { code|artifact }
297
+ oat_review_type: { code|artifact|analysis }
260
298
  oat_project: { project-path }
261
299
  ---
262
300
 
263
- # {Code|Artifact} Review: {scope}
301
+ # {Code|Artifact|Analysis} Review: {scope}
264
302
 
265
303
  **Reviewed:** YYYY-MM-DD
266
304
  **Scope:** {scope description}
@@ -351,9 +389,9 @@ Return to your main session and run the `oat-project-review-receive` skill.
351
389
 
352
390
  ## Structured-Output Mode
353
391
 
354
- When the dispatch payload sets `oat_output_mode: structured`, the output sink changes — nothing else does. Run the full review (Steps 1-7) exactly as in artifact mode, then:
392
+ When the dispatch payload sets `oat_output_mode: structured`, the output sink changes — nothing else does. Run the full review (Steps 1-7, including Step 5.5 for `type: analysis`) exactly as in artifact mode, then:
355
393
 
356
- 1. **Do NOT write a review artifact.** Skip Step 8 entirely. In this mode you MUST NOT write to any path under `{project}/reviews/` (or anywhere else). The caller — the project-rail `oat-project-review-provide-remote` skill's Tier 1 dispatch — consumes your return value in-memory and posts it to GitHub itself; GitHub is the source of truth on that rail, so a local artifact would be redundant and is explicitly disallowed.
394
+ 1. **Do NOT write a review artifact.** Skip Step 8 entirely. In this mode you MUST NOT write to any path under `{project}/reviews/` (or anywhere else). The caller consumes your return value in-memory, whether that caller posts to GitHub, runs an auto artifact-review loop, or performs another structured workflow.
357
395
  2. **Instead of Step 9's confirmation, return a `StructuredFindings` object** as your response. Do not also return the artifact-mode confirmation block.
358
396
 
359
397
  **`StructuredFindings` return shape** (canonical schema: `design.md` → Data Models → StructuredFindings):
@@ -381,7 +419,7 @@ interface StructuredFindings {
381
419
  - `id` prefixes follow the existing convention (`C`/`I`/`M`/`m`) and are stable within a single dispatch — no renumbering.
382
420
  - `verification_commands` carries what Step 8's "Verification Commands" section would have carried, as an array of command strings.
383
421
 
384
- Default behavior is unaffected: when `oat_output_mode` is absent or set to anything other than `structured`, follow Steps 8-9 and write the artifact exactly as before.
422
+ Default behavior is unaffected: when `oat_output_mode` is absent or set to anything other than `structured`, follow Steps 8-9 and write the artifact exactly as before. Analysis reviews MUST honor `oat_output_mode: structured` whenever supplied by an auto-review loop: return the `StructuredFindings` object and write no artifact.
385
423
 
386
424
  ## Critical Rules
387
425
 
@@ -62,7 +62,7 @@ Archive lifecycle settings live here as shared repo config:
62
62
  - `archive.awsProfile`
63
63
  - `archive.awsRegion`
64
64
 
65
- `archive.awsProfile` and `archive.awsRegion` are forwarded as `AWS_PROFILE` / `AWS_REGION` env vars into every `aws` spawn that runs during `oat-project-complete` and `oat project archive sync`, and they override any values already set in the parent shell — the repo's archive-scoped declaration wins so users don't have to remember to unset `AWS_PROFILE` per shell. The per-invocation `oat project archive sync --profile <profile>` and `--region <region>` flags then override the config for a single run, giving precedence `flag > config > shell env`. When neither flag nor config is set, the parent shell's `AWS_PROFILE` / `AWS_REGION` pass through unchanged. Raw access keys (`AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`) remain a shell-environment concern — there is no config plumbing for them.
65
+ `archive.awsProfile` and `archive.awsRegion` are forwarded as `AWS_PROFILE` / `AWS_REGION` env vars into every `aws` spawn that runs during `oat-project-complete` and `oat repo archive sync`, and they override any values already set in the parent shell — the repo's archive-scoped declaration wins so users don't have to remember to unset `AWS_PROFILE` per shell. The per-invocation `oat repo archive sync --profile <profile>` and `--region <region>` flags then override the config for a single run, giving precedence `flag > config > shell env`. When neither flag nor config is set, the parent shell's `AWS_PROFILE` / `AWS_REGION` pass through unchanged. Raw access keys (`AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`) remain a shell-environment concern — there is no config plumbing for them.
66
66
 
67
67
  Tool-pack installation state also lives here as shared repo config:
68
68
 
@@ -76,6 +76,18 @@ Tool-pack installation state also lives here as shared repo config:
76
76
 
77
77
  Use `oat config get tools.<pack>` when you need an explicit installed-capability signal for workflows or troubleshooting.
78
78
 
79
+ Workflow automation preferences are also visible through `oat config` and can be set at local, shared, or user scope. Notable review-loop keys:
80
+
81
+ - `workflow.autoArtifactReview.plan` - default-on bounded artifact review for generated `plan.md` files before implementation handoff
82
+ - `workflow.autoArtifactReview.analysis` - default-on bounded accuracy review for generated docs and agent-instructions analysis artifacts before apply workflows consume them
83
+
84
+ Use `oat config describe workflow.autoArtifactReview.plan` or `oat config describe workflow.autoArtifactReview.analysis` to inspect precedence, defaults, and writable surfaces. Set either key to `false` only when you intentionally want to bypass that generated-artifact review loop:
85
+
86
+ ```bash
87
+ oat config set workflow.autoArtifactReview.plan false --shared
88
+ oat config set workflow.autoArtifactReview.analysis false --local
89
+ ```
90
+
79
91
  When archive settings are configured, completion uploads dated archive snapshots to S3, exports dated summary snapshots into the configured summary reference directory, and lets `oat-wrap-up` write tracked wrap-up reports into the configured wrap-up directory.
80
92
 
81
93
  Use these reference pages for file ownership and schema details:
@@ -112,7 +112,7 @@ With those values configured:
112
112
  - `oat-project-complete` still archives locally into `.oat/projects/archived/<project>/`
113
113
  - completion also attempts an S3 upload when AWS CLI is available and configured, storing dated snapshots such as `<archive.s3Uri>/<repo-slug>/projects/20260401-my-project/`
114
114
  - completion also copies `summary.md` into `<archive.summaryExportPath>/20260401-my-project.md`
115
- - `oat project archive sync` can later pull archive data back down from S3 and materialize the latest snapshot into the local bare archive path `.oat/projects/archived/<project>/`
115
+ - `oat repo archive sync` can later pull archive data back down from S3 and materialize the latest snapshot into the local bare archive path `.oat/projects/archived/<project>/`
116
116
  - `oat-wrap-up` can write tracked reports into `<archive.wrapUpExportPath>/YYYY-MM-DD-wrap-up-<label>.md`; if the key is unset, the skill uses `.oat/repo/reference/wrap-ups/`
117
117
  - every `aws` spawn (preflight `aws sts get-caller-identity`, `aws s3 ls`, `aws s3 sync`) runs with `AWS_PROFILE` / `AWS_REGION` set from `archive.awsProfile` / `archive.awsRegion` when configured, overriding any value already in the parent shell
118
118
 
@@ -120,7 +120,7 @@ With those values configured:
120
120
 
121
121
  Profile and region resolve with the following precedence per `aws` invocation, highest first:
122
122
 
123
- 1. CLI flag passed to `oat project archive sync` (`--profile <profile>`, `--region <region>`)
123
+ 1. CLI flag passed to `oat repo archive sync` (`--profile <profile>`, `--region <region>`)
124
124
  2. The repo's shared `archive.awsProfile` / `archive.awsRegion` config
125
125
  3. The parent shell's existing `AWS_PROFILE` / `AWS_REGION` env vars
126
126
 
@@ -128,15 +128,15 @@ If none of the three are present for a given var, OAT does not inject it — the
128
128
 
129
129
  `archive.awsProfile` is treated as deliberate, OAT-archive-scoped intent: if the repo declares the identity it wants to archive under, that value wins over whatever profile happens to be in the calling shell. Use `--profile` for one-off overrides; clear `archive.awsProfile` (set it to an empty string) to fall back to shell `AWS_PROFILE`.
130
130
 
131
- The `oat project archive sync` flags only override for that single invocation:
131
+ The `oat repo archive sync` flags only override for that single invocation:
132
132
 
133
133
  ```bash
134
- oat project archive sync --profile work-sso --region us-east-1
134
+ oat repo archive sync --profile work-sso --region us-east-1
135
135
  ```
136
136
 
137
137
  `oat-project-complete` does not accept per-invocation flags. Set the shared config (or your shell env) ahead of time if completion needs a specific profile.
138
138
 
139
- Raw access keys (`AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, and friends) remain a shell-environment concern. OAT does not expose config keys for them — set them in your shell before running `oat-project-complete` or `oat project archive sync` and they are inherited by the spawned `aws` process unchanged.
139
+ Raw access keys (`AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, and friends) remain a shell-environment concern. OAT does not expose config keys for them — set them in your shell before running `oat-project-complete` or `oat repo archive sync` and they are inherited by the spawned `aws` process unchanged.
140
140
 
141
141
  ## Repo-local and user state
142
142
 
@@ -255,13 +255,26 @@ Workflow preference keys live under the `workflow.*` namespace:
255
255
  - `workflow.reviewExecutionModel` — `subagent`, `inline`, or `fresh-session`. Default final-review execution model in `oat-project-implement`. `subagent` and `inline` run automatically. `fresh-session` is a soft preference: the skill prints guidance to run the review in another session but still offers escape hatches to `subagent` or `inline` if you change your mind. When unset, the skill prompts.
256
256
  - `workflow.autoReviewAtHillCheckpoints` — boolean. Automatically run the extra lifecycle review when a HiLL checkpoint is reached. This does not control Tier 1 per-phase `oat-reviewer` gates, which run after each phase in Tier 1 regardless of this setting. When unset, the skill prompts.
257
257
  - `workflow.autoNarrowReReviewScope` — boolean. Auto-narrow re-review scope to fix-task commits only in `oat-project-review-provide`. When unset, the skill prompts.
258
+ - `workflow.autoArtifactReview.plan` — boolean, default `true`. Automatically run the bounded artifact-review loop for generated `plan.md` files before implementation handoff. Set to `false` only when you intentionally want to skip the plan artifact review.
259
+ - `workflow.autoArtifactReview.analysis` — boolean, default `true`. Automatically run the bounded accuracy-review loop for generated docs and agent-instructions analysis artifacts before the matching apply workflow consumes them.
258
260
  - `workflow.dispatchCeiling.preset` — `balanced`, `maximum`, or `cost-conscious`. Convenience preset that compiles to per-provider values at write time. Setting this key is the recommended way to configure the ceiling.
259
261
  - `workflow.dispatchCeiling.providers.codex` — `low`, `medium`, `high`, or `xhigh`. Concrete Codex ceiling. Set automatically when a preset is selected; also settable directly for Advanced (no preset) configurations. Provider default effort is informational for base/unpinned roles and is not treated as this ceiling.
260
262
  - `workflow.dispatchCeiling.providers.claude` — `haiku`, `sonnet`, or `opus`. Concrete Claude ceiling. Set automatically when a preset is selected; also settable directly for Advanced configurations. Claude has no separate per-dispatch effort axis, so the effort axis remains `not-applicable`.
261
263
 
264
+ ### Auto artifact-review preferences
265
+
266
+ `workflow.autoArtifactReview.*` controls the artifact-quality loops that run before downstream workflow steps consume generated artifacts. Both keys are default-on. Only an explicit `false` disables the matching loop:
267
+
268
+ | Key | Default | Controls |
269
+ | -------------------------------------- | ------- | ------------------------------------------------------------------------ |
270
+ | `workflow.autoArtifactReview.plan` | `true` | `plan.md` artifact review after plan authoring and before implementation |
271
+ | `workflow.autoArtifactReview.analysis` | `true` | Accuracy review for generated docs and agent-instructions analysis files |
272
+
273
+ The loops use `oat-reviewer` structured-output mode. They do not write standalone review artifacts unless the calling workflow records an outcome row or tracking metadata. The retry bound comes from the project `oat_orchestration_retry_limit` setting and defaults to `2`.
274
+
262
275
  ### Three-layer resolution
263
276
 
264
- Workflow preferences resolve through three config surfaces, with `env > local > shared > user > default` precedence per key. This is the same generic resolution used by `oat config dump`:
277
+ Workflow preferences resolve through three config surfaces, with `local > shared > user > default` precedence per key. `oat config dump` can also report an `env` source for keys that have explicit environment aliases, such as `projects.root` and `worktrees.root`; `workflow.autoArtifactReview.plan` and `workflow.autoArtifactReview.analysis` do not have environment aliases and use config-file/default resolution.
265
278
 
266
279
  - **User-level** (`~/.oat/config.json`): personal defaults that apply to every repo. This is where most power users should start — set preferences once, never worry about them again.
267
280
  - **Shared repo** (`.oat/config.json`): team decisions for this repo. Overrides user defaults when present.
@@ -282,16 +295,20 @@ oat config set workflow.autoReviewAtHillCheckpoints true --user
282
295
  oat config set workflow.autoNarrowReReviewScope true --user
283
296
  oat config set workflow.designMode selective --user
284
297
  oat config set workflow.dispatchCeiling.preset balanced --user
298
+ oat config set workflow.autoArtifactReview.plan true --user
299
+ oat config set workflow.autoArtifactReview.analysis true --user
285
300
 
286
301
  # Shared repo: team decision for this repo
287
302
  oat config set workflow.createPrOnComplete false --shared
288
303
  oat config set workflow.designMode collaborative --shared
289
304
  oat config set workflow.dispatchCeiling.preset balanced --shared
305
+ oat config set workflow.autoArtifactReview.plan false --shared
290
306
 
291
307
  # Repo-local: personal override for this repo (default when no flag)
292
308
  oat config set workflow.hillCheckpointDefault every
293
309
  oat config set workflow.designMode draft
294
310
  oat config set workflow.dispatchCeiling.providers.codex medium # Advanced: per-provider override
311
+ oat config set workflow.autoArtifactReview.analysis false
295
312
  ```
296
313
 
297
314
  Default (no flag) targets `.oat/config.local.json` for workflow keys. Pass at most one of `--user`, `--shared`, or `--local`. Structural keys (`projects.root`, `worktrees.root`, `git.*`, `documentation.*`, `archive.*`, `tools.*`) are still shared-only regardless of flag.
@@ -312,6 +329,7 @@ Some preferences are **genuinely personal** — their correct value is the same
312
329
 
313
330
  Other preferences **depend on per-repo configuration** to be safe. These should be set at `--shared` (in each repo where they apply), not `--user`:
314
331
 
332
+ - `workflow.autoArtifactReview.plan` / `workflow.autoArtifactReview.analysis` — default to `true`; use shared config only when a repo intentionally opts out of generated-artifact review loops, and local config for one-off debugging or emergency bypasses.
315
333
  - `workflow.archiveOnComplete` — correctness depends on the repo's `archive.s3Uri` / `archive.s3SyncOnComplete` being configured. A user-level `true` would try to archive in repos that aren't set up for it.
316
334
  - `workflow.postImplementSequence` — correctness depends on `documentation.requireForProjectCompletion`. Setting `pr` at user level would foot-gun you in any repo that requires docs, because completion would later block on the docs gate while the PR is already open.
317
335
  - `workflow.createPrOnComplete` — this key is almost always redundant with `postImplementSequence`-driven flows. When it's meaningful, its correctness depends on the same per-repo docs and PR gates. Prefer shared scope, or omit it entirely and rely on `postImplementSequence: pr` or `docs-pr` to handle PR creation at the end of implement.
@@ -28,7 +28,9 @@ Install the workflow skills with `oat tools install docs` (preferred) or
28
28
  name distinct from package name), labeled post-patches for open CLI gaps,
29
29
  build verification, config inspection, and an educational walkthrough
30
30
  - `oat-docs-analyze` evaluates a docs surface for structure, drift, coverage,
31
- contributor guidance, and docs-app contract issues
31
+ contributor guidance, and docs-app contract issues, then runs the shared
32
+ auto artifact-review loop to verify the generated analysis artifact's
33
+ evidence, severities, and recommendations
32
34
  - `oat-docs-apply` consumes the analysis artifact and applies only approved,
33
35
  evidence-backed recommendations
34
36
  - `oat-project-document` performs post-implementation docs sync for a tracked project,
@@ -42,6 +44,9 @@ Install the workflow skills with `oat tools install docs` (preferred) or
42
44
  The docs workflow mirrors the agent-instructions analyze/apply split:
43
45
 
44
46
  - Analyze owns discovery, evidence gathering, confidence, and disclosure decisions
47
+ - Analyze also owns accuracy verification of the generated analysis artifact
48
+ through the shared auto artifact-review loop before the apply workflow consumes
49
+ it
45
50
  - Apply consumes the artifact, asks for approval, and must not invent new docs conventions
46
51
 
47
52
  This keeps deterministic behavior in the CLI and judgment-heavy behavior in the
@@ -56,7 +61,8 @@ skills.
56
61
  5. Sync navigation:
57
62
  - **MkDocs:** `oat docs nav sync`
58
63
  - **Fumadocs:** `oat docs generate-index` (runs automatically via `predev`/`prebuild` hooks)
59
- 6. Run `oat-docs-analyze`
64
+ 6. Run `oat-docs-analyze`; by default it verifies the generated analysis artifact
65
+ through `workflow.autoArtifactReview.analysis`
60
66
  7. Review the artifact and run `oat-docs-apply`
61
67
 
62
68
  ## Progressive disclosure
@@ -7,7 +7,7 @@ description: Scannable reference for the current OAT CLI surface, with links to
7
7
 
8
8
  Use this page when you need a quick map of the OAT CLI rather than the full command-by-command docs. It is intentionally shallow: each section points to the owning page that documents the detailed behavior.
9
9
 
10
- The CLI is also a standalone value path. You can use `oat init`, `oat sync`, `oat tools`, docs commands, and repo-analysis commands without adopting the full project workflow.
10
+ The CLI is also a standalone value path. You can use `oat init`, `oat sync`, `oat tools`, docs commands, repo archive sync, and repo-analysis commands without adopting the full project workflow.
11
11
 
12
12
  ## Contents
13
13
 
@@ -18,7 +18,7 @@ The CLI is also a standalone value path. You can use `oat init`, `oat sync`, `oa
18
18
  - [Provider Sync](../provider-sync/index.md) - Sync behavior, provider capabilities, config, and drift management.
19
19
  - [Agentic Workflows](../workflows/index.md) - Tracked project execution, skills, ideas, and workflow routing.
20
20
  - [Workflow & Projects](../workflows/projects/index.md) - Project lifecycle, artifacts, reviews, PR flow, and state-machine docs.
21
- - [Repository Analysis](../workflows/projects/repo-analysis.md) - Detailed `oat repo pr-comments ...` behavior.
21
+ - [Repository PR Comment Analysis](../workflows/projects/repo-analysis.md) - Detailed `oat repo pr-comments ...` behavior.
22
22
 
23
23
  ## Command Groups
24
24
 
@@ -32,18 +32,22 @@ The CLI is also a standalone value path. You can use `oat init`, `oat sync`, `oa
32
32
  | `oat state ...` / `oat index ...` / `internal` | Repo dashboard refresh, repo indexing, validation helpers, and diagnostics. | [Config and Local State](../cli-utilities/config-and-local-state.md) |
33
33
  | `oat docs ...` | Docs app bootstrap, migration, index generation, nav sync, and docs workflow entrypoints. | [Docs Tooling Commands](../docs-tooling/commands.md) |
34
34
  | `oat status` / `oat sync` / `oat providers ...` | Provider sync, drift inspection, provider configuration, and adoption behavior. | [Provider Sync](../provider-sync/index.md) |
35
- | `oat project ...` / `oat cleanup ...` | Project scaffolding, active-project status inspection, tracked-project listing, plan validation, and project/artifact cleanup commands. | [Workflow & Projects](../workflows/projects/index.md) |
36
- | `oat repo ...` | Repository-level analysis workflows, currently centered on PR comments. | [Repository Analysis](../workflows/projects/repo-analysis.md) |
35
+ | `oat project ...` / `oat cleanup ...` | Project scaffolding, active-project status inspection, tracked-project listing, plan validation, archive creation, and project/artifact cleanup commands. | [Workflow & Projects](../workflows/projects/index.md) |
36
+ | `oat review ...` | Review artifact discovery helpers, including latest-review resolution for project and ad-hoc review flows. | [Reviews](../workflows/projects/reviews.md) |
37
+ | `oat repo ...` | Repository-level workflows such as archive sync and PR-comment analysis. | [Repository Analysis](../workflows/projects/repo-analysis.md) |
37
38
 
38
- Notable inspection commands introduced in the current CLI surface:
39
+ Notable commands introduced in the current CLI surface:
39
40
 
40
41
  - `oat config dump --json` - merged config with source attribution
41
42
  - `oat project status --json` - full parsed state for the active tracked project. **Stable contract for skills:** the JSON output is a typed read interface for OAT skills; the field set consumed by migrated skills is locked by `MIGRATED_FIELDS` in `packages/cli/src/commands/project/status.test.ts`. Removing or renaming any of `project.{name, path, phase, phaseStatus, workflowMode, docsUpdated, lastCommit, prStatus, prUrl}` is a breaking change and will fail the contract test.
42
43
  - `oat project status --field <path>` - print one arbitrary dot-path field from the same status payload, e.g. `project.workflowMode` or `project.timestamps.stateUpdated`. Missing/null fields print `null`; object and array fields print compact JSON.
43
44
  - `oat project status --project-path <path>` - read from a repo-relative or absolute project path instead of `.oat/config.local.json`'s active project pointer. Combine it with `--field` or `--shell` when a skill has already resolved the target project path.
44
45
  - `oat project status --shell NAME=path ...` - print shell-safe assignments for one or more fields from one status read, e.g. `WORKFLOW_MODE='quick'`. This is the preferred multi-field read API for skills. See [Writing Skills → Reading project state](../contributing/skills.md#reading-project-state) for examples and the `npx`-backed `oat` shim contract.
46
+ - `oat review latest --json` - find the newest review artifact by `oat_generated_at`, scanning the active or specified project's `reviews/` and `reviews/archived/` directories plus ad-hoc review locations. Same-time candidates use target priority, then lifecycle recency (`final` > higher phase/task > lower phase/task). The JSON contract returns `path`, `scope`, `generatedAt`, and `kind` (`project` or `adhoc`), with `null` values when no review exists.
45
47
  - `oat project list --json` - summary state for tracked projects under the configured projects root
46
48
  - `oat project complete-state <project-path>` - apply the canonical completed-state mutation to a project's `state.md`; used by `oat-project-complete` during lifecycle closeout
49
+ - `oat project archive [project-path]` - archive a tracked project through the same local move, summary export, and optional S3 upload path used by completion. When omitted, the project path falls back to the active project.
50
+ - `oat repo archive sync [project-name]` - hydrate archived project snapshots from the configured repo-scoped S3 archive into `.oat/projects/archived/`. The old `oat project archive sync` path remains as a deprecated shim.
47
51
  - `oat project validate-plan --project-path <path>` - validates `oat_plan_parallel_groups` metadata in `plan.md`; exits non-zero on invalid. See [Implementation Execution](../workflows/projects/implementation-execution.md#validating-plan-metadata).
48
52
  - `oat project set-mode` — deprecated no-op. Execution mode is no longer user-selectable; emits a deprecation warning and preserves the `--json` contract.
49
53
 
@@ -61,7 +65,7 @@ Per-key restrictions apply: structural keys can only be written at shared scope,
61
65
 
62
66
  ## `workflow.*` preference keys
63
67
 
64
- The `workflow.*` namespace holds user-facing workflow preferences that let you answer repetitive confirmation prompts once and have OAT skills respect the answer automatically. Seven keys:
68
+ The `workflow.*` namespace holds user-facing workflow preferences that let you answer repetitive confirmation prompts once and have OAT skills respect the answer automatically. Common keys:
65
69
 
66
70
  - `workflow.hillCheckpointDefault` (`every` | `final`) — default HiLL checkpoint behavior in `oat-project-implement`
67
71
  - `workflow.archiveOnComplete` (`boolean`) — skip the archive prompt in `oat-project-complete`
@@ -70,5 +74,7 @@ The `workflow.*` namespace holds user-facing workflow preferences that let you a
70
74
  - `workflow.reviewExecutionModel` (`subagent` | `inline` | `fresh-session`) — default final-review execution model
71
75
  - `workflow.autoReviewAtHillCheckpoints` (`boolean`) — auto-run the extra lifecycle review at HiLL checkpoints
72
76
  - `workflow.autoNarrowReReviewScope` (`boolean`) — auto-narrow re-review scope to fix-task commits
77
+ - `workflow.autoArtifactReview.plan` (`boolean`, default `true`) — auto-run the bounded `plan.md` artifact-review loop before implementation handoff
78
+ - `workflow.autoArtifactReview.analysis` (`boolean`, default `true`) — auto-run the bounded accuracy-review loop for generated analysis artifacts before apply workflows consume them
73
79
 
74
- All seven keys resolve through the 3-layer precedence chain (`env > local > shared > user > default`). See [Workflow preferences in the Configuration guide](../cli-utilities/configuration.md#workflow-preferences-workflow) for full descriptions, surface guidance, and cross-repo foot-gun examples.
80
+ These workflow keys resolve through config files and defaults (`local > shared > user > default`). Some config keys have explicit environment aliases, but `workflow.autoArtifactReview.plan` and `workflow.autoArtifactReview.analysis` do not. See [Workflow preferences in the Configuration guide](../cli-utilities/configuration.md#workflow-preferences-workflow) for full descriptions, surface guidance, and cross-repo foot-gun examples.
@@ -57,7 +57,7 @@ Archive sync surfaces:
57
57
 
58
58
  - Local archive root: `.oat/projects/archived/`
59
59
  - Remote archive base: `archive.s3Uri` in `.oat/config.json`
60
- - Archive sync command: `oat project archive sync` or `oat project archive sync <project-name>`
60
+ - Archive sync command: `oat repo archive sync` or `oat repo archive sync <project-name>`
61
61
  - Remote archive snapshot shape: `<archive.s3Uri>/<repo-slug>/projects/YYYYMMDD-<project-name>/`
62
62
  - Summary export target: `<repo>/<archive.summaryExportPath>/YYYYMMDD-<project-name>.md` when configured
63
63
  - Wrap-up export target: `<repo>/<archive.wrapUpExportPath>/YYYY-MM-DD-wrap-up-<label>.md` when configured; otherwise `oat-wrap-up` falls back to `<repo>/.oat/repo/reference/wrap-ups/`
@@ -112,7 +112,7 @@ Current schema keys:
112
112
  | `archive.s3SyncOnComplete` | `boolean` | `false` | When `true`, `oat-project-complete` uploads the archived project to the configured S3 archive after local archive succeeds |
113
113
  | `archive.summaryExportPath` | `string` | - | Repo-relative directory where completion exports `summary.md` as a dated snapshot like `20260401-<project-name>.md` for durable tracked reference |
114
114
  | `archive.wrapUpExportPath` | `string` | - | Repo-relative directory where `oat-wrap-up` writes dated reports like `20260413-wrap-up-past-week.md`; when unset, the skill falls back to `.oat/repo/reference/wrap-ups/` |
115
- | `archive.awsProfile` | `string` | - | Optional AWS named profile forwarded as `AWS_PROFILE` to every `aws` invocation in archive flows (`oat-project-complete` S3 sync, `oat project archive sync`). Overrides ambient shell `AWS_PROFILE` / `AWS_DEFAULT_PROFILE` when set. |
115
+ | `archive.awsProfile` | `string` | - | Optional AWS named profile forwarded as `AWS_PROFILE` to every `aws` invocation in archive flows (`oat-project-complete` S3 sync, `oat repo archive sync`). Overrides ambient shell `AWS_PROFILE` / `AWS_DEFAULT_PROFILE` when set. |
116
116
  | `archive.awsRegion` | `string` | - | Optional AWS region forwarded as `AWS_REGION` to every `aws` invocation in archive flows. Overrides ambient shell `AWS_REGION` / `AWS_DEFAULT_REGION` when set. |
117
117
 
118
118
  All `documentation.*` keys are managed via `oat config get/set` and are set automatically by `oat docs init`.
@@ -166,8 +166,8 @@ Archive sync behavior:
166
166
 
167
167
  - `oat-project-complete` always archives locally into `.oat/projects/archived/<project>/`.
168
168
  - If `archive.s3SyncOnComplete=true` and `archive.s3Uri` is configured, completion also uploads a dated snapshot such as `<archive.s3Uri>/<repo-slug>/projects/20260401-<project>/`.
169
- - `oat project archive sync` syncs all repo archived projects down from S3 into `.oat/projects/archived/`.
170
- - `oat project archive sync <project-name>` syncs the latest dated remote snapshot for a single project into `.oat/projects/archived/<project-name>/`.
169
+ - `oat repo archive sync` syncs all repo archived projects down from S3 into `.oat/projects/archived/`.
170
+ - `oat repo archive sync <project-name>` syncs the latest dated remote snapshot for a single project into `.oat/projects/archived/<project-name>/`.
171
171
  - Default archive sync is non-destructive toward unrelated local-only archive data, but it does replace a local project archive when a newer dated remote snapshot is selected for that same project.
172
172
 
173
173
  Typical contents:
@@ -39,4 +39,4 @@ This sub-section is the deep technical surface for how tracked OAT projects exec
39
39
  - [State Machine](state-machine.md) - Lifecycle and review status transitions across a project.
40
40
  - [Reviews](reviews.md) - How review request/receive loops work inside OAT projects.
41
41
  - [PR Flow](pr-flow.md) - Progress and final PR generation expectations.
42
- - [Repository Analysis](repo-analysis.md) - Repo-wide PR comment collection and triage workflows.
42
+ - [Repository PR Comment Analysis](repo-analysis.md) - Repo-wide PR comment collection and triage workflows.
@@ -65,7 +65,7 @@ On completion, OAT now treats archive handling as part of the closeout lifecycle
65
65
  - If `.oat/config.json` sets `archive.awsProfile` and/or `archive.awsRegion`, those values are forwarded to every `aws` invocation triggered by completion (preflight checks + `aws s3 sync`) and override any ambient shell `AWS_PROFILE` / `AWS_DEFAULT_PROFILE` / `AWS_REGION` / `AWS_DEFAULT_REGION` values. The repo's archive-scoped credentials are treated as deliberate intent so users don't have to unset shell env vars before running completion. See [`config-and-local-state.md`](../../cli-utilities/config-and-local-state.md) for the full precedence chain.
66
66
  - If `.oat/config.json` sets `archive.summaryExportPath`, completion copies `summary.md` to `<archive.summaryExportPath>/20260401-<project>.md`.
67
67
  - Missing or unusable AWS CLI configuration produces warnings during completion instead of blocking closeout.
68
- - `oat project archive sync` can later sync all archived projects, or one named archived project, back down from S3; it selects the latest dated remote snapshot and materializes it into the local bare archive tree.
68
+ - `oat repo archive sync` can later sync all archived projects, or one named archived project, back down from S3; it selects the latest dated remote snapshot and materializes it into the local bare archive tree.
69
69
 
70
70
  ### Phase status: `pr_open`
71
71
 
@@ -1,11 +1,13 @@
1
1
  ---
2
- title: Repository Analysis
3
- description: 'Repository-level analysis commands for collecting and triaging PR review comments.'
2
+ title: Repository PR Comment Analysis
3
+ description: 'Repository-level PR comment analysis commands for collecting and triaging review feedback.'
4
4
  ---
5
5
 
6
- # Repository Analysis (`oat repo`)
6
+ # Repository PR Comment Analysis (`oat repo pr-comments`)
7
7
 
8
- The `oat repo` command group provides repository-level analysis and insight tools. These commands operate across merged pull requests rather than on individual PRs.
8
+ The `oat repo pr-comments` command group provides repository-level review analysis tools. These commands operate across merged pull requests rather than on individual PRs.
9
+
10
+ This page covers the PR-comment analysis surface only. Other repository-level commands, such as `oat repo archive sync`, are covered in [Lifecycle](lifecycle.md#completion-archive-behavior) and [Configuration](../../cli-utilities/configuration.md#shared-repo-config-you-will-touch-most-often).
9
11
 
10
12
  ## Quick Look
11
13
 
@@ -100,3 +102,4 @@ Both commands accept dependency injection for testability:
100
102
 
101
103
  - Source: `packages/cli/src/commands/repo/pr-comments/`
102
104
  - Types: `packages/cli/src/commands/repo/pr-comments/collect/pr-comments.types.ts`
105
+ - Archive sync: [Lifecycle](lifecycle.md#completion-archive-behavior) and [Configuration](../../cli-utilities/configuration.md#shared-repo-config-you-will-touch-most-often)
@@ -19,6 +19,19 @@ Review loop:
19
19
  - `reviews/archived/` is the local-only historical surface. Active `reviews/` content is not gitignored by default.
20
20
  - Ad-hoc review artifacts still default to local-only orphan storage under `.oat/projects/local/orphan-reviews/`.
21
21
 
22
+ ## Latest review resolver
23
+
24
+ Use `oat review latest` when a skill or operator needs to resolve "the most recent review" without hand-selecting a file.
25
+
26
+ ```bash
27
+ oat review latest --json
28
+ oat review latest --project .oat/projects/shared/example --json
29
+ ```
30
+
31
+ The resolver orders candidates by `oat_generated_at` frontmatter, not filesystem mtime. With an active or explicit project, it scans the project's `reviews/` directory first, then `reviews/archived/`, then ad-hoc review locations (`.oat/repo/reviews/` and `.oat/projects/local/orphan-reviews/`). When candidates share the same generated time, active project reviews outrank archived and ad-hoc reviews, then lifecycle recency breaks remaining ties (`final` > higher phase/task scope > lower phase/task scope). The JSON response contains `path`, `scope`, `generatedAt`, and `kind` (`project` or `adhoc`). If no review exists, those fields are `null`.
32
+
33
+ `oat-project-review-receive` uses this resolver when it is invoked from natural language and needs to offer the latest project review, or route an ad-hoc result to `oat-review-receive`.
34
+
22
35
  ## Bookkeeping commits (required)
23
36
 
24
37
  Both `oat-project-review-receive` and `oat-project-review-receive-remote` conclude with a required atomic commit of `plan.md`, `implementation.md`, `state.md`, and the archived review artifact (when tracked). This is the safety net that prevents cross-agent bookkeeping drift: when a subagent runs a receive skill in isolation, the commit ensures the original agent sees a clean checkout on return.
@@ -43,6 +56,17 @@ The commit is scoped and explicit — it stages only the project's tracking file
43
56
 
44
57
  The `*-provide-remote` and `*-receive-remote` skills are the two halves of the cross-machine loop: one agent posts a review to a PR; an agent on the PR's own machine receives it and turns it into fix tasks.
45
58
 
59
+ ## Model-invokable review skills
60
+
61
+ The project review skills are model-invokable only for explicit user asks and confirmation flows. They are not auto-invoked just because a phase completed, a review artifact exists, or a checkout looks ready for review.
62
+
63
+ - `oat-project-review-provide` handles explicit asks such as "review project" after resolving an active project and summarizing the inferred scope for confirmation.
64
+ - `oat-project-review-receive` handles explicit asks such as "receive review" or "process review" after resolving the latest review target. If the latest target is ad-hoc, it offers to route to `oat-review-receive`.
65
+ - `oat-project-progress` is also model-invokable for read-only status asks such as "check progress" or "what's next"; it reports before offering any next-step routing.
66
+ - `oat-project-discover` is model-invokable only when an active spec-driven project exists. Otherwise it declines and points to `oat-project-new`, `oat-project-quick-start`, or `oat-project-open`.
67
+
68
+ The common rule is offer-and-confirm: the model may recognize the request and propose the matching workflow skill, but must ask before mutating project artifacts or starting a review.
69
+
46
70
  ## Remote provide
47
71
 
48
72
  `oat-review-provide-remote` (ad-hoc) and `oat-project-review-provide-remote` (project-scoped) let an agent on one machine review a GitHub PR opened from another machine and post the review back to GitHub. They mirror the existing `*-receive-remote` skills, closing the local-vs-remote × provide-vs-receive matrix.
@@ -83,6 +107,23 @@ Auto-triggered reviews use `oat_review_invocation: auto` in the review artifact
83
107
 
84
108
  This feature is opt-in and disabled by default. When disabled, the manual `oat-project-review-provide` workflow applies.
85
109
 
110
+ ## Auto artifact-review loops
111
+
112
+ Generated planning and analysis artifacts have a separate review loop from code/phase reviews.
113
+
114
+ For plans, `oat-project-plan`, `oat-project-quick-start`, and `oat-project-import-plan` run a bounded `plan.md` artifact review before marking the plan ready for implementation. The loop dispatches `oat-reviewer` in structured-output artifact mode with `scope: plan`, applies unambiguous Critical and Important artifact-local fixes, offers Medium and Minor fixes, and re-runs until clean or the retry bound is exhausted. A clean result records the `plan` row in the plan's `## Reviews` table as `passed`.
115
+
116
+ For analysis artifacts, `oat-docs-analyze` and `oat-agent-instructions-analyze` run a bounded accuracy review after writing their severity-rated artifacts. The reviewer checks cited evidence, severity, and recommendations before the matching apply workflow consumes the artifact. The analysis loop updates tracking metadata to mark the artifact verified.
117
+
118
+ Both loops are default-on and controlled through:
119
+
120
+ ```bash
121
+ oat config set workflow.autoArtifactReview.plan false
122
+ oat config set workflow.autoArtifactReview.analysis false
123
+ ```
124
+
125
+ Only an explicit `false` skips a loop. The retry bound comes from `oat_orchestration_retry_limit` and defaults to `2`.
126
+
86
127
  ## Re-review scope narrowing
87
128
 
88
129
  When re-reviewing after fix tasks have been applied, `oat-project-review-provide` detects completed `(review)` fix tasks and offers to narrow the re-review scope to just the fix-task commits. This avoids re-examining already-approved code.
@@ -1,6 +1,6 @@
1
1
  {
2
- "cli": "0.1.19",
3
- "docs-config": "0.1.19",
4
- "docs-theme": "0.1.19",
5
- "docs-transforms": "0.1.19"
2
+ "cli": "0.1.21",
3
+ "docs-config": "0.1.21",
4
+ "docs-theme": "0.1.21",
5
+ "docs-transforms": "0.1.21"
6
6
  }