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
package/content/plugins/accessibility/skills/agileflow-accessibility/references/testing-checklist.md
ADDED
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
# Accessibility Testing Checklist
|
|
2
|
+
|
|
3
|
+
Automated tools catch approximately 30–40% of WCAG issues. The remaining 60–70% require manual testing with keyboard navigation, screen readers, and human judgement. Both layers are mandatory for a credible accessibility posture.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Automated Testing Tools
|
|
8
|
+
|
|
9
|
+
### axe-core (Primary — integrate in unit tests)
|
|
10
|
+
|
|
11
|
+
The most widely adopted open-source accessibility engine, used by browser extensions (axe DevTools), CI pipelines, and testing frameworks.
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install --save-dev axe-core @axe-core/react vitest-axe
|
|
15
|
+
# or for Jest:
|
|
16
|
+
npm install --save-dev axe-core @axe-core/react jest-axe
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Vitest + React Testing Library:**
|
|
20
|
+
|
|
21
|
+
```js
|
|
22
|
+
// src/components/LoginForm.test.jsx
|
|
23
|
+
import { render } from "@testing-library/react";
|
|
24
|
+
import { axe, toHaveNoViolations } from "vitest-axe";
|
|
25
|
+
import { expect, it } from "vitest";
|
|
26
|
+
import { LoginForm } from "./LoginForm";
|
|
27
|
+
|
|
28
|
+
expect.extend(toHaveNoViolations);
|
|
29
|
+
|
|
30
|
+
it("LoginForm has no axe violations", async () => {
|
|
31
|
+
const { container } = render(<LoginForm />);
|
|
32
|
+
const results = await axe(container);
|
|
33
|
+
expect(results).toHaveNoViolations();
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
// Test interactive states too
|
|
37
|
+
it("LoginForm error state has no axe violations", async () => {
|
|
38
|
+
const { container } = render(<LoginForm showErrors />);
|
|
39
|
+
const results = await axe(container);
|
|
40
|
+
expect(results).toHaveNoViolations();
|
|
41
|
+
});
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**Jest equivalent:**
|
|
45
|
+
|
|
46
|
+
```js
|
|
47
|
+
import { axe, toHaveNoViolations } from "jest-axe";
|
|
48
|
+
expect.extend(toHaveNoViolations);
|
|
49
|
+
|
|
50
|
+
test("has no axe violations", async () => {
|
|
51
|
+
const { container } = render(<MyComponent />);
|
|
52
|
+
expect(await axe(container)).toHaveNoViolations();
|
|
53
|
+
});
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Configuring axe rules:**
|
|
57
|
+
|
|
58
|
+
```js
|
|
59
|
+
const results = await axe(container, {
|
|
60
|
+
rules: {
|
|
61
|
+
// Disable rules that don't apply to your context
|
|
62
|
+
"color-contrast": { enabled: false }, // if you handle contrast via design tokens
|
|
63
|
+
region: { enabled: false }, // if your component is intentionally not in a landmark
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**What axe catches automatically:**
|
|
69
|
+
|
|
70
|
+
- Missing image alt text
|
|
71
|
+
- Form inputs without labels
|
|
72
|
+
- Insufficient colour contrast (approximate — verify with dedicated tool)
|
|
73
|
+
- Missing document language
|
|
74
|
+
- Missing page title
|
|
75
|
+
- Duplicate IDs
|
|
76
|
+
- Invalid ARIA roles, properties, and values
|
|
77
|
+
- Focusable elements with aria-hidden
|
|
78
|
+
- Missing required ARIA children
|
|
79
|
+
|
|
80
|
+
**What axe does NOT catch:**
|
|
81
|
+
|
|
82
|
+
- Logical reading order
|
|
83
|
+
- Meaningful alt text (it detects presence, not quality)
|
|
84
|
+
- Keyboard operability of custom widgets
|
|
85
|
+
- Focus management on modal open/close
|
|
86
|
+
- Live region announcements
|
|
87
|
+
- Screen reader announcement quality
|
|
88
|
+
- Cognitive load and plain language issues
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
### eslint-plugin-jsx-a11y (Lint-time — catches issues before they reach the browser)
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
npm install --save-dev eslint-plugin-jsx-a11y
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**eslint.config.js (flat config):**
|
|
99
|
+
|
|
100
|
+
```js
|
|
101
|
+
import jsxA11y from "eslint-plugin-jsx-a11y";
|
|
102
|
+
|
|
103
|
+
export default [
|
|
104
|
+
jsxA11y.flatConfigs.recommended,
|
|
105
|
+
{
|
|
106
|
+
rules: {
|
|
107
|
+
// Promote some warnings to errors in your codebase
|
|
108
|
+
"jsx-a11y/alt-text": "error",
|
|
109
|
+
"jsx-a11y/anchor-is-valid": "error",
|
|
110
|
+
"jsx-a11y/label-has-associated-control": "error",
|
|
111
|
+
"jsx-a11y/no-autofocus": "warn",
|
|
112
|
+
"jsx-a11y/interactive-supports-focus": "error",
|
|
113
|
+
"jsx-a11y/click-events-have-key-events": "error",
|
|
114
|
+
"jsx-a11y/no-static-element-interactions": "error",
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
];
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**What eslint-plugin-jsx-a11y catches:**
|
|
121
|
+
|
|
122
|
+
- `<img>` without `alt`
|
|
123
|
+
- `<a>` without `href` or with invalid `href`
|
|
124
|
+
- Interactive elements without keyboard handlers
|
|
125
|
+
- `tabIndex` values greater than 0
|
|
126
|
+
- `autoFocus` prop usage
|
|
127
|
+
- Form controls without associated labels
|
|
128
|
+
- `aria-*` attributes on elements with incompatible roles
|
|
129
|
+
- Missing `role` on interactive `<div>` / `<span>` elements
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
### Lighthouse CI (Score tracking in CI pipeline)
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
npm install --save-dev @lhci/cli
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**.lighthouserc.js:**
|
|
140
|
+
|
|
141
|
+
```js
|
|
142
|
+
module.exports = {
|
|
143
|
+
ci: {
|
|
144
|
+
collect: {
|
|
145
|
+
url: ["http://localhost:3000/", "http://localhost:3000/login"],
|
|
146
|
+
startServerCommand: "npm run build && npm run start",
|
|
147
|
+
numberOfRuns: 1,
|
|
148
|
+
},
|
|
149
|
+
assert: {
|
|
150
|
+
assertions: {
|
|
151
|
+
"categories:accessibility": ["error", { minScore: 0.9 }],
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
upload: {
|
|
155
|
+
target: "temporary-public-storage",
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
**GitHub Actions integration:**
|
|
162
|
+
|
|
163
|
+
```yaml
|
|
164
|
+
- name: Run Lighthouse CI
|
|
165
|
+
run: |
|
|
166
|
+
npm run build
|
|
167
|
+
npx lhci autorun
|
|
168
|
+
env:
|
|
169
|
+
LHCI_GITHUB_APP_TOKEN: ${{ secrets.LHCI_GITHUB_APP_TOKEN }}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
**Score targets:**
|
|
173
|
+
|
|
174
|
+
- Development: ≥ 85 (allows iteration)
|
|
175
|
+
- Staging: ≥ 90
|
|
176
|
+
- Production: ≥ 95
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
### Pa11y (CLI scanner — good for pages behind auth)
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
npm install --save-dev pa11y pa11y-ci
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**.pa11yci:**
|
|
187
|
+
|
|
188
|
+
```json
|
|
189
|
+
{
|
|
190
|
+
"standard": "WCAG2AA",
|
|
191
|
+
"threshold": 0,
|
|
192
|
+
"urls": [
|
|
193
|
+
"http://localhost:3000/",
|
|
194
|
+
"http://localhost:3000/dashboard",
|
|
195
|
+
"http://localhost:3000/settings"
|
|
196
|
+
],
|
|
197
|
+
"actions": [
|
|
198
|
+
"navigate to http://localhost:3000/login",
|
|
199
|
+
"set field #email to test@example.com",
|
|
200
|
+
"set field #password to testpassword",
|
|
201
|
+
"click element button[type=submit]",
|
|
202
|
+
"wait for url to be http://localhost:3000/dashboard"
|
|
203
|
+
]
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
npx pa11y-ci --config .pa11yci
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
### Storybook a11y Addon (Component-level testing in isolation)
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
npm install --save-dev @storybook/addon-a11y
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
**.storybook/main.js:**
|
|
220
|
+
|
|
221
|
+
```js
|
|
222
|
+
export default {
|
|
223
|
+
addons: ["@storybook/addon-a11y"],
|
|
224
|
+
};
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Each story gets an "Accessibility" panel with axe results. Useful for catching issues before components are assembled into pages.
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## Manual Testing Procedures
|
|
232
|
+
|
|
233
|
+
### 1. Keyboard-only Navigation
|
|
234
|
+
|
|
235
|
+
**Setup:** Disconnect or ignore mouse. Use only keyboard.
|
|
236
|
+
|
|
237
|
+
**Checklist:**
|
|
238
|
+
|
|
239
|
+
- [ ] Press Tab from browser address bar — does focus enter the page?
|
|
240
|
+
- [ ] Tab through every interactive element in order — does focus order match visual/logical order?
|
|
241
|
+
- [ ] Is focus indicator visible at every step? (Never disappears, never `outline: none`)
|
|
242
|
+
- [ ] Activate every button with Enter and Space
|
|
243
|
+
- [ ] Activate every link with Enter
|
|
244
|
+
- [ ] Navigate dropdown/select with arrow keys
|
|
245
|
+
- [ ] Open accordion panels, tab panels — do they work?
|
|
246
|
+
- [ ] Navigate modal dialogs: focus stays inside, Escape closes, focus returns to trigger
|
|
247
|
+
- [ ] Use skip link to jump to main content
|
|
248
|
+
- [ ] Navigate forms: can you complete and submit using only keyboard?
|
|
249
|
+
- [ ] No keyboard traps except intentional modal focus traps
|
|
250
|
+
|
|
251
|
+
**Common failures:**
|
|
252
|
+
|
|
253
|
+
- Custom dropdown that only responds to mouse click
|
|
254
|
+
- Modal that does not trap focus — Tab escapes to background
|
|
255
|
+
- Icon button reachable by Tab but not activatable by Enter/Space
|
|
256
|
+
- Visual reordering via CSS that breaks logical tab sequence
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
### 2. Screen Reader Testing
|
|
261
|
+
|
|
262
|
+
#### VoiceOver on macOS (Safari)
|
|
263
|
+
|
|
264
|
+
1. Enable: `Cmd + F5`
|
|
265
|
+
2. Navigate by landmark: `VO + U` (rotor), then arrow to Landmarks or Headings
|
|
266
|
+
3. Navigate headings: `VO + Cmd + H`
|
|
267
|
+
4. Navigate form controls: `VO + Cmd + J`
|
|
268
|
+
5. Read from current position: `VO + A`
|
|
269
|
+
6. Interact with widget: `VO + Shift + Down` (enter), `VO + Shift + Up` (exit)
|
|
270
|
+
|
|
271
|
+
**What to verify:**
|
|
272
|
+
|
|
273
|
+
- [ ] Page title reads correctly when page loads
|
|
274
|
+
- [ ] Headings list makes sense — logical hierarchy (h1, h2, h3)
|
|
275
|
+
- [ ] Landmarks present: main, nav, header, footer
|
|
276
|
+
- [ ] All images have meaningful alt text (VoiceOver announces "image" + alt)
|
|
277
|
+
- [ ] All form fields announced with label, required status, type
|
|
278
|
+
- [ ] Errors announced when form submitted with invalid data
|
|
279
|
+
- [ ] Modal announced as "web dialog" with its label
|
|
280
|
+
- [ ] Buttons state announced ("expanded", "collapsed", "checked")
|
|
281
|
+
- [ ] Live region updates announced (save confirmations, status messages)
|
|
282
|
+
|
|
283
|
+
#### NVDA on Windows (Firefox)
|
|
284
|
+
|
|
285
|
+
1. Enable: `Ctrl + Alt + N` (after installing NVDA)
|
|
286
|
+
2. Virtual browse mode: read page with arrow keys; Tab for interactive elements
|
|
287
|
+
3. Navigate headings: `H` key
|
|
288
|
+
4. Navigate landmarks: `D` key
|
|
289
|
+
5. Navigate form controls: `F` key
|
|
290
|
+
6. Form mode: Enter when focused on a form field; Escape to exit
|
|
291
|
+
|
|
292
|
+
**What to verify:** Same as VoiceOver checklist above.
|
|
293
|
+
|
|
294
|
+
#### Common screen reader issues to catch:
|
|
295
|
+
|
|
296
|
+
- "image.jpg", "photo", or "icon" as alt text — useless announcement
|
|
297
|
+
- Form field announced with no label (just "text field")
|
|
298
|
+
- "Link" or "button" with no name (icon-only without aria-label)
|
|
299
|
+
- Dynamic content updates not announced (missing aria-live)
|
|
300
|
+
- Modal doesn't announce as dialog — screen reader reads behind the modal
|
|
301
|
+
- Heading hierarchy skips levels (h1 → h3, skipping h2)
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
### 3. Zoom and Reflow Testing
|
|
306
|
+
|
|
307
|
+
**200% zoom test (1.4.4 Resize Text):**
|
|
308
|
+
|
|
309
|
+
1. Open Chrome DevTools → Settings → Emulation → Font size: 32px (double default 16px)
|
|
310
|
+
OR browser zoom to 200% (`Cmd + +` × 5)
|
|
311
|
+
2. Check: all text readable, no overflow, no truncation, layout intact
|
|
312
|
+
|
|
313
|
+
**Reflow test at 320px width (1.4.10):**
|
|
314
|
+
|
|
315
|
+
1. Chrome DevTools → Device toolbar → Set width to 320px
|
|
316
|
+
2. Check: no horizontal scrollbar, all content accessible by vertical scroll only
|
|
317
|
+
3. Exception: data tables and code blocks may scroll horizontally
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
### 4. Colour Contrast Testing
|
|
322
|
+
|
|
323
|
+
**Tools:**
|
|
324
|
+
|
|
325
|
+
- Chrome DevTools: Inspect element → click colour swatch → see "Contrast ratio"
|
|
326
|
+
- [Colour Contrast Analyser](https://www.tpgi.com/color-contrast-checker/) (TPGi, free desktop app)
|
|
327
|
+
- [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/)
|
|
328
|
+
- [Who Can Use](https://www.whocanuse.com/) — shows affected user count
|
|
329
|
+
|
|
330
|
+
**What to check:**
|
|
331
|
+
|
|
332
|
+
- [ ] Body text vs background: ≥ 4.5:1
|
|
333
|
+
- [ ] Headings (if ≥ 18pt regular or ≥ 14pt bold): ≥ 3:1
|
|
334
|
+
- [ ] Placeholder text vs input background: ≥ 4.5:1
|
|
335
|
+
- [ ] Button text vs button background: ≥ 4.5:1
|
|
336
|
+
- [ ] Link text vs page background (and vs surrounding text if not underlined): ≥ 4.5:1
|
|
337
|
+
- [ ] Input border vs page background: ≥ 3:1
|
|
338
|
+
- [ ] Focus indicator vs adjacent colours: ≥ 3:1
|
|
339
|
+
- [ ] Icon/graphic vs adjacent colour: ≥ 3:1
|
|
340
|
+
- [ ] Disabled elements: no requirement, but should be visually distinct
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
### 5. Motion and Animation Testing
|
|
345
|
+
|
|
346
|
+
**Reduced motion:**
|
|
347
|
+
|
|
348
|
+
```css
|
|
349
|
+
@media (prefers-reduced-motion: reduce) {
|
|
350
|
+
*,
|
|
351
|
+
*::before,
|
|
352
|
+
*::after {
|
|
353
|
+
animation-duration: 0.01ms !important;
|
|
354
|
+
animation-iteration-count: 1 !important;
|
|
355
|
+
transition-duration: 0.01ms !important;
|
|
356
|
+
scroll-behavior: auto !important;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
**Test:** In macOS System Preferences → Accessibility → Display → Reduce Motion. Does your UI still work? Do animations stop or dramatically reduce?
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
### 6. High Contrast Mode Testing (Windows)
|
|
366
|
+
|
|
367
|
+
Windows High Contrast Mode overrides colours with system-defined high contrast values. Many CSS tricks (border replicated with box-shadow, images used as backgrounds) break.
|
|
368
|
+
|
|
369
|
+
1. Windows: Settings → Ease of Access → High contrast → Turn on
|
|
370
|
+
2. Test that: all UI elements visible, borders/outlines present, icons not disappearing
|
|
371
|
+
|
|
372
|
+
```css
|
|
373
|
+
/* Force borders to show in High Contrast Mode */
|
|
374
|
+
@media (forced-colors: active) {
|
|
375
|
+
.custom-checkbox {
|
|
376
|
+
border: 2px solid ButtonText;
|
|
377
|
+
}
|
|
378
|
+
.icon-btn svg {
|
|
379
|
+
forced-color-adjust: none;
|
|
380
|
+
fill: ButtonText;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
---
|
|
386
|
+
|
|
387
|
+
## Common Issues by Component Type
|
|
388
|
+
|
|
389
|
+
| Component | Most common a11y failures |
|
|
390
|
+
| ------------- | -------------------------------------------------------------------------------------- |
|
|
391
|
+
| Images | Missing alt; `alt="image.jpg"` or `alt="photo"` |
|
|
392
|
+
| Icon buttons | No `aria-label`; SVG announcing its contents |
|
|
393
|
+
| Form inputs | Label not associated (missing `for`/`id` or `aria-labelledby`); error not described |
|
|
394
|
+
| Links | "Click here", "Read more" — not descriptive; missing `href` |
|
|
395
|
+
| Buttons | `<div>` or `<span>` with `onclick` — not keyboard accessible |
|
|
396
|
+
| Modals | Focus not trapped; Escape not handled; focus not returned |
|
|
397
|
+
| Dropdowns | Keyboard inaccessible; state (expanded/collapsed) not communicated |
|
|
398
|
+
| Tables | Missing `<th scope>`; no `<caption>`; using `<table>` for layout |
|
|
399
|
+
| Carousels | Auto-play without pause control; no keyboard navigation |
|
|
400
|
+
| Toasts | Announced too aggressively (assertive) or not at all (missing aria-live) |
|
|
401
|
+
| Videos | No captions; player controls not keyboard accessible |
|
|
402
|
+
| PDFs | Usually completely inaccessible — prefer HTML alternatives |
|
|
403
|
+
| Charts/graphs | Alt text describes what it is, not what it shows |
|
|
404
|
+
| Autocomplete | Does not announce options count; option selection not announced |
|
|
405
|
+
| Date pickers | Calendar grid not keyboard navigable — use native `<input type="date">` where possible |
|
|
406
|
+
|
|
407
|
+
---
|
|
408
|
+
|
|
409
|
+
## CI Integration Strategy
|
|
410
|
+
|
|
411
|
+
**Recommended pipeline:**
|
|
412
|
+
|
|
413
|
+
```yaml
|
|
414
|
+
# .github/workflows/a11y.yml
|
|
415
|
+
name: Accessibility checks
|
|
416
|
+
|
|
417
|
+
on: [pull_request]
|
|
418
|
+
|
|
419
|
+
jobs:
|
|
420
|
+
lint:
|
|
421
|
+
runs-on: ubuntu-latest
|
|
422
|
+
steps:
|
|
423
|
+
- uses: actions/checkout@v4
|
|
424
|
+
- uses: actions/setup-node@v4
|
|
425
|
+
with: { node-version: 20 }
|
|
426
|
+
- run: npm ci
|
|
427
|
+
- run: npm run lint # includes eslint-plugin-jsx-a11y
|
|
428
|
+
|
|
429
|
+
unit-axe:
|
|
430
|
+
runs-on: ubuntu-latest
|
|
431
|
+
steps:
|
|
432
|
+
- uses: actions/checkout@v4
|
|
433
|
+
- uses: actions/setup-node@v4
|
|
434
|
+
with: { node-version: 20 }
|
|
435
|
+
- run: npm ci
|
|
436
|
+
- run: npm test # axe-core tests run as part of unit tests
|
|
437
|
+
|
|
438
|
+
lighthouse:
|
|
439
|
+
runs-on: ubuntu-latest
|
|
440
|
+
steps:
|
|
441
|
+
- uses: actions/checkout@v4
|
|
442
|
+
- uses: actions/setup-node@v4
|
|
443
|
+
with: { node-version: 20 }
|
|
444
|
+
- run: npm ci && npm run build
|
|
445
|
+
- run: npx lhci autorun
|
|
446
|
+
env:
|
|
447
|
+
LHCI_GITHUB_APP_TOKEN: ${{ secrets.LHCI_GITHUB_APP_TOKEN }}
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
**What each layer catches:**
|
|
451
|
+
|
|
452
|
+
| Layer | Tools | Catches |
|
|
453
|
+
| ---------------- | ------------------------- | -------------------------------------------------------------------------------- |
|
|
454
|
+
| Lint | eslint-plugin-jsx-a11y | Missing alt, invalid ARIA, non-interactive elements with onclick |
|
|
455
|
+
| Unit tests | axe-core | Rendered DOM violations: contrast, ARIA validity, label associations |
|
|
456
|
+
| E2E / Lighthouse | Lighthouse CI, Pa11y | Full page violations, including dynamically loaded content |
|
|
457
|
+
| Manual | VoiceOver, NVDA, keyboard | Everything automated misses: reading order, announcement quality, cognitive load |
|