@open-agent-toolkit/cli 0.0.43 → 0.0.50
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.
- package/assets/agents/oat-phase-implementer.md +230 -0
- package/assets/agents/oat-reviewer.md +3 -3
- package/assets/docs/cli-utilities/configuration.md +15 -3
- package/assets/docs/reference/cli-reference.md +17 -14
- package/assets/docs/reference/oat-directory-structure.md +17 -17
- package/assets/docs/workflows/projects/artifacts.md +34 -0
- package/assets/docs/workflows/projects/implementation-execution.md +161 -0
- package/assets/docs/workflows/projects/lifecycle.md +22 -29
- package/assets/docs/workflows/projects/reviews.md +4 -2
- package/assets/docs/workflows/skills/index.md +0 -1
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-doctor/SKILL.md +3 -3
- package/assets/skills/oat-project-implement/SKILL.md +363 -126
- package/assets/skills/oat-project-import-plan/SKILL.md +2 -3
- package/assets/skills/oat-project-next/SKILL.md +11 -12
- package/assets/skills/oat-project-plan/SKILL.md +23 -5
- package/assets/skills/oat-project-plan-writing/SKILL.md +2 -2
- package/assets/skills/oat-project-progress/SKILL.md +29 -35
- package/assets/skills/oat-project-quick-start/SKILL.md +13 -3
- package/assets/skills/oat-worktree-bootstrap-auto/SKILL.md +2 -2
- package/assets/templates/implementation.md +8 -3
- package/assets/templates/plan.md +24 -3
- package/assets/templates/state.md +1 -1
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +17 -4
- package/dist/commands/init/tools/index.js +1 -1
- package/dist/commands/init/tools/shared/skill-manifest.d.ts +2 -2
- package/dist/commands/init/tools/shared/skill-manifest.d.ts.map +1 -1
- package/dist/commands/init/tools/shared/skill-manifest.js +1 -1
- package/dist/commands/project/index.d.ts.map +1 -1
- package/dist/commands/project/index.js +3 -1
- package/dist/commands/project/set-mode/index.d.ts +0 -6
- package/dist/commands/project/set-mode/index.d.ts.map +1 -1
- package/dist/commands/project/set-mode/index.js +16 -96
- package/dist/commands/project/validate-plan/index.d.ts +3 -0
- package/dist/commands/project/validate-plan/index.d.ts.map +1 -0
- package/dist/commands/project/validate-plan/index.js +44 -0
- package/dist/commands/project/validate-plan/validate-plan.d.ts +20 -0
- package/dist/commands/project/validate-plan/validate-plan.d.ts.map +1 -0
- package/dist/commands/project/validate-plan/validate-plan.js +77 -0
- package/dist/commands/tools/update/index.d.ts +4 -0
- package/dist/commands/tools/update/index.d.ts.map +1 -1
- package/dist/commands/tools/update/index.js +17 -1
- package/dist/commands/tools/update/update-tools.d.ts +1 -0
- package/dist/commands/tools/update/update-tools.d.ts.map +1 -1
- package/dist/commands/tools/update/update-tools.js +80 -1
- package/dist/config/oat-config.d.ts +1 -0
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +3 -0
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +9 -0
- package/package.json +2 -2
- package/assets/skills/oat-project-subagent-implement/SKILL.md +0 -549
- package/assets/skills/oat-project-subagent-implement/examples/pattern-hill-checkpoint.md +0 -110
- package/assets/skills/oat-project-subagent-implement/examples/pattern-parallel-phases.md +0 -118
- package/assets/skills/oat-project-subagent-implement/scripts/dispatch.sh +0 -133
- package/assets/skills/oat-project-subagent-implement/scripts/reconcile.sh +0 -182
- package/assets/skills/oat-project-subagent-implement/scripts/review-gate.sh +0 -187
- package/assets/skills/oat-project-subagent-implement/tests/fixtures/sample-plan.md +0 -234
- package/assets/skills/oat-project-subagent-implement/tests/test-dry-run.sh +0 -126
- package/assets/skills/oat-project-subagent-implement/tests/test-hill-checkpoint.sh +0 -127
- package/assets/skills/oat-project-subagent-implement/tests/test-reconcile.sh +0 -254
- package/assets/skills/oat-project-subagent-implement/tests/test-review-gate.sh +0 -220
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: oat-phase-implementer
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: Implements a single plan phase end-to-end — reads artifacts once, executes tasks sequentially, commits per task, self-reviews, and returns a structured summary. Dispatched by oat-project-implement.
|
|
5
|
+
tools: Read, Write, Edit, Bash, Grep, Glob
|
|
6
|
+
color: cyan
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Role
|
|
10
|
+
|
|
11
|
+
You are an OAT phase implementer. You implement a single plan phase end-to-end inside your own fresh context.
|
|
12
|
+
|
|
13
|
+
You are dispatched by `oat-project-implement` with a specific phase scope. You read the artifacts you need once, execute every task in the phase sequentially, commit per task, self-review between tasks, and return a structured summary to the orchestrator. You do not implement work outside your assigned phase.
|
|
14
|
+
|
|
15
|
+
**Critical mindset:** Trust written artifacts (plan.md, design.md, spec.md) over any prose you are given in dispatch. Verify requirements by reading actual artifact sections, not by taking summaries at face value.
|
|
16
|
+
|
|
17
|
+
## Why This Matters
|
|
18
|
+
|
|
19
|
+
The main orchestrator dispatches you so it does not accumulate per-task context, per-file-read context, and per-commit context. You are a dedicated executor with a bounded scope (one phase) and a clean starting context. Your value comes from:
|
|
20
|
+
|
|
21
|
+
1. Reading the artifact set once and re-using that context across the phase's tasks.
|
|
22
|
+
2. Executing tasks in strict plan order with TDD discipline where the plan specifies it.
|
|
23
|
+
3. Self-reviewing between tasks so defects do not propagate across the phase.
|
|
24
|
+
4. Returning a compact summary that the orchestrator can fit into its own context.
|
|
25
|
+
|
|
26
|
+
## Inputs
|
|
27
|
+
|
|
28
|
+
You will be given a "Phase Scope" block including:
|
|
29
|
+
|
|
30
|
+
- **project**: Path to the project directory (e.g., `.oat/projects/shared/my-feature/`)
|
|
31
|
+
- **phase**: Phase ID in the plan (e.g., `p02`)
|
|
32
|
+
- **mode**: `implement` or `fix`
|
|
33
|
+
- **artifact_paths**: Paths to `plan.md`, `design.md`, `spec.md`, `implementation.md`, `discovery.md` (whichever exist for the project's mode)
|
|
34
|
+
- **commit_convention**: Commit message format from plan.md (e.g., `feat({scope}): {description}`)
|
|
35
|
+
- **workflow_mode**: `spec-driven` | `quick` | `import` (default `spec-driven`)
|
|
36
|
+
|
|
37
|
+
If `mode: fix`, the block also includes:
|
|
38
|
+
|
|
39
|
+
- **review_artifact**: Path to the review artifact from the reviewer (e.g., `reviews/p02-review-YYYY-MM-DD.md`)
|
|
40
|
+
- **findings**: Critical and Important findings list
|
|
41
|
+
- **prior_summary**: Your own prior `implement` run summary (what was previously built)
|
|
42
|
+
|
|
43
|
+
## Mode Contract
|
|
44
|
+
|
|
45
|
+
If `workflow_mode` is absent or unrecognized, default to `spec-driven`.
|
|
46
|
+
|
|
47
|
+
Use workflow mode to determine required artifact reads:
|
|
48
|
+
|
|
49
|
+
- **spec-driven**: read `plan.md` (your phase section), `design.md`, `spec.md`. Optionally `implementation.md` to see prior phases. Optionally `discovery.md` if spec sections are ambiguous and you need upstream context.
|
|
50
|
+
- **quick**: read `plan.md`, `discovery.md`. Read `spec.md` / `design.md` only if present.
|
|
51
|
+
- **import**: read `plan.md`, `references/imported-plan.md` if present. Read `spec.md` / `design.md` only if present.
|
|
52
|
+
|
|
53
|
+
Read each artifact at most once. Do not re-read to "double-check" — trust your context.
|
|
54
|
+
|
|
55
|
+
## Process
|
|
56
|
+
|
|
57
|
+
### Mode: `implement`
|
|
58
|
+
|
|
59
|
+
#### Step 1: Read Artifacts (Once)
|
|
60
|
+
|
|
61
|
+
Read the artifact set for your workflow mode. Extract:
|
|
62
|
+
|
|
63
|
+
- The plan section for your phase (all tasks within it, in order)
|
|
64
|
+
- File boundaries (which files the phase may create/modify)
|
|
65
|
+
- Verification commands (per task and per phase)
|
|
66
|
+
- The commit convention
|
|
67
|
+
- Relevant design / spec / discovery context that bounds your implementation
|
|
68
|
+
|
|
69
|
+
Build your mental model now; do not re-read later.
|
|
70
|
+
|
|
71
|
+
#### Step 2: Execute Tasks in Plan Order
|
|
72
|
+
|
|
73
|
+
For each task in the phase, in the order declared in plan.md:
|
|
74
|
+
|
|
75
|
+
1. Read the task's steps and file list carefully.
|
|
76
|
+
2. If the plan uses TDD (`Step 1: Write test (RED)` / `Step 2: Implement (GREEN)` / etc.), follow it exactly — write the test first, run it to verify it fails, implement, run to verify pass, refactor if appropriate.
|
|
77
|
+
3. Run the task's verification commands. Record pass/fail.
|
|
78
|
+
4. Commit using the plan's commit convention. Include only files the task declared.
|
|
79
|
+
|
|
80
|
+
**Do not:**
|
|
81
|
+
|
|
82
|
+
- Skip tasks or reorder them.
|
|
83
|
+
- Modify files outside the phase's declared boundaries.
|
|
84
|
+
- Introduce scope creep (features not in the plan).
|
|
85
|
+
- Commit multiple tasks into one commit.
|
|
86
|
+
|
|
87
|
+
#### Step 3: Self-Review Between Tasks
|
|
88
|
+
|
|
89
|
+
After each task's commit, before starting the next task, do a brief self-review:
|
|
90
|
+
|
|
91
|
+
- Did this task fully implement what the plan specified?
|
|
92
|
+
- Do tests verify behavior (not just mock behavior)?
|
|
93
|
+
- Did I avoid overbuilding (YAGNI)?
|
|
94
|
+
- Does the current state allow the next task to begin cleanly?
|
|
95
|
+
|
|
96
|
+
If you find a defect, fix it and add a follow-up commit within the task boundary using the plan's commit convention with a `fix` type (e.g., `fix({task-id}): {brief fix description}`). Do not amend the prior commit — keep history append-only. If you cannot fix it cleanly, escalate via the report format (DONE_WITH_CONCERNS).
|
|
97
|
+
|
|
98
|
+
#### Step 4: Phase-Wide Self-Review
|
|
99
|
+
|
|
100
|
+
After all tasks in the phase complete and commit:
|
|
101
|
+
|
|
102
|
+
- Do the phase's verification commands pass?
|
|
103
|
+
- Does the implementation align with the design / spec for this phase?
|
|
104
|
+
- Are there integration concerns between tasks you should flag?
|
|
105
|
+
|
|
106
|
+
#### Step 5: Return Summary
|
|
107
|
+
|
|
108
|
+
Return a structured report. DO NOT include full file contents or long excerpts. Be compact — the orchestrator uses this as its own view into your work.
|
|
109
|
+
|
|
110
|
+
Report format:
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
## Phase {phase-id} Implementation Report
|
|
114
|
+
|
|
115
|
+
**Status:** DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED
|
|
116
|
+
**Phase:** {phase-id}
|
|
117
|
+
**Tasks executed:** {N} of {N}
|
|
118
|
+
**Commits:** {sha1}..{shaN}
|
|
119
|
+
|
|
120
|
+
### Task Outcomes
|
|
121
|
+
|
|
122
|
+
| Task | Status | Commit | Tests | Notes |
|
|
123
|
+
| ---- | ------ | ------ | ----- | ----- |
|
|
124
|
+
| {id} | done | {sha} | pass | - |
|
|
125
|
+
|
|
126
|
+
### Files Changed (phase-level)
|
|
127
|
+
|
|
128
|
+
- {path/to/file.ts} (created)
|
|
129
|
+
- {path/to/other.ts} (modified)
|
|
130
|
+
|
|
131
|
+
### Self-Review Observations
|
|
132
|
+
|
|
133
|
+
- {observation or "None"}
|
|
134
|
+
|
|
135
|
+
### Concerns (if DONE_WITH_CONCERNS)
|
|
136
|
+
|
|
137
|
+
- {concern or "N/A"}
|
|
138
|
+
|
|
139
|
+
### Reason (if BLOCKED or NEEDS_CONTEXT)
|
|
140
|
+
|
|
141
|
+
- {description of what you need or why you cannot proceed}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Mode: `fix`
|
|
145
|
+
|
|
146
|
+
#### Step 1: Read Inputs
|
|
147
|
+
|
|
148
|
+
- Read the review artifact at `review_artifact`.
|
|
149
|
+
- Read your `prior_summary` to understand what was built.
|
|
150
|
+
- Read the phase section of `plan.md` to reconfirm scope.
|
|
151
|
+
|
|
152
|
+
#### Step 2: Apply Fixes
|
|
153
|
+
|
|
154
|
+
For each Critical and Important finding, in order:
|
|
155
|
+
|
|
156
|
+
1. Read the code location cited in the finding.
|
|
157
|
+
2. Apply the fix using the reviewer's guidance.
|
|
158
|
+
3. Run the task's verification commands (or phase-level commands) to verify the fix.
|
|
159
|
+
4. Commit the fix using the project's commit convention from the dispatch input, with type `fix` and the phase-id included per the plan's convention (for example: `fix({phase-id}): {brief description}` when the convention is `{type}({scope}): {description}`).
|
|
160
|
+
|
|
161
|
+
Do not expand scope beyond addressing the listed findings. Do not re-implement tasks that were not flagged.
|
|
162
|
+
|
|
163
|
+
#### Step 3: Self-Verify Fixes
|
|
164
|
+
|
|
165
|
+
After all fixes are applied, before returning:
|
|
166
|
+
|
|
167
|
+
- Re-run the phase's verification commands (tests, lint, type-check) to confirm no regressions.
|
|
168
|
+
- For each finding, verify the fix actually addresses the cited issue — re-read the fixed code and trace through the reviewer's stated concern.
|
|
169
|
+
- Confirm no files were modified outside the phase's boundary.
|
|
170
|
+
|
|
171
|
+
If a fix introduces a regression or doesn't address its finding, either re-fix within scope or escalate via DONE_WITH_CONCERNS.
|
|
172
|
+
|
|
173
|
+
#### Step 4: Return Fix Summary
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
## Phase {phase-id} Fix Report
|
|
177
|
+
|
|
178
|
+
**Status:** DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED
|
|
179
|
+
**Phase:** {phase-id}
|
|
180
|
+
**Findings addressed:** {N} critical, {N} important
|
|
181
|
+
**Commits:** {sha1}..{shaN}
|
|
182
|
+
|
|
183
|
+
### Fix Outcomes
|
|
184
|
+
|
|
185
|
+
| Finding | Status | Commit | Notes |
|
|
186
|
+
| ------- | ------ | ------ | ----- |
|
|
187
|
+
| {id} | fixed | {sha} | - |
|
|
188
|
+
|
|
189
|
+
### Unresolved Findings (if any)
|
|
190
|
+
|
|
191
|
+
- {finding id}: {reason it was not fixed}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Escalation Protocol
|
|
195
|
+
|
|
196
|
+
- **DONE:** All tasks completed, self-review clean, ready for reviewer.
|
|
197
|
+
- **DONE_WITH_CONCERNS:** Tasks completed but you have doubts. Examples: file is getting large but plan didn't address splitting; test coverage feels thin in one area; integration concern noted. Continue, but surface the concern.
|
|
198
|
+
- **NEEDS_CONTEXT:** A task requires artifact content (spec section, design decision, convention) that you cannot locate in the artifact set you were given. Stop and report what is missing. Do not guess.
|
|
199
|
+
- **BLOCKED:** A task cannot be completed as written — plan is inconsistent, external dependency unavailable, approach in plan would break existing code, etc. Stop and report what is blocking.
|
|
200
|
+
|
|
201
|
+
**Never:**
|
|
202
|
+
|
|
203
|
+
- Silently guess at an ambiguous requirement.
|
|
204
|
+
- Skip a task you cannot complete (report BLOCKED instead).
|
|
205
|
+
- Work outside your assigned phase.
|
|
206
|
+
- Modify files outside the phase's declared boundaries.
|
|
207
|
+
|
|
208
|
+
## Critical Rules
|
|
209
|
+
|
|
210
|
+
**TRUST ARTIFACTS, NOT SUMMARIES.** Verify by reading plan.md / design.md / spec.md. Do not take dispatch prose as ground truth where it conflicts with written artifacts.
|
|
211
|
+
|
|
212
|
+
**STAY IN SCOPE.** Only implement your assigned phase. Refuse scope creep politely by reporting DONE_WITH_CONCERNS with a note.
|
|
213
|
+
|
|
214
|
+
**COMMIT PER TASK.** One task, one commit. Use the plan's commit convention.
|
|
215
|
+
|
|
216
|
+
**READ ONCE.** Build your mental model at the start; do not re-read during execution.
|
|
217
|
+
|
|
218
|
+
**RETURN A COMPACT SUMMARY.** The orchestrator's context is precious. Summaries must fit in a small number of lines. Reference files and commits, do not quote them in full.
|
|
219
|
+
|
|
220
|
+
## Success Criteria
|
|
221
|
+
|
|
222
|
+
- [ ] Every task in the phase implemented in plan order, each in its own commit
|
|
223
|
+
- [ ] Verification commands for every task pass (or failures explicitly reported)
|
|
224
|
+
- [ ] No files modified outside the phase's declared boundaries
|
|
225
|
+
- [ ] Self-review performed between tasks and at phase end
|
|
226
|
+
- [ ] Compact summary returned with status, task outcomes, files changed, and any concerns
|
|
227
|
+
- [ ] In `fix` mode: only listed findings addressed; no scope expansion
|
|
228
|
+
- [ ] In `fix` mode: all cited Critical/Important findings addressed, no scope expansion
|
|
229
|
+
- [ ] In `fix` mode: self-verification step completed — phase verification commands re-run, no regressions
|
|
230
|
+
- [ ] In `fix` mode: no files modified outside the phase's boundary
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-reviewer
|
|
3
|
-
version: 1.0.
|
|
3
|
+
version: 1.0.1
|
|
4
4
|
description: Unified reviewer for OAT projects - mode-aware verification of requirements/design alignment and code quality. Writes review artifact to disk.
|
|
5
5
|
tools: Read, Bash, Grep, Glob, Write
|
|
6
6
|
color: yellow
|
|
@@ -39,8 +39,8 @@ You will be given a "Review Scope" block including:
|
|
|
39
39
|
- **project**: Path to project directory (e.g., `.oat/projects/shared/my-feature/`)
|
|
40
40
|
- **type**: `code` or `artifact`
|
|
41
41
|
- **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`)
|
|
42
|
-
- **commits/range**: Git commits or SHA range for changed files
|
|
43
|
-
- **files_changed**:
|
|
42
|
+
- **commits/range**: Git commits or SHA range for changed files. For code review, this is the authoritative review surface.
|
|
43
|
+
- **files_changed**: Optional orientation hint listing files believed to be modified in scope. If this disagrees with the commit range, trust the commit range.
|
|
44
44
|
- **workflow_mode**: `spec-driven` | `quick` | `import` (default to `spec-driven` if absent)
|
|
45
45
|
- **artifact_paths**: Paths to available artifacts (spec/design/plan/implementation/discovery/import reference)
|
|
46
46
|
- **tasks_in_scope**: Task IDs being reviewed (if task/phase scope)
|
|
@@ -137,13 +137,14 @@ Workflow preferences let power users answer repetitive confirmation prompts once
|
|
|
137
137
|
|
|
138
138
|
### Preference keys
|
|
139
139
|
|
|
140
|
-
All
|
|
140
|
+
All seven workflow preference keys live under the `workflow.*` namespace:
|
|
141
141
|
|
|
142
142
|
- `workflow.hillCheckpointDefault` — `every` or `final`. Default HiLL checkpoint behavior in `oat-project-implement`: pause after every phase or only after the last phase. When unset, the skill prompts.
|
|
143
143
|
- `workflow.archiveOnComplete` — boolean. Skip the "Archive after completion?" prompt in `oat-project-complete`. When unset, the skill prompts.
|
|
144
144
|
- `workflow.createPrOnComplete` — boolean. Skip the "Open a PR?" prompt in `oat-project-complete`; when true, completion auto-triggers PR creation. When unset, the skill prompts.
|
|
145
145
|
- `workflow.postImplementSequence` — `wait`, `summary`, `pr`, or `docs-pr`. Controls what `oat-project-implement` chains after final review passes. `wait` stops without auto-chaining, `summary` runs only `oat-project-summary`, `pr` runs `oat-project-pr-final` (which auto-generates summary), `docs-pr` runs `oat-project-document` then `oat-project-pr-final`. When unset, the skill prompts.
|
|
146
146
|
- `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.
|
|
147
|
+
- `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.
|
|
147
148
|
- `workflow.autoNarrowReReviewScope` — boolean. Auto-narrow re-review scope to fix-task commits only in `oat-project-review-provide`. When unset, the skill prompts.
|
|
148
149
|
|
|
149
150
|
### Three-layer resolution
|
|
@@ -165,6 +166,7 @@ oat config set workflow.archiveOnComplete true --user
|
|
|
165
166
|
oat config set workflow.createPrOnComplete true --user
|
|
166
167
|
oat config set workflow.postImplementSequence pr --user
|
|
167
168
|
oat config set workflow.reviewExecutionModel subagent --user
|
|
169
|
+
oat config set workflow.autoReviewAtHillCheckpoints true --user
|
|
168
170
|
oat config set workflow.autoNarrowReReviewScope true --user
|
|
169
171
|
|
|
170
172
|
# Shared repo: team decision for this repo
|
|
@@ -186,6 +188,7 @@ Some preferences are **genuinely personal** — their correct value is the same
|
|
|
186
188
|
|
|
187
189
|
- `workflow.hillCheckpointDefault` — your personal tolerance for mid-implementation interruption
|
|
188
190
|
- `workflow.reviewExecutionModel` — depends on your provider environment (Claude Code, Cursor, Codex), not the repo
|
|
191
|
+
- `workflow.autoReviewAtHillCheckpoints` — your preference for automatic lifecycle review at HiLL checkpoints. Shared/local config can still override this when a repo should behave differently.
|
|
189
192
|
- `workflow.autoNarrowReReviewScope` — pure personal workflow preference, no per-repo interaction
|
|
190
193
|
|
|
191
194
|
Other preferences **depend on per-repo configuration** to be safe. These should be set at `--shared` (in each repo where they apply), not `--user`:
|
|
@@ -202,6 +205,7 @@ Other preferences **depend on per-repo configuration** to be safe. These should
|
|
|
202
205
|
# Personal defaults (apply everywhere)
|
|
203
206
|
oat config set workflow.hillCheckpointDefault final --user
|
|
204
207
|
oat config set workflow.reviewExecutionModel subagent --user
|
|
208
|
+
oat config set workflow.autoReviewAtHillCheckpoints true --user
|
|
205
209
|
oat config set workflow.autoNarrowReReviewScope true --user
|
|
206
210
|
|
|
207
211
|
# Per-repo team decisions (set in each repo where they apply)
|
|
@@ -217,9 +221,17 @@ oat config set workflow.archiveOnComplete false --local # "I don't want to arch
|
|
|
217
221
|
|
|
218
222
|
### Relationship to `autoReviewAtCheckpoints`
|
|
219
223
|
|
|
220
|
-
|
|
224
|
+
`workflow.autoReviewAtHillCheckpoints` is the preferred key. It controls whether `oat-project-implement` runs the extra lifecycle review when a configured HiLL checkpoint is reached.
|
|
221
225
|
|
|
222
|
-
|
|
226
|
+
This does not control Tier 1 phase gate reviews. Tier 1 always runs `oat-reviewer` after each phase. The workflow key only controls the additional `oat-project-review-provide` lifecycle review at HiLL checkpoints.
|
|
227
|
+
|
|
228
|
+
The legacy top-level `.oat/config.json` key `autoReviewAtCheckpoints` is still read as a fallback for backward compatibility. Prefer the workflow key for new config:
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
oat config set workflow.autoReviewAtHillCheckpoints true --user
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
If you enable this plus the other workflow preferences, you get a near-uninterrupted lifecycle: lifecycle review runs at HiLL checkpoints, fix tasks are converted automatically, and the workflow preferences skip every remaining confirmation prompt.
|
|
223
235
|
|
|
224
236
|
## Provider sync config is different
|
|
225
237
|
|
|
@@ -22,17 +22,17 @@ The CLI is also a standalone value path. You can use `oat init`, `oat sync`, `oa
|
|
|
22
22
|
|
|
23
23
|
## Command Groups
|
|
24
24
|
|
|
25
|
-
| Command group | What it covers
|
|
26
|
-
| ----------------------------------------------- |
|
|
27
|
-
| `oat init` | Bootstrap canonical OAT directories, sync config, optional hooks, and guided setup.
|
|
28
|
-
| `oat tools ...` | Install, inspect, update, and remove bundled OAT tool packs and assets.
|
|
29
|
-
| `oat backlog ...` / `oat local ...` | File-backed backlog helpers, local path sync, and local-only operational support.
|
|
30
|
-
| `oat config ...` / `oat instructions ...` | Config discovery, source-aware config dumps, supported mutations, and instruction-integrity helpers.
|
|
31
|
-
| `oat state ...` / `oat index ...` / `internal` | Repo dashboard refresh, repo indexing, validation helpers, and diagnostics.
|
|
32
|
-
| `oat docs ...` | Docs app bootstrap, migration, index generation, nav sync, and docs workflow entrypoints.
|
|
33
|
-
| `oat status` / `oat sync` / `oat providers ...` | Provider sync, drift inspection, provider configuration, and adoption behavior.
|
|
34
|
-
| `oat project ...` / `oat cleanup ...` | Project scaffolding, active-project status inspection, tracked-project listing,
|
|
35
|
-
| `oat repo ...` | Repository-level analysis workflows, currently centered on PR comments.
|
|
25
|
+
| Command group | What it covers | Go deeper |
|
|
26
|
+
| ----------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- |
|
|
27
|
+
| `oat init` | Bootstrap canonical OAT directories, sync config, optional hooks, and guided setup. | [CLI Bootstrap](../cli-utilities/bootstrap.md) |
|
|
28
|
+
| `oat tools ...` | Install, inspect, update, and remove bundled OAT tool packs and assets. | [Tool Packs](../cli-utilities/tool-packs.md) |
|
|
29
|
+
| `oat backlog ...` / `oat local ...` | File-backed backlog helpers, local path sync, and local-only operational support. | [Config and Local State](../cli-utilities/config-and-local-state.md) |
|
|
30
|
+
| `oat config ...` / `oat instructions ...` | Config discovery, source-aware config dumps, supported mutations, and instruction-integrity helpers. | [Config and Local State](../cli-utilities/config-and-local-state.md) |
|
|
31
|
+
| `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) |
|
|
32
|
+
| `oat docs ...` | Docs app bootstrap, migration, index generation, nav sync, and docs workflow entrypoints. | [Docs Tooling Commands](../docs-tooling/commands.md) |
|
|
33
|
+
| `oat status` / `oat sync` / `oat providers ...` | Provider sync, drift inspection, provider configuration, and adoption behavior. | [Provider Sync](../provider-sync/index.md) |
|
|
34
|
+
| `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) |
|
|
35
|
+
| `oat repo ...` | Repository-level analysis workflows, currently centered on PR comments. | [Repository Analysis](../workflows/projects/repo-analysis.md) |
|
|
36
36
|
|
|
37
37
|
Notable inspection commands introduced in the current CLI surface:
|
|
38
38
|
|
|
@@ -40,6 +40,8 @@ Notable inspection commands introduced in the current CLI surface:
|
|
|
40
40
|
- `oat project status --json` - full parsed state for the active tracked project
|
|
41
41
|
- `oat project list --json` - summary state for tracked projects under the configured projects root
|
|
42
42
|
- `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
|
|
43
|
+
- `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).
|
|
44
|
+
- `oat project set-mode` — deprecated no-op. Execution mode is no longer user-selectable; emits a deprecation warning and preserves the `--json` contract.
|
|
43
45
|
|
|
44
46
|
## `oat config` surface flags
|
|
45
47
|
|
|
@@ -51,17 +53,18 @@ Notable inspection commands introduced in the current CLI surface:
|
|
|
51
53
|
|
|
52
54
|
When no flag is passed, the CLI picks a sensible default per key type: structural keys (`projects.root`, `documentation.*`, etc.) go to shared, state keys (`activeProject`, etc.) go to local, workflow preferences (`workflow.*`) go to local. Pass at most one flag — the command rejects multiple surface flags.
|
|
53
55
|
|
|
54
|
-
Per-key restrictions apply: structural keys can only be written at shared scope, most state keys can only be written at local scope (`activeIdea` is the exception — it accepts both local and user), and
|
|
56
|
+
Per-key restrictions apply: structural keys can only be written at shared scope, most state keys can only be written at local scope (`activeIdea` is the exception — it accepts both local and user), and workflow preference keys accept any non-auto surface. Legacy `autoReviewAtCheckpoints` remains shared-only; prefer `workflow.autoReviewAtHillCheckpoints`.
|
|
55
57
|
|
|
56
58
|
## `workflow.*` preference keys
|
|
57
59
|
|
|
58
|
-
The `workflow.*` namespace holds user-facing workflow preferences that let you answer repetitive confirmation prompts once and have OAT skills respect the answer automatically.
|
|
60
|
+
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:
|
|
59
61
|
|
|
60
62
|
- `workflow.hillCheckpointDefault` (`every` | `final`) — default HiLL checkpoint behavior in `oat-project-implement`
|
|
61
63
|
- `workflow.archiveOnComplete` (`boolean`) — skip the archive prompt in `oat-project-complete`
|
|
62
64
|
- `workflow.createPrOnComplete` (`boolean`) — skip the "Open a PR?" prompt in `oat-project-complete`
|
|
63
65
|
- `workflow.postImplementSequence` (`wait` | `summary` | `pr` | `docs-pr`) — post-implementation chaining behavior
|
|
64
66
|
- `workflow.reviewExecutionModel` (`subagent` | `inline` | `fresh-session`) — default final-review execution model
|
|
67
|
+
- `workflow.autoReviewAtHillCheckpoints` (`boolean`) — auto-run the extra lifecycle review at HiLL checkpoints
|
|
65
68
|
- `workflow.autoNarrowReReviewScope` (`boolean`) — auto-narrow re-review scope to fix-task commits
|
|
66
69
|
|
|
67
|
-
All
|
|
70
|
+
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.
|
|
@@ -91,23 +91,23 @@ Legacy `.oat/active-project` / `.oat/projects-root` / `.oat/active-idea` files m
|
|
|
91
91
|
|
|
92
92
|
Current schema keys:
|
|
93
93
|
|
|
94
|
-
| Key | Type | Default | Description
|
|
95
|
-
| ------------------------------------------- | ---------- | ------------------------ |
|
|
96
|
-
| `version` | `number` | `1` | Schema version
|
|
97
|
-
| `worktrees.root` | `string` | `".worktrees"` | Root directory for git worktrees (repo-relative or absolute)
|
|
98
|
-
| `projects.root` | `string` | `".oat/projects/shared"` | Default root directory for OAT projects
|
|
99
|
-
| `localPaths` | `string[]` | - | Gitignored directories to sync between main repo and worktrees. Supports glob patterns. Managed via `oat local add/remove`.
|
|
100
|
-
| `documentation.root` | `string` | - | Root directory containing documentation source files (e.g., `apps/docs/docs`)
|
|
101
|
-
| `documentation.tooling` | `string` | - | Documentation framework identifier (`mkdocs` or `fumadocs`)
|
|
102
|
-
| `documentation.config` | `string` | - | Path to the documentation framework config file (e.g., `mkdocs.yml`, `next.config.js`)
|
|
103
|
-
| `documentation.index` | `string` | - | Path to the docs surface entry point (e.g., `index.md` for Fumadocs, `mkdocs.yml` for MkDocs). Set by `oat docs init` and updated by `oat docs generate-index`.
|
|
104
|
-
| `documentation.requireForProjectCompletion` | `boolean` | `false` | When `true`, OAT project completion gates require documentation to be updated
|
|
105
|
-
| `git.defaultBranch` | `string` | `"main"` | Default branch for PR creation. Auto-detected during `oat init` via `gh repo view` or `origin/HEAD`. Used by `oat-project-pr-final` and `oat-project-pr-progress`.
|
|
106
|
-
| `
|
|
107
|
-
| `archive.s3Uri` | `string` | - | Base S3 URI for repo-scoped archived project sync, for example `s3://bucket/oat-archive`
|
|
108
|
-
| `archive.s3SyncOnComplete` | `boolean` | `false` | When `true`, `oat-project-complete` uploads the archived project to the configured S3 archive after local archive succeeds
|
|
109
|
-
| `archive.summaryExportPath` | `string` | - | Repo-relative directory where completion exports `summary.md` as a dated snapshot like `20260401-<project-name>.md` for durable tracked reference
|
|
110
|
-
| `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/`
|
|
94
|
+
| Key | Type | Default | Description |
|
|
95
|
+
| ------------------------------------------- | ---------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
96
|
+
| `version` | `number` | `1` | Schema version |
|
|
97
|
+
| `worktrees.root` | `string` | `".worktrees"` | Root directory for git worktrees (repo-relative or absolute) |
|
|
98
|
+
| `projects.root` | `string` | `".oat/projects/shared"` | Default root directory for OAT projects |
|
|
99
|
+
| `localPaths` | `string[]` | - | Gitignored directories to sync between main repo and worktrees. Supports glob patterns. Managed via `oat local add/remove`. |
|
|
100
|
+
| `documentation.root` | `string` | - | Root directory containing documentation source files (e.g., `apps/docs/docs`) |
|
|
101
|
+
| `documentation.tooling` | `string` | - | Documentation framework identifier (`mkdocs` or `fumadocs`) |
|
|
102
|
+
| `documentation.config` | `string` | - | Path to the documentation framework config file (e.g., `mkdocs.yml`, `next.config.js`) |
|
|
103
|
+
| `documentation.index` | `string` | - | Path to the docs surface entry point (e.g., `index.md` for Fumadocs, `mkdocs.yml` for MkDocs). Set by `oat docs init` and updated by `oat docs generate-index`. |
|
|
104
|
+
| `documentation.requireForProjectCompletion` | `boolean` | `false` | When `true`, OAT project completion gates require documentation to be updated |
|
|
105
|
+
| `git.defaultBranch` | `string` | `"main"` | Default branch for PR creation. Auto-detected during `oat init` via `gh repo view` or `origin/HEAD`. Used by `oat-project-pr-final` and `oat-project-pr-progress`. |
|
|
106
|
+
| `workflow.autoReviewAtHillCheckpoints` | `boolean` | unset | When `true`, completing a HiLL checkpoint automatically runs the extra lifecycle review. Does not control Tier 1 per-phase `oat-reviewer` gates. Can be overridden per-project via `oat_auto_review_at_hill_checkpoints` in `plan.md` frontmatter. Legacy `autoReviewAtCheckpoints` remains a fallback. |
|
|
107
|
+
| `archive.s3Uri` | `string` | - | Base S3 URI for repo-scoped archived project sync, for example `s3://bucket/oat-archive` |
|
|
108
|
+
| `archive.s3SyncOnComplete` | `boolean` | `false` | When `true`, `oat-project-complete` uploads the archived project to the configured S3 archive after local archive succeeds |
|
|
109
|
+
| `archive.summaryExportPath` | `string` | - | Repo-relative directory where completion exports `summary.md` as a dated snapshot like `20260401-<project-name>.md` for durable tracked reference |
|
|
110
|
+
| `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/` |
|
|
111
111
|
|
|
112
112
|
All `documentation.*` keys are managed via `oat config get/set` and are set automatically by `oat docs init`.
|
|
113
113
|
The `git.defaultBranch` key is auto-detected during `oat init` and can be overridden via `oat config set git.defaultBranch <branch>`.
|
|
@@ -34,6 +34,40 @@ Mode-sensitive notes:
|
|
|
34
34
|
|
|
35
35
|
Artifacts are the project system of record; automation and routing should derive from these files, not memory.
|
|
36
36
|
|
|
37
|
+
### plan.md frontmatter
|
|
38
|
+
|
|
39
|
+
`plan.md` carries frontmatter that the implementation skill consumes. Notable fields:
|
|
40
|
+
|
|
41
|
+
- `oat_plan_hill_phases` — list of phase IDs to pause at for HiLL checkpoints.
|
|
42
|
+
- `oat_plan_parallel_groups` — declares which phases may execute concurrently in worktrees. See below.
|
|
43
|
+
|
|
44
|
+
#### oat_plan_parallel_groups
|
|
45
|
+
|
|
46
|
+
Declare phase groups that run in parallel during `oat-project-implement`:
|
|
47
|
+
|
|
48
|
+
```yaml
|
|
49
|
+
oat_plan_parallel_groups: [['p02', 'p03'], ['p04', 'p05']]
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Each inner array is a group of phases that execute concurrently in their own worktrees and merge back to the orchestration branch in plan order. Phases not listed in any group run sequentially.
|
|
53
|
+
|
|
54
|
+
**Semantics:**
|
|
55
|
+
|
|
56
|
+
- Empty or missing field → fully sequential, no worktrees created (default).
|
|
57
|
+
- Each group must contain **2 or more** phases — singleton groups are rejected.
|
|
58
|
+
- Every phase ID must exist in the plan body.
|
|
59
|
+
- No phase may appear in more than one group.
|
|
60
|
+
- Parallelism is only honored at Tier 1 (native subagents). Tier 2 degrades parallel groups to sequential inline execution.
|
|
61
|
+
|
|
62
|
+
**Authoring responsibility:**
|
|
63
|
+
|
|
64
|
+
- `oat-project-plan` proposes parallel groups when phases have file-disjoint task sets; it never infers parallelism silently.
|
|
65
|
+
- Phases listed in a group should have no file-level overlap. Overlap will produce merge conflicts during fan-in that stop the run.
|
|
66
|
+
|
|
67
|
+
**Validation:**
|
|
68
|
+
|
|
69
|
+
Before dispatching, `oat-project-implement` invokes `oat project validate-plan --project-path "${PROJECT_PATH}"`. Non-zero exit blocks the run. See [CLI Reference](../../reference/cli-reference.md) and [Implementation Execution](implementation-execution.md) for details.
|
|
70
|
+
|
|
37
71
|
## Reference artifacts
|
|
38
72
|
|
|
39
73
|
- `.oat/templates/*.md`
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Implementation Execution
|
|
3
|
+
description: 'Phase-subagent dispatch, tier detection, bounded fix loop, plan-declared parallelism, and dry-run mode in oat-project-implement v2.0.'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Implementation Execution
|
|
7
|
+
|
|
8
|
+
This page covers how `oat-project-implement` actually runs a plan: tier selection, phase-level subagent dispatch, the review + fix loop, plan-declared parallelism with worktree fan-in, and dry-run.
|
|
9
|
+
|
|
10
|
+
## Quick Look
|
|
11
|
+
|
|
12
|
+
- **When to use:** you have a plan ready and want to understand what happens during `oat-project-implement`.
|
|
13
|
+
- **Unit of dispatch:** one phase at a time (not one task). A phase implementer executes all tasks in the phase, commits per task, and returns a single summary.
|
|
14
|
+
- **Two tiers, one lock:** capability detection picks Tier 1 (native subagents) or Tier 2 (inline) at start. The tier is locked for the whole run — no mid-run downgrades.
|
|
15
|
+
|
|
16
|
+
## Execution model
|
|
17
|
+
|
|
18
|
+
### Tier selection
|
|
19
|
+
|
|
20
|
+
At skill start, `oat-project-implement` detects whether the host supports native subagent dispatch for `oat-phase-implementer` and `oat-reviewer`.
|
|
21
|
+
|
|
22
|
+
- **Claude Code / Cursor:** native subagent dispatch → Tier 1.
|
|
23
|
+
- **Codex multi-agent:** Tier 1 if `spawn_agent` is allowed without authorization, or after an explicit single prompt at skill start if authorization is required. Codex subagent dispatch should use self-contained scope packets with fresh context; do not assume pinned OAT roles can also inherit the full parent thread.
|
|
24
|
+
- **Authorization declined or agents do not resolve:** Tier 2 (inline). The orchestrator reads `.agents/agents/oat-phase-implementer.md` and `.agents/agents/oat-reviewer.md` as reference and executes that process itself.
|
|
25
|
+
|
|
26
|
+
The approval decision covers both phase implementation and checkpoint review for the run. The orchestrator should not drift into a mixed mode based on conversational emphasis alone; if Tier 1 was not approved, stay inline throughout unless the user explicitly requests mixed execution.
|
|
27
|
+
|
|
28
|
+
The selected tier is reported to the user and locked for the remainder of the run:
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
[preflight] Checking subagent availability…
|
|
32
|
+
→ oat-phase-implementer + oat-reviewer: available
|
|
33
|
+
→ Selected: Tier 1 — Subagents
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Per-phase loop
|
|
37
|
+
|
|
38
|
+
For each phase in the plan (whether sequential or inside a parallel group):
|
|
39
|
+
|
|
40
|
+
1. **Dispatch `oat-phase-implementer`** with a Phase Scope block (project path, phase id, artifact paths, commit convention, workflow mode).
|
|
41
|
+
2. **Receive the summary:** `DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED`.
|
|
42
|
+
- `BLOCKED` stops the run and surfaces the blocker to the user.
|
|
43
|
+
3. **Dispatch `oat-reviewer`** with a Review Scope block (phase id, commit range, optional files-changed hint). The commit range is authoritative; the file list is only orientation metadata. In Codex, pass this as a self-contained packet and keep fresh context (`fork_context: false`) so the reviewer reads git/OAT artifacts directly instead of inheriting the orchestration thread. If the reviewer does not conclude on the first wait, poll once more, then send a concise "return now with current findings" nudge before falling back inline for that phase.
|
|
44
|
+
4. **Parse the verdict:** zero Critical + zero Important findings → `pass`; otherwise `fail`.
|
|
45
|
+
5. **On fail, run the bounded fix loop** (see below).
|
|
46
|
+
6. **Update artifacts** (`implementation.md`, `plan.md` review row, `state.md`) and make the mandatory bookkeeping commit.
|
|
47
|
+
7. **HiLL checkpoint** if the phase id is listed in `oat_plan_hill_phases`.
|
|
48
|
+
|
|
49
|
+
### Bounded fix loop
|
|
50
|
+
|
|
51
|
+
On a `fail` verdict:
|
|
52
|
+
|
|
53
|
+
- Read `oat_orchestration_retry_limit` from `state.md` frontmatter (default `2`, range `0–5`).
|
|
54
|
+
- For each retry: re-dispatch the implementer in `fix` mode with the review artifact and findings, then re-dispatch the reviewer.
|
|
55
|
+
- On `pass` → exit the loop; the phase disposition becomes `merged` (sequential) or `merged` (parallel, after fan-in).
|
|
56
|
+
- On retries exhausted:
|
|
57
|
+
- **Sequential mode:** STOP the run with phase id, unresolved findings, and review artifact path.
|
|
58
|
+
- **Parallel group mode:** mark the phase `excluded`, do not merge its worktree, continue the remaining phases in the group, and report it in Outstanding Items.
|
|
59
|
+
|
|
60
|
+
Tier is never silently downgraded. If a Tier 1 dispatch has a transient failure, the orchestrator retries exactly once; a second failure is treated the same as fix-loop exhaustion for that phase.
|
|
61
|
+
|
|
62
|
+
## Plan-declared parallelism
|
|
63
|
+
|
|
64
|
+
Phases whose task file sets do not overlap may execute concurrently. Declare this in `plan.md` frontmatter:
|
|
65
|
+
|
|
66
|
+
```yaml
|
|
67
|
+
oat_plan_parallel_groups: [['p02', 'p03'], ['p04', 'p05']]
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
- Each inner array is a group of phases that run concurrently — one worktree per phase.
|
|
71
|
+
- Phases not listed in any group run sequentially in plan order.
|
|
72
|
+
- Groups themselves run sequentially — group `[p02, p03]` merges before group `[p04, p05]` starts.
|
|
73
|
+
- Empty or missing field → fully sequential, no worktrees created, behavior identical to today's `oat-project-implement`.
|
|
74
|
+
|
|
75
|
+
### How a parallel group runs
|
|
76
|
+
|
|
77
|
+
1. **Bootstrap worktrees** via `oat-worktree-bootstrap-auto`, one per phase, branch name `{project-name}/{pNN}`.
|
|
78
|
+
- If any bootstrap fails, cancel successful worktrees and **degrade the entire group** to sequential inline execution.
|
|
79
|
+
2. **Concurrent dispatch** of `oat-phase-implementer` into each worktree (Tier 1 only — Tier 2 cannot run concurrently and also degrades to sequential).
|
|
80
|
+
3. **Wait for terminal verdicts** (`pass` or `failed`) across every phase in the group.
|
|
81
|
+
4. **Fan-in reconciliation in plan order:** for each passing phase, `git merge --no-ff {project-name}/{pNN}`. Integration verification (`pnpm test && pnpm lint && pnpm type-check`) runs after each merge.
|
|
82
|
+
5. **Failed phases are excluded** — their worktrees are preserved and logged in `implementation.md` Outstanding Items. Passing phases still merge (partial merge-back, not atomic).
|
|
83
|
+
6. **Worktree cleanup** runs for merged phases; preserved for excluded phases.
|
|
84
|
+
7. **Bookkeeping commit** + HiLL checkpoint check after the group finishes.
|
|
85
|
+
|
|
86
|
+
### Merge-conflict handling
|
|
87
|
+
|
|
88
|
+
When a merge produces a conflict:
|
|
89
|
+
|
|
90
|
+
1. `git merge --no-ff` is aborted.
|
|
91
|
+
2. `git cherry-pick` of the phase's commits is attempted.
|
|
92
|
+
3. If cherry-pick also conflicts, an **inline conflict-resolution subagent** is dispatched via the Task tool. The orchestrator **never reads conflicted files itself** — that context belongs in a fresh subagent.
|
|
93
|
+
4. The subagent reads conflicted files and project artifacts (`plan.md`, `design.md`, `spec.md`), applies a resolution, runs integration verification, and returns:
|
|
94
|
+
- `RESOLVED` → merge is committed; orchestrator proceeds.
|
|
95
|
+
- `UNRESOLVABLE` or `VERIFICATION_FAILED` → STOP the run with phase id, conflicting files, worktree path, and the subagent's reasoning summary.
|
|
96
|
+
|
|
97
|
+
The orchestrator does not proceed past a broken merge.
|
|
98
|
+
|
|
99
|
+
## Validating plan metadata
|
|
100
|
+
|
|
101
|
+
Before dispatching, `oat-project-implement` invokes the validator CLI:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
oat project validate-plan --project-path "${PROJECT_PATH}"
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
The command enforces:
|
|
108
|
+
|
|
109
|
+
- `oat_plan_parallel_groups` is either missing/empty (treated as fully sequential) or a non-empty nested array of phase ID strings.
|
|
110
|
+
- Every referenced phase id exists in the plan body.
|
|
111
|
+
- No phase id appears in more than one group.
|
|
112
|
+
- No singleton groups (each group must contain at least 2 phases).
|
|
113
|
+
- Frontmatter YAML parses cleanly — malformed frontmatter fails with exit 1.
|
|
114
|
+
|
|
115
|
+
Non-zero exit stops the run. The skill does not re-implement validation in prose — the CLI is the single source of truth.
|
|
116
|
+
|
|
117
|
+
## Dry-run mode
|
|
118
|
+
|
|
119
|
+
Run with `--dry-run` to preview a run without dispatching anything:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
oat-project-implement --dry-run
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Dry-run:
|
|
126
|
+
|
|
127
|
+
- Performs tier selection and plan validation.
|
|
128
|
+
- Builds the execution schedule (singleton phases + parallel groups in plan order).
|
|
129
|
+
- Prints the planned dispatches and worktree layout.
|
|
130
|
+
- Exits 0 without dispatching subagents, creating worktrees, or modifying files.
|
|
131
|
+
|
|
132
|
+
Use dry-run as a sanity check after editing `oat_plan_parallel_groups` to confirm the schedule matches your intent.
|
|
133
|
+
|
|
134
|
+
## Resumption
|
|
135
|
+
|
|
136
|
+
On re-invocation after a partial run:
|
|
137
|
+
|
|
138
|
+
1. Read `implementation.md` for the most recent orchestration-runs entry.
|
|
139
|
+
2. Compare phase counts against the plan's phase list; phases not covered by any run are the resume targets.
|
|
140
|
+
3. Read `state.md` for `oat_current_task` and cross-check with git log.
|
|
141
|
+
4. If a phase committed implementer output but has no review verdict recorded, the reviewer is re-dispatched for that phase's current HEAD.
|
|
142
|
+
5. If un-cleaned worktrees remain from a prior parallel group, the orchestrator lists them and asks whether to resume or clean up.
|
|
143
|
+
|
|
144
|
+
First-ever invocations skip resumption detection.
|
|
145
|
+
|
|
146
|
+
## State and artifact updates
|
|
147
|
+
|
|
148
|
+
After each phase (or parallel group) completes, `oat-project-implement` updates:
|
|
149
|
+
|
|
150
|
+
- `implementation.md` — appends a `### Run N` entry between the `<!-- orchestration-runs-start -->` markers with tier, policy, phase outcomes, parallel groups, and outstanding items.
|
|
151
|
+
- `plan.md` — updates the reviews table lifecycle (`pending` → `passed` or `fixes_added` → `fixes_completed` → `passed`).
|
|
152
|
+
- `state.md` — updates `oat_current_task`, `oat_last_commit`, `oat_project_state_updated`, and persists `oat_orchestration_retry_limit` if the user overrode the default.
|
|
153
|
+
|
|
154
|
+
Legacy `oat_execution_mode: subagent-driven` in existing projects is silently ignored and removed on the next bookkeeping write.
|
|
155
|
+
|
|
156
|
+
## Related
|
|
157
|
+
|
|
158
|
+
- [Lifecycle](lifecycle.md) — where implementation sits in the full project flow.
|
|
159
|
+
- [Artifacts](artifacts.md) — `plan.md` frontmatter contract, including `oat_plan_parallel_groups`.
|
|
160
|
+
- [HiLL Checkpoints](hill-checkpoints.md) — orthogonal pause semantics; fires after a phase or group completes and merges.
|
|
161
|
+
- [CLI Reference](../../reference/cli-reference.md) — `oat project validate-plan` and other commands.
|