sqlew 4.1.1 → 4.3.0

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 (302) hide show
  1. package/CHANGELOG.md +1862 -1817
  2. package/README.md +25 -165
  3. package/assets/claude-md-snippets/plan-mode-integration.md +48 -24
  4. package/assets/sample-skills/sqlew-decision-format/SKILL.md +73 -0
  5. package/dist/cli/hooks/check-completion.d.ts.map +1 -1
  6. package/dist/cli/hooks/check-completion.js +90 -2
  7. package/dist/cli/hooks/check-completion.js.map +1 -1
  8. package/dist/cli/hooks/init-hooks.d.ts.map +1 -1
  9. package/dist/cli/hooks/init-hooks.js +97 -5
  10. package/dist/cli/hooks/init-hooks.js.map +1 -1
  11. package/dist/cli/hooks/on-enter-plan.d.ts +22 -0
  12. package/dist/cli/hooks/on-enter-plan.d.ts.map +1 -0
  13. package/dist/cli/hooks/on-enter-plan.js +51 -0
  14. package/dist/cli/hooks/on-enter-plan.js.map +1 -0
  15. package/dist/cli/hooks/on-exit-plan.d.ts +20 -0
  16. package/dist/cli/hooks/on-exit-plan.d.ts.map +1 -0
  17. package/dist/cli/hooks/on-exit-plan.js +66 -0
  18. package/dist/cli/hooks/on-exit-plan.js.map +1 -0
  19. package/dist/cli/hooks/on-stop.d.ts +19 -0
  20. package/dist/cli/hooks/on-stop.d.ts.map +1 -0
  21. package/dist/cli/hooks/on-stop.js +152 -0
  22. package/dist/cli/hooks/on-stop.js.map +1 -0
  23. package/dist/cli/hooks/on-subagent-stop.d.ts +20 -0
  24. package/dist/cli/hooks/on-subagent-stop.d.ts.map +1 -0
  25. package/dist/cli/hooks/on-subagent-stop.js +94 -0
  26. package/dist/cli/hooks/on-subagent-stop.js.map +1 -0
  27. package/dist/cli/hooks/plan-pattern-extractor.d.ts +87 -0
  28. package/dist/cli/hooks/plan-pattern-extractor.d.ts.map +1 -0
  29. package/dist/cli/hooks/plan-pattern-extractor.js +218 -0
  30. package/dist/cli/hooks/plan-pattern-extractor.js.map +1 -0
  31. package/dist/cli/hooks/plan-processor.d.ts +43 -0
  32. package/dist/cli/hooks/plan-processor.d.ts.map +1 -0
  33. package/dist/cli/hooks/plan-processor.js +115 -0
  34. package/dist/cli/hooks/plan-processor.js.map +1 -0
  35. package/dist/cli/hooks/plan-toml-parser.d.ts +42 -0
  36. package/dist/cli/hooks/plan-toml-parser.d.ts.map +1 -0
  37. package/dist/cli/hooks/plan-toml-parser.js +178 -0
  38. package/dist/cli/hooks/plan-toml-parser.js.map +1 -0
  39. package/dist/cli/hooks/save.d.ts +7 -9
  40. package/dist/cli/hooks/save.d.ts.map +1 -1
  41. package/dist/cli/hooks/save.js +50 -25
  42. package/dist/cli/hooks/save.js.map +1 -1
  43. package/dist/cli/hooks/stdin-parser.d.ts +66 -2
  44. package/dist/cli/hooks/stdin-parser.d.ts.map +1 -1
  45. package/dist/cli/hooks/stdin-parser.js +57 -2
  46. package/dist/cli/hooks/stdin-parser.js.map +1 -1
  47. package/dist/cli/hooks/suggest.d.ts +8 -4
  48. package/dist/cli/hooks/suggest.d.ts.map +1 -1
  49. package/dist/cli/hooks/suggest.js +21 -123
  50. package/dist/cli/hooks/suggest.js.map +1 -1
  51. package/dist/cli/hooks/track-plan.d.ts +8 -1
  52. package/dist/cli/hooks/track-plan.d.ts.map +1 -1
  53. package/dist/cli/hooks/track-plan.js +64 -66
  54. package/dist/cli/hooks/track-plan.js.map +1 -1
  55. package/dist/cli.d.ts.map +1 -1
  56. package/dist/cli.js +139 -38
  57. package/dist/cli.js.map +1 -1
  58. package/dist/config/global-config.d.ts +90 -0
  59. package/dist/config/global-config.d.ts.map +1 -1
  60. package/dist/config/global-config.js +86 -1
  61. package/dist/config/global-config.js.map +1 -1
  62. package/dist/database/initialization/init.js +3 -3
  63. package/dist/database/initialization/init.js.map +1 -1
  64. package/dist/database/initialization/schema-version.js +1 -1
  65. package/dist/database/initialization/schema-version.js.map +1 -1
  66. package/dist/database/migrations/v4/20251126000000_v4_bootstrap.js +32 -32
  67. package/dist/database/migrations/v4/20251225000000_v4_seed_missing_help_data.d.ts +14 -0
  68. package/dist/database/migrations/v4/20251225000000_v4_seed_missing_help_data.d.ts.map +1 -0
  69. package/dist/database/migrations/v4/20251225000000_v4_seed_missing_help_data.js +201 -0
  70. package/dist/database/migrations/v4/20251225000000_v4_seed_missing_help_data.js.map +1 -0
  71. package/dist/database/migrations/v4/20251225000001_v4_fix_help_params.d.ts +12 -0
  72. package/dist/database/migrations/v4/20251225000001_v4_fix_help_params.d.ts.map +1 -0
  73. package/dist/database/migrations/v4/20251225000001_v4_fix_help_params.js +61 -0
  74. package/dist/database/migrations/v4/20251225000001_v4_fix_help_params.js.map +1 -0
  75. package/dist/database/migrations/v4/20260102204000_v4_fix_decision_set_example.d.ts +15 -0
  76. package/dist/database/migrations/v4/20260102204000_v4_fix_decision_set_example.d.ts.map +1 -0
  77. package/dist/database/migrations/v4/20260102204000_v4_fix_decision_set_example.js +74 -0
  78. package/dist/database/migrations/v4/20260102204000_v4_fix_decision_set_example.js.map +1 -0
  79. package/dist/index.js +8 -4
  80. package/dist/index.js.map +1 -1
  81. package/dist/init-skills.d.ts +6 -1
  82. package/dist/init-skills.d.ts.map +1 -1
  83. package/dist/init-skills.js +50 -1
  84. package/dist/init-skills.js.map +1 -1
  85. package/dist/knexfile.d.ts.map +1 -1
  86. package/dist/knexfile.js +16 -12
  87. package/dist/knexfile.js.map +1 -1
  88. package/dist/server/setup.d.ts.map +1 -1
  89. package/dist/server/setup.js +33 -11
  90. package/dist/server/setup.js.map +1 -1
  91. package/dist/server/tool-handlers.d.ts.map +1 -1
  92. package/dist/server/tool-handlers.js +7 -1
  93. package/dist/server/tool-handlers.js.map +1 -1
  94. package/dist/server/tool-registry.js +1 -1
  95. package/dist/server/tool-registry.js.map +1 -1
  96. package/dist/tests/database/sql-dump/table-ordering.test.js +6 -1
  97. package/dist/tests/database/sql-dump/table-ordering.test.js.map +1 -1
  98. package/dist/tests/docker/native/constraint-operations.test.js +74 -137
  99. package/dist/tests/docker/native/constraint-operations.test.js.map +1 -1
  100. package/dist/tests/docker/native/decision-operations.test.js +52 -40
  101. package/dist/tests/docker/native/decision-operations.test.js.map +1 -1
  102. package/dist/tests/docker/native/help-system.test.d.ts +3 -2
  103. package/dist/tests/docker/native/help-system.test.d.ts.map +1 -1
  104. package/dist/tests/docker/native/help-system.test.js +90 -80
  105. package/dist/tests/docker/native/help-system.test.js.map +1 -1
  106. package/dist/tests/docker/native/suggest-tool.test.d.ts +2 -2
  107. package/dist/tests/docker/native/suggest-tool.test.js +130 -63
  108. package/dist/tests/docker/native/suggest-tool.test.js.map +1 -1
  109. package/dist/tests/docker/native/task-operations.test.js +9 -19
  110. package/dist/tests/docker/native/task-operations.test.js.map +1 -1
  111. package/dist/tests/docker/native/test-harness.d.ts.map +1 -1
  112. package/dist/tests/docker/native/test-harness.js +6 -5
  113. package/dist/tests/docker/native/test-harness.js.map +1 -1
  114. package/dist/tests/feature/decision/batch-validation-comprehensive.test.js +7 -8
  115. package/dist/tests/feature/decision/batch-validation-comprehensive.test.js.map +1 -1
  116. package/dist/tests/feature/decision/context-modular.test.js +1 -3
  117. package/dist/tests/feature/decision/context-modular.test.js.map +1 -1
  118. package/dist/tests/feature/decision/truncate.test.d.ts +8 -0
  119. package/dist/tests/feature/decision/truncate.test.d.ts.map +1 -0
  120. package/dist/tests/feature/decision/truncate.test.js +192 -0
  121. package/dist/tests/feature/decision/truncate.test.js.map +1 -0
  122. package/dist/tests/feature/help/help-system.test.d.ts +1 -13
  123. package/dist/tests/feature/help/help-system.test.d.ts.map +1 -1
  124. package/dist/tests/feature/help/help-system.test.js +107 -331
  125. package/dist/tests/feature/help/help-system.test.js.map +1 -1
  126. package/dist/tests/feature/task/auto-pruning-decision-link.test.js +2 -4
  127. package/dist/tests/feature/task/auto-pruning-decision-link.test.js.map +1 -1
  128. package/dist/tests/integration/all-features.standalone.js +1 -3
  129. package/dist/tests/integration/all-features.standalone.js.map +1 -1
  130. package/dist/tests/migrations/test-all-versions-real.js +2 -4
  131. package/dist/tests/migrations/test-all-versions-real.js.map +1 -1
  132. package/dist/tests/migrations/test-all-versions.js +3 -7
  133. package/dist/tests/migrations/test-all-versions.js.map +1 -1
  134. package/dist/tests/unit/config/plan-toml-cache.test.d.ts +9 -0
  135. package/dist/tests/unit/config/plan-toml-cache.test.d.ts.map +1 -0
  136. package/dist/tests/unit/config/plan-toml-cache.test.js +230 -0
  137. package/dist/tests/unit/config/plan-toml-cache.test.js.map +1 -0
  138. package/dist/tests/unit/hooks/plan-toml-parser.test.d.ts +10 -0
  139. package/dist/tests/unit/hooks/plan-toml-parser.test.d.ts.map +1 -0
  140. package/dist/tests/unit/hooks/plan-toml-parser.test.js +316 -0
  141. package/dist/tests/unit/hooks/plan-toml-parser.test.js.map +1 -0
  142. package/dist/tests/unit/universal-knex.test.js +3 -0
  143. package/dist/tests/unit/universal-knex.test.js.map +1 -1
  144. package/dist/tests/unit/utils/config-loader.test.js +130 -191
  145. package/dist/tests/unit/utils/config-loader.test.js.map +1 -1
  146. package/dist/tests/unit/utils/project-detector.test.js +24 -0
  147. package/dist/tests/unit/utils/project-detector.test.js.map +1 -1
  148. package/dist/tests/unit/validation/parameter-validation.test.js +2 -2
  149. package/dist/tests/unit/validation/parameter-validation.test.js.map +1 -1
  150. package/dist/tests/unit/validation/policy-validation.test.js +1 -3
  151. package/dist/tests/unit/validation/policy-validation.test.js.map +1 -1
  152. package/dist/tools/constraints/actions/activate.d.ts +46 -0
  153. package/dist/tools/constraints/actions/activate.d.ts.map +1 -0
  154. package/dist/tools/constraints/actions/activate.js +105 -0
  155. package/dist/tools/constraints/actions/activate.js.map +1 -0
  156. package/dist/tools/constraints/actions/add.d.ts.map +1 -1
  157. package/dist/tools/constraints/actions/add.js +30 -13
  158. package/dist/tools/constraints/actions/add.js.map +1 -1
  159. package/dist/tools/constraints/actions/deactivate.d.ts.map +1 -1
  160. package/dist/tools/constraints/actions/deactivate.js +7 -4
  161. package/dist/tools/constraints/actions/deactivate.js.map +1 -1
  162. package/dist/tools/constraints/actions/get.d.ts.map +1 -1
  163. package/dist/tools/constraints/actions/get.js +10 -7
  164. package/dist/tools/constraints/actions/get.js.map +1 -1
  165. package/dist/tools/constraints/actions/suggest-pending.d.ts +41 -0
  166. package/dist/tools/constraints/actions/suggest-pending.d.ts.map +1 -0
  167. package/dist/tools/constraints/actions/suggest-pending.js +71 -0
  168. package/dist/tools/constraints/actions/suggest-pending.js.map +1 -0
  169. package/dist/tools/constraints/help/example.d.ts.map +1 -1
  170. package/dist/tools/constraints/help/example.js +65 -1
  171. package/dist/tools/constraints/help/example.js.map +1 -1
  172. package/dist/tools/constraints/help/help.d.ts.map +1 -1
  173. package/dist/tools/constraints/help/help.js +10 -5
  174. package/dist/tools/constraints/help/help.js.map +1 -1
  175. package/dist/tools/constraints/index.d.ts +2 -0
  176. package/dist/tools/constraints/index.d.ts.map +1 -1
  177. package/dist/tools/constraints/index.js +2 -0
  178. package/dist/tools/constraints/index.js.map +1 -1
  179. package/dist/tools/context/actions/add-context.d.ts.map +1 -1
  180. package/dist/tools/context/actions/add-context.js +13 -6
  181. package/dist/tools/context/actions/add-context.js.map +1 -1
  182. package/dist/tools/context/actions/list-contexts.d.ts.map +1 -1
  183. package/dist/tools/context/actions/list-contexts.js +12 -7
  184. package/dist/tools/context/actions/list-contexts.js.map +1 -1
  185. package/dist/tools/context/actions/list.d.ts.map +1 -1
  186. package/dist/tools/context/actions/list.js +8 -0
  187. package/dist/tools/context/actions/list.js.map +1 -1
  188. package/dist/tools/context/actions/search-advanced.d.ts.map +1 -1
  189. package/dist/tools/context/actions/search-advanced.js +41 -27
  190. package/dist/tools/context/actions/search-advanced.js.map +1 -1
  191. package/dist/tools/context/actions/search-layer.d.ts.map +1 -1
  192. package/dist/tools/context/actions/search-layer.js +8 -0
  193. package/dist/tools/context/actions/search-layer.js.map +1 -1
  194. package/dist/tools/context/actions/search-tags.d.ts.map +1 -1
  195. package/dist/tools/context/actions/search-tags.js +8 -0
  196. package/dist/tools/context/actions/search-tags.js.map +1 -1
  197. package/dist/tools/files/actions/check-lock.d.ts.map +1 -1
  198. package/dist/tools/files/actions/check-lock.js +9 -3
  199. package/dist/tools/files/actions/check-lock.js.map +1 -1
  200. package/dist/tools/files/actions/get.d.ts.map +1 -1
  201. package/dist/tools/files/actions/get.js +18 -13
  202. package/dist/tools/files/actions/get.js.map +1 -1
  203. package/dist/tools/files/actions/record-batch.d.ts.map +1 -1
  204. package/dist/tools/files/actions/record-batch.js +11 -6
  205. package/dist/tools/files/actions/record-batch.js.map +1 -1
  206. package/dist/tools/files/actions/record.d.ts.map +1 -1
  207. package/dist/tools/files/actions/record.js +8 -2
  208. package/dist/tools/files/actions/record.js.map +1 -1
  209. package/dist/tools/files/help/example.js +8 -8
  210. package/dist/tools/files/help/example.js.map +1 -1
  211. package/dist/tools/files/help/help.js +4 -4
  212. package/dist/tools/files/help/help.js.map +1 -1
  213. package/dist/tools/files/internal/validation.d.ts.map +1 -1
  214. package/dist/tools/files/internal/validation.js +1 -2
  215. package/dist/tools/files/internal/validation.js.map +1 -1
  216. package/dist/tools/help-queries.d.ts.map +1 -1
  217. package/dist/tools/help-queries.js +57 -27
  218. package/dist/tools/help-queries.js.map +1 -1
  219. package/dist/tools/suggest/actions/by-tags.d.ts.map +1 -1
  220. package/dist/tools/suggest/actions/by-tags.js +3 -1
  221. package/dist/tools/suggest/actions/by-tags.js.map +1 -1
  222. package/dist/tools/suggest/help/constraint-help.js +2 -2
  223. package/dist/tools/suggest/help/constraint-help.js.map +1 -1
  224. package/dist/tools/tasks/help/example.d.ts.map +1 -1
  225. package/dist/tools/tasks/help/example.js +10 -0
  226. package/dist/tools/tasks/help/example.js.map +1 -1
  227. package/dist/tools/tasks/help/help.d.ts.map +1 -1
  228. package/dist/tools/tasks/help/help.js +10 -0
  229. package/dist/tools/tasks/help/help.js.map +1 -1
  230. package/dist/tools/use_case/actions/search.js +5 -5
  231. package/dist/tools/use_case/actions/search.js.map +1 -1
  232. package/dist/tools/use_case/help/example.d.ts +2 -7
  233. package/dist/tools/use_case/help/example.d.ts.map +1 -1
  234. package/dist/tools/use_case/help/example.js +24 -37
  235. package/dist/tools/use_case/help/example.js.map +1 -1
  236. package/dist/tools/use_case/help/help.js +1 -1
  237. package/dist/tools/use_case/help/help.js.map +1 -1
  238. package/dist/types/actions.d.ts +1 -1
  239. package/dist/types/actions.d.ts.map +1 -1
  240. package/dist/types.d.ts +11 -4
  241. package/dist/types.d.ts.map +1 -1
  242. package/dist/utils/action-specs/constraint-specs.d.ts +1 -1
  243. package/dist/utils/action-specs/constraint-specs.d.ts.map +1 -1
  244. package/dist/utils/action-specs/constraint-specs.js +22 -5
  245. package/dist/utils/action-specs/constraint-specs.js.map +1 -1
  246. package/dist/utils/action-specs/decision-specs.js +13 -13
  247. package/dist/utils/action-specs/decision-specs.js.map +1 -1
  248. package/dist/utils/action-specs/file-specs.d.ts.map +1 -1
  249. package/dist/utils/action-specs/file-specs.js +8 -10
  250. package/dist/utils/action-specs/file-specs.js.map +1 -1
  251. package/dist/utils/db-aggregations.d.ts.map +1 -1
  252. package/dist/utils/db-aggregations.js +44 -1
  253. package/dist/utils/db-aggregations.js.map +1 -1
  254. package/dist/utils/hook-queue.d.ts +43 -3
  255. package/dist/utils/hook-queue.d.ts.map +1 -1
  256. package/dist/utils/hook-queue.js +326 -32
  257. package/dist/utils/hook-queue.js.map +1 -1
  258. package/dist/utils/param-normalizer.d.ts +52 -0
  259. package/dist/utils/param-normalizer.d.ts.map +1 -0
  260. package/dist/utils/param-normalizer.js +70 -0
  261. package/dist/utils/param-normalizer.js.map +1 -0
  262. package/dist/utils/parameter-validator.d.ts.map +1 -1
  263. package/dist/utils/parameter-validator.js +2 -0
  264. package/dist/utils/parameter-validator.js.map +1 -1
  265. package/dist/utils/project-detector.js +21 -6
  266. package/dist/utils/project-detector.js.map +1 -1
  267. package/dist/utils/suggestion-scorer.d.ts.map +1 -1
  268. package/dist/utils/suggestion-scorer.js +5 -0
  269. package/dist/utils/suggestion-scorer.js.map +1 -1
  270. package/dist/utils/text-truncate.d.ts +13 -0
  271. package/dist/utils/text-truncate.d.ts.map +1 -0
  272. package/dist/utils/text-truncate.js +18 -0
  273. package/dist/utils/text-truncate.js.map +1 -0
  274. package/dist/utils/validators.d.ts +1 -1
  275. package/dist/utils/validators.d.ts.map +1 -1
  276. package/dist/utils/validators.js +1 -1
  277. package/dist/utils/validators.js.map +1 -1
  278. package/dist/watcher/base-watcher.d.ts.map +1 -1
  279. package/dist/watcher/base-watcher.js +4 -3
  280. package/dist/watcher/base-watcher.js.map +1 -1
  281. package/dist/watcher/file-watcher.d.ts.map +1 -1
  282. package/dist/watcher/file-watcher.js +5 -1
  283. package/dist/watcher/file-watcher.js.map +1 -1
  284. package/dist/watcher/queue-watcher.d.ts +12 -1
  285. package/dist/watcher/queue-watcher.d.ts.map +1 -1
  286. package/dist/watcher/queue-watcher.js +92 -12
  287. package/dist/watcher/queue-watcher.js.map +1 -1
  288. package/docs/ADR_CONCEPTS.md +4 -0
  289. package/docs/HOOKS_GUIDE.md +1 -1
  290. package/package.json +87 -123
  291. package/dist/tests/feature/vcs/git-aware-completion.test.d.ts +0 -6
  292. package/dist/tests/feature/vcs/git-aware-completion.test.d.ts.map +0 -1
  293. package/dist/tests/feature/vcs/git-aware-completion.test.js +0 -197
  294. package/dist/tests/feature/vcs/git-aware-completion.test.js.map +0 -1
  295. package/dist/tests/feature/vcs/two-step-git-completion.test.d.ts +0 -6
  296. package/dist/tests/feature/vcs/two-step-git-completion.test.d.ts.map +0 -1
  297. package/dist/tests/feature/vcs/two-step-git-completion.test.js +0 -305
  298. package/dist/tests/feature/vcs/two-step-git-completion.test.js.map +0 -1
  299. package/dist/tests/feature/vcs/vcs-staging.test.d.ts +0 -6
  300. package/dist/tests/feature/vcs/vcs-staging.test.d.ts.map +0 -1
  301. package/dist/tests/feature/vcs/vcs-staging.test.js +0 -142
  302. package/dist/tests/feature/vcs/vcs-staging.test.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,1817 +1,1862 @@
1
- # Changelog
2
-
3
- All notable changes to sqlew will be documented in this file.
4
-
5
- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
- and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
-
8
- ---
9
-
10
- ## [4.1.1] - 2025-12-24
11
-
12
- ### Fixed
13
-
14
- **Claude Desktop Compatibility**
15
-
16
- - Fixed MCP protocol corruption caused by migration logs going to stdout
17
- - Changed all `console.log` to `console.error` in migration files (57 files)
18
- - MCP servers must only output JSON-RPC to stdout; debug logs now go to stderr
19
-
20
- ---
21
-
22
- ## [4.1.0] - 2025-12-24
23
-
24
- ### Added
25
-
26
- **Claude Code Hooks Integration**
27
-
28
- - File Queue Architecture for async decision operations
29
- - Hook commands: `suggest`, `track-plan`, `save`, `check-completion`, `mark-done`
30
- - QueueWatcher monitors `.sqlew/queue/pending.json` for changes
31
- - Auto-initialization with `sqlew init --hooks`
32
- - PreToolUse hooks (Task, Write triggers)
33
- - PostToolUse hooks (Edit/Write, TodoWrite, ExitPlanMode triggers)
34
- - Git hooks integration (post-merge, post-rewrite)
35
-
36
- **PostgreSQL Compatibility**
37
-
38
- - Replaced GROUP_CONCAT with string_agg for PostgreSQL
39
- - Expanded GROUP BY clauses for PostgreSQL strictness compliance
40
- - Cross-DB compatibility verified: SQLite, MySQL, MariaDB, PostgreSQL
41
-
42
- ### Changed
43
-
44
- - Hook operations now use file queue instead of direct DB access (<100ms latency)
45
- - QueueWatcher singleton monitors queue file and processes decisions asynchronously
46
-
47
- ---
48
-
49
- ## [4.0.5] - 2025-12-19
50
-
51
- ### Changed
52
-
53
- **License Change: AGPL-3.0 → Apache-2.0**
54
-
55
- - Changed license from AGPLv3 to Apache License 2.0
56
- - More permissive license for commercial and enterprise adoption
57
- - Added NOTICE file with third-party attributions
58
- - Updated LICENSE file with full Apache 2.0 text
59
- - Updated package.json license field
60
-
61
- **Why Apache 2.0?**
62
- - Patent protection for contributors and users
63
- - Widely adopted by major tech companies (Google, Microsoft, AWS)
64
- - Easier enterprise adoption without copyleft concerns
65
- - Compatible with most open source licenses
66
-
67
- ---
68
-
69
- ## [4.0.4] - 2025-12-10
70
-
71
- ### Fixed
72
-
73
- **Slash Command Sync Bug**
74
-
75
- - Fixed `sync-commands.ts` referencing obsolete command files (`sqw-scrum.md`, `sqw-documentor.md`, etc.)
76
- - Updated to use new unified `sqlew.md` command file
77
- - Resolves "Source file not found" errors during npm package installation
78
-
79
- ### Added
80
-
81
- **Agent Skills Configuration**
82
-
83
- - Added `skills` field to agent YAML frontmatter for automatic skill loading
84
- - All sqlew agents now reference `sqlew-plan-guidance` skill
85
- - Agents: `sqlew-architect`, `sqlew-researcher`, `sqlew-scrum-master`
86
-
87
- **Config Example Update**
88
-
89
- - Added `[commands]` section to `assets/config.example.toml`
90
- - Documents the unified `/sqlew` command configuration
91
-
92
- ### Changed
93
-
94
- **Plan Mode Integration Documentation**
95
-
96
- - Changed `Phase 1 (Research)` → `Research Phase` for flexibility
97
- - Changed `Phase 4 (Final Plan)` → `Final Plan Phase`
98
- - Plan mode phases are now semantically named instead of numbered
99
-
100
- **CommandsConfig Simplified**
101
-
102
- - Consolidated 6 individual command options into single `sqlew` option
103
- - Updated `src/config/types.ts` and `src/config/minimal-generator.ts`
104
-
105
- ---
106
-
107
- ## [4.0.3] - 2025-12-04
108
-
109
- ### Added
110
-
111
- **Unified `/sqlew` Slash Command**
112
-
113
- - Consolidated all slash commands (`/sqw-plan`, `/sqw-scrum`, `/sqw-research`, etc.) into single `/sqlew` command
114
- - Natural language interface with automatic intent detection
115
- - 6-level intent priority: List/Status → Search → Record → Update → Execute → Task Creation
116
- - Supports both English and Japanese keywords
117
- - Removed custom agent definitions (sqlew-architect, scrum-master, sqlew-researcher)
118
-
119
- **Usage Examples:**
120
- ```bash
121
- /sqlew # Show status and suggest next action
122
- /sqlew show remaining tasks # List/Status intent
123
- /sqlew search for auth decisions # Search intent
124
- /sqlew record that we use JWT # Record intent
125
- /sqlew execute pending tasks # Execute intent
126
- ```
127
-
128
- ### Fixed
129
-
130
- **v4_task_details JOIN Bug**
131
-
132
- - Fixed `task.get` action failing with "no such column: td.project_id" error
133
- - Root cause: `v4_task_details` table has only `task_id` as PK, not `project_id`
134
- - Removed invalid `.andOn('t.project_id', '=', 'td.project_id')` from JOIN conditions
135
- - Affected files: `task-queries.ts`, `get.ts`
136
-
137
- ### Changed
138
-
139
- **Documentation Updates**
140
-
141
- - Rewrote `CLAUDE.md` with unified `/sqlew` command section
142
- - Updated `README.md` Quick Start to use `/sqlew`
143
- - Rewrote `docs/SLASH_COMMANDS.md` as Unified /sqlew Command Guide
144
-
145
- ---
146
-
147
- ## [4.0.2] - 2025-11-28
148
-
149
- ### BREAKING CHANGES
150
-
151
- **SQL Dump No Longer Supports Cross-Database Format Conversion**
152
-
153
- The `db:dump` command now generates SQL for the **same database type only**. Cross-database migrations (e.g., SQLite → MySQL) must use JSON export/import instead.
154
-
155
- **Migration Required:**
156
- ```bash
157
- # ❌ Old approach (no longer supported)
158
- npx sqlew db:dump mysql backup.sql # Cross-DB conversion removed
159
-
160
- # New approach: Use JSON for cross-database migration
161
- npx sqlew db:export backup.json # Export to JSON
162
- npx sqlew db:import backup.json # Import to target database
163
- ```
164
-
165
- **Rationale:**
166
- - SQL syntax differences between databases caused data corruption issues
167
- - Case-insensitive pattern matching failed in certain scenarios
168
- - JSON format is database-agnostic and handles all data types correctly
169
-
170
- **Node.js 20+ Required**
171
-
172
- Minimum Node.js version updated from 18.0.0 to 20.0.0.
173
-
174
- ### Added
175
-
176
- **Unified CLI Entry Point**
177
-
178
- - `npx sqlew db:export`, `npx sqlew db:import`, `npx sqlew db:dump` now work directly
179
- - No `npm install` required - just use `npx sqlew <command>`
180
- - CLI commands and MCP server mode unified under single `sqlew` entry point
181
- - Removed separate `sqlew-cli` binary
182
-
183
- ### Fixed
184
-
185
- **Case-Insensitive Validation for Master Records**
186
-
187
- - Added case-insensitive duplicate detection when registering new records
188
- - Prevents duplicate entries like "MyTag" and "mytag" from being created
189
- - Applies to tags, scopes, layers, and other master table entries
190
- - New utility: `src/utils/case-insensitive-validator.ts`
191
-
192
- **SQLite to MySQL SQL Dump Case-Sensitivity Bug**
193
-
194
- - Fixed regex pattern matching that failed with case variations
195
- - SQL dump now correctly handles mixed-case identifiers
196
- - Enhanced schema table export for better compatibility
197
-
198
- ### Changed
199
-
200
- **Export Version Tracking**
201
-
202
- - Export JSON now includes proper version metadata
203
- - Version information helps with import compatibility checks
204
- - Clearer error messages when importing incompatible versions
205
-
206
- **CLI Documentation Update**
207
-
208
- - Updated `docs/cli/README.md` with JSON-first migration workflow
209
- - Added clear guidance on when to use `db:dump` vs `db:export`/`db:import`
210
- - Improved comparison table for migration scenarios
211
-
212
- ### Added
213
-
214
- **Case-Insensitive Validator Utility**
215
-
216
- - New `src/utils/case-insensitive-validator.ts` for consistent validation
217
- - Comprehensive test suite: `src/tests/unit/utils/case-insensitive-validator.test.ts`
218
- - Reusable across all master table operations
219
-
220
- ### Migration Notes
221
-
222
- **Backward Compatibility:**
223
- - Existing databases unaffected
224
- - JSON export/import workflows unchanged
225
- - SQL dumps for same-database-type operations still work
226
-
227
- **Action Required:**
228
- - Update any scripts that use `db:dump` for cross-database migrations
229
- - Switch to `db:export`/`db:import` for SQLite ↔ MySQL ↔ PostgreSQL migrations
230
-
231
- ---
232
-
233
- ## [4.0.1] - 2025-11-28
234
-
235
- ### Removed
236
-
237
- **Database Views Eliminated**
238
-
239
- - Dropped all database views (`v_tagged_constraints`, `v_recent_file_changes`, etc.)
240
- - Views caused migration complexity across SQLite/MySQL/PostgreSQL due to database-specific syntax
241
- - Migration: `20251128000000_drop_all_views.ts`
242
-
243
- ### Changed
244
-
245
- **JOIN-Based Queries**
246
-
247
- - `src/tools/constraints/actions/get.ts` - Replaced `v_tagged_constraints` view with JOIN query
248
- - `src/tools/files/actions/get.ts` - Replaced `v_recent_file_changes` view with JOIN query
249
- - Uses `UniversalKnex` wrapper for cross-database compatibility (date functions, boolean values, string aggregation)
250
-
251
- **VCS Test Cleanup**
252
-
253
- - `src/tests/feature/vcs/git-aware-completion.test.ts` - Added automatic git reset after tests
254
- - Test commits are now automatically dropped when tests complete
255
- - Prevents test artifacts from polluting git history
256
-
257
- ### Added
258
-
259
- **No-Views Guardrail Skill**
260
-
261
- - `.claude/skills/no-views/SKILL.md` - Documentation for view prohibition policy
262
- - `.claude/skills/skill-rules.json` - Added `no-views` rule (enforcement: block)
263
- - Blocks creation of database views, requires JOINs instead
264
-
265
- **Documentation Updates**
266
-
267
- - `CLAUDE.md` - Updated to reflect no-views policy
268
- - Removed Views section from database schema documentation
269
- - Added `no-views` to Guardrail Skills table
270
-
271
- ---
272
-
273
- ## [4.0.0] - 2025-11-27
274
-
275
- ### Changed
276
-
277
- **Concept & Positioning**
278
-
279
- - Reframed sqlew as a **shared SQL-backed context repository** and a **Decision & Constraint repository layer** for AI tools
280
- - Clarified that Decisions capture *why* changes were made and Constraints capture *how* code should be written
281
- - Updated README introduction to focus on "Never Start From Zero Context Again" and the repository-based metaphor instead of generic "memory"
282
-
283
- **Documentation & Cleanup**
284
-
285
- - Updated `README.md` to describe sqlew as a context repository rather than an abstract memory layer
286
- - Aligned terminology across docs around Decisions, Constraints, tasks, and the repository layer
287
- - Confirmed that previously removed/legacy features remain out of scope, keeping focus on decision history and constraint rules
288
-
289
- > Note: v4.0.0 is primarily a **concept and documentation alignment release**. Core Decision/Constraint features and the v3.9.x database schema remain compatible; no breaking API changes were introduced for existing integrations.
290
-
291
- ---
292
-
293
- ## [3.9.0] - 2025-01-15
294
-
295
- ### Added
296
-
297
- **🎯 Decision Intelligence System with Three-Tier Similarity Detection**
298
-
299
- **New `suggest` Tool:**
300
- - **by_key** - Pattern-based decision search (e.g., "api/*/latency" finds all API latency decisions)
301
- - **by_tags** - Tag similarity scoring for related decisions (Jaccard similarity)
302
- - **by_context** - Combined key + tags + layer search for best matches
303
- - **check_duplicate** - Duplicate decision detection with similarity scoring (0-100 points)
304
-
305
- **Three-Tier Duplicate Detection (Auto-Triggered):**
306
- - **Tier 1 (35-44 points):** Gentle nudge - Non-blocking warning with suggestions
307
- - **Tier 2 (45-59 points):** Hard block - Prevents creation, requires explicit override or update
308
- - **Tier 3 (60+ points):** Auto-update - Transparently updates existing decision, preserves new value
309
-
310
- **Similarity Scoring Algorithm:**
311
- - Tag overlap: 0-40 points (10 per matching tag, max 4)
312
- - Layer match: 0-25 points (same layer bonus)
313
- - Key similarity: 0-20 points (pattern + Levenshtein distance)
314
- - Recency: 0-10 points (recent updates prioritized)
315
- - Priority: 0-5 points (critical decisions weighted)
316
-
317
- **Policy-Based Auto-Triggering:**
318
- - Suggestions automatically triggered when policies have `suggest_similar=1`
319
- - Integrated with `decision.set` - returns suggestions in response
320
- - Configurable relevance threshold via `min_score` parameter (default: 30)
321
- - Policy validation rules support for targeted auto-triggering
322
-
323
- **Enhanced Decision Metadata:**
324
- - `duplicate_reason` - Similarity explanation with matched tags and layer info
325
- - `update_command` - Ready-to-use command for updating existing decisions
326
- - `version_info` - Existing decision version tracking
327
- - `auto_updated` flag - Indicates Tier 3 transparent updates
328
-
329
- **Supporting Features:**
330
- - Tag parser utility (`src/utils/tag-parser.ts`) for flexible tag handling
331
- - Policy validation integration (`src/utils/policy-validator.ts`)
332
- - Suggestion scorer (`src/utils/suggestion-scorer.ts`) with breakdown
333
- - Self-exclusion logic (prevents matching against own key during updates)
334
-
335
- ### Fixed
336
-
337
- **PostgreSQL Cross-Database Compatibility**
338
- - Fixed CAST type mismatch in `v_tagged_decisions` view export
339
- - PostgreSQL now correctly handles `COALESCE(TEXT, NUMERIC)` with `CAST(value AS TEXT)`
340
- - MySQL/MariaDB use `CAST(value AS CHAR)` for compatibility
341
- - Migration: `20251114000000_fix_v_tagged_decisions_numeric_support.ts`
342
- - SQL dump export: Enhanced view conversion in `src/utils/sql-dump/schema/views.ts`
343
- - Result: All 20 cross-database tests passing (MySQL, MariaDB, PostgreSQL)
344
-
345
- **Test Suite Improvements**
346
- - Fixed FK constraint cleanup order in `decision-intelligence-e2e.test.ts`
347
- - Child records now deleted before parent records (tags scopes context decisions)
348
- - Result: 3/3 e2e workflow tests passing, no cleanup errors
349
-
350
- **Schema Fixes**
351
- - Migration `20251112000001_fix_task_file_links_schema_v3_9_0.ts` - Fixed UNIQUE constraint
352
- - Migration `20251112000002_fix_task_pruned_files_schema_v3_9_0.ts` - Enhanced task file tracking
353
- - All migrations idempotent with existence checks
354
-
355
- ### Changed
356
-
357
- **Test Organization (Docker Dependency Separation)**
358
- - Moved 7 Docker-dependent tests to `src/tests/docker/` directory
359
- - `npm test` now runs 481 unit tests without Docker (0 failures)
360
- - `npm run test:docker` runs cross-database tests (requires Docker containers)
361
- - Removed `test:all` script (caused database conflicts)
362
- - Updated `.husky/pre-commit` to reflect test separation
363
- - Decision documented in SQLew: `test-organization-docker-separation`
364
-
365
- **Git Hook Enhancement**
366
- - Pre-commit hook now checks for **PUSHED** migration files instead of just committed
367
- - Auto-detects remote branch (origin/main, origin/master, origin/dev)
368
- - Allows editing locally committed migrations (not yet pushed)
369
- - Prevents editing migrations that exist in remote
370
- - Graceful fallback for local-only repositories
371
-
372
- **Debug Output Cleanup**
373
- - Commented out scope validation warnings in test output
374
- - Removed DEBUG/DIAGNOSTIC console.log statements
375
- - Cleaner test output focusing on actual results
376
- - 75% reduction in test output verbosity
377
-
378
- ### Removed
379
-
380
- **Code Cleanup**
381
- - Deleted monolithic `src/utils/sql-dump.ts` (-1,799 lines)
382
- - Functionality now in modular structure:
383
- - `src/utils/sql-dump/schema/tables.ts`
384
- - `src/utils/sql-dump/schema/views.ts`
385
- - `src/utils/sql-dump/schema/primary-keys.ts`
386
- - `src/utils/sql-dump/schema/indexes.ts`
387
- - Deleted test tracking files (`test-tracking/file1.ts`, etc.)
388
-
389
- ### Documentation
390
-
391
- - Updated `CLAUDE.md` - Changed policy from "NEVER EDIT COMMITTED" to "NEVER EDIT PUSHED"
392
- - Created `STAGED_CHANGES_SUMMARY.md` - Comprehensive v3.9.0 change summary
393
- - Created `NEW_TOOL_DESCRIPTION.md` - Suggest tool reference
394
-
395
- ### Performance
396
-
397
- - Enhanced file pruning logic (`src/utils/file-pruning.ts`)
398
- - Improved VCS adapter file status tracking (`src/utils/vcs-adapter.ts`)
399
- - Better task stale detection (`src/utils/task-stale-detection.ts`)
400
- - Activity logging enhancements for suggestion tracking
401
-
402
- ### Testing
403
-
404
- **Test Results:**
405
- - **495/495 tests passing (100%)** - Production-ready
406
- - Tier 1 (Gentle Nudge): 5/5 tests passing
407
- - Tier 2 (Hard Block): 2/2 tests passing
408
- - Tier 3 (Auto-Update): 3/3 tests passing
409
- - ✅ Auto-trigger suggestions: 4/4 tests passing
410
- - Edge cases and error handling: All passing
411
- - 20/20 cross-database tests passing (MySQL, MariaDB, PostgreSQL)
412
- - 7 Docker test suites in separate directory
413
-
414
- **Test Suite Enhancements:**
415
- - AI-optimized quiet mode (80-90% token reduction, shows only failures + summary)
416
- - Verbose mode available with `:verbose` suffix (e.g., `npm run test:verbose`)
417
- - Cross-platform filter script (`scripts/filter-test-output.js`)
418
- - Comprehensive three-tier similarity detection test coverage
419
-
420
- **Coverage:**
421
- - Overall: 64.85% line coverage
422
- - All critical paths tested
423
- - Zero flaky tests
424
-
425
- ### Migration Notes
426
-
427
- **Backward Compatibility:**
428
- - v3.9.0 is fully backward compatible with v3.8.x
429
- - No breaking changes
430
- - Automatic migration on server startup
431
-
432
- **Database Changes:**
433
- - 3 new enhancement migrations (all idempotent)
434
- - Schema changes apply automatically
435
- - Safe to rollback by restoring backup
436
-
437
- **Files Changed:**
438
- - 50 files modified
439
- - 1,857 insertions, 2,096 deletions
440
- - Net: -239 lines (code reduction through refactoring)
441
-
442
- ---
443
-
444
- ## [3.8.1] - 2025-11-11
445
-
446
- ### Fixed
447
-
448
- **Critical Installation Bug**
449
-
450
- - Fixed `npm error Invalid Version:` error when installing sqlew@3.8.0
451
- - Changed `@modelcontextprotocol/sdk` dependency from `"latest"` to `"^1.21.1"` in package.json
452
- - The `"latest"` tag is not a valid semver version for published packages and caused npm dependency resolution to fail
453
- - This is a **hotfix release** that resolves installation issues preventing users from using v3.8.0
454
-
455
- **Impact:**
456
- - All users experiencing `Invalid Version:` errors when running `npx sqlew` can now install successfully
457
- - No functional changes from v3.8.0 - only dependency version fix
458
-
459
- ---
460
-
461
- ## [3.8.0] - 2025-11-09
462
-
463
- ### BREAKING CHANGES
464
-
465
- **Batch Action Naming Standardization**
466
-
467
- `task.batch_create` has been renamed to `task.create_batch` to follow the `<verb>_batch` naming pattern used by other batch actions (`set_batch`, `record_batch`).
468
-
469
- **Migration Required:**
470
- ```typescript
471
- // ❌ Old (v3.7.x and earlier)
472
- task({ action: "batch_create", tasks: [...] })
473
-
474
- // New (v3.8.0+)
475
- task({ action: "create_batch", tasks: [...] })
476
- ```
477
-
478
- **Rationale:**
479
- - Achieves 100% consistency across all batch actions
480
- - Improves alphabetical sorting in IDE auto-completion (create → create_batch)
481
- - Aligns with industry standard (REST APIs, GraphQL, ORMs use suffix pattern)
482
- - See docs/ADR-batch-naming-standard.md for full justification
483
-
484
- **Impact:**
485
- - All code using `task.batch_create` must update to `task.create_batch`
486
- - Simple find-replace migration (estimated 2-5 minutes per integration)
487
- - No database schema changes required
488
-
489
- ### Removed
490
-
491
- **Config Tool Removed (Phase 6)**
492
-
493
- The orphaned config tool has been removed in favor of CLI-only configuration:
494
-
495
- - **Deleted**: `src/tools/config.ts` (307 lines)
496
- - **Removed**: `ConfigAction` type from `src/types.ts` and `src/types/actions.ts`
497
- - **Removed**: ConfigAction import from `src/utils/parameter-validator.ts`
498
- - **Updated**: README.md with CLI-only config approach documentation
499
- - **Updated**: docs/CONFIGURATION.md already documented config tool removal
500
-
501
- **Why removed:**
502
- - Config tool was never registered in `tool-registry.ts` (orphaned code)
503
- - Messaging system deprecated (primary use case eliminated)
504
- - File-based configuration (`.sqlew/config.toml`) is clearer and more maintainable
505
- - Runtime updates were confusing (changes lost on restart unless manually synced to file)
506
- - Configuration drift between `m_config` table and config file
507
-
508
- **Migration Path:**
509
- - ✅ **Use `.sqlew/config.toml`** for all configuration (persistent, version-controlled)
510
- - **Use CLI arguments** for one-time overrides (`--autodelete-message-hours=48`)
511
- - ✅ **Internal config operations** preserved (`src/database/config/config-ops.ts`)
512
- - **m_config table** preserved (used internally by retention logic)
513
-
514
- **Impact:**
515
- - Cleaner codebase with ~300 lines removed
516
- - No functional impact - tool was never registered
517
- - Configuration via file and CLI arguments only
518
-
519
- **Message Tool Completely Removed**
520
-
521
- The deprecated message tool has been completely removed from the codebase:
522
-
523
- - **Deleted**: `src/tools/messaging.ts` (599 lines)
524
- - **Removed**: Message tool entry from `tool-registry.ts`
525
- - **Removed**: Message tool handler from `tool-handlers.ts`
526
- - **Removed**: Message imports from `cli.ts`
527
- - **Updated**: `MessageAction` type changed to `never` (backward compatibility stub)
528
- - **CLI**: `sqlew query messages` now returns error message
529
-
530
- **Migration Path**:
531
- - No action required - messaging system was already marked deprecated in v3.6.6
532
- - The `t_agent_messages` table was dropped in v3.6.6
533
- - All message tool actions returned deprecation warnings since v3.6.6
534
-
535
- **Impact**:
536
- - Cleaner codebase with ~700 lines removed
537
- - No functional impact - messaging system was unused
538
- - MessageAction type remains as deprecated stub for backward compatibility
539
-
540
- ### Added
541
-
542
- **Layer Expansion (5→9 layers)**
543
-
544
- Added 4 new layers to enable better task classification and semantic validation:
545
-
546
- **New FILE_REQUIRED layers:**
547
- - `documentation` - README, CHANGELOG, API docs, architecture docs (file_actions required)
548
-
549
- **New FILE_OPTIONAL layers:**
550
- - `planning` - Research, spike tasks, investigation (file_actions optional)
551
- - `coordination` - Multi-agent orchestration, task delegation (file_actions optional)
552
- - `review` - Code review, design review, verification (file_actions optional)
553
-
554
- **Existing layers** (5→6 FILE_REQUIRED):
555
- - presentation, business, data, infrastructure, cross-cutting (file_actions required or empty array)
556
-
557
- **Benefits:**
558
- - Documentation layer enforces file operations for docs work
559
- - Planning layers allow pure research tasks without file boilerplate
560
- - Better semantic task classification across the development lifecycle
561
-
562
- **file_actions Parameter for Tasks**
563
-
564
- Introduced semantic `file_actions` parameter to replace generic `watch_files`:
565
-
566
- ```typescript
567
- // New file_actions parameter
568
- task.create({
569
- title: "Implement OAuth",
570
- layer: "business",
571
- file_actions: [
572
- { action: "create", path: "src/auth/oauth.ts" },
573
- { action: "edit", path: "src/api/router.ts" },
574
- { action: "delete", path: "src/auth/legacy.ts" }
575
- ]
576
- });
577
-
578
- // Backward compatible - watch_files still works
579
- task.create({
580
- title: "Update config",
581
- layer: "infrastructure",
582
- watch_files: ["config.toml"] // Auto-converts to file_actions
583
- });
584
- ```
585
-
586
- **Layer-Based Validation:**
587
- - FILE_REQUIRED layers (6) Must provide `file_actions` or `[]`
588
- - FILE_OPTIONAL layers (3) → Can omit `file_actions` entirely
589
- - Clear error messages with layer-specific guidance
590
-
591
- **Benefits:**
592
- - Self-documenting: `action: 'create'` vs `action: 'edit'` shows intent
593
- - Prevents forgotten file watchers (validation enforced)
594
- - No boilerplate for planning tasks (can omit parameter)
595
- - Better token efficiency with automatic file watching
596
-
597
- **PostgreSQL Adapter Implementation**
598
-
599
- Full PostgreSQL 12+ support with complete adapter implementation:
600
-
601
- **Adapter Features:**
602
- - All 15 abstract methods implemented (`insertReturning`, `upsert`, `jsonExtract`, etc.)
603
- - PostgreSQL-specific SQL syntax (RETURNING, ON CONFLICT, string_agg)
604
- - Strict type handling (TRUE/FALSE for booleans, not 1/0)
605
- - Timezone-aware timestamp functions
606
- - Transaction support with savepoints
607
-
608
- **Migration Compatibility:**
609
- - All 22 migrations tested and verified on PostgreSQL 16.10
610
- - Cross-database helper functions for view creation
611
- - Proper CASCADE handling for foreign key dependencies
612
- - Sequence management after explicit ID inserts
613
- - GROUP BY strictness compliance
614
-
615
- **Supported Databases:**
616
- - SQLite 3.x (default, development)
617
- - MySQL 8.0 / MariaDB 10+ (production)
618
- - PostgreSQL 12+ (production) NEW
619
-
620
- **Configuration:**
621
- ```toml
622
- [database]
623
- type = "postgres"
624
-
625
- [database.connection]
626
- host = "localhost"
627
- port = 5432
628
- database = "sqlew_db"
629
-
630
- [database.auth]
631
- type = "direct"
632
- user = "sqlew_user"
633
- password = "secret"
634
- ```
635
-
636
- ### Fixed
637
-
638
- **Batch Action Parameter Parsing**
639
-
640
- Fixed MCP client array serialization issue affecting all batch actions:
641
-
642
- **Problem:** MCP client serializes array parameters as JSON strings:
643
- ```typescript
644
- // MCP sends:
645
- decisions: "[{\"key\": \"test\", \"value\": \"val\"}]" // String!
646
-
647
- // Expected:
648
- decisions: [{key: "test", value: "val"}] // Array
649
- ```
650
-
651
- **Solution:** Added JSON parsing in `tool-handlers.ts` for all batch actions:
652
- - `decision.set_batch` - parse `decisions` parameter
653
- - `file.record_batch` - parse `file_changes` parameter
654
- - `task.create_batch` - parse `tasks` parameter
655
-
656
- **Impact:** All batch actions now work correctly with array parameters from MCP client.
657
-
658
- **Help System Synchronization**
659
-
660
- Fixed critical bug where help database was severely out of sync with code:
661
-
662
- **Problem:** 25 actions missing from `m_help_actions` table, causing help system to lie about available actions.
663
-
664
- **Missing Actions:**
665
- - decision: 9 actions (quick_set, search_advanced, set_batch, has_updates, etc.)
666
- - task: 14 actions (update, get, list, move, link, archive, create_batch, etc.)
667
- - constraint: 1 action (use_case)
668
-
669
- **Solution:** Created migration `20251109020000_fix_missing_help_actions_v3_8_0.ts` to:
670
- - Add all 25 missing actions with correct descriptions
671
- - Idempotent checks to prevent duplicates
672
- - Full synchronization between code and database
673
-
674
- **Impact:** Help system now accurately reports all available actions.
675
-
676
- ### Changed
677
-
678
- **Tool Registry Schema Fix**
679
-
680
- Added `additionalProperties: true` to all tool schemas in `tool-registry.ts`:
681
-
682
- **Problem:** MCP couldn't pass action-specific parameters (key, value, tags, etc.) because schemas only defined `action` property.
683
-
684
- **Solution:**
685
- ```typescript
686
- {
687
- name: 'decision',
688
- inputSchema: {
689
- type: 'object',
690
- properties: {
691
- action: { ... }
692
- },
693
- required: ['action'],
694
- additionalProperties: true, // ← CRITICAL FIX
695
- },
696
- }
697
- ```
698
-
699
- **Impact:** All MCP tools now accept action-specific parameters correctly.
700
-
701
- ---
702
-
703
- ## [3.7.4] - 2025-11-08
704
-
705
- ### Added - Complete JSON Import/Export System
706
-
707
- **Full-featured data migration system with smart ID remapping and dependency resolution**
708
-
709
- #### New Features
710
-
711
- - **db:import CLI Command** - Import project data from JSON exports with automatic ID remapping
712
- - Smart conflict detection (skip-if-exists, project-name override)
713
- - Dry-run mode for validation before import
714
- - Comprehensive error messages with validation details
715
- - **Topological Sort Algorithm** - Resolves task dependencies during import
716
- - Circular dependency detection prevents import of invalid dependency graphs
717
- - BFS-based topological sorting ensures dependencies imported before dependents
718
- - Preserves all task relationships and blocking constraints
719
- - **Smart ID Remapping** - Handles complex foreign key relationships
720
- - Master table merge logic (reuse existing entries by name/path)
721
- - Transaction table ID translation with bidirectional mapping
722
- - Junction table relationship preservation
723
- - Automatic orphan cleanup for invalid references
724
-
725
- #### Import System Architecture
726
-
727
- - **4 Core Modules**:
728
- 1. `import.ts` - Main orchestrator with transaction management
729
- 2. `master-tables.ts` - Master table merge logic (m_files, m_tags, m_scopes, etc.)
730
- 3. `topological-sort.ts` - Dependency graph analysis and sorting
731
- 4. `db-import.ts` - CLI command with argument parsing and validation
732
-
733
- #### Data Migration Strategy
734
-
735
- - **ID Remapping**: All imported data gets fresh auto-incremented IDs (no ID preservation)
736
- - **Master Table Deduplication**: Reuse existing entries for agents, tags, scopes, files by name/path
737
- - **Transaction Atomicity**: All-or-nothing semantics (full rollback on any error)
738
- - **Project Isolation**: Each import creates independent project with no cross-contamination
739
-
740
- #### CLI Examples
741
-
742
- ```bash
743
- # Import project from JSON export
744
- npx sqlew db:import --source=project-backup.json
745
-
746
- # Import with custom project name
747
- npx sqlew db:import --source=data.json --project-name=my-project
748
-
749
- # Dry-run validation (no actual import)
750
- npx sqlew db:import --source=data.json --dry-run
751
-
752
- # Export project for migration
753
- npx sqlew db:export --project=visualizer --output=visualizer-data.json
754
- ```
755
-
756
- #### Technical Details
757
-
758
- - **Batch Inserts** - 10-row batches to avoid SQLite UNION ALL limits
759
- - **Foreign Key Validation** - Validates all foreign key references before insertion
760
- - **View Handling** - Temporarily drops/restores views during schema changes
761
- - **Idempotent Operations** - Safe to retry on failure
762
- - **Error Recovery** - Detailed error messages with validation guidance
763
-
764
- #### Use Cases
765
-
766
- - **Multi-Project Single Database** - Consolidate multiple projects when database creation permissions are limited
767
- - **Project Sharing** - Share context with team members or between machines
768
- - **Cross-Database Migration** - Move projects between different databases (different machine, SQLite → MySQL, etc.)
769
-
770
- **Note**: Import uses `--skip-if-exists=true` by default. This is NOT a backup/restore solution for the same database.
771
- Use database-level backups (SQLite file copy, MySQL dump) for backup/restore scenarios.
772
-
773
- #### Impact
774
-
775
- - ✅ **Complete migration solution** - Export from one database, import to another
776
- - ✅ **Multi-project support** - Merge multiple project exports into single database
777
- - ✅ **Permission-friendly** - Works for users who can't create multiple databases
778
- - ✅ **Data integrity** - Zero data loss, all relationships preserved
779
- - ✅ **Production ready** - Comprehensive error handling and validation
780
- - **Cross-database compatible** - JSON format works across SQLite, MySQL, PostgreSQL
781
-
782
- ---
783
-
784
- ### Fixed - Multi-Project Migration (HOTFIX)
785
-
786
- **Critical fix for v3.7.0-v3.7.2 migration in multi-project scenarios**
787
-
788
- #### Problem
789
-
790
- - Users upgrading from v3.6.10 to v3.7.0+ could end up with duplicate projects
791
- - Migration 20251104000000 created project #1 with fake name "default-project"
792
- - Users creating second project manually resulted in namespace conflicts
793
-
794
- #### Solution
795
-
796
- - Enhanced migration idempotency checks
797
- - Improved project consolidation logic
798
- - Better handling of existing project scenarios
799
-
800
- #### Impact
801
-
802
- - ✅ **Safe multi-project migration** - No duplicate projects created
803
- - **Backward compatible** - Works for both fresh installs and upgrades
804
- - **Data preservation** - All existing data maintained correctly
805
-
806
- ---
807
-
808
- ## [3.7.3] - 2025-11-06
809
-
810
- ### Fixed - Master Tables Namespace Collision Bug
811
-
812
- **Critical bug fix for incomplete multi-project support in v3.7.0-v3.7.2**
813
-
814
- #### Problem
815
- - Master tables (m_files, m_tags, m_scopes) lacked `project_id` columns in v3.7.0-v3.7.2
816
- - This caused **namespace collisions** where identical file paths/tag names/scope names from different projects would conflict
817
- - Example: "src/index.ts" from ProjectA would collide with ProjectB's "src/index.ts"
818
- - Users upgrading from v3.6.x would have fake project name "default-project" instead of detected real name
819
-
820
- #### Solution
821
- - **20251106000000_fix_master_tables_project_id_v3_7_3.ts** - Comprehensive migration that:
822
- 1. **Data Consolidation** - Detects v3.7.0-v3.7.2 upgrade scenario and consolidates project #2 data into project #1
823
- 2. **Project Rename** - Renames fake "default-project" to real detected name (from config.toml/git remote/directory)
824
- 3. **Schema Fix** - Adds `project_id` column to m_files, m_tags, m_scopes with composite UNIQUE constraints
825
- 4. **Data Migration** - Maps all existing master table data to default project (ID 1)
826
- 5. **Orphan Cleanup** - Filters out 95 orphaned foreign key references (deleted tasks/tags)
827
- 6. **View Restoration** - Temporarily drops and restores 4 views during migration
828
- 7. **Table Restoration** - Backs up and restores 6 referencing tables with updated foreign keys
829
-
830
- #### Migration Details
831
- - **Idempotent** - Can run multiple times safely (checks for existing columns)
832
- - **Version-Aware** - Only consolidates data for v3.7.0-v3.7.2 databases (detects fake project names)
833
- - **Batch Inserts** - Uses 10-row batches to avoid SQLite UNION ALL limits
834
- - **FK Filtering** - Validates foreign key references before restoration to prevent constraint errors
835
- - **SQLite-Optimized** - Handles better-sqlite3 FK constraint behavior during table drops
836
-
837
- #### Technical Changes
838
- - **m_files**: Added `project_id` column, changed UNIQUE constraint from `(path)` to `(project_id, path)`
839
- - **m_tags**: Added `project_id` column, changed UNIQUE constraint from `(name)` to `(project_id, name)`
840
- - **m_scopes**: Added `project_id` column, changed UNIQUE constraint from `(name)` to `(project_id, name)`
841
- - **Referencing Tables**: Updated t_file_changes, t_task_file_links, t_decision_tags, t_task_tags, t_constraint_tags, t_decision_scopes
842
- - **Views**: Restored v_layer_summary, v_task_board, v_tagged_decisions, v_tagged_constraints
843
-
844
- #### Impact
845
- - ✅ **Fixed namespace collisions** - Files/tags/scopes from different projects can now have identical names
846
- - ✅ **Data integrity** - All existing data preserved and mapped correctly
847
- - ✅ **Project consolidation** - v3.7.0-v3.7.2 users get clean migration path
848
- - ✅ **Real project names** - No more fake "default-project" names
849
- - ✅ **Orphan cleanup** - Removed invalid foreign key references automatically
850
- - ✅ **Full idempotency** - Migration can be safely re-run if interrupted
851
-
852
- #### Testing
853
- - ✅ Tested on actual v3.7.2 production database (mcp-sqlew project)
854
- - ✅ Successfully consolidated 77 decisions, 191 tasks, 61 file changes
855
- - Filtered 95 orphaned task-tag references
856
- - ✅ All views and referencing tables restored correctly
857
- - Final database state validated with composite UNIQUE constraints working
858
-
859
- ---
860
-
861
- ## [3.7.2] - 2025-11-05
862
-
863
- ### Changed - Enhanced Sub-Agent Templates
864
-
865
- **Improved specialized agent templates for more efficient sqlew usage**
866
-
867
- #### Sub-Agent Template Updates
868
- - **sqlew-scrum-master.md** - Enhanced multi-agent coordination and task management workflows
869
- - **sqlew-researcher.md** - Improved decision querying and context analysis patterns
870
- - **sqlew-architect.md** - Enhanced decision documentation and constraint enforcement workflows
871
-
872
- #### New Documentation
873
- - Installation and configuration instructions
874
- - Usage examples for each agent
875
- - Token optimization guidelines
876
- - Agent comparison and capability matrix
877
- - Integration patterns
878
- - Troubleshooting guide
879
-
880
- #### SQL Dump Enhancements
881
- - Added type conversion testing (`src/tests/type-conversion.test.ts`)
882
- - Enhanced SQL dump converters for better type handling
883
- - Improved SQL dump utilities with expanded functionality
884
-
885
- ### Fixed - Git LFS PNG Display Issue
886
-
887
- **Removed Git LFS tracking for PNG files to fix GitHub display**
888
-
889
- #### Problem
890
- - PNG files were tracked with Git LFS, causing display issues on GitHub
891
- - Users without Git LFS saw ASCII pointers instead of images
892
- - README images were not rendering properly
893
-
894
- #### Solution
895
- - Removed `*.png filter=lfs diff=lfs merge=lfs -text` from .gitattributes
896
- - Restored actual PNG binary files from pre-LFS commits
897
- - All PNG images now display correctly on GitHub without requiring Git LFS
898
-
899
- #### Impact
900
- - ✅ **Better agent templates** - More efficient sqlew usage patterns
901
- - ✅ **Comprehensive documentation** - Clear installation and usage guides
902
- - ✅ **Improved type handling** - Better SQL dump type conversion
903
- - ✅ **Fixed GitHub display** - PNG images now render properly without Git LFS
904
- - ✅ **Token efficient** - Optimized agent workflows reduce unnecessary tool calls
905
-
906
- ---
907
-
908
- ## [3.7.1] - 2025-11-05
909
-
910
- ### Fixed - Error Message Visibility
911
-
912
- **Fixed validation error messages being hidden by error wrapper**
913
-
914
- #### Problem
915
- - Validation errors (JSON-structured responses) were being wrapped with stack traces
916
- - Wrong-usage messages were hidden from MCP clients
917
- - Users received generic error messages instead of helpful validation details
918
-
919
- #### Solution
920
- - **Error Handler Enhancement** - Detect and unwrap JSON validation errors
921
- - Validation errors now returned directly to MCP client without wrapping
922
- - Stack traces written to logs only (not returned to client)
923
- - Token-efficient responses without exposing internal stack details
924
- - **Parameter Validator Enhancement** - Detect unexpected/invalid parameters
925
- - Added validation for parameters that don't match valid list and have no typo suggestion
926
- - Improved error messages: "Unexpected params: X. Valid params: Y, Z"
927
-
928
- #### Impact
929
- - ✅ **Better UX** - Validation errors are now visible and actionable
930
- - **Token efficiency** - No stack traces in MCP responses
931
- - ✅ **Clearer feedback** - Users see helpful error messages immediately
932
- - ✅ **Security** - Internal stack details not exposed to clients
933
-
934
- ---
935
-
936
- ## [3.7.0] - 2025-11-05
937
-
938
- ### Added - Runtime Database Reconnection
939
-
940
- **Automatic connection recovery with exponential backoff retry logic**
941
-
942
- #### Features
943
- - **ConnectionManager** - Singleton wrapper for all database operations
944
- - **Exponential Backoff** - Retry delays: 1s → 2s → 4s → 8s → 16s (31 seconds total)
945
- - **Smart Error Detection** - Recognizes connection errors across SQLite, MySQL, PostgreSQL
946
- - **Process.exit on Exhaustion** - Exits cleanly after 5 failed retries
947
- - **27 Operations Wrapped** - All transactional operations protected:
948
- - context.ts: 5 operations
949
- - tasks.ts: 9 operations
950
- - files.ts: 3 operations
951
- - constraints.ts: 3 operations
952
- - config.ts: 2 operations
953
- - utils.ts: 5 operations
954
-
955
- #### Connection Error Patterns Detected
956
- - **Network Errors**: ECONNREFUSED, ENOTFOUND, ETIMEDOUT, ECONNRESET, EPIPE
957
- - **SQLite**: "database is locked", "unable to open database"
958
- - **MySQL/MariaDB**: "server has gone away", "lost connection to mysql server"
959
- - **PostgreSQL**: "connection to server was lost", "could not connect to server"
960
- - **Knex-specific**: "timeout acquiring a connection", "pool is destroyed"
961
-
962
- #### Test Coverage
963
- - **41 tests passing** (22 unit + 19 integration)
964
- - Retry behavior verification
965
- - Production scenario simulation (server restart, network failures)
966
- - Tool integration testing
967
-
968
- #### Impact
969
- - **Resilient operations** - Automatic recovery from transient connection failures
970
- - **Production ready** - Handles server restarts, network issues
971
- - **Zero regressions** - All existing tests pass
972
- - ✅ **Token efficient** - No manual retry logic needed in agent code
973
-
974
- ---
975
-
976
- ### Changed - Validation Error Messages
977
-
978
- **70-85% token reduction in error message size**
979
-
980
- #### Token Efficiency
981
- - **Before**: ~1000+ characters (~300+ tokens) with full examples embedded
982
- - **After**: ~200 characters (~50 tokens) with reference IDs
983
- - **Reduction**: 70-85% token savings
984
-
985
- #### New Error Format
986
- ```json
987
- {
988
- "error": "Missing: key, value",
989
- "action": "set",
990
- "reference": "decision.set",
991
- "missing": ["key", "value"],
992
- "hint": "Use 'quick_set' for simpler usage..."
993
- }
994
- ```
995
-
996
- #### Features
997
- - **Reference IDs** - Compact `{tool}.{action}` format (e.g., "decision.set")
998
- - **Concise Messages** - Essential information only
999
- - **Conditional Fields** - Only include fields when present
1000
- - **Self-Documenting** - AI can query `action: "help"` for full docs if needed
1001
-
1002
- #### Error Types
1003
- - Missing params: `"Missing: key, value"`
1004
- - Typos: `"Invalid params: val value"`
1005
- - Unknown action: `"Unknown action 'sett'. Did you mean: set?"`
1006
-
1007
- #### Impact
1008
- - **Token efficiency** - 70-85% reduction in error size
1009
- - **Cost reduction** - Lower API costs for AI agents
1010
- - **Better UX** - Quick, scannable errors
1011
- - **Backward compatible** - Error structure unchanged
1012
-
1013
- ---
1014
-
1015
- ### Changed - Debug Log Format
1016
-
1017
- **Single-line log entries for easier parsing**
1018
-
1019
- #### Problem
1020
- Multi-line log messages broke standard text processing tools (grep, awk, log rotation).
1021
-
1022
- #### Solution
1023
- - **Sanitization Function** - Replaces newlines with spaces, collapses whitespace
1024
- - **Applied To**: All log messages, data values, JSON output
1025
- - **Result**: Every log entry is exactly one line
1026
-
1027
- #### Benefits
1028
- - **Easier parsing** - Line-based tools work correctly
1029
- - ✅ **Better grep** - Search across entire messages
1030
- - **Simpler analysis** - Standard text processing
1031
- - ✅ **Cleaner output** - No unexpected line breaks
1032
-
1033
- #### Example
1034
- **Before:**
1035
- ```
1036
- [2025-11-05T02:00:00.000Z] [ERROR] Error details:
1037
- Stack trace line 1
1038
- Stack trace line 2
1039
- ```
1040
-
1041
- **After:**
1042
- ```
1043
- [2025-11-05T02:00:00.000Z] [ERROR] Error details: Stack trace line 1 Stack trace line 2
1044
- ```
1045
-
1046
- ---
1047
-
1048
- ### Changed - Specialized Agent Templates (Error Prevention)
1049
-
1050
- **Restructured agent templates to reduce tool call errors from 60% to <10%**
1051
-
1052
- #### Problem
1053
- - 60% of agent errors: missing `action` parameter in tool calls
1054
- - Templates embedded outdated action samples that became obsolete
1055
- - Agents guessed syntax instead of using discovery workflow
1056
-
1057
- #### Solution
1058
- All three agent templates restructured with error-prevention focus:
1059
- - **sqlew-architect.md** - Decision documentation specialist
1060
- - **sqlew-researcher.md** - Context analysis specialist
1061
- - **sqlew-scrum-master.md** - Sprint coordination specialist
1062
-
1063
- #### Key Improvements
1064
- - ⚠️ **Prominent Error-Prevention Section** - "CRITICAL: Error-Free sqlew Tool Usage" at top
1065
- - 📚 **Discovery-First Workflow** - Guides agents: `action: "help"` `action: "example"` → copy/modify
1066
- - ❌✅ **Zero-Error Pattern** - Clear WRONG/CORRECT examples for every common mistake:
1067
- - Missing `action` parameter
1068
- - Wrong data types (priority: string vs number)
1069
- - Wrong parameter names (old v2.x API)
1070
- - 🔍 **Pre-Execution Checklist** - Verify `action` parameter before every tool call
1071
- - 🗑️ **No Embedded Samples** - Removed action lists to prevent outdated syntax
1072
- - 🛠️ **Common Data Type Errors** - Shows tag arrays, boolean atomics, integer priorities
1073
-
1074
- #### Upgrade Path
1075
- **Note**: Existing `.claude/agents/` files NOT auto-upgraded (preserves customizations)
1076
-
1077
- **Manual upgrade required**:
1078
- ```bash
1079
- # Remove old templates
1080
- rm .claude/agents/sqlew-{architect,researcher,scrum-master}.md
1081
-
1082
- # Restart MCP server (auto-copies new templates from assets/sample-agents/)
1083
- ```
1084
-
1085
-
1086
- #### Impact
1087
- - ✅ **Target: 60% → <10% error rate** for agent tool calls
1088
- - **Better UX** - Clear guidance prevents common mistakes
1089
- - ✅ **Self-Correcting** - Agents learn correct patterns from errors
1090
- - ✅ **Future-Proof** - Discovery workflow adapts to API changes
1091
-
1092
- ---
1093
-
1094
- ### Fixed - Multi-Project Migration (Critical)
1095
-
1096
- **Fixed migration for ALL users upgrading from v3.6.10 to v3.7.0**
1097
-
1098
- #### Problem
1099
- - SQLite's `ALTER TABLE` silently failed for 4 tables with complex foreign keys
1100
- - Migration reported success but columns weren't added
1101
- - Task creation would fail: `"table t_task_details has no column named project_id"`
1102
-
1103
- #### Root Cause
1104
- SQLite cannot modify tables with `ON DELETE CASCADE` constraints using ALTER TABLE.
1105
-
1106
- #### Solution
1107
- - **Table Recreation Strategy** - Backup → Drop → Recreate → Restore
1108
- - **4 Tables Fixed**:
1109
- - `t_task_details` (STEP 4.7)
1110
- - `t_task_file_links` (STEP 4.8)
1111
- - `t_task_decision_links` (STEP 4.9)
1112
- - `t_task_tags` (composite PRIMARY KEY)
1113
-
1114
- #### Idempotency
1115
- All recreation steps check if `project_id` exists before executing:
1116
- ```typescript
1117
- const hasProjectId = await knex.schema.hasColumn('table_name', 'project_id');
1118
- if (!hasProjectId) {
1119
- // Recreation logic
1120
- }
1121
- ```
1122
-
1123
- #### Data Preservation Verified
1124
- - 223 task detail rows preserved
1125
- - ✅ 632 task tag rows preserved
1126
- - ✅ All task links preserved
1127
- - 100% data integrity maintained
1128
-
1129
- #### Testing
1130
- - ✅ Fresh installation works
1131
- - ✅ v3.6.10 → v3.7.0 upgrade works
1132
- - ✅ Migration can be re-run safely (idempotent)
1133
- - ✅ TypeScript compiles without errors
1134
-
1135
- #### Impact
1136
- - ✅ **Production ready** - Safe for all v3.6.10 users to upgrade
1137
- - ✅ **No data loss** - All existing data preserved
1138
- - ✅ **Idempotent** - Can re-run without errors
1139
-
1140
- ---
1141
-
1142
- ## [3.6.10] - 2025-10-30
1143
-
1144
- ### Added - Environment Variable Support for Project Root
1145
-
1146
- **New `SQLEW_PROJECT_ROOT` environment variable for project-relative databases**
1147
-
1148
- #### Problem
1149
- - Junie AI and other MCP clients require absolute paths in configuration
1150
- - Users had to hardcode project-specific paths in MCP server config
1151
- - No easy way to use project-relative database paths
1152
-
1153
- #### Solution
1154
- - Added `SQLEW_PROJECT_ROOT` environment variable support (inspired by serena-mcp pattern)
1155
- - MCP clients can now pass project directory via environment variable
1156
- - Database automatically created at `$SQLEW_PROJECT_ROOT/.sqlew/sqlew.db`
1157
-
1158
- #### Priority Order
1159
- 1. `SQLEW_PROJECT_ROOT` environment variable (NEW - highest priority)
1160
- 2. `--db-path` CLI argument (absolute path)
1161
- 3. `--config-path` CLI argument (absolute path)
1162
- 4. `database.path` in config file (absolute path)
1163
- 5. `process.cwd()` fallback
1164
-
1165
- #### Junie AI Configuration Example
1166
- ```json
1167
- {
1168
- "mcpServers": {
1169
- "sqlew": {
1170
- "command": "npx",
1171
- "args": ["sqlew"],
1172
- "env": {
1173
- "SQLEW_PROJECT_ROOT": "{projectDir}"
1174
- }
1175
- }
1176
- }
1177
- }
1178
- ```
1179
-
1180
- **Note:** Junie AI uses `{projectDir}` variable which expands to the current project's absolute path. This ensures each project gets its own isolated database without hardcoded paths. Other MCP clients may use different variable names like `${workspaceFolder}` (VS Code/Cline) - check your client's documentation.
1181
-
1182
- #### Impact
1183
- - ✅ **Project-relative databases** without hardcoded absolute paths
1184
- - ✅ **Cleaner MCP configuration** (no per-project path updates needed)
1185
- - ✅ **Compatible with Junie AI, Claude Desktop, and other MCP clients**
1186
- - ✅ **No breaking changes** (environment variable is optional)
1187
-
1188
- ---
1189
-
1190
- ### Fixed - MCP Protocol Compliance (EPIPE Fix)
1191
-
1192
- **Eliminated console output for strict JSON-RPC protocol compliance**
1193
-
1194
- #### Problem
1195
- - EPIPE (broken pipe) errors when running with Junie AI on Windows
1196
- - Console output to stdout/stderr violated MCP JSON-RPC protocol requirements
1197
- - Strict MCP clients (like Junie AI) expect pure JSON-RPC on stdio streams
1198
-
1199
- #### Changes
1200
- - **Redirected all diagnostic output to debug log file** - stdout/stderr reserved exclusively for JSON-RPC
1201
- - Modified `safeConsoleError()` to write to debug log instead of stderr
1202
- - Replaced 50+ console.log/console.error calls across codebase:
1203
- - `src/database.ts` - Database initialization messages
1204
- - `src/watcher/file-watcher.ts` - File watcher status and events
1205
- - `src/watcher/gitignore-parser.ts` - .gitignore loading warnings
1206
- - `src/tools/tasks.ts` - Task file registration warnings
1207
- - `src/config/example-generator.ts` - First launch messages
1208
-
1209
- #### Technical Details
1210
- - **MCP Protocol Requirement**: stdin/stdout/stderr must carry only JSON-RPC messages
1211
- - **Debug Logging**: All diagnostic messages now use `debugLog()` with appropriate levels (INFO, WARN, ERROR)
1212
- - **Zero stdout pollution**: Server starts silently, waits for JSON-RPC requests
1213
- - **Tested with Junie AI**: Confirmed no EPIPE errors on Windows
1214
-
1215
- #### Impact
1216
- - ✅ **Works with strict MCP clients** (Junie AI, etc.)
1217
- - ✅ **Maintains full diagnostics** via debug log file
1218
- - ✅ **Pure JSON-RPC protocol** compliance
1219
- - ✅ **No breaking changes** to MCP tool functionality
1220
-
1221
- ---
1222
-
1223
- ### Added - Environment Variable Support for Project Root
1224
-
1225
- **New `SQLEW_PROJECT_ROOT` environment variable for project-relative databases**
1226
-
1227
- #### Problem
1228
- - Junie AI and other MCP clients require absolute paths in configuration
1229
- - Users had to hardcode project-specific paths in MCP server config
1230
- - No easy way to use project-relative database paths
1231
-
1232
- #### Solution
1233
- - Added `SQLEW_PROJECT_ROOT` environment variable support (inspired by serena-mcp pattern)
1234
- - MCP clients can now pass project directory via environment variable
1235
- - Database automatically created at `$SQLEW_PROJECT_ROOT/.sqlew/sqlew.db`
1236
-
1237
- #### Priority Order
1238
- 1. `SQLEW_PROJECT_ROOT` environment variable (NEW - highest priority)
1239
- 2. `--db-path` CLI argument (absolute path)
1240
- 3. `--config-path` CLI argument (absolute path)
1241
- 4. `database.path` in config file (absolute path)
1242
- 5. `process.cwd()` fallback
1243
-
1244
- #### Junie AI Configuration Example
1245
- ```json
1246
- {
1247
- "mcpServers": {
1248
- "sqlew": {
1249
- "command": "npx",
1250
- "args": ["sqlew"],
1251
- "env": {
1252
- "SQLEW_PROJECT_ROOT": "{projectDir}"
1253
- }
1254
- }
1255
- }
1256
- }
1257
- ```
1258
-
1259
- **Note:** Junie AI uses `{projectDir}` variable which expands to the current project's absolute path. This ensures each project gets its own isolated database without hardcoded paths. Other MCP clients may use different variable names like `${workspaceFolder}` (VS Code/Cline) - check your client's documentation.
1260
-
1261
- #### Impact
1262
- - ✅ **Project-relative databases** without hardcoded absolute paths
1263
- - ✅ **Cleaner MCP configuration** (no per-project path updates needed)
1264
- - ✅ **Compatible with Junie AI, Claude Desktop, and other MCP clients**
1265
- - ✅ **No breaking changes** (environment variable is optional)
1266
-
1267
- ---
1268
-
1269
- ### Fixed - MCP Protocol Compliance (EPIPE Fix)
1270
-
1271
- **Eliminated console output for strict JSON-RPC protocol compliance**
1272
-
1273
- #### Problem
1274
- - EPIPE (broken pipe) errors when running with Junie AI on Windows
1275
- - Console output to stdout/stderr violated MCP JSON-RPC protocol requirements
1276
- - Strict MCP clients (like Junie AI) expect pure JSON-RPC on stdio streams
1277
-
1278
- #### Changes
1279
- - **Redirected all diagnostic output to debug log file** - stdout/stderr reserved exclusively for JSON-RPC
1280
- - Modified `safeConsoleError()` to write to debug log instead of stderr
1281
- - Replaced 50+ console.log/console.error calls across codebase:
1282
- - `src/database.ts` - Database initialization messages
1283
- - `src/watcher/file-watcher.ts` - File watcher status and events
1284
- - `src/watcher/gitignore-parser.ts` - .gitignore loading warnings
1285
- - `src/tools/tasks.ts` - Task file registration warnings
1286
- - `src/config/example-generator.ts` - First launch messages
1287
-
1288
- #### Technical Details
1289
- - **MCP Protocol Requirement**: stdin/stdout/stderr must carry only JSON-RPC messages
1290
- - **Debug Logging**: All diagnostic messages now use `debugLog()` with appropriate levels (INFO, WARN, ERROR)
1291
- - **Zero stdout pollution**: Server starts silently, waits for JSON-RPC requests
1292
- - **Tested with Junie AI**: Confirmed no EPIPE errors on Windows
1293
-
1294
- #### Impact
1295
- - ✅ **Works with strict MCP clients** (Junie AI, etc.)
1296
- - ✅ **Maintains full diagnostics** via debug log file
1297
- - ✅ **Pure JSON-RPC protocol** compliance
1298
- - ✅ **No breaking changes** to MCP tool functionality
1299
-
1300
- ---
1301
-
1302
- ### Added - Environment Variable Support for Project Root
1303
-
1304
- **New `SQLEW_PROJECT_ROOT` environment variable for project-relative databases**
1305
-
1306
- #### Problem
1307
- - Junie AI and other MCP clients require absolute paths in configuration
1308
- - Users had to hardcode project-specific paths in MCP server config
1309
- - No easy way to use project-relative database paths
1310
-
1311
- #### Solution
1312
- - Added `SQLEW_PROJECT_ROOT` environment variable support (inspired by serena-mcp pattern)
1313
- - MCP clients can now pass project directory via environment variable
1314
- - Database automatically created at `$SQLEW_PROJECT_ROOT/.sqlew/sqlew.db`
1315
-
1316
- #### Priority Order
1317
- 1. `SQLEW_PROJECT_ROOT` environment variable (NEW - highest priority)
1318
- 2. `--db-path` CLI argument (absolute path)
1319
- 3. `--config-path` CLI argument (absolute path)
1320
- 4. `database.path` in config file (absolute path)
1321
- 5. `process.cwd()` fallback
1322
-
1323
- #### Junie AI Configuration Example
1324
- ```json
1325
- {
1326
- "mcpServers": {
1327
- "sqlew": {
1328
- "command": "npx",
1329
- "args": ["sqlew"],
1330
- "env": {
1331
- "SQLEW_PROJECT_ROOT": "{projectDir}"
1332
- }
1333
- }
1334
- }
1335
- }
1336
- ```
1337
-
1338
- **Note:** Junie AI uses `{projectDir}` variable which expands to the current project's absolute path. This ensures each project gets its own isolated database without hardcoded paths. Other MCP clients may use different variable names like `${workspaceFolder}` (VS Code/Cline) - check your client's documentation.
1339
-
1340
- #### Impact
1341
- - ✅ **Project-relative databases** without hardcoded absolute paths
1342
- - ✅ **Cleaner MCP configuration** (no per-project path updates needed)
1343
- - ✅ **Compatible with Junie AI, Claude Desktop, and other MCP clients**
1344
- - ✅ **No breaking changes** (environment variable is optional)
1345
-
1346
- ---
1347
-
1348
- ### Fixed - MCP Protocol Compliance (EPIPE Fix)
1349
-
1350
- **Eliminated console output for strict JSON-RPC protocol compliance**
1351
-
1352
- #### Problem
1353
- - EPIPE (broken pipe) errors when running with Junie AI on Windows
1354
- - Console output to stdout/stderr violated MCP JSON-RPC protocol requirements
1355
- - Strict MCP clients (like Junie AI) expect pure JSON-RPC on stdio streams
1356
-
1357
- #### Changes
1358
- - **Redirected all diagnostic output to debug log file** - stdout/stderr reserved exclusively for JSON-RPC
1359
- - Modified `safeConsoleError()` to write to debug log instead of stderr
1360
- - Replaced 50+ console.log/console.error calls across codebase:
1361
- - `src/database.ts` - Database initialization messages
1362
- - `src/watcher/file-watcher.ts` - File watcher status and events
1363
- - `src/watcher/gitignore-parser.ts` - .gitignore loading warnings
1364
- - `src/tools/tasks.ts` - Task file registration warnings
1365
- - `src/config/example-generator.ts` - First launch messages
1366
-
1367
- #### Technical Details
1368
- - **MCP Protocol Requirement**: stdin/stdout/stderr must carry only JSON-RPC messages
1369
- - **Debug Logging**: All diagnostic messages now use `debugLog()` with appropriate levels (INFO, WARN, ERROR)
1370
- - **Zero stdout pollution**: Server starts silently, waits for JSON-RPC requests
1371
- - **Tested with Junie AI**: Confirmed no EPIPE errors on Windows
1372
-
1373
- #### Impact
1374
- - ✅ **Works with strict MCP clients** (Junie AI, etc.)
1375
- - ✅ **Maintains full diagnostics** via debug log file
1376
- - ✅ **Pure JSON-RPC protocol** compliance
1377
- - ✅ **No breaking changes** to MCP tool functionality
1378
-
1379
- ---
1380
-
1381
- ### Added - Environment Variable Support for Project Root
1382
-
1383
- **New `SQLEW_PROJECT_ROOT` environment variable for project-relative databases**
1384
-
1385
- #### Problem
1386
- - Junie AI and other MCP clients require absolute paths in configuration
1387
- - Users had to hardcode project-specific paths in MCP server config
1388
- - No easy way to use project-relative database paths
1389
-
1390
- #### Solution
1391
- - Added `SQLEW_PROJECT_ROOT` environment variable support (inspired by serena-mcp pattern)
1392
- - MCP clients can now pass project directory via environment variable
1393
- - Database automatically created at `$SQLEW_PROJECT_ROOT/.sqlew/sqlew.db`
1394
-
1395
- #### Priority Order
1396
- 1. `SQLEW_PROJECT_ROOT` environment variable (NEW - highest priority)
1397
- 2. `--db-path` CLI argument (absolute path)
1398
- 3. `--config-path` CLI argument (absolute path)
1399
- 4. `database.path` in config file (absolute path)
1400
- 5. `process.cwd()` fallback
1401
-
1402
- #### Junie AI Configuration Example
1403
- ```json
1404
- {
1405
- "mcpServers": {
1406
- "sqlew": {
1407
- "command": "npx",
1408
- "args": ["sqlew"],
1409
- "env": {
1410
- "SQLEW_PROJECT_ROOT": "{projectDir}"
1411
- }
1412
- }
1413
- }
1414
- }
1415
- ```
1416
-
1417
- **Note:** Junie AI uses `{projectDir}` variable which expands to the current project's absolute path. This ensures each project gets its own isolated database without hardcoded paths. Other MCP clients may use different variable names like `${workspaceFolder}` (VS Code/Cline) - check your client's documentation.
1418
-
1419
- #### Impact
1420
- - ✅ **Project-relative databases** without hardcoded absolute paths
1421
- - ✅ **Cleaner MCP configuration** (no per-project path updates needed)
1422
- - ✅ **Compatible with Junie AI, Claude Desktop, and other MCP clients**
1423
- - ✅ **No breaking changes** (environment variable is optional)
1424
-
1425
- ---
1426
-
1427
- ### Fixed - MCP Protocol Compliance (EPIPE Fix)
1428
-
1429
- **Eliminated console output for strict JSON-RPC protocol compliance**
1430
-
1431
- #### Problem
1432
- - EPIPE (broken pipe) errors when running with Junie AI on Windows
1433
- - Console output to stdout/stderr violated MCP JSON-RPC protocol requirements
1434
- - Strict MCP clients (like Junie AI) expect pure JSON-RPC on stdio streams
1435
-
1436
- #### Changes
1437
- - **Redirected all diagnostic output to debug log file** - stdout/stderr reserved exclusively for JSON-RPC
1438
- - Modified `safeConsoleError()` to write to debug log instead of stderr
1439
- - Replaced 50+ console.log/console.error calls across codebase:
1440
- - `src/database.ts` - Database initialization messages
1441
- - `src/watcher/file-watcher.ts` - File watcher status and events
1442
- - `src/watcher/gitignore-parser.ts` - .gitignore loading warnings
1443
- - `src/tools/tasks.ts` - Task file registration warnings
1444
- - `src/config/example-generator.ts` - First launch messages
1445
-
1446
- #### Technical Details
1447
- - **MCP Protocol Requirement**: stdin/stdout/stderr must carry only JSON-RPC messages
1448
- - **Debug Logging**: All diagnostic messages now use `debugLog()` with appropriate levels (INFO, WARN, ERROR)
1449
- - **Zero stdout pollution**: Server starts silently, waits for JSON-RPC requests
1450
- - **Tested with Junie AI**: Confirmed no EPIPE errors on Windows
1451
-
1452
- #### Impact
1453
- - ✅ **Works with strict MCP clients** (Junie AI, etc.)
1454
- - ✅ **Maintains full diagnostics** via debug log file
1455
- - ✅ **Pure JSON-RPC protocol** compliance
1456
- - ✅ **No breaking changes** to MCP tool functionality
1457
-
1458
- ---
1459
-
1460
- ### Added - Environment Variable Support for Project Root
1461
-
1462
- **New `SQLEW_PROJECT_ROOT` environment variable for project-relative databases**
1463
-
1464
- #### Problem
1465
- - Junie AI and other MCP clients require absolute paths in configuration
1466
- - Users had to hardcode project-specific paths in MCP server config
1467
- - No easy way to use project-relative database paths
1468
-
1469
- #### Solution
1470
- - Added `SQLEW_PROJECT_ROOT` environment variable support (inspired by serena-mcp pattern)
1471
- - MCP clients can now pass project directory via environment variable
1472
- - Database automatically created at `$SQLEW_PROJECT_ROOT/.sqlew/sqlew.db`
1473
-
1474
- #### Priority Order
1475
- 1. `SQLEW_PROJECT_ROOT` environment variable (NEW - highest priority)
1476
- 2. `--db-path` CLI argument (absolute path)
1477
- 3. `--config-path` CLI argument (absolute path)
1478
- 4. `database.path` in config file (absolute path)
1479
- 5. `process.cwd()` fallback
1480
-
1481
- #### Junie AI Configuration Example
1482
- ```json
1483
- {
1484
- "mcpServers": {
1485
- "sqlew": {
1486
- "command": "npx",
1487
- "args": ["sqlew"],
1488
- "env": {
1489
- "SQLEW_PROJECT_ROOT": "{projectDir}"
1490
- }
1491
- }
1492
- }
1493
- }
1494
- ```
1495
-
1496
- **Note:** Junie AI uses `{projectDir}` variable which expands to the current project's absolute path. This ensures each project gets its own isolated database without hardcoded paths. Other MCP clients may use different variable names like `${workspaceFolder}` (VS Code/Cline) - check your client's documentation.
1497
-
1498
- #### Impact
1499
- - ✅ **Project-relative databases** without hardcoded absolute paths
1500
- - ✅ **Cleaner MCP configuration** (no per-project path updates needed)
1501
- - ✅ **Compatible with Junie AI, Claude Desktop, and other MCP clients**
1502
- - ✅ **No breaking changes** (environment variable is optional)
1503
-
1504
- ---
1505
-
1506
- ### Fixed - MCP Protocol Compliance (EPIPE Fix)
1507
-
1508
- **Eliminated console output for strict JSON-RPC protocol compliance**
1509
-
1510
- #### Problem
1511
- - EPIPE (broken pipe) errors when running with Junie AI on Windows
1512
- - Console output to stdout/stderr violated MCP JSON-RPC protocol requirements
1513
- - Strict MCP clients (like Junie AI) expect pure JSON-RPC on stdio streams
1514
-
1515
- #### Changes
1516
- - **Redirected all diagnostic output to debug log file** - stdout/stderr reserved exclusively for JSON-RPC
1517
- - Modified `safeConsoleError()` to write to debug log instead of stderr
1518
- - Replaced 50+ console.log/console.error calls across codebase:
1519
- - `src/database.ts` - Database initialization messages
1520
- - `src/watcher/file-watcher.ts` - File watcher status and events
1521
- - `src/watcher/gitignore-parser.ts` - .gitignore loading warnings
1522
- - `src/tools/tasks.ts` - Task file registration warnings
1523
- - `src/config/example-generator.ts` - First launch messages
1524
-
1525
- #### Technical Details
1526
- - **MCP Protocol Requirement**: stdin/stdout/stderr must carry only JSON-RPC messages
1527
- - **Debug Logging**: All diagnostic messages now use `debugLog()` with appropriate levels (INFO, WARN, ERROR)
1528
- - **Zero stdout pollution**: Server starts silently, waits for JSON-RPC requests
1529
- - **Tested with Junie AI**: Confirmed no EPIPE errors on Windows
1530
-
1531
- #### Impact
1532
- - ✅ **Works with strict MCP clients** (Junie AI, etc.)
1533
- - ✅ **Maintains full diagnostics** via debug log file
1534
- - ✅ **Pure JSON-RPC protocol** compliance
1535
- - ✅ **No breaking changes** to MCP tool functionality
1536
-
1537
- ---
1538
-
1539
- ### Fixed - Windows Absolute Path Handling
1540
-
1541
- **Fixed path normalization for Windows environments**
1542
-
1543
- #### Changes
1544
- - Fixed absolute path to relative path conversion in `gitignore-parser.ts`
1545
- - Prevented `uname` Unix command calls on Windows
1546
- - Resolved "path should be a `path.relative()`d string" error on Windows
1547
- - Improved cross-platform path handling in file watcher
1548
-
1549
- #### Technical Details
1550
- - Enhanced path normalization logic to handle Windows drive letters (`C:/`)
1551
- - Added proper Windows-specific path handling checks
1552
- - Fixed compatibility with `ignore` library path requirements
1553
-
1554
- ---
1555
-
1556
- ## [3.6.8] - 2025-10-30
1557
-
1558
- ### Fixed - Windows Environment Compatibility
1559
-
1560
- **Updated better-sqlite3 for Windows support**
1561
-
1562
- #### Changes
1563
- - Updated `better-sqlite3` from `^11.0.0` to `^12.4.1`
1564
- - Fixes Windows environment compatibility issues
1565
- - Improves cross-platform stability
1566
-
1567
- ---
1568
-
1569
- ## [3.6.7] - 2025-10-30
1570
-
1571
- ### Fixed - Dependency Update
1572
-
1573
- **Removed deprecated dependency**
1574
-
1575
- #### Changes
1576
- - Removed deprecated dependency to ensure compatibility with latest ecosystem
1577
- - Maintenance update for long-term stability
1578
-
1579
- ---
1580
-
1581
- ## [3.6.6] - 2025-10-29
1582
-
1583
- ### Added - Parameter Validation & Error Handling
1584
-
1585
- **Comprehensive parameter validation with helpful error messages**
1586
-
1587
- #### Parameter Validation
1588
- - **Required/Optional Detection** - Clear indication of required vs optional parameters
1589
- - **Typo Suggestions** - Levenshtein distance-based "did you mean" suggestions for mistyped parameters
1590
- - **Structured Error Messages** - JSON format with examples showing correct usage
1591
- - **Visual Markers** - Help responses show 🔴 REQUIRED and ⚪ OPTIONAL parameter markers
1592
- - **Action Specs Registry** - Centralized action specification in `src/utils/action-specs.ts`
1593
- - **Comprehensive Test Suite** - 49 validation tests across all 5 tools
1594
-
1595
- ### Removed - Config Tool Deprecated
1596
-
1597
- **Config MCP tool removed in favor of file-based configuration**
1598
-
1599
- #### Why Removed
1600
- - Messaging system deprecated (primary use case eliminated)
1601
- - File-based configuration (`.sqlew/config.toml`) is clearer and more maintainable
1602
- - Runtime updates caused configuration drift between `m_config` table and config file
1603
- - Confusing UX (changes lost on restart unless manually synced)
1604
-
1605
- #### Migration Path
1606
- - ✅ Use `.sqlew/config.toml` for all configuration (persistent, version-controlled)
1607
- - ✅ Use CLI arguments for one-time overrides
1608
- - Do not use `config` tool (will error)
1609
-
1610
- #### Impact
1611
- - ✅ 5 MCP tools (down from 6): `decision`, `task`, `file`, `constraint`, `stats`
1612
- - ✅ Clearer configuration workflow (single source of truth)
1613
- - ✅ Better developer experience (validation errors with examples)
1614
- - Reduced cognitive load (no config drift issues)
1615
-
1616
- ---
1617
-
1618
- ## [3.6.5] - 2025-10-28
1619
-
1620
- ### Changed - Agent System Simplification & CI/CD Fix
1621
-
1622
- **Removed messaging system and eliminated agent pooling complexity**
1623
-
1624
- #### Agent System Cleanup
1625
- - **Removed messaging system** - `t_agent_messages` table dropped, `message` MCP tool deprecated
1626
- - Messaging system was unused and added unnecessary complexity
1627
- - Simplified agent architecture to single-purpose registry
1628
- - **Eliminated agent pooling** - Code no longer uses `in_use` and `is_reusable` columns
1629
- - Removed race conditions and UNIQUE constraint errors
1630
- - Each agent name creates one permanent record (no reuse/pooling)
1631
- - Generic agents (`generic-N`) auto-allocated for empty names
1632
- - **6 MCP Tools** - Down from 7 (messaging removed)
1633
- - `decision`, `file`, `constraint`, `stats`, `config`, `task`
1634
-
1635
- #### Infrastructure
1636
- - **CI/CD Workflow** - Removed npm publish step from GitHub Actions
1637
- - npm publish requires 2FA authentication
1638
- - Publishing must be done manually to prevent workflow failures
1639
-
1640
- #### Impact
1641
- - ✅ Simplified agent management (no pooling overhead)
1642
- - Reduced complexity (messaging system removed)
1643
- - ✅ CI/CD workflow no longer fails on npm publish
1644
-
1645
- ---
1646
-
1647
- ## [3.6.4] - 2025-10-28
1648
-
1649
- ### Fixed - WSL Git Add Detection
1650
-
1651
- **WSL-specific polling workaround for chokidar file watcher**
1652
-
1653
- #### Changes
1654
- - **1-second polling for WSL** - Added platform-specific chokidar configuration
1655
- - WSL filesystem events are unreliable with native watching
1656
- - Polling ensures git add operations are detected consistently
1657
- - **Platform detection** - Automatic WSL detection via `/proc/version`
1658
- - **Backward compatible** - Non-WSL platforms use native file watching (no polling)
1659
-
1660
- #### Impact
1661
- - ✅ Git add detection now works reliably on WSL
1662
- - ✅ VCS-aware auto-complete functional across all platforms
1663
-
1664
- ---
1665
-
1666
- ## [3.6.3] - 2025-10-27
1667
-
1668
- ### Fixed - Critical Bug Fixes & Git Add Detection
1669
-
1670
- **Transaction pool exhaustion and VCS-aware auto-complete implementation**
1671
-
1672
- #### Bug Fixes
1673
- - **Task Move Transaction Bug** - Fixed `moveTask` using base `knex` instead of transaction `trx` (line 880)
1674
- - Caused "Knex: Timeout acquiring a connection" errors
1675
- - Now properly uses transaction object for `logTaskStatusChange`
1676
- - **Task Link Transaction Bug** - Fixed `linkTask` using base `knex` instead of transaction `trx` (line 948)
1677
- - Same connection pool exhaustion issue
1678
- - Now properly uses transaction object for decision link insertion
1679
-
1680
- #### Features
1681
- - **Git Add Detection** - Implemented `detectAndCompleteOnStaging()` for VCS-aware workflow
1682
- - Detects `git add` operations and auto-completes tasks (`waiting_review` → `done`)
1683
- - Supports Git, Mercurial, and SVN
1684
- - Configurable via `git_auto_complete_on_stage` and `require_all_files_staged`
1685
- - **VCS Configuration** - Added comprehensive settings documentation to `config.example.toml`
1686
- - `git_auto_complete_on_stage` (default: true)
1687
- - `git_auto_archive_on_commit` (default: true)
1688
- - `require_all_files_staged` (default: true)
1689
- - `require_all_files_committed_for_archive` (default: true)
1690
-
1691
- #### Infrastructure
1692
- - **Line Ending Fix** - Added `.gitattributes` to enforce LF endings for shell scripts
1693
- - Prevents CRLF issues in Husky hooks on Windows/WSL
1694
- - Applies to `*.sh` and `.husky/*` files
1695
- - **Husky Hooks** - Fixed pre-commit/pre-push hooks (added shebang, normalized line endings)
1696
-
1697
- #### Impact
1698
- - ✅ Task operations no longer fail with connection pool timeouts
1699
- - Git add detection now functional (was stubbed in v3.5.2)
1700
- - Cross-platform compatibility for git hooks (Windows/WSL/Linux/macOS)
1701
-
1702
- ---
1703
-
1704
- ## [3.6.2] - 2025-10-27
1705
-
1706
- ### Changed - Migration System Modernization
1707
-
1708
- **Simplified to Knex-only migrations with organized directory structure**
1709
-
1710
- #### Migration System Cleanup
1711
- - **Removed custom migration system** (14 obsolete files from `src/migrations/`)
1712
- - **Pure Knex migrations** - Standardized on Knex.js migration framework
1713
- - **Organized structure** - 22 migrations grouped into 3 logical subdirectories:
1714
- - `upgrades/` (7 files) - Version upgrade paths (v1.0 → v3.6)
1715
- - `bootstrap/` (5 files) - Fresh install foundation
1716
- - `enhancements/` (10 files) - v3.6.0+ feature additions
1717
-
1718
- #### Testing & CI/CD
1719
- - **Migration tests updated** - Converted to use Knex migrations exclusively
1720
- - **Comprehensive test coverage** - 8/9 versions migrate successfully (89% backward compatibility)
1721
- - **Husky git hooks** - Pre-commit (build + tests), pre-push (migration tests)
1722
- - **GitHub Actions workflow** - CI/CD pipeline for Node 18.x/20.x
1723
-
1724
- #### Benefits
1725
- - **Better maintainability** - Clear organization, standard tooling
1726
- - **Easier onboarding** - Knex is industry-standard
1727
- - **Faster development** - 56% time efficiency via parallel execution
1728
-
1729
- ---
1730
-
1731
- ## [3.6.0] - 2025-10-25
1732
-
1733
- ### Added - Help System Optimization
1734
-
1735
- **Database-driven help system with 60-70% token efficiency improvement**
1736
-
1737
- #### Key Achievements
1738
- - **60-70% Token Reduction** - Average help query: ~200 tokens (vs ~2,150 legacy)
1739
- - **95.8% Schema Reduction** - MCP InputSchemas: 350 tokens (vs 8,400 legacy)
1740
- - **6 New Help Actions** - Granular queries for actions, parameters, tools, use-cases
1741
- - **41 Use-Cases** - Comprehensive workflow examples across 6 categories
1742
- - **100% Test Coverage** - 38/38 tests passing
1743
-
1744
- #### New MCP Actions (stats tool)
1745
- - `help_action` - Query single action with parameters and examples
1746
- - `help_params` - Query parameter list for an action
1747
- - `help_tool` - Query tool overview + all actions
1748
- - `help_use_case` - Get single use-case with full workflow
1749
- - `help_list_use_cases` - List/filter use-cases by category/complexity
1750
- - `help_next_actions` - Suggest common next actions
1751
-
1752
- #### Database Schema
1753
- 7 new tables: `m_help_tools`, `m_help_actions`, `m_help_use_case_categories`, `t_help_action_params`, `t_help_action_examples`, `t_help_use_cases`, `t_help_action_sequences`
1754
-
1755
- #### Migration from v3.5.x
1756
- - Automatic migration on startup
1757
- - Backward compatible - all existing MCP actions unchanged
1758
- - Zero downtime
1759
-
1760
- ---
1761
-
1762
- ## [3.5.2] - 2025-10-24
1763
-
1764
- ### Added - Two-Step Git-Aware Task Workflow
1765
-
1766
- **Automatic task completion and archiving based on Git staging and committing**
1767
-
1768
- #### Features
1769
- - **Step 1 - Staging** (`git add`): `waiting_review` → `done` (work complete)
1770
- - **Step 2 - Committing** (`git commit`): `done` → `archived` (work finalized)
1771
- - **VCS Support**: Git, Mercurial, and SVN
1772
- - **Zero Token Cost**: Fully automated, no manual MCP calls needed
1773
-
1774
- #### Configuration
1775
- - `git_auto_complete_on_stage` (default: `'1'`)
1776
- - `git_auto_archive_on_commit` (default: `'1'`)
1777
- - `require_all_files_staged` (default: `'1'`)
1778
- - `require_all_files_committed_for_archive` (default: `'1'`)
1779
-
1780
- ---
1781
-
1782
- ## [3.5.1] - 2025-10-24
1783
-
1784
- ### Fixed - File Watcher WSL Compatibility
1785
-
1786
- **Upgraded chokidar from v3 to v4 + Fixed path normalization bug**
1787
-
1788
- #### Changes
1789
- - **chokidar**: `^3.6.0` `^4.0.3` (automatic WSL support)
1790
- - Fixed path normalization: chokidar reports absolute paths, database stores relative
1791
- - Removed manual WSL detection and polling configuration
1792
-
1793
- ---
1794
-
1795
- ## [3.5.0] - 2025-10-22
1796
-
1797
- ### Added - Non-Existent File Auto-Pruning
1798
-
1799
- **Automatic removal of non-existent watched files with audit trail**
1800
-
1801
- #### Features
1802
- - New table: `t_task_pruned_files` - Audit trail for pruned files
1803
- - Auto-pruning during `in_progress → waiting_review` transition
1804
- - Safety check: blocks if ALL files non-existent
1805
- - New MCP actions: `get_pruned_files`, `link_pruned_file`
1806
-
1807
- #### Documentation
1808
-
1809
- ---
1810
-
1811
-
1812
- ## Older Versions
1813
-
1814
- For changelog entries **v3.4.1 and older**, see:
1815
- - [docs/changelogs/CHANGELOG_ARCHIVE_v3.4_and_older.md](docs/changelogs/CHANGELOG_ARCHIVE_v3.4_and_older.md)
1816
-
1817
- This includes all versions from v1.0.0 through v3.4.1.
1
+ # Changelog
2
+
3
+ All notable changes to sqlew will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ---
9
+
10
+ ## [4.3.0] - 2026-01-04
11
+
12
+ ### Added
13
+
14
+ **Plan-to-ADR: Automatic Architecture Decision Records**
15
+
16
+ - Automatic ADR generation from Claude Code Plan Mode
17
+ - Markdown pattern extraction (📌 Decision / 🚫 Constraint markers)
18
+ - File Queue Architecture for async decision processing
19
+ - SubagentStop event integration for reliable pattern detection
20
+ - Parameter aliases for simplified tool usage (`path` → `file_path`, etc.)
21
+
22
+ ### Changed
23
+
24
+ - Documentation: Removed TOML format references (Markdown-only implementation)
25
+ - Unified feature branding as "Plan-to-ADR"
26
+ - Quick Start: `sqlew --init` as recommended one-shot setup
27
+ - Skills: Updated sqlew-decision-format and sqlew-plan-guidance
28
+
29
+ ### Deprecated
30
+
31
+ - **`task` tool**: Will be removed in v5.0. Use Claude Code's native TodoWrite instead
32
+ - **`file` tool**: Will be removed in v5.0. File tracking was primarily used with task system
33
+
34
+ ### Fixed
35
+
36
+ - Version alignment across package.json, README.md, CLAUDE.md
37
+ - Constraints duplication on automation
38
+ - Windows file locking issues with chokidar
39
+
40
+ ---
41
+
42
+ ## [4.1.2] - 2025-12-25
43
+
44
+ ### Fixed
45
+
46
+ **Help System & Clean Install**
47
+
48
+ - Fixed help system seeding with correct FK constraints
49
+ - Added seed migration for missing help system data (action params, examples)
50
+ - Fixed `file.record` action no longer requiring `agent_name` parameter
51
+ - Resolved clean install issues reported from Claude Desktop
52
+
53
+ ---
54
+
55
+ ## [4.1.1] - 2025-12-24
56
+
57
+ ### Fixed
58
+
59
+ **Claude Desktop Compatibility**
60
+
61
+ - Fixed MCP protocol corruption caused by migration logs going to stdout
62
+ - Changed all `console.log` to `console.error` in migration files (57 files)
63
+ - MCP servers must only output JSON-RPC to stdout; debug logs now go to stderr
64
+
65
+ ---
66
+
67
+ ## [4.1.0] - 2025-12-24
68
+
69
+ ### Added
70
+
71
+ **Claude Code Hooks Integration**
72
+
73
+ - File Queue Architecture for async decision operations
74
+ - Hook commands: `suggest`, `track-plan`, `save`, `check-completion`, `mark-done`
75
+ - QueueWatcher monitors `.sqlew/queue/pending.json` for changes
76
+ - Auto-initialization with `sqlew init --hooks`
77
+ - PreToolUse hooks (Task, Write triggers)
78
+ - PostToolUse hooks (Edit/Write, TodoWrite, ExitPlanMode triggers)
79
+ - Git hooks integration (post-merge, post-rewrite)
80
+
81
+ **PostgreSQL Compatibility**
82
+
83
+ - Replaced GROUP_CONCAT with string_agg for PostgreSQL
84
+ - Expanded GROUP BY clauses for PostgreSQL strictness compliance
85
+ - Cross-DB compatibility verified: SQLite, MySQL, MariaDB, PostgreSQL
86
+
87
+ ### Changed
88
+
89
+ - Hook operations now use file queue instead of direct DB access (<100ms latency)
90
+ - QueueWatcher singleton monitors queue file and processes decisions asynchronously
91
+
92
+ ---
93
+
94
+ ## [4.0.5] - 2025-12-19
95
+
96
+ ### Changed
97
+
98
+ **License Change: AGPL-3.0 Apache-2.0**
99
+
100
+ - Changed license from AGPLv3 to Apache License 2.0
101
+ - More permissive license for commercial and enterprise adoption
102
+ - Added NOTICE file with third-party attributions
103
+ - Updated LICENSE file with full Apache 2.0 text
104
+ - Updated package.json license field
105
+
106
+ **Why Apache 2.0?**
107
+ - Patent protection for contributors and users
108
+ - Widely adopted by major tech companies (Google, Microsoft, AWS)
109
+ - Easier enterprise adoption without copyleft concerns
110
+ - Compatible with most open source licenses
111
+
112
+ ---
113
+
114
+ ## [4.0.4] - 2025-12-10
115
+
116
+ ### Fixed
117
+
118
+ **Slash Command Sync Bug**
119
+
120
+ - Fixed `sync-commands.ts` referencing obsolete command files (`sqw-scrum.md`, `sqw-documentor.md`, etc.)
121
+ - Updated to use new unified `sqlew.md` command file
122
+ - Resolves "Source file not found" errors during npm package installation
123
+
124
+ ### Added
125
+
126
+ **Agent Skills Configuration**
127
+
128
+ - Added `skills` field to agent YAML frontmatter for automatic skill loading
129
+ - All sqlew agents now reference `sqlew-plan-guidance` skill
130
+ - Agents: `sqlew-architect`, `sqlew-researcher`, `sqlew-scrum-master`
131
+
132
+ **Config Example Update**
133
+
134
+ - Added `[commands]` section to `assets/config.example.toml`
135
+ - Documents the unified `/sqlew` command configuration
136
+
137
+ ### Changed
138
+
139
+ **Plan Mode Integration Documentation**
140
+
141
+ - Changed `Phase 1 (Research)` `Research Phase` for flexibility
142
+ - Changed `Phase 4 (Final Plan)` `Final Plan Phase`
143
+ - Plan mode phases are now semantically named instead of numbered
144
+
145
+ **CommandsConfig Simplified**
146
+
147
+ - Consolidated 6 individual command options into single `sqlew` option
148
+ - Updated `src/config/types.ts` and `src/config/minimal-generator.ts`
149
+
150
+ ---
151
+
152
+ ## [4.0.3] - 2025-12-04
153
+
154
+ ### Added
155
+
156
+ **Unified `/sqlew` Slash Command**
157
+
158
+ - Consolidated all slash commands (`/sqw-plan`, `/sqw-scrum`, `/sqw-research`, etc.) into single `/sqlew` command
159
+ - Natural language interface with automatic intent detection
160
+ - 6-level intent priority: List/Status Search Record → Update → Execute → Task Creation
161
+ - Supports both English and Japanese keywords
162
+ - Removed custom agent definitions (sqlew-architect, scrum-master, sqlew-researcher)
163
+
164
+ **Usage Examples:**
165
+ ```bash
166
+ /sqlew # Show status and suggest next action
167
+ /sqlew show remaining tasks # List/Status intent
168
+ /sqlew search for auth decisions # Search intent
169
+ /sqlew record that we use JWT # Record intent
170
+ /sqlew execute pending tasks # Execute intent
171
+ ```
172
+
173
+ ### Fixed
174
+
175
+ **v4_task_details JOIN Bug**
176
+
177
+ - Fixed `task.get` action failing with "no such column: td.project_id" error
178
+ - Root cause: `v4_task_details` table has only `task_id` as PK, not `project_id`
179
+ - Removed invalid `.andOn('t.project_id', '=', 'td.project_id')` from JOIN conditions
180
+ - Affected files: `task-queries.ts`, `get.ts`
181
+
182
+ ### Changed
183
+
184
+ **Documentation Updates**
185
+
186
+ - Rewrote `CLAUDE.md` with unified `/sqlew` command section
187
+ - Updated `README.md` Quick Start to use `/sqlew`
188
+ - Rewrote `docs/SLASH_COMMANDS.md` as Unified /sqlew Command Guide
189
+
190
+ ---
191
+
192
+ ## [4.0.2] - 2025-11-28
193
+
194
+ ### BREAKING CHANGES
195
+
196
+ **SQL Dump No Longer Supports Cross-Database Format Conversion**
197
+
198
+ The `db:dump` command now generates SQL for the **same database type only**. Cross-database migrations (e.g., SQLite → MySQL) must use JSON export/import instead.
199
+
200
+ **Migration Required:**
201
+ ```bash
202
+ # Old approach (no longer supported)
203
+ npx sqlew db:dump mysql backup.sql # Cross-DB conversion removed
204
+
205
+ # ✅ New approach: Use JSON for cross-database migration
206
+ npx sqlew db:export backup.json # Export to JSON
207
+ npx sqlew db:import backup.json # Import to target database
208
+ ```
209
+
210
+ **Rationale:**
211
+ - SQL syntax differences between databases caused data corruption issues
212
+ - Case-insensitive pattern matching failed in certain scenarios
213
+ - JSON format is database-agnostic and handles all data types correctly
214
+
215
+ **Node.js 20+ Required**
216
+
217
+ Minimum Node.js version updated from 18.0.0 to 20.0.0.
218
+
219
+ ### Added
220
+
221
+ **Unified CLI Entry Point**
222
+
223
+ - `npx sqlew db:export`, `npx sqlew db:import`, `npx sqlew db:dump` now work directly
224
+ - No `npm install` required - just use `npx sqlew <command>`
225
+ - CLI commands and MCP server mode unified under single `sqlew` entry point
226
+ - Removed separate `sqlew-cli` binary
227
+
228
+ ### Fixed
229
+
230
+ **Case-Insensitive Validation for Master Records**
231
+
232
+ - Added case-insensitive duplicate detection when registering new records
233
+ - Prevents duplicate entries like "MyTag" and "mytag" from being created
234
+ - Applies to tags, scopes, layers, and other master table entries
235
+ - New utility: `src/utils/case-insensitive-validator.ts`
236
+
237
+ **SQLite to MySQL SQL Dump Case-Sensitivity Bug**
238
+
239
+ - Fixed regex pattern matching that failed with case variations
240
+ - SQL dump now correctly handles mixed-case identifiers
241
+ - Enhanced schema table export for better compatibility
242
+
243
+ ### Changed
244
+
245
+ **Export Version Tracking**
246
+
247
+ - Export JSON now includes proper version metadata
248
+ - Version information helps with import compatibility checks
249
+ - Clearer error messages when importing incompatible versions
250
+
251
+ **CLI Documentation Update**
252
+
253
+ - Updated `docs/cli/README.md` with JSON-first migration workflow
254
+ - Added clear guidance on when to use `db:dump` vs `db:export`/`db:import`
255
+ - Improved comparison table for migration scenarios
256
+
257
+ ### Added
258
+
259
+ **Case-Insensitive Validator Utility**
260
+
261
+ - New `src/utils/case-insensitive-validator.ts` for consistent validation
262
+ - Comprehensive test suite: `src/tests/unit/utils/case-insensitive-validator.test.ts`
263
+ - Reusable across all master table operations
264
+
265
+ ### Migration Notes
266
+
267
+ **Backward Compatibility:**
268
+ - Existing databases unaffected
269
+ - JSON export/import workflows unchanged
270
+ - SQL dumps for same-database-type operations still work
271
+
272
+ **Action Required:**
273
+ - Update any scripts that use `db:dump` for cross-database migrations
274
+ - Switch to `db:export`/`db:import` for SQLite ↔ MySQL ↔ PostgreSQL migrations
275
+
276
+ ---
277
+
278
+ ## [4.0.1] - 2025-11-28
279
+
280
+ ### Removed
281
+
282
+ **Database Views Eliminated**
283
+
284
+ - Dropped all database views (`v_tagged_constraints`, `v_recent_file_changes`, etc.)
285
+ - Views caused migration complexity across SQLite/MySQL/PostgreSQL due to database-specific syntax
286
+ - Migration: `20251128000000_drop_all_views.ts`
287
+
288
+ ### Changed
289
+
290
+ **JOIN-Based Queries**
291
+
292
+ - `src/tools/constraints/actions/get.ts` - Replaced `v_tagged_constraints` view with JOIN query
293
+ - `src/tools/files/actions/get.ts` - Replaced `v_recent_file_changes` view with JOIN query
294
+ - Uses `UniversalKnex` wrapper for cross-database compatibility (date functions, boolean values, string aggregation)
295
+
296
+ **VCS Test Cleanup**
297
+
298
+ - `src/tests/feature/vcs/git-aware-completion.test.ts` - Added automatic git reset after tests
299
+ - Test commits are now automatically dropped when tests complete
300
+ - Prevents test artifacts from polluting git history
301
+
302
+ ### Added
303
+
304
+ **No-Views Guardrail Skill**
305
+
306
+ - `.claude/skills/no-views/SKILL.md` - Documentation for view prohibition policy
307
+ - `.claude/skills/skill-rules.json` - Added `no-views` rule (enforcement: block)
308
+ - Blocks creation of database views, requires JOINs instead
309
+
310
+ **Documentation Updates**
311
+
312
+ - `CLAUDE.md` - Updated to reflect no-views policy
313
+ - Removed Views section from database schema documentation
314
+ - Added `no-views` to Guardrail Skills table
315
+
316
+ ---
317
+
318
+ ## [4.0.0] - 2025-11-27
319
+
320
+ ### Changed
321
+
322
+ **Concept & Positioning**
323
+
324
+ - Reframed sqlew as a **shared SQL-backed context repository** and a **Decision & Constraint repository layer** for AI tools
325
+ - Clarified that Decisions capture *why* changes were made and Constraints capture *how* code should be written
326
+ - Updated README introduction to focus on "Never Start From Zero Context Again" and the repository-based metaphor instead of generic "memory"
327
+
328
+ **Documentation & Cleanup**
329
+
330
+ - Updated `README.md` to describe sqlew as a context repository rather than an abstract memory layer
331
+ - Aligned terminology across docs around Decisions, Constraints, tasks, and the repository layer
332
+ - Confirmed that previously removed/legacy features remain out of scope, keeping focus on decision history and constraint rules
333
+
334
+ > Note: v4.0.0 is primarily a **concept and documentation alignment release**. Core Decision/Constraint features and the v3.9.x database schema remain compatible; no breaking API changes were introduced for existing integrations.
335
+
336
+ ---
337
+
338
+ ## [3.9.0] - 2025-01-15
339
+
340
+ ### Added
341
+
342
+ **🎯 Decision Intelligence System with Three-Tier Similarity Detection**
343
+
344
+ **New `suggest` Tool:**
345
+ - **by_key** - Pattern-based decision search (e.g., "api/*/latency" finds all API latency decisions)
346
+ - **by_tags** - Tag similarity scoring for related decisions (Jaccard similarity)
347
+ - **by_context** - Combined key + tags + layer search for best matches
348
+ - **check_duplicate** - Duplicate decision detection with similarity scoring (0-100 points)
349
+
350
+ **Three-Tier Duplicate Detection (Auto-Triggered):**
351
+ - **Tier 1 (35-44 points):** Gentle nudge - Non-blocking warning with suggestions
352
+ - **Tier 2 (45-59 points):** Hard block - Prevents creation, requires explicit override or update
353
+ - **Tier 3 (60+ points):** Auto-update - Transparently updates existing decision, preserves new value
354
+
355
+ **Similarity Scoring Algorithm:**
356
+ - Tag overlap: 0-40 points (10 per matching tag, max 4)
357
+ - Layer match: 0-25 points (same layer bonus)
358
+ - Key similarity: 0-20 points (pattern + Levenshtein distance)
359
+ - Recency: 0-10 points (recent updates prioritized)
360
+ - Priority: 0-5 points (critical decisions weighted)
361
+
362
+ **Policy-Based Auto-Triggering:**
363
+ - Suggestions automatically triggered when policies have `suggest_similar=1`
364
+ - Integrated with `decision.set` - returns suggestions in response
365
+ - Configurable relevance threshold via `min_score` parameter (default: 30)
366
+ - Policy validation rules support for targeted auto-triggering
367
+
368
+ **Enhanced Decision Metadata:**
369
+ - `duplicate_reason` - Similarity explanation with matched tags and layer info
370
+ - `update_command` - Ready-to-use command for updating existing decisions
371
+ - `version_info` - Existing decision version tracking
372
+ - `auto_updated` flag - Indicates Tier 3 transparent updates
373
+
374
+ **Supporting Features:**
375
+ - Tag parser utility (`src/utils/tag-parser.ts`) for flexible tag handling
376
+ - Policy validation integration (`src/utils/policy-validator.ts`)
377
+ - Suggestion scorer (`src/utils/suggestion-scorer.ts`) with breakdown
378
+ - Self-exclusion logic (prevents matching against own key during updates)
379
+
380
+ ### Fixed
381
+
382
+ **PostgreSQL Cross-Database Compatibility**
383
+ - Fixed CAST type mismatch in `v_tagged_decisions` view export
384
+ - PostgreSQL now correctly handles `COALESCE(TEXT, NUMERIC)` with `CAST(value AS TEXT)`
385
+ - MySQL/MariaDB use `CAST(value AS CHAR)` for compatibility
386
+ - Migration: `20251114000000_fix_v_tagged_decisions_numeric_support.ts`
387
+ - SQL dump export: Enhanced view conversion in `src/utils/sql-dump/schema/views.ts`
388
+ - Result: All 20 cross-database tests passing (MySQL, MariaDB, PostgreSQL)
389
+
390
+ **Test Suite Improvements**
391
+ - Fixed FK constraint cleanup order in `decision-intelligence-e2e.test.ts`
392
+ - Child records now deleted before parent records (tags → scopes → context → decisions)
393
+ - Result: 3/3 e2e workflow tests passing, no cleanup errors
394
+
395
+ **Schema Fixes**
396
+ - Migration `20251112000001_fix_task_file_links_schema_v3_9_0.ts` - Fixed UNIQUE constraint
397
+ - Migration `20251112000002_fix_task_pruned_files_schema_v3_9_0.ts` - Enhanced task file tracking
398
+ - All migrations idempotent with existence checks
399
+
400
+ ### Changed
401
+
402
+ **Test Organization (Docker Dependency Separation)**
403
+ - Moved 7 Docker-dependent tests to `src/tests/docker/` directory
404
+ - `npm test` now runs 481 unit tests without Docker (0 failures)
405
+ - `npm run test:docker` runs cross-database tests (requires Docker containers)
406
+ - Removed `test:all` script (caused database conflicts)
407
+ - Updated `.husky/pre-commit` to reflect test separation
408
+ - Decision documented in SQLew: `test-organization-docker-separation`
409
+
410
+ **Git Hook Enhancement**
411
+ - Pre-commit hook now checks for **PUSHED** migration files instead of just committed
412
+ - Auto-detects remote branch (origin/main, origin/master, origin/dev)
413
+ - Allows editing locally committed migrations (not yet pushed)
414
+ - Prevents editing migrations that exist in remote
415
+ - Graceful fallback for local-only repositories
416
+
417
+ **Debug Output Cleanup**
418
+ - Commented out scope validation warnings in test output
419
+ - Removed DEBUG/DIAGNOSTIC console.log statements
420
+ - Cleaner test output focusing on actual results
421
+ - 75% reduction in test output verbosity
422
+
423
+ ### Removed
424
+
425
+ **Code Cleanup**
426
+ - Deleted monolithic `src/utils/sql-dump.ts` (-1,799 lines)
427
+ - Functionality now in modular structure:
428
+ - `src/utils/sql-dump/schema/tables.ts`
429
+ - `src/utils/sql-dump/schema/views.ts`
430
+ - `src/utils/sql-dump/schema/primary-keys.ts`
431
+ - `src/utils/sql-dump/schema/indexes.ts`
432
+ - Deleted test tracking files (`test-tracking/file1.ts`, etc.)
433
+
434
+ ### Documentation
435
+
436
+ - Updated `CLAUDE.md` - Changed policy from "NEVER EDIT COMMITTED" to "NEVER EDIT PUSHED"
437
+ - Created `STAGED_CHANGES_SUMMARY.md` - Comprehensive v3.9.0 change summary
438
+ - Created `NEW_TOOL_DESCRIPTION.md` - Suggest tool reference
439
+
440
+ ### Performance
441
+
442
+ - Enhanced file pruning logic (`src/utils/file-pruning.ts`)
443
+ - Improved VCS adapter file status tracking (`src/utils/vcs-adapter.ts`)
444
+ - Better task stale detection (`src/utils/task-stale-detection.ts`)
445
+ - Activity logging enhancements for suggestion tracking
446
+
447
+ ### Testing
448
+
449
+ **Test Results:**
450
+ - **495/495 tests passing (100%)** - Production-ready
451
+ - Tier 1 (Gentle Nudge): 5/5 tests passing
452
+ - Tier 2 (Hard Block): 2/2 tests passing
453
+ - Tier 3 (Auto-Update): 3/3 tests passing
454
+ - ✅ Auto-trigger suggestions: 4/4 tests passing
455
+ - ✅ Edge cases and error handling: All passing
456
+ - 20/20 cross-database tests passing (MySQL, MariaDB, PostgreSQL)
457
+ - 7 Docker test suites in separate directory
458
+
459
+ **Test Suite Enhancements:**
460
+ - AI-optimized quiet mode (80-90% token reduction, shows only failures + summary)
461
+ - Verbose mode available with `:verbose` suffix (e.g., `npm run test:verbose`)
462
+ - Cross-platform filter script (`scripts/filter-test-output.js`)
463
+ - Comprehensive three-tier similarity detection test coverage
464
+
465
+ **Coverage:**
466
+ - Overall: 64.85% line coverage
467
+ - All critical paths tested
468
+ - Zero flaky tests
469
+
470
+ ### Migration Notes
471
+
472
+ **Backward Compatibility:**
473
+ - v3.9.0 is fully backward compatible with v3.8.x
474
+ - No breaking changes
475
+ - Automatic migration on server startup
476
+
477
+ **Database Changes:**
478
+ - 3 new enhancement migrations (all idempotent)
479
+ - Schema changes apply automatically
480
+ - Safe to rollback by restoring backup
481
+
482
+ **Files Changed:**
483
+ - 50 files modified
484
+ - 1,857 insertions, 2,096 deletions
485
+ - Net: -239 lines (code reduction through refactoring)
486
+
487
+ ---
488
+
489
+ ## [3.8.1] - 2025-11-11
490
+
491
+ ### Fixed
492
+
493
+ **Critical Installation Bug**
494
+
495
+ - Fixed `npm error Invalid Version:` error when installing sqlew@3.8.0
496
+ - Changed `@modelcontextprotocol/sdk` dependency from `"latest"` to `"^1.21.1"` in package.json
497
+ - The `"latest"` tag is not a valid semver version for published packages and caused npm dependency resolution to fail
498
+ - This is a **hotfix release** that resolves installation issues preventing users from using v3.8.0
499
+
500
+ **Impact:**
501
+ - All users experiencing `Invalid Version:` errors when running `npx sqlew` can now install successfully
502
+ - No functional changes from v3.8.0 - only dependency version fix
503
+
504
+ ---
505
+
506
+ ## [3.8.0] - 2025-11-09
507
+
508
+ ### BREAKING CHANGES
509
+
510
+ **Batch Action Naming Standardization**
511
+
512
+ `task.batch_create` has been renamed to `task.create_batch` to follow the `<verb>_batch` naming pattern used by other batch actions (`set_batch`, `record_batch`).
513
+
514
+ **Migration Required:**
515
+ ```typescript
516
+ // Old (v3.7.x and earlier)
517
+ task({ action: "batch_create", tasks: [...] })
518
+
519
+ // New (v3.8.0+)
520
+ task({ action: "create_batch", tasks: [...] })
521
+ ```
522
+
523
+ **Rationale:**
524
+ - Achieves 100% consistency across all batch actions
525
+ - Improves alphabetical sorting in IDE auto-completion (create → create_batch)
526
+ - Aligns with industry standard (REST APIs, GraphQL, ORMs use suffix pattern)
527
+ - See docs/ADR-batch-naming-standard.md for full justification
528
+
529
+ **Impact:**
530
+ - All code using `task.batch_create` must update to `task.create_batch`
531
+ - Simple find-replace migration (estimated 2-5 minutes per integration)
532
+ - No database schema changes required
533
+
534
+ ### Removed
535
+
536
+ **Config Tool Removed (Phase 6)**
537
+
538
+ The orphaned config tool has been removed in favor of CLI-only configuration:
539
+
540
+ - **Deleted**: `src/tools/config.ts` (307 lines)
541
+ - **Removed**: `ConfigAction` type from `src/types.ts` and `src/types/actions.ts`
542
+ - **Removed**: ConfigAction import from `src/utils/parameter-validator.ts`
543
+ - **Updated**: README.md with CLI-only config approach documentation
544
+ - **Updated**: docs/CONFIGURATION.md already documented config tool removal
545
+
546
+ **Why removed:**
547
+ - Config tool was never registered in `tool-registry.ts` (orphaned code)
548
+ - Messaging system deprecated (primary use case eliminated)
549
+ - File-based configuration (`.sqlew/config.toml`) is clearer and more maintainable
550
+ - Runtime updates were confusing (changes lost on restart unless manually synced to file)
551
+ - Configuration drift between `m_config` table and config file
552
+
553
+ **Migration Path:**
554
+ - **Use `.sqlew/config.toml`** for all configuration (persistent, version-controlled)
555
+ - **Use CLI arguments** for one-time overrides (`--autodelete-message-hours=48`)
556
+ - ✅ **Internal config operations** preserved (`src/database/config/config-ops.ts`)
557
+ - ✅ **m_config table** preserved (used internally by retention logic)
558
+
559
+ **Impact:**
560
+ - Cleaner codebase with ~300 lines removed
561
+ - No functional impact - tool was never registered
562
+ - Configuration via file and CLI arguments only
563
+
564
+ **Message Tool Completely Removed**
565
+
566
+ The deprecated message tool has been completely removed from the codebase:
567
+
568
+ - **Deleted**: `src/tools/messaging.ts` (599 lines)
569
+ - **Removed**: Message tool entry from `tool-registry.ts`
570
+ - **Removed**: Message tool handler from `tool-handlers.ts`
571
+ - **Removed**: Message imports from `cli.ts`
572
+ - **Updated**: `MessageAction` type changed to `never` (backward compatibility stub)
573
+ - **CLI**: `sqlew query messages` now returns error message
574
+
575
+ **Migration Path**:
576
+ - No action required - messaging system was already marked deprecated in v3.6.6
577
+ - The `t_agent_messages` table was dropped in v3.6.6
578
+ - All message tool actions returned deprecation warnings since v3.6.6
579
+
580
+ **Impact**:
581
+ - Cleaner codebase with ~700 lines removed
582
+ - No functional impact - messaging system was unused
583
+ - MessageAction type remains as deprecated stub for backward compatibility
584
+
585
+ ### Added
586
+
587
+ **Layer Expansion (59 layers)**
588
+
589
+ Added 4 new layers to enable better task classification and semantic validation:
590
+
591
+ **New FILE_REQUIRED layers:**
592
+ - `documentation` - README, CHANGELOG, API docs, architecture docs (file_actions required)
593
+
594
+ **New FILE_OPTIONAL layers:**
595
+ - `planning` - Research, spike tasks, investigation (file_actions optional)
596
+ - `coordination` - Multi-agent orchestration, task delegation (file_actions optional)
597
+ - `review` - Code review, design review, verification (file_actions optional)
598
+
599
+ **Existing layers** (5→6 FILE_REQUIRED):
600
+ - presentation, business, data, infrastructure, cross-cutting (file_actions required or empty array)
601
+
602
+ **Benefits:**
603
+ - Documentation layer enforces file operations for docs work
604
+ - Planning layers allow pure research tasks without file boilerplate
605
+ - Better semantic task classification across the development lifecycle
606
+
607
+ **file_actions Parameter for Tasks**
608
+
609
+ Introduced semantic `file_actions` parameter to replace generic `watch_files`:
610
+
611
+ ```typescript
612
+ // New file_actions parameter
613
+ task.create({
614
+ title: "Implement OAuth",
615
+ layer: "business",
616
+ file_actions: [
617
+ { action: "create", path: "src/auth/oauth.ts" },
618
+ { action: "edit", path: "src/api/router.ts" },
619
+ { action: "delete", path: "src/auth/legacy.ts" }
620
+ ]
621
+ });
622
+
623
+ // Backward compatible - watch_files still works
624
+ task.create({
625
+ title: "Update config",
626
+ layer: "infrastructure",
627
+ watch_files: ["config.toml"] // Auto-converts to file_actions
628
+ });
629
+ ```
630
+
631
+ **Layer-Based Validation:**
632
+ - FILE_REQUIRED layers (6) → Must provide `file_actions` or `[]`
633
+ - FILE_OPTIONAL layers (3) → Can omit `file_actions` entirely
634
+ - Clear error messages with layer-specific guidance
635
+
636
+ **Benefits:**
637
+ - Self-documenting: `action: 'create'` vs `action: 'edit'` shows intent
638
+ - Prevents forgotten file watchers (validation enforced)
639
+ - No boilerplate for planning tasks (can omit parameter)
640
+ - Better token efficiency with automatic file watching
641
+
642
+ **PostgreSQL Adapter Implementation**
643
+
644
+ Full PostgreSQL 12+ support with complete adapter implementation:
645
+
646
+ **Adapter Features:**
647
+ - All 15 abstract methods implemented (`insertReturning`, `upsert`, `jsonExtract`, etc.)
648
+ - PostgreSQL-specific SQL syntax (RETURNING, ON CONFLICT, string_agg)
649
+ - Strict type handling (TRUE/FALSE for booleans, not 1/0)
650
+ - Timezone-aware timestamp functions
651
+ - Transaction support with savepoints
652
+
653
+ **Migration Compatibility:**
654
+ - All 22 migrations tested and verified on PostgreSQL 16.10
655
+ - Cross-database helper functions for view creation
656
+ - Proper CASCADE handling for foreign key dependencies
657
+ - Sequence management after explicit ID inserts
658
+ - GROUP BY strictness compliance
659
+
660
+ **Supported Databases:**
661
+ - SQLite 3.x (default, development)
662
+ - MySQL 8.0 / MariaDB 10+ (production)
663
+ - PostgreSQL 12+ (production) ✨ NEW
664
+
665
+ **Configuration:**
666
+ ```toml
667
+ [database]
668
+ type = "postgres"
669
+
670
+ [database.connection]
671
+ host = "localhost"
672
+ port = 5432
673
+ database = "sqlew_db"
674
+
675
+ [database.auth]
676
+ type = "direct"
677
+ user = "sqlew_user"
678
+ password = "secret"
679
+ ```
680
+
681
+ ### Fixed
682
+
683
+ **Batch Action Parameter Parsing**
684
+
685
+ Fixed MCP client array serialization issue affecting all batch actions:
686
+
687
+ **Problem:** MCP client serializes array parameters as JSON strings:
688
+ ```typescript
689
+ // MCP sends:
690
+ decisions: "[{\"key\": \"test\", \"value\": \"val\"}]" // String!
691
+
692
+ // Expected:
693
+ decisions: [{key: "test", value: "val"}] // Array
694
+ ```
695
+
696
+ **Solution:** Added JSON parsing in `tool-handlers.ts` for all batch actions:
697
+ - `decision.set_batch` - parse `decisions` parameter
698
+ - `file.record_batch` - parse `file_changes` parameter
699
+ - `task.create_batch` - parse `tasks` parameter
700
+
701
+ **Impact:** All batch actions now work correctly with array parameters from MCP client.
702
+
703
+ **Help System Synchronization**
704
+
705
+ Fixed critical bug where help database was severely out of sync with code:
706
+
707
+ **Problem:** 25 actions missing from `m_help_actions` table, causing help system to lie about available actions.
708
+
709
+ **Missing Actions:**
710
+ - decision: 9 actions (quick_set, search_advanced, set_batch, has_updates, etc.)
711
+ - task: 14 actions (update, get, list, move, link, archive, create_batch, etc.)
712
+ - constraint: 1 action (use_case)
713
+
714
+ **Solution:** Created migration `20251109020000_fix_missing_help_actions_v3_8_0.ts` to:
715
+ - Add all 25 missing actions with correct descriptions
716
+ - Idempotent checks to prevent duplicates
717
+ - Full synchronization between code and database
718
+
719
+ **Impact:** Help system now accurately reports all available actions.
720
+
721
+ ### Changed
722
+
723
+ **Tool Registry Schema Fix**
724
+
725
+ Added `additionalProperties: true` to all tool schemas in `tool-registry.ts`:
726
+
727
+ **Problem:** MCP couldn't pass action-specific parameters (key, value, tags, etc.) because schemas only defined `action` property.
728
+
729
+ **Solution:**
730
+ ```typescript
731
+ {
732
+ name: 'decision',
733
+ inputSchema: {
734
+ type: 'object',
735
+ properties: {
736
+ action: { ... }
737
+ },
738
+ required: ['action'],
739
+ additionalProperties: true, // ← CRITICAL FIX
740
+ },
741
+ }
742
+ ```
743
+
744
+ **Impact:** All MCP tools now accept action-specific parameters correctly.
745
+
746
+ ---
747
+
748
+ ## [3.7.4] - 2025-11-08
749
+
750
+ ### Added - Complete JSON Import/Export System
751
+
752
+ **Full-featured data migration system with smart ID remapping and dependency resolution**
753
+
754
+ #### New Features
755
+
756
+ - **db:import CLI Command** - Import project data from JSON exports with automatic ID remapping
757
+ - Smart conflict detection (skip-if-exists, project-name override)
758
+ - Dry-run mode for validation before import
759
+ - Comprehensive error messages with validation details
760
+ - **Topological Sort Algorithm** - Resolves task dependencies during import
761
+ - Circular dependency detection prevents import of invalid dependency graphs
762
+ - BFS-based topological sorting ensures dependencies imported before dependents
763
+ - Preserves all task relationships and blocking constraints
764
+ - **Smart ID Remapping** - Handles complex foreign key relationships
765
+ - Master table merge logic (reuse existing entries by name/path)
766
+ - Transaction table ID translation with bidirectional mapping
767
+ - Junction table relationship preservation
768
+ - Automatic orphan cleanup for invalid references
769
+
770
+ #### Import System Architecture
771
+
772
+ - **4 Core Modules**:
773
+ 1. `import.ts` - Main orchestrator with transaction management
774
+ 2. `master-tables.ts` - Master table merge logic (m_files, m_tags, m_scopes, etc.)
775
+ 3. `topological-sort.ts` - Dependency graph analysis and sorting
776
+ 4. `db-import.ts` - CLI command with argument parsing and validation
777
+
778
+ #### Data Migration Strategy
779
+
780
+ - **ID Remapping**: All imported data gets fresh auto-incremented IDs (no ID preservation)
781
+ - **Master Table Deduplication**: Reuse existing entries for agents, tags, scopes, files by name/path
782
+ - **Transaction Atomicity**: All-or-nothing semantics (full rollback on any error)
783
+ - **Project Isolation**: Each import creates independent project with no cross-contamination
784
+
785
+ #### CLI Examples
786
+
787
+ ```bash
788
+ # Import project from JSON export
789
+ npx sqlew db:import --source=project-backup.json
790
+
791
+ # Import with custom project name
792
+ npx sqlew db:import --source=data.json --project-name=my-project
793
+
794
+ # Dry-run validation (no actual import)
795
+ npx sqlew db:import --source=data.json --dry-run
796
+
797
+ # Export project for migration
798
+ npx sqlew db:export --project=visualizer --output=visualizer-data.json
799
+ ```
800
+
801
+ #### Technical Details
802
+
803
+ - **Batch Inserts** - 10-row batches to avoid SQLite UNION ALL limits
804
+ - **Foreign Key Validation** - Validates all foreign key references before insertion
805
+ - **View Handling** - Temporarily drops/restores views during schema changes
806
+ - **Idempotent Operations** - Safe to retry on failure
807
+ - **Error Recovery** - Detailed error messages with validation guidance
808
+
809
+ #### Use Cases
810
+
811
+ - **Multi-Project Single Database** - Consolidate multiple projects when database creation permissions are limited
812
+ - **Project Sharing** - Share context with team members or between machines
813
+ - **Cross-Database Migration** - Move projects between different databases (different machine, SQLite → MySQL, etc.)
814
+
815
+ **Note**: Import uses `--skip-if-exists=true` by default. This is NOT a backup/restore solution for the same database.
816
+ Use database-level backups (SQLite file copy, MySQL dump) for backup/restore scenarios.
817
+
818
+ #### Impact
819
+
820
+ - ✅ **Complete migration solution** - Export from one database, import to another
821
+ - **Multi-project support** - Merge multiple project exports into single database
822
+ - **Permission-friendly** - Works for users who can't create multiple databases
823
+ - **Data integrity** - Zero data loss, all relationships preserved
824
+ - **Production ready** - Comprehensive error handling and validation
825
+ - **Cross-database compatible** - JSON format works across SQLite, MySQL, PostgreSQL
826
+
827
+ ---
828
+
829
+ ### Fixed - Multi-Project Migration (HOTFIX)
830
+
831
+ **Critical fix for v3.7.0-v3.7.2 migration in multi-project scenarios**
832
+
833
+ #### Problem
834
+
835
+ - Users upgrading from v3.6.10 to v3.7.0+ could end up with duplicate projects
836
+ - Migration 20251104000000 created project #1 with fake name "default-project"
837
+ - Users creating second project manually resulted in namespace conflicts
838
+
839
+ #### Solution
840
+
841
+ - Enhanced migration idempotency checks
842
+ - Improved project consolidation logic
843
+ - Better handling of existing project scenarios
844
+
845
+ #### Impact
846
+
847
+ - ✅ **Safe multi-project migration** - No duplicate projects created
848
+ - ✅ **Backward compatible** - Works for both fresh installs and upgrades
849
+ - ✅ **Data preservation** - All existing data maintained correctly
850
+
851
+ ---
852
+
853
+ ## [3.7.3] - 2025-11-06
854
+
855
+ ### Fixed - Master Tables Namespace Collision Bug
856
+
857
+ **Critical bug fix for incomplete multi-project support in v3.7.0-v3.7.2**
858
+
859
+ #### Problem
860
+ - Master tables (m_files, m_tags, m_scopes) lacked `project_id` columns in v3.7.0-v3.7.2
861
+ - This caused **namespace collisions** where identical file paths/tag names/scope names from different projects would conflict
862
+ - Example: "src/index.ts" from ProjectA would collide with ProjectB's "src/index.ts"
863
+ - Users upgrading from v3.6.x would have fake project name "default-project" instead of detected real name
864
+
865
+ #### Solution
866
+ - **20251106000000_fix_master_tables_project_id_v3_7_3.ts** - Comprehensive migration that:
867
+ 1. **Data Consolidation** - Detects v3.7.0-v3.7.2 upgrade scenario and consolidates project #2 data into project #1
868
+ 2. **Project Rename** - Renames fake "default-project" to real detected name (from config.toml/git remote/directory)
869
+ 3. **Schema Fix** - Adds `project_id` column to m_files, m_tags, m_scopes with composite UNIQUE constraints
870
+ 4. **Data Migration** - Maps all existing master table data to default project (ID 1)
871
+ 5. **Orphan Cleanup** - Filters out 95 orphaned foreign key references (deleted tasks/tags)
872
+ 6. **View Restoration** - Temporarily drops and restores 4 views during migration
873
+ 7. **Table Restoration** - Backs up and restores 6 referencing tables with updated foreign keys
874
+
875
+ #### Migration Details
876
+ - **Idempotent** - Can run multiple times safely (checks for existing columns)
877
+ - **Version-Aware** - Only consolidates data for v3.7.0-v3.7.2 databases (detects fake project names)
878
+ - **Batch Inserts** - Uses 10-row batches to avoid SQLite UNION ALL limits
879
+ - **FK Filtering** - Validates foreign key references before restoration to prevent constraint errors
880
+ - **SQLite-Optimized** - Handles better-sqlite3 FK constraint behavior during table drops
881
+
882
+ #### Technical Changes
883
+ - **m_files**: Added `project_id` column, changed UNIQUE constraint from `(path)` to `(project_id, path)`
884
+ - **m_tags**: Added `project_id` column, changed UNIQUE constraint from `(name)` to `(project_id, name)`
885
+ - **m_scopes**: Added `project_id` column, changed UNIQUE constraint from `(name)` to `(project_id, name)`
886
+ - **Referencing Tables**: Updated t_file_changes, t_task_file_links, t_decision_tags, t_task_tags, t_constraint_tags, t_decision_scopes
887
+ - **Views**: Restored v_layer_summary, v_task_board, v_tagged_decisions, v_tagged_constraints
888
+
889
+ #### Impact
890
+ - **Fixed namespace collisions** - Files/tags/scopes from different projects can now have identical names
891
+ - **Data integrity** - All existing data preserved and mapped correctly
892
+ - **Project consolidation** - v3.7.0-v3.7.2 users get clean migration path
893
+ - ✅ **Real project names** - No more fake "default-project" names
894
+ - ✅ **Orphan cleanup** - Removed invalid foreign key references automatically
895
+ - **Full idempotency** - Migration can be safely re-run if interrupted
896
+
897
+ #### Testing
898
+ - ✅ Tested on actual v3.7.2 production database (mcp-sqlew project)
899
+ - ✅ Successfully consolidated 77 decisions, 191 tasks, 61 file changes
900
+ - ✅ Filtered 95 orphaned task-tag references
901
+ - ✅ All views and referencing tables restored correctly
902
+ - ✅ Final database state validated with composite UNIQUE constraints working
903
+
904
+ ---
905
+
906
+ ## [3.7.2] - 2025-11-05
907
+
908
+ ### Changed - Enhanced Sub-Agent Templates
909
+
910
+ **Improved specialized agent templates for more efficient sqlew usage**
911
+
912
+ #### Sub-Agent Template Updates
913
+ - **sqlew-scrum-master.md** - Enhanced multi-agent coordination and task management workflows
914
+ - **sqlew-researcher.md** - Improved decision querying and context analysis patterns
915
+ - **sqlew-architect.md** - Enhanced decision documentation and constraint enforcement workflows
916
+
917
+ #### New Documentation
918
+ - Installation and configuration instructions
919
+ - Usage examples for each agent
920
+ - Token optimization guidelines
921
+ - Agent comparison and capability matrix
922
+ - Integration patterns
923
+ - Troubleshooting guide
924
+
925
+ #### SQL Dump Enhancements
926
+ - Added type conversion testing (`src/tests/type-conversion.test.ts`)
927
+ - Enhanced SQL dump converters for better type handling
928
+ - Improved SQL dump utilities with expanded functionality
929
+
930
+ ### Fixed - Git LFS PNG Display Issue
931
+
932
+ **Removed Git LFS tracking for PNG files to fix GitHub display**
933
+
934
+ #### Problem
935
+ - PNG files were tracked with Git LFS, causing display issues on GitHub
936
+ - Users without Git LFS saw ASCII pointers instead of images
937
+ - README images were not rendering properly
938
+
939
+ #### Solution
940
+ - Removed `*.png filter=lfs diff=lfs merge=lfs -text` from .gitattributes
941
+ - Restored actual PNG binary files from pre-LFS commits
942
+ - All PNG images now display correctly on GitHub without requiring Git LFS
943
+
944
+ #### Impact
945
+ - **Better agent templates** - More efficient sqlew usage patterns
946
+ - **Comprehensive documentation** - Clear installation and usage guides
947
+ - **Improved type handling** - Better SQL dump type conversion
948
+ - **Fixed GitHub display** - PNG images now render properly without Git LFS
949
+ - **Token efficient** - Optimized agent workflows reduce unnecessary tool calls
950
+
951
+ ---
952
+
953
+ ## [3.7.1] - 2025-11-05
954
+
955
+ ### Fixed - Error Message Visibility
956
+
957
+ **Fixed validation error messages being hidden by error wrapper**
958
+
959
+ #### Problem
960
+ - Validation errors (JSON-structured responses) were being wrapped with stack traces
961
+ - Wrong-usage messages were hidden from MCP clients
962
+ - Users received generic error messages instead of helpful validation details
963
+
964
+ #### Solution
965
+ - **Error Handler Enhancement** - Detect and unwrap JSON validation errors
966
+ - Validation errors now returned directly to MCP client without wrapping
967
+ - Stack traces written to logs only (not returned to client)
968
+ - Token-efficient responses without exposing internal stack details
969
+ - **Parameter Validator Enhancement** - Detect unexpected/invalid parameters
970
+ - Added validation for parameters that don't match valid list and have no typo suggestion
971
+ - Improved error messages: "Unexpected params: X. Valid params: Y, Z"
972
+
973
+ #### Impact
974
+ - ✅ **Better UX** - Validation errors are now visible and actionable
975
+ - ✅ **Token efficiency** - No stack traces in MCP responses
976
+ - **Clearer feedback** - Users see helpful error messages immediately
977
+ - ✅ **Security** - Internal stack details not exposed to clients
978
+
979
+ ---
980
+
981
+ ## [3.7.0] - 2025-11-05
982
+
983
+ ### Added - Runtime Database Reconnection
984
+
985
+ **Automatic connection recovery with exponential backoff retry logic**
986
+
987
+ #### Features
988
+ - **ConnectionManager** - Singleton wrapper for all database operations
989
+ - **Exponential Backoff** - Retry delays: 1s → 2s → 4s → 8s → 16s (31 seconds total)
990
+ - **Smart Error Detection** - Recognizes connection errors across SQLite, MySQL, PostgreSQL
991
+ - **Process.exit on Exhaustion** - Exits cleanly after 5 failed retries
992
+ - **27 Operations Wrapped** - All transactional operations protected:
993
+ - context.ts: 5 operations
994
+ - tasks.ts: 9 operations
995
+ - files.ts: 3 operations
996
+ - constraints.ts: 3 operations
997
+ - config.ts: 2 operations
998
+ - utils.ts: 5 operations
999
+
1000
+ #### Connection Error Patterns Detected
1001
+ - **Network Errors**: ECONNREFUSED, ENOTFOUND, ETIMEDOUT, ECONNRESET, EPIPE
1002
+ - **SQLite**: "database is locked", "unable to open database"
1003
+ - **MySQL/MariaDB**: "server has gone away", "lost connection to mysql server"
1004
+ - **PostgreSQL**: "connection to server was lost", "could not connect to server"
1005
+ - **Knex-specific**: "timeout acquiring a connection", "pool is destroyed"
1006
+
1007
+ #### Test Coverage
1008
+ - **41 tests passing** (22 unit + 19 integration)
1009
+ - Retry behavior verification
1010
+ - Production scenario simulation (server restart, network failures)
1011
+ - Tool integration testing
1012
+
1013
+ #### Impact
1014
+ - ✅ **Resilient operations** - Automatic recovery from transient connection failures
1015
+ - **Production ready** - Handles server restarts, network issues
1016
+ - ✅ **Zero regressions** - All existing tests pass
1017
+ - ✅ **Token efficient** - No manual retry logic needed in agent code
1018
+
1019
+ ---
1020
+
1021
+ ### Changed - Validation Error Messages
1022
+
1023
+ **70-85% token reduction in error message size**
1024
+
1025
+ #### Token Efficiency
1026
+ - **Before**: ~1000+ characters (~300+ tokens) with full examples embedded
1027
+ - **After**: ~200 characters (~50 tokens) with reference IDs
1028
+ - **Reduction**: 70-85% token savings
1029
+
1030
+ #### New Error Format
1031
+ ```json
1032
+ {
1033
+ "error": "Missing: key, value",
1034
+ "action": "set",
1035
+ "reference": "decision.set",
1036
+ "missing": ["key", "value"],
1037
+ "hint": "Use 'quick_set' for simpler usage..."
1038
+ }
1039
+ ```
1040
+
1041
+ #### Features
1042
+ - **Reference IDs** - Compact `{tool}.{action}` format (e.g., "decision.set")
1043
+ - **Concise Messages** - Essential information only
1044
+ - **Conditional Fields** - Only include fields when present
1045
+ - **Self-Documenting** - AI can query `action: "help"` for full docs if needed
1046
+
1047
+ #### Error Types
1048
+ - Missing params: `"Missing: key, value"`
1049
+ - Typos: `"Invalid params: val → value"`
1050
+ - Unknown action: `"Unknown action 'sett'. Did you mean: set?"`
1051
+
1052
+ #### Impact
1053
+ - **Token efficiency** - 70-85% reduction in error size
1054
+ - **Cost reduction** - Lower API costs for AI agents
1055
+ - **Better UX** - Quick, scannable errors
1056
+ - ✅ **Backward compatible** - Error structure unchanged
1057
+
1058
+ ---
1059
+
1060
+ ### Changed - Debug Log Format
1061
+
1062
+ **Single-line log entries for easier parsing**
1063
+
1064
+ #### Problem
1065
+ Multi-line log messages broke standard text processing tools (grep, awk, log rotation).
1066
+
1067
+ #### Solution
1068
+ - **Sanitization Function** - Replaces newlines with spaces, collapses whitespace
1069
+ - **Applied To**: All log messages, data values, JSON output
1070
+ - **Result**: Every log entry is exactly one line
1071
+
1072
+ #### Benefits
1073
+ - ✅ **Easier parsing** - Line-based tools work correctly
1074
+ - **Better grep** - Search across entire messages
1075
+ - **Simpler analysis** - Standard text processing
1076
+ - ✅ **Cleaner output** - No unexpected line breaks
1077
+
1078
+ #### Example
1079
+ **Before:**
1080
+ ```
1081
+ [2025-11-05T02:00:00.000Z] [ERROR] Error details:
1082
+ Stack trace line 1
1083
+ Stack trace line 2
1084
+ ```
1085
+
1086
+ **After:**
1087
+ ```
1088
+ [2025-11-05T02:00:00.000Z] [ERROR] Error details: Stack trace line 1 Stack trace line 2
1089
+ ```
1090
+
1091
+ ---
1092
+
1093
+ ### Changed - Specialized Agent Templates (Error Prevention)
1094
+
1095
+ **Restructured agent templates to reduce tool call errors from 60% to <10%**
1096
+
1097
+ #### Problem
1098
+ - 60% of agent errors: missing `action` parameter in tool calls
1099
+ - Templates embedded outdated action samples that became obsolete
1100
+ - Agents guessed syntax instead of using discovery workflow
1101
+
1102
+ #### Solution
1103
+ All three agent templates restructured with error-prevention focus:
1104
+ - **sqlew-architect.md** - Decision documentation specialist
1105
+ - **sqlew-researcher.md** - Context analysis specialist
1106
+ - **sqlew-scrum-master.md** - Sprint coordination specialist
1107
+
1108
+ #### Key Improvements
1109
+ - ⚠️ **Prominent Error-Prevention Section** - "CRITICAL: Error-Free sqlew Tool Usage" at top
1110
+ - 📚 **Discovery-First Workflow** - Guides agents: `action: "help"` `action: "example"` → copy/modify
1111
+ - ❌✅ **Zero-Error Pattern** - Clear WRONG/CORRECT examples for every common mistake:
1112
+ - Missing `action` parameter
1113
+ - Wrong data types (priority: string vs number)
1114
+ - Wrong parameter names (old v2.x API)
1115
+ - 🔍 **Pre-Execution Checklist** - Verify `action` parameter before every tool call
1116
+ - 🗑️ **No Embedded Samples** - Removed action lists to prevent outdated syntax
1117
+ - 🛠️ **Common Data Type Errors** - Shows tag arrays, boolean atomics, integer priorities
1118
+
1119
+ #### Upgrade Path
1120
+ **Note**: Existing `.claude/agents/` files NOT auto-upgraded (preserves customizations)
1121
+
1122
+ **Manual upgrade required**:
1123
+ ```bash
1124
+ # Remove old templates
1125
+ rm .claude/agents/sqlew-{architect,researcher,scrum-master}.md
1126
+
1127
+ # Restart MCP server (auto-copies new templates from assets/sample-agents/)
1128
+ ```
1129
+
1130
+
1131
+ #### Impact
1132
+ - ✅ **Target: 60% <10% error rate** for agent tool calls
1133
+ - ✅ **Better UX** - Clear guidance prevents common mistakes
1134
+ - ✅ **Self-Correcting** - Agents learn correct patterns from errors
1135
+ - ✅ **Future-Proof** - Discovery workflow adapts to API changes
1136
+
1137
+ ---
1138
+
1139
+ ### Fixed - Multi-Project Migration (Critical)
1140
+
1141
+ **Fixed migration for ALL users upgrading from v3.6.10 to v3.7.0**
1142
+
1143
+ #### Problem
1144
+ - SQLite's `ALTER TABLE` silently failed for 4 tables with complex foreign keys
1145
+ - Migration reported success but columns weren't added
1146
+ - Task creation would fail: `"table t_task_details has no column named project_id"`
1147
+
1148
+ #### Root Cause
1149
+ SQLite cannot modify tables with `ON DELETE CASCADE` constraints using ALTER TABLE.
1150
+
1151
+ #### Solution
1152
+ - **Table Recreation Strategy** - Backup → Drop → Recreate → Restore
1153
+ - **4 Tables Fixed**:
1154
+ - `t_task_details` (STEP 4.7)
1155
+ - `t_task_file_links` (STEP 4.8)
1156
+ - `t_task_decision_links` (STEP 4.9)
1157
+ - `t_task_tags` (composite PRIMARY KEY)
1158
+
1159
+ #### Idempotency
1160
+ All recreation steps check if `project_id` exists before executing:
1161
+ ```typescript
1162
+ const hasProjectId = await knex.schema.hasColumn('table_name', 'project_id');
1163
+ if (!hasProjectId) {
1164
+ // Recreation logic
1165
+ }
1166
+ ```
1167
+
1168
+ #### Data Preservation Verified
1169
+ - ✅ 223 task detail rows preserved
1170
+ - ✅ 632 task tag rows preserved
1171
+ - ✅ All task links preserved
1172
+ - ✅ 100% data integrity maintained
1173
+
1174
+ #### Testing
1175
+ - ✅ Fresh installation works
1176
+ - ✅ v3.6.10 → v3.7.0 upgrade works
1177
+ - ✅ Migration can be re-run safely (idempotent)
1178
+ - ✅ TypeScript compiles without errors
1179
+
1180
+ #### Impact
1181
+ - ✅ **Production ready** - Safe for all v3.6.10 users to upgrade
1182
+ - ✅ **No data loss** - All existing data preserved
1183
+ - ✅ **Idempotent** - Can re-run without errors
1184
+
1185
+ ---
1186
+
1187
+ ## [3.6.10] - 2025-10-30
1188
+
1189
+ ### Added - Environment Variable Support for Project Root
1190
+
1191
+ **New `SQLEW_PROJECT_ROOT` environment variable for project-relative databases**
1192
+
1193
+ #### Problem
1194
+ - Junie AI and other MCP clients require absolute paths in configuration
1195
+ - Users had to hardcode project-specific paths in MCP server config
1196
+ - No easy way to use project-relative database paths
1197
+
1198
+ #### Solution
1199
+ - Added `SQLEW_PROJECT_ROOT` environment variable support (inspired by serena-mcp pattern)
1200
+ - MCP clients can now pass project directory via environment variable
1201
+ - Database automatically created at `$SQLEW_PROJECT_ROOT/.sqlew/sqlew.db`
1202
+
1203
+ #### Priority Order
1204
+ 1. `SQLEW_PROJECT_ROOT` environment variable (NEW - highest priority)
1205
+ 2. `--db-path` CLI argument (absolute path)
1206
+ 3. `--config-path` CLI argument (absolute path)
1207
+ 4. `database.path` in config file (absolute path)
1208
+ 5. `process.cwd()` fallback
1209
+
1210
+ #### Junie AI Configuration Example
1211
+ ```json
1212
+ {
1213
+ "mcpServers": {
1214
+ "sqlew": {
1215
+ "command": "npx",
1216
+ "args": ["sqlew"],
1217
+ "env": {
1218
+ "SQLEW_PROJECT_ROOT": "{projectDir}"
1219
+ }
1220
+ }
1221
+ }
1222
+ }
1223
+ ```
1224
+
1225
+ **Note:** Junie AI uses `{projectDir}` variable which expands to the current project's absolute path. This ensures each project gets its own isolated database without hardcoded paths. Other MCP clients may use different variable names like `${workspaceFolder}` (VS Code/Cline) - check your client's documentation.
1226
+
1227
+ #### Impact
1228
+ - **Project-relative databases** without hardcoded absolute paths
1229
+ - **Cleaner MCP configuration** (no per-project path updates needed)
1230
+ - **Compatible with Junie AI, Claude Desktop, and other MCP clients**
1231
+ - ✅ **No breaking changes** (environment variable is optional)
1232
+
1233
+ ---
1234
+
1235
+ ### Fixed - MCP Protocol Compliance (EPIPE Fix)
1236
+
1237
+ **Eliminated console output for strict JSON-RPC protocol compliance**
1238
+
1239
+ #### Problem
1240
+ - EPIPE (broken pipe) errors when running with Junie AI on Windows
1241
+ - Console output to stdout/stderr violated MCP JSON-RPC protocol requirements
1242
+ - Strict MCP clients (like Junie AI) expect pure JSON-RPC on stdio streams
1243
+
1244
+ #### Changes
1245
+ - **Redirected all diagnostic output to debug log file** - stdout/stderr reserved exclusively for JSON-RPC
1246
+ - Modified `safeConsoleError()` to write to debug log instead of stderr
1247
+ - Replaced 50+ console.log/console.error calls across codebase:
1248
+ - `src/database.ts` - Database initialization messages
1249
+ - `src/watcher/file-watcher.ts` - File watcher status and events
1250
+ - `src/watcher/gitignore-parser.ts` - .gitignore loading warnings
1251
+ - `src/tools/tasks.ts` - Task file registration warnings
1252
+ - `src/config/example-generator.ts` - First launch messages
1253
+
1254
+ #### Technical Details
1255
+ - **MCP Protocol Requirement**: stdin/stdout/stderr must carry only JSON-RPC messages
1256
+ - **Debug Logging**: All diagnostic messages now use `debugLog()` with appropriate levels (INFO, WARN, ERROR)
1257
+ - **Zero stdout pollution**: Server starts silently, waits for JSON-RPC requests
1258
+ - **Tested with Junie AI**: Confirmed no EPIPE errors on Windows
1259
+
1260
+ #### Impact
1261
+ - ✅ **Works with strict MCP clients** (Junie AI, etc.)
1262
+ - ✅ **Maintains full diagnostics** via debug log file
1263
+ - ✅ **Pure JSON-RPC protocol** compliance
1264
+ - ✅ **No breaking changes** to MCP tool functionality
1265
+
1266
+ ---
1267
+
1268
+ ### Added - Environment Variable Support for Project Root
1269
+
1270
+ **New `SQLEW_PROJECT_ROOT` environment variable for project-relative databases**
1271
+
1272
+ #### Problem
1273
+ - Junie AI and other MCP clients require absolute paths in configuration
1274
+ - Users had to hardcode project-specific paths in MCP server config
1275
+ - No easy way to use project-relative database paths
1276
+
1277
+ #### Solution
1278
+ - Added `SQLEW_PROJECT_ROOT` environment variable support (inspired by serena-mcp pattern)
1279
+ - MCP clients can now pass project directory via environment variable
1280
+ - Database automatically created at `$SQLEW_PROJECT_ROOT/.sqlew/sqlew.db`
1281
+
1282
+ #### Priority Order
1283
+ 1. `SQLEW_PROJECT_ROOT` environment variable (NEW - highest priority)
1284
+ 2. `--db-path` CLI argument (absolute path)
1285
+ 3. `--config-path` CLI argument (absolute path)
1286
+ 4. `database.path` in config file (absolute path)
1287
+ 5. `process.cwd()` fallback
1288
+
1289
+ #### Junie AI Configuration Example
1290
+ ```json
1291
+ {
1292
+ "mcpServers": {
1293
+ "sqlew": {
1294
+ "command": "npx",
1295
+ "args": ["sqlew"],
1296
+ "env": {
1297
+ "SQLEW_PROJECT_ROOT": "{projectDir}"
1298
+ }
1299
+ }
1300
+ }
1301
+ }
1302
+ ```
1303
+
1304
+ **Note:** Junie AI uses `{projectDir}` variable which expands to the current project's absolute path. This ensures each project gets its own isolated database without hardcoded paths. Other MCP clients may use different variable names like `${workspaceFolder}` (VS Code/Cline) - check your client's documentation.
1305
+
1306
+ #### Impact
1307
+ - **Project-relative databases** without hardcoded absolute paths
1308
+ - **Cleaner MCP configuration** (no per-project path updates needed)
1309
+ - **Compatible with Junie AI, Claude Desktop, and other MCP clients**
1310
+ - ✅ **No breaking changes** (environment variable is optional)
1311
+
1312
+ ---
1313
+
1314
+ ### Fixed - MCP Protocol Compliance (EPIPE Fix)
1315
+
1316
+ **Eliminated console output for strict JSON-RPC protocol compliance**
1317
+
1318
+ #### Problem
1319
+ - EPIPE (broken pipe) errors when running with Junie AI on Windows
1320
+ - Console output to stdout/stderr violated MCP JSON-RPC protocol requirements
1321
+ - Strict MCP clients (like Junie AI) expect pure JSON-RPC on stdio streams
1322
+
1323
+ #### Changes
1324
+ - **Redirected all diagnostic output to debug log file** - stdout/stderr reserved exclusively for JSON-RPC
1325
+ - Modified `safeConsoleError()` to write to debug log instead of stderr
1326
+ - Replaced 50+ console.log/console.error calls across codebase:
1327
+ - `src/database.ts` - Database initialization messages
1328
+ - `src/watcher/file-watcher.ts` - File watcher status and events
1329
+ - `src/watcher/gitignore-parser.ts` - .gitignore loading warnings
1330
+ - `src/tools/tasks.ts` - Task file registration warnings
1331
+ - `src/config/example-generator.ts` - First launch messages
1332
+
1333
+ #### Technical Details
1334
+ - **MCP Protocol Requirement**: stdin/stdout/stderr must carry only JSON-RPC messages
1335
+ - **Debug Logging**: All diagnostic messages now use `debugLog()` with appropriate levels (INFO, WARN, ERROR)
1336
+ - **Zero stdout pollution**: Server starts silently, waits for JSON-RPC requests
1337
+ - **Tested with Junie AI**: Confirmed no EPIPE errors on Windows
1338
+
1339
+ #### Impact
1340
+ - ✅ **Works with strict MCP clients** (Junie AI, etc.)
1341
+ - ✅ **Maintains full diagnostics** via debug log file
1342
+ - ✅ **Pure JSON-RPC protocol** compliance
1343
+ - ✅ **No breaking changes** to MCP tool functionality
1344
+
1345
+ ---
1346
+
1347
+ ### Added - Environment Variable Support for Project Root
1348
+
1349
+ **New `SQLEW_PROJECT_ROOT` environment variable for project-relative databases**
1350
+
1351
+ #### Problem
1352
+ - Junie AI and other MCP clients require absolute paths in configuration
1353
+ - Users had to hardcode project-specific paths in MCP server config
1354
+ - No easy way to use project-relative database paths
1355
+
1356
+ #### Solution
1357
+ - Added `SQLEW_PROJECT_ROOT` environment variable support (inspired by serena-mcp pattern)
1358
+ - MCP clients can now pass project directory via environment variable
1359
+ - Database automatically created at `$SQLEW_PROJECT_ROOT/.sqlew/sqlew.db`
1360
+
1361
+ #### Priority Order
1362
+ 1. `SQLEW_PROJECT_ROOT` environment variable (NEW - highest priority)
1363
+ 2. `--db-path` CLI argument (absolute path)
1364
+ 3. `--config-path` CLI argument (absolute path)
1365
+ 4. `database.path` in config file (absolute path)
1366
+ 5. `process.cwd()` fallback
1367
+
1368
+ #### Junie AI Configuration Example
1369
+ ```json
1370
+ {
1371
+ "mcpServers": {
1372
+ "sqlew": {
1373
+ "command": "npx",
1374
+ "args": ["sqlew"],
1375
+ "env": {
1376
+ "SQLEW_PROJECT_ROOT": "{projectDir}"
1377
+ }
1378
+ }
1379
+ }
1380
+ }
1381
+ ```
1382
+
1383
+ **Note:** Junie AI uses `{projectDir}` variable which expands to the current project's absolute path. This ensures each project gets its own isolated database without hardcoded paths. Other MCP clients may use different variable names like `${workspaceFolder}` (VS Code/Cline) - check your client's documentation.
1384
+
1385
+ #### Impact
1386
+ - **Project-relative databases** without hardcoded absolute paths
1387
+ - **Cleaner MCP configuration** (no per-project path updates needed)
1388
+ - **Compatible with Junie AI, Claude Desktop, and other MCP clients**
1389
+ - ✅ **No breaking changes** (environment variable is optional)
1390
+
1391
+ ---
1392
+
1393
+ ### Fixed - MCP Protocol Compliance (EPIPE Fix)
1394
+
1395
+ **Eliminated console output for strict JSON-RPC protocol compliance**
1396
+
1397
+ #### Problem
1398
+ - EPIPE (broken pipe) errors when running with Junie AI on Windows
1399
+ - Console output to stdout/stderr violated MCP JSON-RPC protocol requirements
1400
+ - Strict MCP clients (like Junie AI) expect pure JSON-RPC on stdio streams
1401
+
1402
+ #### Changes
1403
+ - **Redirected all diagnostic output to debug log file** - stdout/stderr reserved exclusively for JSON-RPC
1404
+ - Modified `safeConsoleError()` to write to debug log instead of stderr
1405
+ - Replaced 50+ console.log/console.error calls across codebase:
1406
+ - `src/database.ts` - Database initialization messages
1407
+ - `src/watcher/file-watcher.ts` - File watcher status and events
1408
+ - `src/watcher/gitignore-parser.ts` - .gitignore loading warnings
1409
+ - `src/tools/tasks.ts` - Task file registration warnings
1410
+ - `src/config/example-generator.ts` - First launch messages
1411
+
1412
+ #### Technical Details
1413
+ - **MCP Protocol Requirement**: stdin/stdout/stderr must carry only JSON-RPC messages
1414
+ - **Debug Logging**: All diagnostic messages now use `debugLog()` with appropriate levels (INFO, WARN, ERROR)
1415
+ - **Zero stdout pollution**: Server starts silently, waits for JSON-RPC requests
1416
+ - **Tested with Junie AI**: Confirmed no EPIPE errors on Windows
1417
+
1418
+ #### Impact
1419
+ - ✅ **Works with strict MCP clients** (Junie AI, etc.)
1420
+ - ✅ **Maintains full diagnostics** via debug log file
1421
+ - ✅ **Pure JSON-RPC protocol** compliance
1422
+ - ✅ **No breaking changes** to MCP tool functionality
1423
+
1424
+ ---
1425
+
1426
+ ### Added - Environment Variable Support for Project Root
1427
+
1428
+ **New `SQLEW_PROJECT_ROOT` environment variable for project-relative databases**
1429
+
1430
+ #### Problem
1431
+ - Junie AI and other MCP clients require absolute paths in configuration
1432
+ - Users had to hardcode project-specific paths in MCP server config
1433
+ - No easy way to use project-relative database paths
1434
+
1435
+ #### Solution
1436
+ - Added `SQLEW_PROJECT_ROOT` environment variable support (inspired by serena-mcp pattern)
1437
+ - MCP clients can now pass project directory via environment variable
1438
+ - Database automatically created at `$SQLEW_PROJECT_ROOT/.sqlew/sqlew.db`
1439
+
1440
+ #### Priority Order
1441
+ 1. `SQLEW_PROJECT_ROOT` environment variable (NEW - highest priority)
1442
+ 2. `--db-path` CLI argument (absolute path)
1443
+ 3. `--config-path` CLI argument (absolute path)
1444
+ 4. `database.path` in config file (absolute path)
1445
+ 5. `process.cwd()` fallback
1446
+
1447
+ #### Junie AI Configuration Example
1448
+ ```json
1449
+ {
1450
+ "mcpServers": {
1451
+ "sqlew": {
1452
+ "command": "npx",
1453
+ "args": ["sqlew"],
1454
+ "env": {
1455
+ "SQLEW_PROJECT_ROOT": "{projectDir}"
1456
+ }
1457
+ }
1458
+ }
1459
+ }
1460
+ ```
1461
+
1462
+ **Note:** Junie AI uses `{projectDir}` variable which expands to the current project's absolute path. This ensures each project gets its own isolated database without hardcoded paths. Other MCP clients may use different variable names like `${workspaceFolder}` (VS Code/Cline) - check your client's documentation.
1463
+
1464
+ #### Impact
1465
+ - **Project-relative databases** without hardcoded absolute paths
1466
+ - **Cleaner MCP configuration** (no per-project path updates needed)
1467
+ - **Compatible with Junie AI, Claude Desktop, and other MCP clients**
1468
+ - ✅ **No breaking changes** (environment variable is optional)
1469
+
1470
+ ---
1471
+
1472
+ ### Fixed - MCP Protocol Compliance (EPIPE Fix)
1473
+
1474
+ **Eliminated console output for strict JSON-RPC protocol compliance**
1475
+
1476
+ #### Problem
1477
+ - EPIPE (broken pipe) errors when running with Junie AI on Windows
1478
+ - Console output to stdout/stderr violated MCP JSON-RPC protocol requirements
1479
+ - Strict MCP clients (like Junie AI) expect pure JSON-RPC on stdio streams
1480
+
1481
+ #### Changes
1482
+ - **Redirected all diagnostic output to debug log file** - stdout/stderr reserved exclusively for JSON-RPC
1483
+ - Modified `safeConsoleError()` to write to debug log instead of stderr
1484
+ - Replaced 50+ console.log/console.error calls across codebase:
1485
+ - `src/database.ts` - Database initialization messages
1486
+ - `src/watcher/file-watcher.ts` - File watcher status and events
1487
+ - `src/watcher/gitignore-parser.ts` - .gitignore loading warnings
1488
+ - `src/tools/tasks.ts` - Task file registration warnings
1489
+ - `src/config/example-generator.ts` - First launch messages
1490
+
1491
+ #### Technical Details
1492
+ - **MCP Protocol Requirement**: stdin/stdout/stderr must carry only JSON-RPC messages
1493
+ - **Debug Logging**: All diagnostic messages now use `debugLog()` with appropriate levels (INFO, WARN, ERROR)
1494
+ - **Zero stdout pollution**: Server starts silently, waits for JSON-RPC requests
1495
+ - **Tested with Junie AI**: Confirmed no EPIPE errors on Windows
1496
+
1497
+ #### Impact
1498
+ - ✅ **Works with strict MCP clients** (Junie AI, etc.)
1499
+ - ✅ **Maintains full diagnostics** via debug log file
1500
+ - ✅ **Pure JSON-RPC protocol** compliance
1501
+ - ✅ **No breaking changes** to MCP tool functionality
1502
+
1503
+ ---
1504
+
1505
+ ### Added - Environment Variable Support for Project Root
1506
+
1507
+ **New `SQLEW_PROJECT_ROOT` environment variable for project-relative databases**
1508
+
1509
+ #### Problem
1510
+ - Junie AI and other MCP clients require absolute paths in configuration
1511
+ - Users had to hardcode project-specific paths in MCP server config
1512
+ - No easy way to use project-relative database paths
1513
+
1514
+ #### Solution
1515
+ - Added `SQLEW_PROJECT_ROOT` environment variable support (inspired by serena-mcp pattern)
1516
+ - MCP clients can now pass project directory via environment variable
1517
+ - Database automatically created at `$SQLEW_PROJECT_ROOT/.sqlew/sqlew.db`
1518
+
1519
+ #### Priority Order
1520
+ 1. `SQLEW_PROJECT_ROOT` environment variable (NEW - highest priority)
1521
+ 2. `--db-path` CLI argument (absolute path)
1522
+ 3. `--config-path` CLI argument (absolute path)
1523
+ 4. `database.path` in config file (absolute path)
1524
+ 5. `process.cwd()` fallback
1525
+
1526
+ #### Junie AI Configuration Example
1527
+ ```json
1528
+ {
1529
+ "mcpServers": {
1530
+ "sqlew": {
1531
+ "command": "npx",
1532
+ "args": ["sqlew"],
1533
+ "env": {
1534
+ "SQLEW_PROJECT_ROOT": "{projectDir}"
1535
+ }
1536
+ }
1537
+ }
1538
+ }
1539
+ ```
1540
+
1541
+ **Note:** Junie AI uses `{projectDir}` variable which expands to the current project's absolute path. This ensures each project gets its own isolated database without hardcoded paths. Other MCP clients may use different variable names like `${workspaceFolder}` (VS Code/Cline) - check your client's documentation.
1542
+
1543
+ #### Impact
1544
+ - **Project-relative databases** without hardcoded absolute paths
1545
+ - **Cleaner MCP configuration** (no per-project path updates needed)
1546
+ - **Compatible with Junie AI, Claude Desktop, and other MCP clients**
1547
+ - **No breaking changes** (environment variable is optional)
1548
+
1549
+ ---
1550
+
1551
+ ### Fixed - MCP Protocol Compliance (EPIPE Fix)
1552
+
1553
+ **Eliminated console output for strict JSON-RPC protocol compliance**
1554
+
1555
+ #### Problem
1556
+ - EPIPE (broken pipe) errors when running with Junie AI on Windows
1557
+ - Console output to stdout/stderr violated MCP JSON-RPC protocol requirements
1558
+ - Strict MCP clients (like Junie AI) expect pure JSON-RPC on stdio streams
1559
+
1560
+ #### Changes
1561
+ - **Redirected all diagnostic output to debug log file** - stdout/stderr reserved exclusively for JSON-RPC
1562
+ - Modified `safeConsoleError()` to write to debug log instead of stderr
1563
+ - Replaced 50+ console.log/console.error calls across codebase:
1564
+ - `src/database.ts` - Database initialization messages
1565
+ - `src/watcher/file-watcher.ts` - File watcher status and events
1566
+ - `src/watcher/gitignore-parser.ts` - .gitignore loading warnings
1567
+ - `src/tools/tasks.ts` - Task file registration warnings
1568
+ - `src/config/example-generator.ts` - First launch messages
1569
+
1570
+ #### Technical Details
1571
+ - **MCP Protocol Requirement**: stdin/stdout/stderr must carry only JSON-RPC messages
1572
+ - **Debug Logging**: All diagnostic messages now use `debugLog()` with appropriate levels (INFO, WARN, ERROR)
1573
+ - **Zero stdout pollution**: Server starts silently, waits for JSON-RPC requests
1574
+ - **Tested with Junie AI**: Confirmed no EPIPE errors on Windows
1575
+
1576
+ #### Impact
1577
+ - **Works with strict MCP clients** (Junie AI, etc.)
1578
+ - ✅ **Maintains full diagnostics** via debug log file
1579
+ - ✅ **Pure JSON-RPC protocol** compliance
1580
+ - ✅ **No breaking changes** to MCP tool functionality
1581
+
1582
+ ---
1583
+
1584
+ ### Fixed - Windows Absolute Path Handling
1585
+
1586
+ **Fixed path normalization for Windows environments**
1587
+
1588
+ #### Changes
1589
+ - Fixed absolute path to relative path conversion in `gitignore-parser.ts`
1590
+ - Prevented `uname` Unix command calls on Windows
1591
+ - Resolved "path should be a `path.relative()`d string" error on Windows
1592
+ - Improved cross-platform path handling in file watcher
1593
+
1594
+ #### Technical Details
1595
+ - Enhanced path normalization logic to handle Windows drive letters (`C:/`)
1596
+ - Added proper Windows-specific path handling checks
1597
+ - Fixed compatibility with `ignore` library path requirements
1598
+
1599
+ ---
1600
+
1601
+ ## [3.6.8] - 2025-10-30
1602
+
1603
+ ### Fixed - Windows Environment Compatibility
1604
+
1605
+ **Updated better-sqlite3 for Windows support**
1606
+
1607
+ #### Changes
1608
+ - Updated `better-sqlite3` from `^11.0.0` to `^12.4.1`
1609
+ - Fixes Windows environment compatibility issues
1610
+ - Improves cross-platform stability
1611
+
1612
+ ---
1613
+
1614
+ ## [3.6.7] - 2025-10-30
1615
+
1616
+ ### Fixed - Dependency Update
1617
+
1618
+ **Removed deprecated dependency**
1619
+
1620
+ #### Changes
1621
+ - Removed deprecated dependency to ensure compatibility with latest ecosystem
1622
+ - Maintenance update for long-term stability
1623
+
1624
+ ---
1625
+
1626
+ ## [3.6.6] - 2025-10-29
1627
+
1628
+ ### Added - Parameter Validation & Error Handling
1629
+
1630
+ **Comprehensive parameter validation with helpful error messages**
1631
+
1632
+ #### Parameter Validation
1633
+ - **Required/Optional Detection** - Clear indication of required vs optional parameters
1634
+ - **Typo Suggestions** - Levenshtein distance-based "did you mean" suggestions for mistyped parameters
1635
+ - **Structured Error Messages** - JSON format with examples showing correct usage
1636
+ - **Visual Markers** - Help responses show 🔴 REQUIRED and ⚪ OPTIONAL parameter markers
1637
+ - **Action Specs Registry** - Centralized action specification in `src/utils/action-specs.ts`
1638
+ - **Comprehensive Test Suite** - 49 validation tests across all 5 tools
1639
+
1640
+ ### Removed - Config Tool Deprecated
1641
+
1642
+ **Config MCP tool removed in favor of file-based configuration**
1643
+
1644
+ #### Why Removed
1645
+ - Messaging system deprecated (primary use case eliminated)
1646
+ - File-based configuration (`.sqlew/config.toml`) is clearer and more maintainable
1647
+ - Runtime updates caused configuration drift between `m_config` table and config file
1648
+ - Confusing UX (changes lost on restart unless manually synced)
1649
+
1650
+ #### Migration Path
1651
+ - Use `.sqlew/config.toml` for all configuration (persistent, version-controlled)
1652
+ - ✅ Use CLI arguments for one-time overrides
1653
+ - ❌ Do not use `config` tool (will error)
1654
+
1655
+ #### Impact
1656
+ - 5 MCP tools (down from 6): `decision`, `task`, `file`, `constraint`, `stats`
1657
+ - Clearer configuration workflow (single source of truth)
1658
+ - Better developer experience (validation errors with examples)
1659
+ - ✅ Reduced cognitive load (no config drift issues)
1660
+
1661
+ ---
1662
+
1663
+ ## [3.6.5] - 2025-10-28
1664
+
1665
+ ### Changed - Agent System Simplification & CI/CD Fix
1666
+
1667
+ **Removed messaging system and eliminated agent pooling complexity**
1668
+
1669
+ #### Agent System Cleanup
1670
+ - **Removed messaging system** - `t_agent_messages` table dropped, `message` MCP tool deprecated
1671
+ - Messaging system was unused and added unnecessary complexity
1672
+ - Simplified agent architecture to single-purpose registry
1673
+ - **Eliminated agent pooling** - Code no longer uses `in_use` and `is_reusable` columns
1674
+ - Removed race conditions and UNIQUE constraint errors
1675
+ - Each agent name creates one permanent record (no reuse/pooling)
1676
+ - Generic agents (`generic-N`) auto-allocated for empty names
1677
+ - **6 MCP Tools** - Down from 7 (messaging removed)
1678
+ - `decision`, `file`, `constraint`, `stats`, `config`, `task`
1679
+
1680
+ #### Infrastructure
1681
+ - **CI/CD Workflow** - Removed npm publish step from GitHub Actions
1682
+ - npm publish requires 2FA authentication
1683
+ - Publishing must be done manually to prevent workflow failures
1684
+
1685
+ #### Impact
1686
+ - Simplified agent management (no pooling overhead)
1687
+ - Reduced complexity (messaging system removed)
1688
+ - CI/CD workflow no longer fails on npm publish
1689
+
1690
+ ---
1691
+
1692
+ ## [3.6.4] - 2025-10-28
1693
+
1694
+ ### Fixed - WSL Git Add Detection
1695
+
1696
+ **WSL-specific polling workaround for chokidar file watcher**
1697
+
1698
+ #### Changes
1699
+ - **1-second polling for WSL** - Added platform-specific chokidar configuration
1700
+ - WSL filesystem events are unreliable with native watching
1701
+ - Polling ensures git add operations are detected consistently
1702
+ - **Platform detection** - Automatic WSL detection via `/proc/version`
1703
+ - **Backward compatible** - Non-WSL platforms use native file watching (no polling)
1704
+
1705
+ #### Impact
1706
+ - Git add detection now works reliably on WSL
1707
+ - ✅ VCS-aware auto-complete functional across all platforms
1708
+
1709
+ ---
1710
+
1711
+ ## [3.6.3] - 2025-10-27
1712
+
1713
+ ### Fixed - Critical Bug Fixes & Git Add Detection
1714
+
1715
+ **Transaction pool exhaustion and VCS-aware auto-complete implementation**
1716
+
1717
+ #### Bug Fixes
1718
+ - **Task Move Transaction Bug** - Fixed `moveTask` using base `knex` instead of transaction `trx` (line 880)
1719
+ - Caused "Knex: Timeout acquiring a connection" errors
1720
+ - Now properly uses transaction object for `logTaskStatusChange`
1721
+ - **Task Link Transaction Bug** - Fixed `linkTask` using base `knex` instead of transaction `trx` (line 948)
1722
+ - Same connection pool exhaustion issue
1723
+ - Now properly uses transaction object for decision link insertion
1724
+
1725
+ #### Features
1726
+ - **Git Add Detection** - Implemented `detectAndCompleteOnStaging()` for VCS-aware workflow
1727
+ - Detects `git add` operations and auto-completes tasks (`waiting_review` → `done`)
1728
+ - Supports Git, Mercurial, and SVN
1729
+ - Configurable via `git_auto_complete_on_stage` and `require_all_files_staged`
1730
+ - **VCS Configuration** - Added comprehensive settings documentation to `config.example.toml`
1731
+ - `git_auto_complete_on_stage` (default: true)
1732
+ - `git_auto_archive_on_commit` (default: true)
1733
+ - `require_all_files_staged` (default: true)
1734
+ - `require_all_files_committed_for_archive` (default: true)
1735
+
1736
+ #### Infrastructure
1737
+ - **Line Ending Fix** - Added `.gitattributes` to enforce LF endings for shell scripts
1738
+ - Prevents CRLF issues in Husky hooks on Windows/WSL
1739
+ - Applies to `*.sh` and `.husky/*` files
1740
+ - **Husky Hooks** - Fixed pre-commit/pre-push hooks (added shebang, normalized line endings)
1741
+
1742
+ #### Impact
1743
+ - ✅ Task operations no longer fail with connection pool timeouts
1744
+ - Git add detection now functional (was stubbed in v3.5.2)
1745
+ - Cross-platform compatibility for git hooks (Windows/WSL/Linux/macOS)
1746
+
1747
+ ---
1748
+
1749
+ ## [3.6.2] - 2025-10-27
1750
+
1751
+ ### Changed - Migration System Modernization
1752
+
1753
+ **Simplified to Knex-only migrations with organized directory structure**
1754
+
1755
+ #### Migration System Cleanup
1756
+ - **Removed custom migration system** (14 obsolete files from `src/migrations/`)
1757
+ - **Pure Knex migrations** - Standardized on Knex.js migration framework
1758
+ - **Organized structure** - 22 migrations grouped into 3 logical subdirectories:
1759
+ - `upgrades/` (7 files) - Version upgrade paths (v1.0 → v3.6)
1760
+ - `bootstrap/` (5 files) - Fresh install foundation
1761
+ - `enhancements/` (10 files) - v3.6.0+ feature additions
1762
+
1763
+ #### Testing & CI/CD
1764
+ - **Migration tests updated** - Converted to use Knex migrations exclusively
1765
+ - **Comprehensive test coverage** - 8/9 versions migrate successfully (89% backward compatibility)
1766
+ - **Husky git hooks** - Pre-commit (build + tests), pre-push (migration tests)
1767
+ - **GitHub Actions workflow** - CI/CD pipeline for Node 18.x/20.x
1768
+
1769
+ #### Benefits
1770
+ - **Better maintainability** - Clear organization, standard tooling
1771
+ - **Easier onboarding** - Knex is industry-standard
1772
+ - **Faster development** - 56% time efficiency via parallel execution
1773
+
1774
+ ---
1775
+
1776
+ ## [3.6.0] - 2025-10-25
1777
+
1778
+ ### Added - Help System Optimization
1779
+
1780
+ **Database-driven help system with 60-70% token efficiency improvement**
1781
+
1782
+ #### Key Achievements
1783
+ - **60-70% Token Reduction** - Average help query: ~200 tokens (vs ~2,150 legacy)
1784
+ - **95.8% Schema Reduction** - MCP InputSchemas: 350 tokens (vs 8,400 legacy)
1785
+ - **6 New Help Actions** - Granular queries for actions, parameters, tools, use-cases
1786
+ - **41 Use-Cases** - Comprehensive workflow examples across 6 categories
1787
+ - **100% Test Coverage** - 38/38 tests passing
1788
+
1789
+ #### New MCP Actions (stats tool)
1790
+ - `help_action` - Query single action with parameters and examples
1791
+ - `help_params` - Query parameter list for an action
1792
+ - `help_tool` - Query tool overview + all actions
1793
+ - `help_use_case` - Get single use-case with full workflow
1794
+ - `help_list_use_cases` - List/filter use-cases by category/complexity
1795
+ - `help_next_actions` - Suggest common next actions
1796
+
1797
+ #### Database Schema
1798
+ 7 new tables: `m_help_tools`, `m_help_actions`, `m_help_use_case_categories`, `t_help_action_params`, `t_help_action_examples`, `t_help_use_cases`, `t_help_action_sequences`
1799
+
1800
+ #### Migration from v3.5.x
1801
+ - Automatic migration on startup
1802
+ - Backward compatible - all existing MCP actions unchanged
1803
+ - Zero downtime
1804
+
1805
+ ---
1806
+
1807
+ ## [3.5.2] - 2025-10-24
1808
+
1809
+ ### Added - Two-Step Git-Aware Task Workflow
1810
+
1811
+ **Automatic task completion and archiving based on Git staging and committing**
1812
+
1813
+ #### Features
1814
+ - **Step 1 - Staging** (`git add`): `waiting_review` → `done` (work complete)
1815
+ - **Step 2 - Committing** (`git commit`): `done` → `archived` (work finalized)
1816
+ - **VCS Support**: Git, Mercurial, and SVN
1817
+ - **Zero Token Cost**: Fully automated, no manual MCP calls needed
1818
+
1819
+ #### Configuration
1820
+ - `git_auto_complete_on_stage` (default: `'1'`)
1821
+ - `git_auto_archive_on_commit` (default: `'1'`)
1822
+ - `require_all_files_staged` (default: `'1'`)
1823
+ - `require_all_files_committed_for_archive` (default: `'1'`)
1824
+
1825
+ ---
1826
+
1827
+ ## [3.5.1] - 2025-10-24
1828
+
1829
+ ### Fixed - File Watcher WSL Compatibility
1830
+
1831
+ **Upgraded chokidar from v3 to v4 + Fixed path normalization bug**
1832
+
1833
+ #### Changes
1834
+ - **chokidar**: `^3.6.0` → `^4.0.3` (automatic WSL support)
1835
+ - Fixed path normalization: chokidar reports absolute paths, database stores relative
1836
+ - Removed manual WSL detection and polling configuration
1837
+
1838
+ ---
1839
+
1840
+ ## [3.5.0] - 2025-10-22
1841
+
1842
+ ### Added - Non-Existent File Auto-Pruning
1843
+
1844
+ **Automatic removal of non-existent watched files with audit trail**
1845
+
1846
+ #### Features
1847
+ - New table: `t_task_pruned_files` - Audit trail for pruned files
1848
+ - Auto-pruning during `in_progress → waiting_review` transition
1849
+ - Safety check: blocks if ALL files non-existent
1850
+ - New MCP actions: `get_pruned_files`, `link_pruned_file`
1851
+
1852
+ #### Documentation
1853
+
1854
+ ---
1855
+
1856
+
1857
+ ## Older Versions
1858
+
1859
+ For changelog entries **v3.4.1 and older**, see:
1860
+ - [docs/changelogs/CHANGELOG_ARCHIVE_v3.4_and_older.md](docs/changelogs/CHANGELOG_ARCHIVE_v3.4_and_older.md)
1861
+
1862
+ This includes all versions from v1.0.0 through v3.4.1.