moai-adk 0.34.0__py3-none-any.whl → 1.1.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.
- moai_adk/__main__.py +136 -5
- moai_adk/astgrep/__init__.py +37 -0
- moai_adk/astgrep/analyzer.py +522 -0
- moai_adk/astgrep/models.py +124 -0
- moai_adk/astgrep/rules.py +179 -0
- moai_adk/cli/commands/analyze.py +11 -2
- moai_adk/cli/commands/doctor.py +7 -1
- moai_adk/cli/commands/init.py +321 -11
- moai_adk/cli/commands/language.py +7 -1
- moai_adk/cli/commands/rank.py +449 -0
- moai_adk/cli/commands/status.py +7 -1
- moai_adk/cli/commands/switch.py +325 -0
- moai_adk/cli/commands/update.py +296 -23
- moai_adk/cli/prompts/init_prompts.py +362 -66
- moai_adk/cli/prompts/translations/__init__.py +573 -0
- moai_adk/cli/ui/prompts.py +61 -2
- moai_adk/cli/worktree/cli.py +106 -1
- moai_adk/cli/worktree/manager.py +155 -0
- moai_adk/core/config/unified.py +244 -63
- moai_adk/core/credentials.py +264 -0
- moai_adk/core/error_recovery_system.py +22 -4
- moai_adk/core/git/conflict_detector.py +10 -1
- moai_adk/core/git/event_detector.py +16 -5
- moai_adk/core/integration/engine.py +2 -2
- moai_adk/core/integration/integration_tester.py +5 -5
- moai_adk/core/language_config_resolver.py +9 -3
- moai_adk/core/merge/analyzer.py +509 -324
- moai_adk/core/migration/alfred_to_moai_migrator.py +7 -1
- moai_adk/core/migration/backup_manager.py +54 -4
- moai_adk/core/migration/file_migrator.py +174 -2
- moai_adk/core/migration/interactive_checkbox_ui.py +42 -31
- moai_adk/core/migration/version_detector.py +123 -19
- moai_adk/core/migration/version_migrator.py +44 -9
- moai_adk/core/model_allocator.py +241 -0
- moai_adk/core/project/backup_utils.py +12 -2
- moai_adk/core/project/initializer.py +44 -87
- moai_adk/core/project/phase_executor.py +95 -33
- moai_adk/core/project/validator.py +16 -1
- moai_adk/core/quality/trust_checker.py +30 -10
- moai_adk/core/rollback_manager.py +60 -25
- moai_adk/core/template/backup.py +88 -6
- moai_adk/core/template/config.py +33 -9
- moai_adk/core/template/merger.py +34 -8
- moai_adk/core/template/processor.py +334 -11
- moai_adk/core/template_engine.py +10 -1
- moai_adk/core/template_variable_synchronizer.py +16 -2
- moai_adk/core/version_sync.py +54 -6
- moai_adk/foundation/__init__.py +1 -20
- moai_adk/foundation/testing.py +1 -1
- moai_adk/loop/__init__.py +54 -0
- moai_adk/loop/controller.py +305 -0
- moai_adk/loop/feedback.py +230 -0
- moai_adk/loop/state.py +209 -0
- moai_adk/loop/storage.py +220 -0
- moai_adk/lsp/__init__.py +70 -0
- moai_adk/lsp/client.py +320 -0
- moai_adk/lsp/models.py +261 -0
- moai_adk/lsp/protocol.py +404 -0
- moai_adk/lsp/server_manager.py +248 -0
- moai_adk/project/configuration.py +8 -1
- moai_adk/py.typed +0 -0
- moai_adk/ralph/__init__.py +37 -0
- moai_adk/ralph/engine.py +307 -0
- moai_adk/rank/__init__.py +21 -0
- moai_adk/rank/auth.py +425 -0
- moai_adk/rank/client.py +557 -0
- moai_adk/rank/config.py +147 -0
- moai_adk/rank/hook.py +1503 -0
- moai_adk/rank/py.typed +0 -0
- moai_adk/statusline/__init__.py +3 -0
- moai_adk/statusline/enhanced_output_style_detector.py +5 -5
- moai_adk/statusline/main.py +20 -1
- moai_adk/statusline/memory_collector.py +268 -0
- moai_adk/statusline/renderer.py +54 -38
- moai_adk/tag_system/__init__.py +48 -0
- moai_adk/tag_system/atomic_ops.py +117 -0
- moai_adk/tag_system/linkage.py +335 -0
- moai_adk/tag_system/parser.py +176 -0
- moai_adk/tag_system/validator.py +200 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +19 -3
- moai_adk/templates/.claude/agents/moai/builder-command.md +62 -16
- moai_adk/templates/.claude/agents/moai/builder-plugin.md +763 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +21 -5
- moai_adk/templates/.claude/agents/moai/expert-backend.md +103 -39
- moai_adk/templates/.claude/agents/moai/expert-debug.md +9 -3
- moai_adk/templates/.claude/agents/moai/expert-devops.md +16 -14
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +45 -31
- moai_adk/templates/.claude/agents/moai/expert-performance.md +13 -9
- moai_adk/templates/.claude/agents/moai/expert-refactoring.md +228 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +19 -3
- moai_adk/templates/.claude/agents/moai/expert-testing.md +13 -9
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +8 -2
- moai_adk/templates/.claude/agents/moai/manager-docs.md +10 -5
- moai_adk/templates/.claude/agents/moai/manager-git.md +99 -27
- moai_adk/templates/.claude/agents/moai/manager-project.md +87 -7
- moai_adk/templates/.claude/agents/moai/manager-quality.md +22 -5
- moai_adk/templates/.claude/agents/moai/manager-spec.md +8 -2
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +45 -14
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +16 -3
- moai_adk/templates/.claude/commands/moai/0-project.md +239 -1185
- moai_adk/templates/.claude/commands/moai/1-plan.md +383 -363
- moai_adk/templates/.claude/commands/moai/2-run.md +254 -347
- moai_adk/templates/.claude/commands/moai/3-sync.md +174 -100
- moai_adk/templates/.claude/commands/moai/9-feedback.md +49 -33
- moai_adk/templates/.claude/commands/moai/alfred.md +339 -0
- moai_adk/templates/.claude/commands/moai/cancel-loop.md +163 -0
- moai_adk/templates/.claude/commands/moai/fix.md +264 -0
- moai_adk/templates/.claude/commands/moai/loop.md +363 -0
- moai_adk/templates/.claude/hooks/moai/lib/README.md +143 -0
- moai_adk/templates/.claude/hooks/moai/lib/__init__.py +37 -81
- moai_adk/templates/.claude/hooks/moai/lib/alfred_detector.py +105 -0
- moai_adk/templates/.claude/hooks/moai/lib/atomic_write.py +122 -0
- moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +4 -1
- moai_adk/templates/.claude/hooks/moai/lib/common.py +35 -5
- moai_adk/templates/.claude/hooks/moai/lib/config.py +376 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +24 -28
- moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +14 -14
- moai_adk/templates/.claude/hooks/moai/lib/enhanced_output_style_detector.py +372 -0
- moai_adk/templates/.claude/hooks/moai/lib/exceptions.py +171 -0
- moai_adk/templates/.claude/hooks/moai/lib/file_utils.py +95 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_collector.py +190 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +15 -13
- moai_adk/templates/.claude/hooks/moai/lib/language_detector.py +298 -0
- moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +125 -25
- moai_adk/templates/.claude/hooks/moai/lib/main.py +341 -0
- moai_adk/templates/.claude/hooks/moai/lib/memory_collector.py +268 -0
- moai_adk/templates/.claude/hooks/moai/lib/metrics_tracker.py +78 -0
- moai_adk/templates/.claude/hooks/moai/lib/models.py +9 -7
- moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +204 -13
- moai_adk/templates/.claude/hooks/moai/lib/project.py +23 -14
- moai_adk/templates/.claude/hooks/moai/lib/renderer.py +359 -0
- moai_adk/templates/.claude/hooks/moai/lib/tag_linkage.py +333 -0
- moai_adk/templates/.claude/hooks/moai/lib/tag_parser.py +176 -0
- moai_adk/templates/.claude/hooks/moai/lib/tag_validator.py +200 -0
- moai_adk/templates/.claude/hooks/moai/lib/timeout.py +5 -5
- moai_adk/templates/.claude/hooks/moai/lib/tool_registry.py +896 -0
- moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +30 -18
- moai_adk/templates/.claude/hooks/moai/lib/update_checker.py +129 -0
- moai_adk/templates/.claude/hooks/moai/lib/version_reader.py +741 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__ast_grep_scan.py +276 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__code_formatter.py +255 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__coverage_guard.py +325 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__linter.py +315 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__lsp_diagnostic.py +508 -0
- moai_adk/templates/.claude/hooks/moai/pre_commit__tag_validator.py +287 -0
- moai_adk/templates/.claude/hooks/moai/pre_tool__security_guard.py +268 -0
- moai_adk/templates/.claude/hooks/moai/pre_tool__tdd_enforcer.py +208 -0
- moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +93 -61
- moai_adk/templates/.claude/hooks/moai/session_end__rank_submit.py +69 -0
- moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +165 -70
- moai_adk/templates/.claude/hooks/moai/shared/utils/announcement_translator.py +206 -0
- moai_adk/templates/.claude/hooks/moai/stop__loop_controller.py +621 -0
- moai_adk/templates/.claude/output-styles/moai/alfred.md +758 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +86 -3
- moai_adk/templates/.claude/output-styles/moai/yoda.md +2 -2
- moai_adk/templates/.claude/settings.json +154 -77
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +252 -198
- moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +169 -323
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +39 -27
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +115 -125
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +150 -150
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +182 -175
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +198 -138
- moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +226 -320
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +43 -222
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +75 -219
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +103 -463
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/component-architecture.md +723 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/nextjs16-patterns.md +713 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/performance-optimization.md +694 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/react19-patterns.md +591 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/state-management.md +680 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/vue35-patterns.md +802 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +118 -339
- moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +74 -377
- moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +299 -70
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +205 -182
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/advanced-agent-patterns.md +370 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-cli-reference-official.md +420 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +32 -22
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-devcontainers-official.md +381 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-discover-plugins-official.md +379 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-headless-official.md +378 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +110 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugin-marketplaces-official.md +308 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugins-official.md +640 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sandboxing-official.md +282 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +425 -71
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-statusline-official.md +293 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +325 -143
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +96 -316
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +116 -294
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-advanced.md +279 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-implementation.md +267 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +121 -650
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/patterns.md +22 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-ears-format.md +200 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +37 -730
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-tdd-implementation.md +275 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +77 -819
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-implementation.md +244 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-validation.md +219 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +14 -18
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +86 -270
- moai_adk/templates/.claude/skills/moai-framework-electron/SKILL.md +288 -0
- moai_adk/templates/.claude/skills/moai-framework-electron/examples.md +2082 -0
- moai_adk/templates/.claude/skills/moai-framework-electron/reference.md +1649 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +76 -582
- moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +1239 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/modules/advanced-patterns.md +401 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +1136 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +82 -436
- moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +585 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/aspnet-core.md +627 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/blazor-components.md +767 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/cqrs-validation.md +626 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/csharp12-features.md +580 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/efcore-patterns.md +622 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +403 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +65 -542
- moai_adk/templates/.claude/skills/moai-lang-elixir/examples.md +1171 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/modules/advanced-patterns.md +531 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/reference.md +889 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +32 -405
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +114 -293
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +83 -307
- moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +179 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +973 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +1543 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +42 -279
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +94 -556
- moai_adk/templates/.claude/skills/moai-lang-php/examples.md +1608 -0
- moai_adk/templates/.claude/skills/moai-lang-php/modules/advanced-patterns.md +538 -0
- moai_adk/templates/.claude/skills/moai-lang-php/reference.md +1323 -0
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +108 -358
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +84 -482
- moai_adk/templates/.claude/skills/moai-lang-r/examples.md +1154 -0
- moai_adk/templates/.claude/skills/moai-lang-r/modules/advanced-patterns.md +489 -0
- moai_adk/templates/.claude/skills/moai-lang-r/reference.md +1087 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +106 -610
- moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +1106 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/modules/advanced-patterns.md +309 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/modules/testing-patterns.md +306 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +1024 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +51 -265
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +106 -442
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/akka-actors.md +479 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/cats-effect.md +489 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/functional-programming.md +460 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/spark-data.md +498 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/zio-patterns.md +541 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +88 -457
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/combine-reactive.md +256 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/concurrency.md +270 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/swift6-features.md +265 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/swiftui-patterns.md +314 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +75 -283
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +97 -252
- moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +64 -240
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +331 -12
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +330 -37
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +90 -287
- moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +200 -206
- moai_adk/templates/.claude/skills/moai-platform-auth0/examples.md +2446 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/adaptive-mfa.md +233 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/akamai-integration.md +214 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/application-credentials.md +280 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-log-events.md +224 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-overview.md +140 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/bot-detection.md +144 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/breached-password-detection.md +187 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/brute-force-protection.md +189 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/certifications.md +282 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/compliance-overview.md +263 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/continuous-session-protection.md +307 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/customize-mfa.md +177 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/dpop-implementation.md +283 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/fapi-implementation.md +259 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/gdpr-compliance.md +313 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/guardian-configuration.md +269 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/highly-regulated-identity.md +272 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/jwt-fundamentals.md +248 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mdl-verification.md +210 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-api-management.md +278 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-factors.md +226 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-overview.md +174 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mtls-sender-constraining.md +316 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/ropg-flow-mfa.md +216 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-center.md +325 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-guidance.md +277 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/state-parameters.md +177 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/step-up-authentication.md +251 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/suspicious-ip-throttling.md +240 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/tenant-access-control.md +179 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/webauthn-fido.md +235 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/reference.md +224 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +75 -330
- moai_adk/templates/.claude/skills/moai-platform-clerk/examples.md +1426 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/modules/advanced-patterns.md +417 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/reference.md +273 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +100 -340
- moai_adk/templates/.claude/skills/moai-platform-convex/examples.md +506 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/auth-integration.md +421 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/file-storage.md +474 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/reactive-queries.md +302 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/server-functions.md +452 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/reference.md +385 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +113 -326
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/examples.md +514 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/custom-claims.md +374 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/phone-auth.md +372 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/social-auth.md +339 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/reference.md +382 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +71 -302
- moai_adk/templates/.claude/skills/moai-platform-firestore/examples.md +445 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/offline-cache.md +392 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/realtime-listeners.md +441 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/security-rules.md +352 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/transactions.md +452 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/reference.md +322 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +101 -412
- moai_adk/templates/.claude/skills/moai-platform-neon/examples.md +470 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/auto-scaling.md +349 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/branching-workflows.md +354 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/connection-pooling.md +412 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/pitr-backups.md +458 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/reference.md +272 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +96 -327
- moai_adk/templates/.claude/skills/moai-platform-railway/examples.md +539 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/docker-deployment.md +261 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/multi-service.md +291 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/networking-domains.md +338 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/volumes-storage.md +353 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/reference.md +374 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +103 -428
- moai_adk/templates/.claude/skills/moai-platform-supabase/examples.md +502 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/auth-integration.md +384 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/edge-functions.md +371 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/postgresql-pgvector.md +231 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/realtime-presence.md +354 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/row-level-security.md +286 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/storage-cdn.md +319 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/typescript-patterns.md +453 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/reference.md +284 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +96 -446
- moai_adk/templates/.claude/skills/moai-platform-vercel/examples.md +502 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/analytics-speed.md +348 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/deployment-config.md +344 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/edge-functions.md +222 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/isr-caching.md +306 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/kv-storage.md +399 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/reference.md +360 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/SKILL.md +193 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/examples.md +1099 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/language-specific.md +307 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/pattern-syntax.md +237 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/refactoring-patterns.md +260 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/security-rules.md +239 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/reference.md +288 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/go.yml +90 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/python.yml +101 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/typescript.yml +83 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/complexity-check.yml +94 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/deprecated-apis.yml +84 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/secrets-detection.yml +89 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/sql-injection.yml +45 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/xss-prevention.yml +50 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/sgconfig.yml +54 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +225 -423
- moai_adk/templates/.claude/skills/moai-workflow-loop/SKILL.md +197 -0
- moai_adk/templates/.claude/skills/moai-workflow-loop/examples.md +1063 -0
- moai_adk/templates/.claude/skills/moai-workflow-loop/reference.md +1414 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +211 -314
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +15 -43
- moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +119 -316
- moai_adk/templates/.claude/skills/moai-workflow-spec/modules/advanced-patterns.md +237 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +96 -203
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +201 -388
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +52 -3
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +263 -806
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/context7-integration.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/review-workflows.md +500 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/relevance-analysis.md +154 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/safety-analysis.md +148 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/scoring-algorithms.md +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/timeliness-analysis.md +168 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/truthfulness-analysis.md +136 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/usability-analysis.md +153 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework.md +257 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +191 -1344
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/analysis-patterns.md +340 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/core-classes.md +299 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/tool-integration.md +380 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/debugging-workflows.md +451 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/error-analysis.md +442 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/optimization-patterns.md +473 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/profiling-techniques.md +481 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/ai-optimization.md +241 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/bottleneck-detection.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/optimization-plan.md +315 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/profiler-core.md +277 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/real-time-monitoring.md +187 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +287 -1194
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/quality-metrics.md +415 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/ai-workflows.md +620 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/patterns.md +692 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/security-analysis.md +429 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +262 -1192
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/static-analysis.md +438 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd/core-classes.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/advanced-features.md +494 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/red-green-refactor.md +316 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-generation.md +471 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-patterns.md +371 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +227 -1222
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/trust5-validation.md +428 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/SKILL.md +228 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/integration-patterns.md +149 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/moai-adk-integration.md +245 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-advanced.md +310 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-development.md +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-workflows.md +302 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/registry-architecture.md +271 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/resource-optimization.md +300 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/tools-integration.md +280 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/troubleshooting.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-commands.md +296 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-management.md +217 -0
- moai_adk/templates/.git-hooks/pre-push +162 -59
- moai_adk/templates/.github/workflows/ci-universal.yml +934 -133
- moai_adk/templates/.gitignore +65 -107
- moai_adk/templates/.lsp.json +152 -0
- moai_adk/templates/.mcp.json +2 -20
- moai_adk/templates/.moai/announcements/en.json +18 -0
- moai_adk/templates/.moai/announcements/ja.json +18 -0
- moai_adk/templates/.moai/announcements/ko.json +18 -0
- moai_adk/templates/.moai/announcements/zh.json +18 -0
- moai_adk/templates/.moai/config/config.yaml +8 -2
- moai_adk/templates/.moai/config/multilingual-triggers.yaml +213 -0
- moai_adk/templates/.moai/config/sections/language.yaml +2 -2
- moai_adk/templates/.moai/config/sections/llm.yaml +41 -0
- moai_adk/templates/.moai/config/sections/pricing.yaml +30 -0
- moai_adk/templates/.moai/config/sections/project.yaml +2 -2
- moai_adk/templates/.moai/config/sections/quality.yaml +43 -5
- moai_adk/templates/.moai/config/sections/ralph.yaml +55 -0
- moai_adk/templates/.moai/config/sections/system.yaml +46 -1
- moai_adk/templates/.moai/config/sections/user.yaml +1 -1
- moai_adk/templates/.moai/config/statusline-config.yaml +2 -2
- moai_adk/templates/.moai/llm-configs/glm.json +22 -0
- moai_adk/templates/CLAUDE.ja.md +343 -0
- moai_adk/templates/CLAUDE.ko.md +343 -0
- moai_adk/templates/CLAUDE.md +200 -499
- moai_adk/templates/CLAUDE.zh.md +343 -0
- moai_adk/utils/common.py +37 -0
- moai_adk/version.py +1 -1
- moai_adk-1.1.0.dist-info/METADATA +2443 -0
- moai_adk-1.1.0.dist-info/RECORD +701 -0
- {moai_adk-0.34.0.dist-info → moai_adk-1.1.0.dist-info}/entry_points.txt +2 -0
- moai_adk-1.1.0.dist-info/licenses/LICENSE +99 -0
- moai_adk/core/config/auto_spec_config.py +0 -340
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +0 -901
- moai_adk/core/spec/confidence_scoring.py +0 -680
- moai_adk/core/spec/ears_template_engine.py +0 -1247
- moai_adk/core/spec/quality_validator.py +0 -687
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +0 -670
- moai_adk/templates/.claude/agents/moai/expert-database.md +0 -777
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +0 -1041
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +0 -458
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +0 -1607
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +0 -789
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +0 -469
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +0 -1032
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +0 -438
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +0 -431
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +0 -405
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +0 -336
- moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +0 -402
- moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +0 -607
- moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +0 -300
- moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +0 -537
- moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +0 -520
- moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +0 -574
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +0 -317
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +0 -663
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +0 -190
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +0 -175
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +0 -196
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +0 -17
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +0 -158
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +0 -340
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +0 -713
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +0 -538
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +0 -1336
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +0 -730
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +0 -608
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +0 -1005
- moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +0 -436
- moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +0 -411
- moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +0 -982
- moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +0 -778
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +0 -646
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +0 -782
- moai_adk/templates/.moai/config/questions/_schema.yaml +0 -151
- moai_adk/templates/.moai/config/questions/tab0-init.yaml +0 -251
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +0 -108
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +0 -81
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +0 -634
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +0 -170
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +0 -87
- moai_adk/templates/.moai/scripts/setup-glm.py +0 -136
- moai_adk-0.34.0.dist-info/METADATA +0 -2999
- moai_adk-0.34.0.dist-info/RECORD +0 -463
- moai_adk-0.34.0.dist-info/licenses/LICENSE +0 -21
- /moai_adk/foundation/{git.py → git/__init__.py} +0 -0
- /moai_adk/templates/.claude/skills/moai-library-mermaid/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-library-mermaid/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-library-nextra/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-testing/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-testing/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/examples.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/reference.md +0 -0
- {moai_adk-0.34.0.dist-info → moai_adk-1.1.0.dist-info}/WHEEL +0 -0
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Purpose: Automated quality gates ensuring code quality, security, maintainability, and traceability through five core principles.
|
|
4
4
|
|
|
5
|
-
Version:
|
|
6
|
-
Last Updated:
|
|
5
|
+
Version: 2.0.0 (Modular Split)
|
|
6
|
+
Last Updated: 2026-01-06
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -18,22 +18,26 @@ TRUST 5 is MoAI-ADK's comprehensive quality assurance framework enforcing five p
|
|
|
18
18
|
5. Trackable(T) - Clear commits, requirement traceability
|
|
19
19
|
|
|
20
20
|
Integration Points:
|
|
21
|
-
- Pre-commit hooks
|
|
22
|
-
- CI/CD pipelines
|
|
23
|
-
- quality-gate agent
|
|
24
|
-
- /moai:2-run
|
|
21
|
+
- Pre-commit hooks - Automated validation
|
|
22
|
+
- CI/CD pipelines - Quality gate enforcement
|
|
23
|
+
- quality-gate agent - TRUST 5 validation
|
|
24
|
+
- /moai:2-run - Enforces ≥85% coverage
|
|
25
25
|
|
|
26
26
|
Quick Validation:
|
|
27
27
|
```python
|
|
28
28
|
validations = [
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
test_coverage >= 85, # T
|
|
30
|
+
complexity <= 10, # R
|
|
31
|
+
consistency > 90, # U
|
|
32
|
+
security_score == 100, # S
|
|
33
|
+
has_clear_commits # T
|
|
34
34
|
]
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
+
Extended Documentation:
|
|
38
|
+
- [Implementation Details](trust-5-implementation.md) - Detailed patterns and code examples
|
|
39
|
+
- [Validation Framework](trust-5-validation.md) - CI/CD integration and metrics
|
|
40
|
+
|
|
37
41
|
---
|
|
38
42
|
|
|
39
43
|
## Implementation Guide (5 minutes)
|
|
@@ -44,67 +48,27 @@ RED-GREEN-REFACTOR Cycle:
|
|
|
44
48
|
|
|
45
49
|
```
|
|
46
50
|
RED Phase: Write failing test
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
51
|
+
Test defines requirement
|
|
52
|
+
Code doesn't exist yet
|
|
53
|
+
Test fails as expected
|
|
50
54
|
|
|
51
55
|
GREEN Phase: Write minimal code
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
56
|
+
Simplest code to pass test
|
|
57
|
+
Focus on making test pass
|
|
58
|
+
Test now passes
|
|
55
59
|
|
|
56
60
|
REFACTOR Phase: Improve quality
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
+
Extract functions/classes
|
|
62
|
+
Optimize performance
|
|
63
|
+
Add documentation
|
|
64
|
+
Keep tests passing
|
|
61
65
|
```
|
|
62
66
|
|
|
63
67
|
Test Coverage Requirements:
|
|
64
68
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
| Warning | 70-84% | Review required |
|
|
69
|
-
| Failing | <70% | Block merge, generate tests |
|
|
70
|
-
|
|
71
|
-
Implementation Pattern:
|
|
72
|
-
|
|
73
|
-
```python
|
|
74
|
-
# RED: Write failing test first
|
|
75
|
-
def test_calculate_total_price_with_tax():
|
|
76
|
-
item = ShoppingItem(name="Widget", price=10.00)
|
|
77
|
-
total = calculate_total_with_tax(item, tax_rate=0.10)
|
|
78
|
-
assert total == 11.00 # Fails - function doesn't exist
|
|
79
|
-
|
|
80
|
-
# GREEN: Minimal implementation
|
|
81
|
-
def calculate_total_with_tax(item, tax_rate):
|
|
82
|
-
return item.price * (1 + tax_rate)
|
|
83
|
-
|
|
84
|
-
# REFACTOR: Improve code quality
|
|
85
|
-
def calculate_total_with_tax(item: ShoppingItem, tax_rate: float) -> float:
|
|
86
|
-
"""Calculate total price including tax.
|
|
87
|
-
|
|
88
|
-
Args:
|
|
89
|
-
item: Shopping item with price
|
|
90
|
-
tax_rate: Tax rate as decimal (0.10 = 10%)
|
|
91
|
-
|
|
92
|
-
Returns:
|
|
93
|
-
Total price including tax
|
|
94
|
-
|
|
95
|
-
Raises:
|
|
96
|
-
ValueError: If tax_rate not between 0 and 1
|
|
97
|
-
|
|
98
|
-
Example:
|
|
99
|
-
>>> item = ShoppingItem("Widget", 10.00)
|
|
100
|
-
>>> calculate_total_with_tax(item, 0.10)
|
|
101
|
-
11.0
|
|
102
|
-
"""
|
|
103
|
-
if not 0 <= tax_rate <= 1:
|
|
104
|
-
raise ValueError("Tax rate must be between 0 and 1")
|
|
105
|
-
|
|
106
|
-
return item.price * (1 + tax_rate)
|
|
107
|
-
```
|
|
69
|
+
- Critical (≥85%): Required for merge
|
|
70
|
+
- Warning (70-84%): Review required
|
|
71
|
+
- Failing (<70%): Block merge, generate tests
|
|
108
72
|
|
|
109
73
|
Validation Commands:
|
|
110
74
|
```bash
|
|
@@ -113,9 +77,6 @@ pytest --cov=src --cov-report=html --cov-fail-under=85
|
|
|
113
77
|
|
|
114
78
|
# Generate coverage report
|
|
115
79
|
coverage report -m
|
|
116
|
-
|
|
117
|
-
# Show missing lines
|
|
118
|
-
coverage html && open htmlcov/index.html
|
|
119
80
|
```
|
|
120
81
|
|
|
121
82
|
---
|
|
@@ -124,68 +85,21 @@ coverage html && open htmlcov/index.html
|
|
|
124
85
|
|
|
125
86
|
Readability Metrics:
|
|
126
87
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
| Comment Ratio | 15-20% | custom | Min 10% |
|
|
133
|
-
| Type Hint Coverage | 100% | mypy | 90% |
|
|
88
|
+
- Cyclomatic Complexity: ≤10 (max 15)
|
|
89
|
+
- Function Length: ≤50 lines (max 100)
|
|
90
|
+
- Nesting Depth: ≤3 levels (max 5)
|
|
91
|
+
- Comment Ratio: 15-20% (min 10%)
|
|
92
|
+
- Type Hint Coverage: 100% (min 90%)
|
|
134
93
|
|
|
135
94
|
Readability Checklist:
|
|
136
95
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
SOLID principles followed
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
Example - Bad vs Good:
|
|
148
|
-
|
|
149
|
-
```python
|
|
150
|
-
# BAD: Unreadable, no types, magic numbers
|
|
151
|
-
def calc(x, y):
|
|
152
|
-
if x > 0:
|
|
153
|
-
if y > 0:
|
|
154
|
-
if x + y < 100:
|
|
155
|
-
return x * 1.1 + y * 0.9
|
|
156
|
-
return 0
|
|
157
|
-
|
|
158
|
-
# GOOD: Readable, typed, constants
|
|
159
|
-
TAX_RATE = 0.10
|
|
160
|
-
DISCOUNT_RATE = 0.10
|
|
161
|
-
MAX_TOTAL = 100.00
|
|
162
|
-
|
|
163
|
-
def calculate_order_total(
|
|
164
|
-
base_amount: float,
|
|
165
|
-
discount_amount: float
|
|
166
|
-
) -> float:
|
|
167
|
-
"""Calculate order total with tax and discount.
|
|
168
|
-
|
|
169
|
-
Args:
|
|
170
|
-
base_amount: Base order amount before tax
|
|
171
|
-
discount_amount: Discount amount to apply
|
|
172
|
-
|
|
173
|
-
Returns:
|
|
174
|
-
Final order total with tax applied
|
|
175
|
-
|
|
176
|
-
Raises:
|
|
177
|
-
ValueError: If amounts are negative or exceed max
|
|
178
|
-
"""
|
|
179
|
-
if base_amount < 0 or discount_amount < 0:
|
|
180
|
-
raise ValueError("Amounts must be non-negative")
|
|
181
|
-
|
|
182
|
-
subtotal = base_amount - discount_amount
|
|
183
|
-
|
|
184
|
-
if subtotal > MAX_TOTAL:
|
|
185
|
-
raise ValueError(f"Total exceeds maximum {MAX_TOTAL}")
|
|
186
|
-
|
|
187
|
-
return subtotal * (1 + TAX_RATE)
|
|
188
|
-
```
|
|
96
|
+
- Clear function/variable names (noun_verb pattern)
|
|
97
|
+
- Single responsibility principle
|
|
98
|
+
- Type hints on all parameters and returns
|
|
99
|
+
- Docstrings with examples (Google style)
|
|
100
|
+
- No magic numbers (use named constants)
|
|
101
|
+
- DRY principle applied (no code duplication)
|
|
102
|
+
- SOLID principles followed
|
|
189
103
|
|
|
190
104
|
Validation Commands:
|
|
191
105
|
```bash
|
|
@@ -205,66 +119,29 @@ mypy src/ --strict
|
|
|
205
119
|
|
|
206
120
|
Consistency Requirements:
|
|
207
121
|
|
|
208
|
-
```
|
|
209
122
|
Architecture Consistency:
|
|
210
|
-
Same pattern across all modules
|
|
211
|
-
Same error handling approach
|
|
212
|
-
Same logging strategy
|
|
213
|
-
Same naming conventions
|
|
123
|
+
- Same pattern across all modules
|
|
124
|
+
- Same error handling approach
|
|
125
|
+
- Same logging strategy
|
|
126
|
+
- Same naming conventions
|
|
214
127
|
|
|
215
128
|
Testing Consistency:
|
|
216
|
-
Same test structure (Arrange-Act-Assert)
|
|
217
|
-
Same fixtures/factories
|
|
218
|
-
Same assertion patterns
|
|
219
|
-
Same mock strategies
|
|
129
|
+
- Same test structure (Arrange-Act-Assert)
|
|
130
|
+
- Same fixtures/factories
|
|
131
|
+
- Same assertion patterns
|
|
132
|
+
- Same mock strategies
|
|
220
133
|
|
|
221
134
|
Documentation Consistency:
|
|
222
|
-
Same docstring format (Google style)
|
|
223
|
-
Same README structure
|
|
224
|
-
Same API documentation
|
|
225
|
-
Same changelog format (conventional commits)
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
Pattern Enforcement:
|
|
229
|
-
|
|
230
|
-
```python
|
|
231
|
-
# Standard error handling pattern
|
|
232
|
-
class DomainError(Exception):
|
|
233
|
-
"""Base error for domain-specific errors."""
|
|
234
|
-
pass
|
|
235
|
-
|
|
236
|
-
class ValidationError(DomainError):
|
|
237
|
-
"""Validation failed."""
|
|
238
|
-
pass
|
|
239
|
-
|
|
240
|
-
def process_data(data: dict) -> Result:
|
|
241
|
-
"""Standard processing pattern."""
|
|
242
|
-
try:
|
|
243
|
-
# 1. Validate input
|
|
244
|
-
validated = validate_input(data)
|
|
245
|
-
|
|
246
|
-
# 2. Process
|
|
247
|
-
result = perform_processing(validated)
|
|
248
|
-
|
|
249
|
-
# 3. Return result
|
|
250
|
-
return Result(success=True, data=result)
|
|
251
|
-
|
|
252
|
-
except ValidationError as e:
|
|
253
|
-
logger.error(f"Validation failed: {e}")
|
|
254
|
-
raise
|
|
255
|
-
except Exception as e:
|
|
256
|
-
logger.exception(f"Processing failed: {e}")
|
|
257
|
-
raise DomainError(f"Processing failed: {e}") from e
|
|
258
|
-
```
|
|
135
|
+
- Same docstring format (Google style)
|
|
136
|
+
- Same README structure
|
|
137
|
+
- Same API documentation
|
|
138
|
+
- Same changelog format (conventional commits)
|
|
259
139
|
|
|
260
140
|
Validation Tools:
|
|
261
141
|
```bash
|
|
262
142
|
# Check architecture compliance
|
|
263
143
|
python .moai/scripts/validate_architecture.py
|
|
264
144
|
|
|
265
|
-
# Verify naming conventions
|
|
266
|
-
grep -r "def [A-Z]" src/ && echo "Found camelCase functions!"
|
|
267
|
-
|
|
268
145
|
# Check consistent imports
|
|
269
146
|
isort --check-only src/
|
|
270
147
|
```
|
|
@@ -275,93 +152,16 @@ isort --check-only src/
|
|
|
275
152
|
|
|
276
153
|
OWASP Top 10 (2024) Compliance:
|
|
277
154
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
| Logging Failures | Comprehensive logging | Log analysis |
|
|
289
|
-
| SSRF | URL validation | Security test |
|
|
290
|
-
|
|
291
|
-
Security Patterns:
|
|
292
|
-
|
|
293
|
-
```python
|
|
294
|
-
# 1. Broken Access Control - RBAC implementation
|
|
295
|
-
from functools import wraps
|
|
296
|
-
|
|
297
|
-
def require_permission(permission: str):
|
|
298
|
-
"""Decorator to enforce permission checks."""
|
|
299
|
-
def decorator(func):
|
|
300
|
-
@wraps(func)
|
|
301
|
-
def wrapper(user: User, *args, kwargs):
|
|
302
|
-
if not user.has_permission(permission):
|
|
303
|
-
raise UnauthorizedError(
|
|
304
|
-
f"User lacks permission: {permission}"
|
|
305
|
-
)
|
|
306
|
-
return func(user, *args, kwargs)
|
|
307
|
-
return wrapper
|
|
308
|
-
return decorator
|
|
309
|
-
|
|
310
|
-
@require_permission("user:update")
|
|
311
|
-
def update_user_profile(user: User, profile_data: dict) -> UserProfile:
|
|
312
|
-
"""Update user profile (requires permission)."""
|
|
313
|
-
return user.update_profile(profile_data)
|
|
314
|
-
|
|
315
|
-
# 2. Cryptographic Failures - Secure password hashing
|
|
316
|
-
from bcrypt import hashpw, gensalt, checkpw
|
|
317
|
-
|
|
318
|
-
def hash_password(plaintext: str) -> str:
|
|
319
|
-
"""Hash password securely with bcrypt."""
|
|
320
|
-
salt = gensalt(rounds=12) # Adaptive cost factor
|
|
321
|
-
return hashpw(plaintext.encode('utf-8'), salt).decode('utf-8')
|
|
322
|
-
|
|
323
|
-
def verify_password(plaintext: str, hashed: str) -> bool:
|
|
324
|
-
"""Verify password against hash."""
|
|
325
|
-
return checkpw(
|
|
326
|
-
plaintext.encode('utf-8'),
|
|
327
|
-
hashed.encode('utf-8')
|
|
328
|
-
)
|
|
329
|
-
|
|
330
|
-
# 3. Injection Prevention - Parameterized queries
|
|
331
|
-
from sqlalchemy import text
|
|
332
|
-
|
|
333
|
-
def safe_user_query(username: str) -> List[User]:
|
|
334
|
-
"""Query users safely with parameterized query."""
|
|
335
|
-
query = text("SELECT * FROM users WHERE username = :username")
|
|
336
|
-
return db.session.execute(
|
|
337
|
-
query,
|
|
338
|
-
{"username": username} # Parameterized, not concatenated
|
|
339
|
-
).fetchall()
|
|
340
|
-
|
|
341
|
-
# 4. Security Misconfiguration - Environment-based config
|
|
342
|
-
import os
|
|
343
|
-
from pathlib import Path
|
|
344
|
-
|
|
345
|
-
def load_secure_config() -> dict:
|
|
346
|
-
"""Load configuration from environment variables."""
|
|
347
|
-
config = {
|
|
348
|
-
'DEBUG': os.getenv('DEBUG', 'false').lower() == 'true',
|
|
349
|
-
'DATABASE_URL': os.getenv('DATABASE_URL'),
|
|
350
|
-
'SECRET_KEY': os.getenv('SECRET_KEY'),
|
|
351
|
-
'ALLOWED_HOSTS': os.getenv('ALLOWED_HOSTS', '').split(',')
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
# Validate required configs
|
|
355
|
-
required = ['DATABASE_URL', 'SECRET_KEY']
|
|
356
|
-
for key in required:
|
|
357
|
-
if not config.get(key):
|
|
358
|
-
raise ValueError(f"Required config missing: {key}")
|
|
359
|
-
|
|
360
|
-
# Never expose secrets in logs
|
|
361
|
-
logger.info(f"Config loaded (DEBUG={config['DEBUG']})")
|
|
362
|
-
|
|
363
|
-
return config
|
|
364
|
-
```
|
|
155
|
+
1. Broken Access Control - RBAC, permission checks
|
|
156
|
+
2. Cryptographic Failures - bcrypt, proper encryption
|
|
157
|
+
3. Injection - Parameterized queries
|
|
158
|
+
4. Insecure Design - Threat modeling
|
|
159
|
+
5. Security Misconfiguration - Environment variables
|
|
160
|
+
6. Vulnerable Components - Dependency scanning
|
|
161
|
+
7. Authentication Failures - MFA, secure sessions
|
|
162
|
+
8. Data Integrity - Checksums, signatures
|
|
163
|
+
9. Logging Failures - Comprehensive logging
|
|
164
|
+
10. SSRF - URL validation
|
|
365
165
|
|
|
366
166
|
Security Validation:
|
|
367
167
|
```bash
|
|
@@ -372,9 +172,6 @@ bandit -r src/ -ll
|
|
|
372
172
|
pip-audit
|
|
373
173
|
safety check
|
|
374
174
|
|
|
375
|
-
# OWASP ZAP scan (for APIs)
|
|
376
|
-
zap-cli quick-scan http://localhost:8000
|
|
377
|
-
|
|
378
175
|
# Secret scanning
|
|
379
176
|
detect-secrets scan
|
|
380
177
|
```
|
|
@@ -385,571 +182,37 @@ detect-secrets scan
|
|
|
385
182
|
|
|
386
183
|
Traceability Requirements:
|
|
387
184
|
|
|
388
|
-
```
|
|
389
185
|
Commit Traceability:
|
|
390
|
-
Conventional commit format
|
|
391
|
-
Link to SPEC or issue
|
|
392
|
-
Clear description of changes
|
|
393
|
-
Test evidence included
|
|
186
|
+
- Conventional commit format
|
|
187
|
+
- Link to SPEC or issue
|
|
188
|
+
- Clear description of changes
|
|
189
|
+
- Test evidence included
|
|
394
190
|
|
|
395
191
|
Requirement Traceability:
|
|
396
|
-
SPEC-XXX-REQ-YY mapping
|
|
397
|
-
Implementation
|
|
398
|
-
Test
|
|
399
|
-
Acceptance
|
|
400
|
-
|
|
401
|
-
Quality Traceability:
|
|
402
|
-
Coverage reports
|
|
403
|
-
Quality metrics dashboard
|
|
404
|
-
CI/CD pipeline results
|
|
405
|
-
Code review history
|
|
406
|
-
```
|
|
192
|
+
- SPEC-XXX-REQ-YY mapping
|
|
193
|
+
- Implementation - Test linkage
|
|
194
|
+
- Test - Acceptance criteria
|
|
195
|
+
- Acceptance - User story
|
|
407
196
|
|
|
408
197
|
Conventional Commit Format:
|
|
409
|
-
|
|
410
198
|
```bash
|
|
411
199
|
# Format: <type>(<scope>): <subject>
|
|
412
|
-
#
|
|
413
|
-
# <body>
|
|
414
|
-
#
|
|
415
|
-
# <footer>
|
|
416
|
-
|
|
417
|
-
# Examples:
|
|
418
200
|
feat(auth): Add OAuth2 integration
|
|
419
201
|
|
|
420
202
|
Implement OAuth2 authentication flow with Google provider.
|
|
421
203
|
Addresses SPEC-001-REQ-02.
|
|
422
204
|
|
|
423
|
-
- Add OAuth2 client configuration
|
|
424
|
-
- Implement callback handling
|
|
425
|
-
- Add token validation
|
|
426
|
-
- Test coverage: 92%
|
|
427
|
-
|
|
428
205
|
Closes #42
|
|
429
|
-
|
|
430
|
-
---
|
|
431
|
-
|
|
432
|
-
fix(api): Resolve JWT token expiry bug
|
|
433
|
-
|
|
434
|
-
JWT tokens were expiring 1 hour early due to timezone issue.
|
|
435
|
-
Fixes SPEC-001-REQ-03.
|
|
436
|
-
|
|
437
|
-
- Correct timezone handling in token generation
|
|
438
|
-
- Add expiry validation tests
|
|
439
|
-
- Update API documentation
|
|
440
|
-
|
|
441
|
-
Fixes #58
|
|
442
|
-
|
|
443
|
-
---
|
|
444
|
-
|
|
445
|
-
refactor(database): Optimize query performance
|
|
446
|
-
|
|
447
|
-
Improve query performance by adding database indexes.
|
|
448
|
-
Related to SPEC-005-REQ-01.
|
|
449
|
-
|
|
450
|
-
- Add indexes on frequently queried columns
|
|
451
|
-
- Reduce query time by 70%
|
|
452
|
-
- Add performance benchmarks
|
|
453
|
-
|
|
454
|
-
Performance improvement from 500ms → 150ms average query time.
|
|
455
|
-
```
|
|
456
|
-
|
|
457
|
-
Traceability Matrix:
|
|
458
|
-
|
|
459
|
-
```yaml
|
|
460
|
-
# .moai/specs/traceability.yaml
|
|
461
|
-
requirements:
|
|
462
|
-
SPEC-001-REQ-01:
|
|
463
|
-
description: "User registration with email/password"
|
|
464
|
-
implementation:
|
|
465
|
-
- src/auth/registration.py::register_user
|
|
466
|
-
- src/models/user.py::User
|
|
467
|
-
tests:
|
|
468
|
-
- tests/auth/test_registration.py::test_register_user_success
|
|
469
|
-
- tests/auth/test_registration.py::test_register_user_duplicate
|
|
470
|
-
coverage: 95%
|
|
471
|
-
status: Implemented
|
|
472
|
-
|
|
473
|
-
SPEC-001-REQ-02:
|
|
474
|
-
description: "OAuth2 authentication"
|
|
475
|
-
implementation:
|
|
476
|
-
- src/auth/oauth2.py::OAuth2Handler
|
|
477
|
-
- src/auth/providers/google.py::GoogleOAuth2Provider
|
|
478
|
-
tests:
|
|
479
|
-
- tests/auth/test_oauth2.py::test_oauth2_flow
|
|
480
|
-
- tests/auth/test_oauth2.py::test_token_validation
|
|
481
|
-
coverage: 92%
|
|
482
|
-
status: Implemented
|
|
483
|
-
|
|
484
|
-
SPEC-001-REQ-03:
|
|
485
|
-
description: "JWT token generation and validation"
|
|
486
|
-
implementation:
|
|
487
|
-
- src/auth/jwt_manager.py::JWTManager
|
|
488
|
-
tests:
|
|
489
|
-
- tests/auth/test_jwt.py::test_token_generation
|
|
490
|
-
- tests/auth/test_jwt.py::test_token_validation
|
|
491
|
-
- tests/auth/test_jwt.py::test_token_expiry
|
|
492
|
-
coverage: 98%
|
|
493
|
-
status: Implemented
|
|
494
206
|
```
|
|
495
207
|
|
|
496
208
|
---
|
|
497
209
|
|
|
498
|
-
## Advanced
|
|
499
|
-
|
|
500
|
-
### TRUST 5 CI/CD Integration
|
|
501
|
-
|
|
502
|
-
Complete Quality Gate Pipeline:
|
|
503
|
-
|
|
504
|
-
```yaml
|
|
505
|
-
# .github/workflows/trust-5-quality-gates.yml
|
|
506
|
-
name: TRUST 5 Quality Gates
|
|
507
|
-
|
|
508
|
-
on:
|
|
509
|
-
pull_request:
|
|
510
|
-
branches: [main, develop]
|
|
511
|
-
push:
|
|
512
|
-
branches: [main, develop]
|
|
513
|
-
|
|
514
|
-
jobs:
|
|
515
|
-
test-first:
|
|
516
|
-
name: "T1: Test Coverage ≥85%"
|
|
517
|
-
runs-on: ubuntu-latest
|
|
518
|
-
steps:
|
|
519
|
-
- uses: actions/checkout@v4
|
|
520
|
-
|
|
521
|
-
- name: Set up Python
|
|
522
|
-
uses: actions/setup-python@v4
|
|
523
|
-
with:
|
|
524
|
-
python-version: '3.13'
|
|
525
|
-
|
|
526
|
-
- name: Install dependencies
|
|
527
|
-
run: |
|
|
528
|
-
pip install -r requirements.txt
|
|
529
|
-
pip install pytest pytest-cov
|
|
530
|
-
|
|
531
|
-
- name: Run tests with coverage
|
|
532
|
-
run: |
|
|
533
|
-
pytest --cov=src --cov-report=xml --cov-fail-under=85
|
|
534
|
-
|
|
535
|
-
- name: Upload coverage to Codecov
|
|
536
|
-
uses: codecov/codecov-action@v3
|
|
537
|
-
with:
|
|
538
|
-
file: ./coverage.xml
|
|
539
|
-
fail_ci_if_error: true
|
|
540
|
-
|
|
541
|
-
readable:
|
|
542
|
-
name: "R: Code Quality ≥8.0"
|
|
543
|
-
runs-on: ubuntu-latest
|
|
544
|
-
steps:
|
|
545
|
-
- uses: actions/checkout@v4
|
|
546
|
-
|
|
547
|
-
- name: Pylint check
|
|
548
|
-
run: |
|
|
549
|
-
pip install pylint
|
|
550
|
-
pylint src/ --fail-under=8.0
|
|
551
|
-
|
|
552
|
-
- name: Black format check
|
|
553
|
-
run: |
|
|
554
|
-
pip install black
|
|
555
|
-
black --check src/
|
|
556
|
-
|
|
557
|
-
- name: MyPy type check
|
|
558
|
-
run: |
|
|
559
|
-
pip install mypy
|
|
560
|
-
mypy src/ --strict
|
|
561
|
-
|
|
562
|
-
unified:
|
|
563
|
-
name: "U: Consistency ≥90%"
|
|
564
|
-
runs-on: ubuntu-latest
|
|
565
|
-
steps:
|
|
566
|
-
- uses: actions/checkout@v4
|
|
567
|
-
|
|
568
|
-
- name: Architecture validation
|
|
569
|
-
run: |
|
|
570
|
-
python .moai/scripts/validate_architecture.py
|
|
571
|
-
|
|
572
|
-
- name: Import consistency
|
|
573
|
-
run: |
|
|
574
|
-
pip install isort
|
|
575
|
-
isort --check-only src/
|
|
576
|
-
|
|
577
|
-
- name: Naming convention check
|
|
578
|
-
run: |
|
|
579
|
-
python .moai/scripts/check_naming_conventions.py
|
|
580
|
-
|
|
581
|
-
secured:
|
|
582
|
-
name: "S: Security Score 100"
|
|
583
|
-
runs-on: ubuntu-latest
|
|
584
|
-
steps:
|
|
585
|
-
- uses: actions/checkout@v4
|
|
586
|
-
|
|
587
|
-
- name: Bandit security scan
|
|
588
|
-
run: |
|
|
589
|
-
pip install bandit
|
|
590
|
-
bandit -r src/ -ll
|
|
591
|
-
|
|
592
|
-
- name: Dependency audit
|
|
593
|
-
run: |
|
|
594
|
-
pip install pip-audit safety
|
|
595
|
-
pip-audit
|
|
596
|
-
safety check
|
|
597
|
-
|
|
598
|
-
- name: Secret scanning
|
|
599
|
-
run: |
|
|
600
|
-
pip install detect-secrets
|
|
601
|
-
detect-secrets scan --baseline .secrets.baseline
|
|
602
|
-
|
|
603
|
-
trackable:
|
|
604
|
-
name: "T2: Traceability Check"
|
|
605
|
-
runs-on: ubuntu-latest
|
|
606
|
-
steps:
|
|
607
|
-
- uses: actions/checkout@v4
|
|
608
|
-
|
|
609
|
-
- name: Validate commit messages
|
|
610
|
-
run: |
|
|
611
|
-
python .moai/scripts/validate_commits.py
|
|
612
|
-
|
|
613
|
-
- name: Check requirement traceability
|
|
614
|
-
run: |
|
|
615
|
-
python .moai/scripts/check_traceability.py
|
|
616
|
-
|
|
617
|
-
- name: Generate traceability report
|
|
618
|
-
run: |
|
|
619
|
-
python .moai/scripts/generate_traceability_report.py
|
|
620
|
-
|
|
621
|
-
quality-gate:
|
|
622
|
-
name: "Final Quality Gate"
|
|
623
|
-
needs: [test-first, readable, unified, secured, trackable]
|
|
624
|
-
runs-on: ubuntu-latest
|
|
625
|
-
steps:
|
|
626
|
-
- name: All gates passed
|
|
627
|
-
run: echo " TRUST 5 quality gates passed!"
|
|
628
|
-
```
|
|
629
|
-
|
|
630
|
-
### TRUST 5 Validation Framework
|
|
631
|
-
|
|
632
|
-
Comprehensive Validator Implementation:
|
|
210
|
+
## Advanced Patterns
|
|
633
211
|
|
|
634
|
-
|
|
635
|
-
from dataclasses import dataclass
|
|
636
|
-
from typing import List, Dict, Any
|
|
637
|
-
import subprocess
|
|
638
|
-
import re
|
|
639
|
-
|
|
640
|
-
@dataclass
|
|
641
|
-
class ValidationResult:
|
|
642
|
-
"""Result of TRUST 5 validation."""
|
|
643
|
-
passed: bool
|
|
644
|
-
test_coverage: float
|
|
645
|
-
code_quality: float
|
|
646
|
-
consistency_score: float
|
|
647
|
-
security_score: int
|
|
648
|
-
traceability_score: float
|
|
649
|
-
issues: List[str]
|
|
650
|
-
warnings: List[str]
|
|
651
|
-
|
|
652
|
-
def overall_score(self) -> float:
|
|
653
|
-
"""Calculate overall TRUST 5 score."""
|
|
654
|
-
weights = {
|
|
655
|
-
'test': 0.20,
|
|
656
|
-
'quality': 0.20,
|
|
657
|
-
'consistency': 0.20,
|
|
658
|
-
'security': 0.20,
|
|
659
|
-
'traceability': 0.20
|
|
660
|
-
}
|
|
661
|
-
return (
|
|
662
|
-
self.test_coverage * weights['test'] +
|
|
663
|
-
self.code_quality * weights['quality'] +
|
|
664
|
-
self.consistency_score * weights['consistency'] +
|
|
665
|
-
self.security_score * weights['security'] +
|
|
666
|
-
self.traceability_score * weights['traceability']
|
|
667
|
-
)
|
|
668
|
-
|
|
669
|
-
class TRUST5Validator:
|
|
670
|
-
"""Comprehensive TRUST 5 validation engine."""
|
|
671
|
-
|
|
672
|
-
def __init__(self, src_dir: str = "src/"):
|
|
673
|
-
self.src_dir = src_dir
|
|
674
|
-
self.result = ValidationResult(
|
|
675
|
-
passed=False,
|
|
676
|
-
test_coverage=0.0,
|
|
677
|
-
code_quality=0.0,
|
|
678
|
-
consistency_score=0.0,
|
|
679
|
-
security_score=0,
|
|
680
|
-
traceability_score=0.0,
|
|
681
|
-
issues=[],
|
|
682
|
-
warnings=[]
|
|
683
|
-
)
|
|
684
|
-
|
|
685
|
-
def validate_all(self) -> ValidationResult:
|
|
686
|
-
"""Run all TRUST 5 validations."""
|
|
687
|
-
# T1: Test-first
|
|
688
|
-
self._validate_test_coverage()
|
|
689
|
-
|
|
690
|
-
# R: Readable
|
|
691
|
-
self._validate_readability()
|
|
692
|
-
|
|
693
|
-
# U: Unified
|
|
694
|
-
self._validate_consistency()
|
|
695
|
-
|
|
696
|
-
# S: Secured
|
|
697
|
-
self._validate_security()
|
|
698
|
-
|
|
699
|
-
# T2: Trackable
|
|
700
|
-
self._validate_traceability()
|
|
701
|
-
|
|
702
|
-
# Final gate
|
|
703
|
-
self.result.passed = all([
|
|
704
|
-
self.result.test_coverage >= 85,
|
|
705
|
-
self.result.code_quality >= 8.0,
|
|
706
|
-
self.result.consistency_score >= 90,
|
|
707
|
-
self.result.security_score == 100,
|
|
708
|
-
self.result.traceability_score >= 80
|
|
709
|
-
])
|
|
710
|
-
|
|
711
|
-
return self.result
|
|
712
|
-
|
|
713
|
-
def _validate_test_coverage(self):
|
|
714
|
-
"""Validate test coverage ≥85%."""
|
|
715
|
-
try:
|
|
716
|
-
result = subprocess.run(
|
|
717
|
-
["pytest", "--cov", self.src_dir, "--cov-report=json"],
|
|
718
|
-
capture_output=True,
|
|
719
|
-
text=True,
|
|
720
|
-
check=False
|
|
721
|
-
)
|
|
722
|
-
|
|
723
|
-
import json
|
|
724
|
-
with open("coverage.json") as f:
|
|
725
|
-
coverage_data = json.load(f)
|
|
726
|
-
|
|
727
|
-
self.result.test_coverage = coverage_data['totals']['percent_covered']
|
|
728
|
-
|
|
729
|
-
if self.result.test_coverage < 85:
|
|
730
|
-
self.result.issues.append(
|
|
731
|
-
f"Test coverage {self.result.test_coverage:.1f}% < 85% required"
|
|
732
|
-
)
|
|
733
|
-
|
|
734
|
-
except Exception as e:
|
|
735
|
-
self.result.issues.append(f"Coverage validation failed: {e}")
|
|
736
|
-
|
|
737
|
-
def _validate_readability(self):
|
|
738
|
-
"""Validate code quality with pylint."""
|
|
739
|
-
try:
|
|
740
|
-
result = subprocess.run(
|
|
741
|
-
["pylint", self.src_dir, "--output-format=json"],
|
|
742
|
-
capture_output=True,
|
|
743
|
-
text=True,
|
|
744
|
-
check=False
|
|
745
|
-
)
|
|
746
|
-
|
|
747
|
-
import json
|
|
748
|
-
pylint_output = json.loads(result.stdout)
|
|
749
|
-
|
|
750
|
-
# Calculate score from pylint output
|
|
751
|
-
score_match = re.search(r"rated at ([\d.]+)/10", result.stdout)
|
|
752
|
-
if score_match:
|
|
753
|
-
self.result.code_quality = float(score_match.group(1))
|
|
754
|
-
|
|
755
|
-
if self.result.code_quality < 8.0:
|
|
756
|
-
self.result.issues.append(
|
|
757
|
-
f"Code quality {self.result.code_quality:.1f} < 8.0 required"
|
|
758
|
-
)
|
|
759
|
-
|
|
760
|
-
except Exception as e:
|
|
761
|
-
self.result.issues.append(f"Readability validation failed: {e}")
|
|
762
|
-
|
|
763
|
-
def _validate_consistency(self):
|
|
764
|
-
"""Validate architectural consistency."""
|
|
765
|
-
try:
|
|
766
|
-
# Check import consistency
|
|
767
|
-
isort_result = subprocess.run(
|
|
768
|
-
["isort", "--check-only", self.src_dir],
|
|
769
|
-
capture_output=True,
|
|
770
|
-
check=False
|
|
771
|
-
)
|
|
772
|
-
|
|
773
|
-
# Check formatting consistency
|
|
774
|
-
black_result = subprocess.run(
|
|
775
|
-
["black", "--check", self.src_dir],
|
|
776
|
-
capture_output=True,
|
|
777
|
-
check=False
|
|
778
|
-
)
|
|
779
|
-
|
|
780
|
-
# Score based on checks passed
|
|
781
|
-
checks_passed = 0
|
|
782
|
-
if isort_result.returncode == 0:
|
|
783
|
-
checks_passed += 50
|
|
784
|
-
if black_result.returncode == 0:
|
|
785
|
-
checks_passed += 50
|
|
786
|
-
|
|
787
|
-
self.result.consistency_score = checks_passed
|
|
788
|
-
|
|
789
|
-
if self.result.consistency_score < 90:
|
|
790
|
-
self.result.issues.append(
|
|
791
|
-
f"Consistency {self.result.consistency_score}% < 90% required"
|
|
792
|
-
)
|
|
793
|
-
|
|
794
|
-
except Exception as e:
|
|
795
|
-
self.result.issues.append(f"Consistency validation failed: {e}")
|
|
796
|
-
|
|
797
|
-
def _validate_security(self):
|
|
798
|
-
"""Validate security with Bandit."""
|
|
799
|
-
try:
|
|
800
|
-
result = subprocess.run(
|
|
801
|
-
["bandit", "-r", self.src_dir, "-f", "json"],
|
|
802
|
-
capture_output=True,
|
|
803
|
-
text=True,
|
|
804
|
-
check=False
|
|
805
|
-
)
|
|
806
|
-
|
|
807
|
-
import json
|
|
808
|
-
bandit_output = json.loads(result.stdout)
|
|
809
|
-
|
|
810
|
-
# Count high/medium severity issues
|
|
811
|
-
issues = bandit_output.get('results', [])
|
|
812
|
-
critical_issues = [
|
|
813
|
-
i for i in issues
|
|
814
|
-
if i['issue_severity'] in ['HIGH', 'MEDIUM']
|
|
815
|
-
]
|
|
816
|
-
|
|
817
|
-
if critical_issues:
|
|
818
|
-
self.result.security_score = 0
|
|
819
|
-
for issue in critical_issues:
|
|
820
|
-
self.result.issues.append(
|
|
821
|
-
f"Security: {issue['issue_text']} "
|
|
822
|
-
f"({issue['issue_severity']})"
|
|
823
|
-
)
|
|
824
|
-
else:
|
|
825
|
-
self.result.security_score = 100
|
|
826
|
-
|
|
827
|
-
except Exception as e:
|
|
828
|
-
self.result.issues.append(f"Security validation failed: {e}")
|
|
829
|
-
|
|
830
|
-
def _validate_traceability(self):
|
|
831
|
-
"""Validate requirement traceability."""
|
|
832
|
-
try:
|
|
833
|
-
# Check commit message format
|
|
834
|
-
result = subprocess.run(
|
|
835
|
-
["git", "log", "-1", "--pretty=%s"],
|
|
836
|
-
capture_output=True,
|
|
837
|
-
text=True,
|
|
838
|
-
check=True
|
|
839
|
-
)
|
|
840
|
-
|
|
841
|
-
commit_msg = result.stdout.strip()
|
|
842
|
-
|
|
843
|
-
# Conventional commit pattern
|
|
844
|
-
pattern = r'^(feat|fix|docs|style|refactor|test|chore)(\(.+\))?: .{1,50}'
|
|
845
|
-
|
|
846
|
-
if re.match(pattern, commit_msg):
|
|
847
|
-
self.result.traceability_score = 100
|
|
848
|
-
else:
|
|
849
|
-
self.result.traceability_score = 50
|
|
850
|
-
self.result.warnings.append(
|
|
851
|
-
f"Commit message doesn't follow conventional format: {commit_msg}"
|
|
852
|
-
)
|
|
853
|
-
|
|
854
|
-
except Exception as e:
|
|
855
|
-
self.result.warnings.append(f"Traceability validation failed: {e}")
|
|
856
|
-
self.result.traceability_score = 0
|
|
857
|
-
|
|
858
|
-
# Usage
|
|
859
|
-
validator = TRUST5Validator(src_dir="src/")
|
|
860
|
-
result = validator.validate_all()
|
|
861
|
-
|
|
862
|
-
if result.passed:
|
|
863
|
-
print(f" TRUST 5 validation passed! (Score: {result.overall_score():.1f})")
|
|
864
|
-
else:
|
|
865
|
-
print(f" TRUST 5 validation failed!")
|
|
866
|
-
for issue in result.issues:
|
|
867
|
-
print(f" - {issue}")
|
|
868
|
-
```
|
|
869
|
-
|
|
870
|
-
### TRUST 5 Metrics Dashboard
|
|
212
|
+
For comprehensive implementation patterns including CI/CD integration, validation frameworks, and metrics dashboards, see:
|
|
871
213
|
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
"""Real-time TRUST 5 quality metrics."""
|
|
875
|
-
|
|
876
|
-
def __init__(self):
|
|
877
|
-
self.test_coverage = 0.0 # Target: ≥85%
|
|
878
|
-
self.code_quality = 0.0 # Target: ≥8.0
|
|
879
|
-
self.consistency_score = 0.0 # Target: ≥90%
|
|
880
|
-
self.security_score = 0 # Target: 100
|
|
881
|
-
self.traceability_score = 0.0 # Target: ≥80%
|
|
882
|
-
|
|
883
|
-
def update_metrics(self, validation_result: ValidationResult):
|
|
884
|
-
"""Update metrics from validation result."""
|
|
885
|
-
self.test_coverage = validation_result.test_coverage
|
|
886
|
-
self.code_quality = validation_result.code_quality
|
|
887
|
-
self.consistency_score = validation_result.consistency_score
|
|
888
|
-
self.security_score = validation_result.security_score
|
|
889
|
-
self.traceability_score = validation_result.traceability_score
|
|
890
|
-
|
|
891
|
-
def get_dashboard_data(self) -> dict:
|
|
892
|
-
"""Get metrics for dashboard display."""
|
|
893
|
-
return {
|
|
894
|
-
'overall_score': self.get_overall_score(),
|
|
895
|
-
'production_ready': self.is_production_ready(),
|
|
896
|
-
'metrics': {
|
|
897
|
-
'test_coverage': {
|
|
898
|
-
'value': self.test_coverage,
|
|
899
|
-
'target': 85,
|
|
900
|
-
'status': 'pass' if self.test_coverage >= 85 else 'fail'
|
|
901
|
-
},
|
|
902
|
-
'code_quality': {
|
|
903
|
-
'value': self.code_quality,
|
|
904
|
-
'target': 8.0,
|
|
905
|
-
'status': 'pass' if self.code_quality >= 8.0 else 'fail'
|
|
906
|
-
},
|
|
907
|
-
'consistency': {
|
|
908
|
-
'value': self.consistency_score,
|
|
909
|
-
'target': 90,
|
|
910
|
-
'status': 'pass' if self.consistency_score >= 90 else 'fail'
|
|
911
|
-
},
|
|
912
|
-
'security': {
|
|
913
|
-
'value': self.security_score,
|
|
914
|
-
'target': 100,
|
|
915
|
-
'status': 'pass' if self.security_score == 100 else 'fail'
|
|
916
|
-
},
|
|
917
|
-
'traceability': {
|
|
918
|
-
'value': self.traceability_score,
|
|
919
|
-
'target': 80,
|
|
920
|
-
'status': 'pass' if self.traceability_score >= 80 else 'fail'
|
|
921
|
-
}
|
|
922
|
-
}
|
|
923
|
-
}
|
|
924
|
-
|
|
925
|
-
def get_overall_score(self) -> float:
|
|
926
|
-
"""Calculate overall TRUST 5 score (0-100)."""
|
|
927
|
-
weights = {
|
|
928
|
-
'test': 0.20,
|
|
929
|
-
'quality': 0.20,
|
|
930
|
-
'consistency': 0.20,
|
|
931
|
-
'security': 0.20,
|
|
932
|
-
'traceability': 0.20
|
|
933
|
-
}
|
|
934
|
-
|
|
935
|
-
return (
|
|
936
|
-
self.test_coverage * weights['test'] +
|
|
937
|
-
(self.code_quality * 10) * weights['quality'] +
|
|
938
|
-
self.consistency_score * weights['consistency'] +
|
|
939
|
-
self.security_score * weights['security'] +
|
|
940
|
-
self.traceability_score * weights['traceability']
|
|
941
|
-
)
|
|
942
|
-
|
|
943
|
-
def is_production_ready(self) -> bool:
|
|
944
|
-
"""Check if code meets production standards."""
|
|
945
|
-
return (
|
|
946
|
-
self.test_coverage >= 85 and
|
|
947
|
-
self.code_quality >= 8.0 and
|
|
948
|
-
self.consistency_score >= 90 and
|
|
949
|
-
self.security_score == 100 and
|
|
950
|
-
self.traceability_score >= 80
|
|
951
|
-
)
|
|
952
|
-
```
|
|
214
|
+
- [TRUST 5 Implementation](trust-5-implementation.md) - Detailed code patterns
|
|
215
|
+
- [TRUST 5 Validation](trust-5-validation.md) - CI/CD and metrics
|
|
953
216
|
|
|
954
217
|
---
|
|
955
218
|
|
|
@@ -962,20 +225,15 @@ Agents:
|
|
|
962
225
|
- test-engineer - Test generation and coverage
|
|
963
226
|
|
|
964
227
|
Skills:
|
|
965
|
-
- moai-
|
|
228
|
+
- moai-workflow-testing - Test framework setup
|
|
966
229
|
- moai-domain-security - Security patterns
|
|
967
|
-
- moai-core-code-reviewer - Code quality analysis
|
|
968
230
|
|
|
969
231
|
Commands:
|
|
970
232
|
- /moai:2-run - Enforces ≥85% coverage requirement
|
|
971
233
|
- /moai:9-feedback - Quality improvement suggestions
|
|
972
234
|
|
|
973
|
-
Memory:
|
|
974
|
-
- Skill("moai-foundation-core") modules/execution-rules.md - Quality gates
|
|
975
|
-
- @.moai/config/config.yaml - constitution.test_coverage_target
|
|
976
|
-
|
|
977
235
|
---
|
|
978
236
|
|
|
979
|
-
Version:
|
|
980
|
-
Last Updated:
|
|
237
|
+
Version: 2.0.0
|
|
238
|
+
Last Updated: 2026-01-06
|
|
981
239
|
Status: Production Ready
|