@open-agent-toolkit/cli 0.3.14 → 0.3.16

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 (110) hide show
  1. package/assets/NOTICES.md +48 -0
  2. package/assets/bundle-metadata.json +1 -1
  3. package/assets/docs/contributing/markdown-features.md +38 -0
  4. package/assets/docs/contributing/smoke-testing.md +20 -13
  5. package/assets/docs/docs-tooling/workflows.md +26 -19
  6. package/assets/docs/getting-started/concepts.md +35 -21
  7. package/assets/docs/provider-sync/commands.md +21 -0
  8. package/assets/docs/provider-sync/manifest-and-drift.md +24 -17
  9. package/assets/docs/reference/cli-reference.md +2 -1
  10. package/assets/docs/reference/configuration.md +10 -2
  11. package/assets/docs/reference/project-state-machine.md +27 -20
  12. package/assets/docs/skills/index.md +1 -0
  13. package/assets/docs/skills/recon.md +8 -5
  14. package/assets/docs/workflows/advanced/autonomy.md +10 -0
  15. package/assets/docs/workflows/advanced/evidence-layers.md +19 -12
  16. package/assets/docs/workflows/advanced/orchestration-model.md +48 -34
  17. package/assets/docs/workflows/advanced/workflow-gates.md +109 -10
  18. package/assets/docs/workflows/approvals-and-automation.md +3 -1
  19. package/assets/docs/workflows/ideas/lifecycle.md +32 -25
  20. package/assets/docs/workflows/projects/closeout/closeout-skills.md +62 -1
  21. package/assets/docs/workflows/projects/execution/implementation-execution.md +67 -33
  22. package/assets/docs/workflows/projects/execution/project-log.md +6 -0
  23. package/assets/docs/workflows/projects/lifecycle.md +119 -63
  24. package/assets/docs/workflows/projects/reviews/index.md +63 -1
  25. package/assets/docs/workflows/projects/reviews/review-flavors.md +30 -23
  26. package/assets/docs/workflows/waves/wave-workflows.md +11 -3
  27. package/assets/public-package-versions.json +4 -4
  28. package/assets/skills/oat-project-autonomous/SKILL.md +1 -1
  29. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +172 -165
  30. package/assets/skills/oat-project-complete-auto/SKILL.md +388 -0
  31. package/assets/skills/oat-project-document/SKILL.md +1 -1
  32. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +172 -165
  33. package/assets/skills/oat-project-implement/SKILL.md +6 -1
  34. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +28 -1
  35. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +172 -165
  36. package/assets/skills/oat-project-implement/references/docs/complexity-review-fallback.md +262 -0
  37. package/assets/skills/oat-project-implement/references/docs/gate-approval-record.md +80 -0
  38. package/assets/skills/oat-project-implement/references/phase-execution.md +18 -0
  39. package/assets/skills/oat-project-lite/SKILL.md +1 -1
  40. package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +172 -165
  41. package/assets/skills/oat-project-next/SKILL.md +19 -2
  42. package/assets/skills/oat-project-next/references/docs/gate-approval-record.md +80 -0
  43. package/assets/skills/oat-project-pr-final/SKILL.md +4 -3
  44. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +172 -165
  45. package/assets/skills/oat-project-progress/SKILL.md +15 -1
  46. package/assets/skills/oat-project-progress/references/docs/gate-approval-record.md +80 -0
  47. package/assets/skills/oat-project-quick-start/SKILL.md +31 -3
  48. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +172 -165
  49. package/assets/skills/oat-project-quick-start/references/docs/complexity-review-fallback.md +262 -0
  50. package/assets/skills/oat-project-quick-start/references/docs/gate-approval-record.md +80 -0
  51. package/assets/skills/oat-project-review-receive/SKILL.md +21 -3
  52. package/assets/skills/oat-project-review-receive/references/docs/complexity-review-fallback.md +262 -0
  53. package/assets/skills/oat-wave-execute/SKILL.md +49 -28
  54. package/assets/skills/oat-wave-program/SKILL.md +15 -6
  55. package/assets/skills/oat-wrap-up/SKILL.md +9 -3
  56. package/assets/skills/oat-wrap-up/references/report-template.md +1 -1
  57. package/assets/skills/recon/SKILL.md +1 -1
  58. package/assets/skills/recon/references/packet-contract.md +18 -3
  59. package/assets/skills/recon/scripts/lib/contracts.mjs +16 -2
  60. package/assets/skills/recon/scripts/reconcile-ledger.mjs +20 -10
  61. package/assets/skills/recon/scripts/render-packet.mjs +31 -3
  62. package/assets/skills/recon/scripts/validate-packet.mjs +5 -5
  63. package/assets/templates/docs-app-fuma/app/[[...slug]]/page.tsx +14 -2
  64. package/assets/templates/docs-app-fuma/app/globals.css +1 -0
  65. package/assets/templates/state.md +7 -0
  66. package/dist/commands/config/index.d.ts.map +1 -1
  67. package/dist/commands/config/index.js +13 -0
  68. package/dist/commands/gate/index.d.ts +5 -0
  69. package/dist/commands/gate/index.d.ts.map +1 -1
  70. package/dist/commands/gate/index.js +270 -9
  71. package/dist/commands/shared/frontmatter.d.ts +1 -1
  72. package/dist/commands/shared/frontmatter.d.ts.map +1 -1
  73. package/dist/commands/shared/frontmatter.js +1 -0
  74. package/dist/commands/state/generate.d.ts +1 -1
  75. package/dist/commands/state/generate.d.ts.map +1 -1
  76. package/dist/commands/state/generate.js +87 -8
  77. package/dist/commands/sync/apply.d.ts.map +1 -1
  78. package/dist/commands/sync/apply.js +31 -5
  79. package/dist/commands/sync/dry-run.d.ts.map +1 -1
  80. package/dist/commands/sync/dry-run.js +28 -11
  81. package/dist/commands/sync/sync.utils.d.ts +13 -0
  82. package/dist/commands/sync/sync.utils.d.ts.map +1 -1
  83. package/dist/commands/sync/sync.utils.js +21 -1
  84. package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -1
  85. package/dist/commands/tools/shared/pack-manifest.js +1 -0
  86. package/dist/config/oat-config.d.ts +1 -0
  87. package/dist/config/oat-config.d.ts.map +1 -1
  88. package/dist/config/oat-config.js +3 -0
  89. package/dist/config/resolve.d.ts.map +1 -1
  90. package/dist/config/resolve.js +1 -0
  91. package/dist/drift/detector.js +6 -6
  92. package/dist/engine/compute-plan.d.ts.map +1 -1
  93. package/dist/engine/compute-plan.js +87 -2
  94. package/dist/engine/engine.types.d.ts +10 -1
  95. package/dist/engine/engine.types.d.ts.map +1 -1
  96. package/dist/engine/engine.types.js +4 -0
  97. package/dist/engine/execute-plan.d.ts.map +1 -1
  98. package/dist/engine/execute-plan.js +42 -5
  99. package/dist/engine/managed-copy-hash.d.ts +4 -3
  100. package/dist/engine/managed-copy-hash.d.ts.map +1 -1
  101. package/dist/engine/managed-copy-hash.js +4 -3
  102. package/dist/fs/assets.d.ts.map +1 -1
  103. package/dist/fs/assets.js +7 -1
  104. package/dist/manifest/hash.d.ts +8 -10
  105. package/dist/manifest/hash.d.ts.map +1 -1
  106. package/dist/release/public-package-contract.js +1 -1
  107. package/dist/ui/output.js +1 -1
  108. package/dist/validation/skills.d.ts.map +1 -1
  109. package/dist/validation/skills.js +13 -0
  110. package/package.json +2 -2
@@ -35,14 +35,21 @@ For a one-page view of where people approve and what runs automatically in each
35
35
 
36
36
  ## Lifecycle Map
37
37
 
38
- ```mermaid
39
- flowchart LR
40
- D["Discovery"] --> S["Spec"] --> G["Design"] --> P["Plan"]
41
- P --> I["Implement (oat-project-implement)"]
42
- I --> R["Review loop"] --> PR["PR flow"]
43
- PR --> DOC["Docs sync (optional)"]
44
- DOC --> C["Complete"]
45
- ```
38
+ === "Diagram"
39
+
40
+ ![Project lifecycle map: discovery, spec, design, plan, implement, review loop, PR flow, optional docs sync, complete](/diagrams/project-lifecycle-1-lifecycle-map-light.svg)
41
+ ![Project lifecycle map: discovery, spec, design, plan, implement, review loop, PR flow, optional docs sync, complete](/diagrams/project-lifecycle-1-lifecycle-map-dark.svg)
42
+
43
+ === "Mermaid source"
44
+
45
+ ```mermaid
46
+ flowchart LR
47
+ D["Discovery"] --> S["Spec"] --> G["Design"] --> P["Plan"]
48
+ P --> I["Implement (oat-project-implement)"]
49
+ I --> R["Review loop"] --> PR["PR flow"]
50
+ PR --> DOC["Docs sync (optional)"]
51
+ DOC --> C["Complete"]
52
+ ```
46
53
 
47
54
  This map shows the spec-driven default. The quick, lite, import, and capture
48
55
  lanes each skip part of it — see [Lane diagrams](#lane-diagrams) below. Lite in
@@ -311,6 +318,7 @@ See [Implementation Execution](execution/implementation-execution.md) for the fu
311
318
  - `oat-project-review-receive` now presents a findings overview before asking for any disposition decisions.
312
319
  - Findings are shown with stable IDs by severity (`C*`, `I*`, `M*`, `m*`) so follow-up choices map clearly to specific items.
313
320
  - For each finding, the receive step summarizes the reviewer note, adds agent analysis, and gives a recommendation (convert now vs defer with rationale).
321
+ - When a scope reaches the three-cycle review cap, the receive step dispatches a [complexity review](reviews/index.md#complexity-review-at-budget-exhaustion) and adds **simplify** to the dispositions the operator can choose. Every other budget exhaustion in the lifecycle (the orchestration retry limit, the final review cap, and a gate's `maxAttempts`) runs the same review before escalating.
314
322
 
315
323
  ## Alternate lifecycle lanes
316
324
 
@@ -340,12 +348,19 @@ See [Implementation Execution](execution/implementation-execution.md) for the fu
340
348
 
341
349
  ### Spec-Driven workflow lane
342
350
 
343
- ```mermaid
344
- flowchart LR
345
- D["Discover"] --> S["Spec"] --> G["Design"] --> P["Plan"]
346
- P --> I["Implement (oat-project-implement)"]
347
- I --> R["Review"] --> PR["PR"] --> Doc["Docs (optional)"] --> C["Complete"]
348
- ```
351
+ === "Diagram"
352
+
353
+ ![Spec-driven lane: discover, spec, design, plan, implement, review, PR, optional docs, complete](/diagrams/project-lifecycle-2-spec-driven-light.svg)
354
+ ![Spec-driven lane: discover, spec, design, plan, implement, review, PR, optional docs, complete](/diagrams/project-lifecycle-2-spec-driven-dark.svg)
355
+
356
+ === "Mermaid source"
357
+
358
+ ```mermaid
359
+ flowchart LR
360
+ D["Discover"] --> S["Spec"] --> G["Design"] --> P["Plan"]
361
+ P --> I["Implement (oat-project-implement)"]
362
+ I --> R["Review"] --> PR["PR"] --> Doc["Docs (optional)"] --> C["Complete"]
363
+ ```
349
364
 
350
365
  During the Design step, `oat-project-design` asks how to work through the document unless a mode was selected by argument, environment, or `workflow.designMode`. The three full-design choices are collaborative, selective collaborative, and draft-and-review.
351
366
 
@@ -365,18 +380,31 @@ effort controls.
365
380
 
366
381
  ### Quick lane
367
382
 
368
- ```mermaid
369
- flowchart LR
370
- Q["Quick Start\n(adaptive discovery)"] --> D{"Design depth?"}
371
- D -->|Straight to plan| P["Plan"]
372
- D -->|Lightweight design| LD["Design (quick)"] --> P
373
- D -->|Promote| SD["→ Spec-Driven lane"]
374
- P --> QI["Implement (oat-project-implement)"]
375
- QI --> QR["Review / PR"]
376
- ```
383
+ === "Diagram"
384
+
385
+ ![Quick lane: quick start with adaptive discovery, then a design-depth choice (straight to plan, lightweight design, or promote to spec-driven), plan, implement, review and PR](/diagrams/project-lifecycle-3-quick-lane-light.svg)
386
+ ![Quick lane: quick start with adaptive discovery, then a design-depth choice (straight to plan, lightweight design, or promote to spec-driven), plan, implement, review and PR](/diagrams/project-lifecycle-3-quick-lane-dark.svg)
387
+
388
+ === "Mermaid source"
389
+
390
+ ```mermaid
391
+ flowchart LR
392
+ Q["Quick Start\n(adaptive discovery)"] --> D{"Design depth?"}
393
+ D -->|Straight to plan| P["Plan"]
394
+ D -->|Lightweight design| LD["Design (quick)"] --> P
395
+ D -->|Promote| SD["→ Spec-Driven lane"]
396
+ P --> QI["Implement (oat-project-implement)"]
397
+ QI --> QR["Review / PR"]
398
+ ```
377
399
 
378
400
  Quick lane lightweight design intentionally keeps a smaller collaborative/draft choice. Selective collaborative becomes available only after promotion into the full spec-driven design lane.
379
401
 
402
+ When a plan gate is configured, quick-start persists its outcome as
403
+ `oat_quick_start_gate` in project state (see
404
+ [Gate approval records](../advanced/workflow-gates.md#gate-approval-records)).
405
+ `oat-project-next` and `oat-project-progress` report that record; quick plan
406
+ readiness stays the only routing rule for quick plans.
407
+
380
408
  Quick-start follows the same dispatch policy rule at the plan boundary: capture
381
409
  the policy when interactive, persist `oat_dispatch_policy` to project state, and
382
410
  avoid any mid-implementation policy prompt. Legacy dispatch-ceiling state is
@@ -386,13 +414,20 @@ should use the dispatch-policy names, including explicit `Uncapped` and
386
414
 
387
415
  ### Lite lane
388
416
 
389
- ```mermaid
390
- flowchart LR
391
- L["Lite interview\n(one batched round)"] --> P["Single-phase plan\n(one approval)"]
392
- P --> I["Implement (oat-project-implement)"]
393
- I --> R["Final review"] --> PR["PR (default closeout)"]
394
- P -->|Scope grows| Q["Promote to Quick"]
395
- ```
417
+ === "Diagram"
418
+
419
+ ![Lite lane: one batched interview, a single-phase plan with one approval, implement, final review and PR, with promotion to quick if scope grows](/diagrams/project-lifecycle-4-lite-lane-light.svg)
420
+ ![Lite lane: one batched interview, a single-phase plan with one approval, implement, final review and PR, with promotion to quick if scope grows](/diagrams/project-lifecycle-4-lite-lane-dark.svg)
421
+
422
+ === "Mermaid source"
423
+
424
+ ```mermaid
425
+ flowchart LR
426
+ L["Lite interview\n(one batched round)"] --> P["Single-phase plan\n(one approval)"]
427
+ P --> I["Implement (oat-project-implement)"]
428
+ I --> R["Final review"] --> PR["PR (default closeout)"]
429
+ P -->|Scope grows| Q["Promote to Quick"]
430
+ ```
396
431
 
397
432
  Lite keeps planning and validation in `plan.md`. The interview selects a
398
433
  `minimal`, `product`, `technical`, or `both` content shape and records the
@@ -420,29 +455,36 @@ from its five core sections plus any adaptive Product Behavior and Technical
420
455
  Design, a **fresh** quick template takes over the `plan.md` path, and `state.md`
421
456
  is **rewritten** to quick mode.
422
457
 
423
- ```mermaid
424
- flowchart LR
425
- subgraph Before
426
- LPLAN["plan.md\nfive core sections plus adaptive\nProduct Behavior / Technical Design"]
427
- LSTATE["state.md\noat_workflow_mode: lite"]
428
- end
429
-
430
- CMD["oat project promote\n--to quick"]
431
-
432
- subgraph After
433
- DISC["discovery.md\nderived from the lite plan\noat_ready_for: oat-project-quick-start"]
434
- REF["references/lite-plan.md\noriginal lite plan, preserved"]
435
- QPLAN["plan.md\nfresh quick-start template"]
436
- QSTATE["state.md\noat_workflow_mode: quick\noat_phase: discovery (complete)\noat_ready_for: oat-project-quick-start"]
437
- end
438
-
439
- LPLAN --> CMD
440
- LSTATE --> CMD
441
- CMD -->|derive| DISC
442
- CMD -->|move| REF
443
- CMD -->|scaffold| QPLAN
444
- CMD -->|rewrite| QSTATE
445
- ```
458
+ === "Diagram"
459
+
460
+ ![Promoting a lite project to quick: oat project promote --to quick derives discovery.md from the lite plan, moves the original to references/lite-plan.md, scaffolds a fresh quick plan.md, and rewrites state.md to quick mode](/diagrams/project-lifecycle-5-promote-lite-to-quick-light.svg)
461
+ ![Promoting a lite project to quick: oat project promote --to quick derives discovery.md from the lite plan, moves the original to references/lite-plan.md, scaffolds a fresh quick plan.md, and rewrites state.md to quick mode](/diagrams/project-lifecycle-5-promote-lite-to-quick-dark.svg)
462
+
463
+ === "Mermaid source"
464
+
465
+ ```mermaid
466
+ flowchart LR
467
+ subgraph Before
468
+ LPLAN["plan.md\nfive core sections plus adaptive\nProduct Behavior / Technical Design"]
469
+ LSTATE["state.md\noat_workflow_mode: lite"]
470
+ end
471
+
472
+ CMD["oat project promote\n--to quick"]
473
+
474
+ subgraph After
475
+ DISC["discovery.md\nderived from the lite plan\noat_ready_for: oat-project-quick-start"]
476
+ REF["references/lite-plan.md\noriginal lite plan, preserved"]
477
+ QPLAN["plan.md\nfresh quick-start template"]
478
+ QSTATE["state.md\noat_workflow_mode: quick\noat_phase: discovery (complete)\noat_ready_for: oat-project-quick-start"]
479
+ end
480
+
481
+ LPLAN --> CMD
482
+ LSTATE --> CMD
483
+ CMD -->|derive| DISC
484
+ CMD -->|move| REF
485
+ CMD -->|scaffold| QPLAN
486
+ CMD -->|rewrite| QSTATE
487
+ ```
446
488
 
447
489
  The project slug, directory, and branch are untouched, so history and any open
448
490
  work continue uninterrupted. `oat_ready_for` is stamped on **both** `discovery.md`
@@ -455,21 +497,35 @@ categorical `reason` and exit non-zero. See
455
497
 
456
498
  ### Import lane
457
499
 
458
- ```mermaid
459
- flowchart LR
460
- I["Import Plan"] --> II1["Implement (oat-project-implement)"]
461
- II1 --> IR["Review / PR"]
462
- ```
500
+ === "Diagram"
501
+
502
+ ![Import lane: import a plan, implement, then review and PR](/diagrams/project-lifecycle-6-import-lane-light.svg)
503
+ ![Import lane: import a plan, implement, then review and PR](/diagrams/project-lifecycle-6-import-lane-dark.svg)
504
+
505
+ === "Mermaid source"
506
+
507
+ ```mermaid
508
+ flowchart LR
509
+ I["Import Plan"] --> II1["Implement (oat-project-implement)"]
510
+ II1 --> IR["Review / PR"]
511
+ ```
463
512
 
464
513
  ### Capture lane
465
514
 
466
515
  Retroactive project creation for work done outside the OAT project workflow. Common scenario: mobile/cloud sessions where you brainstorm and implement with an agent, then want to open a PR and review from your desktop.
467
516
 
468
- ```mermaid
469
- flowchart LR
470
- W["Work on branch\n(no project)"] --> Cap["oat-project-capture"]
471
- Cap --> R["Review / PR"]
472
- ```
517
+ === "Diagram"
518
+
519
+ ![Capture lane: work on a branch without a project, run oat-project-capture, then review and PR](/diagrams/project-lifecycle-7-capture-lane-light.svg)
520
+ ![Capture lane: work on a branch without a project, run oat-project-capture, then review and PR](/diagrams/project-lifecycle-7-capture-lane-dark.svg)
521
+
522
+ === "Mermaid source"
523
+
524
+ ```mermaid
525
+ flowchart LR
526
+ W["Work on branch\n(no project)"] --> Cap["oat-project-capture"]
527
+ Cap --> R["Review / PR"]
528
+ ```
473
529
 
474
530
  Entry point: `/oat-project-capture` (skill-only, no CLI command — requires agent conversation context).
475
531
 
@@ -166,7 +166,7 @@ is evaluated.
166
166
  - **Passing gate** (no findings at or above the threshold): receive runs a non-pausing **judgment sweep**. It makes a per-finding decision for each Medium/Low — defer to final review (the default, recorded so [final review](#phase-and-final-review) resurfaces it), address now (only for small, contained, low-risk fixes, which do **not** re-trigger the standard reviewer or re-gate the phase), or reject with rationale — then archives the artifact. Address-now is an exception, not the norm; if such a fix reveals a Critical/High concern it escalates to the blocking path.
167
167
  - **Blocking gate** (one or more findings at or above the threshold): receive converts findings to fix tasks and implementation re-runs the standard reviewer and the gate for the phase. These block → fix → re-gate rounds are bounded by `oat_orchestration_retry_limit` (default `2`); exhausting the bound stops a sequential run or excludes the phase in a parallel group, matching the standard fix loop's terminal handling.
168
168
 
169
- Gate-originated artifacts (`oat_review_invocation: gate`) are excluded from the same-scope review-cycle cap in `oat-project-review-receive`. The cap measures failed fix cycles of the standard review loop, so counting gate artifacts would trip it on artifact volume rather than real fix rounds.
169
+ Gate-originated artifacts (`oat_review_invocation: gate`) and saved complexity reports are excluded from the same-scope review-cycle cap in `oat-project-review-receive`. The cap measures failed fix cycles of the standard review loop, so counting gate artifacts would trip it on artifact volume rather than real fix rounds.
170
170
 
171
171
  When a phase is re-gated multiple times, each round produces a distinct review artifact — filenames and `oat_generated_at` are seconds-precision, so rounds never collide and `oat review latest` resolves the newest. An orchestrator should know a gate finished from the `oat --json gate review` result envelope on process exit (`status`, `runId`, `generatedAt`), not by watching the `reviews/` directory or the provider's log; see [Gate completion signal](../../advanced/workflow-gates.md#gate-completion-signal).
172
172
 
@@ -226,6 +226,68 @@ Final review `passed` gate requires:
226
226
  - Deferred Medium findings resurfaced and explicitly dispositioned.
227
227
  - Low findings explicitly dispositioned (after plain-language explanation).
228
228
 
229
+ ## Complexity review at budget exhaustion
230
+
231
+ When a review or gate budget runs out, another round of the same review is
232
+ unlikely to converge. Before asking the operator how to proceed, the root
233
+ dispatches one complexity review and shows it together with the reasons the
234
+ loop stopped. The review asks whether the reviewed work, and the machinery the
235
+ findings keep demanding, earns its cost against the contract. It is not
236
+ another correctness review.
237
+
238
+ It runs at every budget-exhaustion point:
239
+
240
+ | Exhaustion point | Owning skill |
241
+ | ------------------------------------------------------------- | ---------------------------- |
242
+ | Phase review fix rounds reach `oat_orchestration_retry_limit` | `oat-project-implement` |
243
+ | A phase review gate still blocks at that limit | `oat-project-implement` |
244
+ | The final review reaches its three-cycle cap | `oat-project-implement` |
245
+ | The implementation exit gate ends in `block` at `maxAttempts` | `oat-project-implement` |
246
+ | A review scope reaches the three-cycle cap | `oat-project-review-receive` |
247
+ | The quick-start plan gate ends in `block` at `maxAttempts` | `oat-project-quick-start` |
248
+
249
+ A single `prompt` failure, a `warn` outcome, and launch or transport failures
250
+ that consume no attempt are not budget exhaustions. The operator can ask for
251
+ the same review at any other time; there is no automatic early trigger.
252
+
253
+ How it runs:
254
+
255
+ - **Probe.** OAT looks for an installed `complexity-review` skill in
256
+ `~/.agents/skills`, then `~/.claude/skills`, then the repository's
257
+ `.agents/skills`. When one is found, the reviewer follows it as a document,
258
+ without asking questions. Otherwise the reviewer follows a condensed method
259
+ bundled with the lifecycle skills: restate the contract from independent
260
+ sources, establish the simplest viable baseline, inventory the machinery,
261
+ apply the deletion test, build a ledger (Item, Claimed value, Evidence,
262
+ Lifecycle cost, Recommendation), and give a verdict of
263
+ `Deletion-rule compliant`, `Partially compliant`, or `Not compliant`.
264
+ - **Read-only reviewer.** One reviewer-class subagent at the resolved reviewer
265
+ ceiling reads the reviewed target, the contract sources (backlog items,
266
+ discovery, spec, design, and decision records), and every review artifact of
267
+ the exhausted loop. It writes nothing and returns its report to the root.
268
+ Outside an implement run (quick-start, or a standalone review-receive), the
269
+ root loads the project dispatch skills and resolves the reviewer ceiling with
270
+ `oat project dispatch-ceiling resolve --role reviewer`.
271
+ - **One review per exhausted loop.** A saved report for the scope that is newer
272
+ than every review artifact of that scope is reused, so re-entering a capped
273
+ receive does not dispatch a second review.
274
+ - **OAT additions.** The report marks rows only the operator can settle as
275
+ `REQUIRES-OPERATOR`, classifies each open finding as an accepted
276
+ requirement, a regression, or new hardening, lists the findings a
277
+ simplification would dissolve, and recommends a disposition: extra cycles,
278
+ proceed with override, corrective revision, or **simplify**.
279
+ - **Decision message.** The root saves the report as
280
+ `reviews/archived/complexity-<scope>-<timestamp>.md` (outside the top-level
281
+ `reviews/` directory, so routers never mistake it for an unprocessed review,
282
+ and outside the review-cycle count), shows one decision message with the
283
+ stop reasons, verdict, dissolvable findings, and operator questions, and
284
+ records the operator's choice with the report path in `implementation.md`.
285
+
286
+ Agents never select the disposition, including the recommended one. Under
287
+ `OAT_AUTONOMOUS=1` the run stops at its boundary report, which carries the same
288
+ content. The condensed method adapts the operator's `complexity-review` skill
289
+ from `tkstang/skills`; see `NOTICES.md`.
290
+
229
291
  ## Subagent Compatibility
230
292
 
231
293
  `oat-project-review-provide` uses provider-aware subagent dispatch when available. This outer dispatch starts the primary `oat-reviewer`; it is separate from any optional reconnaissance workers that the reviewer may launch after resolving its authoritative review scope:
@@ -38,29 +38,36 @@ for the deep review request/receive mechanics.
38
38
 
39
39
  ## Flow map
40
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
- ```
41
+ === "Diagram"
42
+
43
+ ![Review flavors: planning self-review inherits the planning parent; implementation self-review resolves the dispatch ceiling to an at-ceiling pin, inherit, or an exact CLI reviewer; phase and lifecycle gates run a separate reviewer CLI from a configured exec target, and the lifecycle gate's reviewer CLI may spawn a nested reviewer child](/diagrams/review-flavors-light.svg)
44
+ ![Review flavors: planning self-review inherits the planning parent; implementation self-review resolves the dispatch ceiling to an at-ceiling pin, inherit, or an exact CLI reviewer; phase and lifecycle gates run a separate reviewer CLI from a configured exec target, and the lifecycle gate's reviewer CLI may spawn a nested reviewer child](/diagrams/review-flavors-dark.svg)
45
+
46
+ === "Mermaid source"
47
+
48
+ ```mermaid
49
+ flowchart TD
50
+ subgraph Planning
51
+ PL["Planning-phase\nartifact self-review"] --> PLR["Inherit planning parent"]
52
+ PLR --> PLT["Parent model\n(root already at/above ceiling)"]
53
+ end
54
+
55
+ subgraph Implementation
56
+ IM["Root-owned phase\nself-review"] --> IMR["Resolve dispatch ceiling"]
57
+ IMR --> IMPIN["At-ceiling pin\n(ceiling final candidate)"]
58
+ IMR --> IMINH["Inherit\n(only if dispatcher known at/above ceiling)"]
59
+ IMR --> IMCLI["Exact CLI reviewer\n(selected pre-launch)"]
60
+ end
61
+
62
+ subgraph Gates
63
+ PG["Phase review gate\n(external)"] --> PGR["Configured exec target\n(gates.execTargets)"]
64
+ PGR --> PGT["Separate reviewer CLI\n(prefers another model family;\nfalls back with a warning)"]
65
+
66
+ LG["Lifecycle / final gate"] --> LGR["Configured exec target\n(gates.execTargets)"]
67
+ LGR --> LGT["Separate reviewer CLI\n(never replaced by self-review;\nfalls back with a warning)"]
68
+ LGT -. may spawn .-> LGN["Nested managed\nreviewer child inside gate"]
69
+ end
70
+ ```
64
71
 
65
72
  The dotted branch marks the only flavor that may **spawn a nested managed
66
73
  reviewer child** inside the gate exec target: the lifecycle/final gate.
@@ -113,7 +113,9 @@ for your approval before the first wave starts. When the final wave merges,
113
113
  the skill stops at one human-gated checkpoint that asks whether to run the
114
114
  deferred completion tail (archive, S3 upload, and active-project clear) for
115
115
  every wave's wrapper project; autonomous runs never answer that question
116
- themselves.
116
+ themselves. On yes, it runs `oat-project-complete-auto` once in batch mode;
117
+ a wrapper the companion refuses keeps its deferral, and the report names its
118
+ next step (usually completing it with `oat-project-complete`).
117
119
 
118
120
  **Example scenario:** Twelve reviewed external plans include a shared API
119
121
  foundation, client changes, and independent documentation work. Use `new` to
@@ -173,7 +175,10 @@ closeout it archives the wave's backlog items with `oat backlog archive` and
173
175
  runs the configured closeout sequence (which can open the PR). It then stops
174
176
  once at a HiLL (human-in-the-loop) approval checkpoint before running the
175
177
  `oat-project-complete` process, including project archive and any configured
176
- S3 upload. After you merge the wave, it resets the working branch, deletes
178
+ S3 upload. Under autonomous execution it runs that process through the
179
+ `oat-project-complete-auto` companion, which needs
180
+ `workflow.autonomousComplete: true` and records a completion-before-merge
181
+ exception for the open wave PR. After you merge the wave, it resets the working branch, deletes
177
182
  stale phase branches, and runs `oat-wave-program wave-close`. Merging the wave
178
183
  into `main` stays your decision.
179
184
 
@@ -192,7 +197,10 @@ presented as proof the integrated tree passes.
192
197
 
193
198
  Closeout writes end-of-run synthesis before archive work. Autonomous execution
194
199
  can defer a wrapper's archive tail to program close only with an explicit
195
- ledger disposition. That deferral does not satisfy the full completion tail.
200
+ ledger disposition, and only when the companion refuses for a deferrable
201
+ reason (the opt-in is off, the PR precondition is unmet, or a completion
202
+ question has no recorded answer); any other refusal stops closeout at a
203
+ boundary. That deferral does not satisfy the full completion tail.
196
204
  Source-plan requirements remain intact even when live drift changes a mechanism.
197
205
 
198
206
  **Next step:** Follow the wave's reported review and merge boundary. After the
@@ -1,6 +1,6 @@
1
1
  {
2
- "cli": "0.3.14",
3
- "docs-config": "0.3.14",
4
- "docs-theme": "0.3.14",
5
- "docs-transforms": "0.3.14"
2
+ "cli": "0.3.16",
3
+ "docs-config": "0.3.16",
4
+ "docs-theme": "0.3.16",
5
+ "docs-transforms": "0.3.16"
6
6
  }
@@ -6,7 +6,7 @@ disable-model-invocation: true
6
6
  user-invocable: true
7
7
  allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion, Task
8
8
  metadata:
9
- version: 1.0.17
9
+ version: 1.0.18
10
10
  ---
11
11
 
12
12
  # Autonomous OAT Project