@open-agent-toolkit/cli 0.3.18 → 0.3.20
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/README.md +2 -1
- package/assets/agents/oat-phase-implementer.md +104 -3
- package/assets/agents/oat-reviewer.md +20 -5
- package/assets/bundle-metadata.json +1 -1
- package/assets/docs/reference/cli-reference.md +15 -7
- package/assets/docs/reference/oat-directory-structure.md +2 -0
- package/assets/docs/reference/project-artifacts.md +72 -1
- package/assets/docs/reference/project-state-machine.md +55 -6
- package/assets/docs/skills/brainstorm.md +3 -1
- package/assets/docs/skills/index.md +13 -9
- package/assets/docs/workflows/advanced/autonomy.md +12 -2
- package/assets/docs/workflows/advanced/dispatch-ceiling.md +2 -2
- package/assets/docs/workflows/advanced/workflow-gates.md +25 -7
- package/assets/docs/workflows/approvals-and-automation.md +25 -9
- package/assets/docs/workflows/choose-workflow.md +24 -8
- package/assets/docs/workflows/ideas/index.md +1 -1
- package/assets/docs/workflows/ideas/lifecycle.md +3 -2
- package/assets/docs/workflows/projects/closeout/closeout-skills.md +83 -5
- package/assets/docs/workflows/projects/closeout/pr-flow.md +9 -1
- package/assets/docs/workflows/projects/execution/execution-skills.md +27 -2
- package/assets/docs/workflows/projects/execution/implementation-execution.md +15 -0
- package/assets/docs/workflows/projects/execution/picking-up-projects.md +20 -1
- package/assets/docs/workflows/projects/lifecycle.md +172 -9
- package/assets/docs/workflows/projects/planning/hill-checkpoints.md +18 -1
- package/assets/docs/workflows/projects/planning/planning-skills.md +13 -10
- package/assets/docs/workflows/projects/planning/starting-projects.md +138 -20
- package/assets/docs/workflows/projects/reviews/index.md +36 -2
- package/assets/docs/workflows/projects/reviews/review-flavors.md +7 -3
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-brainstorm/SKILL.md +58 -9
- package/assets/skills/oat-brainstorm/references/destinations.md +12 -4
- package/assets/skills/oat-docs/SKILL.md +13 -4
- package/assets/skills/oat-pjm-review-backlog/SKILL.md +2 -2
- package/assets/skills/oat-project-autonomous/SKILL.md +20 -8
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +156 -122
- package/assets/skills/oat-project-brief/SKILL.md +592 -0
- package/assets/skills/oat-project-brief/references/brief-contract.md +743 -0
- package/assets/skills/oat-project-brief/references/docs/autonomy-contract.md +412 -0
- package/assets/skills/oat-project-brief/references/docs/gate-approval-record.md +93 -0
- package/assets/skills/oat-project-capture/SKILL.md +2 -2
- package/assets/skills/oat-project-complete/SKILL.md +16 -2
- package/assets/skills/oat-project-discover/SKILL.md +4 -2
- package/assets/skills/oat-project-dispatch-subagents/SKILL.md +9 -1
- package/assets/skills/oat-project-document/SKILL.md +17 -1
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +156 -122
- package/assets/skills/oat-project-goal/SKILL.md +697 -0
- package/assets/skills/oat-project-goal/references/docs/autonomy-contract.md +412 -0
- package/assets/skills/oat-project-goal/references/docs/gate-approval-record.md +93 -0
- package/assets/skills/oat-project-implement/SKILL.md +1 -1
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +107 -0
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +156 -122
- package/assets/skills/oat-project-implement/references/docs/gate-approval-record.md +13 -0
- package/assets/skills/oat-project-implement/references/phase-execution.md +173 -1
- package/assets/skills/oat-project-implement/references/plan-and-resume.md +124 -3
- package/assets/skills/oat-project-import-plan/SKILL.md +5 -1
- package/assets/skills/oat-project-lite/SKILL.md +4 -1
- package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +156 -122
- package/assets/skills/oat-project-new/SKILL.md +5 -1
- package/assets/skills/oat-project-next/SKILL.md +71 -14
- package/assets/skills/oat-project-next/references/docs/gate-approval-record.md +13 -0
- package/assets/skills/oat-project-plan/SKILL.md +24 -3
- package/assets/skills/oat-project-plan-writing/SKILL.md +8 -4
- package/assets/skills/oat-project-pr-final/SKILL.md +65 -3
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +156 -122
- package/assets/skills/oat-project-pr-progress/SKILL.md +125 -4
- package/assets/skills/oat-project-progress/SKILL.md +63 -8
- package/assets/skills/oat-project-progress/references/docs/gate-approval-record.md +13 -0
- package/assets/skills/oat-project-promote-spec-driven/SKILL.md +2 -2
- package/assets/skills/oat-project-quick-start/SKILL.md +65 -1
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +156 -122
- package/assets/skills/oat-project-quick-start/references/docs/gate-approval-record.md +13 -0
- package/assets/skills/oat-project-reconcile/SKILL.md +94 -3
- package/assets/skills/oat-project-review-provide/SKILL.md +397 -12
- package/assets/skills/oat-project-review-receive/SKILL.md +155 -1
- package/assets/skills/oat-project-revise/SKILL.md +51 -4
- package/assets/skills/oat-project-summary/SKILL.md +150 -2
- package/assets/skills/oat-wave-execute/SKILL.md +3 -2
- package/assets/templates/implementation-brief.md +165 -0
- package/assets/templates/plan-brief.md +140 -0
- package/assets/templates/plan.md +1 -1
- package/assets/templates/state.md +8 -2
- package/dist/commands/project/closeout-check/closeout-invariant.d.ts +119 -3
- package/dist/commands/project/closeout-check/closeout-invariant.d.ts.map +1 -1
- package/dist/commands/project/closeout-check/closeout-invariant.js +454 -2
- package/dist/commands/project/closeout-check/index.d.ts +21 -3
- package/dist/commands/project/closeout-check/index.d.ts.map +1 -1
- package/dist/commands/project/closeout-check/index.js +190 -4
- package/dist/commands/project/complete-state/index.d.ts +2 -1
- package/dist/commands/project/complete-state/index.d.ts.map +1 -1
- package/dist/commands/project/complete-state/index.js +7 -1
- package/dist/commands/project/delivery/check.d.ts +66 -0
- package/dist/commands/project/delivery/check.d.ts.map +1 -0
- package/dist/commands/project/delivery/check.js +232 -0
- package/dist/commands/project/delivery/evidence.d.ts +171 -0
- package/dist/commands/project/delivery/evidence.d.ts.map +1 -0
- package/dist/commands/project/delivery/evidence.js +902 -0
- package/dist/commands/project/delivery/index.d.ts +7 -0
- package/dist/commands/project/delivery/index.d.ts.map +1 -0
- package/dist/commands/project/delivery/index.js +13 -0
- package/dist/commands/project/delivery/refresh.d.ts +110 -0
- package/dist/commands/project/delivery/refresh.d.ts.map +1 -0
- package/dist/commands/project/delivery/refresh.js +441 -0
- package/dist/commands/project/index.d.ts.map +1 -1
- package/dist/commands/project/index.js +2 -0
- package/dist/commands/project/log/append.d.ts +6 -0
- package/dist/commands/project/log/append.d.ts.map +1 -1
- package/dist/commands/project/log/append.js +6 -1
- package/dist/commands/project/new/scaffold.d.ts +1 -1
- package/dist/commands/project/new/scaffold.d.ts.map +1 -1
- package/dist/commands/project/new/scaffold.js +81 -7
- package/dist/commands/project/promote/promote.d.ts +46 -1
- package/dist/commands/project/promote/promote.d.ts.map +1 -1
- package/dist/commands/project/promote/promote.js +646 -5
- package/dist/commands/project/validate-plan/frontmatter.d.ts +12 -0
- package/dist/commands/project/validate-plan/frontmatter.d.ts.map +1 -0
- package/dist/commands/project/validate-plan/frontmatter.js +27 -0
- package/dist/commands/project/validate-plan/index.d.ts.map +1 -1
- package/dist/commands/project/validate-plan/index.js +62 -18
- package/dist/commands/project/validate-plan/profiles.d.ts +69 -0
- package/dist/commands/project/validate-plan/profiles.d.ts.map +1 -0
- package/dist/commands/project/validate-plan/profiles.js +420 -0
- package/dist/commands/project/validate-plan/validate-plan.d.ts +3 -19
- package/dist/commands/project/validate-plan/validate-plan.d.ts.map +1 -1
- package/dist/commands/project/validate-plan/validate-plan.js +5 -82
- package/dist/commands/shared/frontmatter.d.ts +1 -1
- package/dist/commands/shared/frontmatter.d.ts.map +1 -1
- package/dist/commands/shared/frontmatter.js +2 -0
- package/dist/commands/state/generate.d.ts.map +1 -1
- package/dist/commands/state/generate.js +82 -2
- package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -1
- package/dist/commands/tools/shared/pack-manifest.js +4 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -62,7 +62,8 @@ Use these commands when you want structured runtime/project state out of the CLI
|
|
|
62
62
|
- `oat config dump --json` - emit merged OAT config with per-key source attribution
|
|
63
63
|
- `oat project status --json` - emit the active project's full parsed control-plane state
|
|
64
64
|
- `oat project list --json` - emit summary state for tracked projects under the configured projects root
|
|
65
|
-
- `oat project closeout-check <project-path> --json` - report whether a configured, autonomous, or lite closeout's `oat_post_implement_sequence` snapshot permits terminal completion, and which step or
|
|
65
|
+
- `oat project closeout-check <project-path> --json` - report whether a configured, autonomous, or lite closeout's `oat_post_implement_sequence` snapshot permits terminal completion and, for a goal project, whether the declaration, outcome audit, and delivery coverage boundary holds, and which step, approval, or skill owns it next (read-only)
|
|
66
|
+
- `oat project delivery check --project <path> --subject <mNN|dNN> --json` - read-only goal delivery evidence report for a milestone or registered delivery (`status: ok`, or `undeliverable` with exit 1)
|
|
66
67
|
- `oat project complete-state <project-path>` - emit the canonical completed lifecycle shape into a tracked project's `state.md`; refuses the same incomplete closeout `closeout-check` reports
|
|
67
68
|
|
|
68
69
|
## Requirements
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-phase-implementer
|
|
3
|
-
version: 1.1.
|
|
3
|
+
version: 1.1.9
|
|
4
4
|
description: Implements one plan phase end-to-end, commits each task separately, self-checks between tasks, and handles bounded review fixes when resumed by oat-project-implement.
|
|
5
5
|
tools: Read, Write, Edit, Bash, Grep, Glob, Task
|
|
6
6
|
color: cyan
|
|
@@ -29,7 +29,7 @@ The root supplies:
|
|
|
29
29
|
- `mode`: `implement`, `fix`, or `recover`;
|
|
30
30
|
- `artifact_paths`: available plan, design, spec, discovery, implementation,
|
|
31
31
|
and imported-plan paths;
|
|
32
|
-
- `workflow_mode`: `spec-driven`, `quick`, `import`, or `
|
|
32
|
+
- `workflow_mode`: `spec-driven`, `quick`, `import`, `lite`, `brief`, or `goal`;
|
|
33
33
|
- `commit_convention`: exact task/fix commit convention;
|
|
34
34
|
- `phase_base_head`: root-recorded HEAD before phase dispatch;
|
|
35
35
|
- `worktree`: assigned phase worktree or orchestration checkout;
|
|
@@ -125,9 +125,22 @@ Read each required artifact once at phase start:
|
|
|
125
125
|
Criteria, and the Product Behavior and/or Technical Design selected by its
|
|
126
126
|
recorded `minimal`, `product`, `technical`, or `both` content shape.
|
|
127
127
|
Discovery, spec, and design are absent by design.
|
|
128
|
+
- `brief`: read the assigned `## Phase pNN:` block (`**Intent:**`,
|
|
129
|
+
`**Exit evidence:**`, `**Provisional:**`) and the brief's Goal, Outcomes,
|
|
130
|
+
Approach, Constraints and Out of Scope, Decisions, Known Unknowns, and
|
|
131
|
+
Delivery endpoint and authority sections in `plan.md`; the phase's section of
|
|
132
|
+
`implementation.md`; and sections 3, 6, 7, and 10 of
|
|
133
|
+
`oat-project-brief/references/brief-contract.md`. Discovery, spec, and design
|
|
134
|
+
are absent by design.
|
|
135
|
+
- `goal`: everything `brief` reads, plus the `## Milestones` table and
|
|
136
|
+
section 12 of the brief contract. The Phase Scope names the milestone,
|
|
137
|
+
recovery, or terminal scope the phase belongs to.
|
|
128
138
|
|
|
129
139
|
Extract all phase tasks, dependency order, file boundaries, verification
|
|
130
|
-
commands, commit messages, and phase-wide verification before editing.
|
|
140
|
+
commands, commit messages, and phase-wide verification before editing. In
|
|
141
|
+
`brief` and `goal` modes there are no planned tasks to extract: extract the phase's Intent,
|
|
142
|
+
its Exit evidence as the phase-wide verification, and the Phase Scope's commit
|
|
143
|
+
convention, and follow `## Brief Mode` below.
|
|
131
144
|
|
|
132
145
|
## Artifact Hygiene
|
|
133
146
|
|
|
@@ -348,6 +361,91 @@ disposition:
|
|
|
348
361
|
- Reason: {eligibility or stop-boundary evidence}
|
|
349
362
|
```
|
|
350
363
|
|
|
364
|
+
## Brief Mode
|
|
365
|
+
|
|
366
|
+
This section applies only when `workflow_mode` is `brief`. It replaces task
|
|
367
|
+
extraction and adapts the task loop; every other rule in this contract,
|
|
368
|
+
including recovery, still applies. The brief contract wins where this section
|
|
369
|
+
restates it.
|
|
370
|
+
|
|
371
|
+
**Requirement source.** The phase's Intent and Exit evidence plus the brief's
|
|
372
|
+
Outcomes, Constraints and Out of Scope, and Decisions. A provisional phase is
|
|
373
|
+
never executed: return `NEEDS_CONTEXT` naming it, because the root makes
|
|
374
|
+
phases concrete before dispatch.
|
|
375
|
+
|
|
376
|
+
**Execution records replace planned tasks.** Work in coherent units, each tied
|
|
377
|
+
to one implementation commit. For each unit:
|
|
378
|
+
|
|
379
|
+
1. Open `### Task pNN-tNN: <name>` under the phase's section of
|
|
380
|
+
`implementation.md` with `**Status:** in_progress`,
|
|
381
|
+
`**Executor:** phase-implementer:<original_request_id>`, intent, files,
|
|
382
|
+
proof command, and your handle. Use the next free ordinal in the phase
|
|
383
|
+
(`prevN-tNN` in a revision phase); never reuse an ID. Lookahead is allowed:
|
|
384
|
+
you may open several independent records before working them.
|
|
385
|
+
2. Implement the unit and run its proof command plus the Prevention checks.
|
|
386
|
+
3. Create its one implementation commit through `oat internal commit-paths`
|
|
387
|
+
with identity `${ORIGINAL_REQUEST_ID}:${RECORD_ID}`, a message carrying
|
|
388
|
+
`(pNN-tNN)`, and an owned-file list that excludes the journal.
|
|
389
|
+
4. Close the record with `**Status:** completed` and `**Commit:** <full SHA>`,
|
|
390
|
+
or with `failed`, `cancelled`, or `no-change` and no fabricated commit, and
|
|
391
|
+
commit only `implementation.md` as `chore(oat): record {pNN-tNN}` with
|
|
392
|
+
identity `${ORIGINAL_REQUEST_ID}:${RECORD_ID}:record`.
|
|
393
|
+
|
|
394
|
+
Step 2's per-task verification then expects exactly one implementation commit
|
|
395
|
+
inside the record's effective boundary followed by one journal-only record
|
|
396
|
+
commit; a record closed with a terminal status and no implementation commit
|
|
397
|
+
produces only the journal-only commit. A request for a maintained up-front task
|
|
398
|
+
plan is a promotion question for the root, never lookahead.
|
|
399
|
+
|
|
400
|
+
**Journal ownership.** You write only your phase's section of
|
|
401
|
+
`implementation.md`: its execution records and, in a sequential phase, its
|
|
402
|
+
`**Head:**` line and verification summary. Never write `**Base:**` (the root
|
|
403
|
+
records it before dispatch and passes it as `anchor_base`), never write the
|
|
404
|
+
phase's `**Status:** completed` (acceptance is root-owned), and never edit
|
|
405
|
+
`state.md`, `plan.md`, the `## Reviews` table, or another phase's section. In a
|
|
406
|
+
parallel-group worktree, write the records but no anchors; the root writes the
|
|
407
|
+
group's fork base and integration-merge heads at fan-in. Report your worktree
|
|
408
|
+
head: it is the review head of your phase's per-phase review, which runs on
|
|
409
|
+
`EXPECTED_HEAD..<that head>` before the merge.
|
|
410
|
+
|
|
411
|
+
**Phase head.** After the last record closes and phase-wide verification
|
|
412
|
+
passes, in a sequential phase write `**Head:** <full SHA of the last commit of
|
|
413
|
+
the phase>` plus a short verification summary under the phase heading and
|
|
414
|
+
commit only the journal as `chore(oat): record {pNN} head`. Report the head.
|
|
415
|
+
|
|
416
|
+
**Nested workers never commit.** An optional nested worker returns edits on
|
|
417
|
+
owned paths; you, the committing owner, create every commit.
|
|
418
|
+
|
|
419
|
+
**Fix mode.** Record each review fix as a record whose name starts with
|
|
420
|
+
`(review)` and that carries `**Source review:**` with the review filename and
|
|
421
|
+
finding IDs, through the same open, commit, close sequence. While no later
|
|
422
|
+
phase has a `**Base:**`, also advance `**Head:**` to the new last commit in the
|
|
423
|
+
closing journal commit; otherwise stop and report, because the correction
|
|
424
|
+
belongs to a revision phase the root appends.
|
|
425
|
+
|
|
426
|
+
**Report.** In the Task Outcomes table, list one row per execution record in
|
|
427
|
+
the Task column with its terminal status and commit, and add
|
|
428
|
+
`**Phase anchors:** {anchor_base}..{head}` below the header fields.
|
|
429
|
+
|
|
430
|
+
## Goal Mode
|
|
431
|
+
|
|
432
|
+
This section applies only when `workflow_mode` is `goal`. Every `## Brief Mode`
|
|
433
|
+
rule applies unchanged, and section 12 of the brief contract wins where this
|
|
434
|
+
section restates it.
|
|
435
|
+
|
|
436
|
+
- **Scope.** Execute only the dispatched phase. Its milestone, recovery, or
|
|
437
|
+
terminal scope is context, never permission to touch another milestone's
|
|
438
|
+
phases.
|
|
439
|
+
- **Root-owned goal records.** Never write `oat_milestone`,
|
|
440
|
+
`oat_milestone_status`, `oat_goal_status`, `oat_goal_outcome_audit`,
|
|
441
|
+
`oat_goal_recovery`, `oat_milestone_gates`, `oat_deliveries`, or the
|
|
442
|
+
`## Milestones` table. Milestone closeout, the exit-gate carrier, recovery
|
|
443
|
+
stages, delivery registration, and the declaration are root and skill
|
|
444
|
+
transitions, not phase work.
|
|
445
|
+
- **Recovery phases.** A recovery scope's phase (often a `p-revN` that
|
|
446
|
+
corrects an older milestone's phase) follows the brief late-fix and revision
|
|
447
|
+
rules; report its head like any sequential phase.
|
|
448
|
+
|
|
351
449
|
## Mode: Implement
|
|
352
450
|
|
|
353
451
|
### 1. Verify Phase Base
|
|
@@ -484,6 +582,9 @@ After all task commits:
|
|
|
484
582
|
- `spec-driven`: `plan.md`, `design.md`, and `spec.md`;
|
|
485
583
|
- `quick`: `plan.md` and `discovery.md`, plus design/spec when present; and
|
|
486
584
|
- `import`: `plan.md` and the imported plan, plus design/spec when present;
|
|
585
|
+
- `brief`: the phase's Intent and Exit evidence plus the brief's Outcomes,
|
|
586
|
+
Constraints and Out of Scope, and Decisions;
|
|
587
|
+
- `goal`: as `brief`, within the dispatched milestone's scope;
|
|
487
588
|
- confirm no task boundary or dependency was missed; and
|
|
488
589
|
- report Medium/Low concerns without launching a reviewer.
|
|
489
590
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-reviewer
|
|
3
|
-
version: 1.2.
|
|
3
|
+
version: 1.2.13
|
|
4
4
|
description: Unified reviewer for OAT projects - mode-aware verification of requirements/design alignment and code quality. Writes a review artifact to disk by default, or returns structured findings in-memory when dispatched in structured-output mode.
|
|
5
5
|
tools: Read, Bash, Grep, Glob, Write, Task
|
|
6
6
|
color: yellow
|
|
@@ -50,9 +50,10 @@ You will be given a "Review Scope" block including:
|
|
|
50
50
|
- **commits/range**: Git commits or SHA range for changed files. For code review, this is the authoritative review surface.
|
|
51
51
|
- **files_changed**: Optional orientation hint listing files believed to be modified in scope. If this disagrees with the commit range, trust the commit range.
|
|
52
52
|
- **analysis_artifact**: For `type: analysis`, path to the severity-rated analysis artifact to fact-check.
|
|
53
|
-
- **workflow_mode**: `spec-driven` | `quick` | `import` | `lite` (default to `spec-driven` if absent)
|
|
53
|
+
- **workflow_mode**: `spec-driven` | `quick` | `import` | `lite` | `brief` | `goal` (default to `spec-driven` if absent)
|
|
54
54
|
- **artifact_paths**: Paths to available artifacts (spec/design/plan/implementation/discovery/import reference)
|
|
55
|
-
- **tasks_in_scope**: Task IDs being reviewed (if task/phase scope)
|
|
55
|
+
- **tasks_in_scope**: Task IDs being reviewed (if task/phase scope). In `brief` mode these are the execution-record IDs under the phases in scope; they label commits and never narrow the range.
|
|
56
|
+
- **Brief anchor record**: For `brief` code reviews, the caller supplies `oat_review_requested_scope`, `oat_review_phase_ids` (ordered), `oat_review_base_sha`, `oat_review_scope_source` (`anchors` | `merge-base-range` | `explicit` | `merge-base` | `narrowed`), and, when they apply, `oat_review_fallback_reason`, `oat_review_integration_commits`, and `oat_review_narrowed_from`. Copy them verbatim into artifact frontmatter (Step 8). In `goal` mode the same record applies; for an integrated milestone or delivery review `oat_review_requested_scope` is the milestone or delivery ID (`mNN` or `mNN/dNN`) and `oat_review_phase_ids` is the explicit ordered phase set.
|
|
56
57
|
- **oat_output_mode**: Optional output-sink selector. Absent (or any value other than `structured`) means **artifact mode** — write the review artifact to disk per Step 8. `structured` means **structured-output mode** — return a `StructuredFindings` object in-memory and write NO artifact file (see **Structured-Output Mode**). This key parallels the existing `oat_review_invocation` dispatch-payload naming.
|
|
57
58
|
- **oat_review_invocation**: Optional provenance selector for artifact-mode reviews. Use `manual`, `auto`, or `gate`; default to `manual` when absent.
|
|
58
59
|
- **Code-review provenance**: For artifact-mode code reviews, resolve the authoritative range head with `git rev-parse <authoritative-range-head>^{commit}` and record the resulting full 40-character commit SHA as `oat_review_head_sha`. If the review is narrowed, also record the resolved range, prior artifact path, and prior reviewed head supplied by the caller.
|
|
@@ -129,6 +130,8 @@ Use workflow mode to determine required evidence:
|
|
|
129
130
|
- **quick**: `discovery.md` + `plan.md` are expected (`spec.md`/`design.md` optional if present).
|
|
130
131
|
- **import**: `plan.md` is expected (`references/imported-plan.md` preferred; `spec.md`/`design.md` optional).
|
|
131
132
|
- **lite**: `plan.md` and `implementation.md` are expected; discovery, spec, and design are absent by design.
|
|
133
|
+
- **brief**: `plan.md` (a Project Brief) and `implementation.md` (the per-phase journal) are expected; discovery, spec, and design are absent by design. `oat-project-brief/references/brief-contract.md` defines the brief sections, phase grammar, journal markers, and anchor rules, and the caller supplies it with the Review Scope.
|
|
134
|
+
- **goal**: as **brief**, plus the canonical `## Milestones` table in `plan.md` and the goal state in `state.md`; section 12 of the brief contract defines milestones, explicit review scopes, the delivery registry, and the terminal audit.
|
|
132
135
|
|
|
133
136
|
Do not mark missing optional artifacts as findings.
|
|
134
137
|
If required artifacts for the mode are unexpectedly missing, record a workflow contract gap.
|
|
@@ -152,6 +155,7 @@ Read available artifacts to understand what SHOULD have been built:
|
|
|
152
155
|
- `quick`: read `discovery.md` and `plan.md`; read `spec.md`/`design.md` only if they exist.
|
|
153
156
|
- `import`: read `plan.md` and `references/imported-plan.md` (if present); read `spec.md`/`design.md` only if they exist.
|
|
154
157
|
- `lite`: read `plan.md` and `implementation.md`; do not require discovery, spec, design, or an import reference.
|
|
158
|
+
- `brief`: read the brief in `plan.md`, the journal in `implementation.md`, and the brief contract when supplied; do not require discovery, spec, design, or an import reference.
|
|
155
159
|
3. For `type: analysis`, read `analysis_artifact` and then inspect only the cited evidence sources needed to verify its findings:
|
|
156
160
|
- `scope: docs`: consult the docs contract, docs navigation/index files, and cited docs source files relevant to the analysis.
|
|
157
161
|
- `scope: agent-instructions`: consult the repo/root instruction files, provider instruction files, and cited skill/agent instruction files relevant to the analysis.
|
|
@@ -161,6 +165,10 @@ Read available artifacts to understand what SHOULD have been built:
|
|
|
161
165
|
|
|
162
166
|
Only review files/changes within the provided scope.
|
|
163
167
|
|
|
168
|
+
In `brief` mode the authoritative code-review range comes from the recorded phase anchors: `Base..Head` for one phase, or the first selected base through the last selected phase's head for a range or `final`. Commit-message `(pNN-` matches only label which commits belong to which phase and never narrow the range. When `oat_review_scope_source` is `merge-base-range`, review the entire supplied range. If an anchor is missing, does not exist, or contradicts the ordering rules in brief contract section 10, record a workflow contract gap rather than narrowing silently. Treat the listed integration commits as inside the range.
|
|
169
|
+
|
|
170
|
+
In `goal` mode an integrated milestone or delivery review judges exactly the explicit ordered phase set in `oat_review_phase_ids`, never a first–last expansion. The Git range may be wider: commits of phases outside the set that the Review Scope lists under `Intervening changes:` are context, not scope, so do not record findings against them and do not treat them as covered. A parallel group member's pre-fan-in review is member evidence only; integrated delivery evidence comes from the integration heads.
|
|
171
|
+
|
|
164
172
|
Do NOT:
|
|
165
173
|
|
|
166
174
|
- Review unrelated work outside the scope
|
|
@@ -177,6 +185,8 @@ For each requirement in scope, use the best available requirement source by mode
|
|
|
177
185
|
- `quick`: `discovery.md` + `plan.md`
|
|
178
186
|
- `import`: normalized `plan.md` + `references/imported-plan.md` (if present)
|
|
179
187
|
- `lite`: the requirements contract in `plan.md`: Summary, Decisions, Assumptions, Out of Scope, and Validation Criteria. Also use Product Behavior and/or Technical Design when selected by the recorded `minimal`, `product`, `technical`, or `both` content shape.
|
|
188
|
+
- `brief`: each phase in scope's `**Intent:**` and `**Exit evidence:**` lines plus the brief's Outcomes, Constraints and Out of Scope, and Decisions. A `final` review also audits every numbered Outcome against its observed evidence in the journal; an Outcome with neither evidence nor a recorded deferral is a finding. Execution records are evidence of committed work, not requirements.
|
|
189
|
+
- `goal`: as `brief`, scoped to the milestone or delivery set under review. A plan (artifact) review of a goal brief or amendment also checks the `## Milestones` table against brief contract section 12.1: every executable phase in exactly one milestone, phase IDs never reused, and no frozen delivery phase moved or removed.
|
|
180
190
|
|
|
181
191
|
Then verify:
|
|
182
192
|
|
|
@@ -267,13 +277,14 @@ Treat the artifact as a product deliverable. Verify it is:
|
|
|
267
277
|
- `quick`: discovery (+ spec/design if present)
|
|
268
278
|
- `import`: imported-plan reference (+ discovery/spec/design if present)
|
|
269
279
|
- `lite`: plan.md Summary, Decisions, Assumptions, Out of Scope, and Validation Criteria. Also review the Product Behavior and/or Technical Design required by its recorded content shape; challenge `minimal` when an observable shape trigger applies.
|
|
280
|
+
- `brief`: the brief is self-contained; review it against the brief contract and the user's request, with no upstream discovery, spec, or design.
|
|
270
281
|
- For import-mode `plan` reviews, bias findings toward canonical-format conformance and completeness. Do not rewrite the imported author's intent merely to match OAT house style.
|
|
271
282
|
|
|
272
283
|
4. **Actionable**
|
|
273
284
|
- Clear next steps and readiness signals
|
|
274
285
|
- For spec: Verification entries are meaningful (`method: pointer`)
|
|
275
286
|
- For design: requirement-to-test mapping exists and includes concrete scenarios
|
|
276
|
-
- For plan: tasks have clear verification commands and commit messages
|
|
287
|
+
- For plan: tasks have clear verification commands and commit messages (for a brief, each phase has concrete Intent and Exit evidence instead; tasks are not required)
|
|
277
288
|
|
|
278
289
|
5. **Plan-specific checklist**
|
|
279
290
|
- Canonical-format conformance: required frontmatter and sections are present, the Reviews table exists, and artifact/code rows are shaped consistently.
|
|
@@ -283,6 +294,8 @@ Treat the artifact as a product deliverable. Verify it is:
|
|
|
283
294
|
- Task atomicity and verifiability: each task is independently committable, has bounded file scope, and has executable verification intent. Require a proportionate implementation and proof strategy only when the applicable workflow plan contract declares it; otherwise review the task's existing verification commands and evidence.
|
|
284
295
|
- Coverage of design/discovery: every in-scope design component or discovery decision is mapped to at least one task or explicitly deferred/out of scope.
|
|
285
296
|
- Parallelism-claim sanity: any parallel phase group or parallelism statement is consistent with declared file boundaries and dependency order.
|
|
297
|
+
- **Goal plan review** follows the brief plan review below, except that `## Milestones` holds the canonical table (brief contract section 12.1) instead of being empty, and an amendment review judges the named milestone's appended phases and any changed Outcomes, Decisions, or authority.
|
|
298
|
+
- **Brief plan review** replaces the task-oriented items above with the brief section list: Goal; numbered Outcomes, each naming its intended evidence; Approach (optional `### Design`); Constraints and Out of Scope; Decisions with rationale and rejected alternatives; Known Unknowns, each with the phase that settles it; Delivery endpoint and authority; an empty `## Milestones` section; `## Phase pNN:` blocks with non-empty Intent and Exit evidence, a `**Provisional:**` value of `yes` or `no`, and a concrete first phase; Parallelism; Reviews (preserved rows); Implementation Complete; References. Stable, never-reused phase IDs in document order replace stable task IDs. There is no task requirement; `### Task` headings in a brief are a finding, because execution records belong in the journal. Check that every Outcome is reachable through some phase's Exit evidence and that any declared parallel group passes the independence test in brief contract section 6.
|
|
286
299
|
|
|
287
300
|
6. **Necessary**
|
|
288
301
|
- Evaluate whether the proposed approach materially serves the requested
|
|
@@ -307,7 +320,7 @@ Treat the artifact as a product deliverable. Verify it is:
|
|
|
307
320
|
|
|
308
321
|
This step applies to **code reviews** only.
|
|
309
322
|
|
|
310
|
-
If `design.md` is absent in quick/import/lite mode, mark design alignment as "not applicable (design artifact not present for mode)" and continue.
|
|
323
|
+
If `design.md` is absent in quick/import/lite/brief mode, mark design alignment as "not applicable (design artifact not present for mode)" and continue. A brief's `### Design` subsection, when present, is the design source for this step.
|
|
311
324
|
|
|
312
325
|
For each design decision relevant to scope:
|
|
313
326
|
|
|
@@ -550,6 +563,8 @@ Gate parsing contract: artifact-mode reviews, including reviews spawned by `oat
|
|
|
550
563
|
|
|
551
564
|
For every artifact-mode code review, `oat_review_head_sha` is required and must be the full 40-character commit SHA at the head of the authoritative review range. Resolve it with `git rev-parse <authoritative-range-head>^{commit}`. An abbreviated SHA, symbolic ref, or range string is invalid. When the review narrowed, `oat_review_range`, `oat_prior_review_artifact`, and `oat_prior_review_head_sha` are also required; the prior head must likewise be a full 40-character SHA. These code-review fields are independent of the gate-only block and do not apply to artifact, analysis, or structured-output reviews.
|
|
552
565
|
|
|
566
|
+
For a `brief` code review, also copy the supplied anchor record fields (`oat_review_requested_scope`, `oat_review_phase_ids`, `oat_review_base_sha`, `oat_review_scope_source`, and any supplied `oat_review_fallback_reason`, `oat_review_integration_commits`, and `oat_review_narrowed_from`) verbatim into frontmatter beside `oat_review_head_sha`, which is the aggregate head of the anchored range. Never infer them from commit messages or the current HEAD.
|
|
567
|
+
|
|
553
568
|
For a narrowed review, do not restate requirements-coverage claims that this pass did not itself verify. Reference the prior artifact's coverage or mark inherited coverage rows as inherited so the union of passes remains auditable.
|
|
554
569
|
|
|
555
570
|
For gate-originated artifacts, all six gate-only fields are required when the prompt supplies gate context. Copy the values exactly. Do not parse the provider command, infer values from the target id, or replace configured values with observed/self-reported identity. Any optional self-report belongs in review prose and is non-authoritative; the gate validates the copied frontmatter against its immutable configured invocation record before applying severity thresholds.
|
|
@@ -100,12 +100,18 @@ Lifecycle](../workflows/backlog-and-planning/backlog-lifecycle.md).
|
|
|
100
100
|
|
|
101
101
|
Notable commands introduced in the current CLI surface:
|
|
102
102
|
|
|
103
|
-
- `oat project new <slug> [--mode spec-driven|quick|import|lite] --scope shared|local|synced [--force]` - create a
|
|
103
|
+
- `oat project new <slug> [--mode spec-driven|quick|import|lite|brief|goal] --scope shared|local|synced [--force]` - create a
|
|
104
104
|
project in an explicit scope. `--mode` selects the workflow mode and therefore
|
|
105
105
|
which artifacts are scaffolded; it defaults to `spec-driven`. Use `quick` for a
|
|
106
106
|
bounded feature with clear requirements, `import` to normalize an externally
|
|
107
|
-
authored plan,
|
|
108
|
-
`plan.md`, `state.md`, and `implementation.md
|
|
107
|
+
authored plan, `lite` for a single-sitting change that scaffolds only
|
|
108
|
+
`plan.md`, `state.md`, and `implementation.md`, and `brief` for one delivery
|
|
109
|
+
planned as a Project Brief, which scaffolds the `plan-brief` and
|
|
110
|
+
`implementation-brief` templates plus `references/research/`, and `goal` for
|
|
111
|
+
an outcome delivered in milestones, which scaffolds the same files with
|
|
112
|
+
`oat_plan_source: goal` and the canonical `| Milestone | Phases |` table
|
|
113
|
+
header. Start brief and goal projects with `oat-project-brief` or
|
|
114
|
+
`oat-project-goal`, which run this command themselves. See
|
|
109
115
|
[Lifecycle](../workflows/projects/lifecycle.md) for the per-lane flow. Without
|
|
110
116
|
`--scope`, creation uses
|
|
111
117
|
`projects.defaultScope`, which defaults to `synced`. Project slugs are
|
|
@@ -190,17 +196,19 @@ Notable commands introduced in the current CLI surface:
|
|
|
190
196
|
- `oat project status --field <path>` - print one arbitrary dot-path field from the same status payload, e.g. `project.workflowMode` or `project.timestamps.stateUpdated`. Missing/null fields print `null`; object and array fields print compact JSON.
|
|
191
197
|
- `oat project status --project-path <path>` - read from a repo-relative or absolute project path instead of `.oat/config.local.json`'s active project pointer. Combine it with `--field` or `--shell` when a skill has already resolved the target project path.
|
|
192
198
|
- `oat project status --shell NAME=path ...` - print shell-safe assignments for one or more fields from one status read, e.g. `WORKFLOW_MODE='quick'`. This is the preferred multi-field read API for skills. See [Writing Skills → Reading project state](../contributing/skills.md#reading-project-state) for examples and the `npx`-backed `oat` shim contract.
|
|
193
|
-
- `oat project promote <project-path> --to quick [--json]` - promote an authored lite project to quick mode.
|
|
199
|
+
- `oat project promote <project-path> --to quick [--json]` - promote an authored lite, brief, or settled goal project to quick mode. For a lite project, the command derives `discovery.md` from the lite plan's Summary, Decisions, Assumptions, Out of Scope, and Validation Criteria; carries Product Behavior into Success Criteria and Technical Design into a carried-forward discovery section when those adaptive sections are present; preserves the original as `references/lite-plan.md`; and scaffolds a fresh quick `plan.md`. For a brief project, it migrates each phase by state: accepted phases keep their completed execution records as quick tasks or get one synthesized `Accepted via phase evidence` task against the phase's `**Head:**`, active phases keep their completed records, and pending or provisional phases stay taskless and are listed in `oat_promotion_pending_phases` (quick plan readiness stays false until that list is empty); it renders the brief's sections into `discovery.md`, archives the original as `references/brief-archive.md`, and sets `oat_promoted_from` to the source mode (`brief`, or `goal` for a goal project). There is no reverse direction. A goal project promotes like a brief, but only at a settled delivery boundary: the active milestone is `delivered`, every `oat_deliveries` entry is `at_endpoint` or `superseded`, and no `oat_goal_recovery` is pending; otherwise it refuses with `goal-milestone-active`, `goal-recovery-pending`, or `goal-delivery-unsettled` (with a `deliveries` array naming the unsettled entries; an empty registry is also unsettled), and its archive appends the delivery history after the original brief. It refuses unsupported targets, projects that are neither lite, brief, nor goal, unreadable projects, an existing lite-plan reference, invalid authored sections, an existing brief archive (`brief-archive-exists`), an extracted journal phase (`extracted-phases`), a brief with no parseable phases (`invalid-brief-plan`), an accepted brief phase with no completed record and no `**Head:**` anchor (`missing-phase-head`), unresolved scope, unavailable templates, failed writes, or failed persistence. JSON output is `{ status: "promoted" | "refused", reason, files }`, plus an optional `phases` array naming the refused phases when `reason` is `missing-phase-head`; `reason` is the stable categorical contract and refused results exit non-zero.
|
|
194
200
|
- `oat template resolve <name> [--output <path>] [--json]` - resolve a template in repository (`<repo>/.oat/templates/`), user (`~/.oat/templates/`), then bundled order and report `name`, `found`, `tier` (`repository` | `user` | `bundle`), and `path`. `path` is set only for the repository and user tiers; it is `null` for the bundled tier, so callers never depend on a package-manager path. `<name>` accepts `plan` or `plan.md` and rejects path separators and `..`. `--output <path>` copies the resolved content to that file, replacing an existing file, and does not create missing parent directories; JSON output adds the absolute `output` path. A template missing from every tier exits 1 with `found: false`. Lifecycle skills use `--output` to copy their artifact templates, so a user-scope-only install works without a repository `.oat/templates/` directory.
|
|
195
201
|
- `oat review latest --json` - find the newest review artifact by `oat_generated_at`, scanning the active or specified project's `reviews/` and `reviews/archived/` directories plus ad-hoc review locations. Same-time candidates use target priority, then lifecycle recency (`final` > higher phase/task > lower phase/task). The JSON contract returns `path`, `scope`, `generatedAt`, `kind` (`project` or `adhoc`), `archived`, and `actionable`, with `null` values when no review exists. Archived project reviews remain discoverable as history but return `actionable: false`.
|
|
196
202
|
- `oat project list --json` - summary state for tracked projects under the configured projects root
|
|
197
|
-
- `oat project closeout-check <project-path> [--autonomous] [--json]` - read-only check of the closeout invariant: a closeout that must snapshot its post-implementation sequence cannot reach terminal completion until its `oat_post_implement_sequence` snapshot exists, every stored step is recorded complete, approval is recorded, and the snapshot reached `status: complete`. A snapshot is required when the effective layered `workflow.postImplementSequence` is configured, when the closeout is autonomous (`--autonomous`, or `OAT_AUTONOMOUS=1` in the environment even without the flag), or when `oat_workflow_mode` is `lite`. Once a snapshot exists its recorded state is authoritative and current configuration is not consulted. JSON output reports `status` (`complete`, `not_required`, or `incomplete`), the missing `invariant` (`snapshot_missing`, `snapshot_malformed`, `sequence_failed`, `pre_approval_step_pending`, `approval_pending`, `post_approval_step_pending`, or `sequence_not_complete`), `route` (`oat-project-implement` when incomplete), `nextOwner` (the next stored step and its skill, or the approval), and the evaluated `inputs`. An incomplete or malformed result exits 1.
|
|
198
|
-
- `oat project
|
|
203
|
+
- `oat project closeout-check <project-path> [--autonomous] [--json]` - read-only check of the closeout invariant: a closeout that must snapshot its post-implementation sequence cannot reach terminal completion until its `oat_post_implement_sequence` snapshot exists, every stored step is recorded complete, approval is recorded, and the snapshot reached `status: complete`. A snapshot is required when the effective layered `workflow.postImplementSequence` is configured, when the closeout is autonomous (`--autonomous`, or `OAT_AUTONOMOUS=1` in the environment even without the flag), or when `oat_workflow_mode` is `lite`. Once a snapshot exists its recorded state is authoritative and current configuration is not consulted. JSON output reports `status` (`complete`, `not_required`, or `incomplete`), the missing `invariant` (`snapshot_missing`, `snapshot_malformed`, `sequence_failed`, `pre_approval_step_pending`, `approval_pending`, `post_approval_step_pending`, or `sequence_not_complete`), `route` (`oat-project-implement` when incomplete), `nextOwner` (the next stored step and its skill, or the approval), and the evaluated `inputs`. An incomplete or malformed result exits 1. For a goal project (`oat_workflow_mode: goal`) the goal boundary is checked first and read-only: it requires `oat_goal_status: declared_met`, a valid exhaustive `oat_goal_outcome_audit`, resolved extractions, a successful `gh pr view` observation of every terminal delivery member, and delivery coverage of every accepted phase (each in a terminal delivery's effective scope with a passed, fresh integrated review and its persisted `exit_gate`); refusals report `goal_inputs_unreadable`, `goal_not_declared`, `goal_audit_invalid`, `goal_extraction_unresolved`, `goal_observation_failed`, or `goal_coverage_incomplete`, and `nextOwner` is `{ kind: "goal", skill, reasons }`, where each reason is `{ code, message, subject? }` and `skill` is the owner of the first reason: for example `not-declared` and `audit-invalid` route to `oat-project-goal`, `review-not-fresh` to `oat-project-review-provide`, `exit-carrier-not-fresh` to `oat-project-implement`, delivery and endpoint reasons such as `endpoint-unmet` to `oat-project-pr-progress`, and `phase-uncovered` to `oat-project-pr-final`. A goal snapshot may record its `pr` step as satisfied by delivery coverage (`satisfied_by: { pr: delivery-coverage }`) only once `pr` is in the completed prefix.
|
|
204
|
+
- `oat project delivery refresh --project <path> [--json]` - goal only. Observes every registered delivery member with `gh pr view <url> --json state,headRefOid,baseRefOid` and persists, in `state.md`, only the observations (`observed_head`, `observed_base`, member `status`), the delivery `status` (`open` or `at_endpoint`), the first observed `endpoint_attainment`, and derived staleness (`integrated_review.disposition: stale`, the milestone exit carrier's `freshness: stale` with `freshness_reason`). It never rewrites a reviewed revision, a member base, or the first endpoint attainment, never writes `oat_milestone_status` or `oat_goal_recovery`, and never manufactures a passed review or a fresh carrier. `oat-project-pr-progress` and `oat-project-goal` run it before registration and re-alignment.
|
|
205
|
+
- `oat project delivery check --project <path> --subject <mNN|dNN> [--json]` - goal only, read-only. Reports whether a milestone (before registration, against the branch head) or a registered delivery (against its observed member revisions) is deliverable: a passed integrated review that is still fresh under the bookkeeping-successor rule and an allowed, fresh milestone exit carrier (reported as `exit.source: milestone-carrier`; the closeout boundary judges each delivery's persisted `exit_gate` instead). Evidence reviewed at R covers a later head only when every intervening commit changes permitted bookkeeping in this project's tracking files (`state.md`, `plan.md`, `implementation.md`, `project-log.md`, `summary.md`) and review artifacts (including those of deliveries sharing the same member pull request); any change to `summary.md` is bookkeeping because it is derived memory, never the authority for the brief's content; code changes, edits to approved brief content, and a substantive change followed by its revert fail. JSON output carries `status` (`ok` or `undeliverable`), the subject, its ordered `scope`, `publishedHeads`, `review`, `exit`, and `deliverable`; an undeliverable subject exits 1 with the full report. A stale `review` or `exit` result carries a `reason` that starts with a code, such as `review-missing`, `review-scope-narrow`, `member-unobserved`, `base-changed`, `bound-revision-mismatch` (a bound revision differs from its member's set-once `reviewed_head`), `subject-changed`, `configuration-changed`, or a bookkeeping-successor failure: `missing-revision`, `missing-object`, `not-ancestor`, `inspection-failed`, `disallowed-path`, or `substantive-change`.
|
|
206
|
+
- `oat project complete-state <project-path> [--archived] [--autonomous]` - apply the canonical completed-state mutation to a project's `state.md`; used by `oat-project-complete` during lifecycle closeout. It first evaluates the same closeout invariant as `oat project closeout-check` and refuses, with the same message and without writing, a configured, autonomous, or lite closeout whose snapshot is absent, malformed, or incomplete. A project whose implementation finished before closeout snapshots existed recovers by running `oat-project-implement`, which persists the snapshot (`completion-and-closeout.md` Step 15) and completes its stored steps; there is no override flag. An unconfigured, interactive, non-lite closeout without a snapshot completes as before. A goal project is also refused, without writing, by the goal boundary that `closeout-check` describes.
|
|
199
207
|
- `oat project archive [project-path] [--project-recap-run <project-relative-path>] [--no-commit]` - archive a tracked project through the same local move, summary export, and configured S3 upload path used by completion. When omitted, the project path falls back to the active project. The optional recap path must identify a `project-recap` run inside the project's `explainers/` directory. Archive verifies the complete selected package and every immutable file byte, then atomically exports one self-contained `.oat/repo/reference/project-recaps/<YYYYMMDD-project-slug>.html` page before deleting the active project. The full original package remains in the archived project. JSON `projectRecapExport` identifies `runId`, `page.sourceRelativePath`, `page.originalSha256`, `page.exportedSha256`, `verifiedArtifactCount`, and the flat `exportRoot`. No tracked sidecar is created. Matching dated pages are adopted on retry; conflicting destinations, incomplete inventory coverage, stale bytes, path escapes, and recipe mismatches fail without removing the active project. Summary and PR links point to the tracked page. For synced projects, a configured S3 upload must succeed before terminal cleanup. Successful closeout makes `refs/oat/completed/<project>` authoritative, deletes the tracked JSON record and nested checkout, and leaves archive metadata sufficient for an idempotent recordless retry. With `--json`, the terminal receipt reports `completedRef`, `verifiedSourceSha`, whether `activeAliasDisposition` was `retained` or `removed`, whether `recordRetired` completed, and the parent `lifecycleCommit`. `--no-commit` is a manual/library-only option: for a synced project it still removes the checkout but deliberately leaves `lifecycleCommit` null. Never pass it through `oat-project-complete`, which requires that receipt.
|
|
200
208
|
- `oat repo archive sync [project-name]` - hydrate archived project snapshots from the configured repo-scoped S3 archive into `.oat/projects/archived/`. The old `oat project archive sync` path remains as a deprecated shim.
|
|
201
209
|
- `oat project dispatch record --event-file <json-file-or-dash>` - validate one generic dispatch record plus its namespaced OAT evidence event and print the result with `status: validated-only`. The command writes nothing; launches are recorded in the calling workflow's run record. Managed, effort-pinned Claude launches run it before launch: the input carries `claudeLaunch` with the real resolver result, generated definition, and proposed payload, plus `recordBase` and `event`. The command validates their agreement and derives the configured invocation fields; callers cannot copy those fields into `recordBase`. One validation run reports every violation across `claudeLaunch`, `recordBase`, and `event` in a single error message, one `stage path: message` line each; the `recordBase` cross-field rules run even when a required field is missing, checks that need a value that failed to parse are skipped and named on a final line, secret-shaped values and absolute paths are scrubbed from the message, and the exit code stays 1. A validated input per role is published at `.agents/skills/oat-dispatch-subagents/references/managed-claude-example.json`. The command validates evidence only — it never launches a provider. A `runtime-observation` event may carry either a finished `observation` or the provider `metadata` envelope (`provider`, `observedAt`, `entries`) to normalize, but not both. `entries` may be raw provider output: they are projected through the owning parser's allowlist, are never echoed in the output, and both forms have their `match` derived from the record's configured invocation rather than trusted from the caller, with the observation's `provider` bound to the record's. With `--json`, the result adds `runtimeIdentity` with separate `configured` and `observed` objects plus a `match` of `matching`, `mismatching`, `not-comparable`, or `null`; observation is corroboration only and never overrides configured invocation. Error output is redacted on a best-effort basis; absolute paths in identity fields are rejected outright, while some prose forms (colon-prefixed, URL routes) can survive. See [Evidence Layers](../workflows/advanced/evidence-layers.md).
|
|
202
210
|
- `oat project dispatch canonical-role --role <name> --request-id <id> --skill-dir <dir> [--json]` - resolve a canonical role through the loaded, user (`$HOME/.agents`), and project (`<repo>/.agents`) tiers and print the `canonical-role-resolution` event that `oat project dispatch record` accepts unchanged: redacted `canonicalPath` and `selectedPath` in the form `<loaded|user|project>/agents/<name>.md`, the role's `contentDigest`, and `candidateMisses`. `--skill-dir` is required because the loaded tier is derived from the loaded skill's directory; a missing or invalid directory exits 1 with a redacted error. An unknown role prints `missing` evidence with its recovery commands. Read-only; the dependency is the `workflows` pack.
|
|
203
|
-
- `oat project validate-plan --project-path <path>` - validates `oat_plan_parallel_groups` metadata in `plan.md`; exits non-zero on invalid. Lite plans must contain exactly one phase, declare no parallel groups, and give every Validation Criteria bullet either a backticked command or a `manual:` instruction. See [Implementation Execution](../workflows/projects/execution/implementation-execution.md#parallel-phase-groups).
|
|
211
|
+
- `oat project validate-plan --project-path <path>` - validates `oat_plan_parallel_groups` metadata in `plan.md`; exits non-zero on invalid. Lite plans must contain exactly one phase, declare no parallel groups, and give every Validation Criteria bullet either a backticked command or a `manual:` instruction. Brief plans (`oat_workflow_mode: brief`) are validated with the brief profile: phases need non-empty `**Intent:**` and `**Exit evidence:**`, a `**Provisional:**` value of `yes` or `no`, unique IDs, and a concrete first phase; `### Task` headings in a brief are reported as a warning, and taskless parallel groups are valid. Goal plans add the goal profile: `oat_plan_source: goal`, a valid `## Milestones` table (`goal-milestones-missing`, `goal-milestones-malformed`, `goal-duplicate-milestone`, `goal-milestone-empty`, `goal-milestone-unknown-phase`, `goal-phase-in-multiple-milestones`, `goal-phase-without-milestone`), no parallel group spanning milestones (`goal-group-crosses-milestone`), canonical persisted phase IDs (`goal-noncanonical-phase-id`), and no change to a shipped milestone or a registered delivery's frozen scope (`goal-shipped-milestone-changed`, `goal-delivered-scope-changed`); phases the journal marks `extracted` need no milestone. See [Implementation Execution](../workflows/projects/execution/implementation-execution.md#parallel-phase-groups).
|
|
204
212
|
- `oat project log append|check|synthesize|rollup` - manage the optional append-only project observation log: append validated judgment or structural entries, inspect grammar and synthesis status, complete end-of-run synthesis, and roll observations into `summary.md` plus the configured repository ledger. See [Project Log](../workflows/projects/execution/project-log.md).
|
|
205
213
|
- `oat project set-mode` — deprecated no-op. Execution mode is no longer user-selectable; emits a deprecation warning and preserves the `--json` contract.
|
|
206
214
|
- `oat gate review <prompt...>` - run a stateful, headless OAT review through the target registry, parse the produced review artifact, and exit nonzero for configured blocking findings. `--timeout-ms <milliseconds>` overrides target, `workflow.gateTimeouts`, environment, and scope defaults; accepted values are 1,000–14,400,000. Final/phase/range code reviews and artifact reviews default to 30 minutes, while task code reviews default to 15 minutes. With `--json`, the result envelope on exit is the canonical completion signal: `status` is `ok` | `blocked` | `review_failed` | `artifact_missing` | `artifact_validation_failed` | `targeting_correlation_failed`, alongside `runId`, `generatedAt`, and `artifactPath` when available. `artifact_missing` means an accepted child exited cleanly without an artifact; fix synchronous review/artifact completion and start a new run, without review-receive or same-run remediation. For `targeting_correlation_failed`, correct the project declaration or artifact routing and start a new run; do not run review-receive even if an artifact path is present. For `artifact_validation_failed`, correct the artifact and rerun the gate until it revalidates as `ok` or `blocked`. Invoke `oat-project-review-receive` only when all three conditions hold: `status` is `ok` or `blocked`, `receiveEligible` is `true`, and `handoff` is non-null. `review_failed` may include structured `refusal`, `noOutputProduced`, and metadata-only `activityEvidence`; these diagnostic fields never make a run receive-eligible. After a timeout, a validated run-correlated artifact returns the ordinary `ok` or `blocked` envelope with additive `lateCompletion: true`. When post-selection work fails after the reviewer already committed a run-correlated artifact, the gate re-validates that selected snapshot through the same eligibility path rather than re-parsing whatever the path now holds, never re-dispatching, and returns the ordinary `ok` or `blocked` envelope with additive `postSelectionRecovery: true`; the artifact must still be present and unchanged for re-validation to succeed. When nothing recovers, `review_failed` names the failing sub-step in `postSelection.step` and its cause in `postSelection.code`. Duplicate run-ID matches or a changed artifact with a mismatched run ID retain `targeting_correlation_failed` and `receiveEligible: false`. Orchestrators should read the structured result rather than poll the filesystem. See [Workflow Gates](../workflows/advanced/workflow-gates.md).
|
|
@@ -322,6 +322,8 @@ Not all workflow modes require every artifact:
|
|
|
322
322
|
- `quick`: discovery + plan + implementation (spec/design optional)
|
|
323
323
|
- `import`: imported plan + implementation (spec/design optional)
|
|
324
324
|
- `lite`: single-phase plan + implementation (summary/documentation optional at closeout)
|
|
325
|
+
- `brief`: Project Brief in `plan.md` + per-phase journal in `implementation.md` (`references/research/` scaffolded; no discovery, spec, or design)
|
|
326
|
+
- `goal`: the brief artifact set, with a `## Milestones` table in `plan.md` and the milestone state, gate carriers, delivery registry and outcome audit in `state.md`
|
|
325
327
|
|
|
326
328
|
## `.oat/repo/` structure
|
|
327
329
|
|
|
@@ -50,7 +50,7 @@ archive metadata own terminal reachability and retry identity.
|
|
|
50
50
|
|
|
51
51
|
Mode-sensitive notes:
|
|
52
52
|
|
|
53
|
-
- `state.md` includes workflow mode metadata (`spec-driven`, `quick`, `import`, `lite`) for routing.
|
|
53
|
+
- `state.md` includes workflow mode metadata (`spec-driven`, `quick`, `import`, `lite`, `brief`, `goal`) for routing.
|
|
54
54
|
- `plan.md` remains the canonical execution artifact across all modes.
|
|
55
55
|
|
|
56
56
|
| Mode | Core authored artifacts | Optional artifacts |
|
|
@@ -59,6 +59,8 @@ Mode-sensitive notes:
|
|
|
59
59
|
| `quick` | `discovery.md`, `plan.md` | Lightweight `design.md`, `spec.md` |
|
|
60
60
|
| `import` | `references/imported-plan.md`, `plan.md` | `spec.md`, `design.md` |
|
|
61
61
|
| `lite` | Single-phase `plan.md` with Summary, Decisions, Assumptions, Out of Scope, Validation Criteria, and an explicit adaptive content shape | `summary.md` and documentation at closeout |
|
|
62
|
+
| `brief` | `plan.md` as a Project Brief (phases with Intent and Exit evidence) and `implementation.md` as the per-phase journal | `references/research/`, `project-log.md` |
|
|
63
|
+
| `goal` | The brief artifacts, with a `## Milestones` table in `plan.md` and the goal fields in `state.md` | `references/research/`, `project-log.md` |
|
|
62
64
|
|
|
63
65
|
Every Lite plan keeps Summary, Decisions, Assumptions, Out of Scope, and
|
|
64
66
|
Validation Criteria. User-visible changes add numbered, testable Product
|
|
@@ -75,6 +77,75 @@ implementation-then-regression, static/build, or manual/visual. Static or build
|
|
|
75
77
|
checks alone fit only changes that cannot affect runtime behavior; every
|
|
76
78
|
behavioral change needs evidence that fails without the change.
|
|
77
79
|
|
|
80
|
+
In brief mode, `plan.md` is the Project Brief: Goal, numbered Outcomes (each
|
|
81
|
+
naming its intended evidence), Approach with an optional `### Design`,
|
|
82
|
+
Constraints and Out of Scope, Decisions, Known Unknowns, Delivery endpoint and
|
|
83
|
+
authority, an empty `## Milestones` section reserved for goal mode, and
|
|
84
|
+
`## Phase pNN:` blocks with `**Intent:**`, `**Exit evidence:**`, and
|
|
85
|
+
`**Provisional:**` lines instead of tasks. `implementation.md` is the
|
|
86
|
+
per-phase journal: each phase section carries exact `**Status:**`,
|
|
87
|
+
`**Base:**`, `**Head:**`, and `**Executor:**` marker lines, followed by
|
|
88
|
+
`### Task pNN-tNN` execution records opened as work happens. Progress counts
|
|
89
|
+
phase-units, and `**Status:** completed` under a phase heading is what accepts
|
|
90
|
+
it. The journal's Final Summary adds an `**Outcomes audit:**` block with one
|
|
91
|
+
line per numbered Outcome. When a brief artifact gate is configured,
|
|
92
|
+
`state.md` records its outcome as `oat_brief_gate`, with the same core fields
|
|
93
|
+
as `oat_quick_start_gate`.
|
|
94
|
+
|
|
95
|
+
In goal mode, `plan.md` is the same Project Brief with a filled
|
|
96
|
+
`## Milestones` table: one `| Milestone | Phases |` row per milestone listing
|
|
97
|
+
its ordered phase IDs, every phase (revision phases included) in exactly one
|
|
98
|
+
milestone. Later milestones are appended at re-alignment, and a phase frozen in
|
|
99
|
+
a registered delivery is never removed or reassigned. `state.md` adds the
|
|
100
|
+
goal fields:
|
|
101
|
+
|
|
102
|
+
- `oat_milestone` and `oat_milestone_status` (`aligning`, `implementing`,
|
|
103
|
+
`reviewing`, `delivering`, `delivered`), the active milestone;
|
|
104
|
+
- `oat_goal_status` (`active` or `declared_met`) and
|
|
105
|
+
`oat_goal_outcome_audit`, the exhaustive per-phase and per-outcome audit
|
|
106
|
+
written at the terminal declaration;
|
|
107
|
+
- `oat_goal_recovery`, the record of an interrupted recovery, which may target
|
|
108
|
+
an older milestone without moving the active one;
|
|
109
|
+
- `oat_milestone_gates`, one `plan` and one `exit` gate carrier per
|
|
110
|
+
milestone; and
|
|
111
|
+
- `oat_deliveries`, the delivery registry: one entry per delivery (`dNN`) with
|
|
112
|
+
its milestone, frozen phase scope, agreed endpoint, status, member pull
|
|
113
|
+
requests and their observed revisions, the integrated review it was
|
|
114
|
+
delivered on, its exit-gate binding and the first observed endpoint
|
|
115
|
+
attainment. A delivery's `status` is `registering`, `open`, `at_endpoint`,
|
|
116
|
+
or `superseded`, and its agreed `endpoint` is `open` or `merged`. A
|
|
117
|
+
replacement delivery names its one direct predecessor in `covers_scope_of`,
|
|
118
|
+
and the predecessor's `superseded_by` points back; only a delivery that never
|
|
119
|
+
reached its agreed endpoint may be replaced. A correction of a delivery that
|
|
120
|
+
did reach it is additive (`corrects_delivery_id`, new phase IDs, no inherited
|
|
121
|
+
coverage). `oat_pr_status` and `oat_pr_url` project the latest member pull
|
|
122
|
+
request.
|
|
123
|
+
|
|
124
|
+
Delivery evidence stays fresh across later commits that change only bookkeeping:
|
|
125
|
+
`state.md`, `plan.md` (outside its approved content), `implementation.md`,
|
|
126
|
+
`project-log.md` appends, `summary.md`, and the review artifacts of the
|
|
127
|
+
delivery and of any delivery sharing its pull request.
|
|
128
|
+
|
|
129
|
+
A delivery's evidence identity is set once: its `exit_gate`, its
|
|
130
|
+
`integrated_review` identity (`artifact`, `scope`, `bound_revisions`), and each
|
|
131
|
+
member's `reviewed_head`. They change only in a commit that records a new
|
|
132
|
+
review artifact of that delivery, one its own `## Reviews` rows name and never
|
|
133
|
+
a sharing delivery's; any other change to them is not bookkeeping. A bound
|
|
134
|
+
revision that disagrees with its member's `reviewed_head` is not fresh
|
|
135
|
+
(`bound-revision-mismatch`).
|
|
136
|
+
|
|
137
|
+
`oat project delivery refresh` writes only observations and derived staleness
|
|
138
|
+
into `oat_deliveries` and the milestone carriers. The terminal declaration is
|
|
139
|
+
recorded as one `**Goal declared met:**` line in the journal's Final Summary.
|
|
140
|
+
|
|
141
|
+
Extraction of goal work into another project is manual. A phase moved to a
|
|
142
|
+
linked project gets `**Extracted to:** <slug>` in the brief and the marker pair
|
|
143
|
+
`**Status:** extracted` / `**Extracted to:** <slug>` in the journal, and the
|
|
144
|
+
child project records `oat_extracted_from: <goal slug>` in its `state.md`. The
|
|
145
|
+
brief and journal targets must match. The outcome audit requires the child to
|
|
146
|
+
be complete or its outstanding obligation to carry an approved deferral, and
|
|
147
|
+
promotion of the goal to quick refuses any extracted phase.
|
|
148
|
+
|
|
78
149
|
## Blockers in state.md
|
|
79
150
|
|
|
80
151
|
`oat_blockers` accepts legacy reason strings and structured workflow records:
|
|
@@ -17,8 +17,8 @@ This page is the compact contract for how project lifecycle state and review sta
|
|
|
17
17
|
|
|
18
18
|
=== "Diagram"
|
|
19
19
|
|
|
20
|
-

|
|
21
|
+

|
|
22
22
|
|
|
23
23
|
=== "Mermaid source"
|
|
24
24
|
|
|
@@ -41,11 +41,14 @@ This page is the compact contract for how project lifecycle state and review sta
|
|
|
41
41
|
PASSED --> I
|
|
42
42
|
|
|
43
43
|
LITE["Lite: batched interview\n(no discovery/spec/design)"] -. entry point .-> P
|
|
44
|
+
BRIEF["Brief or goal: interview\n(one Project Brief)"] -. entry point .-> P
|
|
44
45
|
```
|
|
45
46
|
|
|
46
|
-
The solid chain is the spec-driven progression. Lite
|
|
47
|
-
progress** and never
|
|
48
|
-
quick and import projects also skip part of the leading chain.
|
|
47
|
+
The solid chain is the spec-driven progression. Lite, brief and goal enter at
|
|
48
|
+
**Plan in progress** and never set `oat_phase` to `discovery`, `spec`, or
|
|
49
|
+
`design`; quick and import projects also skip part of the leading chain. Goal
|
|
50
|
+
adds a milestone state machine inside implementation, described under
|
|
51
|
+
[Goal progression](#goal-progression).
|
|
49
52
|
|
|
50
53
|
## Phase status values
|
|
51
54
|
|
|
@@ -92,6 +95,52 @@ project promote <project-path> --to quick`, which flips `oat_workflow_mode` to
|
|
|
92
95
|
`quick` and sets `oat_phase: discovery` with `oat_phase_status: complete`. See
|
|
93
96
|
[Lifecycle](../workflows/projects/lifecycle.md#promoting-a-lite-project-to-quick).
|
|
94
97
|
|
|
98
|
+
Brief progression:
|
|
99
|
+
|
|
100
|
+
1. Plan in progress (`oat_workflow_mode: brief`, `oat_phase: plan`) — `oat-project-brief` owns the interview, the artifact review, any configured gate, and the single approval
|
|
101
|
+
2. Ready for implement (`plan.md` complete and pointing to `oat-project-implement`)
|
|
102
|
+
3. Implement in progress — progress counts phase-units; a phase is accepted only by `**Status:** completed` under its heading in `implementation.md`
|
|
103
|
+
4. Implement complete (final review passed). While any phase-unit is provisional or unaccepted, the router's brief-unit guard sends the project back to `oat-project-implement` ("Incomplete phase-units remain in the active scope") before every later check
|
|
104
|
+
5. PR open (`pr_open`) through the same post-implementation sequence as quick
|
|
105
|
+
6. Complete
|
|
106
|
+
|
|
107
|
+
A brief project can move to the quick chain with `oat project promote
|
|
108
|
+
<project-path> --to quick`; quick plan readiness stays false while
|
|
109
|
+
`oat_promotion_pending_phases` lists phases that still need tasks. See
|
|
110
|
+
[Lifecycle](../workflows/projects/lifecycle.md#promoting-a-brief-project-to-quick).
|
|
111
|
+
|
|
112
|
+
### Goal progression
|
|
113
|
+
|
|
114
|
+
A goal project runs the brief chain once per milestone. `oat_phase` and
|
|
115
|
+
`oat_phase_status` keep their meaning; the milestone loop lives in its own
|
|
116
|
+
`state.md` fields, owned as follows:
|
|
117
|
+
|
|
118
|
+
| `oat_milestone_status` | Meaning | Next owner and transition |
|
|
119
|
+
| ---------------------- | -------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
120
|
+
| `aligning` | The next milestone is being planned or awaits activation | `oat-project-goal` activates it (`implementing`) after review, its `plan` carrier, approval, and the previous delivery observed at its agreed endpoint |
|
|
121
|
+
| `implementing` | The milestone's phase-units are executing | Implement's milestone closeout runs the `exit` gate and writes `reviewing` |
|
|
122
|
+
| `reviewing` | The exit carrier is fresh; the integrated review is next | `oat-project-review-receive` writes `delivering` on a clean receive of the integrated review, or `implementing` when fixes are queued |
|
|
123
|
+
| `delivering` | A passed, fresh integrated review and exit carrier | `oat-project-pr-progress` registers the delivery (`dNN`) and writes `delivered`; stale evidence sends it back to `reviewing`; `oat-project-review-receive` returns it to `implementing` when a delivery-time review queues fixes |
|
|
124
|
+
| `delivered` | The delivery is registered, open and review-ready | `oat-project-goal` re-aligns (`aligning` for the next milestone) once the delivery reaches its endpoint, or records the terminal declaration; `oat-project-pr-progress` returns it to `reviewing` when `oat-project-goal` hands back a stale delivery whose integrated review or exit carrier is no longer fresh |
|
|
125
|
+
|
|
126
|
+
`oat_goal_status` is `active` until the user declares the goal met
|
|
127
|
+
(`declared_met`) with an exhaustive `oat_goal_outcome_audit`. Recovery of an
|
|
128
|
+
older milestone's delivery is recorded in `oat_goal_recovery` and never moves
|
|
129
|
+
`oat_milestone` or its status. `oat-project-revise` may return the active
|
|
130
|
+
milestone from `delivered` or `delivering` to `implementing` for inline
|
|
131
|
+
feedback. The router reads only these persisted fields; delivery freshness
|
|
132
|
+
comes from `oat project delivery refresh` and `oat project delivery check`.
|
|
133
|
+
|
|
134
|
+
`delivered` and the registry's `at_endpoint` are different: `delivered` means
|
|
135
|
+
the pull request is registered and open, `at_endpoint` means it has reached
|
|
136
|
+
the agreed endpoint (`open` or `merged`). Re-alignment may draft and approve
|
|
137
|
+
the next milestone while a `merged` endpoint is pending, but activation waits
|
|
138
|
+
for it. Terminal closeout (`oat project closeout-check`,
|
|
139
|
+
`oat project complete-state`) requires the declaration, the audit and delivery
|
|
140
|
+
coverage of every accepted phase. A goal project can move to quick at a settled
|
|
141
|
+
delivery boundary; see
|
|
142
|
+
[Lifecycle](../workflows/projects/lifecycle.md#promoting-a-goal-project-to-quick).
|
|
143
|
+
|
|
95
144
|
## Review progression
|
|
96
145
|
|
|
97
146
|
In `plan.md` Reviews table:
|
|
@@ -105,5 +154,5 @@ Do not move to the next lifecycle state if review/state artifacts indicate unres
|
|
|
105
154
|
## Reference artifacts
|
|
106
155
|
|
|
107
156
|
- `.oat/projects/<scope>/<project>/state.md`
|
|
108
|
-
- `.oat/projects/<scope>/<project>/plan.md` (`## Reviews`)
|
|
157
|
+
- `.oat/projects/<scope>/<project>/plan.md` (`## Reviews`, and `## Milestones` for goal)
|
|
109
158
|
- `.oat/projects/<scope>/<project>/implementation.md`
|
|
@@ -47,7 +47,9 @@ instead). Saving a brainstorming reference file under the active project also
|
|
|
47
47
|
commits or pushes that file. Promoting to a new project runs
|
|
48
48
|
`oat project new`, which scaffolds the project and makes it your active
|
|
49
49
|
project, and then writes a completed `discovery.md` (or, for a lite project,
|
|
50
|
-
fills in its `plan.md
|
|
50
|
+
fills in its `plan.md`; for a brief or goal project, writes a research note
|
|
51
|
+
under `references/research/` and leaves the brief to `oat-project-brief` or
|
|
52
|
+
`oat-project-goal`). Capturing a new idea also sets it as your active
|
|
51
53
|
idea in local OAT config. Each destination is confirmed before anything is
|
|
52
54
|
written.
|
|
53
55
|
|