@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
@@ -58,6 +58,19 @@ replaces the record.
58
58
  record is current.
59
59
  - **`oat_quick_start_gate`** (`oat-project-quick-start`, Gate Execution) carries
60
60
  exactly the core.
61
+ - **`oat_brief_gate`** (`oat-project-brief`, Gate Execution) carries exactly the
62
+ core, written and read under the same rules as `oat_quick_start_gate`. It is
63
+ absent when no gate is configured, and nothing routes on it: it is provenance
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.
61
74
 
62
75
  ## Reading a quick-start record
63
76
 
@@ -15,6 +15,139 @@ optional bounded child for beneficial recon, isolated fanout, or specialist
15
15
  work under the shared dispatch contract. The phase implementer remains
16
16
  responsible for file boundaries, verification, and task commits.
17
17
 
18
+ #### Brief-Mode Phase Execution
19
+
20
+ When `oat_workflow_mode` is `brief` or `goal`, each phase is one phase-unit
21
+ with Intent and Exit evidence instead of planned tasks; goal also scopes every
22
+ run to a milestone, recovery or terminal phase set (`plan-and-resume.md`, Goal
23
+ Projects). Every rule in this route still
24
+ applies except where this subsection replaces it, and
25
+ `oat-project-brief/references/brief-contract.md` (sections 3, 6, 7, and 10) is
26
+ authoritative where the two differ. The subsection is inert for every other
27
+ workflow mode.
28
+
29
+ **Requirement source.** The phase's `**Intent:**` and `**Exit evidence:**`
30
+ lines plus the brief's Outcomes, Constraints and Out of Scope, and Decisions
31
+ sections. There is no planned task list, file list, or commit message to
32
+ extract. A provisional phase is never dispatched; `plan-and-resume.md` Step 2.2
33
+ makes it concrete first.
34
+
35
+ **Execution precedence.** Select exactly one execution shape per phase, in this
36
+ order, and record it in the phase-start record:
37
+
38
+ 1. **Declared parallel group.** A ready group of concrete phases in
39
+ `oat_plan_parallel_groups` runs through Parallel Group Execution below: one
40
+ worktree and one phase implementer per phase, merged back in document order.
41
+ 2. **Root fan-out.** For a phase outside any group, the root fans out bounded
42
+ slices when at least two slices pass the independence test. The root is
43
+ then the committing owner for that phase, and each worker is a nested
44
+ worker.
45
+ 3. **One phase implementer.** Otherwise resolve and dispatch one phase
46
+ implementer through the flow below.
47
+ 4. **Inline exception.** The root works inline only through an exception
48
+ written into the journal before editing that holds for the whole phase: no
49
+ new surface, no unresolved design, no consequential change, and one existing
50
+ proof command. File count alone is not a predicate. Reclassify, and leave the
51
+ inline shape, as soon as the scope grows past any of those conditions.
52
+
53
+ **Independence test**, for phases and slices alike: no shared files, state,
54
+ generated files, lockfiles, formatter or build output, fixtures, or services,
55
+ and no sequential dependency. A parallel phase is also a coherent deliverable on
56
+ its own. Slices that fail the test stay with one executor.
57
+
58
+ There is exactly one committing owner per worktree: the root for a root fan-out
59
+ or inline exception, the phase implementer for its phase or phase worktree.
60
+ Nested workers return edits on owned paths and never commit.
61
+
62
+ **Phase-start record.** Before phase work starts, capture
63
+ `PHASE_ANCHOR_BASE=$(git rev-parse HEAD)` on a clean tree. The root writes these
64
+ exact lines directly under the phase's `## Phase pNN:` heading in
65
+ `implementation.md`, replacing `**Status:** pending`:
66
+
67
+ ```markdown
68
+ **Status:** in_progress
69
+ **Base:** {PHASE_ANCHOR_BASE as a full 40-character SHA}
70
+ **Executor:** {root | phase-implementer:<request_id> | inline:<exception-ref>}
71
+ ```
72
+
73
+ followed by prose naming the worktree, the committing owner, and the
74
+ parallelism assessment: the precedence rung selected and why each higher rung
75
+ did not apply. Commit it through Step 7a's scope-resolving bookkeeping branch
76
+ with the message `chore(oat): start {pNN}`, then record `PHASE_BASE_HEAD` (the
77
+ dispatch base the implementer verifies) after that commit. The phase-start
78
+ commit sits inside `PHASE_ANCHOR_BASE..Head`, which is allowed. For a parallel
79
+ group the root writes every member's start record, without `**Base:**`, in one
80
+ `chore(oat): start {group}` commit, then captures `EXPECTED_HEAD` as the group's
81
+ fork commit; each member's `**Base:**` is that fork commit, written at fan-in
82
+ (see Parallel Group Execution). The Late-fix rule below forbids a later phase
83
+ from taking a `**Base:**` while an earlier phase still expects a head-advancing
84
+ fix.
85
+
86
+ **Execution records.** Tasks are execution records, never a plan. Whoever
87
+ executes creates the record: the committing owner opens
88
+ `### Task pNN-tNN: <name>` under the phase's journal section when the work
89
+ starts, with `**Status:** in_progress`, `**Executor:**`, intent, files, proof
90
+ command, and the live handle while in flight. Record IDs take the next free
91
+ ordinal in the phase (`prevN-tNN` in a revision phase) and are never reused. The
92
+ record's one implementation commit carries `(pNN-tNN)` in its message and
93
+ excludes the journal. After it lands, the owner closes the record with
94
+ `**Status:** completed` and `**Commit:** <full SHA>`, or with a terminal
95
+ `failed`, `cancelled`, or `no-change` status and no fabricated commit, and
96
+ commits the journal separately as `chore(oat): record {pNN-tNN}`. Lookahead is
97
+ allowed: the owner may open several independent records before dispatching
98
+ them together. A request for a maintained up-front task plan is an offer to
99
+ promote the brief to quick, never lookahead. Records are coherent units tied to
100
+ one commit, not one per command or edit, and they never change phase totals.
101
+
102
+ **Phase head.** When the executor's work is done and phase-wide verification
103
+ passes, the committing owner writes `**Head:** <full SHA>`, the candidate head,
104
+ which is the last implementation or record commit of the phase, plus a short
105
+ verification summary, and commits the journal as `chore(oat): record {pNN}
106
+ head`. A phase without a `**Head:**` line never reaches review or the
107
+ completion line.
108
+
109
+ **Fresh reviewer on anchors.** Per-Phase Review dispatches a fresh reviewer for
110
+ every phase: never the phase implementer, never a reviewer handle from an
111
+ earlier phase. For a sequential phase, before dispatch verify that both anchors
112
+ exist and that `**Base:**` is an ancestor of `**Head:**`; a failed check routes
113
+ to `oat-project-reconcile` and is never narrowed. For a parallel-group member,
114
+ step 3's check that the worktree head descends from `EXPECTED_HEAD` stands in
115
+ for that pre-check, because the member has no journal anchors until fan-in. The
116
+ per-phase Review Scope range is `Base..Head` for a sequential phase and
117
+ `EXPECTED_HEAD..<worktree head from the phase report>` for a parallel-group
118
+ member, whose `oat_review_base_sha` is `EXPECTED_HEAD`; the fan-in
119
+ `**Base:**`/`**Head:**` written afterwards govern `pNN-pMM` and `final` scopes.
120
+ In both cases the in-scope IDs are the phase's execution-record IDs, and the
121
+ scope carries the artifact record fields `oat_review_requested_scope: pNN`,
122
+ `oat_review_phase_ids: [pNN]`, `oat_review_base_sha`, and
123
+ `oat_review_scope_source: anchors` for the reviewer to copy into its artifact.
124
+
125
+ **Late-fix rule.** A review-fix commit may advance the phase's `**Head:**`, base
126
+ unchanged, only while no later phase in document order has a `**Base:**`. Once
127
+ a later phase has started, a correction becomes an appended revision phase
128
+ `## Phase p-revN:` with its own anchors and `**Corrects:** pNN`, recorded in both
129
+ `plan.md` and the journal; the corrected phase keeps its anchors. Under this
130
+ route the next phase's start record is written only after the current phase's
131
+ review and fix loop settles, so ordinary fix-mode commits advance the head.
132
+
133
+ **Acceptance.** The root alone writes `**Status:** completed` under the phase
134
+ heading, in the Step 7b (or later) bookkeeping commit that observes every
135
+ review disposition settled and every selected phase gate passed. That line is
136
+ what makes the phase-unit accepted. Step 7a keeps `**Status:** in_progress`.
137
+
138
+ **Journal ownership in parallel worktrees.** A phase implementer in a parallel
139
+ group writes its execution records into its own phase section of the
140
+ worktree's journal and lists them in its report, but writes no anchors. At
141
+ fan-in the root reconciles those phase-local records into `implementation.md`:
142
+ it keeps each phase's own section from its worktree when resolving a journal
143
+ merge, writes every member's `**Base:**` as the group's fork commit and its
144
+ `**Head:**` as that phase's integration head on the project branch (its merge
145
+ commit, or its last cherry-picked commit when step 7 integrates by
146
+ cherry-pick), and lists integration and conflict-resolution commits to the
147
+ reviewer as integration commits. The review-provide resolver checks only the
148
+ shared fork base and that member heads advance in document order; it does not
149
+ require a head to be a merge commit.
150
+
18
151
  #### Required Manual or Visual Proof Boundary
19
152
 
20
153
  Before committing a task that declares required manual or visual proof, the
@@ -69,7 +202,7 @@ Before each phase:
69
202
  spec: {PROJECT_PATH}/spec.md
70
203
  implementation: {PROJECT_PATH}/implementation.md
71
204
  discovery: {PROJECT_PATH}/discovery.md
72
- workflow_mode: {spec-driven|quick|import|lite} # lite is always a single phase
205
+ workflow_mode: {spec-driven|quick|import|lite|brief|goal} # lite is always a single phase; brief and goal phases carry Intent and Exit evidence, not tasks
73
206
  active_provider: {codex|claude|cursor|other}
74
207
  phase_base_head: {PHASE_BASE_HEAD}
75
208
  worktree: {assigned checkout}
@@ -118,6 +251,12 @@ must not use route escalation, route-level advancement, model/provider
118
251
  replacement, or `oat_orchestration_retry_limit`. It remains pinned to the exact
119
252
  accepted implementation target.
120
253
 
254
+ In brief modes the Phase Scope keeps every field above. `design`, `spec`, and
255
+ `discovery` are absent by design (set them to `null`), `commit_convention`
256
+ names the `(pNN-tNN)` record convention, and the scope adds the phase-start
257
+ record's `parallelism_assessment` and `committing_owner`, plus
258
+ `anchor_base: {PHASE_ANCHOR_BASE}` for a sequential phase.
259
+
121
260
  Tier 2 inline execution is allowed only under the existing verified-equivalent
122
261
  controls or documented inherit/default exception. Inline mode executes the
123
262
  phase-implementer contract directly; it does not reintroduce mandatory
@@ -720,6 +859,10 @@ commit range, task IDs and boundaries, artifacts, verification evidence,
720
859
  configured axes, selection reason, and candidates. Require a timestamped review
721
860
  artifact under the project's `reviews/` directory.
722
861
 
862
+ In brief modes the phase commit range, the in-scope execution-record IDs, and
863
+ the artifact record fields come from the phase anchors as Brief-Mode Phase
864
+ Execution describes; validate the anchors before launch.
865
+
723
866
  The Review Scope names review-outcome bookkeeping as out of scope: this
724
867
  review's `## Reviews` row and its disposition, the Orchestration Run entry for
725
868
  this review's outcome, the deferred phase-outcome and review-orchestration
@@ -907,6 +1050,15 @@ Head`, `Invocation`, and `Gate Target`) to the header and separator, then pad
907
1050
 
908
1051
  For a multi-phase schedule entry:
909
1052
 
1053
+ In brief modes, step 6 merges passing phases in document order, and step 10's
1054
+ bookkeeping writes every member's anchors and phase-local records as the
1055
+ Brief-Mode Phase Execution subsection describes. Step 5's per-phase review
1056
+ still runs before the merge: For a parallel-group member the per-phase Review Scope range is
1057
+ `EXPECTED_HEAD..<worktree head from the phase report>` with
1058
+ `oat_review_base_sha: EXPECTED_HEAD` and `oat_review_scope_source: anchors`;
1059
+ the fan-in `**Base:**`/`**Head:**` written afterwards govern `pNN-pMM` and
1060
+ `final` scopes.
1061
+
910
1062
  1. Capture `EXPECTED_HEAD=$(git rev-parse HEAD)`.
911
1063
  2. Bootstrap one worktree per phase through `oat-worktree-bootstrap-auto` with
912
1064
  explicit base `EXPECTED_HEAD`. Never substitute host-native worktree
@@ -957,6 +1109,12 @@ reviewer. Write the phase's task ledger:
957
1109
  - remove legacy `oat_execution_mode: subagent-driven`; and
958
1110
  - preserve any configured retry override.
959
1111
 
1112
+ In brief modes the task ledger is the phase's journal section: validate that
1113
+ the execution records and `**Head:**` the executor committed are present,
1114
+ update the phase's Progress Overview row, keep `**Status:** in_progress`, and
1115
+ point both resume pointers at the phase ID. A missing `**Head:**` stops before
1116
+ review.
1117
+
960
1118
  The task rows, resume pointer, and recovery settlement do not depend on the
961
1119
  review outcome, which is why they can move ahead of the review; the recovery
962
1120
  settlement is validated from the phase report, not from the review. A
@@ -1028,6 +1186,13 @@ commit observes that last condition: this Step 7b commit when nothing is
1028
1186
  queued and no gate is selected, otherwise the commit that records the final
1029
1187
  review-fix task or the passing gate.
1030
1188
 
1189
+ In brief modes the row is the phase's journal section and `complete` is the
1190
+ exact line `**Status:** completed` under its heading, written only by the root
1191
+ under that same rule; the brief's `pNN` code row in `## Reviews` records the
1192
+ review event, and the phase summary prose records the reviewer's disposition
1193
+ and gate results. A review-fix commit that advances the phase head updates
1194
+ `**Head:**` under the Late-fix rule.
1195
+
1031
1196
  Bookkeeping is mandatory:
1032
1197
 
1033
1198
  ```bash
@@ -1052,6 +1217,13 @@ when it exists; logging can be disabled.
1052
1217
  At every phase boundary, verify `implementation.md`, task pointers, phase
1053
1218
  summary, and design/plan deviations. `oat_plan_hill_phases` lists phases after
1054
1219
  which execution pauses; an empty list means every phase.
1220
+ In brief modes an empty list means none (`plan-and-resume.md` Step 2.5), and a
1221
+ phase boundary is reached only when the phase-unit is accepted.
1222
+ In goal mode the last accepted phase of a milestone or recovery scope leads to
1223
+ Goal Milestone Closeout (`completion-and-closeout.md`), not to the final
1224
+ review: the milestone's integrated review is requested with its explicit
1225
+ `code mNN: <ordered phase ids>` scope after the exit carrier is allowed and
1226
+ fresh, and `code final` belongs to terminal closeout only.
1055
1227
 
1056
1228
  Before a configured non-final HiLL pause, run auto-review when enabled. Scope
1057
1229
  starts after the last passed whole-phase review and ends at the current phase.
@@ -5,6 +5,51 @@ This reference preserves the route-specific implementation contract. Load it onl
5
5
  Step 0 of the entry skill has already pulled and materialized any discoverable
6
6
  synced project before this route validates or reads its artifacts.
7
7
 
8
+ ### Brief-Family Projects
9
+
10
+ When `state.md` records `oat_workflow_mode: brief`, `plan.md` is a Project
11
+ Brief. Its `## Phase pNN:` blocks carry `**Intent:**`, `**Exit evidence:**`,
12
+ and `**Provisional:**` lines instead of tasks, and each phase is one
13
+ **phase-unit**, accepted only by the exact `**Status:** completed` line under
14
+ its heading in `implementation.md`. Read
15
+ `oat-project-brief/references/brief-contract.md` from the same installed skills
16
+ root as this skill once, before Step 1. It owns the phase grammar, journal
17
+ markers, execution records, pointer interpretation, and anchor rules, and it
18
+ wins where this route restates them. The brief branches in this route, in
19
+ `phase-execution.md`, and in `completion-and-closeout.md` are inert for every
20
+ other workflow mode.
21
+
22
+ The entry skill's rule against changing plan structure does not cover the
23
+ logged brief edits Step 2.2 allows (adding, splitting, reordering, or making
24
+ phases concrete within the approved outcomes); those are part of brief
25
+ execution, not scope expansion.
26
+
27
+ ### Goal Projects
28
+
29
+ When `state.md` records `oat_workflow_mode: goal`, every brief-family rule
30
+ above applies, and `oat-project-brief/references/brief-contract.md` section 12
31
+ wins where this route restates it. Goal adds a scope to each run:
32
+
33
+ - **Active scope.** Read the router's context (`oat project status --json`,
34
+ `recommendation.context`): `scope mNN: <ordered phase ids>` is the active
35
+ milestone's ordered phase set from the shared Milestones reader;
36
+ `scope mNN/dNN: …` or a pending `oat_goal_recovery` record is a recovery
37
+ scope (its `phase_ids`); `scope terminal: …` is the terminal execution scope
38
+ after a declaration, which excludes audited `deferred` and `retired`
39
+ phases; `closeout mNN: …` or `closeout mNN/dNN: …` runs the scoped milestone
40
+ closeout in `completion-and-closeout.md` (Goal Milestone Closeout) without
41
+ dispatching a phase. Never widen a scope to phases of another milestone.
42
+ - **Ownership.** Implement never writes `oat_milestone`, never activates a
43
+ milestone, never registers a delivery, and never writes `declared_met`: it
44
+ consumes the declaration. It writes only the milestone status and recovery
45
+ stage transitions that Goal Milestone Closeout names.
46
+ - **Recovery isolation.** Executing a recovery scope for an older delivery
47
+ leaves `oat_milestone`, `oat_milestone_status`, `oat_current_task_id`, and
48
+ `oat_current_task` unchanged; progress is recorded in the journal and the
49
+ recovery record.
50
+ - **Invalid membership.** A `Active milestone membership invalid` reason stops
51
+ before dispatch and routes to `oat-project-goal`.
52
+
8
53
  ### Step 1: Check Plan Complete
9
54
 
10
55
  ```bash
@@ -59,6 +104,15 @@ If `{PROJECT_PATH}/implementation.md` already contains orchestration run entries
59
104
 
60
105
  6. Once resume target is identified, continue from that phase with the normal per-phase flow.
61
106
 
107
+ **Brief modes:** before any redispatch, reconcile every open execution record
108
+ (a `### Task pNN-tNN:` record in the journal without a terminal status) against
109
+ `git log` commits carrying `(pNN-tNN)` and against live handles, as brief
110
+ contract section 7 requires. A record whose implementation commit landed closes
111
+ with that SHA; a record whose handle is still live is continued through that
112
+ handle and never redispatched; a record with neither stays open for its phase's
113
+ next executor. Records never change phase totals, so this reconciliation never
114
+ writes a phase's `**Status:** completed`.
115
+
62
116
  **On first-ever invocation** (no prior run entries), skip resumption detection and proceed to Step 2.
63
117
 
64
118
  ### Step 2: Read Plan Document
@@ -70,6 +124,15 @@ Read `"$PROJECT_PATH/plan.md"` completely to understand:
70
124
  - Verification commands
71
125
  - Commit messages
72
126
 
127
+ **Brief modes:** read the whole brief: Goal, Outcomes, Approach, Constraints and
128
+ Out of Scope, Decisions, Known Unknowns, Delivery endpoint and authority, the
129
+ phase blocks, Parallelism, and Reviews. There are no planned tasks, file lists,
130
+ or commit messages to extract. Each phase's Intent and Exit evidence are its
131
+ requirement and proof source, and execution records are opened only when work
132
+ starts (`phase-execution.md`, Brief-Mode Phase Execution). `oat project
133
+ validate-plan` in Step 2.1 applies the brief profile from the recorded workflow
134
+ mode.
135
+
73
136
  ### Step 2.1: Validate Parallelism Metadata
74
137
 
75
138
  Invoke the CLI validator to check plan.md parallelism metadata:
@@ -108,14 +171,31 @@ Example:
108
171
  - `oat_plan_parallel_groups: [["p02", "p03"], ["p04", "p05"]]`
109
172
  - Schedule: `[p01]` → `[p02, p03]` (group) → `[p04, p05]` (group)
110
173
 
174
+ **Brief modes** build the schedule from the brief's phase-units in document
175
+ order, which governs execution even when numeric order differs. Extracted units
176
+ are excluded. A provisional phase stays in the schedule but is never
177
+ dispatched: before its schedule entry starts, the root makes it concrete in
178
+ `plan.md` (writes its Intent and Exit evidence and sets `**Provisional:** no`)
179
+ within the approved outcomes, constraints, authority, and evidence, logs the
180
+ change (in `project-log.md` when the project log is enabled, otherwise in the
181
+ journal), re-runs Step 2.1, and commits the brief before dispatch. A change that
182
+ alters an Outcome, a Constraint, the authority, the endpoint, a Decision, or the
183
+ agreed Approach stops for the focused realignment in brief contract section 4.
184
+ Within those bounds the root may also add, split, or reorder phases and declare
185
+ parallel groups whenever their phases become concrete, with the same logging and
186
+ re-validation, and adds one `code` row per new phase to the brief's
187
+ `## Reviews` table.
188
+
111
189
  ### Step 2.5: Confirm Plan HiLL Checkpoints
112
190
 
113
191
  #### Lite checkpoint bypass
114
192
 
115
193
  Resolve `oat_workflow_mode` from project state before any generic checkpoint
116
194
  field read. When `oat_workflow_mode` is `lite`, resolve checkpoint state as
117
- `none` without reading or interpreting `oat_plan_hill_phases`; for other modes,
118
- an empty list means every phase and therefore cannot represent lite's policy.
195
+ `none` without reading or interpreting `oat_plan_hill_phases`; for the task modes
196
+ (spec-driven, quick, import) an empty list means every phase and therefore
197
+ cannot represent lite's policy; brief modes read it as none (Brief checkpoint
198
+ resolution below).
119
199
  Write this plan frontmatter value:
120
200
 
121
201
  ```yaml
@@ -127,7 +207,8 @@ auto-review preference prompt in both interactive and autonomous runs. Continue
127
207
  directly to Step 2.6. The standard root-owned per-phase review and final review
128
208
  remain required; only HiLL approval pauses are absent.
129
209
 
130
- For every other workflow mode, read `oat_plan_hill_phases` from
210
+ For every workflow mode other than lite and the brief modes (see Brief
211
+ checkpoint resolution below), read `oat_plan_hill_phases` from
131
212
  `"$PROJECT_PATH/plan.md"` frontmatter when present and validate it.
132
213
 
133
214
  - **Valid format:** JSON-like array of phase IDs (e.g., `["p01","p03"]`)
@@ -139,6 +220,22 @@ Determine whether this is a first implementation run:
139
220
  - If `"$PROJECT_PATH/implementation.md"` does not exist, treat as first run.
140
221
  - If it exists but still has template placeholders and no completed task evidence, treat as first run.
141
222
 
223
+ #### Brief checkpoint resolution
224
+
225
+ Brief modes read `oat_plan_hill_phases` with the brief meaning, not the generic
226
+ one: `[]` and an absent field both mean **none**, and an explicit phase array
227
+ means exactly those phases, an opt-in the user recorded. Never reinterpret a
228
+ brief's `[]` as every phase. With none, write
229
+ `oat_auto_review_at_hill_checkpoints: false # brief: no checkpoints` when that
230
+ key is absent, skip the workflow preference check, the first-run checkpoint
231
+ question, Touchpoint A, and the autonomous checkpoint resolution below in both
232
+ interactive and autonomous runs, and continue directly to Step 2.6. With an
233
+ explicit array, validate it with the normal format rules and keep it as the
234
+ recorded value without re-asking; resolve Touchpoint A below (under
235
+ `OAT_AUTONOMOUS=1`, the autonomous checkpoint resolution, which preserves the
236
+ array) and continue to Step 2.6. The per-phase reviews and the final review run
237
+ either way.
238
+
142
239
  #### Autonomous checkpoint resolution
143
240
 
144
241
  If `OAT_AUTONOMOUS=1`, resolve checkpoint state before the workflow preference
@@ -313,6 +410,19 @@ cat "$PROJECT_PATH/implementation.md" 2>/dev/null | head -20
313
410
  - If `oat_current_task_id` points at a task already marked `completed` in the body, advance to the **next incomplete** task (first `pending` / `in_progress` / `blocked` entry).
314
411
  - If all tasks are completed, skip ahead to finalization (Step 11+).
315
412
  - **Always resume** from the resolved task. Print `Resuming from {task_id}.` Do not prompt.
413
+ - **Brief modes:** `oat_current_task_id` may hold a phase ID or an execution
414
+ record ID (brief contract section 8). Resolve a record ID to its phase and a
415
+ phase ID to itself; `null`, an unknown ID, or an accepted or extracted unit
416
+ resolves to the first incomplete phase-unit in document order within the
417
+ active scope, which is every phase in brief and the Goal Projects scope in
418
+ goal. Phase-units come from the brief's
419
+ `## Phase` headings, never from task headings, and a provisional phase is
420
+ incomplete. Print `Resuming from {phase_id}.` and apply the Step 2.2
421
+ provisional rule before dispatching it. When every phase-unit in the active
422
+ scope is accepted, skip ahead to finalization (Step 11+). Finalization starts
423
+ only then, never because every execution record is closed. The stale-state
424
+ reconciliation below resolves the next phase-unit the same way instead of a
425
+ next task.
316
426
  - **Fresh start is an explicit override only.** If the user invoked the skill with `fresh=true` (argument), warn `Starting fresh — this will overwrite implementation.md. Any draft logs will be lost.` and proceed with fresh initialization. Do not offer fresh start interactively; it is a rare edge case reserved for corrupt state or deliberate plan rewrites.
317
427
 
318
428
  **Stale-state reconciliation (approval required):**
@@ -332,6 +442,9 @@ cat "$PROJECT_PATH/implementation.md" 2>/dev/null | head -20
332
442
 
333
443
  - Initialize from template (Step 4)
334
444
 
445
+ In brief modes `oat-project-brief` already initialized the journal; Step 4 runs
446
+ only when it is missing.
447
+
335
448
  **Important:** Never overwrite an existing `implementation.md` without explicit user confirmation (and warn that draft logs will be lost).
336
449
 
337
450
  ### Step 4: Initialize Implementation Document
@@ -357,3 +470,11 @@ Initialize project state so other skills (e.g., `oat-project-progress`) reflect
357
470
  - `oat_phase_status: in_progress`
358
471
  - `oat_current_task: p01-t01`
359
472
  - `oat_project_state_updated: "{ISO 8601 UTC timestamp}"`
473
+
474
+ **Brief modes:** resolve the journal with
475
+ `oat template resolve implementation-brief --output "$PROJECT_PATH/implementation.md"`
476
+ instead, write one Progress Overview row and one `## Phase pNN: <name>` section
477
+ holding only `**Status:** pending` per brief phase, and set both resume pointers
478
+ (`oat_current_task_id` here and `oat_current_task` in `state.md`) to the first
479
+ incomplete phase ID, such as `p01`, rather than a task ID. Anchors and execution
480
+ records are written only when work starts.
@@ -7,7 +7,7 @@ disable-model-invocation: true
7
7
  user-invocable: true
8
8
  allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion
9
9
  metadata:
10
- version: 1.4.20
10
+ version: 1.4.21
11
11
  ---
12
12
 
13
13
  # Import External Plan
@@ -274,6 +274,10 @@ commands or manual checks. Preserve the external source at
274
274
  all `oat_import_*` fields; accepting lite changes execution mode, not import
275
275
  provenance.
276
276
 
277
+ Import never converts a plan to brief mode: an imported plan already carries
278
+ tasks, while a brief carries phases without tasks. To author a brief, start
279
+ `oat-project-brief` instead.
280
+
277
281
  ### Step 4: Update Plan Metadata
278
282
 
279
283
  Set frontmatter in `"$PROJECT_PATH/plan.md"`:
@@ -7,7 +7,7 @@ disable-model-invocation: true
7
7
  user-invocable: true
8
8
  allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion
9
9
  metadata:
10
- version: 1.1.8
10
+ version: 1.1.10
11
11
  ---
12
12
 
13
13
  # Lite Project
@@ -67,6 +67,9 @@ the row. Never persist either autonomy environment signal.
67
67
 
68
68
  - If the work cannot fit one sitting, promote the authored plan to quick mode.
69
69
  - If a design decision is not safely resolvable, promote rather than invent it.
70
+ - Lite never converts to brief. Work that needs several phases with a design
71
+ agreed in conversation belongs in `oat-project-brief`; lite promotion still
72
+ targets quick.
70
73
  - If implementation code is about to change, stop and hand off to
71
74
  `oat-project-implement`.
72
75