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,226 @@
|
|
|
1
|
+
# Workflow: Extract Module
|
|
2
|
+
|
|
3
|
+
**Triggers:** "extract this to its own file", "this class is too big", "make this reusable", "this code belongs in a shared utility", user identifies a function or class that should live somewhere else
|
|
4
|
+
|
|
5
|
+
**Goal:** Extract a cohesive set of functions or a class from a large file into its own well-named module, with correct imports updated across all callers.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## When to extract a module
|
|
10
|
+
|
|
11
|
+
| Signal | Extraction candidate |
|
|
12
|
+
| -------------------------------------------------------- | --------------------------------------------------- |
|
|
13
|
+
| A class handles multiple concerns | Split by responsibility (see Extract Class pattern) |
|
|
14
|
+
| A utility function is duplicated across files | Extract to `utils/` or `lib/` |
|
|
15
|
+
| A domain concept is embedded in infrastructure code | Extract domain object |
|
|
16
|
+
| A file is > 300 lines | Candidate for splitting |
|
|
17
|
+
| Other files are copying the same logic | Extract shared module |
|
|
18
|
+
| A function group doesn't depend on the class it lives in | Extract to standalone module |
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Inputs needed
|
|
23
|
+
|
|
24
|
+
| Input | Required | How to get it |
|
|
25
|
+
| --------------- | -------- | ----------------------------------------------- |
|
|
26
|
+
| Source file | Yes | File path |
|
|
27
|
+
| What to extract | Yes | Function names, class section, or "the X logic" |
|
|
28
|
+
| Target location | No | I'll suggest based on project conventions |
|
|
29
|
+
| Existing tests | Check | Find adjacent test file |
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Steps
|
|
34
|
+
|
|
35
|
+
### Step 1: Understand the current dependencies
|
|
36
|
+
|
|
37
|
+
Before extracting, map what the candidate code depends on:
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
What will move:
|
|
41
|
+
- calculateOrderTotal(order)
|
|
42
|
+
- applyDiscount(subtotal, couponCode)
|
|
43
|
+
- TAX_RATE constant
|
|
44
|
+
|
|
45
|
+
What it depends on:
|
|
46
|
+
- Coupon model (from '../models/coupon')
|
|
47
|
+
- formatCurrency() utility (from '../utils/format')
|
|
48
|
+
- Logger (from '../lib/logger')
|
|
49
|
+
|
|
50
|
+
What depends on it (callers in the current file):
|
|
51
|
+
- processOrder() calls calculateOrderTotal()
|
|
52
|
+
|
|
53
|
+
Other callers (outside the current file):
|
|
54
|
+
- grep -r "calculateOrderTotal" → none (only internal)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
This map becomes the new module's import list.
|
|
58
|
+
|
|
59
|
+
### Step 2: Determine the target location
|
|
60
|
+
|
|
61
|
+
Follow the project's existing conventions:
|
|
62
|
+
|
|
63
|
+
| What you're extracting | Likely destination |
|
|
64
|
+
| -------------------------------------- | -------------------------------------- |
|
|
65
|
+
| General utility function | `src/utils/` |
|
|
66
|
+
| Domain logic (pricing, shipping, etc.) | `src/domain/` or `src/lib/` |
|
|
67
|
+
| Data access / query | `src/repositories/` |
|
|
68
|
+
| External service adapter | `src/integrations/` or `src/adapters/` |
|
|
69
|
+
| Type definitions | `src/types/` |
|
|
70
|
+
| Configuration | `src/config/` |
|
|
71
|
+
|
|
72
|
+
If the project doesn't have clear conventions, use the location closest to where the extracted code is most heavily used.
|
|
73
|
+
|
|
74
|
+
### Step 3: Write the new module file
|
|
75
|
+
|
|
76
|
+
1. Create the new file at the target path
|
|
77
|
+
2. Copy (don't yet delete) the code from the source
|
|
78
|
+
3. Add the necessary imports the code needs
|
|
79
|
+
4. Export everything that callers will need
|
|
80
|
+
|
|
81
|
+
```js
|
|
82
|
+
// src/pricing/order-total.js (extracted from src/services/order-service.js)
|
|
83
|
+
|
|
84
|
+
import { Coupon } from "../models/coupon.js";
|
|
85
|
+
import { logger } from "../lib/logger.js";
|
|
86
|
+
|
|
87
|
+
export const TAX_RATE = 0.1;
|
|
88
|
+
|
|
89
|
+
export async function calculateOrderTotal(order) {
|
|
90
|
+
const subtotal = order.lineItems.reduce(
|
|
91
|
+
(sum, item) => sum + item.price * item.qty,
|
|
92
|
+
0,
|
|
93
|
+
);
|
|
94
|
+
const discounted = await applyDiscount(subtotal, order.couponCode);
|
|
95
|
+
return discounted * (1 + TAX_RATE);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
async function applyDiscount(subtotal, couponCode) {
|
|
99
|
+
if (!couponCode) return subtotal;
|
|
100
|
+
const coupon = await Coupon.findByCode(couponCode);
|
|
101
|
+
if (!coupon || !coupon.isValid) return subtotal;
|
|
102
|
+
return subtotal * (1 - coupon.discountPct / 100);
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Step 4: Update the source file to import from the new module
|
|
107
|
+
|
|
108
|
+
In the original file:
|
|
109
|
+
|
|
110
|
+
```js
|
|
111
|
+
// Before (in src/services/order-service.js):
|
|
112
|
+
// ... calculateOrderTotal and applyDiscount defined here (40 lines) ...
|
|
113
|
+
|
|
114
|
+
// After:
|
|
115
|
+
import { calculateOrderTotal, TAX_RATE } from "../pricing/order-total.js";
|
|
116
|
+
// ... rest of the file unchanged, the function calls work as before ...
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Step 5: Update all other callers
|
|
120
|
+
|
|
121
|
+
Search for all usages of the extracted symbols outside the source file:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
grep -r "calculateOrderTotal" src/
|
|
125
|
+
grep -r "TAX_RATE" src/
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Update each import to point to the new module.
|
|
129
|
+
|
|
130
|
+
### Step 6: Run tests
|
|
131
|
+
|
|
132
|
+
Run the full test suite. All tests should pass without modification — if tests break, the extraction changed observable behaviour (find and fix before continuing).
|
|
133
|
+
|
|
134
|
+
### Step 7: Write or update tests for the new module
|
|
135
|
+
|
|
136
|
+
The extracted module should have its own test file:
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
src/pricing/order-total.js (new module)
|
|
140
|
+
src/pricing/order-total.test.js (new test file)
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
If the original tests covered this code through integration tests, those still pass. But also add direct unit tests for the new module — they're now fast and isolated.
|
|
144
|
+
|
|
145
|
+
### Step 8: Delete the original code
|
|
146
|
+
|
|
147
|
+
Only after:
|
|
148
|
+
|
|
149
|
+
- [ ] New module file created and tested
|
|
150
|
+
- [ ] Source file imports from the new module
|
|
151
|
+
- [ ] All other callers updated
|
|
152
|
+
- [ ] All tests pass
|
|
153
|
+
|
|
154
|
+
Delete (or remove) the original code from the source file.
|
|
155
|
+
|
|
156
|
+
### Step 9: Final verification
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
# No broken imports
|
|
160
|
+
npx tsc --noEmit # TypeScript
|
|
161
|
+
# or
|
|
162
|
+
node --check src/services/order-service.js # Node.js ESM
|
|
163
|
+
|
|
164
|
+
# Tests pass
|
|
165
|
+
npm test
|
|
166
|
+
|
|
167
|
+
# No references to old location remain
|
|
168
|
+
grep -r "calculateOrderTotal" src/ # should all point to new location
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Step 10: Commit
|
|
172
|
+
|
|
173
|
+
Commit in two parts for cleaner history:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
git add src/pricing/order-total.js src/pricing/order-total.test.js
|
|
177
|
+
git commit -m "refactor: extract order total calculation to pricing module"
|
|
178
|
+
|
|
179
|
+
git add src/services/order-service.js src/ # remaining callers
|
|
180
|
+
git commit -m "refactor: update callers to import from pricing/order-total"
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Or a single commit if the change is small:
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
git commit -m "refactor: extract calculateOrderTotal to src/pricing/order-total.js"
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Handling circular dependencies
|
|
192
|
+
|
|
193
|
+
If the extraction would create a circular dependency (A imports B, B imports A):
|
|
194
|
+
|
|
195
|
+
1. **Identify the cycle**: draw the dependency chain
|
|
196
|
+
2. **Extract the shared code** into a third module that neither A nor B imports (the shared dependency)
|
|
197
|
+
3. Both A and B import from the third module
|
|
198
|
+
|
|
199
|
+
```
|
|
200
|
+
Before: service.js ↔ repository.js (circular)
|
|
201
|
+
After: service.js → shared-types.js ← repository.js (no cycle)
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Fallbacks
|
|
207
|
+
|
|
208
|
+
**If AskUserQuestion is unavailable:**
|
|
209
|
+
|
|
210
|
+
After analysis, present as a numbered plan:
|
|
211
|
+
|
|
212
|
+
```
|
|
213
|
+
Extraction plan for calculateOrderTotal from order-service.js:
|
|
214
|
+
|
|
215
|
+
New module: src/pricing/order-total.js
|
|
216
|
+
Exports: calculateOrderTotal(), TAX_RATE
|
|
217
|
+
Callers to update: 1 (only order-service.js uses it)
|
|
218
|
+
|
|
219
|
+
Steps:
|
|
220
|
+
1. Create src/pricing/order-total.js with the extracted code
|
|
221
|
+
2. Update order-service.js to import from the new module
|
|
222
|
+
3. Run tests to confirm behaviour preserved
|
|
223
|
+
4. Write direct unit tests for the new module
|
|
224
|
+
|
|
225
|
+
Reply with "proceed" to apply all steps, or tell me what to change.
|
|
226
|
+
```
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# Workflow: Safe Refactor
|
|
2
|
+
|
|
3
|
+
**Triggers:** "refactor this", "clean this up", "this is too complex", user identifies technical debt or asks to improve code quality
|
|
4
|
+
|
|
5
|
+
**Goal:** Apply a refactoring pattern safely — with tests confirmed, impact analysed, pattern applied, and behaviour verified.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Inputs needed
|
|
10
|
+
|
|
11
|
+
| Input | Required | How to get it |
|
|
12
|
+
| --------------- | --------- | ----------------------------------------------------------- |
|
|
13
|
+
| Target code | Yes | File path or paste the code |
|
|
14
|
+
| Motivation | Preferred | Why does this need refactoring? What problem does it solve? |
|
|
15
|
+
| Existing tests | Check | Search for adjacent test file |
|
|
16
|
+
| Desired outcome | No | What should the code feel like after? |
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Steps
|
|
21
|
+
|
|
22
|
+
### Step 1: Read and understand the code
|
|
23
|
+
|
|
24
|
+
Read the target file completely. Build a mental model of:
|
|
25
|
+
|
|
26
|
+
- What does this code do?
|
|
27
|
+
- What are the inputs and outputs?
|
|
28
|
+
- What side effects does it have?
|
|
29
|
+
- What are the callers? (do a quick search)
|
|
30
|
+
|
|
31
|
+
Don't propose a refactoring until you fully understand what the code is doing.
|
|
32
|
+
|
|
33
|
+
### Step 2: Identify the code smells
|
|
34
|
+
|
|
35
|
+
Cross-reference with `references/refactoring-patterns.md` to match the code to named smells:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
Smells detected in src/services/order-service.js:
|
|
39
|
+
- Long method: processOrder() is 87 lines
|
|
40
|
+
- Magic numbers: 0.1 used on line 34 (tax rate?), 86400000 on line 62 (ms in a day?)
|
|
41
|
+
- Duplicate code: email validation on lines 12 and 45 — same logic
|
|
42
|
+
- Missing early returns: 4 levels of nesting on line 28–61
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Step 3: Check the safety preconditions
|
|
46
|
+
|
|
47
|
+
Work through `references/safety-checks.md` — pre-refactoring checklist:
|
|
48
|
+
|
|
49
|
+
- [ ] Tests exist?
|
|
50
|
+
- [ ] Tests pass right now?
|
|
51
|
+
- [ ] Impact analysis complete?
|
|
52
|
+
- [ ] Not a public API change without a plan?
|
|
53
|
+
|
|
54
|
+
**If tests don't exist:**
|
|
55
|
+
|
|
56
|
+
```xml
|
|
57
|
+
<invoke name="AskUserQuestion">
|
|
58
|
+
<parameter name="questions">[{
|
|
59
|
+
"question": "No tests found for this code. Safe refactoring requires a test safety net.",
|
|
60
|
+
"header": "How to proceed",
|
|
61
|
+
"multiSelect": false,
|
|
62
|
+
"options": [
|
|
63
|
+
{"label": "Write characterisation tests first (Recommended)", "description": "I'll write tests that document the current behaviour — then we refactor safely"},
|
|
64
|
+
{"label": "Write proper tests based on expected behaviour", "description": "Better for greenfield or well-understood code — takes longer but produces better tests"},
|
|
65
|
+
{"label": "Proceed without tests (I accept the risk)", "description": "Only for trivial renames or obvious dead code — I'll flag any risks"}
|
|
66
|
+
]
|
|
67
|
+
}]</parameter>
|
|
68
|
+
</invoke>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Step 4: Propose the refactoring plan
|
|
72
|
+
|
|
73
|
+
Before writing any code, present the plan:
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
Proposed refactoring for src/services/order-service.js:
|
|
77
|
+
|
|
78
|
+
1. Extract `calculateOrderTotal(order)` from processOrder() (lines 28–47)
|
|
79
|
+
Pattern: Extract Function
|
|
80
|
+
Risk: Low — pure function, well-tested path
|
|
81
|
+
|
|
82
|
+
2. Replace tax magic number 0.1 with named constant TAX_RATE
|
|
83
|
+
Pattern: Replace Magic Number
|
|
84
|
+
Risk: Very low — rename only
|
|
85
|
+
|
|
86
|
+
3. Replace nested conditional on lines 28–61 with guard clauses
|
|
87
|
+
Pattern: Guard Clause
|
|
88
|
+
Risk: Low — same logic, different structure; tests will verify
|
|
89
|
+
|
|
90
|
+
4. Extract duplicate email validation to shared validateEmail() utility
|
|
91
|
+
Pattern: Consolidate Duplicate Code
|
|
92
|
+
Risk: Low — two call sites, both covered by tests
|
|
93
|
+
|
|
94
|
+
Each step will be a separate commit. Shall I proceed?
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Show this plan and get confirmation before writing code.
|
|
98
|
+
|
|
99
|
+
### Step 5: Apply refactorings one at a time
|
|
100
|
+
|
|
101
|
+
For each step:
|
|
102
|
+
|
|
103
|
+
1. Make the specific change
|
|
104
|
+
2. Run tests (or ask the user to run them)
|
|
105
|
+
3. Confirm tests still pass
|
|
106
|
+
4. Commit with a descriptive message: `refactor: extract calculateOrderTotal function`
|
|
107
|
+
|
|
108
|
+
**Do not proceed to the next step if tests fail.**
|
|
109
|
+
|
|
110
|
+
### Step 6: Final verification
|
|
111
|
+
|
|
112
|
+
After all steps are complete:
|
|
113
|
+
|
|
114
|
+
- [ ] All tests pass
|
|
115
|
+
- [ ] No new linting errors
|
|
116
|
+
- [ ] Code reads as intended (spot-check the key sections)
|
|
117
|
+
- [ ] Commit history is clean (each commit is one pattern, one purpose)
|
|
118
|
+
|
|
119
|
+
### Step 7: Offer next steps
|
|
120
|
+
|
|
121
|
+
```xml
|
|
122
|
+
<invoke name="AskUserQuestion">
|
|
123
|
+
<parameter name="questions">[{
|
|
124
|
+
"question": "Refactoring complete. Applied {N} patterns to {file}. All tests pass.",
|
|
125
|
+
"header": "Next step",
|
|
126
|
+
"multiSelect": false,
|
|
127
|
+
"options": [
|
|
128
|
+
{"label": "Review the final diff (Recommended)", "description": "I'll show the before/after comparison so you can confirm it looks right"},
|
|
129
|
+
{"label": "Run the tests to confirm", "description": "Run the test suite and show the output"},
|
|
130
|
+
{"label": "Continue refactoring — there are more issues", "description": "I found {M} additional smells — want me to plan the next pass?"},
|
|
131
|
+
{"label": "That's enough for now", "description": "Commit and move on"}
|
|
132
|
+
]
|
|
133
|
+
}]</parameter>
|
|
134
|
+
</invoke>
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Quick refactoring (trivial changes)
|
|
140
|
+
|
|
141
|
+
For very low-risk refactorings (rename a variable, extract a constant), skip the full flow:
|
|
142
|
+
|
|
143
|
+
1. Make the change
|
|
144
|
+
2. Confirm tests pass
|
|
145
|
+
3. Done
|
|
146
|
+
|
|
147
|
+
Flag: "This is a trivial rename — no plan needed. Proceeding directly."
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Fallbacks
|
|
152
|
+
|
|
153
|
+
**If AskUserQuestion is unavailable:**
|
|
154
|
+
|
|
155
|
+
Present the plan as a numbered list and ask for confirmation:
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
Proposed refactoring plan for {file}:
|
|
159
|
+
|
|
160
|
+
1. Extract calculateOrderTotal() — Extract Function pattern
|
|
161
|
+
2. Replace magic number 0.1 with TAX_RATE constant
|
|
162
|
+
3. Replace nested conditional with guard clauses
|
|
163
|
+
4. Extract duplicate email validation to shared utility
|
|
164
|
+
|
|
165
|
+
Reply with:
|
|
166
|
+
- "proceed" — I'll apply all steps sequentially, one commit each
|
|
167
|
+
- "just step N" — I'll apply only that step
|
|
168
|
+
- "revise" — tell me what to change about the plan
|
|
169
|
+
```
|