sqlew 3.6.0 → 3.6.2

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 (242) hide show
  1. package/CHANGELOG.md +403 -376
  2. package/assets/config.example.toml +9 -0
  3. package/dist/config/types.d.ts +2 -0
  4. package/dist/config/types.d.ts.map +1 -1
  5. package/dist/config/types.js.map +1 -1
  6. package/dist/database.d.ts +14 -1
  7. package/dist/database.d.ts.map +1 -1
  8. package/dist/database.js +128 -5
  9. package/dist/database.js.map +1 -1
  10. package/dist/index.js +136 -82
  11. package/dist/index.js.map +1 -1
  12. package/dist/knexfile.d.ts.map +1 -1
  13. package/dist/knexfile.js +15 -3
  14. package/dist/knexfile.js.map +1 -1
  15. package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.d.ts.map +1 -0
  16. package/dist/migrations/knex/{20251025020452_create_master_tables.js → bootstrap/20251025020452_create_master_tables.js} +15 -12
  17. package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.js.map +1 -0
  18. package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.d.ts.map +1 -0
  19. package/dist/migrations/knex/{20251025021152_create_transaction_tables.js → bootstrap/20251025021152_create_transaction_tables.js} +19 -19
  20. package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.js.map +1 -0
  21. package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.d.ts.map +1 -0
  22. package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.js +93 -0
  23. package/dist/migrations/knex/bootstrap/20251025021351_create_indexes.js.map +1 -0
  24. package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.d.ts.map +1 -0
  25. package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.js +64 -0
  26. package/dist/migrations/knex/bootstrap/20251025021416_seed_master_data.js.map +1 -0
  27. package/dist/migrations/knex/bootstrap/20251025070349_create_views.d.ts.map +1 -0
  28. package/dist/migrations/knex/bootstrap/20251025070349_create_views.js.map +1 -0
  29. package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts.map +1 -0
  30. package/dist/migrations/knex/enhancements/20251025081221_add_link_type_to_task_decision_links.js.map +1 -0
  31. package/dist/migrations/knex/enhancements/20251025082220_fix_task_dependencies_columns.d.ts.map +1 -0
  32. package/dist/migrations/knex/enhancements/20251025082220_fix_task_dependencies_columns.js.map +1 -0
  33. package/dist/migrations/knex/enhancements/20251025090000_create_help_system_tables.d.ts.map +1 -0
  34. package/dist/migrations/knex/enhancements/20251025090000_create_help_system_tables.js.map +1 -0
  35. package/dist/migrations/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts.map +1 -0
  36. package/dist/migrations/knex/enhancements/20251025090100_seed_help_categories_and_use_cases.js.map +1 -0
  37. package/dist/migrations/knex/enhancements/20251025100000_seed_help_metadata.d.ts.map +1 -0
  38. package/dist/migrations/knex/enhancements/20251025100000_seed_help_metadata.js.map +1 -0
  39. package/dist/migrations/knex/enhancements/20251025100100_seed_remaining_use_cases.d.ts.map +1 -0
  40. package/dist/migrations/knex/enhancements/20251025100100_seed_remaining_use_cases.js.map +1 -0
  41. package/dist/migrations/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts.map +1 -0
  42. package/dist/migrations/knex/enhancements/20251025120000_add_cascade_to_task_dependencies.js.map +1 -0
  43. package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts +14 -0
  44. package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.d.ts.map +1 -0
  45. package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.js +34 -0
  46. package/dist/migrations/knex/enhancements/20251027000000_add_agent_reuse_system.js.map +1 -0
  47. package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts +4 -0
  48. package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.d.ts.map +1 -0
  49. package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js +24 -0
  50. package/dist/migrations/knex/enhancements/20251027010000_add_task_constraint_to_decision_context.js.map +1 -0
  51. package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.d.ts +16 -0
  52. package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.d.ts.map +1 -0
  53. package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.js +27 -0
  54. package/dist/migrations/knex/enhancements/20251027020000_update_agent_reusability.js.map +1 -0
  55. package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts +13 -0
  56. package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.d.ts.map +1 -0
  57. package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js +70 -0
  58. package/dist/migrations/knex/upgrades/20251024010000_upgrade_v1_0_to_v1_1.js.map +1 -0
  59. package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts +11 -0
  60. package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.d.ts.map +1 -0
  61. package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js +36 -0
  62. package/dist/migrations/knex/upgrades/20251024020000_upgrade_v2_0_to_v2_1.js.map +1 -0
  63. package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts +14 -0
  64. package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.d.ts.map +1 -0
  65. package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js +84 -0
  66. package/dist/migrations/knex/upgrades/20251024030000_upgrade_v2_1_to_v3_0.js.map +1 -0
  67. package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts +9 -0
  68. package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.d.ts.map +1 -0
  69. package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js +37 -0
  70. package/dist/migrations/knex/upgrades/20251024040000_upgrade_v3_0_to_v3_2.js.map +1 -0
  71. package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts +9 -0
  72. package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.d.ts.map +1 -0
  73. package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js +41 -0
  74. package/dist/migrations/knex/upgrades/20251024050000_upgrade_v3_2_0_to_v3_2_2.js.map +1 -0
  75. package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts +9 -0
  76. package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.d.ts.map +1 -0
  77. package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js +36 -0
  78. package/dist/migrations/knex/upgrades/20251024060000_upgrade_v3_4_to_v3_5.js.map +1 -0
  79. package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts +10 -0
  80. package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.d.ts.map +1 -0
  81. package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js +28 -0
  82. package/dist/migrations/knex/upgrades/20251024070000_upgrade_v3_5_to_v3_6.js.map +1 -0
  83. package/dist/tests/agent-reuse.test.d.ts +6 -0
  84. package/dist/tests/agent-reuse.test.d.ts.map +1 -0
  85. package/dist/tests/agent-reuse.test.js +242 -0
  86. package/dist/tests/agent-reuse.test.js.map +1 -0
  87. package/dist/tests/all-features.test.d.ts +7 -0
  88. package/dist/tests/all-features.test.d.ts.map +1 -0
  89. package/dist/tests/all-features.test.js +514 -0
  90. package/dist/tests/all-features.test.js.map +1 -0
  91. package/dist/tests/migrations/test-all-versions-real.d.ts +8 -0
  92. package/dist/tests/migrations/test-all-versions-real.d.ts.map +1 -0
  93. package/dist/tests/migrations/test-all-versions-real.js +234 -0
  94. package/dist/tests/migrations/test-all-versions-real.js.map +1 -0
  95. package/dist/tests/migrations/test-all-versions.d.ts +14 -0
  96. package/dist/tests/migrations/test-all-versions.d.ts.map +1 -0
  97. package/dist/tests/migrations/test-all-versions.js +521 -0
  98. package/dist/tests/migrations/test-all-versions.js.map +1 -0
  99. package/dist/tools/constraints.d.ts.map +1 -1
  100. package/dist/tools/constraints.js +11 -7
  101. package/dist/tools/constraints.js.map +1 -1
  102. package/dist/tools/context.d.ts.map +1 -1
  103. package/dist/tools/context.js +73 -16
  104. package/dist/tools/context.js.map +1 -1
  105. package/dist/tools/messaging.d.ts.map +1 -1
  106. package/dist/tools/messaging.js +23 -1
  107. package/dist/tools/messaging.js.map +1 -1
  108. package/dist/tools/tasks.d.ts.map +1 -1
  109. package/dist/tools/tasks.js +8 -5
  110. package/dist/tools/tasks.js.map +1 -1
  111. package/dist/tools/utils.d.ts.map +1 -1
  112. package/dist/tools/utils.js +4 -1
  113. package/dist/tools/utils.js.map +1 -1
  114. package/dist/types.d.ts +1 -0
  115. package/dist/types.d.ts.map +1 -1
  116. package/dist/utils/cleanup.d.ts +3 -1
  117. package/dist/utils/cleanup.d.ts.map +1 -1
  118. package/dist/utils/cleanup.js +6 -3
  119. package/dist/utils/cleanup.js.map +1 -1
  120. package/dist/utils/debug-logger.d.ts +57 -2
  121. package/dist/utils/debug-logger.d.ts.map +1 -1
  122. package/dist/utils/debug-logger.js +155 -4
  123. package/dist/utils/debug-logger.js.map +1 -1
  124. package/dist/utils/error-handler.d.ts +28 -0
  125. package/dist/utils/error-handler.d.ts.map +1 -0
  126. package/dist/utils/error-handler.js +121 -0
  127. package/dist/utils/error-handler.js.map +1 -0
  128. package/dist/utils/help-tracking.d.ts +3 -3
  129. package/dist/utils/help-tracking.d.ts.map +1 -1
  130. package/dist/utils/help-tracking.js.map +1 -1
  131. package/dist/utils/param-parser.d.ts +23 -0
  132. package/dist/utils/param-parser.d.ts.map +1 -0
  133. package/dist/utils/param-parser.js +52 -0
  134. package/dist/utils/param-parser.js.map +1 -0
  135. package/dist/utils/retention.d.ts +10 -0
  136. package/dist/utils/retention.d.ts.map +1 -1
  137. package/dist/utils/retention.js +19 -0
  138. package/dist/utils/retention.js.map +1 -1
  139. package/docs/MIGRATION_CHAIN.md +293 -280
  140. package/package.json +85 -81
  141. package/dist/migrations/add-decision-context.d.ts +0 -28
  142. package/dist/migrations/add-decision-context.d.ts.map +0 -1
  143. package/dist/migrations/add-decision-context.js +0 -125
  144. package/dist/migrations/add-decision-context.js.map +0 -1
  145. package/dist/migrations/add-help-system-tables.d.ts +0 -35
  146. package/dist/migrations/add-help-system-tables.d.ts.map +0 -1
  147. package/dist/migrations/add-help-system-tables.js +0 -206
  148. package/dist/migrations/add-help-system-tables.js.map +0 -1
  149. package/dist/migrations/add-table-prefixes.d.ts +0 -29
  150. package/dist/migrations/add-table-prefixes.d.ts.map +0 -1
  151. package/dist/migrations/add-table-prefixes.js +0 -150
  152. package/dist/migrations/add-table-prefixes.js.map +0 -1
  153. package/dist/migrations/add-task-dependencies.d.ts +0 -26
  154. package/dist/migrations/add-task-dependencies.d.ts.map +0 -1
  155. package/dist/migrations/add-task-dependencies.js +0 -94
  156. package/dist/migrations/add-task-dependencies.js.map +0 -1
  157. package/dist/migrations/add-task-tables.d.ts +0 -47
  158. package/dist/migrations/add-task-tables.d.ts.map +0 -1
  159. package/dist/migrations/add-task-tables.js +0 -285
  160. package/dist/migrations/add-task-tables.js.map +0 -1
  161. package/dist/migrations/add-token-tracking.d.ts +0 -28
  162. package/dist/migrations/add-token-tracking.d.ts.map +0 -1
  163. package/dist/migrations/add-token-tracking.js +0 -108
  164. package/dist/migrations/add-token-tracking.js.map +0 -1
  165. package/dist/migrations/add-v2.1.0-features.d.ts +0 -29
  166. package/dist/migrations/add-v2.1.0-features.d.ts.map +0 -1
  167. package/dist/migrations/add-v2.1.0-features.js +0 -198
  168. package/dist/migrations/add-v2.1.0-features.js.map +0 -1
  169. package/dist/migrations/add-v3.5.0-pruned-files.d.ts +0 -26
  170. package/dist/migrations/add-v3.5.0-pruned-files.d.ts.map +0 -1
  171. package/dist/migrations/add-v3.5.0-pruned-files.js +0 -107
  172. package/dist/migrations/add-v3.5.0-pruned-files.js.map +0 -1
  173. package/dist/migrations/index.d.ts +0 -112
  174. package/dist/migrations/index.d.ts.map +0 -1
  175. package/dist/migrations/index.js +0 -411
  176. package/dist/migrations/index.js.map +0 -1
  177. package/dist/migrations/knex/20251025020452_create_master_tables.d.ts.map +0 -1
  178. package/dist/migrations/knex/20251025020452_create_master_tables.js.map +0 -1
  179. package/dist/migrations/knex/20251025021152_create_transaction_tables.d.ts.map +0 -1
  180. package/dist/migrations/knex/20251025021152_create_transaction_tables.js.map +0 -1
  181. package/dist/migrations/knex/20251025021351_create_indexes.d.ts.map +0 -1
  182. package/dist/migrations/knex/20251025021351_create_indexes.js +0 -62
  183. package/dist/migrations/knex/20251025021351_create_indexes.js.map +0 -1
  184. package/dist/migrations/knex/20251025021416_seed_master_data.d.ts.map +0 -1
  185. package/dist/migrations/knex/20251025021416_seed_master_data.js +0 -58
  186. package/dist/migrations/knex/20251025021416_seed_master_data.js.map +0 -1
  187. package/dist/migrations/knex/20251025070349_create_views.d.ts.map +0 -1
  188. package/dist/migrations/knex/20251025070349_create_views.js.map +0 -1
  189. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.d.ts.map +0 -1
  190. package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.js.map +0 -1
  191. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.d.ts.map +0 -1
  192. package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.js.map +0 -1
  193. package/dist/migrations/knex/20251025090000_create_help_system_tables.d.ts.map +0 -1
  194. package/dist/migrations/knex/20251025090000_create_help_system_tables.js.map +0 -1
  195. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.d.ts.map +0 -1
  196. package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.js.map +0 -1
  197. package/dist/migrations/knex/20251025100000_seed_help_metadata.d.ts.map +0 -1
  198. package/dist/migrations/knex/20251025100000_seed_help_metadata.js.map +0 -1
  199. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.d.ts.map +0 -1
  200. package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.js.map +0 -1
  201. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.d.ts.map +0 -1
  202. package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.js.map +0 -1
  203. package/dist/migrations/migrate-decisions-to-tasks.d.ts +0 -61
  204. package/dist/migrations/migrate-decisions-to-tasks.d.ts.map +0 -1
  205. package/dist/migrations/migrate-decisions-to-tasks.js +0 -442
  206. package/dist/migrations/migrate-decisions-to-tasks.js.map +0 -1
  207. package/dist/migrations/seed-help-data.d.ts +0 -48
  208. package/dist/migrations/seed-help-data.d.ts.map +0 -1
  209. package/dist/migrations/seed-help-data.js +0 -1466
  210. package/dist/migrations/seed-help-data.js.map +0 -1
  211. package/dist/migrations/seed-tool-metadata.d.ts +0 -24
  212. package/dist/migrations/seed-tool-metadata.d.ts.map +0 -1
  213. package/dist/migrations/seed-tool-metadata.js +0 -392
  214. package/dist/migrations/seed-tool-metadata.js.map +0 -1
  215. package/dist/migrations/v3.6.0-help-system-refactor.d.ts +0 -46
  216. package/dist/migrations/v3.6.0-help-system-refactor.d.ts.map +0 -1
  217. package/dist/migrations/v3.6.0-help-system-refactor.js +0 -223
  218. package/dist/migrations/v3.6.0-help-system-refactor.js.map +0 -1
  219. package/dist/tests/migrations/test-v3.2-migration.d.ts +0 -6
  220. package/dist/tests/migrations/test-v3.2-migration.d.ts.map +0 -1
  221. package/dist/tests/migrations/test-v3.2-migration.js +0 -191
  222. package/dist/tests/migrations/test-v3.2-migration.js.map +0 -1
  223. /package/dist/migrations/knex/{20251025020452_create_master_tables.d.ts → bootstrap/20251025020452_create_master_tables.d.ts} +0 -0
  224. /package/dist/migrations/knex/{20251025021152_create_transaction_tables.d.ts → bootstrap/20251025021152_create_transaction_tables.d.ts} +0 -0
  225. /package/dist/migrations/knex/{20251025021351_create_indexes.d.ts → bootstrap/20251025021351_create_indexes.d.ts} +0 -0
  226. /package/dist/migrations/knex/{20251025021416_seed_master_data.d.ts → bootstrap/20251025021416_seed_master_data.d.ts} +0 -0
  227. /package/dist/migrations/knex/{20251025070349_create_views.d.ts → bootstrap/20251025070349_create_views.d.ts} +0 -0
  228. /package/dist/migrations/knex/{20251025070349_create_views.js → bootstrap/20251025070349_create_views.js} +0 -0
  229. /package/dist/migrations/knex/{20251025081221_add_link_type_to_task_decision_links.d.ts → enhancements/20251025081221_add_link_type_to_task_decision_links.d.ts} +0 -0
  230. /package/dist/migrations/knex/{20251025081221_add_link_type_to_task_decision_links.js → enhancements/20251025081221_add_link_type_to_task_decision_links.js} +0 -0
  231. /package/dist/migrations/knex/{20251025082220_fix_task_dependencies_columns.d.ts → enhancements/20251025082220_fix_task_dependencies_columns.d.ts} +0 -0
  232. /package/dist/migrations/knex/{20251025082220_fix_task_dependencies_columns.js → enhancements/20251025082220_fix_task_dependencies_columns.js} +0 -0
  233. /package/dist/migrations/knex/{20251025090000_create_help_system_tables.d.ts → enhancements/20251025090000_create_help_system_tables.d.ts} +0 -0
  234. /package/dist/migrations/knex/{20251025090000_create_help_system_tables.js → enhancements/20251025090000_create_help_system_tables.js} +0 -0
  235. /package/dist/migrations/knex/{20251025090100_seed_help_categories_and_use_cases.d.ts → enhancements/20251025090100_seed_help_categories_and_use_cases.d.ts} +0 -0
  236. /package/dist/migrations/knex/{20251025090100_seed_help_categories_and_use_cases.js → enhancements/20251025090100_seed_help_categories_and_use_cases.js} +0 -0
  237. /package/dist/migrations/knex/{20251025100000_seed_help_metadata.d.ts → enhancements/20251025100000_seed_help_metadata.d.ts} +0 -0
  238. /package/dist/migrations/knex/{20251025100000_seed_help_metadata.js → enhancements/20251025100000_seed_help_metadata.js} +0 -0
  239. /package/dist/migrations/knex/{20251025100100_seed_remaining_use_cases.d.ts → enhancements/20251025100100_seed_remaining_use_cases.d.ts} +0 -0
  240. /package/dist/migrations/knex/{20251025100100_seed_remaining_use_cases.js → enhancements/20251025100100_seed_remaining_use_cases.js} +0 -0
  241. /package/dist/migrations/knex/{20251025120000_add_cascade_to_task_dependencies.d.ts → enhancements/20251025120000_add_cascade_to_task_dependencies.d.ts} +0 -0
  242. /package/dist/migrations/knex/{20251025120000_add_cascade_to_task_dependencies.js → enhancements/20251025120000_add_cascade_to_task_dependencies.js} +0 -0
@@ -1,223 +0,0 @@
1
- /**
2
- * Migration: Help System Schema Refactor (v3.5.x -> v3.6.0)
3
- *
4
- * This migration refactors the help system schema:
5
- * 1. Renames tables: t_help_* → m_help_* for static/master data
6
- * 2. Creates 5 new junction tables for normalized many-to-many relationships
7
- * 3. Parses JSON action_sequence → normalized m_help_use_case_actions rows
8
- * 4. Populates m_help_sequences with 10 workflow patterns
9
- * 5. Generates and normalizes tags from categories/titles
10
- * 6. Creates indexes on all foreign keys
11
- * 7. Validates zero data loss (41 use cases preserved)
12
- *
13
- * Execution time: <5 seconds
14
- * Safety: Single transaction with rollback on error
15
- */
16
- import * as fs from 'fs';
17
- import * as path from 'path';
18
- /**
19
- * Check if migration is needed
20
- */
21
- export function needsMigration(db) {
22
- // Check if old table exists (t_help_use_cases) with action_sequence column
23
- const oldTableExists = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='t_help_use_cases'").get();
24
- // Check if new junction table doesn't exist
25
- const newTableExists = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='m_help_use_case_actions'").get();
26
- // Check if t_help_use_cases has action_sequence column
27
- let hasActionSequenceColumn = false;
28
- if (oldTableExists) {
29
- const columns = db.prepare("PRAGMA table_info(t_help_use_cases)").all();
30
- hasActionSequenceColumn = columns.some(col => col.name === 'action_sequence');
31
- }
32
- return oldTableExists !== undefined && newTableExists === undefined && hasActionSequenceColumn;
33
- }
34
- /**
35
- * Run the migration
36
- */
37
- export function runMigration(db) {
38
- const details = [];
39
- const validationResults = [];
40
- try {
41
- // Read SQL migration file
42
- const sqlPath = path.join(__dirname, 'v3.6.0-help-system-refactor.sql');
43
- const sql = fs.readFileSync(sqlPath, 'utf-8');
44
- details.push('Loaded migration SQL from file');
45
- // Execute migration in a single transaction
46
- // Note: The SQL file already contains BEGIN/COMMIT
47
- db.exec(sql);
48
- details.push('Migration SQL executed successfully');
49
- // Extract validation results from the database
50
- // The SQL includes validation queries that output results
51
- // We'll re-run them to capture the results in TypeScript
52
- // Validation 1: Use case count
53
- const useCaseCount = db.prepare('SELECT COUNT(*) as count FROM m_help_use_cases').get();
54
- validationResults.push({
55
- test: 'Use Case Count',
56
- actual: useCaseCount.count,
57
- expected: 41,
58
- status: useCaseCount.count === 41 ? 'PASS' : 'FAIL'
59
- });
60
- // Validation 2: Use cases with actions
61
- const useCasesWithActions = db.prepare('SELECT COUNT(DISTINCT use_case_id) as count FROM m_help_use_case_actions').get();
62
- validationResults.push({
63
- test: 'Use Cases with Actions',
64
- actual: useCasesWithActions.count,
65
- expected: 41,
66
- status: useCasesWithActions.count === 41 ? 'PASS' : 'FAIL'
67
- });
68
- // Validation 3: Sequences with actions
69
- const sequencesWithActions = db.prepare('SELECT COUNT(DISTINCT sequence_id) as count FROM m_help_sequence_actions').get();
70
- validationResults.push({
71
- test: 'Sequences with Actions',
72
- actual: sequencesWithActions.count,
73
- expected: 10,
74
- status: sequencesWithActions.count === 10 ? 'PASS' : 'FAIL'
75
- });
76
- // Validation 4: Tag count
77
- const tagCount = db.prepare('SELECT COUNT(*) as count FROM m_help_tags').get();
78
- validationResults.push({
79
- test: 'Tag Count',
80
- actual: tagCount.count,
81
- expected: '> 20',
82
- status: tagCount.count > 20 ? 'PASS' : 'FAIL'
83
- });
84
- // Validation 5: FK integrity
85
- const orphanedRecords = db.prepare(`
86
- SELECT COUNT(*) as count
87
- FROM m_help_use_case_actions uca
88
- LEFT JOIN m_help_actions ha ON uca.action_id = ha.action_id
89
- WHERE ha.action_id IS NULL
90
- `).get();
91
- validationResults.push({
92
- test: 'FK Integrity (use_case_actions)',
93
- actual: orphanedRecords.count,
94
- expected: 0,
95
- status: orphanedRecords.count === 0 ? 'PASS' : 'FAIL'
96
- });
97
- // Validation 6: Index count
98
- const indexCount = db.prepare("SELECT COUNT(*) as count FROM sqlite_master WHERE type='index' AND name LIKE 'idx_help_%'").get();
99
- validationResults.push({
100
- test: 'Index Count',
101
- actual: indexCount.count,
102
- expected: '> 15',
103
- status: indexCount.count > 15 ? 'PASS' : 'FAIL'
104
- });
105
- // Check if all validations passed
106
- const allPassed = validationResults.every(v => v.status === 'PASS');
107
- if (!allPassed) {
108
- const failedTests = validationResults.filter(v => v.status === 'FAIL');
109
- details.push(`WARNING: ${failedTests.length} validation test(s) failed`);
110
- failedTests.forEach(test => {
111
- details.push(` - ${test.test}: expected ${test.expected}, got ${test.actual}`);
112
- });
113
- }
114
- // Get migration statistics
115
- const stats = {
116
- useCases: useCaseCount.count,
117
- actionsNormalized: db.prepare('SELECT COUNT(*) as count FROM m_help_use_case_actions').get(),
118
- sequencesCreated: db.prepare('SELECT COUNT(*) as count FROM m_help_sequences').get(),
119
- tagsGenerated: tagCount.count,
120
- indexesCreated: indexCount.count
121
- };
122
- details.push('');
123
- details.push('Migration Statistics:');
124
- details.push(` - Tables Renamed: 3 (t_ → m_)`);
125
- details.push(` - New Tables Created: 6`);
126
- details.push(` - Use Cases Migrated: ${stats.useCases}`);
127
- details.push(` - Actions Normalized: ${stats.actionsNormalized.count}`);
128
- details.push(` - Sequences Created: ${stats.sequencesCreated.count}`);
129
- details.push(` - Tags Generated: ${stats.tagsGenerated}`);
130
- details.push(` - Indexes Created: ${stats.indexesCreated}`);
131
- return {
132
- success: allPassed,
133
- message: allPassed
134
- ? 'Migration v3.6.0 completed successfully. All validations passed.'
135
- : 'Migration v3.6.0 completed with validation warnings. Review details.',
136
- details,
137
- validationResults
138
- };
139
- }
140
- catch (error) {
141
- const message = error instanceof Error ? error.message : String(error);
142
- details.push(`ERROR: ${message}`);
143
- return {
144
- success: false,
145
- message: `Migration failed: ${message}`,
146
- details,
147
- validationResults
148
- };
149
- }
150
- }
151
- /**
152
- * Get migration info
153
- */
154
- export function getMigrationInfo() {
155
- return `
156
- Migration: Help System Schema Refactor (v3.5.x -> v3.6.0)
157
-
158
- This migration refactors the help system for better normalization and queryability:
159
-
160
- Schema Changes:
161
- - Renames 3 tables: t_help_* → m_help_* (static/master data)
162
- - Creates 6 new tables:
163
- * m_help_tags (normalized tag master)
164
- * m_help_sequences (reusable workflow patterns)
165
- * m_help_use_case_actions (replaces JSON action_sequence)
166
- * m_help_sequence_actions (sequence steps)
167
- * m_help_example_tags (example categorization)
168
- * m_help_use_case_tags (use case categorization)
169
- * m_help_sequence_tags (sequence categorization)
170
-
171
- Data Transformations:
172
- - Parses JSON action_sequence arrays → normalized relational rows
173
- - Generates 24+ tags from categories, complexity levels, and concepts
174
- - Populates 10 workflow sequences (task state machine, rich decision flow, etc.)
175
- - Auto-tags all use cases and sequences
176
-
177
- Performance Optimizations:
178
- - Creates 15+ indexes on all foreign keys and junction tables
179
- - Enables efficient tag-based queries and workflow discovery
180
-
181
- Safety Guarantees:
182
- - Single atomic transaction (all-or-nothing)
183
- - 6 validation tests ensure zero data loss
184
- - Rollback on any error
185
- - Execution time: <5 seconds
186
-
187
- All 41 existing use cases are preserved with enhanced metadata.
188
- `.trim();
189
- }
190
- /**
191
- * Rollback migration (restore from backup)
192
- */
193
- export function rollbackMigration(db, backupPath) {
194
- const details = [];
195
- try {
196
- if (!fs.existsSync(backupPath)) {
197
- return {
198
- success: false,
199
- message: `Backup file not found: ${backupPath}`,
200
- details
201
- };
202
- }
203
- // Close current database connection
204
- db.close();
205
- // Restore backup (this would need to be handled by the caller)
206
- details.push(`Backup file located: ${backupPath}`);
207
- details.push('Note: Database restoration must be performed manually by copying the backup file.');
208
- return {
209
- success: true,
210
- message: 'Rollback instructions prepared. Restore the backup file manually.',
211
- details
212
- };
213
- }
214
- catch (error) {
215
- const message = error instanceof Error ? error.message : String(error);
216
- return {
217
- success: false,
218
- message: `Rollback failed: ${message}`,
219
- details
220
- };
221
- }
222
- }
223
- //# sourceMappingURL=v3.6.0-help-system-refactor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"v3.6.0-help-system-refactor.js","sourceRoot":"","sources":["../../src/migrations/v3.6.0-help-system-refactor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAgB7B;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,EAAY;IACzC,2EAA2E;IAC3E,MAAM,cAAc,GAAG,EAAE,CAAC,OAAO,CAC/B,+EAA+E,CAChF,CAAC,GAAG,EAAE,CAAC;IAER,4CAA4C;IAC5C,MAAM,cAAc,GAAG,EAAE,CAAC,OAAO,CAC/B,sFAAsF,CACvF,CAAC,GAAG,EAAE,CAAC;IAER,uDAAuD;IACvD,IAAI,uBAAuB,GAAG,KAAK,CAAC;IACpC,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAA6B,CAAC;QACnG,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC;IAChF,CAAC;IAED,OAAO,cAAc,KAAK,SAAS,IAAI,cAAc,KAAK,SAAS,IAAI,uBAAuB,CAAC;AACjG,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,EAAY;IACvC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,iBAAiB,GAAuB,EAAE,CAAC;IAEjD,IAAI,CAAC;QACH,0BAA0B;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iCAAiC,CAAC,CAAC;QACxE,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE9C,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAE/C,4CAA4C;QAC5C,mDAAmD;QACnD,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEb,OAAO,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QAEpD,+CAA+C;QAC/C,0DAA0D;QAC1D,yDAAyD;QAEzD,+BAA+B;QAC/B,MAAM,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC,GAAG,EAAuB,CAAC;QAC7G,iBAAiB,CAAC,IAAI,CAAC;YACrB,IAAI,EAAE,gBAAgB;YACtB,MAAM,EAAE,YAAY,CAAC,KAAK;YAC1B,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,YAAY,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;SACpD,CAAC,CAAC;QAEH,uCAAuC;QACvC,MAAM,mBAAmB,GAAG,EAAE,CAAC,OAAO,CACpC,0EAA0E,CAC3E,CAAC,GAAG,EAAuB,CAAC;QAC7B,iBAAiB,CAAC,IAAI,CAAC;YACrB,IAAI,EAAE,wBAAwB;YAC9B,MAAM,EAAE,mBAAmB,CAAC,KAAK;YACjC,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,mBAAmB,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;SAC3D,CAAC,CAAC;QAEH,uCAAuC;QACvC,MAAM,oBAAoB,GAAG,EAAE,CAAC,OAAO,CACrC,0EAA0E,CAC3E,CAAC,GAAG,EAAuB,CAAC;QAC7B,iBAAiB,CAAC,IAAI,CAAC;YACrB,IAAI,EAAE,wBAAwB;YAC9B,MAAM,EAAE,oBAAoB,CAAC,KAAK;YAClC,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,oBAAoB,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;SAC5D,CAAC,CAAC;QAEH,0BAA0B;QAC1B,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC,GAAG,EAAuB,CAAC;QACpG,iBAAiB,CAAC,IAAI,CAAC;YACrB,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,QAAQ,CAAC,KAAK;YACtB,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;SAC9C,CAAC,CAAC;QAEH,6BAA6B;QAC7B,MAAM,eAAe,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;KAKlC,CAAC,CAAC,GAAG,EAAuB,CAAC;QAC9B,iBAAiB,CAAC,IAAI,CAAC;YACrB,IAAI,EAAE,iCAAiC;YACvC,MAAM,EAAE,eAAe,CAAC,KAAK;YAC7B,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,eAAe,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;SACtD,CAAC,CAAC;QAEH,4BAA4B;QAC5B,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAC3B,2FAA2F,CAC5F,CAAC,GAAG,EAAuB,CAAC;QAC7B,iBAAiB,CAAC,IAAI,CAAC;YACrB,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE,UAAU,CAAC,KAAK;YACxB,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;SAChD,CAAC,CAAC;QAEH,kCAAkC;QAClC,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QAEpE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,YAAY,WAAW,CAAC,MAAM,4BAA4B,CAAC,CAAC;YACzE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACzB,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,cAAc,IAAI,CAAC,QAAQ,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAClF,CAAC,CAAC,CAAC;QACL,CAAC;QAED,2BAA2B;QAC3B,MAAM,KAAK,GAAG;YACZ,QAAQ,EAAE,YAAY,CAAC,KAAK;YAC5B,iBAAiB,EAAE,EAAE,CAAC,OAAO,CAAC,uDAAuD,CAAC,CAAC,GAAG,EAAuB;YACjH,gBAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC,GAAG,EAAuB;YACzG,aAAa,EAAE,QAAQ,CAAC,KAAK;YAC7B,cAAc,EAAE,UAAU,CAAC,KAAK;SACjC,CAAC;QAEF,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,2BAA2B,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,2BAA2B,KAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,0BAA0B,KAAK,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,uBAAuB,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,wBAAwB,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;QAE7D,OAAO;YACL,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE,SAAS;gBAChB,CAAC,CAAC,kEAAkE;gBACpE,CAAC,CAAC,sEAAsE;YAC1E,OAAO;YACP,iBAAiB;SAClB,CAAC;IAEJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;QAElC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,qBAAqB,OAAO,EAAE;YACvC,OAAO;YACP,iBAAiB;SAClB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCN,CAAC,IAAI,EAAE,CAAC;AACX,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAY,EAAE,UAAkB;IAChE,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,0BAA0B,UAAU,EAAE;gBAC/C,OAAO;aACR,CAAC;QACJ,CAAC;QAED,oCAAoC;QACpC,EAAE,CAAC,KAAK,EAAE,CAAC;QAEX,+DAA+D;QAC/D,OAAO,CAAC,IAAI,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAC;QAElG,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,mEAAmE;YAC5E,OAAO;SACR,CAAC;IAEJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,oBAAoB,OAAO,EAAE;YACtC,OAAO;SACR,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1,6 +0,0 @@
1
- /**
2
- * Focused Migration Test: v3.1.x → v3.2.0 (Task Dependencies)
3
- * Tests the specific task dependencies migration
4
- */
5
- export {};
6
- //# sourceMappingURL=test-v3.2-migration.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-v3.2-migration.d.ts","sourceRoot":"","sources":["../../../src/tests/migrations/test-v3.2-migration.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -1,191 +0,0 @@
1
- /**
2
- * Focused Migration Test: v3.1.x → v3.2.0 (Task Dependencies)
3
- * Tests the specific task dependencies migration
4
- */
5
- import Database from 'better-sqlite3';
6
- import { initializeSchema } from '../../schema.js';
7
- import { needsTaskDependenciesMigration, migrateToTaskDependencies } from '../../migrations/add-task-dependencies.js';
8
- // Colors
9
- const GREEN = '\x1b[32m';
10
- const RED = '\x1b[31m';
11
- const BLUE = '\x1b[34m';
12
- const YELLOW = '\x1b[33m';
13
- const RESET = '\x1b[0m';
14
- function log(message, color = RESET) {
15
- console.log(`${color}${message}${RESET}`);
16
- }
17
- async function testTaskDependenciesMigration() {
18
- log('\n' + '='.repeat(70), BLUE);
19
- log('v3.2.0 MIGRATION TEST: Task Dependencies', BLUE);
20
- log('='.repeat(70) + '\n', BLUE);
21
- // Test 1: Fresh database with full schema
22
- log('TEST 1: Fresh Database (Full Schema Initialization)', YELLOW);
23
- log('-'.repeat(70), YELLOW);
24
- const dbFresh = new Database(':memory:');
25
- try {
26
- // Initialize full schema (this will create v3.2.0 directly)
27
- initializeSchema(dbFresh);
28
- // Check if t_task_dependencies exists
29
- const hasTable = dbFresh.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='t_task_dependencies'").get();
30
- if (hasTable) {
31
- log('✅ t_task_dependencies table exists in fresh schema', GREEN);
32
- // Verify structure
33
- const columns = dbFresh.prepare("PRAGMA table_info(t_task_dependencies)").all();
34
- log(`✅ Table has ${columns.length} columns`, GREEN);
35
- // Verify indexes
36
- const indexes = dbFresh.prepare("SELECT name FROM sqlite_master WHERE type='index' AND tbl_name='t_task_dependencies'").all();
37
- log(`✅ Table has ${indexes.length} index(es):`, GREEN);
38
- indexes.forEach((idx) => {
39
- log(` - ${idx.name}`, GREEN);
40
- });
41
- }
42
- else {
43
- log('❌ t_task_dependencies table NOT found!', RED);
44
- return false;
45
- }
46
- }
47
- finally {
48
- dbFresh.close();
49
- }
50
- // Test 2: Simulated v3.1.x database (manually remove t_task_dependencies)
51
- log('\nTEST 2: Upgrade from v3.1.x → v3.2.0', YELLOW);
52
- log('-'.repeat(70), YELLOW);
53
- const dbUpgrade = new Database(':memory:');
54
- try {
55
- // Initialize full schema first
56
- initializeSchema(dbUpgrade);
57
- // Drop t_task_dependencies to simulate v3.1.x
58
- dbUpgrade.exec('DROP TABLE IF EXISTS t_task_dependencies');
59
- log('✓ Simulated v3.1.x (removed t_task_dependencies)', YELLOW);
60
- // Register an agent first (for activity log triggers)
61
- dbUpgrade.exec(`INSERT OR IGNORE INTO m_agents (id, name) VALUES (1, 'test-agent')`);
62
- // Add some test tasks (disable triggers temporarily)
63
- dbUpgrade.exec(`
64
- INSERT INTO t_tasks (id, title, status_id, priority, created_by_agent_id)
65
- VALUES
66
- (1, 'Database Schema', 1, 4, 1),
67
- (2, 'API Implementation', 1, 3, 1),
68
- (3, 'Testing', 1, 2, 1);
69
- `);
70
- log('✓ Created test tasks (3 tasks)', YELLOW);
71
- // Check if migration is needed
72
- const needsMigration = needsTaskDependenciesMigration(dbUpgrade);
73
- log(`✓ needsMigration: ${needsMigration}`, needsMigration ? YELLOW : GREEN);
74
- if (!needsMigration) {
75
- log('❌ Migration should be needed but reports as not needed!', RED);
76
- return false;
77
- }
78
- // Run migration
79
- log('\n🔄 Running migration...', BLUE);
80
- const result = migrateToTaskDependencies(dbUpgrade);
81
- if (result.success) {
82
- log(`✅ ${result.message}`, GREEN);
83
- if (result.details) {
84
- result.details.forEach((detail) => {
85
- log(` - ${detail}`, GREEN);
86
- });
87
- }
88
- // Verify table exists
89
- const hasTable = dbUpgrade.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='t_task_dependencies'").get();
90
- if (!hasTable) {
91
- log('❌ Table not created!', RED);
92
- return false;
93
- }
94
- // Test adding dependencies
95
- log('\n✓ Testing dependency operations:', YELLOW);
96
- dbUpgrade.exec(`
97
- INSERT INTO t_task_dependencies (blocker_task_id, blocked_task_id)
98
- VALUES (1, 2), (2, 3);
99
- `);
100
- log(' ✓ Added dependencies: 1→2, 2→3', GREEN);
101
- // Query dependencies
102
- const deps = dbUpgrade.prepare('SELECT * FROM t_task_dependencies').all();
103
- log(` ✓ Verified ${deps.length} dependencies in table`, GREEN);
104
- // Test CASCADE deletion
105
- dbUpgrade.exec('DELETE FROM t_tasks WHERE id = 1');
106
- const depsAfterDelete = dbUpgrade.prepare('SELECT * FROM t_task_dependencies').all();
107
- log(` ✓ CASCADE deletion: ${depsAfterDelete.length} dependencies remaining (was 2)`, GREEN);
108
- }
109
- else {
110
- log(`❌ ${result.message}`, RED);
111
- return false;
112
- }
113
- }
114
- finally {
115
- dbUpgrade.close();
116
- }
117
- // Test 3: Idempotency (running migration twice)
118
- log('\nTEST 3: Migration Idempotency', YELLOW);
119
- log('-'.repeat(70), YELLOW);
120
- const dbIdempotent = new Database(':memory:');
121
- try {
122
- // Initialize full schema
123
- initializeSchema(dbIdempotent);
124
- // Run migration on already-migrated database
125
- log('✓ Running migration on already-migrated database...', YELLOW);
126
- const result = migrateToTaskDependencies(dbIdempotent);
127
- if (result.success && result.message.includes('already exists')) {
128
- log(`✅ ${result.message}`, GREEN);
129
- log('✅ Migration is idempotent (safe to run multiple times)', GREEN);
130
- }
131
- else if (result.success) {
132
- log('⚠️ Migration ran but should have detected existing table', YELLOW);
133
- }
134
- else {
135
- log(`❌ ${result.message}`, RED);
136
- return false;
137
- }
138
- }
139
- finally {
140
- dbIdempotent.close();
141
- }
142
- // Test 4: Verify foreign key constraints
143
- log('\nTEST 4: Foreign Key Constraints', YELLOW);
144
- log('-'.repeat(70), YELLOW);
145
- const dbFK = new Database(':memory:');
146
- try {
147
- initializeSchema(dbFK);
148
- dbFK.exec('PRAGMA foreign_keys = ON');
149
- // Register agent
150
- dbFK.exec(`INSERT OR IGNORE INTO m_agents (id, name) VALUES (1, 'test-agent')`);
151
- // Add test tasks
152
- dbFK.exec(`
153
- INSERT INTO t_tasks (id, title, status_id, created_by_agent_id) VALUES (1, 'Task A', 1, 1);
154
- INSERT INTO t_tasks (id, title, status_id, created_by_agent_id) VALUES (2, 'Task B', 1, 1);
155
- `);
156
- // Try to add dependency with non-existent task
157
- try {
158
- dbFK.exec('INSERT INTO t_task_dependencies (blocker_task_id, blocked_task_id) VALUES (1, 999)');
159
- log('❌ Should have failed FK constraint!', RED);
160
- return false;
161
- }
162
- catch (error) {
163
- log('✅ Foreign key constraint working (rejected invalid task_id)', GREEN);
164
- }
165
- // Add valid dependency
166
- dbFK.exec('INSERT INTO t_task_dependencies (blocker_task_id, blocked_task_id) VALUES (1, 2)');
167
- log('✅ Valid dependency added successfully', GREEN);
168
- }
169
- finally {
170
- dbFK.close();
171
- }
172
- return true;
173
- }
174
- // Run test
175
- testTaskDependenciesMigration().then(success => {
176
- log('\n' + '='.repeat(70), BLUE);
177
- if (success) {
178
- log('🎉 ALL TESTS PASSED!', GREEN);
179
- log('='.repeat(70) + '\n', BLUE);
180
- process.exit(0);
181
- }
182
- else {
183
- log('❌ TESTS FAILED!', RED);
184
- log('='.repeat(70) + '\n', BLUE);
185
- process.exit(1);
186
- }
187
- }).catch(error => {
188
- log(`\n❌ Fatal error: ${error}`, RED);
189
- process.exit(1);
190
- });
191
- //# sourceMappingURL=test-v3.2-migration.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-v3.2-migration.js","sourceRoot":"","sources":["../../../src/tests/migrations/test-v3.2-migration.ts"],"names":[],"mappings":"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"}