@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
@@ -5,7 +5,7 @@ disable-model-invocation: false
5
5
  user-invocable: true
6
6
  allowed-tools: Read, Write, Bash(git:*), Bash(oat:*), Glob, Grep, AskUserQuestion, Task
7
7
  metadata:
8
- version: 1.6.9
8
+ version: 1.6.11
9
9
  ---
10
10
 
11
11
  # Receive Review
@@ -385,6 +385,109 @@ Applies to `code` reviews only. (`artifact` reviews are handled via Step 2.6, th
385
385
  3. If scope is `pNN-pMM` (contiguous phase range): add fix tasks to the last phase in the range (`pMM`)
386
386
  4. If scope is `final` or SHA/range review: add fix tasks to a new "Review Fixes" phase or the last phase
387
387
 
388
+ **Brief modes (`oat_workflow_mode: brief`).** The brief never carries planned
389
+ tasks, so fix work becomes execution records in the journal and
390
+ `oat-project-brief/references/brief-contract.md` (sections 3, 7, and 10) wins
391
+ where this skill differs. Resolve the target phase and apply the late-fix rule:
392
+
393
+ 1. **Reviewed phase.** For `pNN` or `p-revN`, the reviewed phase is that
394
+ phase. For `pNN-pMM`, `final`, or an explicit SHA range, it is the last
395
+ phase in the artifact's ordered `oat_review_phase_ids`; when that field is
396
+ absent or empty, it is the last phase in document order whose journal
397
+ section has a `**Base:**`.
398
+ 2. **Late-fix rule.** If no later phase in document order has a `**Base:**`
399
+ in `implementation.md`, the fixes go under the reviewed phase, whose
400
+ journal `**Status:** completed` line is rewritten to `**Status:** in_progress`
401
+ (an `in_progress` phase stays `in_progress`). Its `**Base:**` never changes;
402
+ the fix commits advance its `**Head:**` when the phase ends again.
403
+ 3. Otherwise a later phase has started: append a revision phase with the next
404
+ unused `p-revN` ID. In `plan.md`, add it after the last phase block (before
405
+ `## Parallelism` when present) in the exact phase grammar plus the marker:
406
+
407
+ ```markdown
408
+ ## Phase p-revN: Review fixes for pNN
409
+
410
+ **Intent:** resolve {finding IDs} from reviews/archived/{REVIEW_FILENAME}
411
+ **Exit evidence:** a passing re-review of p-revN that re-evaluates pNN's findings
412
+ **Provisional:** no
413
+ **Corrects:** pNN
414
+ ```
415
+
416
+ In `implementation.md`, add the matching `## Phase p-revN: Review fixes for pNN`
417
+ section after the last phase section with `**Status:** pending` and
418
+ `**Corrects:** pNN` directly under the heading, and a Progress Overview row.
419
+ Add a pending `p-revN` `code` row to the brief's `## Reviews` table and
420
+ update the `## Implementation Complete` phase total. The corrected phase
421
+ keeps its original anchors and status.
422
+
423
+ Never write `### Task` headings into the brief, and never write `**Base:**` or
424
+ `**Head:**`: `oat-project-implement` records anchors when the phase starts and
425
+ ends.
426
+
427
+ **Goal mode (`oat_workflow_mode: goal`).** The brief-mode rules above apply,
428
+ with `oat-project-brief/references/brief-contract.md` section 12 winning where
429
+ this skill differs (12.3 transitions, 12.5 the goal ladder exception, 12.6
430
+ explicit scopes and recovery, 12.7 the registry). A phase-unit review (`pNN`,
431
+ `p-revN`) is received exactly as in brief mode. For an integrated milestone or
432
+ delivery review:
433
+
434
+ 1. **Identity.** The target is the artifact's `oat_review_requested_scope`
435
+ (`mNN` or `mNN/dNN`) with its ordered `oat_review_phase_ids`, or the
436
+ pending `oat_goal_recovery` record whose `review_artifact` names this
437
+ artifact. A recovery record that names a different artifact is never
438
+ satisfied by this one. The target is **older** when its milestone is not
439
+ `oat_milestone`, or its delivery belongs to an earlier milestone;
440
+ otherwise it is the **active** milestone.
441
+ 2. **Queued fixes.** Place the fixes by the late-fix rule above, with the
442
+ reviewed phase being the last phase of the explicit set. An appended
443
+ `p-revN` joins the **target** milestone's `## Milestones` row (append it to
444
+ that row's phase list); a frozen delivery scope is never edited. Then
445
+ invalidate the evidence: run
446
+ `oat project delivery check --project "$PROJECT_PATH" --subject <mNN|dNN> --json`,
447
+ confirm the report's `exit.source` is `milestone-carrier` and its `status`
448
+ is `undeliverable`, and write `oat_milestone_gates[mNN].exit.freshness: stale`
449
+ with `freshness_reason: "fixes queued from reviews/archived/{REVIEW_FILENAME}"`
450
+ followed by the report's `exit.reason` when present; for a registered
451
+ delivery also write its `integrated_review.disposition: stale`. Queued fixes
452
+ invalidate the review and exit-gate evidence even when the check would
453
+ still report them fresh, so the exit gate runs again before the next
454
+ integrated review.
455
+ - **Active target:** update the execution pointer as in brief mode and
456
+ write `oat_milestone_status: implementing` (from `reviewing` or
457
+ `delivering`).
458
+ - **Older target:** write only `oat_goal_recovery: { milestone,
459
+ delivery_id, phase_ids, stage: implementing, review_artifact: null }`,
460
+ with `phase_ids` the explicit set plus any appended `p-revN` (create the
461
+ record, or move an existing one for this target back to `implementing`).
462
+ Leave `oat_milestone`, `oat_milestone_status`, `oat_current_task_id`, and
463
+ `oat_current_task` unchanged; Step 7's brief pointer write is skipped.
464
+ 3. **Clean receive.** `fixes_completed` is not a passed review. When no fixes
465
+ are queued, write the Reviews event `passed` (Step 6) and persist the
466
+ authoritative evidence in tracked records before Step 7.5 archives the file:
467
+ the Reviews row keeps its `Reviewed Head`; for a registered delivery the
468
+ same write rewrites `integrated_review` (`artifact:
469
+ reviews/archived/{REVIEW_FILENAME}`, `scope` from `oat_review_phase_ids`,
470
+ `bound_revisions` from the reviewed member base and head,
471
+ `disposition: passed`), writes each `members[i].reviewed_head` to the
472
+ reviewed member head that `bound_revisions` binds for it, and replaces
473
+ `exit_gate` with the current allowed milestone exit carrier. The delivery's
474
+ `exit_gate` and `members[].reviewed_head` are set once and may change only
475
+ in the commit that records a review naming a different artifact of this
476
+ delivery (section 12.8), so never split these writes. Commit them (Step 7.6), then
477
+ re-validate scope, revisions and the exit carrier with
478
+ `oat project delivery check --project "$PROJECT_PATH" --subject <mNN|dNN> --json`:
479
+ - `status: ok` → **active target:** write `oat_milestone_status: delivering`
480
+ (`reviewing → delivering`); **older target:** advance the recovery record
481
+ to `stage: delivering`. Only review-receive writes this transition.
482
+ - `status: undeliverable` with a not-fresh `exit` → write
483
+ `exit.freshness: stale` with the report's `exit.reason`; the router
484
+ sends the scoped closeout back to `oat-project-implement`.
485
+ - `status: undeliverable` with a not-fresh `review` → write no transition
486
+ and route to `oat-project-review-provide` for a new integrated review of
487
+ the same explicit set.
488
+
489
+ Commit the transition or invalidation as its own bookkeeping commit.
490
+
388
491
  ### Step 4: Determine Next Task IDs
389
492
 
390
493
  Read plan.md to find the last task ID in the target phase:
@@ -414,6 +517,12 @@ Derive `TASK_PREFIX` from scope:
414
517
  - Find highest task number in target phase using the correct `TASK_PREFIX` (e.g., `prev1-t02`)
415
518
  - New tasks continue sequentially: `prev1-t03`, `prev1-t04`, etc.
416
519
 
520
+ In brief modes read the execution records under the target phase's section of
521
+ `implementation.md` instead of `plan.md`
522
+ (`^### Task ${TASK_PREFIX}-t[0-9]+:` inside that section). Record IDs take the
523
+ next free ordinal and are never reused, including failed, cancelled, and
524
+ no-change records. A new revision phase starts at `prevN-t01`.
525
+
417
526
  ### Step 5: Convert Findings to Tasks
418
527
 
419
528
  Each generated fix task initializes `TASK_OWNED_FILES=()` before its first
@@ -462,6 +571,26 @@ guard instead of the branch commit template above.
462
571
  - Prefix with `(review)` to indicate review-generated task
463
572
  - Use active verb: "Fix...", "Add...", "Update..."
464
573
 
574
+ **Brief modes:** record each Critical, High, and Medium finding (and each Low
575
+ the disposition converts) as an execution record under the target phase in
576
+ `implementation.md`, after that phase's existing records, instead of a plan
577
+ task:
578
+
579
+ ```markdown
580
+ ### Task {task_id}: (review) {Finding title}
581
+
582
+ **Status:** pending
583
+ **Source review:** reviews/archived/{REVIEW_FILENAME} ({finding IDs})
584
+
585
+ Intent: {issue description and fix guidance from the review}
586
+ Files: `{file from finding}`
587
+ Proof: `{verification command from review or standard test command}`
588
+ ```
589
+
590
+ The executor fills `**Executor:**`, the live handle, and the closing
591
+ `**Commit:**` when the work runs, and commits with `fix({task_id}): …` so the
592
+ message keeps `(pNN-tNN)`. Queued records never change phase totals.
593
+
465
594
  ### Step 6: Update Plan.md
466
595
 
467
596
  Add new tasks to plan.md in the target phase. When adding or editing tasks, preserve/restore shared `plan.md` invariants per the `oat-project-plan-writing` contract (stable task IDs, required sections, review table preservation, accurate `## Implementation Complete` totals).
@@ -484,6 +613,19 @@ Add new tasks to plan.md in the target phase. When adding or editing tasks, pres
484
613
  - Update `## Implementation Complete` totals (phase counts + total task count) so downstream PR/review summaries don’t go stale.
485
614
  - If the plan includes any phase rollups that reference task counts, update those too.
486
615
 
616
+ In brief modes `plan.md` changes only in its `## Reviews` table and, under the
617
+ late-fix rule, by an appended `## Phase p-revN:` block; there are no task
618
+ totals to update. The Reviews event update below is unchanged: the same
619
+ artifact-identified event moves to `fixes_added` with its `Reviewed Head`,
620
+ `Invocation`, and `Gate Target` provenance preserved, and the archived
621
+ artifact keeps its brief anchor record fields (`oat_review_requested_scope`,
622
+ `oat_review_phase_ids`, `oat_review_base_sha`, `oat_review_scope_source`, and
623
+ any `oat_review_fallback_reason`, `oat_review_integration_commits`, and
624
+ `oat_review_narrowed_from`) unchanged. When a `p-revN` review is received with
625
+ no fixes needed, its own event moves to `passed` and the event of the phase
626
+ named by its `**Corrects:**` line that this skill set to `fixes_added` also
627
+ moves to `passed`, citing the revision review in the implementation note.
628
+
487
629
  **Keep plan runnable:**
488
630
 
489
631
  - Do NOT leave plan.md in a state that blocks `oat-project-implement`.
@@ -563,6 +705,13 @@ After the fix tasks are complete:
563
705
  - `oat_phase_status: in_progress`
564
706
  - `oat_current_task: {first_fix_task_id}` (or next incomplete)
565
707
  - `oat_project_state_updated: "{ISO 8601 UTC timestamp}"`
708
+ - In brief modes, write the `### Review Received: {scope}` note inside the
709
+ target phase's journal section after its markers, list the queued
710
+ execution-record IDs as the new tasks, set both `oat_current_task_id` in
711
+ `implementation.md` and `oat_current_task` in `state.md` to the target
712
+ phase ID (the reviewed phase, or the new `p-revN`), and update that phase's
713
+ Progress Overview row status. The phase-unit totals change only when a
714
+ revision phase was appended.
566
715
 
567
716
  ### Step 7.5: Archive the Consumed Review Artifact
568
717
 
@@ -742,6 +891,11 @@ Low findings handling is scope-aware:
742
891
 
743
892
  ### Step 10: Route to Next Action
744
893
 
894
+ **Goal mode:** report the router's next skill (`oat project status --json`)
895
+ instead of offering a task list when the receive wrote `delivering`, advanced a
896
+ recovery record, or routed to review-provide or scoped closeout; older-target
897
+ fixes resume through the recovery record, never through the active milestone.
898
+
745
899
  **Ask user:**
746
900
 
747
901
  ```
@@ -5,7 +5,7 @@ disable-model-invocation: true
5
5
  user-invocable: true
6
6
  allowed-tools: Read, Write, Bash(git:*), Glob, Grep, AskUserQuestion
7
7
  metadata:
8
- version: 1.0.5
8
+ version: 1.0.7
9
9
  ---
10
10
 
11
11
  # Project Revise
@@ -199,13 +199,54 @@ Fix tasks that edit synced artifacts use `oat project push` under the scope
199
199
  guard instead of the branch commit template above.
200
200
  ````
201
201
 
202
+ **Brief modes (`oat_workflow_mode: brief`):** the brief never carries tasks.
203
+ Insert the revision phase after the last phase block of `plan.md` (before
204
+ `## Parallelism` when present), with Intent and Exit evidence and no
205
+ `### Task` headings:
206
+
207
+ ```markdown
208
+ ## Phase p-rev{N}: Revision {N}
209
+
210
+ **Intent:** {the feedback items, one clause each} (source: inline feedback, {today})
211
+ **Exit evidence:** {verification that shows each item is addressed, and a passing review of p-rev{N}}
212
+ **Provisional:** no
213
+ ```
214
+
215
+ Add a pending `p-rev{N}` `code` row to the brief's `## Reviews` table. The
216
+ executor opens `prev{N}-tNN` execution records in `implementation.md` when the
217
+ work starts and commits them as `fix(prev{N}-tNN): …`; revise writes none.
218
+
219
+ **Goal mode (`oat_workflow_mode: goal`):** the brief-mode rules apply, with
220
+ `oat-project-brief/references/brief-contract.md` section 12.6 winning. Inline
221
+ feedback requires an explicit target before any write: a milestone or
222
+ delivery identity (`mNN` or `mNN/dNN`), named by the user or by the open
223
+ delivery the feedback is about. Ask for it when it is not stated; never infer
224
+ it from the open PR's commit labels or a first–last phase range.
225
+
226
+ - **Phase-only `p-rev{N}`.** The revision phase is a phase-unit with no
227
+ execution records, as in brief mode, and it joins the **target** milestone:
228
+ append `p-rev{N}` to that milestone's `## Milestones` row, so its membership
229
+ is exact. A registered delivery's frozen scope is never edited.
230
+ - **Invalidate the target's evidence.** Write
231
+ `oat_milestone_gates[mNN].exit.freshness: stale` with
232
+ `freshness_reason: "revision p-rev{N} (inline feedback)"`, and for a
233
+ registered target delivery its `integrated_review.disposition: stale`.
234
+ - **Active target** (the milestone is `oat_milestone`): write the ordinary
235
+ pointer (4e, 4f) and `oat_milestone_status: implementing`.
236
+ - **Older target** (an earlier milestone or its delivery): create or advance
237
+ `oat_goal_recovery: { milestone, delivery_id, phase_ids: [the target's
238
+ ordered set plus p-rev{N}], stage: implementing, review_artifact: null }`
239
+ instead, and skip the 4e/4f pointer and status writes: `oat_milestone`,
240
+ `oat_milestone_status`, `oat_current_task_id`, and `oat_current_task` stay
241
+ unchanged.
242
+
202
243
  **Task naming:** Prefix with `(revision)` — following the `(review)` convention in review-receive.
203
244
 
204
245
  **Task IDs:** `prev{N}-t{NN}` format (e.g., `prev1-t01`, `prev1-t02`).
205
246
 
206
247
  #### 4d: Update plan.md Totals
207
248
 
208
- Update `## Implementation Complete` section to include the new revision phase and tasks in the totals.
249
+ Update `## Implementation Complete` section to include the new revision phase and tasks in the totals. In brief modes the total counts phases only.
209
250
 
210
251
  #### 4e: Update implementation.md
211
252
 
@@ -216,6 +257,12 @@ Update frontmatter to point at the first revision task so `oat-project-implement
216
257
 
217
258
  Update the Progress Overview table to include the new revision phase (e.g., add a `Phase p-rev{N}` row with task count and `in_progress` status).
218
259
 
260
+ In brief modes point the journal at the phase instead of a task: set
261
+ `oat_current_task_id: p-rev{N}`, add a `## Phase p-rev{N}: Revision {N}`
262
+ section after the last phase section with `**Status:** pending` directly under
263
+ the heading (the root writes `**Base:**` when the phase starts), and add a
264
+ `p-rev{N}` Progress Overview row with one unit, `0/1` accepted.
265
+
219
266
  Add a "Revision Received" entry:
220
267
 
221
268
  ```markdown
@@ -237,7 +284,7 @@ Add a "Revision Received" entry:
237
284
  #### 4f: Update state.md
238
285
 
239
286
  - `oat_phase_status: in_progress`
240
- - `oat_current_task: prev{N}-t01`
287
+ - `oat_current_task: prev{N}-t01` (brief modes: `p-rev{N}`)
241
288
  - `oat_project_state_updated: "{ISO 8601 UTC timestamp}"`
242
289
 
243
290
  #### 4g: Route to Implement
@@ -265,7 +312,7 @@ This is the key value revise adds: state transition management so agents know th
265
312
  - **Review artifact feedback:** Delegate to `oat-project-review-receive`
266
313
  - Delegating means loading the selected skill's current `SKILL.md` and following it, or dispatching a child that carries it, if environment supports skill chaining; otherwise tell the user which skill to run and stop. Never act from a remembered delegation outcome.
267
314
 
268
- These skills use their existing conventions: `(review)` task prefix, severity classification, standard task IDs appended to the last plan phase. This is correct — structured review feedback should go through the structured triage model.
315
+ These skills use their existing conventions: `(review)` task prefix, severity classification, standard task IDs appended to the last plan phase. This is correct — structured review feedback should go through the structured triage model. In brief modes `oat-project-review-receive` records the fixes as `(review)` execution records in the journal under its brief-mode late-fix rule, never as plan tasks.
269
316
 
270
317
  #### 5c: Post-Delegation State
271
318
 
@@ -5,7 +5,7 @@ disable-model-invocation: false
5
5
  user-invocable: true
6
6
  allowed-tools: Read, Write, Bash(git:*), Bash(jq:*), Bash(oat config:*), Bash(oat decision:*), Bash(oat pjm:*), Bash(oat project log:*), Bash(oat project push:*), Bash(oat project scope:*), Bash(oat template:*), Bash(oat tools:*), Glob, Grep, AskUserQuestion
7
7
  metadata:
8
- version: 1.5.8
8
+ version: 1.5.10
9
9
  ---
10
10
 
11
11
  # Project Summary
@@ -22,7 +22,7 @@ Produce a `summary.md` that serves as institutional memory — capturing what wa
22
22
 
23
23
  ## Prerequisites
24
24
 
25
- **Required:** Active project with `implementation.md` that has meaningful progress (at least one completed task).
25
+ **Required:** Active project with `implementation.md` that has meaningful progress (at least one completed task; in brief and goal modes, at least one accepted phase-unit).
26
26
 
27
27
  ## Mode Assertion
28
28
 
@@ -120,6 +120,12 @@ test -f "$PROJECT_PATH/implementation.md"
120
120
 
121
121
  **If exists:** Read the file. Check for at least one task with `**Status:** completed`. If no completed tasks, warn: "No completed tasks found. Summary will be minimal."
122
122
 
123
+ In brief modes the prerequisite is one accepted phase-unit instead: a
124
+ `**Status:** completed` line directly under a `## Phase` heading of the
125
+ journal, before that phase's first `### Task` record (a completed execution
126
+ record is not an accepted unit). If no phase-unit is accepted, warn: "No
127
+ accepted phase-units found. Summary will be minimal."
128
+
123
129
  ### Step 2: Read Project Artifacts
124
130
 
125
131
  For `oat_workflow_mode: lite`, use the reduced artifact contract and skip the
@@ -131,6 +137,27 @@ project accepts `discovery.md`, `spec.md`, and `design.md` as absent; do not
131
137
  read or require them. Ground the summary in what actually shipped, with
132
138
  `implementation.md` taking precedence over the plan.
133
139
 
140
+ For `oat_workflow_mode: brief`, read the brief's sources instead of the
141
+ ordinary list below; `discovery.md`, `spec.md`, and `design.md` are absent by
142
+ design:
143
+
144
+ | Source | Use |
145
+ | ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
146
+ | `plan.md` Goal, Outcomes, Approach | Overview and what the project set out to do; audit What Was Implemented against the numbered Outcomes |
147
+ | `plan.md` Decisions, Constraints and Out of Scope | Key Decisions and Tradeoffs Made |
148
+ | `plan.md` phases and `## Reviews` | Phase intent and review dispositions |
149
+ | `implementation.md` phase sections | Accepted phases, anchors, execution records, verification evidence, deviations, and `Brief deltas` |
150
+ | `implementation.md` Final Summary | Shipped results; takes precedence over the brief's plans |
151
+ | `state.md`, `project-log.md`, `oat-execution-learnings.md`, `references/research/` | Same roles as below, when present |
152
+
153
+ For `oat_workflow_mode: goal`, read the brief sources above, plus the
154
+ `## Milestones` table (organize What Was Implemented by milestone), the
155
+ `state.md` delivery registry (`oat_deliveries`: each delivery's scope, members
156
+ and endpoint observation are shipped results), and, after a declaration, the
157
+ outcome audit (`oat_goal_outcome_audit`) as the authoritative per-outcome
158
+ disposition, with deferred and retired obligations listed under Follow-up
159
+ Items.
160
+
134
161
  For every other workflow mode, read all available artifacts for synthesis:
135
162
 
136
163
  - `"$PROJECT_PATH/discovery.md"` — initial request, decisions, constraints
@@ -231,6 +258,99 @@ test -f "$PROJECT_PATH/summary.md"
231
258
 
232
259
  Copy template: `oat template resolve summary --output "$PROJECT_PATH/summary.md"`
233
260
 
261
+ **Brief modes (`oat_workflow_mode: brief` or `goal`): freshness by phase fingerprint.**
262
+ Replace the task and revision comparison above with
263
+ `oat_summary_phase_fingerprint`, a stable hash of the ordered accepted phase
264
+ IDs; for each accepted phase its `**Head:**`, its `**Status:**` line, and the
265
+ `Status` of the latest `## Reviews` `code` row for that phase; and the brief's
266
+ Goal, Outcomes, and Decisions sections with whitespace normalized. Compute it
267
+ in bash from the project root with `PROJECT_PATH` set:
268
+
269
+ ````bash
270
+ brief_summary_marker() {
271
+ awk -v id="$1" -v key="$2" '
272
+ /^[ \t]*(```|~~~)/ { fence = !fence; next }
273
+ fence { next }
274
+ /^#/ { owner = (index($0, "## Phase " id ": ") == 1); next }
275
+ !owner || found { next }
276
+ index($0, "**" key ":** ") == 1 {
277
+ v = substr($0, length("**" key ":** ") + 1); sub(/[ \t]+$/, "", v); print v; found = 1
278
+ }
279
+ ' "$PROJECT_PATH/implementation.md"
280
+ }
281
+
282
+ brief_summary_fingerprint() {
283
+ local plan="$PROJECT_PATH/plan.md" id status head review section
284
+ {
285
+ for id in $(awk '
286
+ /^[ \t]*(```|~~~)/ { fence = !fence; next }
287
+ fence { next }
288
+ /^## Phase (p[0-9]+|p-rev[0-9]+): / { id = $3; sub(/:$/, "", id); print id }
289
+ ' "$plan"); do
290
+ status=$(brief_summary_marker "$id" Status)
291
+ [ "$status" = completed ] || continue
292
+ head=$(brief_summary_marker "$id" Head)
293
+ review=$(awk -v id="$id" '
294
+ /^## Reviews[ \t]*$/ { in_reviews = 1; next }
295
+ in_reviews && /^## / { exit }
296
+ !in_reviews || !/^\|/ { next }
297
+ {
298
+ n = split($0, cells, "|")
299
+ for (i = 2; i < n; i++) { c = cells[i]; gsub(/^[ \t]+|[ \t]+$/, "", c); cells[i] = c }
300
+ if (!sc) { for (i = 2; i < n; i++) { if (cells[i] == "Scope") sc = i; if (cells[i] == "Type") ty = i; if (cells[i] == "Status") st = i }; next }
301
+ if (cells[sc] == id && cells[ty] == "code") last = cells[st]
302
+ }
303
+ END { print (last == "" ? "-" : last) }
304
+ ' "$plan")
305
+ printf 'phase=%s head=%s status=%s review=%s\n' "$id" "${head:--}" "$status" "$review"
306
+ done
307
+ for section in Goal Outcomes Decisions; do
308
+ printf 'section=%s ' "$section"
309
+ awk -v heading="## $section" '
310
+ /^## / { in_section = ($0 == heading); next }
311
+ in_section { print }
312
+ ' "$plan" | tr -s ' \t\n' ' ' | sed 's/^ //; s/ $//'
313
+ printf '\n'
314
+ done
315
+ } | { command -v sha256sum >/dev/null 2>&1 && sha256sum || shasum -a 256; } | cut -d' ' -f1
316
+ }
317
+
318
+ CURRENT_PHASE_FINGERPRINT=$(brief_summary_fingerprint)
319
+ ````
320
+
321
+ **Goal fragment.** In goal mode the fingerprint also covers the delivery IDs
322
+ at endpoint, so a delivery newly observed at its agreed endpoint requires a
323
+ refresh. Append one `delivery=<dNN>` line per registry entry with
324
+ `status: at_endpoint` or a recorded `endpoint_attainment`, in registry order,
325
+ to the hashed input:
326
+
327
+ ```bash
328
+ goal_summary_deliveries() {
329
+ oat project status --project-path "$PROJECT_PATH" --field project.deliveries 2>/dev/null |
330
+ node -e 'let s = ""; process.stdin.on("data", (d) => (s += d)).on("end", () => {
331
+ for (const d of JSON.parse(s.trim() || "null") ?? [])
332
+ if (d.status === "at_endpoint" || d.endpoint_attainment) console.log(`delivery=${d.delivery_id}`);
333
+ })'
334
+ }
335
+
336
+ if [ "$(oat project status --project-path "$PROJECT_PATH" --field project.workflowMode 2>/dev/null)" = goal ]; then
337
+ CURRENT_PHASE_FINGERPRINT=$(
338
+ { printf '%s\n' "$CURRENT_PHASE_FINGERPRINT"; goal_summary_deliveries; } |
339
+ { command -v sha256sum >/dev/null 2>&1 && sha256sum || shasum -a 256; } | cut -d' ' -f1
340
+ )
341
+ fi
342
+ ```
343
+
344
+ - No existing summary, or `oat_summary_phase_fingerprint` differs from
345
+ `CURRENT_PHASE_FINGERPRINT`: refresh. Update What Was Implemented from the
346
+ newly accepted phases, Revision History when an accepted `p-revN` is new, and
347
+ Follow-up Items from review dispositions.
348
+ - Fingerprint unchanged: no phase-driven update. The autonomous-learnings and
349
+ project-log triggers above stay independent and can still require a refresh.
350
+ - A brief or goal summary never reads or writes `oat_summary_last_task`; execution
351
+ records are not units. `oat-project-complete` recomputes the same
352
+ fingerprint with this fragment to decide whether `summary.md` is stale.
353
+
234
354
  ### Step 4: Generate / Update Summary Sections
235
355
 
236
356
  For each section, synthesize content from the relevant artifacts. Apply these rules:
@@ -403,12 +523,38 @@ oat_summary_includes_revisions: [{ list of p-revN IDs reflected }]
403
523
  ---
404
524
  ```
405
525
 
526
+ In brief and goal modes write `oat_summary_phase_fingerprint: {CURRENT_PHASE_FINGERPRINT}`
527
+ (Step 3) and omit `oat_summary_last_task`; keep `oat_summary_revision_count`
528
+ and `oat_summary_includes_revisions` as informational fields.
529
+
406
530
  ### Step 6: Roll Up Project Observations and Offer Backlog Graduation
407
531
 
408
532
  Run this step after `summary.md` has been authored or refreshed, including the
409
533
  distinct `## Autonomous Execution Learnings` section when its source artifact
410
534
  exists.
411
535
 
536
+ **Goal terminal deferral.** When `oat_workflow_mode` is `goal`, this run
537
+ comes before `pr` in the post-implement sequence (`oat_post_implement_sequence`
538
+ lists `pr` but not yet among its completed steps), and
539
+ `oat project closeout-check "$PROJECT_PATH" --json` (read-only) still reports
540
+ `phase-uncovered` (a terminal delivery is still to be registered), write only
541
+ files under `$PROJECT_PATH`: skip the `oat project log rollup` call below (it
542
+ appends to the repository ledger and also writes the `## Workflow Observations`
543
+ section, which the later run supplies) and all of Step 7 (decision-record
544
+ promotion and the regenerated decisions index). Report them as deferred with:
545
+ `Deferred: ledger roll-up and decision promotion run in the completion summary refresh; do not decline it.`
546
+ A repo-level commit after the terminal milestone's reviewed revision is not
547
+ bookkeeping (brief contract 12.8), so it would make the terminal subject
548
+ undeliverable for the terminal registration in the PR skill's Step 1.5.
549
+ Without `phase-uncovered` there is nothing to defer (delivery coverage already
550
+ holds and `pr` registers nothing): run Steps 6 and 7 as usual. Perform the
551
+ deferred writes in the next summary run after `phase-uncovered` clears: a
552
+ `summary` step configured after `pr`, or the summary refresh at completion,
553
+ which the goal fingerprint fragment (Step 3) marks stale once the terminal
554
+ delivery reaches its endpoint. Both writes are idempotent, so the later run
555
+ needs no extra state. Registered deliveries are unaffected: they are judged
556
+ against their observed member revisions.
557
+
412
558
  Before the roll-up or decision promotion mutates repository-wide outputs,
413
559
  preflight the owned paths and snapshot unrelated staged state:
414
560
 
@@ -471,6 +617,8 @@ append-based `project` → `general` promotion in Step 2.5.
471
617
 
472
618
  ### Step 7: Promote Key Decisions to Canonical Decision Records
473
619
 
620
+ Under the goal terminal deferral (Step 6), skip this step and report it deferred.
621
+
474
622
  Run this step **after** `summary.md` (including its `## Key Decisions` section) has been written/refreshed and its frontmatter updated. It promotes the project's Key Decisions out of per-project prose and into the canonical, repo-wide `reference/decisions/` log so they stop being siloed in `summary.md`. This step is **additive and non-interactive** — it never prompts.
475
623
 
476
624
  **7.1 — PJM capability and adoption gate (auto, no prompt).** Check capability
@@ -6,7 +6,7 @@ disable-model-invocation: false
6
6
  user-invocable: true
7
7
  allowed-tools: Read, Write, Edit, Bash, Grep, Glob, Task
8
8
  metadata:
9
- version: 1.9.7
9
+ version: 1.9.9
10
10
  ---
11
11
 
12
12
  # Execute a Wave of External Plans
@@ -200,7 +200,8 @@ writes and stay on the orchestrator's own model class, the same rule
200
200
  `oat project new wave-N-execution --mode quick --no-commit`. If the flag is
201
201
  absent because of version skew, run the command without it, expect the scaffold
202
202
  to auto-commit, record that generated commit, and land the wrapper artifacts in
203
- a follow-up commit (Orc W1 scaffold evidence).
203
+ a follow-up commit (Orc W1 scaffold evidence). The wrapper stays in quick
204
+ mode: its lanes need task-level plans, so lite, brief, and goal do not apply.
204
205
  2. **Verify scaffold substitution AND advance the lifecycle** in `state.md`.
205
206
  On oat ≥0.1.65, verify that the basic scaffold placeholders
206
207
  (`{ OAT_HILL_CHECKPOINTS }`, `{ OAT_PHASE }`, `{ OAT_WORKFLOW_MODE }`) were