claude-flow-novice 2.9.1 → 2.10.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/agents/cfn-dev-team/CLAUDE.md +1086 -0
- package/.claude/agents/cfn-dev-team/README.md +116 -0
- package/.claude/agents/cfn-dev-team/architecture/api-designer-persona.md +149 -0
- package/.claude/agents/cfn-dev-team/architecture/base-template-generator.md +196 -0
- package/.claude/agents/cfn-dev-team/architecture/goal-planner.md +183 -0
- package/.claude/agents/cfn-dev-team/architecture/planner.md +182 -0
- package/.claude/agents/cfn-dev-team/architecture/system-architect.md +162 -0
- package/.claude/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +540 -0
- package/.claude/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +20 -14
- package/.claude/agents/cfn-dev-team/coordinators/consensus-builder.md +167 -0
- package/.claude/agents/cfn-dev-team/dev-ops/devops-engineer.md +148 -0
- package/.claude/agents/cfn-dev-team/dev-ops/github-commit-agent.md +118 -0
- package/.claude/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +540 -0
- package/.claude/agents/cfn-dev-team/developers/backend-dev.md +20 -0
- package/.claude/agents/cfn-dev-team/developers/data/data-engineer.md +585 -0
- package/.claude/agents/cfn-dev-team/developers/database/database-architect.md +276 -0
- package/.claude/agents/cfn-dev-team/developers/dev-backend-api.md +147 -0
- package/.claude/agents/cfn-dev-team/developers/frontend/mobile-dev.md +218 -0
- package/.claude/agents/cfn-dev-team/developers/{react-frontend-engineer.md → frontend/react-frontend-engineer.md} +53 -5
- package/.claude/agents/cfn-dev-team/developers/frontend/spec-mobile-react-native.md +199 -0
- package/.claude/agents/cfn-dev-team/developers/graphql-specialist.md +615 -0
- package/.claude/agents/cfn-dev-team/developers/rust-developer.md +174 -0
- package/.claude/agents/cfn-dev-team/documentation/README-VALIDATION.md +243 -0
- package/.claude/agents/cfn-dev-team/documentation/agent-type-guidelines.md +465 -0
- package/.claude/agents/cfn-dev-team/documentation/api-docs.md +103 -0
- package/.claude/agents/cfn-dev-team/documentation/docs-api-openapi.md +98 -0
- package/.claude/agents/cfn-dev-team/documentation/pseudocode.md +159 -0
- package/.claude/agents/cfn-dev-team/documentation/specification.md +157 -0
- package/.claude/agents/cfn-dev-team/product-owners/accessibility-advocate-persona.md +109 -0
- package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/cto-agent.md +8 -6
- package/.claude/agents/cfn-dev-team/product-owners/power-user-persona.md +190 -0
- package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/product-owner.md +85 -59
- package/.claude/agents/cfn-dev-team/reviewers/quality/analyze-code-quality.md +141 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/code-analyzer.md +200 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/cyclomatic-complexity-reducer.md +321 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +238 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +101 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/quality-metrics.md +375 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/security-specialist.md +193 -0
- package/.claude/agents/cfn-dev-team/reviewers/reviewer.md +39 -0
- package/.claude/agents/cfn-dev-team/testers/interaction-tester.md +31 -0
- package/.claude/agents/cfn-dev-team/testers/load-testing-specialist.md +469 -0
- package/.claude/agents/cfn-dev-team/testers/playwright-tester.md +24 -0
- package/.claude/agents/cfn-dev-team/testers/tester.md +20 -0
- package/.claude/agents/cfn-dev-team/utility/agent-builder.md +151 -0
- package/.claude/agents/cfn-dev-team/utility/analyst.md +178 -0
- package/.claude/agents/cfn-dev-team/utility/claude-code-expert.md +1043 -0
- package/.claude/agents/cfn-dev-team/utility/code-booster.md +139 -0
- package/.claude/agents/cfn-dev-team/utility/context-curator.md +99 -0
- package/.claude/agents/cfn-dev-team/{developers → utility}/researcher.md +6 -4
- package/.claude/commands/cfn/CFN_LOOP_FRONTEND.md +741 -0
- package/.claude/commands/cfn/CFN_LOOP_TASK_MODE.md +353 -0
- package/.claude/commands/cfn/cfn-loop-frontend.md +555 -0
- package/.claude/commands/cfn/cfn-loop.md +168 -7
- package/{CFN-CLAUDE.md → .claude/root-claude-distribute/CFN-CLAUDE.md} +23 -3
- package/.claude/skills/cfn-ace-system/SKILL.md +364 -0
- package/.claude/skills/cfn-ace-system/add-bullet.sh +145 -0
- package/.claude/skills/cfn-ace-system/analyze-anti-pattern-effectiveness.sh +56 -0
- package/.claude/skills/cfn-ace-system/classify-task.sh +18 -0
- package/.claude/skills/cfn-ace-system/export-ace-metrics.sh +48 -0
- package/.claude/skills/cfn-ace-system/extract-tags.sh +385 -0
- package/.claude/skills/cfn-ace-system/format-negative-context.sh +180 -0
- package/.claude/skills/cfn-ace-system/init-indexes.sql +160 -0
- package/.claude/skills/cfn-ace-system/invoke-context-curate.sh +192 -0
- package/.claude/skills/cfn-ace-system/invoke-context-inject.sh +361 -0
- package/.claude/skills/cfn-ace-system/invoke-context-query.sh +139 -0
- package/.claude/skills/cfn-ace-system/invoke-context-reflect.sh +343 -0
- package/.claude/skills/cfn-ace-system/invoke-context-stats.sh +227 -0
- package/.claude/skills/cfn-ace-system/log-merge.sh +67 -0
- package/.claude/skills/cfn-ace-system/monitor-injection-performance.sh +138 -0
- package/.claude/skills/cfn-ace-system/optimize-injection-pipeline.sh +169 -0
- package/.claude/skills/cfn-ace-system/query-anti-patterns.sh +276 -0
- package/.claude/skills/cfn-ace-system/query-contexts.sh +150 -0
- package/.claude/skills/cfn-ace-system/query-reflections.sh +35 -0
- package/.claude/skills/cfn-ace-system/schema/001-create-context-reflections.sql +237 -0
- package/.claude/skills/cfn-ace-system/schema/README.md +723 -0
- package/.claude/skills/cfn-ace-system/schema/SCHEMA_DESIGN_SUMMARY.md +564 -0
- package/.claude/skills/cfn-ace-system/schema/populate-test-data-simple.sh +62 -0
- package/.claude/skills/cfn-ace-system/schema/populate-test-data.sh +247 -0
- package/.claude/skills/cfn-ace-system/schema/run-migration.sh +231 -0
- package/.claude/skills/cfn-ace-system/schema/validate-schema.sql +280 -0
- package/.claude/skills/cfn-ace-system/score-relevance-adapter.sh +138 -0
- package/.claude/skills/cfn-ace-system/score-relevance.sh +253 -0
- package/.claude/skills/cfn-ace-system/sprint-7-lessons.json +46 -0
- package/.claude/skills/cfn-ace-system/store-reflection.sh +46 -0
- package/.claude/skills/cfn-ace-system/test-ace-skill.sh +312 -0
- package/.claude/skills/cfn-ace-system/track-ab-test.sh +42 -0
- package/.claude/skills/cfn-ace-system/update-reflection.sh +41 -0
- package/.claude/skills/cfn-agent-discovery/SKILL.md +40 -0
- package/.claude/skills/cfn-agent-discovery/agents-registry-clean.json +0 -0
- package/.claude/skills/cfn-agent-discovery/agents-registry-fixed.json +19 -0
- package/.claude/skills/cfn-agent-discovery/agents-registry.json +718 -0
- package/.claude/skills/cfn-agent-discovery/discover-agents.py +184 -0
- package/.claude/skills/cfn-agent-discovery/discover-agents.sh +87 -0
- package/.claude/skills/cfn-agent-discovery/invoke-registry.sh +11 -0
- package/.claude/skills/cfn-agent-discovery/temp_script.py +0 -0
- package/.claude/skills/cfn-agent-execution/execute-agent.sh +126 -0
- package/.claude/skills/cfn-agent-output-processing/SKILL.md +359 -0
- package/.claude/skills/cfn-agent-selector/SKILL.md +90 -0
- package/.claude/skills/cfn-agent-selector/select-agents.sh +112 -0
- package/.claude/skills/cfn-agent-spawning/SKILL.md +135 -0
- package/.claude/skills/cfn-agent-spawning/agent-selection-guide.md +814 -0
- package/.claude/skills/cfn-agent-spawning/check-dependencies.sh +30 -0
- package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +263 -0
- package/.claude/skills/cfn-agent-spawning/spawn-templates.sh +613 -0
- package/.claude/skills/cfn-analytics/description-refinement-guide.md +164 -0
- package/.claude/skills/cfn-analytics/log-skill-invocation.js +122 -0
- package/.claude/skills/cfn-analytics/run-production-criteria-tests.sh +126 -0
- package/.claude/skills/cfn-analytics/skill-analytics-dashboard.js +113 -0
- package/.claude/skills/cfn-analytics/skill-invocation-hook.sh +28 -0
- package/.claude/skills/cfn-analytics/skill-invocations.sql +58 -0
- package/.claude/skills/cfn-analytics/test-corpus.json +32 -0
- package/.claude/skills/cfn-analytics/test-data-generator.js +115 -0
- package/.claude/skills/cfn-analytics/test-manual-override-rate.js +285 -0
- package/.claude/skills/cfn-analytics/validate-skill-selection.js +188 -0
- package/.claude/skills/cfn-config-management/SKILL.md +34 -0
- package/.claude/skills/cfn-config-management/check-dependencies.sh +56 -0
- package/.claude/skills/cfn-config-management/config.json +32 -0
- package/.claude/skills/cfn-config-management/manage-config.sh +113 -0
- package/.claude/skills/cfn-event-bus/SKILL.md +412 -0
- package/.claude/skills/cfn-event-bus/config.json +111 -0
- package/.claude/skills/cfn-event-bus/eventbus-wrapper.cjs +69 -0
- package/.claude/skills/cfn-event-bus/invoke-event-publish.sh +147 -0
- package/.claude/skills/cfn-event-bus/invoke-event-subscribe.sh +171 -0
- package/.claude/skills/cfn-event-bus/invoke-lifecycle-track.sh +201 -0
- package/.claude/skills/cfn-event-bus/test-event-bus.sh +280 -0
- package/.claude/skills/cfn-fleet-manager/SKILL.md +412 -0
- package/.claude/skills/cfn-fleet-manager/config.json +60 -0
- package/.claude/skills/cfn-fleet-manager/invoke-fleet-allocate.sh +182 -0
- package/.claude/skills/cfn-fleet-manager/invoke-fleet-balance.sh +239 -0
- package/.claude/skills/cfn-fleet-manager/invoke-fleet-metrics.sh +193 -0
- package/.claude/skills/cfn-fleet-manager/invoke-fleet-register.sh +124 -0
- package/.claude/skills/cfn-fleet-manager/test-fleet-manager.sh +345 -0
- package/.claude/skills/cfn-hook-pipeline/SKILL.md +148 -0
- package/.claude/skills/cfn-hook-pipeline/auto-resolve.sh +66 -0
- package/.claude/skills/cfn-hook-pipeline/check-dependencies.sh +40 -0
- package/.claude/skills/cfn-hook-pipeline/feedback-resolver.sh +452 -0
- package/.claude/skills/cfn-hook-pipeline/post-edit-handler.sh +154 -0
- package/.claude/skills/cfn-hook-pipeline/security-scan.json +60 -0
- package/.claude/skills/cfn-hook-pipeline/security-scanner.sh +121 -0
- package/.claude/skills/cfn-hook-pipeline/test-root-warning-resolution.sh +148 -0
- package/.claude/skills/cfn-hybrid-routing/SKILL.md +46 -0
- package/.claude/skills/cfn-hybrid-routing/check-dependencies.sh +52 -0
- package/.claude/skills/cfn-hybrid-routing/config.json +26 -0
- package/.claude/skills/cfn-hybrid-routing/spawn-worker.sh +44 -0
- package/.claude/skills/cfn-loop-orchestration/SKILL.md +299 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +228 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/consensus.sh +84 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/context-injection.sh +142 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/context-lookup.sh +359 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +71 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +90 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +87 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/spawn-agents.sh +271 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +51 -0
- package/.claude/skills/cfn-loop-orchestration/inject-loop-context.sh +41 -0
- package/.claude/skills/cfn-loop-orchestration/monitor-execution.sh +156 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +884 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +840 -0
- package/.claude/skills/cfn-loop-orchestration/security_utils.sh +99 -0
- package/.claude/skills/cfn-loop-orchestration/test-cfn-orchestration.sh +281 -0
- package/.claude/skills/cfn-loop-orchestration/test-edge-cases.sh +188 -0
- package/.claude/skills/cfn-loop-validation/SKILL.md +353 -0
- package/.claude/skills/cfn-loop-validation/check-dependencies.sh +31 -0
- package/.claude/skills/cfn-loop-validation/config.json +161 -0
- package/.claude/skills/cfn-loop-validation/consensus-calculator.js +477 -0
- package/.claude/skills/cfn-loop-validation/evidence-chain.sql +163 -0
- package/.claude/skills/cfn-loop-validation/examples/README.md +453 -0
- package/.claude/skills/cfn-loop-validation/examples/coordinator-full-cfn-loop.sh +234 -0
- package/.claude/skills/cfn-loop-validation/examples/coordinator-loop2-consensus.sh +132 -0
- package/.claude/skills/cfn-loop-validation/examples/coordinator-loop3-gate.sh +115 -0
- package/.claude/skills/cfn-loop-validation/examples/coordinator-redis-integration.sh +186 -0
- package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -0
- package/.claude/skills/cfn-loop-validation/validate-iteration.sh +134 -0
- package/.claude/skills/cfn-process-lifecycle/SKILL.md +39 -0
- package/.claude/skills/cfn-process-lifecycle/check-dependencies.sh +58 -0
- package/.claude/skills/cfn-process-lifecycle/config.json +39 -0
- package/.claude/skills/cfn-process-lifecycle/process-manager.sh +144 -0
- package/.claude/skills/cfn-product-owner-decision/SKILL.md +332 -0
- package/.claude/skills/cfn-product-owner-decision/execute-decision.sh +176 -0
- package/.claude/skills/cfn-product-owner-decision/parse-decision.sh +66 -0
- package/.claude/skills/cfn-product-owner-decision/validate-deliverables.sh +82 -0
- package/.claude/skills/cfn-redis-coordination/AGENT_LOGGING.md +280 -0
- package/.claude/skills/cfn-redis-coordination/BZPOPMIN_FIX_SUMMARY.md +209 -0
- package/.claude/skills/cfn-redis-coordination/HEARTBEAT.md +57 -0
- package/.claude/skills/cfn-redis-coordination/HEARTBEAT_MONITORING.md +267 -0
- package/.claude/skills/cfn-redis-coordination/LOGGING.md +260 -0
- package/.claude/skills/cfn-redis-coordination/SECURITY_REVIEW.md +25 -0
- package/.claude/skills/cfn-redis-coordination/SHUTDOWN_HANDLING.md +164 -0
- package/.claude/skills/cfn-redis-coordination/SKILL.md +720 -0
- package/.claude/skills/cfn-redis-coordination/agent-log.sh +124 -0
- package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +75 -0
- package/.claude/skills/cfn-redis-coordination/analyze-task-complexity.sh +277 -0
- package/.claude/skills/cfn-redis-coordination/cancel-swarm.sh +221 -0
- package/.claude/skills/cfn-redis-coordination/cfn-loop-exec.sh +468 -0
- package/.claude/skills/cfn-redis-coordination/cfn-loop-relaunch.sh +29 -0
- package/.claude/skills/cfn-redis-coordination/check-dependencies.sh +32 -0
- package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +179 -0
- package/.claude/skills/cfn-redis-coordination/collect-results.sh +75 -0
- package/.claude/skills/cfn-redis-coordination/complete-swarm.sh +75 -0
- package/.claude/skills/cfn-redis-coordination/config.json +61 -0
- package/.claude/skills/cfn-redis-coordination/data/cfn-loop.db +0 -0
- package/.claude/skills/cfn-redis-coordination/demos/phase4-wake-queue-test-report.md +82 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-bzpopmin-fix.sh +274 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +276 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-dlq.sh +129 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-iteration-feedback.sh +320 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-orchestrator.sh +249 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4-unix.sh +148 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4.sh +163 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake.sh +138 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quick-fix.sh +81 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-absolute.sh +45 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-fallback.sh +68 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-percentage.sh +56 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-with-retry.sh +81 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum.sh +57 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-shutdown-handling.sh +187 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-shutdown.sh +160 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-utils-unix.sh +97 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-utils.sh +97 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-waiting-mode.sh +59 -0
- package/.claude/skills/cfn-redis-coordination/examples/README.md +73 -0
- package/.claude/skills/cfn-redis-coordination/examples/grafana-dashboard.json +352 -0
- package/.claude/skills/cfn-redis-coordination/examples/hierarchical-pattern.sh +127 -0
- package/.claude/skills/cfn-redis-coordination/examples/mesh-pattern.sh +171 -0
- package/.claude/skills/cfn-redis-coordination/examples/timeout-handling.sh +227 -0
- package/.claude/skills/cfn-redis-coordination/examples/waiting-mode-pattern.sh +239 -0
- package/.claude/skills/cfn-redis-coordination/execute-product-owner-decision.sh +258 -0
- package/.claude/skills/cfn-redis-coordination/get-agent-timeout.sh +177 -0
- package/.claude/skills/cfn-redis-coordination/heartbeat-functions.sh +137 -0
- package/.claude/skills/cfn-redis-coordination/heartbeat-protocol.md +106 -0
- package/.claude/skills/cfn-redis-coordination/heartbeat.sh +126 -0
- package/.claude/skills/cfn-redis-coordination/init-swarm.sh +148 -0
- package/.claude/skills/cfn-redis-coordination/invoke-redis-pattern.sh +220 -0
- package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +283 -0
- package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh.backup-p7 +423 -0
- package/.claude/skills/cfn-redis-coordination/list-active-swarms.sh +147 -0
- package/.claude/skills/cfn-redis-coordination/log-event.sh +109 -0
- package/.claude/skills/cfn-redis-coordination/metrics-export.sh +674 -0
- package/.claude/skills/cfn-redis-coordination/metrics-schema.json +66 -0
- package/.claude/skills/cfn-redis-coordination/metrics-storage.md +31 -0
- package/.claude/skills/cfn-redis-coordination/monitor-cfn-violations.sh +391 -0
- package/.claude/skills/cfn-redis-coordination/monitor-heartbeats.sh +101 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop-v3.sh +141 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh +31 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup +38 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-1761167675 +1672 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-p5 +1604 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase1 +1550 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase2 +1621 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase3 +1621 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.broken +1627 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.corrupted +80 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.deprecated +1864 -0
- package/.claude/skills/cfn-redis-coordination/priority-wake-mechanism.md +75 -0
- package/.claude/skills/cfn-redis-coordination/priority_wake.py +134 -0
- package/.claude/skills/cfn-redis-coordination/query-dlq.sh +162 -0
- package/.claude/skills/cfn-redis-coordination/query-logs.sh +103 -0
- package/.claude/skills/cfn-redis-coordination/redis-pattern.sh +619 -0
- package/.claude/skills/cfn-redis-coordination/retrieve-context.sh +58 -0
- package/.claude/skills/cfn-redis-coordination/select-specialist-agent.sh +371 -0
- package/.claude/skills/cfn-redis-coordination/semantic-match-tfidf.py +252 -0
- package/.claude/skills/cfn-redis-coordination/send-heartbeat.sh +165 -0
- package/.claude/skills/cfn-redis-coordination/signal.sh +38 -0
- package/.claude/skills/cfn-redis-coordination/store-context.sh +86 -0
- package/.claude/skills/cfn-redis-coordination/store-epic-context.sh +123 -0
- package/.claude/skills/cfn-redis-coordination/test-context-injection.sh +354 -0
- package/.claude/skills/cfn-redis-coordination/test-timeout-enforcement.sh +513 -0
- package/.claude/skills/cfn-redis-coordination/tests/convert-line-endings.sh +15 -0
- package/.claude/skills/cfn-redis-coordination/tests/dlq-functionality-test.sh +102 -0
- package/.claude/skills/cfn-redis-coordination/tests/edge-cases-test.sh +99 -0
- package/.claude/skills/cfn-redis-coordination/tests/integration-test.sh +170 -0
- package/.claude/skills/cfn-redis-coordination/tests/retry-mechanism-test.sh +82 -0
- package/.claude/skills/cfn-redis-coordination/tests/run-test-suite.sh +92 -0
- package/.claude/skills/cfn-redis-coordination/tests/run-tests.sh +4 -0
- package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-monitoring.sh +418 -0
- package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-simple.sh +124 -0
- package/.claude/skills/cfn-redis-coordination/tests/test-primitives.sh +166 -0
- package/.claude/skills/cfn-redis-coordination/tests/test-utils.sh +54 -0
- package/.claude/skills/cfn-redis-coordination/tests/test_coordination_primitives.sh.deprecated +20 -0
- package/.claude/skills/cfn-redis-coordination/tests/test_utils.sh +49 -0
- package/.claude/skills/cfn-redis-coordination/v2_modularization/core_orchestration.sh +76 -0
- package/.claude/skills/cfn-redis-coordination/validate-parameters.sh +492 -0
- package/.claude/skills/cfn-sqlite-memory/IMPLEMENTATION_REPORT.md +393 -0
- package/.claude/skills/cfn-sqlite-memory/QUICK_REFERENCE.md +204 -0
- package/.claude/skills/cfn-sqlite-memory/SKILL.md +415 -0
- package/.claude/skills/cfn-sqlite-memory/acl-queries.sql +452 -0
- package/.claude/skills/cfn-sqlite-memory/check-dependencies.sh +36 -0
- package/.claude/skills/cfn-sqlite-memory/config.json +45 -0
- package/.claude/skills/cfn-sqlite-memory/memory-cli.sh +88 -0
- package/.claude/skills/cfn-sqlite-memory/test-state-persistence.js +187 -0
- package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +274 -0
- package/.claude/skills/cfn-test-execution/SKILL.md +128 -0
- package/.claude/skills/cfn-test-execution/check-dependencies.sh +36 -0
- package/.claude/skills/cfn-test-execution/test-cache-reader.sh +134 -0
- package/.claude/skills/cfn-test-execution/test-concurrent-conflicts.sh +115 -0
- package/.claude/skills/cfn-test-execution/test-coordinator-pattern.sh +109 -0
- package/.claude/skills/cfn-transparency-middleware/Cargo.toml +18 -0
- package/.claude/skills/cfn-transparency-middleware/SECURITY.md +41 -0
- package/.claude/skills/cfn-transparency-middleware/SKILL.md +91 -0
- package/.claude/skills/cfn-transparency-middleware/TEST_RESULTS.md +174 -0
- package/.claude/skills/cfn-transparency-middleware/config.json +31 -0
- package/.claude/skills/cfn-transparency-middleware/examples/basic-usage.ts +39 -0
- package/.claude/skills/cfn-transparency-middleware/examples/batch-processing.ts +52 -0
- package/.claude/skills/cfn-transparency-middleware/examples/custom-filtering.ts +61 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-filter.sh +98 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-init.sh +224 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-level.sh +333 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-metrics.sh +345 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-observe.sh +140 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-stop.sh +235 -0
- package/.claude/skills/cfn-transparency-middleware/memory_query.rs +85 -0
- package/.claude/skills/cfn-transparency-middleware/memory_repository.rs +140 -0
- package/.claude/skills/cfn-transparency-middleware/memory_schema.rs +64 -0
- package/.claude/skills/cfn-transparency-middleware/middleware-config.sh +29 -0
- package/.claude/skills/cfn-transparency-middleware/performance-benchmark.sh +79 -0
- package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +406 -0
- package/.claude/skills/cfn-transparency-middleware/test-integration.sh +162 -0
- package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh +368 -0
- package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh.unix +126 -0
- package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +93 -0
- package/.claude/skills/cfn-transparency-middleware/wrap-agent.sh +132 -0
- package/.claude/skills/cfn-webapp-testing/SCREENSHOT_NAMING_CONVENTION.md +547 -0
- package/.claude/skills/cfn-webapp-testing/SKILL.md +877 -0
- package/.claude/skills/cfn-webapp-testing/capture-screenshot.sh +238 -0
- package/.claude/skills/cfn-webapp-testing/cfn-loop-integration.sh +265 -0
- package/.claude/skills/cfn-webapp-testing/compare-screenshots.sh +199 -0
- package/.claude/skills/cfn-webapp-testing/init-storage.sh +150 -0
- package/.claude/skills/cfn-webapp-testing/set-baseline.sh +196 -0
- package/.claude/skills/cfn-webapp-testing/test-webapp-testing.sh +233 -0
- package/README.md +51 -2
- package/dist/ace/ace-reflector.js +109 -10
- package/dist/ace/ace-reflector.js.map +1 -1
- package/dist/cli/agent-executor.js +1 -1
- package/dist/cli/agent-executor.js.map +1 -1
- package/package.json +43 -7
- package/readme/README.md +15 -4
- package/scripts/init-project.js +39 -2
- package/scripts/run-marketing-tests.sh +43 -0
- package/scripts/update_paths.sh +47 -0
- package/tools/install-lizard.sh +37 -0
- package/tools/simple-complexity.sh +44 -0
- package/.claude/agents/cfn-dev-team/developers/coder.md +0 -270
- package/.claude/agents/cfn-dev-team/developers/state-architect.md +0 -127
- package/.claude/agents/cfn-dev-team/reviewers/code-quality-validator.md +0 -128
- /package/.claude/agents/cfn-dev-team/developers/{ui-designer.md → frontend/ui-designer.md} +0 -0
- /package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/product-owner-agent.md +0 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Transparency Middleware Wrapper
|
|
3
|
+
# Wraps agent execution with automatic memory capture
|
|
4
|
+
|
|
5
|
+
# Strict error handling
|
|
6
|
+
set -euo pipefail
|
|
7
|
+
|
|
8
|
+
# Logging configuration
|
|
9
|
+
LOG_DIR="/var/log/claude-flow/transparency-middleware"
|
|
10
|
+
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
|
11
|
+
|
|
12
|
+
# Validate input arguments
|
|
13
|
+
if [[ $# -lt 3 ]]; then
|
|
14
|
+
echo "Error: Insufficient arguments" >&2
|
|
15
|
+
echo "Usage: $0 <AGENT_ROLE> <AGENT_ID> <TASK_ID> [ADDITIONAL_ARGS...]" >&2
|
|
16
|
+
exit 1
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
# Parse arguments
|
|
20
|
+
AGENT_ROLE="$1"
|
|
21
|
+
AGENT_ID="$2"
|
|
22
|
+
TASK_ID="$3"
|
|
23
|
+
shift 3 # Remove first three arguments, leaving any additional args
|
|
24
|
+
|
|
25
|
+
# Create log directory if it doesn't exist
|
|
26
|
+
mkdir -p "${LOG_DIR}/${TASK_ID}"
|
|
27
|
+
|
|
28
|
+
# Initialize middleware and pre-execution hooks
|
|
29
|
+
initialize_middleware() {
|
|
30
|
+
node -e "
|
|
31
|
+
import {TransparencyMiddleware} from '.claude/skills/cfn-cfn-.claude/skills/cfn-cfn-.claude/skills/cfn-cfn-src/middleware/transparency-middleware.js';
|
|
32
|
+
const middleware = new TransparencyMiddleware();
|
|
33
|
+
await middleware.initialize({
|
|
34
|
+
agentRole: '${AGENT_ROLE}',
|
|
35
|
+
agentId: '${AGENT_ID}',
|
|
36
|
+
taskId: '${TASK_ID}'
|
|
37
|
+
});
|
|
38
|
+
await middleware.preExecutionHook();
|
|
39
|
+
" || {
|
|
40
|
+
echo "Middleware initialization failed" >&2
|
|
41
|
+
exit 2
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
# Capture execution metrics
|
|
46
|
+
execute_agent() {
|
|
47
|
+
local log_file="${LOG_DIR}/${TASK_ID}/${AGENT_ID}_${TIMESTAMP}.log"
|
|
48
|
+
local metrics_file="${LOG_DIR}/${TASK_ID}/${AGENT_ID}_${TIMESTAMP}_metrics.json"
|
|
49
|
+
|
|
50
|
+
# Start time capture
|
|
51
|
+
local start_time=$(date +%s.%N)
|
|
52
|
+
|
|
53
|
+
# Execute the actual agent command with all remaining arguments
|
|
54
|
+
# Redirect output to log file
|
|
55
|
+
if ! "$@" 2>&1 | tee "${log_file}"; then
|
|
56
|
+
local exit_code=${PIPESTATUS[0]}
|
|
57
|
+
|
|
58
|
+
# Capture error metrics
|
|
59
|
+
node -e "
|
|
60
|
+
import fs from 'fs';
|
|
61
|
+
import {TransparencyMiddleware} from '.claude/skills/cfn-cfn-.claude/skills/cfn-cfn-.claude/skills/cfn-cfn-src/middleware/transparency-middleware.js';
|
|
62
|
+
const middleware = new TransparencyMiddleware();
|
|
63
|
+
|
|
64
|
+
const metrics = {
|
|
65
|
+
taskId: '${TASK_ID}',
|
|
66
|
+
agentId: '${AGENT_ID}',
|
|
67
|
+
agentRole: '${AGENT_ROLE}',
|
|
68
|
+
startTime: ${start_time},
|
|
69
|
+
endTime: $(date +%s.%N),
|
|
70
|
+
exitCode: ${exit_code},
|
|
71
|
+
status: 'FAILED'
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
await middleware.postExecutionHook(metrics);
|
|
75
|
+
fs.writeFileSync('${metrics_file}', JSON.stringify(metrics, null, 2));
|
|
76
|
+
" || echo "Error tracking failed"
|
|
77
|
+
|
|
78
|
+
return ${exit_code}
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
# Capture successful execution metrics
|
|
82
|
+
node -e "
|
|
83
|
+
import fs from 'fs';
|
|
84
|
+
import {TransparencyMiddleware} from '.claude/skills/cfn-cfn-.claude/skills/cfn-cfn-.claude/skills/cfn-cfn-src/middleware/transparency-middleware.js';
|
|
85
|
+
const middleware = new TransparencyMiddleware();
|
|
86
|
+
|
|
87
|
+
const metrics = {
|
|
88
|
+
taskId: '${TASK_ID}',
|
|
89
|
+
agentId: '${AGENT_ID}',
|
|
90
|
+
agentRole: '${AGENT_ROLE}',
|
|
91
|
+
startTime: ${start_time},
|
|
92
|
+
endTime: $(date +%s.%N),
|
|
93
|
+
exitCode: 0,
|
|
94
|
+
status: 'SUCCESS'
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
await middleware.postExecutionHook(metrics);
|
|
98
|
+
fs.writeFileSync('${metrics_file}', JSON.stringify(metrics, null, 2));
|
|
99
|
+
" || echo "Metrics tracking failed"
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
# Main execution flow
|
|
103
|
+
main() {
|
|
104
|
+
# Initialize middleware before execution
|
|
105
|
+
initialize_middleware
|
|
106
|
+
|
|
107
|
+
# Execute agent with remaining arguments
|
|
108
|
+
execute_agent "$@"
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
# Execute main function and capture its exit status
|
|
112
|
+
main "$@"
|
|
113
|
+
exit_status=$?
|
|
114
|
+
|
|
115
|
+
# Signal completion to Redis coordination
|
|
116
|
+
redis-cli lpush "swarm:${TASK_ID}:${AGENT_ID}:done" "complete" > /dev/null
|
|
117
|
+
|
|
118
|
+
# Invoke waiting mode report
|
|
119
|
+
./.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh report \
|
|
120
|
+
--task-id "${TASK_ID}" \
|
|
121
|
+
--agent-id "${AGENT_ID}" \
|
|
122
|
+
--confidence 0.80 \
|
|
123
|
+
--iteration 1
|
|
124
|
+
|
|
125
|
+
# Enter waiting mode
|
|
126
|
+
./.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh enter \
|
|
127
|
+
--task-id "${TASK_ID}" \
|
|
128
|
+
--agent-id "${AGENT_ID}" \
|
|
129
|
+
--context "iteration-1-complete"
|
|
130
|
+
|
|
131
|
+
# Exit with original command's exit status
|
|
132
|
+
exit ${exit_status}
|
|
@@ -0,0 +1,547 @@
|
|
|
1
|
+
# Screenshot Naming Convention & Storage Strategy
|
|
2
|
+
|
|
3
|
+
**Version:** 1.0.0
|
|
4
|
+
**Last Updated:** 2025-10-24
|
|
5
|
+
**Purpose:** Robust, hierarchical naming for visual regression testing
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Naming Convention
|
|
10
|
+
|
|
11
|
+
### Primary Pattern
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
{project}/{component}/{viewport}/{state}/{variant}_{timestamp}.png
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### Components Breakdown
|
|
18
|
+
|
|
19
|
+
| Component | Description | Format | Example |
|
|
20
|
+
|-----------|-------------|--------|---------|
|
|
21
|
+
| **project** | Application/feature namespace | `kebab-case` | `auth-system`, `dashboard` |
|
|
22
|
+
| **component** | UI component or page | `kebab-case` | `login-form`, `user-profile` |
|
|
23
|
+
| **viewport** | Screen size | `{width}x{height}` | `1920x1080`, `375x667` |
|
|
24
|
+
| **state** | Interaction state | `kebab-case` | `default`, `hover`, `error`, `loading` |
|
|
25
|
+
| **variant** | A/B test or theme | `kebab-case` | `dark-mode`, `variant-a` |
|
|
26
|
+
| **timestamp** | Capture time | `YYYYMMDDHHmmss` | `20251024143022` |
|
|
27
|
+
|
|
28
|
+
### Full Examples
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
# Desktop login form default state
|
|
32
|
+
auth-system/login-form/1920x1080/default/light-mode_20251024143022.png
|
|
33
|
+
|
|
34
|
+
# Mobile navigation hover state
|
|
35
|
+
dashboard/nav-menu/375x667/hover/dark-mode_20251024143535.png
|
|
36
|
+
|
|
37
|
+
# Tablet checkout error state
|
|
38
|
+
e-commerce/checkout-flow/768x1024/error/default_20251024144101.png
|
|
39
|
+
|
|
40
|
+
# Desktop modal loading state with A/B variant
|
|
41
|
+
user-profile/settings-modal/1920x1080/loading/variant-b_20251024144500.png
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Storage Strategy
|
|
47
|
+
|
|
48
|
+
### 1. SQLite Metadata Storage
|
|
49
|
+
|
|
50
|
+
**Table: `webapp_screenshots`**
|
|
51
|
+
|
|
52
|
+
```sql
|
|
53
|
+
CREATE TABLE IF NOT EXISTS webapp_screenshots (
|
|
54
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
55
|
+
screenshot_key TEXT UNIQUE NOT NULL, -- Full path without extension
|
|
56
|
+
project TEXT NOT NULL,
|
|
57
|
+
component TEXT NOT NULL,
|
|
58
|
+
viewport TEXT NOT NULL,
|
|
59
|
+
state TEXT NOT NULL,
|
|
60
|
+
variant TEXT NOT NULL DEFAULT 'default',
|
|
61
|
+
file_path TEXT NOT NULL, -- Filesystem location
|
|
62
|
+
file_hash TEXT NOT NULL, -- SHA256 of image content
|
|
63
|
+
baseline BOOLEAN DEFAULT 0, -- Is this the baseline for comparison?
|
|
64
|
+
captured_at INTEGER NOT NULL, -- Unix timestamp
|
|
65
|
+
task_id TEXT, -- Associated CFN task
|
|
66
|
+
agent_id TEXT, -- Agent that captured it
|
|
67
|
+
metadata TEXT, -- JSON: browser, OS, user, etc.
|
|
68
|
+
UNIQUE(project, component, viewport, state, variant, baseline)
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
CREATE INDEX idx_baseline ON webapp_screenshots(project, component, viewport, state, variant, baseline);
|
|
72
|
+
CREATE INDEX idx_task ON webapp_screenshots(task_id);
|
|
73
|
+
CREATE INDEX idx_component ON webapp_screenshots(project, component);
|
|
74
|
+
CREATE INDEX idx_captured ON webapp_screenshots(captured_at DESC);
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 2. Filesystem Organization
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
/mnt/c/Users/masha/Documents/claude-flow-novice/
|
|
81
|
+
└── .screenshots/
|
|
82
|
+
├── baselines/ # Reference images (version controlled)
|
|
83
|
+
│ ├── auth-system/
|
|
84
|
+
│ │ ├── login-form/
|
|
85
|
+
│ │ │ ├── 1920x1080/
|
|
86
|
+
│ │ │ │ ├── default/
|
|
87
|
+
│ │ │ │ │ └── light-mode.png
|
|
88
|
+
│ │ │ │ └── hover/
|
|
89
|
+
│ │ │ │ └── light-mode.png
|
|
90
|
+
│ │ │ └── 375x667/
|
|
91
|
+
│ │ │ └── default/
|
|
92
|
+
│ │ │ └── light-mode.png
|
|
93
|
+
│ │ └── signup-form/
|
|
94
|
+
│ │ └── [...]
|
|
95
|
+
│ └── dashboard/
|
|
96
|
+
│ └── [...]
|
|
97
|
+
│
|
|
98
|
+
├── current/ # Latest test captures (ephemeral)
|
|
99
|
+
│ └── [same structure as baselines]
|
|
100
|
+
│
|
|
101
|
+
├── diffs/ # Visual diff outputs (ephemeral)
|
|
102
|
+
│ └── {task_id}/
|
|
103
|
+
│ └── {screenshot_key}_diff.png
|
|
104
|
+
│
|
|
105
|
+
└── archive/ # Historical captures (TTL: 90 days)
|
|
106
|
+
└── {YYYY-MM}/
|
|
107
|
+
└── [same structure]
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### 3. Redis Storage (Ephemeral Metadata)
|
|
111
|
+
|
|
112
|
+
**Use for:**
|
|
113
|
+
- Current test run progress
|
|
114
|
+
- Agent coordination signals
|
|
115
|
+
- Temporary diff results
|
|
116
|
+
|
|
117
|
+
**Keys:**
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
# Test run metadata
|
|
121
|
+
screenshot:test:{task_id}:metadata
|
|
122
|
+
→ JSON: { started_at, agent_id, total_screenshots, completed, failed }
|
|
123
|
+
|
|
124
|
+
# Screenshot capture queue
|
|
125
|
+
screenshot:queue:{task_id}
|
|
126
|
+
→ LIST: ["auth-system/login-form/1920x1080/default/light-mode", ...]
|
|
127
|
+
|
|
128
|
+
# Comparison results (TTL: 1 hour)
|
|
129
|
+
screenshot:diff:{task_id}:{screenshot_key}
|
|
130
|
+
→ JSON: { similarity_score, diff_pixels, status, diff_path }
|
|
131
|
+
|
|
132
|
+
# Baseline registry (TTL: 24 hours, cache)
|
|
133
|
+
screenshot:baseline:{project}:{component}:{viewport}:{state}:{variant}
|
|
134
|
+
→ STRING: file_hash
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Screenshot Key Format
|
|
140
|
+
|
|
141
|
+
### Primary Key (Unique Identifier)
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
{project}/{component}/{viewport}/{state}/{variant}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
**Example:** `auth-system/login-form/1920x1080/default/light-mode`
|
|
148
|
+
|
|
149
|
+
### Lookup Pattern
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
# Get baseline for a specific configuration
|
|
153
|
+
SELECT * FROM webapp_screenshots
|
|
154
|
+
WHERE project = 'auth-system'
|
|
155
|
+
AND component = 'login-form'
|
|
156
|
+
AND viewport = '1920x1080'
|
|
157
|
+
AND state = 'default'
|
|
158
|
+
AND variant = 'light-mode'
|
|
159
|
+
AND baseline = 1;
|
|
160
|
+
|
|
161
|
+
# Get all baselines for a component
|
|
162
|
+
SELECT * FROM webapp_screenshots
|
|
163
|
+
WHERE project = 'auth-system'
|
|
164
|
+
AND component = 'login-form'
|
|
165
|
+
AND baseline = 1;
|
|
166
|
+
|
|
167
|
+
# Get recent captures for comparison
|
|
168
|
+
SELECT * FROM webapp_screenshots
|
|
169
|
+
WHERE project = 'auth-system'
|
|
170
|
+
AND component = 'login-form'
|
|
171
|
+
AND baseline = 0
|
|
172
|
+
ORDER BY captured_at DESC
|
|
173
|
+
LIMIT 10;
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Naming Conventions
|
|
179
|
+
|
|
180
|
+
### Project Names
|
|
181
|
+
|
|
182
|
+
**Format:** `kebab-case`, descriptive
|
|
183
|
+
|
|
184
|
+
**Examples:**
|
|
185
|
+
- `auth-system` - Authentication flows
|
|
186
|
+
- `dashboard` - Main dashboard UI
|
|
187
|
+
- `e-commerce` - Shopping/checkout
|
|
188
|
+
- `admin-panel` - Admin interface
|
|
189
|
+
- `marketing-site` - Public website
|
|
190
|
+
|
|
191
|
+
### Component Names
|
|
192
|
+
|
|
193
|
+
**Format:** `kebab-case`, specific UI element
|
|
194
|
+
|
|
195
|
+
**Examples:**
|
|
196
|
+
- `login-form` - Login page/modal
|
|
197
|
+
- `nav-menu` - Navigation component
|
|
198
|
+
- `user-profile` - User profile page
|
|
199
|
+
- `settings-modal` - Settings dialog
|
|
200
|
+
- `checkout-flow` - Multi-step checkout
|
|
201
|
+
|
|
202
|
+
### Viewport Sizes
|
|
203
|
+
|
|
204
|
+
**Standard Sizes:**
|
|
205
|
+
|
|
206
|
+
| Name | Dimensions | Use Case |
|
|
207
|
+
|------|------------|----------|
|
|
208
|
+
| `1920x1080` | Desktop HD | Default desktop |
|
|
209
|
+
| `1366x768` | Laptop | Common laptop |
|
|
210
|
+
| `375x667` | iPhone SE | Small mobile |
|
|
211
|
+
| `390x844` | iPhone 12/13 | Modern mobile |
|
|
212
|
+
| `768x1024` | iPad | Tablet portrait |
|
|
213
|
+
| `1024x768` | iPad Landscape | Tablet landscape |
|
|
214
|
+
|
|
215
|
+
**Custom:** `{width}x{height}` for specific needs
|
|
216
|
+
|
|
217
|
+
### State Names
|
|
218
|
+
|
|
219
|
+
**Standard States:**
|
|
220
|
+
|
|
221
|
+
| State | Description | When to Use |
|
|
222
|
+
|-------|-------------|-------------|
|
|
223
|
+
| `default` | Initial render | Baseline state |
|
|
224
|
+
| `hover` | Mouse over | Interactive elements |
|
|
225
|
+
| `focus` | Keyboard focus | Form inputs, buttons |
|
|
226
|
+
| `active` | Mouse down | Button press |
|
|
227
|
+
| `disabled` | Non-interactive | Disabled state |
|
|
228
|
+
| `error` | Validation error | Form errors |
|
|
229
|
+
| `loading` | Async operation | Spinners, skeletons |
|
|
230
|
+
| `success` | Successful action | Confirmation states |
|
|
231
|
+
| `empty` | No data | Empty states |
|
|
232
|
+
| `populated` | With data | Data-rich states |
|
|
233
|
+
|
|
234
|
+
### Variant Names
|
|
235
|
+
|
|
236
|
+
**Standard Variants:**
|
|
237
|
+
|
|
238
|
+
| Variant | Description | When to Use |
|
|
239
|
+
|---------|-------------|-------------|
|
|
240
|
+
| `default` | Default theme | Baseline |
|
|
241
|
+
| `light-mode` | Light theme | Explicit light mode |
|
|
242
|
+
| `dark-mode` | Dark theme | Dark theme support |
|
|
243
|
+
| `variant-a` | A/B test version A | A/B testing |
|
|
244
|
+
| `variant-b` | A/B test version B | A/B testing |
|
|
245
|
+
| `high-contrast` | Accessibility mode | High contrast |
|
|
246
|
+
| `rtl` | Right-to-left | i18n support |
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## File Naming Rules
|
|
251
|
+
|
|
252
|
+
### 1. Baseline Files (Version Controlled)
|
|
253
|
+
|
|
254
|
+
**Pattern:** `{variant}.png`
|
|
255
|
+
|
|
256
|
+
**Location:** `.screenshots/baselines/{project}/{component}/{viewport}/{state}/{variant}.png`
|
|
257
|
+
|
|
258
|
+
**Example:** `.screenshots/baselines/auth-system/login-form/1920x1080/default/light-mode.png`
|
|
259
|
+
|
|
260
|
+
**Commit Policy:**
|
|
261
|
+
- ✅ Commit baseline changes with PR
|
|
262
|
+
- ✅ Include visual review in PR
|
|
263
|
+
- ✅ Tag with `[visual-update]` in commit message
|
|
264
|
+
|
|
265
|
+
### 2. Current Test Files (Ephemeral)
|
|
266
|
+
|
|
267
|
+
**Pattern:** `{variant}_{timestamp}.png`
|
|
268
|
+
|
|
269
|
+
**Location:** `.screenshots/current/{project}/{component}/{viewport}/{state}/{variant}_{timestamp}.png`
|
|
270
|
+
|
|
271
|
+
**Example:** `.screenshots/current/auth-system/login-form/1920x1080/default/light-mode_20251024143022.png`
|
|
272
|
+
|
|
273
|
+
**Retention:** Delete after comparison (not version controlled)
|
|
274
|
+
|
|
275
|
+
### 3. Diff Files (Ephemeral)
|
|
276
|
+
|
|
277
|
+
**Pattern:** `{screenshot_key}_diff.png`
|
|
278
|
+
|
|
279
|
+
**Location:** `.screenshots/diffs/{task_id}/{screenshot_key}_diff.png`
|
|
280
|
+
|
|
281
|
+
**Example:** `.screenshots/diffs/task-123/auth-system_login-form_1920x1080_default_light-mode_diff.png`
|
|
282
|
+
|
|
283
|
+
**Retention:** Keep for task duration, delete after task complete
|
|
284
|
+
|
|
285
|
+
### 4. Archive Files (Historical)
|
|
286
|
+
|
|
287
|
+
**Pattern:** `{variant}_{timestamp}.png`
|
|
288
|
+
|
|
289
|
+
**Location:** `.screenshots/archive/{YYYY-MM}/{project}/{component}/{viewport}/{state}/{variant}_{timestamp}.png`
|
|
290
|
+
|
|
291
|
+
**Example:** `.screenshots/archive/2025-10/auth-system/login-form/1920x1080/default/light-mode_20251024143022.png`
|
|
292
|
+
|
|
293
|
+
**Retention:** 90 days (configurable)
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
## Metadata Storage
|
|
298
|
+
|
|
299
|
+
### Screenshot Metadata (JSON in SQLite)
|
|
300
|
+
|
|
301
|
+
```json
|
|
302
|
+
{
|
|
303
|
+
"browser": "chromium",
|
|
304
|
+
"browser_version": "119.0.6045.105",
|
|
305
|
+
"os": "linux",
|
|
306
|
+
"os_version": "Ubuntu 22.04",
|
|
307
|
+
"playwright_version": "1.40.0",
|
|
308
|
+
"viewport_actual": { "width": 1920, "height": 1080 },
|
|
309
|
+
"device_scale_factor": 1,
|
|
310
|
+
"user_agent": "Mozilla/5.0...",
|
|
311
|
+
"url": "http://localhost:3000/login",
|
|
312
|
+
"test_name": "Login form renders correctly",
|
|
313
|
+
"git_commit": "4fb837c7",
|
|
314
|
+
"git_branch": "main",
|
|
315
|
+
"captured_by": "playwright-tester-agent-123"
|
|
316
|
+
}
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
## Baseline Management
|
|
322
|
+
|
|
323
|
+
### Setting a Baseline
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
# Via skill
|
|
327
|
+
./.claude/skills/webapp-testing/set-baseline.sh \
|
|
328
|
+
--project "auth-system" \
|
|
329
|
+
--component "login-form" \
|
|
330
|
+
--viewport "1920x1080" \
|
|
331
|
+
--state "default" \
|
|
332
|
+
--variant "light-mode" \
|
|
333
|
+
--file ".screenshots/current/auth-system/login-form/1920x1080/default/light-mode_20251024143022.png"
|
|
334
|
+
|
|
335
|
+
# Result:
|
|
336
|
+
# 1. Copy to baselines directory (remove timestamp)
|
|
337
|
+
# 2. Update SQLite: set baseline=1, copy metadata
|
|
338
|
+
# 3. Update Redis cache
|
|
339
|
+
# 4. Return baseline record
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
### Updating a Baseline
|
|
343
|
+
|
|
344
|
+
```bash
|
|
345
|
+
# Automatically when visual changes are approved
|
|
346
|
+
./.claude/skills/webapp-testing/update-baseline.sh \
|
|
347
|
+
--screenshot-key "auth-system/login-form/1920x1080/default/light-mode" \
|
|
348
|
+
--new-file ".screenshots/current/auth-system/login-form/1920x1080/default/light-mode_20251024150000.png" \
|
|
349
|
+
--reason "Updated button style per design review"
|
|
350
|
+
|
|
351
|
+
# Result:
|
|
352
|
+
# 1. Archive old baseline to archive/
|
|
353
|
+
# 2. Copy new file to baselines/
|
|
354
|
+
# 3. Update SQLite record
|
|
355
|
+
# 4. Clear Redis cache
|
|
356
|
+
# 5. Log change to audit trail
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
---
|
|
360
|
+
|
|
361
|
+
## Query Examples
|
|
362
|
+
|
|
363
|
+
### Get All Baselines for Component
|
|
364
|
+
|
|
365
|
+
```sql
|
|
366
|
+
SELECT
|
|
367
|
+
screenshot_key,
|
|
368
|
+
viewport,
|
|
369
|
+
state,
|
|
370
|
+
variant,
|
|
371
|
+
file_path,
|
|
372
|
+
captured_at
|
|
373
|
+
FROM webapp_screenshots
|
|
374
|
+
WHERE project = 'auth-system'
|
|
375
|
+
AND component = 'login-form'
|
|
376
|
+
AND baseline = 1
|
|
377
|
+
ORDER BY viewport, state, variant;
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
### Find Screenshots Needing Baselines
|
|
381
|
+
|
|
382
|
+
```sql
|
|
383
|
+
-- Captures without corresponding baselines
|
|
384
|
+
SELECT DISTINCT
|
|
385
|
+
c.project,
|
|
386
|
+
c.component,
|
|
387
|
+
c.viewport,
|
|
388
|
+
c.state,
|
|
389
|
+
c.variant
|
|
390
|
+
FROM webapp_screenshots c
|
|
391
|
+
LEFT JOIN webapp_screenshots b
|
|
392
|
+
ON c.project = b.project
|
|
393
|
+
AND c.component = b.component
|
|
394
|
+
AND c.viewport = b.viewport
|
|
395
|
+
AND c.state = b.state
|
|
396
|
+
AND c.variant = b.variant
|
|
397
|
+
AND b.baseline = 1
|
|
398
|
+
WHERE c.baseline = 0
|
|
399
|
+
AND b.id IS NULL;
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
### Get Recent Test Results for Task
|
|
403
|
+
|
|
404
|
+
```sql
|
|
405
|
+
SELECT
|
|
406
|
+
screenshot_key,
|
|
407
|
+
file_path,
|
|
408
|
+
captured_at,
|
|
409
|
+
metadata
|
|
410
|
+
FROM webapp_screenshots
|
|
411
|
+
WHERE task_id = 'cfn-task-456'
|
|
412
|
+
AND baseline = 0
|
|
413
|
+
ORDER BY captured_at DESC;
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
---
|
|
417
|
+
|
|
418
|
+
## Best Practices
|
|
419
|
+
|
|
420
|
+
### 1. Screenshot Organization
|
|
421
|
+
|
|
422
|
+
✅ **DO:**
|
|
423
|
+
- Use consistent naming across projects
|
|
424
|
+
- Group by project → component → viewport → state
|
|
425
|
+
- Version control baselines
|
|
426
|
+
- Clean up ephemeral files after tests
|
|
427
|
+
|
|
428
|
+
❌ **DON'T:**
|
|
429
|
+
- Mix baseline and test captures in same directory
|
|
430
|
+
- Use timestamps in baseline filenames
|
|
431
|
+
- Version control current/diff/archive directories
|
|
432
|
+
- Use spaces or special characters in names
|
|
433
|
+
|
|
434
|
+
### 2. Baseline Management
|
|
435
|
+
|
|
436
|
+
✅ **DO:**
|
|
437
|
+
- Review visual changes in PR
|
|
438
|
+
- Update baselines with design changes
|
|
439
|
+
- Archive old baselines before updating
|
|
440
|
+
- Document baseline change reasons
|
|
441
|
+
|
|
442
|
+
❌ **DON'T:**
|
|
443
|
+
- Auto-approve baseline changes
|
|
444
|
+
- Update baselines without review
|
|
445
|
+
- Delete old baselines immediately
|
|
446
|
+
- Skip metadata/audit trail
|
|
447
|
+
|
|
448
|
+
### 3. Storage Efficiency
|
|
449
|
+
|
|
450
|
+
✅ **DO:**
|
|
451
|
+
- Compress PNGs (pngquant, oxipng)
|
|
452
|
+
- Set TTLs on ephemeral data
|
|
453
|
+
- Archive old screenshots periodically
|
|
454
|
+
- Use file hashes to detect duplicates
|
|
455
|
+
|
|
456
|
+
❌ **DON'T:**
|
|
457
|
+
- Store uncompressed screenshots
|
|
458
|
+
- Keep all test runs indefinitely
|
|
459
|
+
- Duplicate baselines across branches
|
|
460
|
+
- Store screenshots in git unnecessarily
|
|
461
|
+
|
|
462
|
+
### 4. Search & Discovery
|
|
463
|
+
|
|
464
|
+
✅ **DO:**
|
|
465
|
+
- Index by project, component, viewport
|
|
466
|
+
- Use consistent component naming
|
|
467
|
+
- Tag screenshots with git metadata
|
|
468
|
+
- Enable full-text search on metadata
|
|
469
|
+
|
|
470
|
+
❌ **DON'T:**
|
|
471
|
+
- Use cryptic component names
|
|
472
|
+
- Skip metadata fields
|
|
473
|
+
- Mix naming conventions
|
|
474
|
+
- Rely solely on filesystem search
|
|
475
|
+
|
|
476
|
+
---
|
|
477
|
+
|
|
478
|
+
## Integration Points
|
|
479
|
+
|
|
480
|
+
### CFN Loop Integration
|
|
481
|
+
|
|
482
|
+
**Loop 3 (Implementation):**
|
|
483
|
+
- Capture screenshots during frontend development
|
|
484
|
+
- Store in `current/` with task_id
|
|
485
|
+
|
|
486
|
+
**Loop 2 (Validation):**
|
|
487
|
+
- Compare current captures to baselines
|
|
488
|
+
- Generate diffs for reviewers
|
|
489
|
+
- Store comparison results in Redis
|
|
490
|
+
|
|
491
|
+
**Product Owner Decision:**
|
|
492
|
+
- Review visual diffs
|
|
493
|
+
- Approve/reject baseline updates
|
|
494
|
+
- Document visual changes
|
|
495
|
+
|
|
496
|
+
### Git Integration
|
|
497
|
+
|
|
498
|
+
```gitignore
|
|
499
|
+
# .gitignore
|
|
500
|
+
.screenshots/current/
|
|
501
|
+
.screenshots/diffs/
|
|
502
|
+
.screenshots/archive/
|
|
503
|
+
|
|
504
|
+
# Version control baselines only
|
|
505
|
+
!.screenshots/baselines/
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
### CI/CD Integration
|
|
509
|
+
|
|
510
|
+
```yaml
|
|
511
|
+
# .github/workflows/visual-regression.yml
|
|
512
|
+
- name: Run Visual Regression Tests
|
|
513
|
+
run: |
|
|
514
|
+
npx claude-flow-novice skill webapp-testing \
|
|
515
|
+
--project "auth-system" \
|
|
516
|
+
--component "login-form" \
|
|
517
|
+
--task-id "${{ github.sha }}"
|
|
518
|
+
|
|
519
|
+
- name: Upload Diffs as Artifacts
|
|
520
|
+
uses: actions/upload-artifact@v3
|
|
521
|
+
with:
|
|
522
|
+
name: visual-diffs
|
|
523
|
+
path: .screenshots/diffs/
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
---
|
|
527
|
+
|
|
528
|
+
## Future Enhancements
|
|
529
|
+
|
|
530
|
+
### Phase 2: Advanced Features
|
|
531
|
+
- [ ] Responsive screenshot matrices (auto-generate all viewports)
|
|
532
|
+
- [ ] Animation frame capture (multi-frame GIF/video)
|
|
533
|
+
- [ ] Component isolation (auto-detect and crop component bounds)
|
|
534
|
+
- [ ] Smart diff highlighting (ML-based change detection)
|
|
535
|
+
- [ ] Baseline branching (per-branch baselines for feature work)
|
|
536
|
+
|
|
537
|
+
### Phase 3: AI Integration
|
|
538
|
+
- [ ] Auto-suggest baseline updates based on design intent
|
|
539
|
+
- [ ] Anomaly detection (unexpected visual changes)
|
|
540
|
+
- [ ] Visual test generation from designs (Figma → screenshots)
|
|
541
|
+
- [ ] Natural language screenshot queries ("show me all error states")
|
|
542
|
+
|
|
543
|
+
---
|
|
544
|
+
|
|
545
|
+
**Last Updated:** 2025-10-24
|
|
546
|
+
**Version:** 1.0.0
|
|
547
|
+
**Status:** Ready for Implementation
|