@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,284 @@
|
|
|
1
|
+
# Node 18 Dependency Compatibility - CRITICAL Deployment Safety Rules
|
|
2
|
+
|
|
3
|
+
## The Problem
|
|
4
|
+
|
|
5
|
+
Production server crashed with `ReferenceError: File is not defined` after deploying code that included `open-graph-scraper@6.11.0`. The package pulled in `undici@7.20.0` which uses the `File` global — only available in Node 20+. Server runs Node 18.20.8 on shared hosting (cPanel + PM2).
|
|
6
|
+
|
|
7
|
+
### The Crash Chain
|
|
8
|
+
```
|
|
9
|
+
open-graph-scraper@6.11.0
|
|
10
|
+
└── cheerio@1.2.0
|
|
11
|
+
└── undici@7.20.0 ← Requires Node 20+
|
|
12
|
+
└── Uses `File` global (Node 20+ only)
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### Error Message
|
|
16
|
+
```
|
|
17
|
+
ReferenceError: File is not defined
|
|
18
|
+
at node_modules/.pnpm/undici@7.20.0/node_modules/undici/lib/web/webidl/index.js:534
|
|
19
|
+
at node_modules/.pnpm/undici@7.20.0/node_modules/undici/lib/web/fetch/util.js:12
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Why It Was Hard
|
|
23
|
+
|
|
24
|
+
1. **Silent installation** — `npm install` only WARNS about engine mismatches, it doesn't block
|
|
25
|
+
2. **Transitive dependency** — The breaking package (`undici`) was 3 levels deep, not directly installed
|
|
26
|
+
3. **Worked locally** — Development machine runs Node 20+, so it worked fine
|
|
27
|
+
4. **Ghost in package-lock.json** — Even after removing the package from `package.json`, `package-lock.json` retained the dependency tree
|
|
28
|
+
5. **Branch divergence** — The package was removed from `postgresql-dev` but `student-beautification` still had it because the deletion was never committed as a discrete change to that branch
|
|
29
|
+
6. **Orphaned import files** — `linkPreviewService.js` still imported `open-graph-scraper` even after the package was "removed", causing `ERR_MODULE_NOT_FOUND`
|
|
30
|
+
|
|
31
|
+
### Impact
|
|
32
|
+
|
|
33
|
+
- **Production site completely down** — all API calls failed
|
|
34
|
+
- **PM2 crash loop** — server process kept restarting and failing
|
|
35
|
+
- **Required emergency SSH intervention** — delete node_modules, package-lock.json, clean install
|
|
36
|
+
- **~30 minutes of downtime** for a live educational platform
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## DO's and DON'T's
|
|
41
|
+
|
|
42
|
+
### DO
|
|
43
|
+
|
|
44
|
+
1. **Always check Node engine requirements BEFORE installing any package**
|
|
45
|
+
```bash
|
|
46
|
+
npm info <package-name> engines
|
|
47
|
+
# or check the package's package.json on npm/GitHub
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
2. **Check the FULL dependency tree for Node version requirements**
|
|
51
|
+
```bash
|
|
52
|
+
npm ls --all | grep -i "engine"
|
|
53
|
+
# or check transitive deps manually
|
|
54
|
+
npm info <package> dependencies
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
3. **Delete BOTH `package-lock.json` AND `node_modules/` when debugging dependency issues**
|
|
58
|
+
```bash
|
|
59
|
+
rm -f package-lock.json
|
|
60
|
+
rm -rf node_modules
|
|
61
|
+
npm install --omit=dev # Clean install, production only
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
4. **Ensure file deletions are committed and merged across ALL branches**
|
|
65
|
+
```bash
|
|
66
|
+
# After removing a file on branch A:
|
|
67
|
+
git checkout branch-B
|
|
68
|
+
git merge branch-A # Ensure deletions propagate
|
|
69
|
+
# OR cherry-pick the deletion commit specifically
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
5. **Remove ALL references when uninstalling a package** — not just `package.json`:
|
|
73
|
+
- Import statements in `.js` files
|
|
74
|
+
- Route registrations in `server.js`
|
|
75
|
+
- Controller files
|
|
76
|
+
- Service files
|
|
77
|
+
- Test files
|
|
78
|
+
|
|
79
|
+
6. **Test deployment in a staging environment first** when adding new dependencies
|
|
80
|
+
|
|
81
|
+
7. **Pin major versions** for critical dependencies to prevent surprise breaking changes:
|
|
82
|
+
```json
|
|
83
|
+
"open-graph-scraper": "6.8.0" // exact version, not ^6.8.0
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
8. **Use `npm install --omit=dev`** on production servers (not `npm install`)
|
|
87
|
+
|
|
88
|
+
### DON'T
|
|
89
|
+
|
|
90
|
+
1. **DON'T install packages requiring Node 20+ on Node 18 servers**
|
|
91
|
+
- npm only warns, it does NOT prevent installation
|
|
92
|
+
- The app will crash at runtime, not at install time
|
|
93
|
+
|
|
94
|
+
2. **DON'T trust `npm install` to respect engine requirements**
|
|
95
|
+
```
|
|
96
|
+
npm warn EBADENGINE Unsupported engine
|
|
97
|
+
npm warn EBADENGINE required: { node: '>=20' }
|
|
98
|
+
npm warn EBADENGINE current: { node: 'v18.20.8' }
|
|
99
|
+
```
|
|
100
|
+
These are WARNINGS, not ERRORS. Installation proceeds anyway.
|
|
101
|
+
|
|
102
|
+
3. **DON'T assume branch merges include file deletions from other branches**
|
|
103
|
+
- If you deleted files on `branch-A` but never merged that commit to `branch-B`, `branch-B` still has those files
|
|
104
|
+
- Merging unrelated commits does NOT retroactively include deletions
|
|
105
|
+
|
|
106
|
+
4. **DON'T just remove a package from `package.json` and assume it's gone**
|
|
107
|
+
- `package-lock.json` still references it
|
|
108
|
+
- `node_modules/` still contains it
|
|
109
|
+
- Import statements still reference it
|
|
110
|
+
|
|
111
|
+
5. **DON'T deploy without checking server Node version first**
|
|
112
|
+
```bash
|
|
113
|
+
# On server:
|
|
114
|
+
node -v # Know your version!
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
6. **DON'T add packages to the project without verifying they work on the PRODUCTION Node version**
|
|
118
|
+
- Dev machine may run Node 20+
|
|
119
|
+
- CI may run Node 20+
|
|
120
|
+
- Production shared hosting may be locked to Node 18
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## The Solution
|
|
125
|
+
|
|
126
|
+
### Root Cause
|
|
127
|
+
|
|
128
|
+
`open-graph-scraper@6.11.0` was in `server/package.json` on the `student-beautification` production branch. It was previously removed from `postgresql-dev` (development branch), but the removal never propagated to the production branch. During deployment, `npm install` pulled in `undici@7.20.0` as a transitive dependency, which crashed on Node 18.
|
|
129
|
+
|
|
130
|
+
### How to Fix (Emergency Recovery)
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
# SSH into server
|
|
134
|
+
ssh user@server
|
|
135
|
+
|
|
136
|
+
# 1. Remove the offending package from package.json
|
|
137
|
+
# (edit manually or use sed)
|
|
138
|
+
|
|
139
|
+
# 2. Remove ALL files that import the package
|
|
140
|
+
git rm server/services/linkPreviewService.js
|
|
141
|
+
git rm server/routes/linkPreviewRoutes.js
|
|
142
|
+
git rm server/controllers/linkPreviewController.js
|
|
143
|
+
|
|
144
|
+
# 3. Remove import/use from server.js
|
|
145
|
+
# Edit server.js to remove import and app.use() lines
|
|
146
|
+
|
|
147
|
+
# 4. Nuclear clean install
|
|
148
|
+
rm -f package-lock.json
|
|
149
|
+
rm -rf node_modules
|
|
150
|
+
npm install --omit=dev
|
|
151
|
+
|
|
152
|
+
# 5. Restart PM2
|
|
153
|
+
pm2 restart LMS-SERVER --update-env
|
|
154
|
+
|
|
155
|
+
# 6. Verify
|
|
156
|
+
pm2 logs LMS-SERVER --lines 20
|
|
157
|
+
curl -s http://localhost:5000/api/health
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Prevention: Pre-Deploy Dependency Check
|
|
161
|
+
|
|
162
|
+
Add this to your deployment script:
|
|
163
|
+
```bash
|
|
164
|
+
# Check for Node 20+ only packages before deploying
|
|
165
|
+
echo "Checking dependency compatibility with Node 18..."
|
|
166
|
+
npm ls --all 2>&1 | grep -i "EBADENGINE" && {
|
|
167
|
+
echo "ERROR: Found packages incompatible with production Node version!"
|
|
168
|
+
echo "Fix dependency issues before deploying."
|
|
169
|
+
exit 1
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Testing the Fix
|
|
176
|
+
|
|
177
|
+
### Before (Broken)
|
|
178
|
+
```
|
|
179
|
+
pm2 logs:
|
|
180
|
+
ReferenceError: File is not defined
|
|
181
|
+
at undici/lib/web/webidl/index.js:534
|
|
182
|
+
Process restarting... (crash loop)
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### After (Fixed)
|
|
186
|
+
```
|
|
187
|
+
pm2 logs:
|
|
188
|
+
API available at: http://localhost:5000/api
|
|
189
|
+
DATABASE Connection successful!
|
|
190
|
+
All scheduled jobs started
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Verification Steps
|
|
194
|
+
```bash
|
|
195
|
+
# 1. Check no undici warnings
|
|
196
|
+
npm ls 2>&1 | grep undici # Should return nothing
|
|
197
|
+
|
|
198
|
+
# 2. Check server starts
|
|
199
|
+
pm2 restart LMS-SERVER
|
|
200
|
+
pm2 logs LMS-SERVER --lines 10 # Should show "DATABASE Connection successful!"
|
|
201
|
+
|
|
202
|
+
# 3. Check API responds
|
|
203
|
+
curl http://localhost:5000/api/health
|
|
204
|
+
|
|
205
|
+
# 4. Check site loads
|
|
206
|
+
curl -s https://yoursite.com | head -20
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## Known Node 18 Incompatible Packages (2025-2026)
|
|
212
|
+
|
|
213
|
+
| Package | Version | Reason | Alternative |
|
|
214
|
+
|---------|---------|--------|-------------|
|
|
215
|
+
| `undici` | >= 7.0.0 | Uses `File` global (Node 20+) | Use `undici@6.x` or `node-fetch` |
|
|
216
|
+
| `open-graph-scraper` | >= 6.10.0 | Pulls `undici@7` via `cheerio` | Pin to `6.8.0` or remove |
|
|
217
|
+
| `cheerio` | >= 1.1.0 | Pulls `undici@7` | Pin to `1.0.x` |
|
|
218
|
+
|
|
219
|
+
Add to this list as you discover more.
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## Prevention
|
|
224
|
+
|
|
225
|
+
1. **Add `engines` field to your `package.json`:**
|
|
226
|
+
```json
|
|
227
|
+
{
|
|
228
|
+
"engines": {
|
|
229
|
+
"node": ">=18.0.0 <20.0.0"
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
2. **Set `.npmrc` to enforce engine checks:**
|
|
235
|
+
```ini
|
|
236
|
+
engine-strict=true
|
|
237
|
+
```
|
|
238
|
+
This makes `npm install` FAIL instead of warn when engine requirements don't match.
|
|
239
|
+
|
|
240
|
+
3. **Document server Node version in README/CLAUDE.md**
|
|
241
|
+
|
|
242
|
+
4. **Check dependencies before every deploy** (see script above)
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## Related Patterns
|
|
247
|
+
|
|
248
|
+
- [PM2_ENVIRONMENT_VARIABLE_CACHING.md](./PM2_ENVIRONMENT_VARIABLE_CACHING.md) - PM2 restart gotchas
|
|
249
|
+
- [deployment-changes-not-applying.md](./deployment-changes-not-applying.md) - Stale deployment debugging
|
|
250
|
+
- [env-file-management-production-local.md](./env-file-management-production-local.md) - Environment management
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## Common Mistakes to Avoid
|
|
255
|
+
|
|
256
|
+
- Assuming `npm install` will prevent incompatible packages (it won't)
|
|
257
|
+
- Only removing the package from `package.json` without cleaning `node_modules` and `package-lock.json`
|
|
258
|
+
- Forgetting to remove import statements and route registrations for deleted packages
|
|
259
|
+
- Not checking that file deletions propagated across git branches
|
|
260
|
+
- Testing only on dev machine (Node 20+) and assuming production (Node 18) will work
|
|
261
|
+
- Running `npm install` instead of `npm install --omit=dev` on production
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## Resources
|
|
266
|
+
|
|
267
|
+
- [Node.js Releases](https://nodejs.org/en/about/releases/) - EOL dates and version info
|
|
268
|
+
- [npm engine-strict](https://docs.npmjs.com/cli/v10/using-npm/config#engine-strict) - Enforce engine checks
|
|
269
|
+
- [undici breaking changes](https://github.com/nodejs/undici/releases) - Version requirements
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## Difficulty Level
|
|
274
|
+
|
|
275
|
+
Diagnosing: ⭐⭐⭐⭐ (4/5) - Transitive dependency 3 levels deep, silent installation, works locally
|
|
276
|
+
Fixing: ⭐⭐ (2/5) - Once identified, nuclear clean install resolves it
|
|
277
|
+
Preventing: ⭐ (1/5) - Add `.npmrc` with `engine-strict=true`
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
**Author Notes:**
|
|
282
|
+
This crashed a live educational platform (schooloftheprophets.club) on February 2, 2026. The package had been "removed" from the development branch weeks earlier but the deletion never made it to the production branch. The deploy script ran `npm install` which happily installed the incompatible dependency. PM2 went into a crash loop. ~30 minutes of downtime.
|
|
283
|
+
|
|
284
|
+
The key lesson: **npm is not your safety net on Node version compatibility. YOU are.**
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
# PHP Installer Wizard for Node.js Applications
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
A WordPress-style PHP installer wizard that allows non-technical users to deploy Node.js applications on shared cPanel hosting. The installer handles database configuration, admin account creation, .env file generation, and initial setup.
|
|
5
|
+
|
|
6
|
+
## Architecture
|
|
7
|
+
|
|
8
|
+
### Directory Structure
|
|
9
|
+
```
|
|
10
|
+
install/
|
|
11
|
+
├── index.php # Main entry with AJAX handlers
|
|
12
|
+
├── includes/
|
|
13
|
+
│ ├── requirements.php # System requirements checker
|
|
14
|
+
│ └── functions.php # Helper functions (DB test, .env gen)
|
|
15
|
+
├── steps/
|
|
16
|
+
│ ├── step1.php # Welcome screen
|
|
17
|
+
│ ├── step2.php # Requirements check
|
|
18
|
+
│ ├── step3.php # License key (optional)
|
|
19
|
+
│ ├── step4.php # Database configuration
|
|
20
|
+
│ ├── step5.php # Admin account creation
|
|
21
|
+
│ ├── step6.php # Run installation
|
|
22
|
+
│ └── step7.php # Completion screen
|
|
23
|
+
└── assets/
|
|
24
|
+
├── installer.css # Responsive styles
|
|
25
|
+
└── installer.js # AJAX validation
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Key Features
|
|
29
|
+
1. **Requirements Checking** - PHP version, Node.js, extensions, disk space
|
|
30
|
+
2. **Database Support** - MySQL and PostgreSQL with toggle selection
|
|
31
|
+
3. **Connection Testing** - Real-time database connection validation
|
|
32
|
+
4. **Admin Account** - Secure password with strength indicator
|
|
33
|
+
5. **Progress Tracking** - Visual progress bar during installation
|
|
34
|
+
6. **Error Handling** - Clear error messages for troubleshooting
|
|
35
|
+
|
|
36
|
+
## Implementation
|
|
37
|
+
|
|
38
|
+
### Main Entry Point (index.php)
|
|
39
|
+
```php
|
|
40
|
+
<?php
|
|
41
|
+
session_start();
|
|
42
|
+
error_reporting(0);
|
|
43
|
+
ini_set('display_errors', '0');
|
|
44
|
+
|
|
45
|
+
// AJAX request handler
|
|
46
|
+
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) {
|
|
47
|
+
header('Content-Type: application/json');
|
|
48
|
+
|
|
49
|
+
switch ($_POST['action']) {
|
|
50
|
+
case 'test_database':
|
|
51
|
+
// Test database connection
|
|
52
|
+
$result = testDatabaseConnection($_POST);
|
|
53
|
+
echo json_encode($result);
|
|
54
|
+
exit;
|
|
55
|
+
|
|
56
|
+
case 'save_step':
|
|
57
|
+
// Save step data to session
|
|
58
|
+
$_SESSION['install_config'][$_POST['step']] = $_POST['data'];
|
|
59
|
+
echo json_encode(['success' => true]);
|
|
60
|
+
exit;
|
|
61
|
+
|
|
62
|
+
case 'run_install':
|
|
63
|
+
// Execute installation
|
|
64
|
+
$result = runInstallation($_SESSION['install_config']);
|
|
65
|
+
echo json_encode($result);
|
|
66
|
+
exit;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Step routing
|
|
71
|
+
$step = isset($_GET['step']) ? (int)$_GET['step'] : 1;
|
|
72
|
+
$step = max(1, min(7, $step));
|
|
73
|
+
?>
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Requirements Checker
|
|
77
|
+
```php
|
|
78
|
+
function checkRequirements() {
|
|
79
|
+
$requirements = [];
|
|
80
|
+
|
|
81
|
+
// PHP Version
|
|
82
|
+
$requirements['php_version'] = [
|
|
83
|
+
'name' => 'PHP Version',
|
|
84
|
+
'required' => '7.4+',
|
|
85
|
+
'current' => phpversion(),
|
|
86
|
+
'passed' => version_compare(phpversion(), '7.4.0', '>=')
|
|
87
|
+
];
|
|
88
|
+
|
|
89
|
+
// Node.js Check
|
|
90
|
+
$nodeVersion = shell_exec('node --version 2>&1');
|
|
91
|
+
$requirements['nodejs'] = [
|
|
92
|
+
'name' => 'Node.js',
|
|
93
|
+
'required' => '18.0+',
|
|
94
|
+
'current' => $nodeVersion ? trim($nodeVersion) : 'Not found',
|
|
95
|
+
'passed' => $nodeVersion && version_compare(trim($nodeVersion, 'v'), '18.0.0', '>=')
|
|
96
|
+
];
|
|
97
|
+
|
|
98
|
+
// PHP Extensions
|
|
99
|
+
$extensions = ['pdo', 'pdo_mysql', 'json', 'mbstring'];
|
|
100
|
+
foreach ($extensions as $ext) {
|
|
101
|
+
$requirements["ext_$ext"] = [
|
|
102
|
+
'name' => "PHP Extension: $ext",
|
|
103
|
+
'required' => 'Installed',
|
|
104
|
+
'current' => extension_loaded($ext) ? 'Installed' : 'Missing',
|
|
105
|
+
'passed' => extension_loaded($ext)
|
|
106
|
+
];
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Disk Space
|
|
110
|
+
$freeSpace = disk_free_space('.');
|
|
111
|
+
$requirements['disk_space'] = [
|
|
112
|
+
'name' => 'Disk Space',
|
|
113
|
+
'required' => '100MB',
|
|
114
|
+
'current' => formatBytes($freeSpace),
|
|
115
|
+
'passed' => $freeSpace >= 100 * 1024 * 1024
|
|
116
|
+
];
|
|
117
|
+
|
|
118
|
+
return $requirements;
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Database Connection Test
|
|
123
|
+
```php
|
|
124
|
+
function testDatabaseConnection($config) {
|
|
125
|
+
try {
|
|
126
|
+
$dbType = $config['db_type'] ?? 'mysql';
|
|
127
|
+
$host = $config['db_host'] ?? 'localhost';
|
|
128
|
+
$port = $config['db_port'] ?? ($dbType === 'mysql' ? 3306 : 5432);
|
|
129
|
+
$name = $config['db_name'];
|
|
130
|
+
$user = $config['db_user'];
|
|
131
|
+
$pass = $config['db_pass'];
|
|
132
|
+
|
|
133
|
+
if ($dbType === 'mysql') {
|
|
134
|
+
$dsn = "mysql:host=$host;port=$port;dbname=$name;charset=utf8mb4";
|
|
135
|
+
} else {
|
|
136
|
+
$dsn = "pgsql:host=$host;port=$port;dbname=$name";
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
$pdo = new PDO($dsn, $user, $pass, [
|
|
140
|
+
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
|
141
|
+
PDO::ATTR_TIMEOUT => 5
|
|
142
|
+
]);
|
|
143
|
+
|
|
144
|
+
return ['success' => true, 'message' => 'Connection successful!'];
|
|
145
|
+
} catch (PDOException $e) {
|
|
146
|
+
return ['success' => false, 'message' => $e->getMessage()];
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### .env File Generator
|
|
152
|
+
```php
|
|
153
|
+
function generateEnvFile($config) {
|
|
154
|
+
$dbType = $config['database']['db_type'] ?? 'mysql';
|
|
155
|
+
$port = $config['database']['db_port'] ?? ($dbType === 'mysql' ? 3306 : 5432);
|
|
156
|
+
|
|
157
|
+
$envContent = "# Database Configuration\n";
|
|
158
|
+
$envContent .= "DB_TYPE=" . $dbType . "\n";
|
|
159
|
+
$envContent .= "DB_HOST=" . ($config['database']['db_host'] ?? 'localhost') . "\n";
|
|
160
|
+
$envContent .= "DB_PORT=" . $port . "\n";
|
|
161
|
+
$envContent .= "DB_NAME=" . ($config['database']['db_name'] ?? '') . "\n";
|
|
162
|
+
$envContent .= "DB_USER=" . ($config['database']['db_user'] ?? '') . "\n";
|
|
163
|
+
$envContent .= "DB_PASS=" . ($config['database']['db_pass'] ?? '') . "\n\n";
|
|
164
|
+
|
|
165
|
+
$envContent .= "# Application Settings\n";
|
|
166
|
+
$envContent .= "SITE_NAME=\"" . ($config['database']['site_name'] ?? 'My LMS') . "\"\n";
|
|
167
|
+
$envContent .= "NODE_ENV=production\n";
|
|
168
|
+
$envContent .= "PORT=5000\n\n";
|
|
169
|
+
|
|
170
|
+
$envContent .= "# Security\n";
|
|
171
|
+
$envContent .= "JWT_SECRET=" . bin2hex(random_bytes(32)) . "\n";
|
|
172
|
+
$envContent .= "SESSION_SECRET=" . bin2hex(random_bytes(32)) . "\n";
|
|
173
|
+
|
|
174
|
+
return $envContent;
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## CSS Styling (Mobile-First)
|
|
179
|
+
```css
|
|
180
|
+
:root {
|
|
181
|
+
--primary: #6366f1;
|
|
182
|
+
--primary-dark: #4f46e5;
|
|
183
|
+
--success: #10b981;
|
|
184
|
+
--warning: #f59e0b;
|
|
185
|
+
--danger: #ef4444;
|
|
186
|
+
--background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.installer-container {
|
|
190
|
+
min-height: 100vh;
|
|
191
|
+
background: var(--background);
|
|
192
|
+
padding: 2rem 1rem;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.installer-card {
|
|
196
|
+
max-width: 600px;
|
|
197
|
+
margin: 0 auto;
|
|
198
|
+
background: white;
|
|
199
|
+
border-radius: 1rem;
|
|
200
|
+
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
|
|
201
|
+
padding: 2rem;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.step-indicator {
|
|
205
|
+
display: flex;
|
|
206
|
+
justify-content: space-between;
|
|
207
|
+
margin-bottom: 2rem;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.step-item {
|
|
211
|
+
display: flex;
|
|
212
|
+
flex-direction: column;
|
|
213
|
+
align-items: center;
|
|
214
|
+
gap: 0.5rem;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
.step-item.active .step-icon {
|
|
218
|
+
background: var(--primary);
|
|
219
|
+
color: white;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.step-item.completed .step-icon {
|
|
223
|
+
background: var(--success);
|
|
224
|
+
color: white;
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
## JavaScript (AJAX Handling)
|
|
229
|
+
```javascript
|
|
230
|
+
// Database connection test
|
|
231
|
+
async function testDatabaseConnection() {
|
|
232
|
+
const form = document.getElementById('db-form');
|
|
233
|
+
const formData = new FormData(form);
|
|
234
|
+
formData.append('action', 'test_database');
|
|
235
|
+
|
|
236
|
+
const statusEl = document.getElementById('connection-status');
|
|
237
|
+
statusEl.innerHTML = '<div class="alert alert-info">Testing connection...</div>';
|
|
238
|
+
|
|
239
|
+
try {
|
|
240
|
+
const response = await fetch('', {
|
|
241
|
+
method: 'POST',
|
|
242
|
+
body: formData
|
|
243
|
+
});
|
|
244
|
+
const result = await response.json();
|
|
245
|
+
|
|
246
|
+
if (result.success) {
|
|
247
|
+
statusEl.innerHTML = `<div class="alert alert-success">
|
|
248
|
+
✅ ${result.message}
|
|
249
|
+
</div>`;
|
|
250
|
+
} else {
|
|
251
|
+
statusEl.innerHTML = `<div class="alert alert-danger">
|
|
252
|
+
❌ ${result.message}
|
|
253
|
+
</div>`;
|
|
254
|
+
}
|
|
255
|
+
} catch (error) {
|
|
256
|
+
statusEl.innerHTML = `<div class="alert alert-danger">
|
|
257
|
+
❌ Connection test failed: ${error.message}
|
|
258
|
+
</div>`;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// Run installation with progress
|
|
263
|
+
async function runInstallation() {
|
|
264
|
+
const progressFill = document.querySelector('.progress-fill');
|
|
265
|
+
const logEl = document.getElementById('install-log');
|
|
266
|
+
|
|
267
|
+
const steps = [
|
|
268
|
+
{ action: 'create_env', label: 'Creating configuration...' },
|
|
269
|
+
{ action: 'install_deps', label: 'Installing dependencies...' },
|
|
270
|
+
{ action: 'run_migrations', label: 'Setting up database...' },
|
|
271
|
+
{ action: 'create_admin', label: 'Creating admin account...' },
|
|
272
|
+
{ action: 'finalize', label: 'Finalizing installation...' }
|
|
273
|
+
];
|
|
274
|
+
|
|
275
|
+
for (let i = 0; i < steps.length; i++) {
|
|
276
|
+
const step = steps[i];
|
|
277
|
+
const progress = ((i + 1) / steps.length) * 100;
|
|
278
|
+
|
|
279
|
+
logEl.innerHTML += `<div class="log-item">${step.label}</div>`;
|
|
280
|
+
progressFill.style.width = `${progress}%`;
|
|
281
|
+
|
|
282
|
+
// Execute step via AJAX
|
|
283
|
+
await executeInstallStep(step.action);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
// Redirect to completion
|
|
287
|
+
window.location.href = '?step=7';
|
|
288
|
+
}
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
## Best Practices
|
|
292
|
+
|
|
293
|
+
### Security
|
|
294
|
+
1. **Session-based storage** - Never store passwords in files
|
|
295
|
+
2. **CSRF protection** - Add tokens to forms
|
|
296
|
+
3. **Input validation** - Sanitize all user inputs
|
|
297
|
+
4. **Error suppression** - Hide PHP errors in production
|
|
298
|
+
5. **Delete after install** - Remind users to remove /install folder
|
|
299
|
+
|
|
300
|
+
### User Experience
|
|
301
|
+
1. **Progress feedback** - Show clear progress indicators
|
|
302
|
+
2. **Error messages** - Provide actionable error descriptions
|
|
303
|
+
3. **Mobile responsive** - Works on tablets and phones
|
|
304
|
+
4. **Back navigation** - Allow users to go back and change settings
|
|
305
|
+
|
|
306
|
+
### Compatibility
|
|
307
|
+
1. **Multiple DB support** - MySQL, PostgreSQL
|
|
308
|
+
2. **PHP 7.4+** - Broad hosting compatibility
|
|
309
|
+
3. **No composer** - Self-contained PHP files
|
|
310
|
+
4. **AJAX fallback** - Works without JavaScript (basic mode)
|
|
311
|
+
|
|
312
|
+
## Related Resources
|
|
313
|
+
- `docs/installer/IMPLEMENTATION_VISION.md` - Full implementation plan
|
|
314
|
+
- `docs/installer/DATABASE_ABSTRACTION.md` - Knex.js layer
|
|
315
|
+
- `server/database/README.md` - Node.js database abstraction
|