@open-agent-toolkit/cli 0.1.50 → 0.1.52
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 +16 -5
- package/assets/docs/cli-utilities/configuration.md +1 -1
- package/assets/docs/cli-utilities/workflow-gates.md +1 -1
- package/assets/docs/provider-sync/commands.md +29 -1
- package/assets/docs/provider-sync/providers.md +13 -4
- package/assets/docs/provider-sync/scope-and-surface.md +13 -0
- package/assets/docs/reference/cli-reference.md +2 -2
- package/assets/docs/workflows/projects/hill-checkpoints.md +1 -1
- package/assets/docs/workflows/projects/implementation-execution.md +34 -3
- package/assets/docs/workflows/projects/lifecycle.md +9 -0
- package/assets/docs/workflows/projects/reviews.md +18 -1
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-agent-instructions-analyze/references/docs/provider-reference.md +8 -2
- package/assets/skills/oat-agent-instructions-apply/references/docs/provider-reference.md +8 -2
- package/assets/skills/oat-project-implement/SKILL.md +196 -67
- package/assets/skills/oat-project-import-plan/SKILL.md +6 -6
- package/assets/skills/oat-project-next/SKILL.md +8 -1
- package/assets/skills/oat-project-plan/SKILL.md +6 -6
- package/assets/skills/oat-project-plan-writing/SKILL.md +13 -10
- package/assets/skills/oat-project-pr-final/SKILL.md +8 -1
- package/assets/skills/oat-project-quick-start/SKILL.md +5 -5
- package/assets/skills/oat-project-review-provide/SKILL.md +27 -9
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +34 -9
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +148 -85
- package/dist/commands/gate/index.js +1 -1
- package/dist/commands/project/dispatch-ceiling/index.d.ts.map +1 -1
- package/dist/commands/project/dispatch-ceiling/index.js +80 -0
- package/dist/commands/providers/codex/materialize.d.ts.map +1 -1
- package/dist/commands/providers/codex/materialize.js +31 -15
- package/dist/config/oat-config.d.ts +9 -1
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +55 -4
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +7 -3
- package/dist/providers/codex/codec/config-merge.d.ts +8 -2
- package/dist/providers/codex/codec/config-merge.d.ts.map +1 -1
- package/dist/providers/codex/codec/config-merge.js +17 -2
- package/dist/providers/codex/codec/sync-extension.d.ts.map +1 -1
- package/dist/providers/codex/codec/sync-extension.js +14 -4
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-implement
|
|
3
|
-
version: 2.0.
|
|
3
|
+
version: 2.0.36
|
|
4
4
|
description: Use when plan.md is ready for execution. Dispatches phase coordinators that select one exact target-pinned worker per task; supports bounded fix loops and plan-declared worktree-isolated parallel phases.
|
|
5
5
|
oat_gateable: true
|
|
6
6
|
argument-hint: '[--retry-limit <N>] [--dry-run]'
|
|
@@ -107,16 +107,21 @@ PROJECTS_ROOT="${PROJECTS_ROOT%/}"
|
|
|
107
107
|
**Mandatory target-first order:** Complete Dispatch Policy Preflight and resolve
|
|
108
108
|
the concrete managed Codex target before probing generic agent availability or
|
|
109
109
|
locking Tier 1/Tier 2. A concrete target takes precedence over tier selection:
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
110
|
+
first send the exact registered role through native dispatch. Only a native
|
|
111
|
+
role-selection rejection permits an explicitly pinned fresh Codex child. If
|
|
112
|
+
neither exact route is possible, inline execution is allowed only with verified
|
|
113
|
+
equivalent current-host model and effort controls; otherwise block before work
|
|
114
|
+
starts. Explicit inherit/default and documented managed-uncapped reviewer
|
|
115
|
+
behavior remain the only base-role exceptions.
|
|
116
|
+
|
|
117
|
+
For a concrete managed Codex role, first send the resolver-returned Codex
|
|
118
|
+
variant through the native spawn API as `agent_type`. Spawn acceptance plus the
|
|
119
|
+
constructed launcher payload is configured invocation evidence; independent
|
|
120
|
+
runtime telemetry or agent self-report is not required. Launch a fresh Codex
|
|
121
|
+
child pinned to the resolver-returned model and effort with canonical role
|
|
122
|
+
instructions only after a native role-selection rejection as defined below. If
|
|
123
|
+
that fresh child cannot be launched, fail closed and block; never substitute
|
|
124
|
+
the coordinator or base role.
|
|
120
125
|
|
|
121
126
|
Use base `oat-phase-implementer` only for the allowed exceptions above:
|
|
122
127
|
explicit inherit/default behavior. It is never a managed task-worker fallback.
|
|
@@ -142,9 +147,9 @@ Detection logic:
|
|
|
142
147
|
- Declined → Tier 2.
|
|
143
148
|
|
|
144
149
|
- If the host does not resolve either generic agent, first attempt the exact
|
|
145
|
-
registered role
|
|
146
|
-
|
|
147
|
-
target-first rule above.
|
|
150
|
+
registered role natively for any concrete managed target. Use the explicitly
|
|
151
|
+
pinned fresh-child route only after a native role-selection rejection. Select
|
|
152
|
+
Tier 2 only when inline execution is allowed by the target-first rule above.
|
|
148
153
|
|
|
149
154
|
**Approval scope rule:** this Tier selection applies to both phase implementation and checkpoint review. Do not infer a mixed mode from conversational emphasis on review checkpoints. If the user has not explicitly approved Tier 1 for the run, stay Tier 2 throughout. Mixed mode is only valid when the user explicitly requests it.
|
|
150
155
|
|
|
@@ -181,6 +186,20 @@ If approved: Selected: Tier 1 — Subagents
|
|
|
181
186
|
Forbidden: Selected: Tier 2 — Inline because the user did not separately mention subagents.
|
|
182
187
|
```
|
|
183
188
|
|
|
189
|
+
**Native role-selection rejection:** This means the native host explicitly
|
|
190
|
+
reports that the requested `agent_type` is unsupported, unknown, unregistered,
|
|
191
|
+
or rejected before the child or agent starts. Missing runtime telemetry,
|
|
192
|
+
missing agent self-report, a timeout after spawn acceptance, or any terminal
|
|
193
|
+
result from an accepted child — including `BLOCKED` — is not role
|
|
194
|
+
unavailability and is not a native role-selection rejection. Self-report is
|
|
195
|
+
optional diagnostic data and cannot populate or overwrite launcher-owned
|
|
196
|
+
`target`, `model_axis`, or `effort_axis` fields. An accepted child cannot
|
|
197
|
+
trigger the fresh pinned-child or CLI fallback. If an accepted native reviewer
|
|
198
|
+
later times out, retry the same already-selected native `agent_type` route. The
|
|
199
|
+
fresh pinned-child route is eligible only when the original native attempt
|
|
200
|
+
received explicit pre-start role-selection rejection; a timeout after native
|
|
201
|
+
spawn acceptance never changes routes.
|
|
202
|
+
|
|
184
203
|
**Legacy state migration:** If `state.md` contains `oat_execution_mode: subagent-driven`, silently ignore it. On the next bookkeeping write, remove that key. Do not redirect to `oat-project-subagent-implement` — that skill is deprecated.
|
|
185
204
|
|
|
186
205
|
### Dispatch Policy Preflight
|
|
@@ -427,14 +446,19 @@ Axis states:
|
|
|
427
446
|
Codex rules:
|
|
428
447
|
|
|
429
448
|
**Managed Codex execution invariant:** When the resolver returns a model+effort
|
|
430
|
-
target,
|
|
431
|
-
`providers.codex.dispatchArgs.variant
|
|
432
|
-
|
|
433
|
-
|
|
449
|
+
target, the resolver-returned Codex variant from
|
|
450
|
+
`providers.codex.dispatchArgs.variant` must first be sent through the native
|
|
451
|
+
spawn API as `agent_type`. Spawn acceptance plus the launcher payload is
|
|
452
|
+
configured invocation evidence with launcher-selected/config-declared
|
|
453
|
+
provenance. If and only if the host returns a native role-selection rejection,
|
|
454
|
+
launch a fresh Codex child with the resolver target's explicit model, reasoning
|
|
455
|
+
effort, and canonical role instructions from
|
|
434
456
|
`.agents/agents/oat-phase-implementer.md` or
|
|
435
|
-
`.agents/agents/oat-reviewer.md`.
|
|
436
|
-
|
|
437
|
-
|
|
457
|
+
`.agents/agents/oat-reviewer.md`. Missing runtime telemetry or agent self-report
|
|
458
|
+
is not role unavailability, and an accepted child result such as `BLOCKED`
|
|
459
|
+
cannot trigger fallback. Workflow correctness must not require provider restart
|
|
460
|
+
or hot reload. A managed base role is forbidden when a concrete target was
|
|
461
|
+
requested; never silently downgrade to it. Base roles remain valid only for
|
|
438
462
|
explicit inherit/default behavior and the documented managed-uncapped reviewer
|
|
439
463
|
fallback.
|
|
440
464
|
|
|
@@ -453,7 +477,7 @@ fallback.
|
|
|
453
477
|
- Capped managed policy: reviewer targets the configured cap for deterministic quality gate behavior.
|
|
454
478
|
- Managed `Uncapped`: no reviewer target exists; use base/unpinned reviewer fallback and log `selectionMode=no-review-target`, `selectedValue=null`, and `effort_axis=provider-default`.
|
|
455
479
|
- Inherit/default: no reviewer target exists; use base/unpinned reviewer fallback and log `selectionMode=inherit-default`, `selectedValue=null`, and `effort_axis=provider-default`.
|
|
456
|
-
8. Codex payload-first assertion applies whenever the resolver returns a materialized model+effort target. If `providers.codex.dispatchArgs.variant` is present, the actual `spawn_agent` payload MUST use it as `agent_type`; when that variant came from a Codex model+effort target, log `model_axis=selected:<model>` and `effort_axis=selected:<effort>` from resolver output.
|
|
480
|
+
8. Codex payload-first assertion applies whenever the resolver returns a materialized model+effort target. If `providers.codex.dispatchArgs.variant` is present, the actual `spawn_agent` payload MUST first use it as native `agent_type`; when that variant came from a Codex model+effort target, log `model_axis=selected:<model>` and `effort_axis=selected:<effort>` from resolver output and the constructed launcher payload. Spawn acceptance is sufficient configured invocation evidence. Missing telemetry or self-report does not make the variant unusable. If native role selection explicitly rejects the variant, use the explicitly pinned fresh-child route or block. Use the base role and log provider-default only for explicit inherit/default behavior or the documented managed-uncapped reviewer exception. Always derive `model_axis` and `effort_axis` from resolver output, not from legacy role-name parsing or agent self-report.
|
|
457
481
|
9. Do not use top-level per-call `reasoning_effort` as the standard OAT selected-effort path; dogfooding showed that path can be inconsistent.
|
|
458
482
|
|
|
459
483
|
Claude rules:
|
|
@@ -486,6 +510,11 @@ Payload-first invariant:
|
|
|
486
510
|
|
|
487
511
|
- Build the actual host dispatch argument map before logging.
|
|
488
512
|
- Do not emit `selected:<value>` unless the host invocation contains the corresponding role/model selection.
|
|
513
|
+
- For every coordinator, task-worker, fix, and review launch, record `target`,
|
|
514
|
+
`model_axis`, and `effort_axis` from resolver output and the actual launcher
|
|
515
|
+
payload after payload construction.
|
|
516
|
+
- Those fields are launcher-owned. Agent self-report cannot populate or
|
|
517
|
+
overwrite them; it may only be retained separately as optional diagnostics.
|
|
489
518
|
- Derive `Dispatch target` and `Effort axis` / `Model axis` from the payload.
|
|
490
519
|
- After the payload is built, append the compatibility stamp returned from
|
|
491
520
|
`formatDispatchStamp(dispatchReport)` to Dispatch Notes for every
|
|
@@ -1068,10 +1097,15 @@ coordinator_target: {resolver-selected coordinator target}
|
|
|
1068
1097
|
|
|
1069
1098
|
Tier 1 uses the already resolved exact coordinator role/model payload and sends
|
|
1070
1099
|
the Phase Scope. A concrete Codex coordinator uses
|
|
1071
|
-
`providers.codex.dispatchArgs.variant
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1100
|
+
`providers.codex.dispatchArgs.variant` first as native `agent_type`. After the
|
|
1101
|
+
host accepts the spawn, record the coordinator `target`, `model_axis`, and
|
|
1102
|
+
`effort_axis` from resolver output and that constructed launcher payload; do not
|
|
1103
|
+
wait for or accept a coordinator self-report as proof. Only an actual native
|
|
1104
|
+
role-selection rejection permits the fresh child pinned to the resolver's model
|
|
1105
|
+
and effort with canonical coordinator instructions. An accepted coordinator
|
|
1106
|
+
that later returns `BLOCKED` has produced a coordinator outcome and cannot
|
|
1107
|
+
trigger fallback. Claude and Cursor coordinator calls pass their exact resolver
|
|
1108
|
+
model argument.
|
|
1075
1109
|
|
|
1076
1110
|
Tier 2 may run the coordinator instructions in the current context only when
|
|
1077
1111
|
that context can still dispatch every exact task worker. Tier 2 never permits
|
|
@@ -1104,14 +1138,19 @@ For each task in dependency order, the coordinator must:
|
|
|
1104
1138
|
is read-only and must never persist its override.
|
|
1105
1139
|
|
|
1106
1140
|
3. Build the actual provider invocation before logging:
|
|
1107
|
-
- Codex uses `providers.codex.dispatchArgs.variant` as
|
|
1108
|
-
|
|
1109
|
-
|
|
1141
|
+
- Codex first uses `providers.codex.dispatchArgs.variant` as native
|
|
1142
|
+
`agent_type`. Spawn acceptance establishes the configured invocation; only
|
|
1143
|
+
a native role-selection rejection permits the exact fresh pinned-child
|
|
1144
|
+
model/effort route.
|
|
1110
1145
|
- Claude passes `providers.claude.dispatchArgs.model` as the actual Task
|
|
1111
1146
|
`model`.
|
|
1112
1147
|
- Cursor passes `providers.cursor.dispatchArgs.model` byte-for-byte as the
|
|
1113
1148
|
actual invocation model. Treat the string as opaque and never normalize or
|
|
1114
1149
|
infer capability from it.
|
|
1150
|
+
- After construction, record the task-worker `target`, `model_axis`, and
|
|
1151
|
+
`effort_axis` from resolver output and the launcher payload. Missing worker
|
|
1152
|
+
telemetry or self-report is not unavailability, and self-report cannot
|
|
1153
|
+
replace those launcher-owned values.
|
|
1115
1154
|
4. Send one bounded Task Scope, never the full phase task list:
|
|
1116
1155
|
|
|
1117
1156
|
```yaml
|
|
@@ -1162,8 +1201,8 @@ After the implementer returns DONE (or DONE_WITH_CONCERNS without correctness co
|
|
|
1162
1201
|
**Dispatch:**
|
|
1163
1202
|
|
|
1164
1203
|
- Use the same tier that was selected at start.
|
|
1165
|
-
- For Codex with a capped managed policy, dispatch the materialized reviewer role returned in `providers.codex.dispatchArgs.variant` for deterministic quality gates.
|
|
1166
|
-
-
|
|
1204
|
+
- For Codex with a capped managed policy, first dispatch the materialized reviewer role returned in `providers.codex.dispatchArgs.variant` as native `agent_type` for deterministic quality gates. After spawn acceptance, record the review `target`, `model_axis`, and `effort_axis` from resolver output and the constructed launcher payload; reviewer self-report cannot populate or overwrite them.
|
|
1205
|
+
- Only if the exact registered reviewer role receives a native role-selection rejection may the launcher start a fresh Codex child with explicit model, reasoning effort, and canonical role instructions from `.agents/agents/oat-reviewer.md`; never substitute the managed base role and never require restart/hot reload. Missing reviewer telemetry or self-report is not a rejection, and an accepted reviewer that later returns `BLOCKED` cannot trigger fallback.
|
|
1167
1206
|
- For Codex with managed `Uncapped` or inherit/default mode, no reviewer target exists; use base `oat-reviewer`, log `effort_axis=provider-default`, and explain that the base role follows the provider default.
|
|
1168
1207
|
- For Claude Code with a capped managed policy, require `providers.claude.dispatchArgs.model` and pass that exact value as the review `model`; managed `Uncapped` or inherit/default mode omits `model` because no reviewer target exists. Always keep `effort_axis=not-applicable`.
|
|
1169
1208
|
- For Cursor with a concrete managed reviewer target, require `providers.cursor.dispatchArgs.model` and pass that exact opaque, unnormalized string as the actual review invocation's `model` argument.
|
|
@@ -1192,7 +1231,7 @@ After the implementer returns DONE (or DONE_WITH_CONCERNS without correctness co
|
|
|
1192
1231
|
- For Codex Tier 1 dispatches, send the Review Scope block as a self-contained packet and keep fresh context (`fork_context: false`). The reviewer is expected to reconstruct context from git state and the OAT artifacts listed above.
|
|
1193
1232
|
- For Codex Tier 1 review dispatches, use the materialized Codex role name from `providers.codex.dispatchArgs.variant` only when the resolver returns a reviewer variant for a capped managed policy. A Codex materialized reviewer role selected from a model+effort target must carry `model_axis=selected:<model>` and `effort_axis=selected:<effort>` from resolver output. Use base `oat-reviewer` only when the resolver returns no `dispatchArgs.variant` for managed `Uncapped`, inherit/default mode, or provider-default fallback, and log `effort_axis=provider-default`. For Claude Code, pass `model: providers.claude.dispatchArgs.model` for a concrete managed reviewer and never pass a per-review effort override. For Cursor, pass `model: providers.cursor.dispatchArgs.model` byte-for-byte for a concrete managed reviewer.
|
|
1194
1233
|
- Treat the commit range as authoritative for review scope. `files_changed` is optional orientation metadata only.
|
|
1195
|
-
- If a reviewer does not return a terminal result on the first wait, poll once more. If it still has not concluded, send one concise nudge to return immediately with current findings. If the reviewer still does not conclude, treat the target-preserving review dispatch as failed for this phase.
|
|
1234
|
+
- If a reviewer does not return a terminal result on the first wait, poll once more. If it still has not concluded, send one concise nudge to return immediately with current findings. If the reviewer still does not conclude, treat the target-preserving review dispatch as failed for this phase. When the original native reviewer spawn was accepted, retry the same already-selected native `agent_type` route within the retry bound; do not switch that timed-out reviewer to a fresh pinned child. The fresh pinned-child route is eligible only when the original native attempt received explicit pre-start role-selection rejection. Retry an already-selected pinned fresh-child route or complete Claude/Cursor invocation payload without changing routes, preserving the exact model argument; never downgrade a timed-out managed reviewer to unpinned inline execution.
|
|
1196
1235
|
|
|
1197
1236
|
- Tier 2: read `.agents/agents/oat-reviewer.md` and review inline only with verified equivalent current-host model and effort controls, explicit inherit/default behavior, or the documented managed-uncapped reviewer behavior. Otherwise block.
|
|
1198
1237
|
|
|
@@ -1202,6 +1241,9 @@ Parse the reviewer's confirmation for verdict + finding severities. Map to pass
|
|
|
1202
1241
|
|
|
1203
1242
|
- **pass:** zero Critical and zero Important findings.
|
|
1204
1243
|
- **fail:** one or more Critical or Important findings.
|
|
1244
|
+
- **blocked:** An accepted reviewer `BLOCKED` terminal blocks this phase review.
|
|
1245
|
+
It does not invoke fallback and must not be interpreted as a pass due to
|
|
1246
|
+
absent findings. Stop and surface the review target and blocker reason.
|
|
1205
1247
|
|
|
1206
1248
|
Medium / Minor findings do not block the phase but are recorded.
|
|
1207
1249
|
|
|
@@ -1212,7 +1254,7 @@ On reviewer verdict `fail`, run a bounded fix loop.
|
|
|
1212
1254
|
1. Read `oat_orchestration_retry_limit` from `state.md` frontmatter (default: `2`, range 0–5).
|
|
1213
1255
|
2. For each retry (up to the limit):
|
|
1214
1256
|
a. Convert Critical/Important findings into bounded fix scopes associated with one planned task/file boundary at a time. Do not hand one worker the full phase finding list.
|
|
1215
|
-
b. Reuse the phase coordinator in `fix` mode. It selects an exact candidate under the same project or phase named ceiling with `--ceiling-tier`, then emits one Task Scope per bounded fix. Codex uses `providers.codex.dispatchArgs.variant`; Claude and Cursor pass their exact `providers.<provider>.dispatchArgs.model` value on the actual invocation. Every fix worker writes the formal `Dispatch: scope=<phase-or-task> action=fix role=fix producer=<slug|unknown> provenance=<declared|observed|inferred|unknown> model_axis=<axis> effort_axis=<axis> dispatch_policy=<policy|unknown> dispatch_ceiling=<value|none> target=<target|unknown>` stamp before execution.
|
|
1257
|
+
b. Reuse the phase coordinator in `fix` mode. It selects an exact candidate under the same project or phase named ceiling with `--ceiling-tier`, then emits one Task Scope per bounded fix. Codex first uses `providers.codex.dispatchArgs.variant` as native `agent_type`; only a native role-selection rejection permits the exact fresh-child fallback. Claude and Cursor pass their exact `providers.<provider>.dispatchArgs.model` value on the actual invocation. After constructing the launcher payload, record the fix `target`, `model_axis`, and `effort_axis` from that payload and resolver output. Missing fix-worker telemetry or self-report is not unavailability, and an accepted fix worker — including one that returns `BLOCKED` — cannot trigger fallback. Every fix worker writes the formal `Dispatch: scope=<phase-or-task> action=fix role=fix producer=<slug|unknown> provenance=<declared|observed|inferred|unknown> model_axis=<axis> effort_axis=<axis> dispatch_policy=<policy|unknown> dispatch_ceiling=<value|none> target=<target|unknown>` stamp before execution.
|
|
1216
1258
|
c. Receive and verify each fix result and commit. The coordinator must not apply fixes itself, and Tier 2 does not authorize inline task edits.
|
|
1217
1259
|
d. Re-dispatch the reviewer with the updated commit range.
|
|
1218
1260
|
e. Parse the new verdict.
|
|
@@ -1409,7 +1451,7 @@ git add {PROJECT_PATH}/implementation.md {PROJECT_PATH}/state.md {PROJECT_PATH}/
|
|
|
1409
1451
|
git commit -m "chore(oat): bookkeeping after {pNN} {pass|fail}"
|
|
1410
1452
|
```
|
|
1411
1453
|
|
|
1412
|
-
Then run the optional external phase review gate for the completed phase when `oat_phase_review_gate` selects it. After the gate passes or is skipped, check HiLL checkpoint
|
|
1454
|
+
Then run the optional external phase review gate for the completed phase when `oat_phase_review_gate` selects it. After the gate passes or is skipped, check the HiLL checkpoint. A non-final checkpoint pauses at this boundary; defer a final-phase checkpoint to **Final HiLL Closeout Sequence** after final verification, final review, and any configured pre-approval steps succeed.
|
|
1413
1455
|
|
|
1414
1456
|
### Step 8: Check Plan Phase Completion
|
|
1415
1457
|
|
|
@@ -1453,12 +1495,20 @@ Before pausing at a checkpoint, check if auto-review is enabled:
|
|
|
1453
1495
|
|
|
1454
1496
|
3. If disabled: skip directly to the checkpoint pause.
|
|
1455
1497
|
|
|
1456
|
-
When pausing:
|
|
1498
|
+
When pausing at a non-final checkpoint:
|
|
1457
1499
|
|
|
1458
1500
|
- Output phase summary (tasks completed, commits made)
|
|
1459
1501
|
- Ask user: "Phase {N} ({phase_name}) complete. Continue to next phase?"
|
|
1460
1502
|
- Wait for user approval before proceeding to next plan phase
|
|
1461
1503
|
|
|
1504
|
+
**Final checkpoint deferral:** If the current phase is the final implementation
|
|
1505
|
+
phase and it is configured as a HiLL checkpoint, do not ask the generic
|
|
1506
|
+
"Continue to next phase?" question. Final checkpoint auto-review above still
|
|
1507
|
+
runs exactly as written, including `oat-project-review-provide code final` and
|
|
1508
|
+
its no-duplicate-final-review rule. Then continue through Steps 9–14. Final
|
|
1509
|
+
approval occurs only in **Final HiLL Closeout Sequence**, after final review and
|
|
1510
|
+
the stored pre-approval sequence complete.
|
|
1511
|
+
|
|
1462
1512
|
**Restart safety (required):**
|
|
1463
1513
|
|
|
1464
1514
|
- At the end of each task and at each phase boundary, ensure `implementation.md` is persisted and internally consistent:
|
|
@@ -1499,7 +1549,7 @@ Do not use `git add -A` or glob patterns. Only commit the three project artifact
|
|
|
1499
1549
|
**Note on HiLL types:**
|
|
1500
1550
|
|
|
1501
1551
|
- **Workflow HiLL** (`oat_hill_checkpoints` in state.md): Gates between workflow phases (discovery → spec → design → plan → implement). Checked by oat-project-progress router.
|
|
1502
|
-
- **Plan phase checkpoints** (`oat_plan_hill_phases` in plan.md): Gates at plan phase boundaries during implementation. `[]` means pause after every phase; a populated array pauses only after listed phases. The field may be absent only before the first implementation-run confirmation. Listed phases are where you stop AFTER completing them.
|
|
1552
|
+
- **Plan phase checkpoints** (`oat_plan_hill_phases` in plan.md): Gates at plan phase boundaries during implementation. `[]` means pause after every phase; a populated array pauses only after listed phases. The field may be absent only before the first implementation-run confirmation. Listed phases are where you stop AFTER completing them. A checkpoint on the final implementation phase is deferred to final closeout so final verification, final review, and configured pre-approval work finish before explicit approval.
|
|
1503
1553
|
- **Phase review gate** (`oat_phase_review_gate` in plan.md): Optional non-pausing external review gate after a completed phase passes the standard reviewer. Missing/disabled means skip; `phases: []` means gate every implementation phase. Passing gates continue automatically; blocking gates are received/fixed before execution proceeds.
|
|
1504
1554
|
|
|
1505
1555
|
**Revision phase completion handling:**
|
|
@@ -1655,6 +1705,10 @@ All must pass before proceeding.
|
|
|
1655
1705
|
|
|
1656
1706
|
**At the final plan phase boundary, a code review is required before PR.**
|
|
1657
1707
|
|
|
1708
|
+
An accepted reviewer `BLOCKED` terminal blocks final review. It does not invoke
|
|
1709
|
+
fallback and must not be interpreted as a pass due to absent findings. Stop and
|
|
1710
|
+
surface the review target and blocker reason.
|
|
1711
|
+
|
|
1658
1712
|
Before requesting final review, ensure the latest project-artifact bookkeeping is already committed. Review should evaluate the implementation state as it actually stands on the branch, not a half-tracked working tree.
|
|
1659
1713
|
|
|
1660
1714
|
Check if final review already completed (preferred source of truth: plan.md Reviews table):
|
|
@@ -1669,10 +1723,12 @@ echo "$FINAL_ROW"
|
|
|
1669
1723
|
- Example row:
|
|
1670
1724
|
- `| final | code | passed | 2026-01-28 | reviews/final-review-2026-01-28T140322Z.md |`
|
|
1671
1725
|
- Check:
|
|
1726
|
+
|
|
1672
1727
|
```bash
|
|
1673
1728
|
echo "$FINAL_ROW" | grep -qE "^\\|\\s*final\\s*\\|.*\\|\\s*passed\\s*\\|" && echo "passed"
|
|
1674
1729
|
```
|
|
1675
|
-
|
|
1730
|
+
|
|
1731
|
+
- Continue to Step 15 (final closeout)
|
|
1676
1732
|
|
|
1677
1733
|
**If final review is not marked `passed`:**
|
|
1678
1734
|
|
|
@@ -1681,13 +1737,22 @@ echo "$FINAL_ROW"
|
|
|
1681
1737
|
**Workflow preference check (before prompting):**
|
|
1682
1738
|
|
|
1683
1739
|
First resolve the final reviewer target with the same target-first contract as
|
|
1684
|
-
per-phase review. A concrete managed Codex target must
|
|
1685
|
-
reviewer
|
|
1686
|
-
|
|
1740
|
+
per-phase review. A concrete managed Codex target must first send its exact
|
|
1741
|
+
registered reviewer as native `agent_type`; only a native role-selection
|
|
1742
|
+
rejection permits an explicitly pinned fresh child. Spawn acceptance plus the
|
|
1743
|
+
launcher payload supplies configured invocation evidence, so missing telemetry,
|
|
1744
|
+
missing self-report, or a later `BLOCKED` result cannot trigger fallback. Record
|
|
1745
|
+
the final review `target`, `model_axis`, and `effort_axis` from resolver output
|
|
1746
|
+
and the constructed launcher payload, never from reviewer self-report. A
|
|
1747
|
+
concrete managed Claude or Cursor target must put
|
|
1748
|
+
`providers.claude.dispatchArgs.model` or
|
|
1687
1749
|
`providers.cursor.dispatchArgs.model` respectively into the actual provider
|
|
1688
1750
|
invocation as the exact `model` argument; Cursor strings remain opaque. On
|
|
1689
|
-
timeout or retry, preserve the
|
|
1690
|
-
|
|
1751
|
+
timeout or retry, preserve the already-selected route as well as its complete
|
|
1752
|
+
invocation payload: an accepted native reviewer retries the same native
|
|
1753
|
+
`agent_type`, while a fresh pinned-child route is eligible only when the
|
|
1754
|
+
original native attempt received explicit pre-start role-selection rejection.
|
|
1755
|
+
Preserve the exact model argument. If the host cannot apply the required role or
|
|
1691
1756
|
model argument, fail closed or block unless verified equivalent current-host
|
|
1692
1757
|
controls permit inline execution. The preference below chooses only among
|
|
1693
1758
|
routes that preserve that target; it cannot authorize generic inline or base
|
|
@@ -1752,36 +1817,100 @@ To run in a separate session use: oat-project-review-provide code final
|
|
|
1752
1817
|
|
|
1753
1818
|
**After final review is marked `passed`:**
|
|
1754
1819
|
|
|
1755
|
-
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
- Append `"implement"` to `oat_hill_completed` (only if configured as a HiLL gate)
|
|
1760
|
-
- Update state content to "Implementation complete".
|
|
1761
|
-
- Update `"$PROJECT_PATH/plan.md"`:
|
|
1762
|
-
- Set the `final` review row status to `passed` (if not already)
|
|
1763
|
-
- Ensure `## Implementation Complete` totals reflect any review fix tasks that were added
|
|
1764
|
-
- Update `"$PROJECT_PATH/implementation.md"`:
|
|
1765
|
-
- Ensure `oat_current_task_id: null`
|
|
1766
|
-
- Ensure the "Review Received" section reflects completed fixes and points to the next action (PR) rather than "execute fix tasks"
|
|
1820
|
+
- Record the passed final review and keep the project in implementation closeout.
|
|
1821
|
+
- Do not append `"implement"` to `oat_hill_completed`, set
|
|
1822
|
+
`oat_phase_status: complete`, or offer the normal next-step prompt yet.
|
|
1823
|
+
- Continue to **Final HiLL Closeout Sequence**.
|
|
1767
1824
|
|
|
1768
|
-
### Step 15:
|
|
1825
|
+
### Step 15: Final HiLL Closeout Sequence
|
|
1769
1826
|
|
|
1770
|
-
|
|
1827
|
+
The final-closeout orchestrator owns this sequence after the rebased phase
|
|
1828
|
+
coordinator has finished. Do not move lifecycle sequencing into task workers or
|
|
1829
|
+
weaken exact target selection for child dispatches.
|
|
1771
1830
|
|
|
1772
|
-
|
|
1831
|
+
Identify the final implementation phase from the plan. A final HiLL checkpoint
|
|
1832
|
+
exists when `oat_plan_hill_phases` is `[]` (every phase) or when it explicitly
|
|
1833
|
+
contains that final phase ID. Defer only a checkpoint on the final implementation
|
|
1834
|
+
phase; non-final checkpoint behavior remains unchanged.
|
|
1773
1835
|
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1836
|
+
Run final verification (Step 13). Final review must be `passed` before any
|
|
1837
|
+
pre-approval dispatch. If final checkpoint auto-review is enabled, Step 8 has
|
|
1838
|
+
already run `oat-project-review-provide code final`; do not run a duplicate
|
|
1839
|
+
final review here.
|
|
1840
|
+
|
|
1841
|
+
Read the effective `workflow.postImplementSequence` once. For a configured
|
|
1842
|
+
legacy or structured preference, normalize legacy values before snapshotting:
|
|
1843
|
+
`wait` → `{ preApproval: [], postApproval: [] }`, `summary` →
|
|
1844
|
+
`{ preApproval: ["summary"], postApproval: [] }`, `pr` → `{ preApproval:
|
|
1845
|
+
["summary", "pr"], postApproval: [] }`, and `docs-pr` → `{ preApproval:
|
|
1846
|
+
["summary", "document", "pr"], postApproval: [] }`.
|
|
1777
1847
|
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1848
|
+
Persist this immutable state before dispatching a child:
|
|
1849
|
+
|
|
1850
|
+
```yaml
|
|
1851
|
+
oat_post_implement_sequence:
|
|
1852
|
+
status: pre_approval # pre_approval | awaiting_approval | post_approval | failed | complete
|
|
1853
|
+
final_phase: pNN
|
|
1854
|
+
pre_approval: [summary, document, pr]
|
|
1855
|
+
pre_approval_completed: []
|
|
1856
|
+
approval: pending # pending | approved | not_required
|
|
1857
|
+
post_approval: []
|
|
1858
|
+
post_approval_completed: []
|
|
1859
|
+
failure: null
|
|
1860
|
+
```
|
|
1783
1861
|
|
|
1784
|
-
|
|
1862
|
+
The snapshot is immutable for this closeout: never re-resolve
|
|
1863
|
+
`workflow.postImplementSequence` while it is incomplete. Iterate
|
|
1864
|
+
`pre_approval` and `post_approval` in their stored array order; do not sort or
|
|
1865
|
+
substitute a vocabulary order. Resume from the first incomplete stored step,
|
|
1866
|
+
including a partially completed noncanonical order.
|
|
1867
|
+
|
|
1868
|
+
For every pending `summary`, `document`, or `pr`, dispatch respectively
|
|
1869
|
+
`oat-project-summary`, `oat-project-document`, or `oat-project-pr-final`.
|
|
1870
|
+
Every `summary`, `document`, and `pr` child receives the authoritative snapshot
|
|
1871
|
+
and must merge state updates without replacing `oat_post_implement_sequence`.
|
|
1872
|
+
Re-read and verify the snapshot after every child returns before recording step
|
|
1873
|
+
success. If a child removed or altered it, restore the authoritative snapshot,
|
|
1874
|
+
record that step as failed, and stop with the boundary, failed step, and exact
|
|
1875
|
+
resume command: `oat-project-implement`.
|
|
1876
|
+
|
|
1877
|
+
Commit each completed step before dispatching the next step. On failure, persist
|
|
1878
|
+
`status: failed`, the boundary, the failed step, and concise recovery context.
|
|
1879
|
+
A pre-approval failure leaves `approval: pending`; a post-approval failure
|
|
1880
|
+
retains `approval: approved`. Fail fast with the boundary, failed step, and
|
|
1881
|
+
exact resume command: `oat-project-implement`.
|
|
1882
|
+
|
|
1883
|
+
1. Dispatch incomplete `pre_approval` steps in stored order.
|
|
1884
|
+
2. When they succeed and a final checkpoint exists, commit `status:
|
|
1885
|
+
awaiting_approval` with `approval: pending` before asking for final HiLL
|
|
1886
|
+
approval.
|
|
1887
|
+
3. Record explicit approval as `approval: approved` and `status: post_approval`
|
|
1888
|
+
before any post-approval dispatch. Then dispatch incomplete `post_approval`
|
|
1889
|
+
steps in stored order.
|
|
1890
|
+
4. A decline or defer keeps `status: awaiting_approval` and `approval: pending`;
|
|
1891
|
+
record neither approval nor failure and run no post-approval step. State the
|
|
1892
|
+
boundary and exact resume command: `oat-project-implement`.
|
|
1893
|
+
5. If no final checkpoint exists, commit `approval: not_required` before
|
|
1894
|
+
post-approval dispatch. `approval: not_required` is valid only when no final
|
|
1895
|
+
checkpoint exists.
|
|
1896
|
+
6. After all stored steps finish, commit `status: complete`. Only then complete
|
|
1897
|
+
implementation state, append the configured final HiLL completion, and
|
|
1898
|
+
continue to the existing next-step behavior.
|
|
1899
|
+
|
|
1900
|
+
If the preference is unset, do not create a sequence snapshot. When the
|
|
1901
|
+
preference is unset, retain the existing next-step prompt only after final
|
|
1902
|
+
approval when a final checkpoint is configured.
|
|
1903
|
+
|
|
1904
|
+
### Step 16: Prompt for Next Steps
|
|
1905
|
+
|
|
1906
|
+
Run the standard next-step prompt only when
|
|
1907
|
+
`workflow.postImplementSequence` was unset and no sequence snapshot was
|
|
1908
|
+
created. It occurs after final approval when a final checkpoint is configured.
|
|
1909
|
+
A configured legacy or structured preference has already completed through
|
|
1910
|
+
**Final HiLL Closeout Sequence**; do not re-dispatch its steps here. When the
|
|
1911
|
+
completed snapshot came from configured `wait`, print
|
|
1912
|
+
`Post-implementation: wait (from workflow.postImplementSequence). Run
|
|
1913
|
+
follow-up skills manually when ready.` and exit without auto-chaining.
|
|
1785
1914
|
|
|
1786
1915
|
**Standard prompt (when preference is unset):**
|
|
1787
1916
|
|
|
@@ -1814,7 +1943,7 @@ Do not route directly to `oat-project-complete`. The `pr_open` status set by pr-
|
|
|
1814
1943
|
|
|
1815
1944
|
Tell user: "Run the skills individually when ready: oat-project-summary → oat-project-document → oat-project-pr-final"
|
|
1816
1945
|
|
|
1817
|
-
### Step
|
|
1946
|
+
### Step 17: Output Summary
|
|
1818
1947
|
|
|
1819
1948
|
```
|
|
1820
1949
|
Implementation complete for {project-name}.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-import-plan
|
|
3
|
-
version: 1.4.
|
|
3
|
+
version: 1.4.5
|
|
4
4
|
description: Use when you have an external markdown plan to execute with OAT. Preserves the source plan and normalizes it into canonical plan.md format.
|
|
5
5
|
argument-hint: '<path-to-plan.md> [--provider codex|cursor|claude] [--project <name>]'
|
|
6
6
|
oat_gateable: true
|
|
@@ -16,7 +16,7 @@ Import a markdown plan from an external coding provider and normalize it into OA
|
|
|
16
16
|
Provider native plan mode uses this same path: provider-plan-via-import
|
|
17
17
|
preserves the provider plan first, and provider plan dispatch readiness
|
|
18
18
|
inherits the same import workflow contract below, including complete ladder
|
|
19
|
-
adoption, the project named ceiling, the `Shared Phase
|
|
19
|
+
adoption, the project named ceiling, the `Shared Phase Gate Review Setup Contract`,
|
|
20
20
|
and the rule that readiness and completion follow only after a durable review
|
|
21
21
|
disposition. It does not add a separate provider-plan prompt.
|
|
22
22
|
|
|
@@ -277,10 +277,10 @@ maximum. Use the canonical
|
|
|
277
277
|
project ceiling resolves. `Uncapped` and `Inherit Host Defaults` remain
|
|
278
278
|
explicit modes; `Leave Unresolved` is not implementation-ready.
|
|
279
279
|
|
|
280
|
-
### Step 4.25: Configure Optional Phase Review
|
|
280
|
+
### Step 4.25: Configure Optional Phase Gate Review
|
|
281
281
|
|
|
282
282
|
After normalization has produced stable phase IDs and before Step 4.5 starts
|
|
283
|
-
the import-aware plan artifact review, invoke the `Shared Phase
|
|
283
|
+
the import-aware plan artifact review, invoke the `Shared Phase Gate Review Setup
|
|
284
284
|
Contract` from `oat-project-plan-writing`. Provider native plan mode uses this
|
|
285
285
|
same import step and inherits its result.
|
|
286
286
|
|
|
@@ -289,10 +289,10 @@ through the shared contract without probing, prompting, or mutation. Resumed or
|
|
|
289
289
|
imported explicit values remain authoritative without re-prompting. Otherwise
|
|
290
290
|
let the contract probe qualifying targets and offer all phases, selected
|
|
291
291
|
phases, or disabled. If the probe fails, no target qualifies, or the user
|
|
292
|
-
declines, leave
|
|
292
|
+
declines, leave Phase gate review disabled and continue with the contract's concise
|
|
293
293
|
status output.
|
|
294
294
|
|
|
295
|
-
This
|
|
295
|
+
This Phase gate review setup is independent from HiLL checkpoints. Do not read or
|
|
296
296
|
change HiLL fields here, and do not add a provider/model `--target` to any
|
|
297
297
|
lifecycle command.
|
|
298
298
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-next
|
|
3
|
-
version: 1.0.
|
|
3
|
+
version: 1.0.7
|
|
4
4
|
description: Use when continuing work on the active OAT project. Reads project state, determines the next lifecycle action, and invokes the appropriate skill automatically.
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
user-invocable: true
|
|
@@ -259,6 +259,13 @@ Entry condition: `oat_phase == "implement"` AND (`oat_phase_status == "complete"
|
|
|
259
259
|
|
|
260
260
|
Apply the following checks in priority order. Stop at the first match:
|
|
261
261
|
|
|
262
|
+
**5.0: Incomplete approval-aware post-implementation sequence**
|
|
263
|
+
|
|
264
|
+
Before every other post-implementation route, inspect `oat_post_implement_sequence`
|
|
265
|
+
in project state. When the snapshot exists and is incomplete, route to
|
|
266
|
+
`oat-project-implement`. This applies even when `oat_phase_status` is `pr_open`
|
|
267
|
+
or a summary exists. A completed snapshot falls through to the normal router.
|
|
268
|
+
|
|
262
269
|
**5.1: Incomplete revision tasks**
|
|
263
270
|
|
|
264
271
|
Grep plan.md for `p-revN` phases. If any `p-revN` tasks exist with status != completed in implementation.md:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-plan
|
|
3
|
-
version: 1.3.
|
|
3
|
+
version: 1.3.13
|
|
4
4
|
description: Use when design.md is complete and executable implementation tasks are needed. Breaks design into bite-sized TDD tasks in canonical plan.md format.
|
|
5
5
|
oat_gateable: true
|
|
6
6
|
disable-model-invocation: true
|
|
@@ -203,7 +203,7 @@ oat_template: false
|
|
|
203
203
|
|
|
204
204
|
When Overwrite restored an explicit phase-review snapshot, keep that exact
|
|
205
205
|
entry in this first rewritten frontmatter. Do not let the generic frontmatter
|
|
206
|
-
update remove or replace it. The shared
|
|
206
|
+
update remove or replace it. The shared Phase gate review setup in Step 12.25 must
|
|
207
207
|
observe the restored key and preserve it without probing, prompting, or
|
|
208
208
|
mutation. When the key was absent from the overwritten plan, do not invent it
|
|
209
209
|
before the shared setup contract runs.
|
|
@@ -417,20 +417,20 @@ Ask: "Does this breakdown make sense? Any tasks missing?"
|
|
|
417
417
|
|
|
418
418
|
Iterate until user confirms.
|
|
419
419
|
|
|
420
|
-
### Step 12.25: Configure Optional Phase Review
|
|
420
|
+
### Step 12.25: Configure Optional Phase Gate Review
|
|
421
421
|
|
|
422
422
|
After the confirmed plan has stable phase IDs and before Step 12.5 starts the
|
|
423
|
-
plan artifact review, invoke the `Shared Phase
|
|
423
|
+
plan artifact review, invoke the `Shared Phase Gate Review Setup Contract` from
|
|
424
424
|
`oat-project-plan-writing`.
|
|
425
425
|
|
|
426
426
|
If `plan.md` already contains an explicit `oat_phase_review_gate`, preserve it
|
|
427
427
|
through the shared contract without probing, prompting, or mutation. Otherwise
|
|
428
428
|
let the contract probe qualifying targets and offer all phases, selected
|
|
429
429
|
phases, or disabled. If the probe fails, no target qualifies, or the user
|
|
430
|
-
declines, leave
|
|
430
|
+
declines, leave Phase gate review disabled and continue with the contract's concise
|
|
431
431
|
status output.
|
|
432
432
|
|
|
433
|
-
This
|
|
433
|
+
This Phase gate review setup is independent from HiLL checkpoints. Do not read or
|
|
434
434
|
change HiLL fields here, and do not add a provider/model `--target` to any
|
|
435
435
|
lifecycle command.
|
|
436
436
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-plan-writing
|
|
3
|
-
version: 1.2.
|
|
3
|
+
version: 1.2.9
|
|
4
4
|
description: Use when authoring or mutating plan.md in any OAT workflow. Defines canonical format invariants — stable task IDs, required sections, review table rules, and resume guardrails.
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
user-invocable: false
|
|
@@ -134,7 +134,7 @@ The Auto Artifact-Review Loop below consumes this reviewer dispatch contract.
|
|
|
134
134
|
Tier selection happens only after the target-preserving route is known and
|
|
135
135
|
changes execution mechanics, not the resolved model/effort contract.
|
|
136
136
|
|
|
137
|
-
## Shared Phase
|
|
137
|
+
## Shared Phase Gate Review Setup Contract
|
|
138
138
|
|
|
139
139
|
Every plan-producing workflow invokes this procedure after the complete plan
|
|
140
140
|
has stable phase IDs and before the plan artifact review begins. The calling
|
|
@@ -149,7 +149,7 @@ unchanged. Do not probe targets, prompt, or mutate the setting. This applies to
|
|
|
149
149
|
enabled, disabled, resumed, and imported explicit values. Report:
|
|
150
150
|
|
|
151
151
|
```text
|
|
152
|
-
Phase review: preserved existing oat_phase_review_gate setting.
|
|
152
|
+
Phase gate review: preserved existing oat_phase_review_gate setting.
|
|
153
153
|
```
|
|
154
154
|
|
|
155
155
|
Implementation preflight remains responsible for rejecting a malformed
|
|
@@ -182,13 +182,13 @@ If the probe fails, emit exactly this concise warning and continue planning
|
|
|
182
182
|
without adding the setting:
|
|
183
183
|
|
|
184
184
|
```text
|
|
185
|
-
Warning:
|
|
185
|
+
Warning: Phase gate review target probe failed; Phase gate review remains disabled.
|
|
186
186
|
```
|
|
187
187
|
|
|
188
188
|
If no qualifying target exists, emit:
|
|
189
189
|
|
|
190
190
|
```text
|
|
191
|
-
Phase review: disabled (no qualifying target);
|
|
191
|
+
Phase gate review: disabled (no qualifying target); Phase gate review remains disabled.
|
|
192
192
|
```
|
|
193
193
|
|
|
194
194
|
Do not invent enablement in either branch.
|
|
@@ -198,9 +198,12 @@ Do not invent enablement in either branch.
|
|
|
198
198
|
When at least one target qualifies and an interactive user-response channel is
|
|
199
199
|
available, offer exactly these outcomes:
|
|
200
200
|
|
|
201
|
-
1. **All phases** - enable review
|
|
202
|
-
2. **Selected phases** - enable review only
|
|
203
|
-
3. **Disabled** - leave
|
|
201
|
+
1. **All phases** - enable the independent Phase gate review after every implementation phase.
|
|
202
|
+
2. **Selected phases** - enable the independent Phase gate review only after chosen stable phase IDs.
|
|
203
|
+
3. **Disabled** - leave Phase gate review disabled.
|
|
204
|
+
|
|
205
|
+
Phase gate review is non-pausing when it passes and is distinct from both HiLL
|
|
206
|
+
approval and final artifact review.
|
|
204
207
|
|
|
205
208
|
For all phases, write the existing plan frontmatter shape:
|
|
206
209
|
|
|
@@ -222,7 +225,7 @@ If the user declines or chooses Disabled, do not add
|
|
|
222
225
|
`oat_phase_review_gate`; emit:
|
|
223
226
|
|
|
224
227
|
```text
|
|
225
|
-
Phase review: disabled (user declined);
|
|
228
|
+
Phase gate review: disabled (user declined); Phase gate review remains disabled.
|
|
226
229
|
```
|
|
227
230
|
|
|
228
231
|
### 4. Handle non-interactive planning
|
|
@@ -233,7 +236,7 @@ a qualifying target, do not guess all phases or selected phases and do not
|
|
|
233
236
|
invent enablement. Leave the setting absent and emit:
|
|
234
237
|
|
|
235
238
|
```text
|
|
236
|
-
Phase review: disabled (non-interactive; no selection recorded);
|
|
239
|
+
Phase gate review: disabled (non-interactive; no selection recorded); Phase gate review remains disabled.
|
|
237
240
|
```
|
|
238
241
|
|
|
239
242
|
### 5. Keep review gates independent from HiLL
|