moai-adk 0.8.0__py3-none-any.whl → 0.15.0__py3-none-any.whl
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.
Potentially problematic release.
This version of moai-adk might be problematic. Click here for more details.
- moai_adk/cli/commands/init.py +14 -2
- moai_adk/cli/commands/update.py +229 -60
- moai_adk/core/config/migration.py +1 -1
- moai_adk/core/issue_creator.py +313 -0
- moai_adk/core/project/detector.py +201 -12
- moai_adk/core/project/initializer.py +62 -1
- moai_adk/core/project/phase_executor.py +48 -6
- moai_adk/core/tags/__init__.py +86 -0
- moai_adk/core/tags/ci_validator.py +463 -0
- moai_adk/core/tags/cli.py +283 -0
- moai_adk/core/tags/generator.py +109 -0
- moai_adk/core/tags/inserter.py +99 -0
- moai_adk/core/tags/mapper.py +126 -0
- moai_adk/core/tags/parser.py +76 -0
- moai_adk/core/tags/pre_commit_validator.py +393 -0
- moai_adk/core/tags/reporter.py +956 -0
- moai_adk/core/tags/tags.py +149 -0
- moai_adk/core/tags/validator.py +897 -0
- moai_adk/core/template_engine.py +268 -0
- moai_adk/templates/.claude/agents/alfred/backend-expert.md +319 -0
- moai_adk/templates/.claude/agents/alfred/cc-manager.md +25 -2
- moai_adk/templates/.claude/agents/alfred/debug-helper.md +24 -12
- moai_adk/templates/.claude/agents/alfred/devops-expert.md +464 -0
- moai_adk/templates/.claude/agents/alfred/doc-syncer.md +20 -13
- moai_adk/templates/.claude/agents/alfred/frontend-expert.md +357 -0
- moai_adk/templates/.claude/agents/alfred/git-manager.md +47 -16
- moai_adk/templates/.claude/agents/alfred/implementation-planner.md +95 -15
- moai_adk/templates/.claude/agents/alfred/project-manager.md +78 -12
- moai_adk/templates/.claude/agents/alfred/quality-gate.md +28 -5
- moai_adk/templates/.claude/agents/alfred/skill-factory.md +30 -2
- moai_adk/templates/.claude/agents/alfred/spec-builder.md +133 -13
- moai_adk/templates/.claude/agents/alfred/tag-agent.md +104 -8
- moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +133 -16
- moai_adk/templates/.claude/agents/alfred/trust-checker.md +27 -4
- moai_adk/templates/.claude/agents/alfred/ui-ux-expert.md +571 -0
- moai_adk/templates/.claude/commands/alfred/0-project.md +466 -125
- moai_adk/templates/.claude/commands/alfred/1-plan.md +208 -71
- moai_adk/templates/.claude/commands/alfred/2-run.md +276 -55
- moai_adk/templates/.claude/commands/alfred/3-sync.md +439 -53
- moai_adk/templates/.claude/commands/alfred/9-feedback.md +149 -0
- moai_adk/templates/.claude/hooks/alfred/core/project.py +361 -29
- moai_adk/templates/.claude/hooks/alfred/core/timeout.py +136 -0
- moai_adk/templates/.claude/hooks/alfred/core/ttl_cache.py +108 -0
- moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +198 -0
- moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +14 -6
- moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +94 -0
- moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +100 -0
- moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +94 -0
- moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +94 -0
- moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/__init__.py +2 -2
- moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/checkpoint.py +3 -3
- moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/context.py +5 -5
- moai_adk/templates/.claude/hooks/alfred/shared/core/project.py +749 -0
- moai_adk/templates/.claude/hooks/alfred/{core → shared/core}/tags.py +55 -23
- moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +198 -0
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/__init__.py +21 -0
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +154 -0
- moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/session.py +28 -15
- moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/tool.py +3 -6
- moai_adk/templates/.claude/hooks/alfred/{handlers → shared/handlers}/user.py +19 -0
- moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +112 -0
- moai_adk/templates/.claude/hooks/alfred/utils/__init__.py +1 -0
- moai_adk/templates/.claude/hooks/alfred/utils/timeout.py +161 -0
- moai_adk/templates/.claude/settings.json +5 -5
- moai_adk/templates/.claude/skills/moai-alfred-agent-guide/SKILL.md +70 -0
- moai_adk/templates/.claude/skills/moai-alfred-agent-guide/examples.md +62 -0
- moai_adk/templates/{.moai/memory/CLAUDE-AGENTS-GUIDE.md → .claude/skills/moai-alfred-agent-guide/reference.md} +34 -0
- moai_adk/templates/.claude/skills/moai-alfred-config-schema/SKILL.md +56 -0
- moai_adk/templates/.claude/skills/moai-alfred-config-schema/examples.md +28 -0
- moai_adk/templates/.claude/skills/moai-alfred-context-budget/SKILL.md +62 -0
- moai_adk/templates/.claude/skills/moai-alfred-context-budget/examples.md +28 -0
- moai_adk/templates/.claude/skills/moai-alfred-context-budget/reference.md +405 -0
- moai_adk/templates/.claude/skills/moai-alfred-dev-guide/SKILL.md +51 -0
- moai_adk/templates/.claude/skills/moai-alfred-dev-guide/examples.md +355 -0
- moai_adk/templates/.claude/skills/moai-alfred-dev-guide/reference.md +239 -0
- moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/SKILL.md +323 -0
- moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/examples.md +286 -0
- moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/reference.md +126 -0
- moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/SKILL.md +74 -0
- moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/examples.md +4 -0
- moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/reference.md +269 -0
- moai_adk/templates/.claude/skills/moai-alfred-issue-labels/SKILL.md +19 -0
- moai_adk/templates/.claude/skills/moai-alfred-issue-labels/examples.md +4 -0
- moai_adk/templates/.claude/skills/moai-alfred-issue-labels/reference.md +150 -0
- moai_adk/templates/.claude/skills/moai-alfred-persona-roles/SKILL.md +198 -0
- moai_adk/templates/.claude/skills/moai-alfred-persona-roles/examples.md +431 -0
- moai_adk/templates/.claude/skills/moai-alfred-persona-roles/reference.md +141 -0
- moai_adk/templates/.claude/skills/moai-alfred-practices/SKILL.md +89 -0
- moai_adk/templates/.claude/skills/moai-alfred-practices/examples.md +122 -0
- moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/SKILL.md +508 -0
- moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/examples.md +481 -0
- moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/reference.md +100 -0
- moai_adk/templates/.claude/skills/moai-alfred-reporting/SKILL.md +273 -0
- moai_adk/templates/.claude/skills/moai-alfred-rules/SKILL.md +77 -0
- moai_adk/templates/.claude/skills/moai-alfred-rules/examples.md +265 -0
- moai_adk/templates/.claude/skills/moai-alfred-session-state/SKILL.md +19 -0
- moai_adk/templates/.claude/skills/moai-alfred-session-state/examples.md +4 -0
- moai_adk/templates/.claude/skills/moai-alfred-session-state/reference.md +84 -0
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/README.md +137 -0
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/SKILL.md +219 -0
- moai_adk/templates/.claude/skills/{moai-spec-authoring → moai-alfred-spec-authoring}/examples/validate-spec.sh +3 -3
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples.md +541 -0
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/reference.md +622 -0
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/SKILL.md +115 -0
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/examples.md +4 -0
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/reference.md +348 -0
- moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/SKILL.md +19 -0
- moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/examples.md +4 -0
- moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/reference.md +211 -0
- moai_adk/templates/.claude/skills/moai-alfred-workflow/SKILL.md +288 -0
- moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/SKILL.md +19 -0
- moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/examples.md +4 -0
- moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/SKILL.md +3 -3
- moai_adk/templates/.claude/skills/moai-design-systems/SKILL.md +802 -0
- moai_adk/templates/.claude/skills/moai-design-systems/examples.md +1238 -0
- moai_adk/templates/.claude/skills/moai-design-systems/reference.md +673 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +17 -13
- moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +9 -6
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +15 -12
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +14 -12
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +14 -11
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +10 -8
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +15 -12
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +13 -11
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +16 -10
- moai_adk/templates/.claude/skills/moai-project-documentation.md +622 -0
- moai_adk/templates/.git-hooks/pre-push +143 -0
- moai_adk/templates/.github/workflows/c-tag-validation.yml +11 -0
- moai_adk/templates/.github/workflows/cpp-tag-validation.yml +11 -0
- moai_adk/templates/.github/workflows/csharp-tag-validation.yml +11 -0
- moai_adk/templates/.github/workflows/dart-tag-validation.yml +11 -0
- moai_adk/templates/.github/workflows/go-tag-validation.yml +130 -0
- moai_adk/templates/.github/workflows/java-tag-validation.yml +11 -0
- moai_adk/templates/.github/workflows/javascript-tag-validation.yml +135 -0
- moai_adk/templates/.github/workflows/kotlin-tag-validation.yml +11 -0
- moai_adk/templates/.github/workflows/moai-gitflow.yml +166 -3
- moai_adk/templates/.github/workflows/moai-release-create.yml +100 -0
- moai_adk/templates/.github/workflows/moai-release-pipeline.yml +188 -0
- moai_adk/templates/.github/workflows/php-tag-validation.yml +11 -0
- moai_adk/templates/.github/workflows/python-tag-validation.yml +118 -0
- moai_adk/templates/.github/workflows/release.yml +118 -0
- moai_adk/templates/.github/workflows/ruby-tag-validation.yml +11 -0
- moai_adk/templates/.github/workflows/rust-tag-validation.yml +11 -0
- moai_adk/templates/.github/workflows/shell-tag-validation.yml +11 -0
- moai_adk/templates/.github/workflows/spec-issue-sync.yml +206 -35
- moai_adk/templates/.github/workflows/swift-tag-validation.yml +11 -0
- moai_adk/templates/.github/workflows/tag-report.yml +269 -0
- moai_adk/templates/.github/workflows/tag-validation.yml +186 -0
- moai_adk/templates/.github/workflows/typescript-tag-validation.yml +154 -0
- moai_adk/templates/.moai/config.json +21 -2
- moai_adk/templates/CLAUDE.md +972 -78
- moai_adk/templates/workflows/go-tag-validation.yml +30 -0
- moai_adk/templates/workflows/javascript-tag-validation.yml +41 -0
- moai_adk/templates/workflows/python-tag-validation.yml +42 -0
- moai_adk/templates/workflows/typescript-tag-validation.yml +31 -0
- moai_adk/utils/banner.py +5 -5
- {moai_adk-0.8.0.dist-info → moai_adk-0.15.0.dist-info}/METADATA +1518 -161
- {moai_adk-0.8.0.dist-info → moai_adk-0.15.0.dist-info}/RECORD +183 -100
- moai_adk/templates/.claude/hooks/alfred/HOOK_SCHEMA_VALIDATION.md +0 -313
- moai_adk/templates/.claude/hooks/alfred/README.md +0 -230
- moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +0 -174
- moai_adk/templates/.claude/hooks/alfred/handlers/notification.py +0 -25
- moai_adk/templates/.claude/hooks/alfred/test_hook_output.py +0 -175
- moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +0 -640
- moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +0 -696
- moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +0 -474
- moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +0 -137
- moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +0 -218
- moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md +0 -541
- moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md +0 -622
- moai_adk/templates/.github/ISSUE_TEMPLATE/spec.yml +0 -176
- moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +0 -69
- moai_adk/templates/.moai/memory/DEVELOPMENT-GUIDE.md +0 -344
- moai_adk/templates/.moai/memory/GITFLOW-PROTECTION-POLICY.md +0 -220
- moai_adk/templates/.moai/memory/SPEC-METADATA.md +0 -356
- moai_adk/templates/.moai/memory/config-schema.md +0 -444
- moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -220
- moai_adk/templates/.moai/memory/spec-metadata.md +0 -356
- moai_adk/templates/.moai/project/product.md +0 -161
- moai_adk/templates/.moai/project/structure.md +0 -156
- moai_adk/templates/.moai/project/tech.md +0 -227
- moai_adk/templates/__init__.py +0 -2
- /moai_adk/templates/{.moai/memory/CONFIG-SCHEMA.md → .claude/skills/moai-alfred-config-schema/reference.md} +0 -0
- /moai_adk/templates/{.moai/memory/CLAUDE-PRACTICES.md → .claude/skills/moai-alfred-practices/reference.md} +0 -0
- /moai_adk/templates/{.moai/memory/CLAUDE-RULES.md → .claude/skills/moai-alfred-rules/reference.md} +0 -0
- /moai_adk/templates/{.moai/memory/SKILLS-DESCRIPTION-POLICY.md → .claude/skills/moai-cc-skill-descriptions/reference.md} +0 -0
- /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/CHECKLIST.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/EXAMPLES.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/INTERACTIVE-DISCOVERY.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/METADATA.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/PARALLEL-ANALYSIS-REPORT.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/PYTHON-VERSION-MATRIX.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/SKILL-FACTORY-WORKFLOW.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/SKILL-UPDATE-ADVISOR.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/STEP-BY-STEP-GUIDE.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/STRUCTURE.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/WEB-RESEARCH.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/reference.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/scripts/generate-structure.sh +0 -0
- /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/scripts/validate-skill.sh +0 -0
- /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/templates/SKILL_TEMPLATE.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/templates/examples-template.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/templates/reference-template.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-skill-factory → moai-cc-skill-factory}/templates/scripts-template.sh +0 -0
- {moai_adk-0.8.0.dist-info → moai_adk-0.15.0.dist-info}/WHEEL +0 -0
- {moai_adk-0.8.0.dist-info → moai_adk-0.15.0.dist-info}/entry_points.txt +0 -0
- {moai_adk-0.8.0.dist-info → moai_adk-0.15.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "Writing SPEC Documents with Metadata"
|
|
3
|
+
description: "Standards for SPEC authoring including YAML metadata, EARS syntax, HISTORY section, and validation. Guides spec-builder agent through SPEC creation in .moai/specs/SPEC-{ID}/ directory. Covers 7 required metadata fields, 5 EARS patterns, version tracking, changelog format, and @SPEC:ID TAG placement. Essential for /alfred:1-plan command and duplicate detection."
|
|
4
|
+
allowed-tools: "Read, Write, Bash(rg:*), Bash(mkdir:*)"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# SPEC Metadata Standard Skill
|
|
8
|
+
|
|
9
|
+
## SPEC Directory Structure
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
.moai/specs/SPEC-{DOMAIN}-{NUMBER}/
|
|
13
|
+
├── spec.md # Requirements (EARS format) + metadata
|
|
14
|
+
├── plan.md # Implementation plan
|
|
15
|
+
└── acceptance.md # Test scenarios, acceptance criteria
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## YAML Metadata (7 Fields)
|
|
19
|
+
|
|
20
|
+
Every SPEC starts with frontmatter:
|
|
21
|
+
|
|
22
|
+
```yaml
|
|
23
|
+
---
|
|
24
|
+
id: AUTH-001
|
|
25
|
+
title: "User Authentication System"
|
|
26
|
+
version: 0.1.0
|
|
27
|
+
status: active
|
|
28
|
+
created: 2025-11-03
|
|
29
|
+
updated: 2025-11-03
|
|
30
|
+
author: @GOOS🪿엉아
|
|
31
|
+
priority: high
|
|
32
|
+
---
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Field Definitions
|
|
36
|
+
|
|
37
|
+
| Field | Type | Required | Notes |
|
|
38
|
+
|-------|------|----------|-------|
|
|
39
|
+
| `id` | string | ✅ | Domain-NUMBER (e.g., AUTH-001) |
|
|
40
|
+
| `title` | string | ✅ | User-facing description |
|
|
41
|
+
| `version` | semver | ✅ | Current status (0.x.x = draft) |
|
|
42
|
+
| `status` | enum | ✅ | active\|draft\|deprecated\|archived |
|
|
43
|
+
| `created` | ISO8601 | ✅ | YYYY-MM-DD |
|
|
44
|
+
| `updated` | ISO8601 | ✅ | Last modification date |
|
|
45
|
+
| `author` | string | ✅ | Creator identifier |
|
|
46
|
+
| `priority` | enum | ✅ | critical\|high\|medium\|low |
|
|
47
|
+
|
|
48
|
+
## EARS Requirements (5 Patterns)
|
|
49
|
+
|
|
50
|
+
### 1. Ubiquitous (Baseline)
|
|
51
|
+
```
|
|
52
|
+
The system shall provide [capability].
|
|
53
|
+
The system shall validate [input] before [action].
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 2. Event-driven
|
|
57
|
+
```
|
|
58
|
+
WHEN [condition], the system shall [behavior].
|
|
59
|
+
WHEN a user logs in, the system shall verify credentials.
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 3. State-driven
|
|
63
|
+
```
|
|
64
|
+
WHILE [state], the system shall [behavior].
|
|
65
|
+
WHILE authenticated, the system shall allow access.
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 4. Optional Features
|
|
69
|
+
```
|
|
70
|
+
WHERE [condition], the system may [behavior].
|
|
71
|
+
WHERE API key present, the system may enable caching.
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 5. Constraints
|
|
75
|
+
```
|
|
76
|
+
IF [condition], the system shall [constraint].
|
|
77
|
+
IF password invalid, the system shall deny access.
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## HISTORY Section
|
|
81
|
+
|
|
82
|
+
Track all changes:
|
|
83
|
+
|
|
84
|
+
```markdown
|
|
85
|
+
## HISTORY
|
|
86
|
+
|
|
87
|
+
### v0.2.0 (2025-11-03)
|
|
88
|
+
- Added email verification requirement
|
|
89
|
+
- Updated password complexity rules
|
|
90
|
+
|
|
91
|
+
### v0.1.0 (2025-11-01)
|
|
92
|
+
- Initial draft of AUTH-001
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Validation Checklist
|
|
96
|
+
|
|
97
|
+
- [ ] ID: Domain-NUMBER format (e.g., AUTH-001)
|
|
98
|
+
- [ ] No duplicate @SPEC:ID (`rg "@SPEC:{ID}" .moai/specs/`)
|
|
99
|
+
- [ ] All 7 metadata fields present
|
|
100
|
+
- [ ] version follows semver (0.x.x for draft)
|
|
101
|
+
- [ ] 5+ EARS requirements with different patterns
|
|
102
|
+
- [ ] HISTORY section with at least v0.1.0
|
|
103
|
+
- [ ] Directory: `.moai/specs/SPEC-{ID}/`
|
|
104
|
+
- [ ] @SPEC:ID placed in first 50 lines of spec.md
|
|
105
|
+
|
|
106
|
+
## Common Patterns
|
|
107
|
+
|
|
108
|
+
| Scenario | Action |
|
|
109
|
+
|----------|--------|
|
|
110
|
+
| Start new SPEC | Create .moai/specs/SPEC-{DOMAIN}-{NUMBER}/ |
|
|
111
|
+
| Check duplicate | rg "@SPEC:{ID}" .moai/specs/ (should be 0) |
|
|
112
|
+
| Write requirement | Use one of 5 EARS patterns |
|
|
113
|
+
| Update version | Change version field, update HISTORY |
|
|
114
|
+
| Mark deprecated | Set status: deprecated, add note |
|
|
115
|
+
| Link to @CODE | In code comment: @CODE:SPEC-AUTH-001 |
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
# SPEC Metadata Extended - Reference
|
|
2
|
+
|
|
3
|
+
## YAML Frontmatter Fields
|
|
4
|
+
|
|
5
|
+
### Field: `id`
|
|
6
|
+
|
|
7
|
+
**Type**: `string`
|
|
8
|
+
**Required**: ✅ Yes
|
|
9
|
+
**Format**: `{DOMAIN}-{NUMBER}` (e.g., `AUTH-001`, `CACHE-FIX-002`)
|
|
10
|
+
**Rules**:
|
|
11
|
+
- Domain: 2-8 characters, UPPERCASE
|
|
12
|
+
- Number: 3 digits, zero-padded (001, 002, 100)
|
|
13
|
+
- No duplicates allowed across project
|
|
14
|
+
|
|
15
|
+
**Validation**:
|
|
16
|
+
```bash
|
|
17
|
+
# Check for duplicates
|
|
18
|
+
rg "@SPEC:AUTH-001" .moai/specs/ # Should return exactly 1 hit
|
|
19
|
+
|
|
20
|
+
# Check format
|
|
21
|
+
rg "^id: [A-Z]+-\d{3}$" .moai/specs/SPEC-*/spec.md
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Field: `title`
|
|
25
|
+
|
|
26
|
+
**Type**: `string`
|
|
27
|
+
**Required**: ✅ Yes
|
|
28
|
+
**Max Length**: 128 characters
|
|
29
|
+
**Style**: User-facing, descriptive noun phrase
|
|
30
|
+
|
|
31
|
+
**Examples**:
|
|
32
|
+
- ✅ "User Authentication System"
|
|
33
|
+
- ✅ "Redis Cache Optimization"
|
|
34
|
+
- ❌ "Implement auth" (too vague)
|
|
35
|
+
- ❌ "User Authentication System for Multi-tenant Applications with Role-Based Access Control" (too long)
|
|
36
|
+
|
|
37
|
+
### Field: `version`
|
|
38
|
+
|
|
39
|
+
**Type**: `semver` (X.Y.Z)
|
|
40
|
+
**Required**: ✅ Yes
|
|
41
|
+
**Format**: `major.minor.patch`
|
|
42
|
+
**Rules**:
|
|
43
|
+
- Draft: `0.x.x` (no implementation yet)
|
|
44
|
+
- Alpha: `1.0.0-alpha` (partial implementation)
|
|
45
|
+
- Beta: `1.0.0-beta` (mostly done, testing)
|
|
46
|
+
- Release: `1.0.0+` (fully implemented)
|
|
47
|
+
|
|
48
|
+
**Examples**:
|
|
49
|
+
```yaml
|
|
50
|
+
version: 0.1.0 # Initial draft
|
|
51
|
+
version: 0.2.0 # Requirements refined
|
|
52
|
+
version: 1.0.0 # First implementation
|
|
53
|
+
version: 1.1.0 # Bug fixes + features
|
|
54
|
+
version: 2.0.0 # Major refactor
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Field: `status`
|
|
58
|
+
|
|
59
|
+
**Type**: `enum`
|
|
60
|
+
**Required**: ✅ Yes
|
|
61
|
+
**Allowed Values**:
|
|
62
|
+
- `draft` – Not ready for implementation
|
|
63
|
+
- `active` – Current work item
|
|
64
|
+
- `in-progress` – Being implemented
|
|
65
|
+
- `completed` – Implemented + tested
|
|
66
|
+
- `deprecated` – No longer used
|
|
67
|
+
- `archived` – Historical reference
|
|
68
|
+
|
|
69
|
+
**State Transitions**:
|
|
70
|
+
```
|
|
71
|
+
draft → active → in-progress → completed
|
|
72
|
+
↓
|
|
73
|
+
deprecated
|
|
74
|
+
↓
|
|
75
|
+
archived
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Field: `created`
|
|
79
|
+
|
|
80
|
+
**Type**: `ISO8601` (YYYY-MM-DD)
|
|
81
|
+
**Required**: ✅ Yes
|
|
82
|
+
**Example**: `2025-11-03`
|
|
83
|
+
**Rule**: Never change after creation
|
|
84
|
+
|
|
85
|
+
### Field: `updated`
|
|
86
|
+
|
|
87
|
+
**Type**: `ISO8601` (YYYY-MM-DD)
|
|
88
|
+
**Required**: ✅ Yes
|
|
89
|
+
**Example**: `2025-11-03`
|
|
90
|
+
**Rule**: Update whenever spec changes
|
|
91
|
+
|
|
92
|
+
### Field: `author`
|
|
93
|
+
|
|
94
|
+
**Type**: `string`
|
|
95
|
+
**Required**: ✅ Yes
|
|
96
|
+
**Format**: `@USERNAME` or `@NICKNAME`
|
|
97
|
+
**Examples**:
|
|
98
|
+
- `@GOOS🪿엉아`
|
|
99
|
+
- `@alice.smith`
|
|
100
|
+
- `@team-backend`
|
|
101
|
+
|
|
102
|
+
### Field: `priority`
|
|
103
|
+
|
|
104
|
+
**Type**: `enum`
|
|
105
|
+
**Required**: ✅ Yes
|
|
106
|
+
**Allowed Values**:
|
|
107
|
+
- `critical` – Blocking other work (P0)
|
|
108
|
+
- `high` – Important feature (P1)
|
|
109
|
+
- `medium` – Nice to have (P2)
|
|
110
|
+
- `low` – Backlog (P3)
|
|
111
|
+
|
|
112
|
+
## HISTORY Section Format
|
|
113
|
+
|
|
114
|
+
### Structure
|
|
115
|
+
|
|
116
|
+
```markdown
|
|
117
|
+
## HISTORY
|
|
118
|
+
|
|
119
|
+
### v1.1.0 (2025-11-05)
|
|
120
|
+
- Fixed race condition in verification
|
|
121
|
+
- Added timeout handling
|
|
122
|
+
- Updated error messages
|
|
123
|
+
|
|
124
|
+
### v1.0.0 (2025-11-03)
|
|
125
|
+
- Initial implementation complete
|
|
126
|
+
- All tests passing
|
|
127
|
+
- Documentation updated
|
|
128
|
+
|
|
129
|
+
### v0.2.0 (2025-11-02)
|
|
130
|
+
- Refined email requirements
|
|
131
|
+
- Added rate limiting constraints
|
|
132
|
+
- Extended EARS patterns
|
|
133
|
+
|
|
134
|
+
### v0.1.0 (2025-11-01)
|
|
135
|
+
- Initial draft with basic auth
|
|
136
|
+
- Ubiquitous requirements defined
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Rules
|
|
140
|
+
|
|
141
|
+
- Start with most recent version
|
|
142
|
+
- One entry per version change
|
|
143
|
+
- Bullet points, not paragraphs
|
|
144
|
+
- Link to commits if available
|
|
145
|
+
- Update `updated` field when modifying
|
|
146
|
+
|
|
147
|
+
## EARS Requirements Format
|
|
148
|
+
|
|
149
|
+
### Pattern 1: Ubiquitous
|
|
150
|
+
|
|
151
|
+
```markdown
|
|
152
|
+
- The system shall provide [capability].
|
|
153
|
+
- The system shall validate [input] before [action].
|
|
154
|
+
- The system shall [behavior] within [time] of [trigger].
|
|
155
|
+
|
|
156
|
+
Examples:
|
|
157
|
+
- The system shall provide user authentication via email.
|
|
158
|
+
- The system shall validate email format (RFC 5322) before storage.
|
|
159
|
+
- The system shall send verification email within 10 seconds of signup.
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Pattern 2: Event-driven
|
|
163
|
+
|
|
164
|
+
```markdown
|
|
165
|
+
- WHEN [condition], the system shall [behavior].
|
|
166
|
+
- Upon [event], the system shall [action] and [action].
|
|
167
|
+
|
|
168
|
+
Examples:
|
|
169
|
+
- WHEN a user clicks 'Sign Up', the system shall display signup form.
|
|
170
|
+
- Upon verification link click, the system shall activate user account.
|
|
171
|
+
- WHEN 3 failed attempts occur, the system shall lock the account.
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### Pattern 3: State-driven
|
|
175
|
+
|
|
176
|
+
```markdown
|
|
177
|
+
- WHILE [state], the system shall [behavior].
|
|
178
|
+
- WHILE not [condition], the system shall [action].
|
|
179
|
+
|
|
180
|
+
Examples:
|
|
181
|
+
- WHILE the user is unauthenticated, the system shall deny access.
|
|
182
|
+
- WHILE session is active, the system shall refresh token automatically.
|
|
183
|
+
- WHILE rate limit not exceeded, the system shall process requests.
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Pattern 4: Optional Features
|
|
187
|
+
|
|
188
|
+
```markdown
|
|
189
|
+
- WHERE [condition], the system may [behavior].
|
|
190
|
+
- If [feature] enabled, the system may [action].
|
|
191
|
+
|
|
192
|
+
Examples:
|
|
193
|
+
- WHERE 2FA is enabled, the system may require additional verification.
|
|
194
|
+
- If API quota available, the system may allow batch operations.
|
|
195
|
+
- WHERE user preference set, the system may send notifications.
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Pattern 5: Constraints (Unwanted Behaviors)
|
|
199
|
+
|
|
200
|
+
```markdown
|
|
201
|
+
- IF [condition], the system shall [constraint].
|
|
202
|
+
- The system shall NOT [unwanted behavior].
|
|
203
|
+
|
|
204
|
+
Examples:
|
|
205
|
+
- IF password invalid 3x, the system shall lock account.
|
|
206
|
+
- The system shall NOT store plaintext passwords.
|
|
207
|
+
- IF token expired, the system shall return 401 error.
|
|
208
|
+
- The system shall NOT process requests exceeding rate limit.
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
## TAG Placement
|
|
212
|
+
|
|
213
|
+
### Location
|
|
214
|
+
|
|
215
|
+
Place `@SPEC:ID` in first 50 lines of spec.md:
|
|
216
|
+
|
|
217
|
+
```markdown
|
|
218
|
+
# User Authentication SPEC
|
|
219
|
+
|
|
220
|
+
@SPEC:AUTH-001
|
|
221
|
+
|
|
222
|
+
## Overview
|
|
223
|
+
...
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Usage in Code
|
|
227
|
+
|
|
228
|
+
Link implementation to spec:
|
|
229
|
+
|
|
230
|
+
```python
|
|
231
|
+
# src/auth.py
|
|
232
|
+
# @CODE:AUTH-001
|
|
233
|
+
|
|
234
|
+
def verify_email(email: str, token: str) -> bool:
|
|
235
|
+
"""Verify email with token. Requirement: AUTH-001"""
|
|
236
|
+
# Implementation here
|
|
237
|
+
pass
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
## Duplicate Detection
|
|
241
|
+
|
|
242
|
+
### Before Creating SPEC
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
# Check if ID already exists
|
|
246
|
+
rg "@SPEC:AUTH-001" .moai/specs/
|
|
247
|
+
|
|
248
|
+
# Expected: 0 hits (if new) or 1 hit (if existing)
|
|
249
|
+
# If >1 hit: ERROR – duplicate detected
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### Duplicate Resolution
|
|
253
|
+
|
|
254
|
+
If duplicate found:
|
|
255
|
+
1. Use different number: AUTH-001 → AUTH-002
|
|
256
|
+
2. Or use different domain: AUTH-001 → SECURITY-001
|
|
257
|
+
3. Recheck with `rg "@SPEC:{NEW-ID}" .moai/specs/`
|
|
258
|
+
|
|
259
|
+
## Validation Checklist
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
#!/bin/bash
|
|
263
|
+
# validate-spec.sh - Verify SPEC completeness
|
|
264
|
+
|
|
265
|
+
SPEC_DIR=".moai/specs/SPEC-$1"
|
|
266
|
+
|
|
267
|
+
if [ ! -d "$SPEC_DIR" ]; then
|
|
268
|
+
echo "❌ Directory not found: $SPEC_DIR"
|
|
269
|
+
exit 1
|
|
270
|
+
fi
|
|
271
|
+
|
|
272
|
+
# Check metadata fields
|
|
273
|
+
for field in "id" "title" "version" "status" "created" "updated" "author" "priority"; do
|
|
274
|
+
if ! grep "^$field:" "$SPEC_DIR/spec.md" > /dev/null; then
|
|
275
|
+
echo "❌ Missing field: $field"
|
|
276
|
+
fi
|
|
277
|
+
done
|
|
278
|
+
|
|
279
|
+
# Check SPEC ID in file
|
|
280
|
+
SPEC_ID=$(grep "^id:" "$SPEC_DIR/spec.md" | cut -d' ' -f2)
|
|
281
|
+
if ! grep "@SPEC:$SPEC_ID" "$SPEC_DIR/spec.md" > /dev/null; then
|
|
282
|
+
echo "❌ Missing @SPEC:$SPEC_ID tag in spec.md"
|
|
283
|
+
fi
|
|
284
|
+
|
|
285
|
+
# Check for EARS patterns (at least 3)
|
|
286
|
+
EARS_COUNT=$(grep -E "^- (The system shall|WHEN|WHILE|WHERE|IF)" "$SPEC_DIR/spec.md" | wc -l)
|
|
287
|
+
if [ "$EARS_COUNT" -lt 5 ]; then
|
|
288
|
+
echo "⚠️ Only $EARS_COUNT EARS requirements (recommend ≥5)"
|
|
289
|
+
fi
|
|
290
|
+
|
|
291
|
+
# Check HISTORY section
|
|
292
|
+
if ! grep "^## HISTORY" "$SPEC_DIR/spec.md" > /dev/null; then
|
|
293
|
+
echo "❌ Missing HISTORY section"
|
|
294
|
+
fi
|
|
295
|
+
|
|
296
|
+
echo "✅ SPEC validation complete"
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
## File Structure
|
|
300
|
+
|
|
301
|
+
```
|
|
302
|
+
.moai/specs/SPEC-AUTH-001/
|
|
303
|
+
├── spec.md # Requirements + metadata
|
|
304
|
+
├── plan.md # Implementation plan (phase 2)
|
|
305
|
+
└── acceptance.md # Test scenarios (phase 2)
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### spec.md Contents (Phase 1)
|
|
309
|
+
|
|
310
|
+
```markdown
|
|
311
|
+
---
|
|
312
|
+
id: AUTH-001
|
|
313
|
+
title: "User Authentication System"
|
|
314
|
+
version: 0.1.0
|
|
315
|
+
status: active
|
|
316
|
+
created: 2025-11-03
|
|
317
|
+
updated: 2025-11-03
|
|
318
|
+
author: @USERNAME
|
|
319
|
+
priority: high
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
# User Authentication SPEC
|
|
323
|
+
|
|
324
|
+
@SPEC:AUTH-001
|
|
325
|
+
|
|
326
|
+
## Overview
|
|
327
|
+
[System description]
|
|
328
|
+
|
|
329
|
+
## Ubiquitous Requirements
|
|
330
|
+
[The system shall...]
|
|
331
|
+
|
|
332
|
+
## Event-driven Requirements
|
|
333
|
+
[WHEN... the system shall...]
|
|
334
|
+
|
|
335
|
+
## State-driven Requirements
|
|
336
|
+
[WHILE... the system shall...]
|
|
337
|
+
|
|
338
|
+
## Optional Features
|
|
339
|
+
[WHERE... the system may...]
|
|
340
|
+
|
|
341
|
+
## Constraints
|
|
342
|
+
[IF... the system shall...]
|
|
343
|
+
|
|
344
|
+
## HISTORY
|
|
345
|
+
|
|
346
|
+
### v0.1.0 (2025-11-03)
|
|
347
|
+
- Initial draft
|
|
348
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: moai-alfred-todowrite-pattern
|
|
3
|
+
description: "TodoWrite auto-initialization patterns from Plan agent, task tracking best practices, status management."
|
|
4
|
+
tier: Alfred
|
|
5
|
+
allowed-tools: "Read"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## What It Does
|
|
9
|
+
|
|
10
|
+
TodoWrite 자동 초기화, task 상태 관리, phase 구분 규칙을 정의합니다.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
|
|
14
|
+
- ✅ Task tracking 설정
|
|
15
|
+
- ✅ TodoWrite 상태 관리
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
Learn more in `reference.md`.
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
# TodoWrite Auto-Initialization Pattern
|
|
2
|
+
|
|
3
|
+
> **Version**: 0.8.0+
|
|
4
|
+
> **Status**: Active
|
|
5
|
+
> **Updated**: 2025-11-02
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
**OLD Pattern** (manual initialization):
|
|
10
|
+
```python
|
|
11
|
+
# User had to manually initialize TodoWrite
|
|
12
|
+
TodoWrite([
|
|
13
|
+
{"content": "Analyze project", "status": "pending"},
|
|
14
|
+
{"content": "Create SPEC", "status": "pending"}
|
|
15
|
+
])
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**NEW Pattern** (auto-initialization from Plan agent):
|
|
19
|
+
```python
|
|
20
|
+
# Plan agent generates task list
|
|
21
|
+
plan = Task(
|
|
22
|
+
subagent_type="Plan",
|
|
23
|
+
prompt="Create structured plan for: {request}"
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
# Alfred auto-initializes TodoWrite from plan
|
|
27
|
+
TodoWrite(plan.tasks) # Automatic from Plan agent output
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Integration with Alfred 4-Step Workflow
|
|
31
|
+
|
|
32
|
+
### Step 1: Intent Understanding
|
|
33
|
+
- **Goal**: Clarify user intent before any action
|
|
34
|
+
- **TodoWrite**: NO initialization
|
|
35
|
+
- **Output**: Clear understanding of requirements
|
|
36
|
+
|
|
37
|
+
### Step 2: Plan Creation (NEW: AUTO-INIT)
|
|
38
|
+
- **Goal**: Analyze tasks and initialize progress tracking
|
|
39
|
+
- **Action**: Invoke Plan Agent to decompose tasks
|
|
40
|
+
- **NEW**: **AUTO-INITIALIZE TodoWrite from Plan output**
|
|
41
|
+
- **Output**: Structured task breakdown + initialized TodoWrite
|
|
42
|
+
|
|
43
|
+
### Step 3: Task Execution
|
|
44
|
+
- **Goal**: Execute tasks with transparent progress tracking
|
|
45
|
+
- **Action**: Execute tasks in order, updating TodoWrite status
|
|
46
|
+
- **TodoWrite**: Update: pending → in_progress → completed
|
|
47
|
+
- **Output**: Completed work, all todos marked done
|
|
48
|
+
|
|
49
|
+
### Step 4: Report & Commit
|
|
50
|
+
- **Goal**: Document work and create git history
|
|
51
|
+
- **Action**: Generate report (if requested) and commit
|
|
52
|
+
- **TodoWrite**: All tasks should be "completed"
|
|
53
|
+
- **Output**: Git history, documentation
|
|
54
|
+
|
|
55
|
+
## Plan Agent Output Format
|
|
56
|
+
|
|
57
|
+
Plan agent should return tasks in TodoWrite-compatible format:
|
|
58
|
+
|
|
59
|
+
```json
|
|
60
|
+
{
|
|
61
|
+
"tasks": [
|
|
62
|
+
{
|
|
63
|
+
"content": "Analyze SPEC requirements",
|
|
64
|
+
"activeForm": "Analyzing SPEC requirements",
|
|
65
|
+
"status": "pending"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"content": "Write test cases",
|
|
69
|
+
"activeForm": "Writing test cases",
|
|
70
|
+
"status": "pending"
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"content": "Implement feature",
|
|
74
|
+
"activeForm": "Implementing feature",
|
|
75
|
+
"status": "pending"
|
|
76
|
+
}
|
|
77
|
+
]
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Implementation Pattern
|
|
82
|
+
|
|
83
|
+
### In /alfred:1-plan Command
|
|
84
|
+
|
|
85
|
+
```python
|
|
86
|
+
# STEP 2: Plan Creation (with AUTO-INIT)
|
|
87
|
+
plan_result = Task(
|
|
88
|
+
subagent_type="Plan",
|
|
89
|
+
prompt=f"""Create structured plan for: {user_request}
|
|
90
|
+
|
|
91
|
+
Return tasks in this format:
|
|
92
|
+
{{
|
|
93
|
+
"tasks": [
|
|
94
|
+
{{"content": "[imperative verb] [object]", "activeForm": "[present continuous]"}},
|
|
95
|
+
...
|
|
96
|
+
]
|
|
97
|
+
}}
|
|
98
|
+
"""
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
# AUTO-INIT TodoWrite from Plan output
|
|
102
|
+
tasks = [
|
|
103
|
+
{
|
|
104
|
+
"content": task["content"],
|
|
105
|
+
"activeForm": task["activeForm"],
|
|
106
|
+
"status": "pending"
|
|
107
|
+
}
|
|
108
|
+
for task in plan_result.tasks
|
|
109
|
+
]
|
|
110
|
+
|
|
111
|
+
TodoWrite(tasks)
|
|
112
|
+
|
|
113
|
+
# STEP 3: Execute tasks
|
|
114
|
+
for task in plan_result.tasks:
|
|
115
|
+
TodoWrite([{"content": task["content"], "status": "in_progress"}])
|
|
116
|
+
execute_task(task)
|
|
117
|
+
TodoWrite([{"content": task["content"], "status": "completed"}])
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Real-World Example
|
|
121
|
+
|
|
122
|
+
### User Request
|
|
123
|
+
```
|
|
124
|
+
/alfred:1-plan "Create user authentication feature"
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Step 1: Intent Understanding
|
|
128
|
+
- Clarify: Is JWT or OAuth preferred?
|
|
129
|
+
- Ask for scope: Frontend, backend, or both?
|
|
130
|
+
|
|
131
|
+
### Step 2: Plan Creation
|
|
132
|
+
Plan agent returns:
|
|
133
|
+
```json
|
|
134
|
+
{
|
|
135
|
+
"tasks": [
|
|
136
|
+
{"content": "Design authentication architecture", "activeForm": "Designing authentication architecture"},
|
|
137
|
+
{"content": "Create database schema", "activeForm": "Creating database schema"},
|
|
138
|
+
{"content": "Write API endpoints", "activeForm": "Writing API endpoints"},
|
|
139
|
+
{"content": "Build frontend login form", "activeForm": "Building frontend login form"},
|
|
140
|
+
{"content": "Write integration tests", "activeForm": "Writing integration tests"}
|
|
141
|
+
]
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Alfred AUTO-INITIALIZES:
|
|
146
|
+
```
|
|
147
|
+
☑ Design authentication architecture [pending]
|
|
148
|
+
☑ Create database schema [pending]
|
|
149
|
+
☑ Write API endpoints [pending]
|
|
150
|
+
☑ Build frontend login form [pending]
|
|
151
|
+
☑ Write integration tests [pending]
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Step 3: Task Execution
|
|
155
|
+
```
|
|
156
|
+
☑ Design authentication architecture [completed]
|
|
157
|
+
☑ Create database schema [completed]
|
|
158
|
+
☑ Write API endpoints [in_progress]
|
|
159
|
+
...
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Benefits
|
|
163
|
+
|
|
164
|
+
1. **Consistency**: All workflows start with same TodoWrite structure
|
|
165
|
+
2. **Visibility**: Users see full task list upfront
|
|
166
|
+
3. **Progress tracking**: Clear pending → in_progress → completed flow
|
|
167
|
+
4. **Resumability**: Saved TodoWrite state enables resume feature (Feature 6)
|
|
168
|
+
5. **No manual work**: Plan agent output directly initializes todos
|
|
169
|
+
|
|
170
|
+
## Backward Compatibility
|
|
171
|
+
|
|
172
|
+
**Existing workflows** that manually call TodoWrite still work:
|
|
173
|
+
```python
|
|
174
|
+
# Old style still works
|
|
175
|
+
TodoWrite([
|
|
176
|
+
{"content": "Task 1", "status": "pending"},
|
|
177
|
+
{"content": "Task 2", "status": "pending"}
|
|
178
|
+
])
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**Transition strategy**:
|
|
182
|
+
1. New commands use AUTO-INIT pattern (Week 1)
|
|
183
|
+
2. Existing commands continue supporting manual TodoWrite
|
|
184
|
+
3. Deprecation notice added in v0.9.0
|
|
185
|
+
4. Full migration in v1.0.0
|
|
186
|
+
|
|
187
|
+
## Testing Checklist
|
|
188
|
+
|
|
189
|
+
- [ ] Plan agent returns well-formed task list
|
|
190
|
+
- [ ] TodoWrite initializes with all tasks as "pending"
|
|
191
|
+
- [ ] Task execution updates status correctly
|
|
192
|
+
- [ ] Resume feature works with auto-initialized todos
|
|
193
|
+
- [ ] Backward compatibility maintained for manual TodoWrite calls
|
|
194
|
+
|
|
195
|
+
## Migration Guide for Users
|
|
196
|
+
|
|
197
|
+
**Before (v0.7.0)**:
|
|
198
|
+
- Manual TodoWrite initialization
|
|
199
|
+
- Inconsistent task structures
|
|
200
|
+
- No automatic initialization
|
|
201
|
+
|
|
202
|
+
**After (v0.8.0+)**:
|
|
203
|
+
- Automatic TodoWrite from Plan agent
|
|
204
|
+
- Consistent structure across all commands
|
|
205
|
+
- Better progress visibility
|
|
206
|
+
- Supports resume feature
|
|
207
|
+
|
|
208
|
+
**How to upgrade**:
|
|
209
|
+
1. No action required (automatic)
|
|
210
|
+
2. All 3 commands (`/alfred:1-plan`, `/alfred:2-run`, `/alfred:3-sync`) now support auto-init
|
|
211
|
+
3. Manual TodoWrite calls still work (backward compatible)
|