@open-agent-toolkit/cli 0.3.18 → 0.3.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/assets/agents/oat-phase-implementer.md +104 -3
- package/assets/agents/oat-reviewer.md +20 -5
- package/assets/bundle-metadata.json +1 -1
- package/assets/docs/reference/cli-reference.md +15 -7
- package/assets/docs/reference/oat-directory-structure.md +2 -0
- package/assets/docs/reference/project-artifacts.md +72 -1
- package/assets/docs/reference/project-state-machine.md +55 -6
- package/assets/docs/skills/brainstorm.md +3 -1
- package/assets/docs/skills/index.md +13 -9
- package/assets/docs/workflows/advanced/autonomy.md +12 -2
- package/assets/docs/workflows/advanced/dispatch-ceiling.md +2 -2
- package/assets/docs/workflows/advanced/workflow-gates.md +25 -7
- package/assets/docs/workflows/approvals-and-automation.md +25 -9
- package/assets/docs/workflows/choose-workflow.md +24 -8
- package/assets/docs/workflows/ideas/index.md +1 -1
- package/assets/docs/workflows/ideas/lifecycle.md +3 -2
- package/assets/docs/workflows/projects/closeout/closeout-skills.md +83 -5
- package/assets/docs/workflows/projects/closeout/pr-flow.md +9 -1
- package/assets/docs/workflows/projects/execution/execution-skills.md +27 -2
- package/assets/docs/workflows/projects/execution/implementation-execution.md +15 -0
- package/assets/docs/workflows/projects/execution/picking-up-projects.md +20 -1
- package/assets/docs/workflows/projects/lifecycle.md +172 -9
- package/assets/docs/workflows/projects/planning/hill-checkpoints.md +18 -1
- package/assets/docs/workflows/projects/planning/planning-skills.md +13 -10
- package/assets/docs/workflows/projects/planning/starting-projects.md +138 -20
- package/assets/docs/workflows/projects/reviews/index.md +36 -2
- package/assets/docs/workflows/projects/reviews/review-flavors.md +7 -3
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-brainstorm/SKILL.md +58 -9
- package/assets/skills/oat-brainstorm/references/destinations.md +12 -4
- package/assets/skills/oat-docs/SKILL.md +13 -4
- package/assets/skills/oat-pjm-review-backlog/SKILL.md +2 -2
- package/assets/skills/oat-project-autonomous/SKILL.md +20 -8
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +156 -122
- package/assets/skills/oat-project-brief/SKILL.md +592 -0
- package/assets/skills/oat-project-brief/references/brief-contract.md +743 -0
- package/assets/skills/oat-project-brief/references/docs/autonomy-contract.md +412 -0
- package/assets/skills/oat-project-brief/references/docs/gate-approval-record.md +93 -0
- package/assets/skills/oat-project-capture/SKILL.md +2 -2
- package/assets/skills/oat-project-complete/SKILL.md +16 -2
- package/assets/skills/oat-project-discover/SKILL.md +4 -2
- package/assets/skills/oat-project-dispatch-subagents/SKILL.md +9 -1
- package/assets/skills/oat-project-document/SKILL.md +17 -1
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +156 -122
- package/assets/skills/oat-project-goal/SKILL.md +697 -0
- package/assets/skills/oat-project-goal/references/docs/autonomy-contract.md +412 -0
- package/assets/skills/oat-project-goal/references/docs/gate-approval-record.md +93 -0
- package/assets/skills/oat-project-implement/SKILL.md +1 -1
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +107 -0
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +156 -122
- package/assets/skills/oat-project-implement/references/docs/gate-approval-record.md +13 -0
- package/assets/skills/oat-project-implement/references/phase-execution.md +173 -1
- package/assets/skills/oat-project-implement/references/plan-and-resume.md +124 -3
- package/assets/skills/oat-project-import-plan/SKILL.md +5 -1
- package/assets/skills/oat-project-lite/SKILL.md +4 -1
- package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +156 -122
- package/assets/skills/oat-project-new/SKILL.md +5 -1
- package/assets/skills/oat-project-next/SKILL.md +71 -14
- package/assets/skills/oat-project-next/references/docs/gate-approval-record.md +13 -0
- package/assets/skills/oat-project-plan/SKILL.md +24 -3
- package/assets/skills/oat-project-plan-writing/SKILL.md +8 -4
- package/assets/skills/oat-project-pr-final/SKILL.md +65 -3
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +156 -122
- package/assets/skills/oat-project-pr-progress/SKILL.md +125 -4
- package/assets/skills/oat-project-progress/SKILL.md +63 -8
- package/assets/skills/oat-project-progress/references/docs/gate-approval-record.md +13 -0
- package/assets/skills/oat-project-promote-spec-driven/SKILL.md +2 -2
- package/assets/skills/oat-project-quick-start/SKILL.md +65 -1
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +156 -122
- package/assets/skills/oat-project-quick-start/references/docs/gate-approval-record.md +13 -0
- package/assets/skills/oat-project-reconcile/SKILL.md +94 -3
- package/assets/skills/oat-project-review-provide/SKILL.md +397 -12
- package/assets/skills/oat-project-review-receive/SKILL.md +155 -1
- package/assets/skills/oat-project-revise/SKILL.md +51 -4
- package/assets/skills/oat-project-summary/SKILL.md +150 -2
- package/assets/skills/oat-wave-execute/SKILL.md +3 -2
- package/assets/templates/implementation-brief.md +165 -0
- package/assets/templates/plan-brief.md +140 -0
- package/assets/templates/plan.md +1 -1
- package/assets/templates/state.md +8 -2
- package/dist/commands/project/closeout-check/closeout-invariant.d.ts +119 -3
- package/dist/commands/project/closeout-check/closeout-invariant.d.ts.map +1 -1
- package/dist/commands/project/closeout-check/closeout-invariant.js +454 -2
- package/dist/commands/project/closeout-check/index.d.ts +21 -3
- package/dist/commands/project/closeout-check/index.d.ts.map +1 -1
- package/dist/commands/project/closeout-check/index.js +190 -4
- package/dist/commands/project/complete-state/index.d.ts +2 -1
- package/dist/commands/project/complete-state/index.d.ts.map +1 -1
- package/dist/commands/project/complete-state/index.js +7 -1
- package/dist/commands/project/delivery/check.d.ts +66 -0
- package/dist/commands/project/delivery/check.d.ts.map +1 -0
- package/dist/commands/project/delivery/check.js +232 -0
- package/dist/commands/project/delivery/evidence.d.ts +171 -0
- package/dist/commands/project/delivery/evidence.d.ts.map +1 -0
- package/dist/commands/project/delivery/evidence.js +902 -0
- package/dist/commands/project/delivery/index.d.ts +7 -0
- package/dist/commands/project/delivery/index.d.ts.map +1 -0
- package/dist/commands/project/delivery/index.js +13 -0
- package/dist/commands/project/delivery/refresh.d.ts +110 -0
- package/dist/commands/project/delivery/refresh.d.ts.map +1 -0
- package/dist/commands/project/delivery/refresh.js +441 -0
- package/dist/commands/project/index.d.ts.map +1 -1
- package/dist/commands/project/index.js +2 -0
- package/dist/commands/project/log/append.d.ts +6 -0
- package/dist/commands/project/log/append.d.ts.map +1 -1
- package/dist/commands/project/log/append.js +6 -1
- package/dist/commands/project/new/scaffold.d.ts +1 -1
- package/dist/commands/project/new/scaffold.d.ts.map +1 -1
- package/dist/commands/project/new/scaffold.js +81 -7
- package/dist/commands/project/promote/promote.d.ts +46 -1
- package/dist/commands/project/promote/promote.d.ts.map +1 -1
- package/dist/commands/project/promote/promote.js +646 -5
- package/dist/commands/project/validate-plan/frontmatter.d.ts +12 -0
- package/dist/commands/project/validate-plan/frontmatter.d.ts.map +1 -0
- package/dist/commands/project/validate-plan/frontmatter.js +27 -0
- package/dist/commands/project/validate-plan/index.d.ts.map +1 -1
- package/dist/commands/project/validate-plan/index.js +62 -18
- package/dist/commands/project/validate-plan/profiles.d.ts +69 -0
- package/dist/commands/project/validate-plan/profiles.d.ts.map +1 -0
- package/dist/commands/project/validate-plan/profiles.js +420 -0
- package/dist/commands/project/validate-plan/validate-plan.d.ts +3 -19
- package/dist/commands/project/validate-plan/validate-plan.d.ts.map +1 -1
- package/dist/commands/project/validate-plan/validate-plan.js +5 -82
- package/dist/commands/shared/frontmatter.d.ts +1 -1
- package/dist/commands/shared/frontmatter.d.ts.map +1 -1
- package/dist/commands/shared/frontmatter.js +2 -0
- package/dist/commands/state/generate.d.ts.map +1 -1
- package/dist/commands/state/generate.js +82 -2
- package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -1
- package/dist/commands/tools/shared/pack-manifest.js +4 -0
- package/package.json +2 -2
|
@@ -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
|
|
118
|
-
an empty list means every phase and therefore
|
|
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
|
|
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.
|
|
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.
|
|
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
|
|