moai-adk 0.15.0__py3-none-any.whl → 0.25.4__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/__init__.py +1 -2
- moai_adk/__main__.py +85 -2
- moai_adk/cli/__init__.py +0 -1
- moai_adk/cli/commands/__init__.py +0 -1
- moai_adk/cli/commands/analyze.py +127 -0
- moai_adk/cli/commands/backup.py +5 -3
- moai_adk/cli/commands/doctor.py +35 -11
- moai_adk/cli/commands/improve_user_experience.py +348 -0
- moai_adk/cli/commands/init.py +150 -23
- moai_adk/cli/commands/language.py +269 -0
- moai_adk/cli/commands/migrate.py +158 -0
- moai_adk/cli/commands/status.py +13 -12
- moai_adk/cli/commands/update.py +364 -60
- moai_adk/cli/commands/validate_links.py +118 -0
- moai_adk/cli/main.py +3 -2
- moai_adk/cli/prompts/init_prompts.py +79 -82
- moai_adk/core/__init__.py +0 -1
- moai_adk/core/analysis/__init__.py +9 -0
- moai_adk/core/analysis/session_analyzer.py +439 -0
- moai_adk/core/claude_integration.py +421 -0
- moai_adk/core/command_helpers.py +270 -0
- moai_adk/core/config/__init__.py +6 -0
- moai_adk/core/config/auto_spec_config.py +346 -0
- moai_adk/core/config/migration.py +133 -12
- moai_adk/core/context_manager.py +279 -0
- moai_adk/core/diagnostics/slash_commands.py +0 -1
- moai_adk/core/error_recovery_system.py +1289 -0
- moai_adk/core/git/__init__.py +0 -1
- moai_adk/core/git/branch.py +0 -1
- moai_adk/core/git/branch_manager.py +4 -4
- moai_adk/core/git/checkpoint.py +1 -5
- moai_adk/core/git/commit.py +0 -1
- moai_adk/core/git/event_detector.py +3 -5
- moai_adk/core/git/manager.py +0 -1
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +925 -0
- moai_adk/core/integration/__init__.py +22 -0
- moai_adk/core/integration/engine.py +169 -0
- moai_adk/core/integration/integration_tester.py +225 -0
- moai_adk/core/integration/models.py +88 -0
- moai_adk/core/integration/utils.py +211 -0
- moai_adk/core/issue_creator.py +28 -18
- moai_adk/core/language_config.py +202 -0
- moai_adk/core/language_validator.py +556 -0
- moai_adk/core/mcp/setup.py +113 -0
- moai_adk/core/migration/__init__.py +18 -0
- moai_adk/core/migration/backup_manager.py +208 -0
- moai_adk/core/migration/file_migrator.py +218 -0
- moai_adk/core/migration/version_detector.py +143 -0
- moai_adk/core/migration/version_migrator.py +228 -0
- moai_adk/core/performance/__init__.py +6 -0
- moai_adk/core/performance/cache_system.py +318 -0
- moai_adk/core/performance/parallel_processor.py +116 -0
- moai_adk/core/project/__init__.py +0 -1
- moai_adk/core/project/backup_utils.py +2 -7
- moai_adk/core/project/checker.py +3 -3
- moai_adk/core/project/detector.py +20 -40
- moai_adk/core/project/initializer.py +42 -17
- moai_adk/core/project/phase_executor.py +415 -58
- moai_adk/core/project/validator.py +6 -25
- moai_adk/core/quality/__init__.py +1 -1
- moai_adk/core/quality/trust_checker.py +64 -110
- moai_adk/core/quality/validators/__init__.py +1 -1
- moai_adk/core/quality/validators/base_validator.py +1 -1
- moai_adk/core/rollback_manager.py +993 -0
- moai_adk/core/session_manager.py +667 -0
- moai_adk/core/spec/confidence_scoring.py +749 -0
- moai_adk/core/spec/ears_template_engine.py +1182 -0
- moai_adk/core/spec/quality_validator.py +721 -0
- moai_adk/core/spec_status_manager.py +488 -0
- moai_adk/core/template/__init__.py +0 -1
- moai_adk/core/template/backup.py +41 -1
- moai_adk/core/template/config.py +11 -12
- moai_adk/core/template/languages.py +0 -1
- moai_adk/core/template/merger.py +79 -22
- moai_adk/core/template/processor.py +614 -40
- moai_adk/core/template_engine.py +36 -27
- moai_adk/foundation/git/commit_templates.py +565 -0
- moai_adk/foundation/trust/trust_principles.py +725 -0
- moai_adk/foundation/trust/validation_checklist.py +1678 -0
- moai_adk/statusline/__init__.py +38 -0
- moai_adk/statusline/alfred_detector.py +107 -0
- moai_adk/statusline/config.py +364 -0
- moai_adk/statusline/enhanced_output_style_detector.py +364 -0
- moai_adk/statusline/git_collector.py +190 -0
- moai_adk/statusline/main.py +228 -0
- moai_adk/statusline/metrics_tracker.py +78 -0
- moai_adk/statusline/renderer.py +327 -0
- moai_adk/statusline/update_checker.py +135 -0
- moai_adk/statusline/version_reader.py +647 -0
- moai_adk/templates/.git-hooks/pre-commit +66 -0
- moai_adk/templates/.git-hooks/pre-push +116 -4
- moai_adk/templates/.github/workflows/moai-gitflow.yml +1 -7
- moai_adk/templates/.github/workflows/spec-issue-sync.yml +0 -1
- moai_adk/templates/.gitignore +44 -0
- moai_adk/templates/.mcp.json +22 -0
- moai_adk/templates/CLAUDE.md +450 -1071
- moai_adk/utils/__init__.py +0 -1
- moai_adk/utils/banner.py +0 -1
- moai_adk/utils/common.py +308 -0
- moai_adk/utils/link_validator.py +249 -0
- moai_adk/utils/logger.py +4 -9
- moai_adk/utils/safe_file_reader.py +210 -0
- moai_adk/utils/user_experience.py +531 -0
- moai_adk-0.25.4.dist-info/METADATA +2279 -0
- moai_adk-0.25.4.dist-info/RECORD +112 -0
- moai_adk/core/tags/__init__.py +0 -86
- moai_adk/core/tags/ci_validator.py +0 -463
- moai_adk/core/tags/cli.py +0 -283
- moai_adk/core/tags/generator.py +0 -109
- moai_adk/core/tags/inserter.py +0 -99
- moai_adk/core/tags/mapper.py +0 -126
- moai_adk/core/tags/parser.py +0 -76
- moai_adk/core/tags/pre_commit_validator.py +0 -393
- moai_adk/core/tags/reporter.py +0 -956
- moai_adk/core/tags/tags.py +0 -149
- moai_adk/core/tags/validator.py +0 -897
- moai_adk/templates/.claude/agents/alfred/backend-expert.md +0 -319
- moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -316
- moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -208
- moai_adk/templates/.claude/agents/alfred/devops-expert.md +0 -464
- moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -214
- moai_adk/templates/.claude/agents/alfred/frontend-expert.md +0 -357
- moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -406
- moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -423
- moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -312
- moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -343
- moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -865
- moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -392
- moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -361
- moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -428
- moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -375
- moai_adk/templates/.claude/agents/alfred/ui-ux-expert.md +0 -571
- moai_adk/templates/.claude/commands/alfred/0-project.md +0 -1525
- moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -802
- moai_adk/templates/.claude/commands/alfred/2-run.md +0 -709
- moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -1009
- moai_adk/templates/.claude/commands/alfred/9-feedback.md +0 -149
- moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -748
- moai_adk/templates/.claude/hooks/alfred/core/timeout.py +0 -136
- moai_adk/templates/.claude/hooks/alfred/core/ttl_cache.py +0 -108
- moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +0 -198
- moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +0 -29
- moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +0 -94
- moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +0 -100
- moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +0 -94
- moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +0 -94
- moai_adk/templates/.claude/hooks/alfred/shared/core/__init__.py +0 -170
- moai_adk/templates/.claude/hooks/alfred/shared/core/checkpoint.py +0 -271
- moai_adk/templates/.claude/hooks/alfred/shared/core/context.py +0 -67
- moai_adk/templates/.claude/hooks/alfred/shared/core/project.py +0 -749
- moai_adk/templates/.claude/hooks/alfred/shared/core/tags.py +0 -230
- moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +0 -198
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/__init__.py +0 -21
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +0 -154
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/session.py +0 -174
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/tool.py +0 -87
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/user.py +0 -61
- moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +0 -112
- moai_adk/templates/.claude/hooks/alfred/utils/__init__.py +0 -1
- moai_adk/templates/.claude/hooks/alfred/utils/timeout.py +0 -161
- moai_adk/templates/.claude/settings.json +0 -144
- moai_adk/templates/.claude/skills/moai-alfred-agent-guide/SKILL.md +0 -70
- moai_adk/templates/.claude/skills/moai-alfred-agent-guide/examples.md +0 -62
- moai_adk/templates/.claude/skills/moai-alfred-agent-guide/reference.md +0 -242
- moai_adk/templates/.claude/skills/moai-alfred-config-schema/SKILL.md +0 -56
- moai_adk/templates/.claude/skills/moai-alfred-config-schema/examples.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-config-schema/reference.md +0 -444
- moai_adk/templates/.claude/skills/moai-alfred-context-budget/SKILL.md +0 -62
- moai_adk/templates/.claude/skills/moai-alfred-context-budget/examples.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-context-budget/reference.md +0 -405
- moai_adk/templates/.claude/skills/moai-alfred-dev-guide/SKILL.md +0 -51
- moai_adk/templates/.claude/skills/moai-alfred-dev-guide/examples.md +0 -355
- moai_adk/templates/.claude/skills/moai-alfred-dev-guide/reference.md +0 -239
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/SKILL.md +0 -323
- moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/examples.md +0 -286
- moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/reference.md +0 -126
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -122
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/SKILL.md +0 -74
- moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/reference.md +0 -269
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +0 -237
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +0 -615
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +0 -653
- moai_adk/templates/.claude/skills/moai-alfred-issue-labels/SKILL.md +0 -19
- moai_adk/templates/.claude/skills/moai-alfred-issue-labels/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-issue-labels/reference.md +0 -150
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-persona-roles/SKILL.md +0 -198
- moai_adk/templates/.claude/skills/moai-alfred-persona-roles/examples.md +0 -431
- moai_adk/templates/.claude/skills/moai-alfred-persona-roles/reference.md +0 -141
- moai_adk/templates/.claude/skills/moai-alfred-practices/SKILL.md +0 -89
- moai_adk/templates/.claude/skills/moai-alfred-practices/examples.md +0 -122
- moai_adk/templates/.claude/skills/moai-alfred-practices/reference.md +0 -369
- moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/SKILL.md +0 -508
- moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/examples.md +0 -481
- moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/reference.md +0 -100
- moai_adk/templates/.claude/skills/moai-alfred-reporting/SKILL.md +0 -273
- moai_adk/templates/.claude/skills/moai-alfred-rules/SKILL.md +0 -77
- moai_adk/templates/.claude/skills/moai-alfred-rules/examples.md +0 -265
- moai_adk/templates/.claude/skills/moai-alfred-rules/reference.md +0 -539
- moai_adk/templates/.claude/skills/moai-alfred-session-state/SKILL.md +0 -19
- moai_adk/templates/.claude/skills/moai-alfred-session-state/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-session-state/reference.md +0 -84
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/README.md +0 -137
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/SKILL.md +0 -219
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples/validate-spec.sh +0 -161
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples.md +0 -541
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/reference.md +0 -622
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/SKILL.md +0 -115
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/reference.md +0 -348
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/SKILL.md +0 -19
- moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/reference.md +0 -211
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-workflow/SKILL.md +0 -288
- moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +0 -269
- moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +0 -32
- moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +0 -298
- moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +0 -26
- moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +0 -307
- moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +0 -21
- moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +0 -252
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +0 -19
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +0 -19
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +0 -24
- moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +0 -199
- moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +0 -39
- moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +0 -316
- moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +0 -18
- moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +0 -263
- moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +0 -30
- moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/SKILL.md +0 -19
- moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/reference.md +0 -218
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/CHECKLIST.md +0 -482
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/EXAMPLES.md +0 -278
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/INTERACTIVE-DISCOVERY.md +0 -524
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/METADATA.md +0 -477
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -429
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/PYTHON-VERSION-MATRIX.md +0 -391
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -431
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -577
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL.md +0 -271
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/STEP-BY-STEP-GUIDE.md +0 -466
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/STRUCTURE.md +0 -583
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/WEB-RESEARCH.md +0 -526
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/reference.md +0 -465
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/generate-structure.sh +0 -328
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/validate-skill.sh +0 -312
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/SKILL_TEMPLATE.md +0 -245
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/examples-template.md +0 -285
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/reference-template.md +0 -278
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/scripts-template.sh +0 -303
- moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +0 -291
- moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +0 -15
- moai_adk/templates/.claude/skills/moai-design-systems/SKILL.md +0 -802
- moai_adk/templates/.claude/skills/moai-design-systems/examples.md +0 -1238
- moai_adk/templates/.claude/skills/moai-design-systems/reference.md +0 -673
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +0 -290
- moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +0 -1633
- moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +0 -660
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-database/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-database/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +0 -128
- moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-security/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-security/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +0 -303
- moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +0 -1064
- moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +0 -1047
- moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +0 -116
- moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +0 -122
- moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +0 -307
- moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
- moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +0 -1099
- moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-c/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-c/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +0 -127
- moai_adk/templates/.claude/skills/moai-lang-go/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-go/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +0 -126
- moai_adk/templates/.claude/skills/moai-lang-java/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-java/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +0 -125
- moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +0 -32
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +0 -126
- moai_adk/templates/.claude/skills/moai-lang-php/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-php/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +0 -433
- moai_adk/templates/.claude/skills/moai-lang-python/examples.md +0 -624
- moai_adk/templates/.claude/skills/moai-lang-python/reference.md +0 -316
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-r/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-r/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +0 -127
- moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +0 -125
- moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +0 -133
- moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +0 -34
- moai_adk/templates/.claude/skills/moai-project-documentation.md +0 -622
- moai_adk/templates/.github/workflows/c-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/cpp-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/csharp-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/dart-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/go-tag-validation.yml +0 -130
- moai_adk/templates/.github/workflows/java-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/javascript-tag-validation.yml +0 -135
- moai_adk/templates/.github/workflows/kotlin-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/php-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/python-tag-validation.yml +0 -118
- moai_adk/templates/.github/workflows/release.yml +0 -118
- moai_adk/templates/.github/workflows/ruby-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/rust-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/shell-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/swift-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/tag-report.yml +0 -269
- moai_adk/templates/.github/workflows/tag-validation.yml +0 -186
- moai_adk/templates/.github/workflows/typescript-tag-validation.yml +0 -154
- moai_adk/templates/.moai/config.json +0 -115
- moai_adk/templates/workflows/go-tag-validation.yml +0 -30
- moai_adk/templates/workflows/javascript-tag-validation.yml +0 -41
- moai_adk/templates/workflows/python-tag-validation.yml +0 -42
- moai_adk/templates/workflows/typescript-tag-validation.yml +0 -31
- moai_adk-0.15.0.dist-info/METADATA +0 -3079
- moai_adk-0.15.0.dist-info/RECORD +0 -365
- {moai_adk-0.15.0.dist-info → moai_adk-0.25.4.dist-info}/WHEEL +0 -0
- {moai_adk-0.15.0.dist-info → moai_adk-0.25.4.dist-info}/entry_points.txt +0 -0
- {moai_adk-0.15.0.dist-info → moai_adk-0.25.4.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,541 +0,0 @@
|
|
|
1
|
-
# SPEC Authoring Examples
|
|
2
|
-
|
|
3
|
-
## Real-World EARS Examples
|
|
4
|
-
|
|
5
|
-
### Example 1: E-commerce Checkout
|
|
6
|
-
|
|
7
|
-
```markdown
|
|
8
|
-
### Ubiquitous Requirements
|
|
9
|
-
**UR-001**: The system shall provide a shopping cart feature.
|
|
10
|
-
**UR-002**: The system shall support credit card payment.
|
|
11
|
-
|
|
12
|
-
### Event-driven Requirements
|
|
13
|
-
**ER-001**: WHEN the user adds an item to the cart, the system shall update the cart total.
|
|
14
|
-
**ER-002**: WHEN payment succeeds, the system shall send a confirmation email.
|
|
15
|
-
**ER-003**: WHEN inventory is insufficient, the system shall display an "Out of Stock" message.
|
|
16
|
-
|
|
17
|
-
### State-driven Requirements
|
|
18
|
-
**SR-001**: WHILE items exist in the cart, the system shall reserve inventory for 30 minutes.
|
|
19
|
-
**SR-002**: WHILE payment is being processed, the UI shall display a loading indicator.
|
|
20
|
-
|
|
21
|
-
### Optional Features
|
|
22
|
-
**OF-001**: WHERE express shipping is selected, the system can calculate express shipping cost.
|
|
23
|
-
**OF-002**: WHERE gift wrapping is available, the system can offer gift wrapping option.
|
|
24
|
-
|
|
25
|
-
### Unwanted Behaviors
|
|
26
|
-
**UB-001**: IF cart total is less than $50, THEN the system shall add a $5 shipping fee.
|
|
27
|
-
**UB-002**: IF 3 payment failures occur, THEN the system shall lock the order for 1 hour.
|
|
28
|
-
**UB-003**: Order processing time shall not exceed 5 seconds.
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
### Example 2: Mobile App Push Notifications
|
|
32
|
-
|
|
33
|
-
```markdown
|
|
34
|
-
### Ubiquitous Requirements
|
|
35
|
-
**UR-001**: The app shall support push notifications.
|
|
36
|
-
**UR-002**: The app shall allow users to enable/disable notifications.
|
|
37
|
-
|
|
38
|
-
### Event-driven Requirements
|
|
39
|
-
**ER-001**: WHEN a new message arrives, the app shall display a push notification.
|
|
40
|
-
**ER-002**: WHEN the user taps a notification, the app shall navigate to the message screen.
|
|
41
|
-
**ER-003**: WHEN notification permission is denied, the app shall display an in-app banner.
|
|
42
|
-
|
|
43
|
-
### State-driven Requirements
|
|
44
|
-
**SR-001**: WHILE the app is in foreground state, the system shall display in-app banner instead of push notification.
|
|
45
|
-
**SR-002**: WHILE Do Not Disturb mode is enabled, the system shall mute all notifications.
|
|
46
|
-
|
|
47
|
-
### Optional Features
|
|
48
|
-
**OF-001**: WHERE notification sound is enabled, the system can play notification sound.
|
|
49
|
-
**OF-002**: WHERE notification grouping is supported, the system can group notifications by conversation.
|
|
50
|
-
|
|
51
|
-
### Unwanted Behaviors
|
|
52
|
-
**UB-001**: IF 10 or more notifications are pending, THEN the system shall consolidate them into a summary notification.
|
|
53
|
-
**UB-002**: Notification delivery latency shall not exceed 5 seconds.
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
## Complete SPEC Examples
|
|
59
|
-
|
|
60
|
-
### Example 1: Minimal SPEC
|
|
61
|
-
|
|
62
|
-
```markdown
|
|
63
|
-
---
|
|
64
|
-
id: HELLO-001
|
|
65
|
-
version: 0.0.1
|
|
66
|
-
status: draft
|
|
67
|
-
created: 2025-10-29
|
|
68
|
-
updated: 2025-10-29
|
|
69
|
-
author: @Goos
|
|
70
|
-
priority: low
|
|
71
|
-
---
|
|
72
|
-
|
|
73
|
-
# @SPEC:HELLO-001: Hello World API
|
|
74
|
-
|
|
75
|
-
## HISTORY
|
|
76
|
-
|
|
77
|
-
### v0.0.1 (2025-10-29)
|
|
78
|
-
- **INITIAL**: Hello World API SPEC draft created
|
|
79
|
-
- **AUTHOR**: @Goos
|
|
80
|
-
|
|
81
|
-
## Environment
|
|
82
|
-
|
|
83
|
-
**Runtime**: Node.js 20.x
|
|
84
|
-
**Framework**: Express.js
|
|
85
|
-
|
|
86
|
-
## Assumptions
|
|
87
|
-
|
|
88
|
-
1. Single endpoint required
|
|
89
|
-
2. No authentication needed
|
|
90
|
-
3. JSON response format
|
|
91
|
-
|
|
92
|
-
## Requirements
|
|
93
|
-
|
|
94
|
-
### Ubiquitous Requirements
|
|
95
|
-
|
|
96
|
-
**UR-001**: The system shall provide a GET /hello endpoint.
|
|
97
|
-
|
|
98
|
-
### Event-driven Requirements
|
|
99
|
-
|
|
100
|
-
**ER-001**: WHEN a GET request is sent to /hello, the system shall return JSON `{"message": "Hello, World!"}`.
|
|
101
|
-
|
|
102
|
-
### Unwanted Behaviors
|
|
103
|
-
|
|
104
|
-
**UB-001**: Response time shall not exceed 50ms.
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
### Example 2: Production-Grade SPEC
|
|
108
|
-
|
|
109
|
-
```markdown
|
|
110
|
-
---
|
|
111
|
-
id: AUTH-001
|
|
112
|
-
version: 0.1.0
|
|
113
|
-
status: completed
|
|
114
|
-
created: 2025-10-29
|
|
115
|
-
updated: 2025-10-30
|
|
116
|
-
author: @Goos
|
|
117
|
-
priority: high
|
|
118
|
-
category: feature
|
|
119
|
-
labels:
|
|
120
|
-
- authentication
|
|
121
|
-
- jwt
|
|
122
|
-
- security
|
|
123
|
-
depends_on:
|
|
124
|
-
- USER-001
|
|
125
|
-
- TOKEN-001
|
|
126
|
-
blocks:
|
|
127
|
-
- AUTH-002
|
|
128
|
-
- PAYMENT-001
|
|
129
|
-
related_issue: "https://github.com/modu-ai/moai-adk/issues/42"
|
|
130
|
-
scope:
|
|
131
|
-
packages:
|
|
132
|
-
- src/core/auth
|
|
133
|
-
- src/core/token
|
|
134
|
-
- src/api/routes/auth
|
|
135
|
-
files:
|
|
136
|
-
- auth-service.ts
|
|
137
|
-
- token-manager.ts
|
|
138
|
-
- auth.routes.ts
|
|
139
|
-
---
|
|
140
|
-
|
|
141
|
-
# @SPEC:AUTH-001: JWT Authentication System
|
|
142
|
-
|
|
143
|
-
## HISTORY
|
|
144
|
-
|
|
145
|
-
### v0.1.0 (2025-10-30)
|
|
146
|
-
- **COMPLETED**: TDD implementation finished
|
|
147
|
-
- **AUTHOR**: @Goos
|
|
148
|
-
- **EVIDENCE**: Commits 4c66076, 34e1bd9, 1dec08f
|
|
149
|
-
- **TEST COVERAGE**: 89.13% (target: 85%)
|
|
150
|
-
- **QUALITY METRICS**:
|
|
151
|
-
- Test Pass Rate: 100% (42/42 tests)
|
|
152
|
-
- Linting: ruff ✅
|
|
153
|
-
- Type Checking: mypy ✅
|
|
154
|
-
- **TAG CHAIN**:
|
|
155
|
-
- @SPEC:AUTH-001: 1 occurrence
|
|
156
|
-
- @TEST:AUTH-001: 8 occurrences
|
|
157
|
-
- @CODE:AUTH-001: 12 occurrences
|
|
158
|
-
|
|
159
|
-
### v0.0.2 (2025-10-25)
|
|
160
|
-
- **REFINED**: Added password reset flow requirements
|
|
161
|
-
- **REFINED**: Clarified token lifetime constraints
|
|
162
|
-
- **AUTHOR**: @Goos
|
|
163
|
-
|
|
164
|
-
### v0.0.1 (2025-10-29)
|
|
165
|
-
- **INITIAL**: JWT authentication SPEC draft created
|
|
166
|
-
- **AUTHOR**: @Goos
|
|
167
|
-
- **SCOPE**: User authentication, token generation, token validation
|
|
168
|
-
- **CONTEXT**: Q4 2025 product roadmap requirements
|
|
169
|
-
|
|
170
|
-
## Environment
|
|
171
|
-
|
|
172
|
-
**Execution Context**:
|
|
173
|
-
- Runtime: Node.js 20.x or later
|
|
174
|
-
- Framework: Express.js
|
|
175
|
-
- Database: PostgreSQL 15+
|
|
176
|
-
|
|
177
|
-
**Technical Stack**:
|
|
178
|
-
- JWT library: jsonwebtoken ^9.0.0
|
|
179
|
-
- Hashing: bcrypt ^5.1.0
|
|
180
|
-
|
|
181
|
-
**Constraints**:
|
|
182
|
-
- Token lifetime: 15 minutes (access), 7 days (refresh)
|
|
183
|
-
- Security: HTTPS required in production
|
|
184
|
-
|
|
185
|
-
## Assumptions
|
|
186
|
-
|
|
187
|
-
1. **User Storage**: User credentials are stored in PostgreSQL
|
|
188
|
-
2. **Secret Management**: JWT secrets are managed via environment variables
|
|
189
|
-
3. **Clock Sync**: Server clock is synchronized with NTP
|
|
190
|
-
4. **Password Policy**: Minimum 8 characters enforced during registration
|
|
191
|
-
|
|
192
|
-
## Requirements
|
|
193
|
-
|
|
194
|
-
### Ubiquitous Requirements
|
|
195
|
-
|
|
196
|
-
**UR-001**: The system shall provide JWT-based authentication.
|
|
197
|
-
|
|
198
|
-
**UR-002**: The system shall support user login with email and password.
|
|
199
|
-
|
|
200
|
-
**UR-003**: The system shall issue both access and refresh tokens.
|
|
201
|
-
|
|
202
|
-
### Event-driven Requirements
|
|
203
|
-
|
|
204
|
-
**ER-001**: WHEN the user submits valid credentials, the system shall issue a JWT access token with 15-minute expiration.
|
|
205
|
-
|
|
206
|
-
**ER-002**: WHEN a token expires, the system shall return HTTP 401 Unauthorized.
|
|
207
|
-
|
|
208
|
-
**ER-003**: WHEN a refresh token is presented, the system shall issue a new access token if the refresh token is valid.
|
|
209
|
-
|
|
210
|
-
### State-driven Requirements
|
|
211
|
-
|
|
212
|
-
**SR-001**: WHILE the user is in an authenticated state, the system shall permit access to protected resources.
|
|
213
|
-
|
|
214
|
-
**SR-002**: WHILE a token is valid, the system shall extract the user ID from token claims.
|
|
215
|
-
|
|
216
|
-
### Optional Features
|
|
217
|
-
|
|
218
|
-
**OF-001**: WHERE multi-factor authentication is enabled, the system can require OTP verification after password confirmation.
|
|
219
|
-
|
|
220
|
-
**OF-002**: WHERE session logging is enabled, the system can record login timestamp and IP address.
|
|
221
|
-
|
|
222
|
-
### Unwanted Behaviors
|
|
223
|
-
|
|
224
|
-
**UB-001**: IF a token has expired, THEN the system shall deny access and return HTTP 401.
|
|
225
|
-
|
|
226
|
-
**UB-002**: IF 5 or more login failures occur within 10 minutes, THEN the system shall temporarily lock the account.
|
|
227
|
-
|
|
228
|
-
**UB-003**: Access token lifetime shall not exceed 15 minutes.
|
|
229
|
-
|
|
230
|
-
**UB-004**: Refresh token lifetime shall not exceed 7 days.
|
|
231
|
-
|
|
232
|
-
## Traceability (@TAG Chain)
|
|
233
|
-
|
|
234
|
-
### TAG Chain Structure
|
|
235
|
-
```
|
|
236
|
-
@SPEC:AUTH-001 (this document)
|
|
237
|
-
↓
|
|
238
|
-
@TEST:AUTH-001 (tests/auth/service.test.ts)
|
|
239
|
-
↓
|
|
240
|
-
@CODE:AUTH-001 (src/auth/service.ts, src/auth/token-manager.ts)
|
|
241
|
-
↓
|
|
242
|
-
@DOC:AUTH-001 (docs/api/authentication.md)
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
### Validation Commands
|
|
246
|
-
```bash
|
|
247
|
-
# Validate SPEC TAG
|
|
248
|
-
rg '@SPEC:AUTH-001' -n .moai/specs/
|
|
249
|
-
|
|
250
|
-
# Check for duplicate IDs
|
|
251
|
-
rg '@SPEC:AUTH' -n .moai/specs/
|
|
252
|
-
rg 'AUTH-001' -n
|
|
253
|
-
|
|
254
|
-
# Scan full TAG chain
|
|
255
|
-
rg '@(SPEC|TEST|CODE|DOC):AUTH-001' -n
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
## Decision Log
|
|
259
|
-
|
|
260
|
-
### Decision 1: JWT vs Session Cookies (2025-10-29)
|
|
261
|
-
**Context**: Need stateless authentication for microservices
|
|
262
|
-
**Decision**: Use JWT tokens
|
|
263
|
-
**Alternatives Considered**:
|
|
264
|
-
- Session cookies (rejected: stateful, not scalable)
|
|
265
|
-
- OAuth 2.0 (deferred: too complex for MVP)
|
|
266
|
-
**Consequences**:
|
|
267
|
-
- ✅ Stateless, scalable
|
|
268
|
-
- ✅ Service-to-service authentication
|
|
269
|
-
- ❌ Token revocation complexity
|
|
270
|
-
|
|
271
|
-
### Decision 2: Token Expiration 15 minutes (2025-10-30)
|
|
272
|
-
**Context**: Balance between security and UX
|
|
273
|
-
**Decision**: 15-minute access token, 7-day refresh token
|
|
274
|
-
**Rationale**: Industry standard, OWASP best practices
|
|
275
|
-
**References**: OWASP JWT best practices
|
|
276
|
-
|
|
277
|
-
## Requirements Traceability Matrix
|
|
278
|
-
|
|
279
|
-
| Req ID | Description | Test Cases | Status |
|
|
280
|
-
|--------|-------------|------------|--------|
|
|
281
|
-
| UR-001 | JWT authentication | test_authenticate_valid_user | ✅ |
|
|
282
|
-
| ER-001 | Token issuance | test_token_generation | ✅ |
|
|
283
|
-
| ER-002 | Token expiration | test_expired_token_rejection | ✅ |
|
|
284
|
-
| SR-001 | Authenticated access | test_protected_route_access | ✅ |
|
|
285
|
-
| UB-001 | Token lifetime | test_token_expiry_constraint | ✅ |
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
---
|
|
289
|
-
|
|
290
|
-
## Advanced Patterns
|
|
291
|
-
|
|
292
|
-
### Pattern 1: Versioned Requirements
|
|
293
|
-
|
|
294
|
-
Document requirement evolution across versions:
|
|
295
|
-
|
|
296
|
-
```markdown
|
|
297
|
-
### v0.2.0 (2025-11-15)
|
|
298
|
-
**UR-001** (CHANGED): The system shall respond within 200ms for 99% of requests.
|
|
299
|
-
- Previous (v0.1.0): 95% of requests
|
|
300
|
-
- Rationale: User feedback-driven performance improvement
|
|
301
|
-
|
|
302
|
-
### v0.1.0 (2025-10-30)
|
|
303
|
-
**UR-001**: The system shall respond within 200ms for 95% of requests.
|
|
304
|
-
```
|
|
305
|
-
|
|
306
|
-
### Pattern 2: Requirements Traceability Matrix
|
|
307
|
-
|
|
308
|
-
Explicitly link requirements to test cases:
|
|
309
|
-
|
|
310
|
-
```markdown
|
|
311
|
-
## Requirements Traceability Matrix
|
|
312
|
-
|
|
313
|
-
| Req ID | Description | Test Cases | Status |
|
|
314
|
-
|--------|-------------|------------|--------|
|
|
315
|
-
| UR-001 | JWT authentication | test_authenticate_valid_user | ✅ |
|
|
316
|
-
| ER-001 | Token issuance | test_token_generation | ✅ |
|
|
317
|
-
| ER-002 | Token expiration | test_expired_token_rejection | ✅ |
|
|
318
|
-
| SR-001 | Authenticated access | test_protected_route_access | ✅ |
|
|
319
|
-
| UB-001 | Token lifetime | test_token_expiry_constraint | ✅ |
|
|
320
|
-
```
|
|
321
|
-
|
|
322
|
-
### Pattern 3: Decision Log
|
|
323
|
-
|
|
324
|
-
Document architectural decisions within the SPEC:
|
|
325
|
-
|
|
326
|
-
```markdown
|
|
327
|
-
## Decision Log
|
|
328
|
-
|
|
329
|
-
### Decision 1: JWT vs Session Cookies (2025-10-29)
|
|
330
|
-
**Context**: Need stateless authentication for microservices
|
|
331
|
-
**Decision**: Use JWT tokens
|
|
332
|
-
**Alternatives Considered**:
|
|
333
|
-
- Session cookies (rejected: stateful, not scalable)
|
|
334
|
-
- OAuth 2.0 (deferred: too complex for MVP)
|
|
335
|
-
**Consequences**:
|
|
336
|
-
- ✅ Stateless, scalable
|
|
337
|
-
- ✅ Service-to-service authentication
|
|
338
|
-
- ❌ Token revocation complexity
|
|
339
|
-
|
|
340
|
-
### Decision 2: Token Expiration 15 minutes (2025-10-30)
|
|
341
|
-
**Context**: Balance between security and UX
|
|
342
|
-
**Decision**: 15-minute access token, 7-day refresh token
|
|
343
|
-
**Rationale**: Industry standard, OWASP best practices
|
|
344
|
-
**References**: OWASP JWT best practices
|
|
345
|
-
```
|
|
346
|
-
|
|
347
|
-
---
|
|
348
|
-
|
|
349
|
-
## Troubleshooting
|
|
350
|
-
|
|
351
|
-
### Issue: "Duplicate SPEC ID detected"
|
|
352
|
-
|
|
353
|
-
**Symptom**: `rg "@SPEC:AUTH-001" -n` returns multiple results
|
|
354
|
-
|
|
355
|
-
**Resolution**:
|
|
356
|
-
```bash
|
|
357
|
-
# Find all occurrences
|
|
358
|
-
rg "@SPEC:AUTH-001" -n .moai/specs/
|
|
359
|
-
|
|
360
|
-
# Keep one SPEC, rename the other
|
|
361
|
-
# Update TAG references in code/tests
|
|
362
|
-
rg '@SPEC:AUTH-001' -l src/ tests/ | xargs sed -i 's/@SPEC:AUTH-001/@SPEC:AUTH-002/g'
|
|
363
|
-
```
|
|
364
|
-
|
|
365
|
-
### Issue: "Version number doesn't match status"
|
|
366
|
-
|
|
367
|
-
**Symptom**: `status: completed` but `version: 0.0.1`
|
|
368
|
-
|
|
369
|
-
**Resolution**:
|
|
370
|
-
```yaml
|
|
371
|
-
# Update version to reflect completion
|
|
372
|
-
version: 0.1.0 # Implementation completed
|
|
373
|
-
status: completed
|
|
374
|
-
```
|
|
375
|
-
|
|
376
|
-
### Issue: "HISTORY section missing version entry"
|
|
377
|
-
|
|
378
|
-
**Symptom**: Content changed but no new HISTORY entry
|
|
379
|
-
|
|
380
|
-
**Resolution**:
|
|
381
|
-
```markdown
|
|
382
|
-
## HISTORY
|
|
383
|
-
|
|
384
|
-
### v0.0.2 (2025-10-25) ← Add new entry
|
|
385
|
-
- **REFINED**: XYZ requirement updated
|
|
386
|
-
- **AUTHOR**: @YourHandle
|
|
387
|
-
|
|
388
|
-
### v0.0.1 (2025-10-23)
|
|
389
|
-
- **INITIAL**: Initial draft
|
|
390
|
-
```
|
|
391
|
-
|
|
392
|
-
### Issue: "Author field missing @ prefix"
|
|
393
|
-
|
|
394
|
-
**Symptom**: `author: Goos` instead of `author: @Goos`
|
|
395
|
-
|
|
396
|
-
**Resolution**:
|
|
397
|
-
```yaml
|
|
398
|
-
# Incorrect
|
|
399
|
-
author: Goos
|
|
400
|
-
author: goos
|
|
401
|
-
|
|
402
|
-
# Correct
|
|
403
|
-
author: @Goos
|
|
404
|
-
```
|
|
405
|
-
|
|
406
|
-
### Issue: "EARS pattern mixing"
|
|
407
|
-
|
|
408
|
-
**Symptom**: "WHEN user logs in, WHILE session is active, the system shall..."
|
|
409
|
-
|
|
410
|
-
**Resolution**:
|
|
411
|
-
```markdown
|
|
412
|
-
# Bad (pattern mixing)
|
|
413
|
-
**ER-001**: WHEN user logs in, WHILE session is active, the system shall permit access.
|
|
414
|
-
|
|
415
|
-
# Good (separate requirements)
|
|
416
|
-
**ER-001**: WHEN user successfully logs in, the system shall create a session.
|
|
417
|
-
**SR-001**: WHILE session is active, the system shall permit access to protected resources.
|
|
418
|
-
```
|
|
419
|
-
|
|
420
|
-
---
|
|
421
|
-
|
|
422
|
-
## Best Practices Summary
|
|
423
|
-
|
|
424
|
-
### ✅ DO (Best Practices)
|
|
425
|
-
|
|
426
|
-
1. **Check for duplicate IDs before creating**
|
|
427
|
-
```bash
|
|
428
|
-
rg "@SPEC:AUTH-001" -n .moai/specs/
|
|
429
|
-
rg "AUTH-001" -n
|
|
430
|
-
```
|
|
431
|
-
|
|
432
|
-
2. **Update HISTORY on every content change**
|
|
433
|
-
```markdown
|
|
434
|
-
### v0.0.2 (2025-10-25)
|
|
435
|
-
- **REFINED**: XYZ added
|
|
436
|
-
- **AUTHOR**: @YourHandle
|
|
437
|
-
```
|
|
438
|
-
|
|
439
|
-
3. **Follow version lifecycle strictly**
|
|
440
|
-
```
|
|
441
|
-
0.0.1 → 0.0.2 → ... → 0.1.0 → 0.1.1 → ... → 1.0.0
|
|
442
|
-
(draft) (draft) (completed) (patches) (stable)
|
|
443
|
-
```
|
|
444
|
-
|
|
445
|
-
4. **Use @ prefix in author field**
|
|
446
|
-
```yaml
|
|
447
|
-
author: @Goos # Correct
|
|
448
|
-
```
|
|
449
|
-
|
|
450
|
-
5. **Write testable, measurable requirements**
|
|
451
|
-
```markdown
|
|
452
|
-
# Good
|
|
453
|
-
**UR-001**: API response time shall not exceed 200ms for 95% of requests.
|
|
454
|
-
|
|
455
|
-
# Bad
|
|
456
|
-
**UR-001**: The system should be fast.
|
|
457
|
-
```
|
|
458
|
-
|
|
459
|
-
6. **Include all 7 required metadata fields**
|
|
460
|
-
```yaml
|
|
461
|
-
id: AUTH-001
|
|
462
|
-
version: 0.0.1
|
|
463
|
-
status: draft
|
|
464
|
-
created: 2025-10-29
|
|
465
|
-
updated: 2025-10-29
|
|
466
|
-
author: @Goos
|
|
467
|
-
priority: high
|
|
468
|
-
```
|
|
469
|
-
|
|
470
|
-
7. **Use EARS patterns consistently**
|
|
471
|
-
|
|
472
|
-
### ❌ DON'T (Anti-Patterns)
|
|
473
|
-
|
|
474
|
-
1. **Don't change SPEC ID after assignment**
|
|
475
|
-
- Breaks TAG chain
|
|
476
|
-
- Orphans existing code/tests
|
|
477
|
-
- Loses Git history
|
|
478
|
-
|
|
479
|
-
2. **Don't skip HISTORY updates**
|
|
480
|
-
- Loses change rationale
|
|
481
|
-
- Unclear version progression
|
|
482
|
-
- Audit trail gaps
|
|
483
|
-
|
|
484
|
-
3. **Don't jump version numbers without reason**
|
|
485
|
-
```markdown
|
|
486
|
-
# Bad: 0.0.1 → 1.0.0
|
|
487
|
-
# Good: 0.0.1 → 0.0.2 → ... → 0.1.0 → 1.0.0
|
|
488
|
-
```
|
|
489
|
-
|
|
490
|
-
4. **Don't write ambiguous requirements**
|
|
491
|
-
- Avoid "fast", "user-friendly", "good"
|
|
492
|
-
- Use measurable criteria
|
|
493
|
-
|
|
494
|
-
5. **Don't mix EARS patterns in one requirement**
|
|
495
|
-
|
|
496
|
-
6. **Don't skip validation before submission**
|
|
497
|
-
```bash
|
|
498
|
-
./validate-spec.sh .moai/specs/SPEC-AUTH-001
|
|
499
|
-
```
|
|
500
|
-
|
|
501
|
-
7. **Don't create duplicate SPEC IDs**
|
|
502
|
-
|
|
503
|
-
---
|
|
504
|
-
|
|
505
|
-
## Integration Workflow
|
|
506
|
-
|
|
507
|
-
### `/alfred:1-plan` Integration
|
|
508
|
-
|
|
509
|
-
When `/alfred:1-plan` is called, the `spec-builder` agent uses this Skill to:
|
|
510
|
-
|
|
511
|
-
1. **Analyze**: User request and project context
|
|
512
|
-
2. **Generate**: SPEC candidates with appropriate structure
|
|
513
|
-
3. **Validate**: Metadata completeness
|
|
514
|
-
4. **Create**: `.moai/specs/SPEC-{ID}/spec.md` with EARS requirements
|
|
515
|
-
5. **Initialize**: Git workflow (feature branch, Draft PR)
|
|
516
|
-
|
|
517
|
-
### spec-builder Integration Points
|
|
518
|
-
|
|
519
|
-
```markdown
|
|
520
|
-
Phase 1: SPEC candidate generation
|
|
521
|
-
↓ (uses moai-spec-authoring for metadata structure)
|
|
522
|
-
Phase 2: User approval
|
|
523
|
-
↓
|
|
524
|
-
Phase 3: SPEC file creation
|
|
525
|
-
↓ (applies EARS templates from this Skill)
|
|
526
|
-
Phase 4: Git workflow initialization
|
|
527
|
-
↓
|
|
528
|
-
Phase 5: Handoff to /alfred:2-run
|
|
529
|
-
```
|
|
530
|
-
|
|
531
|
-
### Agent Collaboration
|
|
532
|
-
|
|
533
|
-
- **spec-builder**: Creates SPEC using this Skill's templates
|
|
534
|
-
- **tag-agent**: Validates TAG format and uniqueness
|
|
535
|
-
- **trust-checker**: Verifies metadata completeness
|
|
536
|
-
- **git-manager**: Creates feature branch and Draft PR
|
|
537
|
-
|
|
538
|
-
---
|
|
539
|
-
|
|
540
|
-
**Last Updated**: 2025-10-29
|
|
541
|
-
**Version**: 1.2.0
|