wicked-garden 12.27.0
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/.claude-plugin/archetypes.json +166 -0
- package/.claude-plugin/components.json +75 -0
- package/.claude-plugin/marketplace.json +15 -0
- package/.claude-plugin/plugin.json +174 -0
- package/.claude-plugin/specialist.json +48 -0
- package/.claude-plugin/stack-registry.json +96 -0
- package/AGENTS.md +13 -0
- package/CHANGELOG.md +712 -0
- package/CONTRIBUTING.md +99 -0
- package/ETHOS.md +83 -0
- package/LICENSE +21 -0
- package/README.md +115 -0
- package/WICKED_GARDEN_BUS_EVENTS.md +149 -0
- package/agents/agentic/architect.md +449 -0
- package/agents/agentic/performance-analyst.md +702 -0
- package/agents/agentic/safety-reviewer.md +662 -0
- package/agents/crew/implementer.md +163 -0
- package/agents/crew/researcher.md +94 -0
- package/agents/crew/reviewer.md +184 -0
- package/agents/data/data-engineer.md +227 -0
- package/agents/engineering/api-documentarian.md +440 -0
- package/agents/engineering/migration-engineer.md +301 -0
- package/agents/engineering/solution-architect.md +208 -0
- package/agents/jam/brainstorm-facilitator.md +297 -0
- package/agents/jam/council.md +322 -0
- package/agents/jam/quick-facilitator.md +85 -0
- package/agents/persona/persona-agent.md +121 -0
- package/agents/platform/compliance-officer.md +266 -0
- package/agents/platform/privacy-expert.md +496 -0
- package/agents/platform/security-engineer.md +287 -0
- package/agents/product/a11y-expert.md +323 -0
- package/agents/product/requirements-analyst.md +238 -0
- package/agents/product/ui-reviewer.md +180 -0
- package/agents/product/ux-designer.md +199 -0
- package/agents/product/value-strategist.md +269 -0
- package/agents/qe/semantic-reviewer.md +78 -0
- package/commands/agentic/audit.md +24 -0
- package/commands/agentic/design.md +24 -0
- package/commands/agentic/frameworks.md +25 -0
- package/commands/agentic/review.md +27 -0
- package/commands/archetype/build.md +12 -0
- package/commands/archetype/decide.md +12 -0
- package/commands/archetype/explore.md +12 -0
- package/commands/archetype/incident.md +12 -0
- package/commands/archetype/migrate.md +12 -0
- package/commands/archetype/modernize.md +12 -0
- package/commands/archetype/review.md +14 -0
- package/commands/archetype/ship.md +12 -0
- package/commands/archetype/specify.md +12 -0
- package/commands/archetype/triage.md +12 -0
- package/commands/compile.md +37 -0
- package/commands/data/analyze.md +18 -0
- package/commands/data/data.md +21 -0
- package/commands/data/ml.md +18 -0
- package/commands/data/ontology.md +22 -0
- package/commands/data/pipeline.md +17 -0
- package/commands/deliberate.md +181 -0
- package/commands/engineering/add-field.md +77 -0
- package/commands/engineering/apply.md +58 -0
- package/commands/engineering/arch.md +26 -0
- package/commands/engineering/debug.md +27 -0
- package/commands/engineering/docs.md +27 -0
- package/commands/engineering/new-generator.md +257 -0
- package/commands/engineering/patch-plan.md +59 -0
- package/commands/engineering/plan.md +29 -0
- package/commands/engineering/remove.md +48 -0
- package/commands/engineering/rename.md +44 -0
- package/commands/engineering/review.md +32 -0
- package/commands/help.md +128 -0
- package/commands/install.md +118 -0
- package/commands/intent.md +54 -0
- package/commands/jam/brainstorm.md +37 -0
- package/commands/jam/council.md +49 -0
- package/commands/jam/quick.md +21 -0
- package/commands/jam/revisit.md +79 -0
- package/commands/persona/as.md +136 -0
- package/commands/persona/define.md +24 -0
- package/commands/persona/list.md +118 -0
- package/commands/platform/actions.md +20 -0
- package/commands/platform/assert.md +18 -0
- package/commands/platform/audit.md +23 -0
- package/commands/platform/compliance.md +20 -0
- package/commands/platform/gh.md +22 -0
- package/commands/platform/health.md +22 -0
- package/commands/platform/incident.md +23 -0
- package/commands/platform/infra.md +24 -0
- package/commands/platform/peer-health.md +103 -0
- package/commands/platform/plugin-health.md +58 -0
- package/commands/platform/security.md +38 -0
- package/commands/platform/toolchain.md +96 -0
- package/commands/platform/traces.md +20 -0
- package/commands/product/a11y.md +19 -0
- package/commands/product/acceptance.md +19 -0
- package/commands/product/align.md +20 -0
- package/commands/product/analyze.md +23 -0
- package/commands/product/elicit.md +19 -0
- package/commands/product/listen.md +24 -0
- package/commands/product/mockup.md +20 -0
- package/commands/product/screenshot.md +19 -0
- package/commands/product/strategy.md +40 -0
- package/commands/product/synthesize.md +23 -0
- package/commands/product/ux-review.md +42 -0
- package/commands/product/ux.md +20 -0
- package/commands/product/visual-direction.md +34 -0
- package/commands/prove.md +47 -0
- package/commands/report-issue.md +243 -0
- package/commands/reset.md +144 -0
- package/commands/search/blast-radius.md +58 -0
- package/commands/search/hotspots.md +55 -0
- package/commands/search/index.md +38 -0
- package/commands/search/lineage.md +47 -0
- package/commands/search/service-map.md +79 -0
- package/commands/setup.md +363 -0
- package/commands/smaht/briefing.md +200 -0
- package/commands/smaht/events-import.md +95 -0
- package/commands/smaht/state.md +19 -0
- package/commands/where-am-i.md +58 -0
- package/docs/README.md +32 -0
- package/docs/adr/0001-code-relationship-graph-engine.md +116 -0
- package/docs/adr/0002-major-cleanup-keep-cut.md +91 -0
- package/docs/adr/0003-peers-gate-required-layers-optin.md +41 -0
- package/docs/adr/0004-code-graph-moves-to-wicked-brain.md +47 -0
- package/docs/brain-chunk-format.md +135 -0
- package/docs/compiler.md +95 -0
- package/docs/daemon-api.md +70 -0
- package/docs/domains.md +197 -0
- package/docs/getting-started.md +208 -0
- package/docs/plans/2026-06-08-wicked-loom-conduct.md +1337 -0
- package/docs/plans/2026-06-08-wicked-loom-contract.md +638 -0
- package/docs/plans/2026-06-08-wicked-loom-cutover.md +1300 -0
- package/docs/plans/2026-06-08-wicked-loom-expand-compose.md +843 -0
- package/docs/plans/2026-06-08-wicked-loom-flow-cutover.md +403 -0
- package/docs/plans/2026-06-10-codegraph-to-brain-phase1a-graph-core.md +838 -0
- package/docs/plans/2026-06-10-codegraph-to-brain-phase1b-injected-edges.md +44 -0
- package/docs/required-peers.md +60 -0
- package/docs/specs/2026-06-08-wicked-loom-extraction.md +225 -0
- package/docs/specs/2026-06-10-codegraph-to-brain-migration.md +168 -0
- package/docs/v11/archetypes.md +231 -0
- package/hooks/hooks.json +275 -0
- package/hooks/scripts/bootstrap.py +1797 -0
- package/hooks/scripts/invoke.py +62 -0
- package/hooks/scripts/notification.py +166 -0
- package/hooks/scripts/permission_request.py +223 -0
- package/hooks/scripts/post_tool.py +1374 -0
- package/hooks/scripts/pre_compact.py +272 -0
- package/hooks/scripts/pre_tool.py +1278 -0
- package/hooks/scripts/prompt_submit.py +1109 -0
- package/hooks/scripts/session_end.py +95 -0
- package/hooks/scripts/stop.py +624 -0
- package/hooks/scripts/subagent_lifecycle.py +464 -0
- package/hooks/scripts/subscribers/on_gate_decided.py +84 -0
- package/hooks/scripts/task_completed.py +322 -0
- package/hooks/scripts/worktree_guard.py +148 -0
- package/hooks/subscriptions/on_gate_decided.json +9 -0
- package/install.mjs +128 -0
- package/package.json +41 -0
- package/pyproject.toml +59 -0
- package/schemas/README.md +32 -0
- package/schemas/assert_contracts.json +37 -0
- package/schemas/health_probe.json +46 -0
- package/schemas/plugin_status.json +37 -0
- package/scripts/_adapters/__init__.py +166 -0
- package/scripts/_adapters/jira_adapter.py +18 -0
- package/scripts/_adapters/linear_adapter.py +18 -0
- package/scripts/_adapters/miro_adapter.py +18 -0
- package/scripts/_adapters/notion_adapter.py +18 -0
- package/scripts/_agents.py +357 -0
- package/scripts/_brain_ingest/__init__.py +2 -0
- package/scripts/_brain_ingest/session_fact_extractor.py +341 -0
- package/scripts/_brain_port.py +163 -0
- package/scripts/_bus.py +1081 -0
- package/scripts/_bus_catalog_gen.py +93 -0
- package/scripts/_bus_consumers.json +46 -0
- package/scripts/_bus_emit.py +43 -0
- package/scripts/_capability_registry.py +334 -0
- package/scripts/_capability_resolver.py +322 -0
- package/scripts/_domain_store.py +559 -0
- package/scripts/_event_log_reader.py +154 -0
- package/scripts/_event_schema.py +305 -0
- package/scripts/_event_store.py +397 -0
- package/scripts/_heavy_cadence.py +324 -0
- package/scripts/_integration_resolver.py +321 -0
- package/scripts/_logger.py +151 -0
- package/scripts/_loom.py +482 -0
- package/scripts/_paths.py +133 -0
- package/scripts/_python.sh +22 -0
- package/scripts/_run.py +137 -0
- package/scripts/_session.py +502 -0
- package/scripts/_validate_registry.py +1042 -0
- package/scripts/_wicked_testing_probe.py +277 -0
- package/scripts/agentic/analyze_agents.py +391 -0
- package/scripts/agentic/detect_framework.py +420 -0
- package/scripts/agentic/issue_taxonomy.py +357 -0
- package/scripts/agentic/pattern_scorer.py +434 -0
- package/scripts/classify/persist.py +169 -0
- package/scripts/compiler/compile.py +552 -0
- package/scripts/compiler/phase0/VERDICT.md +60 -0
- package/scripts/compiler/phase0/detect.py +292 -0
- package/scripts/compiler/phase0/emit.py +228 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.bindings.json +30 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.lint-output.txt +17 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/.wg/evidence/failing-tests.txt +4 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/.wg/evidence/honest-tests.txt +2 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/fab-fail.build.md +8 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/fab-missing.build.md +8 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/honest.build.md +8 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/wg_check_claims.py +174 -0
- package/scripts/compiler/phase0/evidence/command_iq.bindings.json +45 -0
- package/scripts/compiler/phase0/evidence/command_iq.lint-output.txt +17 -0
- package/scripts/compiler/phase0/evidence/command_iq.stage/.projects/evidence-domain/phase-1-clarify/evidence/failing-tests.txt +4 -0
- package/scripts/compiler/phase0/evidence/command_iq.stage/.projects/evidence-domain/phase-1-clarify/evidence/honest-tests.txt +3 -0
- package/scripts/compiler/phase0/evidence/command_iq.stage/fab-fail.build.md +8 -0
- package/scripts/compiler/phase0/evidence/command_iq.stage/fab-missing.build.md +8 -0
- package/scripts/compiler/phase0/evidence/command_iq.stage/honest.build.md +8 -0
- package/scripts/compiler/phase0/evidence/command_iq.stage/wg_check_claims.py +174 -0
- package/scripts/compiler/phase0/evidence/memos.bindings.json +28 -0
- package/scripts/compiler/phase0/evidence/memos.lint-output.txt +17 -0
- package/scripts/compiler/phase0/evidence/memos.stage/.wg/evidence/failing-tests.txt +4 -0
- package/scripts/compiler/phase0/evidence/memos.stage/.wg/evidence/honest-tests.txt +2 -0
- package/scripts/compiler/phase0/evidence/memos.stage/fab-fail.build.md +8 -0
- package/scripts/compiler/phase0/evidence/memos.stage/fab-missing.build.md +8 -0
- package/scripts/compiler/phase0/evidence/memos.stage/honest.build.md +8 -0
- package/scripts/compiler/phase0/evidence/memos.stage/wg_check_claims.py +174 -0
- package/scripts/compiler/phase0/evidence/verdict.json +104 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.bindings.json +29 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.lint-output.txt +17 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.stage/coverage/failing-tests.txt +4 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.stage/coverage/honest-tests.txt +3 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.stage/fab-fail.build.md +8 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.stage/fab-missing.build.md +8 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.stage/honest.build.md +8 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.stage/wg_check_claims.py +174 -0
- package/scripts/compiler/phase0/evidence/wire-vault-transcript.txt +60 -0
- package/scripts/compiler/phase0/run_probe.py +234 -0
- package/scripts/compiler/phase0/wire_vault.py +310 -0
- package/scripts/crew/__init__.py +0 -0
- package/scripts/crew/_task_audit_writer.py +243 -0
- package/scripts/crew/_task_reader.py +389 -0
- package/scripts/crew/archetypes_v11.py +348 -0
- package/scripts/crew/detectors/__init__.py +12 -0
- package/scripts/crew/flow_compiler.py +121 -0
- package/scripts/crew/phase_manager.py +703 -0
- package/scripts/crew/scope_delta.py +264 -0
- package/scripts/crew/specialist_resolver.py +218 -0
- package/scripts/crew/stack_registry.py +189 -0
- package/scripts/data/data_profiler.py +271 -0
- package/scripts/data/ontology_recommender.py +231 -0
- package/scripts/data/schema_validator.py +267 -0
- package/scripts/delivery/drift.py +739 -0
- package/scripts/delivery/telemetry.py +614 -0
- package/scripts/engineering/patch/codegraph_db.py +125 -0
- package/scripts/engineering/patch/generators/__init__.py +56 -0
- package/scripts/engineering/patch/generators/base.py +373 -0
- package/scripts/engineering/patch/generators/csharp_generator.py +494 -0
- package/scripts/engineering/patch/generators/go_generator.py +430 -0
- package/scripts/engineering/patch/generators/java_generator.py +928 -0
- package/scripts/engineering/patch/generators/jsp_generator.py +454 -0
- package/scripts/engineering/patch/generators/kotlin_generator.py +561 -0
- package/scripts/engineering/patch/generators/perl_generator.py +510 -0
- package/scripts/engineering/patch/generators/php_generator.py +644 -0
- package/scripts/engineering/patch/generators/propagation_engine.py +929 -0
- package/scripts/engineering/patch/generators/python_generator.py +487 -0
- package/scripts/engineering/patch/generators/ruby_generator.py +463 -0
- package/scripts/engineering/patch/generators/rust_generator.py +400 -0
- package/scripts/engineering/patch/generators/sql_generator.py +594 -0
- package/scripts/engineering/patch/generators/typescript_generator.py +439 -0
- package/scripts/engineering/patch/patch.py +800 -0
- package/scripts/engineering/patch/safety.py +429 -0
- package/scripts/jam/__init__.py +0 -0
- package/scripts/jam/_bus_consumers.py +271 -0
- package/scripts/jam/agentic_cli_registry.py +703 -0
- package/scripts/jam/consensus.py +737 -0
- package/scripts/jam/detect_clis.py +409 -0
- package/scripts/jam/jam.py +283 -0
- package/scripts/jam/save_transcript.py +171 -0
- package/scripts/loom/__init__.py +22 -0
- package/scripts/loom/cli.py +170 -0
- package/scripts/loom/compose.py +180 -0
- package/scripts/loom/gate.py +120 -0
- package/scripts/loom/manifest.py +140 -0
- package/scripts/loom/resolve.py +59 -0
- package/scripts/persona/__init__.py +0 -0
- package/scripts/persona/registry.py +688 -0
- package/scripts/platform/guard_pipeline.py +1214 -0
- package/scripts/platform/guard_profiles.py +216 -0
- package/scripts/platform/observability/assert_contracts.py +434 -0
- package/scripts/platform/observability/health_probe.py +915 -0
- package/scripts/platform/observability/ops_log_viewer.py +209 -0
- package/scripts/platform/prereq_doctor.py +567 -0
- package/scripts/qe/conditions_manifest.py +260 -0
- package/scripts/qe/content_sanitizer.py +160 -0
- package/scripts/qe/coverage_tracker.py +535 -0
- package/scripts/qe/discover_scenarios.py +243 -0
- package/scripts/qe/evidence_tracker.py +232 -0
- package/scripts/qe/prove.py +196 -0
- package/scripts/qe/registry_lookup.py +80 -0
- package/scripts/qe/registry_store.py +176 -0
- package/scripts/qe/semantic_review.py +1005 -0
- package/scripts/qe/vault_gate.py +382 -0
- package/scripts/qe/verdict_audit.py +175 -0
- package/scripts/qe/verdict_schema.py +335 -0
- package/scripts/reset.py +220 -0
- package/scripts/resolve_path.py +22 -0
- package/scripts/sentinel/invariants.py +402 -0
- package/scripts/sentinel/pre_push.py +73 -0
- package/scripts/setup/__init__.py +1 -0
- package/scripts/setup/detect_state.py +114 -0
- package/scripts/setup/migrate_legacy.py +67 -0
- package/scripts/setup/migrate_v6_projects.py +232 -0
- package/scripts/setup/onboarding.py +114 -0
- package/scripts/smaht/_bus_consumers.py +98 -0
- package/scripts/smaht/adapters/__init__.py +83 -0
- package/scripts/smaht/adapters/brain_adapter.py +254 -0
- package/scripts/smaht/adapters/context7_adapter.py +438 -0
- package/scripts/smaht/adapters/delegation_adapter.py +104 -0
- package/scripts/smaht/adapters/domain_adapter.py +206 -0
- package/scripts/smaht/adapters/events_adapter.py +231 -0
- package/scripts/smaht/adapters/tools_adapter.py +49 -0
- package/scripts/smaht/cheatsheet_store.py +236 -0
- package/scripts/smaht/context_package.py +386 -0
- package/scripts/smaht/knowledge_graph.py +395 -0
- package/scripts/smaht/propose_skills.py +856 -0
- package/scripts/smaht/test_cheatsheet_store.py +428 -0
- package/scripts/statusline.py +151 -0
- package/scripts/where_am_i.py +236 -0
- package/skills/agentic/agentic-patterns/SKILL.md +91 -0
- package/skills/agentic/agentic-patterns/refs/anti-patterns-design.md +283 -0
- package/skills/agentic/agentic-patterns/refs/anti-patterns-operational.md +216 -0
- package/skills/agentic/agentic-patterns/refs/pattern-catalog.md +329 -0
- package/skills/agentic/context-engineering/SKILL.md +142 -0
- package/skills/agentic/context-engineering/refs/caching-and-optimization.md +251 -0
- package/skills/agentic/context-engineering/refs/compression-techniques.md +171 -0
- package/skills/agentic/context-engineering/refs/cost-calculation-budget.md +250 -0
- package/skills/agentic/context-engineering/refs/cost-optimization-reporting.md +300 -0
- package/skills/agentic/context-engineering/refs/selective-loading.md +179 -0
- package/skills/agentic/frameworks/SKILL.md +191 -0
- package/skills/agentic/frameworks/refs/framework-profiles-1.md +209 -0
- package/skills/agentic/frameworks/refs/framework-profiles-2.md +214 -0
- package/skills/agentic/frameworks/refs/migration-patterns-paths.md +267 -0
- package/skills/agentic/frameworks/refs/migration-patterns-testing.md +208 -0
- package/skills/agentic/refs/audit.md +134 -0
- package/skills/agentic/refs/design.md +137 -0
- package/skills/agentic/refs/frameworks.md +102 -0
- package/skills/agentic/refs/review.md +160 -0
- package/skills/agentic/review-methodology/SKILL.md +186 -0
- package/skills/agentic/review-methodology/refs/deliverable-templates.md +246 -0
- package/skills/agentic/review-methodology/refs/issue-taxonomy-quality-testing.md +277 -0
- package/skills/agentic/review-methodology/refs/issue-taxonomy-reliability-safety.md +253 -0
- package/skills/agentic/trust-and-safety/SKILL.md +177 -0
- package/skills/agentic/trust-and-safety/refs/guardrails-actions.md +246 -0
- package/skills/agentic/trust-and-safety/refs/guardrails-input-output.md +238 -0
- package/skills/agentic/trust-and-safety/refs/guardrails-resources.md +209 -0
- package/skills/agentic/trust-and-safety/refs/safety-checklist-advanced.md +209 -0
- package/skills/agentic/trust-and-safety/refs/safety-checklist-core.md +215 -0
- package/skills/archetype/SKILL.md +104 -0
- package/skills/archetype/refs/build.md +142 -0
- package/skills/archetype/refs/decide.md +117 -0
- package/skills/archetype/refs/explore.md +66 -0
- package/skills/archetype/refs/incident.md +149 -0
- package/skills/archetype/refs/migrate.md +170 -0
- package/skills/archetype/refs/modernize.md +187 -0
- package/skills/archetype/refs/review.md +145 -0
- package/skills/archetype/refs/ship.md +117 -0
- package/skills/archetype/refs/specify.md +108 -0
- package/skills/archetype/refs/triage.md +62 -0
- package/skills/classify/SKILL.md +157 -0
- package/skills/data/analysis/SKILL.md +125 -0
- package/skills/data/analysis/refs/templates.md +170 -0
- package/skills/data/data/SKILL.md +118 -0
- package/skills/data/data/refs/examples.md +235 -0
- package/skills/data/ml/SKILL.md +125 -0
- package/skills/data/ml/refs/templates.md +172 -0
- package/skills/data/pipeline/SKILL.md +136 -0
- package/skills/data/pipeline/refs/templates.md +175 -0
- package/skills/data/refs/analyze.md +123 -0
- package/skills/data/refs/data.md +95 -0
- package/skills/data/refs/ml.md +118 -0
- package/skills/data/refs/pipeline.md +92 -0
- package/skills/deliberate/SKILL.md +125 -0
- package/skills/deliberate/refs/architecture-lens.md +37 -0
- package/skills/deliberate/refs/assumptions-lens.md +43 -0
- package/skills/deliberate/refs/code-lens.md +38 -0
- package/skills/deliberate/refs/content-lens.md +37 -0
- package/skills/deliberate/refs/data-lens.md +43 -0
- package/skills/deliberate/refs/design-lens.md +37 -0
- package/skills/deliberate/refs/opportunity-patterns.md +107 -0
- package/skills/deliberate/refs/ops-lens.md +43 -0
- package/skills/deliberate/refs/product-lens.md +46 -0
- package/skills/deliberate/refs/rethink-framework.md +77 -0
- package/skills/deliberate/refs/security-lens.md +47 -0
- package/skills/deliberate/refs/testing-lens.md +45 -0
- package/skills/deliberate/refs/timing-lens.md +42 -0
- package/skills/engineering/architecture/SKILL.md +177 -0
- package/skills/engineering/architecture/refs/adr-template.md +268 -0
- package/skills/engineering/architecture/refs/architecture-template-deployment.md +176 -0
- package/skills/engineering/architecture/refs/architecture-template-design.md +300 -0
- package/skills/engineering/architecture/refs/examples-ecommerce-analytics.md +299 -0
- package/skills/engineering/architecture/refs/examples-saas-trading.md +291 -0
- package/skills/engineering/architecture/refs/patterns-advanced.md +238 -0
- package/skills/engineering/architecture/refs/patterns-structural.md +303 -0
- package/skills/engineering/backend/SKILL.md +102 -0
- package/skills/engineering/backend/refs/checklists.md +146 -0
- package/skills/engineering/backend/refs/patterns.md +181 -0
- package/skills/engineering/debugging/SKILL.md +99 -0
- package/skills/engineering/debugging/refs/patterns.md +248 -0
- package/skills/engineering/debugging/refs/process.md +203 -0
- package/skills/engineering/docs/SKILL.md +97 -0
- package/skills/engineering/engineering/SKILL.md +88 -0
- package/skills/engineering/engineering/refs/checklists.md +91 -0
- package/skills/engineering/engineering/refs/templates.md +71 -0
- package/skills/engineering/frontend/SKILL.md +92 -0
- package/skills/engineering/frontend/refs/checklists.md +96 -0
- package/skills/engineering/frontend/refs/patterns.md +167 -0
- package/skills/engineering/integration/SKILL.md +183 -0
- package/skills/engineering/integration/refs/error-handling-best-practices.md +139 -0
- package/skills/engineering/integration/refs/error-handling-error-classes-typescript.md +212 -0
- package/skills/engineering/integration/refs/error-handling-error-response-format.md +301 -0
- package/skills/engineering/integration/refs/error-handling-retry-strategies.md +190 -0
- package/skills/engineering/integration/refs/event-schemas-best-practices.md +225 -0
- package/skills/engineering/integration/refs/event-schemas-event-naming-conventions.md +303 -0
- package/skills/engineering/integration/refs/event-schemas-event-structure.md +288 -0
- package/skills/engineering/integration/refs/graphql-best-practices.md +138 -0
- package/skills/engineering/integration/refs/graphql-error-handling.md +198 -0
- package/skills/engineering/integration/refs/graphql-graphql-basics.md +197 -0
- package/skills/engineering/integration/refs/graphql-query-examples.md +226 -0
- package/skills/engineering/integration/refs/graphql-schema-design-patterns.md +280 -0
- package/skills/engineering/integration/refs/grpc-grpc-overview.md +246 -0
- package/skills/engineering/integration/refs/grpc-implementation-examples.md +269 -0
- package/skills/engineering/integration/refs/grpc-metadata-headers.md +304 -0
- package/skills/engineering/integration/refs/grpc-testing.md +49 -0
- package/skills/engineering/integration/refs/openapi-template.yaml +682 -0
- package/skills/engineering/integration/refs/resilience-best-practices.md +109 -0
- package/skills/engineering/integration/refs/resilience-circuit-breaker-pattern.md +302 -0
- package/skills/engineering/integration/refs/resilience-rate-limiting.md +245 -0
- package/skills/engineering/integration/refs/resilience-timeout-pattern.md +212 -0
- package/skills/engineering/integration/refs/rest-api-fundamentals.md +299 -0
- package/skills/engineering/integration/refs/rest-api-responses-security.md +302 -0
- package/skills/engineering/integration/refs/versioning-breaking-changes.md +237 -0
- package/skills/engineering/integration/refs/versioning-migration-strategies.md +257 -0
- package/skills/engineering/integration/refs/versioning-versioning-strategies.md +296 -0
- package/skills/engineering/large-scale-migration/SKILL.md +65 -0
- package/skills/engineering/patch/SKILL.md +184 -0
- package/skills/engineering/refs/arch.md +126 -0
- package/skills/engineering/refs/debug.md +142 -0
- package/skills/engineering/refs/docs.md +190 -0
- package/skills/engineering/refs/plan.md +109 -0
- package/skills/engineering/refs/review.md +138 -0
- package/skills/engineering/system-design/SKILL.md +154 -0
- package/skills/engineering/system-design/refs/anti-patterns-big-ball-of-mud.md +254 -0
- package/skills/engineering/system-design/refs/anti-patterns-circular-dependencies.md +241 -0
- package/skills/engineering/system-design/refs/anti-patterns-feature-envy.md +168 -0
- package/skills/engineering/system-design/refs/anti-patterns-god-object.md +247 -0
- package/skills/engineering/system-design/refs/component-template-lifecycle.md +210 -0
- package/skills/engineering/system-design/refs/component-template-maintenance.md +219 -0
- package/skills/engineering/system-design/refs/component-template-structure.md +276 -0
- package/skills/engineering/system-design/refs/dependencies-best-practices.md +260 -0
- package/skills/engineering/system-design/refs/dependencies-dependency-principles.md +295 -0
- package/skills/engineering/system-design/refs/dependencies-dependency-tracking.md +261 -0
- package/skills/engineering/system-design/refs/interface-template-lifecycle.md +211 -0
- package/skills/engineering/system-design/refs/interface-template-maintenance.md +212 -0
- package/skills/engineering/system-design/refs/interface-template-structure.md +269 -0
- package/skills/engineering/system-design/refs/patterns-dependency-injection.md +151 -0
- package/skills/engineering/system-design/refs/patterns-facade-pattern.md +257 -0
- package/skills/engineering/system-design/refs/patterns-layered-pattern.md +204 -0
- package/skills/engineering/system-design/refs/patterns-plugin-architecture.md +229 -0
- package/skills/engineering/unit-test-quality/SKILL.md +194 -0
- package/skills/ground/SKILL.md +130 -0
- package/skills/integration-discovery/SKILL.md +168 -0
- package/skills/integration-discovery/refs/capabilities.md +282 -0
- package/skills/integration-discovery/refs/cli-detection.md +295 -0
- package/skills/integration-discovery/refs/discovery-sources.md +233 -0
- package/skills/integration-discovery/refs/task-patterns.md +206 -0
- package/skills/jam/SKILL.md +45 -0
- package/skills/jam/refs/facilitation-patterns.md +125 -0
- package/skills/jam/refs/quick.md +64 -0
- package/skills/jam/refs/synthesis-patterns.md +114 -0
- package/skills/multi-model/SKILL.md +168 -0
- package/skills/multi-model/refs/aichat.md +119 -0
- package/skills/multi-model/refs/aider.md +100 -0
- package/skills/multi-model/refs/auditability.md +238 -0
- package/skills/multi-model/refs/codex.md +169 -0
- package/skills/multi-model/refs/context.md +306 -0
- package/skills/multi-model/refs/copilot.md +161 -0
- package/skills/multi-model/refs/examples.md +224 -0
- package/skills/multi-model/refs/gemini.md +185 -0
- package/skills/multi-model/refs/goose.md +112 -0
- package/skills/multi-model/refs/llm.md +124 -0
- package/skills/multi-model/refs/opencode.md +196 -0
- package/skills/multi-model/refs/orchestration.md +188 -0
- package/skills/multi-model/refs/pi.md +208 -0
- package/skills/persona/SKILL.md +144 -0
- package/skills/persona/refs/define.md +133 -0
- package/skills/platform/actions/refs/actions.md +114 -0
- package/skills/platform/audit/SKILL.md +174 -0
- package/skills/platform/audit/refs/audit.md +145 -0
- package/skills/platform/audit/refs/checklists-evidence-operations.md +144 -0
- package/skills/platform/audit/refs/checklists-gdpr-pci-evidence.md +213 -0
- package/skills/platform/audit/refs/checklists-soc2-hipaa.md +120 -0
- package/skills/platform/audit/refs/frameworks-gdpr-pci.md +225 -0
- package/skills/platform/audit/refs/frameworks-soc2-hipaa.md +228 -0
- package/skills/platform/compliance/SKILL.md +169 -0
- package/skills/platform/compliance/refs/checklists.md +303 -0
- package/skills/platform/compliance/refs/compliance.md +117 -0
- package/skills/platform/compliance/refs/frameworks.md +282 -0
- package/skills/platform/errors/SKILL.md +183 -0
- package/skills/platform/errors/refs/patterns.md +271 -0
- package/skills/platform/errors/refs/severity.md +264 -0
- package/skills/platform/gate-benchmark-rebaseline/SKILL.md +108 -0
- package/skills/platform/gh/refs/gh.md +105 -0
- package/skills/platform/gh-cli/SKILL.md +120 -0
- package/skills/platform/gh-cli/refs/automation.md +63 -0
- package/skills/platform/gh-cli/refs/gh-ops.md +103 -0
- package/skills/platform/gh-cli/refs/patterns.md +132 -0
- package/skills/platform/gh-cli/scripts/gh_ops.py +454 -0
- package/skills/platform/github-actions/SKILL.md +159 -0
- package/skills/platform/github-actions/refs/security.md +150 -0
- package/skills/platform/github-actions/refs/templates.md +230 -0
- package/skills/platform/github-actions/refs/troubleshooting.md +174 -0
- package/skills/platform/github-actions/scripts/workflow_gen.py +215 -0
- package/skills/platform/gitlab-ci/SKILL.md +140 -0
- package/skills/platform/gitlab-ci/refs/templates.md +223 -0
- package/skills/platform/gitlab-ci/refs/troubleshooting.md +213 -0
- package/skills/platform/glab-cli/SKILL.md +133 -0
- package/skills/platform/glab-cli/refs/ci-debugging.md +95 -0
- package/skills/platform/glab-cli/refs/glab-ops.md +78 -0
- package/skills/platform/glab-cli/refs/patterns.md +131 -0
- package/skills/platform/glab-cli/scripts/glab_ops.py +313 -0
- package/skills/platform/health/SKILL.md +177 -0
- package/skills/platform/health/refs/health.md +72 -0
- package/skills/platform/health/refs/sources.md +302 -0
- package/skills/platform/incident/refs/incident.md +136 -0
- package/skills/platform/infra/refs/infra.md +104 -0
- package/skills/platform/observability/SKILL.md +128 -0
- package/skills/platform/observability/refs/toolchain-discovery.md +243 -0
- package/skills/platform/prereq-doctor/SKILL.md +57 -0
- package/skills/platform/prereq-doctor/refs/tool-registry.md +58 -0
- package/skills/platform/traces/refs/traces.md +101 -0
- package/skills/product/acceptance-criteria/SKILL.md +193 -0
- package/skills/product/acceptance-criteria/refs/ac-anti-patterns.md +291 -0
- package/skills/product/acceptance-criteria/refs/ac-examples.md +277 -0
- package/skills/product/accessibility/SKILL.md +197 -0
- package/skills/product/accessibility/refs/aria-patterns-basics.md +250 -0
- package/skills/product/accessibility/refs/aria-patterns-dynamic.md +187 -0
- package/skills/product/accessibility/refs/aria-patterns-interactive.md +246 -0
- package/skills/product/accessibility/refs/audit-report-findings.md +248 -0
- package/skills/product/accessibility/refs/audit-report-results.md +276 -0
- package/skills/product/accessibility/refs/common-violations-html-css.md +270 -0
- package/skills/product/accessibility/refs/common-violations-interactive.md +303 -0
- package/skills/product/accessibility/refs/keyboard-testing-basics.md +222 -0
- package/skills/product/accessibility/refs/keyboard-testing-patterns.md +173 -0
- package/skills/product/accessibility/refs/screen-reader-testing-advanced.md +294 -0
- package/skills/product/accessibility/refs/screen-reader-testing-commands.md +255 -0
- package/skills/product/accessibility/refs/wcag-checklist.md +262 -0
- package/skills/product/analyze/SKILL.md +164 -0
- package/skills/product/analyze/refs/algorithms.md +238 -0
- package/skills/product/analyze/refs/sentiment-patterns.md +180 -0
- package/skills/product/imagery/SKILL.md +97 -0
- package/skills/product/imagery/alter/SKILL.md +105 -0
- package/skills/product/imagery/alter/refs/editing-reference.md +146 -0
- package/skills/product/imagery/create/SKILL.md +109 -0
- package/skills/product/imagery/create/refs/prompt-engineering.md +112 -0
- package/skills/product/imagery/create/refs/provider-reference.md +219 -0
- package/skills/product/imagery/review/SKILL.md +101 -0
- package/skills/product/imagery/review/refs/analysis-lenses.md +136 -0
- package/skills/product/imagery/review/refs/quality-gates.md +153 -0
- package/skills/product/imagery/scripts/analyze.sh +23 -0
- package/skills/product/imagery/scripts/edit.sh +14 -0
- package/skills/product/imagery/scripts/generate.sh +13 -0
- package/skills/product/imagery/scripts/provider.py +787 -0
- package/skills/product/listen/SKILL.md +175 -0
- package/skills/product/listen/refs/channels.md +220 -0
- package/skills/product/mockup/SKILL.md +106 -0
- package/skills/product/mockup/refs/templates.md +95 -0
- package/skills/product/refs/a11y.md +109 -0
- package/skills/product/refs/acceptance.md +79 -0
- package/skills/product/refs/align.md +67 -0
- package/skills/product/refs/analyze.md +77 -0
- package/skills/product/refs/elicit.md +67 -0
- package/skills/product/refs/listen.md +58 -0
- package/skills/product/refs/mockup.md +77 -0
- package/skills/product/refs/screenshot.md +59 -0
- package/skills/product/refs/strategy.md +77 -0
- package/skills/product/refs/synthesize.md +54 -0
- package/skills/product/refs/ux-review.md +68 -0
- package/skills/product/refs/ux.md +101 -0
- package/skills/product/requirements-analysis/SKILL.md +136 -0
- package/skills/product/requirements-analysis/refs/requirements-example-auth.md +264 -0
- package/skills/product/requirements-analysis/refs/requirements-example-export-integration.md +88 -0
- package/skills/product/requirements-analysis/refs/requirements-output-format-template.md +247 -0
- package/skills/product/requirements-analysis/refs/user-story-guide.md +296 -0
- package/skills/product/requirements-graph/SKILL.md +155 -0
- package/skills/product/requirements-graph/refs/examples.md +223 -0
- package/skills/product/requirements-graph/refs/schema.md +162 -0
- package/skills/product/requirements-migrate/SKILL.md +90 -0
- package/skills/product/requirements-navigate/SKILL.md +141 -0
- package/skills/product/requirements-navigate/refs/meta-templates.md +141 -0
- package/skills/product/screenshot/SKILL.md +147 -0
- package/skills/product/strategy/SKILL.md +198 -0
- package/skills/product/strategy/refs/frameworks.md +295 -0
- package/skills/product/strategy/refs/templates-competitive-market.md +299 -0
- package/skills/product/strategy/refs/templates-roi-value.md +207 -0
- package/skills/product/synthesize/SKILL.md +116 -0
- package/skills/product/synthesize/refs/journey-mapping.md +212 -0
- package/skills/product/synthesize/refs/prioritization.md +193 -0
- package/skills/product/ux-review/SKILL.md +164 -0
- package/skills/product/visual-direction/SKILL.md +137 -0
- package/skills/product/visual-review/SKILL.md +131 -0
- package/skills/runtime-exec/SKILL.md +138 -0
- package/skills/search/codebase-narrator/SKILL.md +131 -0
- package/skills/search/codebase-narrator/refs/output-template.md +100 -0
- package/skills/smaht/SKILL.md +72 -0
- package/skills/smaht/discovery/SKILL.md +65 -0
- package/skills/smaht/intent/SKILL.md +89 -0
- package/skills/smaht/propose-skills/SKILL.md +142 -0
- package/skills/smaht/refs/state.md +76 -0
- package/skills/swarm/SKILL.md +132 -0
- package/skills/swarm/refs/fan-out.md +104 -0
- package/skills/swarm/refs/independent-verification.md +86 -0
- package/skills/swarm/refs/receipts-and-evidence.md +69 -0
- package/skills/swarm/refs/recon-synthesis.md +87 -0
- package/skills/swarm/refs/ship-discipline.md +90 -0
- package/skills/wickedizer/SKILL.md +147 -0
- package/skills/wickedizer/refs/artifact-types.md +238 -0
- package/skills/wickedizer/refs/complexity.md +278 -0
- package/skills/wickedizer/refs/de-ai-pass.md +140 -0
- package/skills/wickedizer/refs/failure-modes.md +249 -0
- package/skills/wickedizer/refs/patterns.md +282 -0
- package/skills/wickedizer/refs/review.md +221 -0
- package/skills/wickedizer/refs/structure.md +282 -0
- package/skills/wickedizer/refs/voice-profile.md +125 -0
- package/skills/workflow/SKILL.md +132 -0
- package/skills/workflow/refs/archetype-adjustments.md +205 -0
- package/skills/workflow/refs/evidence.md +58 -0
- package/skills/workflow/refs/integration.md +130 -0
- package/skills/workflow/refs/risk-dimension-signals.md +260 -0
- package/skills/workflow/refs/scoring-rubric.md +49 -0
- package/skills/workflow/refs/signal-keywords.md +176 -0
- package/skills/workflow/refs/specialist-routing-rules.md +159 -0
- package/skills/worktrees/SKILL.md +87 -0
- package/skills/worktrees/refs/recipes.md +96 -0
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
---
|
|
2
|
+
phase_relevance: ["clarify", "design", "review"]
|
|
3
|
+
archetype_relevance: ["*"]
|
|
4
|
+
---
|
|
5
|
+
# WCAG 2.1 Level AA Complete Checklist
|
|
6
|
+
|
|
7
|
+
Comprehensive checklist for WCAG 2.1 Level AA compliance.
|
|
8
|
+
|
|
9
|
+
## Perceivable
|
|
10
|
+
|
|
11
|
+
### 1.1 Text Alternatives
|
|
12
|
+
|
|
13
|
+
**1.1.1 Non-text Content (Level A)**
|
|
14
|
+
- [ ] All images have appropriate `alt` attributes
|
|
15
|
+
- [ ] Decorative images use `alt=""`
|
|
16
|
+
- [ ] Complex images have detailed descriptions
|
|
17
|
+
- [ ] Form controls have associated labels
|
|
18
|
+
- [ ] CAPTCHA has text alternative
|
|
19
|
+
|
|
20
|
+
### 1.2 Time-based Media
|
|
21
|
+
|
|
22
|
+
**1.2.1 Audio-only and Video-only (Level A)**
|
|
23
|
+
- [ ] Audio-only has transcript
|
|
24
|
+
- [ ] Video-only has audio track or text description
|
|
25
|
+
|
|
26
|
+
**1.2.2 Captions (Level A)**
|
|
27
|
+
- [ ] Pre-recorded video has captions
|
|
28
|
+
|
|
29
|
+
**1.2.3 Audio Description or Media Alternative (Level A)**
|
|
30
|
+
- [ ] Pre-recorded video has audio description or transcript
|
|
31
|
+
|
|
32
|
+
**1.2.4 Captions (Live) (Level AA)**
|
|
33
|
+
- [ ] Live video has captions
|
|
34
|
+
|
|
35
|
+
**1.2.5 Audio Description (Level AA)**
|
|
36
|
+
- [ ] Pre-recorded video has audio description
|
|
37
|
+
|
|
38
|
+
### 1.3 Adaptable
|
|
39
|
+
|
|
40
|
+
**1.3.1 Info and Relationships (Level A)**
|
|
41
|
+
- [ ] Semantic HTML used (`<header>`, `<nav>`, `<main>`, etc.)
|
|
42
|
+
- [ ] Heading hierarchy correct (h1 → h2 → h3, no skips)
|
|
43
|
+
- [ ] Lists use `<ul>`, `<ol>`, `<dl>`
|
|
44
|
+
- [ ] Tables use `<th>` for headers
|
|
45
|
+
- [ ] Form labels associated with inputs
|
|
46
|
+
|
|
47
|
+
**1.3.2 Meaningful Sequence (Level A)**
|
|
48
|
+
- [ ] Reading order matches visual order
|
|
49
|
+
- [ ] Tab order is logical
|
|
50
|
+
|
|
51
|
+
**1.3.3 Sensory Characteristics (Level A)**
|
|
52
|
+
- [ ] Instructions don't rely solely on shape, size, location, or sound
|
|
53
|
+
- [ ] "Click the round button" → "Click the Submit button"
|
|
54
|
+
|
|
55
|
+
**1.3.4 Orientation (Level AA)**
|
|
56
|
+
- [ ] Content not restricted to single orientation (portrait/landscape)
|
|
57
|
+
- [ ] Unless specific orientation essential
|
|
58
|
+
|
|
59
|
+
**1.3.5 Identify Input Purpose (Level AA)**
|
|
60
|
+
- [ ] Autocomplete attributes used where appropriate
|
|
61
|
+
- [ ] `autocomplete="email"`, `autocomplete="name"`, etc.
|
|
62
|
+
|
|
63
|
+
### 1.4 Distinguishable
|
|
64
|
+
|
|
65
|
+
**1.4.1 Use of Color (Level A)**
|
|
66
|
+
- [ ] Color not only means of conveying information
|
|
67
|
+
- [ ] Links distinguishable from text (underline, bold, etc.)
|
|
68
|
+
- [ ] Error states have icon + color
|
|
69
|
+
|
|
70
|
+
**1.4.2 Audio Control (Level A)**
|
|
71
|
+
- [ ] Auto-playing audio can be paused/stopped/controlled
|
|
72
|
+
|
|
73
|
+
**1.4.3 Contrast (Minimum) (Level AA)**
|
|
74
|
+
- [ ] Normal text: 4.5:1 contrast ratio
|
|
75
|
+
- [ ] Large text (18pt+ or 14pt+ bold): 3:1 contrast ratio
|
|
76
|
+
- [ ] UI components: 3:1 contrast ratio
|
|
77
|
+
|
|
78
|
+
**1.4.4 Resize Text (Level AA)**
|
|
79
|
+
- [ ] Text can be resized to 200% without loss of functionality
|
|
80
|
+
- [ ] No horizontal scrolling at 200% zoom
|
|
81
|
+
|
|
82
|
+
**1.4.5 Images of Text (Level AA)**
|
|
83
|
+
- [ ] Actual text used instead of images of text
|
|
84
|
+
- [ ] Exceptions: logos, essential presentation
|
|
85
|
+
|
|
86
|
+
**1.4.10 Reflow (Level AA)**
|
|
87
|
+
- [ ] Content reflows at 320px width
|
|
88
|
+
- [ ] No two-dimensional scrolling
|
|
89
|
+
- [ ] Exceptions: complex data tables, maps
|
|
90
|
+
|
|
91
|
+
**1.4.11 Non-text Contrast (Level AA)**
|
|
92
|
+
- [ ] UI components: 3:1 contrast against adjacent colors
|
|
93
|
+
- [ ] Focus indicators: 3:1 contrast
|
|
94
|
+
- [ ] Graphical objects: 3:1 contrast
|
|
95
|
+
|
|
96
|
+
**1.4.12 Text Spacing (Level AA)**
|
|
97
|
+
- [ ] No loss of content when:
|
|
98
|
+
- Line height 1.5x font size
|
|
99
|
+
- Paragraph spacing 2x font size
|
|
100
|
+
- Letter spacing 0.12x font size
|
|
101
|
+
- Word spacing 0.16x font size
|
|
102
|
+
|
|
103
|
+
**1.4.13 Content on Hover or Focus (Level AA)**
|
|
104
|
+
- [ ] Hover/focus content dismissible (Escape)
|
|
105
|
+
- [ ] Hover/focus content hoverable (can move pointer to it)
|
|
106
|
+
- [ ] Hover/focus content persistent (doesn't disappear)
|
|
107
|
+
|
|
108
|
+
## Operable
|
|
109
|
+
|
|
110
|
+
### 2.1 Keyboard Accessible
|
|
111
|
+
|
|
112
|
+
**2.1.1 Keyboard (Level A)**
|
|
113
|
+
- [ ] All functionality available via keyboard
|
|
114
|
+
- [ ] No keyboard-only exceptions
|
|
115
|
+
|
|
116
|
+
**2.1.2 No Keyboard Trap (Level A)**
|
|
117
|
+
- [ ] Focus can move away from all components
|
|
118
|
+
- [ ] Standard navigation (Tab, arrow keys, Escape)
|
|
119
|
+
|
|
120
|
+
**2.1.4 Character Key Shortcuts (Level A)**
|
|
121
|
+
- [ ] Single key shortcuts can be turned off, remapped, or only active on focus
|
|
122
|
+
|
|
123
|
+
### 2.2 Enough Time
|
|
124
|
+
|
|
125
|
+
**2.2.1 Timing Adjustable (Level A)**
|
|
126
|
+
- [ ] Time limits can be turned off, adjusted, or extended
|
|
127
|
+
- [ ] Warning before timeout with option to extend
|
|
128
|
+
|
|
129
|
+
**2.2.2 Pause, Stop, Hide (Level A)**
|
|
130
|
+
- [ ] Moving, blinking, scrolling content can be paused
|
|
131
|
+
- [ ] Auto-updating content can be paused/hidden
|
|
132
|
+
|
|
133
|
+
### 2.3 Seizures and Physical Reactions
|
|
134
|
+
|
|
135
|
+
**2.3.1 Three Flashes or Below Threshold (Level A)**
|
|
136
|
+
- [ ] No content flashes more than 3 times per second
|
|
137
|
+
- [ ] Or below flash threshold
|
|
138
|
+
|
|
139
|
+
### 2.4 Navigable
|
|
140
|
+
|
|
141
|
+
**2.4.1 Bypass Blocks (Level A)**
|
|
142
|
+
- [ ] Skip to main content link
|
|
143
|
+
- [ ] Landmark regions defined
|
|
144
|
+
- [ ] Headings structure content
|
|
145
|
+
|
|
146
|
+
**2.4.2 Page Titled (Level A)**
|
|
147
|
+
- [ ] Every page has descriptive `<title>`
|
|
148
|
+
|
|
149
|
+
**2.4.3 Focus Order (Level A)**
|
|
150
|
+
- [ ] Focus order matches visual order
|
|
151
|
+
- [ ] Logical tab sequence
|
|
152
|
+
|
|
153
|
+
**2.4.4 Link Purpose (Level A)**
|
|
154
|
+
- [ ] Link text describes destination
|
|
155
|
+
- [ ] Avoid "click here", "read more" without context
|
|
156
|
+
|
|
157
|
+
**2.4.5 Multiple Ways (Level AA)**
|
|
158
|
+
- [ ] Multiple ways to find pages (search, sitemap, nav, etc.)
|
|
159
|
+
- [ ] Exception: process steps
|
|
160
|
+
|
|
161
|
+
**2.4.6 Headings and Labels (Level AA)**
|
|
162
|
+
- [ ] Headings describe topic/purpose
|
|
163
|
+
- [ ] Labels describe purpose
|
|
164
|
+
|
|
165
|
+
**2.4.7 Focus Visible (Level AA)**
|
|
166
|
+
- [ ] Focus indicator always visible
|
|
167
|
+
- [ ] Clear visual indication of focused element
|
|
168
|
+
|
|
169
|
+
### 2.5 Input Modalities
|
|
170
|
+
|
|
171
|
+
**2.5.1 Pointer Gestures (Level A)**
|
|
172
|
+
- [ ] Multi-point or path-based gestures have single-pointer alternative
|
|
173
|
+
- [ ] Exception: essential gestures (e.g., drawing)
|
|
174
|
+
|
|
175
|
+
**2.5.2 Pointer Cancellation (Level A)**
|
|
176
|
+
- [ ] Click actions on up event (not down)
|
|
177
|
+
- [ ] Or can be aborted/undone
|
|
178
|
+
|
|
179
|
+
**2.5.3 Label in Name (Level A)**
|
|
180
|
+
- [ ] Accessible name contains visible label text
|
|
181
|
+
- [ ] `aria-label` should include visible text
|
|
182
|
+
|
|
183
|
+
**2.5.4 Motion Actuation (Level A)**
|
|
184
|
+
- [ ] Motion-triggered actions have UI alternative
|
|
185
|
+
- [ ] Can disable motion triggering
|
|
186
|
+
|
|
187
|
+
## Understandable
|
|
188
|
+
|
|
189
|
+
### 3.1 Readable
|
|
190
|
+
|
|
191
|
+
**3.1.1 Language of Page (Level A)**
|
|
192
|
+
- [ ] `<html lang="en">` attribute set
|
|
193
|
+
|
|
194
|
+
**3.1.2 Language of Parts (Level AA)**
|
|
195
|
+
- [ ] Language changes marked with `lang` attribute
|
|
196
|
+
- [ ] `<span lang="es">Hola</span>`
|
|
197
|
+
|
|
198
|
+
### 3.2 Predictable
|
|
199
|
+
|
|
200
|
+
**3.2.1 On Focus (Level A)**
|
|
201
|
+
- [ ] Focus doesn't trigger unexpected context changes
|
|
202
|
+
- [ ] No automatic form submission on focus
|
|
203
|
+
|
|
204
|
+
**3.2.2 On Input (Level A)**
|
|
205
|
+
- [ ] Input doesn't trigger unexpected context changes
|
|
206
|
+
- [ ] Changes happen on button click, not automatic
|
|
207
|
+
|
|
208
|
+
**3.2.3 Consistent Navigation (Level AA)**
|
|
209
|
+
- [ ] Navigation menus in consistent order across pages
|
|
210
|
+
|
|
211
|
+
**3.2.4 Consistent Identification (Level AA)**
|
|
212
|
+
- [ ] Same functionality labeled consistently
|
|
213
|
+
- [ ] Search icon always means search
|
|
214
|
+
|
|
215
|
+
### 3.3 Input Assistance
|
|
216
|
+
|
|
217
|
+
**3.3.1 Error Identification (Level A)**
|
|
218
|
+
- [ ] Errors identified in text
|
|
219
|
+
- [ ] Location of error indicated
|
|
220
|
+
- [ ] Error description provided
|
|
221
|
+
|
|
222
|
+
**3.3.2 Labels or Instructions (Level A)**
|
|
223
|
+
- [ ] Form fields have labels
|
|
224
|
+
- [ ] Instructions provided where needed
|
|
225
|
+
- [ ] Required fields indicated
|
|
226
|
+
|
|
227
|
+
**3.3.3 Error Suggestion (Level AA)**
|
|
228
|
+
- [ ] Error messages suggest corrections
|
|
229
|
+
- [ ] "Invalid email" → "Email must include @"
|
|
230
|
+
|
|
231
|
+
**3.3.4 Error Prevention (Legal, Financial, Data) (Level AA)**
|
|
232
|
+
- [ ] Reversible or reviewable
|
|
233
|
+
- [ ] Data checked and user can correct
|
|
234
|
+
- [ ] Confirmation page for important actions
|
|
235
|
+
|
|
236
|
+
## Robust
|
|
237
|
+
|
|
238
|
+
### 4.1 Compatible
|
|
239
|
+
|
|
240
|
+
**4.1.1 Parsing (Level A)**
|
|
241
|
+
- [ ] No duplicate IDs
|
|
242
|
+
- [ ] Proper nesting of elements
|
|
243
|
+
- [ ] Complete start/end tags
|
|
244
|
+
|
|
245
|
+
**4.1.2 Name, Role, Value (Level A)**
|
|
246
|
+
- [ ] All UI components have accessible name
|
|
247
|
+
- [ ] Role communicated to assistive tech
|
|
248
|
+
- [ ] State/properties/values available
|
|
249
|
+
- [ ] Proper ARIA implementation
|
|
250
|
+
|
|
251
|
+
**4.1.3 Status Messages (Level AA)**
|
|
252
|
+
- [ ] Status messages announced without focus change
|
|
253
|
+
- [ ] Use `role="status"`, `role="alert"`, `aria-live`
|
|
254
|
+
|
|
255
|
+
## Testing Tools
|
|
256
|
+
|
|
257
|
+
- **axe DevTools**: Browser extension
|
|
258
|
+
- **WAVE**: WebAIM's browser extension
|
|
259
|
+
- **Lighthouse**: Chrome DevTools
|
|
260
|
+
- **NVDA**: Free screen reader (Windows)
|
|
261
|
+
- **VoiceOver**: Built-in screen reader (Mac)
|
|
262
|
+
- **Contrast checker**: WebAIM or browser tools
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: analyze
|
|
3
|
+
description: |
|
|
4
|
+
Sentiment analysis, theme extraction, and trend detection from customer feedback.
|
|
5
|
+
|
|
6
|
+
Use when: analyzing customer feedback for sentiment, extracting themes from
|
|
7
|
+
support or survey data, or detecting trends in voice-of-customer signal.
|
|
8
|
+
phase_relevance: ["clarify", "design", "review"]
|
|
9
|
+
archetype_relevance: ["*"]
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Analyze Skill
|
|
13
|
+
|
|
14
|
+
Extract themes, sentiment, and trends from aggregated customer feedback.
|
|
15
|
+
|
|
16
|
+
## When to Use
|
|
17
|
+
|
|
18
|
+
- After running `/wicked-garden:product:listen`
|
|
19
|
+
- User asks "what are customers saying about X"
|
|
20
|
+
- Need to understand sentiment trends
|
|
21
|
+
- Preparing customer insights for product decisions
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# Analyze all recent feedback
|
|
27
|
+
/wicked-garden:product:analyze
|
|
28
|
+
|
|
29
|
+
# Analyze specific theme
|
|
30
|
+
/wicked-garden:product:analyze --theme "mobile experience"
|
|
31
|
+
|
|
32
|
+
# Analyze sentiment only
|
|
33
|
+
/wicked-garden:product:analyze --sentiment negative
|
|
34
|
+
|
|
35
|
+
# Trend analysis
|
|
36
|
+
/wicked-garden:product:analyze --trend "last-quarter"
|
|
37
|
+
|
|
38
|
+
# Segment analysis
|
|
39
|
+
/wicked-garden:product:analyze --segment enterprise
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Analysis Types
|
|
43
|
+
|
|
44
|
+
### 1. Sentiment Analysis
|
|
45
|
+
- Classify: positive/negative/neutral/mixed
|
|
46
|
+
- Score intensity: strong/moderate/mild
|
|
47
|
+
- Indicators: See [refs/sentiment-patterns.md](refs/sentiment-patterns.md)
|
|
48
|
+
|
|
49
|
+
### 2. Theme Extraction
|
|
50
|
+
- Cluster by keywords and co-occurrence
|
|
51
|
+
- Categories: Product, Experience, Business
|
|
52
|
+
- See [refs/algorithms.md](refs/algorithms.md) for clustering logic
|
|
53
|
+
|
|
54
|
+
### 3. Trend Detection
|
|
55
|
+
- Compare time periods (week, month, quarter)
|
|
56
|
+
- Categories: Emerging, Growing, Stable, Declining, Resolved
|
|
57
|
+
- Threshold: >50% = Growing, >30% decline = Declining
|
|
58
|
+
|
|
59
|
+
### 4. Priority Scoring
|
|
60
|
+
```
|
|
61
|
+
Priority = (Frequency × Severity × Urgency) / Total_Feedback
|
|
62
|
+
```
|
|
63
|
+
See [refs/algorithms.md](refs/algorithms.md) for detailed scoring.
|
|
64
|
+
|
|
65
|
+
## Analysis Process
|
|
66
|
+
|
|
67
|
+
1. **Load Feedback Data**:
|
|
68
|
+
```bash
|
|
69
|
+
LOCAL_ROOT=$(sh "${CLAUDE_PLUGIN_ROOT}/scripts/_python.sh" "${CLAUDE_PLUGIN_ROOT}/scripts/resolve_path.py" wicked-garden:product)
|
|
70
|
+
```
|
|
71
|
+
Then use the **Glob** tool to find feedback files:
|
|
72
|
+
```
|
|
73
|
+
Glob(pattern="**/*.md", path="${LOCAL_ROOT}/voice/feedback/")
|
|
74
|
+
```
|
|
75
|
+
Read individual files with the **Read** tool to load recent feedback.
|
|
76
|
+
|
|
77
|
+
2. **Extract Themes**:
|
|
78
|
+
- Keyword frequency analysis
|
|
79
|
+
- Tag co-occurrence
|
|
80
|
+
- Natural language clustering
|
|
81
|
+
|
|
82
|
+
3. **Score Sentiment**:
|
|
83
|
+
- Classify each item (positive/negative/neutral/mixed)
|
|
84
|
+
- Score intensity (strong/moderate/mild)
|
|
85
|
+
- Calculate net sentiment
|
|
86
|
+
|
|
87
|
+
4. **Detect Trends**:
|
|
88
|
+
- Group by time period (week, month, quarter)
|
|
89
|
+
- Compare frequencies
|
|
90
|
+
- Identify direction (up, down, stable)
|
|
91
|
+
|
|
92
|
+
5. **Segment Analysis**:
|
|
93
|
+
- Group by customer segment (if available)
|
|
94
|
+
- Compare sentiment across segments
|
|
95
|
+
- Identify segment-specific themes
|
|
96
|
+
|
|
97
|
+
## Output Format
|
|
98
|
+
|
|
99
|
+
```markdown
|
|
100
|
+
## Analysis: {Topic or Timeframe}
|
|
101
|
+
|
|
102
|
+
### Sentiment Overview
|
|
103
|
+
- Net Sentiment: {+/-N} ({X}% positive, {Y}% negative)
|
|
104
|
+
- Strong Emotions: {count} highly positive, {count} highly negative
|
|
105
|
+
- Trend: {IMPROVING/DECLINING/STABLE} compared to previous period
|
|
106
|
+
|
|
107
|
+
### Top Themes (by priority)
|
|
108
|
+
1. **{Theme}** - Priority: {score}
|
|
109
|
+
- Frequency: {count} mentions ({%} of total)
|
|
110
|
+
- Sentiment: {positive/negative/mixed} ({intensity})
|
|
111
|
+
- Trend: {GROWING/STABLE/DECLINING} ({+/-X}% vs. baseline)
|
|
112
|
+
- Severity: {CRITICAL/HIGH/MEDIUM/LOW}
|
|
113
|
+
- Key quote: "{representative example}"
|
|
114
|
+
|
|
115
|
+
{Top 5 themes}
|
|
116
|
+
|
|
117
|
+
### Emerging Patterns
|
|
118
|
+
- **{New Theme}**: Recently appeared, {count} mentions
|
|
119
|
+
- **{Growing Theme}**: {X}% increase from last period
|
|
120
|
+
|
|
121
|
+
### Segment Insights
|
|
122
|
+
- **{Segment}**: {sentiment + top theme}
|
|
123
|
+
|
|
124
|
+
### Recommendations
|
|
125
|
+
{1-3 actionable recommendations based on analysis}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Technical Implementation
|
|
129
|
+
|
|
130
|
+
See [refs/algorithms.md](refs/algorithms.md) for detailed analysis algorithms.
|
|
131
|
+
|
|
132
|
+
## Integration
|
|
133
|
+
|
|
134
|
+
### With wicked-crew (Auto Context)
|
|
135
|
+
|
|
136
|
+
```python
|
|
137
|
+
# Triggered by product:requirements:started event
|
|
138
|
+
if event.type == "product:requirements:started":
|
|
139
|
+
# Analyze recent feedback for feature context
|
|
140
|
+
analysis = analyze(days=30, tags=["feature-request"])
|
|
141
|
+
emit_signal("voice:analysis:ready", analysis)
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### With native tasks (Link to Tasks)
|
|
145
|
+
|
|
146
|
+
```python
|
|
147
|
+
# Tag themes with related task IDs by reading native tasks from
|
|
148
|
+
# ${CLAUDE_CONFIG_DIR}/tasks/{session_id}/ and matching keywords
|
|
149
|
+
tasks = search_native_tasks(theme.keywords)
|
|
150
|
+
theme.related_tasks = tasks
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Storage
|
|
154
|
+
|
|
155
|
+
Analysis results stored at: `{local_root}/wicked-garden:product/voice/analysis/{theme}/{date}.md` (resolve via `resolve_path.py wicked-garden:product`)
|
|
156
|
+
|
|
157
|
+
## Rules
|
|
158
|
+
|
|
159
|
+
- Limit to top 5 themes (context efficiency)
|
|
160
|
+
- Always include sample size (N=X)
|
|
161
|
+
- Provide confidence levels for trends
|
|
162
|
+
- Include representative quotes
|
|
163
|
+
- Keep output under 800 words
|
|
164
|
+
- Distinguish frequency from severity
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
---
|
|
2
|
+
phase_relevance: ["clarify", "design", "review"]
|
|
3
|
+
archetype_relevance: ["*"]
|
|
4
|
+
---
|
|
5
|
+
# Analysis Algorithms
|
|
6
|
+
|
|
7
|
+
Detailed algorithms for sentiment, theme extraction, and trend detection.
|
|
8
|
+
|
|
9
|
+
## Sentiment Scoring Algorithm
|
|
10
|
+
|
|
11
|
+
```python
|
|
12
|
+
def score_sentiment(text: str) -> tuple[str, str]:
|
|
13
|
+
"""
|
|
14
|
+
Returns (category, intensity)
|
|
15
|
+
category: positive, negative, neutral, mixed
|
|
16
|
+
intensity: strong, moderate, mild
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
# Keyword dictionaries
|
|
20
|
+
positive_strong = ["love", "amazing", "perfect", "brilliant", "excellent"]
|
|
21
|
+
positive_moderate = ["good", "helpful", "useful", "nice", "better"]
|
|
22
|
+
positive_mild = ["ok", "fine", "works", "decent"]
|
|
23
|
+
|
|
24
|
+
negative_strong = ["hate", "terrible", "broken", "unusable", "awful"]
|
|
25
|
+
negative_moderate = ["frustrating", "confusing", "slow", "annoying", "difficult"]
|
|
26
|
+
negative_mild = ["minor", "small issue", "could be better"]
|
|
27
|
+
|
|
28
|
+
# Count occurrences (case-insensitive)
|
|
29
|
+
text_lower = text.lower()
|
|
30
|
+
|
|
31
|
+
pos_strong = sum(1 for word in positive_strong if word in text_lower)
|
|
32
|
+
pos_moderate = sum(1 for word in positive_moderate if word in text_lower)
|
|
33
|
+
pos_mild = sum(1 for word in positive_mild if word in text_lower)
|
|
34
|
+
|
|
35
|
+
neg_strong = sum(1 for word in negative_strong if word in text_lower)
|
|
36
|
+
neg_moderate = sum(1 for word in negative_moderate if word in text_lower)
|
|
37
|
+
neg_mild = sum(1 for word in negative_mild if word in text_lower)
|
|
38
|
+
|
|
39
|
+
# Score calculation
|
|
40
|
+
pos_score = (pos_strong * 3) + (pos_moderate * 2) + (pos_mild * 1)
|
|
41
|
+
neg_score = (neg_strong * 3) + (neg_moderate * 2) + (neg_mild * 1)
|
|
42
|
+
|
|
43
|
+
# Intensity modifiers
|
|
44
|
+
if "!!!" in text or "???" in text:
|
|
45
|
+
if pos_score > neg_score:
|
|
46
|
+
pos_score *= 1.5
|
|
47
|
+
else:
|
|
48
|
+
neg_score *= 1.5
|
|
49
|
+
|
|
50
|
+
# CAPS detection
|
|
51
|
+
caps_ratio = sum(1 for c in text if c.isupper()) / max(len(text), 1)
|
|
52
|
+
if caps_ratio > 0.3:
|
|
53
|
+
neg_score *= 1.3 # CAPS usually indicates frustration
|
|
54
|
+
|
|
55
|
+
# Determine category
|
|
56
|
+
if pos_score > neg_score * 2:
|
|
57
|
+
category = "positive"
|
|
58
|
+
intensity = "strong" if pos_strong > 0 else "moderate" if pos_moderate > 0 else "mild"
|
|
59
|
+
elif neg_score > pos_score * 2:
|
|
60
|
+
category = "negative"
|
|
61
|
+
intensity = "strong" if neg_strong > 0 else "moderate" if neg_moderate > 0 else "mild"
|
|
62
|
+
elif abs(pos_score - neg_score) < 2:
|
|
63
|
+
category = "mixed"
|
|
64
|
+
intensity = "moderate"
|
|
65
|
+
else:
|
|
66
|
+
category = "neutral"
|
|
67
|
+
intensity = "mild"
|
|
68
|
+
|
|
69
|
+
return category, intensity
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Theme Extraction Algorithm
|
|
73
|
+
|
|
74
|
+
```python
|
|
75
|
+
def extract_themes(feedback_items: list[dict]) -> list[dict]:
|
|
76
|
+
"""
|
|
77
|
+
Cluster feedback into themes using keyword frequency and co-occurrence.
|
|
78
|
+
Returns list of themes sorted by priority.
|
|
79
|
+
"""
|
|
80
|
+
|
|
81
|
+
# 1. Keyword extraction
|
|
82
|
+
keywords = {}
|
|
83
|
+
for item in feedback_items:
|
|
84
|
+
words = extract_keywords(item['content'])
|
|
85
|
+
for word in words:
|
|
86
|
+
keywords[word] = keywords.get(word, 0) + 1
|
|
87
|
+
|
|
88
|
+
# 2. Identify theme clusters
|
|
89
|
+
# Keywords that frequently appear together form themes
|
|
90
|
+
themes = cluster_by_cooccurrence(keywords, feedback_items)
|
|
91
|
+
|
|
92
|
+
# 3. Score themes by priority
|
|
93
|
+
for theme in themes:
|
|
94
|
+
theme['priority'] = calculate_priority(
|
|
95
|
+
frequency=theme['count'],
|
|
96
|
+
severity=theme['avg_severity'],
|
|
97
|
+
urgency=theme['avg_urgency'],
|
|
98
|
+
total=len(feedback_items)
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
# 4. Sort by priority
|
|
102
|
+
return sorted(themes, key=lambda t: t['priority'], reverse=True)
|
|
103
|
+
|
|
104
|
+
def extract_keywords(text: str) -> list[str]:
|
|
105
|
+
"""Extract meaningful keywords, excluding stopwords."""
|
|
106
|
+
stopwords = {"the", "a", "an", "and", "or", "but", "in", "on", "at", "to"}
|
|
107
|
+
words = text.lower().split()
|
|
108
|
+
return [w for w in words if len(w) > 3 and w not in stopwords]
|
|
109
|
+
|
|
110
|
+
def cluster_by_cooccurrence(keywords: dict, items: list) -> list[dict]:
|
|
111
|
+
"""Find keywords that frequently appear together."""
|
|
112
|
+
# Use Jaccard similarity for clustering
|
|
113
|
+
# Keywords with >50% co-occurrence likely form a theme
|
|
114
|
+
pass # Implementation details
|
|
115
|
+
|
|
116
|
+
def calculate_priority(frequency: int, severity: float, urgency: float, total: int) -> float:
|
|
117
|
+
"""
|
|
118
|
+
Priority = (Frequency_Ratio × Severity × Urgency)
|
|
119
|
+
|
|
120
|
+
frequency_ratio = frequency / total
|
|
121
|
+
severity = 1-5 (derived from sentiment intensity and keywords)
|
|
122
|
+
urgency = 1-5 (derived from recency and churn signals)
|
|
123
|
+
"""
|
|
124
|
+
freq_ratio = frequency / max(total, 1)
|
|
125
|
+
return freq_ratio * severity * urgency
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Trend Detection Algorithm
|
|
129
|
+
|
|
130
|
+
```python
|
|
131
|
+
def detect_trends(theme: str, timeframes: list[str]) -> dict:
|
|
132
|
+
"""
|
|
133
|
+
Detect if theme is emerging, growing, stable, or declining.
|
|
134
|
+
|
|
135
|
+
Args:
|
|
136
|
+
theme: Theme keyword(s)
|
|
137
|
+
timeframes: List of time periods (e.g., ["2025-12", "2026-01"])
|
|
138
|
+
|
|
139
|
+
Returns:
|
|
140
|
+
{
|
|
141
|
+
"trend": "GROWING" | "STABLE" | "DECLINING" | "EMERGING",
|
|
142
|
+
"change": "+45%",
|
|
143
|
+
"baseline": 10,
|
|
144
|
+
"current": 15
|
|
145
|
+
}
|
|
146
|
+
"""
|
|
147
|
+
|
|
148
|
+
# Count mentions per timeframe
|
|
149
|
+
counts = []
|
|
150
|
+
for period in timeframes:
|
|
151
|
+
count = count_theme_mentions(theme, period)
|
|
152
|
+
counts.append(count)
|
|
153
|
+
|
|
154
|
+
# Detect pattern
|
|
155
|
+
if len(counts) < 2:
|
|
156
|
+
return {"trend": "INSUFFICIENT_DATA"}
|
|
157
|
+
|
|
158
|
+
baseline = counts[-2] # Previous period
|
|
159
|
+
current = counts[-1] # Current period
|
|
160
|
+
|
|
161
|
+
# Calculate change
|
|
162
|
+
if baseline == 0:
|
|
163
|
+
if current > 5:
|
|
164
|
+
return {
|
|
165
|
+
"trend": "EMERGING",
|
|
166
|
+
"change": "new",
|
|
167
|
+
"baseline": 0,
|
|
168
|
+
"current": current
|
|
169
|
+
}
|
|
170
|
+
else:
|
|
171
|
+
return {"trend": "INSUFFICIENT_DATA"}
|
|
172
|
+
|
|
173
|
+
change_pct = ((current - baseline) / baseline) * 100
|
|
174
|
+
|
|
175
|
+
if change_pct > 50:
|
|
176
|
+
trend = "GROWING"
|
|
177
|
+
elif change_pct < -30:
|
|
178
|
+
trend = "DECLINING"
|
|
179
|
+
elif abs(change_pct) <= 20:
|
|
180
|
+
trend = "STABLE"
|
|
181
|
+
else:
|
|
182
|
+
trend = "STABLE"
|
|
183
|
+
|
|
184
|
+
return {
|
|
185
|
+
"trend": trend,
|
|
186
|
+
"change": f"{change_pct:+.0f}%",
|
|
187
|
+
"baseline": baseline,
|
|
188
|
+
"current": current
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Segment Comparison Algorithm
|
|
193
|
+
|
|
194
|
+
```python
|
|
195
|
+
def compare_segments(theme: str, segments: list[str]) -> dict:
|
|
196
|
+
"""
|
|
197
|
+
Compare how different customer segments feel about a theme.
|
|
198
|
+
|
|
199
|
+
Returns:
|
|
200
|
+
{
|
|
201
|
+
"enterprise": {"sentiment": "negative", "count": 25},
|
|
202
|
+
"smb": {"sentiment": "positive", "count": 12},
|
|
203
|
+
"insights": "Enterprise users struggling with feature X"
|
|
204
|
+
}
|
|
205
|
+
"""
|
|
206
|
+
|
|
207
|
+
results = {}
|
|
208
|
+
for segment in segments:
|
|
209
|
+
feedback = filter_by_segment(theme, segment)
|
|
210
|
+
|
|
211
|
+
sentiment_scores = [score_sentiment(f['content']) for f in feedback]
|
|
212
|
+
avg_sentiment = aggregate_sentiment(sentiment_scores)
|
|
213
|
+
|
|
214
|
+
results[segment] = {
|
|
215
|
+
"sentiment": avg_sentiment,
|
|
216
|
+
"count": len(feedback),
|
|
217
|
+
"top_keywords": extract_top_keywords(feedback, limit=3)
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
# Generate insights from differences
|
|
221
|
+
insights = generate_segment_insights(results)
|
|
222
|
+
|
|
223
|
+
return {**results, "insights": insights}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## Implementation Notes
|
|
227
|
+
|
|
228
|
+
For actual implementation, prefer:
|
|
229
|
+
- Lightweight text processing (no heavy NLP libraries)
|
|
230
|
+
- Regex-based keyword extraction
|
|
231
|
+
- Simple frequency counting
|
|
232
|
+
- File-based storage (no database required)
|
|
233
|
+
|
|
234
|
+
## Performance
|
|
235
|
+
|
|
236
|
+
- Target: <5s for 1000 feedback items
|
|
237
|
+
- Cache theme extractions for 1 hour
|
|
238
|
+
- Incremental updates (don't reprocess all feedback)
|