owflow 0.1.10 → 0.3.0
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 +81 -28
- package/dist/agents/code-reviewer.md +1 -1
- package/dist/agents/production-readiness-checker.md +1 -1
- package/dist/agents/project-analyzer.md +0 -1
- package/dist/agents/task-classifier.md +3 -3
- package/dist/commands/agents-md-generator.md +36 -0
- package/dist/commands/dev-analyze.md +33 -0
- package/dist/commands/dev-bugfix.md +37 -0
- package/dist/commands/dev-finalize.md +33 -0
- package/dist/commands/dev-implement.md +34 -0
- package/dist/commands/dev-plan.md +37 -0
- package/dist/commands/dev-spec.md +37 -0
- package/dist/commands/dev-tdd-red.md +33 -0
- package/dist/commands/dev-verify.md +33 -0
- package/dist/commands/development.md +11 -12
- package/dist/commands/diagrams-mermaid.md +3 -4
- package/dist/commands/flow-init.md +3 -4
- package/dist/commands/goal-development.md +32 -0
- package/dist/commands/html-renderer.md +3 -4
- package/dist/commands/migration.md +3 -4
- package/dist/commands/performance.md +3 -4
- package/dist/commands/research.md +3 -4
- package/dist/commands/reviews-code.md +4 -4
- package/dist/commands/reviews-pragmatic.md +4 -4
- package/dist/commands/reviews-production-readiness.md +4 -4
- package/dist/commands/reviews-reality-check.md +4 -4
- package/dist/commands/reviews-spec-audit.md +4 -4
- package/dist/commands/rule-reviewer.md +38 -0
- package/dist/commands/standards-discover.md +3 -4
- package/dist/commands/standards-update.md +3 -4
- package/dist/commands/work.md +19 -19
- package/dist/configuration/agents-config.js +66 -0
- package/dist/configuration/commands-config.js +21 -0
- package/dist/configuration/skills-config.js +10 -0
- package/dist/constants.js +4 -0
- package/dist/hooks/before-tool.js +19 -0
- package/dist/hooks/session-compaction.js +19 -0
- package/dist/index.js +11 -142
- package/dist/skills/agents-md-generator/SKILL.md +223 -0
- package/dist/skills/codebase-analyzer/SKILL.md +1 -1
- package/dist/skills/dev-analyze/SKILL.md +115 -0
- package/dist/skills/dev-bugfix/SKILL.md +452 -0
- package/dist/skills/dev-finalize/SKILL.md +118 -0
- package/dist/skills/dev-implement/SKILL.md +167 -0
- package/dist/skills/dev-plan/SKILL.md +147 -0
- package/dist/skills/dev-spec/SKILL.md +182 -0
- package/dist/skills/dev-tdd-red/SKILL.md +94 -0
- package/dist/skills/dev-verify/SKILL.md +160 -0
- package/dist/skills/development/SKILL.md +130 -522
- package/dist/skills/diagrams-mermaid/SKILL.md +3 -1
- package/dist/skills/docs-manager/SKILL.md +4 -4
- package/dist/skills/docs-manager/references/agents-md-template.md +1 -1
- package/dist/skills/flow-init/SKILL.md +34 -13
- package/dist/skills/goal-development/SKILL.md +96 -0
- package/dist/skills/html-renderer/SKILL.md +14 -1
- package/dist/skills/implementation-plan-executor/SKILL.md +1 -1
- package/dist/skills/implementation-verifier/SKILL.md +1 -1
- package/dist/skills/migration/SKILL.md +63 -18
- package/dist/skills/orchestrator-framework/SKILL.md +1 -1
- package/dist/skills/orchestrator-framework/references/command-namespacing.md +7 -0
- package/dist/skills/orchestrator-framework/references/confirm-or-revise-exception.md +20 -0
- package/dist/skills/orchestrator-framework/references/delegation-rules.md +54 -0
- package/dist/skills/orchestrator-framework/references/dispatcher-handoff.md +20 -0
- package/dist/skills/orchestrator-framework/references/gate-contract.md +104 -0
- package/dist/skills/orchestrator-framework/references/orchestrator-creation-checklist.md +3 -0
- package/dist/skills/orchestrator-framework/references/orchestrator-patterns.md +8 -50
- package/dist/skills/performance/SKILL.md +52 -18
- package/dist/skills/research/SKILL.md +57 -24
- package/dist/skills/rule-reviewer/SKILL.md +334 -0
- package/dist/skills/standards-discover/SKILL.md +37 -14
- package/dist/skills/standards-update/SKILL.md +58 -10
- package/dist/templates/orchestrator-state-development.yml +14 -13
- package/dist/utils/file-util.js +25 -0
- package/package.json +6 -4
- package/dist/__tests__/verify_template.test.js +0 -102
- package/dist/commands/quick-bugfix.md +0 -37
- package/dist/commands/quick-dev.md +0 -182
- package/dist/commands/quick-plan.md +0 -167
- package/dist/skills/quick-bugfix/SKILL.md +0 -311
- package/dist/templates/quick-bugfix-task.yml +0 -10
- package/dist/templates/quick-dev-task.yml +0 -10
- package/dist/templates/quick-plan-task.yml +0 -11
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { expect, test, describe, beforeAll, afterAll } from "bun:test";
|
|
2
|
-
import fs from "node:fs";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
import { fileURLToPath } from "node:url";
|
|
5
|
-
import { verify_template } from "../tools/verify_template.js";
|
|
6
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
7
|
-
describe("verify_template tool", () => {
|
|
8
|
-
const templatesDir = path.join(__dirname, "../templates");
|
|
9
|
-
const testDir = path.join(__dirname, "test_tmp_dir");
|
|
10
|
-
const testTemplateName = "test-template.yml";
|
|
11
|
-
const testTemplatePath = path.join(templatesDir, testTemplateName);
|
|
12
|
-
beforeAll(() => {
|
|
13
|
-
// Ensure templates dir exists
|
|
14
|
-
if (!fs.existsSync(templatesDir)) {
|
|
15
|
-
fs.mkdirSync(templatesDir, { recursive: true });
|
|
16
|
-
}
|
|
17
|
-
// Create a dummy template
|
|
18
|
-
fs.writeFileSync(testTemplatePath, `
|
|
19
|
-
key1: value1
|
|
20
|
-
key2:
|
|
21
|
-
subKey1: subValue1
|
|
22
|
-
`);
|
|
23
|
-
// Ensure test dir exists
|
|
24
|
-
if (!fs.existsSync(testDir)) {
|
|
25
|
-
fs.mkdirSync(testDir, { recursive: true });
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
afterAll(() => {
|
|
29
|
-
// Cleanup
|
|
30
|
-
if (fs.existsSync(testTemplatePath)) {
|
|
31
|
-
fs.rmSync(testTemplatePath);
|
|
32
|
-
}
|
|
33
|
-
if (fs.existsSync(testDir)) {
|
|
34
|
-
fs.rmSync(testDir, { recursive: true, force: true });
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
test("should return error if file not found", async () => {
|
|
38
|
-
const result = await verify_template.execute({ filePath: "nonexistent.yml", templateName: testTemplateName }, { directory: testDir });
|
|
39
|
-
expect(result.output).toContain("File not found at nonexistent.yml");
|
|
40
|
-
});
|
|
41
|
-
test("should return error if template not found", async () => {
|
|
42
|
-
const filePath = "target.yml";
|
|
43
|
-
fs.writeFileSync(path.join(testDir, filePath), "key1: value");
|
|
44
|
-
const result = await verify_template.execute({ filePath, templateName: "nonexistent-template.yml" }, { directory: testDir });
|
|
45
|
-
expect(result.output).toContain("Template 'nonexistent-template.yml' not found");
|
|
46
|
-
});
|
|
47
|
-
test("should return error if target file has invalid YAML syntax", async () => {
|
|
48
|
-
const filePath = "invalid.yml";
|
|
49
|
-
fs.writeFileSync(path.join(testDir, filePath), "key1: : value\n invalid");
|
|
50
|
-
const result = await verify_template.execute({ filePath, templateName: testTemplateName }, { directory: testDir });
|
|
51
|
-
expect(result.output).toContain("YAML Syntax Error in invalid.yml");
|
|
52
|
-
});
|
|
53
|
-
test("should return error if target file is missing keys from template", async () => {
|
|
54
|
-
const filePath = "missing-keys.yml";
|
|
55
|
-
// Missing key2
|
|
56
|
-
fs.writeFileSync(path.join(testDir, filePath), "key1: some-value");
|
|
57
|
-
const result = await verify_template.execute({ filePath, templateName: testTemplateName }, { directory: testDir });
|
|
58
|
-
expect(result.output).toContain("YAML Structure Validation Failed");
|
|
59
|
-
expect(result.output).toContain("- Missing key: key2");
|
|
60
|
-
});
|
|
61
|
-
test("should pass if target file matches template structure", async () => {
|
|
62
|
-
const filePath = "valid.yml";
|
|
63
|
-
fs.writeFileSync(path.join(testDir, filePath), `
|
|
64
|
-
key1: different_value
|
|
65
|
-
key2:
|
|
66
|
-
subKey1: different_sub_value
|
|
67
|
-
extraKey: this is fine
|
|
68
|
-
`);
|
|
69
|
-
const result = await verify_template.execute({ filePath, templateName: testTemplateName }, { directory: testDir });
|
|
70
|
-
expect(result.output).toBe("File exists and follows the correct YAML structure.");
|
|
71
|
-
});
|
|
72
|
-
test("should pass if template has null or non-object values and target has them too", async () => {
|
|
73
|
-
const nullTemplateName = "null-template.yml";
|
|
74
|
-
const nullTemplatePath = path.join(templatesDir, nullTemplateName);
|
|
75
|
-
fs.writeFileSync(nullTemplatePath, "key: null\nother: 123");
|
|
76
|
-
const filePath = "valid-null.yml";
|
|
77
|
-
fs.writeFileSync(path.join(testDir, filePath), "key: something\nother: 456");
|
|
78
|
-
const result = await verify_template.execute({ filePath, templateName: nullTemplateName }, { directory: testDir });
|
|
79
|
-
expect(result.output).toBe("File exists and follows the correct YAML structure.");
|
|
80
|
-
fs.rmSync(nullTemplatePath);
|
|
81
|
-
});
|
|
82
|
-
describe("real templates validation", () => {
|
|
83
|
-
let templateFiles = [];
|
|
84
|
-
try {
|
|
85
|
-
const files = fs.readdirSync(templatesDir);
|
|
86
|
-
templateFiles = files.filter(f => f.endsWith('.yml') || f.endsWith('.yaml') || f.endsWith('.md'));
|
|
87
|
-
// Filter out our dummy test template
|
|
88
|
-
templateFiles = templateFiles.filter(f => f !== "test-template.yml" && f !== "null-template.yml");
|
|
89
|
-
}
|
|
90
|
-
catch (e) {
|
|
91
|
-
// templates dir might not exist or be readable in some contexts, though beforeAll ensures it exists
|
|
92
|
-
}
|
|
93
|
-
for (const templateName of templateFiles) {
|
|
94
|
-
test(`should successfully validate a valid instance of ${templateName}`, async () => {
|
|
95
|
-
// We use the templates directory as the working directory
|
|
96
|
-
// and the template name as the filePath, effectively comparing the template to itself to ensure it's structurally valid.
|
|
97
|
-
const result = await verify_template.execute({ filePath: templateName, templateName }, { directory: templatesDir });
|
|
98
|
-
expect(result.output).toBe("File exists and follows the correct YAML structure.");
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
});
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: quick-bugfix
|
|
3
|
-
description: Quick bug fix with TDD red/green gates and complexity escalation
|
|
4
|
-
argument-hint: "[bug description]"
|
|
5
|
-
generated-from-skill: true
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
CRITICAL INSTRUCTION: You MUST invoke the quick-bugfix skill immediately as your FIRST action.
|
|
9
|
-
|
|
10
|
-
Use the Skill tool with these exact parameters:
|
|
11
|
-
name: "quick-bugfix"
|
|
12
|
-
prompt: "$ARGUMENTS"
|
|
13
|
-
|
|
14
|
-
DO NOT:
|
|
15
|
-
|
|
16
|
-
- Analyze the task before invoking the skill
|
|
17
|
-
- Decide the task is "straightforward" and skip the skill
|
|
18
|
-
- Substitute your own approach or workflow
|
|
19
|
-
- Execute any part of the workflow yourself
|
|
20
|
-
|
|
21
|
-
WHY: The user explicitly chose this workflow by using /quick-bugfix.
|
|
22
|
-
Invoke the skill now and let it orchestrate the complete workflow.
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## About This Workflow
|
|
27
|
-
|
|
28
|
-
Quick bug fix with TDD red/green gates and complexity escalation
|
|
29
|
-
|
|
30
|
-
The skill handles:
|
|
31
|
-
|
|
32
|
-
- Task directory creation and state management
|
|
33
|
-
- Phase execution with interactive gates
|
|
34
|
-
- Subagent delegation for specialized work
|
|
35
|
-
- Pause/resume capability
|
|
36
|
-
|
|
37
|
-
See `skills/quick-bugfix/SKILL.md` for complete workflow documentation.
|
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: quick-dev
|
|
3
|
-
description: Implement task directly with AI SDLC standards awareness (no planning mode)
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Quick Development with Standards Awareness
|
|
7
|
-
|
|
8
|
-
Implement a task directly without entering planning mode, while still applying project standards from `.owflow/docs/`.
|
|
9
|
-
|
|
10
|
-
## Usage
|
|
11
|
-
|
|
12
|
-
```bash
|
|
13
|
-
/quick-dev [task description]
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## Examples
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
/quick-dev "Add a logout button to the navbar"
|
|
20
|
-
/quick-dev "Fix the typo in the error message"
|
|
21
|
-
/quick-dev "Update the API endpoint to accept JSON"
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## When to Use
|
|
27
|
-
|
|
28
|
-
**Use `/quick-dev` when:**
|
|
29
|
-
|
|
30
|
-
- Task is clear and well-defined
|
|
31
|
-
- You know what needs to be done
|
|
32
|
-
- No architectural decisions needed
|
|
33
|
-
- Quick fixes, small features, or straightforward changes
|
|
34
|
-
|
|
35
|
-
**Use `/quick-plan` instead when:**
|
|
36
|
-
|
|
37
|
-
- Task scope is uncertain
|
|
38
|
-
- Multiple implementation approaches possible
|
|
39
|
-
- Architectural decisions required
|
|
40
|
-
- You want user approval before coding
|
|
41
|
-
|
|
42
|
-
---
|
|
43
|
-
|
|
44
|
-
## Workflow
|
|
45
|
-
|
|
46
|
-
### Step 1: Parse Input
|
|
47
|
-
|
|
48
|
-
**Get the task description:**
|
|
49
|
-
|
|
50
|
-
- If provided as argument, use it directly
|
|
51
|
-
- If not provided, use question to prompt:
|
|
52
|
-
```
|
|
53
|
-
"What would you like to implement? Please describe the task."
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
### Step 1b: Create Task Directory
|
|
57
|
-
|
|
58
|
-
**Create a lightweight task directory for artifact anchoring.**
|
|
59
|
-
|
|
60
|
-
1. Generate a task name from the task description:
|
|
61
|
-
- Extract 3–5 key words, convert to lowercase kebab-case
|
|
62
|
-
- Prepend today's date: `YYYY-MM-DD-kebab-name`
|
|
63
|
-
- Examples: "Add a logout button to the navbar" → `2026-05-28-add-navbar-logout-button`, "Update the API endpoint to accept JSON" → `2026-05-28-update-api-accept-json`
|
|
64
|
-
2. Create directory: `.owflow/tasks/quick-dev/YYYY-MM-DD-task-name/`
|
|
65
|
-
3. Write `task.yml` with initial state using the template [src/templates/quick-dev-task.yml](../templates/quick-dev-task.yml).
|
|
66
|
-
4. **CRITICAL**: Use the `verify_template` tool immediately after creation to check YAML validity against `quick-dev-task.yml`.
|
|
67
|
-
|
|
68
|
-
### Step 2: Discover Standards
|
|
69
|
-
|
|
70
|
-
**Check if `.owflow/docs/INDEX.md` exists:**
|
|
71
|
-
|
|
72
|
-
**If exists:**
|
|
73
|
-
|
|
74
|
-
1. Read INDEX.md to discover available documentation and standards
|
|
75
|
-
2. Identify which standards are relevant based on:
|
|
76
|
-
- The categories and files listed in INDEX.md
|
|
77
|
-
- The nature of the task
|
|
78
|
-
- Keywords in the task description
|
|
79
|
-
3. **READ the applicable standard files** (see Standards Reading Enforcement below)
|
|
80
|
-
4. **Update `task.yml`**: Add paths of standards read to `standards_applied` list
|
|
81
|
-
|
|
82
|
-
**If not exists:**
|
|
83
|
-
|
|
84
|
-
- Note that no standards are available
|
|
85
|
-
- Suggest running `/flow-init` in completion message
|
|
86
|
-
|
|
87
|
-
### Standards Reading Enforcement (MANDATORY)
|
|
88
|
-
|
|
89
|
-
**BLOCKING**: Reading INDEX.md alone is NOT sufficient. You MUST read actual standard files.
|
|
90
|
-
|
|
91
|
-
**Enforcement Process**:
|
|
92
|
-
|
|
93
|
-
1. Read INDEX.md to discover available standards
|
|
94
|
-
2. Identify which standards apply based on task description
|
|
95
|
-
3. **READ each applicable standard file** using Read tool (not just note it exists)
|
|
96
|
-
4. Apply standards during implementation
|
|
97
|
-
5. List applied standards in completion summary
|
|
98
|
-
|
|
99
|
-
**Examples of standard discovery**:
|
|
100
|
-
|
|
101
|
-
- Task mentions "upload" → Read file-handling standards
|
|
102
|
-
- Task mentions "form" → Read validation and accessibility standards
|
|
103
|
-
- Task mentions "API" → Read api and error-handling standards
|
|
104
|
-
|
|
105
|
-
### Step 3: Implement with Standards
|
|
106
|
-
|
|
107
|
-
**MANDATORY**: During implementation:
|
|
108
|
-
|
|
109
|
-
1. Explore the codebase to understand context (using Glob, Grep, Read)
|
|
110
|
-
2. **Apply discovered standards** - Reference the standard files you read
|
|
111
|
-
3. For each code change, verify it follows applicable standards
|
|
112
|
-
4. If you encounter new areas while coding (e.g., auth, database), read applicable standards before proceeding
|
|
113
|
-
5. Make the necessary code changes
|
|
114
|
-
6. Run relevant tests if applicable
|
|
115
|
-
|
|
116
|
-
### Step 4: Verify Standards Compliance
|
|
117
|
-
|
|
118
|
-
**After implementation, verify:**
|
|
119
|
-
|
|
120
|
-
1. Review changes against applicable standards
|
|
121
|
-
2. Confirm key guidelines were followed
|
|
122
|
-
3. Note any standards that were applied
|
|
123
|
-
|
|
124
|
-
### Step 5: Summary
|
|
125
|
-
|
|
126
|
-
**Write `summary.md`** in the task directory:
|
|
127
|
-
|
|
128
|
-
```markdown
|
|
129
|
-
# Task Summary
|
|
130
|
-
|
|
131
|
-
**Command**: quick-dev
|
|
132
|
-
**Date**: YYYY-MM-DD
|
|
133
|
-
**Status**: completed
|
|
134
|
-
|
|
135
|
-
## What Was Done
|
|
136
|
-
[What was implemented]
|
|
137
|
-
|
|
138
|
-
## Files Modified
|
|
139
|
-
- `path/to/file`
|
|
140
|
-
|
|
141
|
-
## Standards Applied
|
|
142
|
-
- [standard]: [guideline]
|
|
143
|
-
|
|
144
|
-
## Tests
|
|
145
|
-
- [test file] — [result]
|
|
146
|
-
|
|
147
|
-
## Commit Suggestion
|
|
148
|
-
[conventional commit message]
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
**Update `task.yml`**: set `status: completed`, `updated: [now]`.
|
|
152
|
-
|
|
153
|
-
**Provide completion summary to user:**
|
|
154
|
-
|
|
155
|
-
- What was implemented
|
|
156
|
-
- Which standards from INDEX.md were applied
|
|
157
|
-
- Any tests run and their results
|
|
158
|
-
- Suggestions for follow-up (if any)
|
|
159
|
-
|
|
160
|
-
---
|
|
161
|
-
|
|
162
|
-
## What This Does
|
|
163
|
-
|
|
164
|
-
1. **Parses** task description from user input
|
|
165
|
-
2. **Creates** lightweight task directory with `task.yml` for artifact anchoring
|
|
166
|
-
3. **Discovers** applicable standards from `.owflow/docs/INDEX.md`
|
|
167
|
-
4. **READS** actual standard files (MANDATORY - not just INDEX.md)
|
|
168
|
-
5. **Implements** directly without planning mode approval
|
|
169
|
-
6. **Verifies** standards were followed
|
|
170
|
-
7. **Writes** `summary.md` in task directory and updates `task.yml` to `completed`
|
|
171
|
-
8. **Summarizes** what was done and which standards were read and applied
|
|
172
|
-
|
|
173
|
-
## Graceful Fallback
|
|
174
|
-
|
|
175
|
-
**If `.owflow/docs/` does not exist:**
|
|
176
|
-
|
|
177
|
-
Proceed with implementation normally, then note:
|
|
178
|
-
|
|
179
|
-
```
|
|
180
|
-
"No AI SDLC standards found. Consider running `/flow-init` to initialize
|
|
181
|
-
project documentation and coding standards for better consistency."
|
|
182
|
-
```
|
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: quick-plan
|
|
3
|
-
description: Enter planning mode with AI SDLC standards awareness
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Planning Mode with Standards Awareness
|
|
7
|
-
|
|
8
|
-
Enter OpenCode's planning mode for a task, with automatic discovery of project standards from `.owflow/docs/`.
|
|
9
|
-
|
|
10
|
-
## Usage
|
|
11
|
-
|
|
12
|
-
```bash
|
|
13
|
-
/quick-plan [task description]
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## Examples
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
/quick-plan "Add user authentication with email/password"
|
|
20
|
-
/quick-plan "Refactor the payment processing module"
|
|
21
|
-
/quick-plan
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## Workflow
|
|
27
|
-
|
|
28
|
-
### Step 1: Parse Input
|
|
29
|
-
|
|
30
|
-
**Get the task description:**
|
|
31
|
-
|
|
32
|
-
- If provided as argument, use it directly
|
|
33
|
-
- If not provided, use question to prompt:
|
|
34
|
-
```
|
|
35
|
-
"What would you like to plan? Please describe the task or feature."
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
### Step 1b: Create Task Directory
|
|
39
|
-
|
|
40
|
-
**Create a lightweight task directory for artifact anchoring.**
|
|
41
|
-
|
|
42
|
-
1. Generate a task name from the task description:
|
|
43
|
-
- Extract 3–5 key words, convert to lowercase kebab-case
|
|
44
|
-
- Prepend today's date: `YYYY-MM-DD-kebab-name`
|
|
45
|
-
- Examples: "Add retry logic to API client" → `2026-05-28-add-api-retry-logic`, "Refactor the payment processing module" → `2026-05-28-refactor-payment-module`
|
|
46
|
-
2. Create directory: `.owflow/tasks/quick-plan/YYYY-MM-DD-task-name/`
|
|
47
|
-
3. Create `analysis/` subdirectory inside it
|
|
48
|
-
4. Write `task.yml` with initial state using the template [src/templates/quick-plan-task.yml](../templates/quick-plan-task.yml).
|
|
49
|
-
5. **CRITICAL**: Use the `verify_template` tool immediately after creation to check YAML validity against `quick-plan-task.yml`.
|
|
50
|
-
|
|
51
|
-
### Step 2: Discover and Read Standards (BEFORE Plan Mode)
|
|
52
|
-
|
|
53
|
-
**CRITICAL: This step MUST complete before calling Plan Agent.**
|
|
54
|
-
|
|
55
|
-
1. **Check if `.owflow/docs/INDEX.md` exists**
|
|
56
|
-
- **If not exists**: Note that no standards are available, skip to Step 3
|
|
57
|
-
- **If exists**: Continue with discovery below
|
|
58
|
-
|
|
59
|
-
2. **Read INDEX.md** to understand available standards and documentation
|
|
60
|
-
|
|
61
|
-
3. **Identify applicable standards** based on:
|
|
62
|
-
- The categories and files listed in INDEX.md
|
|
63
|
-
- The nature of the task being planned
|
|
64
|
-
- Keywords and patterns in the task description (e.g., "API" → api standards, "form" → validation standards, "upload" → file-handling standards)
|
|
65
|
-
|
|
66
|
-
4. **READ the actual standard files** using the Read tool — reading INDEX.md alone is NOT sufficient
|
|
67
|
-
|
|
68
|
-
5. **Summarize key guidelines** from each standard file read — these will carry into plan mode as context
|
|
69
|
-
6. **Update `task.yml`**: Add paths of standards read to `standards_applied` list
|
|
70
|
-
|
|
71
|
-
### Step 2b: Write Findings
|
|
72
|
-
|
|
73
|
-
**After standards discovery, write `analysis/findings.md`** in the task directory:
|
|
74
|
-
|
|
75
|
-
```markdown
|
|
76
|
-
# Task Analysis
|
|
77
|
-
|
|
78
|
-
## Context
|
|
79
|
-
[What was analyzed to inform the plan — codebase areas explored, existing patterns found]
|
|
80
|
-
|
|
81
|
-
## Key Decisions
|
|
82
|
-
[Architectural or implementation decisions made during planning]
|
|
83
|
-
|
|
84
|
-
## Standards Referenced
|
|
85
|
-
- [standard file]: [key guideline applied]
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
### Step 3: Enter Planning Mode
|
|
89
|
-
|
|
90
|
-
**Use the `Plan agent` to trigger OpenCode's builtin planning mode.**
|
|
91
|
-
|
|
92
|
-
**Standards context from Step 2 MUST actively inform all plan mode phases:**
|
|
93
|
-
|
|
94
|
-
- **Phase 1 (Explore)**: When launching Explore agents, include in the prompt: "The following project standards apply to this task: [list standard files and key guidelines from Step 2]. Verify how the existing codebase follows these standards."
|
|
95
|
-
- **Phase 2 (Plan)**: When launching Plan agents, include in the prompt: "Apply these project standards in your implementation plan: [list standard files and key guidelines from Step 2]. Each implementation step must conform to these standards."
|
|
96
|
-
- **Phase 4 (Final Plan)**: The plan file must incorporate standards into the implementation steps themselves, not just list them in a separate section.
|
|
97
|
-
|
|
98
|
-
The planning mode will:
|
|
99
|
-
|
|
100
|
-
1. Launch Explore agents to understand the codebase (with standards context)
|
|
101
|
-
2. Launch Plan agents to design implementation approach (with standards constraints)
|
|
102
|
-
3. Review and verify alignment with user intent
|
|
103
|
-
4. Write final plan to plan file (with standards woven into steps)
|
|
104
|
-
5. Ask for user approval (gated on mandatory standards sections)
|
|
105
|
-
|
|
106
|
-
### Approval question gate: Mandatory Standards Sections
|
|
107
|
-
|
|
108
|
-
**BLOCKING: Do NOT call ask user for approval until the plan file contains these sections:**
|
|
109
|
-
|
|
110
|
-
1. **"## Applicable Standards"** — list each standard file that was read, with key guidelines extracted from each. If no standards exist, state: "No AI SDLC standards found. Consider running `/flow-init`."
|
|
111
|
-
|
|
112
|
-
2. **"## Standards Compliance Checklist"** — checkboxes for each applicable standard guideline that implementation must follow. Example:
|
|
113
|
-
```markdown
|
|
114
|
-
- [ ] API endpoints follow REST naming conventions (from `standards/backend/api.md`)
|
|
115
|
-
- [ ] Error responses use standard error format (from `standards/backend/api.md`)
|
|
116
|
-
- [ ] New components use TypeScript strict mode (from `standards/frontend/components.md`)
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
If these sections are missing from the plan file, add them before asking user for approval.
|
|
120
|
-
|
|
121
|
-
### Graceful Fallback
|
|
122
|
-
|
|
123
|
-
**If `.owflow/docs/` does not exist:**
|
|
124
|
-
|
|
125
|
-
Continue with planning mode normally. The "Applicable Standards" section in the plan should note:
|
|
126
|
-
|
|
127
|
-
```
|
|
128
|
-
No AI SDLC standards found. Consider running `/flow-init` to initialize
|
|
129
|
-
project documentation and coding standards for better consistency.
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
## What This Does
|
|
133
|
-
|
|
134
|
-
1. **Parses** task description from user input
|
|
135
|
-
2. **Creates** lightweight task directory with `task.yml` for artifact anchoring
|
|
136
|
-
3. **Discovers and READS** applicable standard files from `.owflow/docs/` (BEFORE plan mode)
|
|
137
|
-
4. **Writes** `analysis/findings.md` with task context and key decisions
|
|
138
|
-
5. **Enters** OpenCode's builtin planning mode via delegating to `Plan Agent` with standards already loaded
|
|
139
|
-
6. **Produces** a plan file with implementation approach, applicable standards, and compliance checklist
|
|
140
|
-
7. **Gates** Approval question on mandatory standards sections in the plan file
|
|
141
|
-
8. **Updates** `task.yml` with `status: completed` and `plan_path` after plan approval
|
|
142
|
-
|
|
143
|
-
## Benefits Over Manual Planning
|
|
144
|
-
|
|
145
|
-
- Automatic standards discovery and integration
|
|
146
|
-
- Standards read BEFORE planning begins (not as an afterthought)
|
|
147
|
-
- Plan file for review before implementation
|
|
148
|
-
- Standards compliance checklist built into the plan
|
|
149
|
-
|
|
150
|
-
## After Planning
|
|
151
|
-
|
|
152
|
-
Once the plan is approved:
|
|
153
|
-
|
|
154
|
-
- **Update `task.yml`**: set `status: completed`, `plan_path: [path to plan file]`, `updated: [now]`
|
|
155
|
-
- Implementation begins based on the plan
|
|
156
|
-
- Standards are applied during coding
|
|
157
|
-
|
|
158
|
-
## Post-Implementation Verification
|
|
159
|
-
|
|
160
|
-
After implementation is complete, verify standards compliance using the checklist from the plan:
|
|
161
|
-
|
|
162
|
-
1. **Review the "Standards Compliance Checklist"** in the plan file
|
|
163
|
-
2. **For each checklist item**: verify implementation follows the guideline
|
|
164
|
-
3. **Document verification results** (pass/fail for each item)
|
|
165
|
-
4. **Address any violations** before marking task complete
|
|
166
|
-
|
|
167
|
-
This ensures the discovered standards are actually enforced, not just documented.
|