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
|
@@ -1,103 +1,53 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: moai-lang-php
|
|
3
|
-
description: PHP 8.3+ development specialist covering Laravel 11, Symfony 7, Eloquent ORM, and modern PHP patterns. Use when developing PHP APIs, web applications, or Laravel/Symfony projects.
|
|
4
|
-
version: 1.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
name: "moai-lang-php"
|
|
3
|
+
description: "PHP 8.3+ development specialist covering Laravel 11, Symfony 7, Eloquent ORM, and modern PHP patterns. Use when developing PHP APIs, web applications, or Laravel/Symfony projects."
|
|
4
|
+
version: 1.1.0
|
|
5
|
+
category: "language"
|
|
6
|
+
modularized: true
|
|
7
|
+
user-invocable: false
|
|
8
|
+
tags:
|
|
9
|
+
["language", "php", "laravel", "symfony", "eloquent", "doctrine", "phpunit"]
|
|
10
|
+
updated: 2026-01-11
|
|
11
|
+
status: "active"
|
|
12
|
+
allowed-tools:
|
|
13
|
+
- Read
|
|
14
|
+
- Grep
|
|
15
|
+
- Glob
|
|
16
|
+
- Bash
|
|
17
|
+
- mcp__context7__resolve-library-id
|
|
18
|
+
- mcp__context7__get-library-docs
|
|
8
19
|
---
|
|
9
20
|
|
|
10
21
|
## Quick Reference (30 seconds)
|
|
11
22
|
|
|
12
23
|
PHP 8.3+ Development Specialist - Laravel 11, Symfony 7, Eloquent, Doctrine, and modern PHP patterns.
|
|
13
24
|
|
|
14
|
-
Auto-Triggers:
|
|
25
|
+
Auto-Triggers: PHP files with .php extension, composer.json, artisan command, symfony.yaml, Laravel or Symfony discussions
|
|
15
26
|
|
|
16
27
|
Core Capabilities:
|
|
28
|
+
|
|
17
29
|
- PHP 8.3 Features: readonly classes, typed properties, attributes, enums, named arguments
|
|
18
30
|
- Laravel 11: Controllers, Models, Migrations, Form Requests, API Resources, Eloquent
|
|
19
31
|
- Symfony 7: Attribute-based routing, Doctrine ORM, Services, Dependency Injection
|
|
20
|
-
- ORMs: Eloquent
|
|
21
|
-
- Testing: PHPUnit, Pest, feature
|
|
32
|
+
- ORMs: Eloquent for Laravel, Doctrine for Symfony
|
|
33
|
+
- Testing: PHPUnit, Pest, feature and unit testing patterns
|
|
22
34
|
- Package Management: Composer with autoloading
|
|
23
35
|
- Coding Standards: PSR-12, Laravel Pint, PHP CS Fixer
|
|
24
36
|
- Docker: PHP-FPM, nginx, multi-stage builds
|
|
25
37
|
|
|
26
38
|
### Quick Patterns
|
|
27
39
|
|
|
28
|
-
Laravel Controller:
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
class UserController extends Controller
|
|
41
|
-
{
|
|
42
|
-
public function store(StoreUserRequest $request): JsonResponse
|
|
43
|
-
{
|
|
44
|
-
$user = User::create($request->validated());
|
|
45
|
-
return response()->json(new UserResource($user), 201);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Laravel Form Request:
|
|
51
|
-
```php
|
|
52
|
-
<?php
|
|
53
|
-
|
|
54
|
-
namespace App\Http\Requests;
|
|
55
|
-
|
|
56
|
-
use Illuminate\Foundation\Http\FormRequest;
|
|
57
|
-
|
|
58
|
-
class StoreUserRequest extends FormRequest
|
|
59
|
-
{
|
|
60
|
-
public function authorize(): bool
|
|
61
|
-
{
|
|
62
|
-
return true;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
public function rules(): array
|
|
66
|
-
{
|
|
67
|
-
return [
|
|
68
|
-
'name' => ['required', 'string', 'max:255'],
|
|
69
|
-
'email' => ['required', 'email', 'unique:users,email'],
|
|
70
|
-
'password' => ['required', 'min:8', 'confirmed'],
|
|
71
|
-
];
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
Symfony Controller:
|
|
77
|
-
```php
|
|
78
|
-
<?php
|
|
79
|
-
|
|
80
|
-
namespace App\Controller;
|
|
81
|
-
|
|
82
|
-
use App\Entity\User;
|
|
83
|
-
use Doctrine\ORM\EntityManagerInterface;
|
|
84
|
-
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
|
85
|
-
use Symfony\Component\HttpFoundation\JsonResponse;
|
|
86
|
-
use Symfony\Component\Routing\Attribute\Route;
|
|
87
|
-
|
|
88
|
-
#[Route('/api/users')]
|
|
89
|
-
class UserController extends AbstractController
|
|
90
|
-
{
|
|
91
|
-
#[Route('', methods: ['POST'])]
|
|
92
|
-
public function create(EntityManagerInterface $em): JsonResponse
|
|
93
|
-
{
|
|
94
|
-
$user = new User();
|
|
95
|
-
$em->persist($user);
|
|
96
|
-
$em->flush();
|
|
97
|
-
return $this->json($user, 201);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
```
|
|
40
|
+
Laravel Controller Pattern:
|
|
41
|
+
|
|
42
|
+
In the App\Http\Controllers\Api namespace, create a UserController extending Controller. Import StoreUserRequest, UserResource, User, and JsonResponse. Define a store method accepting StoreUserRequest that creates a User using validated data and returns a JsonResponse with UserResource wrapping the user and status 201.
|
|
43
|
+
|
|
44
|
+
Laravel Form Request Pattern:
|
|
45
|
+
|
|
46
|
+
In the App\Http\Requests namespace, create a StoreUserRequest extending FormRequest. The authorize method returns true. The rules method returns an array with name requiring required, string, and max 255 validation, email requiring required, email, and unique on users table, and password requiring required, min 8, and confirmed validation.
|
|
47
|
+
|
|
48
|
+
Symfony Controller Pattern:
|
|
49
|
+
|
|
50
|
+
In the App\Controller namespace, create a UserController extending AbstractController. Import User, EntityManagerInterface, JsonResponse, and Route attribute. Apply Route attribute at class level for api/users path. Create a create method with Route attribute for empty path and POST method. Inject EntityManagerInterface, create new User, persist and flush, then return json response with user and status 201.
|
|
101
51
|
|
|
102
52
|
---
|
|
103
53
|
|
|
@@ -106,484 +56,96 @@ class UserController extends AbstractController
|
|
|
106
56
|
### PHP 8.3 Modern Features
|
|
107
57
|
|
|
108
58
|
Readonly Classes:
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
readonly class UserDTO
|
|
113
|
-
{
|
|
114
|
-
public function __construct(
|
|
115
|
-
public int $id,
|
|
116
|
-
public string $name,
|
|
117
|
-
public string $email,
|
|
118
|
-
public ?DateTime $createdAt = null,
|
|
119
|
-
) {}
|
|
120
|
-
}
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
Typed Class Constants:
|
|
124
|
-
```php
|
|
125
|
-
<?php
|
|
126
|
-
|
|
127
|
-
class Status
|
|
128
|
-
{
|
|
129
|
-
public const string PENDING = 'pending';
|
|
130
|
-
public const string ACTIVE = 'active';
|
|
131
|
-
public const string INACTIVE = 'inactive';
|
|
132
|
-
}
|
|
133
|
-
```
|
|
59
|
+
|
|
60
|
+
Declare a readonly class UserDTO with a constructor promoting public properties for int id, string name, and string email.
|
|
134
61
|
|
|
135
62
|
Enums with Methods:
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
enum OrderStatus: string
|
|
140
|
-
{
|
|
141
|
-
case Pending = 'pending';
|
|
142
|
-
case Processing = 'processing';
|
|
143
|
-
case Completed = 'completed';
|
|
144
|
-
case Cancelled = 'cancelled';
|
|
145
|
-
|
|
146
|
-
public function label(): string
|
|
147
|
-
{
|
|
148
|
-
return match($this) {
|
|
149
|
-
self::Pending => 'Pending',
|
|
150
|
-
self::Processing => 'Processing',
|
|
151
|
-
self::Completed => 'Completed',
|
|
152
|
-
self::Cancelled => 'Cancelled',
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
public function canTransitionTo(self $status): bool
|
|
157
|
-
{
|
|
158
|
-
return match($this) {
|
|
159
|
-
self::Pending => in_array($status, [self::Processing, self::Cancelled]),
|
|
160
|
-
self::Processing => in_array($status, [self::Completed, self::Cancelled]),
|
|
161
|
-
self::Completed, self::Cancelled => false,
|
|
162
|
-
};
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
```
|
|
63
|
+
|
|
64
|
+
Create an OrderStatus enum backed by string. Define cases Pending with pending value, Processing with processing value, and Completed with completed value. Add a label method that uses match expression on $this to return appropriate display labels for each case.
|
|
166
65
|
|
|
167
66
|
Attributes:
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
#[Attribute(Attribute::TARGET_PROPERTY)]
|
|
172
|
-
class Validate
|
|
173
|
-
{
|
|
174
|
-
public function __construct(
|
|
175
|
-
public string $rule,
|
|
176
|
-
public ?string $message = null,
|
|
177
|
-
) {}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
class UserRequest
|
|
181
|
-
{
|
|
182
|
-
#[Validate('required|email')]
|
|
183
|
-
public string $email;
|
|
184
|
-
|
|
185
|
-
#[Validate('required|min:8')]
|
|
186
|
-
public string $password;
|
|
187
|
-
}
|
|
188
|
-
```
|
|
67
|
+
|
|
68
|
+
Create a Validate attribute class targeting properties with Attribute attribute. The constructor accepts a string rule and optional string message. Create a UserRequest class with email property decorated with Validate attribute specifying required and email rules.
|
|
189
69
|
|
|
190
70
|
### Laravel 11 Patterns
|
|
191
71
|
|
|
192
72
|
Eloquent Model with Relationships:
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
class Post extends Model
|
|
204
|
-
{
|
|
205
|
-
use HasFactory;
|
|
206
|
-
|
|
207
|
-
protected $fillable = ['title', 'content', 'user_id', 'status'];
|
|
208
|
-
|
|
209
|
-
protected $casts = [
|
|
210
|
-
'status' => PostStatus::class,
|
|
211
|
-
'published_at' => 'datetime',
|
|
212
|
-
];
|
|
213
|
-
|
|
214
|
-
public function user(): BelongsTo
|
|
215
|
-
{
|
|
216
|
-
return $this->belongsTo(User::class);
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
public function comments(): HasMany
|
|
220
|
-
{
|
|
221
|
-
return $this->hasMany(Comment::class);
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
public function scopePublished($query)
|
|
225
|
-
{
|
|
226
|
-
return $query->where('status', PostStatus::Published);
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
API Resource with Nested Data:
|
|
232
|
-
```php
|
|
233
|
-
<?php
|
|
234
|
-
|
|
235
|
-
namespace App\Http\Resources;
|
|
236
|
-
|
|
237
|
-
use Illuminate\Http\Request;
|
|
238
|
-
use Illuminate\Http\Resources\Json\JsonResource;
|
|
239
|
-
|
|
240
|
-
class PostResource extends JsonResource
|
|
241
|
-
{
|
|
242
|
-
public function toArray(Request $request): array
|
|
243
|
-
{
|
|
244
|
-
return [
|
|
245
|
-
'id' => $this->id,
|
|
246
|
-
'title' => $this->title,
|
|
247
|
-
'content' => $this->content,
|
|
248
|
-
'status' => $this->status->value,
|
|
249
|
-
'author' => new UserResource($this->whenLoaded('user')),
|
|
250
|
-
'comments' => CommentResource::collection($this->whenLoaded('comments')),
|
|
251
|
-
'comments_count' => $this->whenCounted('comments'),
|
|
252
|
-
'created_at' => $this->created_at->toIso8601String(),
|
|
253
|
-
'updated_at' => $this->updated_at->toIso8601String(),
|
|
254
|
-
];
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
Migration with Foreign Keys:
|
|
260
|
-
```php
|
|
261
|
-
<?php
|
|
262
|
-
|
|
263
|
-
use Illuminate\Database\Migrations\Migration;
|
|
264
|
-
use Illuminate\Database\Schema\Blueprint;
|
|
265
|
-
use Illuminate\Support\Facades\Schema;
|
|
266
|
-
|
|
267
|
-
return new class extends Migration
|
|
268
|
-
{
|
|
269
|
-
public function up(): void
|
|
270
|
-
{
|
|
271
|
-
Schema::create('posts', function (Blueprint $table) {
|
|
272
|
-
$table->id();
|
|
273
|
-
$table->foreignId('user_id')->constrained()->cascadeOnDelete();
|
|
274
|
-
$table->string('title');
|
|
275
|
-
$table->text('content');
|
|
276
|
-
$table->string('status')->default('draft');
|
|
277
|
-
$table->timestamp('published_at')->nullable();
|
|
278
|
-
$table->timestamps();
|
|
279
|
-
$table->softDeletes();
|
|
280
|
-
|
|
281
|
-
$table->index(['status', 'published_at']);
|
|
282
|
-
});
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
public function down(): void
|
|
286
|
-
{
|
|
287
|
-
Schema::dropIfExists('posts');
|
|
288
|
-
}
|
|
289
|
-
};
|
|
290
|
-
```
|
|
73
|
+
|
|
74
|
+
In the App\Models namespace, create a Post model extending Model. Set protected fillable array with title, content, user_id, and status. Set protected casts array with status casting to PostStatus enum and published_at casting to datetime. Define a user method returning BelongsTo relationship. Define a comments method returning HasMany relationship. Add a scopePublished method that filters by published status.
|
|
75
|
+
|
|
76
|
+
API Resource Pattern:
|
|
77
|
+
|
|
78
|
+
In the App\Http\Resources namespace, create a PostResource extending JsonResource. The toArray method takes a Request parameter. Return an array with id, title, author using UserResource with whenLoaded for user relationship, comments_count using whenCounted, and created_at formatted as ISO 8601 string.
|
|
79
|
+
|
|
80
|
+
Migration Pattern:
|
|
81
|
+
|
|
82
|
+
Create an anonymous migration class extending Migration. The up method calls Schema create on posts table. Define id, foreignId for user_id with constrained and cascadeOnDelete, string for title, text for content, string for status defaulting to draft, timestamps, and softDeletes.
|
|
291
83
|
|
|
292
84
|
Service Layer Pattern:
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
namespace App\Services;
|
|
297
|
-
|
|
298
|
-
use App\Models\User;
|
|
299
|
-
use App\DTOs\UserDTO;
|
|
300
|
-
use Illuminate\Support\Facades\Hash;
|
|
301
|
-
use Illuminate\Support\Facades\DB;
|
|
302
|
-
|
|
303
|
-
class UserService
|
|
304
|
-
{
|
|
305
|
-
public function create(UserDTO $dto): User
|
|
306
|
-
{
|
|
307
|
-
return DB::transaction(function () use ($dto) {
|
|
308
|
-
$user = User::create([
|
|
309
|
-
'name' => $dto->name,
|
|
310
|
-
'email' => $dto->email,
|
|
311
|
-
'password' => Hash::make($dto->password),
|
|
312
|
-
]);
|
|
313
|
-
|
|
314
|
-
$user->profile()->create([
|
|
315
|
-
'bio' => $dto->bio ?? '',
|
|
316
|
-
]);
|
|
317
|
-
|
|
318
|
-
return $user->load('profile');
|
|
319
|
-
});
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
public function update(User $user, UserDTO $dto): User
|
|
323
|
-
{
|
|
324
|
-
$user->update([
|
|
325
|
-
'name' => $dto->name,
|
|
326
|
-
'email' => $dto->email,
|
|
327
|
-
]);
|
|
328
|
-
|
|
329
|
-
return $user->fresh();
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
```
|
|
85
|
+
|
|
86
|
+
In the App\Services namespace, create a UserService class. Define a create method accepting UserDTO. Use DB transaction wrapping User create with data from DTO properties, profile creation with default bio, and returning user with loaded profile relationship. Catch ActiveRecord\RecordInvalid exceptions to handle validation failures.
|
|
333
87
|
|
|
334
88
|
### Symfony 7 Patterns
|
|
335
89
|
|
|
336
90
|
Entity with Doctrine Attributes:
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
namespace App\Entity;
|
|
341
|
-
|
|
342
|
-
use App\Repository\UserRepository;
|
|
343
|
-
use Doctrine\ORM\Mapping as ORM;
|
|
344
|
-
use Symfony\Component\Validator\Constraints as Assert;
|
|
345
|
-
|
|
346
|
-
#[ORM\Entity(repositoryClass: UserRepository::class)]
|
|
347
|
-
#[ORM\Table(name: 'users')]
|
|
348
|
-
#[ORM\HasLifecycleCallbacks]
|
|
349
|
-
class User
|
|
350
|
-
{
|
|
351
|
-
#[ORM\Id]
|
|
352
|
-
#[ORM\GeneratedValue]
|
|
353
|
-
#[ORM\Column]
|
|
354
|
-
private ?int $id = null;
|
|
355
|
-
|
|
356
|
-
#[ORM\Column(length: 255)]
|
|
357
|
-
#[Assert\NotBlank]
|
|
358
|
-
#[Assert\Length(max: 255)]
|
|
359
|
-
private ?string $name = null;
|
|
360
|
-
|
|
361
|
-
#[ORM\Column(length: 180, unique: true)]
|
|
362
|
-
#[Assert\Email]
|
|
363
|
-
private ?string $email = null;
|
|
364
|
-
|
|
365
|
-
#[ORM\Column]
|
|
366
|
-
private ?\DateTimeImmutable $createdAt = null;
|
|
367
|
-
|
|
368
|
-
#[ORM\PrePersist]
|
|
369
|
-
public function setCreatedAtValue(): void
|
|
370
|
-
{
|
|
371
|
-
$this->createdAt = new \DateTimeImmutable();
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
// Getters and setters...
|
|
375
|
-
}
|
|
376
|
-
```
|
|
377
|
-
|
|
378
|
-
Repository with Custom Queries:
|
|
379
|
-
```php
|
|
380
|
-
<?php
|
|
381
|
-
|
|
382
|
-
namespace App\Repository;
|
|
383
|
-
|
|
384
|
-
use App\Entity\User;
|
|
385
|
-
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
|
386
|
-
use Doctrine\Persistence\ManagerRegistry;
|
|
387
|
-
|
|
388
|
-
class UserRepository extends ServiceEntityRepository
|
|
389
|
-
{
|
|
390
|
-
public function __construct(ManagerRegistry $registry)
|
|
391
|
-
{
|
|
392
|
-
parent::__construct($registry, User::class);
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
public function findActiveUsers(): array
|
|
396
|
-
{
|
|
397
|
-
return $this->createQueryBuilder('u')
|
|
398
|
-
->andWhere('u.isActive = :active')
|
|
399
|
-
->setParameter('active', true)
|
|
400
|
-
->orderBy('u.createdAt', 'DESC')
|
|
401
|
-
->getQuery()
|
|
402
|
-
->getResult();
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
public function findByEmailDomain(string $domain): array
|
|
406
|
-
{
|
|
407
|
-
return $this->createQueryBuilder('u')
|
|
408
|
-
->andWhere('u.email LIKE :domain')
|
|
409
|
-
->setParameter('domain', '%@' . $domain)
|
|
410
|
-
->getQuery()
|
|
411
|
-
->getResult();
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
```
|
|
91
|
+
|
|
92
|
+
In the App\Entity namespace, create a User class. Apply ORM\Entity attribute with repositoryClass pointing to UserRepository. Apply ORM\Table attribute with name users. Add private nullable int id with ORM\Id, ORM\GeneratedValue, and ORM\Column attributes. Add private nullable string name with ORM\Column length 255 and Assert\NotBlank. Add private nullable string email with ORM\Column length 180 unique and Assert\Email.
|
|
415
93
|
|
|
416
94
|
Service with Dependency Injection:
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
namespace App\Service;
|
|
421
|
-
|
|
422
|
-
use App\Entity\User;
|
|
423
|
-
use App\Repository\UserRepository;
|
|
424
|
-
use Doctrine\ORM\EntityManagerInterface;
|
|
425
|
-
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
|
|
426
|
-
|
|
427
|
-
class UserService
|
|
428
|
-
{
|
|
429
|
-
public function __construct(
|
|
430
|
-
private readonly EntityManagerInterface $entityManager,
|
|
431
|
-
private readonly UserRepository $userRepository,
|
|
432
|
-
private readonly UserPasswordHasherInterface $passwordHasher,
|
|
433
|
-
) {}
|
|
434
|
-
|
|
435
|
-
public function createUser(string $email, string $password, string $name): User
|
|
436
|
-
{
|
|
437
|
-
$user = new User();
|
|
438
|
-
$user->setEmail($email);
|
|
439
|
-
$user->setName($name);
|
|
440
|
-
$user->setPassword($this->passwordHasher->hashPassword($user, $password));
|
|
441
|
-
|
|
442
|
-
$this->entityManager->persist($user);
|
|
443
|
-
$this->entityManager->flush();
|
|
444
|
-
|
|
445
|
-
return $user;
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
```
|
|
95
|
+
|
|
96
|
+
In the App\Service namespace, create a UserService class. The constructor accepts readonly EntityManagerInterface and readonly UserPasswordHasherInterface via property promotion. Define createUser method taking email and password strings. Create new User, set email, hash password using the password hasher, persist with entity manager, flush, and return user.
|
|
449
97
|
|
|
450
98
|
### Testing Patterns
|
|
451
99
|
|
|
452
|
-
PHPUnit Feature Test
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
460
|
-
use Tests\TestCase;
|
|
461
|
-
|
|
462
|
-
class UserApiTest extends TestCase
|
|
463
|
-
{
|
|
464
|
-
use RefreshDatabase;
|
|
465
|
-
|
|
466
|
-
public function test_can_create_user(): void
|
|
467
|
-
{
|
|
468
|
-
$response = $this->postJson('/api/users', [
|
|
469
|
-
'name' => 'John Doe',
|
|
470
|
-
'email' => 'john@example.com',
|
|
471
|
-
'password' => 'password123',
|
|
472
|
-
'password_confirmation' => 'password123',
|
|
473
|
-
]);
|
|
474
|
-
|
|
475
|
-
$response->assertStatus(201)
|
|
476
|
-
->assertJsonStructure([
|
|
477
|
-
'data' => ['id', 'name', 'email', 'created_at'],
|
|
478
|
-
]);
|
|
479
|
-
|
|
480
|
-
$this->assertDatabaseHas('users', [
|
|
481
|
-
'email' => 'john@example.com',
|
|
482
|
-
]);
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
public function test_cannot_create_user_with_duplicate_email(): void
|
|
486
|
-
{
|
|
487
|
-
User::factory()->create(['email' => 'john@example.com']);
|
|
488
|
-
|
|
489
|
-
$response = $this->postJson('/api/users', [
|
|
490
|
-
'name' => 'John Doe',
|
|
491
|
-
'email' => 'john@example.com',
|
|
492
|
-
'password' => 'password123',
|
|
493
|
-
'password_confirmation' => 'password123',
|
|
494
|
-
]);
|
|
495
|
-
|
|
496
|
-
$response->assertStatus(422)
|
|
497
|
-
->assertJsonValidationErrors(['email']);
|
|
498
|
-
}
|
|
499
|
-
}
|
|
500
|
-
```
|
|
501
|
-
|
|
502
|
-
Pest Test (Laravel):
|
|
503
|
-
```php
|
|
504
|
-
<?php
|
|
505
|
-
|
|
506
|
-
use App\Models\User;
|
|
507
|
-
use App\Models\Post;
|
|
508
|
-
|
|
509
|
-
it('can create a post', function () {
|
|
510
|
-
$user = User::factory()->create();
|
|
511
|
-
|
|
512
|
-
$response = $this->actingAs($user)
|
|
513
|
-
->postJson('/api/posts', [
|
|
514
|
-
'title' => 'My First Post',
|
|
515
|
-
'content' => 'This is the content.',
|
|
516
|
-
]);
|
|
517
|
-
|
|
518
|
-
$response->assertStatus(201);
|
|
519
|
-
expect(Post::count())->toBe(1);
|
|
520
|
-
});
|
|
521
|
-
|
|
522
|
-
it('requires authentication to create post', function () {
|
|
523
|
-
$this->postJson('/api/posts', [
|
|
524
|
-
'title' => 'My Post',
|
|
525
|
-
'content' => 'Content here.',
|
|
526
|
-
])->assertStatus(401);
|
|
527
|
-
});
|
|
528
|
-
|
|
529
|
-
dataset('invalid_posts', [
|
|
530
|
-
'missing title' => [['content' => 'content'], 'title'],
|
|
531
|
-
'missing content' => [['title' => 'title'], 'content'],
|
|
532
|
-
'title too short' => [['title' => 'ab', 'content' => 'content'], 'title'],
|
|
533
|
-
]);
|
|
534
|
-
|
|
535
|
-
it('validates post data', function (array $data, string $field) {
|
|
536
|
-
$user = User::factory()->create();
|
|
537
|
-
|
|
538
|
-
$this->actingAs($user)
|
|
539
|
-
->postJson('/api/posts', $data)
|
|
540
|
-
->assertStatus(422)
|
|
541
|
-
->assertJsonValidationErrors([$field]);
|
|
542
|
-
})->with('invalid_posts');
|
|
543
|
-
```
|
|
100
|
+
PHPUnit Feature Test for Laravel:
|
|
101
|
+
|
|
102
|
+
In Tests\Feature namespace, create UserApiTest extending TestCase with RefreshDatabase trait. The test_can_create_user method posts JSON to api/users with name, email, password, and password_confirmation. Assert status 201 and JSON structure with data containing id, name, and email. Assert database has users table with the email.
|
|
103
|
+
|
|
104
|
+
Pest Test for Laravel:
|
|
105
|
+
|
|
106
|
+
Use App\Models\User and Post. Create a test using it function for can create a post. Create user with factory. Call actingAs with user, post JSON to api/posts with title and content. Assert status 201 and expect Post count to be 1. Create second test for requires authentication that posts without authentication and asserts status 401.
|
|
544
107
|
|
|
545
108
|
---
|
|
546
109
|
|
|
547
110
|
## Advanced Implementation (10+ minutes)
|
|
548
111
|
|
|
549
112
|
For comprehensive coverage including:
|
|
550
|
-
|
|
551
|
-
-
|
|
552
|
-
-
|
|
113
|
+
|
|
114
|
+
- Production deployment patterns for Docker and Kubernetes
|
|
115
|
+
- Advanced Eloquent patterns including observers, accessors, and mutators
|
|
116
|
+
- Doctrine advanced mapping with embeddables and inheritance
|
|
553
117
|
- Queue and job processing
|
|
554
118
|
- Event-driven architecture
|
|
555
|
-
- Caching strategies
|
|
556
|
-
- Security best practices
|
|
119
|
+
- Caching strategies with Redis and Memcached
|
|
120
|
+
- Security best practices following OWASP patterns
|
|
557
121
|
- CI/CD integration patterns
|
|
558
122
|
|
|
559
123
|
See:
|
|
560
|
-
|
|
561
|
-
-
|
|
124
|
+
|
|
125
|
+
- modules/advanced-patterns.md for complete advanced patterns guide
|
|
562
126
|
|
|
563
127
|
---
|
|
564
128
|
|
|
565
129
|
## Context7 Library Mappings
|
|
566
130
|
|
|
567
|
-
|
|
568
|
-
/
|
|
569
|
-
/
|
|
570
|
-
|
|
571
|
-
/
|
|
572
|
-
/
|
|
573
|
-
|
|
574
|
-
/laravel/horizon - Laravel queue dashboard
|
|
575
|
-
```
|
|
131
|
+
- laravel/framework for Laravel web framework
|
|
132
|
+
- symfony/symfony for Symfony components and framework
|
|
133
|
+
- doctrine/orm for Doctrine ORM for PHP
|
|
134
|
+
- phpunit/phpunit for PHP testing framework
|
|
135
|
+
- pestphp/pest for elegant PHP testing framework
|
|
136
|
+
- laravel/sanctum for Laravel API authentication
|
|
137
|
+
- laravel/horizon for Laravel queue dashboard
|
|
576
138
|
|
|
577
139
|
---
|
|
578
140
|
|
|
579
141
|
## Works Well With
|
|
580
142
|
|
|
581
|
-
-
|
|
582
|
-
-
|
|
583
|
-
-
|
|
584
|
-
-
|
|
585
|
-
-
|
|
586
|
-
-
|
|
143
|
+
- moai-domain-backend for REST API and microservices architecture
|
|
144
|
+
- moai-domain-database for SQL patterns and ORM optimization
|
|
145
|
+
- moai-workflow-testing for TDD and testing strategies
|
|
146
|
+
- moai-platform-deploy for Docker and deployment patterns
|
|
147
|
+
- moai-essentials-debug for AI-powered debugging
|
|
148
|
+
- moai-foundation-quality for TRUST 5 quality principles
|
|
587
149
|
|
|
588
150
|
---
|
|
589
151
|
|
|
@@ -592,53 +154,29 @@ See:
|
|
|
592
154
|
Common Issues:
|
|
593
155
|
|
|
594
156
|
PHP Version Check:
|
|
595
|
-
|
|
596
|
-
php
|
|
597
|
-
php -m | grep -E 'pdo|mbstring|openssl' # Required extensions
|
|
598
|
-
```
|
|
157
|
+
|
|
158
|
+
Run php with version flag to verify 8.3 or later. Use php with -m flag piped to grep for checking pdo, mbstring, and openssl extensions.
|
|
599
159
|
|
|
600
160
|
Composer Autoload Issues:
|
|
601
|
-
|
|
602
|
-
composer dump-autoload -o
|
|
603
|
-
composer clear-cache # Clear composer cache
|
|
604
|
-
```
|
|
161
|
+
|
|
162
|
+
Run composer dump-autoload with -o flag for optimized autoloader. Run composer clear-cache to clear the package cache.
|
|
605
163
|
|
|
606
164
|
Laravel Cache Issues:
|
|
607
|
-
|
|
608
|
-
php artisan config:clear
|
|
609
|
-
php artisan cache:clear
|
|
610
|
-
php artisan route:clear
|
|
611
|
-
php artisan view:clear
|
|
612
|
-
```
|
|
165
|
+
|
|
166
|
+
Run php artisan config:clear to clear configuration cache. Run php artisan cache:clear to clear application cache. Run php artisan route:clear to clear route cache. Run php artisan view:clear to clear compiled views.
|
|
613
167
|
|
|
614
168
|
Symfony Cache Issues:
|
|
615
|
-
|
|
616
|
-
php bin/console cache:clear
|
|
617
|
-
php bin/console cache:warmup
|
|
618
|
-
```
|
|
169
|
+
|
|
170
|
+
Run php bin/console cache:clear to clear cache. Run php bin/console cache:warmup to warm up the cache.
|
|
619
171
|
|
|
620
172
|
Database Connection:
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
try {
|
|
624
|
-
DB::connection()->getPdo();
|
|
625
|
-
echo "Connected successfully";
|
|
626
|
-
} catch (\Exception $e) {
|
|
627
|
-
echo "Connection failed: " . $e->getMessage();
|
|
628
|
-
}
|
|
629
|
-
```
|
|
173
|
+
|
|
174
|
+
Use try-catch block around DB::connection()->getPdo() call. Output success message on connection or exception message on failure.
|
|
630
175
|
|
|
631
176
|
Migration Rollback:
|
|
632
|
-
```bash
|
|
633
|
-
# Laravel
|
|
634
|
-
php artisan migrate:rollback --step=1
|
|
635
|
-
php artisan migrate:fresh --seed # Development only
|
|
636
177
|
|
|
637
|
-
|
|
638
|
-
php bin/console doctrine:migrations:migrate prev
|
|
639
|
-
```
|
|
178
|
+
Use php artisan migrate:rollback with step 1 to rollback last migration. Use php artisan migrate:fresh with seed flag for development reset only. For Symfony, use php bin/console doctrine:migrations:migrate prev to rollback.
|
|
640
179
|
|
|
641
180
|
---
|
|
642
181
|
|
|
643
|
-
|
|
644
|
-
Status: Active (v1.0.0)
|
|
182
|
+
Version: 1.1.0 | Updated: 2026-01-11 | Status: Active
|