@open-agent-toolkit/cli 0.3.13 → 0.3.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/README.md +1 -1
  2. package/assets/bundle-metadata.json +1 -1
  3. package/assets/docs/contributing/index.md +14 -1
  4. package/assets/docs/contributing/markdown-features.md +38 -0
  5. package/assets/docs/contributing/skills.md +64 -2
  6. package/assets/docs/contributing/smoke-testing.md +23 -16
  7. package/assets/docs/contributing/updating-model-guidance.md +2 -2
  8. package/assets/docs/contributing/verifying-cursor-pins.md +1 -1
  9. package/assets/docs/docs-tooling/add-docs-to-a-repo.md +32 -0
  10. package/assets/docs/docs-tooling/agent-instructions.md +131 -0
  11. package/assets/docs/docs-tooling/index.md +1 -0
  12. package/assets/docs/docs-tooling/meta.json +1 -1
  13. package/assets/docs/docs-tooling/workflows.md +338 -2
  14. package/assets/docs/{cli-utilities → getting-started}/bootstrap.md +60 -5
  15. package/assets/docs/getting-started/concepts.md +120 -0
  16. package/assets/docs/getting-started/index.md +68 -0
  17. package/assets/docs/getting-started/meta.json +4 -0
  18. package/assets/docs/getting-started/quickstart.md +174 -0
  19. package/assets/docs/{cli-utilities → getting-started}/tool-packs.md +142 -14
  20. package/assets/docs/index.md +47 -48
  21. package/assets/docs/meta.json +6 -7
  22. package/assets/docs/provider-sync/commands.md +25 -2
  23. package/assets/docs/provider-sync/config.md +60 -1
  24. package/assets/docs/provider-sync/index.md +31 -15
  25. package/assets/docs/provider-sync/instruction-sync.md +32 -1
  26. package/assets/docs/provider-sync/manifest-and-drift.md +92 -0
  27. package/assets/docs/provider-sync/meta.json +1 -0
  28. package/assets/docs/provider-sync/pilot-with-a-team.md +236 -0
  29. package/assets/docs/provider-sync/scope-and-surface.md +37 -3
  30. package/assets/docs/reference/cli-reference.md +33 -33
  31. package/assets/docs/{cli-utilities → reference}/config-and-local-state.md +25 -9
  32. package/assets/docs/{cli-utilities → reference}/configuration.md +151 -34
  33. package/assets/docs/reference/file-locations.md +4 -1
  34. package/assets/docs/reference/index.md +13 -1
  35. package/assets/docs/reference/meta.json +7 -1
  36. package/assets/docs/reference/oat-directory-structure.md +1 -1
  37. package/assets/docs/{workflows/projects/artifacts.md → reference/project-artifacts.md} +4 -4
  38. package/assets/docs/{workflows/projects/state-machine.md → reference/project-state-machine.md} +28 -21
  39. package/assets/docs/{workflows/projects/repo-analysis.md → reference/repository-pr-comments.md} +2 -2
  40. package/assets/docs/reference/troubleshooting.md +125 -10
  41. package/assets/docs/reference/what-oat-writes.md +410 -0
  42. package/assets/docs/skills/brainstorm.md +77 -0
  43. package/assets/docs/skills/diagnostics.md +56 -0
  44. package/assets/docs/{workflows/skills → skills}/explainer-kit.md +121 -0
  45. package/assets/docs/skills/index.md +416 -0
  46. package/assets/docs/{workflows/skills → skills}/meta.json +4 -2
  47. package/assets/docs/{workflows/skills → skills}/recon.md +49 -0
  48. package/assets/docs/skills/repo-improve.md +254 -0
  49. package/assets/docs/skills/research.md +237 -0
  50. package/assets/docs/skills/session-closeout.md +61 -0
  51. package/assets/docs/workflows/advanced/autonomy.md +344 -0
  52. package/assets/docs/workflows/{projects → advanced}/cursor-cloud.md +69 -1
  53. package/assets/docs/workflows/{projects → advanced}/dispatch-ceiling.md +163 -18
  54. package/assets/docs/workflows/{projects → advanced}/evidence-layers.md +20 -13
  55. package/assets/docs/workflows/advanced/index.md +19 -0
  56. package/assets/docs/workflows/advanced/meta.json +13 -0
  57. package/assets/docs/workflows/{projects → advanced}/orchestration-model.md +108 -35
  58. package/assets/docs/workflows/{projects → advanced}/programmatic-execution.md +4 -4
  59. package/assets/docs/{cli-utilities → workflows/advanced}/workflow-gates.md +162 -8
  60. package/assets/docs/workflows/advanced/worktree-bootstrap.md +83 -0
  61. package/assets/docs/workflows/approvals-and-automation.md +261 -0
  62. package/assets/docs/workflows/backlog-and-planning/backlog-lifecycle.md +348 -0
  63. package/assets/docs/workflows/backlog-and-planning/index.md +13 -0
  64. package/assets/docs/workflows/backlog-and-planning/meta.json +4 -0
  65. package/assets/docs/workflows/backlog-and-planning/remote-project-management.md +303 -0
  66. package/assets/docs/workflows/choose-workflow.md +114 -0
  67. package/assets/docs/workflows/ideas/index.md +3 -3
  68. package/assets/docs/workflows/ideas/lifecycle.md +225 -1
  69. package/assets/docs/workflows/index.md +11 -62
  70. package/assets/docs/workflows/meta.json +10 -2
  71. package/assets/docs/workflows/projects/closeout/closeout-skills.md +538 -0
  72. package/assets/docs/workflows/projects/closeout/index.md +14 -0
  73. package/assets/docs/workflows/projects/closeout/meta.json +4 -0
  74. package/assets/docs/workflows/projects/{pr-flow.md → closeout/pr-flow.md} +1 -1
  75. package/assets/docs/workflows/projects/{retro.md → closeout/retro.md} +1 -1
  76. package/assets/docs/workflows/projects/execution/execution-skills.md +258 -0
  77. package/assets/docs/workflows/projects/{implementation-execution.md → execution/implementation-execution.md} +52 -38
  78. package/assets/docs/workflows/projects/execution/index.md +15 -0
  79. package/assets/docs/workflows/projects/execution/meta.json +9 -0
  80. package/assets/docs/workflows/projects/execution/picking-up-projects.md +376 -0
  81. package/assets/docs/{cli-utilities → workflows/projects/execution}/project-log.md +1 -1
  82. package/assets/docs/workflows/projects/index.md +38 -49
  83. package/assets/docs/workflows/projects/lifecycle.md +159 -74
  84. package/assets/docs/workflows/projects/meta.json +2 -23
  85. package/assets/docs/workflows/projects/{design-modes.md → planning/design-modes.md} +29 -0
  86. package/assets/docs/workflows/projects/planning/hill-checkpoints.md +167 -0
  87. package/assets/docs/workflows/projects/planning/index.md +16 -0
  88. package/assets/docs/workflows/projects/planning/meta.json +10 -0
  89. package/assets/docs/workflows/projects/planning/planning-skills.md +381 -0
  90. package/assets/docs/workflows/projects/{splitting.md → planning/splitting.md} +3 -3
  91. package/assets/docs/workflows/projects/planning/starting-projects.md +511 -0
  92. package/assets/docs/workflows/projects/{reviews.md → reviews/index.md} +51 -5
  93. package/assets/docs/workflows/projects/reviews/meta.json +4 -0
  94. package/assets/docs/workflows/projects/reviews/review-flavors.md +650 -0
  95. package/assets/docs/workflows/projects/{reviewing-oat-prs.md → reviews/reviewing-oat-prs.md} +3 -3
  96. package/assets/docs/workflows/waves/index.md +12 -0
  97. package/assets/docs/workflows/waves/meta.json +4 -0
  98. package/assets/docs/workflows/waves/wave-workflows.md +206 -0
  99. package/assets/public-package-versions.json +4 -4
  100. package/assets/skills/oat-docs/SKILL.md +19 -19
  101. package/assets/skills/oat-docs-analyze/SKILL.md +1 -1
  102. package/assets/skills/oat-docs-apply/SKILL.md +1 -1
  103. package/assets/skills/oat-docs-authoring/SKILL.md +1 -1
  104. package/assets/skills/oat-docs-bootstrap/SKILL.md +1 -1
  105. package/assets/skills/oat-doctor/SKILL.md +25 -25
  106. package/assets/templates/docs-app-fuma/app/[[...slug]]/page.tsx +14 -2
  107. package/assets/templates/docs-app-fuma/app/globals.css +1 -0
  108. package/dist/release/public-package-contract.js +1 -1
  109. package/package.json +2 -2
  110. package/assets/docs/cli-utilities/backlog-lifecycle.md +0 -80
  111. package/assets/docs/cli-utilities/index.md +0 -74
  112. package/assets/docs/cli-utilities/meta.json +0 -13
  113. package/assets/docs/cli-utilities/remote-project-management.md +0 -191
  114. package/assets/docs/guide/concepts.md +0 -88
  115. package/assets/docs/guide/index.md +0 -31
  116. package/assets/docs/guide/meta.json +0 -4
  117. package/assets/docs/quickstart.md +0 -88
  118. package/assets/docs/workflows/projects/autonomy.md +0 -196
  119. package/assets/docs/workflows/projects/hill-checkpoints.md +0 -93
  120. package/assets/docs/workflows/projects/picking-up-projects.md +0 -124
  121. package/assets/docs/workflows/projects/review-flavors.md +0 -138
  122. package/assets/docs/workflows/skills/index.md +0 -184
  123. package/assets/docs/workflows/skills/repo-improve.md +0 -89
  124. package/assets/docs/workflows/wave-workflows.md +0 -77
@@ -1,196 +0,0 @@
1
- ---
2
- title: Autonomous Project Execution
3
- description: 'Session-scoped autonomy signals, gate boundaries, review requirements, and execution-learnings behavior for OAT projects.'
4
- ---
5
-
6
- # Autonomous Project Execution
7
-
8
- OAT autonomy is an explicit session policy for driving a project through its
9
- lifecycle without waiting at ordinary interactive gates. It does not bypass the
10
- gate-owning skills: each skill still applies its own checks, records provenance,
11
- and either resolves the gate or reports a boundary.
12
-
13
- The provider-agnostic entry point is `oat-project-autonomous`. Invoke it
14
- deliberately with a goal, project slug, ticket reference, or active project. A
15
- restart does not silently resume autonomy; invoke the skill again and it resumes
16
- from the persisted project state.
17
-
18
- ## Activation contract
19
-
20
- An autonomous session uses both signals:
21
-
22
- ```bash
23
- export OAT_AUTONOMOUS=1
24
- export OAT_NON_INTERACTIVE=1
25
- ```
26
-
27
- `OAT_AUTONOMOUS=1` implies and sets `OAT_NON_INTERACTIVE=1` for the current
28
- run. The distinction is intentional:
29
-
30
- - `OAT_NON_INTERACTIVE=1` selects existing safe no-prompt paths for one
31
- workflow.
32
- - `OAT_AUTONOMOUS=1` additionally enables lifecycle chaining, defined gate
33
- resolutions, boundary stops, and provenance requirements.
34
-
35
- Both signals are session-scoped. Never write them to `state.md`, `plan.md`,
36
- repository config, user config, or any other durable artifact. A later
37
- interactive session therefore needs no autonomy cleanup and behaves
38
- interactively around the state the autonomous run left behind.
39
-
40
- ## Gate outcomes
41
-
42
- Every interactive lifecycle gate has one of two autonomous outcomes:
43
-
44
- 1. **Auto-resolve** using an existing safe path, then record the decision and
45
- evidence.
46
- 2. **Boundary stop** with a structured blocker and a resumable next step.
47
-
48
- The main boundary classes are:
49
-
50
- - **Product judgment** — repository evidence cannot resolve material scope or
51
- requirements ambiguity.
52
- - **Destructive-change risk** — an action could discard work, delete data,
53
- rewrite history, or broadly restructure an unapproved surface.
54
- - **Unresolved Critical findings** — a blocking review has not passed.
55
- - **Repository-policy approval** — protected operations require authority the
56
- session does not have.
57
- - **Missing credentials** — a required external action has no authenticated
58
- route or offline equivalent.
59
-
60
- A boundary is a successful fail-closed outcome, not permission to continue with
61
- a guessed answer. The run reports what stopped, the evidence, and the operator
62
- action needed to resume.
63
-
64
- The canonical autonomy contract and exhaustive gate inventory
65
- (`.agents/docs/autonomy-contract.md`, vendored into each consuming skill at
66
- `references/docs/autonomy-contract.md`) map each prompt to its autonomous
67
- resolution and provenance.
68
-
69
- ### Dispatch-ladder scope selection
70
-
71
- An incomplete reusable dispatch ladder is auto-resolvable when an authorized
72
- adoption-compatible config scope is available. Autonomous planning checks
73
- config-file existence in this fixed order without prompting or reordering from
74
- effective value or matrix-cell provenance:
75
-
76
- 1. user config (`~/.oat/config.json`);
77
- 2. repo-local config (`.oat/config.local.json`);
78
- 3. shared config (`.oat/config.json`), only when repository policy already
79
- authorizes that write.
80
-
81
- Before writing, planning rejects a candidate that would preserve a
82
- provider-level scalar in that scope or remain shadowed by one at higher
83
- precedence. It always tries the next authorized compatible candidate and stops
84
- without mutation only when none remains.
85
-
86
- The planner runs exactly one matching `oat config adopt dispatch-matrix --keep-existing`
87
- command, records file-existence and compatibility evidence plus the selected
88
- scope, and re-runs dispatch preflight. Existing explicit cells remain unchanged;
89
- their provenance does not select the persistence scope. No authorized
90
- compatible scope, or a ladder that remains incomplete after adoption, is still
91
- a repository-policy boundary. `OAT_NON_INTERACTIVE=1` without
92
- `OAT_AUTONOMOUS=1` does not select a scope and continues to fail closed.
93
-
94
- ## Review contract
95
-
96
- Autonomous execution preserves independent review:
97
-
98
- - Discovery, design, and plan artifacts run their configured exit gates.
99
- Quick-start reviews the discovery, optional lightweight design, and plan as
100
- one bundle when those artifacts exist.
101
- - Review routing is selected before launch through the dispatch substrate.
102
- A configured gate target is preferred when available; otherwise policy may
103
- choose a target-preserving subagent route. Any reduced independence is
104
- explicit in the dispatch record.
105
- - Once a launch is accepted, it is terminal for route selection. Failures use
106
- bounded recovery with the same payload; they do not silently fall through to
107
- a cheaper or less independent reviewer.
108
- - Eligible review artifacts are received immediately. Fix tasks use the normal
109
- bounded implement-and-re-review loop.
110
- - Critical findings and failed blocking reviews stop progression. High
111
- findings follow the configured gate policy.
112
- - A normal phase or final lifecycle review cannot satisfy a configured
113
- implementation exit gate. Only gate invocation provenance with the matching
114
- run ID can authorize that boundary.
115
-
116
- Project review artifacts and review rows reference launcher-owned dispatch
117
- records. The configured invocation is authoritative evidence; child
118
- self-reporting is optional corroboration. See [Evidence
119
- Layers](evidence-layers.md) and [Reviews](reviews.md).
120
-
121
- ## HiLL and lifecycle closeout
122
-
123
- If checkpoint selection is unconfirmed when autonomy starts implementation,
124
- OAT takes the existing `workflow.hillCheckpointDefault: final` path explicitly:
125
-
126
- ```yaml
127
- oat_plan_hill_phases: ['<final-phase-id>']
128
- oat_auto_review_at_hill_checkpoints: true
129
- ```
130
-
131
- An existing valid explicit list is preserved. An existing `[]` is also
132
- preserved and means every phase, never no phases. At each configured checkpoint,
133
- autonomy runs and receives the review without waiting.
134
-
135
- At final closeout, autonomy follows the same authoritative order as an
136
- interactive run: final verification, mandatory final lifecycle review,
137
- configured implementation exit gate, pre-approval sequence, final HiLL
138
- approval, post-approval sequence, then implementation completion and success
139
- output. A `not_configured` resolution persists an explicit no-gate allowance
140
- before the sequence starts; a null, missing, or unrecognized resolver result
141
- fails closed as unresolved. A gate this project disabled persists an
142
- `allowed/configured` result with `disposition: project_disabled` and never
143
- launches the configured command.
144
-
145
- Autonomy does not turn an ordinary independent review into configured-gate
146
- provenance. A configured review must produce a gate-originated artifact with
147
- the matching run ID, and eligible receive must be durably reconciled. Blocked,
148
- ambiguous, malformed, or stale gate state is a boundary stop: the run remains
149
- resumable through `oat-project-implement` and cannot continue to approval,
150
- completion, or output.
151
-
152
- The default autonomous tail is summary, documentation, and final PR when no
153
- post-implementation sequence is configured; stored legacy or structured
154
- sequences retain their documented meaning.
155
-
156
- ## Execution-learnings loop
157
-
158
- Autonomous runs keep an append-only project-local
159
- `oat-execution-learnings.md`. Dated entries record an observation, impact, and
160
- recommendation under the source taxonomy: `gotcha`, `efficiency`,
161
- `documentation-gap`, `candidate-skill-content`, `decision`, or
162
- `environment-limited`.
163
-
164
- When the file exists, `oat-project-summary` synthesizes actionable
165
- recommendations into `## Autonomous Execution Learnings`, grouped as:
166
-
167
- - agent-instruction updates;
168
- - cloud-environment improvements;
169
- - code follow-ups;
170
- - workflow issues.
171
-
172
- Each recommendation links back to its source entry. Projects without the
173
- learnings file render normal summaries with no autonomous-learnings section.
174
- The summary export keeps the synthesized recommendations after project
175
- archival.
176
-
177
- ## Taking over interactively
178
-
179
- After an autonomous session ends:
180
-
181
- 1. Start a normal session without the autonomy environment signals.
182
- 2. Open the same project from its repository-local `.oat` directory.
183
- 3. Resume the owning lifecycle skill.
184
-
185
- Persisted review rows, task state, explicit HiLL checkpoints, and dispatch
186
- provenance remain valid. Interactive prompts and checkpoint pauses return
187
- normally because autonomy itself was never persisted.
188
-
189
- ## Related
190
-
191
- - [HiLL Checkpoints](hill-checkpoints.md) — checkpoint field semantics and
192
- interactive behavior.
193
- - [Implementation Execution](implementation-execution.md) — phase execution,
194
- review, fixes, and closeout.
195
- - [Cursor Cloud](cursor-cloud.md) — project-home and environment-readiness
196
- guidance for cloud runs.
@@ -1,93 +0,0 @@
1
- ---
2
- title: Human-in-the-Loop Lifecycle (HiLL) Checkpoints
3
- description: 'Checkpoint configuration and behavior for pauseable, human-in-the-loop lifecycle execution.'
4
- ---
5
-
6
- # Human-in-the-Loop Lifecycle (HiLL) Checkpoints
7
-
8
- OAT supports two checkpoint classes:
9
-
10
- - Workflow phase checkpoints
11
- - Plan phase checkpoints
12
-
13
- The [Phase gate review](reviews.md#phase-review-gate) (`oat_phase_review_gate`) is a separate, non-pausing mechanism — it does not pause on a passing gate and never modifies the HiLL keys below (`oat_hill_completed`, `oat_plan_hill_phases`).
14
-
15
- ## Workflow checkpoints (`state.md`)
16
-
17
- Frontmatter keys:
18
-
19
- - `oat_hill_checkpoints`
20
- - `oat_hill_completed`
21
-
22
- Example:
23
-
24
- ```yaml
25
- oat_hill_checkpoints: ['discovery', 'spec', 'design']
26
- oat_hill_completed: ['discovery']
27
- ```
28
-
29
- ## Plan phase checkpoints (`plan.md`)
30
-
31
- Frontmatter key written after implementation confirmation:
32
-
33
- - `oat_plan_hill_phases`
34
-
35
- Semantics:
36
-
37
- - Field absent: valid before the first `oat-project-implement` run confirms checkpoint selection. Planning may intentionally leave the field unset until that first execution starts.
38
- - Empty list: checkpoint after every phase boundary, but only after implementation has confirmed the choice and written `oat_plan_hill_phases: []` into `plan.md`.
39
- - Explicit list: checkpoint only after completing the named phases (`p01`, `p04`, etc).
40
-
41
- ### Lite checkpoint bypass
42
-
43
- Lite projects have no HiLL checkpoints. `oat-project-implement` resolves
44
- `oat_workflow_mode` from project state before any checkpoint field read, and
45
- when the mode is `lite` it resolves checkpoint state as `none` without reading
46
- or interpreting `oat_plan_hill_phases`. An empty list cannot represent lite's
47
- policy, because for every other mode an empty list means "checkpoint after every
48
- phase". `oat-project-implement`'s Lite checkpoint bypass writes:
49
-
50
- ```yaml
51
- oat_auto_review_at_hill_checkpoints: false # lite: no checkpoints
52
- ```
53
-
54
- The workflow preference prompt, the standard checkpoint prompt, and the
55
- auto-review preference prompt are all skipped in both interactive and autonomous
56
- runs. Only HiLL approval pauses are absent — the root-owned per-phase review and
57
- the final review remain required.
58
-
59
- The rest of this section applies to `spec-driven`, `quick`, and `import`
60
- projects.
61
-
62
- On the first implementation run, `oat-project-implement` must summarize every plan phase, state the total phase count and final phase ID, and then ask an explicit three-option checkpoint question:
63
-
64
- - Stop after each phase
65
- - Stop after specific phases
66
- - Stop only after the final phase is completed
67
-
68
- It then writes the confirmed value into `plan.md`. If the field is later missing during a resumed implementation run, treat that as bookkeeping drift rather than as an implicit default.
69
-
70
- Listed phases are where you stop **after completing them**, not before. `["p03"]` means "complete p03, then pause" — not "pause before starting p03." Setting the last phase ID (e.g., `["p03"]` when p03 is final) means "stop only at the end of implementation."
71
-
72
- ### Setting a default via `workflow.hillCheckpointDefault`
73
-
74
- The first-run checkpoint prompt can be skipped entirely by setting the `workflow.hillCheckpointDefault` preference:
75
-
76
- - `every` — automatically write `oat_plan_hill_phases: []` (pause after every phase) without prompting
77
- - `final` — automatically write `oat_plan_hill_phases: ["<final-phase-id>"]` (pause only at the end) without prompting
78
-
79
- When set, `oat-project-implement` reads the preference before the prompt and prints `HiLL checkpoints: <every|final> (from workflow.hillCheckpointDefault)`, skipping the interactive choice. When unset (default), the skill prompts as before.
80
-
81
- This is a personal preference — typically set at user scope so it applies to every repo:
82
-
83
- ```bash
84
- oat config set workflow.hillCheckpointDefault final --user
85
- ```
86
-
87
- See [Workflow preferences in the Configuration guide](../../cli-utilities/configuration.md#workflow-preferences-workflow) for the full list of preference keys and surface guidance.
88
-
89
- ## Reference artifacts
90
-
91
- - `.oat/templates/plan.md`
92
- - `.oat/projects/<scope>/<project>/plan.md`
93
- - `.oat/projects/<scope>/<project>/state.md`
@@ -1,124 +0,0 @@
1
- ---
2
- title: Picking Up Projects
3
- description: Continue a synced OAT project on another machine or from another user through its dedicated Git ref.
4
- ---
5
-
6
- # Picking Up a Project on Another Machine or From Another User
7
-
8
- Synced projects travel through ordinary Git refs on `origin`. Their artifact
9
- history is independent from the implementation branch, so a teammate or a
10
- second machine can continue the project even before the branch carrying its
11
- record file merges.
12
-
13
- ## Discover and adopt
14
-
15
- From any checkout with access to `origin`:
16
-
17
- ```bash
18
- oat project list --remote
19
- oat project pull <project>
20
- ```
21
-
22
- `list --remote` discovers `refs/oat/projects/*` directly. `pull` can adopt a
23
- remote project that has no local record yet: it writes the record and creates
24
- the nested checkout. When the selected project is a coordination parent, pull
25
- also discovers and pulls its child projects by default. Pass `--no-children`
26
- only when you intentionally want the selected project alone.
27
-
28
- Completed projects are not adoption candidates. Their authoritative ref is
29
- `refs/oat/completed/<project>`; both `pull` and `open` return a terminal
30
- diagnosis instead of recreating an archived checkout or record. A same-SHA
31
- active ref may remain as an inert alias and is ignored. Differing active and
32
- completed SHAs require repair before lifecycle work continues. The same guard
33
- applies to coordination children: a terminal child discovered while pulling
34
- its parent is reported and skipped rather than adopted.
35
-
36
- After adoption, set or open the project through the normal lifecycle command
37
- you are using. Arrival-aware project skills pull before reading its artifacts.
38
-
39
- An adopted quick-workflow project whose `plan.md` is not implementation-ready
40
- resumes through `oat-project-quick-start`, which continues it in place without
41
- re-scaffolding, rather than through `oat-project-implement`. `oat-project-plan`,
42
- `oat-project-progress`, and `oat-project-next` all route by the single **quick
43
- plan readiness** predicate that `oat-project-quick-start` defines; readiness is
44
- never inferred from the presence of tasks alone.
45
-
46
- `oat project status` and `oat project list` apply the same predicate. For a
47
- quick project at the `plan` phase they recommend `oat-project-quick-start`, with
48
- the unmet clause in the reason, until the plan carries ready frontmatter, a
49
- durable `## Reviews` disposition, and a substantive task; only then do they
50
- recommend `oat-project-implement`. Recommendations for lite, spec-driven, and
51
- import projects are unchanged, because the predicate is quick-workflow policy.
52
-
53
- ## What travels
54
-
55
- - The project ref carries the complete active artifact tree and its history.
56
- - The tracked JSON record travels once the branch containing it is shared or
57
- merged.
58
- - Coordination relationships travel in the artifacts and records pulled with
59
- the project.
60
-
61
- ## What does not travel automatically
62
-
63
- - `local` projects never leave their original machine.
64
- - GitHub forks copy branches and tags, but not the `refs/oat/*` namespace. A
65
- fork collaborator needs access to the upstream remote or an explicit ref
66
- transfer.
67
- - A normal `git clone` fetches branches and tags, not custom OAT refs. OAT
68
- handles remote discovery with `ls-remote` and explicitly fetches the selected
69
- project ref during sync operations such as `pull`; do not expect a generic
70
- clone or `git fetch` to materialize the checkout.
71
-
72
- ## Why completed refs remain durable
73
-
74
- `refs/oat/completed/<project>` is a real Git ref locally and on `origin`. The
75
- objects reachable from it remain garbage-collection roots even when no nested
76
- checkout exists. Branch pruning, remote-tracking-ref pruning, and
77
- `git worktree prune` do not delete the completed ref. Completion deliberately
78
- retains this terminal reachability root so pinned PR links remain valid.
79
-
80
- Only the explicit destructive operation `oat project prune` removes the
81
- completed ref and any matching active alias. Treat that as permanent Git
82
- project-history reachability deletion and review its warnings before using
83
- `--force`. Prune does not remove durable local or S3 archive snapshots, and it
84
- refuses to delete either ref when their SHAs differ.
85
-
86
- ## Archive contents
87
-
88
- When archive is selected, completion copies a synced project into
89
- `.oat/projects/archived/<project>/` without the nested checkout's `.git`
90
- pointer or `reviews/`. S3 snapshots also omit `pr/`, following the existing
91
- archive policy. When archive is disabled or declined, the active synced
92
- checkout remains in place. Successful archived closeout instead uploads the S3
93
- snapshot first when configured, makes the completed ref authoritative, removes
94
- the checkout, and deletes the tracked JSON record. The local archive metadata
95
- retains the source-ref identity needed for recordless retries and later S3
96
- restore without recreating active state.
97
-
98
- If closeout is interrupted after terminal archive identity exists, rerun
99
- completion so it can resume from the completed ref and archive metadata. Do not
100
- use `pull` or `open` to recreate an active record or checkout.
101
-
102
- For a `shared` project, archive moves the project into
103
- `.oat/projects/archived/<project>/` and removes the source directory, while
104
- completion keeps the `activeProject` pointer until the receipt validates.
105
- Rerunning completion after an interruption between the archive and that clear
106
- recognizes exactly this state — the pointer names a source directory that no
107
- longer exists and the archive carries `oat_lifecycle: complete` plus the
108
- `Lifecycle complete; archived locally` phase marker — so it validates the
109
- discovered archive and clears the pointer without archiving a second time or
110
- sealing the project log again. An interruption before the archive leaves the
111
- source directory in place, so completion simply reruns from the start and skips
112
- the work it already finished.
113
-
114
- If the archive cannot be discovered — the source directory is gone and either
115
- no archived project or several match the name — completion stops and leaves the
116
- pointer untouched. Recover manually: locate the archive directory under
117
- `.oat/projects/archived/`, confirm `oat_lifecycle: complete` in its `state.md`,
118
- then clear the pointer with `oat config set activeProject ""`.
119
-
120
- ## Related
121
-
122
- - [Reviewing OAT PRs](reviewing-oat-prs.md)
123
- - [Project Artifacts](artifacts.md)
124
- - [Implementation Execution](implementation-execution.md#synced-projects-in-worktrees)
@@ -1,138 +0,0 @@
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
- OAT projects run reviews at several different lifecycle points, and those points
9
- have different independence requirements. A self-review that checks a freshly
10
- written plan does not need the same producer isolation as a lifecycle gate that
11
- signs off on the final artifact. Rather than force one reviewer-selection rule
12
- onto every point, OAT recognizes **four review flavors**, each with its own
13
- target-resolution policy layered on the shared reviewer role class.
14
-
15
- The distinguishing question is always _"who resolves this review's target, and
16
- how independent must that target be from whatever produced the work?"_ The four
17
- flavors answer it differently while preserving one invariant: the reviewer runs
18
- **at or above the ceiling** (see [Dispatch Policy](dispatch-ceiling.md)). Gate
19
- independence is project policy layered on the generic reviewer role class
20
- described in the `oat-project-dispatch-subagents` lifecycle-role table; this page
21
- covers _which_ flavor fires _when_ and _who_ resolves its target, and links out
22
- for the deep review request/receive mechanics.
23
-
24
- ## Quick Look
25
-
26
- - What it does: names the four review flavors and states who resolves each
27
- one's reviewer target.
28
- - When to use it: when you need to know which review fires at a lifecycle point
29
- and whether it inherits, pins the ceiling, or requires an independent gate.
30
- - Primary sources: `oat-project-implement` phase-execution mechanics, the
31
- `oat-project-dispatch-subagents` lifecycle-role table, and project design
32
- Decision #11.
33
-
34
- ## Flow map
35
-
36
- ```mermaid
37
- flowchart TD
38
- subgraph Planning
39
- PL["Planning-phase\nartifact self-review"] --> PLR["Inherit planning parent"]
40
- PLR --> PLT["Parent model\n(root already at/above ceiling)"]
41
- end
42
-
43
- subgraph Implementation
44
- IM["Root-owned phase\nself-review"] --> IMR["Resolve dispatch ceiling"]
45
- IMR --> IMPIN["At-ceiling pin\n(ceiling final candidate)"]
46
- IMR --> IMINH["Inherit\n(only if dispatcher known at/above ceiling)"]
47
- IMR --> IMCLI["Exact CLI reviewer\n(selected pre-launch)"]
48
- end
49
-
50
- subgraph Gates
51
- PG["Phase review gate\n(external)"] --> PGR["Configured cross-family\nexec target (gates.execTargets)"]
52
- PGR --> PGT["Independent CLI/exec target\n(host-avoidance; fail closed)"]
53
-
54
- LG["Lifecycle / final gate"] --> LGR["Cross-runtime CLI\nexec target"]
55
- LGR --> LGT["Producer-independent target\n(fail closed, no self-review substitute)"]
56
- LGT -. may spawn .-> LGN["Nested managed\nreviewer child inside gate"]
57
- end
58
- ```
59
-
60
- The dotted branch marks the only flavor that may **spawn a nested managed
61
- reviewer child** inside the gate exec target: the lifecycle/final gate.
62
-
63
- ## The four flavors
64
-
65
- | Flavor | Lifecycle point | Target resolution |
66
- | ----------------------------------- | ------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
67
- | 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) |
68
- | 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 |
69
- | Phase review gate (external) | Optional non-pausing gate after a phase passes its self-review | Independent configured cross-family CLI/exec target (`gates.execTargets`), host-avoidance, unconstrained by native catalog; fail closed if unavailable |
70
- | Lifecycle / final gate | End-of-lifecycle sign-off | Cross-runtime CLI exec target, independent of producer context; fails closed rather than substituting same-context self-review; may spawn a nested managed reviewer child inside the gate exec target |
71
-
72
- The first two flavors are **self-reviews**. Planning review inherits its
73
- producing parent by default; implementation phase review is dispatched by the
74
- project root after the phase producer returns. The last two are **gates** — an
75
- external, configured, producer-independent target. Phase implementation may run
76
- _below_ the review ceiling for cost reasons, but review must never silently
77
- inherit the below-ceiling phase agent.
78
-
79
- Pre-plan inheritance has a narrow executable guard. When dispatch resolution
80
- reports `unresolvedReason: policy`, an artifact review of `discovery`, `design`,
81
- or `spec` deliberately inherits the current planning context and records
82
- `selection_reason: inherit (pre-plan; no project policy)`. An explicit project
83
- policy is still honored at those scopes. Missing or incomplete ladders
84
- (`unresolvedReason: ladder | both`) fail closed, as do plan-scope artifact
85
- reviews and every code review without a resolved policy. Gate exec-target
86
- selection is separate and unaffected.
87
-
88
- ## Independence and fail-closed semantics
89
-
90
- The invariant across all four flavors is that the reviewer runs **at or above
91
- the ceiling**. What changes between flavors is the required _independence from
92
- the producer_, and that independence is enforced by failing closed rather than
93
- silently downgrading:
94
-
95
- - **Planning self-review** needs the least independence. The planning root
96
- already runs at or above the review ceiling, so inheriting the parent model
97
- satisfies the invariant without managed re-pinning. Pinning is _possible_
98
- once the ceiling is resolved during planning, but it is not the default.
99
- - **Implementation self-review** needs ceiling-level capability but not
100
- cross-family isolation. The root resolves the dispatch ceiling and pins the
101
- tier's final candidate after the phase report. Inheritance is allowed only
102
- when the root dispatcher is _known_ to be at or above the ceiling; otherwise
103
- an exact provider CLI reviewer is selected before launch. Reviewer selection
104
- is never delegated to the phase implementer.
105
- - **Phase review gate** adds cross-family independence. It uses a configured
106
- independent exec target from `gates.execTargets` with host-avoidance,
107
- unconstrained by the harness's native subagent catalog. If the required
108
- independent target cannot be enforced, the gate **fails closed** — it does
109
- not downgrade to producer-context review.
110
- - **Lifecycle / final gate** requires the strongest independence: a
111
- cross-runtime CLI exec target chosen independently of the producer context.
112
- It fails closed rather than substituting a same-context self-review, and it is
113
- the one flavor permitted to spawn a nested managed reviewer child _inside_ the
114
- gate exec target when the gate's own contract calls for it.
115
-
116
- Gate independence is not a property of the generic reviewer class; it is project
117
- policy layered on top of it. The dispatch adapter resolves the configured gate
118
- target before launch and passes it as exact selection input. Fail-closed
119
- behavior for both gate flavors is deliberate: an unavailable independent target
120
- blocks the gate instead of quietly reusing whatever produced the work. For the
121
- gate configuration keys and non-pausing behavior, see
122
- [Workflow gates](../../cli-utilities/workflow-gates.md) and the
123
- [phase review gate](reviews.md#phase-review-gate) section of the review doc.
124
-
125
- ## Related
126
-
127
- - [Reviews](reviews.md) — the review request/receive flows and the deep review
128
- contract these flavors plug into.
129
- - [Dispatch Policy](dispatch-ceiling.md) — named ceilings, at-ceiling reviewer
130
- selection, and the Dispatch Report V1 / producer-provenance record.
131
- - [HiLL Checkpoints](hill-checkpoints.md) — how the non-pausing phase review gate
132
- relates to pauseable lifecycle checkpoints.
133
- - [Orchestration Model](orchestration-model.md) — the native-first dispatch
134
- topology these reviewer roles run inside.
135
- - [Workflow gates](../../cli-utilities/workflow-gates.md) — gate configuration
136
- and exec-target selection.
137
- - [Smoke testing](../../contributing/smoke-testing.md) — how the fixture makes
138
- these flavors observable and assertable.