@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,515 @@
1
+ # Content Branch Preview
2
+
3
+ > Edit content on a draft version — preview it at a staging URL — approve to go live
4
+ ---
5
+
6
+ ## Overview
7
+
8
+ Content branching lets editors work on a "draft copy" of any content without affecting what's live. They can preview their changes, share the preview link with approvers, and publish when ready. Think of it as "pull requests for content."
9
+
10
+ **Why this matters for non-technical users:**
11
+ - A teacher edits a lesson → students still see the current version
12
+ - An admin reviews the draft → shares preview link with pastor
13
+ - Pastor approves → one click to publish
14
+ - If something goes wrong → one click to revert
15
+
16
+ **Key difference from TinaCMS:**
17
+ TinaCMS uses actual git branches. We use **database-level versioning** — same concept, no git knowledge required. Works with MySQL and PostgreSQL.
18
+
19
+ ---
20
+
21
+ ## Architecture
22
+
23
+ ```
24
+ ┌─────────────────────────────────────────────────┐
25
+ │ Content Record: "Introduction to Prayer" │
26
+ │ │
27
+ │ ┌─────────────┐ ┌──────────────┐ │
28
+ │ │ LIVE v3 │ │ DRAFT v4 │ │
29
+ │ │ (published) │ │ (editing) │ │
30
+ │ │ │ │ │ │
31
+ │ │ Students │ │ Preview URL │ │
32
+ │ │ see this │ │ /preview/abc │ │
33
+ │ └─────────────┘ └──────────────┘ │
34
+ │ │ │
35
+ │ [Approve] │
36
+ │ │ │
37
+ │ DRAFT v4 → LIVE v4 │
38
+ │ (old LIVE v3 → archived) │
39
+ └─────────────────────────────────────────────────┘
40
+ ```
41
+
42
+ ---
43
+
44
+ ## Database Schema
45
+
46
+ ### MySQL
47
+
48
+ ```sql
49
+ -- Content versions table — stores every version of every content record
50
+ CREATE TABLE content_versions (
51
+ id INT AUTO_INCREMENT PRIMARY KEY,
52
+ content_type VARCHAR(64) NOT NULL, -- 'lesson', 'course', 'announcement'
53
+ content_id VARCHAR(36) NOT NULL, -- ID of the original record
54
+ version_number INT NOT NULL DEFAULT 1,
55
+ status ENUM('draft', 'in_review', 'approved', 'live', 'archived') DEFAULT 'draft',
56
+ data JSON NOT NULL, -- Full snapshot of all fields
57
+ preview_token VARCHAR(64) UNIQUE, -- Random token for preview URL
58
+ created_by VARCHAR(36) NOT NULL,
59
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
60
+ published_at TIMESTAMP NULL,
61
+ reviewed_by VARCHAR(36) NULL,
62
+ review_note TEXT NULL,
63
+
64
+ INDEX idx_content (content_type, content_id),
65
+ INDEX idx_status (status),
66
+ INDEX idx_preview (preview_token),
67
+ UNIQUE INDEX idx_unique_version (content_type, content_id, version_number),
68
+ FOREIGN KEY (created_by) REFERENCES users(id)
69
+ );
70
+ ```
71
+
72
+ ### PostgreSQL
73
+
74
+ ```sql
75
+ CREATE TYPE content_version_status AS ENUM ('draft', 'in_review', 'approved', 'live', 'archived');
76
+
77
+ CREATE TABLE content_versions (
78
+ id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
79
+ content_type VARCHAR(64) NOT NULL,
80
+ content_id UUID NOT NULL,
81
+ version_number INT NOT NULL DEFAULT 1,
82
+ status content_version_status DEFAULT 'draft',
83
+ data JSONB NOT NULL,
84
+ preview_token VARCHAR(64) UNIQUE,
85
+ created_by UUID NOT NULL REFERENCES users(id),
86
+ created_at TIMESTAMPTZ DEFAULT NOW(),
87
+ published_at TIMESTAMPTZ,
88
+ reviewed_by UUID REFERENCES users(id),
89
+ review_note TEXT
90
+ );
91
+
92
+ CREATE INDEX idx_cv_content ON content_versions(content_type, content_id);
93
+ CREATE INDEX idx_cv_status ON content_versions(status);
94
+ CREATE UNIQUE INDEX idx_cv_unique ON content_versions(content_type, content_id, version_number);
95
+ ```
96
+
97
+ ---
98
+
99
+ ## Content Version Service
100
+
101
+ ```js
102
+ // server/services/contentVersionService.js
103
+ const crypto = require('crypto');
104
+
105
+ class ContentVersionService {
106
+ constructor(db) {
107
+ this.db = db;
108
+ }
109
+
110
+ /**
111
+ * Create a new draft version of existing content.
112
+ * Snapshots the current live data into a new draft record.
113
+ */
114
+ async createDraft(contentType, contentId, userId) {
115
+ // Get the current live version's data
116
+ const [live] = await this.db.query(
117
+ `SELECT * FROM ${contentType} WHERE id = ?`,
118
+ [contentId]
119
+ );
120
+
121
+ if (!live) throw new Error(`${contentType} ${contentId} not found`);
122
+
123
+ // Get next version number
124
+ const [{ maxVersion }] = await this.db.query(
125
+ `SELECT COALESCE(MAX(version_number), 0) as maxVersion
126
+ FROM content_versions
127
+ WHERE content_type = ? AND content_id = ?`,
128
+ [contentType, contentId]
129
+ );
130
+
131
+ const versionNumber = maxVersion + 1;
132
+ const previewToken = crypto.randomBytes(32).toString('hex');
133
+
134
+ await this.db.query(
135
+ `INSERT INTO content_versions
136
+ (content_type, content_id, version_number, status, data, preview_token, created_by)
137
+ VALUES (?, ?, ?, 'draft', ?, ?, ?)`,
138
+ [contentType, contentId, versionNumber, JSON.stringify(live), previewToken, userId]
139
+ );
140
+
141
+ return { versionNumber, previewToken };
142
+ }
143
+
144
+ /**
145
+ * Update a draft version's data.
146
+ */
147
+ async updateDraft(contentType, contentId, versionNumber, updates, userId) {
148
+ const [version] = await this.db.query(
149
+ `SELECT * FROM content_versions
150
+ WHERE content_type = ? AND content_id = ? AND version_number = ? AND status = 'draft'`,
151
+ [contentType, contentId, versionNumber]
152
+ );
153
+
154
+ if (!version) throw new Error('Draft not found or not editable');
155
+
156
+ const currentData = typeof version.data === 'string' ? JSON.parse(version.data) : version.data;
157
+ const newData = { ...currentData, ...updates };
158
+
159
+ await this.db.query(
160
+ `UPDATE content_versions SET data = ?
161
+ WHERE content_type = ? AND content_id = ? AND version_number = ?`,
162
+ [JSON.stringify(newData), contentType, contentId, versionNumber]
163
+ );
164
+
165
+ return newData;
166
+ }
167
+
168
+ /**
169
+ * Submit a draft for review.
170
+ */
171
+ async submitForReview(contentType, contentId, versionNumber) {
172
+ await this.db.query(
173
+ `UPDATE content_versions SET status = 'in_review'
174
+ WHERE content_type = ? AND content_id = ? AND version_number = ? AND status = 'draft'`,
175
+ [contentType, contentId, versionNumber]
176
+ );
177
+ }
178
+
179
+ /**
180
+ * Approve a version (reviewer action).
181
+ */
182
+ async approve(contentType, contentId, versionNumber, reviewerId, note = '') {
183
+ await this.db.query(
184
+ `UPDATE content_versions
185
+ SET status = 'approved', reviewed_by = ?, review_note = ?
186
+ WHERE content_type = ? AND content_id = ? AND version_number = ? AND status = 'in_review'`,
187
+ [reviewerId, note, contentType, contentId, versionNumber]
188
+ );
189
+ }
190
+
191
+ /**
192
+ * Publish an approved version — makes it live and archives the old live version.
193
+ */
194
+ async publish(contentType, contentId, versionNumber) {
195
+ const [version] = await this.db.query(
196
+ `SELECT * FROM content_versions
197
+ WHERE content_type = ? AND content_id = ? AND version_number = ?
198
+ AND status IN ('approved', 'draft')`,
199
+ [contentType, contentId, versionNumber]
200
+ );
201
+
202
+ if (!version) throw new Error('Version not found or not publishable');
203
+
204
+ const data = typeof version.data === 'string' ? JSON.parse(version.data) : version.data;
205
+
206
+ // Archive current live version
207
+ await this.db.query(
208
+ `UPDATE content_versions SET status = 'archived'
209
+ WHERE content_type = ? AND content_id = ? AND status = 'live'`,
210
+ [contentType, contentId]
211
+ );
212
+
213
+ // Mark this version as live
214
+ await this.db.query(
215
+ `UPDATE content_versions
216
+ SET status = 'live', published_at = NOW()
217
+ WHERE content_type = ? AND content_id = ? AND version_number = ?`,
218
+ [contentType, contentId, versionNumber]
219
+ );
220
+
221
+ // Update the actual content table
222
+ const fields = Object.keys(data).filter((k) => k !== 'id' && k !== 'created_at');
223
+ const setClauses = fields.map((f) => `${f} = ?`);
224
+ const values = [...fields.map((f) => data[f]), contentId];
225
+
226
+ await this.db.query(
227
+ `UPDATE ${contentType} SET ${setClauses.join(', ')}, updated_at = NOW() WHERE id = ?`,
228
+ values
229
+ );
230
+
231
+ return data;
232
+ }
233
+
234
+ /**
235
+ * Revert to a previous version.
236
+ */
237
+ async revert(contentType, contentId, targetVersionNumber) {
238
+ return this.publish(contentType, contentId, targetVersionNumber);
239
+ }
240
+
241
+ /**
242
+ * Get a version by preview token (for preview URLs).
243
+ */
244
+ async getByPreviewToken(previewToken) {
245
+ const [version] = await this.db.query(
246
+ `SELECT * FROM content_versions WHERE preview_token = ?`,
247
+ [previewToken]
248
+ );
249
+
250
+ if (!version) throw new Error('Preview not found');
251
+
252
+ return {
253
+ ...version,
254
+ data: typeof version.data === 'string' ? JSON.parse(version.data) : version.data,
255
+ };
256
+ }
257
+
258
+ /**
259
+ * List all versions of a content record.
260
+ */
261
+ async listVersions(contentType, contentId) {
262
+ return this.db.query(
263
+ `SELECT cv.*, u.name as author_name
264
+ FROM content_versions cv
265
+ JOIN users u ON cv.created_by = u.id
266
+ WHERE cv.content_type = ? AND cv.content_id = ?
267
+ ORDER BY cv.version_number DESC`,
268
+ [contentType, contentId]
269
+ );
270
+ }
271
+ }
272
+
273
+ module.exports = ContentVersionService;
274
+ ```
275
+
276
+ ---
277
+
278
+ ## API Routes
279
+
280
+ ```js
281
+ // server/routes/contentVersions.js
282
+ const ContentVersionService = require('../services/contentVersionService');
283
+
284
+ const versionService = new ContentVersionService(db);
285
+
286
+ // Create a new draft
287
+ router.post('/api/content/:type/:id/draft', authenticate, authorize(['admin', 'teacher']), async (req, res) => {
288
+ const result = await versionService.createDraft(req.params.type, req.params.id, req.user.id);
289
+ const previewUrl = `${req.protocol}://${req.get('host')}/preview/${result.previewToken}`;
290
+ res.json({ ...result, previewUrl });
291
+ });
292
+
293
+ // Update draft
294
+ router.patch('/api/content/:type/:id/version/:version', authenticate, authorize(['admin', 'teacher']), async (req, res) => {
295
+ const data = await versionService.updateDraft(
296
+ req.params.type, req.params.id, parseInt(req.params.version), req.body, req.user.id
297
+ );
298
+ res.json(data);
299
+ });
300
+
301
+ // Submit for review
302
+ router.post('/api/content/:type/:id/version/:version/submit', authenticate, authorize(['admin', 'teacher']), async (req, res) => {
303
+ await versionService.submitForReview(req.params.type, req.params.id, parseInt(req.params.version));
304
+ res.json({ message: 'Submitted for review' });
305
+ });
306
+
307
+ // Approve
308
+ router.post('/api/content/:type/:id/version/:version/approve', authenticate, authorize(['admin']), async (req, res) => {
309
+ await versionService.approve(
310
+ req.params.type, req.params.id, parseInt(req.params.version), req.user.id, req.body.note
311
+ );
312
+ res.json({ message: 'Approved' });
313
+ });
314
+
315
+ // Publish
316
+ router.post('/api/content/:type/:id/version/:version/publish', authenticate, authorize(['admin']), async (req, res) => {
317
+ const data = await versionService.publish(req.params.type, req.params.id, parseInt(req.params.version));
318
+ res.json({ message: 'Published', data });
319
+ });
320
+
321
+ // Preview (public — uses token, no auth needed)
322
+ router.get('/preview/:token', async (req, res) => {
323
+ const version = await versionService.getByPreviewToken(req.params.token);
324
+ res.json({ preview: true, ...version });
325
+ });
326
+
327
+ // Version history
328
+ router.get('/api/content/:type/:id/versions', authenticate, async (req, res) => {
329
+ const versions = await versionService.listVersions(req.params.type, req.params.id);
330
+ res.json(versions);
331
+ });
332
+ ```
333
+
334
+ ---
335
+
336
+ ## React: Version History Panel
337
+
338
+ ```jsx
339
+ // components/cms/VersionHistory.jsx
340
+ import { useState, useEffect } from 'react';
341
+
342
+ export default function VersionHistory({ contentType, contentId, onPreview, onPublish, onRevert }) {
343
+ const [versions, setVersions] = useState([]);
344
+ const [loading, setLoading] = useState(true);
345
+
346
+ useEffect(() => {
347
+ fetch(`/api/content/${contentType}/${contentId}/versions`)
348
+ .then((r) => r.json())
349
+ .then(setVersions)
350
+ .finally(() => setLoading(false));
351
+ }, [contentType, contentId]);
352
+
353
+ if (loading) return <div>Loading version history...</div>;
354
+
355
+ const statusColors = {
356
+ draft: '#f59e0b',
357
+ in_review: '#8b5cf6',
358
+ approved: '#10b981',
359
+ live: '#3b82f6',
360
+ archived: '#6b7280',
361
+ };
362
+
363
+ return (
364
+ <div style={{ maxWidth: '600px' }}>
365
+ <h3>Version History</h3>
366
+ {versions.map((v) => (
367
+ <div
368
+ key={v.version_number}
369
+ style={{
370
+ padding: '12px',
371
+ border: '1px solid #e5e7eb',
372
+ borderRadius: '8px',
373
+ marginBottom: '8px',
374
+ display: 'flex',
375
+ justifyContent: 'space-between',
376
+ alignItems: 'center',
377
+ }}
378
+ >
379
+ <div>
380
+ <strong>v{v.version_number}</strong>
381
+ <span
382
+ style={{
383
+ background: statusColors[v.status],
384
+ color: 'white',
385
+ padding: '2px 8px',
386
+ borderRadius: '12px',
387
+ fontSize: '12px',
388
+ marginLeft: '8px',
389
+ }}
390
+ >
391
+ {v.status}
392
+ </span>
393
+ <div style={{ color: '#6b7280', fontSize: '13px', marginTop: '4px' }}>
394
+ by {v.author_name} | {new Date(v.created_at).toLocaleDateString()}
395
+ </div>
396
+ </div>
397
+ <div style={{ display: 'flex', gap: '6px' }}>
398
+ {v.preview_token && (
399
+ <button onClick={() => onPreview(v.preview_token)} style={btnStyle}>
400
+ Preview
401
+ </button>
402
+ )}
403
+ {v.status === 'approved' && (
404
+ <button onClick={() => onPublish(v.version_number)} style={{ ...btnStyle, background: '#10b981' }}>
405
+ Publish
406
+ </button>
407
+ )}
408
+ {v.status === 'archived' && (
409
+ <button onClick={() => onRevert(v.version_number)} style={{ ...btnStyle, background: '#f59e0b' }}>
410
+ Revert
411
+ </button>
412
+ )}
413
+ </div>
414
+ </div>
415
+ ))}
416
+ </div>
417
+ );
418
+ }
419
+
420
+ const btnStyle = {
421
+ background: '#3b82f6',
422
+ color: 'white',
423
+ border: 'none',
424
+ padding: '4px 12px',
425
+ borderRadius: '4px',
426
+ cursor: 'pointer',
427
+ fontSize: '13px',
428
+ };
429
+ ```
430
+
431
+ ---
432
+
433
+ ## Preview Page Component
434
+
435
+ ```jsx
436
+ // pages/PreviewPage.jsx
437
+ import { useState, useEffect } from 'react';
438
+ import { useParams } from 'react-router-dom';
439
+
440
+ export default function PreviewPage() {
441
+ const { token } = useParams();
442
+ const [preview, setPreview] = useState(null);
443
+ const [loading, setLoading] = useState(true);
444
+
445
+ useEffect(() => {
446
+ fetch(`/preview/${token}`)
447
+ .then((r) => r.json())
448
+ .then(setPreview)
449
+ .finally(() => setLoading(false));
450
+ }, [token]);
451
+
452
+ if (loading) return <div>Loading preview...</div>;
453
+ if (!preview) return <div>Preview not found or expired.</div>;
454
+
455
+ return (
456
+ <div>
457
+ {/* Preview banner */}
458
+ <div
459
+ style={{
460
+ background: '#fef3c7',
461
+ border: '1px solid #f59e0b',
462
+ padding: '12px 20px',
463
+ display: 'flex',
464
+ justifyContent: 'space-between',
465
+ alignItems: 'center',
466
+ position: 'sticky',
467
+ top: 0,
468
+ zIndex: 1000,
469
+ }}
470
+ >
471
+ <span>
472
+ <strong>PREVIEW MODE</strong> — Version {preview.version_number} ({preview.status})
473
+ </span>
474
+ <span style={{ color: '#92400e', fontSize: '13px' }}>
475
+ This is not the live version. Only people with this link can see it.
476
+ </span>
477
+ </div>
478
+
479
+ {/* Render the content using preview data */}
480
+ <article style={{ maxWidth: '800px', margin: '40px auto', padding: '0 20px' }}>
481
+ <h1>{preview.data.title}</h1>
482
+ {preview.data.subtitle && <p style={{ color: '#6b7280' }}>{preview.data.subtitle}</p>}
483
+ {preview.data.cover_image && (
484
+ <img src={preview.data.cover_image} alt="" style={{ width: '100%', borderRadius: '8px' }} />
485
+ )}
486
+ <div>{preview.data.body}</div>
487
+ </article>
488
+ </div>
489
+ );
490
+ }
491
+ ```
492
+
493
+ ---
494
+
495
+ ## Integration With Existing Skills
496
+
497
+ | Skill | How It Connects |
498
+ |-------|----------------|
499
+ | `content-publishing-states.md` | Version status maps to the state machine (draft→in_review→published) |
500
+ | `inline-visual-editing.md` | Inline edits save to the draft version, not live |
501
+ | `scheduled-content-publishing.md` | Schedule a version to auto-publish at a future date |
502
+
503
+ ---
504
+
505
+ ## When to Use Content Branching
506
+
507
+ **Use it for:**
508
+ - Lessons and courses (high-impact content, needs review)
509
+ - Landing pages and announcements
510
+ - Any content that goes through an approval workflow
511
+
512
+ **Skip it for:**
513
+ - Chat messages and comments (ephemeral, no review needed)
514
+ - User profile updates (personal, no approval needed)
515
+ - System settings (admin-only, no preview needed)