@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,256 @@
|
|
|
1
|
+
# PM2 Environment Variable Caching - Root Cause & Solution
|
|
2
|
+
|
|
3
|
+
## The Problem
|
|
4
|
+
|
|
5
|
+
Environment variables in `.env` files are not being reloaded when you restart a PM2 process.
|
|
6
|
+
After editing `.env` on the server and running `pm2 restart`, the application still uses the OLD values.
|
|
7
|
+
|
|
8
|
+
### Common Error Messages
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
Error: Stripe is not configured. Please set STRIPE_SECRET_KEY environment variable.
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
Error: DATABASE_URL not set
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
Error: JWT_SECRET missing
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Why It Was Hard
|
|
23
|
+
|
|
24
|
+
- **Silent failure** - No errors during restart, app runs but uses wrong values
|
|
25
|
+
- **Intermittent appearance** - Works after fresh `pm2 start`, breaks after `pm2 restart`
|
|
26
|
+
- **Misleading debugging** - You check `.env`, see correct values, but app doesn't use them
|
|
27
|
+
- **Confidence trap** - "I definitely set that env var" but PM2 ignores it
|
|
28
|
+
|
|
29
|
+
### Impact
|
|
30
|
+
|
|
31
|
+
- Production services fail silently
|
|
32
|
+
- Payment processing stops (Stripe)
|
|
33
|
+
- Auth fails (JWT_SECRET)
|
|
34
|
+
- Database connections fail
|
|
35
|
+
- Hours wasted re-editing `.env` files that aren't actually the problem
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## The Solution
|
|
40
|
+
|
|
41
|
+
### Root Cause
|
|
42
|
+
|
|
43
|
+
**PM2 caches environment variables when a process is first started.**
|
|
44
|
+
|
|
45
|
+
When you run `pm2 restart`:
|
|
46
|
+
1. PM2 stops the process
|
|
47
|
+
2. PM2 starts a NEW process
|
|
48
|
+
3. PM2 uses the **CACHED** environment from the original `pm2 start`
|
|
49
|
+
4. Your `.env` file changes are **IGNORED**
|
|
50
|
+
|
|
51
|
+
This is by design for performance, but causes this exact issue.
|
|
52
|
+
|
|
53
|
+
### How to Fix
|
|
54
|
+
|
|
55
|
+
**Always use `--update-env` flag when restarting:**
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
# WRONG - does NOT reload .env
|
|
59
|
+
pm2 restart app-name
|
|
60
|
+
|
|
61
|
+
# CORRECT - reloads .env file
|
|
62
|
+
pm2 restart app-name --update-env
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Alternative: Full Stop/Start Cycle
|
|
66
|
+
|
|
67
|
+
If `--update-env` doesn't work (rare edge cases):
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Nuclear option - delete and restart fresh
|
|
71
|
+
pm2 delete app-name
|
|
72
|
+
cd /path/to/app
|
|
73
|
+
pm2 start server.js --name app-name
|
|
74
|
+
pm2 save
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Code Example: Deploy Script Fix
|
|
78
|
+
|
|
79
|
+
**Before (broken):**
|
|
80
|
+
```bash
|
|
81
|
+
# Restart PM2 processes
|
|
82
|
+
echo "Restarting PM2..."
|
|
83
|
+
pm2 restart LMS-SERVER
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**After (working):**
|
|
87
|
+
```bash
|
|
88
|
+
# Restart PM2 processes with --update-env to reload .env file
|
|
89
|
+
# IMPORTANT: Without --update-env, PM2 uses cached environment variables!
|
|
90
|
+
echo "Restarting PM2 with updated environment..."
|
|
91
|
+
pm2 restart LMS-SERVER --update-env
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Testing the Fix
|
|
97
|
+
|
|
98
|
+
### Verify Environment is Loaded
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
# Check what env vars PM2 process is actually using
|
|
102
|
+
pm2 env <app-id>
|
|
103
|
+
|
|
104
|
+
# Or check logs for initialization messages
|
|
105
|
+
pm2 logs app-name --lines 30 | grep -E "(Loaded|initialized|configured)"
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Test Procedure
|
|
109
|
+
|
|
110
|
+
1. SSH to server
|
|
111
|
+
2. Edit `.env` file - change a visible value (like `NODE_ENV=test`)
|
|
112
|
+
3. Run `pm2 restart app-name --update-env`
|
|
113
|
+
4. Check logs to verify new value is used
|
|
114
|
+
5. Restore original value and restart again with `--update-env`
|
|
115
|
+
|
|
116
|
+
### Expected Output
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
[Server] Loaded environment from: .env
|
|
120
|
+
✅ Stripe initialized successfully
|
|
121
|
+
✅ Database connected
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Prevention
|
|
127
|
+
|
|
128
|
+
### 1. Update All Deploy Scripts
|
|
129
|
+
|
|
130
|
+
Find and replace all `pm2 restart` commands:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
# Find all occurrences
|
|
134
|
+
grep -r "pm2 restart" scripts/
|
|
135
|
+
|
|
136
|
+
# Replace with --update-env version
|
|
137
|
+
sed -i 's/pm2 restart all/pm2 restart all --update-env/g' scripts/*.sh
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### 2. Use Ecosystem File
|
|
141
|
+
|
|
142
|
+
Create `ecosystem.config.js` with explicit env vars:
|
|
143
|
+
|
|
144
|
+
```javascript
|
|
145
|
+
module.exports = {
|
|
146
|
+
apps: [{
|
|
147
|
+
name: 'LMS-SERVER',
|
|
148
|
+
script: 'server.js',
|
|
149
|
+
env_file: '.env', // Some PM2 versions support this
|
|
150
|
+
watch: false,
|
|
151
|
+
instances: 1,
|
|
152
|
+
autorestart: true,
|
|
153
|
+
}]
|
|
154
|
+
};
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Then restart with:
|
|
158
|
+
```bash
|
|
159
|
+
pm2 restart ecosystem.config.js --update-env
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### 3. Document in Project README
|
|
163
|
+
|
|
164
|
+
Add this to your deployment docs:
|
|
165
|
+
|
|
166
|
+
```markdown
|
|
167
|
+
## PM2 Restart Commands
|
|
168
|
+
|
|
169
|
+
⚠️ **CRITICAL:** Always use `--update-env` when restarting PM2!
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
# Correct way to restart (reloads .env)
|
|
173
|
+
pm2 restart LMS-SERVER --update-env
|
|
174
|
+
|
|
175
|
+
# WRONG - does NOT reload .env
|
|
176
|
+
pm2 restart LMS-SERVER
|
|
177
|
+
```
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### 4. Add to CLAUDE.md
|
|
181
|
+
|
|
182
|
+
Ensure AI agents know about this:
|
|
183
|
+
|
|
184
|
+
```markdown
|
|
185
|
+
### PM2 Commands (on server)
|
|
186
|
+
```bash
|
|
187
|
+
pm2 restart LMS-SERVER --update-env # USE THIS!
|
|
188
|
+
# ⚠️ Plain 'pm2 restart' does NOT reload .env!
|
|
189
|
+
```
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Related Patterns
|
|
195
|
+
|
|
196
|
+
- [Node.js dotenv Configuration](../patterns-standards/DOTENV_BEST_PRACTICES.md)
|
|
197
|
+
- [Production Deployment Checklist](./PRODUCTION_DEPLOYMENT_CHECKLIST.md)
|
|
198
|
+
- [Environment Variable Security](./ENV_VAR_SECURITY.md)
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Common Mistakes to Avoid
|
|
203
|
+
|
|
204
|
+
- ❌ **Using `pm2 restart` without `--update-env`** - The #1 cause of this issue
|
|
205
|
+
- ❌ **Assuming `.env` changes take effect immediately** - They don't with PM2
|
|
206
|
+
- ❌ **Re-editing `.env` when it's already correct** - Check PM2's cached env instead
|
|
207
|
+
- ❌ **Blaming dotenv package** - The package works fine, PM2 caches the result
|
|
208
|
+
- ❌ **Using `pm2 reload`** - This also doesn't reload env vars
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## PM2 Commands Reference
|
|
213
|
+
|
|
214
|
+
| Command | Reloads .env? | Use Case |
|
|
215
|
+
|---------|--------------|----------|
|
|
216
|
+
| `pm2 restart app` | ❌ No | Quick restart, no env changes |
|
|
217
|
+
| `pm2 restart app --update-env` | ✅ Yes | After editing .env file |
|
|
218
|
+
| `pm2 reload app` | ❌ No | Zero-downtime restart |
|
|
219
|
+
| `pm2 reload app --update-env` | ✅ Yes | Zero-downtime + env reload |
|
|
220
|
+
| `pm2 delete app && pm2 start` | ✅ Yes | Nuclear option, always fresh |
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## Resources
|
|
225
|
+
|
|
226
|
+
- [PM2 Documentation: Environment Variables](https://pm2.keymetrics.io/docs/usage/environment/)
|
|
227
|
+
- [PM2 GitHub Issue: env vars not updating](https://github.com/Unitech/pm2/issues/2252)
|
|
228
|
+
- [Node.js dotenv Documentation](https://www.npmjs.com/package/dotenv)
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## Time to Implement
|
|
233
|
+
|
|
234
|
+
**5 minutes** - Just add `--update-env` to your restart commands
|
|
235
|
+
|
|
236
|
+
## Difficulty Level
|
|
237
|
+
|
|
238
|
+
⭐ (1/5) - Trivial fix once you know about it, but VERY hard to diagnose
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
**Author Notes:**
|
|
243
|
+
|
|
244
|
+
This issue cost hours of debugging before discovering the root cause. The symptoms are extremely misleading - you see correct values in `.env`, you restart PM2, and it still doesn't work. Natural instinct is to check the `.env` file again, or suspect the application code.
|
|
245
|
+
|
|
246
|
+
The key insight: **PM2 is a process manager that caches state.** Once you understand that, the fix is obvious.
|
|
247
|
+
|
|
248
|
+
Every deployment script, every runbook, every piece of documentation that mentions `pm2 restart` should include `--update-env`. Make it muscle memory.
|
|
249
|
+
|
|
250
|
+
**Discovery date:** January 2026
|
|
251
|
+
**Project:** MERN Community LMS
|
|
252
|
+
**Symptom:** "Stripe is not configured" error persisting after fixing .env
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
*When in doubt: `pm2 restart --update-env`*
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
# PM2 Memory Exhaustion - Node.js Heap Size Fix for Production
|
|
2
|
+
|
|
3
|
+
## The Problem
|
|
4
|
+
|
|
5
|
+
Production server experiencing **constant restarts** (4-5 per hour) with email alerts showing brief downtimes of a few seconds. Server appears to crash and auto-restart continuously.
|
|
6
|
+
|
|
7
|
+
### Symptoms
|
|
8
|
+
```
|
|
9
|
+
PM2 Status:
|
|
10
|
+
- Restarts: 53 in 12 hours
|
|
11
|
+
- Uptime: Resets every hour
|
|
12
|
+
- Heap Usage: 94.54% (137 MB / 145 MB)
|
|
13
|
+
- HTTP P95 Latency: 25 seconds (should be <1s)
|
|
14
|
+
- Status: Online but unstable
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### Why It Was Hard
|
|
18
|
+
|
|
19
|
+
- **Silent failure** - No crash stack traces, only brief downtime alerts
|
|
20
|
+
- **Auto-restart masks problem** - PM2 keeps restarting so users don't notice long outages
|
|
21
|
+
- **Looks like code errors** - Initial assumption was application bugs causing crashes
|
|
22
|
+
- **Memory limit not obvious** - Node.js default heap size (~145MB) is invisible in PM2 status
|
|
23
|
+
- **Normal errors in logs** - 404s, CORS, auth failures distract from real issue
|
|
24
|
+
|
|
25
|
+
### Impact
|
|
26
|
+
|
|
27
|
+
- **User experience** - Intermittent errors during restart windows
|
|
28
|
+
- **Operations cost** - Constant email alerts (dozens per day)
|
|
29
|
+
- **Reliability perception** - "Is the site down?" questions from users
|
|
30
|
+
- **Debugging time wasted** - Investigating wrong problems (code errors vs infrastructure)
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## The Solution
|
|
35
|
+
|
|
36
|
+
**Root Cause:** Node.js default heap size (~145 MB) is too small for the application's memory footprint under production load.
|
|
37
|
+
|
|
38
|
+
### Diagnosis Commands
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Check PM2 status and restart count
|
|
42
|
+
ssh user@server "pm2 info APP_NAME | grep -E '(restarts|heap|memory)'"
|
|
43
|
+
|
|
44
|
+
# Check heap usage
|
|
45
|
+
ssh user@server "pm2 info APP_NAME"
|
|
46
|
+
# Look for:
|
|
47
|
+
# - Heap Usage > 90% = CRITICAL
|
|
48
|
+
# - Restarts > 10/day = PROBLEM
|
|
49
|
+
# - Used Heap Size approaching limit
|
|
50
|
+
|
|
51
|
+
# Check Node.js heap limit (if configured)
|
|
52
|
+
ssh user@server "ps aux | grep node"
|
|
53
|
+
# Look for --max-old-space-size flag
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### The Fix: Create PM2 Ecosystem Config
|
|
57
|
+
|
|
58
|
+
Create `ecosystem.config.js` in project root:
|
|
59
|
+
|
|
60
|
+
```javascript
|
|
61
|
+
module.exports = {
|
|
62
|
+
apps: [{
|
|
63
|
+
name: 'LMS-SERVER',
|
|
64
|
+
script: './server/server.js',
|
|
65
|
+
cwd: '/home/user/app-directory',
|
|
66
|
+
instances: 1,
|
|
67
|
+
exec_mode: 'fork',
|
|
68
|
+
|
|
69
|
+
// CRITICAL: Memory management
|
|
70
|
+
max_memory_restart: '450M', // Restart before OOM (before 512M limit)
|
|
71
|
+
node_args: '--max-old-space-size=512', // 512MB heap (vs default ~145MB)
|
|
72
|
+
|
|
73
|
+
// Restart policy
|
|
74
|
+
autorestart: true,
|
|
75
|
+
max_restarts: 10,
|
|
76
|
+
min_uptime: '10s',
|
|
77
|
+
|
|
78
|
+
// Logging
|
|
79
|
+
error_file: '/home/user/.pm2/logs/APP-error.log',
|
|
80
|
+
out_file: '/home/user/.pm2/logs/APP-out.log',
|
|
81
|
+
log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
|
|
82
|
+
|
|
83
|
+
// Environment
|
|
84
|
+
env: {
|
|
85
|
+
NODE_ENV: 'production',
|
|
86
|
+
PORT: 3000
|
|
87
|
+
}
|
|
88
|
+
}]
|
|
89
|
+
};
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Apply the Configuration
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
# SSH into server
|
|
96
|
+
ssh user@server
|
|
97
|
+
|
|
98
|
+
# Navigate to app directory
|
|
99
|
+
cd ~/app-directory
|
|
100
|
+
|
|
101
|
+
# Stop current PM2 process
|
|
102
|
+
pm2 delete APP_NAME
|
|
103
|
+
|
|
104
|
+
# Start with new configuration
|
|
105
|
+
pm2 start ecosystem.config.js
|
|
106
|
+
|
|
107
|
+
# Save PM2 configuration (persist across reboots)
|
|
108
|
+
pm2 save
|
|
109
|
+
|
|
110
|
+
# Verify new heap size
|
|
111
|
+
pm2 info APP_NAME | grep "interpreter args"
|
|
112
|
+
# Should show: --max-old-space-size=512
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Memory Sizing Guidelines
|
|
116
|
+
|
|
117
|
+
| Server RAM | Recommended Heap Size | Notes |
|
|
118
|
+
|------------|----------------------|-------|
|
|
119
|
+
| 512 MB | 256 MB | Minimal setup |
|
|
120
|
+
| 1 GB | 512 MB | Small to medium apps |
|
|
121
|
+
| 2 GB | 1 GB | Medium apps |
|
|
122
|
+
| 4+ GB | 1.5-2 GB | Large apps |
|
|
123
|
+
|
|
124
|
+
**Rule of Thumb:** Set heap to **40-50% of available server RAM** if running single process.
|
|
125
|
+
|
|
126
|
+
### Choosing max_memory_restart Value
|
|
127
|
+
|
|
128
|
+
Set `max_memory_restart` to **~90% of heap size**:
|
|
129
|
+
- Heap 512 MB → restart at 450 MB
|
|
130
|
+
- Heap 1 GB → restart at 900 MB
|
|
131
|
+
- Heap 2 GB → restart at 1800 MB
|
|
132
|
+
|
|
133
|
+
This allows graceful restart before OOM crash.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Testing the Fix
|
|
138
|
+
|
|
139
|
+
### Before
|
|
140
|
+
```bash
|
|
141
|
+
pm2 info LMS-SERVER
|
|
142
|
+
# Heap Usage: 94.54%
|
|
143
|
+
# Restarts: 53 (in 12 hours)
|
|
144
|
+
# HTTP P95 Latency: 25000 ms
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### After
|
|
148
|
+
```bash
|
|
149
|
+
pm2 info LMS-SERVER
|
|
150
|
+
# Heap Usage: 42% (218 MB / 512 MB)
|
|
151
|
+
# Restarts: 0
|
|
152
|
+
# HTTP P95 Latency: <100 ms
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Monitor Over 24 Hours
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
# Check restart count
|
|
159
|
+
ssh user@server "pm2 info APP_NAME | grep restarts"
|
|
160
|
+
|
|
161
|
+
# Monitor memory usage live
|
|
162
|
+
ssh user@server "pm2 monit"
|
|
163
|
+
|
|
164
|
+
# Check logs for OOM errors
|
|
165
|
+
ssh user@server "pm2 logs APP_NAME --err --lines 100 | grep -i 'memory\|heap\|allocation'"
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**Success Criteria:**
|
|
169
|
+
- Restart count stays at 0 or low (<5 per day)
|
|
170
|
+
- Heap usage stays below 80%
|
|
171
|
+
- No email alerts for downtime
|
|
172
|
+
- Response times improve
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Prevention
|
|
177
|
+
|
|
178
|
+
### 1. Always Configure PM2 with Ecosystem File
|
|
179
|
+
|
|
180
|
+
**Never run PM2 without heap size configuration in production.**
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
# ❌ WRONG - Uses Node.js defaults
|
|
184
|
+
pm2 start server.js --name APP_NAME
|
|
185
|
+
|
|
186
|
+
# ✅ CORRECT - Uses explicit heap size
|
|
187
|
+
pm2 start ecosystem.config.js
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### 2. Monitor Memory in Staging
|
|
191
|
+
|
|
192
|
+
Test memory usage in staging before production:
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
# Load test in staging
|
|
196
|
+
npm install -g artillery
|
|
197
|
+
artillery quick --count 100 --num 10 https://staging.example.com
|
|
198
|
+
|
|
199
|
+
# Watch memory during load test
|
|
200
|
+
pm2 monit
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### 3. Set Up Alerts
|
|
204
|
+
|
|
205
|
+
Configure PM2 to alert BEFORE memory exhaustion:
|
|
206
|
+
|
|
207
|
+
```javascript
|
|
208
|
+
// In ecosystem.config.js
|
|
209
|
+
max_memory_restart: '450M', // Restart at 450MB
|
|
210
|
+
// Also set up external monitoring (New Relic, Datadog, etc.)
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### 4. Check for Memory Leaks
|
|
214
|
+
|
|
215
|
+
If memory grows over time even with larger heap:
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
# Take heap snapshot
|
|
219
|
+
pm2 trigger APP_NAME km:heapdump
|
|
220
|
+
|
|
221
|
+
# Analyze in Chrome DevTools
|
|
222
|
+
# Look for: setInterval not cleared, event listeners accumulating, large caches
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### 5. Deployment Checklist
|
|
226
|
+
|
|
227
|
+
Before deploying new code:
|
|
228
|
+
|
|
229
|
+
- [ ] Check for `setInterval`/`setTimeout` without cleanup
|
|
230
|
+
- [ ] Verify event listeners are removed
|
|
231
|
+
- [ ] Check for unbounded caches (Map, Set without size limits)
|
|
232
|
+
- [ ] Test memory usage in staging under load
|
|
233
|
+
- [ ] Verify `ecosystem.config.js` is committed and deployed
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## Common Mistakes to Avoid
|
|
238
|
+
|
|
239
|
+
- ❌ **Ignoring heap usage %** - "94% is fine, right?" NO - that's critical
|
|
240
|
+
- ❌ **Assuming code is crashing** - No stack trace = likely memory issue
|
|
241
|
+
- ❌ **Setting heap too low** - "256MB should be enough" - test under load first
|
|
242
|
+
- ❌ **Not using ecosystem config** - PM2 CLI flags don't persist across restarts
|
|
243
|
+
- ❌ **Ignoring restart count** - "PM2 handles it" - but investigate WHY
|
|
244
|
+
- ❌ **Setting heap = total RAM** - Leave room for OS and other processes
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Related Patterns
|
|
249
|
+
|
|
250
|
+
- [Node.js Memory Management Best Practices](../patterns-standards/NODEJS_MEMORY_MANAGEMENT.md)
|
|
251
|
+
- [PM2 Production Configuration Guide](../deployment-security/PM2_PRODUCTION_CONFIG.md)
|
|
252
|
+
- [Memory Leak Detection and Prevention](../patterns-standards/MEMORY_LEAK_DETECTION.md)
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## Resources
|
|
257
|
+
|
|
258
|
+
- [Node.js Memory Management](https://nodejs.org/en/docs/guides/simple-profiling/)
|
|
259
|
+
- [PM2 Ecosystem File Reference](https://pm2.keymetrics.io/docs/usage/application-declaration/)
|
|
260
|
+
- [V8 Heap Size Configuration](https://nodejs.org/api/cli.html#--max-old-space-sizesize-in-megabytes)
|
|
261
|
+
- [PM2 Memory Restart](https://pm2.keymetrics.io/docs/usage/process-management/#max-memory-restart)
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## Time to Implement
|
|
266
|
+
|
|
267
|
+
**15 minutes** - Create config, restart PM2, verify
|
|
268
|
+
|
|
269
|
+
## Difficulty Level
|
|
270
|
+
|
|
271
|
+
⭐⭐ (2/5) - Simple fix once you know the root cause, but diagnosis can be tricky
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## Real-World Example: MERN Community LMS
|
|
276
|
+
|
|
277
|
+
**Date:** February 5, 2026
|
|
278
|
+
**Server:** schooloftheprophets.club (cPanel shared hosting)
|
|
279
|
+
**Problem:** 53 restarts in 12 hours, 94.54% heap usage
|
|
280
|
+
|
|
281
|
+
**Solution Applied:**
|
|
282
|
+
```javascript
|
|
283
|
+
// ecosystem.config.js
|
|
284
|
+
node_args: '--max-old-space-size=512' // 512MB heap
|
|
285
|
+
max_memory_restart: '450M'
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
**Results:**
|
|
289
|
+
- Restarts dropped to 0
|
|
290
|
+
- Heap usage: 42% (healthy)
|
|
291
|
+
- Email alerts stopped
|
|
292
|
+
- Site stability restored
|
|
293
|
+
|
|
294
|
+
**Server specs:**
|
|
295
|
+
- Total RAM: 11 GB
|
|
296
|
+
- Node.js: 18.20.8
|
|
297
|
+
- Previous heap: ~145 MB (default)
|
|
298
|
+
- New heap: 512 MB (3.5x increase)
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## When This Fix Isn't Enough
|
|
303
|
+
|
|
304
|
+
If you still see memory growth after increasing heap size, you likely have a **memory leak**:
|
|
305
|
+
|
|
306
|
+
### Investigation Steps
|
|
307
|
+
|
|
308
|
+
1. **Identify leak sources:**
|
|
309
|
+
```bash
|
|
310
|
+
# Check for unclosed intervals
|
|
311
|
+
grep -r 'setInterval' --include='*.js' | grep -v 'clearInterval'
|
|
312
|
+
|
|
313
|
+
# Check for event listeners
|
|
314
|
+
grep -r '\.on(' --include='*.js' | grep -v '\.off('
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
2. **Take heap snapshots:**
|
|
318
|
+
```bash
|
|
319
|
+
pm2 trigger APP_NAME km:heapdump
|
|
320
|
+
# Analyze in Chrome DevTools Memory Profiler
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
3. **Common leak sources:**
|
|
324
|
+
- WebSocket connections not closed
|
|
325
|
+
- Database connections not released
|
|
326
|
+
- File streams not closed
|
|
327
|
+
- Event listeners accumulating
|
|
328
|
+
- Caches growing unbounded
|
|
329
|
+
- Timers (setInterval) not cleared
|
|
330
|
+
|
|
331
|
+
4. **Fix patterns:**
|
|
332
|
+
```javascript
|
|
333
|
+
// ❌ Memory leak
|
|
334
|
+
setInterval(() => { /* ... */ }, 1000);
|
|
335
|
+
|
|
336
|
+
// ✅ Proper cleanup
|
|
337
|
+
const interval = setInterval(() => { /* ... */ }, 1000);
|
|
338
|
+
process.on('SIGTERM', () => clearInterval(interval));
|
|
339
|
+
|
|
340
|
+
// ❌ Memory leak
|
|
341
|
+
const cache = new Map();
|
|
342
|
+
cache.set(key, value); // Grows forever
|
|
343
|
+
|
|
344
|
+
// ✅ Size-limited cache
|
|
345
|
+
const cache = new Map();
|
|
346
|
+
if (cache.size > 1000) {
|
|
347
|
+
const firstKey = cache.keys().next().value;
|
|
348
|
+
cache.delete(firstKey);
|
|
349
|
+
}
|
|
350
|
+
cache.set(key, value);
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
## Author Notes
|
|
356
|
+
|
|
357
|
+
This took 30 minutes to diagnose after receiving email alerts about constant restarts. The key insight was recognizing that:
|
|
358
|
+
|
|
359
|
+
1. **No stack traces = not a code crash** - Memory exhaustion
|
|
360
|
+
2. **High heap % + restarts = undersized heap** - Not a leak
|
|
361
|
+
3. **PM2 auto-restart = masks the problem** - Seems "fine" but isn't
|
|
362
|
+
|
|
363
|
+
The fix was trivial (add ecosystem config), but diagnosis required understanding Node.js memory management and PM2 behavior.
|
|
364
|
+
|
|
365
|
+
**Critical lesson:** Always check heap usage % FGTAT when investigating production instability. It's often the simplest explanation.
|
|
366
|
+
|
|
367
|
+
---
|
|
368
|
+
|
|
369
|
+
**Last Updated:** February 5, 2026
|
|
370
|
+
**Tested On:** Node.js 18.20.8, PM2 5.x, cPanel shared hosting
|