@open-agent-toolkit/cli 0.1.46 → 0.1.48
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 +202 -191
- package/assets/agents/oat-reviewer.md +11 -1
- package/assets/config/dispatch-matrix-recommendation.json +120 -13
- package/assets/docs/cli-utilities/configuration.md +172 -113
- package/assets/docs/cli-utilities/workflow-gates.md +161 -27
- package/assets/docs/contributing/skills.md +14 -8
- package/assets/docs/provider-sync/providers.md +41 -7
- package/assets/docs/provider-sync/scope-and-surface.md +2 -2
- package/assets/docs/reference/cli-reference.md +3 -1
- package/assets/docs/reference/oat-directory-structure.md +27 -26
- package/assets/docs/workflows/projects/artifacts.md +31 -1
- package/assets/docs/workflows/projects/dispatch-ceiling.md +235 -187
- package/assets/docs/workflows/projects/implementation-execution.md +283 -260
- package/assets/docs/workflows/projects/lifecycle.md +26 -5
- package/assets/docs/workflows/projects/reviews.md +27 -2
- package/assets/migration/pjm-restructure.md +1 -1
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-project-implement/SKILL.md +247 -133
- package/assets/skills/oat-project-import-plan/SKILL.md +173 -16
- package/assets/skills/oat-project-next/SKILL.md +2 -2
- package/assets/skills/oat-project-plan/SKILL.md +122 -92
- package/assets/skills/oat-project-plan-writing/SKILL.md +246 -15
- package/assets/skills/oat-project-quick-start/SKILL.md +157 -107
- package/assets/skills/oat-project-review-provide/SKILL.md +94 -22
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +64 -39
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +21 -6
- package/dist/commands/gate/index.d.ts +7 -1
- package/dist/commands/gate/index.d.ts.map +1 -1
- package/dist/commands/gate/index.js +544 -67
- package/dist/commands/gate/review-verdict.d.ts +16 -0
- package/dist/commands/gate/review-verdict.d.ts.map +1 -1
- package/dist/commands/gate/review-verdict.js +72 -9
- package/dist/commands/project/dispatch-ceiling/index.d.ts.map +1 -1
- package/dist/commands/project/dispatch-ceiling/index.js +452 -16
- package/dist/commands/providers/codex/materialize.d.ts.map +1 -1
- package/dist/commands/providers/codex/materialize.js +6 -1
- package/dist/commands/shared/frontmatter.d.ts +4 -0
- package/dist/commands/shared/frontmatter.d.ts.map +1 -1
- package/dist/commands/shared/frontmatter.js +23 -0
- package/dist/commands/status/index.d.ts +1 -0
- package/dist/commands/status/index.d.ts.map +1 -1
- package/dist/commands/status/index.js +10 -4
- package/dist/commands/sync/index.d.ts.map +1 -1
- package/dist/commands/sync/index.js +10 -3
- package/dist/commands/sync/sync.types.d.ts +1 -0
- package/dist/commands/sync/sync.types.d.ts.map +1 -1
- package/dist/config/oat-config.d.ts +19 -2
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +139 -24
- package/dist/config/resolve.d.ts +8 -0
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +66 -2
- package/dist/engine/index.d.ts +1 -1
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +1 -1
- package/dist/engine/scanner.d.ts +1 -0
- package/dist/engine/scanner.d.ts.map +1 -1
- package/dist/engine/scanner.js +17 -1
- package/dist/fs/paths.d.ts +4 -0
- package/dist/fs/paths.d.ts.map +1 -1
- package/dist/fs/paths.js +18 -1
- package/dist/providers/ceiling/registry.d.ts +1 -0
- package/dist/providers/ceiling/registry.d.ts.map +1 -1
- package/dist/providers/ceiling/registry.js +12 -5
- package/dist/providers/codex/codec/catalog.d.ts +14 -0
- package/dist/providers/codex/codec/catalog.d.ts.map +1 -0
- package/dist/providers/codex/codec/catalog.js +21 -0
- package/dist/providers/codex/codec/materialize.d.ts.map +1 -1
- package/dist/providers/codex/codec/materialize.js +6 -5
- package/dist/providers/codex/codec/shared.d.ts +19 -0
- package/dist/providers/codex/codec/shared.d.ts.map +1 -1
- package/dist/providers/codex/codec/shared.js +98 -5
- package/dist/providers/codex/codec/sync-extension.d.ts.map +1 -1
- package/dist/providers/codex/codec/sync-extension.js +142 -32
- package/dist/providers/identity/stamp.d.ts.map +1 -1
- package/dist/providers/identity/stamp.js +4 -0
- package/dist/shared/types.d.ts +1 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js +4 -0
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-quick-start
|
|
3
|
-
version: 2.1.
|
|
3
|
+
version: 2.1.13
|
|
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
|
|
@@ -434,20 +434,54 @@ git add "$PROJECT_PATH/discovery.md" "$PROJECT_PATH/state.md"
|
|
|
434
434
|
git diff --cached --quiet || git commit -m "chore(oat): complete quick-start discovery for {project-name}"
|
|
435
435
|
```
|
|
436
436
|
|
|
437
|
+
### Step 2.9: Snapshot Explicit Phase-Review Setting Before Plan Rewrite
|
|
438
|
+
|
|
439
|
+
Before any template-based create, update, replacement, or normalization of
|
|
440
|
+
`"$PROJECT_PATH/plan.md"`, inspect the existing plan frontmatter and snapshot:
|
|
441
|
+
|
|
442
|
+
1. The key presence of `oat_phase_review_gate` as a separate boolean. Presence
|
|
443
|
+
is not truthiness: an explicit key is authoritative regardless of validity or
|
|
444
|
+
value.
|
|
445
|
+
2. When the key is present, the complete explicit value as the exact YAML
|
|
446
|
+
frontmatter entry, including its full nested mapping or scalar form. Preserve
|
|
447
|
+
enabled, disabled, selected-phase, `null`, and malformed-for-contract values
|
|
448
|
+
verbatim; do not normalize, validate, or reconstruct the value while taking
|
|
449
|
+
the snapshot.
|
|
450
|
+
|
|
451
|
+
This snapshot protects a resumed explicit value from the template rewrite. Its
|
|
452
|
+
explicit presence must not trigger a target probe or re-prompt, even when the
|
|
453
|
+
preserved value is `null` or malformed for the phase-review contract.
|
|
454
|
+
|
|
437
455
|
### Step 3: Generate Plan Directly
|
|
438
456
|
|
|
439
457
|
Create/update `"$PROJECT_PATH/plan.md"` from `.oat/templates/plan.md`.
|
|
440
458
|
|
|
459
|
+
Restore the exact snapshot into the resulting `plan.md` frontmatter as part of
|
|
460
|
+
the first resulting plan write, before any later frontmatter rewrite and before
|
|
461
|
+
Step 3.55 invokes the shared setup contract. Carry the snapshot losslessly
|
|
462
|
+
through every subsequent plan update. When the key was explicitly present, its
|
|
463
|
+
complete value must still be present exactly as captured; do not probe,
|
|
464
|
+
re-prompt, validate, or replace it here. When the key was absent, do not invent
|
|
465
|
+
one before the shared setup contract runs.
|
|
466
|
+
|
|
441
467
|
Required frontmatter updates:
|
|
442
468
|
|
|
443
|
-
- `oat_status:
|
|
444
|
-
- `oat_ready_for:
|
|
469
|
+
- `oat_status: in_progress`
|
|
470
|
+
- `oat_ready_for: null`
|
|
445
471
|
- `oat_phase: plan`
|
|
446
|
-
- `oat_phase_status:
|
|
472
|
+
- `oat_phase_status: in_progress`
|
|
447
473
|
- `oat_plan_source: quick`
|
|
448
474
|
- `oat_import_reference: null`
|
|
449
475
|
- `oat_import_source_path: null`
|
|
450
476
|
- `oat_import_provider: null`
|
|
477
|
+
- `oat_template: true`
|
|
478
|
+
|
|
479
|
+
These values are the interruption-safe pre-review state. Here,
|
|
480
|
+
`oat_template: true` marks the generated plan as still owned by the current
|
|
481
|
+
planning workflow even after its substantive content has been written. If the
|
|
482
|
+
skill pauses, is interrupted, or cannot resolve dispatch before Step 3.7,
|
|
483
|
+
persist and commit this state. `oat-project-next` must route it back to the
|
|
484
|
+
current planning workflow and cannot advance it to implementation.
|
|
451
485
|
|
|
452
486
|
Plan requirements — apply `oat-project-plan-writing` canonical format invariants:
|
|
453
487
|
|
|
@@ -470,124 +504,96 @@ Required parallelism pass before finalizing the plan:
|
|
|
470
504
|
### Step 3.5: Resolve Dispatch Policy Before Implementation Readiness
|
|
471
505
|
|
|
472
506
|
Before moving the quick project to ready-for-implementation, resolve the
|
|
473
|
-
dispatch
|
|
507
|
+
complete dispatch ladder and the project named ceiling.
|
|
474
508
|
|
|
475
|
-
|
|
509
|
+
Invoke the `Complete Dispatch Ladder Adoption Contract` from
|
|
510
|
+
`oat-project-plan-writing`. If the effective ladder is missing or incomplete,
|
|
511
|
+
show the full bundled recommendation and ask the user to select its owning
|
|
512
|
+
scope before running exactly one command:
|
|
476
513
|
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
514
|
+
```bash
|
|
515
|
+
oat config adopt dispatch-matrix --shared
|
|
516
|
+
oat config adopt dispatch-matrix --local
|
|
517
|
+
oat config adopt dispatch-matrix --user
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
The selected scope owns only the reusable ladders. A project-specific active
|
|
521
|
+
policy or ceiling must not be written to user `~/.oat/config.json`.
|
|
522
|
+
Adoption preserves explicit cells, so re-run the resolver and completeness
|
|
523
|
+
check. An incomplete or missing ladder after adoption blocks readiness; do not
|
|
524
|
+
overwrite explicit cells or silently infer a fallback. Non-interactive setup
|
|
525
|
+
also blocks on a missing or incomplete ladder.
|
|
526
|
+
|
|
527
|
+
Then resolve the named ceiling in this order:
|
|
483
528
|
|
|
484
|
-
|
|
485
|
-
|
|
529
|
+
1. Project `state.md` frontmatter `oat_dispatch_policy`
|
|
530
|
+
2. Legacy project `oat_dispatch_ceiling`
|
|
531
|
+
3. Config `workflow.dispatchPolicy.*` as a proposed starting value
|
|
532
|
+
4. Interactive quick-planning prompt
|
|
533
|
+
5. Unresolved non-interactive state blocks implementation readiness
|
|
486
534
|
|
|
487
|
-
Generate the
|
|
488
|
-
presenting it:
|
|
535
|
+
Generate the canonical prompt with:
|
|
489
536
|
|
|
490
537
|
```bash
|
|
491
538
|
oat project dispatch-ceiling choices --format markdown
|
|
492
539
|
```
|
|
493
540
|
|
|
494
|
-
Do not hand-type the dispatch policy menu
|
|
495
|
-
|
|
496
|
-
`
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
At minimum, preserve these semantics in any fallback text:
|
|
501
|
-
|
|
502
|
-
- `Uncapped`: OAT still manages dispatch selection, but stores no maximum cap.
|
|
503
|
-
It is not host/default behavior and must not be represented by absent policy
|
|
504
|
-
state.
|
|
505
|
-
- `Inherit Host Defaults`: OAT does not choose model or effort controls; the
|
|
506
|
-
executing host/provider owns implementation, fix, and review defaults.
|
|
507
|
-
- `Leave Unresolved`: planning/preflight deferral only. It records no runtime
|
|
508
|
-
policy. Implementation preflight must block until a policy resolves.
|
|
509
|
-
|
|
510
|
-
OAT applies managed policies where the provider exposes a reliable mechanism
|
|
511
|
-
(Codex: pinned variants; Claude: Task model parameter). Other providers may
|
|
512
|
-
treat managed policies as advisory until their provider column has a resolvable
|
|
513
|
-
matrix cell.
|
|
514
|
-
|
|
515
|
-
For multi-family providers such as Cursor, these options choose the abstract
|
|
516
|
-
policy rung; concrete model values live in the dispatch matrix under
|
|
517
|
-
`workflow.dispatchCeiling.providers.*`. If the user wants OAT's recommended
|
|
518
|
-
starting matrix, offer `oat config adopt dispatch-matrix` for the chosen config
|
|
519
|
-
layer before finalizing `plan.md`.
|
|
520
|
-
|
|
521
|
-
**Managed capped policy selection** persists `mode: managed`,
|
|
522
|
-
`policy`, and the compiled provider targets. On selection, print the exact
|
|
523
|
-
compiled result (e.g., "Dispatch policy set: balanced → Codex: high · Claude:
|
|
524
|
-
sonnet") before proceeding.
|
|
525
|
-
|
|
526
|
-
If the resolver reports that the selected policy has a missing matrix cell for
|
|
527
|
-
the active provider/tier, run prompt-and-persist once before final review:
|
|
528
|
-
|
|
529
|
-
1. Ask for the exact provider value for the missing cell, using the provider's
|
|
530
|
-
native vocabulary (for example, `composer-2.5`, `gpt-5.5-xhigh`, `opus`, or
|
|
531
|
-
`xhigh`), or an ordered route when escalation needs multiple targets.
|
|
532
|
-
2. Persist the answer to the selected config layer with
|
|
533
|
-
`workflow.dispatchCeiling.providers.<provider>.<tier>`. Use project
|
|
534
|
-
`state.md` only for sparse project-specific matrix overrides.
|
|
535
|
-
3. Re-run the resolver. Do not silently treat a missing cell as uncapped,
|
|
536
|
-
inherited, or provider-default behavior.
|
|
537
|
-
|
|
538
|
-
**Uncapped** persists explicit managed uncapped state. OAT still manages
|
|
539
|
-
dispatch selection. It does not write provider caps, and it must not be
|
|
540
|
-
represented by leaving dispatch policy state absent.
|
|
541
|
-
|
|
542
|
-
**Inherit Host Defaults** persists explicit inherit/default state. Use this only
|
|
543
|
-
when the user wants OAT to leave implementation, fix, and review model/effort
|
|
544
|
-
controls to the executing host/provider. OAT does not choose model or effort in
|
|
545
|
-
this mode.
|
|
546
|
-
|
|
547
|
-
**Leave Unresolved** leaves dispatch policy unset for implementation preflight.
|
|
548
|
-
Use this only when non-interactive planning cannot choose a policy yet.
|
|
549
|
-
Implementation preflight must block until a policy resolves.
|
|
550
|
-
|
|
551
|
-
Persist the answer in `"$PROJECT_PATH/state.md"` frontmatter using the
|
|
552
|
-
normalized shape:
|
|
541
|
+
Do not hand-type the dispatch policy menu.
|
|
542
|
+
`Uncapped`: OAT still manages dispatch selection. It has no named maximum.
|
|
543
|
+
`Inherit Host Defaults`: OAT does not choose model or effort.
|
|
544
|
+
`Leave Unresolved` is a planning deferral.
|
|
545
|
+
Implementation preflight must block until a runnable ceiling resolves.
|
|
553
546
|
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
claude: sonnet
|
|
561
|
-
source: project-state
|
|
562
|
-
```
|
|
563
|
-
|
|
564
|
-
For `Uncapped`:
|
|
547
|
+
The menu includes every named tier plus `Uncapped`, `Inherit Host
|
|
548
|
+
Defaults`, and `Leave Unresolved`. A named tier is a maximum, never an
|
|
549
|
+
enduring exact model-family or effort preference. A named `High` ceiling
|
|
550
|
+
keeps lower configured `Economy`, `Balanced`, and `High` candidates
|
|
551
|
+
available at or below that maximum. An optional phase Dispatch Profile may
|
|
552
|
+
narrow the maximum.
|
|
565
553
|
|
|
566
554
|
```yaml
|
|
567
555
|
oat_dispatch_policy:
|
|
568
556
|
mode: managed
|
|
569
|
-
policy:
|
|
557
|
+
policy: high
|
|
570
558
|
source: project-state
|
|
571
559
|
```
|
|
572
560
|
|
|
573
|
-
|
|
561
|
+
Persist the active project ceiling only in `"$PROJECT_PATH/state.md"`. Do not
|
|
562
|
+
copy compiled provider targets into this shape or user config. `Uncapped` and
|
|
563
|
+
`Inherit Host Defaults` remain explicit modes; `Leave Unresolved` and
|
|
564
|
+
non-interactive unresolved state are not implementation-ready.
|
|
574
565
|
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
566
|
+
### Step 3.55: Configure Optional Phase Review
|
|
567
|
+
|
|
568
|
+
After the generated quick plan has stable phase IDs and before Step 3.6 starts
|
|
569
|
+
the plan artifact review, invoke the `Shared Phase-Review Setup Contract` from
|
|
570
|
+
`oat-project-plan-writing`.
|
|
580
571
|
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
572
|
+
If `plan.md` already contains an explicit `oat_phase_review_gate`, preserve it
|
|
573
|
+
through the shared contract without probing, prompting, or mutation. Otherwise
|
|
574
|
+
let the contract probe qualifying targets and offer all phases, selected
|
|
575
|
+
phases, or disabled. If the probe fails, no target qualifies, or the user
|
|
576
|
+
declines, leave phase review disabled and continue with the contract's concise
|
|
577
|
+
status output.
|
|
584
578
|
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
579
|
+
This phase-review setup is independent from HiLL checkpoints. Do not read or
|
|
580
|
+
change HiLL fields here, and do not add a provider/model `--target` to any
|
|
581
|
+
lifecycle command.
|
|
588
582
|
|
|
589
583
|
### Step 3.6: Run Plan Artifact Review Loop
|
|
590
584
|
|
|
585
|
+
Before dispatching the artifact reviewer, invoke the `Managed Dispatch
|
|
586
|
+
Readiness and Review Contract` from `oat-project-plan-writing`:
|
|
587
|
+
|
|
588
|
+
```bash
|
|
589
|
+
oat project dispatch-ceiling resolve --provider "$ACTIVE_PROVIDER" --role reviewer --preflight --json
|
|
590
|
+
```
|
|
591
|
+
|
|
592
|
+
If managed resolution or the complete ladder is unresolved, return to Step
|
|
593
|
+
3.5, adopt the recommendation in the selected ownership scope, and re-run the
|
|
594
|
+
resolver. Do not hand the quick plan to implementation while either contract is
|
|
595
|
+
unresolved.
|
|
596
|
+
|
|
591
597
|
Invoke the shared `Auto Artifact-Review Loop` from `oat-project-plan-writing` with target `plan` before syncing project state or handing off to implementation.
|
|
592
598
|
|
|
593
599
|
Required payload:
|
|
@@ -602,11 +608,44 @@ Apply the shared loop exactly:
|
|
|
602
608
|
|
|
603
609
|
- Resolve `workflow.autoArtifactReview.plan`; only an explicit `false` skips the loop.
|
|
604
610
|
- Resolve `oat_orchestration_retry_limit` from project state, defaulting to `2`.
|
|
605
|
-
-
|
|
611
|
+
- For a concrete managed target, dispatch the exact registered reviewer role. If the host cannot select it, launch a fresh Codex child pinned to the resolved model and reasoning effort with the canonical reviewer instructions.
|
|
612
|
+
- For Claude or Cursor, pass the exact resolver-returned
|
|
613
|
+
`providers.<provider>.dispatchArgs.model` as the actual invocation's model
|
|
614
|
+
argument. Preserve the same complete payload on timeout and retry; Cursor
|
|
615
|
+
strings remain opaque.
|
|
616
|
+
- Run inline only with verified equivalent current-host model and effort controls, or for explicit inherit/default behavior or the managed-uncapped reviewer exception. If none applies, fail closed before artifact review.
|
|
617
|
+
- If the reviewer times out or does not conclude, poll and nudge once, then retry the same exact role or pinned child within the retry bound. If that target-preserving retry still fails, fail closed; never downgrade the review to inline.
|
|
606
618
|
- Apply Critical and Important artifact-local fixes when unambiguous; offer Medium and Minor fixes instead of silently applying them.
|
|
607
619
|
- Re-dispatch after rewrites until clean or the retry bound is exhausted.
|
|
608
620
|
- Update the `plan` artifact row in the `## Reviews` table to `passed` when clean. If residual findings remain, preserve the row and surface the residual findings before downstream handoff.
|
|
609
621
|
|
|
622
|
+
### Step 3.7: Record Review Disposition and Mark Plan Complete
|
|
623
|
+
|
|
624
|
+
Before changing readiness, durably record the review outcome in `plan.md`:
|
|
625
|
+
|
|
626
|
+
- When review ran, update the `plan` review row in the `## Reviews` section to
|
|
627
|
+
the outcome reached by Step 3.6. Use `passed` only for a clean result. If
|
|
628
|
+
residual findings remain, retain their actual non-passed status and add a
|
|
629
|
+
concise residual-finding disposition in the same section.
|
|
630
|
+
- When `workflow.autoArtifactReview.plan` is explicitly `false`, record the
|
|
631
|
+
explicit skip in the `## Reviews` section as
|
|
632
|
+
`Plan artifact review: skipped (workflow.autoArtifactReview.plan=false)`.
|
|
633
|
+
Do not claim that the plan passed review.
|
|
634
|
+
|
|
635
|
+
The review row or explicit skip must be written to `plan.md`; chat or status
|
|
636
|
+
output alone is not durable. Only after that write succeeds, atomically update
|
|
637
|
+
the plan frontmatter:
|
|
638
|
+
|
|
639
|
+
- `oat_status: complete`
|
|
640
|
+
- `oat_ready_for: oat-project-implement`
|
|
641
|
+
- `oat_phase_status: complete`
|
|
642
|
+
- `oat_template: false`
|
|
643
|
+
|
|
644
|
+
If dispatch remains unresolved, review execution fails closed, or the outcome
|
|
645
|
+
cannot be recorded, leave the Step 3 pre-review values unchanged and commit
|
|
646
|
+
them before stopping. Never expose a partially reviewed quick plan to
|
|
647
|
+
`oat-project-implement`.
|
|
648
|
+
|
|
610
649
|
### Step 4: Sync Project State
|
|
611
650
|
|
|
612
651
|
Update `"$PROJECT_PATH/state.md"`:
|
|
@@ -666,18 +705,29 @@ Before reporting this skill as complete, run the configured gate as the final st
|
|
|
666
705
|
|
|
667
706
|
If the command returns JSON `null`, no gate is configured; the skill is complete.
|
|
668
707
|
|
|
669
|
-
2.
|
|
708
|
+
2. Export the resolved project path into the command shell:
|
|
709
|
+
|
|
710
|
+
```bash
|
|
711
|
+
export PROJECT_PATH
|
|
712
|
+
```
|
|
713
|
+
|
|
714
|
+
If the resolved command invokes `oat gate review`, the configured review command must already include `--project "$PROJECT_PATH"` and must not include `--target <id>`. A valid reusable shape is `oat gate review --project "$PROJECT_PATH" ...`. If the declaration is missing, stop and migrate the stored gate command; do not inject or append arguments at execution time.
|
|
715
|
+
|
|
716
|
+
3. Execute the resolved command exactly as configured. Capture stdout, stderr, the exit code, and the structured JSON result. A zero exit code means the review passed its threshold, but it does not by itself authorize artifact receipt or complete the handoff.
|
|
670
717
|
|
|
671
|
-
|
|
672
|
-
-
|
|
673
|
-
-
|
|
718
|
+
4. Review-artifact handoff:
|
|
719
|
+
- Parse the structured gate result. An exit code or artifact path alone never authorizes `oat-project-review-receive`.
|
|
720
|
+
- Invoke receive only when all three conditions hold: `status` is `ok` or `blocked`, the envelope explicitly sets `receiveEligible: true`, and a non-null `handoff` confirms the artifact was corroborated.
|
|
721
|
+
- `receiveEligible: false` is a hard stop even when `artifactPath` is present. Never receive `targeting_correlation_failed`; correct the project/run routing and run a new gate.
|
|
722
|
+
- Keep `artifact_validation_failed` outside receive until the artifact is corrected and the gate successfully revalidates it. Treat `review_failed`, unknown statuses, null handoffs, and contradictory eligibility fields as operational failures.
|
|
723
|
+
- `blocked` exits nonzero but is receive-eligible; `ok` exits zero and still requires durable receive disposition. Route by structured status and eligibility, not by exit code.
|
|
674
724
|
|
|
675
|
-
|
|
725
|
+
5. If the command exits nonzero, use `description` to orient the next steps and handle `onFailure`:
|
|
676
726
|
- `block`: read gate feedback, remediate, and re-run the gate up to `maxAttempts` attempts (default `2`). If attempts are exhausted, escalate to the human with accumulated feedback and append that feedback to `implementation.md`. Treat a launch failure, missing CLI, or no eligible runtime as escalation-biased and do not spend it as a remediation attempt.
|
|
677
727
|
- `prompt`: surface the gate failure and ask the human how to proceed.
|
|
678
728
|
- `warn`: record the gate failure and continue.
|
|
679
729
|
|
|
680
|
-
|
|
730
|
+
6. Runtime selection note (V1): the step runs the gate `command` as-is and reads no OAT runtime env var. By default, `oat gate review` and `oat gate cross-provider-exec` resolve the current host from built-in `hostDetectionCommand`s and avoid the same runtime when no exact target is supplied. Reusable lifecycle skill-gate commands must not include `--target <id>` so independent review stays provider-neutral. Use explicit targets only for manual/debug commands or deliberate local/user-specific overrides; do not hardcode provider/model targets in bundled skill guidance or shared lifecycle gate examples.
|
|
681
731
|
|
|
682
732
|
### Step 7: Output Next Action
|
|
683
733
|
|
|
@@ -700,4 +750,4 @@ Report:
|
|
|
700
750
|
- ✅ `plan.md` records the plan artifact review row unless `workflow.autoArtifactReview.plan` was explicitly disabled.
|
|
701
751
|
- ✅ `implementation.md` is initialized for resumable execution.
|
|
702
752
|
- ✅ Changed quick-start artifacts are committed before handoff or pause; `.oat/state.md` is refreshed locally when available.
|
|
703
|
-
- ✅ Configured gate has run, and
|
|
753
|
+
- ✅ Configured gate has run, and only a corroborated, receive-eligible artifact has been handed off to `oat-project-review-receive` before it is treated as consumed.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-review-provide
|
|
3
|
-
version: 1.3.
|
|
3
|
+
version: 1.3.12
|
|
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
|
|
@@ -31,7 +31,7 @@ Before acting, verify that there is an active OAT project or a user-provided rev
|
|
|
31
31
|
|
|
32
32
|
When the invocation is manual, summarize the inferred review type and scope, then ask before running the review.
|
|
33
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
|
|
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, but it does not waive dispatch controls. Resolve the reviewer target and use the exact registered role or explicitly pinned fresh child. Inline gate review is allowed only with verified equivalent current-host model and effort controls or a documented base-role exception; otherwise fail closed.
|
|
35
35
|
|
|
36
36
|
## Mode Assertion
|
|
37
37
|
|
|
@@ -428,23 +428,30 @@ Proceed with review?
|
|
|
428
428
|
|
|
429
429
|
If `REVIEW_INVOCATION=gate`, print the same scope summary but do not ask `Proceed with review?`; continue directly.
|
|
430
430
|
|
|
431
|
-
### Step 4.1: Dispatch Profile
|
|
431
|
+
### Step 4.1: Dispatch Profile Ceiling Advisory (Artifact Plan Only)
|
|
432
432
|
|
|
433
|
-
When reviewing `artifact plan`, apply this Dispatch Profile
|
|
433
|
+
When reviewing `artifact plan`, apply this Dispatch Profile named-ceiling
|
|
434
|
+
advisory:
|
|
434
435
|
|
|
435
436
|
- A missing `## Dispatch Profile` section is normal and must not be flagged.
|
|
436
437
|
- Important findings:
|
|
437
438
|
- invalid phase ID that does not match a real plan phase
|
|
438
|
-
- unknown
|
|
439
|
-
-
|
|
440
|
-
|
|
439
|
+
- unknown named ceiling or a phase ceiling above the project ceiling
|
|
440
|
+
- wording that pins an exact provider model, family, effort, or role instead
|
|
441
|
+
of a named maximum
|
|
442
|
+
- low named ceiling for multi-file integration, architecture, or review-heavy
|
|
443
|
+
work
|
|
444
|
+
- low named ceiling with missing or generic rationale
|
|
441
445
|
- Medium findings:
|
|
442
446
|
- malformed but recoverable Dispatch Profile table structure
|
|
443
|
-
- mid-tier
|
|
447
|
+
- mid-tier ceiling for architecture-heavy work without convincing rationale
|
|
444
448
|
- Minor findings:
|
|
445
449
|
- rationale is present but weakly tied to phase scope
|
|
446
450
|
|
|
447
|
-
Include this advisory in the Review Scope metadata for artifact plan reviews so
|
|
451
|
+
Include this advisory in the Review Scope metadata for artifact plan reviews so
|
|
452
|
+
the reviewer evaluates explicit ceiling rows without treating omitted rows as a
|
|
453
|
+
gap. A named ceiling is a maximum; lower configured candidates remain eligible
|
|
454
|
+
for later task selection.
|
|
448
455
|
|
|
449
456
|
### Step 4.5: Gather Deferred Findings Ledger (Final Scope Only)
|
|
450
457
|
|
|
@@ -510,6 +517,56 @@ Build the "Review Scope" metadata for the reviewer:
|
|
|
510
517
|
|
|
511
518
|
### Step 6: Execute Review (3-Tier Capability Model)
|
|
512
519
|
|
|
520
|
+
**Step 6.0: Resolve the managed reviewer target**
|
|
521
|
+
|
|
522
|
+
Before capability-tier selection, resolve the same reviewer contract used by
|
|
523
|
+
plan artifact review and implementation phase/final review:
|
|
524
|
+
|
|
525
|
+
```bash
|
|
526
|
+
oat project dispatch-ceiling resolve --provider "$ACTIVE_PROVIDER" --role reviewer --preflight --json
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
The reviewer resolver selects the final candidate of the configured review
|
|
530
|
+
ceiling. Do not supply ephemeral implementer candidate requests for artifact,
|
|
531
|
+
phase, project, or final review. A lower candidate is allowed only when a
|
|
532
|
+
separate reviewed contract explicitly authorizes reviewer lowering and defines
|
|
533
|
+
its bounds; a Dispatch Profile row does not authorize it.
|
|
534
|
+
|
|
535
|
+
Resolve every concrete managed reviewer target before probing generic subagent
|
|
536
|
+
availability or selecting Tier 1/Tier 2/Tier 3. The concrete target takes
|
|
537
|
+
precedence over all availability, preference, timeout, fresh-session, and gate
|
|
538
|
+
fallbacks.
|
|
539
|
+
A concrete managed Codex target takes precedence over tier availability.
|
|
540
|
+
Build the actual provider invocation before reporting the target as enforced:
|
|
541
|
+
|
|
542
|
+
- Codex uses the exact registered reviewer role or variant from
|
|
543
|
+
`providers.codex.dispatchArgs.variant` when selectable. If the current host
|
|
544
|
+
cannot select it, launch a fresh Codex child with the resolver target's
|
|
545
|
+
explicit model, reasoning effort, canonical role instructions from
|
|
546
|
+
`.agents/agents/oat-reviewer.md`, and the same Review Scope payload.
|
|
547
|
+
If that fresh child is unavailable, use only a verified-equivalent inline
|
|
548
|
+
route or block the review.
|
|
549
|
+
- Claude requires a non-empty `providers.claude.dispatchArgs.model`; the actual
|
|
550
|
+
provider invocation must include that exact value as its `model` argument.
|
|
551
|
+
- Cursor requires a non-empty `providers.cursor.dispatchArgs.model`; the actual
|
|
552
|
+
provider invocation must include that exact opaque string as its `model`
|
|
553
|
+
argument without normalization.
|
|
554
|
+
|
|
555
|
+
Managed incomplete resolver results, including a missing or incomplete
|
|
556
|
+
candidate ladder, fail closed before review. Route interactive repair through
|
|
557
|
+
the planning workflow's `Complete Dispatch Ladder Adoption Contract`; do not
|
|
558
|
+
invent a reviewer target.
|
|
559
|
+
|
|
560
|
+
On timeout or retry, reuse the same exact role or complete invocation payload,
|
|
561
|
+
including the Claude or Cursor model argument. If the host cannot apply a
|
|
562
|
+
required role or model argument, fail closed or block unless inline execution
|
|
563
|
+
has verified equivalent current-host controls.
|
|
564
|
+
Workflow correctness must not require provider restart or hot reload.
|
|
565
|
+
Never use a managed base role because a target is missing or unavailable; a
|
|
566
|
+
managed base role is forbidden except for
|
|
567
|
+
explicit inherit/default behavior or the documented managed-uncapped reviewer
|
|
568
|
+
fallback.
|
|
569
|
+
|
|
513
570
|
**Step 6a: Probe Subagent Availability**
|
|
514
571
|
|
|
515
572
|
Before selecting a tier, announce the probe and its result so the user can see what's happening:
|
|
@@ -526,8 +583,7 @@ Detection logic:
|
|
|
526
583
|
- If the host is Cursor, invoke `oat-reviewer` using Cursor-native explicit invocation (`/oat-reviewer`) or natural mention, and resolve from `.cursor/agents/oat-reviewer.md` (or `.claude/agents/oat-reviewer.md` compatibility path).
|
|
527
584
|
- If the host is Codex multi-agent, verify Codex requirements first:
|
|
528
585
|
- `[features] multi_agent = true` is enabled in active Codex config.
|
|
529
|
-
-
|
|
530
|
-
- Codex may also auto-select and spawn agents without explicit role pinning.
|
|
586
|
+
- For a concrete managed target, `agent_type` must be the exact custom role declared under `[agents.<name>]`; built-in roles and auto-selection are not equivalent fallbacks.
|
|
531
587
|
- If the current Codex host requires explicit user authorization before calling `spawn_agent`, do not mark `oat-reviewer` as unresolved. Announce `authorization required` and ask one concise confirmation question before selecting Tier 2 or Tier 3:
|
|
532
588
|
|
|
533
589
|
```
|
|
@@ -535,12 +591,12 @@ Detection logic:
|
|
|
535
591
|
```
|
|
536
592
|
|
|
537
593
|
- If the user authorizes delegation and Codex role prerequisites are satisfied, use **Tier 1**.
|
|
538
|
-
- If the user declines delegation, continue
|
|
594
|
+
- If the user declines delegation, continue only through a target-preserving pinned-child or guarded inline route. Otherwise block.
|
|
539
595
|
|
|
540
596
|
- 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**.
|
|
541
|
-
- If the Task tool is not available or subagent dispatch is not supported
|
|
542
|
-
- If user explicitly requests inline or confirms they are already in a fresh session
|
|
543
|
-
-
|
|
597
|
+
- If the Task tool is not available or subagent dispatch is not supported, use **Tier 2** only after applying the target-first contract.
|
|
598
|
+
- If the user explicitly requests inline or confirms they are already in a fresh session, use **Tier 3** only when the guarded inline route is valid.
|
|
599
|
+
- Gate-originated review skips fresh-session handoff instructions and immediately uses the first target-preserving route available from Step 6.0. If none exists, fail closed.
|
|
544
600
|
|
|
545
601
|
**Step 6b: Tier 1 — Subagent (if available)**
|
|
546
602
|
|
|
@@ -549,9 +605,9 @@ First, pre-compute the review artifact path using Step 7 naming conventions so i
|
|
|
549
605
|
Then spawn the reviewer:
|
|
550
606
|
|
|
551
607
|
- Use provider-appropriate dispatch:
|
|
552
|
-
- Claude Code: Task tool with `subagent_type: "oat-reviewer"` (resolves from `.claude/agents/oat-reviewer.md`).
|
|
553
|
-
- Cursor: explicit invocation `/oat-reviewer` (or natural mention) with agent resolved from `.cursor/agents/oat-reviewer.md` or `.claude/agents/oat-reviewer.md` compatibility path.
|
|
554
|
-
- Codex style:
|
|
608
|
+
- Claude Code: Task tool with `subagent_type: "oat-reviewer"` (resolves from `.claude/agents/oat-reviewer.md`). For a concrete managed target, the payload must also contain `model: providers.claude.dispatchArgs.model` with the resolver-returned value.
|
|
609
|
+
- Cursor: explicit invocation `/oat-reviewer` (or natural mention) with agent resolved from `.cursor/agents/oat-reviewer.md` or `.claude/agents/oat-reviewer.md` compatibility path. For a concrete managed target, the invocation must also contain `model: providers.cursor.dispatchArgs.model` with the exact opaque resolver-returned string.
|
|
610
|
+
- Codex style: for a concrete managed target, spawn the exact resolver-returned `agent_type`; if it cannot be selected, use the explicitly pinned fresh-child route from Step 6.0. Generic auto-selection is permitted only for the documented base-role exceptions.
|
|
555
611
|
- Pass the Review Scope metadata block from Step 5 as the prompt
|
|
556
612
|
- Include the pre-computed artifact path for the subagent to write to
|
|
557
613
|
- **If a worktree was resolved in Step 1.5:** include the worktree path in the prompt so the subagent writes the artifact to the worktree directory, not the current session's working directory
|
|
@@ -566,12 +622,12 @@ After the subagent completes:
|
|
|
566
622
|
|
|
567
623
|
**Step 6c: Tier 2 — Fresh Session (recommended fallback)**
|
|
568
624
|
|
|
569
|
-
If subagent not available:
|
|
625
|
+
If target-preserving subagent dispatch is not available:
|
|
570
626
|
|
|
571
627
|
- If user is already in a fresh session (confirmed), proceed to Tier 3.
|
|
572
628
|
- If Codex reported `authorization required` and the user approved delegation, do **not** use Tier 2. Return to Tier 1 and delegate to `oat-reviewer`.
|
|
573
629
|
- If user prefers fresh session: provide instructions and exit.
|
|
574
|
-
-
|
|
630
|
+
- Gate-originated review does not return fresh-session instructions; it uses the guarded route selected in Step 6.0 or fails closed.
|
|
575
631
|
|
|
576
632
|
Instructions for fresh session:
|
|
577
633
|
|
|
@@ -585,7 +641,13 @@ To run review in a fresh session:
|
|
|
585
641
|
|
|
586
642
|
**Step 6d: Tier 3 — Inline Reset (fallback)**
|
|
587
643
|
|
|
588
|
-
If user
|
|
644
|
+
If the user requests inline review, first verify equivalent current-host model
|
|
645
|
+
and effort controls. Inline is also allowed for explicit inherit/default or the
|
|
646
|
+
documented managed-uncapped reviewer behavior. User preference alone does not
|
|
647
|
+
override a concrete managed target; if the guard fails, use the exact/pinned
|
|
648
|
+
route or block.
|
|
649
|
+
|
|
650
|
+
When inline is allowed:
|
|
589
651
|
|
|
590
652
|
- Run "reset protocol":
|
|
591
653
|
1. Re-read required artifacts for current workflow mode from scratch
|
|
@@ -649,6 +711,13 @@ oat_review_scope: { scope }
|
|
|
649
711
|
oat_review_type: { code|artifact }
|
|
650
712
|
oat_review_invocation: { manual|auto|gate }
|
|
651
713
|
oat_project: { PROJECT_PATH }
|
|
714
|
+
# Gate-only: copy the exact prompt-provided fields below.
|
|
715
|
+
oat_gate_run_id: { gate run id }
|
|
716
|
+
oat_gate_target: { configured target id }
|
|
717
|
+
oat_gate_runtime: { configured runtime }
|
|
718
|
+
oat_invocation_model: { configured model|provider-default|unknown }
|
|
719
|
+
oat_invocation_reasoning_effort: { configured effort|provider-default|unknown }
|
|
720
|
+
oat_invocation_source: { exec-target-config|unknown }
|
|
652
721
|
---
|
|
653
722
|
|
|
654
723
|
# {Code|Artifact} Review: {scope}
|
|
@@ -669,6 +738,8 @@ When `oat-project-implement` spawns this skill for auto-review at checkpoints, i
|
|
|
669
738
|
|
|
670
739
|
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.
|
|
671
740
|
|
|
741
|
+
The gate prompt also supplies exact values for `oat_gate_run_id`, `oat_gate_target`, `oat_gate_runtime`, `oat_invocation_model`, `oat_invocation_reasoning_effort`, and `oat_invocation_source`. Copy all six values verbatim for gate-originated artifacts. These fields record OAT's configured invocation; do not derive them from `baseCommand`, the target id, model self-identification, or surrounding dispatch prose. Optional observed/self-reported identity is separate and non-authoritative.
|
|
742
|
+
|
|
672
743
|
For all other invocations (user-triggered, fresh session), use `manual`.
|
|
673
744
|
|
|
674
745
|
Gate parsing contract:
|
|
@@ -784,7 +855,8 @@ For best review quality, run in a fresh session:
|
|
|
784
855
|
2. Run the oat-project-review-provide skill with: code {scope}
|
|
785
856
|
3. Return here and run the oat-project-review-receive skill
|
|
786
857
|
|
|
787
|
-
Or say "inline" to
|
|
858
|
+
Or say "inline" to request review in the current session; the managed-target
|
|
859
|
+
guard still applies.
|
|
788
860
|
|
|
789
861
|
```
|
|
790
862
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,iCAAiC,CAAC;AAQzC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,iCAAiC,CAAC;AAQzC,OAAO,EAML,KAAK,SAAS,EACd,KAAK,cAAc,EAGnB,KAAK,UAAU,EAgBhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAGL,KAAK,8BAA8B,EACnC,KAAK,yBAAyB,EAC/B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkFpC,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,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,kBAAkB,EAAE,CAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,yBAAyB,KAC/B,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AA45DD,wBAAgB,mBAAmB,CACjC,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,OAAO,CAsKT"}
|