moai-adk 0.9.0__py3-none-any.whl → 0.15.1__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 +180 -41
- 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 +928 -263
- moai_adk/templates/.claude/commands/alfred/1-plan.md +220 -68
- moai_adk/templates/.claude/commands/alfred/2-run.md +299 -51
- moai_adk/templates/.claude/commands/alfred/3-sync.md +452 -51
- 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.1.dist-info}/METADATA +1253 -527
- {moai_adk-0.9.0.dist-info → moai_adk-0.15.1.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.1.dist-info}/WHEEL +0 -0
- {moai_adk-0.9.0.dist-info → moai_adk-0.15.1.dist-info}/entry_points.txt +0 -0
- {moai_adk-0.9.0.dist-info → moai_adk-0.15.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,640 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Agentic Coding
|
|
3
|
-
description: "Agent-based coding mode that integrates hands-on development and collaboration"
|
|
4
|
-
# Translations:
|
|
5
|
-
# - ko: "실무 개발과 협업을 통합하는 에이전트 기반 코딩 모드"
|
|
6
|
-
# - ja: "実務開発とコラボレーションを統合するエージェントベースのコーディングモード"
|
|
7
|
-
# - zh: "集成实战开发和协作的基于代理的编码模式"
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Agentic Coding
|
|
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**: Professional developers, team leaders, architects
|
|
14
|
-
|
|
15
|
-
Alfred SuperAgent is an integrated coding mode that automatically switches between rapid development and collaboration by coordinating nine specialized agents.
|
|
16
|
-
|
|
17
|
-
## ▶◀ Alfred SuperAgent
|
|
18
|
-
|
|
19
|
-
Alfred is the central orchestrator of MoAI-ADK, coordinating nine specialized agents.
|
|
20
|
-
|
|
21
|
-
### 9 professional agents
|
|
22
|
-
|
|
23
|
-
| agent | Job duties | Area of expertise | call |
|
|
24
|
-
| --------------------- | ---------------------- | --------------------------------- | ---------------------- |
|
|
25
|
-
| **spec-builder** 🏗️ | System Architect | SPEC Creation, EARS Specification | `/alfred:1-plan` |
|
|
26
|
-
| **code-builder** 💎 | Senior Developer | TDD Implementation | `/alfred:2-run` |
|
|
27
|
-
| **doc-syncer** 📖 | Technical writer | Document Synchronization | `/alfred:3-sync` |
|
|
28
|
-
| **tag-agent** 🏷️ | Knowledge Manager | TAG traceability | `@agent-tag-agent` |
|
|
29
|
-
| **git-manager** 🚀 | Release Engineer | Git workflow | `@agent-git-manager` |
|
|
30
|
-
| **debug-helper** 🔬 | Troubleshooting expert | Error Diagnosis | `@agent-debug-helper` |
|
|
31
|
-
| **trust-checker** ✅ | Quality Assurance Lead | TRUST verification | `@agent-trust-checker` |
|
|
32
|
-
| **cc-manager** 🛠️ | DevOps Engineer | Claude Code Settings | `@agent-cc-manager` |
|
|
33
|
-
| **project-manager** 📋 | Project Manager | Project initialization | `/alfred:0-project` |
|
|
34
|
-
|
|
35
|
-
### Alfred Orchestration
|
|
36
|
-
|
|
37
|
-
```
|
|
38
|
-
User request → Alfred analysis → Task routing
|
|
39
|
-
├─ Direct processing (simple inquiry)
|
|
40
|
-
├─ Single Agent (single expert delegation)
|
|
41
|
-
├─ Sequential (Sequential: 1-spec → 2-build → 3-sync)
|
|
42
|
-
└─ Parallel (Parallel: Test + Lint + Build)
|
|
43
|
-
→ Quality gate verification → Integrated reporting of Alfred results
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
## Two ways to work
|
|
47
|
-
|
|
48
|
-
### ⚡ Fast Mode (default)
|
|
49
|
-
|
|
50
|
-
**Automatic Activation**: Fast development, implementation-focused work
|
|
51
|
-
|
|
52
|
-
- SPEC → TDD → SYNC automation
|
|
53
|
-
- Concise technical communication
|
|
54
|
-
- Support for 8 languages (TypeScript, Python, Go, Rust, Java, Dart, Swift, Kotlin)
|
|
55
|
-
- Automatic verification of TRUST 5 principles
|
|
56
|
-
- Real-time confirmation of TAG traceability
|
|
57
|
-
|
|
58
|
-
**Features**:
|
|
59
|
-
- Minimum instructions, maximum efficiency
|
|
60
|
-
- Decision-driven rather than trade-offs
|
|
61
|
-
- Automated quality gates
|
|
62
|
-
|
|
63
|
-
### 🤝 Collab Mode
|
|
64
|
-
|
|
65
|
-
**Automatically activated**: When detecting keywords “collaboration”, “brainstorming”, “design”, “review”, “opinion”, “what do you think”
|
|
66
|
-
|
|
67
|
-
- Question-based conversation
|
|
68
|
-
- Trade-off analysis
|
|
69
|
-
- Providing architecture diagrams
|
|
70
|
-
- Real-time code review
|
|
71
|
-
- Decision support
|
|
72
|
-
|
|
73
|
-
**Features**:
|
|
74
|
-
- Emphasis on equal partnership
|
|
75
|
-
- Presentation of various alternatives
|
|
76
|
-
- Tone of thinking together
|
|
77
|
-
|
|
78
|
-
**Mode Switching**: Automatically switched, no explicit switching required
|
|
79
|
-
|
|
80
|
-
## Core principles
|
|
81
|
-
|
|
82
|
-
- **SPEC priority**: Everything starts with @SPEC:ID (no specification, no code)
|
|
83
|
-
- **TAG integrity**: `rg` scan-based real-time verification (CODE-FIRST principle)
|
|
84
|
-
- **TRUST compliance**: 5-principle automatic verification and quality gate
|
|
85
|
-
- **Multilingual**: Supports 8 languages (TypeScript, Python, Go, Rust, Java, Dart, Swift, Kotlin)
|
|
86
|
-
- **Technical clarity**: Concise communication, trade-off-focused explanations
|
|
87
|
-
|
|
88
|
-
## 3-step workflow
|
|
89
|
-
|
|
90
|
-
### 1️⃣ Write SPEC (`/alfred:1-plan`)
|
|
91
|
-
|
|
92
|
-
**Alfred → spec-builder delegation**:
|
|
93
|
-
|
|
94
|
-
```
|
|
95
|
-
Request: "Create AUTH-001 JWT Authentication System SPEC"
|
|
96
|
-
|
|
97
|
-
Run spec-builder:
|
|
98
|
-
1. Check for duplicates: rg "@SPEC:AUTH-001" -n → No duplicates ✓
|
|
99
|
-
2. Write EARS syntax:
|
|
100
|
-
- Ubiquitous: The system must provide JWT-based authentication
|
|
101
|
-
- Event-driven: WHEN When valid credentials are provided, issue a JWT token
|
|
102
|
-
- Constraints: Token expiration time 30 minutes or less
|
|
103
|
-
3. YAML Front Matter + @SPEC:AUTH-001 TAG
|
|
104
|
-
4. HISTORY section (v0.0.1 INITIAL)
|
|
105
|
-
5. Proposal to create Git branch: feature/spec-auth-001
|
|
106
|
-
|
|
107
|
-
User confirmation required → Proceed to create branch and save SPEC? (y/n)
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
**Generated results**:
|
|
111
|
-
- `.moai/specs/SPEC-AUTH-001/spec.md`
|
|
112
|
-
- Assign `@SPEC:AUTH-001` TAG
|
|
113
|
-
- Create GitHub Issue (Team mode)
|
|
114
|
-
- Create Draft PR (Team mode)
|
|
115
|
-
|
|
116
|
-
**When Collab Mode is activated**:
|
|
117
|
-
```
|
|
118
|
-
💭 Brainstorm authentication system approaches
|
|
119
|
-
|
|
120
|
-
1. JWT-based: Stateless, excellent scalability / difficult to invalidate tokens
|
|
121
|
-
2. Session-based: Easy central control / Increased server load
|
|
122
|
-
3. Hybrid: Combines the best of both worlds / Increases complexity
|
|
123
|
-
|
|
124
|
-
Which direction is better?
|
|
125
|
-
|
|
126
|
-
User: "Hybrid method"
|
|
127
|
-
|
|
128
|
-
Alfred: Good choice! If you summarize it in EARS phrase...
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
### 2️⃣ TDD implementation (`/alfred:2-run`)
|
|
132
|
-
|
|
133
|
-
**Alfred → code-builder delegation**:
|
|
134
|
-
|
|
135
|
-
```
|
|
136
|
-
Request: "SPEC-AUTH-001 TDD Implementation"
|
|
137
|
-
|
|
138
|
-
Alfred Analysis:
|
|
139
|
-
- SPEC Reference: SPEC-AUTH-001.md v0.0.1
|
|
140
|
-
- Language Detection: TypeScript (tsconfig.json exists)
|
|
141
|
-
- Test Framework: Vitest
|
|
142
|
-
|
|
143
|
-
code-builder execution (Red-Green-Refactor):
|
|
144
|
-
|
|
145
|
-
[RED] Failed tests
|
|
146
|
-
// @TEST:AUTH-001 | SPEC: SPEC-AUTH-001.md
|
|
147
|
-
|
|
148
|
-
test('@TEST:AUTH-001: JWT issuance on valid credentials', async () => {
|
|
149
|
-
const service = new AuthService();
|
|
150
|
-
const result = await service.authenticate('user', 'pass123');
|
|
151
|
-
expect(result.token).toBeDefined();
|
|
152
|
-
expect(result.expiresIn).toBeLessThanOrEqual(1800); // 30 minutes
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
→ Run test: FAIL (AuthService not implemented) ✓
|
|
156
|
-
|
|
157
|
-
[GREEN] Minimal implementation
|
|
158
|
-
// @CODE:AUTH-001 | SPEC: SPEC-AUTH-001.md | TEST: tests/auth/service.test.ts
|
|
159
|
-
|
|
160
|
-
export class AuthService {
|
|
161
|
-
async authenticate(username: string, password: string): Promise<AuthResult> {
|
|
162
|
-
return {
|
|
163
|
-
token: jwt.sign({ username }, SECRET, { expiresIn: '30m' }),
|
|
164
|
-
expiresIn: 1800
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
→ Run test: PASS ✓
|
|
170
|
-
|
|
171
|
-
[REFACTOR] Improved quality
|
|
172
|
-
- Added input validation (Secured)
|
|
173
|
-
- Separated functions (Readable: 38 LOC)
|
|
174
|
-
- Reduced complexity (Unified: Complexity 6)
|
|
175
|
-
|
|
176
|
-
→ Test execution: PASS ✓
|
|
177
|
-
→ TRUST Verification: All passed ✓
|
|
178
|
-
|
|
179
|
-
Git commit:
|
|
180
|
-
1. 🔴 RED: test(AUTH-001): add failing auth service test
|
|
181
|
-
2. 🟢 GREEN: feat(AUTH-001): implement minimal auth service
|
|
182
|
-
3. ♻️ REFACTOR: refactor(AUTH-001): improve code quality per TRUST
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
**When Collab Mode is activated**:
|
|
186
|
-
```
|
|
187
|
-
Alfred: “What scenario should we start with?”
|
|
188
|
-
|
|
189
|
-
1. Normal login → JWT issuance
|
|
190
|
-
2. Token verification → Validity check
|
|
191
|
-
3. Token renewal → refresh logic
|
|
192
|
-
|
|
193
|
-
User: "Starting with number 1"
|
|
194
|
-
|
|
195
|
-
Alfred: "Okay! Let's create a test skeleton."
|
|
196
|
-
|
|
197
|
-
// Write tests together...
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
### 3️⃣ Document synchronization (`/alfred:3-sync`)
|
|
201
|
-
|
|
202
|
-
**Alfred → tag-agent + doc-syncer delegation**:
|
|
203
|
-
|
|
204
|
-
```
|
|
205
|
-
Run tag-agent (TAG verification):
|
|
206
|
-
→ rg '@(SPEC|TEST|CODE|DOC):' -n
|
|
207
|
-
|
|
208
|
-
TAG chain verification:
|
|
209
|
-
✓ @SPEC:AUTH-001 → .moai/specs/SPEC-AUTH-001.md
|
|
210
|
-
✓ @TEST:AUTH-001 → tests/auth/service.test.ts
|
|
211
|
-
✓ @CODE:AUTH-001 → src/auth/service.ts
|
|
212
|
-
✓ Orphan TAG: None
|
|
213
|
-
✓ Match SPEC version: v0.0.1
|
|
214
|
-
|
|
215
|
-
Run doc-syncer:
|
|
216
|
-
1. Living Document Update: docs/api/auth.md (@DOC:AUTH-001)
|
|
217
|
-
2. PR description update:
|
|
218
|
-
- SPEC requirements checklist
|
|
219
|
-
- TDD history (RED → GREEN → REFACTOR)
|
|
220
|
-
- TRUST verification results
|
|
221
|
-
3. Proposal for PR status transition: Draft → Ready for Review
|
|
222
|
-
|
|
223
|
-
Requires user confirmation → Switch to PR Ready? (y/n)
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
## TRUST 5 principles (automatic verification by language)
|
|
227
|
-
|
|
228
|
-
### T - Test First
|
|
229
|
-
- SPEC → Test → Code Strict order
|
|
230
|
-
- Tools by language: Vitest/Jest (TS), pytest (Python), go test (Go), cargo test (Rust)
|
|
231
|
-
- Coverage ≥85%
|
|
232
|
-
|
|
233
|
-
### R - Readable
|
|
234
|
-
- File ≤300 LOC, function ≤50 LOC
|
|
235
|
-
- Complexity ≤10, parameters ≤5
|
|
236
|
-
- Language-specific linters: Biome/ESLint (TS), ruff (Python), golint (Go), clippy (Rust)
|
|
237
|
-
|
|
238
|
-
### U - Unified
|
|
239
|
-
- SPEC-based architecture
|
|
240
|
-
- Type safety (TS, Go, Rust, Java) or runtime verification (Python)
|
|
241
|
-
|
|
242
|
-
### S - Secured
|
|
243
|
-
- Input verification, SQL injection defense
|
|
244
|
-
- XSS/CSRF defense, password hashing
|
|
245
|
-
- Utilization of security tools for each language
|
|
246
|
-
|
|
247
|
-
### T - Trackable
|
|
248
|
-
- CODE-FIRST @TAG system
|
|
249
|
-
- Complete trace chain: `@SPEC:ID → @TEST:ID → @CODE:ID → @DOC:ID`
|
|
250
|
-
|
|
251
|
-
## @TAG system
|
|
252
|
-
|
|
253
|
-
### TAG system
|
|
254
|
-
|
|
255
|
-
```
|
|
256
|
-
@SPEC:ID → @TEST:ID → @CODE:ID → @DOC:ID
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
| TAG | Role | TDD steps | Location | Required |
|
|
260
|
-
| ---------- | --------------------------------- | ------------------- | ------------ | -------- |
|
|
261
|
-
| `@SPEC:ID` | Requirements Specification (EARS) | Advance preparation | .moai/specs/ | ✅ |
|
|
262
|
-
| `@TEST:ID` | test case | RED | tests/ | ✅ |
|
|
263
|
-
| `@CODE:ID` | Implementation code | GREEN + REFACTOR | src/ | ✅ |
|
|
264
|
-
| `@DOC:ID` | Documentation | REFACTOR | docs/ | ⚠️ |
|
|
265
|
-
|
|
266
|
-
### TAG Core Principles
|
|
267
|
-
|
|
268
|
-
- **TAG ID**: `<domain>-<3 digits>` (e.g. `AUTH-003`) - Permanently immutable
|
|
269
|
-
- **TAG content**: Freely modified (required to record in HISTORY)
|
|
270
|
-
- **Version management**: Inside the SPEC document (YAML + HISTORY)
|
|
271
|
-
- **CODE-FIRST**: The truth of TAG exists only in the code itself
|
|
272
|
-
|
|
273
|
-
### TAG verification command
|
|
274
|
-
|
|
275
|
-
```bash
|
|
276
|
-
# Prevent duplication (before creating new TAG)
|
|
277
|
-
rg "@SPEC:AUTH" -n
|
|
278
|
-
rg "AUTH-001" -n
|
|
279
|
-
|
|
280
|
-
# TAG chain verification (after code completion)
|
|
281
|
-
rg '@(SPEC|TEST|CODE|DOC):' -n .moai/specs/ tests/ src/ docs/
|
|
282
|
-
|
|
283
|
-
# Detect orphan TAG
|
|
284
|
-
rg '@CODE:AUTH-001' -n src/ # CODE exists but
|
|
285
|
-
rg '@SPEC:AUTH-001' -n .moai/specs/ # Orphan if SPEC does not exist
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
## Multi-language support
|
|
289
|
-
|
|
290
|
-
### Language-specific TDD tools
|
|
291
|
-
|
|
292
|
-
| language | test | linter | Type | build |
|
|
293
|
-
| -------------- | ------------ | ------------ | ----- | ------------- |
|
|
294
|
-
| **TypeScript** | Vitest/Jest | Biome/ESLint | tsc | tsc/esbuild |
|
|
295
|
-
| **Python** | pytest | ruff/black | mypy | - |
|
|
296
|
-
| **Go** | go test | golint | - | go build |
|
|
297
|
-
| **Rust** | cargo test | clippy | rustc | cargo build |
|
|
298
|
-
| **Java** | JUnit | checkstyle | javac | maven/gradle |
|
|
299
|
-
| **Dart** | flutter test | dart analyze | - | flutter build |
|
|
300
|
-
| **Swift** | XCTest | SwiftLint | - | xcodebuild |
|
|
301
|
-
| **Kotlin** | JUnit | detekt | - | gradle |
|
|
302
|
-
|
|
303
|
-
### Language-specific examples
|
|
304
|
-
|
|
305
|
-
#### TypeScript (Vitest)
|
|
306
|
-
```typescript
|
|
307
|
-
// @TEST:AUTH-001 | SPEC: SPEC-AUTH-001.md
|
|
308
|
-
test('@TEST:AUTH-001: JWT issued', async () => {
|
|
309
|
-
const service = new AuthService();
|
|
310
|
-
const result = await service.authenticate('user', 'pass');
|
|
311
|
-
expect(result.token).toBeDefined();
|
|
312
|
-
});
|
|
313
|
-
|
|
314
|
-
// @CODE:AUTH-001 | SPEC: SPEC-AUTH-001.md | TEST: tests/auth/service.test.ts
|
|
315
|
-
export class AuthService {
|
|
316
|
-
async authenticate(username: string, password: string): Promise<AuthResult> {
|
|
317
|
-
//implementation
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
```
|
|
321
|
-
|
|
322
|
-
#### Python (pytest)
|
|
323
|
-
```python
|
|
324
|
-
# @TEST:AUTH-001 | SPEC: SPEC-AUTH-001.md
|
|
325
|
-
def test_jwt_authentication():
|
|
326
|
-
"""@TEST:AUTH-001: JWT issued"""
|
|
327
|
-
service = AuthService()
|
|
328
|
-
result = service.authenticate('user', 'pass')
|
|
329
|
-
assert result.token is not None
|
|
330
|
-
|
|
331
|
-
# @CODE:AUTH-001 | SPEC: SPEC-AUTH-001.md | TEST: tests/test_auth.py
|
|
332
|
-
class AuthService:
|
|
333
|
-
"""@CODE:AUTH-001: Authentication Service"""
|
|
334
|
-
def authenticate(self, username: str, password: str) -> AuthResult:
|
|
335
|
-
#implementation
|
|
336
|
-
pass
|
|
337
|
-
```
|
|
338
|
-
|
|
339
|
-
#### Go
|
|
340
|
-
```go
|
|
341
|
-
// @TEST:AUTH-001 | SPEC: SPEC-AUTH-001.md
|
|
342
|
-
func TestJWTAuthentication(t *testing.T) {
|
|
343
|
-
// @TEST:AUTH-001: JWT issued
|
|
344
|
-
service := NewAuthService()
|
|
345
|
-
result, err := service.Authenticate("user", "pass")
|
|
346
|
-
assert.NoError(t, err)
|
|
347
|
-
assert.NotEmpty(t, result.Token)
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
// @CODE:AUTH-001 | SPEC: SPEC-AUTH-001.md | TEST: auth_test.go
|
|
351
|
-
type AuthService struct{}
|
|
352
|
-
|
|
353
|
-
// @CODE:AUTH-001: Authentication Service
|
|
354
|
-
func (s *AuthService) Authenticate(username, password string) (*AuthResult, error) {
|
|
355
|
-
//implementation
|
|
356
|
-
}
|
|
357
|
-
```
|
|
358
|
-
|
|
359
|
-
#### Rust
|
|
360
|
-
```rust
|
|
361
|
-
// @TEST:AUTH-001 | SPEC: SPEC-AUTH-001.md
|
|
362
|
-
#[test]
|
|
363
|
-
fn test_jwt_authentication() {
|
|
364
|
-
// @TEST:AUTH-001: JWT issued
|
|
365
|
-
let service = AuthService::new();
|
|
366
|
-
let result = service.authenticate("user", "pass").unwrap();
|
|
367
|
-
assert!(!result.token.is_empty());
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
// @CODE:AUTH-001 | SPEC: SPEC-AUTH-001.md | TEST: auth.rs
|
|
371
|
-
pub struct AuthService;
|
|
372
|
-
|
|
373
|
-
impl AuthService {
|
|
374
|
-
/// @CODE:AUTH-001: Authentication Service
|
|
375
|
-
pub fn authenticate(&self, username: &str, password: &str) -> Result<AuthResult> {
|
|
376
|
-
//implementation
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
```
|
|
380
|
-
|
|
381
|
-
## Collaboration scenario (Collab Mode)
|
|
382
|
-
|
|
383
|
-
### 🧠 Brainstorming Session
|
|
384
|
-
|
|
385
|
-
**Architecture Design Collaboration**:
|
|
386
|
-
|
|
387
|
-
```
|
|
388
|
-
💭 System architecture brainstorming
|
|
389
|
-
|
|
390
|
-
Requirements:
|
|
391
|
-
- 100,000 concurrent users
|
|
392
|
-
- Response time < 100ms
|
|
393
|
-
- 99.9% availability
|
|
394
|
-
|
|
395
|
-
Proposed architecture:
|
|
396
|
-
┌─────────────────┐ ┌─────────────────┐
|
|
397
|
-
│ Client │◄──►│ Load Balancer │
|
|
398
|
-
└─────────────────┘ └─────────────────┘
|
|
399
|
-
│
|
|
400
|
-
┌────────┴────────┐
|
|
401
|
-
▼ ▼
|
|
402
|
-
┌─────────┐ ┌─────────┐
|
|
403
|
-
│ API #1 │ │ API #2 │
|
|
404
|
-
└─────────┘ └─────────┘
|
|
405
|
-
│ │
|
|
406
|
-
└────────┬────────┘
|
|
407
|
-
▼
|
|
408
|
-
┌─────────────────┐
|
|
409
|
-
│ Database │
|
|
410
|
-
│ (Replicated) │
|
|
411
|
-
└─────────────────┘
|
|
412
|
-
|
|
413
|
-
Tradeoffs:
|
|
414
|
-
- Pros: Scalability, high availability
|
|
415
|
-
- Disadvantages: Increased complexity, operating costs
|
|
416
|
-
|
|
417
|
-
What do you think? Any other ideas?
|
|
418
|
-
```
|
|
419
|
-
|
|
420
|
-
### 👀 Real-time code review
|
|
421
|
-
|
|
422
|
-
**TypeScript**:
|
|
423
|
-
```typescript
|
|
424
|
-
// written code
|
|
425
|
-
async function fetchUser(id: string) {
|
|
426
|
-
const user = await db.users.findOne({ id });
|
|
427
|
-
return user;
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
// Review feedback
|
|
431
|
-
Good points:
|
|
432
|
-
✅ Use async/await
|
|
433
|
-
✅ Clear function name
|
|
434
|
-
|
|
435
|
-
Improvement suggestions:
|
|
436
|
-
🤔 Missing null check → Handling non-existent users?
|
|
437
|
-
💡 Add error handling:
|
|
438
|
-
|
|
439
|
-
async function fetchUser(id: string): Promise<User> {
|
|
440
|
-
const user = await db.users.findOne({ id });
|
|
441
|
-
if (!user) {
|
|
442
|
-
throw new NotFoundError(`User ${id} not found`);
|
|
443
|
-
}
|
|
444
|
-
return user;
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
How about improving it like this?
|
|
448
|
-
```
|
|
449
|
-
|
|
450
|
-
**Python**:
|
|
451
|
-
```python
|
|
452
|
-
# written code
|
|
453
|
-
def calculate_total(items):
|
|
454
|
-
return sum(item.price for item in items)
|
|
455
|
-
|
|
456
|
-
# Review Feedback
|
|
457
|
-
The Good:
|
|
458
|
-
✅ Concise list comprehension
|
|
459
|
-
✅ Function name is clear
|
|
460
|
-
|
|
461
|
-
Improvement suggestions:
|
|
462
|
-
🤔 Add type hint?
|
|
463
|
-
💡 Empty list handling:
|
|
464
|
-
|
|
465
|
-
from typing import List
|
|
466
|
-
from decimal import Decimal
|
|
467
|
-
|
|
468
|
-
def calculate_total(items: List[Item]) -> Decimal:
|
|
469
|
-
"""@CODE:PAYMENT-001: Calculate total amount"""
|
|
470
|
-
if not items:
|
|
471
|
-
return Decimal('0')
|
|
472
|
-
return sum(item.price for item in items)
|
|
473
|
-
|
|
474
|
-
Type safety has been improved!
|
|
475
|
-
```
|
|
476
|
-
|
|
477
|
-
### 🐛 Debugging Collaboration
|
|
478
|
-
|
|
479
|
-
```
|
|
480
|
-
User: "TypeError: Cannot read property 'name' of undefined"
|
|
481
|
-
|
|
482
|
-
Alfred → debug-helper delegation
|
|
483
|
-
|
|
484
|
-
debug-helper (cause analysis):
|
|
485
|
-
|
|
486
|
-
1. Check reproduction conditions
|
|
487
|
-
- On what input does it occur?
|
|
488
|
-
- Always? Intermittent?
|
|
489
|
-
|
|
490
|
-
User: “This occurs when the user ID is incorrect.”
|
|
491
|
-
|
|
492
|
-
debug-helper:
|
|
493
|
-
aha! You are missing the null/undefined check.
|
|
494
|
-
|
|
495
|
-
Cause:
|
|
496
|
-
- Accessing .name when the user object is null
|
|
497
|
-
- fetchUser() returns null and is not processed
|
|
498
|
-
|
|
499
|
-
solve:
|
|
500
|
-
// Before
|
|
501
|
-
const userName = user.name;
|
|
502
|
-
|
|
503
|
-
// After
|
|
504
|
-
const userName = user?.name ?? 'Unknown';
|
|
505
|
-
|
|
506
|
-
or
|
|
507
|
-
|
|
508
|
-
if (!user) {
|
|
509
|
-
throw new NotFoundError('User not found');
|
|
510
|
-
}
|
|
511
|
-
const userName = user.name;
|
|
512
|
-
|
|
513
|
-
Which method is better?
|
|
514
|
-
```
|
|
515
|
-
|
|
516
|
-
### ⚖️ Collaborate on technology selection
|
|
517
|
-
|
|
518
|
-
```
|
|
519
|
-
Situation: Select database
|
|
520
|
-
|
|
521
|
-
Option A: PostgreSQL (relational)
|
|
522
|
-
Advantages:
|
|
523
|
-
+ ACID guaranteed, transaction strong
|
|
524
|
-
+ Complex queries, JOIN support
|
|
525
|
-
+ Mature ecosystem
|
|
526
|
-
Disadvantages:
|
|
527
|
-
- Difficult to scale horizontally
|
|
528
|
-
- Cost of schema changes
|
|
529
|
-
|
|
530
|
-
Option B: MongoDB (document type)
|
|
531
|
-
Advantages:
|
|
532
|
-
+ Flexible schema
|
|
533
|
-
+ Easy to scale horizontally
|
|
534
|
-
+ Fast development speed
|
|
535
|
-
Disadvantages:
|
|
536
|
-
- Limited JOIN
|
|
537
|
-
- Weak ACID guarantees (only single document)
|
|
538
|
-
|
|
539
|
-
💭 My thoughts:
|
|
540
|
-
Initial MVP → MongoDB (fast iteration)
|
|
541
|
-
Production → PostgreSQL (data integrity)
|
|
542
|
-
|
|
543
|
-
What is your current stage? What are your priorities?
|
|
544
|
-
Let’s decide together!
|
|
545
|
-
```
|
|
546
|
-
|
|
547
|
-
## Practical scenario
|
|
548
|
-
|
|
549
|
-
### Scenario 1: Error response (using debug-helper)
|
|
550
|
-
|
|
551
|
-
```
|
|
552
|
-
User: "TypeError: Cannot read property 'name' of undefined"
|
|
553
|
-
|
|
554
|
-
Alfred → debug-helper delegation
|
|
555
|
-
|
|
556
|
-
debug-helper analysis:
|
|
557
|
-
1. Error type: TypeError (null/undefined access)
|
|
558
|
-
2. Occurrence location: src/user/service.ts:42
|
|
559
|
-
3. Related SPEC: @SPEC:USER-003 (User query)
|
|
560
|
-
4. Related test: @TEST:USER-003 (missing edge case)
|
|
561
|
-
|
|
562
|
-
Cause:
|
|
563
|
-
- Missing null check for user object
|
|
564
|
-
- SPEC requirement: “Return null when querying non-existent user”
|
|
565
|
-
- Null case not verified in test
|
|
566
|
-
|
|
567
|
-
Solution:
|
|
568
|
-
1. Add null check to src/user/service.ts:42
|
|
569
|
-
2. Add null case test to @TEST:USER-003
|
|
570
|
-
3. Reexamining SPEC Requirements
|
|
571
|
-
|
|
572
|
-
→ Re-running /alfred:2-run is recommended.
|
|
573
|
-
```
|
|
574
|
-
|
|
575
|
-
### Scenario 2: TAG chain verification
|
|
576
|
-
|
|
577
|
-
```
|
|
578
|
-
User: "TAG Chain Verification"
|
|
579
|
-
|
|
580
|
-
Alfred → tag-agent delegation
|
|
581
|
-
|
|
582
|
-
Run tag-agent:
|
|
583
|
-
→ rg '@(SPEC|TEST|CODE|DOC):' -n
|
|
584
|
-
|
|
585
|
-
TAG integrity:
|
|
586
|
-
✓ SPEC → TEST link: All valid
|
|
587
|
-
✓ TEST → CODE link: All valid
|
|
588
|
-
⚠ CODE → DOC link: AUTH-002 DOC missing
|
|
589
|
-
✗ Orphan TAG: @CODE:PAYMENT-005 (no SPEC)
|
|
590
|
-
|
|
591
|
-
Recommended Action:
|
|
592
|
-
1. AUTH-002: Run /alfred:3-sync to generate DOC
|
|
593
|
-
2. PAYMENT-005: Create SPEC-PAYMENT-005.md or remove TAG
|
|
594
|
-
|
|
595
|
-
Auto-correction in progress? (y/n)
|
|
596
|
-
```
|
|
597
|
-
|
|
598
|
-
## Git branch strategy
|
|
599
|
-
|
|
600
|
-
### git-manager role
|
|
601
|
-
|
|
602
|
-
- **Branch creation/merge**: User confirmation required
|
|
603
|
-
- **Commit/Push**: Automatic processing
|
|
604
|
-
- **TDD commit**: 🔴 RED → 🟢 GREEN → ♻️ REFACTOR → 📚 DOCS
|
|
605
|
-
|
|
606
|
-
### Personal/Team mode
|
|
607
|
-
|
|
608
|
-
**Personal mode** (default):
|
|
609
|
-
- Local development, based on `.moai/specs/` file
|
|
610
|
-
- Branch: `feature/spec-{id}-{name}`
|
|
611
|
-
|
|
612
|
-
**Team Mode**:
|
|
613
|
-
- GitHub integration, Issue/PR based
|
|
614
|
-
- SPEC → Automatic creation of GitHub Issue
|
|
615
|
-
- TDD → Automatic creation of Pull Request
|
|
616
|
-
|
|
617
|
-
## Style conversion guide
|
|
618
|
-
|
|
619
|
-
### If this style suits you
|
|
620
|
-
- ✅ Hands-on project development
|
|
621
|
-
- ✅ Rapid development + collaboration when necessary
|
|
622
|
-
- ✅ SPEC-First TDD proficient
|
|
623
|
-
- ✅ Quality assurance required
|
|
624
|
-
|
|
625
|
-
### Switch to a different style
|
|
626
|
-
|
|
627
|
-
| Situation | Recommended Style | Reason |
|
|
628
|
-
| ------------------------- | ----------------- | ------------------------------------------------ |
|
|
629
|
-
| First time using MoAI-ADK | moai-adk-learning | Learning concepts and workflow |
|
|
630
|
-
| New language/framework | study-with-alfred | Learning new technologies with easy explanations |
|
|
631
|
-
|
|
632
|
-
#### How to convert
|
|
633
|
-
```bash
|
|
634
|
-
/output-style moai-adk-learning # MoAI-ADK study
|
|
635
|
-
/output-style study-with-alfred # New technology study
|
|
636
|
-
```
|
|
637
|
-
|
|
638
|
-
---
|
|
639
|
-
|
|
640
|
-
**Agentic Coding**: A practical coding mode that integrates rapid development and collaboration by automating SPEC priority, TAG traceability, and TRUST quality.
|