@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.
Files changed (500) hide show
  1. package/CREDITS.md +25 -0
  2. package/DOMINION-FLOW-OVERVIEW.md +182 -38
  3. package/README.md +399 -455
  4. package/TROUBLESHOOTING.md +264 -264
  5. package/agents/fire-debugger.md +54 -0
  6. package/agents/fire-executor.md +1610 -1033
  7. package/agents/fire-fact-checker.md +1 -1
  8. package/agents/fire-planner.md +85 -17
  9. package/agents/fire-project-researcher.md +1 -1
  10. package/agents/fire-researcher.md +4 -22
  11. package/agents/{fire-phoenix-analyst.md → fire-resurrection-analyst.md} +394 -394
  12. package/agents/fire-reviewer.md +552 -499
  13. package/agents/fire-verifier.md +114 -19
  14. package/bin/cli.js +18 -101
  15. package/commands/fire-0-orient.md +2 -2
  16. package/commands/fire-1a-new.md +50 -15
  17. package/commands/fire-1c-setup.md +33 -5
  18. package/commands/fire-1d-discuss.md +87 -1
  19. package/commands/fire-2-plan.md +556 -527
  20. package/commands/fire-3-execute.md +2046 -1356
  21. package/commands/fire-4-verify.md +975 -906
  22. package/commands/fire-5-handoff.md +46 -5
  23. package/commands/fire-6-resume.md +2 -31
  24. package/commands/fire-add-new-skill.md +138 -19
  25. package/commands/fire-autonomous.md +14 -2
  26. package/commands/fire-complete-milestone.md +1 -1
  27. package/commands/fire-cost.md +179 -183
  28. package/commands/fire-debug.md +1 -6
  29. package/commands/fire-loop-resume.md +2 -2
  30. package/commands/fire-loop-stop.md +1 -1
  31. package/commands/fire-loop.md +2 -15
  32. package/commands/fire-map-codebase.md +1 -1
  33. package/commands/fire-migrate-database.md +548 -0
  34. package/commands/fire-new-milestone.md +1 -1
  35. package/commands/fire-reflect.md +1 -2
  36. package/commands/fire-research.md +142 -21
  37. package/commands/{fire-phoenix.md → fire-resurrect.md} +859 -603
  38. package/commands/fire-scaffold.md +297 -0
  39. package/commands/fire-search.md +1 -2
  40. package/commands/fire-security-scan.md +483 -484
  41. package/commands/fire-setup.md +359 -0
  42. package/commands/fire-skill.md +770 -0
  43. package/commands/fire-skills-diff.md +506 -506
  44. package/commands/fire-skills-history.md +388 -388
  45. package/commands/fire-skills-rollback.md +7 -7
  46. package/commands/fire-skills-sync.md +470 -470
  47. package/commands/fire-test.md +5 -5
  48. package/commands/fire-todos.md +1 -1
  49. package/commands/fire-update.md +5 -5
  50. package/commands/fire-validate-skills.md +282 -0
  51. package/commands/fire-vuln-scan.md +492 -493
  52. package/hooks/run-hook.sh +8 -8
  53. package/hooks/run-session-end.sh +7 -7
  54. package/hooks/session-end.sh +90 -90
  55. package/hooks/session-start.sh +1 -1
  56. package/package.json +4 -24
  57. package/plugin.json +7 -7
  58. package/references/autonomy-levels.md +235 -0
  59. package/references/behavioral-directives.md +95 -3
  60. package/references/blocker-tracking.md +1 -1
  61. package/references/circuit-breaker.md +93 -2
  62. package/references/context-engineering.md +227 -9
  63. package/references/honesty-protocols.md +70 -1
  64. package/references/issue-to-pr-pipeline.md +149 -150
  65. package/references/metrics-and-trends.md +1 -2
  66. package/references/research-improvements.md +4 -108
  67. package/references/sdlc-mapping.md +73 -0
  68. package/references/state-machine.md +151 -0
  69. package/skills-library/AVAILABLE_TOOLS_REFERENCE.md +333 -0
  70. package/skills-library/SKILLS-INDEX.md +57 -558
  71. package/skills-library/SKILLS_LIBRARY_INDEX.md +532 -0
  72. package/skills-library/_general/api-patterns/api-field-name-mismatch.md +107 -0
  73. package/skills-library/_general/api-patterns/streaming-command-timeout.md +122 -0
  74. package/skills-library/_general/api-patterns/streaming-proxy-cors-bypass.md +102 -0
  75. package/skills-library/_general/automation/settings-gui-generator.md +172 -0
  76. package/skills-library/_general/database-solutions/data-type-mapping-reference.md +181 -0
  77. package/skills-library/_general/database-solutions/mysql-limit-offset-string-coercion.md +102 -0
  78. package/skills-library/_general/database-solutions/mysql-to-pg-migration.md +195 -0
  79. package/skills-library/_general/database-solutions/orm-schema-portability.md +193 -0
  80. package/skills-library/_general/database-solutions/persistent-analysis-storage.md +207 -0
  81. package/skills-library/_general/database-solutions/pg-to-mysql-schema-migration-methodology.md +190 -0
  82. package/skills-library/_general/database-solutions/sql-dialect-compatibility-matrix.md +306 -0
  83. package/skills-library/_general/database-solutions/sqlite-to-pg-migration.md +219 -0
  84. package/skills-library/_general/frontend/canvas-bubble-animation-grouping.md +270 -0
  85. package/skills-library/_general/frontend/color-token-migration.md +112 -0
  86. package/skills-library/_general/frontend/framer-motion-layoutid-grouping.md +150 -0
  87. package/skills-library/_general/frontend/pyqt6-settings-dialog.md +191 -0
  88. package/skills-library/_general/frontend/react-flow-animated-layout-switching.md +101 -0
  89. package/skills-library/_general/frontend/react-hooks-order-debugging.md +141 -0
  90. package/skills-library/_general/frontend/redux-localstorage-auth-desync.md +126 -0
  91. package/skills-library/_general/frontend/safari-csp-theme-color-debugging.md +124 -0
  92. package/skills-library/_general/frontend/safari-sw-cache-poisoning.md +138 -0
  93. package/skills-library/_general/frontend/svg-sparkline-no-charting-library.md +131 -0
  94. package/skills-library/_general/growth-marketing/oss-daily-growth-intelligence.md +224 -0
  95. package/skills-library/_general/integrations/claude-code-local-mcp-integration.md +250 -0
  96. package/skills-library/_general/integrations/mcp-composite-tool-orchestration.md +200 -0
  97. package/skills-library/_general/methodology/AGENT_SDK_STANDALONE_TOOLING.md +181 -0
  98. package/skills-library/_general/methodology/AGENT_TEAMS_GUIDE.md +169 -0
  99. package/skills-library/_general/methodology/ALAS_STATEFUL_EXECUTION.md +207 -0
  100. package/skills-library/_general/methodology/AUTO_REVIEWER_SUBAGENT.md +211 -0
  101. package/skills-library/_general/methodology/CONSISTENCY_CHECK_AMBIGUITY_GATE.md +96 -0
  102. package/skills-library/_general/methodology/DEAD_ENDS_SHELF.md +4 -4
  103. package/skills-library/_general/methodology/DISTILL_NOT_DUMP.md +108 -0
  104. package/skills-library/_general/methodology/EXECUTION_PROGRESS_MONITOR.md +157 -0
  105. package/skills-library/_general/methodology/HIERARCHICAL_REVIEW_MARS.md +122 -0
  106. package/skills-library/_general/methodology/MCP_INTER_AGENT_BRIDGE.md +207 -0
  107. package/skills-library/_general/methodology/MERMAID_WIZARD_DIAGRAMS.md +77 -0
  108. package/skills-library/_general/methodology/MISSING_DIMENSION_DETECTOR.md +89 -0
  109. package/skills-library/_general/methodology/MULTI_AGENT_COORDINATION.md +397 -0
  110. package/skills-library/_general/methodology/OBSERVATION_MASKING.md +100 -0
  111. package/skills-library/_general/methodology/PHOENIX_REBUILD_METHODOLOGY.md +82 -11
  112. package/skills-library/_general/methodology/REVIEW_BACKTRACK_PANEL.md +140 -0
  113. package/skills-library/_general/methodology/REVIEW_FIX_LOOP.md +117 -0
  114. package/skills-library/_general/methodology/VOTING_VERDICT_ARBITRATION.md +155 -0
  115. package/skills-library/_general/methodology/ZERO_FRICTION_CLI_SETUP.md +2 -2
  116. package/skills-library/_general/methodology/dead-code-activation.md +123 -0
  117. package/skills-library/_general/methodology/debug-swarm-researcher-escape-hatch.md +240 -240
  118. package/skills-library/_general/methodology/shell-autonomous-loop-fixplan.md +1 -1
  119. package/skills-library/_general/patterns-standards/GOF_DESIGN_PATTERNS_FOR_AI_AGENTS.md +5 -5
  120. package/skills-library/_general/patterns-standards/cascading-failure-diagnosis.md +119 -0
  121. package/skills-library/_general/patterns-standards/domain-specific-layout-algorithms.md +209 -0
  122. package/skills-library/_general/patterns-standards/python-desktop-app-architecture.md +399 -0
  123. package/skills-library/_general/patterns-standards/realtime-monitoring-dashboard.md +457 -0
  124. package/skills-library/_general/patterns-standards/togglable-processing-pipeline.md +169 -0
  125. package/skills-library/_general/performance/liveclock-extraction.md +112 -0
  126. package/skills-library/_general/performance/ref-based-canvas-animation.md +117 -0
  127. package/skills-library/_general/performance/use-visible-interval.md +131 -0
  128. package/skills-library/_general/testing/playwright-firefox-withcredentials-auth-issue.md +104 -0
  129. package/skills-library/_quarantine/README.md +30 -0
  130. package/skills-library/api-patterns/BROADCAST_SCHEDULER_SHARED_EXECUTE_FUNCTION.md +150 -0
  131. package/skills-library/api-patterns/ERROR_RESPONSE_STANDARDS.md +145 -0
  132. package/skills-library/api-patterns/EXPRESS_ROUTE_ORDERING_MIDDLEWARE_INTERCEPTION.md +326 -0
  133. package/skills-library/api-patterns/PAGINATION_PATTERNS.md +137 -0
  134. package/skills-library/api-patterns/PODCAST_PROGRESS_TRACKING_THREE_ROOT_CAUSES.md +277 -0
  135. package/skills-library/api-patterns/RATE_LIMITING_TOGGLE.md +155 -0
  136. package/skills-library/api-patterns/graphql-content-queries.md +708 -0
  137. package/skills-library/appointment-scheduler-design.md +423 -0
  138. package/skills-library/automation/AUTO_POPULATE_COMPLETE_GUIDE.md +631 -0
  139. package/skills-library/automation/CC_WORKFLOW_STUDIO.md +83 -0
  140. package/skills-library/automation/CLAUDE_CODE_SWARM_MODE.md +95 -0
  141. package/skills-library/automation/DAEMON_TRIGGER_FILE_IPC.md +195 -0
  142. package/skills-library/automation/scheduled-content-publishing.md +608 -0
  143. package/skills-library/awesome-workflows/Blogging-Platform-Instructions/view_commands.md +25 -0
  144. package/skills-library/awesome-workflows/CREDENTIAL-SECURITY-WORKFLOW.md +109 -0
  145. package/skills-library/awesome-workflows/DEBUGGING-WORKFLOW.md +124 -0
  146. package/skills-library/awesome-workflows/Design-Review-Workflow/README.md +31 -0
  147. package/skills-library/awesome-workflows/Design-Review-Workflow/design-principles-example.md +129 -0
  148. package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-agent.md +107 -0
  149. package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-claude-md-snippet.md +24 -0
  150. package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-slash-command.md +38 -0
  151. package/skills-library/awesome-workflows/PARALLEL-RESEARCH-WORKFLOW.md +89 -0
  152. package/skills-library/awesome-workflows/PHASE-EXECUTION-WORKFLOW.md +97 -0
  153. package/skills-library/awesome-workflows/SESSION-HANDOFF-WORKFLOW.md +116 -0
  154. package/skills-library/cms-patterns/content-branch-preview.md +515 -0
  155. package/skills-library/cms-patterns/inline-visual-editing.md +666 -0
  156. package/skills-library/cms-patterns/mdx-component-content.md +649 -0
  157. package/skills-library/cms-patterns/media-manager-abstraction.md +827 -0
  158. package/skills-library/cms-patterns/schema-driven-form-generator.md +838 -0
  159. package/skills-library/complexity-metrics/complexity-divider.md +707 -0
  160. package/skills-library/complexity-metrics/work-with-complexity.md +193 -0
  161. package/skills-library/creative-multimedia/animation-stack-guide.md +577 -0
  162. package/skills-library/creative-multimedia/audio-enhancement-pipeline.md +625 -0
  163. package/skills-library/creative-multimedia/content-repurposing-pipeline.md +1146 -0
  164. package/skills-library/creative-multimedia/data-visualization-generator.md +862 -0
  165. package/skills-library/creative-multimedia/doc-to-podcast-pipeline.md +2184 -0
  166. package/skills-library/creative-multimedia/ffmpeg-command-generator.md +405 -0
  167. package/skills-library/creative-multimedia/image-optimization-pipeline.md +605 -0
  168. package/skills-library/creative-multimedia/multi-format-content-generator.md +1759 -0
  169. package/skills-library/creative-multimedia/og-image-generator.md +635 -0
  170. package/skills-library/creative-multimedia/podcast-audio-composition.md +1355 -0
  171. package/skills-library/creative-multimedia/podcast-quality-evaluation.md +1452 -0
  172. package/skills-library/creative-multimedia/podcast-script-generation.md +1841 -0
  173. package/skills-library/creative-multimedia/svg-generation.md +750 -0
  174. package/skills-library/creative-multimedia/text-to-speech-provider-selector.md +1414 -0
  175. package/skills-library/creative-multimedia/transcription-pipeline-selector.md +677 -0
  176. package/skills-library/creative-multimedia/video-streaming-setup.md +559 -0
  177. package/skills-library/database-solutions/AI_RESPONSE_DATABASE_CACHING.md +520 -0
  178. package/skills-library/database-solutions/CONDITIONAL_SQL_MIGRATION_PATTERN.md +119 -0
  179. package/skills-library/database-solutions/DATABASE_COLUMN_NAME_MISMATCH.md +393 -0
  180. package/skills-library/database-solutions/DATABASE_SCHEMA.md +394 -0
  181. package/skills-library/database-solutions/DATABASE_SCHEMA_VERIFICATION_GUIDE.md +348 -0
  182. package/skills-library/database-solutions/DATABASE_STRATEGY.md +71 -0
  183. package/skills-library/database-solutions/ES_MODULE_SEED_SCRIPT_PATTERN.md +52 -0
  184. package/skills-library/database-solutions/MIGRATION_GUIDE.md +3 -0
  185. package/skills-library/database-solutions/PLPGSQL_VARIABLE_CONFLICT_FIX.md +208 -0
  186. package/skills-library/database-solutions/POSTGRESQL_JSONB_DOUBLE_STRINGIFY_FIX.md +245 -0
  187. package/skills-library/database-solutions/POSTGRESQL_LICENSE_TABLE_DESIGN.md +393 -0
  188. package/skills-library/database-solutions/POSTGRESQL_UUID_DOCUMENT_RAG_DUAL_SCOPE.md +732 -0
  189. package/skills-library/database-solutions/POSTGRES_SQL_TEMPLATE_BINDING_ERROR.md +240 -0
  190. package/skills-library/database-solutions/PRISMA_DB_PUSH_DATA_LOSS_PREVENTION.md +141 -0
  191. package/skills-library/database-solutions/PRODUCTION_QUERY_OPTIMIZATION_RESTART_FIX.md +389 -0
  192. package/skills-library/database-solutions/RLS_SECURITY_GUIDE.md +107 -0
  193. package/skills-library/database-solutions/SCHEMA_ENHANCEMENTS_GUIDE.md +373 -0
  194. package/skills-library/database-solutions/SCHEMA_MIGRATION_GUIDE.md +368 -0
  195. package/skills-library/database-solutions/SCHEMA_VERIFICATION_QUICK_REFERENCE.md +104 -0
  196. package/skills-library/database-solutions/ai-erd-generator.md +1213 -0
  197. package/skills-library/database-solutions/content-publishing-states.md +631 -0
  198. package/skills-library/database-solutions/database-schema-designer.md +522 -0
  199. package/skills-library/database-solutions/er-diagram-components.md +569 -0
  200. package/skills-library/database-solutions/er-to-ddl-mapping.md +1405 -0
  201. package/skills-library/database-solutions/erd-creator-textbook-research.md +433 -0
  202. package/skills-library/database-solutions/erd-react-flow-architecture.md +1965 -0
  203. package/skills-library/database-solutions/mariadb-aggregate-function-replacement.md +145 -0
  204. package/skills-library/database-solutions/normalization-validator.md +778 -0
  205. package/skills-library/database-solutions/postgres-full-text-search-content.md +494 -0
  206. package/skills-library/database-solutions/postgresql-to-mysql-runtime-translation.md +286 -0
  207. package/skills-library/database-solutions/regex-alternation-ordering-sql-types.md +92 -0
  208. package/skills-library/database-solutions/reserved-word-context-aware-quoting.md +142 -0
  209. package/skills-library/database-solutions/sql-ddl-generator.md +756 -0
  210. package/skills-library/database-solutions/supabase-connection-pooler-fix.md +102 -0
  211. package/skills-library/deployment-security/CPANEL_NODE_DEPLOYMENT.md +166 -0
  212. package/skills-library/deployment-security/DEPLOYMENT.md +275 -0
  213. package/skills-library/deployment-security/DEPLOYMENT_CHECKLIST.md +363 -0
  214. package/skills-library/deployment-security/DEPLOYMENT_PLAN.md +669 -0
  215. package/skills-library/deployment-security/KNEX_DATABASE_ABSTRACTION.md +444 -0
  216. package/skills-library/deployment-security/LICENSE_KEY_SYSTEM.md +206 -0
  217. package/skills-library/deployment-security/NODE18_DEPENDENCY_COMPATIBILITY.md +284 -0
  218. package/skills-library/deployment-security/PHP_INSTALLER_WIZARD_GUIDE.md +315 -0
  219. package/skills-library/deployment-security/PM2_ENVIRONMENT_VARIABLE_CACHING.md +256 -0
  220. package/skills-library/deployment-security/PM2_MEMORY_EXHAUSTION_FIX.md +370 -0
  221. package/skills-library/deployment-security/PRODUCTION_DEPLOYMENT_GUIDE.md +592 -0
  222. package/skills-library/deployment-security/PRODUCTION_HARDENING_DOCUMENTATION.md +307 -0
  223. package/skills-library/deployment-security/PRODUCTION_RECOVERY_CHERRY_PICK_PATTERN.md +202 -0
  224. package/skills-library/deployment-security/PYINSTALLER_CUDA_WHISPER_BUNDLING.md +236 -0
  225. package/skills-library/deployment-security/SECURITY.md +41 -0
  226. package/skills-library/deployment-security/SMTP_SSL_HOSTNAME_MISMATCH_SHARED_HOSTING.md +220 -0
  227. package/skills-library/deployment-security/SPA_SEO_OPTIMIZATION_CPANEL.md +200 -0
  228. package/skills-library/deployment-security/SUPABASE_EDGE_FUNCTIONS.md +338 -0
  229. package/skills-library/deployment-security/VERCEL_GITHUB_DEPLOYMENT_GUIDE.md +858 -0
  230. package/skills-library/deployment-security/VPS_DEPLOYMENT_READINESS.md +356 -0
  231. package/skills-library/deployment-security/deployment-changes-not-applying.md +241 -0
  232. package/skills-library/deployment-security/env-file-management-production-local.md +203 -0
  233. package/skills-library/deployment-security/express-secure-file-downloads.md +413 -0
  234. package/skills-library/deployment-security/react-production-deployment-desktop-guide.md +2011 -0
  235. package/skills-library/deployment-security/self-hosted-supabase-coolify-guide.md +1684 -0
  236. package/skills-library/deployment-security/unique-features-ai-strategy-plaid-security.md +1613 -0
  237. package/skills-library/deployment-security/vps-deployment.md +135 -0
  238. package/skills-library/document-processing/WORD_EXPORT_MARKDOWN_FORMATTING.md +482 -0
  239. package/skills-library/document-processing/document-ai-landingai-integration.md +677 -0
  240. package/skills-library/document-processing/express-secure-file-downloads-mern.md +413 -0
  241. package/skills-library/document-processing/express-secure-file-downloads.md +413 -0
  242. package/skills-library/document-processing/md-to-word-converter.md +318 -0
  243. package/skills-library/document-processing/pdf-forms-integration/README.md +101 -0
  244. package/skills-library/document-processing/pdf-forms-integration/SKILL.md +662 -0
  245. package/skills-library/ecommerce/ADMIN_PRODUCTS_GUIDE.md +428 -0
  246. package/skills-library/ecommerce/ECOMMERCE_API_REFERENCE.md +776 -0
  247. package/skills-library/ecommerce/ECOMMERCE_COMPLETION_SUMMARY.md +673 -0
  248. package/skills-library/ecommerce/ECOMMERCE_IMPLEMENTATION_GUIDE.md +729 -0
  249. package/skills-library/ecommerce/ECOMMERCE_QUICK_REFERENCE.md +521 -0
  250. package/skills-library/ecommerce/ECOMMERCE_TESTING_CHECKLIST.md +565 -0
  251. package/skills-library/ecommerce/ECOMMERCE_WORKFLOW_GUIDE.md +1059 -0
  252. package/skills-library/ecommerce/PRODUCT_CREATION_EXPANDED.md +522 -0
  253. package/skills-library/ecommerce/agentic-commerce-protocol.md +203 -0
  254. package/skills-library/ecommerce/cart-abandonment-recovery.md +236 -0
  255. package/skills-library/ecommerce/cart-architecture-patterns.md +300 -0
  256. package/skills-library/ecommerce/cart-item-count-indicator.md +264 -0
  257. package/skills-library/ecommerce/checkout-ux-conversion.md +227 -0
  258. package/skills-library/ecommerce/composable-commerce-selection.md +166 -0
  259. package/skills-library/ecommerce/ecommerce-analytics-patterns.md +167 -0
  260. package/skills-library/ecommerce/fraud-detection-patterns.md +179 -0
  261. package/skills-library/ecommerce/inventory-stock-management.md +270 -0
  262. package/skills-library/ecommerce/order-saga-state-machine.md +336 -0
  263. package/skills-library/ecommerce/payment-provider-abstraction.md +245 -0
  264. package/skills-library/ecommerce/pci-compliance-checklist.md +192 -0
  265. package/skills-library/ecommerce/refund-chargeback-handling.md +177 -0
  266. package/skills-library/ecommerce/shipping-carrier-integration.md +218 -0
  267. package/skills-library/ecommerce/webhook-idempotency-patterns.md +253 -0
  268. package/skills-library/excalidraw-diagrams/.github/workflows/ci.yml +558 -0
  269. package/skills-library/excalidraw-diagrams/.github/workflows/prompt-gallery.yml +448 -0
  270. package/skills-library/excalidraw-diagrams/.github/workflows/release.yml +42 -0
  271. package/skills-library/excalidraw-diagrams/.github/workflows/test-reusable-ci.yml +25 -0
  272. package/skills-library/excalidraw-diagrams/CLAUDE.md +57 -0
  273. package/skills-library/excalidraw-diagrams/LICENSE +21 -0
  274. package/skills-library/excalidraw-diagrams/README.md +178 -0
  275. package/skills-library/excalidraw-diagrams/SKILL.md +715 -0
  276. package/skills-library/form-solutions/BUTTON_TYPE_FORM_SUBMISSION.md +336 -0
  277. package/skills-library/form-solutions/FILLABLE_PDF_IMPLEMENTATION.md +226 -0
  278. package/skills-library/form-solutions/SURVEYJS_QUESTIONNAIRE_SYSTEM.md +367 -0
  279. package/skills-library/form-solutions/tiptap-minimal-setup.md +690 -0
  280. package/skills-library/frontend/scholarly-classification-bubble-map.md +149 -0
  281. package/skills-library/infrastructure/ci-cd-pipeline-builder.md +517 -0
  282. package/skills-library/infrastructure/observability-designer.md +264 -0
  283. package/skills-library/infrastructure/performance-profiler.md +621 -0
  284. package/skills-library/installer-wizard-patterns.md +249 -0
  285. package/skills-library/integrations/CLAUDE_CODE_TOKEN_ANALYTICS.md +160 -0
  286. package/skills-library/integrations/CONFIGURABLE_AI_PROVIDER_SELECTION.md +728 -0
  287. package/skills-library/integrations/SOCKET_IO_BROADCAST_ALL_VS_ROOM.md +141 -0
  288. package/skills-library/integrations/VIRTUAL_MEETINGS_IMPLEMENTATION.md +374 -0
  289. package/skills-library/integrations/WORDPRESS_LEARNDASH_DATA_RECOVERY.md +53 -0
  290. package/skills-library/integrations/YOUTUBE_API_SETUP.md +141 -0
  291. package/skills-library/integrations/YOUTUBE_BOOKMARKING_EXPLANATION.md +252 -0
  292. package/skills-library/integrations/YOUTUBE_BOOKMARKING_SOLUTION.md +268 -0
  293. package/skills-library/integrations/YOUTUBE_OAUTH_SETUP_GUIDE.md +200 -0
  294. package/skills-library/integrations/YOUTUBE_VIDEO_FIX_COMPLETE.md +192 -0
  295. package/skills-library/integrations/ai-ml/GEMINI_AI_RAG_PIPELINE_COMPLETE_GUIDE.md +195 -0
  296. package/skills-library/integrations/ai-ml/GEMINI_IMAGE_GENERATION_SETUP.md +64 -0
  297. package/skills-library/integrations/cloudflare/cloudflare-turnstile-debugging.md +202 -0
  298. package/skills-library/integrations/cloudflare/cloudflare-turnstile-implementation.md +476 -0
  299. package/skills-library/integrations/cloudflare-turnstile-debugging.md +202 -0
  300. package/skills-library/integrations/cloudflare-turnstile-implementation.md +476 -0
  301. package/skills-library/integrations/ghost-creator-monetization-pattern.md +454 -0
  302. package/skills-library/integrations/headless-cms-architecture.md +484 -0
  303. package/skills-library/integrations/headless-cms-stack-selection.md +183 -0
  304. package/skills-library/integrations/payload-cms-patterns.md +674 -0
  305. package/skills-library/integrations/realtimestt-openwakeword-cuda-windows.md +229 -0
  306. package/skills-library/integrations/rss-podcast-integration.md +300 -0
  307. package/skills-library/integrations/wordpress/WORDPRESS_LEARNDASH_DATA_RECOVERY.md +53 -0
  308. package/skills-library/integrations/youtube/YOUTUBE_API_SETUP.md +141 -0
  309. package/skills-library/integrations/youtube/YOUTUBE_BOOKMARKING_EXPLANATION.md +252 -0
  310. package/skills-library/integrations/youtube/YOUTUBE_BOOKMARKING_SOLUTION.md +268 -0
  311. package/skills-library/integrations/youtube/YOUTUBE_OAUTH_SETUP_GUIDE.md +200 -0
  312. package/skills-library/integrations/youtube/YOUTUBE_VIDEO_FIX_COMPLETE.md +192 -0
  313. package/skills-library/marketing/campaign-analytics.md +97 -0
  314. package/skills-library/marketing/content-creator.md +105 -0
  315. package/skills-library/marketing/marketing-strategy-pmm.md +94 -0
  316. package/skills-library/marketing/social-media-analyzer.md +81 -0
  317. package/skills-library/methodology/ADVANCED_ORCHESTRATION_PATTERNS.md +401 -0
  318. package/skills-library/methodology/AGENT_SELF_IMPROVEMENT_LOOP.md +179 -0
  319. package/skills-library/methodology/BREATH_BASED_PARALLEL_EXECUTION.md +1 -1
  320. package/skills-library/methodology/CLEANSING_CYCLE.md +358 -0
  321. package/skills-library/methodology/CONFIDENCE_ANNOTATION_PATTERN.md +143 -0
  322. package/skills-library/methodology/CRITICAL_PATTERNS_DOCUMENTATION_COMPLETE.md +204 -0
  323. package/skills-library/methodology/DELIVERABLES_SUMMARY.md +341 -0
  324. package/skills-library/methodology/DIFFICULTY_AWARE_AGENT_ROUTING.md +252 -0
  325. package/skills-library/methodology/EVOLUTIONARY_SKILL_SYNTHESIS.md +219 -0
  326. package/skills-library/methodology/GLOMERULUS_DECISION_GATE.md +223 -0
  327. package/skills-library/methodology/HIBERNATION_SYSTEM.md +231 -0
  328. package/skills-library/methodology/INSTRUMENTATION_OVER_RESTRICTION.md +192 -0
  329. package/skills-library/methodology/MASTER_COMPLETION_SUMMARY.md +444 -0
  330. package/skills-library/methodology/MASTER_SESSION_COMPLETION.md +743 -0
  331. package/skills-library/methodology/MERN_QUICK_REFERENCE.md +358 -0
  332. package/skills-library/methodology/ORGAN_AGENT_MAPPING.md +177 -0
  333. package/skills-library/methodology/PARALLEL_WAVE_BASED_REFACTORING.md +440 -0
  334. package/skills-library/methodology/QUICK_REFERENCE.md +358 -0
  335. package/skills-library/methodology/SDFT_ONPOLICY_SELF_DISTILLATION.md +186 -0
  336. package/skills-library/methodology/SELF_QUESTIONING_TASK_GENERATION.md +270 -0
  337. package/skills-library/methodology/SESSION_COMPLETION_SUMMARY.md +304 -0
  338. package/skills-library/methodology/SESSION_SUMMARY.md +432 -0
  339. package/skills-library/methodology/WARRIOR_WORKFLOW_DEBUGGING_PROTOCOL.md +252 -0
  340. package/skills-library/methodology/tech-debt-tracker.md +570 -0
  341. package/skills-library/parallel-debug/SKILL.md +60 -0
  342. package/skills-library/patterns-standards/API_PATTERN_FIX_SUMMARY.md +236 -0
  343. package/skills-library/patterns-standards/BATCH_OPERATIONS_WITH_PROGRESS_MODAL.md +362 -0
  344. package/skills-library/patterns-standards/CRITICAL_CODING_PATTERNS.md +639 -0
  345. package/skills-library/patterns-standards/DARK_MODE_MODAL_VISIBILITY.md +258 -0
  346. package/skills-library/patterns-standards/ERROR_RESILIENCE_IMPLEMENTATION.md +375 -0
  347. package/skills-library/patterns-standards/ES_MODULE_IMPORT_HOISTING_DOTENV.md +298 -0
  348. package/skills-library/patterns-standards/NESTED_BACKDROP_FILTER_CSS_ARTIFACT_FIX.md +76 -0
  349. package/skills-library/patterns-standards/ORDERED_DETECTOR_PIPELINE_GRACEFUL_FALLBACK.md +333 -0
  350. package/skills-library/patterns-standards/PHASE_IMPORT_ERROR_DEBUGGING.md +271 -0
  351. package/skills-library/patterns-standards/PYNPUT_GLOBAL_HOTKEY_VK_MATCHING.md +252 -0
  352. package/skills-library/patterns-standards/REACT_USEEFFECT_CASCADE_RESET_FIX.md +132 -0
  353. package/skills-library/patterns-standards/SUBMENU_HOVER_DROPDOWN_PATTERN.md +225 -0
  354. package/skills-library/patterns-standards/TAILWIND_TEXT_VISIBILITY_OVERRIDE.md +322 -0
  355. package/skills-library/patterns-standards/THEME_AWARE_CSS_VARIABLES_PATTERN.md +209 -0
  356. package/skills-library/patterns-standards/THEME_USER_OBJECT_PROPERTY_NAMING.md +194 -0
  357. package/skills-library/patterns-standards/TOOLTIP_BLOCKING_CLICKS_FIX.md +267 -0
  358. package/skills-library/patterns-standards/claude-code-plugin-structure.md +235 -0
  359. package/skills-library/patterns-standards/react-i18next-setup.md +429 -0
  360. package/skills-library/patterns-standards/thesys-c1-generative-ui-integration.md +967 -0
  361. package/skills-library/plugin-development/CLAUDE_CODE_COMMAND_REGISTRATION_SILENT_FAILURE.md +315 -0
  362. package/skills-library/plugin-development/plugin-command-namespace-vs-global.md +390 -0
  363. package/skills-library/plugin-development/plugin-doc-auto-generation.md +172 -0
  364. package/skills-library/security/GITHUB_REPO_SECURITY_AUDIT.md +115 -0
  365. package/skills-library/security/admin-deletion-safety.md +396 -0
  366. package/skills-library/security/application-vuln-patterns.md +477 -0
  367. package/skills-library/security/env-secrets-manager.md +686 -0
  368. package/skills-library/security/secure-ai-application-templates.md +347 -0
  369. package/skills-library/security/sql-injection-prevention-postgresjs.md +151 -0
  370. package/skills-library/supabase-connection-pooler-fix.md +102 -0
  371. package/skills-library/system-context/POWERSHELL_BASH_INTEROP.md +82 -0
  372. package/skills-library/system-context/SERVICE_LIFECYCLE_MANAGEMENT.md +119 -0
  373. package/skills-library/system-context/SKILL.md +40 -0
  374. package/skills-library/system-context/WINDOWS_DEV_ENVIRONMENT.md +73 -0
  375. package/skills-library/testing/E2E_PLAYWRIGHT_PATTERNS.md +99 -0
  376. package/skills-library/testing/INTEGRATION_TEST_STRATEGY.md +82 -0
  377. package/skills-library/testing/RED_GREEN_BUGFIX_GATE.md +203 -0
  378. package/skills-library/testing/TEST_DATA_MANAGEMENT.md +69 -0
  379. package/skills-library/testing/VITEST_UNIT_TEST_PATTERNS.md +75 -0
  380. package/skills-library/testing/playwright-api-security-tests.md +202 -0
  381. package/skills-library/toolbox/SKILL.md +84 -0
  382. package/skills-library/toolbox/code-graph-and-web-scraping-mcps.md +237 -0
  383. package/skills-library/ui-ux-pro-max/ACCESSIBILITY_ESSENTIALS.md +115 -0
  384. package/skills-library/ui-ux-pro-max/DESIGN_SYSTEM_SCAFFOLDING.md +133 -0
  385. package/skills-library/ui-ux-pro-max/RESPONSIVE_LAYOUT_PATTERNS.md +119 -0
  386. package/skills-library/ui-ux-pro-max/SKILL.md +386 -0
  387. package/skills-library/ui-ux-pro-max/data/charts.csv +26 -0
  388. package/skills-library/ui-ux-pro-max/data/colors.csv +97 -0
  389. package/skills-library/ui-ux-pro-max/data/icons.csv +101 -0
  390. package/skills-library/ui-ux-pro-max/data/landing.csv +31 -0
  391. package/skills-library/ui-ux-pro-max/data/products.csv +97 -0
  392. package/skills-library/ui-ux-pro-max/data/react-performance.csv +45 -0
  393. package/skills-library/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  394. package/skills-library/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  395. package/skills-library/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  396. package/skills-library/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  397. package/skills-library/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  398. package/skills-library/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  399. package/skills-library/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  400. package/skills-library/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  401. package/skills-library/ui-ux-pro-max/data/stacks/react.csv +54 -0
  402. package/skills-library/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  403. package/skills-library/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  404. package/skills-library/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  405. package/skills-library/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  406. package/skills-library/ui-ux-pro-max/data/styles.csv +68 -0
  407. package/skills-library/ui-ux-pro-max/data/typography.csv +58 -0
  408. package/skills-library/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  409. package/skills-library/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  410. package/skills-library/ui-ux-pro-max/data/web-interface.csv +31 -0
  411. package/skills-library/wordpress-style-theme-components.md +1526 -0
  412. package/templates/ASSUMPTIONS.md +1 -1
  413. package/templates/DECISION_LOG.md +0 -1
  414. package/templates/phase-prompt.md +1 -1
  415. package/templates/phoenix-comparison.md +6 -6
  416. package/templates/skill-api-integration.md +106 -0
  417. package/templates/skill-architecture-pattern.md +92 -0
  418. package/templates/skill-debug-pattern.md +98 -0
  419. package/templates/skill-devops-recipe.md +107 -0
  420. package/templates/skill-general.md +65 -0
  421. package/templates/skill-ui-component.md +113 -0
  422. package/tools/uat-runner.py +179 -0
  423. package/version.json +7 -3
  424. package/workflows/handoff-session.md +2 -2
  425. package/workflows/new-project.md +2 -2
  426. package/workflows/plan-phase.md +1 -1
  427. package/.claude-plugin/plugin.json +0 -64
  428. package/skills-library/_general/methodology/LIVE_BREADCRUMB_PROTOCOL.md +0 -242
  429. package/skills-library/_general/methodology/llm-judge-memory-crud.md +0 -241
  430. package/skills-library/methodology/REFLEXION_MEMORY_PATTERN.md +0 -183
  431. package/skills-library/methodology/RESEARCH_BACKED_WORKFLOW_UPGRADE.md +0 -263
  432. package/skills-library/methodology/SABBATH_REST_PATTERN.md +0 -267
  433. package/skills-library/methodology/STONE_AND_SCAFFOLD.md +0 -220
  434. package/skills-library/specialists/api-architecture/api-designer.md +0 -49
  435. package/skills-library/specialists/api-architecture/graphql-architect.md +0 -49
  436. package/skills-library/specialists/api-architecture/mcp-developer.md +0 -51
  437. package/skills-library/specialists/api-architecture/microservices-architect.md +0 -50
  438. package/skills-library/specialists/api-architecture/websocket-engineer.md +0 -48
  439. package/skills-library/specialists/backend/django-expert.md +0 -52
  440. package/skills-library/specialists/backend/fastapi-expert.md +0 -52
  441. package/skills-library/specialists/backend/laravel-specialist.md +0 -52
  442. package/skills-library/specialists/backend/nestjs-expert.md +0 -51
  443. package/skills-library/specialists/backend/rails-expert.md +0 -53
  444. package/skills-library/specialists/backend/spring-boot-engineer.md +0 -56
  445. package/skills-library/specialists/data-ml/fine-tuning-expert.md +0 -48
  446. package/skills-library/specialists/data-ml/ml-pipeline.md +0 -47
  447. package/skills-library/specialists/data-ml/pandas-pro.md +0 -47
  448. package/skills-library/specialists/data-ml/rag-architect.md +0 -51
  449. package/skills-library/specialists/data-ml/spark-engineer.md +0 -47
  450. package/skills-library/specialists/frontend/angular-architect.md +0 -52
  451. package/skills-library/specialists/frontend/flutter-expert.md +0 -51
  452. package/skills-library/specialists/frontend/nextjs-developer.md +0 -54
  453. package/skills-library/specialists/frontend/react-native-expert.md +0 -50
  454. package/skills-library/specialists/frontend/vue-expert.md +0 -51
  455. package/skills-library/specialists/infrastructure/chaos-engineer.md +0 -74
  456. package/skills-library/specialists/infrastructure/cloud-architect.md +0 -70
  457. package/skills-library/specialists/infrastructure/database-optimizer.md +0 -64
  458. package/skills-library/specialists/infrastructure/devops-engineer.md +0 -70
  459. package/skills-library/specialists/infrastructure/kubernetes-specialist.md +0 -52
  460. package/skills-library/specialists/infrastructure/monitoring-expert.md +0 -70
  461. package/skills-library/specialists/infrastructure/sre-engineer.md +0 -70
  462. package/skills-library/specialists/infrastructure/terraform-engineer.md +0 -51
  463. package/skills-library/specialists/languages/cpp-pro.md +0 -74
  464. package/skills-library/specialists/languages/csharp-developer.md +0 -69
  465. package/skills-library/specialists/languages/dotnet-core-expert.md +0 -54
  466. package/skills-library/specialists/languages/golang-pro.md +0 -51
  467. package/skills-library/specialists/languages/java-architect.md +0 -49
  468. package/skills-library/specialists/languages/javascript-pro.md +0 -68
  469. package/skills-library/specialists/languages/kotlin-specialist.md +0 -68
  470. package/skills-library/specialists/languages/php-pro.md +0 -49
  471. package/skills-library/specialists/languages/python-pro.md +0 -52
  472. package/skills-library/specialists/languages/react-expert.md +0 -51
  473. package/skills-library/specialists/languages/rust-engineer.md +0 -50
  474. package/skills-library/specialists/languages/sql-pro.md +0 -56
  475. package/skills-library/specialists/languages/swift-expert.md +0 -69
  476. package/skills-library/specialists/languages/typescript-pro.md +0 -51
  477. package/skills-library/specialists/platform/atlassian-mcp.md +0 -52
  478. package/skills-library/specialists/platform/embedded-systems.md +0 -53
  479. package/skills-library/specialists/platform/game-developer.md +0 -53
  480. package/skills-library/specialists/platform/salesforce-developer.md +0 -53
  481. package/skills-library/specialists/platform/shopify-expert.md +0 -49
  482. package/skills-library/specialists/platform/wordpress-pro.md +0 -49
  483. package/skills-library/specialists/quality/code-documenter.md +0 -51
  484. package/skills-library/specialists/quality/code-reviewer.md +0 -67
  485. package/skills-library/specialists/quality/debugging-wizard.md +0 -51
  486. package/skills-library/specialists/quality/fullstack-guardian.md +0 -51
  487. package/skills-library/specialists/quality/legacy-modernizer.md +0 -50
  488. package/skills-library/specialists/quality/playwright-expert.md +0 -65
  489. package/skills-library/specialists/quality/spec-miner.md +0 -56
  490. package/skills-library/specialists/quality/test-master.md +0 -65
  491. package/skills-library/specialists/security/secure-code-guardian.md +0 -55
  492. package/skills-library/specialists/security/security-reviewer.md +0 -53
  493. package/skills-library/specialists/workflow/architecture-designer.md +0 -53
  494. package/skills-library/specialists/workflow/cli-developer.md +0 -70
  495. package/skills-library/specialists/workflow/feature-forge.md +0 -65
  496. package/skills-library/specialists/workflow/prompt-engineer.md +0 -54
  497. package/skills-library/specialists/workflow/the-fool.md +0 -62
  498. /package/skills-library/{performance → _general/performance}/cache-augmented-generation.md +0 -0
  499. /package/skills-library/{debugging → parallel-debug}/FAILURE_TAXONOMY_CLASSIFICATION.md +0 -0
  500. /package/skills-library/{debugging → parallel-debug}/THREE_AGENT_HYPOTHESIS_DEBUGGING.md +0 -0
@@ -0,0 +1,271 @@
1
+ # Phase Import Error Debugging - Multi-File Server Crash Investigation
2
+
3
+ ## The Problem
4
+
5
+ After implementing a multi-file feature phase (Phase 3.4 - Student Activity Timeline), the server crashed with import errors. A previous fix attempt was reverted, leaving the codebase in a broken state. The initial symptom reported was misleading (react-quill CSS import), but the real issues were server-side import errors in newly created files.
6
+
7
+ ### Error Messages
8
+
9
+ ```
10
+ Error: Cannot find module '../middleware/auth.js' imported from authMiddleware
11
+ Error: sql is not a function (from database.js which doesn't export sql)
12
+ Error: node-fetch is not defined (on Node 18+ where native fetch exists)
13
+ ```
14
+
15
+ ### Why It Was Hard
16
+
17
+ 1. **Misleading initial symptom** - The handoff mentioned "react-quill CSS import" failure, but the real issues were server-side
18
+ 2. **Revert obscured the problem** - A fix commit (054c62f) was reverted, putting broken imports back
19
+ 3. **Multiple files affected** - Three different files had three different import errors
20
+ 4. **ES Module specifics** - The errors relate to ES Module export/import patterns
21
+ 5. **Environment differences** - Local (Node 24) worked, server (Node 18) failed
22
+
23
+ ### Impact
24
+
25
+ - Server would not start
26
+ - All Phase 3.4 features unavailable
27
+ - Required git revert which lost valid fixes
28
+ - Blocked deployment pipeline
29
+
30
+ ---
31
+
32
+ ## The Solution
33
+
34
+ ### Root Cause
35
+
36
+ Phase 3.4 created several server files with **incorrect assumptions about exports**:
37
+
38
+ | File | Wrong Import | Correct Import | Why Wrong |
39
+ |------|--------------|----------------|-----------|
40
+ | `podcastProgressRoutes.js` | `import { authMiddleware }` | `import { protect }` | Export is named `protect`, not `authMiddleware` |
41
+ | `calendarSyncService.js` | `import sql from '../config/database.js'` | `import sql from '../config/sql.js'` | `database.js` exports `connectDatabase()`, not `sql` |
42
+ | `announcementService.js` | `import fetch from 'node-fetch'` | Remove import | Node 18+ has native `fetch` |
43
+
44
+ ### How to Fix
45
+
46
+ #### 1. Fix Auth Middleware Import
47
+
48
+ **Wrong:**
49
+ ```javascript
50
+ import { authMiddleware } from '../middleware/auth.js';
51
+ router.use(authMiddleware);
52
+ ```
53
+
54
+ **Correct:**
55
+ ```javascript
56
+ import { protect } from '../middleware/auth.js';
57
+ router.use(protect);
58
+ ```
59
+
60
+ **Why:** Check the actual exports in `auth.js`:
61
+ ```javascript
62
+ export const protect = async (req, res, next) => { ... }
63
+ export const authorize = (...roles) => { ... }
64
+ // Note: There is NO authMiddleware export
65
+ ```
66
+
67
+ #### 2. Fix Database Import
68
+
69
+ **Wrong:**
70
+ ```javascript
71
+ import sql from '../config/database.js';
72
+ ```
73
+
74
+ **Correct:**
75
+ ```javascript
76
+ import sql from '../config/sql.js';
77
+ ```
78
+
79
+ **Why:** The database config has two files:
80
+ - `sql.js` - Exports the postgres `sql` instance (for queries)
81
+ - `database.js` - Exports `connectDatabase()` function (for initialization only)
82
+
83
+ #### 3. Remove node-fetch Import
84
+
85
+ **Wrong:**
86
+ ```javascript
87
+ import fetch from 'node-fetch';
88
+ ```
89
+
90
+ **Correct:**
91
+ ```javascript
92
+ // Note: Using native fetch (Node 18+)
93
+ // No import needed
94
+ ```
95
+
96
+ **Why:** Node 18+ includes native `fetch`. The `node-fetch` package is only needed for Node 16 and earlier.
97
+
98
+ ---
99
+
100
+ ## Debugging Process
101
+
102
+ ### Step 1: Verify Current State
103
+
104
+ ```bash
105
+ # Check what imports exist
106
+ grep -n "authMiddleware\|protect" server/routes/podcastProgressRoutes.js
107
+ grep -n "database\|sql" server/services/calendarSyncService.js
108
+ grep -n "node-fetch\|fetch" server/services/announcementService.js
109
+ ```
110
+
111
+ ### Step 2: Check What Exports Actually Exist
112
+
113
+ ```bash
114
+ # Check auth middleware exports
115
+ grep -n "export" server/middleware/auth.js
116
+
117
+ # Check what database config files exist and export
118
+ ls server/config/ | grep -E "database|sql"
119
+ head -30 server/config/database.js
120
+ head -30 server/config/sql.js
121
+ ```
122
+
123
+ ### Step 3: Check Git History
124
+
125
+ ```bash
126
+ # Find the commit that tried to fix this
127
+ git log --oneline -10
128
+
129
+ # See what that commit changed
130
+ git show <commit-hash> --stat --name-only
131
+
132
+ # Check if there's a revert
133
+ git log --oneline | grep -i "revert"
134
+ ```
135
+
136
+ ### Step 4: Test Fixes
137
+
138
+ ```bash
139
+ # Syntax check
140
+ cd server && node --check server.js
141
+
142
+ # Build test
143
+ cd client && npm run build
144
+
145
+ # Full start test
146
+ npm run dev
147
+ ```
148
+
149
+ ---
150
+
151
+ ## Prevention
152
+
153
+ ### 1. Always Check Exports Before Importing
154
+
155
+ Before writing an import, verify the export exists:
156
+
157
+ ```bash
158
+ # Quick check for available exports
159
+ grep "export" path/to/module.js
160
+ ```
161
+
162
+ ### 2. Use Consistent Naming Conventions
163
+
164
+ If the project uses `protect` for auth middleware, don't assume `authMiddleware` exists.
165
+
166
+ ### 3. Document Module Contracts
167
+
168
+ In `server/middleware/auth.js`:
169
+ ```javascript
170
+ /**
171
+ * Auth Middleware Exports:
172
+ * - protect: Require authenticated user
173
+ * - authorize(...roles): Require specific roles
174
+ * - isAdmin: Require admin role
175
+ * - optionalAuth: Parse auth if present, continue if not
176
+ */
177
+ ```
178
+
179
+ ### 4. Use TypeScript or JSDoc
180
+
181
+ TypeScript would catch these errors at compile time:
182
+ ```typescript
183
+ // This would error: 'authMiddleware' is not exported from './auth.js'
184
+ import { authMiddleware } from './auth.js';
185
+ ```
186
+
187
+ ### 5. Check Node Version for Native APIs
188
+
189
+ Before using packages like `node-fetch`:
190
+ ```javascript
191
+ // Check if native fetch exists
192
+ if (typeof fetch === 'undefined') {
193
+ // Only import node-fetch for older Node versions
194
+ const { default: fetch } = await import('node-fetch');
195
+ }
196
+ ```
197
+
198
+ ---
199
+
200
+ ## Related Patterns
201
+
202
+ - [ES_MODULE_IMPORT_HOISTING_DOTENV.md](./ES_MODULE_IMPORT_HOISTING_DOTENV.md) - ES Module import timing issues
203
+ - [PM2_ENVIRONMENT_VARIABLE_CACHING.md](../deployment-security/PM2_ENVIRONMENT_VARIABLE_CACHING.md) - Server restart issues
204
+
205
+ ---
206
+
207
+ ## Common Mistakes to Avoid
208
+
209
+ - ❌ **Assuming export names** - Always verify the actual export name
210
+ - ❌ **Copying import patterns from other files** - Module structures vary
211
+ - ❌ **Not checking git history** - Reverts can hide valid fixes
212
+ - ❌ **Trusting initial error reports** - Symptoms often mislead (react-quill CSS vs server imports)
213
+ - ❌ **Ignoring Node version differences** - Native APIs vary by version
214
+
215
+ ---
216
+
217
+ ## Diagnostic Commands Reference
218
+
219
+ ```bash
220
+ # Check all exports in a file
221
+ grep -n "export" path/to/file.js
222
+
223
+ # Find all files importing a module
224
+ grep -r "from './auth" server/
225
+
226
+ # Check git for when a file was created
227
+ git log --oneline -- path/to/file.js
228
+
229
+ # See what a specific commit changed
230
+ git show <hash> --stat
231
+
232
+ # Check Node version
233
+ node --version
234
+
235
+ # Syntax check without running
236
+ node --check server/server.js
237
+ ```
238
+
239
+ ---
240
+
241
+ ## Time to Implement
242
+
243
+ **Fix Time:** 5-10 minutes once root cause identified
244
+ **Debug Time:** 30-60 minutes (following this pattern)
245
+
246
+ ## Difficulty Level
247
+
248
+ ⭐⭐⭐ (3/5) - Moderate difficulty due to misdirection from initial symptom
249
+
250
+ ---
251
+
252
+ **Author Notes:**
253
+
254
+ The key insight from this debugging session: **Don't trust the initial error report**. The handoff said "react-quill CSS import" but that was a red herring. The real issues were three separate server import errors that shared no relationship to react-quill.
255
+
256
+ **Always verify:**
257
+ 1. What files were recently changed?
258
+ 2. What do those files actually import?
259
+ 3. Do those exports actually exist?
260
+ 4. Was there a fix attempt that got reverted?
261
+
262
+ The debugging process took longer than the fix because the symptom pointed the wrong direction. Once we traced the git history and checked the actual exports, the fix was trivial.
263
+
264
+ ---
265
+
266
+ **Session Context:** 2026-01-28 - Phase 3.4 Student Activity Timeline import fixes
267
+ **Commit:** e9ecd45
268
+ **Files Fixed:**
269
+ - `server/routes/podcastProgressRoutes.js`
270
+ - `server/services/calendarSyncService.js`
271
+ - `server/services/announcementService.js`
@@ -0,0 +1,252 @@
1
+ # Pynput Global Hotkeys with Virtual Key Code Matching
2
+
3
+ ## The Problem
4
+
5
+ Building a Windows desktop app with global hotkey detection (e.g., Ctrl+Shift+M for hold-to-talk). Two obstacles:
6
+
7
+ 1. **`keyboard` library (v0.13.5) is broken on Python 3.13+** — its low-level Windows hooks (`SetWindowsHookEx`) install and the listener thread starts, but callbacks never fire. The library was last updated in 2020 and has no fix.
8
+
9
+ 2. **Modifier keys corrupt `pynput` char values** — when Ctrl is held, pressing a letter key changes its `.char` attribute via Windows' control-character mapping (Ctrl+M → `'\r'`, Ctrl+D → `'\x04'`, Ctrl+A → `'\x01'`). Naive char-based matching silently fails for every Ctrl+letter combo.
10
+
11
+ ### Impact
12
+
13
+ - Hotkeys appear to register (no errors) but never fire — completely silent failure
14
+ - Extremely hard to debug because the hook thread is alive, the listener is running, everything *looks* correct
15
+ - Every Ctrl+letter hotkey is affected (26 possible combos), not just edge cases
16
+
17
+ ---
18
+
19
+ ## The Solution
20
+
21
+ ### Root Cause
22
+
23
+ **Issue 1:** The `keyboard` library's `_winkeyboard.py` uses internal threading and ctypes patterns that broke with Python 3.13+'s threading changes. The hook message pump thread runs but never delivers events to callbacks.
24
+
25
+ **Issue 2:** Windows translates Ctrl+letter keypresses into ASCII control characters at the API level. When pynput's hook receives Ctrl+M, the OS reports `char='\r'` (carriage return, 0x0D) instead of `char='m'`. But the **virtual key code (`vk`)** remains `77` (= `ord('M')`) regardless of modifiers.
26
+
27
+ ### The Fix: Use pynput with VK-based matching
28
+
29
+ Replace `keyboard` with `pynput.keyboard.Listener` and match keys by `vk` (virtual key code) instead of `char`.
30
+
31
+ ```python
32
+ from pynput.keyboard import Key, Listener, KeyCode
33
+
34
+ # WRONG: Match by char — fails when Ctrl is held
35
+ def _to_key_bad(name: str):
36
+ return KeyCode.from_char(name) # KeyCode(char='m')
37
+
38
+ def _match_bad(key, target) -> bool:
39
+ # ctrl+m gives key.char='\r', target.char='m' → NEVER MATCHES
40
+ return key.char == target.char
41
+
42
+
43
+ # RIGHT: Match by virtual key code — stable regardless of modifiers
44
+ def _to_key_good(name: str):
45
+ return KeyCode.from_vk(ord(name.upper())) # KeyCode(vk=77)
46
+
47
+ def _match_good(key, target) -> bool:
48
+ key_vk = getattr(key, 'vk', None)
49
+ target_vk = getattr(target, 'vk', None)
50
+ if key_vk is not None and target_vk is not None:
51
+ return key_vk == target_vk
52
+ # Fallback for special keys
53
+ return key == target
54
+ ```
55
+
56
+ ### Full Hold-to-Talk Hotkey Manager Pattern
57
+
58
+ ```python
59
+ from pynput.keyboard import Key, Listener, KeyCode
60
+ import time
61
+
62
+ # Map config strings → sets of pynput Key objects (left, right, generic)
63
+ _MODIFIER_MAP = {
64
+ "ctrl": {Key.ctrl_l, Key.ctrl_r, Key.ctrl},
65
+ "shift": {Key.shift_l, Key.shift_r, Key.shift},
66
+ "alt": {Key.alt_l, Key.alt_r, Key.alt},
67
+ }
68
+
69
+ class HotkeyManager:
70
+ def __init__(self, hotkey_str: str, on_start, on_stop):
71
+ parts = hotkey_str.lower().split("+")
72
+ trigger_name = parts[-1]
73
+ self._mod_names = parts[:-1]
74
+
75
+ # Use vk for letter keys, Key enum for special keys
76
+ if len(trigger_name) == 1:
77
+ self._trigger = KeyCode.from_vk(ord(trigger_name.upper()))
78
+ else:
79
+ self._trigger = _SPECIAL_KEYS[trigger_name] # Key.space, etc.
80
+
81
+ self._on_start = on_start
82
+ self._on_stop = on_stop
83
+ self._active = False
84
+ self._held_mods: set[Key] = set()
85
+ self._debounce_s = 0.2
86
+ self._last_time = 0.0
87
+ self._listener = None
88
+
89
+ def _key_matches(self, key, target) -> bool:
90
+ if key == target:
91
+ return True
92
+ if isinstance(key, KeyCode) and isinstance(target, KeyCode):
93
+ key_vk = getattr(key, 'vk', None)
94
+ target_vk = getattr(target, 'vk', None)
95
+ if key_vk is not None and target_vk is not None:
96
+ return key_vk == target_vk
97
+ return False
98
+
99
+ def _mods_held(self) -> bool:
100
+ for mod_name in self._mod_names:
101
+ if not (self._held_mods & _MODIFIER_MAP.get(mod_name, set())):
102
+ return False
103
+ return True
104
+
105
+ def _on_press(self, key):
106
+ # Track modifier state
107
+ for mod_keys in _MODIFIER_MAP.values():
108
+ if key in mod_keys:
109
+ self._held_mods.add(key)
110
+ return
111
+
112
+ now = time.monotonic()
113
+ if (
114
+ self._key_matches(key, self._trigger)
115
+ and not self._active
116
+ and self._mods_held()
117
+ and (now - self._last_time) > self._debounce_s
118
+ ):
119
+ self._active = True
120
+ self._last_time = now
121
+ self._on_start()
122
+
123
+ def _on_release(self, key):
124
+ # Modifier released while active → stop
125
+ for mod_keys in _MODIFIER_MAP.values():
126
+ if key in mod_keys:
127
+ self._held_mods.discard(key)
128
+ if self._active:
129
+ self._active = False
130
+ self._on_stop()
131
+ return
132
+
133
+ # Trigger key released → stop
134
+ if self._key_matches(key, self._trigger) and self._active:
135
+ self._active = False
136
+ self._on_stop()
137
+
138
+ def register(self):
139
+ self._listener = Listener(on_press=self._on_press, on_release=self._on_release)
140
+ self._listener.start()
141
+
142
+ def unregister(self):
143
+ if self._listener:
144
+ self._listener.stop()
145
+ self._listener = None
146
+ ```
147
+
148
+ ### Critical Design Decisions
149
+
150
+ | Decision | Why |
151
+ |----------|-----|
152
+ | `KeyCode.from_vk(ord(name.upper()))` | VK codes are stable when modifiers are held. `from_char()` produces chars that get corrupted by Ctrl. |
153
+ | `{Key.ctrl_l, Key.ctrl_r, Key.ctrl}` in modifier map | pynput sometimes reports `Key.ctrl` (generic) instead of `Key.ctrl_l`/`Key.ctrl_r`. Must accept all three. |
154
+ | Modifier release also triggers stop | For hold-to-talk: releasing ANY part of the combo should stop. User might release Ctrl before M. |
155
+ | 200ms debounce | Prevents double-firing from key repeat when holding the combo. |
156
+ | `set` for held modifiers | O(1) intersection check with `_MODIFIER_MAP` sets. |
157
+
158
+ ---
159
+
160
+ ## Windows Ctrl+Key Character Mapping Reference
161
+
162
+ | Combo | `.char` received | `.vk` | ASCII Control |
163
+ |-------|-----------------|-------|---------------|
164
+ | Ctrl+A | `'\x01'` | 65 | SOH |
165
+ | Ctrl+C | `'\x03'` | 67 | ETX |
166
+ | Ctrl+D | `'\x04'` | 68 | EOT |
167
+ | Ctrl+M | `'\r'` (0x0D) | 77 | CR |
168
+ | Ctrl+H | `'\x08'` | 72 | BS |
169
+ | Ctrl+I | `'\t'` (0x09) | 73 | HT |
170
+ | Ctrl+J | `'\n'` (0x0A) | 74 | LF |
171
+ | Ctrl+[ | `'\x1b'` | 219 | ESC |
172
+
173
+ Every letter A-Z maps to control code `0x01`-`0x1A` when Ctrl is held. VK is always `ord(letter.upper())`.
174
+
175
+ ---
176
+
177
+ ## Testing the Fix
178
+
179
+ ```python
180
+ from pynput.keyboard import Key, Controller, Listener, KeyCode
181
+ import time
182
+
183
+ results = {'start': 0, 'stop': 0}
184
+ hm = HotkeyManager("ctrl+shift+m",
185
+ on_start=lambda: results.update({'start': results['start']+1}),
186
+ on_stop=lambda: results.update({'stop': results['stop']+1}))
187
+ hm.register()
188
+ time.sleep(0.3)
189
+
190
+ kb = Controller()
191
+ kb.press(Key.ctrl_l); kb.press(Key.shift_l)
192
+ time.sleep(0.1)
193
+ kb.press('m'); time.sleep(0.3); kb.release('m')
194
+ time.sleep(0.1)
195
+ kb.release(Key.shift_l); kb.release(Key.ctrl_l)
196
+ time.sleep(0.3)
197
+
198
+ hm.unregister()
199
+ assert results['start'] == 1 and results['stop'] >= 1
200
+ ```
201
+
202
+ ---
203
+
204
+ ## Prevention
205
+
206
+ 1. **Never use `keyboard` library with Python 3.13+** — hooks install silently but fire zero events
207
+ 2. **Never match pynput keys by `.char` when Ctrl is a modifier** — char is corrupted by OS
208
+ 3. **Always use `KeyCode.from_vk()` for letter keys** in hotkey registration
209
+ 4. **Include `Key.ctrl` (generic)** alongside `Key.ctrl_l`/`Key.ctrl_r` in modifier maps — pynput behavior varies
210
+ 5. **Kill stale instances** before debugging hotkey issues — multiple processes registering hooks can cause Windows to silently disable them
211
+
212
+ ---
213
+
214
+ ## Common Mistakes to Avoid
215
+
216
+ - Using `keyboard.on_press_key()` on Python 3.13+ (silent failure, no error)
217
+ - Using `KeyCode.from_char('m')` then comparing with `==` against a key pressed with Ctrl held
218
+ - Only checking `Key.shift_l` / `Key.ctrl_l` without the generic `Key.shift` / `Key.ctrl`
219
+ - Forgetting modifier-release-as-stop for hold-to-talk patterns (user releases Ctrl before the trigger key)
220
+ - Not debouncing — key repeat fires rapid press events when holding a combo
221
+
222
+ ---
223
+
224
+ ## Related Patterns
225
+
226
+ - Hold-to-talk audio recording: pair with `sounddevice` for mic capture
227
+ - System tray integration: `pystray` runs on main thread, hotkey listener runs in background thread
228
+ - Frozen mode detection: `getattr(sys, 'frozen', False)` for PyInstaller builds
229
+
230
+ ---
231
+
232
+ ## Resources
233
+
234
+ - [pynput documentation](https://pynput.readthedocs.io/)
235
+ - [keyboard library (abandoned)](https://github.com/boppreh/keyboard) — last release 0.13.5 (2020)
236
+ - [Windows Virtual Key Codes](https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes)
237
+ - [ASCII Control Characters](https://en.wikipedia.org/wiki/ASCII#Control_characters)
238
+
239
+ ---
240
+
241
+ ## Time to Implement
242
+
243
+ **15-30 minutes** to replace `keyboard` with the pynput pattern. Most time spent discovering the char corruption issue.
244
+
245
+ ## Difficulty Level
246
+
247
+ Stars: 3/5 — The fix itself is straightforward once you understand the root cause. The difficulty is **diagnosing** it: hooks install without error, listener threads are alive, everything looks correct, but callbacks never fire (keyboard lib) or silently mismatch (char corruption).
248
+
249
+ ---
250
+
251
+ **Author Notes:**
252
+ The two traps here are *silent*. The `keyboard` library doesn't throw errors — its hooks just never fire on Python 3.13+. And pynput's char corruption doesn't throw errors either — `'\r' != 'm'` just evaluates to False and your hotkey silently never triggers. The VK code is the only stable identifier across all modifier states.
@@ -0,0 +1,132 @@
1
+ # React useEffect Cascade Reset Fix
2
+
3
+ ## Problem
4
+
5
+ Custom hooks with cascading dropdown state (e.g., Book → Chapter → Verse) use `useEffect` chains where selecting a parent resets child values to `null`. When programmatically navigating to a specific location (e.g., clicking a search result to jump to Genesis 3:15), the cascade effects fire and **destroy the child selections** before the UI can render them.
6
+
7
+ **Symptoms:**
8
+ - Clicking a search result navigates to the correct book/chapter but verse is not highlighted
9
+ - Programmatic navigation sets all three values, but useEffect on book change wipes chapter/verse
10
+ - The chapter effect then fires again and wipes the verse
11
+
12
+ ## Root Cause
13
+
14
+ React's `useEffect` chains create a cascade:
15
+
16
+ ```
17
+ setSelectedBook("Genesis") → useEffect[selectedBook] fires → setSelectedChapter(null) ← DESTROYS
18
+ setSelectedVerse(null) ← DESTROYS
19
+ setSelectedChapter(3) → useEffect[selectedChapter] fires → setSelectedVerse(null) ← DESTROYS
20
+ setSelectedVerse(15) → Already nullified by cascade
21
+ ```
22
+
23
+ Even though all three `setState` calls happen synchronously, React batches them but the effects still run in order, each one resetting the children.
24
+
25
+ ## Solution: Programmatic Navigation Ref Guard
26
+
27
+ Use a `useRef` flag to skip cascade resets during programmatic navigation:
28
+
29
+ ```typescript
30
+ import { useState, useEffect, useCallback, useRef } from 'react'
31
+
32
+ export function useCascadingNavigation() {
33
+ const [selectedBook, setSelectedBook] = useState<string | null>(null)
34
+ const [selectedChapter, setSelectedChapter] = useState<number | null>(null)
35
+ const [selectedVerse, setSelectedVerse] = useState<number | null>(null)
36
+
37
+ // Ref to skip cascade resets during programmatic navigation
38
+ const programmaticNavRef = useRef(false)
39
+
40
+ // Update chapters when book changes
41
+ useEffect(() => {
42
+ if (selectedBook) {
43
+ const chapterCount = getChapterCount(selectedBook)
44
+ setChapters(Array.from({ length: chapterCount }, (_, i) => i + 1))
45
+
46
+ // Skip reset during programmatic navigation
47
+ if (!programmaticNavRef.current) {
48
+ setSelectedChapter(null)
49
+ setSelectedVerse(null)
50
+ }
51
+ }
52
+ }, [selectedBook])
53
+
54
+ // Update verses when chapter changes
55
+ useEffect(() => {
56
+ if (selectedBook && selectedChapter) {
57
+ fetchVerseCount(selectedBook, selectedChapter)
58
+
59
+ // Skip verse reset during programmatic navigation
60
+ if (!programmaticNavRef.current) {
61
+ setSelectedVerse(null)
62
+ }
63
+ // Reset flag after chapter effect processes
64
+ programmaticNavRef.current = false
65
+ }
66
+ }, [selectedBook, selectedChapter])
67
+
68
+ // Navigate to a specific location without cascade resets
69
+ const navigateToVerse = useCallback((book: string, chapter: number, verse: number) => {
70
+ programmaticNavRef.current = true
71
+ setSelectedBook(book)
72
+ setSelectedChapter(chapter)
73
+ setSelectedVerse(verse)
74
+ }, [])
75
+
76
+ // Safety cleanup: ensure flag is always reset after effects process
77
+ useEffect(() => {
78
+ programmaticNavRef.current = false
79
+ })
80
+
81
+ return {
82
+ selectedBook, setSelectedBook,
83
+ selectedChapter, setSelectedChapter,
84
+ selectedVerse, setSelectedVerse,
85
+ navigateToVerse, // Use this for programmatic navigation
86
+ }
87
+ }
88
+ ```
89
+
90
+ ### Key Implementation Details
91
+
92
+ 1. **`programmaticNavRef`** — A ref (not state) because it needs to be set synchronously before effects run, without triggering re-renders.
93
+
94
+ 2. **Flag reset location** — The flag is reset in the **chapter effect** (the last cascade effect that needs guarding), not immediately after setting state. This ensures the flag persists through all cascade effects.
95
+
96
+ 3. **Safety cleanup effect** — An unconditional `useEffect(() => { programmaticNavRef.current = false })` with no dependency array runs after every render, ensuring the flag is always cleaned up even if an effect chain is interrupted.
97
+
98
+ 4. **Consumer usage** — Components call `navigateToVerse()` instead of individual setters:
99
+
100
+ ```typescript
101
+ // In BibleViewer.tsx (consumer component)
102
+ const { navigateToVerse } = useBibleNavigation()
103
+
104
+ useEffect(() => {
105
+ if (navigateTo && navigateTo !== prevNavigateToRef.current) {
106
+ prevNavigateToRef.current = navigateTo
107
+ navigateToVerse(navigateTo.book, navigateTo.chapter, navigateTo.verse)
108
+ }
109
+ }, [navigateTo, navigateToVerse])
110
+ ```
111
+
112
+ ## When to Apply This Pattern
113
+
114
+ - Any cascading dropdown hook (Country → State → City)
115
+ - Multi-level navigation (Book → Chapter → Verse, Category → Subcategory → Item)
116
+ - Any hook where parent selection resets child selections, AND you need programmatic deep navigation
117
+ - Search result → detail view navigation
118
+
119
+ ## Anti-Patterns to Avoid
120
+
121
+ 1. **Don't use state for the flag** — `useState` triggers re-renders and the flag won't be set before effects run
122
+ 2. **Don't set all values in a single effect** — Still triggers cascades because each `setState` triggers dependent effects
123
+ 3. **Don't try `flushSync`** — Doesn't prevent effect cascades, just forces synchronous DOM updates
124
+ 4. **Don't remove the cascade resets entirely** — Manual dropdown selection genuinely needs child resets
125
+
126
+ ## Tech Stack
127
+ - React 18+ (hooks, useRef, useEffect, useCallback)
128
+ - TypeScript
129
+ - Any UI framework with cascading state
130
+
131
+ ## Tags
132
+ `react` `useEffect` `cascade` `useState` `navigation` `dropdown` `useRef` `programmatic-navigation`