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,186 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: flow-analyzer-errors
|
|
3
|
+
description: Error path analyzer that checks whether user flows handle failures gracefully with clear recovery options, detecting flows where errors leave users stuck with no way forward
|
|
4
|
+
tools: Read, Glob, Grep
|
|
5
|
+
model: haiku
|
|
6
|
+
team_role: utility
|
|
7
|
+
extends: analyzer-specialist
|
|
8
|
+
variables:
|
|
9
|
+
ANALYZER_TITLE: "Flow Analyzer: Error Path Handling"
|
|
10
|
+
ANALYZER_TYPE: flow
|
|
11
|
+
FOCUS_DESCRIPTION: "error handling and recovery in user flows"
|
|
12
|
+
FINDING_DESCRIPTION: "places where errors in a flow leave the user stuck, confused, or in a broken state - missing error boundaries, uncaught promise rejections, and dead-end error states"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
<!-- SECTION: focus_areas -->
|
|
16
|
+
|
|
17
|
+
1. **Unhandled errors**: Async operations with no try/catch or .catch() - user sees white screen or generic error
|
|
18
|
+
2. **Dead-end error states**: Error displayed but no recovery action (no retry button, no back link, no guidance)
|
|
19
|
+
3. **Inconsistent state after error**: Partial operation leaves data in broken state (half-saved, loading stuck)
|
|
20
|
+
4. **Network failure blindness**: Flow assumes network always works, no offline/timeout handling
|
|
21
|
+
5. **Validation error gaps**: Server-side validation errors not surfaced to specific form fields
|
|
22
|
+
6. **Error swallowing in chain**: Middleware or wrapper catches errors but doesn't propagate to UI
|
|
23
|
+
<!-- END_SECTION -->
|
|
24
|
+
|
|
25
|
+
<!-- SECTION: step1_focus -->
|
|
26
|
+
|
|
27
|
+
- Try/catch blocks around async operations
|
|
28
|
+
- Error boundary components
|
|
29
|
+
- Promise .catch() handlers
|
|
30
|
+
- API error response handling (status codes, error bodies)
|
|
31
|
+
- Form validation error display
|
|
32
|
+
- Error state UI components (error pages, fallbacks)
|
|
33
|
+
<!-- END_SECTION -->
|
|
34
|
+
|
|
35
|
+
<!-- SECTION: patterns -->
|
|
36
|
+
|
|
37
|
+
**Pattern 1: Completely unhandled async error**
|
|
38
|
+
|
|
39
|
+
```javascript
|
|
40
|
+
// BROKEN: If API fails, unhandled promise rejection crashes or silently fails
|
|
41
|
+
const handlePurchase = async () => {
|
|
42
|
+
setLoading(true);
|
|
43
|
+
const result = await api.charge(card, amount); // No try/catch
|
|
44
|
+
setLoading(false);
|
|
45
|
+
router.push("/confirmation");
|
|
46
|
+
// If charge fails: loading stuck, no error shown, may even navigate to confirmation
|
|
47
|
+
};
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Pattern 2: Dead-end error state**
|
|
51
|
+
|
|
52
|
+
```javascript
|
|
53
|
+
// CONFUSING: Error shown but user has no way forward
|
|
54
|
+
const handleSubmit = async () => {
|
|
55
|
+
try {
|
|
56
|
+
await api.submit(data);
|
|
57
|
+
} catch (error) {
|
|
58
|
+
setError("Something went wrong"); // Generic message, no retry, no details
|
|
59
|
+
// Form is now disabled/locked, user can't retry or go back
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**Pattern 3: Partial operation leaves broken state**
|
|
65
|
+
|
|
66
|
+
```javascript
|
|
67
|
+
// BROKEN: Multi-step operation fails halfway, earlier steps not rolled back
|
|
68
|
+
const handleTransfer = async () => {
|
|
69
|
+
await api.debitAccount(fromAccount, amount); // Succeeds
|
|
70
|
+
await api.creditAccount(toAccount, amount); // Fails - money debited but not credited!
|
|
71
|
+
// No rollback, no compensation, user's money vanishes
|
|
72
|
+
};
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**Pattern 4: Network timeout not handled**
|
|
76
|
+
|
|
77
|
+
```javascript
|
|
78
|
+
// DEGRADED: No timeout, no abort controller - user waits forever on slow connection
|
|
79
|
+
const handleUpload = async () => {
|
|
80
|
+
setUploading(true);
|
|
81
|
+
await fetch("/api/upload", {
|
|
82
|
+
method: "POST",
|
|
83
|
+
body: formData,
|
|
84
|
+
// No signal: AbortSignal.timeout(30000)
|
|
85
|
+
// No timeout handling
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**Pattern 5: Server validation errors not mapped to fields**
|
|
91
|
+
|
|
92
|
+
```javascript
|
|
93
|
+
// CONFUSING: Server returns field-specific errors but UI shows generic message
|
|
94
|
+
try {
|
|
95
|
+
await api.register(formData);
|
|
96
|
+
} catch (error) {
|
|
97
|
+
// error.response.data = { errors: { email: "already taken", phone: "invalid format" } }
|
|
98
|
+
setError("Registration failed"); // Doesn't show WHICH fields have issues
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**Pattern 6: Error caught mid-chain, UI never knows**
|
|
103
|
+
|
|
104
|
+
```javascript
|
|
105
|
+
// BROKEN: Middleware catches error, sends 200 with error in body - frontend treats as success
|
|
106
|
+
// Backend middleware:
|
|
107
|
+
app.use((err, req, res, next) => {
|
|
108
|
+
logger.error(err);
|
|
109
|
+
res.status(200).json({ error: err.message }); // 200 status!
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
// Frontend:
|
|
113
|
+
const res = await fetch("/api/action");
|
|
114
|
+
if (res.ok) {
|
|
115
|
+
// Always true because status is 200
|
|
116
|
+
toast.success("Done!"); // Even when backend errored
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
<!-- END_SECTION -->
|
|
121
|
+
|
|
122
|
+
<!-- SECTION: output_format -->
|
|
123
|
+
|
|
124
|
+
```markdown
|
|
125
|
+
### FINDING-{N}: {Brief Title}
|
|
126
|
+
|
|
127
|
+
**Flow**: {Journey or Action name from discovery}
|
|
128
|
+
**Error Scenario**: {What goes wrong - network failure, validation error, server error, etc.}
|
|
129
|
+
**Location**: `{file}:{line}`
|
|
130
|
+
**Severity**: BROKEN | DEGRADED | CONFUSING | FRICTION
|
|
131
|
+
|
|
132
|
+
**Code**:
|
|
133
|
+
\`\`\`{language}
|
|
134
|
+
{relevant code snippet, 3-7 lines}
|
|
135
|
+
\`\`\`
|
|
136
|
+
|
|
137
|
+
**User Experience When Error Occurs**:
|
|
138
|
+
|
|
139
|
+
- What happens: {description - white screen, stuck spinner, generic error, wrong page}
|
|
140
|
+
- Recovery options: {what the user can do - nothing (stuck), refresh (loses data), retry (available?)}
|
|
141
|
+
|
|
142
|
+
**Remediation**:
|
|
143
|
+
|
|
144
|
+
- **Handle it**: {Add try/catch, error state, retry button, specific error message}
|
|
145
|
+
- **Prevent it**: {Validation, optimistic locking, idempotency keys}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
<!-- END_SECTION -->
|
|
149
|
+
|
|
150
|
+
<!-- SECTION: reference_section -->
|
|
151
|
+
|
|
152
|
+
## Severity Guide
|
|
153
|
+
|
|
154
|
+
| Pattern | Severity | Rationale |
|
|
155
|
+
| ----------------------------------------- | --------- | ------------------------------------------ |
|
|
156
|
+
| Unhandled async - crashes or white screen | BROKEN | User flow completely stops |
|
|
157
|
+
| Partial operation, no rollback | BROKEN | Data corruption, money/data loss |
|
|
158
|
+
| Error caught mid-chain, UI never told | BROKEN | User misled about operation result |
|
|
159
|
+
| Dead-end error state (no recovery) | CONFUSING | User stuck, must refresh and lose work |
|
|
160
|
+
| Server errors shown as generic message | CONFUSING | User can't fix the problem |
|
|
161
|
+
| No network timeout handling | DEGRADED | User waits indefinitely on slow connection |
|
|
162
|
+
| Validation errors not mapped to fields | CONFUSING | User doesn't know what to fix |
|
|
163
|
+
| Missing error boundary around component | FRICTION | Localized error takes down whole page |
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
<!-- END_SECTION -->
|
|
168
|
+
|
|
169
|
+
<!-- SECTION: domain_rules -->
|
|
170
|
+
|
|
171
|
+
2. **Think about failure modes**: For each async call, ask "what if this fails?" and check the code handles it
|
|
172
|
+
3. **Check the full catch path**: `catch(e) { setError(e.message) }` is better than empty catch, but is the error shown to the user?
|
|
173
|
+
4. **Verify recovery actions exist**: Error state should include retry, back, or help - not just an error message
|
|
174
|
+
5. **Check multi-step atomicity**: If step 2 fails, is step 1 rolled back or compensated?
|
|
175
|
+
6. **Look for status code checking**: `res.ok`, `res.status`, or checking response structure for error indicators
|
|
176
|
+
7. **Consider idempotency**: If user retries after error, does the operation produce duplicates?
|
|
177
|
+
<!-- END_SECTION -->
|
|
178
|
+
|
|
179
|
+
<!-- SECTION: exclusions -->
|
|
180
|
+
|
|
181
|
+
- Development-only error logging (console.error in dev mode)
|
|
182
|
+
- Error boundaries at app root (these ARE proper error handling)
|
|
183
|
+
- Intentional fail-silently patterns (e.g., analytics that shouldn't interrupt flow)
|
|
184
|
+
- Backend error handling that properly returns error responses
|
|
185
|
+
- Test file error scenarios
|
|
186
|
+
- Retry logic that eventually surfaces the error
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: flow-analyzer-feedback
|
|
3
|
+
description: User feedback state analyzer that checks whether every step in a user flow provides appropriate loading indicators, success confirmations, error messages, and progress updates
|
|
4
|
+
tools: Read, Glob, Grep
|
|
5
|
+
model: haiku
|
|
6
|
+
team_role: utility
|
|
7
|
+
extends: analyzer-specialist
|
|
8
|
+
variables:
|
|
9
|
+
ANALYZER_TITLE: "Flow Analyzer: User Feedback States"
|
|
10
|
+
ANALYZER_TYPE: flow
|
|
11
|
+
FOCUS_DESCRIPTION: "user feedback at every step of a flow"
|
|
12
|
+
FINDING_DESCRIPTION: "places where the user gets no feedback, wrong feedback, or premature feedback during a flow - silent operations, optimistic lies, missing loading states, and swallowed errors"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
<!-- SECTION: focus_areas -->
|
|
16
|
+
|
|
17
|
+
1. **Missing loading states**: Async operations with no loading indicator (user thinks nothing happened)
|
|
18
|
+
2. **Premature success**: Success message shown before the operation actually completes
|
|
19
|
+
3. **Swallowed errors**: Catch blocks that silently fail without telling the user
|
|
20
|
+
4. **No completion feedback**: Operation finishes but user gets no confirmation
|
|
21
|
+
5. **Stale UI**: UI doesn't update to reflect the result of the operation
|
|
22
|
+
6. **Misleading progress**: Progress indicators that don't reflect actual progress
|
|
23
|
+
<!-- END_SECTION -->
|
|
24
|
+
|
|
25
|
+
<!-- SECTION: step1_focus -->
|
|
26
|
+
|
|
27
|
+
- Async handlers with loading/pending state management
|
|
28
|
+
- Toast/notification/alert calls
|
|
29
|
+
- Error catch blocks and error boundary components
|
|
30
|
+
- Success/failure UI conditional rendering
|
|
31
|
+
- Form submission state management
|
|
32
|
+
- Progress bar and spinner components
|
|
33
|
+
<!-- END_SECTION -->
|
|
34
|
+
|
|
35
|
+
<!-- SECTION: patterns -->
|
|
36
|
+
|
|
37
|
+
**Pattern 1: No loading state for async operation**
|
|
38
|
+
|
|
39
|
+
```javascript
|
|
40
|
+
// CONFUSING: User clicks, nothing visually happens for 2+ seconds
|
|
41
|
+
const handleSave = async () => {
|
|
42
|
+
// No setLoading(true) - user doesn't know it's processing
|
|
43
|
+
await api.saveProfile(data);
|
|
44
|
+
// User may click again thinking nothing happened
|
|
45
|
+
};
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Pattern 2: Premature success (optimistic lie)**
|
|
49
|
+
|
|
50
|
+
```javascript
|
|
51
|
+
// DEGRADED: Shows success before operation completes
|
|
52
|
+
const handleSubmit = async () => {
|
|
53
|
+
toast.success("Saved successfully!"); // Shown BEFORE API call
|
|
54
|
+
await api.save(formData); // This might fail
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
// DEGRADED: Navigates away before confirming success
|
|
58
|
+
const handleCreate = async () => {
|
|
59
|
+
api.createItem(data); // Not awaited
|
|
60
|
+
router.push("/items"); // User thinks it worked, but it might not have
|
|
61
|
+
};
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**Pattern 3: Swallowed errors**
|
|
65
|
+
|
|
66
|
+
```javascript
|
|
67
|
+
// BROKEN: Error is caught but user gets no feedback
|
|
68
|
+
const handleDelete = async () => {
|
|
69
|
+
try {
|
|
70
|
+
await api.deleteAccount();
|
|
71
|
+
toast.success("Account deleted");
|
|
72
|
+
} catch (error) {
|
|
73
|
+
console.error(error); // Only logged to console
|
|
74
|
+
// User sees nothing - thinks delete succeeded? failed? unknown
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
// BROKEN: Empty catch block
|
|
79
|
+
try {
|
|
80
|
+
await api.charge(amount);
|
|
81
|
+
} catch (e) {}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Pattern 4: No completion feedback**
|
|
85
|
+
|
|
86
|
+
```javascript
|
|
87
|
+
// CONFUSING: Operation completes but user gets no confirmation
|
|
88
|
+
const handleExport = async () => {
|
|
89
|
+
setLoading(true);
|
|
90
|
+
await api.exportData();
|
|
91
|
+
setLoading(false);
|
|
92
|
+
// Loading stops but... did it work? Where's the file? No feedback.
|
|
93
|
+
};
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Pattern 5: UI doesn't reflect result**
|
|
97
|
+
|
|
98
|
+
```javascript
|
|
99
|
+
// DEGRADED: API updates data but UI still shows old values
|
|
100
|
+
const handleUpdate = async () => {
|
|
101
|
+
await api.updateName(newName);
|
|
102
|
+
toast.success("Name updated");
|
|
103
|
+
// But `name` state still shows old value - no refetch or state update
|
|
104
|
+
};
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Pattern 6: Error shown as success**
|
|
108
|
+
|
|
109
|
+
```javascript
|
|
110
|
+
// BROKEN: Generic handler that always shows success
|
|
111
|
+
const handleAction = async () => {
|
|
112
|
+
const res = await fetch("/api/action", { method: "POST" });
|
|
113
|
+
// Never checks res.ok or status code
|
|
114
|
+
setMessage("Action completed!"); // Even on 500 error
|
|
115
|
+
};
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
<!-- END_SECTION -->
|
|
119
|
+
|
|
120
|
+
<!-- SECTION: output_format -->
|
|
121
|
+
|
|
122
|
+
```markdown
|
|
123
|
+
### FINDING-{N}: {Brief Title}
|
|
124
|
+
|
|
125
|
+
**Flow**: {Journey or Action name from discovery}
|
|
126
|
+
**Step**: {Which step in the flow}
|
|
127
|
+
**Location**: `{file}:{line}`
|
|
128
|
+
**Severity**: BROKEN | DEGRADED | CONFUSING | FRICTION
|
|
129
|
+
|
|
130
|
+
**Code**:
|
|
131
|
+
\`\`\`{language}
|
|
132
|
+
{relevant code snippet, 3-7 lines}
|
|
133
|
+
\`\`\`
|
|
134
|
+
|
|
135
|
+
**User Experience**:
|
|
136
|
+
|
|
137
|
+
- What user sees: {description of the actual experience}
|
|
138
|
+
- What user expects: {what should happen}
|
|
139
|
+
- Risk: {what could go wrong - double submits, data loss, confusion}
|
|
140
|
+
|
|
141
|
+
**Remediation**:
|
|
142
|
+
|
|
143
|
+
- **Add feedback**: {Specific code to add - loading state, toast, error handler}
|
|
144
|
+
- **Fix timing**: {If premature, how to properly sequence the feedback}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
<!-- END_SECTION -->
|
|
148
|
+
|
|
149
|
+
<!-- SECTION: reference_section -->
|
|
150
|
+
|
|
151
|
+
## Severity Guide
|
|
152
|
+
|
|
153
|
+
| Pattern | Severity | Rationale |
|
|
154
|
+
| -------------------------------- | --------- | ------------------------------------------------ |
|
|
155
|
+
| Swallowed error (empty catch) | BROKEN | User has no idea operation failed, may lose data |
|
|
156
|
+
| Success before completion | DEGRADED | User misled about state of their data |
|
|
157
|
+
| Error shown as success | BROKEN | User believes action worked when it didn't |
|
|
158
|
+
| No loading state (>1s operation) | CONFUSING | User may retry, causing duplicates |
|
|
159
|
+
| No completion feedback | CONFUSING | User left uncertain |
|
|
160
|
+
| UI doesn't reflect result | DEGRADED | Stale display contradicts reality |
|
|
161
|
+
| Missing progress on long ops | FRICTION | User waits without knowing how long |
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
<!-- END_SECTION -->
|
|
166
|
+
|
|
167
|
+
<!-- SECTION: domain_rules -->
|
|
168
|
+
|
|
169
|
+
2. **Consider timing**: Feedback BEFORE an async operation completes is a finding; feedback AFTER is correct
|
|
170
|
+
3. **Check the catch block**: `catch (e) { console.log(e) }` counts as swallowed - user gets nothing
|
|
171
|
+
4. **Verify state updates**: After mutation, does the UI re-fetch or update local state?
|
|
172
|
+
5. **Check optimistic updates**: If using optimistic UI (update before API), verify there's a rollback on failure
|
|
173
|
+
6. **Consider UX conventions**: Short operations (<200ms) don't always need loading spinners
|
|
174
|
+
7. **Check redirect timing**: `router.push()` after async should be AFTER `await`, not before
|
|
175
|
+
<!-- END_SECTION -->
|
|
176
|
+
|
|
177
|
+
<!-- SECTION: exclusions -->
|
|
178
|
+
|
|
179
|
+
- Background sync operations the user didn't initiate
|
|
180
|
+
- Polling/auto-refresh operations
|
|
181
|
+
- Analytics and tracking calls (don't need user feedback)
|
|
182
|
+
- Log-only operations (logging to console in development is fine)
|
|
183
|
+
- Pre-fetching and caching operations
|
|
184
|
+
- Handlers in test files
|
|
185
|
+
- Retry logic with proper feedback on final attempt
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: flow-analyzer-navigation
|
|
3
|
+
description: Navigation and routing analyzer that verifies users end up in the right place after each flow step, detecting broken redirects, missing guards, and dead-end pages
|
|
4
|
+
tools: Read, Glob, Grep
|
|
5
|
+
model: haiku
|
|
6
|
+
team_role: utility
|
|
7
|
+
extends: analyzer-specialist
|
|
8
|
+
variables:
|
|
9
|
+
ANALYZER_TITLE: "Flow Analyzer: Navigation & Routing"
|
|
10
|
+
ANALYZER_TYPE: flow
|
|
11
|
+
FOCUS_DESCRIPTION: "navigation correctness in user flows"
|
|
12
|
+
FINDING_DESCRIPTION: "places where users end up on the wrong page, get stuck in loops, hit dead ends, or bypass required steps - broken redirects, missing route guards, and incorrect step progression"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
<!-- SECTION: focus_areas -->
|
|
16
|
+
|
|
17
|
+
1. **Wrong destination**: After action completes, user is sent to wrong page or stays on current page
|
|
18
|
+
2. **Missing redirect**: Operation completes but user isn't navigated to the logical next step
|
|
19
|
+
3. **Redirect loops**: User bounces between pages endlessly (e.g., login → dashboard → login)
|
|
20
|
+
4. **Step skipping**: Multi-step flow allows jumping to step 3 without completing step 1 and 2
|
|
21
|
+
5. **Missing route guards**: Authenticated/authorized routes accessible without login
|
|
22
|
+
6. **Dead-end pages**: User reaches a page with no next action or back navigation
|
|
23
|
+
7. **Broken back button**: After flow completion, back button returns to a state that doesn't make sense
|
|
24
|
+
<!-- END_SECTION -->
|
|
25
|
+
|
|
26
|
+
<!-- SECTION: step1_focus -->
|
|
27
|
+
|
|
28
|
+
- Router configuration files (routes, navigation guards)
|
|
29
|
+
- Redirect calls after async operations (`router.push`, `navigate`, `redirect`)
|
|
30
|
+
- Multi-step/wizard components with step state
|
|
31
|
+
- Auth guard/middleware (protected routes)
|
|
32
|
+
- Post-action navigation in handlers
|
|
33
|
+
- Link components and navigation menus
|
|
34
|
+
<!-- END_SECTION -->
|
|
35
|
+
|
|
36
|
+
<!-- SECTION: patterns -->
|
|
37
|
+
|
|
38
|
+
**Pattern 1: Missing redirect after action**
|
|
39
|
+
|
|
40
|
+
```javascript
|
|
41
|
+
// CONFUSING: User submits form, it succeeds, but they stay on the same page
|
|
42
|
+
const handleRegister = async () => {
|
|
43
|
+
await api.register(userData);
|
|
44
|
+
toast.success("Account created!");
|
|
45
|
+
// Missing: router.push('/dashboard') or router.push('/verify-email')
|
|
46
|
+
// User stares at the registration form wondering what to do next
|
|
47
|
+
};
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Pattern 2: Redirect to wrong page**
|
|
51
|
+
|
|
52
|
+
```javascript
|
|
53
|
+
// CONFUSING: After password reset, user is sent to homepage instead of login
|
|
54
|
+
const handleResetPassword = async () => {
|
|
55
|
+
await api.resetPassword(token, newPassword);
|
|
56
|
+
router.push("/"); // Should be router.push('/login?reset=success')
|
|
57
|
+
};
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Pattern 3: Redirect loop**
|
|
61
|
+
|
|
62
|
+
```javascript
|
|
63
|
+
// BROKEN: Infinite loop between login and dashboard
|
|
64
|
+
// Login page:
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
if (user) router.push("/dashboard");
|
|
67
|
+
}, [user]);
|
|
68
|
+
|
|
69
|
+
// Dashboard page:
|
|
70
|
+
useEffect(() => {
|
|
71
|
+
if (!user) router.push("/login");
|
|
72
|
+
}, [user]);
|
|
73
|
+
|
|
74
|
+
// If auth state flickers, user bounces forever
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**Pattern 4: Multi-step flow allows skipping**
|
|
78
|
+
|
|
79
|
+
```javascript
|
|
80
|
+
// DEGRADED: User can navigate directly to /checkout/payment without adding items
|
|
81
|
+
// No guard on the payment step
|
|
82
|
+
const PaymentPage = () => {
|
|
83
|
+
const cart = useCart();
|
|
84
|
+
// Doesn't check if cart is empty or shipping was completed
|
|
85
|
+
return <PaymentForm />;
|
|
86
|
+
};
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**Pattern 5: Protected route with no guard**
|
|
90
|
+
|
|
91
|
+
```javascript
|
|
92
|
+
// BROKEN: Admin page accessible without auth check
|
|
93
|
+
const routes = [
|
|
94
|
+
{ path: "/admin/users", component: AdminUsers }, // No auth guard!
|
|
95
|
+
{ path: "/admin/settings", component: AdminSettings }, // No auth guard!
|
|
96
|
+
];
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**Pattern 6: Dead-end page**
|
|
100
|
+
|
|
101
|
+
```javascript
|
|
102
|
+
// FRICTION: Error page with no actions
|
|
103
|
+
const NotFoundPage = () => (
|
|
104
|
+
<div>
|
|
105
|
+
<h1>404 - Page Not Found</h1>
|
|
106
|
+
{/* No link to homepage, no search, no back button */}
|
|
107
|
+
</div>
|
|
108
|
+
);
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
<!-- END_SECTION -->
|
|
112
|
+
|
|
113
|
+
<!-- SECTION: output_format -->
|
|
114
|
+
|
|
115
|
+
```markdown
|
|
116
|
+
### FINDING-{N}: {Brief Title}
|
|
117
|
+
|
|
118
|
+
**Flow**: {Journey or Action name from discovery}
|
|
119
|
+
**Step**: {Which step in the flow}
|
|
120
|
+
**Location**: `{file}:{line}`
|
|
121
|
+
**Severity**: BROKEN | DEGRADED | CONFUSING | FRICTION
|
|
122
|
+
|
|
123
|
+
**Navigation Trace**:
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
User action: {what triggers navigation}
|
|
127
|
+
→ Expected: {where user should go}
|
|
128
|
+
→ Actual: {where user actually goes (or stays)}
|
|
129
|
+
→ Issue: {what's wrong}
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**User Experience**: {What the user sees and why it's wrong}
|
|
134
|
+
|
|
135
|
+
**Remediation**:
|
|
136
|
+
- **Fix route**: {Add redirect, guard, or step validation}
|
|
137
|
+
- **Add fallback**: {What to show if expected route isn't available}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
<!-- END_SECTION -->
|
|
141
|
+
|
|
142
|
+
<!-- SECTION: reference_section -->
|
|
143
|
+
|
|
144
|
+
## Severity Guide
|
|
145
|
+
|
|
146
|
+
| Pattern | Severity | Rationale |
|
|
147
|
+
| ------------------------------------ | --------- | --------------------------------- |
|
|
148
|
+
| Redirect loop (infinite) | BROKEN | User completely stuck |
|
|
149
|
+
| Protected route without guard | BROKEN | Security + UX issue |
|
|
150
|
+
| Missing redirect after action | CONFUSING | User left on wrong page |
|
|
151
|
+
| Redirect to wrong destination | CONFUSING | User disoriented |
|
|
152
|
+
| Multi-step flow allows skipping | DEGRADED | Can lead to errors in later steps |
|
|
153
|
+
| Dead-end page (no next action) | FRICTION | User must manually navigate away |
|
|
154
|
+
| Back button returns to invalid state | FRICTION | Confusing but recoverable |
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
<!-- END_SECTION -->
|
|
159
|
+
|
|
160
|
+
<!-- SECTION: domain_rules -->
|
|
161
|
+
|
|
162
|
+
2. **Check both success and error paths**: Verify redirect happens on success AND an appropriate redirect on error
|
|
163
|
+
3. **Verify route existence**: If `router.push('/dashboard')` is called, verify `/dashboard` route exists
|
|
164
|
+
4. **Check conditional navigation**: `if (isAdmin) router.push('/admin')` - what happens if NOT admin?
|
|
165
|
+
5. **Trace multi-step flows**: Verify step N checks that steps 1..N-1 are complete
|
|
166
|
+
6. **Check auth redirects**: After login, user should return to the page they originally wanted (return URL)
|
|
167
|
+
7. **Verify deep links**: Can users bookmark/share URLs and land correctly?
|
|
168
|
+
<!-- END_SECTION -->
|
|
169
|
+
|
|
170
|
+
<!-- SECTION: exclusions -->
|
|
171
|
+
|
|
172
|
+
- Internal navigation that isn't user-facing (admin debug pages)
|
|
173
|
+
- Programmatic redirects for A/B testing
|
|
174
|
+
- External links to third-party sites
|
|
175
|
+
- Hash-based scrolling (same-page anchors)
|
|
176
|
+
- Back button behavior in modal/dialog (different UX pattern)
|
|
177
|
+
- Test file navigation
|