@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,145 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
declare(strict_types=1);
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Scans all PhpDataSeeder data files for foreign key references that use raw seeder constants
|
|
7
|
+
* instead of getReference(). Raw constants don't trigger lazy initialization of the referenced
|
|
8
|
+
* seeder, causing "items not available" errors when seeders run in unpredictable order.
|
|
9
|
+
*
|
|
10
|
+
* Usage (inside Docker container):
|
|
11
|
+
* php .augment/scripts/scan-seeder-violations.php
|
|
12
|
+
*
|
|
13
|
+
* Used by: /fix-seeder command
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
$seedersDir = __DIR__ . '/../../database/seeders';
|
|
17
|
+
$dataDir = __DIR__ . '/../../database/seeder-data/data';
|
|
18
|
+
|
|
19
|
+
if (!is_dir($seedersDir) || !is_dir($dataDir)) {
|
|
20
|
+
echo "Error: seeders or data directory not found. Run from project root.\n";
|
|
21
|
+
exit(1);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Step 1: Build map of seeder short class name -> data file relative path
|
|
25
|
+
$seederMap = [];
|
|
26
|
+
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($seedersDir));
|
|
27
|
+
|
|
28
|
+
foreach ($iterator as $file) {
|
|
29
|
+
if ($file->getExtension() !== 'php') {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
$content = file_get_contents($file->getRealPath());
|
|
34
|
+
|
|
35
|
+
if (preg_match('/class\s+(\w+)\s+extends\s+(?:Php|Json)DataSeeder/', $content, $classMatch)
|
|
36
|
+
&& preg_match('/\$dataFile\s*=\s*[\'"]([^\'"]+)[\'"]/', $content, $dataMatch)) {
|
|
37
|
+
$seederMap[$classMatch[1]] = $dataMatch[1];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Known exceptions: circular dependencies where getReference() would cause infinite loops.
|
|
42
|
+
// Format: 'OwnerSeeder' => ['ReferencedSeeder', ...]
|
|
43
|
+
// Currently empty — all circular dependencies have been resolved via two-phase seeding
|
|
44
|
+
// (e.g., UserWageTypeRuleSeeder uses run() to apply project mappings after initReferences).
|
|
45
|
+
$exceptions = [];
|
|
46
|
+
|
|
47
|
+
// Step 2: For each data file, find violations
|
|
48
|
+
$violations = [];
|
|
49
|
+
|
|
50
|
+
foreach ($seederMap as $ownerSeeder => $dataFile) {
|
|
51
|
+
$filePath = $dataDir . '/' . str_replace('\\', '/', $dataFile);
|
|
52
|
+
|
|
53
|
+
if (!file_exists($filePath)) {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
$lines = file($filePath);
|
|
58
|
+
|
|
59
|
+
if (!$lines) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
$fileExtension = pathinfo($filePath, PATHINFO_EXTENSION);
|
|
64
|
+
|
|
65
|
+
foreach ($lines as $lineNum => $line) {
|
|
66
|
+
if (!preg_match_all('/(\w+Seeder)::([A-Z][A-Z0-9_]+)/', $line, $matches, PREG_SET_ORDER)) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
foreach ($matches as $match) {
|
|
71
|
+
$referencedSeeder = $match[1];
|
|
72
|
+
$constant = $match[2];
|
|
73
|
+
|
|
74
|
+
// Skip own seeder constants (primary keys are OK)
|
|
75
|
+
if ($referencedSeeder === $ownerSeeder) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Skip known exceptions (circular dependencies)
|
|
80
|
+
if (isset($exceptions[$ownerSeeder]) && in_array($referencedSeeder, $exceptions[$ownerSeeder], true)) {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Skip if the line already contains getReference/getReferences for this seeder
|
|
85
|
+
if (preg_match('/' . preg_quote($referencedSeeder, '/') . '::getReference/', $line)) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Check multiline: previous line may have getReference(
|
|
90
|
+
if ($lineNum > 0) {
|
|
91
|
+
$prevLine = $lines[$lineNum - 1];
|
|
92
|
+
if (preg_match('/' . preg_quote($referencedSeeder, '/') . '::getReference\s*\(\s*$/', trim($prevLine))) {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
$violations[] = [
|
|
98
|
+
'file' => str_replace($dataDir . '/', '', $filePath),
|
|
99
|
+
'line' => $lineNum + 1,
|
|
100
|
+
'owner' => $ownerSeeder,
|
|
101
|
+
'referenced' => $referencedSeeder,
|
|
102
|
+
'constant' => $constant,
|
|
103
|
+
'full' => $referencedSeeder . '::' . $constant,
|
|
104
|
+
'lineContent' => trim($line),
|
|
105
|
+
'extension' => $fileExtension,
|
|
106
|
+
];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Step 3: Output results
|
|
112
|
+
if (empty($violations)) {
|
|
113
|
+
echo "✅ No violations found.\n";
|
|
114
|
+
exit(0);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
$phpCount = count(array_filter($violations, static fn(array $v): bool => $v['extension'] === 'php'));
|
|
118
|
+
$jsonCount = count(array_filter($violations, static fn(array $v): bool => $v['extension'] === 'json'));
|
|
119
|
+
|
|
120
|
+
echo "Found " . count($violations) . " violation(s)";
|
|
121
|
+
|
|
122
|
+
if ($jsonCount > 0) {
|
|
123
|
+
echo " ($phpCount in PHP files, $jsonCount in JSON files — JSON cannot be auto-fixed)";
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
echo ":\n\n";
|
|
127
|
+
|
|
128
|
+
printf("%-4s %-65s %-6s %-55s %s\n", '#', 'Data File', 'Line', 'Violation', 'Owner');
|
|
129
|
+
echo str_repeat('-', 185) . "\n";
|
|
130
|
+
|
|
131
|
+
foreach ($violations as $i => $v) {
|
|
132
|
+
$prefix = $v['extension'] === 'json' ? '[JSON] ' : '';
|
|
133
|
+
printf(
|
|
134
|
+
"%-4d %-65s %-6d %-55s %s\n",
|
|
135
|
+
$i + 1,
|
|
136
|
+
$prefix . $v['file'],
|
|
137
|
+
$v['line'],
|
|
138
|
+
$v['full'],
|
|
139
|
+
$v['owner']
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
echo "\nPHP violations (auto-fixable): $phpCount\n";
|
|
144
|
+
echo "JSON violations (manual fix needed): $jsonCount\n";
|
|
145
|
+
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Generate `agents/roadmaps-progress.md` — aggregated progress across open roadmaps.
|
|
3
|
+
|
|
4
|
+
Scans every roadmap under `agents/roadmaps/` (excluding `archive/`, `skipped/`,
|
|
5
|
+
`template.md`, `README.md`, `open-questions*.md`), counts checkbox states per
|
|
6
|
+
phase, and writes a dashboard at `agents/roadmaps-progress.md` (outside the
|
|
7
|
+
`roadmaps/` folder to keep it clean) with:
|
|
8
|
+
|
|
9
|
+
- Overall progress (open-roadmap count, steps done, %)
|
|
10
|
+
- A summary table of every open roadmap
|
|
11
|
+
- Per-roadmap phase breakdown
|
|
12
|
+
|
|
13
|
+
Checkbox states:
|
|
14
|
+
[x] done [ ] open [~] deferred [-] cancelled
|
|
15
|
+
|
|
16
|
+
Percentage = done / (done + open). Deferred and cancelled do not count towards
|
|
17
|
+
"open" (they are explicit decisions).
|
|
18
|
+
|
|
19
|
+
Invocation (from project root):
|
|
20
|
+
python3 .augment/scripts/update_roadmap_progress.py # rewrite
|
|
21
|
+
python3 .augment/scripts/update_roadmap_progress.py --check # CI: exit 1 if stale
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
from __future__ import annotations
|
|
25
|
+
|
|
26
|
+
import argparse
|
|
27
|
+
import re
|
|
28
|
+
import sys
|
|
29
|
+
from dataclasses import dataclass, field
|
|
30
|
+
from pathlib import Path
|
|
31
|
+
|
|
32
|
+
CHECKBOX_RE = re.compile(r"^\s*[-*]\s+\[([ xX~\-])\]\s", re.MULTILINE)
|
|
33
|
+
# H2 or H3 heading starting with "Phase <number>"; separator (colon, em-dash,
|
|
34
|
+
# hyphen, or whitespace) and name are optional.
|
|
35
|
+
PHASE_RE = re.compile(r"^(#{2,3})\s+Phase\s+(\d+)(?:[\s:\u2014\-]+(.*?))?\s*$", re.MULTILINE)
|
|
36
|
+
TITLE_RE = re.compile(r"^#\s+(?:Roadmap:\s*)?(.+?)\s*$", re.MULTILINE)
|
|
37
|
+
EXCLUDE_NAMES = {"template.md", "README.md", "progress.md", "roadmaps-progress.md"}
|
|
38
|
+
EXCLUDE_PREFIXES = ("open-questions",)
|
|
39
|
+
EXCLUDE_DIRS = {"archive", "skipped"}
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@dataclass
|
|
43
|
+
class PhaseStats:
|
|
44
|
+
number: int
|
|
45
|
+
name: str
|
|
46
|
+
done: int = 0
|
|
47
|
+
open_: int = 0
|
|
48
|
+
deferred: int = 0
|
|
49
|
+
cancelled: int = 0
|
|
50
|
+
|
|
51
|
+
@property
|
|
52
|
+
def total_active(self) -> int: # denominator for %
|
|
53
|
+
return self.done + self.open_
|
|
54
|
+
|
|
55
|
+
@property
|
|
56
|
+
def percent(self) -> int:
|
|
57
|
+
return round(self.done * 100 / self.total_active) if self.total_active else 0
|
|
58
|
+
|
|
59
|
+
@property
|
|
60
|
+
def state(self) -> str:
|
|
61
|
+
if self.total_active == 0 and (self.deferred or self.cancelled):
|
|
62
|
+
return "⏭️ skipped"
|
|
63
|
+
if self.total_active == 0:
|
|
64
|
+
return "⬜ empty"
|
|
65
|
+
if self.done == 0:
|
|
66
|
+
return "⬜ not started"
|
|
67
|
+
if self.open_ == 0:
|
|
68
|
+
return "✅ done"
|
|
69
|
+
return "🟡 in progress"
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
@dataclass
|
|
73
|
+
class RoadmapStats:
|
|
74
|
+
path: Path
|
|
75
|
+
rel: str
|
|
76
|
+
title: str
|
|
77
|
+
phases: list[PhaseStats] = field(default_factory=list)
|
|
78
|
+
|
|
79
|
+
@property
|
|
80
|
+
def done(self) -> int:
|
|
81
|
+
return sum(p.done for p in self.phases)
|
|
82
|
+
|
|
83
|
+
@property
|
|
84
|
+
def open_(self) -> int:
|
|
85
|
+
return sum(p.open_ for p in self.phases)
|
|
86
|
+
|
|
87
|
+
@property
|
|
88
|
+
def deferred(self) -> int:
|
|
89
|
+
return sum(p.deferred for p in self.phases)
|
|
90
|
+
|
|
91
|
+
@property
|
|
92
|
+
def cancelled(self) -> int:
|
|
93
|
+
return sum(p.cancelled for p in self.phases)
|
|
94
|
+
|
|
95
|
+
@property
|
|
96
|
+
def total_active(self) -> int:
|
|
97
|
+
return self.done + self.open_
|
|
98
|
+
|
|
99
|
+
@property
|
|
100
|
+
def percent(self) -> int:
|
|
101
|
+
return round(self.done * 100 / self.total_active) if self.total_active else 0
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def is_roadmap_candidate(path: Path) -> bool:
|
|
105
|
+
if path.name in EXCLUDE_NAMES:
|
|
106
|
+
return False
|
|
107
|
+
if any(path.name.startswith(p) for p in EXCLUDE_PREFIXES):
|
|
108
|
+
return False
|
|
109
|
+
if any(part in EXCLUDE_DIRS for part in path.parts):
|
|
110
|
+
return False
|
|
111
|
+
return True
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def count_checkboxes(text: str) -> tuple[int, int, int, int]:
|
|
115
|
+
done = open_ = deferred = cancelled = 0
|
|
116
|
+
for m in CHECKBOX_RE.finditer(text):
|
|
117
|
+
c = m.group(1).lower()
|
|
118
|
+
if c == "x":
|
|
119
|
+
done += 1
|
|
120
|
+
elif c == " ":
|
|
121
|
+
open_ += 1
|
|
122
|
+
elif c == "~":
|
|
123
|
+
deferred += 1
|
|
124
|
+
elif c == "-":
|
|
125
|
+
cancelled += 1
|
|
126
|
+
return done, open_, deferred, cancelled
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def parse_roadmap(path: Path, roadmap_root: Path) -> RoadmapStats | None:
|
|
130
|
+
text = path.read_text(encoding="utf-8")
|
|
131
|
+
phase_matches = list(PHASE_RE.finditer(text))
|
|
132
|
+
if not phase_matches:
|
|
133
|
+
return None # not a roadmap — no ## Phase headings
|
|
134
|
+
title_match = TITLE_RE.search(text)
|
|
135
|
+
title = title_match.group(1).strip() if title_match else path.stem
|
|
136
|
+
rel = str(path.relative_to(roadmap_root))
|
|
137
|
+
stats = RoadmapStats(path=path, rel=rel, title=title)
|
|
138
|
+
for i, pm in enumerate(phase_matches):
|
|
139
|
+
start = pm.end()
|
|
140
|
+
end = phase_matches[i + 1].start() if i + 1 < len(phase_matches) else len(text)
|
|
141
|
+
d, o, df, c = count_checkboxes(text[start:end])
|
|
142
|
+
number = int(pm.group(2))
|
|
143
|
+
name = (pm.group(3) or "").strip() or f"Phase {number}"
|
|
144
|
+
stats.phases.append(PhaseStats(number, name, d, o, df, c))
|
|
145
|
+
return stats
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
def bar(pct: int, width: int = 10) -> str:
|
|
149
|
+
filled = round(pct * width / 100)
|
|
150
|
+
return "█" * filled + "░" * (width - filled)
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def collect(roadmap_root: Path) -> list[RoadmapStats]:
|
|
154
|
+
results: list[RoadmapStats] = []
|
|
155
|
+
for path in sorted(roadmap_root.rglob("*.md")):
|
|
156
|
+
if not path.is_file() or not is_roadmap_candidate(path):
|
|
157
|
+
continue
|
|
158
|
+
stats = parse_roadmap(path, roadmap_root)
|
|
159
|
+
if stats:
|
|
160
|
+
results.append(stats)
|
|
161
|
+
return results
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
def render(roadmaps: list[RoadmapStats]) -> str:
|
|
165
|
+
total_done = sum(r.done for r in roadmaps)
|
|
166
|
+
total_active = sum(r.total_active for r in roadmaps)
|
|
167
|
+
overall_pct = round(total_done * 100 / total_active) if total_active else 0
|
|
168
|
+
lines: list[str] = []
|
|
169
|
+
lines.append("# Roadmap Progress\n")
|
|
170
|
+
lines.append(
|
|
171
|
+
"> Auto-generated by `.augment/scripts/update_roadmap_progress.py`. "
|
|
172
|
+
"Do not edit — regenerated on every roadmap-create, -execute, or "
|
|
173
|
+
"completion change (last-modified timestamp lives in git history).\n>\n"
|
|
174
|
+
f"> {len(roadmaps)} open roadmap"
|
|
175
|
+
f"{'s' if len(roadmaps) != 1 else ''} · "
|
|
176
|
+
"[roadmaps/](roadmaps/) · [archive/](roadmaps/archive/) · "
|
|
177
|
+
"[skipped/](roadmaps/skipped/)\n"
|
|
178
|
+
)
|
|
179
|
+
lines.append("## Overall\n")
|
|
180
|
+
lines.append(f"**{total_done} / {total_active} steps done · {overall_pct}%**\n")
|
|
181
|
+
lines.append("```text\n" + bar(overall_pct, 40) + f" {overall_pct}%\n```\n")
|
|
182
|
+
if not roadmaps:
|
|
183
|
+
lines.append("_No open roadmaps._\n")
|
|
184
|
+
return "\n".join(lines) + "\n"
|
|
185
|
+
lines.append("## Open roadmaps\n")
|
|
186
|
+
lines.append("| # | Roadmap | Phases | Steps | Done | Open | Deferred | Cancelled | Progress |")
|
|
187
|
+
lines.append("|---|---|---:|---:|---:|---:|---:|---:|---|")
|
|
188
|
+
for i, r in enumerate(roadmaps, 1):
|
|
189
|
+
lines.append(
|
|
190
|
+
f"| {i} | [{r.rel}](roadmaps/{r.rel}) | {len(r.phases)} | {r.total_active} | "
|
|
191
|
+
f"{r.done} | {r.open_} | {r.deferred} | {r.cancelled} | "
|
|
192
|
+
f"{bar(r.percent)} {r.percent}% |"
|
|
193
|
+
)
|
|
194
|
+
lines.append("")
|
|
195
|
+
lines.append("---\n")
|
|
196
|
+
lines.append("## Per-roadmap phase breakdown\n")
|
|
197
|
+
for r in roadmaps:
|
|
198
|
+
lines.append(f"### [{r.rel}](roadmaps/{r.rel})\n")
|
|
199
|
+
lines.append(f"**{r.title}** — {r.done} / {r.total_active} done ({r.percent}%)\n")
|
|
200
|
+
lines.append("| # | Phase | State | Done | Open | Deferred | Cancelled | % |")
|
|
201
|
+
lines.append("|---|---|---|---:|---:|---:|---:|---:|")
|
|
202
|
+
for p in r.phases:
|
|
203
|
+
lines.append(
|
|
204
|
+
f"| {p.number} | {p.name} | {p.state} | {p.done} | {p.open_} | "
|
|
205
|
+
f"{p.deferred} | {p.cancelled} | {p.percent}% |"
|
|
206
|
+
)
|
|
207
|
+
lines.append("")
|
|
208
|
+
return "\n".join(lines) + "\n"
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
def main() -> int:
|
|
212
|
+
parser = argparse.ArgumentParser(description=__doc__)
|
|
213
|
+
parser.add_argument("--check", action="store_true", help="exit 1 if progress.md is stale")
|
|
214
|
+
parser.add_argument("--repo-root", type=Path, default=Path.cwd(),
|
|
215
|
+
help="project root (default: cwd)")
|
|
216
|
+
args = parser.parse_args()
|
|
217
|
+
roadmap_root = args.repo_root / "agents" / "roadmaps"
|
|
218
|
+
target = args.repo_root / "agents" / "roadmaps-progress.md"
|
|
219
|
+
if not roadmap_root.is_dir():
|
|
220
|
+
# No roadmaps directory yet — skip silently so the CI check is safe in
|
|
221
|
+
# consumer projects that haven't adopted roadmaps.
|
|
222
|
+
if args.check:
|
|
223
|
+
return 0
|
|
224
|
+
print(f"ℹ️ No roadmaps directory at {roadmap_root} — nothing to do.")
|
|
225
|
+
return 0
|
|
226
|
+
roadmaps = collect(roadmap_root)
|
|
227
|
+
new_text = render(roadmaps)
|
|
228
|
+
current = target.read_text(encoding="utf-8") if target.exists() else ""
|
|
229
|
+
if args.check:
|
|
230
|
+
if current != new_text:
|
|
231
|
+
print(f"❌ {target.relative_to(args.repo_root)} is stale. "
|
|
232
|
+
f"Run `task roadmap-progress` to regenerate.", file=sys.stderr)
|
|
233
|
+
return 1
|
|
234
|
+
print(f"✅ {target.relative_to(args.repo_root)} is up to date.")
|
|
235
|
+
return 0
|
|
236
|
+
target.write_text(new_text, encoding="utf-8")
|
|
237
|
+
print(f"✅ Wrote {target.relative_to(args.repo_root)} · "
|
|
238
|
+
f"{len(roadmaps)} roadmap(s) · "
|
|
239
|
+
f"{sum(r.done for r in roadmaps)}/{sum(r.total_active for r in roadmaps)} steps done.")
|
|
240
|
+
return 0
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
if __name__ == "__main__":
|
|
244
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: adversarial-review
|
|
3
|
+
description: "ONLY when user explicitly requests adversarial review, devil's advocate analysis, stress-testing a plan, or 'poke holes in this' — NOT for regular code review or design feedback."
|
|
4
|
+
personas:
|
|
5
|
+
- critical-challenger
|
|
6
|
+
source: package
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Adversarial Review
|
|
10
|
+
|
|
11
|
+
## When to use
|
|
12
|
+
|
|
13
|
+
Use this skill when:
|
|
14
|
+
- You've completed a plan, design, or proposed fix and are about to present it.
|
|
15
|
+
- The change is non-trivial (affects multiple files, changes behavior, touches critical paths).
|
|
16
|
+
- You're about to recommend an architecture or design decision.
|
|
17
|
+
|
|
18
|
+
Do NOT use when:
|
|
19
|
+
- The task is trivial (renaming, formatting, simple config change).
|
|
20
|
+
- The user explicitly asked for a quick/rough draft.
|
|
21
|
+
- You're exploring options, not committing to one yet.
|
|
22
|
+
|
|
23
|
+
## Procedure: Adversarial review
|
|
24
|
+
|
|
25
|
+
### Step 1: Attack (Grumpy Senior Engineer)
|
|
26
|
+
|
|
27
|
+
Assume your plan/fix is flawed. Ask yourself:
|
|
28
|
+
|
|
29
|
+
- What's the weakest assumption?
|
|
30
|
+
- Where will this break under load, at scale, or with edge cases?
|
|
31
|
+
- What did I ignore or hand-wave?
|
|
32
|
+
- Is this over-engineered for the actual problem?
|
|
33
|
+
- Would a simpler approach work just as well?
|
|
34
|
+
- What will the next developer curse me for?
|
|
35
|
+
|
|
36
|
+
### Step 2: Defend (Balanced Engineer)
|
|
37
|
+
|
|
38
|
+
Counter the criticism fairly:
|
|
39
|
+
|
|
40
|
+
- Which criticisms are valid and must be addressed now?
|
|
41
|
+
- Which are theoretical and can be deferred?
|
|
42
|
+
- What's the pragmatic middle ground?
|
|
43
|
+
|
|
44
|
+
### Step 3: Revise
|
|
45
|
+
|
|
46
|
+
- Fix the valid issues in your plan/fix.
|
|
47
|
+
- Move deferred concerns to "Open Questions" or "Known Limitations".
|
|
48
|
+
- Present the improved version to the user.
|
|
49
|
+
|
|
50
|
+
**Do this internally** — the user sees the improved result, not the raw debate.
|
|
51
|
+
Only surface trade-offs or concerns that need the user's input.
|
|
52
|
+
|
|
53
|
+
## Context-specific attack questions
|
|
54
|
+
|
|
55
|
+
### Feature plans / Architecture
|
|
56
|
+
|
|
57
|
+
- Is this the simplest solution that works?
|
|
58
|
+
- What happens when requirements change (and they will)?
|
|
59
|
+
- Are there hidden dependencies or coupling?
|
|
60
|
+
- Does this respect existing patterns or introduce a new one unnecessarily?
|
|
61
|
+
- What's the migration/rollback story?
|
|
62
|
+
|
|
63
|
+
### Bug fixes
|
|
64
|
+
|
|
65
|
+
- Is this the root cause or just a symptom?
|
|
66
|
+
- Will this fix break something else?
|
|
67
|
+
- Does the fix handle the edge case that caused the bug?
|
|
68
|
+
- Is there a regression test that proves the fix works?
|
|
69
|
+
- Are there other places with the same bug pattern?
|
|
70
|
+
|
|
71
|
+
### Code changes / Refactoring
|
|
72
|
+
|
|
73
|
+
- Would I understand this code in 6 months without context?
|
|
74
|
+
- Did I check all callers and downstream effects?
|
|
75
|
+
- Are the tests actually testing the right behavior?
|
|
76
|
+
- Did I introduce a new pattern where an existing one would work?
|
|
77
|
+
|
|
78
|
+
### Database migrations
|
|
79
|
+
|
|
80
|
+
- Can this destroy or corrupt data?
|
|
81
|
+
- Is rollback possible?
|
|
82
|
+
- What happens to running queries during migration?
|
|
83
|
+
- Did I check the table size (large table ALTER can lock)?
|
|
84
|
+
|
|
85
|
+
### API design
|
|
86
|
+
|
|
87
|
+
- Is this a breaking change?
|
|
88
|
+
- Is it consistent with existing endpoints?
|
|
89
|
+
- Are error responses clear and actionable?
|
|
90
|
+
- Did I consider pagination, filtering, versioning?
|
|
91
|
+
|
|
92
|
+
### Security-sensitive changes
|
|
93
|
+
|
|
94
|
+
- Where is the attack surface I'm not seeing?
|
|
95
|
+
- Am I trusting user input anywhere?
|
|
96
|
+
- Are there authorization gaps?
|
|
97
|
+
- Would this pass a security review?
|
|
98
|
+
|
|
99
|
+
## Integration with other skills
|
|
100
|
+
|
|
101
|
+
- **feature-planning** — adversarial review after Understanding Lock, before presenting the plan.
|
|
102
|
+
- **bug-analyzer** — review the proposed fix before implementing.
|
|
103
|
+
- **code-review** — self-review before creating a PR.
|
|
104
|
+
- **migration-creator** — review migration for data safety.
|
|
105
|
+
- **api-design** — review API design for consistency and breaking changes.
|
|
106
|
+
- **security** — review security-sensitive changes for attack surface.
|
|
107
|
+
|
|
108
|
+
## Auto-trigger keywords
|
|
109
|
+
|
|
110
|
+
- adversarial review
|
|
111
|
+
- self-review
|
|
112
|
+
- challenge plan
|
|
113
|
+
- review my approach
|
|
114
|
+
- sanity check
|
|
115
|
+
|
|
116
|
+
### Validate
|
|
117
|
+
|
|
118
|
+
- Confirm each identified risk has a concrete mitigation or explicit acceptance.
|
|
119
|
+
- Verify the review produced at least one actionable finding (or explicit "no issues found").
|
|
120
|
+
- Check that the review did not just restate the plan — it must challenge assumptions.
|
|
121
|
+
|
|
122
|
+
## Output format
|
|
123
|
+
|
|
124
|
+
1. Improved plan/code incorporating adversarial findings
|
|
125
|
+
2. Risk summary — top concerns discovered and how they were addressed
|
|
126
|
+
3. Remaining open risks (if any) with severity rating
|
|
127
|
+
|
|
128
|
+
## Gotcha
|
|
129
|
+
|
|
130
|
+
- Don't use this on trivial changes — it adds overhead without value on simple renames or config tweaks.
|
|
131
|
+
- The model tends to invent risks that don't exist. Ground every concern in actual code, not hypotheticals.
|
|
132
|
+
- Don't challenge the user's explicit requirements — challenge the implementation, not the goal.
|
|
133
|
+
|
|
134
|
+
## Do NOT
|
|
135
|
+
|
|
136
|
+
- Do NOT present the raw adversarial debate to the user — only the improved result.
|
|
137
|
+
- Do NOT use this as an excuse to delay work — the review should take seconds, not minutes.
|
|
138
|
+
- Do NOT apply this to trivial changes — it adds overhead without value.
|
|
139
|
+
- Do NOT let the "grumpy engineer" kill good ideas — the balanced engineer must counter.
|
|
140
|
+
- Do NOT skip Step 3 (Revise) — attacking without improving is just complaining.
|
|
141
|
+
|
|
142
|
+
## References
|
|
143
|
+
|
|
144
|
+
- **Tree-of-Thoughts (ToT)** — [arxiv.org/abs/2305.10601](https://arxiv.org/abs/2305.10601)
|
|
145
|
+
Deliberate problem-solving by exploring multiple reasoning branches.
|
|
146
|
+
This skill adapts ToT by pitting a grumpy engineer against a
|
|
147
|
+
balanced engineer — the branching happens between roles, not
|
|
148
|
+
between thought-tree nodes.
|
|
149
|
+
|