@open-agent-toolkit/cli 0.2.59 → 0.2.63

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 (120) hide show
  1. package/assets/agents/oat-phase-implementer.md +27 -4
  2. package/assets/agents/oat-reviewer.md +25 -14
  3. package/assets/bundle-metadata.json +1 -1
  4. package/assets/docs/cli-utilities/config-and-local-state.md +1 -0
  5. package/assets/docs/cli-utilities/configuration.md +10 -8
  6. package/assets/docs/cli-utilities/project-log.md +16 -0
  7. package/assets/docs/cli-utilities/workflow-gates.md +127 -19
  8. package/assets/docs/provider-sync/commands.md +3 -0
  9. package/assets/docs/provider-sync/instruction-sync.md +107 -0
  10. package/assets/docs/reference/cli-reference.md +26 -9
  11. package/assets/docs/reference/oat-directory-structure.md +33 -31
  12. package/assets/docs/workflows/ideas/index.md +1 -1
  13. package/assets/docs/workflows/index.md +1 -0
  14. package/assets/docs/workflows/projects/artifacts.md +24 -3
  15. package/assets/docs/workflows/projects/hill-checkpoints.md +21 -0
  16. package/assets/docs/workflows/projects/implementation-execution.md +5 -0
  17. package/assets/docs/workflows/projects/lifecycle.md +169 -7
  18. package/assets/docs/workflows/projects/picking-up-projects.md +14 -0
  19. package/assets/docs/workflows/projects/pr-flow.md +2 -0
  20. package/assets/docs/workflows/projects/reviews.md +1 -1
  21. package/assets/docs/workflows/projects/state-machine.md +20 -0
  22. package/assets/docs/workflows/skills/explainer-kit.md +10 -4
  23. package/assets/docs/workflows/skills/index.md +2 -1
  24. package/assets/docs/workflows/skills/repo-improve.md +15 -1
  25. package/assets/public-package-versions.json +4 -4
  26. package/assets/skills/oat-brainstorm/SKILL.md +61 -12
  27. package/assets/skills/oat-docs/SKILL.md +13 -8
  28. package/assets/skills/oat-doctor/SKILL.md +3 -3
  29. package/assets/skills/oat-explainer-kit/SKILL.md +14 -1
  30. package/assets/skills/oat-explainer-kit/references/config-contract.md +12 -0
  31. package/assets/skills/oat-explainer-kit/references/lifecycle-contract.md +57 -10
  32. package/assets/skills/oat-explainer-kit/scripts/check-terminal-outcome.mjs +28 -5
  33. package/assets/skills/oat-explainer-kit/scripts/probe-recap-seams.mjs +371 -0
  34. package/assets/skills/oat-explainer-kit/scripts/resolve-intent.mjs +123 -1
  35. package/assets/skills/oat-pjm-review-backlog/SKILL.md +2 -2
  36. package/assets/skills/oat-project-autonomous/SKILL.md +23 -9
  37. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +164 -150
  38. package/assets/skills/oat-project-capture/SKILL.md +2 -2
  39. package/assets/skills/oat-project-complete/SKILL.md +134 -4
  40. package/assets/skills/oat-project-discover/SKILL.md +6 -5
  41. package/assets/skills/oat-project-document/SKILL.md +11 -1
  42. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +164 -150
  43. package/assets/skills/oat-project-implement/SKILL.md +3 -3
  44. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +144 -21
  45. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +164 -150
  46. package/assets/skills/oat-project-implement/references/phase-execution.md +16 -1
  47. package/assets/skills/oat-project-implement/references/plan-and-resume.md +19 -1
  48. package/assets/skills/oat-project-import-plan/SKILL.md +47 -3
  49. package/assets/skills/oat-project-lite/SKILL.md +467 -0
  50. package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +331 -0
  51. package/assets/skills/oat-project-next/SKILL.md +75 -16
  52. package/assets/skills/oat-project-plan/SKILL.md +44 -6
  53. package/assets/skills/oat-project-plan-writing/SKILL.md +6 -3
  54. package/assets/skills/oat-project-pr-final/SKILL.md +33 -7
  55. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +164 -150
  56. package/assets/skills/oat-project-pr-progress/SKILL.md +3 -3
  57. package/assets/skills/oat-project-progress/SKILL.md +27 -5
  58. package/assets/skills/oat-project-promote-spec-driven/SKILL.md +3 -1
  59. package/assets/skills/oat-project-quick-start/SKILL.md +264 -4
  60. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +164 -150
  61. package/assets/skills/oat-project-review-provide/SKILL.md +25 -6
  62. package/assets/skills/oat-project-summary/SKILL.md +61 -26
  63. package/assets/skills/oat-repo-improve/SKILL.md +40 -5
  64. package/assets/skills/oat-repo-improve/references/plan-template.md +84 -7
  65. package/assets/templates/plan-lite.md +165 -0
  66. package/assets/templates/plan.md +1 -1
  67. package/assets/templates/state.md +1 -1
  68. package/dist/commands/config/index.d.ts +1 -0
  69. package/dist/commands/config/index.d.ts.map +1 -1
  70. package/dist/commands/config/index.js +401 -18
  71. package/dist/commands/gate/index.d.ts +3 -1
  72. package/dist/commands/gate/index.d.ts.map +1 -1
  73. package/dist/commands/gate/index.js +699 -211
  74. package/dist/commands/init/tools/shared/skill-script-references.d.ts +126 -0
  75. package/dist/commands/init/tools/shared/skill-script-references.d.ts.map +1 -0
  76. package/dist/commands/init/tools/shared/skill-script-references.js +311 -0
  77. package/dist/commands/instructions/instructions.types.d.ts +63 -0
  78. package/dist/commands/instructions/instructions.types.d.ts.map +1 -1
  79. package/dist/commands/instructions/instructions.utils.d.ts +51 -2
  80. package/dist/commands/instructions/instructions.utils.d.ts.map +1 -1
  81. package/dist/commands/instructions/instructions.utils.js +201 -4
  82. package/dist/commands/instructions/sync/sync.d.ts.map +1 -1
  83. package/dist/commands/instructions/sync/sync.js +12 -1
  84. package/dist/commands/instructions/validate/validate.d.ts.map +1 -1
  85. package/dist/commands/instructions/validate/validate.js +12 -1
  86. package/dist/commands/project/index.d.ts.map +1 -1
  87. package/dist/commands/project/index.js +2 -0
  88. package/dist/commands/project/log/append.d.ts +195 -0
  89. package/dist/commands/project/log/append.d.ts.map +1 -1
  90. package/dist/commands/project/log/append.js +1034 -11
  91. package/dist/commands/project/new/index.d.ts +3 -2
  92. package/dist/commands/project/new/index.d.ts.map +1 -1
  93. package/dist/commands/project/new/index.js +2 -1
  94. package/dist/commands/project/new/scaffold.d.ts +5 -3
  95. package/dist/commands/project/new/scaffold.d.ts.map +1 -1
  96. package/dist/commands/project/new/scaffold.js +38 -10
  97. package/dist/commands/project/promote/index.d.ts +2 -0
  98. package/dist/commands/project/promote/index.d.ts.map +1 -0
  99. package/dist/commands/project/promote/index.js +1 -0
  100. package/dist/commands/project/promote/promote.d.ts +47 -0
  101. package/dist/commands/project/promote/promote.d.ts.map +1 -0
  102. package/dist/commands/project/promote/promote.js +322 -0
  103. package/dist/commands/project/split/run.d.ts.map +1 -1
  104. package/dist/commands/project/split/run.js +8 -1
  105. package/dist/commands/project/validate-plan/index.d.ts.map +1 -1
  106. package/dist/commands/project/validate-plan/index.js +25 -1
  107. package/dist/commands/project/validate-plan/validate-plan.d.ts +8 -0
  108. package/dist/commands/project/validate-plan/validate-plan.d.ts.map +1 -1
  109. package/dist/commands/project/validate-plan/validate-plan.js +49 -0
  110. package/dist/commands/shared/frontmatter.d.ts +1 -1
  111. package/dist/commands/shared/frontmatter.d.ts.map +1 -1
  112. package/dist/commands/shared/frontmatter.js +1 -0
  113. package/dist/commands/state/generate.d.ts.map +1 -1
  114. package/dist/commands/state/generate.js +23 -0
  115. package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -1
  116. package/dist/commands/tools/shared/pack-manifest.js +2 -0
  117. package/dist/config/oat-config.d.ts +41 -0
  118. package/dist/config/oat-config.d.ts.map +1 -1
  119. package/dist/config/oat-config.js +111 -0
  120. package/package.json +2 -2
@@ -15,6 +15,21 @@ 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
+ #### Required Manual or Visual Proof Boundary
19
+
20
+ Before committing a task that declares required manual or visual proof, the
21
+ active phase executor must inspect its effective runtime tool catalog for an
22
+ available computer-use capability. Do not infer availability from planning
23
+ prose, configuration, or another agent's tools. Use available computer-use for
24
+ required visual proof and record the observed result.
25
+
26
+ When `OAT_AUTONOMOUS=1` and no autonomous executor can perform the required
27
+ manual or visual criterion, return `BLOCKED` with an explicit
28
+ `IMPLEMENT-20 unverified proof boundary`. Name the criterion and missing
29
+ capability, and stop before committing the task or marking the task or phase
30
+ complete. Never mark unavailable proof deferred-but-verified. Outside autonomy,
31
+ stop at the same proof boundary for operator execution.
32
+
18
33
  #### Resolve and Dispatch the Phase Implementer
19
34
 
20
35
  Before each phase:
@@ -54,7 +69,7 @@ Before each phase:
54
69
  spec: {PROJECT_PATH}/spec.md
55
70
  implementation: {PROJECT_PATH}/implementation.md
56
71
  discovery: {PROJECT_PATH}/discovery.md
57
- workflow_mode: {spec-driven|quick|import}
72
+ workflow_mode: {spec-driven|quick|import|lite} # lite is always a single phase
58
73
  active_provider: {codex|claude|cursor|other}
59
74
  phase_base_head: {PHASE_BASE_HEAD}
60
75
  worktree: {assigned checkout}
@@ -110,7 +110,25 @@ Example:
110
110
 
111
111
  ### Step 2.5: Confirm Plan HiLL Checkpoints
112
112
 
113
- Read `oat_plan_hill_phases` from `"$PROJECT_PATH/plan.md"` frontmatter when present and validate it.
113
+ #### Lite checkpoint bypass
114
+
115
+ Resolve `oat_workflow_mode` from project state before any generic checkpoint
116
+ 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.
119
+ Write this plan frontmatter value:
120
+
121
+ ```yaml
122
+ oat_auto_review_at_hill_checkpoints: false # lite: no checkpoints
123
+ ```
124
+
125
+ Skip the workflow preference prompt, standard checkpoint prompt, and
126
+ auto-review preference prompt in both interactive and autonomous runs. Continue
127
+ directly to Step 2.6. The standard root-owned per-phase review and final review
128
+ remain required; only HiLL approval pauses are absent.
129
+
130
+ For every other workflow mode, read `oat_plan_hill_phases` from
131
+ `"$PROJECT_PATH/plan.md"` frontmatter when present and validate it.
114
132
 
115
133
  - **Valid format:** JSON-like array of phase IDs (e.g., `["p01","p03"]`)
116
134
  - **Allowed pre-confirmation state:** field missing entirely on the first implementation run
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-import-plan
3
- version: 1.4.13
3
+ version: 1.4.14
4
4
  description: Use when you have an external markdown plan to execute with OAT. Preserves the source plan and normalizes it into canonical plan.md format.
5
5
  argument-hint: '<path-to-plan.md> [--provider codex|cursor|claude] [--project <name>]'
6
6
  oat_gateable: true
@@ -221,6 +221,44 @@ Dispatch Profile import handling:
221
221
  effort preferences.
222
222
  - Do not generate Dispatch Profile recommendation rows during import.
223
223
 
224
+ ### Step 3.5: Lite Offer
225
+
226
+ After normalization, count exact level-two phase headings. Offer lite only when
227
+ the normalized plan has exactly one `## Phase` heading and
228
+ `oat_plan_parallel_groups` is present as an empty list. Any additional phase or
229
+ any declared parallel group keeps the project in import mode without an offer.
230
+
231
+ When eligible, use AskUserQuestion with these choices:
232
+
233
+ 1. **Run as lite (Recommended)** — use the single authored plan contract and
234
+ collapsed single-phase lifecycle.
235
+ 2. **Keep import mode** — preserve the standard imported-plan lifecycle.
236
+
237
+ State the tradeoff verbatim: "Single-phase plans can still be multi-session
238
+ work; choose import mode when the author intentionally kept a longer-running
239
+ project in one phase."
240
+
241
+ If accepted, set an in-memory `LITE_OFFER_ACCEPTED=true` decision for the
242
+ remaining steps and reshape `plan.md` into the `plan-lite.md` section order:
243
+
244
+ 1. Summary
245
+ 2. Decisions
246
+ 3. Assumptions
247
+ 4. Out of Scope
248
+ 5. Validation Criteria
249
+ 6. Parallelism
250
+ 7. the single Phase and its tasks
251
+ 8. Reviews, Implementation Complete, and References
252
+
253
+ Lift Summary, Decisions, Assumptions, and Out of Scope from the external plan's
254
+ prose when present. Where prose is absent, write an explicit assumption that
255
+ names the missing source detail instead of leaving a template placeholder.
256
+ Derive Validation Criteria from the tasks' verification steps and retain their
257
+ commands or manual checks. Preserve the external source at
258
+ `references/imported-plan.md`, keep `oat_plan_source: imported`, and preserve
259
+ all `oat_import_*` fields; accepting lite changes execution mode, not import
260
+ provenance.
261
+
224
262
  ### Step 4: Update Plan Metadata
225
263
 
226
264
  Set frontmatter in `"$PROJECT_PATH/plan.md"`:
@@ -295,6 +333,10 @@ Contract` from `oat-project-plan-writing`: load the current
295
333
  Provider native plan mode uses this
296
334
  same import step and inherits its result.
297
335
 
336
+ When the Step 3.5 lite offer was accepted, skip Step 4.25 phase-gate setup
337
+ entirely. Lite has one phase and no phase-gate prompts; continue directly to
338
+ the import-aware plan artifact review while preserving imported provenance.
339
+
298
340
  If `plan.md` already contains an explicit `oat_phase_review_gate`, preserve it
299
341
  through the shared contract without probing, prompting, or mutation. Resumed or
300
342
  imported explicit values remain authoritative without re-prompting. Otherwise
@@ -411,8 +453,10 @@ them before stopping. Never expose a partially reviewed imported plan to
411
453
 
412
454
  Set `"$PROJECT_PATH/state.md"` frontmatter:
413
455
 
414
- - `oat_workflow_mode: import`
456
+ - `oat_workflow_mode: lite` when `LITE_OFFER_ACCEPTED=true`; otherwise `oat_workflow_mode: import`
415
457
  - `oat_workflow_origin: imported`
458
+ - preserve `oat_import_reference`, `oat_import_source_path`, `oat_import_provider`, and any other `oat_import_*` fields
459
+ - keep `oat_plan_source: imported` in `plan.md` on both branches
416
460
  - `oat_phase: plan`
417
461
  - `oat_phase_status: complete`
418
462
  - `oat_current_task: null`
@@ -553,7 +597,7 @@ Report:
553
597
  - ✅ Canonical `plan.md` generated with OAT task structure.
554
598
  - ✅ `plan.md` metadata marks `oat_plan_source: imported`.
555
599
  - ✅ `plan.md` records the import-aware plan artifact review row unless `workflow.autoArtifactReview.plan` was explicitly disabled.
556
- - ✅ `state.md` marks `oat_workflow_mode: import`.
600
+ - ✅ `state.md` marks `oat_workflow_mode: lite` when the single-phase lite offer was accepted, otherwise `import`; imported origin and `oat_import_*` provenance remain intact.
557
601
  - ✅ `implementation.md` is present and resumable.
558
602
  - ✅ `oat_plan_hill_phases` left unset in frontmatter (deferred to `oat-project-implement` Step 2.5).
559
603
  - ✅ `## Planning Checklist` items left unchecked (HiLL configuration deferred to implementation).
@@ -0,0 +1,467 @@
1
+ ---
2
+ name: oat-project-lite
3
+ version: 1.1.1
4
+ description: Use when a single-sitting change needs a critical interview, an approved single-phase plan, and resumable OAT implementation with minimal ceremony.
5
+ argument-hint: '<project-name> ["project description"]'
6
+ oat_gateable: true
7
+ disable-model-invocation: true
8
+ user-invocable: true
9
+ allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion
10
+ ---
11
+
12
+ # Lite Project
13
+
14
+ Create or resume a project in **lite mode** and produce one approved,
15
+ single-phase `plan.md` for `oat-project-implement`.
16
+
17
+ ## Prerequisites
18
+
19
+ - A repository initialized for OAT (`.oat/` and `.agents/` exist).
20
+ - A change intended to fit one implementation sitting.
21
+
22
+ ## Mode Assertion
23
+
24
+ **OAT MODE: Lite**
25
+
26
+ **Purpose:** Preserve a critical interview, explicit validation, approval,
27
+ resumable task commits, managed review, and a final gate while removing
28
+ multi-phase planning ceremony.
29
+
30
+ When `OAT_AUTONOMOUS=1`, read `references/docs/autonomy-contract.md` and keep
31
+ `OAT_NON_INTERACTIVE=1` set for the run. Resolve every interactive decision
32
+ through its `LITE-0N` row and stop only where that row declares a boundary:
33
+
34
+ - `LITE-01`: inherited dirty tree;
35
+ - `LITE-02`: missing project name or description;
36
+ - `LITE-03`: batched critical interview;
37
+ - `LITE-04`: escalation to quick;
38
+ - `LITE-05`: plan approval;
39
+ - `LITE-06`: dispatch-ladder scope;
40
+ - `LITE-07`: project dispatch policy;
41
+ - `LITE-08`: plan artifact-review findings; and
42
+ - `LITE-09`: configured exit gate; and
43
+ - `LITE-10`: configured lifecycle gate posture.
44
+
45
+ Record each autonomous resolution and its provenance in the artifact named by
46
+ the row. Never persist either autonomy environment signal.
47
+
48
+ **BLOCKED Activities:**
49
+
50
+ - No `design.md` or `spec.md` authoring.
51
+ - No multi-phase plan or parallel group.
52
+ - No implementation code changes.
53
+
54
+ **ALLOWED Activities:**
55
+
56
+ - Lite scaffolding and project metadata updates.
57
+ - One batched critical interview and a conditional clarification round.
58
+ - One single-phase plan with executable validation criteria.
59
+ - Plan approval, artifact review, dispatch policy resolution, and gate review.
60
+
61
+ **Self-Correction Protocol:**
62
+
63
+ - If the work cannot fit one sitting, promote the authored plan to quick mode.
64
+ - If a design decision is not safely resolvable, promote rather than invent it.
65
+ - If implementation code is about to change, stop and hand off to
66
+ `oat-project-implement`.
67
+
68
+ ## Progress Indicators (User-Facing)
69
+
70
+ Print this banner once after entry:
71
+
72
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
73
+ OAT ▸ LITE
74
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
75
+
76
+ Use these compact progress lines:
77
+
78
+ - `[0/7] Checking inherited git state…`
79
+ - `[1/7] Resolving the lite project…`
80
+ - `[2/7] Running the critical interview…`
81
+ - `[3/7] Authoring and checking the single-phase plan…`
82
+ - `[4/7] Confirming plan approval…`
83
+ - `[5/7] Resolving dispatch and reviewing the artifact…`
84
+ - `[6/7] Running the configured gate…`
85
+ - `[7/7] Marking the plan ready for implementation…`
86
+
87
+ ## Artifact Persistence (Required)
88
+
89
+ - Save every change to `plan.md`, `state.md`, and `implementation.md`
90
+ immediately. Never leave interview answers only in conversation.
91
+ - After Step 3 authoring, commit the scoped project artifacts before the Step
92
+ 3.5 escalation check and before the Step 4 approval gate. Promotion must
93
+ consume a durable authored plan.
94
+ - After Step 6 records the structured review disposition, commit the same
95
+ scoped artifacts before Gate Execution so the gate sees a committed
96
+ core-artifact baseline.
97
+ - After a receive-eligible gate handoff, commit its receive bookkeeping. The
98
+ Step 7 completion transition is a separate scoped commit and runs only after
99
+ the gate passes or resolves.
100
+ - Before each scoped commit, resolve the project scope. Scope resolution fails
101
+ closed. A synced project uses `oat project push` with the same message;
102
+ another scope uses only `git add -- "$PROJECT_PATH/plan.md"
103
+ "$PROJECT_PATH/state.md" "$PROJECT_PATH/implementation.md"` followed by a
104
+ commit when the index is non-empty. Never stage unrelated paths.
105
+
106
+ ## Artifact Hygiene
107
+
108
+ Artifact hygiene contract: Before finishing or committing, format every file you created or edited. Use the concrete write/fix formatting command supplied by the governing plan, task, or brief. If none is usable, discover the repository's documented write/fix command from applicable `AGENTS.md`/`CLAUDE.md` instructions and relevant package manifests; do not infer or hardcode a formatter. Prefer a file-scoped invocation when supported, and avoid rewriting unrelated files. If no command is discoverable, warn once with `no format command discovered in repo instructions; skipping`, then continue.
109
+
110
+ After formatting, run only repository checks relevant to the files changed;
111
+ writing lifecycle artifacts does not imply unrelated full test suites.
112
+
113
+ ## Process
114
+
115
+ ### Step 0 (Preflight): Inherited Git State
116
+
117
+ Before scaffolding, surface the working tree state so unrelated changes don't
118
+ get carried into the project workflow's bookkeeping commits.
119
+
120
+ 1. Run `git status --porcelain`. If empty, continue silently.
121
+ 2. If `.oat/sync/manifest.json` is the only entry **and** its two-character
122
+ status code is either `??` or made up solely of the letter `M` and blanks —
123
+ a plain modification, staged, unstaged, or both — commit it without asking:
124
+ `git add -- .oat/sync/manifest.json` then `git commit -m "chore: run sync"`.
125
+ Report the commit and continue. Every other code falls through, including
126
+ `MD`, `MT`, `AM`, `RM`, `CM`, and every unmerged state.
127
+ 3. Otherwise, present the dirty list to the user and offer commit now, proceed
128
+ anyway, or abort (`LITE-01`). Note generated provider-view paths when they
129
+ appear. Commit now stages only the paths the user selected.
130
+ 4. When the response channel is unavailable and `OAT_NON_INTERACTIVE=1`, apply
131
+ `LITE-01`: proceed without staging unrelated files. Destructive cleanup is
132
+ a stop boundary.
133
+
134
+ Once the dirty list has been presented, do not advance past this gate without
135
+ an explicit choice. The step 2 manifest-only auto-commit is not a choice point
136
+ and continues on its own.
137
+
138
+ ### Step 0.5: Resolve Active Project or Scaffold Lite
139
+
140
+ ```bash
141
+ PROJECT_PATH=$(oat config get activeProject 2>/dev/null || true)
142
+ PROJECTS_ROOT="${OAT_PROJECTS_ROOT:-$(oat config get projects.root 2>/dev/null || echo ".oat/projects/shared")}"
143
+ PROJECTS_ROOT="${PROJECTS_ROOT%/}"
144
+ ```
145
+
146
+ If no valid active lite project exists, resolve a project name and substantive
147
+ description from `$ARGUMENTS`. A bare name is insufficient. Ask for the
148
+ missing startup input under `LITE-02`; in autonomous mode derive both only from
149
+ the explicit goal and stop if it is not substantive.
150
+
151
+ Create the project through the canonical scaffolder:
152
+
153
+ ```bash
154
+ oat project new "{project-name}" --mode lite
155
+ PROJECT_PATH=$(oat config get activeProject)
156
+ ```
157
+
158
+ Confirm `state.md` reports `oat_workflow_mode: lite`, `oat_phase: plan`, and
159
+ `oat_phase_status: in_progress`. Do not create discovery or design artifacts.
160
+
161
+ ### Step 1: Read Repository Knowledge
162
+
163
+ Read repository instructions and the minimum durable context needed for the
164
+ change. Start with root `AGENTS.md`/`CLAUDE.md`. If `.oat/repo/AGENTS.md`
165
+ exists, follow its routing into current state, decisions, and references.
166
+ Inspect only the code surfaces necessary to challenge the request and produce
167
+ an executable plan.
168
+
169
+ ### Step 2: Batched Critical Interview
170
+
171
+ Present **one batched round** of critical questions covering behavior, scope,
172
+ constraints, decisions, assumptions, exclusions, and proof. Keep the batch
173
+ small and load-bearing. Wait for the complete response before proceeding
174
+ (`LITE-03`).
175
+
176
+ Use the interview to select exactly one plan content shape: `minimal`,
177
+ `product`, `technical`, or `both`. Product content is required whenever the
178
+ change alters user-visible behavior. Technical content is required when the
179
+ work crosses module boundaries, changes a data or state format, or changes a
180
+ contract consumed by another surface. Select `both` when both triggers apply.
181
+ Select `minimal` only when neither trigger applies.
182
+
183
+ Run a second round only for questions that the first round's answers created.
184
+ It may clarify those new ambiguities; it must not reopen the whole
185
+ interview. If the user says "just proceed", choose the most careful supported
186
+ interpretation of every open question and record those careful assumptions in
187
+ `plan.md`. Under autonomy, answer from repository evidence and stop on material
188
+ product ambiguity that the evidence cannot resolve.
189
+
190
+ ### Step 3: Author the Single-Phase Plan
191
+
192
+ Write the interview result into `"$PROJECT_PATH/plan.md"` before any escalation
193
+ or approval decision. Preserve the lite scaffold frontmatter, including
194
+ `oat_template: true`, until Step 7.
195
+
196
+ The authored plan contains, in order:
197
+
198
+ 1. `## Summary`
199
+ 2. `## Decisions`
200
+ 3. `## Product Behavior` when the selected shape is `product` or `both`
201
+ 4. `## Technical Design` when the selected shape is `technical` or `both`
202
+ 5. `## Assumptions`
203
+ 6. `## Out of Scope`
204
+ 7. `## Validation Criteria`
205
+ 8. the required single-phase task list in the `oat-project-plan-writing`
206
+ grammar
207
+
208
+ In Decisions, record the selected shape and a one-line rationale tied to the
209
+ triggers above. Product Behavior is a numbered list of testable outcomes, not
210
+ implementation steps. Technical Design describes current operation and the
211
+ proposed changes; include data flow only when state or data crosses a boundary.
212
+ Use file-and-symbol references instead of line numbers. A short snippet is
213
+ allowed only to establish a proposed interface shape.
214
+
215
+ `minimal` fits a typo or copy-only documentation edit, a version or pin update,
216
+ or a semantics-preserving mechanical rename. A configuration edit that changes
217
+ runtime behavior is not minimal. Keep each optional section to roughly one
218
+ screen. If either needs more space to remove ambiguity, promote to Quick.
219
+
220
+ Every validation criterion is one bullet and names its proof as a backticked
221
+ command or test name, or a `manual:` visual-proof instruction. A criterion
222
+ without one of those checks is a defect. The task graph has exactly one phase,
223
+ no parallel groups, stable task IDs, declared files, a task-level implementation
224
+ and proof strategy, verification commands, and one commit message per task.
225
+
226
+ For each task, name the strategy, the observable risk it covers, why the
227
+ evidence is proportionate, and the exact command or `manual:` proof. Supported
228
+ strategies include test-first development, characterization-first work,
229
+ implementation followed by a focused regression, static or build checks, and
230
+ manual or computer-use visual proof. Apply these tiebreakers:
231
+
232
+ - Static or build checks alone are sufficient only when the change cannot alter
233
+ runtime behavior.
234
+ - Every behavioral change has at least one proof that fails without the change.
235
+ For reusable skill, template, or agent wording, a lightweight assertion in
236
+ the existing `skills.test.ts` suite is proportionate when removing the
237
+ contract makes it fail; do not create a prose-only fixture or harness.
238
+ - A bug fix preserves a pre-fix reproduction. Waive this only after a bounded
239
+ attempt proves the original environment or state unavailable; record that
240
+ evidence, use the strongest alternate regression control, and require
241
+ reviewer acceptance.
242
+ - A user-interface change requires visual proof. Under autonomy, use available
243
+ computer-use capability or stop at the `IMPLEMENT-20` proof boundary.
244
+ - Security, provenance, approval, receipt, publication, and other
245
+ assurance-sensitive contracts require reproduction-grade negative and valid
246
+ controls.
247
+ - Refactors default to characterization-first unless existing tests already
248
+ cover the preserved behavior. Documentation-only work may use link, spelling,
249
+ formatting, or build proof. Behavior-changing configuration requires
250
+ behavioral proof. Deletions require a negative search plus the relevant build
251
+ or composition check.
252
+
253
+ `oat project validate-plan` enforces proof syntax for Validation Criteria, not
254
+ semantic adequacy. Artifact review challenges the selected shape and strategy;
255
+ code review verifies that the declared evidence exists and can prove the claim.
256
+
257
+ Initialize or update `implementation.md` with the first task pointer while
258
+ keeping implementation in progress. Run:
259
+
260
+ ```bash
261
+ oat project validate-plan --project-path "$PROJECT_PATH"
262
+ ```
263
+
264
+ Format the authored artifacts, resolve project scope, and create the scoped
265
+ pre-approval commit required by Artifact Persistence. Only after that commit is
266
+ durable may Step 3.5 or Step 4 run.
267
+
268
+ ### Step 3.5: Escalation Check
269
+
270
+ Read the now-populated and committed `plan.md`. Apply `LITE-04`:
271
+
272
+ - Promote if the task list will not fit one sitting.
273
+ - Promote if an implementation-affecting design decision remains unresolvable.
274
+ - Otherwise record why lite remains appropriate and continue.
275
+
276
+ Promotion must invoke the real command against the authored project:
277
+
278
+ ```bash
279
+ oat project promote "$PROJECT_PATH" --to quick --json
280
+ ```
281
+
282
+ On success, stop lite execution and point to `oat-project-quick-start`. The
283
+ promotion consumes the authored sections, so interview content is preserved.
284
+ Never simulate the promotion with direct file edits.
285
+
286
+ ### Step 4: Single Approval Gate
287
+
288
+ This is the only approval gate. Use `AskUserQuestion` exactly once to offer:
289
+
290
+ 1. Approve the recorded requirement set and plan.
291
+ 2. Revise the plan, then return to Step 3 and persist it again.
292
+ 3. Promote to quick mode through Step 3.5.
293
+
294
+ Under `OAT_AUTONOMOUS=1`, apply `LITE-05`: auto-confirm the recorded
295
+ requirement set and write the approval decision and evidence into `plan.md`.
296
+ Contradictory or materially incomplete requirements stop at a product-judgment
297
+ boundary. Do not add another approval pause later.
298
+
299
+ ### Step 5: Resolve Dispatch Ceiling
300
+
301
+ Invoke the complete **Managed Dispatch Readiness and Review Contract** from
302
+ `oat-project-plan-writing`. Load the current `oat-project-plan-writing/SKILL.md`
303
+ and follow that contract as written. Resolve and, when necessary, adopt the
304
+ dispatch ladder before selecting a project policy. Do not copy model names into
305
+ the skill.
306
+
307
+ For the ladder ownership decision, apply `LITE-06`, which is identical to
308
+ `QS-08`: check existing user, local, then authorized shared configuration in
309
+ that fixed order; skip scalar-blocked candidates; adopt once; re-run the
310
+ preflight resolver. Stop before writing if none is compatible.
311
+
312
+ Resolve the project policy through `LITE-07`, identical to `QS-09`: preserve an
313
+ explicit or configured policy; unresolved non-interactive state blocks. The
314
+ project policy remains a named ceiling, uncapped managed selection, or host
315
+ inheritance, never a pinned provider target.
316
+
317
+ Run the reviewer readiness check:
318
+
319
+ ```bash
320
+ oat project dispatch-ceiling resolve --provider "$ACTIVE_PROVIDER" --role reviewer --preflight --json
321
+ ```
322
+
323
+ Lite has no workflow-preference prompt, no phase review setup step, and no
324
+ HiLL setup. Built-in implementation review remains unchanged.
325
+
326
+ ### Step 5.5: Configure Lifecycle Gate Posture
327
+
328
+ After the complete Lite plan has stable phase IDs and before its plan artifact
329
+ review, invoke the `Shared Lifecycle Gate Posture Setup Contract` from the
330
+ shared planning contract. At this boundary, load the current
331
+ `oat-project-plan-writing/SKILL.md` and follow that contract as written. This
332
+ setup remains independent from Lite's project-aware Gate Execution and does not
333
+ add phase-review or HiLL setup.
334
+
335
+ Apply `LITE-10` to the shared contract's interaction. When
336
+ `oat_skill_gate_overrides` already exists, preserve it through the shared
337
+ contract without probing, prompting, or mutation. Otherwise, in interactive
338
+ planning, offer Keep or Disable independently for each configured gate.
339
+ Persist only disabled choices to `"$PROJECT_PATH/state.md"`. Never modify the
340
+ shared, local, or user configuration layers. In non-interactive planning,
341
+ preserve configured gates and do not invent or write an override.
342
+
343
+ ### Step 6: Run Plan Artifact Review Loop
344
+
345
+ Invoke the `Auto Artifact-Review Loop` from `oat-project-plan-writing`. Load
346
+ the current `oat-project-plan-writing/SKILL.md` and follow that loop as written,
347
+ with:
348
+
349
+ - `target: plan`
350
+ - `type: artifact`
351
+ - `scope: plan`
352
+ - `artifact_path: "$PROJECT_PATH/plan.md"`
353
+ - `oat_output_mode: structured`
354
+
355
+ The loop is structured and adds no user pause. Resolve
356
+ `workflow.autoArtifactReview.plan`; only explicit `false` skips it. Keep review
357
+ at the current planning parent unless the shared managed-dispatch contract
358
+ proves the exception route is required. Accepted handles are never replaced.
359
+
360
+ Apply `LITE-08`, using the same shape as `IMPORT-08`: apply only unambiguous
361
+ artifact-local canonicalization fixes, never rewrite source intent, and stop
362
+ on unresolved Critical findings or material ambiguity. Record the actual plan
363
+ review row or explicit skip in `plan.md`.
364
+
365
+ Format and validate the artifacts again. Resolve scope and create the required
366
+ post-review scoped commit before Gate Execution. Do not mark the plan complete
367
+ yet; the committed baseline remains resumable and `in_progress`.
368
+
369
+ ### Gate Execution
370
+
371
+ The lite exit-gate review scope is the committed `plan.md`, `state.md`, and
372
+ `implementation.md` bundle. It runs after Step 6 and before Step 7.
373
+
374
+ 1. Resolve the gate for this skill with project context:
375
+
376
+ ```bash
377
+ oat gate resolve <this-skill> --project "$PROJECT_PATH" --json
378
+ ```
379
+
380
+ Handle all three `resolution` values explicitly:
381
+ - `not_configured`: no gate is configured; proceed directly to the completion steps in Step 7 below.
382
+ - `configured_disabled_by_project`: the operator disabled this configured gate for this project. Do not launch any process. Emit `configured but disabled by project override`, including the project path and the `projectOverride` source from the envelope, then proceed directly to the completion steps in Step 7 below. A project-disabled gate never enters the passed, missing, or failed branches, and its `configuredGate` is evidence only, never executed.
383
+ - `configured`: continue with the steps below, executing `effectiveGate` exactly as configured.
384
+
385
+ A null, missing, malformed, or unrecognized result is an operational failure
386
+ that fails closed as unresolved. Never treat it as "no gate configured."
387
+
388
+ 2. Export `PROJECT_PATH`. If the stored command invokes lifecycle gate review,
389
+ its canonical form is:
390
+
391
+ ```bash
392
+ oat --json gate review --project "$PROJECT_PATH" ...
393
+ ```
394
+
395
+ Use global `--json` before `gate review`. Reject `oat gate
396
+ review ...` without the global `--json` placement. Reusable declarations
397
+ must not contain `--target <id>` or add it at runtime. Stop and migrate an invalid stored
398
+ declaration before execution; never inject or append execution-time argv.
399
+
400
+ 3. When the current planning parent's model identity is available and the
401
+ command is `oat gate review`, export
402
+ `OAT_GATE_PRODUCER_IDENTITY=<model>:declared` only for that invocation.
403
+ Otherwise ensure it is unset. Do not persist it or alter the command.
404
+ 4. Execute the resolved command exactly as configured. Capture stdout, stderr,
405
+ exit code, and structured JSON. Exit code alone never authorizes receipt.
406
+ 5. Invoke receive only when all three conditions hold: status is `ok` or
407
+ `blocked`, `receiveEligible: true`, and a non-null `handoff` corroborates
408
+ the artifact. `receiveEligible: false` is a hard stop.
409
+ `targeting_correlation_failed` is never receivable. Correct and revalidate
410
+ `artifact_validation_failed` before receipt. Unknown, contradictory, or
411
+ malformed results stop.
412
+ 6. For a validated, receive-eligible `blocked` result, apply `LITE-09`:
413
+ - `block`: remediate and retry up to the configured limit;
414
+ - `prompt`: report an unresolved human boundary;
415
+ - `warn`: record the validated gate failure and continue.
416
+
417
+ Operational, validation, targeting, launch, and receive failures never inherit
418
+ `onFailure` continuation semantics.
419
+
420
+ A gate that ends in `block` after attempts are exhausted, or at an unresolved
421
+ `prompt` boundary, means the completion steps below MUST NOT run; the project
422
+ stays `in_progress` and resumable. Persist eligible receive bookkeeping in its
423
+ own scoped commit. A no-gate result is not success output; it continues to
424
+ Step 7.
425
+
426
+ ### Step 7: Mark Plan Complete and Hand Off
427
+
428
+ Run only after the configured gate passes or resolves according to its
429
+ validated `onFailure` policy.
430
+
431
+ Update `plan.md` atomically:
432
+
433
+ - `oat_status: complete`
434
+ - `oat_ready_for: oat-project-implement`
435
+ - `oat_phase_status: complete`
436
+ - `oat_template: false`
437
+
438
+ Update `state.md`:
439
+
440
+ - `oat_workflow_mode: lite`
441
+ - `oat_phase: plan`
442
+ - `oat_phase_status: complete`
443
+ - `oat_current_task: null`
444
+ - `oat_project_state_updated: "{ISO 8601 UTC timestamp}"`
445
+
446
+ Ensure `implementation.md` is present and points to the plan's first task with
447
+ status `in_progress`. Run `oat state refresh`, format the scoped artifacts,
448
+ resolve project scope, and create the separate completion commit. Then report:
449
+
450
+ ```text
451
+ Lite plan approved and ready. Next: oat-project-implement
452
+ ```
453
+
454
+ ## Success Criteria
455
+
456
+ - Exactly one batched interview ran, with only a causally created conditional
457
+ clarification round.
458
+ - The plan contains Summary, Decisions, Assumptions, Out of Scope, executable
459
+ Validation Criteria, and exactly one sequential phase.
460
+ - The authored plan was committed before escalation and approval.
461
+ - Exactly one approval gate ran.
462
+ - No spec, design, phase review setup, or HiLL setup was added.
463
+ - Reviewer dispatch readiness and the structured artifact-review loop resolved.
464
+ - The configured gate saw a committed core-artifact baseline and used canonical
465
+ global `--json` placement without `--target`.
466
+ - Completion state was committed separately and routes to
467
+ `oat-project-implement`.