@open-agent-toolkit/cli 0.0.53 → 0.0.55
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/assets/docs/cli-utilities/config-and-local-state.md +4 -0
- package/assets/docs/cli-utilities/configuration.md +31 -1
- package/assets/docs/workflows/projects/design-modes.md +108 -0
- package/assets/docs/workflows/projects/index.md +1 -0
- package/assets/docs/workflows/projects/lifecycle.md +6 -0
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-project-design/SKILL.md +451 -212
- package/assets/skills/oat-project-design/references/selective-review-pass.md +112 -0
- package/assets/skills/oat-project-discover/SKILL.md +9 -5
- package/assets/skills/oat-project-quick-start/SKILL.md +132 -13
- package/assets/skills/oat-project-spec/SKILL.md +9 -4
- package/assets/templates/discovery.md +13 -4
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +47 -0
- package/dist/commands/project/archive/archive-utils.d.ts +53 -0
- package/dist/commands/project/archive/archive-utils.d.ts.map +1 -1
- package/dist/commands/project/archive/archive-utils.js +49 -2
- package/dist/commands/project/archive/index.d.ts.map +1 -1
- package/dist/commands/project/archive/index.js +58 -10
- package/dist/config/oat-config.d.ts +4 -0
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +24 -0
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +3 -0
- package/package.json +2 -2
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Selective Review Pass
|
|
2
|
+
|
|
3
|
+
This reference defines the prose-driven classification pass used by `oat-project-design` when `DESIGN_MODE == "selective"`. The skill body owns flow; this file owns the heuristic.
|
|
4
|
+
|
|
5
|
+
## Signal Set
|
|
6
|
+
|
|
7
|
+
Classify each design section as `routine` or `needs-eyes`. Bias is conservative: any one `needs-eyes` signal marks the section `needs-eyes`.
|
|
8
|
+
|
|
9
|
+
Always `needs-eyes`:
|
|
10
|
+
|
|
11
|
+
- `Overview + Architecture`
|
|
12
|
+
- `Security Considerations`
|
|
13
|
+
- `Performance Considerations`
|
|
14
|
+
- `Error Handling`
|
|
15
|
+
- `Migration Plan`
|
|
16
|
+
|
|
17
|
+
Per-section `needs-eyes` signals:
|
|
18
|
+
|
|
19
|
+
- The user flagged concern, uncertainty, or worry about this area during discovery.
|
|
20
|
+
- Discovery Open Questions mention this area.
|
|
21
|
+
- Three or more spec FRs/NFRs directly touch this area.
|
|
22
|
+
- Component boundaries cross modules not already described in `.oat/repo/knowledge/architecture.md`.
|
|
23
|
+
- The section introduces a pattern absent from `.oat/repo/knowledge/conventions.md` and `.oat/repo/knowledge/stack.md`.
|
|
24
|
+
- The section changes public API, CLI, configuration, workflow semantics, defaults, or persisted state.
|
|
25
|
+
- The section introduces a new dependency, provider, service, storage model, permission boundary, or external integration.
|
|
26
|
+
- The section depends on knowledge files that are missing, stale, or too thin to support a low-risk classification.
|
|
27
|
+
|
|
28
|
+
`routine` means the section follows established repo patterns, is low-risk, and has enough grounding to draft silently. It does not mean the section is unimportant; it still appears in the committed design and final review gate.
|
|
29
|
+
|
|
30
|
+
## Adequate Grounding
|
|
31
|
+
|
|
32
|
+
Grounding is adequate when at least one strong source, or two weaker sources, exists for the design surface:
|
|
33
|
+
|
|
34
|
+
- Strong sources: `.oat/repo/knowledge/project-index.md`, `.oat/repo/knowledge/architecture.md`, or a configured docs app with relevant architecture/convention docs.
|
|
35
|
+
- Weaker sources: non-thin `docs/`, `.oat/repo/knowledge/conventions.md`, `.oat/repo/knowledge/stack.md`, `.oat/repo/knowledge/concerns.md`, discovery notes with concrete implementation context, or existing nearby implementation patterns found in the repo.
|
|
36
|
+
|
|
37
|
+
Treat grounding as broadly absent when discovery skipped solution-space exploration and the knowledge base/docs are sparse. In that case, do not recommend Selective Collaborative; prefer Collaborative.
|
|
38
|
+
|
|
39
|
+
## Recommendation Rules
|
|
40
|
+
|
|
41
|
+
Before the picker, run a lightweight classification preflight against the shared section list. Assign Selective Collaborative one of four states:
|
|
42
|
+
|
|
43
|
+
- `recommended`: grounding is adequate and at least 3 sections, or roughly 30-40% of sections, classify as `routine`.
|
|
44
|
+
- `available`: grounding is adequate but Collaborative is still the safer default.
|
|
45
|
+
- `available-not-recommended`: grounding exists, but savings are marginal for this design.
|
|
46
|
+
- `unavailable`: grounding is broadly absent.
|
|
47
|
+
|
|
48
|
+
Default recommendation is Collaborative when in doubt. Draft-and-review is never the picker default unless explicitly selected through argument, environment, or config.
|
|
49
|
+
|
|
50
|
+
## Edge Cases
|
|
51
|
+
|
|
52
|
+
- If every section is `needs-eyes`, Selective Collaborative collapses to Collaborative. Emit: "All sections flagged for review — running as full collaborative."
|
|
53
|
+
- If zero sections are `needs-eyes`, force `Overview + Architecture` to `needs-eyes` so the user sees the framing before silent drafting continues.
|
|
54
|
+
- If a user elevates a `routine` section in the Section Review Plan, keep it `needs-eyes` for the rest of the run.
|
|
55
|
+
- If the user chooses "walk me through every remaining section" during a needs-eyes confirmation, mark all remaining sections `needs-eyes`.
|
|
56
|
+
- If the classification cannot explain its reason in one sentence, treat the section as `needs-eyes`.
|
|
57
|
+
|
|
58
|
+
## Examples
|
|
59
|
+
|
|
60
|
+
Routine example:
|
|
61
|
+
|
|
62
|
+
| Section | Classification | Reason | Signals hit |
|
|
63
|
+
| ---------------- | -------------- | -------------------------------------------------------------------------------------------------- | ------------------- |
|
|
64
|
+
| Testing Strategy | routine | Follows existing requirement-to-test mapping pattern and no discovery uncertainty touches testing. | established pattern |
|
|
65
|
+
|
|
66
|
+
Needs-eyes example:
|
|
67
|
+
|
|
68
|
+
| Section | Classification | Reason | Signals hit |
|
|
69
|
+
| ---------- | -------------- | --------------------------------------------------------------------- | ------------------------------------------- |
|
|
70
|
+
| API Design | needs-eyes | Adds a new public CLI/config surface that changes workflow semantics. | public API/CLI/config, user-facing defaults |
|
|
71
|
+
|
|
72
|
+
## Dogfood Notes
|
|
73
|
+
|
|
74
|
+
Use this section to capture misclassifications found while dogfooding Selective Collaborative mode. Keep entries short and actionable.
|
|
75
|
+
|
|
76
|
+
Template:
|
|
77
|
+
|
|
78
|
+
```markdown
|
|
79
|
+
- Date/project:
|
|
80
|
+
- Section:
|
|
81
|
+
- Classified as:
|
|
82
|
+
- Should have been:
|
|
83
|
+
- Missed or overweighted signal:
|
|
84
|
+
- Prose adjustment:
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Dogfood run 2026-04-30: collaborative-design-workflow
|
|
88
|
+
|
|
89
|
+
Classification pass run manually against this project's own `spec.md`, `design.md`, `discovery.md`, and `.oat/repo/knowledge/*` context. Grounding was adequate (`project-index.md`, `architecture.md`, `conventions.md`, `stack.md`, and detailed discovery/design artifacts exist). Result: Selective Collaborative would be `recommended` because 3 of 12 sections classify as `routine` while high-risk sections still receive live review.
|
|
90
|
+
|
|
91
|
+
| Section | Classified As | Expected? | Notes |
|
|
92
|
+
| --------------------------------------------------- | ------------- | --------- | --------------------------------------------------------------------- |
|
|
93
|
+
| Overview + Architecture | needs-eyes | yes | Forced floor; user should see framing before any silent drafting. |
|
|
94
|
+
| Component Design | needs-eyes | yes | Cross-skill workflow semantics and config/skill boundaries changed. |
|
|
95
|
+
| Data Models | routine | yes | No database/domain model changes; config risk covered elsewhere. |
|
|
96
|
+
| API Design | needs-eyes | yes | Public CLI/config surface changes via `workflow.designMode`. |
|
|
97
|
+
| Security Considerations | needs-eyes | yes | High-risk-by-default section. |
|
|
98
|
+
| Performance Considerations | needs-eyes | yes | High-risk-by-default section. |
|
|
99
|
+
| Error Handling | needs-eyes | yes | High-risk-by-default section. |
|
|
100
|
+
| Testing Strategy (with Requirement-to-Test Mapping) | needs-eyes | yes | New prose-contract validation plus manual dogfood acceptance surface. |
|
|
101
|
+
| Deployment Strategy | routine | yes | No deployment-path change; release packaging validated separately. |
|
|
102
|
+
| Migration Plan | needs-eyes | yes | High-risk-by-default section, even when no migration is expected. |
|
|
103
|
+
| Implementation Phases | routine | yes | Follows established OAT plan/task structure. |
|
|
104
|
+
| Risks and Mitigation | needs-eyes | yes | New user-facing workflow mode and heuristic failure modes. |
|
|
105
|
+
|
|
106
|
+
No classification misfires were identified in this artifact-only pass. Live picker taxonomy, mid-flight elevation, and final recap behavior still require an interactive dogfood run because `oat-project-design` is a provider skill, not an executable CLI command.
|
|
107
|
+
|
|
108
|
+
Deferred follow-up dogfood after this PR opens:
|
|
109
|
+
|
|
110
|
+
- Exercise picker taxonomy live paths: `Recommended`, `Available / not recommended`, and `Unavailable`.
|
|
111
|
+
- Select "walk me through every remaining section" during a needs-eyes confirmation and verify every remaining section is presented.
|
|
112
|
+
- Confirm the final user-review gate lists sections drafted without live confirmation.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-discover
|
|
3
|
-
version:
|
|
3
|
+
version: 2.0.0
|
|
4
4
|
description: Use when starting a project or when requirements are still unclear. Runs structured discovery to gather requirements, constraints, and context.
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
user-invocable: true
|
|
@@ -322,7 +322,7 @@ If `"discovery"` is in `oat_hill_checkpoints`, require explicit user approval be
|
|
|
322
322
|
|
|
323
323
|
**Approval prompt (required):**
|
|
324
324
|
|
|
325
|
-
- "Discovery artifact is ready. Approve discovery and unlock `oat-project-
|
|
325
|
+
- "Discovery artifact is ready. Approve discovery and unlock `oat-project-design`?"
|
|
326
326
|
|
|
327
327
|
**Optional independent review path:**
|
|
328
328
|
|
|
@@ -347,7 +347,7 @@ Update frontmatter:
|
|
|
347
347
|
```yaml
|
|
348
348
|
---
|
|
349
349
|
oat_status: complete
|
|
350
|
-
oat_ready_for: oat-project-
|
|
350
|
+
oat_ready_for: oat-project-design
|
|
351
351
|
---
|
|
352
352
|
```
|
|
353
353
|
|
|
@@ -383,7 +383,7 @@ Key decisions:
|
|
|
383
383
|
- {Decision 1}
|
|
384
384
|
- {Decision 2}
|
|
385
385
|
|
|
386
|
-
Ready for
|
|
386
|
+
Ready for design phase"
|
|
387
387
|
```
|
|
388
388
|
|
|
389
389
|
### Step 15: Output Summary
|
|
@@ -391,5 +391,9 @@ Ready for specification phase"
|
|
|
391
391
|
```
|
|
392
392
|
Discovery phase complete for {project-name}.
|
|
393
393
|
|
|
394
|
-
Next: Create
|
|
394
|
+
Next: Create design with the oat-project-design skill (which will confirm
|
|
395
|
+
requirements automatically and produce both spec.md and design.md).
|
|
396
|
+
|
|
397
|
+
If you'd rather formalize requirements without designing yet, run
|
|
398
|
+
`oat-project-spec` as a standalone step.
|
|
395
399
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-quick-start
|
|
3
|
-
version:
|
|
3
|
+
version: 2.0.2
|
|
4
4
|
description: Use when a task is small enough for quick mode or rapid iteration is preferred. Scaffolds a lightweight OAT project from discovery directly to a runnable plan, with optional brainstorming and lightweight design.
|
|
5
5
|
argument-hint: '<project-name> ["project description"]'
|
|
6
6
|
disable-model-invocation: true
|
|
@@ -170,7 +170,7 @@ git diff --cached --quiet || git commit -m "chore(oat): capture quick-start disc
|
|
|
170
170
|
|
|
171
171
|
### Step 2.5: Decision Point — Design Depth
|
|
172
172
|
|
|
173
|
-
**Auto-advance rule:** If the request was classified as **well-understood** in Step 2a and discovery surfaced no architecture decisions, component boundary questions, or unexpected complexity, skip this decision point entirely and continue directly to Step
|
|
173
|
+
**Auto-advance rule:** If the request was classified as **well-understood** in Step 2a and discovery surfaced no architecture decisions, component boundary questions, or unexpected complexity, skip this decision point entirely and continue directly to Step 2.6 (the requirements gate still fires before plan generation). This preserves the minimal-ceremony contract for straightforward requests.
|
|
174
174
|
|
|
175
175
|
**Otherwise**, present the user with a choice about how to proceed:
|
|
176
176
|
|
|
@@ -188,15 +188,15 @@ Use `AskUserQuestion` to present this choice.
|
|
|
188
188
|
- If discovery surfaced architecture choices, component boundaries, or data model questions → recommend "Lightweight design first"
|
|
189
189
|
- If discovery revealed the scope is larger or more complex than initially expected → recommend "Promote to spec-driven"
|
|
190
190
|
|
|
191
|
-
**If user chooses "Straight to plan":** continue to Step 3.
|
|
191
|
+
**If user chooses "Straight to plan":** continue to Step 2.6 (requirements gate), then Step 3.
|
|
192
192
|
|
|
193
|
-
**If user chooses "Lightweight design first":** execute Step 2.75 before continuing to Step 3.
|
|
193
|
+
**If user chooses "Lightweight design first":** execute Step 2.75 before continuing to Step 3. The Step 2.6 requirements gate is skipped — Step 2.75's in-conversation design validation covers that ground.
|
|
194
194
|
|
|
195
195
|
**If user chooses "Promote to spec-driven":**
|
|
196
196
|
|
|
197
197
|
- Update `discovery.md` frontmatter:
|
|
198
198
|
- `oat_status: complete`
|
|
199
|
-
- `oat_ready_for: oat-project-
|
|
199
|
+
- `oat_ready_for: oat-project-design`
|
|
200
200
|
- `oat_last_updated: {today}`
|
|
201
201
|
- Update `state.md`:
|
|
202
202
|
- `oat_workflow_mode: spec-driven`
|
|
@@ -211,9 +211,105 @@ git add "$PROJECT_PATH/discovery.md" "$PROJECT_PATH/state.md" ".oat/state.md"
|
|
|
211
211
|
git diff --cached --quiet || git commit -m "chore(oat): promote quick-start discovery for {project-name}"
|
|
212
212
|
```
|
|
213
213
|
|
|
214
|
-
- Inform the user: "Discovery is complete. Run `oat-project-
|
|
214
|
+
- Inform the user: "Discovery is complete. Run `oat-project-design` next — it will confirm requirements and produce both `spec.md` and `design.md` in one collaborative pass. If you'd rather formalize requirements without designing yet, `oat-project-spec` remains available as an optional standalone step."
|
|
215
215
|
- Stop here. Do not generate a plan.
|
|
216
216
|
|
|
217
|
+
### Step 2.6: Requirements Gate (Straight-to-Plan Path)
|
|
218
|
+
|
|
219
|
+
Fires only when the straight-to-plan path was chosen at Step 2.5 (explicit choice or auto-advance). Skip when the user selected "Lightweight design first" (Step 2.75 handles its own in-conversation confirmation) or "Promote to spec-driven".
|
|
220
|
+
|
|
221
|
+
Single conversational turn — no loop inside the gate. If the user materially redirects scope, route OUT to lightweight design or back to discovery.
|
|
222
|
+
|
|
223
|
+
> **Tool availability is not the same as interactivity.** If `AskUserQuestion` is unavailable but chat is available, present this gate as a plain chat message and wait for the user's reply. Do not auto-confirm just because the structured question tool is missing.
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
# Explicit non-interactive fallback FIRST (FR9 contract; same signal as
|
|
227
|
+
# design mode choice). Lack of AskUserQuestion alone is NOT non-interactive
|
|
228
|
+
# — if chat with the user is available, present the gate as a plain chat
|
|
229
|
+
# message and wait for their reply instead.
|
|
230
|
+
if [ "${OAT_NON_INTERACTIVE:-}" = "1" ] || no_user_response_channel_exists; then
|
|
231
|
+
echo "Requirements gate auto-confirmed in non-interactive mode."
|
|
232
|
+
# proceed to Step 3
|
|
233
|
+
fi
|
|
234
|
+
|
|
235
|
+
# Interactive bypass (power-user opt-out).
|
|
236
|
+
if [ "${OAT_NO_REQUIREMENTS_GATE:-}" = "1" ] || [ "$ARG_NO_GATE" = "1" ]; then
|
|
237
|
+
# proceed to Step 3 silently
|
|
238
|
+
fi
|
|
239
|
+
|
|
240
|
+
# Extract requirements from discovery.md:
|
|
241
|
+
# - Key Decisions
|
|
242
|
+
# - Success Criteria
|
|
243
|
+
# - Constraints
|
|
244
|
+
# Format as bullet list and present (SINGLE TURN):
|
|
245
|
+
#
|
|
246
|
+
# > "Before I generate the plan, here are the requirements I'm building against:
|
|
247
|
+
# >
|
|
248
|
+
# > Key decisions:
|
|
249
|
+
# > - [decision 1]
|
|
250
|
+
# > - [decision 2]
|
|
251
|
+
# >
|
|
252
|
+
# > Success criteria:
|
|
253
|
+
# > - [criterion 1]
|
|
254
|
+
# >
|
|
255
|
+
# > Constraints:
|
|
256
|
+
# > - [constraint 1]
|
|
257
|
+
# >
|
|
258
|
+
# > Does this match what you want?"
|
|
259
|
+
|
|
260
|
+
# AskUserQuestion multi-choice:
|
|
261
|
+
# 1. Yes — proceed to plan generation
|
|
262
|
+
# 2. Add a minor requirement that still fits this scope (capture inline, proceed — no re-present)
|
|
263
|
+
# 3. Scope needs redirecting — rework discovery or produce a lightweight design first
|
|
264
|
+
#
|
|
265
|
+
# On choice 1: continue to Step 3.
|
|
266
|
+
# On choice 2: prompt once for the addition, append to discovery.md, proceed to Step 3 (do NOT re-present).
|
|
267
|
+
# On choice 3: exit the gate cleanly. Present follow-up choice:
|
|
268
|
+
# a. Produce a lightweight design first (run Step 2.75)
|
|
269
|
+
# b. Expand discovery (return to Step 2)
|
|
270
|
+
# Route the user accordingly. Do NOT loop back into the gate.
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Step 2.75a: Lightweight Design Mode Choice
|
|
274
|
+
|
|
275
|
+
Resolve the interaction mode before drafting. Same mechanics as the full `oat-project-design` skill (Component 1): argument precedes env var, config fallback, **explicit** non-interactive fallback to draft.
|
|
276
|
+
|
|
277
|
+
> **Tool availability is not the same as interactivity.** If `AskUserQuestion` is unavailable but chat is available, ask the mode-choice question as a plain chat message and wait for the user's reply. Only fall back to draft when `OAT_NON_INTERACTIVE=1` is set or there is no user-response channel at all.
|
|
278
|
+
|
|
279
|
+
```
|
|
280
|
+
DESIGN_MODE="${ARG_MODE:-${OAT_DESIGN_MODE:-}}"
|
|
281
|
+
if [ -z "$DESIGN_MODE" ]; then
|
|
282
|
+
if [ "${OAT_NON_INTERACTIVE:-}" = "1" ] || no_user_response_channel_exists; then
|
|
283
|
+
DESIGN_MODE="draft"
|
|
284
|
+
echo "Non-interactive context detected. Falling back to draft-and-review mode."
|
|
285
|
+
else
|
|
286
|
+
# Consult persisted preference (FR15 / Component 14) before prompting
|
|
287
|
+
CONFIG_MODE=$(oat config get workflow.designMode 2>/dev/null || echo "")
|
|
288
|
+
if [ "$CONFIG_MODE" = "collaborative" ] || [ "$CONFIG_MODE" = "selective" ] || [ "$CONFIG_MODE" = "draft" ]; then
|
|
289
|
+
DESIGN_MODE="$CONFIG_MODE"
|
|
290
|
+
if [ "$DESIGN_MODE" = "selective" ]; then
|
|
291
|
+
DESIGN_MODE="collaborative"
|
|
292
|
+
echo "Using workflow.designMode = selective from config (treating as collaborative for lightweight design; Selective Collaborative is only available in full oat-project-design)."
|
|
293
|
+
else
|
|
294
|
+
echo "Using workflow.designMode = ${DESIGN_MODE} from config."
|
|
295
|
+
fi
|
|
296
|
+
else
|
|
297
|
+
# Prefer AskUserQuestion for structured multi-choice when available.
|
|
298
|
+
# If AskUserQuestion is unavailable, ask the same question as a plain
|
|
299
|
+
# chat message and wait for the user's reply. Do NOT switch to draft
|
|
300
|
+
# mode just because the structured tool is missing.
|
|
301
|
+
#
|
|
302
|
+
# Prompt (SAME text as oat-project-design Step 1.5):
|
|
303
|
+
# "How would you like to work through the lightweight design?
|
|
304
|
+
# 1. Collaborative (recommended) — section-by-section, one approach confirmation before drafting
|
|
305
|
+
# 2. Draft-and-review — full draft up front, you review holistically"
|
|
306
|
+
:
|
|
307
|
+
fi
|
|
308
|
+
fi
|
|
309
|
+
fi
|
|
310
|
+
echo "Running in ${DESIGN_MODE} mode."
|
|
311
|
+
```
|
|
312
|
+
|
|
217
313
|
### Step 2.75: Lightweight Design (Optional)
|
|
218
314
|
|
|
219
315
|
Produce a focused `design.md` covering only what's needed for a quality plan. This is NOT the full spec-driven design — it's a quick architectural sketch.
|
|
@@ -242,14 +338,37 @@ Copy template: `.oat/templates/design.md` → `"$PROJECT_PATH/design.md"`
|
|
|
242
338
|
- Dependencies (captured in discovery instead)
|
|
243
339
|
- Risks and Mitigation (captured in discovery instead)
|
|
244
340
|
|
|
245
|
-
**
|
|
246
|
-
|
|
247
|
-
1. Draft architecture overview → present to user for validation
|
|
248
|
-
2. Draft component design → present to user for validation
|
|
249
|
-
3. Draft data flow + testing approach → present to user for validation
|
|
250
|
-
4. Finalize `design.md`
|
|
341
|
+
**Draft the design based on `DESIGN_MODE` (resolved in Step 2.75a):**
|
|
251
342
|
|
|
252
|
-
|
|
343
|
+
```
|
|
344
|
+
IF DESIGN_MODE == "collaborative":
|
|
345
|
+
For SECTION in [Overview, Architecture, Component Design, Testing Strategy
|
|
346
|
+
(required); Data Models, API Design, Error Handling
|
|
347
|
+
(include only when relevant); SKIP Security, Performance,
|
|
348
|
+
Deployment, Migration]:
|
|
349
|
+
Draft section content. Scale each section to its complexity:
|
|
350
|
+
a few sentences if straightforward, up to 200-300 words if nuanced.
|
|
351
|
+
Not-applicable sections: state as a single sentence, not empty.
|
|
352
|
+
Present:
|
|
353
|
+
"Here's what I have for [section]: [content].
|
|
354
|
+
Does this look right, or should we adjust before continuing?"
|
|
355
|
+
Use AskUserQuestion for the validation prompt.
|
|
356
|
+
Revise inline on feedback. Be ready to go back and clarify if something
|
|
357
|
+
doesn't make sense. Re-present if substantive.
|
|
358
|
+
Mark section approved. Move to next.
|
|
359
|
+
|
|
360
|
+
IF DESIGN_MODE == "draft":
|
|
361
|
+
Draft all required sections (Overview, Architecture, Component Design,
|
|
362
|
+
Testing Strategy) and any applicable optional sections (Data Models,
|
|
363
|
+
API Design, Error Handling) in ONE pass (same reduced section set).
|
|
364
|
+
Scale each section to its complexity — no per-section prompts fire.
|
|
365
|
+
Run the FULL 4-check self-review (placeholder + internal consistency +
|
|
366
|
+
scope + ambiguity). No scaled-down variant — identical to the full
|
|
367
|
+
oat-project-design self-review.
|
|
368
|
+
Present the user-review gate wording (adapted for quick-start:
|
|
369
|
+
no HiLL gate by default; commits-first is still in effect).
|
|
370
|
+
Produce design.md only — NO spec.md is written by lightweight design.
|
|
371
|
+
```
|
|
253
372
|
|
|
254
373
|
If `design.md` or `state.md` was updated before one of these validation pauses, commit those artifact changes before waiting for the user response.
|
|
255
374
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-spec
|
|
3
|
-
version:
|
|
4
|
-
description:
|
|
3
|
+
version: 2.0.0
|
|
4
|
+
description: Optional standalone skill for formalizing requirements into a structured spec.md when discovery is complete but you're not ready to design yet. Independent of the design workflow — oat-project-design confirms requirements automatically and does not require this skill to be run first.
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
user-invocable: true
|
|
7
7
|
allowed-tools: Read, Write, Bash(git:*), Glob, Grep, AskUserQuestion
|
|
@@ -450,7 +450,7 @@ Ready for design phase"
|
|
|
450
450
|
### Step 21: Output Summary
|
|
451
451
|
|
|
452
452
|
```
|
|
453
|
-
Specification
|
|
453
|
+
Specification artifact created for {project-name}.
|
|
454
454
|
|
|
455
455
|
Created:
|
|
456
456
|
- {N} functional requirements
|
|
@@ -458,7 +458,12 @@ Created:
|
|
|
458
458
|
- High-level design approach
|
|
459
459
|
- Success metrics
|
|
460
460
|
|
|
461
|
-
|
|
461
|
+
Note: This skill is optional in the default workflow. `oat-project-design`
|
|
462
|
+
will confirm requirements automatically when run after discovery.
|
|
463
|
+
|
|
464
|
+
If you want to proceed to design now, run: `oat-project-design`
|
|
465
|
+
If you're parking the project here, the spec.md is committed and ready
|
|
466
|
+
to pick up later.
|
|
462
467
|
```
|
|
463
468
|
|
|
464
469
|
## Success Criteria
|
|
@@ -129,7 +129,16 @@ _Include this section only when the request is exploratory or multiple viable ap
|
|
|
129
129
|
|
|
130
130
|
Use this discovery artifact to drive the next workflow step:
|
|
131
131
|
|
|
132
|
-
- **
|
|
133
|
-
|
|
134
|
-
- **
|
|
135
|
-
|
|
132
|
+
- **Spec-driven mode:** continue to `oat-project-design` (which confirms
|
|
133
|
+
requirements and produces both `spec.md` and `design.md`).
|
|
134
|
+
- **Spec-driven mode → formalize-only:** use `oat-project-spec` standalone
|
|
135
|
+
if you want a formalized requirements artifact but aren't ready to
|
|
136
|
+
design yet.
|
|
137
|
+
- **Quick mode → straight to plan:** proceed directly to `plan.md` when
|
|
138
|
+
scope is clear and no architecture decisions remain.
|
|
139
|
+
- **Quick mode → optional lightweight design:** produce a focused
|
|
140
|
+
`design.md` (architecture, components, data flow, testing) before
|
|
141
|
+
planning. Choose this when discovery surfaced architecture choices
|
|
142
|
+
or component boundaries.
|
|
143
|
+
- **Quick mode → promote:** escalate to spec-driven if discovery revealed
|
|
144
|
+
the scope is larger or more complex than expected.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGhF,OAAO,EACL,KAAK,SAAS,EACd,KAAK,cAAc,EAGnB,KAAK,UAAU,EAOhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGhF,OAAO,EACL,KAAK,SAAS,EACd,KAAK,cAAc,EAGnB,KAAK,UAAU,EAOhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwDpC,UAAU,yBAAyB;IACjC,mBAAmB,EAAE,CACnB,OAAO,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAC/C,cAAc,CAAC;IACpB,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,KACnB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/D,eAAe,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,sBAAsB,EAAE,CACtB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AAwmCD,wBAAgB,mBAAmB,CACjC,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,OAAO,CA0GT"}
|
|
@@ -14,6 +14,8 @@ const KEY_ORDER = [
|
|
|
14
14
|
'archive.s3SyncOnComplete',
|
|
15
15
|
'archive.summaryExportPath',
|
|
16
16
|
'archive.wrapUpExportPath',
|
|
17
|
+
'archive.awsProfile',
|
|
18
|
+
'archive.awsRegion',
|
|
17
19
|
'autoReviewAtCheckpoints',
|
|
18
20
|
'lastPausedProject',
|
|
19
21
|
'documentation.root',
|
|
@@ -36,6 +38,7 @@ const KEY_ORDER = [
|
|
|
36
38
|
'workflow.reviewExecutionModel',
|
|
37
39
|
'workflow.autoReviewAtHillCheckpoints',
|
|
38
40
|
'workflow.autoNarrowReReviewScope',
|
|
41
|
+
'workflow.designMode',
|
|
39
42
|
'worktrees.root',
|
|
40
43
|
];
|
|
41
44
|
const CONFIG_CATALOG = [
|
|
@@ -171,6 +174,28 @@ const CONFIG_CATALOG = [
|
|
|
171
174
|
owningCommand: 'oat config set archive.wrapUpExportPath <value>',
|
|
172
175
|
description: 'Repository-relative directory where the oat-wrap-up skill writes date-ranged shipping digests. When unset, the skill falls back to `.oat/repo/reference/wrap-ups`.',
|
|
173
176
|
},
|
|
177
|
+
{
|
|
178
|
+
key: 'archive.awsProfile',
|
|
179
|
+
group: 'Shared Repo (.oat/config.json)',
|
|
180
|
+
file: '.oat/config.json',
|
|
181
|
+
scope: 'shared repo',
|
|
182
|
+
type: 'string',
|
|
183
|
+
defaultValue: 'unset',
|
|
184
|
+
mutability: 'read/write',
|
|
185
|
+
owningCommand: 'oat config set archive.awsProfile <value>',
|
|
186
|
+
description: 'AWS named profile forwarded as AWS_PROFILE to every `aws` invocation made by the archive S3 sync (completion + `oat project archive sync`). Precedence: per-invocation flag > existing shell env > this config value.',
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
key: 'archive.awsRegion',
|
|
190
|
+
group: 'Shared Repo (.oat/config.json)',
|
|
191
|
+
file: '.oat/config.json',
|
|
192
|
+
scope: 'shared repo',
|
|
193
|
+
type: 'string',
|
|
194
|
+
defaultValue: 'unset',
|
|
195
|
+
mutability: 'read/write',
|
|
196
|
+
owningCommand: 'oat config set archive.awsRegion <value>',
|
|
197
|
+
description: 'AWS region forwarded as AWS_REGION to every `aws` invocation made by the archive S3 sync (completion + `oat project archive sync`). Precedence: per-invocation flag > existing shell env > this config value.',
|
|
198
|
+
},
|
|
174
199
|
{
|
|
175
200
|
key: 'tools.core',
|
|
176
201
|
group: 'Shared Repo (.oat/config.json)',
|
|
@@ -369,6 +394,17 @@ const CONFIG_CATALOG = [
|
|
|
369
394
|
owningCommand: 'oat config set workflow.autoNarrowReReviewScope <true|false>',
|
|
370
395
|
description: 'Auto-narrow re-review scope to fix-task commits in oat-project-review-provide when re-reviewing completed fix tasks. Has no effect on initial reviews (there is nothing to narrow to). When unset, the skill prompts. Resolution: env > local > shared > user > default.',
|
|
371
396
|
},
|
|
397
|
+
{
|
|
398
|
+
key: 'workflow.designMode',
|
|
399
|
+
group: 'Workflow Preferences (3-layer: local > shared > user)',
|
|
400
|
+
file: '.oat/config.local.json | .oat/config.json | ~/.oat/config.json',
|
|
401
|
+
scope: 'workflow',
|
|
402
|
+
type: 'collaborative | selective | draft',
|
|
403
|
+
defaultValue: 'unset',
|
|
404
|
+
mutability: 'read/write',
|
|
405
|
+
owningCommand: 'oat config set workflow.designMode <value>',
|
|
406
|
+
description: 'Persisted preference for oat-project-design: "collaborative" runs every section section-by-section, "selective" drafts routine sections silently and live-reviews high-risk sections, and "draft" drafts the full design up front for holistic review. Quick-start lightweight design supports collaborative/draft only and treats selective as collaborative when encountered. When unset, the skill prompts. Runtime signals (OAT_NON_INTERACTIVE=1, no TTY) always outrank this preference. Resolution: arg > env > non-interactive context > local > shared > user > default.',
|
|
407
|
+
},
|
|
372
408
|
{
|
|
373
409
|
key: 'sync.defaultStrategy',
|
|
374
410
|
group: 'Sync/Provider (.oat/sync/config.json)',
|
|
@@ -430,6 +466,7 @@ const WORKFLOW_ENUM_VALUES = {
|
|
|
430
466
|
'workflow.hillCheckpointDefault': ['every', 'final'],
|
|
431
467
|
'workflow.postImplementSequence': ['wait', 'summary', 'pr', 'docs-pr'],
|
|
432
468
|
'workflow.reviewExecutionModel': ['subagent', 'inline', 'fresh-session'],
|
|
469
|
+
'workflow.designMode': ['collaborative', 'selective', 'draft'],
|
|
433
470
|
};
|
|
434
471
|
const WORKFLOW_BOOLEAN_KEYS = new Set([
|
|
435
472
|
'workflow.archiveOnComplete',
|
|
@@ -642,6 +679,16 @@ async function setConfigValue(repoRoot, userConfigDir, key, rawValue, surface, d
|
|
|
642
679
|
else if (key === 'archive.wrapUpExportPath') {
|
|
643
680
|
archive.wrapUpExportPath = normalizeSharedRoot(rawValue);
|
|
644
681
|
}
|
|
682
|
+
else if (key === 'archive.awsProfile' || key === 'archive.awsRegion') {
|
|
683
|
+
const subKey = key.slice('archive.'.length);
|
|
684
|
+
const trimmed = rawValue.trim();
|
|
685
|
+
if (trimmed === '') {
|
|
686
|
+
delete archive[subKey];
|
|
687
|
+
}
|
|
688
|
+
else {
|
|
689
|
+
archive[subKey] = trimmed;
|
|
690
|
+
}
|
|
691
|
+
}
|
|
645
692
|
await dependencies.writeOatConfig(repoRoot, {
|
|
646
693
|
...config,
|
|
647
694
|
archive,
|
|
@@ -11,6 +11,23 @@ export interface EnsureS3ArchiveAccessOptions {
|
|
|
11
11
|
mode: 'completion' | 'sync';
|
|
12
12
|
s3Uri?: string | null;
|
|
13
13
|
syncOnComplete: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Config-only fallback AWS profile (e.g., `archive.awsProfile`). This helper
|
|
16
|
+
* applies the value only when the parent env does not already provide
|
|
17
|
+
* `AWS_PROFILE`, matching discovery decision #3 ("config does not clobber an
|
|
18
|
+
* explicit shell env"). Callers that override via flags must layer the
|
|
19
|
+
* override into `dependencies.env` (the helper's second argument) —
|
|
20
|
+
* `buildAwsEnv` is non-clobbering and will not overwrite a value already
|
|
21
|
+
* present in the parent env. Passing a flag value through this option alone
|
|
22
|
+
* is not sufficient.
|
|
23
|
+
*/
|
|
24
|
+
awsProfile?: string | null;
|
|
25
|
+
/**
|
|
26
|
+
* Config-only fallback AWS region. Same non-clobbering semantics as
|
|
27
|
+
* `awsProfile`: flag-style overrides must be layered into
|
|
28
|
+
* `dependencies.env`, not passed through this option.
|
|
29
|
+
*/
|
|
30
|
+
awsRegion?: string | null;
|
|
14
31
|
}
|
|
15
32
|
interface EnsureS3ArchiveAccessDependencies {
|
|
16
33
|
execFile?: ExecFileLike;
|
|
@@ -28,6 +45,17 @@ export interface ArchiveProjectOnCompletionOptions {
|
|
|
28
45
|
s3Uri?: string | null;
|
|
29
46
|
s3SyncOnComplete: boolean;
|
|
30
47
|
summaryExportPath?: string | null;
|
|
48
|
+
/**
|
|
49
|
+
* Config-only AWS profile (`archive.awsProfile`). The completion path has no
|
|
50
|
+
* flag override; this value is forwarded as-is into the env merge, where the
|
|
51
|
+
* parent env wins if it already supplies `AWS_PROFILE`. Discovery decision #3.
|
|
52
|
+
*/
|
|
53
|
+
awsProfile?: string | null;
|
|
54
|
+
/**
|
|
55
|
+
* Config-only AWS region (`archive.awsRegion`). Same non-clobbering semantics
|
|
56
|
+
* as `awsProfile`.
|
|
57
|
+
*/
|
|
58
|
+
awsRegion?: string | null;
|
|
31
59
|
}
|
|
32
60
|
interface ArchiveProjectOnCompletionDependencies extends EnsureS3ArchiveAccessDependencies {
|
|
33
61
|
ensureS3ArchiveAccess?: typeof ensureS3ArchiveAccess;
|
|
@@ -60,6 +88,31 @@ export interface ArchiveSnapshotMetadata {
|
|
|
60
88
|
projectName: string;
|
|
61
89
|
snapshotName: string;
|
|
62
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Build the env passed to every `aws` spawn in this module.
|
|
93
|
+
*
|
|
94
|
+
* Non-clobbering merge: a non-empty value in `opts` is applied only when
|
|
95
|
+
* `parentEnv` does not already provide that key (treating empty/whitespace
|
|
96
|
+
* parent values as unset). If parent env has a non-empty value, it is left
|
|
97
|
+
* untouched even when `opts` supplies a non-empty value. Callers that need
|
|
98
|
+
* flag-style overrides must set the env entry themselves before calling this
|
|
99
|
+
* helper. This matches discovery decision #3 — config does not clobber an
|
|
100
|
+
* explicit shell env.
|
|
101
|
+
*
|
|
102
|
+
* An empty/whitespace value in `opts` is also treated as unset, and we never
|
|
103
|
+
* inject a key when neither source supplies one — so the spawned process sees
|
|
104
|
+
* the same "unset" signal it would have seen without this plumbing.
|
|
105
|
+
*
|
|
106
|
+
* Exported as a package-internal helper so the archive sync command (which
|
|
107
|
+
* also spawns `aws`) can layer flag/env/config precedence and produce the same
|
|
108
|
+
* env shape without duplicating this logic. This symbol is **not** part of the
|
|
109
|
+
* public package surface — keep usage limited to files inside
|
|
110
|
+
* `commands/project/archive/`.
|
|
111
|
+
*/
|
|
112
|
+
export declare function buildAwsEnv(parentEnv: NodeJS.ProcessEnv, opts: {
|
|
113
|
+
awsProfile?: string | null;
|
|
114
|
+
awsRegion?: string | null;
|
|
115
|
+
}): NodeJS.ProcessEnv;
|
|
63
116
|
export declare function buildRepoArchiveS3Uri(s3Uri: string, repoRoot: string): string;
|
|
64
117
|
export declare function buildProjectArchiveS3Uri(s3Uri: string, repoRoot: string, projectKey: string): string;
|
|
65
118
|
export declare function buildArchiveSnapshotName(projectName: string, timestamp: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive-utils.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/archive/archive-utils.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,aAAa,EACb,cAAc,EACd,SAAS,EACT,SAAS,EACT,UAAU,EACX,MAAM,QAAQ,CAAC;AAIhB,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,KAChD,OAAO,CAAC,cAAc,CAAC,CAAC;AAE7B,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,YAAY,GAAG,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"archive-utils.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/archive/archive-utils.ts"],"names":[],"mappings":"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"}
|