@event4u/agent-config 1.9.1
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.
- package/.agent-src/README.md +64 -0
- package/.agent-src/commands/agent-handoff.md +64 -0
- package/.agent-src/commands/agent-status.md +83 -0
- package/.agent-src/commands/agents-audit.md +243 -0
- package/.agent-src/commands/agents-cleanup.md +169 -0
- package/.agent-src/commands/agents-prepare.md +137 -0
- package/.agent-src/commands/analyze-reference-repo.md +191 -0
- package/.agent-src/commands/bug-fix.md +181 -0
- package/.agent-src/commands/bug-investigate.md +175 -0
- package/.agent-src/commands/commit.md +121 -0
- package/.agent-src/commands/compress.md +177 -0
- package/.agent-src/commands/config-agent-settings.md +126 -0
- package/.agent-src/commands/context-create.md +167 -0
- package/.agent-src/commands/context-refactor.md +170 -0
- package/.agent-src/commands/copilot-agents-init.md +150 -0
- package/.agent-src/commands/copilot-agents-optimize.md +251 -0
- package/.agent-src/commands/create-pr-description.md +112 -0
- package/.agent-src/commands/create-pr.md +76 -0
- package/.agent-src/commands/do-and-judge.md +114 -0
- package/.agent-src/commands/do-in-steps.md +84 -0
- package/.agent-src/commands/e2e-heal.md +98 -0
- package/.agent-src/commands/e2e-plan.md +85 -0
- package/.agent-src/commands/estimate-ticket.md +80 -0
- package/.agent-src/commands/feature-dev.md +111 -0
- package/.agent-src/commands/feature-explore.md +180 -0
- package/.agent-src/commands/feature-plan.md +288 -0
- package/.agent-src/commands/feature-refactor.md +181 -0
- package/.agent-src/commands/feature-roadmap.md +184 -0
- package/.agent-src/commands/fix-ci.md +48 -0
- package/.agent-src/commands/fix-portability.md +97 -0
- package/.agent-src/commands/fix-pr-bot-comments.md +146 -0
- package/.agent-src/commands/fix-pr-comments.md +58 -0
- package/.agent-src/commands/fix-pr-developer-comments.md +152 -0
- package/.agent-src/commands/fix-references.md +94 -0
- package/.agent-src/commands/fix-seeder.md +146 -0
- package/.agent-src/commands/implement-ticket.md +133 -0
- package/.agent-src/commands/jira-ticket.md +71 -0
- package/.agent-src/commands/judge.md +86 -0
- package/.agent-src/commands/memory-add.md +130 -0
- package/.agent-src/commands/memory-full.md +97 -0
- package/.agent-src/commands/memory-promote.md +144 -0
- package/.agent-src/commands/mode.md +121 -0
- package/.agent-src/commands/module-create.md +132 -0
- package/.agent-src/commands/module-explore.md +157 -0
- package/.agent-src/commands/optimize-agents.md +139 -0
- package/.agent-src/commands/optimize-augmentignore.md +262 -0
- package/.agent-src/commands/optimize-rtk-filters.md +120 -0
- package/.agent-src/commands/optimize-skills.md +121 -0
- package/.agent-src/commands/override-create.md +97 -0
- package/.agent-src/commands/override-manage.md +96 -0
- package/.agent-src/commands/package-reset.md +154 -0
- package/.agent-src/commands/package-test.md +154 -0
- package/.agent-src/commands/prepare-for-review.md +91 -0
- package/.agent-src/commands/project-analyze.md +300 -0
- package/.agent-src/commands/project-health.md +95 -0
- package/.agent-src/commands/propose-memory.md +108 -0
- package/.agent-src/commands/quality-fix.md +106 -0
- package/.agent-src/commands/refine-ticket.md +81 -0
- package/.agent-src/commands/review-changes.md +130 -0
- package/.agent-src/commands/review-routing.md +111 -0
- package/.agent-src/commands/roadmap-create.md +110 -0
- package/.agent-src/commands/roadmap-execute.md +68 -0
- package/.agent-src/commands/rule-compliance-audit.md +139 -0
- package/.agent-src/commands/tests-create.md +73 -0
- package/.agent-src/commands/tests-execute.md +58 -0
- package/.agent-src/commands/threat-model.md +115 -0
- package/.agent-src/commands/update-form-request-messages.md +189 -0
- package/.agent-src/commands/upstream-contribute.md +171 -0
- package/.agent-src/contexts/augment-infrastructure.md +181 -0
- package/.agent-src/contexts/documentation-hierarchy.md +142 -0
- package/.agent-src/contexts/model-recommendations.md +142 -0
- package/.agent-src/contexts/override-system.md +187 -0
- package/.agent-src/contexts/skills-and-commands.md +154 -0
- package/.agent-src/contexts/subagent-configuration.md +62 -0
- package/.agent-src/guidelines/agent-infra/agent-interaction-and-decision-quality.md +110 -0
- package/.agent-src/guidelines/agent-infra/break-glass-usage.md +113 -0
- package/.agent-src/guidelines/agent-infra/developer-judgment.md +82 -0
- package/.agent-src/guidelines/agent-infra/engineering-memory-data-format.md +117 -0
- package/.agent-src/guidelines/agent-infra/layered-settings.md +158 -0
- package/.agent-src/guidelines/agent-infra/memory-access.md +121 -0
- package/.agent-src/guidelines/agent-infra/naming.md +69 -0
- package/.agent-src/guidelines/agent-infra/output-patterns.md +117 -0
- package/.agent-src/guidelines/agent-infra/review-routing-data-format.md +144 -0
- package/.agent-src/guidelines/agent-infra/role-contracts.md +211 -0
- package/.agent-src/guidelines/agent-infra/role-mode-router.md +89 -0
- package/.agent-src/guidelines/agent-infra/runtime-layer.md +89 -0
- package/.agent-src/guidelines/agent-infra/self-improvement-pipeline.md +135 -0
- package/.agent-src/guidelines/agent-infra/size-and-scope.md +189 -0
- package/.agent-src/guidelines/agent-infra/tool-integration.md +73 -0
- package/.agent-src/guidelines/docs/readme-size-and-splitting.md +153 -0
- package/.agent-src/guidelines/e2e/playwright.md +363 -0
- package/.agent-src/guidelines/php/api-design.md +115 -0
- package/.agent-src/guidelines/php/artisan-commands.md +81 -0
- package/.agent-src/guidelines/php/blade-ui.md +78 -0
- package/.agent-src/guidelines/php/controllers.md +90 -0
- package/.agent-src/guidelines/php/database.md +111 -0
- package/.agent-src/guidelines/php/eloquent.md +208 -0
- package/.agent-src/guidelines/php/flux.md +80 -0
- package/.agent-src/guidelines/php/general.md +191 -0
- package/.agent-src/guidelines/php/git.md +96 -0
- package/.agent-src/guidelines/php/jobs.md +111 -0
- package/.agent-src/guidelines/php/livewire.md +71 -0
- package/.agent-src/guidelines/php/logging.md +79 -0
- package/.agent-src/guidelines/php/naming.md +89 -0
- package/.agent-src/guidelines/php/patterns/dependency-injection.md +57 -0
- package/.agent-src/guidelines/php/patterns/dtos.md +199 -0
- package/.agent-src/guidelines/php/patterns/events.md +67 -0
- package/.agent-src/guidelines/php/patterns/factory.md +53 -0
- package/.agent-src/guidelines/php/patterns/pipelines.md +66 -0
- package/.agent-src/guidelines/php/patterns/policies.md +66 -0
- package/.agent-src/guidelines/php/patterns/repositories.md +122 -0
- package/.agent-src/guidelines/php/patterns/service-layer.md +64 -0
- package/.agent-src/guidelines/php/patterns/strategy.md +69 -0
- package/.agent-src/guidelines/php/patterns.md +28 -0
- package/.agent-src/guidelines/php/performance.md +92 -0
- package/.agent-src/guidelines/php/resources.md +100 -0
- package/.agent-src/guidelines/php/security.md +110 -0
- package/.agent-src/guidelines/php/sql.md +97 -0
- package/.agent-src/guidelines/php/validations.md +119 -0
- package/.agent-src/guidelines/php/websocket.md +100 -0
- package/.agent-src/personas/README.md +104 -0
- package/.agent-src/personas/ai-agent.md +77 -0
- package/.agent-src/personas/critical-challenger.md +73 -0
- package/.agent-src/personas/developer.md +73 -0
- package/.agent-src/personas/product-owner.md +78 -0
- package/.agent-src/personas/qa.md +67 -0
- package/.agent-src/personas/senior-engineer.md +77 -0
- package/.agent-src/personas/stakeholder.md +78 -0
- package/.agent-src/rules/agent-docs.md +61 -0
- package/.agent-src/rules/analysis-skill-routing.md +48 -0
- package/.agent-src/rules/architecture.md +62 -0
- package/.agent-src/rules/artifact-drafting-protocol.md +73 -0
- package/.agent-src/rules/ask-when-uncertain.md +52 -0
- package/.agent-src/rules/augment-portability.md +38 -0
- package/.agent-src/rules/augment-source-of-truth.md +128 -0
- package/.agent-src/rules/capture-learnings.md +89 -0
- package/.agent-src/rules/cli-output-handling.md +94 -0
- package/.agent-src/rules/commit-conventions.md +64 -0
- package/.agent-src/rules/context-hygiene.md +90 -0
- package/.agent-src/rules/docker-commands.md +55 -0
- package/.agent-src/rules/docs-sync.md +79 -0
- package/.agent-src/rules/downstream-changes.md +70 -0
- package/.agent-src/rules/e2e-testing.md +53 -0
- package/.agent-src/rules/guidelines.md +90 -0
- package/.agent-src/rules/improve-before-implement.md +94 -0
- package/.agent-src/rules/language-and-tone.md +104 -0
- package/.agent-src/rules/laravel-translations.md +48 -0
- package/.agent-src/rules/markdown-safe-codeblocks.md +18 -0
- package/.agent-src/rules/minimal-safe-diff.md +87 -0
- package/.agent-src/rules/missing-tool-handling.md +62 -0
- package/.agent-src/rules/model-recommendation.md +70 -0
- package/.agent-src/rules/package-ci-checks.md +80 -0
- package/.agent-src/rules/php-coding.md +63 -0
- package/.agent-src/rules/preservation-guard.md +29 -0
- package/.agent-src/rules/review-routing-awareness.md +125 -0
- package/.agent-src/rules/reviewer-awareness.md +92 -0
- package/.agent-src/rules/roadmap-progress-sync.md +56 -0
- package/.agent-src/rules/role-mode-adherence.md +54 -0
- package/.agent-src/rules/rule-type-governance.md +46 -0
- package/.agent-src/rules/runtime-safety.md +42 -0
- package/.agent-src/rules/scope-control.md +40 -0
- package/.agent-src/rules/security-sensitive-stop.md +77 -0
- package/.agent-src/rules/size-enforcement.md +29 -0
- package/.agent-src/rules/skill-improvement-trigger.md +58 -0
- package/.agent-src/rules/skill-quality.md +110 -0
- package/.agent-src/rules/slash-commands.md +30 -0
- package/.agent-src/rules/think-before-action.md +91 -0
- package/.agent-src/rules/token-efficiency.md +99 -0
- package/.agent-src/rules/tool-safety.md +36 -0
- package/.agent-src/rules/upstream-proposal.md +76 -0
- package/.agent-src/rules/user-interaction.md +79 -0
- package/.agent-src/rules/verify-before-complete.md +120 -0
- package/.agent-src/scripts/scan-seeder-violations.php +145 -0
- package/.agent-src/scripts/update_roadmap_progress.py +244 -0
- package/.agent-src/skills/adversarial-review/SKILL.md +149 -0
- package/.agent-src/skills/agent-docs-writing/SKILL.md +234 -0
- package/.agent-src/skills/analysis-autonomous-mode/SKILL.md +197 -0
- package/.agent-src/skills/analysis-skill-router/SKILL.md +134 -0
- package/.agent-src/skills/api-design/SKILL.md +104 -0
- package/.agent-src/skills/api-endpoint/SKILL.md +185 -0
- package/.agent-src/skills/api-testing/SKILL.md +206 -0
- package/.agent-src/skills/artisan-commands/SKILL.md +78 -0
- package/.agent-src/skills/authz-review/SKILL.md +171 -0
- package/.agent-src/skills/aws-infrastructure/SKILL.md +152 -0
- package/.agent-src/skills/blade-ui/SKILL.md +75 -0
- package/.agent-src/skills/blast-radius-analyzer/SKILL.md +185 -0
- package/.agent-src/skills/bug-analyzer/SKILL.md +256 -0
- package/.agent-src/skills/check-refs/SKILL.md +72 -0
- package/.agent-src/skills/code-refactoring/SKILL.md +200 -0
- package/.agent-src/skills/code-review/SKILL.md +214 -0
- package/.agent-src/skills/command-routing/SKILL.md +96 -0
- package/.agent-src/skills/command-writing/SKILL.md +143 -0
- package/.agent-src/skills/composer-packages/SKILL.md +172 -0
- package/.agent-src/skills/context-authoring/SKILL.md +157 -0
- package/.agent-src/skills/context-document/SKILL.md +153 -0
- package/.agent-src/skills/conventional-commits-writing/SKILL.md +70 -0
- package/.agent-src/skills/copilot-agents-optimization/SKILL.md +220 -0
- package/.agent-src/skills/copilot-config/SKILL.md +203 -0
- package/.agent-src/skills/dashboard-design/SKILL.md +116 -0
- package/.agent-src/skills/data-flow-mapper/SKILL.md +160 -0
- package/.agent-src/skills/database/SKILL.md +91 -0
- package/.agent-src/skills/dependency-upgrade/SKILL.md +204 -0
- package/.agent-src/skills/description-assist/SKILL.md +169 -0
- package/.agent-src/skills/design-review/SKILL.md +228 -0
- package/.agent-src/skills/devcontainer/SKILL.md +121 -0
- package/.agent-src/skills/developer-like-execution/SKILL.md +276 -0
- package/.agent-src/skills/docker/SKILL.md +245 -0
- package/.agent-src/skills/dto-creator/SKILL.md +117 -0
- package/.agent-src/skills/eloquent/SKILL.md +92 -0
- package/.agent-src/skills/eloquent/evals/last-run.json +99 -0
- package/.agent-src/skills/eloquent/evals/triggers.json +16 -0
- package/.agent-src/skills/estimate-ticket/SKILL.md +186 -0
- package/.agent-src/skills/estimate-ticket/evals/output-schema.yml +20 -0
- package/.agent-src/skills/estimate-ticket/evals/triggers.json +18 -0
- package/.agent-src/skills/fe-design/SKILL.md +223 -0
- package/.agent-src/skills/feature-planning/SKILL.md +226 -0
- package/.agent-src/skills/file-editor/SKILL.md +129 -0
- package/.agent-src/skills/finishing-a-development-branch/SKILL.md +200 -0
- package/.agent-src/skills/flux/SKILL.md +64 -0
- package/.agent-src/skills/git-workflow/SKILL.md +102 -0
- package/.agent-src/skills/github-ci/SKILL.md +122 -0
- package/.agent-src/skills/grafana/SKILL.md +168 -0
- package/.agent-src/skills/guideline-writing/SKILL.md +147 -0
- package/.agent-src/skills/jira-integration/SKILL.md +182 -0
- package/.agent-src/skills/jobs-events/SKILL.md +87 -0
- package/.agent-src/skills/judge-bug-hunter/SKILL.md +157 -0
- package/.agent-src/skills/judge-code-quality/SKILL.md +158 -0
- package/.agent-src/skills/judge-security-auditor/SKILL.md +167 -0
- package/.agent-src/skills/judge-test-coverage/SKILL.md +154 -0
- package/.agent-src/skills/laravel/SKILL.md +195 -0
- package/.agent-src/skills/laravel-horizon/SKILL.md +169 -0
- package/.agent-src/skills/laravel-mail/SKILL.md +193 -0
- package/.agent-src/skills/laravel-middleware/SKILL.md +185 -0
- package/.agent-src/skills/laravel-notifications/SKILL.md +168 -0
- package/.agent-src/skills/laravel-pennant/SKILL.md +188 -0
- package/.agent-src/skills/laravel-pulse/SKILL.md +160 -0
- package/.agent-src/skills/laravel-reverb/SKILL.md +205 -0
- package/.agent-src/skills/laravel-scheduling/SKILL.md +167 -0
- package/.agent-src/skills/laravel-validation/SKILL.md +71 -0
- package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +249 -0
- package/.agent-src/skills/lint-skills/SKILL.md +72 -0
- package/.agent-src/skills/livewire/SKILL.md +79 -0
- package/.agent-src/skills/logging-monitoring/SKILL.md +100 -0
- package/.agent-src/skills/mcp/SKILL.md +193 -0
- package/.agent-src/skills/merge-conflicts/SKILL.md +158 -0
- package/.agent-src/skills/migration-creator/SKILL.md +160 -0
- package/.agent-src/skills/module-management/SKILL.md +154 -0
- package/.agent-src/skills/multi-tenancy/SKILL.md +129 -0
- package/.agent-src/skills/openapi/SKILL.md +154 -0
- package/.agent-src/skills/override-management/SKILL.md +186 -0
- package/.agent-src/skills/performance/SKILL.md +69 -0
- package/.agent-src/skills/performance-analysis/SKILL.md +118 -0
- package/.agent-src/skills/pest-testing/SKILL.md +321 -0
- package/.agent-src/skills/php-coder/SKILL.md +78 -0
- package/.agent-src/skills/php-coder/evals/triggers.json +16 -0
- package/.agent-src/skills/php-debugging/SKILL.md +184 -0
- package/.agent-src/skills/php-service/SKILL.md +96 -0
- package/.agent-src/skills/playwright-testing/SKILL.md +244 -0
- package/.agent-src/skills/project-analysis-core/SKILL.md +138 -0
- package/.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +130 -0
- package/.agent-src/skills/project-analysis-laravel/SKILL.md +119 -0
- package/.agent-src/skills/project-analysis-nextjs/SKILL.md +123 -0
- package/.agent-src/skills/project-analysis-node-express/SKILL.md +111 -0
- package/.agent-src/skills/project-analysis-react/SKILL.md +119 -0
- package/.agent-src/skills/project-analysis-symfony/SKILL.md +111 -0
- package/.agent-src/skills/project-analysis-zend-laminas/SKILL.md +108 -0
- package/.agent-src/skills/project-analyzer/SKILL.md +341 -0
- package/.agent-src/skills/project-docs/SKILL.md +137 -0
- package/.agent-src/skills/quality-tools/SKILL.md +411 -0
- package/.agent-src/skills/readme-reviewer/SKILL.md +187 -0
- package/.agent-src/skills/readme-writing/SKILL.md +142 -0
- package/.agent-src/skills/readme-writing-package/SKILL.md +185 -0
- package/.agent-src/skills/receiving-code-review/SKILL.md +190 -0
- package/.agent-src/skills/refine-ticket/SKILL.md +310 -0
- package/.agent-src/skills/refine-ticket/detection-map.yml +124 -0
- package/.agent-src/skills/refine-ticket/evals/output-schema.yml +16 -0
- package/.agent-src/skills/refine-ticket/evals/triggers.json +16 -0
- package/.agent-src/skills/requesting-code-review/SKILL.md +199 -0
- package/.agent-src/skills/review-routing/SKILL.md +195 -0
- package/.agent-src/skills/roadmap-management/SKILL.md +303 -0
- package/.agent-src/skills/rtk-output-filtering/SKILL.md +184 -0
- package/.agent-src/skills/rule-writing/SKILL.md +148 -0
- package/.agent-src/skills/security/SKILL.md +79 -0
- package/.agent-src/skills/security-audit/SKILL.md +123 -0
- package/.agent-src/skills/sentry-integration/SKILL.md +170 -0
- package/.agent-src/skills/sequential-thinking/SKILL.md +158 -0
- package/.agent-src/skills/skill-improvement-pipeline/SKILL.md +155 -0
- package/.agent-src/skills/skill-management/SKILL.md +121 -0
- package/.agent-src/skills/skill-reviewer/SKILL.md +218 -0
- package/.agent-src/skills/skill-writing/SKILL.md +291 -0
- package/.agent-src/skills/skill-writing/evals/triggers.json +16 -0
- package/.agent-src/skills/sql-writing/SKILL.md +74 -0
- package/.agent-src/skills/subagent-orchestration/SKILL.md +190 -0
- package/.agent-src/skills/systematic-debugging/SKILL.md +244 -0
- package/.agent-src/skills/technical-specification/SKILL.md +185 -0
- package/.agent-src/skills/terraform/SKILL.md +137 -0
- package/.agent-src/skills/terragrunt/SKILL.md +217 -0
- package/.agent-src/skills/test-driven-development/SKILL.md +252 -0
- package/.agent-src/skills/test-performance/SKILL.md +172 -0
- package/.agent-src/skills/threat-modeling/SKILL.md +189 -0
- package/.agent-src/skills/traefik/SKILL.md +319 -0
- package/.agent-src/skills/universal-project-analysis/SKILL.md +179 -0
- package/.agent-src/skills/upstream-contribute/SKILL.md +255 -0
- package/.agent-src/skills/using-git-worktrees/SKILL.md +148 -0
- package/.agent-src/skills/validate-feature-fit/SKILL.md +113 -0
- package/.agent-src/skills/verify-before-complete/SKILL.md +188 -0
- package/.agent-src/skills/websocket/SKILL.md +75 -0
- package/.agent-src/templates/AGENTS.md +146 -0
- package/.agent-src/templates/agent-settings.md +256 -0
- package/.agent-src/templates/agents/.gitattributes.fragment +16 -0
- package/.agent-src/templates/agents/agent-project-settings.example.yml +138 -0
- package/.agent-src/templates/agents/memory/architecture-decisions.example.yml +95 -0
- package/.agent-src/templates/agents/memory/domain-invariants.example.yml +80 -0
- package/.agent-src/templates/agents/memory/historical-patterns.example.yml +82 -0
- package/.agent-src/templates/agents/memory/incident-learnings.example.yml +113 -0
- package/.agent-src/templates/agents/memory/ownership.example.yml +75 -0
- package/.agent-src/templates/agents/memory/product-rules.example.yml +87 -0
- package/.agent-src/templates/agents/proposal.example.md +143 -0
- package/.agent-src/templates/command.md +84 -0
- package/.agent-src/templates/contexts/auth-model.md +59 -0
- package/.agent-src/templates/contexts/data-sensitivity.md +60 -0
- package/.agent-src/templates/contexts/deployment-order.md +72 -0
- package/.agent-src/templates/contexts/observability.md +64 -0
- package/.agent-src/templates/contexts/tenant-boundaries.md +68 -0
- package/.agent-src/templates/contexts.md +116 -0
- package/.agent-src/templates/copilot-instructions.md +115 -0
- package/.agent-src/templates/features.md +125 -0
- package/.agent-src/templates/github-workflows/memory-hygiene.yml +133 -0
- package/.agent-src/templates/github-workflows/pr-risk-review.yml +123 -0
- package/.agent-src/templates/github-workflows/proposal-drift.yml +118 -0
- package/.agent-src/templates/overrides/command.md +24 -0
- package/.agent-src/templates/overrides/guideline.md +21 -0
- package/.agent-src/templates/overrides/rule.md +19 -0
- package/.agent-src/templates/overrides/skill.md +24 -0
- package/.agent-src/templates/overrides/template.md +21 -0
- package/.agent-src/templates/persona.md +99 -0
- package/.agent-src/templates/roadmaps.md +109 -0
- package/.agent-src/templates/scripts/README.md +195 -0
- package/.agent-src/templates/scripts/check_memory.py +283 -0
- package/.agent-src/templates/scripts/check_memory_proposal.py +180 -0
- package/.agent-src/templates/scripts/historical-bug-patterns.example.yml +84 -0
- package/.agent-src/templates/scripts/implement_ticket/__init__.py +57 -0
- package/.agent-src/templates/scripts/implement_ticket/__main__.py +9 -0
- package/.agent-src/templates/scripts/implement_ticket/cli.py +171 -0
- package/.agent-src/templates/scripts/implement_ticket/delivery_state.py +130 -0
- package/.agent-src/templates/scripts/implement_ticket/dispatcher.py +134 -0
- package/.agent-src/templates/scripts/implement_ticket/persona_policy.py +85 -0
- package/.agent-src/templates/scripts/implement_ticket/steps/__init__.py +49 -0
- package/.agent-src/templates/scripts/implement_ticket/steps/analyze.py +98 -0
- package/.agent-src/templates/scripts/implement_ticket/steps/implement.py +145 -0
- package/.agent-src/templates/scripts/implement_ticket/steps/memory.py +136 -0
- package/.agent-src/templates/scripts/implement_ticket/steps/plan.py +175 -0
- package/.agent-src/templates/scripts/implement_ticket/steps/refine.py +140 -0
- package/.agent-src/templates/scripts/implement_ticket/steps/report.py +195 -0
- package/.agent-src/templates/scripts/implement_ticket/steps/test.py +180 -0
- package/.agent-src/templates/scripts/implement_ticket/steps/verify.py +170 -0
- package/.agent-src/templates/scripts/memory_hash.py +75 -0
- package/.agent-src/templates/scripts/memory_lookup.py +216 -0
- package/.agent-src/templates/scripts/memory_report.py +184 -0
- package/.agent-src/templates/scripts/memory_signal.py +167 -0
- package/.agent-src/templates/scripts/memory_status.py +156 -0
- package/.agent-src/templates/scripts/ownership-map.example.yml +87 -0
- package/.agent-src/templates/scripts/pr-risk-config.example.yml +76 -0
- package/.agent-src/templates/scripts/pr_review_routing.py +340 -0
- package/.agent-src/templates/scripts/pr_risk_review.py +211 -0
- package/.agent-src/templates/skill.md +136 -0
- package/.augment-plugin/marketplace.json +32 -0
- package/.augment-plugin/plugin.json +21 -0
- package/.claude-plugin/marketplace.json +119 -0
- package/AGENTS.md +121 -0
- package/CHANGELOG.md +279 -0
- package/CONTRIBUTING.md +176 -0
- package/LICENSE +21 -0
- package/README.md +357 -0
- package/bin/install.php +38 -0
- package/composer.json +29 -0
- package/config/agent-settings.template.yml +96 -0
- package/config/profiles/balanced.ini +10 -0
- package/config/profiles/full.ini +10 -0
- package/config/profiles/minimal.ini +10 -0
- package/docs/architecture.md +144 -0
- package/docs/customization.md +88 -0
- package/docs/development.md +171 -0
- package/docs/getting-started.md +130 -0
- package/docs/github-topics.md +84 -0
- package/docs/installation.md +376 -0
- package/docs/mcp.md +133 -0
- package/docs/quality.md +98 -0
- package/docs/skills-catalog.md +136 -0
- package/docs/troubleshooting.md +167 -0
- package/llms.txt +130 -0
- package/package.json +31 -0
- package/scripts/audit_skill_descriptions.py +168 -0
- package/scripts/check_compression.py +221 -0
- package/scripts/check_memory.py +341 -0
- package/scripts/check_memory_proposal.py +180 -0
- package/scripts/check_portability.py +320 -0
- package/scripts/check_proposal.py +269 -0
- package/scripts/check_references.py +400 -0
- package/scripts/ci_summary.py +131 -0
- package/scripts/compress.py +671 -0
- package/scripts/compress.sh +18 -0
- package/scripts/first-run.sh +109 -0
- package/scripts/generate_catalog.py +116 -0
- package/scripts/install +151 -0
- package/scripts/install-hooks.sh +29 -0
- package/scripts/install.py +487 -0
- package/scripts/install.sh +637 -0
- package/scripts/install_anthropic_key.sh +101 -0
- package/scripts/inventory_frontmatter.py +164 -0
- package/scripts/lint_marketplace.py +142 -0
- package/scripts/lint_regression.py +232 -0
- package/scripts/mcp_render.py +159 -0
- package/scripts/measure_patterns.py +376 -0
- package/scripts/memory_hash.py +75 -0
- package/scripts/memory_lookup.py +441 -0
- package/scripts/memory_report.py +336 -0
- package/scripts/memory_signal.py +210 -0
- package/scripts/memory_status.py +195 -0
- package/scripts/postinstall.sh +60 -0
- package/scripts/readme_linter.py +580 -0
- package/scripts/refine_ticket_detect.py +623 -0
- package/scripts/requirements-evals.txt +7 -0
- package/scripts/runtime_dispatcher.py +265 -0
- package/scripts/runtime_handler.py +148 -0
- package/scripts/runtime_registry.py +166 -0
- package/scripts/schemas/command.schema.json +32 -0
- package/scripts/schemas/persona.schema.json +42 -0
- package/scripts/schemas/rule.schema.json +28 -0
- package/scripts/schemas/skill.schema.json +73 -0
- package/scripts/setup.sh +230 -0
- package/scripts/setup_eval_venv.sh +58 -0
- package/scripts/skill_linter.py +2175 -0
- package/scripts/skill_trigger_eval.py +651 -0
- package/scripts/tool_registry.py +146 -0
- package/scripts/tools/__init__.py +1 -0
- package/scripts/tools/adapter_errors.py +63 -0
- package/scripts/tools/base_adapter.py +91 -0
- package/scripts/tools/github_adapter.py +128 -0
- package/scripts/tools/jira_adapter.py +115 -0
- package/scripts/update_counts.py +147 -0
- package/scripts/validate_frontmatter.py +424 -0
- package/templates/consumer-settings/README.md +46 -0
- package/templates/consumer-settings/augment-settings.json +12 -0
- package/templates/consumer-settings/claude-settings.json +9 -0
- package/templates/consumer-settings/copilot-settings.json +14 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: api-endpoint
|
|
3
|
+
description: "Use when the user says "create endpoint", "new API route", or "add controller". Creates a complete endpoint with Controller, FormRequest, Resource, route, and OpenAPI docs."
|
|
4
|
+
source: package
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# api-endpoint
|
|
8
|
+
|
|
9
|
+
## When to use
|
|
10
|
+
|
|
11
|
+
Use this skill when the user asks to create a new API endpoint, REST route, or controller action.
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
Do NOT use when:
|
|
15
|
+
- Modifying existing endpoints (use `code-refactoring` skill)
|
|
16
|
+
- API design decisions (use `api-design` skill)
|
|
17
|
+
|
|
18
|
+
## Procedure: Create an API endpoint
|
|
19
|
+
|
|
20
|
+
1. **Read project docs** — Check `./agents/` and `AGENTS.md` for controller conventions, resource patterns, routing.
|
|
21
|
+
2. **Create route** — Add to the correct `routes/api.php` or module route file.
|
|
22
|
+
3. **Create controller** — Thin controller, delegate logic to service.
|
|
23
|
+
4. **Create FormRequest** — Validate all input at the boundary.
|
|
24
|
+
5. **Create Resource** — Transform model output via API Resource.
|
|
25
|
+
6. **Verify** — Run PHPStan, run tests, confirm response shape matches conventions.
|
|
26
|
+
|
|
27
|
+
## Laravel projects
|
|
28
|
+
|
|
29
|
+
### What to generate
|
|
30
|
+
|
|
31
|
+
1. **Controller** — Single Action (invokable). Read `agents/docs/controller.md` and `.augment/guidelines/php/controllers.md`.
|
|
32
|
+
2. **FormRequest** — Validation rules, `authorize()` via policies. Read `.augment/guidelines/php/validations.md`.
|
|
33
|
+
3. **Resource** — JSON response transformation. Read `agents/docs/api-resources.md`.
|
|
34
|
+
4. **Route** — Add to the correct versioned route file.
|
|
35
|
+
5. **Policy** — If authorization is needed.
|
|
36
|
+
6. **Filter classes** — If it's a list endpoint with filtering. Read `agents/docs/query-filter.md` (if it exists).
|
|
37
|
+
|
|
38
|
+
### Conventions
|
|
39
|
+
|
|
40
|
+
- Controllers are thin — delegate to Services.
|
|
41
|
+
- **Every controller MUST return an API Resource** — never raw arrays, models, or `response()->json()`.
|
|
42
|
+
- Controllers type-hint the return value as the Resource class (e.g. `): ProjectResource`).
|
|
43
|
+
- Use `Resource::make()` for single items, `Resource::collection()` for lists.
|
|
44
|
+
- Use method injection on `__invoke()` for new controllers.
|
|
45
|
+
- Use DTOs for data transfer between layers.
|
|
46
|
+
|
|
47
|
+
### Show endpoint example
|
|
48
|
+
|
|
49
|
+
```php
|
|
50
|
+
declare(strict_types=1);
|
|
51
|
+
|
|
52
|
+
namespace App\Http\Controllers\v1\Project;
|
|
53
|
+
|
|
54
|
+
use App\Http\Controllers\Controller;
|
|
55
|
+
use App\Http\Requests\v1\Projects\ShowProjectRequest;
|
|
56
|
+
use App\Http\Resources\v1\Project\ProjectResource;
|
|
57
|
+
use App\Models\ExternalCustomerDatabase\Project\Project;
|
|
58
|
+
use App\OpenApi\Schema\Request\ShowResourceRequestSchema;
|
|
59
|
+
use App\OpenApi\Schema\Response\ResourceNotFoundResponse;
|
|
60
|
+
use App\OpenApi\Schema\Response\ShowResourceResponseSchema;
|
|
61
|
+
|
|
62
|
+
class ShowProjectController extends Controller
|
|
63
|
+
{
|
|
64
|
+
#[ShowResourceRequestSchema(path: '/projects/{id}', version: '1', resource: ProjectResource::class)]
|
|
65
|
+
#[ShowResourceResponseSchema(ProjectResource::class, wrapInDataObject: false)]
|
|
66
|
+
#[ResourceNotFoundResponse(ProjectResource::class)]
|
|
67
|
+
public function __invoke(ShowProjectRequest $request, Project $project): ProjectResource
|
|
68
|
+
{
|
|
69
|
+
return ProjectResource::make($project);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Create endpoint with service injection
|
|
75
|
+
|
|
76
|
+
```php
|
|
77
|
+
class CreateCustomerController extends Controller
|
|
78
|
+
{
|
|
79
|
+
#[CreateCustomerRequestSchema(path: '/customers', version: '1', resource: CustomerResource::class)]
|
|
80
|
+
#[CreateResourceResponseSchema(resource: CreatedCustomerResource::class, wrapInDataObject: false)]
|
|
81
|
+
#[ValidationErrorResponse]
|
|
82
|
+
public function __invoke(
|
|
83
|
+
CreateCustomerRequest $request,
|
|
84
|
+
CustomerModelService $customerService,
|
|
85
|
+
): CustomerResource {
|
|
86
|
+
$result = $customerService->create(CreateCustomerDTO::fromRequest($request));
|
|
87
|
+
|
|
88
|
+
return CreatedCustomerResource::make($result);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### FormRequest example
|
|
94
|
+
|
|
95
|
+
```php
|
|
96
|
+
declare(strict_types=1);
|
|
97
|
+
|
|
98
|
+
namespace App\Http\Requests\v1\Projects;
|
|
99
|
+
|
|
100
|
+
use Illuminate\Foundation\Http\FormRequest;
|
|
101
|
+
|
|
102
|
+
class ShowProjectRequest extends FormRequest
|
|
103
|
+
{
|
|
104
|
+
public function authorize(): bool
|
|
105
|
+
{
|
|
106
|
+
return $this->user()->can('view', $this->route('project'));
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** @return array<string, mixed> */
|
|
110
|
+
public function rules(): array
|
|
111
|
+
{
|
|
112
|
+
return [];
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### List endpoint with CollectionFormRequest
|
|
118
|
+
|
|
119
|
+
For list endpoints, extend `CollectionFormRequest` which provides `perPage`, `page`, and `orderBy` rules:
|
|
120
|
+
|
|
121
|
+
```php
|
|
122
|
+
use App\Contracts\Http\Requests\CollectionFormRequest;
|
|
123
|
+
|
|
124
|
+
class ListProjectsRequest extends CollectionFormRequest
|
|
125
|
+
{
|
|
126
|
+
public string $model = Project::class;
|
|
127
|
+
|
|
128
|
+
/** @return array<string, mixed> */
|
|
129
|
+
public function rules(): array
|
|
130
|
+
{
|
|
131
|
+
return [
|
|
132
|
+
...parent::rules(),
|
|
133
|
+
'status' => ['sometimes', 'string'],
|
|
134
|
+
];
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### File locations
|
|
140
|
+
|
|
141
|
+
| Component | Path |
|
|
142
|
+
|---|---|
|
|
143
|
+
| Controller | `app/Http/Controllers/v{N}/{Domain}/{Action}{Entity}Controller.php` |
|
|
144
|
+
| FormRequest | `app/Http/Requests/v{N}/{Domain}/{Action}{Entity}Request.php` |
|
|
145
|
+
| Resource | `app/Http/Resources/v{N}/{Domain}/{Entity}Resource.php` |
|
|
146
|
+
| Route | `routes/api/v{N}/{domain}.php` |
|
|
147
|
+
| Policy | `app/Policies/{Entity}Policy.php` |
|
|
148
|
+
|
|
149
|
+
### OpenAPI documentation
|
|
150
|
+
|
|
151
|
+
Controllers use PHP 8 attributes for OpenAPI spec generation from `App\OpenApi\Schema\`:
|
|
152
|
+
|
|
153
|
+
- `ShowResourceRequestSchema`, `ListResourceRequestSchema`, `CreateResourceRequestSchema`
|
|
154
|
+
- `ShowResourceResponseSchema`, `ListResourceResponseSchema`, `CreateResourceResponseSchema`
|
|
155
|
+
- `ResourceNotFoundResponse`, `ValidationErrorResponse`
|
|
156
|
+
|
|
157
|
+
## Output format
|
|
158
|
+
|
|
159
|
+
1. Generated files — controller, route registration, FormRequest, Resource, Policy
|
|
160
|
+
2. Test file with happy path and validation error cases
|
|
161
|
+
3. Summary of created files and their locations
|
|
162
|
+
|
|
163
|
+
## Gotcha
|
|
164
|
+
|
|
165
|
+
- Don't forget to register the route — creating the controller without the route is a common miss.
|
|
166
|
+
- Always check if a similar endpoint already exists — duplicates cause confusion.
|
|
167
|
+
- FormRequest validation rules must match the OpenAPI schema — keep them in sync.
|
|
168
|
+
- The model tends to forget the `return` type on Resource `toArray()` methods.
|
|
169
|
+
|
|
170
|
+
## Do NOT
|
|
171
|
+
|
|
172
|
+
- Do NOT put business logic in controllers — delegate to services.
|
|
173
|
+
- Do NOT skip FormRequest validation — every controller needs a FormRequest.
|
|
174
|
+
- Do NOT return raw Eloquent models — always use API Resources.
|
|
175
|
+
- Do NOT create routes without proper authorization (Policy in FormRequest or middleware).
|
|
176
|
+
- Do NOT create multi-action controllers — only single-action with `__invoke()`.
|
|
177
|
+
- Do NOT use `response()->json()` — use `Resource::make()`.
|
|
178
|
+
|
|
179
|
+
## Auto-trigger keywords
|
|
180
|
+
|
|
181
|
+
- create endpoint
|
|
182
|
+
- new API route
|
|
183
|
+
- controller creation
|
|
184
|
+
- form request
|
|
185
|
+
- API resource
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: api-testing
|
|
3
|
+
description: "Use when writing API endpoint tests — integration tests, contract validation, response assertions, mocked external services — even when the user says 'test this route' without naming API testing."
|
|
4
|
+
source: package
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# api-testing
|
|
8
|
+
|
|
9
|
+
## When to use
|
|
10
|
+
|
|
11
|
+
Use this skill when writing or reviewing API endpoint tests — integration tests,
|
|
12
|
+
contract validation, response structure checks, or external service mocking.
|
|
13
|
+
|
|
14
|
+
## Procedure: Write API tests
|
|
15
|
+
|
|
16
|
+
1. **Understand the endpoint** — Read controller, form request, existing tests. Understand expected behavior and edge cases before writing anything.
|
|
17
|
+
2. **Set up test data** — Use seeders (preferred) or factories. Mock external services with `Http::fake()`.
|
|
18
|
+
3. **Write test cases** — Cover success, validation errors, authorization failures, edge cases.
|
|
19
|
+
4. **Assert response** — Check status code, JSON structure, data values. Use `assertJsonStructure()`.
|
|
20
|
+
5. **Verify** — Run the test. Must pass. Check no flaky assertions (no time-dependent, no random ordering).
|
|
21
|
+
|
|
22
|
+
### Example
|
|
23
|
+
|
|
24
|
+
```php
|
|
25
|
+
describe('GET /api/v1/projects', function () {
|
|
26
|
+
it('returns paginated projects for authenticated user', function () {
|
|
27
|
+
$user = loginAsTestUser();
|
|
28
|
+
|
|
29
|
+
$response = $this->getJson('/api/v1/projects');
|
|
30
|
+
|
|
31
|
+
$response->assertOk()
|
|
32
|
+
->assertJsonStructure([
|
|
33
|
+
'data' => [['id', 'title', 'status']],
|
|
34
|
+
'meta' => ['current_page', 'per_page', 'total'],
|
|
35
|
+
]);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('returns 401 for unauthenticated request', function () {
|
|
39
|
+
$this->getJson('/api/v1/projects')
|
|
40
|
+
->assertUnauthorized();
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('returns 403 when user lacks permission', function () {
|
|
44
|
+
loginAsRestrictedUser();
|
|
45
|
+
|
|
46
|
+
$this->getJson('/api/v1/projects')
|
|
47
|
+
->assertForbidden();
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Test categories
|
|
53
|
+
|
|
54
|
+
### Happy path
|
|
55
|
+
|
|
56
|
+
Test the expected success scenario with valid input:
|
|
57
|
+
|
|
58
|
+
```php
|
|
59
|
+
it('creates a project', function () {
|
|
60
|
+
loginAsTestUser();
|
|
61
|
+
|
|
62
|
+
$this->postJson('/api/v1/projects', [
|
|
63
|
+
'title' => 'New Project',
|
|
64
|
+
'customer_id' => $customerId,
|
|
65
|
+
])
|
|
66
|
+
->assertCreated()
|
|
67
|
+
->assertJsonPath('data.title', 'New Project');
|
|
68
|
+
|
|
69
|
+
$this->assertDatabaseHas('projects', ['title' => 'New Project']);
|
|
70
|
+
});
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Validation
|
|
74
|
+
|
|
75
|
+
Test that invalid input is rejected with correct error messages:
|
|
76
|
+
|
|
77
|
+
```php
|
|
78
|
+
it('rejects project without title', function () {
|
|
79
|
+
loginAsTestUser();
|
|
80
|
+
|
|
81
|
+
$this->postJson('/api/v1/projects', [
|
|
82
|
+
'customer_id' => $customerId,
|
|
83
|
+
])
|
|
84
|
+
->assertUnprocessable()
|
|
85
|
+
->assertJsonValidationErrors(['title']);
|
|
86
|
+
});
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Authorization
|
|
90
|
+
|
|
91
|
+
Test that unauthorized access is blocked:
|
|
92
|
+
|
|
93
|
+
```php
|
|
94
|
+
it('prevents non-owner from updating project', function () {
|
|
95
|
+
$otherUser = loginAsOtherUser();
|
|
96
|
+
|
|
97
|
+
$this->putJson("/api/v1/projects/{$project->id}", [
|
|
98
|
+
'title' => 'Hijacked',
|
|
99
|
+
])
|
|
100
|
+
->assertForbidden();
|
|
101
|
+
});
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Edge cases
|
|
105
|
+
|
|
106
|
+
Test boundary conditions:
|
|
107
|
+
|
|
108
|
+
```php
|
|
109
|
+
it('handles empty collection', function () {
|
|
110
|
+
loginAsTestUser();
|
|
111
|
+
|
|
112
|
+
$this->getJson('/api/v1/projects')
|
|
113
|
+
->assertOk()
|
|
114
|
+
->assertJsonCount(0, 'data');
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it('paginates large result sets', function () {
|
|
118
|
+
loginAsTestUser();
|
|
119
|
+
|
|
120
|
+
$this->getJson('/api/v1/projects?per_page=5')
|
|
121
|
+
->assertOk()
|
|
122
|
+
->assertJsonPath('meta.per_page', 5);
|
|
123
|
+
});
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Response contract validation
|
|
127
|
+
|
|
128
|
+
### Assert JSON structure
|
|
129
|
+
|
|
130
|
+
```php
|
|
131
|
+
// Verify response shape (keys exist)
|
|
132
|
+
$response->assertJsonStructure([
|
|
133
|
+
'data' => ['id', 'title', 'status', 'created_at'],
|
|
134
|
+
]);
|
|
135
|
+
|
|
136
|
+
// Verify exact values
|
|
137
|
+
$response->assertJsonPath('data.status', 'active');
|
|
138
|
+
|
|
139
|
+
// Verify collection count
|
|
140
|
+
$response->assertJsonCount(3, 'data');
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Assert response types
|
|
144
|
+
|
|
145
|
+
```php
|
|
146
|
+
// When strict typing matters
|
|
147
|
+
$data = $response->json('data');
|
|
148
|
+
expect($data['id'])->toBeInt();
|
|
149
|
+
expect($data['title'])->toBeString();
|
|
150
|
+
expect($data['total'])->toBeString(); // Money as string, not float
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## External service mocking
|
|
154
|
+
|
|
155
|
+
```php
|
|
156
|
+
it('handles external API failure gracefully', function () {
|
|
157
|
+
Http::fake([
|
|
158
|
+
'external-api.com/*' => Http::response(null, 500),
|
|
159
|
+
]);
|
|
160
|
+
|
|
161
|
+
loginAsTestUser();
|
|
162
|
+
|
|
163
|
+
$this->postJson('/api/v1/sync')
|
|
164
|
+
->assertStatus(502)
|
|
165
|
+
->assertJsonPath('message', 'External service unavailable');
|
|
166
|
+
});
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Test checklist per endpoint
|
|
170
|
+
|
|
171
|
+
| Category | Tests needed |
|
|
172
|
+
|---|---|
|
|
173
|
+
| **Auth** | Unauthenticated (401), unauthorized (403) |
|
|
174
|
+
| **Validation** | Missing fields, wrong types, boundary values |
|
|
175
|
+
| **Happy path** | Success with valid input, correct status code |
|
|
176
|
+
| **Response** | JSON structure, field types, pagination meta |
|
|
177
|
+
| **Side effects** | Database changes, events dispatched, jobs queued |
|
|
178
|
+
| **Edge cases** | Empty results, large payloads, concurrent access |
|
|
179
|
+
|
|
180
|
+
## Output format
|
|
181
|
+
|
|
182
|
+
1. Pest test file covering happy path, validation, auth, and edge cases
|
|
183
|
+
2. Test names as readable sentences describing expected behavior
|
|
184
|
+
3. Mocked external services where applicable
|
|
185
|
+
|
|
186
|
+
## Auto-trigger keywords
|
|
187
|
+
|
|
188
|
+
- API test
|
|
189
|
+
- endpoint test
|
|
190
|
+
- integration test
|
|
191
|
+
- response validation
|
|
192
|
+
- contract testing
|
|
193
|
+
|
|
194
|
+
## Gotcha
|
|
195
|
+
|
|
196
|
+
- Don't test framework internals (e.g., "does Laravel return 422 on validation error") — test YOUR validation rules.
|
|
197
|
+
- Always seed test data explicitly — don't rely on data from other tests (parallel execution).
|
|
198
|
+
- Mock external APIs with `Http::fake()` — never hit real services in tests.
|
|
199
|
+
- The model forgets to assert response structure, only checking status codes — always check both.
|
|
200
|
+
|
|
201
|
+
## Do NOT
|
|
202
|
+
|
|
203
|
+
- Do not hardcode IDs or timestamps — use factories or seeders.
|
|
204
|
+
- Do not skip auth tests — always test both authenticated and unauthenticated.
|
|
205
|
+
- Do not assert entire JSON responses — assert only meaningful fields.
|
|
206
|
+
- Do not use `Http::fake()` without also testing the real integration path.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: artisan-commands
|
|
3
|
+
description: "Use when creating or modifying Artisan commands. Covers clear signatures, safe execution flow, helpful output, and project conventions for console tooling."
|
|
4
|
+
source: package
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# artisan-commands
|
|
8
|
+
|
|
9
|
+
## When to use
|
|
10
|
+
|
|
11
|
+
Use when creating or modifying Laravel Artisan commands — maintenance scripts, imports/exports, batch processing, repair/cleanup, scheduled tasks, developer utilities.
|
|
12
|
+
|
|
13
|
+
Do NOT use when:
|
|
14
|
+
- Writing queue jobs (use `jobs-events` skill)
|
|
15
|
+
- Writing scheduled task config (use `laravel-scheduling` skill)
|
|
16
|
+
|
|
17
|
+
## Procedure: Create an Artisan command
|
|
18
|
+
|
|
19
|
+
### Step 0: Inspect
|
|
20
|
+
|
|
21
|
+
1. Check existing commands — match naming, signature style, output format.
|
|
22
|
+
2. Determine audience: developer, support, operations, cron, or scheduler.
|
|
23
|
+
3. Determine if interactive or automated.
|
|
24
|
+
4. Identify related services — commands orchestrate, not own business logic.
|
|
25
|
+
|
|
26
|
+
### Step 1: Scaffold
|
|
27
|
+
|
|
28
|
+
1. Create command class in `app/Console/Commands/` or module `App/Commands/`.
|
|
29
|
+
2. Name: `{domain}:{action}` — e.g. `users:cleanup`, `orders:sync`.
|
|
30
|
+
3. Define arguments (required) and options (toggles/filters) explicitly.
|
|
31
|
+
|
|
32
|
+
### Step 2: Implement handle()
|
|
33
|
+
|
|
34
|
+
1. Validate preconditions (environment, input, dependencies).
|
|
35
|
+
2. Call service/action for business logic.
|
|
36
|
+
3. Report progress and results via console output.
|
|
37
|
+
4. Return appropriate exit code.
|
|
38
|
+
|
|
39
|
+
### Step 3: Safety checks
|
|
40
|
+
|
|
41
|
+
- Destructive? → Add `--force` flag + confirmation.
|
|
42
|
+
- Scheduled? → Ensure non-interactive, idempotent, loud failures.
|
|
43
|
+
- Long-running? → Use chunking/cursors, progress bar.
|
|
44
|
+
- Production? → Add environment check if needed.
|
|
45
|
+
|
|
46
|
+
### Step 4: Test
|
|
47
|
+
|
|
48
|
+
- Assert exit codes, console output, side effects, option behavior.
|
|
49
|
+
- Use `$this->artisan()` in Pest tests.
|
|
50
|
+
|
|
51
|
+
## Conventions
|
|
52
|
+
|
|
53
|
+
→ See guideline `php/artisan-commands.md` for full conventions.
|
|
54
|
+
|
|
55
|
+
## Output format
|
|
56
|
+
|
|
57
|
+
1. Artisan command class with signature, description, and handle method
|
|
58
|
+
2. Registration in service provider or auto-discovery
|
|
59
|
+
3. Example usage shown in a code comment
|
|
60
|
+
|
|
61
|
+
## Gotcha
|
|
62
|
+
|
|
63
|
+
- `$this->info()` is suppressed in quiet mode — use `$this->line()` for critical info.
|
|
64
|
+
- Always add `--force` for destructive commands — never delete data without confirmation.
|
|
65
|
+
- Add environment checks for production commands.
|
|
66
|
+
|
|
67
|
+
## Do NOT
|
|
68
|
+
|
|
69
|
+
- Do NOT run destructive operations without `--force` confirmation.
|
|
70
|
+
- Do NOT use `$this->ask()` for non-interactive commands (cron/queue).
|
|
71
|
+
- Do NOT put business logic in commands — delegate to services.
|
|
72
|
+
|
|
73
|
+
## Auto-trigger keywords
|
|
74
|
+
|
|
75
|
+
- artisan command
|
|
76
|
+
- console command
|
|
77
|
+
- CLI command
|
|
78
|
+
- command signature
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: authz-review
|
|
3
|
+
description: "Use when reviewing authorization end-to-end — route → gate → policy → query scope → response filter — before changes to permissions, tenants, ownership, or admin flows."
|
|
4
|
+
source: package
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# authz-review
|
|
8
|
+
|
|
9
|
+
> You are a reviewer specialized in **end-to-end authorization enforcement**.
|
|
10
|
+
> Your only job is to walk a request path from entry to response and confirm
|
|
11
|
+
> the *authorization layer* (Laravel Policies/Gates · Symfony Voters · Express
|
|
12
|
+
> middleware · FastAPI `Depends` · Spring `@PreAuthorize` · Rails Pundit/CanCan)
|
|
13
|
+
> actually gates every protected asset. You do **not** perform threat
|
|
14
|
+
> modelling, you do **not** review diffs holistically, you do **not** implement
|
|
15
|
+
> controls — sibling skills handle those.
|
|
16
|
+
|
|
17
|
+
## When to use
|
|
18
|
+
|
|
19
|
+
* A change adds or modifies permission checks, roles, or ownership rules
|
|
20
|
+
* A change exposes a new route, action, or admin-only capability
|
|
21
|
+
* A query fetches tenant-scoped or user-scoped records and you must confirm scope
|
|
22
|
+
* A bug report mentions "user A saw user B's data" or "non-admin accessed admin page"
|
|
23
|
+
* `security-sensitive-stop-rule` fires on an auth/tenant/ownership code path
|
|
24
|
+
|
|
25
|
+
Do NOT use when:
|
|
26
|
+
|
|
27
|
+
* The change has no trust boundary crossing — skip entirely
|
|
28
|
+
* You need a pre-implementation risk model — route to
|
|
29
|
+
[`threat-modeling`](../threat-modeling/SKILL.md)
|
|
30
|
+
* A full codebase authorization audit is requested — route to
|
|
31
|
+
[`security-audit`](../security-audit/SKILL.md)
|
|
32
|
+
* The concern is a diff ready for review — route to
|
|
33
|
+
[`judge-security-auditor`](../judge-security-auditor/SKILL.md)
|
|
34
|
+
* The concern is response/log leakage rather than access gating — route to
|
|
35
|
+
[`data-exposure-review`](../data-exposure-review/SKILL.md)
|
|
36
|
+
* The concern is implementing a control once identified — route to
|
|
37
|
+
[`security`](../security/SKILL.md)
|
|
38
|
+
|
|
39
|
+
## Procedure
|
|
40
|
+
|
|
41
|
+
### 1. Pick the entrypoints under review
|
|
42
|
+
|
|
43
|
+
Collect the route(s), action(s), or job(s) in scope for this review. Read the
|
|
44
|
+
task description, open ticket, or user request — do not invent scope. If the
|
|
45
|
+
entrypoint list is unclear, stop and ask.
|
|
46
|
+
|
|
47
|
+
### 2. Inspect each path end-to-end
|
|
48
|
+
|
|
49
|
+
For every entrypoint, analyze the authorization chain and record what you find:
|
|
50
|
+
|
|
51
|
+
| Stage | What to confirm |
|
|
52
|
+
|---|---|
|
|
53
|
+
| Route / binding | HTTP method, URL, controller/handler, middleware chain |
|
|
54
|
+
| Authentication gate | Is login enforced? By which middleware / guard? |
|
|
55
|
+
| Authorization layer | Which policy, gate, voter, or check? Which action/ability? |
|
|
56
|
+
| Data scope | Does the query filter by current user / tenant / owner? |
|
|
57
|
+
| Response filter | Are sensitive fields stripped (resource/serializer/DTO)? |
|
|
58
|
+
| Tests | Is there a negative test (other-tenant / lower-role returns 403/404)? |
|
|
59
|
+
|
|
60
|
+
Record **what is there**, not what should be there. Use file:line citations.
|
|
61
|
+
|
|
62
|
+
### 3. Surface the gaps
|
|
63
|
+
|
|
64
|
+
For every gap, answer:
|
|
65
|
+
|
|
66
|
+
- Which stage is missing or weak?
|
|
67
|
+
- Which actor can exploit it? (anonymous · authenticated non-owner · wrong tenant · lower role)
|
|
68
|
+
- Concrete impact? (cross-tenant read, privilege escalation, horizontal escalation)
|
|
69
|
+
- Minimum control to add? (policy method, scope, middleware, resource transform)
|
|
70
|
+
- Required negative test assertion?
|
|
71
|
+
|
|
72
|
+
Do **not** list generic findings ("should use policies") — always anchor to a
|
|
73
|
+
file:line and a specific actor who can reach the gap.
|
|
74
|
+
|
|
75
|
+
## Validation
|
|
76
|
+
|
|
77
|
+
Before finalizing the report, confirm:
|
|
78
|
+
|
|
79
|
+
1. Every entrypoint in scope is walked through **all six stages** of the table
|
|
80
|
+
2. Every 🔴 finding names: stage · actor · impact · missing control · required test
|
|
81
|
+
3. Every 🔴 finding cites at least one file path with line number
|
|
82
|
+
4. You have NOT listed stages that are already correctly enforced as findings
|
|
83
|
+
5. You have NOT confused authentication with authorization in any finding
|
|
84
|
+
6. You have NOT proposed exploit payloads, bypass chains, or offensive steps
|
|
85
|
+
|
|
86
|
+
## Output format
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
Skill: authz-review
|
|
90
|
+
Targets: <routes / actions / jobs, one per line>
|
|
91
|
+
|
|
92
|
+
Per-entrypoint walk:
|
|
93
|
+
<METHOD /route> — <controller@action> (file:line)
|
|
94
|
+
Auth gate: <middleware/guard> ✅/⚠️/❌
|
|
95
|
+
Authorization: <policy#ability> ✅/⚠️/❌ (file:line)
|
|
96
|
+
Data scope: <scope/where> ✅/⚠️/❌ (file:line)
|
|
97
|
+
Response filter: <resource/serializer> ✅/⚠️/❌ (file:line)
|
|
98
|
+
Negative test: <test path or "—"> ✅/⚠️/❌
|
|
99
|
+
|
|
100
|
+
Findings (prioritized):
|
|
101
|
+
🔴 <name> — entrypoint · stage · actor
|
|
102
|
+
Impact: <concrete damage>
|
|
103
|
+
Missing control: <what to add, where>
|
|
104
|
+
Required test: <negative assertion, test file>
|
|
105
|
+
🟡 ...
|
|
106
|
+
🟢 ...
|
|
107
|
+
|
|
108
|
+
Implementation plan:
|
|
109
|
+
1. <control>, <file/layer>
|
|
110
|
+
2. ...
|
|
111
|
+
|
|
112
|
+
Missing tests:
|
|
113
|
+
1. <assertion>, <test file>
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Severity: 🔴 reachable by external or cross-tenant/cross-user actor with
|
|
117
|
+
current privileges / 🟡 reachable only by elevated actor or requires
|
|
118
|
+
partial compromise / 🟢 defense-in-depth hardening, not a live exploit path.
|
|
119
|
+
|
|
120
|
+
Required fields (ordered):
|
|
121
|
+
|
|
122
|
+
1. **Skill** and **Targets** — entrypoints in scope
|
|
123
|
+
2. **Per-entrypoint walk** — six-stage table per entrypoint with file:line citations
|
|
124
|
+
3. **Findings** — prioritized, each with entrypoint · stage · actor · impact · missing control · required test
|
|
125
|
+
4. **Implementation plan** — ordered controls mapped to files/layers
|
|
126
|
+
5. **Missing tests** — ordered negative assertions
|
|
127
|
+
|
|
128
|
+
Runtime confirmation (e.g. *"reproduce the cross-tenant read against staging"*,
|
|
129
|
+
*"query the DB to prove scope leakage"*) is a follow-up for the implementer —
|
|
130
|
+
**this skill does not execute tools, run requests, or touch the database**.
|
|
131
|
+
|
|
132
|
+
## Gotcha
|
|
133
|
+
|
|
134
|
+
* **Authentication ≠ authorization.** A logged-in user is not an authorized
|
|
135
|
+
user. Auth gate green does not make authorization green.
|
|
136
|
+
* **Implicit tenancy via current session** — `Auth::user()->posts` looks safe
|
|
137
|
+
but breaks the moment an admin impersonation or service-account path bypasses it.
|
|
138
|
+
* **Query scope bypass through relations** — `$user->load('orders.customer')`
|
|
139
|
+
can leak a sibling tenant if the `customer` relation has no scope.
|
|
140
|
+
* **Resource/serializer leakage** — the policy gated the action; the resource
|
|
141
|
+
still exposed `internal_notes`. Response filter is a distinct stage.
|
|
142
|
+
* **"Route middleware covers it"** — middleware enforces auth, not per-record
|
|
143
|
+
authorization. Still need the policy + scope.
|
|
144
|
+
* **Generic advice without file:line** — reject your own finding if you cannot
|
|
145
|
+
cite the exact location.
|
|
146
|
+
|
|
147
|
+
## Do NOT
|
|
148
|
+
|
|
149
|
+
* NEVER return `clean` out of politeness when gaps exist — list them even if the change "probably works"
|
|
150
|
+
* NEVER silently fall back to generic advice when you cannot locate a stage — mark it `❌ not found` with the file you searched
|
|
151
|
+
* NEVER approve a 🔴 finding without a named required negative test
|
|
152
|
+
* NEVER propose exploit payloads, bypass chains, or offensive verification steps — if asked, stop per `never-help-build-offensive-cyber-capability`
|
|
153
|
+
* NEVER treat "only admins reach this" as a control without proof the admin gate is enforced at this stage for this request
|
|
154
|
+
* NEVER rubber-stamp authentication middleware as if it enforced per-record authorization
|
|
155
|
+
|
|
156
|
+
## References
|
|
157
|
+
|
|
158
|
+
- **OWASP ASVS v4.0.3** — Chapter V4 Access Control, especially V4.1
|
|
159
|
+
(General Access Control Design) and V4.2 (Operation-level Access Control).
|
|
160
|
+
[owasp.org/www-project-application-security-verification-standard/](https://owasp.org/www-project-application-security-verification-standard/)
|
|
161
|
+
- **OWASP Top 10 2021 — A01 Broken Access Control** — canonical failure modes
|
|
162
|
+
(IDOR, missing function-level checks, forced browsing, metadata tampering).
|
|
163
|
+
[owasp.org/Top10/A01_2021-Broken_Access_Control/](https://owasp.org/Top10/A01_2021-Broken_Access_Control/)
|
|
164
|
+
- **NIST SP 800-53 AC family** — AC-3 Access Enforcement, AC-6 Least Privilege
|
|
165
|
+
— rubric for "minimum control" recommendations.
|
|
166
|
+
[csrc.nist.gov/projects/risk-management/sp800-53-controls](https://csrc.nist.gov/projects/risk-management/sp800-53-controls/release-search#!/800-53)
|
|
167
|
+
- [`threat-modeling`](../threat-modeling/SKILL.md),
|
|
168
|
+
[`data-exposure-review`](../data-exposure-review/SKILL.md),
|
|
169
|
+
[`judge-security-auditor`](../judge-security-auditor/SKILL.md),
|
|
170
|
+
[`security`](../security/SKILL.md),
|
|
171
|
+
[`security-audit`](../security-audit/SKILL.md) — sibling review / implementation skills.
|