@open-agent-toolkit/cli 0.1.6 → 0.1.8
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 +14 -3
- package/assets/agents/oat-reviewer.md +19 -3
- package/assets/docs/cli-utilities/configuration.md +33 -1
- package/assets/docs/provider-sync/config.md +1 -0
- package/assets/docs/reference/oat-directory-structure.md +2 -0
- package/assets/docs/workflows/projects/implementation-execution.md +60 -12
- package/assets/docs/workflows/projects/lifecycle.md +4 -0
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-project-implement/SKILL.md +193 -94
- package/assets/skills/oat-project-plan/SKILL.md +57 -1
- package/assets/skills/oat-project-plan-writing/SKILL.md +6 -2
- package/assets/skills/oat-project-quick-start/SKILL.md +57 -1
- package/assets/skills/oat-project-review-provide/SKILL.md +9 -1
- package/assets/skills/oat-project-review-receive/SKILL.md +21 -1
- package/assets/skills/oat-project-summary/SKILL.md +15 -13
- package/assets/templates/implementation.md +5 -5
- package/assets/templates/plan.md +1 -1
- package/assets/templates/state.md +4 -0
- package/assets/templates/summary.md +2 -1
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +36 -0
- package/dist/commands/project/dispatch-ceiling/index.d.ts +16 -0
- package/dist/commands/project/dispatch-ceiling/index.d.ts.map +1 -0
- package/dist/commands/project/dispatch-ceiling/index.js +288 -0
- package/dist/commands/project/index.d.ts.map +1 -1
- package/dist/commands/project/index.js +2 -0
- package/dist/config/oat-config.d.ts +7 -0
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +23 -0
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +4 -0
- package/dist/providers/codex/codec/sync-extension.d.ts.map +1 -1
- package/dist/providers/codex/codec/sync-extension.js +16 -8
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-phase-implementer
|
|
3
|
-
version: 1.0.
|
|
3
|
+
version: 1.0.2
|
|
4
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
5
|
tools: Read, Write, Edit, Bash, Grep, Glob
|
|
6
6
|
color: cyan
|
|
@@ -34,10 +34,15 @@ You will be given a "Phase Scope" block including:
|
|
|
34
34
|
- **commit_convention**: Commit message format from plan.md (e.g., `feat({scope}): {description}`)
|
|
35
35
|
- **workflow_mode**: `spec-driven` | `quick` | `import` (default `spec-driven`)
|
|
36
36
|
- **model_axis**: Optional model dispatch state selected by the orchestrator (`selected:<value>`, `inherited`, `not-applicable`, or `host-auto`)
|
|
37
|
-
- **effort_axis**: Optional effort dispatch state selected by the orchestrator (`selected:<value>`, `inherited`, `not-applicable`, or `host-auto`)
|
|
37
|
+
- **effort_axis**: Optional effort dispatch state selected by the orchestrator (`selected:<value>`, `provider-default`, `inherited`, `not-applicable`, or `host-auto`)
|
|
38
|
+
- **dispatch_ceiling**: Optional resolved provider ceiling that capped/selected this dispatch
|
|
39
|
+
- **ceiling_source**: Optional source for the resolved ceiling (`repo config`, `project state`, or `preflight prompt`)
|
|
40
|
+
- **provider_default_effort**: Optional Codex provider default effort, used only to explain base/unpinned fallback dispatches
|
|
38
41
|
- **dispatch_rationale**: Optional short rationale for the model/effort axis choices
|
|
39
42
|
|
|
40
|
-
The `model_axis` and `
|
|
43
|
+
The `model_axis`, `effort_axis`, `dispatch_ceiling`, `ceiling_source`, and `provider_default_effort` fields describe dispatch state the orchestrator already chose; they are descriptive context for your report, not actions for you to take. Echo whatever values were provided in your summary. If a field is absent, report it as "not provided."
|
|
44
|
+
|
|
45
|
+
For Codex, `provider-default` means the base/unpinned role follows Codex configured/provider default effort. It does not mean OAT inherited the parent session ceiling.
|
|
41
46
|
|
|
42
47
|
If `mode: fix`, the block also includes:
|
|
43
48
|
|
|
@@ -126,6 +131,9 @@ Report format:
|
|
|
126
131
|
**Confidence:** high | medium | low
|
|
127
132
|
**Model axis:** {model_axis if provided, otherwise "not provided"}
|
|
128
133
|
**Effort axis:** {effort_axis if provided, otherwise "not provided"}
|
|
134
|
+
**Dispatch ceiling:** {dispatch_ceiling if provided, otherwise "not provided"}
|
|
135
|
+
**Ceiling source:** {ceiling_source if provided, otherwise "not provided"}
|
|
136
|
+
**Provider default effort:** {provider_default_effort if provided, otherwise "not provided"}
|
|
129
137
|
|
|
130
138
|
### Task Outcomes
|
|
131
139
|
|
|
@@ -192,6 +200,9 @@ If a fix introduces a regression or doesn't address its finding, either re-fix w
|
|
|
192
200
|
**Confidence:** high | medium | low
|
|
193
201
|
**Model axis:** {model_axis if provided, otherwise "not provided"}
|
|
194
202
|
**Effort axis:** {effort_axis if provided, otherwise "not provided"}
|
|
203
|
+
**Dispatch ceiling:** {dispatch_ceiling if provided, otherwise "not provided"}
|
|
204
|
+
**Ceiling source:** {ceiling_source if provided, otherwise "not provided"}
|
|
205
|
+
**Provider default effort:** {provider_default_effort if provided, otherwise "not provided"}
|
|
195
206
|
|
|
196
207
|
### Fix Outcomes
|
|
197
208
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-reviewer
|
|
3
|
-
version: 1.0.
|
|
3
|
+
version: 1.0.2
|
|
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
|
|
@@ -32,6 +32,8 @@ Reviews catch issues before they ship:
|
|
|
32
32
|
|
|
33
33
|
Your review artifact feeds into `oat-project-review-receive`, which converts findings into plan tasks for systematic gap closure.
|
|
34
34
|
|
|
35
|
+
Some findings are artifact drift rather than implementation defects. If shipped implementation is defensible but `spec.md`, `design.md`, or `plan.md` is stale, frame the issue as artifact alignment and say which artifact should change. Do not require a code fix solely because the design artifact lagged behind implementation.
|
|
36
|
+
|
|
35
37
|
## Inputs
|
|
36
38
|
|
|
37
39
|
You will be given a "Review Scope" block including:
|
|
@@ -45,12 +47,19 @@ You will be given a "Review Scope" block including:
|
|
|
45
47
|
- **artifact_paths**: Paths to available artifacts (spec/design/plan/implementation/discovery/import reference)
|
|
46
48
|
- **tasks_in_scope**: Task IDs being reviewed (if task/phase scope)
|
|
47
49
|
- **model_axis**: Optional model dispatch state selected by the orchestrator (`selected:<value>`, `inherited`, `not-applicable`, or `host-auto`)
|
|
48
|
-
- **effort_axis**: Optional effort dispatch state selected by the orchestrator (`selected:<value>`, `inherited`, `not-applicable`, or `host-auto`)
|
|
50
|
+
- **effort_axis**: Optional effort dispatch state selected by the orchestrator (`selected:<value>`, `provider-default`, `inherited`, `not-applicable`, or `host-auto`)
|
|
51
|
+
- **dispatch_ceiling**: Optional resolved provider ceiling that capped/selected this review dispatch
|
|
52
|
+
- **ceiling_source**: Optional source for the resolved ceiling (`repo config`, `project state`, or `preflight prompt`)
|
|
53
|
+
- **provider_default_effort**: Optional Codex provider default effort, used only to explain base/unpinned fallback dispatches
|
|
49
54
|
- **dispatch_rationale**: Optional short rationale for the model/effort axis choices
|
|
50
55
|
|
|
51
56
|
## Dispatch Control
|
|
52
57
|
|
|
53
|
-
|
|
58
|
+
The orchestrator owns dispatch control. Do not read `plan.md` Dispatch Profile rows to self-select a tier.
|
|
59
|
+
|
|
60
|
+
For Codex, normal deterministic review dispatch uses pinned reviewer variants (`oat-reviewer-low`, `oat-reviewer-medium`, `oat-reviewer-high`, or `oat-reviewer-xhigh`) selected by the resolved OAT dispatch ceiling. The base `oat-reviewer` role is a provider-default/unpinned fallback; if you are running as the base role, report any provided `provider_default_effort` as context but do not treat it as an OAT ceiling.
|
|
61
|
+
|
|
62
|
+
For Claude Code, review dispatch is model-axis based and the effort axis is `not-applicable`.
|
|
54
63
|
|
|
55
64
|
## Mode Contract
|
|
56
65
|
|
|
@@ -161,6 +170,11 @@ For each design decision relevant to scope:
|
|
|
161
170
|
- Do endpoints match the design?
|
|
162
171
|
- Are error responses as specified?
|
|
163
172
|
|
|
173
|
+
4. **Artifact drift classification**
|
|
174
|
+
- If implementation diverges from design/spec/plan, decide whether the implementation is wrong or the artifact is stale.
|
|
175
|
+
- When the implementation is defensible, write the finding as stale-artifact alignment guidance instead of a code defect.
|
|
176
|
+
- Include enough rationale for `oat-project-review-receive` to convert the finding into an artifact-alignment task or explicit deferral.
|
|
177
|
+
|
|
164
178
|
### Step 6: Verify Code Quality
|
|
165
179
|
|
|
166
180
|
This step applies to **code reviews** only.
|
|
@@ -204,6 +218,7 @@ Group findings by severity:
|
|
|
204
218
|
- Missing error handling
|
|
205
219
|
- Significant maintainability issues
|
|
206
220
|
- Missing tests for important paths
|
|
221
|
+
- Stale spec/design/plan artifact that conflicts with a defensible implementation and should be aligned before closeout
|
|
207
222
|
|
|
208
223
|
**Minor** (fix if time permits)
|
|
209
224
|
|
|
@@ -211,6 +226,7 @@ Group findings by severity:
|
|
|
211
226
|
- Style issues
|
|
212
227
|
- Minor refactoring opportunities
|
|
213
228
|
- Documentation gaps
|
|
229
|
+
- Low-impact artifact wording drift where implementation is defensible and the stale wording is unlikely to mislead near-term work
|
|
214
230
|
|
|
215
231
|
### Step 8: Write Review Artifact
|
|
216
232
|
|
|
@@ -158,13 +158,38 @@ oat config get lastPausedProject
|
|
|
158
158
|
oat config describe activeIdea
|
|
159
159
|
```
|
|
160
160
|
|
|
161
|
+
## Dispatch ceiling resolution
|
|
162
|
+
|
|
163
|
+
`oat config get workflow.dispatchCeiling.<provider>` shows only the effective
|
|
164
|
+
config value. Implementation workflows should use the project-aware resolver
|
|
165
|
+
instead:
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
oat project dispatch-ceiling resolve --provider codex --json
|
|
169
|
+
oat project dispatch-ceiling resolve --provider claude --json
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
The resolver checks effective config first, then project `state.md`
|
|
173
|
+
`oat_dispatch_ceiling` frontmatter. For Codex it also reports
|
|
174
|
+
`providerDefaultEffort`, which is informational for base/unpinned roles and is
|
|
175
|
+
not treated as the OAT ceiling.
|
|
176
|
+
|
|
177
|
+
For non-interactive preflight checks, use:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
oat project dispatch-ceiling resolve --provider codex --preflight --non-interactive
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
If unresolved, the command exits non-zero with the same `BLOCKED:` guidance used
|
|
184
|
+
by `oat-project-implement`.
|
|
185
|
+
|
|
161
186
|
## Workflow preferences (`workflow.*`)
|
|
162
187
|
|
|
163
188
|
Workflow preferences let power users answer repetitive confirmation prompts once and have OAT workflow skills respect those answers automatically. They are the highest-value escape hatch from interactive friction when you always make the same choices.
|
|
164
189
|
|
|
165
190
|
### Preference keys
|
|
166
191
|
|
|
167
|
-
|
|
192
|
+
Workflow preference keys live under the `workflow.*` namespace:
|
|
168
193
|
|
|
169
194
|
- `workflow.designMode` — `collaborative`, `selective`, or `draft`. Default design interaction mode. `selective` applies only to full `oat-project-design`; quick-start lightweight design treats it as collaborative because quick-start keeps the smaller collaborative/draft choice.
|
|
170
195
|
- `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.
|
|
@@ -174,6 +199,8 @@ All eight workflow preference keys live under the `workflow.*` namespace:
|
|
|
174
199
|
- `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.
|
|
175
200
|
- `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.
|
|
176
201
|
- `workflow.autoNarrowReReviewScope` — boolean. Auto-narrow re-review scope to fix-task commits only in `oat-project-review-provide`. When unset, the skill prompts.
|
|
202
|
+
- `workflow.dispatchCeiling.codex` — `low`, `medium`, `high`, or `xhigh`. Maximum Codex reasoning effort OAT may select through deterministic pinned implementer/reviewer variants. Provider default effort is informational for base/unpinned roles and is not treated as this ceiling.
|
|
203
|
+
- `workflow.dispatchCeiling.claude` — `haiku`, `sonnet`, or `opus`. Maximum Claude model tier OAT may select for provider-native subagent dispatch. Claude has no separate per-dispatch effort axis, so the effort axis remains `not-applicable`.
|
|
177
204
|
|
|
178
205
|
### Three-layer resolution
|
|
179
206
|
|
|
@@ -197,14 +224,19 @@ oat config set workflow.reviewExecutionModel subagent --user
|
|
|
197
224
|
oat config set workflow.autoReviewAtHillCheckpoints true --user
|
|
198
225
|
oat config set workflow.autoNarrowReReviewScope true --user
|
|
199
226
|
oat config set workflow.designMode selective --user
|
|
227
|
+
oat config set workflow.dispatchCeiling.codex high --user
|
|
228
|
+
oat config set workflow.dispatchCeiling.claude sonnet --user
|
|
200
229
|
|
|
201
230
|
# Shared repo: team decision for this repo
|
|
202
231
|
oat config set workflow.createPrOnComplete false --shared
|
|
203
232
|
oat config set workflow.designMode collaborative --shared
|
|
233
|
+
oat config set workflow.dispatchCeiling.codex high --shared
|
|
234
|
+
oat config set workflow.dispatchCeiling.claude sonnet --shared
|
|
204
235
|
|
|
205
236
|
# Repo-local: personal override for this repo (default when no flag)
|
|
206
237
|
oat config set workflow.hillCheckpointDefault every
|
|
207
238
|
oat config set workflow.designMode draft
|
|
239
|
+
oat config set workflow.dispatchCeiling.codex medium
|
|
208
240
|
```
|
|
209
241
|
|
|
210
242
|
Default (no flag) targets `.oat/config.local.json` for workflow keys. Pass at most one of `--user`, `--shared`, or `--local`. Structural keys (`projects.root`, `worktrees.root`, `git.*`, `documentation.*`, `archive.*`, `tools.*`) are still shared-only regardless of flag.
|
|
@@ -62,6 +62,7 @@ It is read by:
|
|
|
62
62
|
- unset: provider falls back to directory detection.
|
|
63
63
|
- `defaultStrategy` is used when no provider-specific `strategy` is set.
|
|
64
64
|
- At runtime, config is normalized so `providers` is always present in memory.
|
|
65
|
+
- Codex project sync also manages generated role variants derived from canonical agents. `oat-phase-implementer-low|medium|high|xhigh` and `oat-reviewer-low|medium|high|xhigh` are managed outputs used by dispatch-ceiling-aware implementation. They should not be adopted as stray roles.
|
|
65
66
|
|
|
66
67
|
## Recommended management flow
|
|
67
68
|
|
|
@@ -104,6 +104,8 @@ Current schema keys:
|
|
|
104
104
|
| `documentation.requireForProjectCompletion` | `boolean` | `false` | When `true`, OAT project completion gates require documentation to be updated |
|
|
105
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
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
|
+
| `workflow.dispatchCeiling.codex` | `string` | unset | Maximum Codex reasoning effort OAT may select through deterministic pinned implementer/reviewer variants (`low`, `medium`, `high`, or `xhigh`). Codex provider default effort is informational for base/unpinned roles and is not treated as this ceiling. |
|
|
108
|
+
| `workflow.dispatchCeiling.claude` | `string` | unset | Maximum Claude model tier OAT may select for provider-native subagent dispatch (`haiku`, `sonnet`, or `opus`). Claude has no separate per-dispatch effort axis. |
|
|
107
109
|
| `archive.s3Uri` | `string` | - | Base S3 URI for repo-scoped archived project sync, for example `s3://bucket/oat-archive` |
|
|
108
110
|
| `archive.s3SyncOnComplete` | `boolean` | `false` | When `true`, `oat-project-complete` uploads the archived project to the configured S3 archive after local archive succeeds |
|
|
109
111
|
| `archive.summaryExportPath` | `string` | - | Repo-relative directory where completion exports `summary.md` as a dated snapshot like `20260401-<project-name>.md` for durable tracked reference |
|
|
@@ -12,7 +12,8 @@ This page covers how `oat-project-implement` actually runs a plan: tier selectio
|
|
|
12
12
|
- **When to use:** you have a plan ready and want to understand what happens during `oat-project-implement`.
|
|
13
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
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
|
-
- **
|
|
15
|
+
- **Dispatch ceiling:** implementation resolves an OAT-owned, provider-aware ceiling before work starts. Codex uses effort values (`low`, `medium`, `high`, `xhigh`); Claude uses model tiers (`haiku`, `sonnet`, `opus`).
|
|
16
|
+
- **Runtime dispatch:** each phase uses the lowest available model/effort/control that can confidently complete the work, capped by the resolved dispatch ceiling, unless `plan.md` includes an explicit Dispatch Profile override.
|
|
16
17
|
|
|
17
18
|
## Execution model
|
|
18
19
|
|
|
@@ -34,6 +35,41 @@ The selected tier is reported to the user and locked for the remainder of the ru
|
|
|
34
35
|
→ Selected: Tier 1 — Subagents
|
|
35
36
|
```
|
|
36
37
|
|
|
38
|
+
### Dispatch ceiling preflight
|
|
39
|
+
|
|
40
|
+
Before phase work starts, `oat-project-implement` resolves and prints the dispatch ceiling for the current provider.
|
|
41
|
+
|
|
42
|
+
The compiled resolver is the source of truth:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
oat project dispatch-ceiling resolve --provider codex --preflight --json
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Resolution order:
|
|
49
|
+
|
|
50
|
+
1. `workflow.dispatchCeiling.<provider>` from effective config
|
|
51
|
+
2. `oat_dispatch_ceiling` in project `state.md` frontmatter
|
|
52
|
+
3. Interactive implementation preflight prompt
|
|
53
|
+
4. Non-interactive unresolved state blocks before work starts
|
|
54
|
+
|
|
55
|
+
For Codex, provider default effort is displayed when available but is not treated as the OAT ceiling. Provider default only explains base/unpinned role behavior.
|
|
56
|
+
|
|
57
|
+
```text
|
|
58
|
+
Codex dispatch ceiling: high
|
|
59
|
+
Source: project state
|
|
60
|
+
Codex provider default effort: medium
|
|
61
|
+
Note: OAT will use pinned subagent variants up to high. Base/unpinned roles resolve through the provider default.
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
In non-interactive mode, an unresolved ceiling blocks before any implementation work:
|
|
65
|
+
|
|
66
|
+
```text
|
|
67
|
+
BLOCKED: Codex dispatch ceiling is unresolved in non-interactive mode.
|
|
68
|
+
Set workflow.dispatchCeiling.codex in .oat/config.json or oat_dispatch_ceiling in project state.
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Dry-run reports unresolved ceiling and planned behavior without writing project state.
|
|
72
|
+
|
|
37
73
|
### Runtime dispatch selection
|
|
38
74
|
|
|
39
75
|
Tier selection decides whether OAT uses native subagents or inline fallback. Runtime dispatch selection is separate: it decides which provider-specific model and effort controls to use for a specific phase when the host exposes those axes.
|
|
@@ -46,14 +82,17 @@ The orchestrator considers, in order:
|
|
|
46
82
|
2. The phase's files, risk, requirements, and recent review/fix-loop evidence.
|
|
47
83
|
3. The host's actual control surface by axis.
|
|
48
84
|
|
|
49
|
-
Model and effort are separate axes. Each axis logs one of
|
|
85
|
+
Model and effort are separate axes. Each axis logs one of these states:
|
|
50
86
|
|
|
51
87
|
- `selected:<value>` — the host exposes the axis and the orchestrator chose a value.
|
|
88
|
+
- `provider-default` — Codex base/unpinned role follows configured/provider default effort.
|
|
52
89
|
- `inherited` — the host exposes the axis and the orchestrator deliberately defers to the parent session.
|
|
53
90
|
- `not-applicable` — this host/API has no meaningful per-dispatch concept for that axis.
|
|
54
91
|
- `host-auto` — exceptional; the host uses that axis internally but the orchestrator cannot read or pin it.
|
|
55
92
|
|
|
56
|
-
In Codex,
|
|
93
|
+
In Codex, implementation and fix dispatch classify a preferred effort (`low`, `medium`, `high`, or `xhigh`) and select `min(preferred, resolved_ceiling)`. The selected effort maps to the matching pinned role: `oat-phase-implementer-low`, `oat-phase-implementer-medium`, `oat-phase-implementer-high`, or `oat-phase-implementer-xhigh`. Reviewer dispatch uses the reviewer variant matching the resolved ceiling (`oat-reviewer-low|medium|high|xhigh`) for deterministic quality gates. Base/unpinned Codex roles are provider-default fallbacks; they should be logged as `provider-default`, not as inherited parent-session ceiling.
|
|
94
|
+
|
|
95
|
+
In Claude Code, subagent model selection is a model axis when available and is capped by `workflow.dispatchCeiling.claude` or project `oat_dispatch_ceiling`. The separate effort axis is `not-applicable`.
|
|
57
96
|
|
|
58
97
|
Dispatch logs use a consistent structured block so provider behavior is comparable without flattening the model and effort axes:
|
|
59
98
|
|
|
@@ -67,17 +106,26 @@ Rationale: multi-file integration with mock wiring; sonnet is the lowest suffici
|
|
|
67
106
|
|
|
68
107
|
OAT Dispatch: Phase p02 implementation
|
|
69
108
|
Host: Codex
|
|
109
|
+
Preferred effort: high
|
|
110
|
+
Dispatch ceiling: medium
|
|
111
|
+
Selected effort: medium
|
|
112
|
+
Ceiling source: repo config
|
|
113
|
+
Provider default effort: high
|
|
70
114
|
Model axis: inherited
|
|
71
115
|
Effort axis: selected:medium
|
|
72
116
|
Dispatch target: oat-phase-implementer-medium
|
|
73
|
-
Rationale: shared TypeScript/config substrate;
|
|
117
|
+
Rationale: shared TypeScript/config substrate; high preferred due to integration risk, capped by configured ceiling.
|
|
74
118
|
|
|
75
119
|
OAT Dispatch: Phase p03 review
|
|
76
120
|
Host: Codex
|
|
121
|
+
Dispatch ceiling: high
|
|
122
|
+
Selected effort: high
|
|
123
|
+
Ceiling source: project state
|
|
124
|
+
Provider default effort: medium
|
|
77
125
|
Model axis: inherited
|
|
78
|
-
Effort axis:
|
|
79
|
-
Dispatch target: oat-reviewer
|
|
80
|
-
Rationale: reviewer
|
|
126
|
+
Effort axis: selected:high
|
|
127
|
+
Dispatch target: oat-reviewer-high
|
|
128
|
+
Rationale: reviewer runs at the configured ceiling for deterministic quality gate behavior.
|
|
81
129
|
|
|
82
130
|
OAT Dispatch: Phase p04 implementation
|
|
83
131
|
Host: Other
|
|
@@ -87,7 +135,7 @@ Dispatch target: host default
|
|
|
87
135
|
Rationale: host does not expose readable or pinnable dispatch controls; rationale maps to standard effort.
|
|
88
136
|
```
|
|
89
137
|
|
|
90
|
-
Phase scope packets include
|
|
138
|
+
Phase and review scope packets include dispatch context when the orchestrator has resolved it: `model_axis`, `effort_axis`, `dispatch_ceiling`, `ceiling_source`, `provider_default_effort`, and `dispatch_rationale`.
|
|
91
139
|
|
|
92
140
|
### Dispatch Profile overrides
|
|
93
141
|
|
|
@@ -100,10 +148,10 @@ Add Dispatch Profile rows only when the user has an explicit constraint or prefe
|
|
|
100
148
|
For each phase in the plan (whether sequential or inside a parallel group):
|
|
101
149
|
|
|
102
150
|
1. **Select runtime dispatch control** for the phase and log the chosen control plus rationale.
|
|
103
|
-
2. **Dispatch the selected implementer role** with a Phase Scope block (project path, phase id, artifact paths, commit convention, workflow mode, and dispatch context when known). In Codex, `effort_axis=selected:low|medium|high` uses `oat-phase-implementer-low|medium|high`.
|
|
151
|
+
2. **Dispatch the selected implementer role** with a Phase Scope block (project path, phase id, artifact paths, commit convention, workflow mode, and dispatch context when known). In Codex, `effort_axis=selected:low|medium|high|xhigh` uses `oat-phase-implementer-low|medium|high|xhigh`. Base `oat-phase-implementer` means provider-default/unpinned fallback.
|
|
104
152
|
3. **Receive the summary:** `DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED`.
|
|
105
153
|
- `BLOCKED` stops the run and surfaces the blocker to the user.
|
|
106
|
-
4. **Dispatch
|
|
154
|
+
4. **Dispatch the selected reviewer role** with a Review Scope block (phase id, commit range, optional files-changed hint, and dispatch context). The commit range is authoritative; the file list is only orientation metadata. In Codex, pass this as a self-contained packet with `fork_context: false` and use the `oat-reviewer-<ceiling>` variant. In Claude Code, cap any selected model by the Claude ceiling and record `effort_axis=not-applicable`. 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.
|
|
107
155
|
5. **Parse the verdict:** zero Critical + zero Important findings → `pass`; otherwise `fail`.
|
|
108
156
|
6. **On fail, run the bounded fix loop** (see below).
|
|
109
157
|
7. **Update artifacts** (`implementation.md`, `plan.md` review row, `state.md`) and make the mandatory bookkeeping commit.
|
|
@@ -126,8 +174,8 @@ Tier is never silently downgraded. If a Tier 1 dispatch has a transient failure,
|
|
|
126
174
|
|
|
127
175
|
When escalation re-dispatches at a stronger control, the ladder is provider-specific:
|
|
128
176
|
|
|
129
|
-
- **Codex:** `selected:low
|
|
130
|
-
- **Claude Code:** `selected:haiku
|
|
177
|
+
- **Codex:** `selected:low -> selected:medium -> selected:high -> selected:xhigh`, capped by the resolved Codex dispatch ceiling.
|
|
178
|
+
- **Claude Code:** `selected:haiku -> selected:sonnet -> selected:opus`, capped by the resolved Claude dispatch ceiling.
|
|
131
179
|
|
|
132
180
|
Escalation re-dispatches still count against the bounded retry budget; escalation changes the dispatch control, it does not grant extra retry attempts.
|
|
133
181
|
|
|
@@ -136,6 +136,8 @@ flowchart LR
|
|
|
136
136
|
|
|
137
137
|
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.
|
|
138
138
|
|
|
139
|
+
Before a plan is marked ready for implementation, planning resolves the current provider's dispatch ceiling from `workflow.dispatchCeiling.<provider>` or project `state.md` frontmatter. If no ceiling is configured and the session is interactive, planning asks once and stores the answer as `oat_dispatch_ceiling`; non-interactive planning leaves it unresolved so implementation preflight can fail before work starts with setup instructions.
|
|
140
|
+
|
|
139
141
|
### Quick lane
|
|
140
142
|
|
|
141
143
|
```mermaid
|
|
@@ -150,6 +152,8 @@ flowchart LR
|
|
|
150
152
|
|
|
151
153
|
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.
|
|
152
154
|
|
|
155
|
+
Quick-start follows the same dispatch ceiling rule at the plan boundary: capture it when interactive, persist it to project state, and avoid any mid-implementation ceiling prompt.
|
|
156
|
+
|
|
153
157
|
### Import lane
|
|
154
158
|
|
|
155
159
|
```mermaid
|