@thierrynakoa/fire-flow 12.2.1 → 13.0.1
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/CREDITS.md +25 -0
- package/DOMINION-FLOW-OVERVIEW.md +182 -38
- package/README.md +399 -455
- package/TROUBLESHOOTING.md +264 -264
- package/agents/fire-debugger.md +54 -0
- package/agents/fire-executor.md +1610 -1033
- package/agents/fire-fact-checker.md +1 -1
- package/agents/fire-planner.md +85 -17
- package/agents/fire-project-researcher.md +1 -1
- package/agents/fire-researcher.md +4 -22
- package/agents/{fire-phoenix-analyst.md → fire-resurrection-analyst.md} +394 -394
- package/agents/fire-reviewer.md +552 -499
- package/agents/fire-verifier.md +114 -19
- package/bin/cli.js +18 -101
- package/commands/fire-0-orient.md +2 -2
- package/commands/fire-1a-new.md +50 -15
- package/commands/fire-1c-setup.md +33 -5
- package/commands/fire-1d-discuss.md +87 -1
- package/commands/fire-2-plan.md +556 -527
- package/commands/fire-3-execute.md +2046 -1356
- package/commands/fire-4-verify.md +975 -906
- package/commands/fire-5-handoff.md +46 -5
- package/commands/fire-6-resume.md +2 -31
- package/commands/fire-add-new-skill.md +138 -19
- package/commands/fire-autonomous.md +14 -2
- package/commands/fire-complete-milestone.md +1 -1
- package/commands/fire-cost.md +179 -183
- package/commands/fire-debug.md +1 -6
- package/commands/fire-loop-resume.md +2 -2
- package/commands/fire-loop-stop.md +1 -1
- package/commands/fire-loop.md +2 -15
- package/commands/fire-map-codebase.md +1 -1
- package/commands/fire-migrate-database.md +548 -0
- package/commands/fire-new-milestone.md +1 -1
- package/commands/fire-reflect.md +1 -2
- package/commands/fire-research.md +142 -21
- package/commands/{fire-phoenix.md → fire-resurrect.md} +859 -603
- package/commands/fire-scaffold.md +297 -0
- package/commands/fire-search.md +1 -2
- package/commands/fire-security-scan.md +483 -484
- package/commands/fire-setup.md +359 -0
- package/commands/fire-skill.md +770 -0
- package/commands/fire-skills-diff.md +506 -506
- package/commands/fire-skills-history.md +388 -388
- package/commands/fire-skills-rollback.md +7 -7
- package/commands/fire-skills-sync.md +470 -470
- package/commands/fire-test.md +5 -5
- package/commands/fire-todos.md +1 -1
- package/commands/fire-update.md +5 -5
- package/commands/fire-validate-skills.md +282 -0
- package/commands/fire-vuln-scan.md +492 -493
- package/hooks/run-hook.sh +8 -8
- package/hooks/run-session-end.sh +7 -7
- package/hooks/session-end.sh +90 -90
- package/hooks/session-start.sh +1 -1
- package/package.json +4 -24
- package/plugin.json +7 -7
- package/references/autonomy-levels.md +235 -0
- package/references/behavioral-directives.md +95 -3
- package/references/blocker-tracking.md +1 -1
- package/references/circuit-breaker.md +93 -2
- package/references/context-engineering.md +227 -9
- package/references/honesty-protocols.md +70 -1
- package/references/issue-to-pr-pipeline.md +149 -150
- package/references/metrics-and-trends.md +1 -2
- package/references/research-improvements.md +4 -108
- package/references/sdlc-mapping.md +73 -0
- package/references/state-machine.md +151 -0
- package/skills-library/AVAILABLE_TOOLS_REFERENCE.md +333 -0
- package/skills-library/SKILLS-INDEX.md +57 -558
- package/skills-library/SKILLS_LIBRARY_INDEX.md +532 -0
- package/skills-library/_general/api-patterns/api-field-name-mismatch.md +107 -0
- package/skills-library/_general/api-patterns/streaming-command-timeout.md +122 -0
- package/skills-library/_general/api-patterns/streaming-proxy-cors-bypass.md +102 -0
- package/skills-library/_general/automation/settings-gui-generator.md +172 -0
- package/skills-library/_general/database-solutions/data-type-mapping-reference.md +181 -0
- package/skills-library/_general/database-solutions/mysql-limit-offset-string-coercion.md +102 -0
- package/skills-library/_general/database-solutions/mysql-to-pg-migration.md +195 -0
- package/skills-library/_general/database-solutions/orm-schema-portability.md +193 -0
- package/skills-library/_general/database-solutions/persistent-analysis-storage.md +207 -0
- package/skills-library/_general/database-solutions/pg-to-mysql-schema-migration-methodology.md +190 -0
- package/skills-library/_general/database-solutions/sql-dialect-compatibility-matrix.md +306 -0
- package/skills-library/_general/database-solutions/sqlite-to-pg-migration.md +219 -0
- package/skills-library/_general/frontend/canvas-bubble-animation-grouping.md +270 -0
- package/skills-library/_general/frontend/color-token-migration.md +112 -0
- package/skills-library/_general/frontend/framer-motion-layoutid-grouping.md +150 -0
- package/skills-library/_general/frontend/pyqt6-settings-dialog.md +191 -0
- package/skills-library/_general/frontend/react-flow-animated-layout-switching.md +101 -0
- package/skills-library/_general/frontend/react-hooks-order-debugging.md +141 -0
- package/skills-library/_general/frontend/redux-localstorage-auth-desync.md +126 -0
- package/skills-library/_general/frontend/safari-csp-theme-color-debugging.md +124 -0
- package/skills-library/_general/frontend/safari-sw-cache-poisoning.md +138 -0
- package/skills-library/_general/frontend/svg-sparkline-no-charting-library.md +131 -0
- package/skills-library/_general/growth-marketing/oss-daily-growth-intelligence.md +224 -0
- package/skills-library/_general/integrations/claude-code-local-mcp-integration.md +250 -0
- package/skills-library/_general/integrations/mcp-composite-tool-orchestration.md +200 -0
- package/skills-library/_general/methodology/AGENT_SDK_STANDALONE_TOOLING.md +181 -0
- package/skills-library/_general/methodology/AGENT_TEAMS_GUIDE.md +169 -0
- package/skills-library/_general/methodology/ALAS_STATEFUL_EXECUTION.md +207 -0
- package/skills-library/_general/methodology/AUTO_REVIEWER_SUBAGENT.md +211 -0
- package/skills-library/_general/methodology/CONSISTENCY_CHECK_AMBIGUITY_GATE.md +96 -0
- package/skills-library/_general/methodology/DEAD_ENDS_SHELF.md +4 -4
- package/skills-library/_general/methodology/DISTILL_NOT_DUMP.md +108 -0
- package/skills-library/_general/methodology/EXECUTION_PROGRESS_MONITOR.md +157 -0
- package/skills-library/_general/methodology/HIERARCHICAL_REVIEW_MARS.md +122 -0
- package/skills-library/_general/methodology/MCP_INTER_AGENT_BRIDGE.md +207 -0
- package/skills-library/_general/methodology/MERMAID_WIZARD_DIAGRAMS.md +77 -0
- package/skills-library/_general/methodology/MISSING_DIMENSION_DETECTOR.md +89 -0
- package/skills-library/_general/methodology/MULTI_AGENT_COORDINATION.md +397 -0
- package/skills-library/_general/methodology/OBSERVATION_MASKING.md +100 -0
- package/skills-library/_general/methodology/PHOENIX_REBUILD_METHODOLOGY.md +82 -11
- package/skills-library/_general/methodology/REVIEW_BACKTRACK_PANEL.md +140 -0
- package/skills-library/_general/methodology/REVIEW_FIX_LOOP.md +117 -0
- package/skills-library/_general/methodology/VOTING_VERDICT_ARBITRATION.md +155 -0
- package/skills-library/_general/methodology/ZERO_FRICTION_CLI_SETUP.md +2 -2
- package/skills-library/_general/methodology/dead-code-activation.md +123 -0
- package/skills-library/_general/methodology/debug-swarm-researcher-escape-hatch.md +240 -240
- package/skills-library/_general/methodology/shell-autonomous-loop-fixplan.md +1 -1
- package/skills-library/_general/patterns-standards/GOF_DESIGN_PATTERNS_FOR_AI_AGENTS.md +5 -5
- package/skills-library/_general/patterns-standards/cascading-failure-diagnosis.md +119 -0
- package/skills-library/_general/patterns-standards/domain-specific-layout-algorithms.md +209 -0
- package/skills-library/_general/patterns-standards/python-desktop-app-architecture.md +399 -0
- package/skills-library/_general/patterns-standards/realtime-monitoring-dashboard.md +457 -0
- package/skills-library/_general/patterns-standards/togglable-processing-pipeline.md +169 -0
- package/skills-library/_general/performance/liveclock-extraction.md +112 -0
- package/skills-library/_general/performance/ref-based-canvas-animation.md +117 -0
- package/skills-library/_general/performance/use-visible-interval.md +131 -0
- package/skills-library/_general/testing/playwright-firefox-withcredentials-auth-issue.md +104 -0
- package/skills-library/_quarantine/README.md +30 -0
- package/skills-library/api-patterns/BROADCAST_SCHEDULER_SHARED_EXECUTE_FUNCTION.md +150 -0
- package/skills-library/api-patterns/ERROR_RESPONSE_STANDARDS.md +145 -0
- package/skills-library/api-patterns/EXPRESS_ROUTE_ORDERING_MIDDLEWARE_INTERCEPTION.md +326 -0
- package/skills-library/api-patterns/PAGINATION_PATTERNS.md +137 -0
- package/skills-library/api-patterns/PODCAST_PROGRESS_TRACKING_THREE_ROOT_CAUSES.md +277 -0
- package/skills-library/api-patterns/RATE_LIMITING_TOGGLE.md +155 -0
- package/skills-library/api-patterns/graphql-content-queries.md +708 -0
- package/skills-library/appointment-scheduler-design.md +423 -0
- package/skills-library/automation/AUTO_POPULATE_COMPLETE_GUIDE.md +631 -0
- package/skills-library/automation/CC_WORKFLOW_STUDIO.md +83 -0
- package/skills-library/automation/CLAUDE_CODE_SWARM_MODE.md +95 -0
- package/skills-library/automation/DAEMON_TRIGGER_FILE_IPC.md +195 -0
- package/skills-library/automation/scheduled-content-publishing.md +608 -0
- package/skills-library/awesome-workflows/Blogging-Platform-Instructions/view_commands.md +25 -0
- package/skills-library/awesome-workflows/CREDENTIAL-SECURITY-WORKFLOW.md +109 -0
- package/skills-library/awesome-workflows/DEBUGGING-WORKFLOW.md +124 -0
- package/skills-library/awesome-workflows/Design-Review-Workflow/README.md +31 -0
- package/skills-library/awesome-workflows/Design-Review-Workflow/design-principles-example.md +129 -0
- package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-agent.md +107 -0
- package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-claude-md-snippet.md +24 -0
- package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-slash-command.md +38 -0
- package/skills-library/awesome-workflows/PARALLEL-RESEARCH-WORKFLOW.md +89 -0
- package/skills-library/awesome-workflows/PHASE-EXECUTION-WORKFLOW.md +97 -0
- package/skills-library/awesome-workflows/SESSION-HANDOFF-WORKFLOW.md +116 -0
- package/skills-library/cms-patterns/content-branch-preview.md +515 -0
- package/skills-library/cms-patterns/inline-visual-editing.md +666 -0
- package/skills-library/cms-patterns/mdx-component-content.md +649 -0
- package/skills-library/cms-patterns/media-manager-abstraction.md +827 -0
- package/skills-library/cms-patterns/schema-driven-form-generator.md +838 -0
- package/skills-library/complexity-metrics/complexity-divider.md +707 -0
- package/skills-library/complexity-metrics/work-with-complexity.md +193 -0
- package/skills-library/creative-multimedia/animation-stack-guide.md +577 -0
- package/skills-library/creative-multimedia/audio-enhancement-pipeline.md +625 -0
- package/skills-library/creative-multimedia/content-repurposing-pipeline.md +1146 -0
- package/skills-library/creative-multimedia/data-visualization-generator.md +862 -0
- package/skills-library/creative-multimedia/doc-to-podcast-pipeline.md +2184 -0
- package/skills-library/creative-multimedia/ffmpeg-command-generator.md +405 -0
- package/skills-library/creative-multimedia/image-optimization-pipeline.md +605 -0
- package/skills-library/creative-multimedia/multi-format-content-generator.md +1759 -0
- package/skills-library/creative-multimedia/og-image-generator.md +635 -0
- package/skills-library/creative-multimedia/podcast-audio-composition.md +1355 -0
- package/skills-library/creative-multimedia/podcast-quality-evaluation.md +1452 -0
- package/skills-library/creative-multimedia/podcast-script-generation.md +1841 -0
- package/skills-library/creative-multimedia/svg-generation.md +750 -0
- package/skills-library/creative-multimedia/text-to-speech-provider-selector.md +1414 -0
- package/skills-library/creative-multimedia/transcription-pipeline-selector.md +677 -0
- package/skills-library/creative-multimedia/video-streaming-setup.md +559 -0
- package/skills-library/database-solutions/AI_RESPONSE_DATABASE_CACHING.md +520 -0
- package/skills-library/database-solutions/CONDITIONAL_SQL_MIGRATION_PATTERN.md +119 -0
- package/skills-library/database-solutions/DATABASE_COLUMN_NAME_MISMATCH.md +393 -0
- package/skills-library/database-solutions/DATABASE_SCHEMA.md +394 -0
- package/skills-library/database-solutions/DATABASE_SCHEMA_VERIFICATION_GUIDE.md +348 -0
- package/skills-library/database-solutions/DATABASE_STRATEGY.md +71 -0
- package/skills-library/database-solutions/ES_MODULE_SEED_SCRIPT_PATTERN.md +52 -0
- package/skills-library/database-solutions/MIGRATION_GUIDE.md +3 -0
- package/skills-library/database-solutions/PLPGSQL_VARIABLE_CONFLICT_FIX.md +208 -0
- package/skills-library/database-solutions/POSTGRESQL_JSONB_DOUBLE_STRINGIFY_FIX.md +245 -0
- package/skills-library/database-solutions/POSTGRESQL_LICENSE_TABLE_DESIGN.md +393 -0
- package/skills-library/database-solutions/POSTGRESQL_UUID_DOCUMENT_RAG_DUAL_SCOPE.md +732 -0
- package/skills-library/database-solutions/POSTGRES_SQL_TEMPLATE_BINDING_ERROR.md +240 -0
- package/skills-library/database-solutions/PRISMA_DB_PUSH_DATA_LOSS_PREVENTION.md +141 -0
- package/skills-library/database-solutions/PRODUCTION_QUERY_OPTIMIZATION_RESTART_FIX.md +389 -0
- package/skills-library/database-solutions/RLS_SECURITY_GUIDE.md +107 -0
- package/skills-library/database-solutions/SCHEMA_ENHANCEMENTS_GUIDE.md +373 -0
- package/skills-library/database-solutions/SCHEMA_MIGRATION_GUIDE.md +368 -0
- package/skills-library/database-solutions/SCHEMA_VERIFICATION_QUICK_REFERENCE.md +104 -0
- package/skills-library/database-solutions/ai-erd-generator.md +1213 -0
- package/skills-library/database-solutions/content-publishing-states.md +631 -0
- package/skills-library/database-solutions/database-schema-designer.md +522 -0
- package/skills-library/database-solutions/er-diagram-components.md +569 -0
- package/skills-library/database-solutions/er-to-ddl-mapping.md +1405 -0
- package/skills-library/database-solutions/erd-creator-textbook-research.md +433 -0
- package/skills-library/database-solutions/erd-react-flow-architecture.md +1965 -0
- package/skills-library/database-solutions/mariadb-aggregate-function-replacement.md +145 -0
- package/skills-library/database-solutions/normalization-validator.md +778 -0
- package/skills-library/database-solutions/postgres-full-text-search-content.md +494 -0
- package/skills-library/database-solutions/postgresql-to-mysql-runtime-translation.md +286 -0
- package/skills-library/database-solutions/regex-alternation-ordering-sql-types.md +92 -0
- package/skills-library/database-solutions/reserved-word-context-aware-quoting.md +142 -0
- package/skills-library/database-solutions/sql-ddl-generator.md +756 -0
- package/skills-library/database-solutions/supabase-connection-pooler-fix.md +102 -0
- package/skills-library/deployment-security/CPANEL_NODE_DEPLOYMENT.md +166 -0
- package/skills-library/deployment-security/DEPLOYMENT.md +275 -0
- package/skills-library/deployment-security/DEPLOYMENT_CHECKLIST.md +363 -0
- package/skills-library/deployment-security/DEPLOYMENT_PLAN.md +669 -0
- package/skills-library/deployment-security/KNEX_DATABASE_ABSTRACTION.md +444 -0
- package/skills-library/deployment-security/LICENSE_KEY_SYSTEM.md +206 -0
- package/skills-library/deployment-security/NODE18_DEPENDENCY_COMPATIBILITY.md +284 -0
- package/skills-library/deployment-security/PHP_INSTALLER_WIZARD_GUIDE.md +315 -0
- package/skills-library/deployment-security/PM2_ENVIRONMENT_VARIABLE_CACHING.md +256 -0
- package/skills-library/deployment-security/PM2_MEMORY_EXHAUSTION_FIX.md +370 -0
- package/skills-library/deployment-security/PRODUCTION_DEPLOYMENT_GUIDE.md +592 -0
- package/skills-library/deployment-security/PRODUCTION_HARDENING_DOCUMENTATION.md +307 -0
- package/skills-library/deployment-security/PRODUCTION_RECOVERY_CHERRY_PICK_PATTERN.md +202 -0
- package/skills-library/deployment-security/PYINSTALLER_CUDA_WHISPER_BUNDLING.md +236 -0
- package/skills-library/deployment-security/SECURITY.md +41 -0
- package/skills-library/deployment-security/SMTP_SSL_HOSTNAME_MISMATCH_SHARED_HOSTING.md +220 -0
- package/skills-library/deployment-security/SPA_SEO_OPTIMIZATION_CPANEL.md +200 -0
- package/skills-library/deployment-security/SUPABASE_EDGE_FUNCTIONS.md +338 -0
- package/skills-library/deployment-security/VERCEL_GITHUB_DEPLOYMENT_GUIDE.md +858 -0
- package/skills-library/deployment-security/VPS_DEPLOYMENT_READINESS.md +356 -0
- package/skills-library/deployment-security/deployment-changes-not-applying.md +241 -0
- package/skills-library/deployment-security/env-file-management-production-local.md +203 -0
- package/skills-library/deployment-security/express-secure-file-downloads.md +413 -0
- package/skills-library/deployment-security/react-production-deployment-desktop-guide.md +2011 -0
- package/skills-library/deployment-security/self-hosted-supabase-coolify-guide.md +1684 -0
- package/skills-library/deployment-security/unique-features-ai-strategy-plaid-security.md +1613 -0
- package/skills-library/deployment-security/vps-deployment.md +135 -0
- package/skills-library/document-processing/WORD_EXPORT_MARKDOWN_FORMATTING.md +482 -0
- package/skills-library/document-processing/document-ai-landingai-integration.md +677 -0
- package/skills-library/document-processing/express-secure-file-downloads-mern.md +413 -0
- package/skills-library/document-processing/express-secure-file-downloads.md +413 -0
- package/skills-library/document-processing/md-to-word-converter.md +318 -0
- package/skills-library/document-processing/pdf-forms-integration/README.md +101 -0
- package/skills-library/document-processing/pdf-forms-integration/SKILL.md +662 -0
- package/skills-library/ecommerce/ADMIN_PRODUCTS_GUIDE.md +428 -0
- package/skills-library/ecommerce/ECOMMERCE_API_REFERENCE.md +776 -0
- package/skills-library/ecommerce/ECOMMERCE_COMPLETION_SUMMARY.md +673 -0
- package/skills-library/ecommerce/ECOMMERCE_IMPLEMENTATION_GUIDE.md +729 -0
- package/skills-library/ecommerce/ECOMMERCE_QUICK_REFERENCE.md +521 -0
- package/skills-library/ecommerce/ECOMMERCE_TESTING_CHECKLIST.md +565 -0
- package/skills-library/ecommerce/ECOMMERCE_WORKFLOW_GUIDE.md +1059 -0
- package/skills-library/ecommerce/PRODUCT_CREATION_EXPANDED.md +522 -0
- package/skills-library/ecommerce/agentic-commerce-protocol.md +203 -0
- package/skills-library/ecommerce/cart-abandonment-recovery.md +236 -0
- package/skills-library/ecommerce/cart-architecture-patterns.md +300 -0
- package/skills-library/ecommerce/cart-item-count-indicator.md +264 -0
- package/skills-library/ecommerce/checkout-ux-conversion.md +227 -0
- package/skills-library/ecommerce/composable-commerce-selection.md +166 -0
- package/skills-library/ecommerce/ecommerce-analytics-patterns.md +167 -0
- package/skills-library/ecommerce/fraud-detection-patterns.md +179 -0
- package/skills-library/ecommerce/inventory-stock-management.md +270 -0
- package/skills-library/ecommerce/order-saga-state-machine.md +336 -0
- package/skills-library/ecommerce/payment-provider-abstraction.md +245 -0
- package/skills-library/ecommerce/pci-compliance-checklist.md +192 -0
- package/skills-library/ecommerce/refund-chargeback-handling.md +177 -0
- package/skills-library/ecommerce/shipping-carrier-integration.md +218 -0
- package/skills-library/ecommerce/webhook-idempotency-patterns.md +253 -0
- package/skills-library/excalidraw-diagrams/.github/workflows/ci.yml +558 -0
- package/skills-library/excalidraw-diagrams/.github/workflows/prompt-gallery.yml +448 -0
- package/skills-library/excalidraw-diagrams/.github/workflows/release.yml +42 -0
- package/skills-library/excalidraw-diagrams/.github/workflows/test-reusable-ci.yml +25 -0
- package/skills-library/excalidraw-diagrams/CLAUDE.md +57 -0
- package/skills-library/excalidraw-diagrams/LICENSE +21 -0
- package/skills-library/excalidraw-diagrams/README.md +178 -0
- package/skills-library/excalidraw-diagrams/SKILL.md +715 -0
- package/skills-library/form-solutions/BUTTON_TYPE_FORM_SUBMISSION.md +336 -0
- package/skills-library/form-solutions/FILLABLE_PDF_IMPLEMENTATION.md +226 -0
- package/skills-library/form-solutions/SURVEYJS_QUESTIONNAIRE_SYSTEM.md +367 -0
- package/skills-library/form-solutions/tiptap-minimal-setup.md +690 -0
- package/skills-library/frontend/scholarly-classification-bubble-map.md +149 -0
- package/skills-library/infrastructure/ci-cd-pipeline-builder.md +517 -0
- package/skills-library/infrastructure/observability-designer.md +264 -0
- package/skills-library/infrastructure/performance-profiler.md +621 -0
- package/skills-library/installer-wizard-patterns.md +249 -0
- package/skills-library/integrations/CLAUDE_CODE_TOKEN_ANALYTICS.md +160 -0
- package/skills-library/integrations/CONFIGURABLE_AI_PROVIDER_SELECTION.md +728 -0
- package/skills-library/integrations/SOCKET_IO_BROADCAST_ALL_VS_ROOM.md +141 -0
- package/skills-library/integrations/VIRTUAL_MEETINGS_IMPLEMENTATION.md +374 -0
- package/skills-library/integrations/WORDPRESS_LEARNDASH_DATA_RECOVERY.md +53 -0
- package/skills-library/integrations/YOUTUBE_API_SETUP.md +141 -0
- package/skills-library/integrations/YOUTUBE_BOOKMARKING_EXPLANATION.md +252 -0
- package/skills-library/integrations/YOUTUBE_BOOKMARKING_SOLUTION.md +268 -0
- package/skills-library/integrations/YOUTUBE_OAUTH_SETUP_GUIDE.md +200 -0
- package/skills-library/integrations/YOUTUBE_VIDEO_FIX_COMPLETE.md +192 -0
- package/skills-library/integrations/ai-ml/GEMINI_AI_RAG_PIPELINE_COMPLETE_GUIDE.md +195 -0
- package/skills-library/integrations/ai-ml/GEMINI_IMAGE_GENERATION_SETUP.md +64 -0
- package/skills-library/integrations/cloudflare/cloudflare-turnstile-debugging.md +202 -0
- package/skills-library/integrations/cloudflare/cloudflare-turnstile-implementation.md +476 -0
- package/skills-library/integrations/cloudflare-turnstile-debugging.md +202 -0
- package/skills-library/integrations/cloudflare-turnstile-implementation.md +476 -0
- package/skills-library/integrations/ghost-creator-monetization-pattern.md +454 -0
- package/skills-library/integrations/headless-cms-architecture.md +484 -0
- package/skills-library/integrations/headless-cms-stack-selection.md +183 -0
- package/skills-library/integrations/payload-cms-patterns.md +674 -0
- package/skills-library/integrations/realtimestt-openwakeword-cuda-windows.md +229 -0
- package/skills-library/integrations/rss-podcast-integration.md +300 -0
- package/skills-library/integrations/wordpress/WORDPRESS_LEARNDASH_DATA_RECOVERY.md +53 -0
- package/skills-library/integrations/youtube/YOUTUBE_API_SETUP.md +141 -0
- package/skills-library/integrations/youtube/YOUTUBE_BOOKMARKING_EXPLANATION.md +252 -0
- package/skills-library/integrations/youtube/YOUTUBE_BOOKMARKING_SOLUTION.md +268 -0
- package/skills-library/integrations/youtube/YOUTUBE_OAUTH_SETUP_GUIDE.md +200 -0
- package/skills-library/integrations/youtube/YOUTUBE_VIDEO_FIX_COMPLETE.md +192 -0
- package/skills-library/marketing/campaign-analytics.md +97 -0
- package/skills-library/marketing/content-creator.md +105 -0
- package/skills-library/marketing/marketing-strategy-pmm.md +94 -0
- package/skills-library/marketing/social-media-analyzer.md +81 -0
- package/skills-library/methodology/ADVANCED_ORCHESTRATION_PATTERNS.md +401 -0
- package/skills-library/methodology/AGENT_SELF_IMPROVEMENT_LOOP.md +179 -0
- package/skills-library/methodology/BREATH_BASED_PARALLEL_EXECUTION.md +1 -1
- package/skills-library/methodology/CLEANSING_CYCLE.md +358 -0
- package/skills-library/methodology/CONFIDENCE_ANNOTATION_PATTERN.md +143 -0
- package/skills-library/methodology/CRITICAL_PATTERNS_DOCUMENTATION_COMPLETE.md +204 -0
- package/skills-library/methodology/DELIVERABLES_SUMMARY.md +341 -0
- package/skills-library/methodology/DIFFICULTY_AWARE_AGENT_ROUTING.md +252 -0
- package/skills-library/methodology/EVOLUTIONARY_SKILL_SYNTHESIS.md +219 -0
- package/skills-library/methodology/GLOMERULUS_DECISION_GATE.md +223 -0
- package/skills-library/methodology/HIBERNATION_SYSTEM.md +231 -0
- package/skills-library/methodology/INSTRUMENTATION_OVER_RESTRICTION.md +192 -0
- package/skills-library/methodology/MASTER_COMPLETION_SUMMARY.md +444 -0
- package/skills-library/methodology/MASTER_SESSION_COMPLETION.md +743 -0
- package/skills-library/methodology/MERN_QUICK_REFERENCE.md +358 -0
- package/skills-library/methodology/ORGAN_AGENT_MAPPING.md +177 -0
- package/skills-library/methodology/PARALLEL_WAVE_BASED_REFACTORING.md +440 -0
- package/skills-library/methodology/QUICK_REFERENCE.md +358 -0
- package/skills-library/methodology/SDFT_ONPOLICY_SELF_DISTILLATION.md +186 -0
- package/skills-library/methodology/SELF_QUESTIONING_TASK_GENERATION.md +270 -0
- package/skills-library/methodology/SESSION_COMPLETION_SUMMARY.md +304 -0
- package/skills-library/methodology/SESSION_SUMMARY.md +432 -0
- package/skills-library/methodology/WARRIOR_WORKFLOW_DEBUGGING_PROTOCOL.md +252 -0
- package/skills-library/methodology/tech-debt-tracker.md +570 -0
- package/skills-library/parallel-debug/SKILL.md +60 -0
- package/skills-library/patterns-standards/API_PATTERN_FIX_SUMMARY.md +236 -0
- package/skills-library/patterns-standards/BATCH_OPERATIONS_WITH_PROGRESS_MODAL.md +362 -0
- package/skills-library/patterns-standards/CRITICAL_CODING_PATTERNS.md +639 -0
- package/skills-library/patterns-standards/DARK_MODE_MODAL_VISIBILITY.md +258 -0
- package/skills-library/patterns-standards/ERROR_RESILIENCE_IMPLEMENTATION.md +375 -0
- package/skills-library/patterns-standards/ES_MODULE_IMPORT_HOISTING_DOTENV.md +298 -0
- package/skills-library/patterns-standards/NESTED_BACKDROP_FILTER_CSS_ARTIFACT_FIX.md +76 -0
- package/skills-library/patterns-standards/ORDERED_DETECTOR_PIPELINE_GRACEFUL_FALLBACK.md +333 -0
- package/skills-library/patterns-standards/PHASE_IMPORT_ERROR_DEBUGGING.md +271 -0
- package/skills-library/patterns-standards/PYNPUT_GLOBAL_HOTKEY_VK_MATCHING.md +252 -0
- package/skills-library/patterns-standards/REACT_USEEFFECT_CASCADE_RESET_FIX.md +132 -0
- package/skills-library/patterns-standards/SUBMENU_HOVER_DROPDOWN_PATTERN.md +225 -0
- package/skills-library/patterns-standards/TAILWIND_TEXT_VISIBILITY_OVERRIDE.md +322 -0
- package/skills-library/patterns-standards/THEME_AWARE_CSS_VARIABLES_PATTERN.md +209 -0
- package/skills-library/patterns-standards/THEME_USER_OBJECT_PROPERTY_NAMING.md +194 -0
- package/skills-library/patterns-standards/TOOLTIP_BLOCKING_CLICKS_FIX.md +267 -0
- package/skills-library/patterns-standards/claude-code-plugin-structure.md +235 -0
- package/skills-library/patterns-standards/react-i18next-setup.md +429 -0
- package/skills-library/patterns-standards/thesys-c1-generative-ui-integration.md +967 -0
- package/skills-library/plugin-development/CLAUDE_CODE_COMMAND_REGISTRATION_SILENT_FAILURE.md +315 -0
- package/skills-library/plugin-development/plugin-command-namespace-vs-global.md +390 -0
- package/skills-library/plugin-development/plugin-doc-auto-generation.md +172 -0
- package/skills-library/security/GITHUB_REPO_SECURITY_AUDIT.md +115 -0
- package/skills-library/security/admin-deletion-safety.md +396 -0
- package/skills-library/security/application-vuln-patterns.md +477 -0
- package/skills-library/security/env-secrets-manager.md +686 -0
- package/skills-library/security/secure-ai-application-templates.md +347 -0
- package/skills-library/security/sql-injection-prevention-postgresjs.md +151 -0
- package/skills-library/supabase-connection-pooler-fix.md +102 -0
- package/skills-library/system-context/POWERSHELL_BASH_INTEROP.md +82 -0
- package/skills-library/system-context/SERVICE_LIFECYCLE_MANAGEMENT.md +119 -0
- package/skills-library/system-context/SKILL.md +40 -0
- package/skills-library/system-context/WINDOWS_DEV_ENVIRONMENT.md +73 -0
- package/skills-library/testing/E2E_PLAYWRIGHT_PATTERNS.md +99 -0
- package/skills-library/testing/INTEGRATION_TEST_STRATEGY.md +82 -0
- package/skills-library/testing/RED_GREEN_BUGFIX_GATE.md +203 -0
- package/skills-library/testing/TEST_DATA_MANAGEMENT.md +69 -0
- package/skills-library/testing/VITEST_UNIT_TEST_PATTERNS.md +75 -0
- package/skills-library/testing/playwright-api-security-tests.md +202 -0
- package/skills-library/toolbox/SKILL.md +84 -0
- package/skills-library/toolbox/code-graph-and-web-scraping-mcps.md +237 -0
- package/skills-library/ui-ux-pro-max/ACCESSIBILITY_ESSENTIALS.md +115 -0
- package/skills-library/ui-ux-pro-max/DESIGN_SYSTEM_SCAFFOLDING.md +133 -0
- package/skills-library/ui-ux-pro-max/RESPONSIVE_LAYOUT_PATTERNS.md +119 -0
- package/skills-library/ui-ux-pro-max/SKILL.md +386 -0
- package/skills-library/ui-ux-pro-max/data/charts.csv +26 -0
- package/skills-library/ui-ux-pro-max/data/colors.csv +97 -0
- package/skills-library/ui-ux-pro-max/data/icons.csv +101 -0
- package/skills-library/ui-ux-pro-max/data/landing.csv +31 -0
- package/skills-library/ui-ux-pro-max/data/products.csv +97 -0
- package/skills-library/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/skills-library/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/skills-library/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/skills-library/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/skills-library/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/skills-library/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/skills-library/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/skills-library/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/skills-library/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills-library/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/skills-library/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/skills-library/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/skills-library/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/skills-library/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/skills-library/ui-ux-pro-max/data/styles.csv +68 -0
- package/skills-library/ui-ux-pro-max/data/typography.csv +58 -0
- package/skills-library/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/skills-library/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills-library/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/skills-library/wordpress-style-theme-components.md +1526 -0
- package/templates/ASSUMPTIONS.md +1 -1
- package/templates/DECISION_LOG.md +0 -1
- package/templates/phase-prompt.md +1 -1
- package/templates/phoenix-comparison.md +6 -6
- package/templates/skill-api-integration.md +106 -0
- package/templates/skill-architecture-pattern.md +92 -0
- package/templates/skill-debug-pattern.md +98 -0
- package/templates/skill-devops-recipe.md +107 -0
- package/templates/skill-general.md +65 -0
- package/templates/skill-ui-component.md +113 -0
- package/tools/uat-runner.py +179 -0
- package/version.json +7 -3
- package/workflows/handoff-session.md +2 -2
- package/workflows/new-project.md +2 -2
- package/workflows/plan-phase.md +1 -1
- package/.claude-plugin/plugin.json +0 -64
- package/skills-library/_general/methodology/LIVE_BREADCRUMB_PROTOCOL.md +0 -242
- package/skills-library/_general/methodology/llm-judge-memory-crud.md +0 -241
- package/skills-library/methodology/REFLEXION_MEMORY_PATTERN.md +0 -183
- package/skills-library/methodology/RESEARCH_BACKED_WORKFLOW_UPGRADE.md +0 -263
- package/skills-library/methodology/SABBATH_REST_PATTERN.md +0 -267
- package/skills-library/methodology/STONE_AND_SCAFFOLD.md +0 -220
- package/skills-library/specialists/api-architecture/api-designer.md +0 -49
- package/skills-library/specialists/api-architecture/graphql-architect.md +0 -49
- package/skills-library/specialists/api-architecture/mcp-developer.md +0 -51
- package/skills-library/specialists/api-architecture/microservices-architect.md +0 -50
- package/skills-library/specialists/api-architecture/websocket-engineer.md +0 -48
- package/skills-library/specialists/backend/django-expert.md +0 -52
- package/skills-library/specialists/backend/fastapi-expert.md +0 -52
- package/skills-library/specialists/backend/laravel-specialist.md +0 -52
- package/skills-library/specialists/backend/nestjs-expert.md +0 -51
- package/skills-library/specialists/backend/rails-expert.md +0 -53
- package/skills-library/specialists/backend/spring-boot-engineer.md +0 -56
- package/skills-library/specialists/data-ml/fine-tuning-expert.md +0 -48
- package/skills-library/specialists/data-ml/ml-pipeline.md +0 -47
- package/skills-library/specialists/data-ml/pandas-pro.md +0 -47
- package/skills-library/specialists/data-ml/rag-architect.md +0 -51
- package/skills-library/specialists/data-ml/spark-engineer.md +0 -47
- package/skills-library/specialists/frontend/angular-architect.md +0 -52
- package/skills-library/specialists/frontend/flutter-expert.md +0 -51
- package/skills-library/specialists/frontend/nextjs-developer.md +0 -54
- package/skills-library/specialists/frontend/react-native-expert.md +0 -50
- package/skills-library/specialists/frontend/vue-expert.md +0 -51
- package/skills-library/specialists/infrastructure/chaos-engineer.md +0 -74
- package/skills-library/specialists/infrastructure/cloud-architect.md +0 -70
- package/skills-library/specialists/infrastructure/database-optimizer.md +0 -64
- package/skills-library/specialists/infrastructure/devops-engineer.md +0 -70
- package/skills-library/specialists/infrastructure/kubernetes-specialist.md +0 -52
- package/skills-library/specialists/infrastructure/monitoring-expert.md +0 -70
- package/skills-library/specialists/infrastructure/sre-engineer.md +0 -70
- package/skills-library/specialists/infrastructure/terraform-engineer.md +0 -51
- package/skills-library/specialists/languages/cpp-pro.md +0 -74
- package/skills-library/specialists/languages/csharp-developer.md +0 -69
- package/skills-library/specialists/languages/dotnet-core-expert.md +0 -54
- package/skills-library/specialists/languages/golang-pro.md +0 -51
- package/skills-library/specialists/languages/java-architect.md +0 -49
- package/skills-library/specialists/languages/javascript-pro.md +0 -68
- package/skills-library/specialists/languages/kotlin-specialist.md +0 -68
- package/skills-library/specialists/languages/php-pro.md +0 -49
- package/skills-library/specialists/languages/python-pro.md +0 -52
- package/skills-library/specialists/languages/react-expert.md +0 -51
- package/skills-library/specialists/languages/rust-engineer.md +0 -50
- package/skills-library/specialists/languages/sql-pro.md +0 -56
- package/skills-library/specialists/languages/swift-expert.md +0 -69
- package/skills-library/specialists/languages/typescript-pro.md +0 -51
- package/skills-library/specialists/platform/atlassian-mcp.md +0 -52
- package/skills-library/specialists/platform/embedded-systems.md +0 -53
- package/skills-library/specialists/platform/game-developer.md +0 -53
- package/skills-library/specialists/platform/salesforce-developer.md +0 -53
- package/skills-library/specialists/platform/shopify-expert.md +0 -49
- package/skills-library/specialists/platform/wordpress-pro.md +0 -49
- package/skills-library/specialists/quality/code-documenter.md +0 -51
- package/skills-library/specialists/quality/code-reviewer.md +0 -67
- package/skills-library/specialists/quality/debugging-wizard.md +0 -51
- package/skills-library/specialists/quality/fullstack-guardian.md +0 -51
- package/skills-library/specialists/quality/legacy-modernizer.md +0 -50
- package/skills-library/specialists/quality/playwright-expert.md +0 -65
- package/skills-library/specialists/quality/spec-miner.md +0 -56
- package/skills-library/specialists/quality/test-master.md +0 -65
- package/skills-library/specialists/security/secure-code-guardian.md +0 -55
- package/skills-library/specialists/security/security-reviewer.md +0 -53
- package/skills-library/specialists/workflow/architecture-designer.md +0 -53
- package/skills-library/specialists/workflow/cli-developer.md +0 -70
- package/skills-library/specialists/workflow/feature-forge.md +0 -65
- package/skills-library/specialists/workflow/prompt-engineer.md +0 -54
- package/skills-library/specialists/workflow/the-fool.md +0 -62
- /package/skills-library/{performance → _general/performance}/cache-augmented-generation.md +0 -0
- /package/skills-library/{debugging → parallel-debug}/FAILURE_TAXONOMY_CLASSIFICATION.md +0 -0
- /package/skills-library/{debugging → parallel-debug}/THREE_AGENT_HYPOTHESIS_DEBUGGING.md +0 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: service-lifecycle-management
|
|
3
|
+
category: system-context
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
contributed: 2026-02-24
|
|
6
|
+
contributor: dominion-flow
|
|
7
|
+
tags: [services, docker, qdrant, ollama, neo4j, lifecycle, startup]
|
|
8
|
+
difficulty: easy
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Service Lifecycle Management
|
|
12
|
+
|
|
13
|
+
## Problem
|
|
14
|
+
|
|
15
|
+
Projects depend on background services (Qdrant, Ollama, Neo4j, MySQL). Agents waste time when services are down, get cryptic connection errors, and don't know how to start/stop/check each service.
|
|
16
|
+
|
|
17
|
+
## Solution Pattern
|
|
18
|
+
|
|
19
|
+
Standard check → start → verify flow for each service.
|
|
20
|
+
|
|
21
|
+
## Service Quick Reference
|
|
22
|
+
|
|
23
|
+
### Qdrant (Native — Primary)
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# Check
|
|
27
|
+
curl -s http://localhost:6335/healthz
|
|
28
|
+
|
|
29
|
+
# Start (background)
|
|
30
|
+
"C:/path/to/tools/qdrant/qdrant.exe" --config-path "C:/path/to/tools/qdrant/config.yaml" &
|
|
31
|
+
|
|
32
|
+
# Collection stats
|
|
33
|
+
curl -s http://localhost:6335/collections/power_flow_memory | jq '.result.points_count'
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Qdrant (Docker — Backup)
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# Check
|
|
40
|
+
docker ps | grep qdrant
|
|
41
|
+
|
|
42
|
+
# Start
|
|
43
|
+
docker start qdrant # if container exists
|
|
44
|
+
# OR create new:
|
|
45
|
+
docker run -d --name qdrant -p 6333:6333 -v qdrant_storage:/qdrant/storage qdrant/qdrant
|
|
46
|
+
|
|
47
|
+
# Verify
|
|
48
|
+
curl -s http://localhost:6333/healthz
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Ollama
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# Check
|
|
55
|
+
curl -s http://localhost:11434/api/tags | jq '.models[].name'
|
|
56
|
+
|
|
57
|
+
# Start (if not running)
|
|
58
|
+
ollama serve &
|
|
59
|
+
|
|
60
|
+
# Verify embedding model
|
|
61
|
+
curl -s http://localhost:11434/api/tags | jq '.models[] | select(.name | contains("nomic"))'
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Neo4j (Docker — CodeGraphContext)
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
# Check
|
|
68
|
+
docker ps | grep neo4j-cgc
|
|
69
|
+
|
|
70
|
+
# Start
|
|
71
|
+
docker start neo4j-cgc
|
|
72
|
+
|
|
73
|
+
# Verify
|
|
74
|
+
curl -s http://localhost:7474 -u neo4j:codegraph123
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### XAMPP MySQL
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# Check
|
|
81
|
+
"C:/xampp/mysql/bin/mysqladmin" -u root status
|
|
82
|
+
|
|
83
|
+
# Start via XAMPP control panel or:
|
|
84
|
+
"C:/xampp/xampp_start.exe"
|
|
85
|
+
|
|
86
|
+
# Connect
|
|
87
|
+
"C:/xampp/mysql/bin/mysql" -u root -p
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Graceful Degradation Pattern
|
|
91
|
+
|
|
92
|
+
When a service is unavailable, don't crash — degrade:
|
|
93
|
+
|
|
94
|
+
```javascript
|
|
95
|
+
// Pattern: try service, fall back gracefully
|
|
96
|
+
async function searchMemory(query) {
|
|
97
|
+
try {
|
|
98
|
+
const results = await qdrantSearch(query)
|
|
99
|
+
return results
|
|
100
|
+
} catch (err) {
|
|
101
|
+
if (err.code === 'ECONNREFUSED') {
|
|
102
|
+
console.log('Qdrant unavailable — searching flat files instead')
|
|
103
|
+
return flatFileSearch(query)
|
|
104
|
+
}
|
|
105
|
+
throw err
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## When to Use
|
|
111
|
+
|
|
112
|
+
- Starting a work session that depends on background services
|
|
113
|
+
- Debugging connection refused / timeout errors
|
|
114
|
+
- Setting up services on a fresh machine
|
|
115
|
+
|
|
116
|
+
## When NOT to Use
|
|
117
|
+
|
|
118
|
+
- Cloud-hosted services (they have their own health checks)
|
|
119
|
+
- CI/CD (use Docker Compose for all services)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: system-context
|
|
3
|
+
description: Hardware specs, system recovery history, and environment details for the current system
|
|
4
|
+
user-invocable: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# System Context
|
|
8
|
+
|
|
9
|
+
## Hardware
|
|
10
|
+
|
|
11
|
+
- **Laptop:** ASUS ROG Zephyrus M16 (GU603ZX-XS97)
|
|
12
|
+
- **CPU:** Intel i9-12900H
|
|
13
|
+
- **GPU:** NVIDIA RTX 3080 Ti
|
|
14
|
+
- **RAM:** 32GB
|
|
15
|
+
- **SSD:** Samsung 990 Pro 2TB (C:)
|
|
16
|
+
- **BIOS:** GU603ZX.311
|
|
17
|
+
|
|
18
|
+
## System Recovery (December 2025)
|
|
19
|
+
|
|
20
|
+
The system recovered from a catastrophic SSD failure:
|
|
21
|
+
- Old Samsung 2TB died after overheating during Windows Update
|
|
22
|
+
- New Samsung 990 Pro 2TB installed
|
|
23
|
+
- All applications migrated from D: to C:
|
|
24
|
+
- D: drive (dying SSD) physically removed
|
|
25
|
+
- BIOS updated to GU603ZX.311
|
|
26
|
+
- Secure Boot enabled
|
|
27
|
+
|
|
28
|
+
**If system issues arise, check the WARRIOR handoffs for detailed history.**
|
|
29
|
+
|
|
30
|
+
## Database Backups
|
|
31
|
+
|
|
32
|
+
- `C:\Users\FirstName\Downloads\mongodb_data_backup`
|
|
33
|
+
- `C:\Users\FirstName\Downloads\bookcraft_db_backup_16959`
|
|
34
|
+
|
|
35
|
+
## SessionStart Hook
|
|
36
|
+
|
|
37
|
+
The `warrior-workflow` plugin includes a SessionStart hook:
|
|
38
|
+
1. Runs on: `startup`, `resume`, `clear`, `compact`
|
|
39
|
+
2. Location: `C:\Users\<username>\.claude\plugins\warrior-workflow\hooks\`
|
|
40
|
+
3. Displays recent handoff files and reminds to read them
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: windows-dev-environment
|
|
3
|
+
category: system-context
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
contributed: 2026-02-24
|
|
6
|
+
contributor: dominion-flow
|
|
7
|
+
tags: [windows, development, environment, xampp, node, python, paths]
|
|
8
|
+
difficulty: easy
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Windows Dev Environment Patterns
|
|
12
|
+
|
|
13
|
+
## Problem
|
|
14
|
+
|
|
15
|
+
Windows dev environments juggle multiple runtimes (Node, Python, PHP/XAMPP), services (Docker, Qdrant, Ollama, Neo4j), and path conventions (backslash vs forward slash). Agents frequently trip on path separators, missing executables, and port conflicts.
|
|
16
|
+
|
|
17
|
+
## Solution Pattern
|
|
18
|
+
|
|
19
|
+
Standardize environment assumptions and provide quick diagnostics.
|
|
20
|
+
|
|
21
|
+
## Path Conventions
|
|
22
|
+
|
|
23
|
+
```javascript
|
|
24
|
+
// ALWAYS use forward slashes in code — Node/Git Bash handle them fine on Windows
|
|
25
|
+
const repoPath = 'C:/path/to/repos/my-project'
|
|
26
|
+
|
|
27
|
+
// NEVER hardcode backslashes in strings
|
|
28
|
+
const bad = 'C:\\path\\to\\my-project' // Escape hell
|
|
29
|
+
|
|
30
|
+
// For path joining, use path.join() — it handles the OS separator
|
|
31
|
+
const fullPath = path.join(process.cwd(), 'src', 'index.ts')
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Runtime Locations (This System)
|
|
35
|
+
|
|
36
|
+
| Runtime | Path | Port |
|
|
37
|
+
|---------|------|------|
|
|
38
|
+
| Node.js | System PATH | — |
|
|
39
|
+
| Python 3.12 | `C:\Users\FirstName\AppData\Local\Programs\Python\Python312\` | — |
|
|
40
|
+
| XAMPP MySQL | `C:\xampp\mysql\bin\` | 3306 |
|
|
41
|
+
| XAMPP Apache | `C:\xampp\apache\bin\` | 80/443 |
|
|
42
|
+
| Qdrant (native) | `C:\path\to\qdrant\qdrant.exe` | 6335 |
|
|
43
|
+
| Qdrant (Docker) | Docker container | 6333 |
|
|
44
|
+
| Neo4j (Docker) | Container `neo4j-cgc` | 7474/7687 |
|
|
45
|
+
| Ollama | System PATH | 11434 |
|
|
46
|
+
|
|
47
|
+
## Port Conflict Resolution
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# Find what's using a port
|
|
51
|
+
netstat -ano | findstr :5001
|
|
52
|
+
|
|
53
|
+
# Kill by PID (from the last column of netstat output)
|
|
54
|
+
taskkill /PID 12345 /F
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Common Gotchas
|
|
58
|
+
|
|
59
|
+
1. **XAMPP MySQL vs Docker MySQL** — Both default to 3306. XAMPP wins if started first.
|
|
60
|
+
2. **Python `pip` vs `pip3`** — On Windows, `pip` usually maps to Python 3.12 already.
|
|
61
|
+
3. **Git Bash vs PowerShell** — Git Bash uses Unix paths (`/c/Users/...`), PowerShell uses Windows paths. Agent shell is bash.
|
|
62
|
+
4. **`node_modules/.bin`** — Use `npx` or `npm run` instead of direct paths.
|
|
63
|
+
|
|
64
|
+
## When to Use
|
|
65
|
+
|
|
66
|
+
- Setting up a new project on this machine
|
|
67
|
+
- Debugging "command not found" or port conflicts
|
|
68
|
+
- Choosing between Docker and native service instances
|
|
69
|
+
|
|
70
|
+
## When NOT to Use
|
|
71
|
+
|
|
72
|
+
- Linux/Mac environments
|
|
73
|
+
- CI/CD pipelines (use Docker there)
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: e2e-playwright-patterns
|
|
3
|
+
category: testing
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
contributed: 2026-02-24
|
|
6
|
+
contributor: dominion-flow
|
|
7
|
+
tags: [testing, e2e, playwright, browser, ui]
|
|
8
|
+
difficulty: medium
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# E2E Playwright Patterns
|
|
12
|
+
|
|
13
|
+
## Problem
|
|
14
|
+
|
|
15
|
+
Frontend looks correct in development but breaks in production. User flows span multiple pages, involve authentication, form submissions, and API calls. Manual QA can't cover all paths.
|
|
16
|
+
|
|
17
|
+
## Solution Pattern
|
|
18
|
+
|
|
19
|
+
Playwright end-to-end tests that simulate real user behavior: login, navigate, fill forms, click buttons, verify results — all in a real browser.
|
|
20
|
+
|
|
21
|
+
## Code Example
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import { test, expect } from '@playwright/test';
|
|
25
|
+
|
|
26
|
+
test.describe('Course enrollment flow', () => {
|
|
27
|
+
test.beforeEach(async ({ page }) => {
|
|
28
|
+
// Login as student
|
|
29
|
+
await page.goto('/login');
|
|
30
|
+
await page.fill('[name="email"]', 'student@test.com');
|
|
31
|
+
await page.fill('[name="password"]', 'testpass');
|
|
32
|
+
await page.click('button[type="submit"]');
|
|
33
|
+
await page.waitForURL('/dashboard');
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test('student can browse and enroll in a course', async ({ page }) => {
|
|
37
|
+
// Navigate to courses
|
|
38
|
+
await page.click('text=Browse Courses');
|
|
39
|
+
await expect(page.locator('h1')).toHaveText('Available Courses');
|
|
40
|
+
|
|
41
|
+
// Click first course
|
|
42
|
+
await page.click('.course-card >> nth=0');
|
|
43
|
+
await expect(page.locator('.course-title')).toBeVisible();
|
|
44
|
+
|
|
45
|
+
// Enroll
|
|
46
|
+
await page.click('button:has-text("Enroll")');
|
|
47
|
+
await expect(page.locator('.enrollment-success')).toBeVisible();
|
|
48
|
+
|
|
49
|
+
// Verify in dashboard
|
|
50
|
+
await page.goto('/dashboard');
|
|
51
|
+
await expect(page.locator('.my-courses')).toContainText('Test Course');
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Key Patterns
|
|
57
|
+
|
|
58
|
+
### 1. Page Object Model (for complex flows)
|
|
59
|
+
```typescript
|
|
60
|
+
class LoginPage {
|
|
61
|
+
constructor(private page: Page) {}
|
|
62
|
+
async login(email: string, password: string) {
|
|
63
|
+
await this.page.fill('[name="email"]', email);
|
|
64
|
+
await this.page.fill('[name="password"]', password);
|
|
65
|
+
await this.page.click('button[type="submit"]');
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 2. Test Isolation
|
|
71
|
+
- Each test should be independent
|
|
72
|
+
- Use API calls for setup (faster than UI)
|
|
73
|
+
- Clean state between tests
|
|
74
|
+
|
|
75
|
+
### 3. Selectors Priority
|
|
76
|
+
1. `getByRole()` — Best (accessibility-driven)
|
|
77
|
+
2. `getByText()` — Good (user-visible)
|
|
78
|
+
3. `data-testid` — Acceptable (stable but not semantic)
|
|
79
|
+
4. CSS selectors — Last resort (fragile)
|
|
80
|
+
|
|
81
|
+
### 4. Waiting
|
|
82
|
+
```typescript
|
|
83
|
+
// Good — explicit wait for condition
|
|
84
|
+
await expect(page.locator('.result')).toBeVisible({ timeout: 5000 });
|
|
85
|
+
|
|
86
|
+
// Bad — arbitrary sleep
|
|
87
|
+
await page.waitForTimeout(3000);
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## When to Use
|
|
91
|
+
- Critical user flows (login, checkout, enrollment)
|
|
92
|
+
- Multi-page interactions
|
|
93
|
+
- Form submission and validation
|
|
94
|
+
- After major UI changes
|
|
95
|
+
|
|
96
|
+
## When NOT to Use
|
|
97
|
+
- API testing (use integration tests)
|
|
98
|
+
- Unit logic (use unit tests)
|
|
99
|
+
- Visual regression (use screenshot comparison tools)
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: integration-test-strategy
|
|
3
|
+
category: testing
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
contributed: 2026-02-24
|
|
6
|
+
contributor: dominion-flow
|
|
7
|
+
tags: [testing, integration, api, database, supertest]
|
|
8
|
+
difficulty: medium
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Integration Test Strategy
|
|
12
|
+
|
|
13
|
+
## Problem
|
|
14
|
+
|
|
15
|
+
Unit tests pass but the app breaks because components don't work together. Database queries, API routes, middleware chains, and authentication flows have integration seams that unit tests miss.
|
|
16
|
+
|
|
17
|
+
## Solution Pattern
|
|
18
|
+
|
|
19
|
+
Test real interactions between components with a test database, actual HTTP requests, and real middleware — but with controlled test data and isolated state.
|
|
20
|
+
|
|
21
|
+
## Code Example
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
// Express API integration test
|
|
25
|
+
import request from 'supertest';
|
|
26
|
+
import { app } from '../src/app';
|
|
27
|
+
import { db } from '../src/database';
|
|
28
|
+
|
|
29
|
+
describe('POST /api/courses', () => {
|
|
30
|
+
beforeAll(async () => {
|
|
31
|
+
await db.migrate.latest();
|
|
32
|
+
await db.seed.run();
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
afterAll(async () => {
|
|
36
|
+
await db.destroy();
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test('creates course with valid data and auth', async () => {
|
|
40
|
+
const token = await getTestToken('admin');
|
|
41
|
+
|
|
42
|
+
const res = await request(app)
|
|
43
|
+
.post('/api/courses')
|
|
44
|
+
.set('Authorization', `Bearer ${token}`)
|
|
45
|
+
.send({ title: 'Test Course', description: 'Integration test' });
|
|
46
|
+
|
|
47
|
+
expect(res.status).toBe(201);
|
|
48
|
+
expect(res.body.course.title).toBe('Test Course');
|
|
49
|
+
|
|
50
|
+
// Verify side effects
|
|
51
|
+
const saved = await db('courses').where({ id: res.body.course.id }).first();
|
|
52
|
+
expect(saved).toBeTruthy();
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
test('rejects unauthenticated request', async () => {
|
|
56
|
+
const res = await request(app)
|
|
57
|
+
.post('/api/courses')
|
|
58
|
+
.send({ title: 'Test' });
|
|
59
|
+
|
|
60
|
+
expect(res.status).toBe(401);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Key Principles
|
|
66
|
+
|
|
67
|
+
1. **Real database** — Use test database, not mocks
|
|
68
|
+
2. **Real HTTP** — Use supertest, not function calls
|
|
69
|
+
3. **Real middleware** — Auth, validation, rate limiting all active
|
|
70
|
+
4. **Isolated state** — Each test suite seeds and cleans its own data
|
|
71
|
+
5. **Test the contract** — Status codes, response shapes, error formats
|
|
72
|
+
|
|
73
|
+
## When to Use
|
|
74
|
+
- API route testing
|
|
75
|
+
- Database query testing with real SQL
|
|
76
|
+
- Authentication/authorization flows
|
|
77
|
+
- Middleware chain behavior
|
|
78
|
+
|
|
79
|
+
## When NOT to Use
|
|
80
|
+
- Pure business logic (use unit tests)
|
|
81
|
+
- UI rendering (use component tests)
|
|
82
|
+
- Performance benchmarks (use load testing)
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: red-green-bugfix-gate
|
|
3
|
+
category: testing
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
contributed: 2026-03-10
|
|
6
|
+
contributor: scribe-bible
|
|
7
|
+
last_updated: 2026-03-10
|
|
8
|
+
tags: [debugging, tdd, regression, playwright, vitest, bugfix]
|
|
9
|
+
difficulty: medium
|
|
10
|
+
scope: general
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Red-Green Bugfix Gate
|
|
14
|
+
|
|
15
|
+
## Problem
|
|
16
|
+
|
|
17
|
+
Bug fixes applied without tests have three failure modes:
|
|
18
|
+
1. **The fix doesn't actually work** — you think it's fixed because the error message changed, but the underlying behavior is still wrong.
|
|
19
|
+
2. **The bug comes back** — a future change re-introduces it because nothing enforces the correct behavior.
|
|
20
|
+
3. **The fix masks a deeper issue** — the symptom disappears but the root cause persists.
|
|
21
|
+
|
|
22
|
+
Writing a test AFTER the fix proves nothing — you're just writing a test that passes. The test must fail FIRST (proving it captures the bug), then pass AFTER the fix (proving the fix works).
|
|
23
|
+
|
|
24
|
+
## Solution Pattern
|
|
25
|
+
|
|
26
|
+
**Red-Green Gate:** Insert a mandatory step between "root cause confirmed" and "apply fix":
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
ROOT CAUSE CONFIRMED
|
|
30
|
+
│
|
|
31
|
+
▼
|
|
32
|
+
Write failing test ← RED: test reproduces the bug
|
|
33
|
+
│
|
|
34
|
+
▼
|
|
35
|
+
Apply the fix
|
|
36
|
+
│
|
|
37
|
+
▼
|
|
38
|
+
Run test again ← GREEN: test passes, proving fix works
|
|
39
|
+
│
|
|
40
|
+
▼
|
|
41
|
+
Run full test suite ← NO REGRESSIONS
|
|
42
|
+
│
|
|
43
|
+
▼
|
|
44
|
+
RESOLVED
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Decision Matrix: What Kind of Test?
|
|
48
|
+
|
|
49
|
+
Not every bug needs the same test type. Pick based on where the bug lives:
|
|
50
|
+
|
|
51
|
+
| Bug Location | Test Type | Tool | Speed |
|
|
52
|
+
|-------------|-----------|------|-------|
|
|
53
|
+
| Pure function / service logic | Unit test | Vitest | <1s |
|
|
54
|
+
| API endpoint response | Integration test | Vitest + supertest | <3s |
|
|
55
|
+
| Database query / ORM | Integration test | Vitest + test DB | <5s |
|
|
56
|
+
| UI interaction / render | Component test | Vitest + testing-library | <3s |
|
|
57
|
+
| Multi-page flow / auth | E2E test | Playwright | <30s |
|
|
58
|
+
| Race condition / timing | E2E or manual | Playwright | varies |
|
|
59
|
+
| Environment / config | Smoke test or skip | curl / manual | <1s |
|
|
60
|
+
|
|
61
|
+
### When to SKIP the test gate:
|
|
62
|
+
|
|
63
|
+
- **Typo fixes** — wrong import path, misspelled variable. The existing test suite catches these.
|
|
64
|
+
- **Config/environment bugs** — wrong port, missing env var. Not worth a test.
|
|
65
|
+
- **One-line obvious fixes** — wrong model ID, missing `await`. If the fix is self-evident from the root cause AND existing tests cover the area, skip.
|
|
66
|
+
- **Third-party API changes** — the bug is external. Mock-based tests would be brittle.
|
|
67
|
+
|
|
68
|
+
**Rule of thumb:** If you eliminated 2+ hypotheses to find the root cause, the bug is non-obvious enough to deserve a test.
|
|
69
|
+
|
|
70
|
+
## Code Example
|
|
71
|
+
|
|
72
|
+
### Before (no test gate — fix applied blind)
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
// Developer sees: "Cannot read properties of undefined (reading 'length')"
|
|
76
|
+
// Developer adds optional chaining:
|
|
77
|
+
results.entities?.length // "fixed"
|
|
78
|
+
// But: did this actually fix the user-facing behavior? Is the data still wrong?
|
|
79
|
+
// No test exists to answer this.
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### After (Red-Green Gate)
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
// Step 1: RED — Write test that reproduces the bug
|
|
86
|
+
test('LightRAG search returns valid result shape even with no data', async () => {
|
|
87
|
+
const res = await request.post('/api/lightrag/search', {
|
|
88
|
+
data: { userId: 'test', query: 'nonexistent', mode: 'hybrid' },
|
|
89
|
+
})
|
|
90
|
+
expect(res.status()).toBe(200)
|
|
91
|
+
const data = await res.json()
|
|
92
|
+
// This is what crashed — accessing .length on undefined arrays
|
|
93
|
+
expect(data.entities).toBeDefined()
|
|
94
|
+
expect(Array.isArray(data.entities)).toBe(true)
|
|
95
|
+
})
|
|
96
|
+
// Run → FAILS (reproduces the bug) ✓
|
|
97
|
+
|
|
98
|
+
// Step 2: Apply the fix (optional chaining + default empty arrays)
|
|
99
|
+
|
|
100
|
+
// Step 3: GREEN — Run same test → PASSES ✓
|
|
101
|
+
// Step 4: Run full suite → NO REGRESSIONS ✓
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Playwright E2E Example (UI bugs)
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
// RED: Write test that reproduces the UI crash
|
|
108
|
+
test('Settings page shows ElevenLabs without crash', async ({ page }) => {
|
|
109
|
+
await page.goto('/settings')
|
|
110
|
+
const apiKeysTab = page.locator('button:has-text("API Keys")')
|
|
111
|
+
await apiKeysTab.click()
|
|
112
|
+
// This crashed before the fix
|
|
113
|
+
await expect(page.locator('text=ElevenLabs').first()).toBeVisible()
|
|
114
|
+
// Verify no JS errors
|
|
115
|
+
const body = page.locator('body')
|
|
116
|
+
await expect(body).not.toContainText('Cannot read properties')
|
|
117
|
+
})
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Integration with fire-debugger
|
|
121
|
+
|
|
122
|
+
This gate injects between the existing Steps 4 and 5 of the fire-debugger agent:
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
Step 4: Root Cause Confirmed
|
|
126
|
+
│
|
|
127
|
+
┌────────┴────────┐
|
|
128
|
+
│ RED-GREEN GATE │ ← NEW
|
|
129
|
+
│ │
|
|
130
|
+
│ Skip if: │
|
|
131
|
+
│ • Typo/config │
|
|
132
|
+
│ • Existing test │
|
|
133
|
+
│ covers it │
|
|
134
|
+
│ • Self-evident │
|
|
135
|
+
│ one-liner │
|
|
136
|
+
│ │
|
|
137
|
+
│ Otherwise: │
|
|
138
|
+
│ 1. Write RED │
|
|
139
|
+
│ 2. Verify FAIL │
|
|
140
|
+
│ 3. Apply fix │
|
|
141
|
+
│ 4. Verify GREEN │
|
|
142
|
+
└────────┬────────┘
|
|
143
|
+
│
|
|
144
|
+
Step 5: Apply Fix (fix already applied in gate)
|
|
145
|
+
Step 6: Verify Fix (test already passes from gate)
|
|
146
|
+
Step 7: Regression Check (run full suite)
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### What to add to fire-debugger.md (Step 4.5):
|
|
150
|
+
|
|
151
|
+
```markdown
|
|
152
|
+
### Step 4.5: Red-Green Bugfix Gate
|
|
153
|
+
|
|
154
|
+
After confirming root cause, decide: does this bug warrant a regression test?
|
|
155
|
+
|
|
156
|
+
**Write a test if ANY of:**
|
|
157
|
+
- 2+ hypotheses were eliminated (non-obvious bug)
|
|
158
|
+
- The bug is in business logic, not config
|
|
159
|
+
- The area has no existing test coverage
|
|
160
|
+
- The bug could recur from future changes
|
|
161
|
+
|
|
162
|
+
**Skip the test if ALL of:**
|
|
163
|
+
- Fix is a one-line typo/config change
|
|
164
|
+
- Existing tests already cover this path
|
|
165
|
+
- Bug is environmental (ports, env vars, OS-specific)
|
|
166
|
+
|
|
167
|
+
**If writing a test:**
|
|
168
|
+
1. Write the test BEFORE applying the fix
|
|
169
|
+
2. Run it — must FAIL (RED) to prove it captures the bug
|
|
170
|
+
3. Apply the fix
|
|
171
|
+
4. Run it — must PASS (GREEN) to prove the fix works
|
|
172
|
+
5. Continue to Step 7 (regression check)
|
|
173
|
+
|
|
174
|
+
**Test placement:**
|
|
175
|
+
- Unit/integration → alongside existing test files
|
|
176
|
+
- E2E → `frontend/e2e/` or project's E2E directory
|
|
177
|
+
- Name: `{bug-slug}.regression.test.ts` or add to existing spec
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## When to Use
|
|
181
|
+
|
|
182
|
+
- After confirming a bug's root cause, before applying the fix
|
|
183
|
+
- When the bug was non-obvious (required hypothesis elimination)
|
|
184
|
+
- When the fixed area lacks test coverage
|
|
185
|
+
- When the bug could silently recur
|
|
186
|
+
|
|
187
|
+
## When NOT to Use
|
|
188
|
+
|
|
189
|
+
- Typo fixes (wrong import, misspelled variable)
|
|
190
|
+
- Environment/config bugs (missing env var, wrong port)
|
|
191
|
+
- Bugs in third-party dependencies (test the workaround, not the library)
|
|
192
|
+
- Emergency hotfixes where time pressure overrides (but file a TODO to add the test later)
|
|
193
|
+
|
|
194
|
+
## Related Skills
|
|
195
|
+
|
|
196
|
+
- [VITEST_UNIT_TEST_PATTERNS](./VITEST_UNIT_TEST_PATTERNS.md) — unit test patterns
|
|
197
|
+
- [E2E_PLAYWRIGHT_PATTERNS](./E2E_PLAYWRIGHT_PATTERNS.md) — E2E test patterns
|
|
198
|
+
- [INTEGRATION_TEST_STRATEGY](./INTEGRATION_TEST_STRATEGY.md) — integration test strategy
|
|
199
|
+
|
|
200
|
+
## References
|
|
201
|
+
|
|
202
|
+
- TDD for bug fixes: Kent Beck's "make the failing test pass" principle
|
|
203
|
+
- Today's real-world example: Scribe Bible v3.0 — LightRAG crash, FFmpeg lavfi, login rate limiter. The rate limiter bug was only caught because a screenshot (the test's failure artifact) showed "Too many login attempts" — without that test, we'd have debugged auth logic for hours.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test-data-management
|
|
3
|
+
category: testing
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
contributed: 2026-02-24
|
|
6
|
+
contributor: dominion-flow
|
|
7
|
+
tags: [testing, fixtures, seeds, factories, test-data]
|
|
8
|
+
difficulty: easy
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Test Data Management
|
|
12
|
+
|
|
13
|
+
## Problem
|
|
14
|
+
|
|
15
|
+
Tests break when shared test data changes. Tests depend on specific database state. Seed data grows stale and doesn't match the current schema. Tests that modify data break other tests.
|
|
16
|
+
|
|
17
|
+
## Solution Pattern
|
|
18
|
+
|
|
19
|
+
Use factories for dynamic data, seeds for reference data, and transaction rollback for isolation.
|
|
20
|
+
|
|
21
|
+
## Code Example
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
// Factory pattern — create data on demand
|
|
25
|
+
function createTestUser(overrides = {}) {
|
|
26
|
+
return {
|
|
27
|
+
email: `test-${Date.now()}@example.com`,
|
|
28
|
+
name: 'Test User',
|
|
29
|
+
role: 'student',
|
|
30
|
+
...overrides,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function createTestCourse(overrides = {}) {
|
|
35
|
+
return {
|
|
36
|
+
title: `Course ${Date.now()}`,
|
|
37
|
+
description: 'Test course',
|
|
38
|
+
instructor_id: null,
|
|
39
|
+
...overrides,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Usage in tests
|
|
44
|
+
test('enrolled student sees course content', async () => {
|
|
45
|
+
const user = await db('users').insert(createTestUser({ role: 'student' })).returning('*');
|
|
46
|
+
const course = await db('courses').insert(createTestCourse()).returning('*');
|
|
47
|
+
await db('enrollments').insert({ user_id: user[0].id, course_id: course[0].id });
|
|
48
|
+
|
|
49
|
+
// Test with fresh, isolated data
|
|
50
|
+
const content = await getCourseContent(user[0].id, course[0].id);
|
|
51
|
+
expect(content).toBeDefined();
|
|
52
|
+
});
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Key Patterns
|
|
56
|
+
|
|
57
|
+
1. **Factories > Fixtures** — Generate unique data per test to prevent collisions
|
|
58
|
+
2. **Transaction rollback** — Wrap each test in a transaction, rollback after
|
|
59
|
+
3. **Minimal data** — Only create what the test needs, nothing more
|
|
60
|
+
4. **No shared mutable state** — Each test creates its own data
|
|
61
|
+
|
|
62
|
+
## When to Use
|
|
63
|
+
- Any test that requires database state
|
|
64
|
+
- Integration tests with multiple related records
|
|
65
|
+
- Tests that verify data relationships
|
|
66
|
+
|
|
67
|
+
## When NOT to Use
|
|
68
|
+
- Unit tests with mocked data
|
|
69
|
+
- Tests that don't touch the database
|