@open-agent-toolkit/cli 0.3.19 → 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 (119) hide show
  1. package/README.md +2 -1
  2. package/assets/agents/oat-phase-implementer.md +26 -3
  3. package/assets/agents/oat-reviewer.md +8 -3
  4. package/assets/bundle-metadata.json +1 -1
  5. package/assets/docs/reference/cli-reference.md +12 -7
  6. package/assets/docs/reference/oat-directory-structure.md +1 -0
  7. package/assets/docs/reference/project-artifacts.md +56 -1
  8. package/assets/docs/reference/project-state-machine.md +41 -7
  9. package/assets/docs/skills/brainstorm.md +3 -2
  10. package/assets/docs/skills/index.md +13 -10
  11. package/assets/docs/workflows/advanced/autonomy.md +3 -1
  12. package/assets/docs/workflows/advanced/dispatch-ceiling.md +2 -2
  13. package/assets/docs/workflows/advanced/workflow-gates.md +17 -4
  14. package/assets/docs/workflows/approvals-and-automation.md +21 -10
  15. package/assets/docs/workflows/choose-workflow.md +17 -9
  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 +80 -7
  19. package/assets/docs/workflows/projects/closeout/pr-flow.md +7 -1
  20. package/assets/docs/workflows/projects/execution/execution-skills.md +16 -3
  21. package/assets/docs/workflows/projects/execution/implementation-execution.md +1 -1
  22. package/assets/docs/workflows/projects/execution/picking-up-projects.md +11 -1
  23. package/assets/docs/workflows/projects/lifecycle.md +108 -9
  24. package/assets/docs/workflows/projects/planning/hill-checkpoints.md +6 -6
  25. package/assets/docs/workflows/projects/planning/planning-skills.md +9 -7
  26. package/assets/docs/workflows/projects/planning/starting-projects.md +57 -11
  27. package/assets/docs/workflows/projects/reviews/index.md +22 -1
  28. package/assets/docs/workflows/projects/reviews/review-flavors.md +5 -3
  29. package/assets/public-package-versions.json +4 -4
  30. package/assets/skills/oat-brainstorm/SKILL.md +34 -9
  31. package/assets/skills/oat-brainstorm/references/destinations.md +6 -3
  32. package/assets/skills/oat-docs/SKILL.md +7 -3
  33. package/assets/skills/oat-pjm-review-backlog/SKILL.md +2 -2
  34. package/assets/skills/oat-project-autonomous/SKILL.md +9 -3
  35. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +151 -132
  36. package/assets/skills/oat-project-brief/SKILL.md +1 -1
  37. package/assets/skills/oat-project-brief/references/brief-contract.md +458 -9
  38. package/assets/skills/oat-project-brief/references/docs/autonomy-contract.md +151 -132
  39. package/assets/skills/oat-project-brief/references/docs/gate-approval-record.md +9 -0
  40. package/assets/skills/oat-project-capture/SKILL.md +2 -2
  41. package/assets/skills/oat-project-complete/SKILL.md +14 -5
  42. package/assets/skills/oat-project-discover/SKILL.md +3 -2
  43. package/assets/skills/oat-project-document/SKILL.md +12 -6
  44. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +151 -132
  45. package/assets/skills/oat-project-goal/SKILL.md +697 -0
  46. package/assets/skills/oat-project-goal/references/docs/autonomy-contract.md +412 -0
  47. package/assets/skills/oat-project-goal/references/docs/gate-approval-record.md +93 -0
  48. package/assets/skills/oat-project-implement/SKILL.md +1 -1
  49. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +67 -0
  50. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +151 -132
  51. package/assets/skills/oat-project-implement/references/docs/gate-approval-record.md +9 -0
  52. package/assets/skills/oat-project-implement/references/phase-execution.md +10 -3
  53. package/assets/skills/oat-project-implement/references/plan-and-resume.md +28 -1
  54. package/assets/skills/oat-project-lite/SKILL.md +1 -1
  55. package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +151 -132
  56. package/assets/skills/oat-project-new/SKILL.md +3 -3
  57. package/assets/skills/oat-project-next/SKILL.md +45 -15
  58. package/assets/skills/oat-project-next/references/docs/gate-approval-record.md +9 -0
  59. package/assets/skills/oat-project-plan/SKILL.md +14 -3
  60. package/assets/skills/oat-project-plan-writing/SKILL.md +6 -4
  61. package/assets/skills/oat-project-pr-final/SKILL.md +51 -1
  62. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +151 -132
  63. package/assets/skills/oat-project-pr-progress/SKILL.md +97 -3
  64. package/assets/skills/oat-project-progress/SKILL.md +38 -5
  65. package/assets/skills/oat-project-progress/references/docs/gate-approval-record.md +9 -0
  66. package/assets/skills/oat-project-quick-start/SKILL.md +14 -9
  67. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +151 -132
  68. package/assets/skills/oat-project-quick-start/references/docs/gate-approval-record.md +9 -0
  69. package/assets/skills/oat-project-reconcile/SKILL.md +31 -2
  70. package/assets/skills/oat-project-review-provide/SKILL.md +79 -13
  71. package/assets/skills/oat-project-review-receive/SKILL.md +70 -1
  72. package/assets/skills/oat-project-revise/SKILL.md +25 -1
  73. package/assets/skills/oat-project-summary/SKILL.md +60 -5
  74. package/assets/skills/oat-wave-execute/SKILL.md +2 -2
  75. package/assets/templates/state.md +1 -1
  76. package/dist/commands/project/closeout-check/closeout-invariant.d.ts +119 -3
  77. package/dist/commands/project/closeout-check/closeout-invariant.d.ts.map +1 -1
  78. package/dist/commands/project/closeout-check/closeout-invariant.js +454 -2
  79. package/dist/commands/project/closeout-check/index.d.ts +21 -3
  80. package/dist/commands/project/closeout-check/index.d.ts.map +1 -1
  81. package/dist/commands/project/closeout-check/index.js +190 -4
  82. package/dist/commands/project/complete-state/index.d.ts +2 -1
  83. package/dist/commands/project/complete-state/index.d.ts.map +1 -1
  84. package/dist/commands/project/complete-state/index.js +7 -1
  85. package/dist/commands/project/delivery/check.d.ts +66 -0
  86. package/dist/commands/project/delivery/check.d.ts.map +1 -0
  87. package/dist/commands/project/delivery/check.js +232 -0
  88. package/dist/commands/project/delivery/evidence.d.ts +171 -0
  89. package/dist/commands/project/delivery/evidence.d.ts.map +1 -0
  90. package/dist/commands/project/delivery/evidence.js +902 -0
  91. package/dist/commands/project/delivery/index.d.ts +7 -0
  92. package/dist/commands/project/delivery/index.d.ts.map +1 -0
  93. package/dist/commands/project/delivery/index.js +13 -0
  94. package/dist/commands/project/delivery/refresh.d.ts +110 -0
  95. package/dist/commands/project/delivery/refresh.d.ts.map +1 -0
  96. package/dist/commands/project/delivery/refresh.js +441 -0
  97. package/dist/commands/project/index.d.ts.map +1 -1
  98. package/dist/commands/project/index.js +2 -0
  99. package/dist/commands/project/log/append.d.ts +6 -0
  100. package/dist/commands/project/log/append.d.ts.map +1 -1
  101. package/dist/commands/project/log/append.js +6 -1
  102. package/dist/commands/project/new/scaffold.d.ts.map +1 -1
  103. package/dist/commands/project/new/scaffold.js +47 -1
  104. package/dist/commands/project/promote/promote.d.ts +15 -1
  105. package/dist/commands/project/promote/promote.d.ts.map +1 -1
  106. package/dist/commands/project/promote/promote.js +99 -15
  107. package/dist/commands/project/validate-plan/index.d.ts.map +1 -1
  108. package/dist/commands/project/validate-plan/index.js +10 -0
  109. package/dist/commands/project/validate-plan/profiles.d.ts +19 -4
  110. package/dist/commands/project/validate-plan/profiles.d.ts.map +1 -1
  111. package/dist/commands/project/validate-plan/profiles.js +153 -2
  112. package/dist/commands/shared/frontmatter.d.ts +1 -1
  113. package/dist/commands/shared/frontmatter.d.ts.map +1 -1
  114. package/dist/commands/shared/frontmatter.js +1 -0
  115. package/dist/commands/state/generate.d.ts.map +1 -1
  116. package/dist/commands/state/generate.js +35 -4
  117. package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -1
  118. package/dist/commands/tools/shared/pack-manifest.js +1 -0
  119. package/package.json +2 -2
@@ -5,7 +5,7 @@ disable-model-invocation: true
5
5
  user-invocable: true
6
6
  allowed-tools: Read, Write, Bash(awk:*), Bash(gh:*), Bash(git:*), Bash(mktemp:*), Bash(oat:*), Bash(rm:*), Glob, Grep, AskUserQuestion
7
7
  metadata:
8
- version: 1.3.3
8
+ version: 1.3.4
9
9
  ---
10
10
 
11
11
  # Progress PR
@@ -16,7 +16,7 @@ Create a progress PR description (typically at a plan phase boundary) and write
16
16
 
17
17
  Generate a PR-ready summary that is:
18
18
 
19
- - grounded in OAT artifacts (mode-aware: spec-driven uses spec/design; quick/import may use discovery/import reference; lite uses the five plan.md contract sections; brief uses the Project Brief's Outcomes and each phase's Intent and Exit evidence)
19
+ - grounded in OAT artifacts (mode-aware: spec-driven uses spec/design; quick/import may use discovery/import reference; lite uses the five plan.md contract sections; brief and goal use the Project Brief's Outcomes and each phase's Intent and Exit evidence)
20
20
  - scoped to a specific phase (pNN) or an explicit git range
21
21
  - easy to paste into GitHub (or used with `gh pr create` if desired)
22
22
 
@@ -175,6 +175,16 @@ commit grep above (`oat-project-brief/references/brief-contract.md` section
175
175
  or a contradictory ordering stops the PR: route to `oat-project-reconcile`
176
176
  and never narrow the range silently.
177
177
 
178
+ **Goal mode (`oat_workflow_mode: goal`).** A goal progress PR is a milestone
179
+ delivery, and this skill is its registration owner. The scope is the router's
180
+ `deliver mNN` or `deliver mNN/dNN` context, or a pending `oat_goal_recovery`
181
+ record at stage `delivering`: the milestone's ordered phase set from the shared
182
+ Milestones reader, or a registered delivery's frozen scope. Never derive it from
183
+ a `pNN-pMM` range or commit labels. The Git range for the PR description is the
184
+ set's first anchored base through its last anchored head; disclose phases of
185
+ other milestones that fall inside it. Step 5.5 runs before Step 6 and replaces
186
+ its optional PR creation.
187
+
178
188
  ### Step 2: Load Artifacts (Mode-Aware)
179
189
 
180
190
  Resolve workflow mode from `state.md` (default `spec-driven`):
@@ -313,7 +323,7 @@ oat_project: { PROJECT_PATH }
313
323
 
314
324
  ## Goals / Non-Goals
315
325
 
316
- {goals addressed by this phase, from available requirement artifacts: spec in spec-driven mode; discovery/import reference in quick/import mode; Summary, Decisions, Assumptions, Out of Scope, and Validation Criteria in plan.md for lite; the phase's Intent and Exit evidence plus the brief's Outcomes for brief}
326
+ {goals addressed by this phase, from available requirement artifacts: spec in spec-driven mode; discovery/import reference in quick/import mode; Summary, Decisions, Assumptions, Out of Scope, and Validation Criteria in plan.md for lite; the phase's Intent and Exit evidence plus the brief's Outcomes for brief and goal}
317
327
 
318
328
  ## Changes
319
329
 
@@ -344,6 +354,89 @@ Only include links to artifacts that actually exist in the project. Omit any tha
344
354
  - Reviews: `[reviews/]({REPO_WEB}/tree/{BRANCH}/{PROJECT_REL}/reviews)` (fallback: `{PROJECT_PATH}/reviews/`) — include when active `reviews/` is tracked; omit archived review paths and any target that still matches a `localPaths` pattern
345
355
  ```
346
356
 
357
+ ### Step 5.5: Goal Delivery Registration (`goal` only)
358
+
359
+ `oat-project-brief/references/brief-contract.md` sections 12.5–12.8 govern;
360
+ this step states only the order. It never writes review dispositions, exit
361
+ gate outcomes, or `oat_milestone` itself, and it never registers a delivery
362
+ without passing evidence.
363
+
364
+ 1. **Refresh.** When `oat_deliveries` has entries, run
365
+ `oat project delivery refresh --project "$PROJECT_PATH" --json` and commit
366
+ the persisted observations as bookkeeping.
367
+ 2. **Check.** Run
368
+ `oat project delivery check --project "$PROJECT_PATH" --subject <mNN|dNN> --json`.
369
+ Register only on `status: ok` (exit 0): a passed, fresh integrated review
370
+ and an allowed, fresh exit carrier (`exit.source: milestone-carrier`).
371
+ 3. **Stale evidence stops before registration.** When refresh or check
372
+ reports the integrated review or the `exit` carrier not fresh, choose the
373
+ recovery stage by the section 12.5 missing-evidence order (a missing,
374
+ blocked or stale exit carrier → `exit_gate`; otherwise a missing or stale
375
+ integrated review → `reviewing`) and:
376
+ - **active milestone's delivery:** write `oat_milestone_status: reviewing`
377
+ and `oat_goal_recovery: { milestone, delivery_id, phase_ids, stage,
378
+ review_artifact: null }`;
379
+ - **older milestone's delivery:** write only that targeted
380
+ `oat_goal_recovery` record; the active milestone's `oat_milestone`,
381
+ `oat_milestone_status`, `oat_current_task_id`, and `oat_current_task`
382
+ stay unchanged.
383
+
384
+ Commit and stop, reporting the stage owner. Never register stale evidence.
385
+
386
+ **3a. Already-registered active delivery.** When the active milestone
387
+ (`oat_milestone`) already has a non-superseded registered delivery (a `dNN`
388
+ entry with `status: open` or `at_endpoint`), after its recovery completes at
389
+ `delivering` or when `oat-project-goal` hands back a stale `delivered`
390
+ milestone, run items 1–2 for that `dNN` instead of registering. On
391
+ `status: ok`, in one bookkeeping write, clear any `oat_goal_recovery` that
392
+ targets it, write `oat_milestone_status: delivered`, and project
393
+ `oat_pr_status` and `oat_pr_url` from its latest member's observed status.
394
+ Register nothing, create no pull request, and append no log entry. On a
395
+ not-fresh report, apply item 3 (active milestone's delivery). A `registering`
396
+ entry is not registered yet and resumes at item 5.
397
+
398
+ 4. **Idempotent registration.** When the active milestone has no
399
+ non-superseded registered delivery (item 3a), allocate the next unused
400
+ `dNN` and write its entry with `status: registering`: `milestone`, the
401
+ frozen `scope` (the ordered set), the agreed `endpoint` from the brief's
402
+ Delivery endpoint and authority, `kind: pr`, the persisted `lookup` keys
403
+ (`repository` from `gh repo view --json nameWithOwner`, `head_branch`,
404
+ `head_sha_at_registration` from `git rev-parse HEAD`), the
405
+ `integrated_review` (`artifact`, `scope`, `bound_revisions`,
406
+ `disposition: passed`) and the accepted `exit_gate` copied from the
407
+ milestone's current exit carrier, so the gate result is captured with the
408
+ delivery evidence. A replacement writes `covers_scope_of: <predecessor>`
409
+ and the predecessor's `superseded_by: <dNN>` in the same write; an additive
410
+ correction writes `corrects_delivery_id` instead. Commit this registration
411
+ record before creating anything.
412
+ 5. **Create or attach.** Generate the PR description (Steps 2–5), push the
413
+ branch, and create the pull request with the Step 6 commands. On resume
414
+ with a `registering` entry, first run
415
+ `gh pr list --repo <repository> --head <head_branch> --state all --json url,headRefOid`:
416
+ exactly one match is attached without creating a duplicate; zero matches
417
+ create once; more than one stops and routes to `oat-project-reconcile`.
418
+ 6. **Record.** Write the member (`url`, `base`, `reviewed_head`),
419
+ `status: open`, `oat_milestone_status: delivered` for the active milestone,
420
+ `oat_pr_status: open`, `oat_pr_url`, and `oat_phase_status: pr_open`;
421
+ commit this registration bookkeeping.
422
+ 7. **Log.** After that registration commit, append exactly one structural
423
+ entry and commit it in this same step:
424
+ `oat project log append --project "$PROJECT_PATH" --structural --producer oat-project-pr-progress --ref <dNN> --idempotency-key "<goal-slug>-register-<dNN>" --body "Registered <dNN> for <mNN> (<ordered phase ids>) at <url>; <goal-slug>-register-<dNN>"`.
425
+ Never pre-check log configuration: the helper no-ops when logging is
426
+ disabled.
427
+ 8. **Recovery targets.** For a pending `oat_goal_recovery` at stage
428
+ `delivering`, push the targeted delivery's fixes to its existing member,
429
+ run steps 1–2 for that `dNN`, and on `status: ok` clear the record
430
+ (`oat_goal_recovery: null`). When the record's milestone is not
431
+ `oat_milestone` (an older delivery), that is the whole write: the active
432
+ milestone stays untouched. When it targets the active milestone's own
433
+ delivery, fall through to item 3a, which clears the record and writes
434
+ `delivered` in one step.
435
+
436
+ `delivered` means registered, open and review-ready. Activation of the next
437
+ milestone belongs to `oat-project-goal` once the delivery reaches its agreed
438
+ endpoint.
439
+
347
440
  ### Step 6: Optional - Open PR
348
441
 
349
442
  For a synced project whose user chooses to open the PR, use this ordered flow:
@@ -414,4 +507,5 @@ Do not assume `gh` is installed; if missing, instruct manual PR creation using t
414
507
  - Residual active review artifacts are archived before PR generation continues
415
508
  - Scope determined (phase or explicit range)
416
509
  - PR description artifact written to `{PROJECT_PATH}/pr/`
510
+ - Goal mode: the delivery was registered only on a deliverable `delivery check`, idempotently, with its exit-gate result captured and one structural log entry per registration
417
511
  - User has clear next step to open PR (manual or gh)
@@ -5,7 +5,7 @@ disable-model-invocation: false
5
5
  user-invocable: true
6
6
  allowed-tools: Read, Glob, Grep, Bash(git:*), Bash(oat:*), AskUserQuestion
7
7
  metadata:
8
- version: 1.4.6
8
+ version: 1.4.7
9
9
  ---
10
10
 
11
11
  # Progress Router
@@ -163,6 +163,7 @@ Start a new project:
163
163
  oat-project-quick-start - Start a quick workflow project
164
164
  oat-project-lite - Start a lite workflow (interview -> plan -> implement)
165
165
  oat-project-brief - Start a brief workflow (interview -> brief -> implement)
166
+ oat-project-goal - Start a goal workflow (interview -> brief and milestones -> deliver each milestone)
166
167
  oat-project-import-plan - Import an external markdown plan into OAT
167
168
  ```
168
169
 
@@ -174,7 +175,7 @@ Read `{project}/state.md` frontmatter:
174
175
 
175
176
  - `oat_phase` - Current phase
176
177
  - `oat_phase_status` - in_progress or complete
177
- - `oat_workflow_mode` - spec-driven | quick | import | lite | brief
178
+ - `oat_workflow_mode` - spec-driven | quick | import | lite | brief | goal
178
179
  - `oat_blockers` - Any blockers
179
180
  - `oat_hill_checkpoints` - Configured gates (e.g., `["discovery", "spec", "design"]`)
180
181
  - `oat_hill_completed` - Completed HiLL checkpoints
@@ -183,6 +184,10 @@ Read `{project}/state.md` frontmatter:
183
184
  - `oat_implement_exit_gate` - The implementation exit gate record
184
185
  - `oat_quick_start_gate` - The quick-start plan gate record
185
186
  - `oat_brief_gate` - The brief artifact gate record (brief mode)
187
+ - `oat_milestone`, `oat_milestone_status`, `oat_goal_status`, `oat_goal_recovery`,
188
+ `oat_milestone_gates`, and `oat_deliveries` - The active milestone, its
189
+ status, the declaration, any pending recovery, the per-milestone `plan` and
190
+ `exit` gate carriers, and the delivery registry (goal mode)
186
191
 
187
192
  Blockers may be legacy reason strings or structured `{task_id, reason, since}`
188
193
  records. Display strings as their reason; display records as
@@ -209,6 +214,9 @@ state or routing merely to render blockers.
209
214
  Gate Overrides: {gate-aware skill keys from oat_skill_gate_overrides, or "None"}
210
215
  Quick-Start Gate: {status}/{disposition}, decided {decided_at}, fingerprint {config_fingerprint} (as recorded), or "None"
211
216
  Brief Gate: {status}/{disposition}, decided {decided_at}, fingerprint {config_fingerprint} (as recorded), or "None" (brief mode only)
217
+ Milestone: {oat_milestone} ({oat_milestone_status}), {accepted}/{total} phases accepted in its scope (goal mode only)
218
+ Milestone Gates: {mNN} plan {status}/{disposition}, exit {status}/{disposition} {freshness} per milestone, as recorded (goal mode only)
219
+ Deliveries: {dNN} {status} ({endpoint} endpoint) per registry entry, or "None" (goal mode only)
212
220
  Exit Gate: {status}/{disposition} as recorded, or "None"
213
221
  Blockers: {oat_blockers or "None"}
214
222
  Next: {recommended_skill}
@@ -232,6 +240,13 @@ implementation workflow and is not re-derived here. Each record adds no route
232
240
  and no warning: quick plan readiness stays the single routing rule for quick
233
241
  plans, and the brief record is provenance only, read back by no route. Show "None" for an absent record, and never write or repair one here.
234
242
 
243
+ Goal milestone carriers (`oat_milestone_gates[mNN].plan` and `.exit`) share
244
+ the same core plus `resolution`, `subject` and `freshness`
245
+ (`oat-project-brief/references/brief-contract.md` section 12.4). Report them as
246
+ recorded, including `freshness` and `freshness_reason`; unlike the brief
247
+ record, the router reads these carriers, so never recompute or repair them
248
+ here.
249
+
235
250
  ### Step 5: Determine Next Skill
236
251
 
237
252
  Based on project state, recommend next action.
@@ -243,6 +258,7 @@ Read `oat_workflow_mode` from `state.md` frontmatter:
243
258
  - `import`
244
259
  - `lite`
245
260
  - `brief`
261
+ - `goal`
246
262
 
247
263
  **HiLL override (apply before phase routing):**
248
264
 
@@ -283,8 +299,9 @@ fi
283
299
 
284
300
  If drift is detected, recommend `oat-project-reconcile` alongside the normal implementation skill.
285
301
 
286
- In brief mode `plan.md` carries no tasks, so skip the `PLAN_TASKS` comparison;
287
- compare `(pNN-tNN)` commits against the journal's execution records instead.
302
+ In brief and goal modes `plan.md` carries no tasks, so skip the `PLAN_TASKS`
303
+ comparison; compare `(pNN-tNN)` commits against the journal's execution
304
+ records instead.
288
305
 
289
306
  Routing matrix by mode:
290
307
 
@@ -359,6 +376,21 @@ Brief progress counts phase-units: report `{accepted}/{total} phases accepted`
359
376
  from `oat project status`, never task counts. A provisional phase is never
360
377
  accepted, and execution records never change the totals.
361
378
 
379
+ **Goal mode (`oat_workflow_mode: goal`):** before milestone state exists, the
380
+ `plan` / `in_progress` row continues `oat-project-goal`. After it exists, the
381
+ next skill is the control plane's recommendation (`oat project status --json`,
382
+ `recommendation.skill` with its `context`), which follows the goal priority
383
+ that `oat-project-next` tabulates: terminal recovery after a declaration,
384
+ review feedback, a pending `oat_goal_recovery`, invalid membership, then the
385
+ milestone status (`aligning` → `oat-project-goal`; `implementing` →
386
+ `oat-project-implement`; `reviewing` → scoped closeout or the review owners by
387
+ missing evidence; `delivering` → `oat-project-pr-progress`; `delivered` →
388
+ `oat-project-goal` to re-align). Count phase-units per active milestone: report
389
+ `{accepted}/{total} phases accepted in {mNN}` over the milestone's ordered
390
+ phase set from `oat project status --json` (`milestoneMembership`), plus the
391
+ whole-brief total. A pending recovery reports its own scope beside the active
392
+ milestone; it never replaces it.
393
+
362
394
  **If blockers exist:**
363
395
 
364
396
  ```
@@ -383,9 +415,10 @@ Knowledge:
383
415
  Workflow:
384
416
  oat-project-lite - Start a lite workflow (interview -> plan -> implement)
385
417
  oat-project-brief - Start a brief workflow (interview -> brief -> implement)
418
+ oat-project-goal - Start a goal workflow (interview -> brief and milestones -> deliver each milestone)
386
419
  oat-project-quick-start - Start a quick workflow (discover -> plan -> implement)
387
420
  oat-project-import-plan - Import an external markdown plan and normalize plan.md
388
- oat-project-promote-spec-driven - Promote quick/import/lite project to spec-driven lifecycle (lite and brief promote via quick)
421
+ oat-project-promote-spec-driven - Promote quick/import/lite project to spec-driven lifecycle (lite, brief, and goal promote via quick)
389
422
  oat-project-discover - Start discovery phase (requirements gathering)
390
423
  oat-project-design - Confirm requirements + create technical design (folds spec authoring inline)
391
424
  oat-project-spec - Optional standalone specification (most projects skip this — design handles it)
@@ -62,6 +62,15 @@ replaces the record.
62
62
  core, written and read under the same rules as `oat_quick_start_gate`. It is
63
63
  absent when no gate is configured, and nothing routes on it: it is provenance
64
64
  only.
65
+ - **`oat_milestone_gates[mNN].plan` and `.exit`** (goal mode;
66
+ `oat-project-goal` writes `plan` after each milestone's approval, and
67
+ `oat-project-implement`'s milestone closeout writes `exit`) carry the core
68
+ plus `resolution` (`configured`, `no_gate`, or `project_disabled`), a
69
+ `subject` binding (`plan` or `code` and the milestone's ordered phase set),
70
+ and derived `freshness` with `freshness_reason`. `reviewed_head` is `null`
71
+ for `no_gate` and `project_disabled`, and `no_gate` is written rather than
72
+ omitted because routing reads these carriers. `oat-project-brief`'s
73
+ `references/brief-contract.md` section 12.4 is their contract.
65
74
 
66
75
  ## Reading a quick-start record
67
76
 
@@ -7,7 +7,7 @@ disable-model-invocation: true
7
7
  user-invocable: true
8
8
  allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion, Task
9
9
  metadata:
10
- version: 2.3.20
10
+ version: 2.3.21
11
11
  ---
12
12
 
13
13
  # Quick Start Project
@@ -152,11 +152,13 @@ Step 3.7 — against `"$PROJECT_PATH/plan.md"`:
152
152
  `oat-project-implement/SKILL.md` and follow it to begin execution.
153
153
 
154
154
  **Promoted-brief resume.** When the resumed `plan.md` frontmatter records
155
- `oat_promoted_from: brief`, the project came from
156
- `oat project promote --to quick` (brief contract section 11), and quick plan
157
- readiness stays false while `oat_promotion_pending_phases` lists any phase
158
- (condition 6). `discovery.md` was rendered from the brief and counts as
159
- existing output, so re-enter at Step 2.9 and then:
155
+ `oat_promoted_from: brief` or `oat_promoted_from: goal`, the project came from
156
+ `oat project promote --to quick` (brief contract section 11; a goal promotes
157
+ only at a settled delivery boundary), and quick plan readiness stays false
158
+ while `oat_promotion_pending_phases` lists any phase (condition 6). The same
159
+ resume serves both origins; there is no second readiness predicate.
160
+ `discovery.md` was rendered from the brief and counts as existing output, so
161
+ re-enter at Step 2.9 and then:
160
162
 
161
163
  1. Author executable `### Task pNN-tNN:` tasks, under Step 3's plan
162
164
  requirements, for every phase in `oat_promotion_pending_phases`, in document
@@ -166,7 +168,8 @@ existing output, so re-enter at Step 2.9 and then:
166
168
  ID is reused.
167
169
  2. In the same plan write that adds a phase's tasks, remove that phase from
168
170
  `oat_promotion_pending_phases`; when the last one is authored, write
169
- `oat_promotion_pending_phases: []`. Keep `oat_promoted_from: brief`.
171
+ `oat_promotion_pending_phases: []`. Keep `oat_promoted_from` unchanged
172
+ (`brief` or `goal`).
170
173
  3. Present historical tasks (those copied from completed execution records and
171
174
  any synthesized `Accepted via phase evidence` task) as already accepted:
172
175
  their journal markers already satisfy quick progress, and they and the
@@ -176,7 +179,9 @@ existing output, so re-enter at Step 2.9 and then:
176
179
  configured gate see every task, with the historical ones labeled as accepted
177
180
  context, and the disposition Step 3.7 records is the sign-off for the newly
178
181
  authored tasks only. Existing `## Reviews` rows and the promotion provenance
179
- line stay untouched.
182
+ line stay untouched. A promoted goal also keeps its `oat_deliveries`,
183
+ `oat_milestone_gates` and `oat_goal_outcome_audit` in `state.md` as
184
+ history; quick never edits them.
180
185
 
181
186
  If no valid active project exists:
182
187
 
@@ -658,7 +663,7 @@ Required frontmatter updates:
658
663
 
659
664
  **Promoted-brief provenance.** Promotion already wrote `oat_plan_source: quick`,
660
665
  and this step leaves it unchanged; the origin lives in `oat_promoted_from:
661
- brief`. Re-asserting the values above never removes `oat_promoted_from` or
666
+ brief` or `oat_promoted_from: goal`. Re-asserting the values above never removes `oat_promoted_from` or
662
667
  `oat_promotion_pending_phases`; only the Step 0.5 promoted-brief resume shrinks
663
668
  that list as it authors each phase.
664
669