@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.
Files changed (132) hide show
  1. package/README.md +2 -1
  2. package/assets/agents/oat-phase-implementer.md +104 -3
  3. package/assets/agents/oat-reviewer.md +20 -5
  4. package/assets/bundle-metadata.json +1 -1
  5. package/assets/docs/reference/cli-reference.md +15 -7
  6. package/assets/docs/reference/oat-directory-structure.md +2 -0
  7. package/assets/docs/reference/project-artifacts.md +72 -1
  8. package/assets/docs/reference/project-state-machine.md +55 -6
  9. package/assets/docs/skills/brainstorm.md +3 -1
  10. package/assets/docs/skills/index.md +13 -9
  11. package/assets/docs/workflows/advanced/autonomy.md +12 -2
  12. package/assets/docs/workflows/advanced/dispatch-ceiling.md +2 -2
  13. package/assets/docs/workflows/advanced/workflow-gates.md +25 -7
  14. package/assets/docs/workflows/approvals-and-automation.md +25 -9
  15. package/assets/docs/workflows/choose-workflow.md +24 -8
  16. package/assets/docs/workflows/ideas/index.md +1 -1
  17. package/assets/docs/workflows/ideas/lifecycle.md +3 -2
  18. package/assets/docs/workflows/projects/closeout/closeout-skills.md +83 -5
  19. package/assets/docs/workflows/projects/closeout/pr-flow.md +9 -1
  20. package/assets/docs/workflows/projects/execution/execution-skills.md +27 -2
  21. package/assets/docs/workflows/projects/execution/implementation-execution.md +15 -0
  22. package/assets/docs/workflows/projects/execution/picking-up-projects.md +20 -1
  23. package/assets/docs/workflows/projects/lifecycle.md +172 -9
  24. package/assets/docs/workflows/projects/planning/hill-checkpoints.md +18 -1
  25. package/assets/docs/workflows/projects/planning/planning-skills.md +13 -10
  26. package/assets/docs/workflows/projects/planning/starting-projects.md +138 -20
  27. package/assets/docs/workflows/projects/reviews/index.md +36 -2
  28. package/assets/docs/workflows/projects/reviews/review-flavors.md +7 -3
  29. package/assets/public-package-versions.json +4 -4
  30. package/assets/skills/oat-brainstorm/SKILL.md +58 -9
  31. package/assets/skills/oat-brainstorm/references/destinations.md +12 -4
  32. package/assets/skills/oat-docs/SKILL.md +13 -4
  33. package/assets/skills/oat-pjm-review-backlog/SKILL.md +2 -2
  34. package/assets/skills/oat-project-autonomous/SKILL.md +20 -8
  35. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +156 -122
  36. package/assets/skills/oat-project-brief/SKILL.md +592 -0
  37. package/assets/skills/oat-project-brief/references/brief-contract.md +743 -0
  38. package/assets/skills/oat-project-brief/references/docs/autonomy-contract.md +412 -0
  39. package/assets/skills/oat-project-brief/references/docs/gate-approval-record.md +93 -0
  40. package/assets/skills/oat-project-capture/SKILL.md +2 -2
  41. package/assets/skills/oat-project-complete/SKILL.md +16 -2
  42. package/assets/skills/oat-project-discover/SKILL.md +4 -2
  43. package/assets/skills/oat-project-dispatch-subagents/SKILL.md +9 -1
  44. package/assets/skills/oat-project-document/SKILL.md +17 -1
  45. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +156 -122
  46. package/assets/skills/oat-project-goal/SKILL.md +697 -0
  47. package/assets/skills/oat-project-goal/references/docs/autonomy-contract.md +412 -0
  48. package/assets/skills/oat-project-goal/references/docs/gate-approval-record.md +93 -0
  49. package/assets/skills/oat-project-implement/SKILL.md +1 -1
  50. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +107 -0
  51. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +156 -122
  52. package/assets/skills/oat-project-implement/references/docs/gate-approval-record.md +13 -0
  53. package/assets/skills/oat-project-implement/references/phase-execution.md +173 -1
  54. package/assets/skills/oat-project-implement/references/plan-and-resume.md +124 -3
  55. package/assets/skills/oat-project-import-plan/SKILL.md +5 -1
  56. package/assets/skills/oat-project-lite/SKILL.md +4 -1
  57. package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +156 -122
  58. package/assets/skills/oat-project-new/SKILL.md +5 -1
  59. package/assets/skills/oat-project-next/SKILL.md +71 -14
  60. package/assets/skills/oat-project-next/references/docs/gate-approval-record.md +13 -0
  61. package/assets/skills/oat-project-plan/SKILL.md +24 -3
  62. package/assets/skills/oat-project-plan-writing/SKILL.md +8 -4
  63. package/assets/skills/oat-project-pr-final/SKILL.md +65 -3
  64. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +156 -122
  65. package/assets/skills/oat-project-pr-progress/SKILL.md +125 -4
  66. package/assets/skills/oat-project-progress/SKILL.md +63 -8
  67. package/assets/skills/oat-project-progress/references/docs/gate-approval-record.md +13 -0
  68. package/assets/skills/oat-project-promote-spec-driven/SKILL.md +2 -2
  69. package/assets/skills/oat-project-quick-start/SKILL.md +65 -1
  70. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +156 -122
  71. package/assets/skills/oat-project-quick-start/references/docs/gate-approval-record.md +13 -0
  72. package/assets/skills/oat-project-reconcile/SKILL.md +94 -3
  73. package/assets/skills/oat-project-review-provide/SKILL.md +397 -12
  74. package/assets/skills/oat-project-review-receive/SKILL.md +155 -1
  75. package/assets/skills/oat-project-revise/SKILL.md +51 -4
  76. package/assets/skills/oat-project-summary/SKILL.md +150 -2
  77. package/assets/skills/oat-wave-execute/SKILL.md +3 -2
  78. package/assets/templates/implementation-brief.md +165 -0
  79. package/assets/templates/plan-brief.md +140 -0
  80. package/assets/templates/plan.md +1 -1
  81. package/assets/templates/state.md +8 -2
  82. package/dist/commands/project/closeout-check/closeout-invariant.d.ts +119 -3
  83. package/dist/commands/project/closeout-check/closeout-invariant.d.ts.map +1 -1
  84. package/dist/commands/project/closeout-check/closeout-invariant.js +454 -2
  85. package/dist/commands/project/closeout-check/index.d.ts +21 -3
  86. package/dist/commands/project/closeout-check/index.d.ts.map +1 -1
  87. package/dist/commands/project/closeout-check/index.js +190 -4
  88. package/dist/commands/project/complete-state/index.d.ts +2 -1
  89. package/dist/commands/project/complete-state/index.d.ts.map +1 -1
  90. package/dist/commands/project/complete-state/index.js +7 -1
  91. package/dist/commands/project/delivery/check.d.ts +66 -0
  92. package/dist/commands/project/delivery/check.d.ts.map +1 -0
  93. package/dist/commands/project/delivery/check.js +232 -0
  94. package/dist/commands/project/delivery/evidence.d.ts +171 -0
  95. package/dist/commands/project/delivery/evidence.d.ts.map +1 -0
  96. package/dist/commands/project/delivery/evidence.js +902 -0
  97. package/dist/commands/project/delivery/index.d.ts +7 -0
  98. package/dist/commands/project/delivery/index.d.ts.map +1 -0
  99. package/dist/commands/project/delivery/index.js +13 -0
  100. package/dist/commands/project/delivery/refresh.d.ts +110 -0
  101. package/dist/commands/project/delivery/refresh.d.ts.map +1 -0
  102. package/dist/commands/project/delivery/refresh.js +441 -0
  103. package/dist/commands/project/index.d.ts.map +1 -1
  104. package/dist/commands/project/index.js +2 -0
  105. package/dist/commands/project/log/append.d.ts +6 -0
  106. package/dist/commands/project/log/append.d.ts.map +1 -1
  107. package/dist/commands/project/log/append.js +6 -1
  108. package/dist/commands/project/new/scaffold.d.ts +1 -1
  109. package/dist/commands/project/new/scaffold.d.ts.map +1 -1
  110. package/dist/commands/project/new/scaffold.js +81 -7
  111. package/dist/commands/project/promote/promote.d.ts +46 -1
  112. package/dist/commands/project/promote/promote.d.ts.map +1 -1
  113. package/dist/commands/project/promote/promote.js +646 -5
  114. package/dist/commands/project/validate-plan/frontmatter.d.ts +12 -0
  115. package/dist/commands/project/validate-plan/frontmatter.d.ts.map +1 -0
  116. package/dist/commands/project/validate-plan/frontmatter.js +27 -0
  117. package/dist/commands/project/validate-plan/index.d.ts.map +1 -1
  118. package/dist/commands/project/validate-plan/index.js +62 -18
  119. package/dist/commands/project/validate-plan/profiles.d.ts +69 -0
  120. package/dist/commands/project/validate-plan/profiles.d.ts.map +1 -0
  121. package/dist/commands/project/validate-plan/profiles.js +420 -0
  122. package/dist/commands/project/validate-plan/validate-plan.d.ts +3 -19
  123. package/dist/commands/project/validate-plan/validate-plan.d.ts.map +1 -1
  124. package/dist/commands/project/validate-plan/validate-plan.js +5 -82
  125. package/dist/commands/shared/frontmatter.d.ts +1 -1
  126. package/dist/commands/shared/frontmatter.d.ts.map +1 -1
  127. package/dist/commands/shared/frontmatter.js +2 -0
  128. package/dist/commands/state/generate.d.ts.map +1 -1
  129. package/dist/commands/state/generate.js +82 -2
  130. package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -1
  131. package/dist/commands/tools/shared/pack-manifest.js +4 -0
  132. package/package.json +2 -2
@@ -42,7 +42,7 @@ make only the changes you approve.
42
42
 
43
43
  ## Key Skills by Use Case
44
44
 
45
- - Start a new tracked project: `oat-project-new`, `oat-project-quick-start`, or `oat-project-lite` for a single-sitting change with one batched interview and one approval (quick start accepts a project name plus optional description; if you omit the description it should ask before discovery begins)
45
+ - Start a new tracked project: `oat-project-new`, `oat-project-quick-start`, `oat-project-lite` for a single-sitting change with one batched interview and one approval (quick start accepts a project name plus optional description; if you omit the description it should ask before discovery begins), `oat-project-brief` for one delivery agreed in conversation, or `oat-project-goal` for an outcome delivered in milestones
46
46
  - Resume an existing project: `oat-project-open` to select it,
47
47
  `oat-project-progress` to see where it stands, then `oat-project-next` to
48
48
  continue. See
@@ -118,6 +118,8 @@ for policy, storage, approval, and recovery details.
118
118
  - `oat-project-new`
119
119
  - `oat-project-quick-start`
120
120
  - `oat-project-lite`
121
+ - `oat-project-brief`
122
+ - `oat-project-goal`
121
123
  - `oat-project-import-plan`
122
124
  - `oat-project-promote-spec-driven`
123
125
  - `oat-project-open`
@@ -305,14 +307,16 @@ Visibility reports source metadata: “user” is `user-invocable` and “model
305
307
 
306
308
  ### Project entry
307
309
 
308
- | Skill | Description | Visibility | Needs an active project? |
309
- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | ------------------------ |
310
- | [`oat-project-capture`](../workflows/projects/planning/starting-projects.md#oat-project-capture) | Use when work happened outside the OAT project workflow and needs retroactive project tracking. Creates a full project from an existing branch and conversation context. | user: true; model disabled: true | No |
311
- | [`oat-project-import-plan`](../workflows/projects/planning/starting-projects.md#oat-project-import-plan) | Use when you have an external markdown plan to execute with OAT. Preserves the source plan and normalizes it into canonical plan.md format. | user: true; model disabled: true | No |
312
- | [`oat-project-lite`](../workflows/projects/planning/starting-projects.md#oat-project-lite) | Use when a single-sitting change needs a critical interview, an approved single-phase plan, and resumable OAT implementation with minimal ceremony. | user: true; model disabled: true | No |
313
- | [`oat-project-new`](../workflows/projects/planning/starting-projects.md#oat-project-new) | Use when starting a spec-driven OAT project from scratch. Scaffolds a new project under PROJECTS_ROOT and sets it active. | user: true; model disabled: true | No |
314
- | [`oat-project-quick-start`](../workflows/projects/planning/starting-projects.md#oat-project-quick-start) | 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. | user: true; model disabled: true | No |
315
- | [`oat-project-split`](../workflows/projects/planning/starting-projects.md#oat-project-split) | Use when a discovery or brainstorm should split one broad scope into coordinated OAT child projects. | user: true; model disabled: true | No |
310
+ | Skill | Description | Visibility | Needs an active project? |
311
+ | -------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | ------------------------ |
312
+ | [`oat-project-brief`](../workflows/projects/planning/starting-projects.md#oat-project-brief) | Use when one delivery needs a design-aligned interview, a single approved Project Brief with phases of intent and exit evidence instead of planned tasks, and resumable OAT implementation. | user: true; model disabled: true | No |
313
+ | [`oat-project-capture`](../workflows/projects/planning/starting-projects.md#oat-project-capture) | Use when work happened outside the OAT project workflow and needs retroactive project tracking. Creates a full project from an existing branch and conversation context. | user: true; model disabled: true | No |
314
+ | [`oat-project-goal`](../workflows/projects/planning/starting-projects.md#oat-project-goal) | Use when an outcome needs several deliveries over time - one approved Project Brief with a Milestones table, a milestone loop of activation, delivery and re-alignment, and a terminal declaration audited against the brief's outcomes. | user: true; model disabled: true | No |
315
+ | [`oat-project-import-plan`](../workflows/projects/planning/starting-projects.md#oat-project-import-plan) | Use when you have an external markdown plan to execute with OAT. Preserves the source plan and normalizes it into canonical plan.md format. | user: true; model disabled: true | No |
316
+ | [`oat-project-lite`](../workflows/projects/planning/starting-projects.md#oat-project-lite) | Use when a single-sitting change needs a critical interview, an approved single-phase plan, and resumable OAT implementation with minimal ceremony. | user: true; model disabled: true | No |
317
+ | [`oat-project-new`](../workflows/projects/planning/starting-projects.md#oat-project-new) | Use when starting a spec-driven OAT project from scratch. Scaffolds a new project under PROJECTS_ROOT and sets it active. | user: true; model disabled: true | No |
318
+ | [`oat-project-quick-start`](../workflows/projects/planning/starting-projects.md#oat-project-quick-start) | 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. | user: true; model disabled: true | No |
319
+ | [`oat-project-split`](../workflows/projects/planning/starting-projects.md#oat-project-split) | Use when a discovery or brainstorm should split one broad scope into coordinated OAT child projects. | user: true; model disabled: true | No |
316
320
 
317
321
  ### Project execution
318
322
 
@@ -336,11 +336,21 @@ must resolve before the run makes any change.
336
336
  and a dispatch policy is already configured. You authorize the bounded
337
337
  resumable-export goal through a final PR without ordinary mid-run approval
338
338
  pauses. Autonomous entry chooses
339
- lite, quick, or spec-driven review density from the actual uncertainty and
340
- invokes its owning creation skill. If an export-filter project is already
339
+ lite, brief, quick, or spec-driven review density from the actual uncertainty and
340
+ invokes its owning creation skill. It never selects goal: each milestone's
341
+ approval and the final declaration need a person, so an existing goal project
342
+ stops at a product-judgment boundary instead of running unattended. If an export-filter project is already
341
343
  active, the second example explicitly resumes its earliest incomplete step
342
344
  instead of replaying finished phases.
343
345
 
346
+ When autonomous entry selects brief, `oat-project-brief` derives the project
347
+ name and description only from the explicit goal and stops if it is not
348
+ substantive. The brief's single approval resolves autonomously under
349
+ `BRIEF-11`: the reviewed brief is approved and the approval line records the
350
+ autonomous run, while contradictory or materially incomplete outcomes stop at
351
+ a product-judgment boundary. A brief records no HiLL checkpoints unless it
352
+ lists phases explicitly.
353
+
344
354
  **Expected output:** Session-only autonomy signals, persisted lifecycle
345
355
  progress, reviewed task commits, and project-local execution learnings. Existing
346
356
  projects retain their mode. A successful run reports the actual final PR and
@@ -22,8 +22,8 @@ constraints:
22
22
  agents to implement and review each phase, or no cap, or leaving model choice
23
23
  to the provider; and deciding where the list of candidate models (the
24
24
  _ladder_) is stored.
25
- - **Who needs it:** anyone starting a quick, spec-driven, lite, or imported
26
- project, because planning asks you to choose a policy; and team leads who
25
+ - **Who needs it:** anyone starting a quick, spec-driven, lite, brief, goal,
26
+ or imported project, because planning asks you to choose a policy; and team leads who
27
27
  manage model cost.
28
28
  - **Know first:** there is no default policy, and a policy set in any config
29
29
  file overrides the one each project chose. A tier is a cap: phase agents may
@@ -98,7 +98,7 @@ string, and the lifecycle executes it unchanged; OAT does not inject, reorder,
98
98
  or rewrite its shell arguments.
99
99
 
100
100
  `oat-project-plan`, `oat-project-implement`, `oat-project-quick-start`,
101
- `oat-project-lite`, and `oat-project-import-plan` are currently gate-aware. Gate awareness is declared
101
+ `oat-project-lite`, `oat-project-brief`, `oat-project-goal`, and `oat-project-import-plan` are currently gate-aware. Gate awareness is declared
102
102
  in skill frontmatter with `oat_gateable: true`, and
103
103
  `oat internal validate-oat-skills` warns when config targets a missing or
104
104
  non-gateable skill.
@@ -249,7 +249,7 @@ for it.
249
249
 
250
250
  ### Gate approval records
251
251
 
252
- Two lifecycle gates persist their outcome in project `state.md` with a shared
252
+ Three lifecycle gates persist their outcome in project `state.md` with a shared
253
253
  five-field core:
254
254
 
255
255
  | Field | Meaning |
@@ -277,8 +277,26 @@ carries exactly the core:
277
277
  - a gate that is not configured writes no record (implement writes
278
278
  `allowed/no_gate` instead).
279
279
 
280
- `oat-project-next` and `oat-project-progress` report the quick-start record as
281
- recorded: status, disposition, `decided_at`, and `config_fingerprint` as
280
+ `oat_brief_gate`, written by `oat-project-brief` for its configured gate on the
281
+ committed brief, carries exactly the same core with the same outcome rules. It
282
+ is provenance only: no route reads it back, and the brief's single approval
283
+ still follows the gate.
284
+
285
+ A goal project records its gate outcomes per milestone instead, in
286
+ `oat_milestone_gates`, and never in `oat_brief_gate`. The configured
287
+ `oat-project-goal` gate on the brief or a milestone amendment becomes that
288
+ milestone's `plan` carrier, `oat_milestone_gates[mNN].plan`, written with
289
+ `status: allowed` only after the artifact review, the gate, and your approval;
290
+ for a re-alignment amendment it is the only approval evidence. The implement
291
+ exit gate at milestone closeout writes `oat_milestone_gates[mNN].exit` (never
292
+ `oat_implement_exit_gate`, which goal uses only at terminal closeout). It runs
293
+ before the milestone's integrated review and runs again after queued fixes.
294
+ `oat project delivery check` reports the exit carrier's freshness, and
295
+ `oat project delivery refresh` marks it stale when delivery evidence no longer
296
+ holds.
297
+
298
+ `oat-project-next` and `oat-project-progress` report the quick-start record
299
+ (and `oat-project-progress` the brief record) as recorded: status, disposition, `decided_at`, and `config_fingerprint` as
282
300
  provenance, or `malformed` when the fields do not form a valid record. They do
283
301
  not recompute the fingerprint, because no CLI emits a canonical one for the
284
302
  quick-start gate, and they never route on the record: quick plan readiness
@@ -840,7 +858,7 @@ oat gate set oat-project-implement \
840
858
  ```
841
859
 
842
860
  Apply the same command shape to `oat-project-plan`,
843
- `oat-project-quick-start`, `oat-project-lite`, and `oat-project-import-plan` when those lifecycle
861
+ `oat-project-quick-start`, `oat-project-lite`, `oat-project-brief`, `oat-project-goal`, and `oat-project-import-plan` when those lifecycle
844
862
  skills have configured review gates. Do not add `--target`; explicit targets
845
863
  remain manual/debug or deliberate local/user-specific overrides.
846
864
 
@@ -1234,8 +1252,8 @@ as a failed gate, never as a pass.
1234
1252
 
1235
1253
  How the skills handle that case differs:
1236
1254
 
1237
- - `oat-project-implement` and `oat-project-lite` keep it blocked whatever
1238
- `onFailure` says, so even a `warn` gate does not let them continue.
1255
+ - `oat-project-implement`, `oat-project-lite`, `oat-project-brief`, and
1256
+ `oat-project-goal` keep it blocked whatever `onFailure` says, so even a `warn` gate does not let them continue.
1239
1257
  - `oat-project-plan`, `oat-project-quick-start`, and `oat-project-import-plan`
1240
1258
  apply your `onFailure` setting to any failed gate run, including one where no
1241
1259
  review happened. With `block`, they retry and then hand the problem to you,
@@ -15,14 +15,16 @@ to the detail.
15
15
  A HiLL (human-in-the-loop lifecycle) checkpoint is a point where the agent
16
16
  stops and waits for a person to approve before it continues.
17
17
 
18
- | Mode | A person approves before code is written | Pauses during implementation | Reviews that run automatically | At the end | Never |
19
- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------- | ----------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------- |
20
- | No project | You direct each step yourself | None | None; run `oat-review-provide` when you want a review | OAT opens no pull request | Not applicable |
21
- | Lite | Once: the requirements and the single-phase plan | None | Plan review, phase review, final review | Opens a pull request by itself; no setting removes this step | Merges a pull request |
22
- | Quick | You confirm the requirements (or the lightweight design). No plan-approval prompt: the plan is marked ready after an automatic review | First run lists the phases and asks where to stop; suggested: after every phase | Plan review, a review after every phase, final review | Opens a pull request by itself only if `workflow.postImplementSequence` asks | Merges a pull request |
23
- | Spec-driven | Discovery, then the requirements and design. Planning asks you in chat to confirm the task breakdown, but no plan approval is recorded; the plan is marked ready after an automatic review | Same as quick | Same as quick | Same as quick | Merges a pull request |
24
- | Imported plan | No approval step; OAT normalizes your plan and reviews it automatically | Same as quick | Same as quick | Same as quick | Merges a pull request |
25
- | Autonomous run | None; it answers its own questions and stops only at defined boundaries | None; it approves the final checkpoint itself after a passing final review | All of the above, plus a review at every checkpoint | Opens a pull request by default | Merges or force-pushes |
18
+ | Mode | A person approves before code is written | Pauses during implementation | Reviews that run automatically | At the end | Never |
19
+ | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- |
20
+ | No project | You direct each step yourself | None | None; run `oat-review-provide` when you want a review | OAT opens no pull request | Not applicable |
21
+ | Lite | Once: the requirements and the single-phase plan | None | Plan review, phase review, final review | Opens a pull request by itself; no setting removes this step | Merges a pull request |
22
+ | Brief | Once: the reviewed Project Brief, after you have agreed its design in the interview | None by default; a pause happens only for a phase listed in `oat_plan_hill_phases` | Brief review, a review after every phase, final review | Same as quick | Merges a pull request |
23
+ | Goal | The reviewed Project Brief with its milestone split, then each later milestone's amendment, and finally your declaration that the goal is met | None by default inside a milestone; the agent stops at each re-alignment and waits for your approval | Brief review, a review after every phase, an integrated review per milestone | Each milestone opens its own pull request when `oat-project-pr-progress` delivers it; completion opens none when the deliveries cover the work | Merges a pull request |
24
+ | Quick | You confirm the requirements (or the lightweight design). No plan-approval prompt: the plan is marked ready after an automatic review | First run lists the phases and asks where to stop; suggested: after every phase | Plan review, a review after every phase, final review | Opens a pull request by itself only if `workflow.postImplementSequence` asks | Merges a pull request |
25
+ | Spec-driven | Discovery, then the requirements and design. Planning asks you in chat to confirm the task breakdown, but no plan approval is recorded; the plan is marked ready after an automatic review | Same as quick | Same as quick | Same as quick | Merges a pull request |
26
+ | Imported plan | No approval step; OAT normalizes your plan and reviews it automatically | Same as quick | Same as quick | Same as quick | Merges a pull request |
27
+ | Autonomous run | None; it answers its own questions and stops only at defined boundaries | None; it approves the final checkpoint itself after a passing final review | All of the above, plus a review at every checkpoint | Opens a pull request by default | Merges or force-pushes |
26
28
 
27
29
  Phase reviews need no person. The final review always runs, but an interactive
28
30
  run first asks how to run it unless `workflow.reviewExecutionModel` is set. If
@@ -46,6 +48,16 @@ What does and does not give a person a say on the plan:
46
48
 
47
49
  - **Lite:** its single approval covers the requirements and the plan, and the
48
50
  decision is written into `plan.md`.
51
+ - **Brief:** its single approval covers the reviewed Project Brief. The
52
+ interview reaches explicit design alignment first, so approval confirms a
53
+ design you already agreed to; the artifact review and any configured
54
+ `oat-project-brief` gate run on the committed brief before you approve.
55
+ - **Goal:** the first approval covers the reviewed Project Brief and its
56
+ milestone split. Each later milestone is approved separately, at
57
+ re-alignment, after its amendment is reviewed and gated; the approval is
58
+ recorded as that milestone's `plan` gate carrier in `state.md`. The goal ends
59
+ only when you declare it met, and the declaration records an audit of every
60
+ outcome. Autonomous runs never start or continue a goal project.
49
61
  - **Spec-driven:** `/oat-project-plan` asks "Does this breakdown make sense? Any
50
62
  tasks missing?" in the chat and revises until you confirm. That confirmation
51
63
  is not recorded as an approval, and the automatic review that follows can
@@ -123,7 +135,11 @@ and any budget that runs out adds one read-only complexity-review run.
123
135
  pushes your branch after archiving a synced project, whether or not it opens
124
136
  a pull request. Autonomous runs also push the branch, without force, after
125
137
  each lifecycle step such as planning and implementation. See
126
- [Autonomous Project Execution](advanced/autonomy.md).
138
+ [Autonomous Project Execution](advanced/autonomy.md). In a goal project,
139
+ `oat-project-pr-progress` pushes the branch and opens each milestone's pull
140
+ request once the milestone's evidence checks fresh, and
141
+ `oat-project-complete` opens none when the registered deliveries already
142
+ cover every accepted phase, even with `workflow.createPrOnComplete` set.
127
143
 
128
144
  ## Set it up the way you want
129
145
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  title: Choose a Workflow
3
- description: Choose how to run tracked, resumable work in OAT, from no project to lite, quick, spec-driven, or imported projects, and what each mode does at the end.
3
+ description: Choose how to run tracked, resumable work in OAT, from no project to lite, brief, goal, quick, spec-driven, or imported projects, and what each mode does at the end.
4
4
  ---
5
5
 
6
6
  # Choose a Workflow
@@ -48,6 +48,8 @@ Stay with direct CLI usage when:
48
48
 
49
49
  - CLI only: direct commands, no tracked project artifacts
50
50
  - Lite mode: a batched interview and one approval produce a single-phase `plan.md` for a single-sitting change
51
+ - Brief mode: a design-aligned interview produces one reviewed Project Brief whose phases carry intent and exit evidence instead of tasks
52
+ - Goal mode: a brief whose phases are grouped into milestones, each delivered as its own pull request and followed by a re-alignment, closed by an explicit declaration audited against the brief's outcomes
51
53
  - Quick mode: tracked work with a lighter upfront planning path
52
54
  - Spec-driven mode: explicit discovery, requirements, design, and plan artifacts
53
55
  - Import mode: an externally-authored plan imported into OAT for tracked execution
@@ -78,13 +80,15 @@ it by running that mode's entry skill, and the skill creates the project for
78
80
  you. An OAT project is a folder of tracked files (plan, state, reviews) that lets
79
81
  an agent pick the work up again in a later session.
80
82
 
81
- | Mode | Start it with | Choose it when | What you give up | At the end |
82
- | ----------- | ----------------------------------------------- | ------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
83
- | No project | No skill; ask your agent or run CLI commands | The work is small, or is just provider sync or a single CLI command | Resuming later, a tracked plan, and lifecycle reviews. Ad-hoc reviews still work | OAT pushes nothing and opens no pull request |
84
- | Lite | `/oat-project-lite` | The change fits in one sitting and the outcome is clear | Discovery and design documents, multiple phases, and approval pauses between phases. You approve one plan, once | Always pushes your current branch and opens a pull request by itself; no setting removes this step |
85
- | Quick | `/oat-project-quick-start` | The work is bounded and the requirements are clear | A formal requirements document (`spec.md`). Design is optional | Pushes your branch and opens a pull request only when `workflow.postImplementSequence` asks for it, or in an autonomous run |
86
- | Spec-driven | `/oat-project-new` | The requirements are unclear, or the change cuts across many parts of the code | Speed: you approve discovery and design before any planning or code | Same as quick |
87
- | Import | `/oat-project-import-plan` with the plan's path | A plan already exists in another tool or document | OAT's own discovery and design steps | Same as quick |
83
+ | Mode | Start it with | Choose it when | What you give up | At the end |
84
+ | ----------- | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
85
+ | No project | No skill; ask your agent or run CLI commands | The work is small, or is just provider sync or a single CLI command | Resuming later, a tracked plan, and lifecycle reviews. Ad-hoc reviews still work | OAT pushes nothing and opens no pull request |
86
+ | Lite | `/oat-project-lite` | The change fits in one sitting and the outcome is clear | Discovery and design documents, multiple phases, and approval pauses between phases. You approve one plan, once | Always pushes your current branch and opens a pull request by itself; no setting removes this step |
87
+ | Brief | `/oat-project-brief` | The work is one delivery whose outcome and design you can agree in conversation | Discovery and design documents and an up-front task list. Phases state intent and exit evidence; tasks are recorded as the work runs | Same as quick |
88
+ | Goal | `/oat-project-goal` | The outcome needs several deliveries over time, and you can agree the first milestone in conversation | The same as brief, plus an approval per milestone and a final declaration that the goal is met | Each milestone's pull request opens when `oat-project-pr-progress` delivers it; any phases no delivery covers go out through `oat-project-pr-final`, and completion opens no extra pull request |
89
+ | Quick | `/oat-project-quick-start` | The work is bounded and the requirements are clear | A formal requirements document (`spec.md`). Design is optional | Pushes your branch and opens a pull request only when `workflow.postImplementSequence` asks for it, or in an autonomous run |
90
+ | Spec-driven | `/oat-project-new` | The requirements are unclear, or the change cuts across many parts of the code | Speed: you approve discovery and design before any planning or code | Same as quick |
91
+ | Import | `/oat-project-import-plan` with the plan's path | A plan already exists in another tool or document | OAT's own discovery and design steps | Same as quick |
88
92
 
89
93
  Type the skill names in your coding agent's chat, not a terminal; Codex uses
90
94
  `$` instead of `/`. No mode ever merges a pull request. Separately,
@@ -105,6 +109,18 @@ is what holds the planning conversation, so start with the skill.
105
109
  asking, so start it on a feature branch; if you do not want that, choose
106
110
  quick instead, which opens a pull request only when
107
111
  `workflow.postImplementSequence` asks for one or the run is autonomous.
112
+ - If you can agree the outcome and the design with your agent in one
113
+ conversation and want to approve that once, choose brief. You approve one
114
+ reviewed Project Brief; the agent then works phase by phase and records each
115
+ task as it happens rather than planning them all first. Promote it to quick
116
+ with `oat project promote <path> --to quick` if you later want a maintained
117
+ task plan.
118
+ - If the outcome needs more than one delivery, such as a first version now and
119
+ a follow-up once you have seen it used, choose goal. You approve one brief
120
+ with a milestone split, then each milestone is delivered as its own pull
121
+ request and re-aligned before the next one starts; you declare the goal met
122
+ at the end. Goal is never selected by an autonomous run, because each
123
+ milestone approval and the final declaration need you.
108
124
  - If your team is building a feature with agreed, bounded requirements, choose
109
125
  quick. A long task list alone does not call for a formal spec.
110
126
  - If the change is high-risk or regulated, or its requirements are still being
@@ -37,4 +37,4 @@ If the thought is still pre-shape — you don't know whether it should land as a
37
37
 
38
38
  ## Promotion Path
39
39
 
40
- When an idea becomes concrete, summarize it and then start a tracked OAT project in lite, quick, or spec-driven mode depending on scope and design risk. Lite suits a single-sitting change and seeds `plan.md` directly; quick and spec-driven seed `discovery.md` instead.
40
+ When an idea becomes concrete, summarize it and then start a tracked OAT project in lite, brief, goal, quick, or spec-driven mode depending on scope and design risk. Lite suits a single-sitting change and seeds `plan.md` directly; brief and goal write their Project Brief into `plan.md` through an interview; quick and spec-driven seed `discovery.md` instead.
@@ -63,8 +63,9 @@ Where to start:
63
63
  - **Worth exploring:** `oat-idea-new`. `oat-idea-ideate` resumes an idea, can
64
64
  start one from a scratchpad seed, and can reopen a summarized idea.
65
65
  - **Scoped work for later:** `oat-pjm-add-backlog-item` (needs `oat pjm init`).
66
- - **Ready to build:** `oat-project-lite`, `oat-project-quick-start`,
67
- `oat-project-new`, or `oat-project-import-plan` for a plan written elsewhere.
66
+ - **Ready to build:** `oat-project-lite`, `oat-project-brief`,
67
+ `oat-project-goal`, `oat-project-quick-start`, `oat-project-new`, or
68
+ `oat-project-import-plan` for a plan written elsewhere.
68
69
 
69
70
  Optional moves:
70
71
 
@@ -131,6 +131,28 @@ For a synced project, project artifacts are published to the project ref with
131
131
  refreshes project metadata. Declining leaves the description available without
132
132
  claiming a PR exists.
133
133
 
134
+ **Goal projects:** in a goal project a progress PR is a milestone delivery,
135
+ and this skill registers it. Its scope is the router's `deliver mNN` (or
136
+ `deliver mNN/dNN`) context or a pending `oat_goal_recovery` record at stage
137
+ `delivering`: the milestone's ordered phase set, or a registered delivery's
138
+ frozen scope, never a `pNN-pMM` range or commit labels. The description's Git
139
+ range runs from the set's first anchored base to its last anchored head and
140
+ names any other milestone's phases that fall inside it. In place of the
141
+ optional PR question, the skill runs `oat project delivery refresh` when
142
+ deliveries exist and registers only when
143
+ `oat project delivery check --subject <mNN|dNN>` reports `status: ok`. It
144
+ commits a `registering` registry entry before creating anything, then creates
145
+ the PR, or on resume attaches the single PR that `gh pr list` finds for the
146
+ head branch (more than one match stops at `oat-project-reconcile`). It then
147
+ records the member, `status: open`, and `oat_milestone_status: delivered`, and
148
+ appends one structural project-log entry. Stale review or exit-gate evidence
149
+ stops before registration: for the active milestone the skill writes
150
+ `oat_milestone_status: reviewing` and an `oat_goal_recovery` record at the
151
+ stage the missing evidence names; for an older milestone it writes only the
152
+ recovery record. A milestone that already has a registered delivery is
153
+ re-checked and returned to `delivered` when its evidence is fresh, never
154
+ registered twice.
155
+
134
156
  **Next step:** Review the description and choose whether to open the progress
135
157
  PR. Continue remaining project tasks through `oat-project-implement`.
136
158
 
@@ -150,8 +172,9 @@ inputs select its destination and title.
150
172
  **Prerequisites:** Needs an active OAT project: yes. If no project is active,
151
173
  the skill asks for the project name and sets that project as active. The
152
174
  project needs `plan.md`. Spec-driven mode also requires `spec.md` and `design.md`. Quick,
153
- import, and lite accept their mode-appropriate reduced artifacts. The latest
154
- `final` code-review event in the plan's Reviews ledger should be `passed`.
175
+ import, lite, brief, and goal accept their mode-appropriate reduced artifacts.
176
+ Outside goal mode, the latest `final` code-review event in the plan's Reviews
177
+ ledger should be `passed`.
155
178
  Autonomous execution stops if it is not passed. Interactive execution warns
156
179
  and asks before proceeding anyway.
157
180
 
@@ -172,6 +195,19 @@ and base branch when you did not pass them, the only question it asks is
172
195
  whether to continue when the latest final review has not passed. It never
173
196
  merges the PR.
174
197
 
198
+ **Goal projects:** in a goal project this skill is the terminal delivery
199
+ registration owner, not a second project PR. It runs its own registration step
200
+ in place of the final-review check and PR creation described above. It
201
+ requires `oat_goal_status: declared_met` and a valid outcome audit, read
202
+ through `oat project closeout-check`; any refusal other than `phase-uncovered`
203
+ routes to the skill named in `nextOwner.skill`. When no accepted phase is
204
+ uncovered, it creates no PR and writes no state, because delivery coverage
205
+ already satisfies the `pr` step. Otherwise it registers one terminal delivery
206
+ per milestone that owns uncovered accepted phases, in milestone order, through
207
+ the same registration contract as `oat-project-pr-progress`. Deliveries
208
+ registered from one head branch share its pull request. Coverage completes
209
+ when every terminal delivery reaches its agreed endpoint.
210
+
175
211
  **Example scenario:** Export filters and audit reporting are implemented, the
176
212
  latest final review has passed, and you have authorized publication. Final PR
177
213
  summarizes the complete change, including review evidence and verification.
@@ -351,6 +387,17 @@ implementation tracking, and state are updated for execution. Inline requests
351
387
  are not severity-triaged. Structured GitHub feedback and review artifacts route
352
388
  through their corresponding review-receive skills and use those contracts.
353
389
 
390
+ **Goal projects:** inline feedback needs an explicit target before anything is
391
+ written: a milestone or delivery identity (`mNN` or `mNN/dNN`). The skill asks
392
+ for it when you did not name it, and never infers it from the open PR's commit
393
+ labels. The revision is a phase-only `p-revN` appended to that milestone's
394
+ `## Milestones` row; a registered delivery's frozen scope is never edited. The
395
+ target's exit carrier, and a registered target delivery's integrated review,
396
+ are marked stale. When the target is the active milestone, the skill returns
397
+ it to `oat_milestone_status: implementing`. Feedback on an older milestone
398
+ creates or advances an `oat_goal_recovery` record instead and leaves the
399
+ active milestone's status and execution pointer unchanged.
400
+
354
401
  **Next step:** If revise did not continue into implementation on its own, run
355
402
  `oat-project-implement` to execute the revision tasks. After verification,
356
403
  update the open PR and its review evidence. Revise itself does not write code
@@ -378,7 +425,13 @@ path. The target needs `state.md` and at least `plan.md` or
378
425
  `implementation.md`. Completed
379
426
  implementation provides shipped evidence. If only a plan exists, the skill can
380
427
  proceed but must identify recommendations as based on planned work rather than
381
- verified implementation. Lite projects do not require discovery, spec, or design.
428
+ verified implementation. Lite, brief, and goal projects do not require
429
+ discovery, spec, or design; a brief's documentation sources are the Project
430
+ Brief and the per-phase journal. A goal project adds two shipped-result
431
+ sources from `state.md`: the outcome audit (`oat_goal_outcome_audit`) and the
432
+ delivery registry (`oat_deliveries`). The skill documents only what those
433
+ deliveries shipped and names audited deferrals rather than documenting them as
434
+ delivered.
382
435
 
383
436
  **Example scenario:** Export filters shipped, but the user guide still describes
384
437
  only unfiltered exports. Document verifies the actual endpoint and CLI behavior,
@@ -430,7 +483,12 @@ Summarize the delivered export filters, the date-format decision, and the audit-
430
483
  completed task. Missing implementation tracking blocks summary generation.
431
484
  With no completed tasks, the process warns that the summary will be minimal.
432
485
  Lite uses its plan contract and implementation results without requiring
433
- discovery, spec, or design artifacts.
486
+ discovery, spec, or design artifacts. Brief needs at least one accepted
487
+ phase-unit and draws on the brief's Goal, Outcomes, Approach, and Decisions
488
+ plus the journal; its staleness fingerprint changes when a phase is accepted,
489
+ not when execution records change. A goal summary's fingerprint also covers
490
+ the deliveries observed at their agreed endpoint, so a delivery newly reaching
491
+ its endpoint makes the summary stale.
434
492
 
435
493
  **Example scenario:** The first export phase is delivered, and another engineer
436
494
  will own the reporting phase next week. Summary records the shipped filter
@@ -466,6 +524,15 @@ It only offers, and does not create without your answer, backlog items for
466
524
  follow-up entries in the project log. It does not invent tasks or silently
467
525
  rewrite the execution plan.
468
526
 
527
+ In a goal project, while `oat project closeout-check` still reports
528
+ `phase-uncovered` and the closeout sequence has not yet run its `pr` step, the
529
+ skill writes only files in the project directory. It defers the repository
530
+ ledger roll-up and decision-record promotion and reports them as deferred,
531
+ because a repository-level commit after the terminal milestone's reviewed
532
+ revision would make the terminal delivery undeliverable. The next summary run
533
+ after `phase-uncovered` clears performs them: a `summary` step configured after
534
+ `pr`, or the summary refresh at completion. Do not decline that refresh.
535
+
469
536
  **Next step:** Use the summary as a source for documentation, PR description,
470
537
  and later project handoff. Refresh it after revisions. Complete the project
471
538
  only when its lifecycle closeout requirements are satisfied.
@@ -492,7 +559,12 @@ you invoke it by name. Before it changes anything, it runs a read-only check
492
559
  that the project's stored closeout sequence is finished (or that the project
493
560
  has none). If an implementation closeout is still incomplete, the skill sends
494
561
  you back to `oat-project-implement`; no phase-status value bypasses that
495
- check.
562
+ check. For a goal project the check also applies the goal boundary: a valid
563
+ declaration, an exhaustive outcome audit, resolved extractions, an observation
564
+ of every terminal delivery's pull requests, and delivery coverage of every
565
+ accepted phase. A goal refusal routes to the skill it names in
566
+ `nextOwner.skill`, such as `oat-project-goal`, `oat-project-pr-progress`, or
567
+ `oat-project-pr-final`, rather than to implement alone.
496
568
 
497
569
  **What it does without asking:** the skill asks once, then acts. One combined
498
570
  prompt asks you to confirm completion and, where they apply, whether to
@@ -513,6 +585,12 @@ runs `oat-project-summary`, with its own commit and decision promotion, and an
513
585
  archive runs `oat project archive`, including an S3 upload when
514
586
  `archive.s3SyncOnComplete` is enabled.
515
587
 
588
+ In a goal project whose `pr` step is satisfied by delivery coverage, the skill
589
+ creates no PR, even with `workflow.createPrOnComplete: true`, and reports
590
+ `PR on complete: satisfied by goal delivery coverage`. It opens a separate
591
+ bookkeeping PR for the completion commits only when you ask for one in that
592
+ run, and never counts it as a goal delivery.
593
+
516
594
  **Example scenario:** The export project has passed final verification and its
517
595
  stored closeout sequence, but the PR is still open. Complete finalizes lifecycle
518
596
  state and, if selected, archives the durable artifacts and updates the existing
@@ -10,6 +10,10 @@ Two PR paths:
10
10
  - `oat-project-pr-progress`: progress PR for one phase or partial scope
11
11
  - `oat-project-pr-final`: final project PR into `main`
12
12
 
13
+ In a goal project both skills register deliveries instead: a progress PR is a
14
+ milestone delivery, and pr-final registers terminal deliveries rather than a
15
+ separate final PR.
16
+
13
17
  ## Inputs
14
18
 
15
19
  Expected artifacts:
@@ -18,12 +22,16 @@ Expected artifacts:
18
22
  - Required (spec-driven mode): `spec.md`, `design.md`
19
23
  - Optional (quick/import): `spec.md`, `design.md`
20
24
  - Not expected (lite): `discovery.md`, `spec.md`, or `design.md`
25
+ - Not expected (brief): `discovery.md`, `spec.md`, or `design.md`; the Project Brief in `plan.md` and the per-phase journal in `implementation.md` are the sources
26
+ - Not expected (goal): as brief; the Project Brief with its `## Milestones` table, the journal, and the goal state in `state.md` are the sources
21
27
  - Recommended (quick mode): `discovery.md`
22
28
  - Recommended (import mode): `references/imported-plan.md`
23
29
  - Recommended: `implementation.md` final summary
24
30
  - Recommended: `summary.md` — pr-final treats it as the primary source for the PR Summary section and automatically refreshes it first when missing or stale
25
31
  - Lite source row: `oat-project-pr-final` uses the plan's Summary, Decisions, and Validation Criteria plus the `implementation.md` Final Summary; it does not create `summary.md` unless lite closeout explicitly opts in
26
- - Required gate for final PR: review table final row should be `passed`
32
+ - Brief source row: `summary.md` is required as in quick; its sources are the brief's Goal, Outcomes, Approach, and Decisions, the journal's accepted phases and Outcomes audit, and the review rows. Progress PRs scope a phase or `pNN-pMM` run from the journal's `**Base:**`/`**Head:**` anchors rather than a commit-message search
33
+ - Goal source row: a progress PR is a milestone delivery. Its scope is the milestone's ordered phase set, or a registered delivery's frozen scope; its Git range runs from the set's first anchored base to its last anchored head and discloses other milestones' phases inside it. The PR is created only after `oat project delivery check` reports `status: ok` and a `registering` entry is committed to `oat_deliveries`. pr-final registers terminal deliveries for uncovered accepted phases instead of opening a separate final PR
34
+ - Required gate for final PR: review table final row should be `passed` (goal: pr-final does not read the final row; each delivery it registers needs a passed, fresh integrated review and an allowed, fresh exit carrier instead)
27
35
 
28
36
  ## Output
29
37
 
@@ -92,14 +92,39 @@ choosing `Leave Unresolved` stops the run. A non-interactive run stops with
92
92
  needs your authorization, the skill asks once before any work; if you decline,
93
93
  it runs the phases inline in the current session instead.
94
94
 
95
- **Questions on the first run:** Except in a lite project, the first run lists
95
+ **Questions on the first run:** Except in a lite, brief, or goal project, the first run lists
96
96
  the plan's phases and asks which checkpoint behavior you want: stop after
97
97
  every phase (the default), after specific phases, or only after the final
98
98
  phase. Setting `workflow.hillCheckpointDefault` to `every` or `final` answers
99
99
  this in advance. It then asks whether to run an extra lifecycle review
100
100
  automatically at each checkpoint, unless `workflow.autoReviewAtHillCheckpoints`
101
101
  is set. Both answers are written to `plan.md` and are not asked again when you
102
- resume. A lite project has no checkpoints and skips both questions.
102
+ resume. A lite project has no checkpoints and skips both questions. A brief
103
+ or goal project skips them too unless its `oat_plan_hill_phases` lists phases
104
+ explicitly; for those modes, `[]` means no checkpoints.
105
+
106
+ **Brief projects:** Each `## Phase pNN:` block in the brief is one
107
+ phase-unit with Intent and Exit evidence instead of planned tasks. The root
108
+ records the phase's `**Base:**` in a phase-start commit before dispatch, the
109
+ committing owner opens `### Task pNN-tNN` execution records in
110
+ `implementation.md` as work happens and writes `**Head:**` when the phase's
111
+ work ends, a fresh reviewer reviews the anchored `Base..Head` range, and only
112
+ the root writes `**Status:** completed` once review dispositions and selected
113
+ gates settle. Progress and the next-phase decision count phase-units, never
114
+ records.
115
+
116
+ **Goal projects:** every brief rule above applies, and each run gets a scope
117
+ from the router: the active milestone's ordered phase set, a recovery scope
118
+ for an older delivery, or the terminal scope after the goal is declared met.
119
+ Implement never widens a scope to another milestone's phases. When every phase
120
+ in the milestone's scope is accepted, it runs the scoped milestone closeout:
121
+ the implement exit gate, written to `oat_milestone_gates[mNN].exit`, then
122
+ `oat_milestone_status: reviewing` and a hand-off to
123
+ `oat-project-review-provide` with `code mNN: <ordered phase ids>`. It never
124
+ activates a milestone, registers a delivery, or writes `declared_met`.
125
+ Terminal closeout starts only after the declaration, and when delivery
126
+ coverage already holds at the `pr` step's position it records that step as
127
+ `satisfied_by: { pr: delivery-coverage }`.
103
128
 
104
129
  **What it does without asking:** After those questions, the run continues
105
130
  until a checkpoint, a blocker or the end of the plan without asking again,
@@ -16,6 +16,10 @@ and updates project state.
16
16
  in dependency order.
17
17
  - **Task boundary:** each task still produces exactly one bounded, verified
18
18
  commit.
19
+ - **Brief phase-units:** in a brief or goal project each phase carries Intent and Exit
20
+ evidence instead of tasks; execution records are opened in the journal as
21
+ work happens, and the phase's `**Base:**`/`**Head:**` anchors scope its
22
+ review.
19
23
  - **Prevention boundary:** formatting, declared task verification, and
20
24
  applicable cheap checks run before the task commit.
21
25
  - **Recovery boundary:** an eligible post-commit defect may produce a separate
@@ -514,6 +518,17 @@ and declare no parallel groups, so lite implementation is always sequential;
514
518
  `oat project validate-plan` enforces both rules. Work that needs more than one
515
519
  phase should promote to quick rather than declare a parallel group.
516
520
 
521
+ Brief plans may declare parallel groups of taskless phases once those phases
522
+ are concrete and pass the independence test (no shared files, state,
523
+ generated output, fixtures, or services, and no sequential dependency). A
524
+ group member's per-phase review runs before fan-in on
525
+ `EXPECTED_HEAD..<worktree head>`. At fan-in the root writes every member's
526
+ `**Base:**` as the group's fork commit and its `**Head:**` as the member's
527
+ integration head, which is normally a merge commit but may be the last
528
+ cherry-picked commit; review scope checks only the shared fork base and that
529
+ member heads advance in document order. The fan-in anchors govern the
530
+ `pNN-pMM` and `final` review scopes.
531
+
517
532
  ## Synced projects in worktrees
518
533
 
519
534
  A tracked `.oat/projects/synced/<project>.json` record lets every repository
@@ -30,7 +30,7 @@ instead of `/`):
30
30
  summary that `/oat-repo-knowledge-index` writes under
31
31
  `.oat/repo/knowledge/`. If that folder has no Markdown file, progress tells
32
32
  you to run `/oat-repo-knowledge-index` and stops without a project report,
33
- whatever the project's mode; quick, lite and imported projects never
33
+ whatever the project's mode; quick, lite, brief, goal and imported projects never
34
34
  needed the index before, so this can be the first time you see it. Run
35
35
  `/oat-repo-knowledge-index` once and then run progress again, or skip to
36
36
  step 3: `/oat-project-next` itself does not check for the index (spec-driven
@@ -81,6 +81,25 @@ durable `## Reviews` disposition, and a substantive task; only then do they
81
81
  recommend `oat-project-implement`. Recommendations for lite, spec-driven, and
82
82
  import projects are unchanged, because the predicate is quick-workflow policy.
83
83
 
84
+ For a brief project, the router counts phase-units from the journal. While the
85
+ brief is not yet approved, it recommends `oat-project-brief`. After
86
+ implementation, while any phase is provisional or not yet accepted with
87
+ `**Status:** completed`, it recommends `oat-project-implement` ("Incomplete
88
+ phase-units remain in the active scope") before every later check. The
89
+ `.oat/state.md` dashboard does not read phase-units, so at the end of
90
+ implementation it prints a note that `oat project status` and
91
+ `oat-project-next` are the authority for brief projects.
92
+
93
+ For a goal project, the router also reads the milestone status, any pending
94
+ `oat_goal_recovery` record, the milestone gate carriers, and the delivery
95
+ registry. It sends `aligning` and `delivered` milestones to `oat-project-goal`,
96
+ scopes `oat-project-implement` to the active milestone's phases (or a recovery
97
+ scope), routes the integrated review as `code mNN: …` to
98
+ `oat-project-review-provide`, and routes registration as `deliver mNN` to
99
+ `oat-project-pr-progress`. In the implement phase the dashboard prints a goal
100
+ note that `oat project status` and `oat-project-next` are the authority for
101
+ goal milestone routing.
102
+
84
103
  ## What travels
85
104
 
86
105
  - The project ref carries the complete active artifact tree and its history.