@open-agent-toolkit/cli 0.1.41 → 0.1.43
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 +13 -9
- package/assets/agents/oat-reviewer.md +16 -12
- package/assets/docs/cli-utilities/configuration.md +51 -35
- package/assets/docs/cli-utilities/workflow-gates.md +55 -0
- package/assets/docs/reference/cli-reference.md +1 -1
- package/assets/docs/reference/oat-directory-structure.md +26 -24
- package/assets/docs/workflows/projects/artifacts.md +22 -0
- package/assets/docs/workflows/projects/dispatch-ceiling.md +128 -85
- package/assets/docs/workflows/projects/hill-checkpoints.md +2 -0
- package/assets/docs/workflows/projects/implementation-execution.md +70 -46
- package/assets/docs/workflows/projects/index.md +2 -2
- package/assets/docs/workflows/projects/lifecycle.md +17 -2
- package/assets/docs/workflows/projects/reviews.md +17 -0
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-project-implement/SKILL.md +256 -95
- package/assets/skills/oat-project-plan/SKILL.md +60 -29
- package/assets/skills/oat-project-plan-writing/SKILL.md +10 -10
- package/assets/skills/oat-project-quick-start/SKILL.md +60 -29
- package/assets/skills/oat-project-review-provide/SKILL.md +25 -13
- package/assets/skills/oat-project-review-receive/SKILL.md +20 -10
- package/assets/skills/oat-review-provide/SKILL.md +14 -12
- package/assets/skills/oat-review-provide/references/review-artifact-template.md +1 -1
- package/assets/templates/plan.md +4 -4
- package/assets/templates/state.md +7 -3
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +66 -3
- package/dist/commands/gate/index.d.ts.map +1 -1
- package/dist/commands/gate/index.js +15 -3
- package/dist/commands/project/dispatch-ceiling/index.d.ts.map +1 -1
- package/dist/commands/project/dispatch-ceiling/index.js +296 -49
- package/dist/commands/review/latest.d.ts.map +1 -1
- package/dist/commands/review/latest.js +5 -2
- package/dist/commands/shared/frontmatter.d.ts +11 -0
- package/dist/commands/shared/frontmatter.d.ts.map +1 -1
- package/dist/commands/shared/frontmatter.js +15 -0
- package/dist/config/dispatch-ceiling-preset.d.ts +37 -1
- package/dist/config/dispatch-ceiling-preset.d.ts.map +1 -1
- package/dist/config/dispatch-ceiling-preset.js +20 -0
- package/dist/config/oat-config.d.ts +10 -1
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +20 -1
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +4 -0
- package/dist/providers/ceiling/registry.d.ts.map +1 -1
- package/dist/providers/ceiling/registry.js +6 -1
- package/dist/providers/codex/codec/sync-extension.js +1 -1
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-plan
|
|
3
|
-
version: 1.3.
|
|
3
|
+
version: 1.3.9
|
|
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
|
|
@@ -314,61 +314,92 @@ Unless the source artifact or user already supplied a confirmed `oat_plan_hill_p
|
|
|
314
314
|
|
|
315
315
|
If `## Planning Checklist` is missing (older plans), add it before finalizing with the items above.
|
|
316
316
|
|
|
317
|
-
### Step 11.5: Resolve Dispatch
|
|
317
|
+
### Step 11.5: Resolve Dispatch Policy Before Implementation Readiness
|
|
318
318
|
|
|
319
|
-
Before marking the plan ready for implementation, resolve the dispatch
|
|
319
|
+
Before marking the plan ready for implementation, resolve the dispatch policy.
|
|
320
320
|
|
|
321
321
|
Resolution order:
|
|
322
322
|
|
|
323
|
-
1. Config keys `workflow.
|
|
324
|
-
2.
|
|
325
|
-
3.
|
|
326
|
-
4.
|
|
323
|
+
1. Config keys `workflow.dispatchPolicy.mode` / `workflow.dispatchPolicy.policy` via the resolver CLI
|
|
324
|
+
2. Compatibility config keys `workflow.dispatchCeiling.providers.<provider>`
|
|
325
|
+
3. Project `state.md` frontmatter key `oat_dispatch_policy`
|
|
326
|
+
4. Legacy project `state.md` frontmatter key `oat_dispatch_ceiling`
|
|
327
|
+
5. Interactive planning prompt (below)
|
|
328
|
+
6. Leave unresolved for implementation preflight when non-interactive
|
|
327
329
|
|
|
328
|
-
If no
|
|
329
|
-
prompt once before final plan review:
|
|
330
|
+
If no policy resolves and the session is interactive, present the dispatch
|
|
331
|
+
policy prompt once before final plan review:
|
|
330
332
|
|
|
331
333
|
```text
|
|
332
|
-
Set the dispatch
|
|
334
|
+
Set the dispatch policy — how OAT should choose subagent model/effort controls.
|
|
333
335
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
336
|
+
Managed capped policies:
|
|
337
|
+
1. Economy — Codex: medium · Claude: sonnet
|
|
338
|
+
2. Balanced — Codex: high · Claude: sonnet (recommended)
|
|
339
|
+
3. High — Codex: xhigh · Claude: opus
|
|
340
|
+
4. Frontier — Codex: xhigh · Claude: fable
|
|
339
341
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
+
Managed uncapped:
|
|
343
|
+
5. Uncapped — OAT selects the preferred implementer/fix target without a stored maximum cap.
|
|
344
|
+
|
|
345
|
+
Host defaults:
|
|
346
|
+
6. Inherit Host Defaults — OAT does not select model/effort controls.
|
|
347
|
+
|
|
348
|
+
OAT applies managed policies where the provider exposes a reliable mechanism
|
|
349
|
+
(Codex: pinned variants; Claude: Task model parameter). Other providers may
|
|
350
|
+
treat managed policies as advisory.
|
|
342
351
|
```
|
|
343
352
|
|
|
344
|
-
**
|
|
345
|
-
|
|
346
|
-
Codex: high · Claude:
|
|
353
|
+
**Managed capped policy selection (options 1-4)** persists `mode: managed`,
|
|
354
|
+
`policy`, and the compiled provider targets. On selection, print the exact
|
|
355
|
+
compiled result (e.g., "Dispatch policy set: balanced → Codex: high · Claude:
|
|
356
|
+
sonnet") before proceeding.
|
|
347
357
|
|
|
348
|
-
**
|
|
349
|
-
|
|
358
|
+
**Uncapped (option 5)** persists explicit managed uncapped state. It does not
|
|
359
|
+
write provider caps, and it must not be represented by leaving dispatch policy
|
|
360
|
+
state absent.
|
|
350
361
|
|
|
351
|
-
**
|
|
352
|
-
|
|
362
|
+
**Inherit Host Defaults (option 6)** persists explicit inherit/default state.
|
|
363
|
+
Use this only when the user wants OAT to leave implementation, fix, and review
|
|
364
|
+
model/effort controls to the executing host/provider.
|
|
353
365
|
|
|
354
366
|
Persist the answer in `"$PROJECT_PATH/state.md"` frontmatter using the
|
|
355
367
|
normalized shape:
|
|
356
368
|
|
|
357
369
|
```yaml
|
|
358
|
-
|
|
359
|
-
|
|
370
|
+
oat_dispatch_policy:
|
|
371
|
+
mode: managed
|
|
372
|
+
policy: balanced
|
|
360
373
|
providers:
|
|
361
374
|
codex: high
|
|
362
375
|
claude: sonnet
|
|
363
376
|
source: project-state
|
|
364
377
|
```
|
|
365
378
|
|
|
379
|
+
For `Uncapped`:
|
|
380
|
+
|
|
381
|
+
```yaml
|
|
382
|
+
oat_dispatch_policy:
|
|
383
|
+
mode: managed
|
|
384
|
+
policy: uncapped
|
|
385
|
+
source: project-state
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
For `Inherit Host Defaults`:
|
|
389
|
+
|
|
390
|
+
```yaml
|
|
391
|
+
oat_dispatch_policy:
|
|
392
|
+
mode: inherit
|
|
393
|
+
source: project-state
|
|
394
|
+
```
|
|
395
|
+
|
|
366
396
|
Do not prompt when `OAT_NON_INTERACTIVE=1` or when no user-response channel
|
|
367
397
|
exists. In that case, leave the value unresolved. `oat-project-implement`
|
|
368
|
-
must block before work starts if it still cannot resolve a
|
|
398
|
+
must block before work starts if it still cannot resolve a policy.
|
|
369
399
|
|
|
370
|
-
Do not treat provider default effort as the OAT dispatch
|
|
371
|
-
|
|
400
|
+
Do not treat provider default effort as the OAT dispatch policy. Provider
|
|
401
|
+
defaults apply only for explicit inherit/default behavior or base/unpinned
|
|
402
|
+
fallback paths.
|
|
372
403
|
|
|
373
404
|
### Step 12: Review Plan with User
|
|
374
405
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-plan-writing
|
|
3
|
-
version: 1.2.
|
|
3
|
+
version: 1.2.6
|
|
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
|
|
@@ -91,10 +91,10 @@ Runtime routing note:
|
|
|
91
91
|
|
|
92
92
|
- Keep `oat_ready_for` canonical as `oat-project-implement`.
|
|
93
93
|
- Declare parallelism via `oat_plan_parallel_groups` in plan.md frontmatter (empty = sequential; nested arrays of phase IDs = parallel groups). `oat-project-implement` reads this field to choose sequential vs worktree-isolated parallel execution.
|
|
94
|
-
- Dispatch
|
|
95
|
-
them from `workflow.
|
|
96
|
-
|
|
97
|
-
`
|
|
94
|
+
- Dispatch policies are not stored in `plan.md`. Plan-producing skills resolve
|
|
95
|
+
them from `workflow.dispatchPolicy.*`, compatibility
|
|
96
|
+
`workflow.dispatchCeiling.*` keys, or project `state.md` frontmatter, then
|
|
97
|
+
persist interactive answers back to `state.md` as `oat_dispatch_policy`.
|
|
98
98
|
|
|
99
99
|
Additional frontmatter keys (`oat_phase`, `oat_phase_status`, `oat_blockers`, `oat_last_updated`, `oat_generated`, `oat_template`, `oat_import_reference`, `oat_import_source_path`, `oat_import_provider`) are set by calling skills as needed.
|
|
100
100
|
|
|
@@ -109,16 +109,16 @@ If a user-authored override is needed, use this table shape:
|
|
|
109
109
|
```markdown
|
|
110
110
|
## Dispatch Profile
|
|
111
111
|
|
|
112
|
-
| Phase | Claude model
|
|
113
|
-
| ----- |
|
|
114
|
-
| pNN | haiku\|sonnet\|opus\|auto | low\|medium\|high\|xhigh\|auto | why this constraint is needed |
|
|
112
|
+
| Phase | Claude model | Codex effort | Rationale |
|
|
113
|
+
| ----- | -------------------------------- | ------------------------------ | ----------------------------- |
|
|
114
|
+
| pNN | haiku\|sonnet\|opus\|fable\|auto | low\|medium\|high\|xhigh\|auto | why this constraint is needed |
|
|
115
115
|
```
|
|
116
116
|
|
|
117
117
|
Validation rules for explicit rows:
|
|
118
118
|
|
|
119
119
|
- `Phase` must match a real `pNN` phase in the plan.
|
|
120
|
-
- `Claude model` must be `haiku`, `sonnet`, `opus`, `auto`, or blank.
|
|
121
|
-
- `Codex effort` must be `low`, `medium`, `high`, `xhigh`, `auto`, or blank. In Codex, explicit effort values are preferred controls
|
|
120
|
+
- `Claude model` must be `haiku`, `sonnet`, `opus`, `fable`, `auto`, or blank.
|
|
121
|
+
- `Codex effort` must be `low`, `medium`, `high`, `xhigh`, `auto`, or blank. In Codex, explicit effort values are preferred controls. `oat-project-implement` caps them when a capped managed policy exists, selects them directly under managed `Uncapped`, and maps selected efforts to pinned implementer variants when available. Provider default effort is informational only for explicit inherit/default behavior or base/unpinned fallback paths.
|
|
122
122
|
- Blank or `auto` means no explicit constraint for that provider.
|
|
123
123
|
- `Rationale` is recommended and should explain why runtime selection should not decide on its own.
|
|
124
124
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-quick-start
|
|
3
|
-
version: 2.1.
|
|
3
|
+
version: 2.1.9
|
|
4
4
|
description: Use when a task is small enough for quick mode or rapid iteration is preferred. Scaffolds a lightweight OAT project from discovery directly to a runnable plan, with optional brainstorming and lightweight design.
|
|
5
5
|
argument-hint: '<project-name> ["project description"]'
|
|
6
6
|
oat_gateable: true
|
|
@@ -467,62 +467,93 @@ Required parallelism pass before finalizing the plan:
|
|
|
467
467
|
- Quick mode is not "sequential by default." A quick-start plan is sequential only when the dependency and write-set analysis says it should be.
|
|
468
468
|
- When a task claims scoped verification, prefer the exact runner invocation that truly scopes to the intended file, test, or target instead of package-level shortcuts that may execute the full suite.
|
|
469
469
|
|
|
470
|
-
### Step 3.5: Resolve Dispatch
|
|
470
|
+
### Step 3.5: Resolve Dispatch Policy Before Implementation Readiness
|
|
471
471
|
|
|
472
472
|
Before moving the quick project to ready-for-implementation, resolve the
|
|
473
|
-
dispatch
|
|
473
|
+
dispatch policy.
|
|
474
474
|
|
|
475
475
|
Resolution order:
|
|
476
476
|
|
|
477
|
-
1. Config keys `workflow.
|
|
478
|
-
2.
|
|
479
|
-
3.
|
|
480
|
-
4.
|
|
477
|
+
1. Config keys `workflow.dispatchPolicy.mode` / `workflow.dispatchPolicy.policy` via the resolver CLI
|
|
478
|
+
2. Compatibility config keys `workflow.dispatchCeiling.providers.<provider>`
|
|
479
|
+
3. Project `state.md` frontmatter key `oat_dispatch_policy`
|
|
480
|
+
4. Legacy project `state.md` frontmatter key `oat_dispatch_ceiling`
|
|
481
|
+
5. Interactive quick-planning prompt (below)
|
|
482
|
+
6. Leave unresolved for implementation preflight when non-interactive
|
|
481
483
|
|
|
482
|
-
If no
|
|
483
|
-
prompt once before finalizing `plan.md`:
|
|
484
|
+
If no policy resolves and the session is interactive, present the dispatch
|
|
485
|
+
policy prompt once before finalizing `plan.md`:
|
|
484
486
|
|
|
485
487
|
```text
|
|
486
|
-
Set the dispatch
|
|
488
|
+
Set the dispatch policy — how OAT should choose subagent model/effort controls.
|
|
487
489
|
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
490
|
+
Managed capped policies:
|
|
491
|
+
1. Economy — Codex: medium · Claude: sonnet
|
|
492
|
+
2. Balanced — Codex: high · Claude: sonnet (recommended)
|
|
493
|
+
3. High — Codex: xhigh · Claude: opus
|
|
494
|
+
4. Frontier — Codex: xhigh · Claude: fable
|
|
493
495
|
|
|
494
|
-
|
|
495
|
-
|
|
496
|
+
Managed uncapped:
|
|
497
|
+
5. Uncapped — OAT selects the preferred implementer/fix target without a stored maximum cap.
|
|
498
|
+
|
|
499
|
+
Host defaults:
|
|
500
|
+
6. Inherit Host Defaults — OAT does not select model/effort controls.
|
|
501
|
+
|
|
502
|
+
OAT applies managed policies where the provider exposes a reliable mechanism
|
|
503
|
+
(Codex: pinned variants; Claude: Task model parameter). Other providers may
|
|
504
|
+
treat managed policies as advisory.
|
|
496
505
|
```
|
|
497
506
|
|
|
498
|
-
**
|
|
499
|
-
|
|
500
|
-
Codex: high · Claude:
|
|
507
|
+
**Managed capped policy selection (options 1-4)** persists `mode: managed`,
|
|
508
|
+
`policy`, and the compiled provider targets. On selection, print the exact
|
|
509
|
+
compiled result (e.g., "Dispatch policy set: balanced → Codex: high · Claude:
|
|
510
|
+
sonnet") before proceeding.
|
|
501
511
|
|
|
502
|
-
**
|
|
503
|
-
|
|
512
|
+
**Uncapped (option 5)** persists explicit managed uncapped state. It does not
|
|
513
|
+
write provider caps, and it must not be represented by leaving dispatch policy
|
|
514
|
+
state absent.
|
|
504
515
|
|
|
505
|
-
**
|
|
506
|
-
|
|
516
|
+
**Inherit Host Defaults (option 6)** persists explicit inherit/default state.
|
|
517
|
+
Use this only when the user wants OAT to leave implementation, fix, and review
|
|
518
|
+
model/effort controls to the executing host/provider.
|
|
507
519
|
|
|
508
520
|
Persist the answer in `"$PROJECT_PATH/state.md"` frontmatter using the
|
|
509
521
|
normalized shape:
|
|
510
522
|
|
|
511
523
|
```yaml
|
|
512
|
-
|
|
513
|
-
|
|
524
|
+
oat_dispatch_policy:
|
|
525
|
+
mode: managed
|
|
526
|
+
policy: balanced
|
|
514
527
|
providers:
|
|
515
528
|
codex: high
|
|
516
529
|
claude: sonnet
|
|
517
530
|
source: project-state
|
|
518
531
|
```
|
|
519
532
|
|
|
533
|
+
For `Uncapped`:
|
|
534
|
+
|
|
535
|
+
```yaml
|
|
536
|
+
oat_dispatch_policy:
|
|
537
|
+
mode: managed
|
|
538
|
+
policy: uncapped
|
|
539
|
+
source: project-state
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
For `Inherit Host Defaults`:
|
|
543
|
+
|
|
544
|
+
```yaml
|
|
545
|
+
oat_dispatch_policy:
|
|
546
|
+
mode: inherit
|
|
547
|
+
source: project-state
|
|
548
|
+
```
|
|
549
|
+
|
|
520
550
|
Do not prompt when `OAT_NON_INTERACTIVE=1` or when no user-response channel
|
|
521
551
|
exists. In that case, leave the value unresolved. `oat-project-implement`
|
|
522
|
-
must block before work starts if it still cannot resolve a
|
|
552
|
+
must block before work starts if it still cannot resolve a policy.
|
|
523
553
|
|
|
524
|
-
Do not treat provider default effort as the OAT dispatch
|
|
525
|
-
|
|
554
|
+
Do not treat provider default effort as the OAT dispatch policy. Provider
|
|
555
|
+
defaults apply only for explicit inherit/default behavior or base/unpinned
|
|
556
|
+
fallback paths.
|
|
526
557
|
|
|
527
558
|
### Step 3.6: Run Plan Artifact Review Loop
|
|
528
559
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-review-provide
|
|
3
|
-
version: 1.3.
|
|
3
|
+
version: 1.3.10
|
|
4
4
|
description: Use when the user explicitly asks to review an OAT project — e.g. "review project", "review the project", "run project review", or confirms a previously offered review. Do NOT auto-invoke on completed work alone. Resolves a project review scope and offers before running.
|
|
5
5
|
disable-model-invocation: false
|
|
6
6
|
user-invocable: true
|
|
@@ -25,11 +25,13 @@ Reviewers should distinguish implementation defects from artifact drift. If code
|
|
|
25
25
|
|
|
26
26
|
## Model Invocation Gate
|
|
27
27
|
|
|
28
|
-
This skill is model-invokable only for explicit review asks such as "review project" or "review the project", or when the user confirms a previously offered project-review step. Do NOT auto-invoke merely because a task, phase, or implementation appears complete.
|
|
28
|
+
This skill is model-invokable only for explicit review asks such as "review project" or "review the project", or when the user confirms a previously offered project-review step. A gate-originated request from `oat gate review` is also an explicit review ask. Do NOT auto-invoke merely because a task, phase, or implementation appears complete.
|
|
29
29
|
|
|
30
30
|
Before acting, verify that there is an active OAT project or a user-provided review target that can be resolved to project state. If neither exists, do not run this skill; offer `oat-project-open` / `oat-project-quick-start` for project workflow setup, or `oat-review-provide` for a non-project ad-hoc review.
|
|
31
31
|
|
|
32
|
-
When the
|
|
32
|
+
When the invocation is manual, summarize the inferred review type and scope, then ask before running the review.
|
|
33
|
+
|
|
34
|
+
**Gate-originated mode:** If the request context says the review is gate-originated, set `REVIEW_INVOCATION=gate`, honor any provided review type/scope arguments, and run without interactive confirmation prompts. The gate session is already the explicit authorization boundary. If subagent dispatch is unavailable, run the review inline in the current gate session instead of handing off to a fresh session.
|
|
33
35
|
|
|
34
36
|
## Mode Assertion
|
|
35
37
|
|
|
@@ -123,7 +125,7 @@ Tell user:
|
|
|
123
125
|
- `oat-project-quick-start` (new quick project)
|
|
124
126
|
- `oat-project-import-plan` (external plan import)
|
|
125
127
|
|
|
126
|
-
If validation passes, derive `{project-name}` as basename of `PROJECT_PATH`. Summarize the resolved project/review target
|
|
128
|
+
If validation passes, derive `{project-name}` as basename of `PROJECT_PATH`. Summarize the resolved project/review target. For manual invocation, ask before continuing to Step 1. For `REVIEW_INVOCATION=gate`, continue without asking.
|
|
127
129
|
|
|
128
130
|
### Step 1: Parse Arguments or Ask
|
|
129
131
|
|
|
@@ -424,6 +426,8 @@ Files changed: {FILE_COUNT}
|
|
|
424
426
|
Proceed with review?
|
|
425
427
|
```
|
|
426
428
|
|
|
429
|
+
If `REVIEW_INVOCATION=gate`, print the same scope summary but do not ask `Proceed with review?`; continue directly.
|
|
430
|
+
|
|
427
431
|
### Step 4.1: Dispatch Profile Override Advisory (Artifact Plan Only)
|
|
428
432
|
|
|
429
433
|
When reviewing `artifact plan`, apply this Dispatch Profile override advisory:
|
|
@@ -536,6 +540,7 @@ Detection logic:
|
|
|
536
540
|
- If the runtime can dispatch reviewer work (`subagent_type` in Claude Code, Cursor invocation via `/name` or natural mention, or Codex multi-agent spawn/auto-spawn) → **Tier 1**.
|
|
537
541
|
- If the Task tool is not available or subagent dispatch is not supported → **Tier 2**.
|
|
538
542
|
- If user explicitly requests inline or confirms they are already in a fresh session → **Tier 3**.
|
|
543
|
+
- If `REVIEW_INVOCATION=gate` and Tier 1 is unavailable, skip Tier 2 and use **Tier 3** inline. Do not return fresh-session instructions from a gate invocation.
|
|
539
544
|
|
|
540
545
|
**Step 6b: Tier 1 — Subagent (if available)**
|
|
541
546
|
|
|
@@ -566,6 +571,7 @@ If subagent not available:
|
|
|
566
571
|
- If user is already in a fresh session (confirmed), proceed to Tier 3.
|
|
567
572
|
- If Codex reported `authorization required` and the user approved delegation, do **not** use Tier 2. Return to Tier 1 and delegate to `oat-reviewer`.
|
|
568
573
|
- If user prefers fresh session: provide instructions and exit.
|
|
574
|
+
- If `REVIEW_INVOCATION=gate`: do not provide fresh-session instructions; run Tier 3 inline instead.
|
|
569
575
|
|
|
570
576
|
Instructions for fresh session:
|
|
571
577
|
|
|
@@ -599,13 +605,15 @@ Review storage contract:
|
|
|
599
605
|
|
|
600
606
|
**Naming convention:**
|
|
601
607
|
|
|
602
|
-
-
|
|
603
|
-
|
|
604
|
-
-
|
|
605
|
-
-
|
|
606
|
-
-
|
|
608
|
+
Use a seconds-precision **UTC** timestamp token (`YYYY-MM-DDTHHMMSSZ`, from `date -u +%Y-%m-%dT%H%M%SZ` — the `-u` and the trailing `Z` are mandatory), not a date-only or local-time stamp, so that same-scope re-reviews and re-gates within one day never collide and `oat review latest` orders them by recency:
|
|
609
|
+
|
|
610
|
+
- Phase review: `{PROJECT_PATH}/reviews/pNN-review-YYYY-MM-DDTHHMMSSZ.md`
|
|
611
|
+
- Task review: `{PROJECT_PATH}/reviews/pNN-tNN-review-YYYY-MM-DDTHHMMSSZ.md`
|
|
612
|
+
- Final review: `{PROJECT_PATH}/reviews/final-review-YYYY-MM-DDTHHMMSSZ.md`
|
|
613
|
+
- Range review: `{PROJECT_PATH}/reviews/range-review-YYYY-MM-DDTHHMMSSZ.md`
|
|
614
|
+
- Artifact review: `{PROJECT_PATH}/reviews/artifact-{artifact}-review-YYYY-MM-DDTHHMMSSZ.md`
|
|
607
615
|
|
|
608
|
-
|
|
616
|
+
Set `oat_generated_at` in the artifact frontmatter to the matching full timestamp (`YYYY-MM-DDTHH:MM:SSZ`). Same-second collisions are effectively impossible for sequential runs; if one occurs, append `-v2`, `-v3`, etc.
|
|
609
617
|
|
|
610
618
|
**Important:** `PROJECT_PATH` here must be the resolved path from Step 1.5. If a worktree was detected, this path is relative to the worktree root, ensuring the artifact is written on the correct branch.
|
|
611
619
|
|
|
@@ -636,7 +644,7 @@ Shared ad-hoc companion reference (non-project mode):
|
|
|
636
644
|
```markdown
|
|
637
645
|
---
|
|
638
646
|
oat_generated: true
|
|
639
|
-
oat_generated_at: {
|
|
647
|
+
oat_generated_at: { full UTC timestamp, e.g. 2026-07-06T11:16:01Z }
|
|
640
648
|
oat_review_scope: { scope }
|
|
641
649
|
oat_review_type: { code|artifact }
|
|
642
650
|
oat_review_invocation: { manual|auto|gate }
|
|
@@ -655,9 +663,13 @@ oat_project: { PROJECT_PATH }
|
|
|
655
663
|
|
|
656
664
|
- `manual` (default): Review was manually triggered by the user. `oat-project-review-receive` uses standard disposition behavior (user prompts for triage, minors auto-deferred for non-final scopes).
|
|
657
665
|
- `auto`: Review was spawned by the auto-review checkpoint trigger in `oat-project-implement`. `oat-project-review-receive` uses relaxed disposition: minors are auto-converted to fix tasks (not deferred), no user prompts for disposition decisions.
|
|
658
|
-
- `gate`: Review was spawned by `oat gate review
|
|
666
|
+
- `gate`: Review was spawned by `oat gate review` for a workflow gate. Gate-originated reviews use normal stateful review-provide behavior: write the review artifact, update the `## Reviews` row, and commit review bookkeeping. The gate CLI maps the review artifact findings to exit status, and `oat-project-review-receive` dispositions gate reviews autonomously (no user prompts) — selecting convert-to-fix-tasks when the gate **blocked** at its threshold, or non-pausing judgment-sweep disposition (defer / small-fix-now / reject, with sub-threshold findings recorded durably) when the gate **passed**.
|
|
667
|
+
|
|
668
|
+
When `oat-project-implement` spawns this skill for auto-review at checkpoints, it passes context indicating auto invocation. Set `oat_review_invocation: auto` in the artifact frontmatter.
|
|
669
|
+
|
|
670
|
+
When `oat gate review` invokes this skill, it includes gate-originated context instructing the reviewer to write `oat_review_invocation: gate`. Honor that instruction in the artifact frontmatter.
|
|
659
671
|
|
|
660
|
-
|
|
672
|
+
For all other invocations (user-triggered, fresh session), use `manual`.
|
|
661
673
|
|
|
662
674
|
Gate parsing contract:
|
|
663
675
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-review-receive
|
|
3
|
-
version: 1.5.
|
|
3
|
+
version: 1.5.6
|
|
4
4
|
description: Use when the user explicitly asks to receive review findings for an OAT project — e.g. "receive review", "process review", "process the project review", or confirms a previously offered review-receive step. Do NOT auto-invoke merely because a review file exists. Resolves the latest review and offers before acting.
|
|
5
5
|
disable-model-invocation: false
|
|
6
6
|
user-invocable: true
|
|
@@ -102,7 +102,7 @@ fi
|
|
|
102
102
|
|
|
103
103
|
Selection rules:
|
|
104
104
|
|
|
105
|
-
- Use `oat review latest` as the first-choice resolver. It scans project reviews (`reviews/` and `reviews/archived/`) plus ad-hoc review locations and orders candidates by `oat_generated_at` frontmatter rather than filesystem mtime.
|
|
105
|
+
- Use `oat review latest` as the first-choice resolver. It scans project reviews (`reviews/` and `reviews/archived/`) plus ad-hoc review locations and orders candidates by `oat_generated_at` frontmatter rather than filesystem mtime. Review artifacts carry a seconds-precision `oat_generated_at` and a matching timestamped filename, so same-scope same-day re-gates order deterministically and the newest round wins — never assume the plain `<scope>-review-<date>.md` name is current.
|
|
106
106
|
- Read the JSON result:
|
|
107
107
|
- `path: null` means no review target was found.
|
|
108
108
|
- `kind: "project"` and `actionable: true` means this skill can process the target when the path is an active top-level project review.
|
|
@@ -267,15 +267,23 @@ Read `oat_review_type` and `oat_review_invocation` from review artifact frontmat
|
|
|
267
267
|
- Require explicit user confirmation before applying any artifact edits.
|
|
268
268
|
- Resolve findings directly in artifact files; do not convert findings into plan tasks.
|
|
269
269
|
- Do not defer findings by default. Only use `rejected_with_rationale` for invalid findings, or `needs_user_direction` when user input is required.
|
|
270
|
-
- If `oat_review_type == code` AND `oat_review_invocation == auto
|
|
271
|
-
- **Auto-disposition mode.** This review was spawned by the auto-review checkpoint trigger in `oat-project-implement`. Apply relaxed disposition defaults:
|
|
270
|
+
- If `oat_review_type == code` AND `oat_review_invocation == auto`, OR `oat_review_invocation == gate` from a **blocking** gate (the gate-originated context does not indicate a passing-gate sweep):
|
|
271
|
+
- **Auto-disposition mode.** This review was spawned by the auto-review checkpoint trigger in `oat-project-implement` or by a blocking `oat gate review`. Apply relaxed disposition defaults:
|
|
272
272
|
- Critical/Important/Medium: convert to fix tasks (same as manual mode)
|
|
273
|
-
- Minor: auto-convert to fix tasks unless clearly out of scope (e.g., cosmetic polish unrelated to changed code). Manual mode now also defaults minors to `convert` (see Step 9); auto mode keeps the same intent — fix everything while context is fresh — but without any user prompts.
|
|
274
|
-
- **No user prompts for disposition decisions.** The auto
|
|
273
|
+
- Minor: auto-convert to fix tasks unless clearly out of scope (e.g., cosmetic polish unrelated to changed code). Manual mode now also defaults minors to `convert` (see Step 9); auto/gate mode keeps the same intent — fix everything while context is fresh — but without any user prompts.
|
|
274
|
+
- **No user prompts for disposition decisions.** The auto/gate review path runs fully autonomously.
|
|
275
275
|
- Genuinely ambiguous findings (e.g., a medium the agent disagrees with) are deferred with a note explaining why, rather than pausing for interactive resolution.
|
|
276
276
|
- Follow the task-conversion flow in Steps 3-10 with these adjusted defaults.
|
|
277
|
-
- If `oat_review_type == code` AND `oat_review_invocation == gate
|
|
278
|
-
- **
|
|
277
|
+
- If `oat_review_type == code` AND `oat_review_invocation == gate` from a **passing** gate (the gate-originated context indicates a passing-gate judgment sweep):
|
|
278
|
+
- **Judgment-sweep mode.** The phase gate already passed at its `exit_nonzero_on` threshold, so the phase does not stop. Consume the artifact anyway, so its sub-threshold findings become durable, ordered dispositions in `implementation.md` instead of evaporating. Fully non-pausing; no user prompts.
|
|
279
|
+
- The gate verdict decided whether the phase stops; it did **not** decide whether Medium/Minor findings are ignored. There are, by definition, no unresolved Critical/Important findings in a passing gate (if there were, the gate would have blocked).
|
|
280
|
+
- Make a per-finding **judgment call** for each Medium/Minor — do not mechanically dump them all:
|
|
281
|
+
- **Defer to final** (default): record under "Deferred Findings" (Mediums under "Deferred Findings (Medium)" so Step 8.5 resurfacing picks them up) with concrete rationale.
|
|
282
|
+
- **Address now:** only for small, contained, low-risk fixes. Apply the fix, commit it with the phase bookkeeping, and record the disposition. Do **not** re-run the standard reviewer or re-gate the phase for address-now fixes.
|
|
283
|
+
- **Reject** as false-positive / out-of-scope, with concrete rationale.
|
|
284
|
+
- `address now` is an **exception, not the norm** — when in doubt, defer. Do not let a passing gate drift into behaving like a Medium-blocking gate by habit.
|
|
285
|
+
- **Escalation exception:** if an address-now fix reveals or creates a Critical/Important concern, stop treating it as a sweep item. Convert it to a fix task and return control to the blocking-gate path (`oat-project-implement` re-runs the standard reviewer and the gate for the phase).
|
|
286
|
+
- Do not add blocking fix tasks for deferred or rejected findings. After recording all dispositions, archive the artifact (Step 7.5) and commit review bookkeeping (Step 7.6) as usual.
|
|
279
287
|
- If `oat_review_type == code` (manual or `oat_review_invocation` absent):
|
|
280
288
|
- Follow the existing task-conversion flow in Steps 3-10 with standard disposition behavior.
|
|
281
289
|
|
|
@@ -483,13 +491,15 @@ If the project itself is still untracked because earlier lifecycle steps never c
|
|
|
483
491
|
|
|
484
492
|
**Bounded loop protection:**
|
|
485
493
|
|
|
486
|
-
Count how many review cycles have occurred for this scope:
|
|
494
|
+
Count how many review cycles have occurred for this scope. Exclude gate-originated artifacts (`oat_review_invocation: gate`): the cap measures failed fix cycles of the standard review loop, not artifact volume, and phase gate re-runs are governed by the phase review gate flow in `oat-project-implement`, not by this cap.
|
|
487
495
|
|
|
488
496
|
```bash
|
|
489
497
|
{
|
|
490
498
|
find "$PROJECT_PATH/reviews" -maxdepth 1 -type f -name "*$SCOPE_TOKEN*.md" 2>/dev/null
|
|
491
499
|
find "$PROJECT_PATH/reviews/archived" -maxdepth 1 -type f -name "*$SCOPE_TOKEN*.md" 2>/dev/null
|
|
492
|
-
} |
|
|
500
|
+
} | while IFS= read -r artifact; do
|
|
501
|
+
grep -q "oat_review_invocation: gate" "$artifact" || echo "$artifact"
|
|
502
|
+
done | wc -l
|
|
493
503
|
```
|
|
494
504
|
|
|
495
505
|
**If 3 or more cycles:**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-review-provide
|
|
3
|
-
version: 1.2.
|
|
3
|
+
version: 1.2.3
|
|
4
4
|
description: Use when you need an ad-hoc review outside an active OAT project lifecycle. Reviews code or artifacts without project phase state, unlike oat-project-review-provide.
|
|
5
5
|
argument-hint: '[unstaged|staged|base_branch=<branch>|base_sha=<sha>|<sha1>..<sha2>|--files <path1,path2,...>] [--output <path>] [--mode auto|local|tracked|inline]'
|
|
6
6
|
disable-model-invocation: true
|
|
@@ -151,18 +151,20 @@ If user asks for tracked `.oat/repo/reviews` and it is gitignored, warn and ask
|
|
|
151
151
|
|
|
152
152
|
Derive a **scope slug** from the resolved scope mode so that the filename indicates what was reviewed:
|
|
153
153
|
|
|
154
|
-
| Scope mode | Slug derivation | Example filename
|
|
155
|
-
| ---------------------- | ------------------------------------ |
|
|
156
|
-
| `base_branch=<branch>` | Current branch name | `ad-hoc-review-2026-02-
|
|
157
|
-
| `unstaged` | Literal `unstaged` | `ad-hoc-review-2026-02-
|
|
158
|
-
| `staged` | Literal `staged` | `ad-hoc-review-2026-02-
|
|
159
|
-
| `--files <paths>` | First 2–3 basenames, joined with `-` | `ad-hoc-review-2026-02-
|
|
160
|
-
| `base_sha=<sha>` | Short SHA (7 chars) | `ad-hoc-review-2026-02-
|
|
161
|
-
| `<sha1>..<sha2>` | Both short SHAs joined with `-` | `ad-hoc-review-2026-02-
|
|
154
|
+
| Scope mode | Slug derivation | Example filename |
|
|
155
|
+
| ---------------------- | ------------------------------------ | ----------------------------------------------------- |
|
|
156
|
+
| `base_branch=<branch>` | Current branch name | `ad-hoc-review-2026-02-16T140322Z-oat-repo.md` |
|
|
157
|
+
| `unstaged` | Literal `unstaged` | `ad-hoc-review-2026-02-16T140322Z-unstaged.md` |
|
|
158
|
+
| `staged` | Literal `staged` | `ad-hoc-review-2026-02-16T140322Z-staged.md` |
|
|
159
|
+
| `--files <paths>` | First 2–3 basenames, joined with `-` | `ad-hoc-review-2026-02-16T140322Z-auth-login.md` |
|
|
160
|
+
| `base_sha=<sha>` | Short SHA (7 chars) | `ad-hoc-review-2026-02-16T140322Z-abc1234.md` |
|
|
161
|
+
| `<sha1>..<sha2>` | Both short SHAs joined with `-` | `ad-hoc-review-2026-02-16T140322Z-abc1234-def5678.md` |
|
|
162
162
|
|
|
163
163
|
```bash
|
|
164
164
|
mkdir -p "$OUTPUT_DIR"
|
|
165
|
-
|
|
165
|
+
# Seconds-precision UTC token so same-scope same-day re-reviews never collide and
|
|
166
|
+
# order by recency in `oat review latest`. The trailing Z (UTC) is mandatory.
|
|
167
|
+
STAMP=$(date -u +%Y-%m-%dT%H%M%SZ)
|
|
166
168
|
|
|
167
169
|
# Derive SCOPE_SLUG based on scope mode (examples):
|
|
168
170
|
# base_branch → SCOPE_SLUG=$(git branch --show-current | tr '/' '-')
|
|
@@ -174,10 +176,10 @@ TODAY=$(date +%Y-%m-%d)
|
|
|
174
176
|
# Sanitize: lowercase, replace non-alphanumeric with '-', collapse runs, trim to 40 chars
|
|
175
177
|
SCOPE_SLUG=$(echo "$SCOPE_SLUG" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9-]/-/g; s/--*/-/g; s/^-//; s/-$//' | cut -c1-40)
|
|
176
178
|
|
|
177
|
-
OUT_FILE="$OUTPUT_DIR/ad-hoc-review-${
|
|
179
|
+
OUT_FILE="$OUTPUT_DIR/ad-hoc-review-${STAMP}-${SCOPE_SLUG}.md"
|
|
178
180
|
```
|
|
179
181
|
|
|
180
|
-
|
|
182
|
+
Set `oat_generated_at` in the artifact frontmatter to the matching full UTC timestamp (`YYYY-MM-DDTHH:MM:SSZ`). Same-second collisions are effectively impossible for sequential runs; if one occurs, suffix with `-v2`, `-v3`, etc.
|
|
181
183
|
|
|
182
184
|
### Step 4: Run Review
|
|
183
185
|
|
|
@@ -5,7 +5,7 @@ Use this template for non-project commit-range reviews.
|
|
|
5
5
|
````markdown
|
|
6
6
|
---
|
|
7
7
|
oat_generated: true
|
|
8
|
-
oat_generated_at: YYYY-MM-
|
|
8
|
+
oat_generated_at: YYYY-MM-DDTHH:MM:SSZ
|
|
9
9
|
oat_review_type: code
|
|
10
10
|
oat_review_scope: { scope }
|
|
11
11
|
oat_review_scope_mode: { files|unstaged|staged|range }
|
package/assets/templates/plan.md
CHANGED
|
@@ -57,11 +57,11 @@ _Optional override surface. Use only for explicit user-authored constraints or p
|
|
|
57
57
|
|
|
58
58
|
Blank or `auto` means there is no explicit constraint for that provider. Do not generate rows by default; a missing phase row uses runtime selection.
|
|
59
59
|
|
|
60
|
-
| Phase | Claude model
|
|
61
|
-
| ----- |
|
|
62
|
-
| pNN | haiku\|sonnet\|opus\|auto | low\|medium\|high\|xhigh\|auto | why this constraint is needed |
|
|
60
|
+
| Phase | Claude model | Codex effort | Rationale |
|
|
61
|
+
| ----- | -------------------------------- | ------------------------------ | ----------------------------- |
|
|
62
|
+
| pNN | haiku\|sonnet\|opus\|fable\|auto | low\|medium\|high\|xhigh\|auto | why this constraint is needed |
|
|
63
63
|
|
|
64
|
-
Codex effort values are preferred controls. `oat-project-implement` caps them
|
|
64
|
+
Codex effort values are preferred controls. `oat-project-implement` caps them when a capped managed dispatch policy exists, selects them directly under managed `Uncapped`, and maps selected efforts to pinned implementer variants when available. Codex provider default effort is informational only for explicit inherit/default behavior or base/unpinned fallback paths.
|
|
65
65
|
|
|
66
66
|
---
|
|
67
67
|
|
|
@@ -14,10 +14,14 @@ oat_parallel_execution: false
|
|
|
14
14
|
oat_phase: { OAT_PHASE } # Current phase: discovery | spec | design | plan | implement | decomposition
|
|
15
15
|
oat_phase_status: in_progress # Status: in_progress | complete | pr_open
|
|
16
16
|
# oat_orchestration_retry_limit: 2 # optional; override fix-loop retry limit (range 0-5)
|
|
17
|
-
#
|
|
18
|
-
#
|
|
19
|
-
#
|
|
17
|
+
# oat_dispatch_policy: # optional project dispatch policy; managed keeps OAT selection active, inherit leaves controls to the host
|
|
18
|
+
# mode: managed # managed | inherit
|
|
19
|
+
# policy: balanced # economy | balanced | high | frontier | uncapped; omit when mode: inherit
|
|
20
|
+
# providers: # present for capped managed policies; omitted for uncapped/inherit
|
|
21
|
+
# codex: high # low|medium|high|xhigh
|
|
22
|
+
# claude: sonnet # haiku|sonnet|opus|fable
|
|
20
23
|
# source: project-state
|
|
24
|
+
# oat_dispatch_ceiling: # legacy compatibility alias for capped managed provider targets
|
|
21
25
|
oat_workflow_mode: { OAT_WORKFLOW_MODE } # spec-driven | quick | import
|
|
22
26
|
oat_workflow_origin: native # native | imported
|
|
23
27
|
oat_docs_updated: null # null | skipped | complete — documentation sync status
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAIhF,OAAO,EACL,KAAK,SAAS,EACd,KAAK,cAAc,EAGnB,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAIhF,OAAO,EACL,KAAK,SAAS,EACd,KAAK,cAAc,EAGnB,KAAK,UAAU,EAUhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgEpC,UAAU,yBAAyB;IACjC,mBAAmB,EAAE,CACnB,OAAO,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAC/C,cAAc,CAAC;IACpB,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,KACnB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/D,eAAe,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,sBAAsB,EAAE,CACtB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AAyzCD,wBAAgB,mBAAmB,CACjC,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,OAAO,CA0GT"}
|