moai-adk 0.9.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 +214 -56
- moai_adk/core/issue_creator.py +2 -2
- 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/ci_validator.py +34 -4
- moai_adk/core/tags/pre_commit_validator.py +40 -2
- moai_adk/core/tags/reporter.py +2 -3
- moai_adk/core/tags/validator.py +1 -1
- moai_adk/core/template_engine.py +20 -5
- moai_adk/templates/.claude/agents/alfred/backend-expert.md +319 -0
- moai_adk/templates/.claude/agents/alfred/devops-expert.md +464 -0
- moai_adk/templates/.claude/agents/alfred/doc-syncer.md +1 -1
- moai_adk/templates/.claude/agents/alfred/frontend-expert.md +357 -0
- moai_adk/templates/.claude/agents/alfred/git-manager.md +2 -2
- moai_adk/templates/.claude/agents/alfred/implementation-planner.md +76 -3
- moai_adk/templates/.claude/agents/alfred/project-manager.md +49 -10
- moai_adk/templates/.claude/agents/alfred/quality-gate.md +3 -3
- moai_adk/templates/.claude/agents/alfred/spec-builder.md +108 -3
- moai_adk/templates/.claude/agents/alfred/tag-agent.md +74 -0
- moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +107 -5
- moai_adk/templates/.claude/agents/alfred/trust-checker.md +2 -2
- moai_adk/templates/.claude/agents/alfred/ui-ux-expert.md +571 -0
- moai_adk/templates/.claude/commands/alfred/0-project.md +465 -129
- moai_adk/templates/.claude/commands/alfred/1-plan.md +139 -65
- moai_adk/templates/.claude/commands/alfred/2-run.md +214 -50
- moai_adk/templates/.claude/commands/alfred/3-sync.md +372 -46
- moai_adk/templates/.claude/commands/alfred/9-feedback.md +1 -1
- moai_adk/templates/.claude/hooks/alfred/core/project.py +25 -27
- 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 +4 -4
- moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +29 -0
- moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +11 -19
- moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +11 -19
- moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +11 -19
- moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +10 -18
- moai_adk/templates/.claude/hooks/alfred/shared/core/__init__.py +2 -2
- moai_adk/templates/.claude/hooks/alfred/shared/core/checkpoint.py +3 -3
- moai_adk/templates/.claude/hooks/alfred/shared/core/context.py +5 -5
- moai_adk/templates/.claude/hooks/alfred/shared/core/project.py +40 -41
- moai_adk/templates/.claude/hooks/alfred/shared/core/tags.py +55 -23
- moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +4 -4
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +132 -3
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/session.py +9 -10
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/tool.py +3 -6
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/user.py +19 -0
- moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +14 -22
- 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-config-schema/reference.md +444 -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-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-spec-authoring → moai-alfred-spec-authoring}/SKILL.md +5 -5
- 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-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 +182 -25
- moai_adk/templates/.github/workflows/moai-release-pipeline.yml +35 -29
- 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 +76 -7
- 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 +208 -41
- 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 +3 -1
- moai_adk/templates/CLAUDE.md +940 -45
- 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.9.0.dist-info → moai_adk-0.15.0.dist-info}/METADATA +1166 -455
- {moai_adk-0.9.0.dist-info → moai_adk-0.15.0.dist-info}/RECORD +169 -109
- moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +0 -209
- moai_adk/templates/.claude/hooks/alfred/notification__handle_events.py +0 -102
- moai_adk/templates/.claude/hooks/alfred/stop__handle_interrupt.py +0 -102
- moai_adk/templates/.claude/hooks/alfred/subagent_stop__handle_subagent_end.py +0 -102
- 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/.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/SPEC-METADATA.md +0 -356
- moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -330
- 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/README.md +0 -256
- moai_adk/templates/__init__.py +0 -2
- /moai_adk/templates/{.moai/memory/ISSUE-LABEL-MAPPING.md → .claude/skills/moai-alfred-issue-labels/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/.claude/skills/{moai-spec-authoring → moai-alfred-spec-authoring}/README.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-spec-authoring → moai-alfred-spec-authoring}/examples/validate-spec.sh +0 -0
- /moai_adk/templates/.claude/skills/{moai-spec-authoring → moai-alfred-spec-authoring}/examples.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-spec-authoring → moai-alfred-spec-authoring}/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.9.0.dist-info → moai_adk-0.15.0.dist-info}/WHEEL +0 -0
- {moai_adk-0.9.0.dist-info → moai_adk-0.15.0.dist-info}/entry_points.txt +0 -0
- {moai_adk-0.9.0.dist-info → moai_adk-0.15.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,474 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Study with Alfred
|
|
3
|
-
description: "Learning mode to easily learn new skills with Alfred"
|
|
4
|
-
# Translations:
|
|
5
|
-
# - ko: "Alfred와 함께 새로운 기술을 쉽게 학습하는 학습 모드"
|
|
6
|
-
# - ja: "Alfredと一緒に新しいスキルを簡単に学習する学習モード"
|
|
7
|
-
# - zh: "与Alfred一起轻松学习新技能的学习模式"
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Study with Alfred
|
|
11
|
-
> Interactive prompts rely on `AskUserQuestion tool (documented in moai-alfred-interactive-questions skill)` so AskUserQuestion renders TUI selection menus for user surveys and approvals.
|
|
12
|
-
|
|
13
|
-
**Audience**: Developers looking to learn new technologies/languages/frameworks
|
|
14
|
-
|
|
15
|
-
This is a learning mode where Alfred easily explains new skills and helps you practice, like a friend learning together.
|
|
16
|
-
|
|
17
|
-
## How to Learn with Alfred
|
|
18
|
-
|
|
19
|
-
**Alfred's role**:
|
|
20
|
-
- Explain complex concepts in an easy-to-understand manner
|
|
21
|
-
- Improve understanding with real-life analogies
|
|
22
|
-
- Practice together step by step
|
|
23
|
-
- Answer frequently asked questions
|
|
24
|
-
|
|
25
|
-
**Learning Flow**:
|
|
26
|
-
```
|
|
27
|
-
1. What (What is this?) → Understanding the basic concept
|
|
28
|
-
2. Why (Why do you need it?) → Reasons for use and advantages
|
|
29
|
-
3. How (How to use it?) → Practice-based learning
|
|
30
|
-
4. Practice → Integration with MoAI-ADK
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
## 4 stages of learning
|
|
36
|
-
|
|
37
|
-
### Step 1: What (What is this?)
|
|
38
|
-
|
|
39
|
-
**Alfred**: "I'll summarize the new technology in one sentence."
|
|
40
|
-
|
|
41
|
-
**Explanation method**:
|
|
42
|
-
- One line summary
|
|
43
|
-
- Real life analogy
|
|
44
|
-
- 3 key concepts
|
|
45
|
-
|
|
46
|
-
**Example**: FastAPI (Python web framework)
|
|
47
|
-
```
|
|
48
|
-
Alfred: "FastAPI is a tool to quickly create APIs with Python."
|
|
49
|
-
|
|
50
|
-
Real life analogy:
|
|
51
|
-
A tool that quickly assembles API pieces like Lego blocks
|
|
52
|
-
|
|
53
|
-
One-line summary:
|
|
54
|
-
Python + automatic verification + fast speed = FastAPI
|
|
55
|
-
|
|
56
|
-
Key concepts:
|
|
57
|
-
1. Automatic documentation (Swagger UI)
|
|
58
|
-
2. Type verification (Pydantic)
|
|
59
|
-
3. Asynchronous processing (async/await)
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
### Step 2: Why (Why do you need it?)
|
|
63
|
-
|
|
64
|
-
**Alfred**: “Let’s think together about the problems this technology solves.”
|
|
65
|
-
|
|
66
|
-
**How to explain**:
|
|
67
|
-
- Problem situation
|
|
68
|
-
- Solution
|
|
69
|
-
- Actual use case
|
|
70
|
-
|
|
71
|
-
**Example**: Why use FastAPI?
|
|
72
|
-
```
|
|
73
|
-
Let's think about it with Alfred:
|
|
74
|
-
|
|
75
|
-
Problem:
|
|
76
|
-
"Flask is slow, and Django is too heavy. Type validation also has to be done manually."
|
|
77
|
-
|
|
78
|
-
Solution:
|
|
79
|
-
FastAPI is fast, lightweight, and automatically verifies types.
|
|
80
|
-
|
|
81
|
-
Real world usage:
|
|
82
|
-
- Uber: Real-time location API
|
|
83
|
-
- Netflix: Recommendation system API
|
|
84
|
-
- Microsoft: Azure services API
|
|
85
|
-
|
|
86
|
-
Alfred: “Used in places where high speed and stability are required!”
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
### Step 3: How (How do I use it?)
|
|
90
|
-
|
|
91
|
-
**Alfred**: "Let's start with the simplest example"
|
|
92
|
-
|
|
93
|
-
**Learning order**:
|
|
94
|
-
1. Minimal example (Hello World)
|
|
95
|
-
2. Practical example (CRUD API)
|
|
96
|
-
3. Frequently Asked Questions
|
|
97
|
-
|
|
98
|
-
**Example**: How to use FastAPI
|
|
99
|
-
```
|
|
100
|
-
Alfred: “Let’s start with the simplest example”
|
|
101
|
-
|
|
102
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
103
|
-
[Minimum example]
|
|
104
|
-
|
|
105
|
-
from fastapi import FastAPI # ← Import FastAPI
|
|
106
|
-
|
|
107
|
-
app = FastAPI() # ← Create app
|
|
108
|
-
|
|
109
|
-
@app.get("/hello") # ← Create /hello address
|
|
110
|
-
def hello():
|
|
111
|
-
return {"message": "Hello!"} # ← Send response
|
|
112
|
-
|
|
113
|
-
Alfred: “An API is complete in just 5 lines!”
|
|
114
|
-
|
|
115
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
116
|
-
[Practical example: User inquiry API]
|
|
117
|
-
|
|
118
|
-
from fastapi import FastAPI, HTTPException
|
|
119
|
-
from pydantic import BaseModel
|
|
120
|
-
|
|
121
|
-
app = FastAPI()
|
|
122
|
-
|
|
123
|
-
class User(BaseModel):
|
|
124
|
-
id: int
|
|
125
|
-
name: str
|
|
126
|
-
email: str
|
|
127
|
-
|
|
128
|
-
@app.get("/users/{user_id}")
|
|
129
|
-
async def get_user(user_id: int) -> User:
|
|
130
|
-
user = await db.find_user(user_id)
|
|
131
|
-
if not user:
|
|
132
|
-
raise HTTPException(status_code=404, detail="User not found")
|
|
133
|
-
return user
|
|
134
|
-
|
|
135
|
-
Alfred: "Automatic verification with Pydantic, error handling with HTTPException!"
|
|
136
|
-
|
|
137
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
138
|
-
[Frequently Asked Questions]
|
|
139
|
-
|
|
140
|
-
Q: Compared to Flask?
|
|
141
|
-
Alfred: “FastAPI is 3 times faster and has automatic verification.”
|
|
142
|
-
|
|
143
|
-
Q: What is async/await?
|
|
144
|
-
Alfred: "It's a way to handle multiple tasks simultaneously. While waiting for one request, you can process another request."
|
|
145
|
-
|
|
146
|
-
Q: When is it best to use it?
|
|
147
|
-
Alfred: “It’s best for fast API, real-time processing, and microservices.”
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
### Step 4: Practice
|
|
151
|
-
|
|
152
|
-
**Alfred**: “Now shall we try using it with MoAI-ADK?”
|
|
153
|
-
|
|
154
|
-
**Practice method**:
|
|
155
|
-
- Practice with SPEC → TEST → CODE flow
|
|
156
|
-
- Application of @TAG system
|
|
157
|
-
- Compliance with TRUST 5 principles
|
|
158
|
-
|
|
159
|
-
**Example**: Creating a user API with FastAPI
|
|
160
|
-
```
|
|
161
|
-
Alfred: “Let’s create it together with the MoAI-ADK workflow!”
|
|
162
|
-
|
|
163
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
164
|
-
[Step 1: Write SPEC]
|
|
165
|
-
|
|
166
|
-
/alfred:1-plan "User Lookup API"
|
|
167
|
-
|
|
168
|
-
SPEC created by Alfred:
|
|
169
|
-
---
|
|
170
|
-
id: USER-001
|
|
171
|
-
version: 0.0.1
|
|
172
|
-
status: draft
|
|
173
|
-
---
|
|
174
|
-
|
|
175
|
-
# @SPEC:USER-001: User Lookup API
|
|
176
|
-
|
|
177
|
-
## Ubiquitous Requirements
|
|
178
|
-
- The system must provide an API to search user information by user ID.
|
|
179
|
-
|
|
180
|
-
## Event-driven Requirements
|
|
181
|
-
- WHEN If a user ID that exists is requested, the system SHOULD return user information
|
|
182
|
-
- WHEN If a user ID that does not exist is requested, the system SHOULD return a 404 error.
|
|
183
|
-
|
|
184
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
185
|
-
[Step 2: TDD implementation]
|
|
186
|
-
|
|
187
|
-
/alfred:2-run USER-001
|
|
188
|
-
|
|
189
|
-
Alfred: “I’ll write a test first”
|
|
190
|
-
|
|
191
|
-
# @TEST:USER-001 | SPEC: SPEC-USER-001.md
|
|
192
|
-
def test_get_user_returns_user():
|
|
193
|
-
response = client.get("/users/1")
|
|
194
|
-
assert response.status_code == 200
|
|
195
|
-
assert response.json()["id"] == 1
|
|
196
|
-
|
|
197
|
-
def test_get_user_not_found():
|
|
198
|
-
response = client.get("/users/999")
|
|
199
|
-
assert response.status_code == 404
|
|
200
|
-
|
|
201
|
-
Alfred: “Now let me write the code”
|
|
202
|
-
|
|
203
|
-
# @CODE:USER-001 | SPEC: SPEC-USER-001.md | TEST: tests/test_user.py
|
|
204
|
-
@app.get("/users/{user_id}")
|
|
205
|
-
async def get_user(user_id: int) -> User:
|
|
206
|
-
"""@CODE:USER-001: User Lookup API"""
|
|
207
|
-
user = await db.users.find_by_id(user_id)
|
|
208
|
-
if not user:
|
|
209
|
-
raise HTTPException(status_code=404, detail="User not found")
|
|
210
|
-
return user
|
|
211
|
-
|
|
212
|
-
Alfred: “SPEC → TEST → CODE are all connected!”
|
|
213
|
-
|
|
214
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
215
|
-
[Step 3: Document Synchronization]
|
|
216
|
-
|
|
217
|
-
/alfred:3-sync
|
|
218
|
-
|
|
219
|
-
Alfred: “I will verify the TAG chain”
|
|
220
|
-
|
|
221
|
-
✓ @SPEC:USER-001 → .moai/specs/SPEC-USER-001.md
|
|
222
|
-
✓ @TEST:USER-001 → tests/test_user.py
|
|
223
|
-
✓ @CODE:USER-001 → src/api/user.py
|
|
224
|
-
✓ @DOC:USER-001 → docs/api/user.md (automatically generated)
|
|
225
|
-
|
|
226
|
-
Alfred: "Complete! FastAPI + MoAI-ADK work together!"
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
---
|
|
230
|
-
|
|
231
|
-
## Framework-specific study guide
|
|
232
|
-
|
|
233
|
-
### TypeScript + Express
|
|
234
|
-
|
|
235
|
-
**Alfred**: "It's the most popular web framework in Node.js"
|
|
236
|
-
|
|
237
|
-
#### What (What is this?)
|
|
238
|
-
```
|
|
239
|
-
Alfred: "Express is a tool to easily create a web server with Node.js."
|
|
240
|
-
|
|
241
|
-
Real life analogy:
|
|
242
|
-
The role is like a waiter in a restaurant, taking requests and delivering responses.
|
|
243
|
-
|
|
244
|
-
One-line summary:
|
|
245
|
-
Node.js + middleware + routing = Express
|
|
246
|
-
|
|
247
|
-
Key concepts:
|
|
248
|
-
1. Middleware chain
|
|
249
|
-
2. Routing
|
|
250
|
-
3. Request-response processing
|
|
251
|
-
```
|
|
252
|
-
|
|
253
|
-
#### Why (Why do you need it?)
|
|
254
|
-
```
|
|
255
|
-
Alfred: “More than 95% of Node.js APIs use Express”
|
|
256
|
-
|
|
257
|
-
Problem: Node.js default http module is too complicated
|
|
258
|
-
Solution: Express can be easily created with a simple API
|
|
259
|
-
|
|
260
|
-
Practical Use:
|
|
261
|
-
- Uber, Netflix, PayPal, etc.
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
#### How (How do you use it?)
|
|
265
|
-
```
|
|
266
|
-
Alfred: “It’s the simplest example.”
|
|
267
|
-
|
|
268
|
-
import express from 'express';
|
|
269
|
-
|
|
270
|
-
const app = express();
|
|
271
|
-
|
|
272
|
-
app.get('/users/:id', async (req, res) => {
|
|
273
|
-
const user = await db.users.findById(req.params.id);
|
|
274
|
-
res.json(user);
|
|
275
|
-
});
|
|
276
|
-
|
|
277
|
-
app.listen(3000);
|
|
278
|
-
|
|
279
|
-
Alfred: “All you need is this to complete your API server!”
|
|
280
|
-
```
|
|
281
|
-
|
|
282
|
-
#### Practice (with MoAI-ADK)
|
|
283
|
-
```
|
|
284
|
-
Alfred: “Now let’s make it TDD”
|
|
285
|
-
|
|
286
|
-
// @TEST:USER-001 | SPEC: SPEC-USER-001.md
|
|
287
|
-
test('GET /users/:id returns user', async () => {
|
|
288
|
-
const res = await request(app).get('/users/1');
|
|
289
|
-
expect(res.status).toBe(200);
|
|
290
|
-
expect(res.body.id).toBe('1');
|
|
291
|
-
});
|
|
292
|
-
|
|
293
|
-
// @CODE:USER-001 | SPEC: SPEC-USER-001.md | TEST: tests/user.test.ts
|
|
294
|
-
app.get('/users/:id', async (req, res) => {
|
|
295
|
-
const user = await db.users.findById(req.params.id);
|
|
296
|
-
if (!user) {
|
|
297
|
-
return res.status(404).json({ error: 'Not found' });
|
|
298
|
-
}
|
|
299
|
-
res.json(user);
|
|
300
|
-
});
|
|
301
|
-
|
|
302
|
-
Alfred: “SPEC → TEST → CODE completed!”
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
#### Frequently Asked Questions
|
|
306
|
-
```
|
|
307
|
-
Q: What is middleware?
|
|
308
|
-
Alfred: "It is a step that goes through before processing a request. It is used for logging, authentication, etc."
|
|
309
|
-
|
|
310
|
-
Q: How to handle async errors?
|
|
311
|
-
Alfred: "If you use the express-async-errors package, it will be handled automatically."
|
|
312
|
-
|
|
313
|
-
Q: FastAPI vs Express?
|
|
314
|
-
Alfred: “Express is flexible and has a large ecosystem, and FastAPI is fast and has strong automatic verification.”
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
---
|
|
318
|
-
|
|
319
|
-
### Python + FastAPI
|
|
320
|
-
|
|
321
|
-
**Alfred**: "It's the standard for modern Python web frameworks."
|
|
322
|
-
|
|
323
|
-
#### What (What is this?)
|
|
324
|
-
```
|
|
325
|
-
Alfred: "FastAPI is a tool to create fast APIs with Python."
|
|
326
|
-
|
|
327
|
-
Real life analogy:
|
|
328
|
-
Automatically verify and document like robots in a car factory
|
|
329
|
-
|
|
330
|
-
One-line summary:
|
|
331
|
-
Python + Pydantic + Async = FastAPI
|
|
332
|
-
|
|
333
|
-
Key concepts:
|
|
334
|
-
1. Automatic Verification (Pydantic)
|
|
335
|
-
2. Automatic documentation (Swagger)
|
|
336
|
-
3. Asynchronous processing (async/await)
|
|
337
|
-
```
|
|
338
|
-
|
|
339
|
-
#### Why (Why do you need it?)
|
|
340
|
-
```
|
|
341
|
-
Alfred: “3x faster than Flask and more concise than Django”
|
|
342
|
-
|
|
343
|
-
Problem: Flask is slow, Django is heavy
|
|
344
|
-
Solution: FastAPI is fast, lightweight, yet powerful
|
|
345
|
-
|
|
346
|
-
Actual use:
|
|
347
|
-
- Uber, Microsoft, Netflix
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
#### How (How do you use it?)
|
|
351
|
-
```
|
|
352
|
-
Alfred: “It’s a basic example.”
|
|
353
|
-
|
|
354
|
-
from fastapi import FastAPI
|
|
355
|
-
from pydantic import BaseModel
|
|
356
|
-
|
|
357
|
-
app = FastAPI()
|
|
358
|
-
|
|
359
|
-
class User(BaseModel):
|
|
360
|
-
id: int
|
|
361
|
-
name: str
|
|
362
|
-
|
|
363
|
-
@app.get("/users/{user_id}")
|
|
364
|
-
async def get_user(user_id: int) -> User:
|
|
365
|
-
return await db.find_user(user_id)
|
|
366
|
-
|
|
367
|
-
Alfred: “Pydantic verifies it automatically!”
|
|
368
|
-
```
|
|
369
|
-
|
|
370
|
-
#### Practice (with MoAI-ADK)
|
|
371
|
-
```
|
|
372
|
-
Alfred: “Let’s build it together with TDD”
|
|
373
|
-
|
|
374
|
-
# @TEST:USER-001 | SPEC: SPEC-USER-001.md
|
|
375
|
-
def test_get_user():
|
|
376
|
-
response = client.get("/users/1")
|
|
377
|
-
assert response.status_code == 200
|
|
378
|
-
|
|
379
|
-
# @CODE:USER-001 | SPEC: SPEC-USER-001.md | TEST: tests/test_user.py
|
|
380
|
-
@app.get("/users/{user_id}")
|
|
381
|
-
async def get_user(user_id: int) -> User:
|
|
382
|
-
"""@CODE:USER-001: User query"""
|
|
383
|
-
user = await db.find_user(user_id)
|
|
384
|
-
if not user:
|
|
385
|
-
raise HTTPException(status_code=404)
|
|
386
|
-
return user
|
|
387
|
-
|
|
388
|
-
Alfred: “Complete!”
|
|
389
|
-
```
|
|
390
|
-
|
|
391
|
-
#### Frequently Asked Questions
|
|
392
|
-
```
|
|
393
|
-
Q: What is Pydantic?
|
|
394
|
-
Alfred: “It is a library that automatically verifies data.”
|
|
395
|
-
|
|
396
|
-
Q: Is async/await really necessary?
|
|
397
|
-
Alfred: "If you need fast performance, it's essential, otherwise the sync function is fine."
|
|
398
|
-
|
|
399
|
-
Q: Django vs FastAPI?
|
|
400
|
-
Alfred: "Django is full-stack, FastAPI is API-only."
|
|
401
|
-
```
|
|
402
|
-
|
|
403
|
-
---
|
|
404
|
-
|
|
405
|
-
## Study Tips
|
|
406
|
-
|
|
407
|
-
### Alfred's Study Advice
|
|
408
|
-
|
|
409
|
-
**1. Start small**
|
|
410
|
-
```
|
|
411
|
-
Alfred: "Let's start with Hello World"
|
|
412
|
-
|
|
413
|
-
Examples that are too complex can be confusing.
|
|
414
|
-
Start with the simplest example and expand gradually.
|
|
415
|
-
```
|
|
416
|
-
|
|
417
|
-
**2. Practice-oriented**
|
|
418
|
-
```
|
|
419
|
-
Alfred: "Try the code yourself"
|
|
420
|
-
|
|
421
|
-
Just read it and forget it right away.
|
|
422
|
-
Try it yourself, run it, and correct the errors.
|
|
423
|
-
```
|
|
424
|
-
|
|
425
|
-
**3. Integration with MoAI-ADK**
|
|
426
|
-
```
|
|
427
|
-
Alfred: “I learn MoAI-ADK while learning new technologies.”
|
|
428
|
-
|
|
429
|
-
If you practice with the SPEC → TEST → CODE flow,
|
|
430
|
-
You can kill two birds with one stone!
|
|
431
|
-
```
|
|
432
|
-
|
|
433
|
-
**4. Use frequently asked questions**
|
|
434
|
-
```
|
|
435
|
-
Alfred: “If you have any questions, feel free to ask”
|
|
436
|
-
|
|
437
|
-
“Why do I have to do this?”
|
|
438
|
-
“Is there another way?”
|
|
439
|
-
“How do I use it in practice?”
|
|
440
|
-
```
|
|
441
|
-
|
|
442
|
-
### Recommended learning sequence
|
|
443
|
-
|
|
444
|
-
```
|
|
445
|
-
Step 1: Familiarize yourself with MoAI-ADK
|
|
446
|
-
→ /output-style moai-adk-learning
|
|
447
|
-
|
|
448
|
-
Step 2: Learning a new framework (now)
|
|
449
|
-
→ /output-style study-with-alfred
|
|
450
|
-
|
|
451
|
-
Step 3: Apply practical projects
|
|
452
|
-
→ /output-style agentic-coding
|
|
453
|
-
```
|
|
454
|
-
|
|
455
|
-
---
|
|
456
|
-
|
|
457
|
-
## Style conversion guide
|
|
458
|
-
|
|
459
|
-
### When this style suits you
|
|
460
|
-
- ✅ When learning a new language/framework
|
|
461
|
-
- ✅ When you want to easily understand complex concepts
|
|
462
|
-
- ✅ When you want to learn practice-oriented
|
|
463
|
-
- ✅ When you want to learn by talking with Alfred
|
|
464
|
-
|
|
465
|
-
### Switch to a different style
|
|
466
|
-
|
|
467
|
-
| Situation | Recommended Style | Conversion command |
|
|
468
|
-
| ----------------------------- | ----------------- | --------------------------------- |
|
|
469
|
-
| First time using MoAI-ADK | moai-adk-learning | `/output-style moai-adk-learning` |
|
|
470
|
-
| Practical project development | agentic-coding | `/output-style agentic-coding` |
|
|
471
|
-
|
|
472
|
-
---
|
|
473
|
-
|
|
474
|
-
**Study with Alfred**: This is a learning mode that allows you to easily learn new skills as if talking with Alfred and apply them directly to practice by integrating with MoAI-ADK.
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
name: 📋 SPEC Document
|
|
2
|
-
description: Create a new SPEC document for feature planning
|
|
3
|
-
title: "[SPEC-] "
|
|
4
|
-
labels: ["spec", "planning"]
|
|
5
|
-
assignees: []
|
|
6
|
-
|
|
7
|
-
body:
|
|
8
|
-
- type: markdown
|
|
9
|
-
attributes:
|
|
10
|
-
value: |
|
|
11
|
-
## 📋 SPEC Metadata
|
|
12
|
-
|
|
13
|
-
Fill out the SPEC details below. This will be synchronized with the SPEC document and GitHub Issue.
|
|
14
|
-
|
|
15
|
-
- type: input
|
|
16
|
-
id: spec-id
|
|
17
|
-
attributes:
|
|
18
|
-
label: SPEC ID
|
|
19
|
-
description: "Format: DOMAIN-###. Example: AUTH-001, API-DESIGN-001"
|
|
20
|
-
placeholder: "AUTH-001"
|
|
21
|
-
validations:
|
|
22
|
-
required: true
|
|
23
|
-
|
|
24
|
-
- type: input
|
|
25
|
-
id: spec-title
|
|
26
|
-
attributes:
|
|
27
|
-
label: SPEC Title
|
|
28
|
-
description: "Brief description of the specification"
|
|
29
|
-
placeholder: "JWT-based authentication system"
|
|
30
|
-
validations:
|
|
31
|
-
required: true
|
|
32
|
-
|
|
33
|
-
- type: dropdown
|
|
34
|
-
id: priority
|
|
35
|
-
attributes:
|
|
36
|
-
label: Priority
|
|
37
|
-
description: "Feature priority level"
|
|
38
|
-
options:
|
|
39
|
-
- "critical"
|
|
40
|
-
- "high"
|
|
41
|
-
- "medium"
|
|
42
|
-
- "low"
|
|
43
|
-
validations:
|
|
44
|
-
required: true
|
|
45
|
-
|
|
46
|
-
- type: dropdown
|
|
47
|
-
id: category
|
|
48
|
-
attributes:
|
|
49
|
-
label: Category
|
|
50
|
-
description: "SPEC category"
|
|
51
|
-
options:
|
|
52
|
-
- "API"
|
|
53
|
-
- "Backend"
|
|
54
|
-
- "Frontend"
|
|
55
|
-
- "Infrastructure"
|
|
56
|
-
- "Security"
|
|
57
|
-
- "Testing"
|
|
58
|
-
- "DevOps"
|
|
59
|
-
- "Documentation"
|
|
60
|
-
- "Performance"
|
|
61
|
-
- "Other"
|
|
62
|
-
validations:
|
|
63
|
-
required: true
|
|
64
|
-
|
|
65
|
-
- type: textarea
|
|
66
|
-
id: ubiquitous-requirements
|
|
67
|
-
attributes:
|
|
68
|
-
label: "Ubiquitous Requirements"
|
|
69
|
-
description: "Statements that apply universally to the system"
|
|
70
|
-
placeholder: |
|
|
71
|
-
- The system must provide JWT-based authentication
|
|
72
|
-
- The system must support token expiration
|
|
73
|
-
value: "### Ubiquitous\n"
|
|
74
|
-
validations:
|
|
75
|
-
required: true
|
|
76
|
-
|
|
77
|
-
- type: textarea
|
|
78
|
-
id: event-requirements
|
|
79
|
-
attributes:
|
|
80
|
-
label: "Event-driven Requirements (WHEN)"
|
|
81
|
-
description: "Event-triggered requirements in EARS format"
|
|
82
|
-
placeholder: |
|
|
83
|
-
- WHEN the user submits login credentials, the system must validate them against the database
|
|
84
|
-
- WHEN credentials are valid, the system must issue a JWT token with expiration
|
|
85
|
-
value: "### Event-driven (WHEN)\n"
|
|
86
|
-
validations:
|
|
87
|
-
required: false
|
|
88
|
-
|
|
89
|
-
- type: textarea
|
|
90
|
-
id: state-requirements
|
|
91
|
-
attributes:
|
|
92
|
-
label: "State-driven Requirements (WHILE)"
|
|
93
|
-
description: "State-based requirements in EARS format"
|
|
94
|
-
placeholder: |
|
|
95
|
-
- WHILE the token is unexpired, the system must allow access to protected resources
|
|
96
|
-
- WHILE the user is logged in, the system must track the session
|
|
97
|
-
value: "### State-driven (WHILE)\n"
|
|
98
|
-
validations:
|
|
99
|
-
required: false
|
|
100
|
-
|
|
101
|
-
- type: textarea
|
|
102
|
-
id: optional-requirements
|
|
103
|
-
attributes:
|
|
104
|
-
label: "Optional Requirements (WHERE)"
|
|
105
|
-
description: "Optional features and capabilities"
|
|
106
|
-
placeholder: |
|
|
107
|
-
- WHERE the user requests token refresh, the system can issue a new token
|
|
108
|
-
- WHERE OAuth2 is available, the system can support social login
|
|
109
|
-
value: "### Optional (WHERE)\n"
|
|
110
|
-
validations:
|
|
111
|
-
required: false
|
|
112
|
-
|
|
113
|
-
- type: textarea
|
|
114
|
-
id: unwanted-behaviors
|
|
115
|
-
attributes:
|
|
116
|
-
label: "Unwanted Behaviors (IF-THEN)"
|
|
117
|
-
description: "Error handling, quality gates, and business rule enforcement"
|
|
118
|
-
placeholder: |
|
|
119
|
-
- IF the token has expired, THEN the system must return 401 Unauthorized
|
|
120
|
-
- IF the password is incorrect, THEN the system must reject the login attempt
|
|
121
|
-
value: "### Unwanted Behaviors (IF-THEN)\n"
|
|
122
|
-
validations:
|
|
123
|
-
required: false
|
|
124
|
-
|
|
125
|
-
- type: textarea
|
|
126
|
-
id: acceptance-criteria
|
|
127
|
-
attributes:
|
|
128
|
-
label: "Acceptance Criteria (Given-When-Then)"
|
|
129
|
-
description: "At least 2-3 test scenarios"
|
|
130
|
-
placeholder: |
|
|
131
|
-
**Scenario 1: Successful Login**
|
|
132
|
-
- Given a user with valid credentials exists
|
|
133
|
-
- When the user submits their credentials
|
|
134
|
-
- Then the system returns a valid JWT token
|
|
135
|
-
|
|
136
|
-
**Scenario 2: Token Expiration**
|
|
137
|
-
- Given a user with an expired token
|
|
138
|
-
- When the user tries to access a protected resource
|
|
139
|
-
- Then the system returns a 401 Unauthorized response
|
|
140
|
-
value: "## Acceptance Criteria\n\n"
|
|
141
|
-
validations:
|
|
142
|
-
required: true
|
|
143
|
-
|
|
144
|
-
- type: textarea
|
|
145
|
-
id: dependencies
|
|
146
|
-
attributes:
|
|
147
|
-
label: "Dependencies"
|
|
148
|
-
description: "Related SPECs, tasks, or blockers"
|
|
149
|
-
placeholder: |
|
|
150
|
-
- Related: SPEC-SECURITY-001
|
|
151
|
-
- Blocks: SPEC-API-DESIGN-001
|
|
152
|
-
- Depends on: SPEC-DATABASE-001
|
|
153
|
-
validations:
|
|
154
|
-
required: false
|
|
155
|
-
|
|
156
|
-
- type: textarea
|
|
157
|
-
id: notes
|
|
158
|
-
attributes:
|
|
159
|
-
label: "Additional Notes"
|
|
160
|
-
description: "Technical notes, assumptions, or context"
|
|
161
|
-
placeholder: |
|
|
162
|
-
- Consider token refresh token rotation
|
|
163
|
-
- JWT payload should be minimal for performance
|
|
164
|
-
- Consider rate limiting on login attempts
|
|
165
|
-
validations:
|
|
166
|
-
required: false
|
|
167
|
-
|
|
168
|
-
- type: markdown
|
|
169
|
-
attributes:
|
|
170
|
-
value: |
|
|
171
|
-
## 📚 Reference
|
|
172
|
-
|
|
173
|
-
- **SPEC Metadata Guide**: See `.moai/memory/spec-metadata.md`
|
|
174
|
-
- **EARS Syntax Guide**: See `.moai/memory/development-guide.md`
|
|
175
|
-
- **Acceptance Criteria**: Use Given-When-Then (Gherkin) format
|
|
176
|
-
- **@TAG System**: @SPEC, @TEST, @CODE, @DOC traceability
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
# MoAI-ADK GitFlow PR
|
|
2
|
-
|
|
3
|
-
> 🗿 Full GitFlow Transparency — the agent auto-fills information
|
|
4
|
-
|
|
5
|
-
## 📝 SPEC Info
|
|
6
|
-
|
|
7
|
-
- Related SPEC: `SPEC-AUTH-001` (e.g., JWT authentication system)
|
|
8
|
-
- Directory: `.moai/specs/SPEC-AUTH-001/`
|
|
9
|
-
- @TAG Links: @SPEC:AUTH-001 @CODE:AUTH-001 (auto-tagging)
|
|
10
|
-
|
|
11
|
-
## ✅ SPEC Quality Checks
|
|
12
|
-
|
|
13
|
-
- [ ] YAML Front Matter: 7 required fields (id, version, status, created, updated, author, priority)
|
|
14
|
-
- [ ] HISTORY Section: Record versioned change log (include v0.0.1 INITIAL)
|
|
15
|
-
- [ ] EARS Requirements: Ubiquitous, Event-driven, State-driven, Optional, Unwanted Behaviors
|
|
16
|
-
- [ ] @SPEC:ID TAG: Include TAG in doc and check duplicates (`rg "@SPEC:<ID>" -n`)
|
|
17
|
-
|
|
18
|
-
## 🤖 Automated Validation Status
|
|
19
|
-
|
|
20
|
-
<!-- The checklist below is auto-updated by the agent -->
|
|
21
|
-
<!-- /alfred:1-plan → create feature branch → Draft PR -->
|
|
22
|
-
<!-- /alfred:2-run → implement via TDD → auto-check checkboxes -->
|
|
23
|
-
<!-- /alfred:3-sync → synchronize documents → Ready for Review -->
|
|
24
|
-
|
|
25
|
-
- [ ] spec-builder: Complete EARS spec and create feature branch
|
|
26
|
-
- [ ] code-builder: Finish TDD RED-GREEN-REFACTOR
|
|
27
|
-
- [ ] doc-syncer: Sync Living Documents and mark PR Ready
|
|
28
|
-
|
|
29
|
-
## 📊 Quality Metrics (auto-calculated)
|
|
30
|
-
|
|
31
|
-
- TRUST 5 Principles: ✅ Compliant
|
|
32
|
-
- Test Coverage: XX% (target ≥ 85%)
|
|
33
|
-
- @TAG Traceability: 100%
|
|
34
|
-
|
|
35
|
-
## 🌍 Locale Settings
|
|
36
|
-
|
|
37
|
-
- Project Language: <!-- ko/en/ja/zh -->
|
|
38
|
-
- Commit Messages: <!-- generated automatically according to locale -->
|
|
39
|
-
|
|
40
|
-
## 🎯 Changes
|
|
41
|
-
|
|
42
|
-
<!-- code-builder auto-fills TDD results -->
|
|
43
|
-
|
|
44
|
-
### 🔴 RED (Test Authoring)
|
|
45
|
-
- Test File: `tests/auth/service.test.ts`
|
|
46
|
-
- Test Description: [describe the failing test]
|
|
47
|
-
|
|
48
|
-
### 🟢 GREEN (Implementation)
|
|
49
|
-
- Implementation File: `src/auth/service.ts`
|
|
50
|
-
- Implementation Done: [describe functionality]
|
|
51
|
-
|
|
52
|
-
### ♻️ REFACTOR (Improvements)
|
|
53
|
-
- Refactoring Details: [code quality improvements]
|
|
54
|
-
|
|
55
|
-
## 📚 Documentation Sync
|
|
56
|
-
|
|
57
|
-
<!-- auto-filled by doc-syncer -->
|
|
58
|
-
|
|
59
|
-
- [ ] Update README
|
|
60
|
-
- [ ] Sync API docs
|
|
61
|
-
- [ ] Update TAG index
|
|
62
|
-
- [ ] Update HISTORY section (SPEC docs)
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
🚀 MoAI-ADK: Professional development without Git commands via a 3-stage pipeline!
|
|
67
|
-
|
|
68
|
-
Reviewers: Check TRUST 5 compliance and SPEC metadata completeness only.
|
|
69
|
-
|