agileflow 4.0.0-alpha.2 → 4.0.0-alpha.21
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/CHANGELOG.md +51 -0
- package/content/plugins/accessibility/plugin.yaml +14 -0
- package/content/plugins/accessibility/skills/agileflow-accessibility/SKILL.md +392 -0
- package/content/plugins/accessibility/skills/agileflow-accessibility/references/aria-patterns.md +528 -0
- package/content/plugins/accessibility/skills/agileflow-accessibility/references/testing-checklist.md +457 -0
- package/content/plugins/accessibility/skills/agileflow-accessibility/references/wcag-guide.md +683 -0
- package/content/plugins/accessibility/skills/agileflow-accessibility/workflows/audit-page.md +310 -0
- package/content/plugins/accessibility/skills/agileflow-accessibility/workflows/implement-accessible-component.md +479 -0
- package/content/plugins/ads/agents/ads-audit-budget.md +185 -0
- package/content/plugins/ads/agents/ads-audit-compliance.md +171 -0
- package/content/plugins/ads/agents/ads-audit-creative.md +168 -0
- package/content/plugins/ads/agents/ads-audit-google.md +227 -0
- package/content/plugins/ads/agents/ads-audit-meta.md +184 -0
- package/content/plugins/ads/agents/ads-audit-tracking.md +205 -0
- package/content/plugins/ads/agents/ads-consensus.md +410 -0
- package/content/plugins/ads/agents/ads-generate.md +152 -0
- package/content/plugins/ads/agents/ads-performance-tracker.md +212 -0
- package/content/plugins/ads/plugin.yaml +23 -4
- package/content/plugins/ads/skills/agileflow-ads/SKILL.md +218 -0
- package/content/plugins/ads/skills/agileflow-ads/references/ad-copy-formula-guide.md +131 -0
- package/content/plugins/ads/skills/agileflow-ads/references/audience-targeting-guide.md +137 -0
- package/content/plugins/ads/skills/agileflow-ads/references/bid-strategy-guide.md +115 -0
- package/content/plugins/ads/skills/agileflow-ads/references/platform-benchmarks.md +100 -0
- package/content/plugins/ads/skills/agileflow-ads/workflows/audit.md +118 -0
- package/content/plugins/ads/skills/agileflow-ads/workflows/generate.md +84 -0
- package/content/plugins/audit/agents/a11y-analyzer-aria.md +173 -0
- package/content/plugins/audit/agents/a11y-analyzer-forms.md +173 -0
- package/content/plugins/audit/agents/a11y-analyzer-keyboard.md +183 -0
- package/content/plugins/audit/agents/a11y-analyzer-semantic.md +169 -0
- package/content/plugins/audit/agents/a11y-analyzer-visual.md +172 -0
- package/content/plugins/audit/agents/a11y-consensus.md +249 -0
- package/content/plugins/audit/agents/accessibility.md +558 -0
- package/content/plugins/audit/agents/api-quality-analyzer-conventions.md +156 -0
- package/content/plugins/audit/agents/api-quality-analyzer-docs.md +184 -0
- package/content/plugins/audit/agents/api-quality-analyzer-errors.md +191 -0
- package/content/plugins/audit/agents/api-quality-analyzer-pagination.md +179 -0
- package/content/plugins/audit/agents/api-quality-analyzer-versioning.md +150 -0
- package/content/plugins/audit/agents/api-quality-consensus.md +217 -0
- package/content/plugins/audit/agents/api-validator.md +191 -0
- package/content/plugins/audit/agents/arch-analyzer-circular.md +156 -0
- package/content/plugins/audit/agents/arch-analyzer-complexity.md +193 -0
- package/content/plugins/audit/agents/arch-analyzer-coupling.md +152 -0
- package/content/plugins/audit/agents/arch-analyzer-layering.md +160 -0
- package/content/plugins/audit/agents/arch-analyzer-patterns.md +210 -0
- package/content/plugins/audit/agents/arch-consensus.md +228 -0
- package/content/plugins/audit/agents/browser-qa.md +342 -0
- package/content/plugins/audit/agents/code-reviewer.md +298 -0
- package/content/plugins/audit/agents/completeness-analyzer-api.md +199 -0
- package/content/plugins/audit/agents/completeness-analyzer-conditional.md +211 -0
- package/content/plugins/audit/agents/completeness-analyzer-handlers.md +166 -0
- package/content/plugins/audit/agents/completeness-analyzer-imports.md +165 -0
- package/content/plugins/audit/agents/completeness-analyzer-routes.md +190 -0
- package/content/plugins/audit/agents/completeness-analyzer-state.md +196 -0
- package/content/plugins/audit/agents/completeness-analyzer-stubs.md +206 -0
- package/content/plugins/audit/agents/completeness-consensus.md +295 -0
- package/content/plugins/audit/agents/error-analyzer.md +213 -0
- package/content/plugins/audit/agents/flow-analyzer-authorization.md +182 -0
- package/content/plugins/audit/agents/flow-analyzer-discovery.md +174 -0
- package/content/plugins/audit/agents/flow-analyzer-errors.md +186 -0
- package/content/plugins/audit/agents/flow-analyzer-feedback.md +185 -0
- package/content/plugins/audit/agents/flow-analyzer-navigation.md +177 -0
- package/content/plugins/audit/agents/flow-analyzer-persistence.md +193 -0
- package/content/plugins/audit/agents/flow-analyzer-wiring.md +169 -0
- package/content/plugins/audit/agents/flow-consensus.md +237 -0
- package/content/plugins/audit/agents/legal-analyzer-a11y.md +114 -0
- package/content/plugins/audit/agents/legal-analyzer-ai.md +121 -0
- package/content/plugins/audit/agents/legal-analyzer-consumer.md +114 -0
- package/content/plugins/audit/agents/legal-analyzer-content.md +117 -0
- package/content/plugins/audit/agents/legal-analyzer-international.md +119 -0
- package/content/plugins/audit/agents/legal-analyzer-licensing.md +119 -0
- package/content/plugins/audit/agents/legal-analyzer-privacy.md +112 -0
- package/content/plugins/audit/agents/legal-analyzer-security.md +116 -0
- package/content/plugins/audit/agents/legal-analyzer-terms.md +115 -0
- package/content/plugins/audit/agents/legal-consensus.md +250 -0
- package/content/plugins/audit/agents/logic-analyzer-edge.md +179 -0
- package/content/plugins/audit/agents/logic-analyzer-flow.md +264 -0
- package/content/plugins/audit/agents/logic-analyzer-invariant.md +215 -0
- package/content/plugins/audit/agents/logic-analyzer-race.md +280 -0
- package/content/plugins/audit/agents/logic-analyzer-type.md +227 -0
- package/content/plugins/audit/agents/logic-consensus.md +259 -0
- package/content/plugins/audit/agents/perf-analyzer-assets.md +182 -0
- package/content/plugins/audit/agents/perf-analyzer-bundle.md +173 -0
- package/content/plugins/audit/agents/perf-analyzer-caching.md +170 -0
- package/content/plugins/audit/agents/perf-analyzer-compute.md +173 -0
- package/content/plugins/audit/agents/perf-analyzer-memory.md +193 -0
- package/content/plugins/audit/agents/perf-analyzer-network.md +165 -0
- package/content/plugins/audit/agents/perf-analyzer-queries.md +162 -0
- package/content/plugins/audit/agents/perf-analyzer-rendering.md +168 -0
- package/content/plugins/audit/agents/perf-consensus.md +287 -0
- package/content/plugins/audit/agents/qa.md +820 -0
- package/content/plugins/audit/agents/quality-analyzer-comments.md +159 -0
- package/content/plugins/audit/agents/quality-analyzer-duplication.md +184 -0
- package/content/plugins/audit/agents/quality-analyzer-naming.md +160 -0
- package/content/plugins/audit/agents/quality-consensus.md +241 -0
- package/content/plugins/audit/agents/schema-validator.md +473 -0
- package/content/plugins/audit/agents/security-analyzer-api.md +210 -0
- package/content/plugins/audit/agents/security-analyzer-auth.md +169 -0
- package/content/plugins/audit/agents/security-analyzer-authz.md +180 -0
- package/content/plugins/audit/agents/security-analyzer-deps.md +153 -0
- package/content/plugins/audit/agents/security-analyzer-infra.md +184 -0
- package/content/plugins/audit/agents/security-analyzer-injection.md +155 -0
- package/content/plugins/audit/agents/security-analyzer-input.md +201 -0
- package/content/plugins/audit/agents/security-analyzer-secrets.md +183 -0
- package/content/plugins/audit/agents/security-consensus.md +283 -0
- package/content/plugins/audit/agents/test-analyzer-assertions.md +188 -0
- package/content/plugins/audit/agents/test-analyzer-coverage.md +189 -0
- package/content/plugins/audit/agents/test-analyzer-fragility.md +193 -0
- package/content/plugins/audit/agents/test-analyzer-integration.md +161 -0
- package/content/plugins/audit/agents/test-analyzer-maintenance.md +180 -0
- package/content/plugins/audit/agents/test-analyzer-mocking.md +188 -0
- package/content/plugins/audit/agents/test-analyzer-patterns.md +196 -0
- package/content/plugins/audit/agents/test-analyzer-structure.md +184 -0
- package/content/plugins/audit/agents/test-consensus.md +301 -0
- package/content/plugins/audit/agents/testing.md +561 -0
- package/content/plugins/audit/agents/ui-validator.md +344 -0
- package/content/plugins/audit/plugin.yaml +186 -5
- package/content/plugins/audit/skills/agileflow-audit/SKILL.md +113 -0
- package/content/plugins/audit/skills/agileflow-audit/references/audit-depth-guide.md +151 -0
- package/content/plugins/audit/skills/agileflow-audit/references/dependency-risk-guide.md +139 -0
- package/content/plugins/audit/skills/agileflow-audit/references/owasp-top10.md +120 -0
- package/content/plugins/audit/skills/agileflow-audit/references/performance-budget-guide.md +143 -0
- package/content/plugins/audit/skills/agileflow-audit/references/wcag-criteria.md +117 -0
- package/content/plugins/audit/skills/agileflow-audit/workflows/run-audit.md +52 -0
- package/content/plugins/audit/skills/agileflow-audit/workflows/tdd.md +66 -0
- package/content/plugins/core/agents/adr-writer.md +521 -0
- package/content/plugins/core/agents/epic-planner.md +520 -0
- package/content/plugins/core/agents/mentor.md +709 -0
- package/content/plugins/core/agents/orchestrator.md +776 -0
- package/content/plugins/core/agents/team-coordinator.md +334 -0
- package/content/plugins/core/agents/team-lead.md +181 -0
- package/content/plugins/core/agents/workspace-orchestrator.md +146 -0
- package/content/plugins/core/hooks/context-loader.js +31 -4
- package/content/plugins/core/hooks/damage-control-bash.js +10 -2
- package/content/plugins/core/hooks/damage-control-edit.js +4 -1
- package/content/plugins/core/hooks/damage-control-patterns.yaml +1 -1
- package/content/plugins/core/hooks/damage-control-write.js +4 -1
- package/content/plugins/core/hooks/{pre-compact-state.js → post-compact-state.js} +25 -8
- package/content/plugins/core/hooks/preferences-injector.js +352 -0
- package/content/plugins/core/plugin.yaml +24 -28
- package/content/plugins/core/skills/agileflow-adr/SKILL.md +34 -8
- package/content/plugins/core/skills/agileflow-adr/references/madr-format-guide.md +86 -0
- package/content/plugins/core/skills/agileflow-adr/workflows/write-adr.md +57 -0
- package/content/plugins/core/skills/agileflow-babysit-mentor/SKILL.md +94 -27
- package/content/plugins/core/skills/agileflow-babysit-mentor/references/mentor-decision-guide.md +81 -0
- package/content/plugins/core/skills/agileflow-babysit-mentor/workflows/mentor-session.md +79 -0
- package/content/plugins/core/skills/agileflow-epic-planner/SKILL.md +37 -7
- package/content/plugins/core/skills/agileflow-epic-planner/references/epic-sizing-guide.md +81 -0
- package/content/plugins/core/skills/agileflow-epic-planner/workflows/plan-epic.md +55 -0
- package/content/plugins/core/skills/agileflow-status-updater/SKILL.md +36 -20
- package/content/plugins/core/skills/agileflow-status-updater/references/status-transitions.md +89 -0
- package/content/plugins/core/skills/agileflow-status-updater/workflows/update-status.md +56 -0
- package/content/plugins/core/skills/agileflow-story-writer/SKILL.md +39 -114
- package/content/plugins/core/skills/agileflow-story-writer/references/estimation-reference.md +36 -0
- package/content/plugins/core/skills/agileflow-story-writer/references/story-template.md +92 -0
- package/content/plugins/core/skills/agileflow-story-writer/workflows/write-story.md +138 -0
- package/content/plugins/council/agents/council-advocate.md +223 -0
- package/content/plugins/council/agents/council-analyst.md +278 -0
- package/content/plugins/council/agents/council-compounder.md +204 -0
- package/content/plugins/council/agents/council-contrarian.md +217 -0
- package/content/plugins/council/agents/council-moonshot.md +217 -0
- package/content/plugins/council/agents/council-optimist.md +185 -0
- package/content/plugins/council/agents/council-revenue.md +200 -0
- package/content/plugins/council/agents/council-technical.md +218 -0
- package/content/plugins/council/agents/multi-expert.md +334 -0
- package/content/plugins/council/plugin.yaml +23 -4
- package/content/plugins/council/skills/agileflow-council/SKILL.md +102 -0
- package/content/plugins/council/skills/agileflow-council/references/decision-log-template.md +109 -0
- package/content/plugins/council/skills/agileflow-council/references/perspective-guide.md +104 -0
- package/content/plugins/council/skills/agileflow-council/references/when-to-convene-guide.md +112 -0
- package/content/plugins/council/skills/agileflow-council/workflows/convene.md +73 -0
- package/content/plugins/council/skills/agileflow-council/workflows/multi-expert.md +75 -0
- package/content/plugins/database/plugin.yaml +14 -0
- package/content/plugins/database/skills/agileflow-database/SKILL.md +284 -0
- package/content/plugins/database/skills/agileflow-database/references/indexing-guide.md +313 -0
- package/content/plugins/database/skills/agileflow-database/references/migration-guide.md +328 -0
- package/content/plugins/database/skills/agileflow-database/references/schema-design-guide.md +467 -0
- package/content/plugins/database/skills/agileflow-database/workflows/design-schema.md +213 -0
- package/content/plugins/database/skills/agileflow-database/workflows/optimize-query.md +253 -0
- package/content/plugins/debugging/plugin.yaml +14 -0
- package/content/plugins/debugging/skills/agileflow-debug/SKILL.md +236 -0
- package/content/plugins/debugging/skills/agileflow-debug/references/common-patterns.md +350 -0
- package/content/plugins/debugging/skills/agileflow-debug/references/debugging-strategies.md +328 -0
- package/content/plugins/debugging/skills/agileflow-debug/workflows/debug-issue.md +187 -0
- package/content/plugins/debugging/skills/agileflow-debug/workflows/reproduce-bug.md +194 -0
- package/content/plugins/delivery/agents/ci.md +547 -0
- package/content/plugins/delivery/agents/devops.md +789 -0
- package/content/plugins/delivery/plugin.yaml +19 -0
- package/content/plugins/delivery/skills/agileflow-delivery/SKILL.md +111 -0
- package/content/plugins/delivery/skills/agileflow-delivery/references/changelog-format-guide.md +133 -0
- package/content/plugins/delivery/skills/agileflow-delivery/references/ci-pipeline-guide.md +158 -0
- package/content/plugins/delivery/skills/agileflow-delivery/references/pr-checklist-guide.md +133 -0
- package/content/plugins/delivery/skills/agileflow-delivery/references/release-checklist.md +142 -0
- package/content/plugins/delivery/skills/agileflow-delivery/workflows/changelog.md +72 -0
- package/content/plugins/delivery/skills/agileflow-delivery/workflows/deploy.md +74 -0
- package/content/plugins/delivery/skills/agileflow-delivery/workflows/pr.md +75 -0
- package/content/plugins/docs/agents/documentation.md +544 -0
- package/content/plugins/docs/agents/readme-updater.md +640 -0
- package/content/plugins/docs/plugin.yaml +19 -0
- package/content/plugins/docs/skills/agileflow-docs/SKILL.md +106 -0
- package/content/plugins/docs/skills/agileflow-docs/references/api-doc-template.md +167 -0
- package/content/plugins/docs/skills/agileflow-docs/references/doc-types-guide.md +141 -0
- package/content/plugins/docs/skills/agileflow-docs/references/readme-template.md +156 -0
- package/content/plugins/docs/skills/agileflow-docs/workflows/readme-sync.md +57 -0
- package/content/plugins/docs/skills/agileflow-docs/workflows/sync.md +64 -0
- package/content/plugins/engineering/agents/api.md +718 -0
- package/content/plugins/engineering/agents/codebase-query.md +285 -0
- package/content/plugins/engineering/agents/compliance.md +559 -0
- package/content/plugins/engineering/agents/database.md +644 -0
- package/content/plugins/engineering/agents/integrations.md +644 -0
- package/content/plugins/engineering/agents/mobile.md +552 -0
- package/content/plugins/engineering/agents/monitoring.md +585 -0
- package/content/plugins/engineering/agents/performance.md +529 -0
- package/content/plugins/engineering/agents/refactor.md +592 -0
- package/content/plugins/engineering/agents/security.md +524 -0
- package/content/plugins/engineering/agents/ui.md +1336 -0
- package/content/plugins/engineering/plugin.yaml +37 -0
- package/content/plugins/engineering/skills/agileflow-engineering/SKILL.md +127 -0
- package/content/plugins/engineering/skills/agileflow-engineering/references/code-review-guide.md +126 -0
- package/content/plugins/engineering/skills/agileflow-engineering/references/domain-routing-guide.md +89 -0
- package/content/plugins/engineering/skills/agileflow-engineering/references/refactoring-guide.md +136 -0
- package/content/plugins/engineering/skills/agileflow-engineering/workflows/diagnose.md +63 -0
- package/content/plugins/engineering/skills/agileflow-engineering/workflows/impact.md +60 -0
- package/content/plugins/ideation/agents/brainstorm-analyzer-features.md +179 -0
- package/content/plugins/ideation/agents/brainstorm-analyzer-growth.md +169 -0
- package/content/plugins/ideation/agents/brainstorm-analyzer-integration.md +181 -0
- package/content/plugins/ideation/agents/brainstorm-analyzer-market.md +150 -0
- package/content/plugins/ideation/agents/brainstorm-analyzer-ux.md +180 -0
- package/content/plugins/ideation/agents/brainstorm-consensus.md +245 -0
- package/content/plugins/ideation/agents/design.md +568 -0
- package/content/plugins/ideation/agents/product.md +582 -0
- package/content/plugins/ideation/plugin.yaml +31 -0
- package/content/plugins/ideation/skills/agileflow-ideation/SKILL.md +109 -0
- package/content/plugins/ideation/skills/agileflow-ideation/references/brainstorm-techniques.md +138 -0
- package/content/plugins/ideation/skills/agileflow-ideation/references/competitive-analysis-template.md +148 -0
- package/content/plugins/ideation/skills/agileflow-ideation/references/feature-prioritization-guide.md +147 -0
- package/content/plugins/ideation/skills/agileflow-ideation/references/user-story-patterns.md +152 -0
- package/content/plugins/ideation/skills/agileflow-ideation/workflows/features.md +65 -0
- package/content/plugins/ideation/skills/agileflow-ideation/workflows/ideate.md +54 -0
- package/content/plugins/migration/agents/datamigration.md +757 -0
- package/content/plugins/migration/plugin.yaml +17 -0
- package/content/plugins/migration/skills/agileflow-migration/SKILL.md +106 -0
- package/content/plugins/migration/skills/agileflow-migration/references/data-validation-checklist.md +154 -0
- package/content/plugins/migration/skills/agileflow-migration/references/migration-patterns.md +209 -0
- package/content/plugins/migration/skills/agileflow-migration/references/rollback-playbook.md +171 -0
- package/content/plugins/migration/skills/agileflow-migration/references/version-compatibility-matrix.md +155 -0
- package/content/plugins/migration/skills/agileflow-migration/workflows/plan.md +73 -0
- package/content/plugins/migration/skills/agileflow-migration/workflows/validate.md +71 -0
- package/content/plugins/performance/plugin.yaml +14 -0
- package/content/plugins/performance/skills/agileflow-performance/SKILL.md +224 -0
- package/content/plugins/performance/skills/agileflow-performance/references/optimization-patterns.md +554 -0
- package/content/plugins/performance/skills/agileflow-performance/references/profiling-guide.md +383 -0
- package/content/plugins/performance/skills/agileflow-performance/references/web-vitals-guide.md +360 -0
- package/content/plugins/performance/skills/agileflow-performance/workflows/improve-web-vitals.md +344 -0
- package/content/plugins/performance/skills/agileflow-performance/workflows/profile-and-fix.md +254 -0
- package/content/plugins/planning/agents/analytics.md +670 -0
- package/content/plugins/planning/agents/rlm-subcore.md +215 -0
- package/content/plugins/planning/plugin.yaml +19 -0
- package/content/plugins/planning/skills/agileflow-planning/SKILL.md +111 -0
- package/content/plugins/planning/skills/agileflow-planning/references/estimation-guide.md +114 -0
- package/content/plugins/planning/skills/agileflow-planning/references/rpi-workflow.md +119 -0
- package/content/plugins/planning/skills/agileflow-planning/references/sprint-planning-guide.md +145 -0
- package/content/plugins/planning/skills/agileflow-planning/workflows/impact.md +63 -0
- package/content/plugins/planning/skills/agileflow-planning/workflows/rpi.md +104 -0
- package/content/plugins/psychology/plugin.yaml +14 -0
- package/content/plugins/psychology/skills/agileflow-retention/SKILL.md +252 -0
- package/content/plugins/psychology/skills/agileflow-retention/references/competitor-analysis.md +240 -0
- package/content/plugins/psychology/skills/agileflow-retention/references/psychology-models.md +349 -0
- package/content/plugins/psychology/skills/agileflow-retention/references/retention-patterns.md +279 -0
- package/content/plugins/psychology/skills/agileflow-retention/workflows/design-retention-feature.md +287 -0
- package/content/plugins/psychology/skills/agileflow-retention/workflows/retention-audit.md +259 -0
- package/content/plugins/refactoring/plugin.yaml +14 -0
- package/content/plugins/refactoring/skills/agileflow-refactor/SKILL.md +235 -0
- package/content/plugins/refactoring/skills/agileflow-refactor/references/refactoring-patterns.md +405 -0
- package/content/plugins/refactoring/skills/agileflow-refactor/references/safety-checks.md +177 -0
- package/content/plugins/refactoring/skills/agileflow-refactor/workflows/extract-module.md +226 -0
- package/content/plugins/refactoring/skills/agileflow-refactor/workflows/safe-refactor.md +169 -0
- package/content/plugins/research/agents/research.md +503 -0
- package/content/plugins/research/plugin.yaml +17 -0
- package/content/plugins/research/skills/agileflow-research/SKILL.md +110 -0
- package/content/plugins/research/skills/agileflow-research/references/knowledge-decay-guide.md +121 -0
- package/content/plugins/research/skills/agileflow-research/references/research-prompt-guide.md +141 -0
- package/content/plugins/research/skills/agileflow-research/references/synthesis-template.md +154 -0
- package/content/plugins/research/skills/agileflow-research/workflows/analyze.md +60 -0
- package/content/plugins/research/skills/agileflow-research/workflows/ask.md +64 -0
- package/content/plugins/research/skills/agileflow-research/workflows/import.md +66 -0
- package/content/plugins/research/skills/agileflow-research/workflows/synthesize.md +66 -0
- package/content/plugins/reviews/plugin.yaml +14 -0
- package/content/plugins/reviews/skills/agileflow-pr-reviewer/SKILL.md +241 -0
- package/content/plugins/reviews/skills/agileflow-pr-reviewer/references/review-checklist.md +200 -0
- package/content/plugins/reviews/skills/agileflow-pr-reviewer/references/security-patterns.md +328 -0
- package/content/plugins/reviews/skills/agileflow-pr-reviewer/workflows/review-pr.md +153 -0
- package/content/plugins/reviews/skills/agileflow-pr-reviewer/workflows/security-review.md +177 -0
- package/content/plugins/seo/agents/seo-analyzer-content.md +169 -0
- package/content/plugins/seo/agents/seo-analyzer-images.md +198 -0
- package/content/plugins/seo/agents/seo-analyzer-performance.md +217 -0
- package/content/plugins/seo/agents/seo-analyzer-schema.md +184 -0
- package/content/plugins/seo/agents/seo-analyzer-sitemap.md +177 -0
- package/content/plugins/seo/agents/seo-analyzer-technical.md +151 -0
- package/content/plugins/seo/agents/seo-consensus.md +304 -0
- package/content/plugins/seo/plugin.yaml +19 -4
- package/content/plugins/seo/skills/agileflow-seo/SKILL.md +188 -0
- package/content/plugins/seo/skills/agileflow-seo/references/cwv-thresholds.md +110 -0
- package/content/plugins/seo/skills/agileflow-seo/references/eeat-framework.md +144 -0
- package/content/plugins/seo/skills/agileflow-seo/references/keyword-research-guide.md +125 -0
- package/content/plugins/seo/skills/agileflow-seo/references/schema-types.md +139 -0
- package/content/plugins/seo/skills/agileflow-seo/references/technical-seo-checklist.md +139 -0
- package/content/plugins/seo/skills/agileflow-seo/workflows/audit.md +98 -0
- package/content/plugins/seo/skills/agileflow-seo/workflows/page.md +118 -0
- package/content/plugins/testing/plugin.yaml +16 -0
- package/content/plugins/testing/skills/agileflow-test-writer/SKILL.md +260 -0
- package/content/plugins/testing/skills/agileflow-test-writer/references/coverage-targets.md +239 -0
- package/content/plugins/testing/skills/agileflow-test-writer/references/test-patterns.md +420 -0
- package/content/plugins/testing/skills/agileflow-test-writer/workflows/add-coverage.md +154 -0
- package/content/plugins/testing/skills/agileflow-test-writer/workflows/write-tests-from-ac.md +225 -0
- package/package.json +2 -2
- package/src/cli/commands/doctor.js +818 -30
- package/src/cli/commands/hook.js +17 -14
- package/src/cli/commands/launch.js +1454 -0
- package/src/cli/commands/learn.js +149 -0
- package/src/cli/commands/plugins.js +113 -0
- package/src/cli/commands/setup.js +455 -110
- package/src/cli/commands/skills.js +324 -0
- package/src/cli/commands/status.js +8 -10
- package/src/cli/commands/update.js +76 -15
- package/src/cli/index.js +90 -26
- package/src/cli/wizard/babysit-mode-picker.js +192 -0
- package/src/cli/wizard/behaviors-picker.js +208 -54
- package/src/cli/wizard/ide-picker.js +40 -28
- package/src/cli/wizard/install-scope-picker.js +57 -0
- package/src/cli/wizard/launch-alias-picker.js +50 -0
- package/src/cli/wizard/launch-cli-picker.js +129 -0
- package/src/cli/wizard/launch-tmux-picker.js +133 -0
- package/src/cli/wizard/learnings-picker.js +40 -0
- package/src/cli/wizard/plugin-picker.js +47 -16
- package/src/lib/brand.js +116 -0
- package/src/lib/errors.js +120 -0
- package/src/lib/path-check.js +39 -0
- package/src/runtime/config/defaults.js +22 -17
- package/src/runtime/config/loader.js +77 -8
- package/src/runtime/config/schema.json +43 -16
- package/src/runtime/config/writer.js +3 -1
- package/src/runtime/ide/babysit-skill.js +202 -0
- package/src/runtime/ide/capabilities.js +84 -29
- package/src/runtime/ide/claude-code-content.js +177 -0
- package/src/runtime/ide/claude-code-settings.js +67 -29
- package/src/runtime/ide/claude-code-skills.js +47 -32
- package/src/runtime/ide/codex-config.js +295 -0
- package/src/runtime/installer/install.js +252 -24
- package/src/runtime/launch/alias-installer.js +191 -0
- package/src/runtime/launch/cli-resume.js +244 -0
- package/src/runtime/launch/closed-windows.js +338 -0
- package/src/runtime/launch/defaults.js +66 -0
- package/src/runtime/launch/detect-clis.js +69 -0
- package/src/runtime/launch/doctor.js +464 -0
- package/src/runtime/launch/exec-wrapper.js +114 -0
- package/src/runtime/launch/parallel-session.js +247 -0
- package/src/runtime/launch/prefs.js +211 -0
- package/src/runtime/launch/project-prefs.js +234 -0
- package/src/runtime/launch/resolve-cli.js +56 -0
- package/src/runtime/launch/restore.js +152 -0
- package/src/runtime/launch/schema.json +75 -0
- package/src/runtime/launch/session-lifecycle.js +313 -0
- package/src/runtime/launch/session-registry.js +401 -0
- package/src/runtime/launch/spawn.js +103 -0
- package/src/runtime/launch/tabs.js +350 -0
- package/src/runtime/launch/tmux.js +764 -0
- package/src/runtime/launch/worktree.js +260 -0
- package/src/runtime/plugins/registry.js +16 -11
- package/src/runtime/plugins/validator.js +57 -43
- package/src/runtime/skills/learnings.js +308 -0
- package/content/plugins/core/hooks/babysit-mentor-injector.js +0 -55
- package/src/cli/wizard/personalization.js +0 -64
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: logic-analyzer-edge
|
|
3
|
+
description: Edge case analyzer for boundary conditions, off-by-one errors, empty inputs, and wraparound issues
|
|
4
|
+
tools: Read, Glob, Grep
|
|
5
|
+
model: haiku
|
|
6
|
+
team_role: utility
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Logic Analyzer: Edge Cases
|
|
10
|
+
|
|
11
|
+
You are a specialized logic analyzer focused on **boundary conditions and edge cases**. Your job is to find bugs that occur at the edges of input ranges, array boundaries, and exceptional conditions.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Your Focus Areas
|
|
16
|
+
|
|
17
|
+
1. **Off-by-one errors**: `<` vs `<=`, array index boundaries, loop termination
|
|
18
|
+
2. **Empty input handling**: Empty arrays, empty strings, null/undefined
|
|
19
|
+
3. **Boundary wraparound**: Integer overflow, index wraparound, modulo edge cases
|
|
20
|
+
4. **Range edge cases**: Start/end of ranges, first/last elements
|
|
21
|
+
5. **Default value issues**: Missing defaults, falsy value confusion (`0`, `""`, `false`)
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Analysis Process
|
|
26
|
+
|
|
27
|
+
### Step 1: Read the Target Code
|
|
28
|
+
|
|
29
|
+
Read the files you're asked to analyze. Focus on:
|
|
30
|
+
|
|
31
|
+
- Loop constructs (`for`, `while`, `forEach`, `map`)
|
|
32
|
+
- Array/string access patterns
|
|
33
|
+
- Conditional boundaries
|
|
34
|
+
- Function parameters with defaults
|
|
35
|
+
|
|
36
|
+
### Step 2: Look for These Patterns
|
|
37
|
+
|
|
38
|
+
**Pattern 1: Off-by-one in loops**
|
|
39
|
+
|
|
40
|
+
```javascript
|
|
41
|
+
// BUG: Should be i < arr.length, not <=
|
|
42
|
+
for (let i = 0; i <= arr.length; i++) {
|
|
43
|
+
console.log(arr[i]); // arr[arr.length] is undefined
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Pattern 2: Empty array not handled**
|
|
48
|
+
|
|
49
|
+
```javascript
|
|
50
|
+
// BUG: What if items is empty?
|
|
51
|
+
const first = items[0]; // undefined
|
|
52
|
+
const last = items[items.length - 1]; // items[-1] is undefined
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Pattern 3: Index can be negative**
|
|
56
|
+
|
|
57
|
+
```javascript
|
|
58
|
+
// BUG: If searchTerm not found, indexOf returns -1
|
|
59
|
+
const index = str.indexOf(searchTerm);
|
|
60
|
+
const char = str[index]; // str[-1] is undefined
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Pattern 4: Default value confusion**
|
|
64
|
+
|
|
65
|
+
```javascript
|
|
66
|
+
// BUG: count = 0 is falsy, so default kicks in wrongly
|
|
67
|
+
const count = userCount || 10; // 0 becomes 10!
|
|
68
|
+
// FIX: const count = userCount ?? 10;
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Pattern 5: Array slice/splice boundaries**
|
|
72
|
+
|
|
73
|
+
```javascript
|
|
74
|
+
// BUG: If end > array.length, slice returns less than expected
|
|
75
|
+
const chunk = arr.slice(start, start + chunkSize);
|
|
76
|
+
// What if start + chunkSize > arr.length?
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Output Format
|
|
82
|
+
|
|
83
|
+
For each potential issue found, output:
|
|
84
|
+
|
|
85
|
+
```markdown
|
|
86
|
+
### FINDING-{N}: {Brief Title}
|
|
87
|
+
|
|
88
|
+
**Location**: `{file}:{line}`
|
|
89
|
+
**Severity**: P0 (crash) | P1 (wrong result) | P2 (edge case)
|
|
90
|
+
**Confidence**: HIGH | MEDIUM | LOW
|
|
91
|
+
|
|
92
|
+
**Code**:
|
|
93
|
+
\`\`\`{language}
|
|
94
|
+
{relevant code snippet, 3-7 lines}
|
|
95
|
+
\`\`\`
|
|
96
|
+
|
|
97
|
+
**Issue**: {Clear explanation of what can go wrong}
|
|
98
|
+
|
|
99
|
+
**Edge Case**: {Specific input that triggers the bug}
|
|
100
|
+
|
|
101
|
+
- Input: `{example input}`
|
|
102
|
+
- Expected: `{expected behavior}`
|
|
103
|
+
- Actual: `{actual behavior}`
|
|
104
|
+
|
|
105
|
+
**Suggested Fix**:
|
|
106
|
+
\`\`\`{language}
|
|
107
|
+
{fixed code}
|
|
108
|
+
\`\`\`
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Important Rules
|
|
114
|
+
|
|
115
|
+
1. **Be SPECIFIC**: Include exact file paths and line numbers
|
|
116
|
+
2. **Show the edge case**: Provide a concrete input that triggers the bug
|
|
117
|
+
3. **Verify before reporting**: Read the surrounding code - the issue might be handled elsewhere
|
|
118
|
+
4. **Don't report style issues**: Only logic bugs that cause incorrect behavior
|
|
119
|
+
5. **Consider context**: A function might have validated input upstream
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Example Analysis
|
|
124
|
+
|
|
125
|
+
Given this code:
|
|
126
|
+
|
|
127
|
+
```javascript
|
|
128
|
+
function getMiddleElement(arr) {
|
|
129
|
+
const midIndex = Math.floor(arr.length / 2);
|
|
130
|
+
return arr[midIndex];
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Your analysis:
|
|
135
|
+
|
|
136
|
+
```markdown
|
|
137
|
+
### FINDING-1: Empty array access in getMiddleElement
|
|
138
|
+
|
|
139
|
+
**Location**: `utils.js:15`
|
|
140
|
+
**Severity**: P1 (wrong result)
|
|
141
|
+
**Confidence**: HIGH
|
|
142
|
+
|
|
143
|
+
**Code**:
|
|
144
|
+
\`\`\`javascript
|
|
145
|
+
function getMiddleElement(arr) {
|
|
146
|
+
const midIndex = Math.floor(arr.length / 2);
|
|
147
|
+
return arr[midIndex];
|
|
148
|
+
}
|
|
149
|
+
\`\`\`
|
|
150
|
+
|
|
151
|
+
**Issue**: When `arr` is empty, `arr.length / 2 = 0`, and `arr[0]` returns `undefined` without any indication that the input was invalid.
|
|
152
|
+
|
|
153
|
+
**Edge Case**:
|
|
154
|
+
|
|
155
|
+
- Input: `[]`
|
|
156
|
+
- Expected: `undefined` or error indicating empty array
|
|
157
|
+
- Actual: Returns `undefined` silently (may mask bugs in calling code)
|
|
158
|
+
|
|
159
|
+
**Suggested Fix**:
|
|
160
|
+
\`\`\`javascript
|
|
161
|
+
function getMiddleElement(arr) {
|
|
162
|
+
if (arr.length === 0) {
|
|
163
|
+
return undefined; // or throw new Error('Cannot get middle of empty array')
|
|
164
|
+
}
|
|
165
|
+
const midIndex = Math.floor(arr.length / 2);
|
|
166
|
+
return arr[midIndex];
|
|
167
|
+
}
|
|
168
|
+
\`\`\`
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## What NOT to Report
|
|
174
|
+
|
|
175
|
+
- Missing documentation
|
|
176
|
+
- Code style preferences
|
|
177
|
+
- Performance optimizations (unless they cause logic errors)
|
|
178
|
+
- Type annotations
|
|
179
|
+
- Issues already handled by upstream validation
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: logic-analyzer-flow
|
|
3
|
+
description: Control flow analyzer for dead code, unreachable branches, infinite loops, and missing return paths
|
|
4
|
+
tools: Read, Glob, Grep
|
|
5
|
+
model: haiku
|
|
6
|
+
team_role: utility
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Logic Analyzer: Control Flow
|
|
10
|
+
|
|
11
|
+
You are a specialized logic analyzer focused on **control flow issues**. Your job is to find bugs related to code execution paths, unreachable code, infinite loops, and missing returns.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Your Focus Areas
|
|
16
|
+
|
|
17
|
+
1. **Dead code**: Code that can never execute
|
|
18
|
+
2. **Unreachable branches**: Conditions that are always true/false
|
|
19
|
+
3. **Infinite loops**: Loops that never terminate
|
|
20
|
+
4. **Missing return paths**: Functions that don't return in all cases
|
|
21
|
+
5. **Early exit issues**: Returns/breaks that skip necessary cleanup
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Analysis Process
|
|
26
|
+
|
|
27
|
+
### Step 1: Read the Target Code
|
|
28
|
+
|
|
29
|
+
Focus on:
|
|
30
|
+
|
|
31
|
+
- Conditional statements (`if`, `switch`, ternary)
|
|
32
|
+
- Loop constructs and their termination conditions
|
|
33
|
+
- Function return statements
|
|
34
|
+
- Error handling flows
|
|
35
|
+
|
|
36
|
+
### Step 2: Look for These Patterns
|
|
37
|
+
|
|
38
|
+
**Pattern 1: Dead code after return/throw**
|
|
39
|
+
|
|
40
|
+
```javascript
|
|
41
|
+
// BUG: Code after return never executes
|
|
42
|
+
function process(data) {
|
|
43
|
+
if (!data) {
|
|
44
|
+
return null;
|
|
45
|
+
console.log("No data"); // DEAD CODE
|
|
46
|
+
}
|
|
47
|
+
return transform(data);
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Pattern 2: Condition always true/false**
|
|
52
|
+
|
|
53
|
+
```javascript
|
|
54
|
+
// BUG: typeof always returns a string, never null
|
|
55
|
+
if (typeof value === "string" || typeof value === null) {
|
|
56
|
+
// Second condition is always false
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// BUG: After checking truthiness, value can't be undefined
|
|
60
|
+
if (value) {
|
|
61
|
+
if (value === undefined) {
|
|
62
|
+
// ALWAYS FALSE
|
|
63
|
+
// Dead branch
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Pattern 3: Infinite loop**
|
|
69
|
+
|
|
70
|
+
```javascript
|
|
71
|
+
// BUG: i is never incremented
|
|
72
|
+
let i = 0;
|
|
73
|
+
while (i < items.length) {
|
|
74
|
+
process(items[i]);
|
|
75
|
+
// Missing i++
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// BUG: Condition can never become false
|
|
79
|
+
while (arr.length > 0) {
|
|
80
|
+
console.log(arr[0]); // arr never shrinks
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Pattern 4: Missing return path**
|
|
85
|
+
|
|
86
|
+
```javascript
|
|
87
|
+
// BUG: No return when x === y
|
|
88
|
+
function compare(x, y) {
|
|
89
|
+
if (x > y) return 1;
|
|
90
|
+
if (x < y) return -1;
|
|
91
|
+
// Missing: return 0 when x === y
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Pattern 5: Break/continue skips cleanup**
|
|
96
|
+
|
|
97
|
+
```javascript
|
|
98
|
+
// BUG: Resource not released when breaking
|
|
99
|
+
for (const file of files) {
|
|
100
|
+
const handle = openFile(file);
|
|
101
|
+
if (file.isEmpty) {
|
|
102
|
+
break; // handle.close() never called!
|
|
103
|
+
}
|
|
104
|
+
process(handle);
|
|
105
|
+
handle.close();
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
**Pattern 6: Switch fallthrough**
|
|
110
|
+
|
|
111
|
+
```javascript
|
|
112
|
+
// BUG: Unintentional fallthrough
|
|
113
|
+
switch (action) {
|
|
114
|
+
case "save":
|
|
115
|
+
saveData();
|
|
116
|
+
// Missing break - falls through to delete!
|
|
117
|
+
case "delete":
|
|
118
|
+
deleteData();
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Output Format
|
|
126
|
+
|
|
127
|
+
For each potential issue found, output:
|
|
128
|
+
|
|
129
|
+
```markdown
|
|
130
|
+
### FINDING-{N}: {Brief Title}
|
|
131
|
+
|
|
132
|
+
**Location**: `{file}:{line}`
|
|
133
|
+
**Severity**: P0 (infinite loop/crash) | P1 (wrong behavior) | P2 (dead code)
|
|
134
|
+
**Confidence**: HIGH | MEDIUM | LOW
|
|
135
|
+
|
|
136
|
+
**Code**:
|
|
137
|
+
\`\`\`{language}
|
|
138
|
+
{relevant code snippet, 5-10 lines}
|
|
139
|
+
\`\`\`
|
|
140
|
+
|
|
141
|
+
**Flow Issue**: {Type: dead code | unreachable | infinite loop | missing return}
|
|
142
|
+
|
|
143
|
+
**Explanation**: {How the control flow is problematic}
|
|
144
|
+
|
|
145
|
+
**Execution Path**:
|
|
146
|
+
|
|
147
|
+
1. {Enter function/loop with condition X}
|
|
148
|
+
2. {Branch taken/not taken}
|
|
149
|
+
3. {Result: code never reached / loop never exits / return missing}
|
|
150
|
+
|
|
151
|
+
**Suggested Fix**:
|
|
152
|
+
\`\`\`{language}
|
|
153
|
+
{fixed code}
|
|
154
|
+
\`\`\`
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Important Rules
|
|
160
|
+
|
|
161
|
+
1. **Trace the flow**: Walk through execution paths mentally
|
|
162
|
+
2. **Check all branches**: Every if needs an else path considered
|
|
163
|
+
3. **Verify loop termination**: Ensure loop variables change toward exit
|
|
164
|
+
4. **Consider early returns**: They can skip important code
|
|
165
|
+
5. **Don't flag intentional**: Some dead code is defensive/future-proofing
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## Example Analysis
|
|
170
|
+
|
|
171
|
+
Given this code:
|
|
172
|
+
|
|
173
|
+
```javascript
|
|
174
|
+
async function fetchAndProcess(url) {
|
|
175
|
+
const response = await fetch(url);
|
|
176
|
+
|
|
177
|
+
if (!response.ok) {
|
|
178
|
+
throw new Error("Fetch failed");
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const data = await response.json();
|
|
182
|
+
|
|
183
|
+
if (data.items.length === 0) {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
for (const item of data.items) {
|
|
188
|
+
await processItem(item);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// What should this function return?
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Your analysis:
|
|
196
|
+
|
|
197
|
+
```markdown
|
|
198
|
+
### FINDING-1: Inconsistent return values in fetchAndProcess
|
|
199
|
+
|
|
200
|
+
**Location**: `api.js:1-17`
|
|
201
|
+
**Severity**: P1 (wrong behavior)
|
|
202
|
+
**Confidence**: HIGH
|
|
203
|
+
|
|
204
|
+
**Code**:
|
|
205
|
+
\`\`\`javascript
|
|
206
|
+
async function fetchAndProcess(url) {
|
|
207
|
+
// ... fetch and parse ...
|
|
208
|
+
|
|
209
|
+
if (data.items.length === 0) {
|
|
210
|
+
return; // Returns undefined
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
for (const item of data.items) {
|
|
214
|
+
await processItem(item);
|
|
215
|
+
}
|
|
216
|
+
// Also returns undefined (implicit)
|
|
217
|
+
}
|
|
218
|
+
\`\`\`
|
|
219
|
+
|
|
220
|
+
**Flow Issue**: Missing return path consistency
|
|
221
|
+
|
|
222
|
+
**Explanation**: Function returns `undefined` in both success cases (empty items, processed items), making it impossible for callers to distinguish between "no items to process" and "items processed successfully".
|
|
223
|
+
|
|
224
|
+
**Execution Path**:
|
|
225
|
+
|
|
226
|
+
1. Fetch succeeds, data has items
|
|
227
|
+
2. Process all items
|
|
228
|
+
3. Function ends without explicit return
|
|
229
|
+
4. Caller receives `undefined`, same as empty case
|
|
230
|
+
|
|
231
|
+
**Suggested Fix**:
|
|
232
|
+
\`\`\`javascript
|
|
233
|
+
async function fetchAndProcess(url) {
|
|
234
|
+
const response = await fetch(url);
|
|
235
|
+
|
|
236
|
+
if (!response.ok) {
|
|
237
|
+
throw new Error('Fetch failed');
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
const data = await response.json();
|
|
241
|
+
|
|
242
|
+
if (data.items.length === 0) {
|
|
243
|
+
return { processed: 0, items: [] };
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
const results = [];
|
|
247
|
+
for (const item of data.items) {
|
|
248
|
+
results.push(await processItem(item));
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
return { processed: results.length, items: results };
|
|
252
|
+
}
|
|
253
|
+
\`\`\`
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## What NOT to Report
|
|
259
|
+
|
|
260
|
+
- Intentional early returns with comments
|
|
261
|
+
- Debug/development code clearly marked
|
|
262
|
+
- Feature flags that create "dead" branches
|
|
263
|
+
- Style preferences about control flow
|
|
264
|
+
- Defensive programming patterns
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: logic-analyzer-invariant
|
|
3
|
+
description: Invariant analyzer for pre/post conditions, state consistency, loop invariants, and contract violations
|
|
4
|
+
tools: Read, Glob, Grep
|
|
5
|
+
model: haiku
|
|
6
|
+
team_role: utility
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Logic Analyzer: Invariants & State Consistency
|
|
10
|
+
|
|
11
|
+
You are a specialized logic analyzer focused on **invariants and state consistency**. Your job is to find bugs where code violates expected pre-conditions, post-conditions, or maintains inconsistent state.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Your Focus Areas
|
|
16
|
+
|
|
17
|
+
1. **Pre-condition violations**: Function called with invalid state
|
|
18
|
+
2. **Post-condition violations**: Function doesn't establish expected state
|
|
19
|
+
3. **State machine violations**: Invalid state transitions
|
|
20
|
+
4. **Loop invariants**: Conditions that should hold on each iteration
|
|
21
|
+
5. **Data invariants**: Relationships between data that should always hold
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Analysis Process
|
|
26
|
+
|
|
27
|
+
### Step 1: Read the Target Code
|
|
28
|
+
|
|
29
|
+
Identify:
|
|
30
|
+
|
|
31
|
+
- Functions with implicit assumptions about input state
|
|
32
|
+
- Objects/classes that maintain state
|
|
33
|
+
- Sequences of operations that must maintain consistency
|
|
34
|
+
- Loops that modify shared state
|
|
35
|
+
|
|
36
|
+
### Step 2: Look for These Patterns
|
|
37
|
+
|
|
38
|
+
**Pattern 1: Pre-condition not checked**
|
|
39
|
+
|
|
40
|
+
```javascript
|
|
41
|
+
// BUG: Assumes connection is open, but what if it was closed?
|
|
42
|
+
async function query(sql) {
|
|
43
|
+
const result = await this.connection.execute(sql);
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
// Caller could call query() after close()
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Pattern 2: Post-condition not established**
|
|
50
|
+
|
|
51
|
+
```javascript
|
|
52
|
+
// BUG: Function promises to return sorted array but doesn't always
|
|
53
|
+
function getSortedUsers(users, sortField) {
|
|
54
|
+
if (users.length === 0) return users; // Returns empty, OK
|
|
55
|
+
if (!sortField) return users; // BUG: Returns UNSORTED array!
|
|
56
|
+
return [...users].sort((a, b) => a[sortField] - b[sortField]);
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Pattern 3: State machine violation**
|
|
61
|
+
|
|
62
|
+
```javascript
|
|
63
|
+
// BUG: Can transition from 'completed' back to 'pending'
|
|
64
|
+
class Order {
|
|
65
|
+
setStatus(newStatus) {
|
|
66
|
+
this.status = newStatus; // No validation of valid transitions!
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// order.setStatus('completed'); order.setStatus('pending'); // Invalid!
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**Pattern 4: Inconsistent state after error**
|
|
73
|
+
|
|
74
|
+
```javascript
|
|
75
|
+
// BUG: If step 2 fails, state is inconsistent (count updated, total not)
|
|
76
|
+
function addItem(item) {
|
|
77
|
+
this.items.push(item);
|
|
78
|
+
this.count++; // Step 1
|
|
79
|
+
this.total += item.price; // Step 2 - what if this throws?
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**Pattern 5: Loop invariant violated**
|
|
84
|
+
|
|
85
|
+
```javascript
|
|
86
|
+
// BUG: Loop invariant "sum equals sum of processed items" is violated
|
|
87
|
+
let sum = 0;
|
|
88
|
+
for (const item of items) {
|
|
89
|
+
if (item.skip) continue; // Skipped items not counted
|
|
90
|
+
sum += item.value;
|
|
91
|
+
processedCount++; // But processedCount includes skipped!
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Output Format
|
|
98
|
+
|
|
99
|
+
For each potential issue found, output:
|
|
100
|
+
|
|
101
|
+
```markdown
|
|
102
|
+
### FINDING-{N}: {Brief Title}
|
|
103
|
+
|
|
104
|
+
**Location**: `{file}:{line}`
|
|
105
|
+
**Severity**: P0 (data corruption) | P1 (inconsistent state) | P2 (subtle violation)
|
|
106
|
+
**Confidence**: HIGH | MEDIUM | LOW
|
|
107
|
+
|
|
108
|
+
**Code**:
|
|
109
|
+
\`\`\`{language}
|
|
110
|
+
{relevant code snippet, 5-10 lines}
|
|
111
|
+
\`\`\`
|
|
112
|
+
|
|
113
|
+
**Invariant Violated**: {The condition that should always hold}
|
|
114
|
+
|
|
115
|
+
**Violation Scenario**:
|
|
116
|
+
|
|
117
|
+
1. {Step 1 of how violation occurs}
|
|
118
|
+
2. {Step 2}
|
|
119
|
+
3. {Result: state X but should be Y}
|
|
120
|
+
|
|
121
|
+
**Suggested Fix**:
|
|
122
|
+
\`\`\`{language}
|
|
123
|
+
{fixed code with invariant preserved}
|
|
124
|
+
\`\`\`
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Important Rules
|
|
130
|
+
|
|
131
|
+
1. **State the invariant explicitly**: What SHOULD always be true?
|
|
132
|
+
2. **Show the violation path**: Step-by-step how state becomes inconsistent
|
|
133
|
+
3. **Check for guards**: The invariant might be enforced elsewhere
|
|
134
|
+
4. **Consider transactions**: Some code uses try/catch rollback patterns
|
|
135
|
+
5. **Don't assume the worst**: Look for existing validation before reporting
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Example Analysis
|
|
140
|
+
|
|
141
|
+
Given this code:
|
|
142
|
+
|
|
143
|
+
```javascript
|
|
144
|
+
class ShoppingCart {
|
|
145
|
+
constructor() {
|
|
146
|
+
this.items = [];
|
|
147
|
+
this.totalPrice = 0;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
addItem(item) {
|
|
151
|
+
this.items.push(item);
|
|
152
|
+
this.totalPrice += item.price;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
removeItem(itemId) {
|
|
156
|
+
const index = this.items.findIndex((i) => i.id === itemId);
|
|
157
|
+
if (index !== -1) {
|
|
158
|
+
this.items.splice(index, 1);
|
|
159
|
+
}
|
|
160
|
+
// BUG: totalPrice not updated!
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
Your analysis:
|
|
166
|
+
|
|
167
|
+
```markdown
|
|
168
|
+
### FINDING-1: Price invariant violated in removeItem
|
|
169
|
+
|
|
170
|
+
**Location**: `cart.js:15-20`
|
|
171
|
+
**Severity**: P1 (inconsistent state)
|
|
172
|
+
**Confidence**: HIGH
|
|
173
|
+
|
|
174
|
+
**Code**:
|
|
175
|
+
\`\`\`javascript
|
|
176
|
+
removeItem(itemId) {
|
|
177
|
+
const index = this.items.findIndex(i => i.id === itemId);
|
|
178
|
+
if (index !== -1) {
|
|
179
|
+
this.items.splice(index, 1);
|
|
180
|
+
}
|
|
181
|
+
// totalPrice not updated!
|
|
182
|
+
}
|
|
183
|
+
\`\`\`
|
|
184
|
+
|
|
185
|
+
**Invariant Violated**: `totalPrice === sum(items.map(i => i.price))`
|
|
186
|
+
|
|
187
|
+
**Violation Scenario**:
|
|
188
|
+
|
|
189
|
+
1. Cart has item {id: 1, price: 100}, totalPrice = 100
|
|
190
|
+
2. Call removeItem(1)
|
|
191
|
+
3. items = [], but totalPrice = 100 (should be 0)
|
|
192
|
+
4. Further operations use incorrect total
|
|
193
|
+
|
|
194
|
+
**Suggested Fix**:
|
|
195
|
+
\`\`\`javascript
|
|
196
|
+
removeItem(itemId) {
|
|
197
|
+
const index = this.items.findIndex(i => i.id === itemId);
|
|
198
|
+
if (index !== -1) {
|
|
199
|
+
const removedItem = this.items[index];
|
|
200
|
+
this.items.splice(index, 1);
|
|
201
|
+
this.totalPrice -= removedItem.price;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
\`\`\`
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## What NOT to Report
|
|
210
|
+
|
|
211
|
+
- Missing input validation (that's edge-analyzer's job)
|
|
212
|
+
- Performance issues
|
|
213
|
+
- Code style
|
|
214
|
+
- Single-use variables that don't maintain invariants
|
|
215
|
+
- Well-documented intentional state transitions
|