memory-journal-mcp 6.1.2 → 6.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (372) hide show
  1. package/README.md +44 -28
  2. package/dist/{chunk-X4SWFATC.js → chunk-BI4ZNSKA.js} +38 -24
  3. package/dist/{chunk-HCEWINSB.js → chunk-N6EBIDN7.js} +99 -102
  4. package/dist/cli.js +2 -2
  5. package/dist/index.js +2 -2
  6. package/dist/tools-WPRY5MJ6.js +2 -0
  7. package/package.json +10 -1
  8. package/skills/github-commander/SKILL.md +151 -0
  9. package/skills/github-commander/config/project-config.example.md +125 -0
  10. package/skills/github-commander/workflows/code-quality-audit.md +80 -0
  11. package/skills/github-commander/workflows/full-audit.md +134 -0
  12. package/skills/github-commander/workflows/issue-triage.md +239 -0
  13. package/skills/github-commander/workflows/milestone-sprint.md +81 -0
  14. package/skills/github-commander/workflows/perf-audit.md +142 -0
  15. package/skills/github-commander/workflows/pr-review.md +123 -0
  16. package/skills/github-commander/workflows/security-audit.md +170 -0
  17. package/skills/github-commander/workflows/update-deps.md +109 -0
  18. package/.dockerignore +0 -139
  19. package/.gitattributes +0 -20
  20. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -95
  21. package/.github/ISSUE_TEMPLATE/config.yml +0 -11
  22. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -110
  23. package/.github/ISSUE_TEMPLATE/question.md +0 -78
  24. package/.github/aw/actions-lock.json +0 -14
  25. package/.github/copilot-instructions.md +0 -122
  26. package/.github/dependabot.yml +0 -93
  27. package/.github/pull_request_template.md +0 -135
  28. package/.github/workflows/README.md +0 -133
  29. package/.github/workflows/agentics-maintenance.yml +0 -141
  30. package/.github/workflows/auto-release.yml +0 -68
  31. package/.github/workflows/ci-health-monitor.lock.yml +0 -1121
  32. package/.github/workflows/ci-health-monitor.md +0 -87
  33. package/.github/workflows/codeql.yml +0 -41
  34. package/.github/workflows/dependabot-auto-merge.yml +0 -42
  35. package/.github/workflows/dependency-maintenance.lock.yml +0 -1182
  36. package/.github/workflows/dependency-maintenance.md +0 -147
  37. package/.github/workflows/docker-publish.yml +0 -254
  38. package/.github/workflows/docs-drift-detector.lock.yml +0 -1142
  39. package/.github/workflows/docs-drift-detector.md +0 -115
  40. package/.github/workflows/lint-and-test.yml +0 -60
  41. package/.github/workflows/publish-npm.yml +0 -85
  42. package/.github/workflows/secrets-scanning.yml +0 -32
  43. package/.github/workflows/security-update.yml +0 -127
  44. package/.gitleaks.toml +0 -9
  45. package/.prettierignore +0 -21
  46. package/.prettierrc +0 -33
  47. package/.scout-ignore +0 -12
  48. package/.trivyignore +0 -21
  49. package/CHANGELOG.md +0 -1814
  50. package/CODE_OF_CONDUCT.md +0 -133
  51. package/CONTRIBUTING.md +0 -263
  52. package/DOCKER_README.md +0 -331
  53. package/Dockerfile +0 -128
  54. package/SECURITY.md +0 -227
  55. package/UNRELEASED.md +0 -1
  56. package/dist/tools-T4U5A3X4.js +0 -2
  57. package/docker-compose.yml +0 -71
  58. package/docs/README.md +0 -18
  59. package/docs/agentic-journal-synergy.md +0 -175
  60. package/docs/copilot-setup.md +0 -72
  61. package/eslint.config.js +0 -110
  62. package/mcp-config-example.json +0 -21
  63. package/playwright.config.ts +0 -35
  64. package/releases/v2.1.0.md +0 -220
  65. package/releases/v2.2.0.md +0 -168
  66. package/releases/v3.0.0.md +0 -237
  67. package/releases/v3.1.0.md +0 -104
  68. package/releases/v3.1.1.md +0 -42
  69. package/releases/v3.1.2.md +0 -40
  70. package/releases/v3.1.3.md +0 -64
  71. package/releases/v3.1.4.md +0 -32
  72. package/releases/v3.1.5.md +0 -44
  73. package/releases/v4.0.0.md +0 -71
  74. package/releases/v4.1.0.md +0 -88
  75. package/releases/v4.2.0.md +0 -90
  76. package/releases/v4.3.0.md +0 -92
  77. package/releases/v4.3.1.md +0 -69
  78. package/releases/v4.4.0.md +0 -120
  79. package/releases/v4.4.1.md +0 -33
  80. package/releases/v4.4.2.md +0 -31
  81. package/releases/v4.5.0.md +0 -116
  82. package/releases/v5.0.0.md +0 -105
  83. package/releases/v5.0.1.md +0 -25
  84. package/releases/v5.1.0.md +0 -83
  85. package/releases/v5.1.1.md +0 -10
  86. package/releases/v6.0.0.md +0 -48
  87. package/releases/v6.0.1.md +0 -36
  88. package/releases/v6.1.0.md +0 -68
  89. package/releases/v6.1.1.md +0 -30
  90. package/releases/v6.1.2.md +0 -23
  91. package/scripts/generate-server-instructions.ts +0 -306
  92. package/scripts/server-instructions-function-body.ts +0 -107
  93. package/scripts/server-instructions-gotchas.ts +0 -45
  94. package/server.json +0 -42
  95. package/social-preview.png +0 -0
  96. package/src/auth/auth-context.ts +0 -78
  97. package/src/auth/authorization-server-discovery.ts +0 -263
  98. package/src/auth/errors.ts +0 -215
  99. package/src/auth/index.ts +0 -58
  100. package/src/auth/middleware.ts +0 -392
  101. package/src/auth/oauth-resource-server.ts +0 -170
  102. package/src/auth/scope-map.ts +0 -46
  103. package/src/auth/scopes.ts +0 -256
  104. package/src/auth/token-validator.ts +0 -293
  105. package/src/auth/transport-agnostic.ts +0 -164
  106. package/src/auth/types.ts +0 -372
  107. package/src/cli.ts +0 -279
  108. package/src/codemode/api-constants.ts +0 -263
  109. package/src/codemode/api.ts +0 -302
  110. package/src/codemode/auto-return.ts +0 -65
  111. package/src/codemode/index.ts +0 -47
  112. package/src/codemode/sandbox-factory.ts +0 -144
  113. package/src/codemode/sandbox.ts +0 -220
  114. package/src/codemode/security.ts +0 -155
  115. package/src/codemode/types.ts +0 -228
  116. package/src/codemode/worker-sandbox.ts +0 -277
  117. package/src/codemode/worker-script.ts +0 -239
  118. package/src/constants/icons.ts +0 -183
  119. package/src/constants/server-instructions.md +0 -166
  120. package/src/constants/server-instructions.ts +0 -514
  121. package/src/database/adapter-factory.ts +0 -16
  122. package/src/database/core/entry-columns.ts +0 -10
  123. package/src/database/core/interfaces.ts +0 -188
  124. package/src/database/core/schema.ts +0 -152
  125. package/src/database/sqlite-adapter/backup.ts +0 -167
  126. package/src/database/sqlite-adapter/entries/crud.ts +0 -233
  127. package/src/database/sqlite-adapter/entries/importance.ts +0 -76
  128. package/src/database/sqlite-adapter/entries/index.ts +0 -142
  129. package/src/database/sqlite-adapter/entries/search.ts +0 -294
  130. package/src/database/sqlite-adapter/entries/shared.ts +0 -102
  131. package/src/database/sqlite-adapter/entries/statistics.ts +0 -162
  132. package/src/database/sqlite-adapter/index.ts +0 -265
  133. package/src/database/sqlite-adapter/native-connection.ts +0 -301
  134. package/src/database/sqlite-adapter/relationships.ts +0 -70
  135. package/src/database/sqlite-adapter/tags.ts +0 -182
  136. package/src/filtering/tool-filter.ts +0 -312
  137. package/src/github/github-integration/client.ts +0 -114
  138. package/src/github/github-integration/index.ts +0 -297
  139. package/src/github/github-integration/insights.ts +0 -155
  140. package/src/github/github-integration/issues.ts +0 -213
  141. package/src/github/github-integration/milestones.ts +0 -262
  142. package/src/github/github-integration/projects.ts +0 -414
  143. package/src/github/github-integration/pull-requests.ts +0 -235
  144. package/src/github/github-integration/repository.ts +0 -110
  145. package/src/github/github-integration/types.ts +0 -43
  146. package/src/handlers/prompts/github.ts +0 -210
  147. package/src/handlers/prompts/index.ts +0 -97
  148. package/src/handlers/prompts/workflow.ts +0 -361
  149. package/src/handlers/resources/core/briefing/context-section.ts +0 -182
  150. package/src/handlers/resources/core/briefing/github-section.ts +0 -354
  151. package/src/handlers/resources/core/briefing/index.ts +0 -106
  152. package/src/handlers/resources/core/briefing/user-message.ts +0 -114
  153. package/src/handlers/resources/core/health.ts +0 -75
  154. package/src/handlers/resources/core/index.ts +0 -31
  155. package/src/handlers/resources/core/instructions.ts +0 -45
  156. package/src/handlers/resources/core/utilities.ts +0 -310
  157. package/src/handlers/resources/github.ts +0 -340
  158. package/src/handlers/resources/graph.ts +0 -218
  159. package/src/handlers/resources/help.ts +0 -410
  160. package/src/handlers/resources/index.ts +0 -143
  161. package/src/handlers/resources/shared.ts +0 -219
  162. package/src/handlers/resources/team.ts +0 -134
  163. package/src/handlers/resources/templates.ts +0 -334
  164. package/src/handlers/tools/admin.ts +0 -351
  165. package/src/handlers/tools/analytics.ts +0 -346
  166. package/src/handlers/tools/backup.ts +0 -272
  167. package/src/handlers/tools/codemode.ts +0 -188
  168. package/src/handlers/tools/core.ts +0 -359
  169. package/src/handlers/tools/error-fields-mixin.ts +0 -10
  170. package/src/handlers/tools/export.ts +0 -150
  171. package/src/handlers/tools/github/copilot-tools.ts +0 -72
  172. package/src/handlers/tools/github/helpers.ts +0 -125
  173. package/src/handlers/tools/github/insights-tools.ts +0 -112
  174. package/src/handlers/tools/github/issue-tools.ts +0 -442
  175. package/src/handlers/tools/github/kanban-tools.ts +0 -153
  176. package/src/handlers/tools/github/milestone-tools.ts +0 -371
  177. package/src/handlers/tools/github/mutation-tools.ts +0 -17
  178. package/src/handlers/tools/github/read-tools.ts +0 -302
  179. package/src/handlers/tools/github/schemas.ts +0 -435
  180. package/src/handlers/tools/github.ts +0 -39
  181. package/src/handlers/tools/index.ts +0 -255
  182. package/src/handlers/tools/relationships.ts +0 -390
  183. package/src/handlers/tools/schemas.ts +0 -165
  184. package/src/handlers/tools/search.ts +0 -448
  185. package/src/handlers/tools/team/admin-tools.ts +0 -164
  186. package/src/handlers/tools/team/analytics-tools.ts +0 -233
  187. package/src/handlers/tools/team/backup-tools.ts +0 -83
  188. package/src/handlers/tools/team/core-tools.ts +0 -197
  189. package/src/handlers/tools/team/export-tools.ts +0 -130
  190. package/src/handlers/tools/team/helpers.ts +0 -66
  191. package/src/handlers/tools/team/index.ts +0 -45
  192. package/src/handlers/tools/team/relationship-tools.ts +0 -219
  193. package/src/handlers/tools/team/schemas.ts +0 -558
  194. package/src/handlers/tools/team/search-tools.ts +0 -145
  195. package/src/handlers/tools/team/vector-tools.ts +0 -261
  196. package/src/index.ts +0 -57
  197. package/src/server/mcp-server.ts +0 -446
  198. package/src/server/registration.ts +0 -141
  199. package/src/server/scheduler.ts +0 -283
  200. package/src/transports/http/handlers.ts +0 -78
  201. package/src/transports/http/index.ts +0 -8
  202. package/src/transports/http/security.ts +0 -147
  203. package/src/transports/http/server/index.ts +0 -397
  204. package/src/transports/http/server/legacy-sse.ts +0 -87
  205. package/src/transports/http/server/stateful.ts +0 -222
  206. package/src/transports/http/server/stateless.ts +0 -42
  207. package/src/transports/http/types.ts +0 -132
  208. package/src/types/entities.ts +0 -145
  209. package/src/types/error-types.ts +0 -92
  210. package/src/types/errors.ts +0 -200
  211. package/src/types/filtering.ts +0 -55
  212. package/src/types/github.ts +0 -216
  213. package/src/types/index.ts +0 -348
  214. package/src/utils/error-helpers.ts +0 -78
  215. package/src/utils/errors/error-response-fields.ts +0 -29
  216. package/src/utils/errors/suggestions.ts +0 -94
  217. package/src/utils/github-helpers.ts +0 -33
  218. package/src/utils/logger.ts +0 -107
  219. package/src/utils/mcp-logger.ts +0 -155
  220. package/src/utils/progress-utils.ts +0 -100
  221. package/src/utils/query-helpers.ts +0 -78
  222. package/src/utils/resource-annotations.ts +0 -75
  223. package/src/utils/security-utils.ts +0 -198
  224. package/src/utils/vector-index-helpers.ts +0 -24
  225. package/src/vector/vector-search-manager.ts +0 -409
  226. package/src/version.ts +0 -15
  227. package/test-server/README.md +0 -193
  228. package/test-server/code-map.md +0 -399
  229. package/test-server/test-agent-experience.md +0 -213
  230. package/test-server/test-filter-instructions.mjs +0 -295
  231. package/test-server/test-instruction-levels.mjs +0 -102
  232. package/test-server/test-preflight.md +0 -55
  233. package/test-server/test-prompts.mjs +0 -185
  234. package/test-server/test-scheduler.mjs +0 -174
  235. package/test-server/test-tool-annotations.mjs +0 -115
  236. package/test-server/test-tools-codemode.md +0 -632
  237. package/test-server/test-tools-codemode2.md +0 -1218
  238. package/test-server/test-tools-team.md +0 -215
  239. package/test-server/test-tools.md +0 -429
  240. package/test-server/test-tools2.md +0 -361
  241. package/test-server/test-tools3.md +0 -396
  242. package/test-server/tool-reference.md +0 -231
  243. package/tests/README.md +0 -54
  244. package/tests/auth/auth-context.test.ts +0 -162
  245. package/tests/auth/authorization-server-discovery.test.ts +0 -265
  246. package/tests/auth/errors.test.ts +0 -170
  247. package/tests/auth/middleware.test.ts +0 -585
  248. package/tests/auth/oauth-resource-server.test.ts +0 -173
  249. package/tests/auth/scope-map.test.ts +0 -66
  250. package/tests/auth/scopes.test.ts +0 -347
  251. package/tests/auth/token-validator.test.ts +0 -271
  252. package/tests/codemode/api.test.ts +0 -396
  253. package/tests/codemode/auto-return.test.ts +0 -167
  254. package/tests/codemode/codemode-tool-handlers.test.ts +0 -197
  255. package/tests/codemode/sandbox-factory.test.ts +0 -152
  256. package/tests/codemode/sandbox.test.ts +0 -190
  257. package/tests/codemode/security.test.ts +0 -242
  258. package/tests/codemode/worker-sandbox.test.ts +0 -106
  259. package/tests/constants/icons.test.ts +0 -101
  260. package/tests/constants/server-instructions.test.ts +0 -514
  261. package/tests/database/crud-workflow-branches.test.ts +0 -418
  262. package/tests/database/database-branches.test.ts +0 -132
  263. package/tests/database/entries-auth-branches.test.ts +0 -390
  264. package/tests/database/native-connection.test.ts +0 -249
  265. package/tests/database/shared-helpers.test.ts +0 -103
  266. package/tests/database/sqlite-adapter.bench.ts +0 -63
  267. package/tests/database/sqlite-adapter.test.ts +0 -690
  268. package/tests/database/tags.test.ts +0 -134
  269. package/tests/e2e/README.md +0 -39
  270. package/tests/e2e/auth.spec.ts +0 -106
  271. package/tests/e2e/codemode-abuse.spec.ts +0 -75
  272. package/tests/e2e/health.spec.ts +0 -63
  273. package/tests/e2e/helpers.ts +0 -139
  274. package/tests/e2e/oauth-discovery.spec.ts +0 -102
  275. package/tests/e2e/oauth-scopes.spec.ts +0 -222
  276. package/tests/e2e/payloads-admin.spec.ts +0 -76
  277. package/tests/e2e/payloads-analytics.spec.ts +0 -37
  278. package/tests/e2e/payloads-backup-restore.spec.ts +0 -102
  279. package/tests/e2e/payloads-backup.spec.ts +0 -44
  280. package/tests/e2e/payloads-codemode-api.spec.ts +0 -131
  281. package/tests/e2e/payloads-codemode-readonly.spec.ts +0 -116
  282. package/tests/e2e/payloads-codemode.spec.ts +0 -116
  283. package/tests/e2e/payloads-core.spec.ts +0 -82
  284. package/tests/e2e/payloads-error-contracts.spec.ts +0 -159
  285. package/tests/e2e/payloads-export.spec.ts +0 -46
  286. package/tests/e2e/payloads-github-degradation.spec.ts +0 -73
  287. package/tests/e2e/payloads-github.spec.ts +0 -176
  288. package/tests/e2e/payloads-relationships.spec.ts +0 -56
  289. package/tests/e2e/payloads-search.spec.ts +0 -64
  290. package/tests/e2e/payloads-team-happy.spec.ts +0 -231
  291. package/tests/e2e/payloads-team.spec.ts +0 -174
  292. package/tests/e2e/prompts-expanded.spec.ts +0 -137
  293. package/tests/e2e/prompts.spec.ts +0 -62
  294. package/tests/e2e/protocols.spec.ts +0 -134
  295. package/tests/e2e/rate-limiting.spec.ts +0 -291
  296. package/tests/e2e/resources-briefing-env.spec.ts +0 -106
  297. package/tests/e2e/resources-complete.spec.ts +0 -180
  298. package/tests/e2e/resources-expanded.spec.ts +0 -83
  299. package/tests/e2e/resources-instructions-levels.spec.ts +0 -145
  300. package/tests/e2e/resources-templates.spec.ts +0 -123
  301. package/tests/e2e/resources.spec.ts +0 -103
  302. package/tests/e2e/scheduler.spec.ts +0 -79
  303. package/tests/e2e/security.spec.ts +0 -112
  304. package/tests/e2e/session-advanced.spec.ts +0 -152
  305. package/tests/e2e/sessions.spec.ts +0 -95
  306. package/tests/e2e/stateless.spec.ts +0 -79
  307. package/tests/e2e/streaming.spec.ts +0 -176
  308. package/tests/e2e/tool-filtering-presets.spec.ts +0 -192
  309. package/tests/e2e/tool-filtering.spec.ts +0 -77
  310. package/tests/e2e/tools.spec.ts +0 -111
  311. package/tests/filtering/tool-filter.test.ts +0 -314
  312. package/tests/github/client-issues-errors.test.ts +0 -433
  313. package/tests/github/github-integration-branches.test.ts +0 -490
  314. package/tests/github/github-integration.test.ts +0 -1015
  315. package/tests/github/github-managers-branches.test.ts +0 -907
  316. package/tests/github/pull-requests.test.ts +0 -334
  317. package/tests/handlers/analytics-branches.test.ts +0 -222
  318. package/tests/handlers/backup-branches.test.ts +0 -270
  319. package/tests/handlers/briefing-context-section.test.ts +0 -388
  320. package/tests/handlers/briefing-github-section.test.ts +0 -392
  321. package/tests/handlers/briefing-user-message.test.ts +0 -405
  322. package/tests/handlers/codemode-tools.test.ts +0 -85
  323. package/tests/handlers/copilot-tools.test.ts +0 -126
  324. package/tests/handlers/error-path-coverage.test.ts +0 -324
  325. package/tests/handlers/export-tools.test.ts +0 -203
  326. package/tests/handlers/github-resource-handlers.test.ts +0 -929
  327. package/tests/handlers/github-tool-handlers.test.ts +0 -1452
  328. package/tests/handlers/handler-error-branches.test.ts +0 -346
  329. package/tests/handlers/help-resource.test.ts +0 -92
  330. package/tests/handlers/prompt-handler-coverage.test.ts +0 -108
  331. package/tests/handlers/prompt-handlers.test.ts +0 -131
  332. package/tests/handlers/resource-handler-coverage.test.ts +0 -281
  333. package/tests/handlers/resource-handlers.test.ts +0 -357
  334. package/tests/handlers/resource-prompt-branches.test.ts +0 -495
  335. package/tests/handlers/search-tool-handlers.test.ts +0 -379
  336. package/tests/handlers/targeted-gap-closure.test.ts +0 -387
  337. package/tests/handlers/team-admin.test.ts +0 -291
  338. package/tests/handlers/team-analytics.test.ts +0 -220
  339. package/tests/handlers/team-core.test.ts +0 -148
  340. package/tests/handlers/team-data.test.ts +0 -198
  341. package/tests/handlers/team-relationships.test.ts +0 -271
  342. package/tests/handlers/team-resource-handlers.test.ts +0 -161
  343. package/tests/handlers/team-search.test.ts +0 -134
  344. package/tests/handlers/team-tool-handlers.test.ts +0 -301
  345. package/tests/handlers/team-vector.test.ts +0 -213
  346. package/tests/handlers/template-github-branches.test.ts +0 -676
  347. package/tests/handlers/tool-annotations.test.ts +0 -90
  348. package/tests/handlers/tool-handler-coverage.test.ts +0 -514
  349. package/tests/handlers/tool-handlers.test.ts +0 -510
  350. package/tests/handlers/tool-output-schemas.test.ts +0 -116
  351. package/tests/handlers/vector-tool-handlers.test.ts +0 -238
  352. package/tests/security/sql-injection.test.ts +0 -284
  353. package/tests/server/mcp-server.bench.ts +0 -55
  354. package/tests/server/mcp-server.test.ts +0 -1326
  355. package/tests/server/scheduler.test.ts +0 -400
  356. package/tests/transports/http-legacy-sse.test.ts +0 -275
  357. package/tests/transports/http-security.test.ts +0 -322
  358. package/tests/transports/http-stateful.test.ts +0 -487
  359. package/tests/transports/http-transport-server.test.ts +0 -301
  360. package/tests/transports/http-transport.test.ts +0 -771
  361. package/tests/utils/github-helpers.test.ts +0 -58
  362. package/tests/utils/logger.test.ts +0 -180
  363. package/tests/utils/mcp-logger.test.ts +0 -211
  364. package/tests/utils/progress-utils.test.ts +0 -156
  365. package/tests/utils/query-helpers.test.ts +0 -80
  366. package/tests/utils/security-utils.test.ts +0 -82
  367. package/tests/vector/vector-search-branches.test.ts +0 -111
  368. package/tests/vector/vector-search-manager.test.ts +0 -375
  369. package/tests/vector/vector-search.bench.ts +0 -48
  370. package/tsconfig.json +0 -42
  371. package/tsup.config.ts +0 -19
  372. package/vitest.config.ts +0 -25
@@ -1,429 +0,0 @@
1
- # Test memory-journal-mcp — Core & Mutations
2
-
3
- Exhaustively test the memory-journal-mcp server's core functionality using the phased plan below. **Please make sure to use the correct resource names/urls as documented below.**
4
-
5
- **Scope:** 24 core tools (entry CRUD, search, analytics, relationships, admin, backup), seed data — this file covers happy paths, core error paths, and feature verification (Phases 0-6). GitHub tools (16 tools), all 27 resources, and prompt handlers are tested in `test-tools2.md`. Team tools (20 tools) are tested in `test-tools-team.md`.
6
-
7
- **Seed data:** S1–S12 are general-purpose seeds. S13–S14 are personal journal entries for `project_number: 5` (needed alongside S7 to reach the `min_entries: 3` threshold for `get_cross_project_insights`). S15–S17 are team DB entries for `project_number: 5` (needed for `team_get_cross_project_insights`).
8
-
9
- **Constraints:**
10
-
11
- - Confirm MCP server instructions were auto-received before starting.
12
- - Use the MCP server directly for all tests — not the terminal or scripts.
13
- - Use https://github.com/users/neverinfamous/projects/5 for project/Kanban testing.
14
-
15
- **Workflow after testing:**
16
-
17
- 1. Create a plan to implement any fixes and/or improvement opportunities, including changes to `server-instructions.md`/`server-instructions.ts` or this file (`test-server/test-tools.md`).
18
- 2. Use `code-map.md` as a source of truth and ensure fixes comply with `C:\Users\chris\Desktop\adamic\skills\mcp-builder`.
19
- 3. After implementation, update `UNRELEASED.md` and commit without pushing. Then, stop so the user can verify with `npm run lint && npm run typecheck`, `npm run test`, and `npm run test:e2e`.
20
- 4. After user completes verification, re-test fixes with direct MCP calls.
21
- 5. Provide a very brief final summary.
22
-
23
- > [!IMPORTANT]
24
- > **Test Session Prerequisites**
25
-
26
- 1. The server instructions are auto-injected by the MCP protocol. Confirm receipt (no need to read `memory://instructions` separately).
27
- 2. Confirm `memory://briefing` was auto-received and **present the `userMessage` to the user as a formatted bullet list of key facts as the server instructions required:**. Detailed briefing testing is below in Phase 1.2.
28
-
29
- ---
30
-
31
- ## Phase 0: Seed Test Data
32
-
33
- > [!IMPORTANT]
34
- > Create these entries **before Phase 2** to ensure FTS5, filter, semantic search, and relationship tests have matching data. Each entry is mapped to the test cases it enables.
35
- >
36
- > **Do NOT skip this phase** — without it, many Phase 3 search tests will return empty results and won't validate the underlying feature.
37
-
38
- ### 0.1 FTS5 Content Entries
39
-
40
- These entries ensure every FTS5 query pattern in Phase 3.1 returns actual results.
41
-
42
- | # | Tool | Params | Enables Tests |
43
- | --- | -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
44
- | S1 | `create_entry` | `content: "Redesigned the authentication architecture for the OAuth 2.1 module"`, `entry_type: "technical_note"`, `tags: ["architecture", "auth"]` | `architecture`, `auth*`, `"authentication architecture"` phrase |
45
- | S2 | `create_entry` | `content: "Improved error handling in the database adapter layer with typed error classes"`, `entry_type: "bug_fix"`, `significance_type: "lesson_learned"`, `tags: ["error-handling", "database"]` | `"error handling"` phrase, `significance_type` filter |
46
- | S3 | `create_entry` | `content: "Deploy new release candidate to the CDN edge network"`, `entry_type: "feature_implementation"`, `tags: ["deploy", "release"]`, `is_personal: false` | `deploy NOT staging`, `deploy OR release` |
47
- | S4 | `create_entry` | `content: "Released v5.0 with breaking API changes and migration guide"`, `entry_type: "milestone"`, `significance_type: "breakthrough"`, `tags: ["release"]` | `deploy OR release` (via "release"), semantic search for "release" |
48
- | S5 | `create_entry` | `content: "Deploy to staging environment failed — rollback initiated"`, `entry_type: "bug_fix"`, `tags: ["deploy", "staging"]` | `deploy NOT staging` (negative match — verifies NOT exclusion) |
49
- | S6 | `create_entry` | `content: "The test's scope was expanded to cover 100% of edge cases"`, `entry_type: "planning"`, `tags: ["testing"]` | `test's` LIKE fallback, `100%` LIKE fallback |
50
-
51
- ### 0.2 Filter & GitHub-Linked Entries
52
-
53
- These entries ensure filter tests (`issue_number`, `pr_status`, `workflow_run_id`, `project_number`) return results.
54
-
55
- | # | Tool | Params | Enables Tests |
56
- | --- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------- |
57
- | S7 | `create_entry` | `content: "Investigated performance regression in issue #44 — root cause was N+1 queries"`, `entry_type: "research"`, `issue_number: 44`, `project_number: 5`, `tags: ["performance", "investigation"]` | `issue_number: 44` filter, `project_number: 5` filter, semantic search for "performance" |
58
- | S8 | `create_entry` | `content: "Code review feedback from PR #67 merged — refactored authentication middleware"`, `entry_type: "code_review"`, `pr_number: 67`, `pr_status: "merged"`, `tags: ["code-review", "auth"]` | `pr_status: "merged"` filter, `pr_number` filter, `auth*` prefix |
59
- | S9 | `create_entry` | `content: "CI workflow run completed — all 910 tests passing across 3 test suites"`, `entry_type: "technical_note"`, `workflow_run_id: 12345`, `workflow_name: "lint-and-test"`, `workflow_status: "completed"`, `tags: ["ci", "testing"]` | `workflow_run_id` filter, workflow field persistence |
60
- | S10 | `create_entry` | `content: "Personal reflection on improving development velocity and reducing technical debt"`, `entry_type: "personal_reflection"`, `is_personal: true`, `tags: ["personal", "velocity"]` | `is_personal: true` filter, semantic search for "improving performance" |
61
-
62
- ### 0.3 Team & Cross-DB Entries
63
-
64
- These entries ensure cross-DB search merging (`source: 'personal' | 'team'`) returns results from both databases.
65
-
66
- | # | Tool | Params | Enables Tests |
67
- | --- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------- |
68
- | S11 | `create_entry` | `content: "Architecture decision: adopted event-driven design for webhook processing"`, `entry_type: "project_decision"`, `share_with_team: true`, `tags: ["architecture", "team-shared"]` | Cross-DB `search_entries` with `source` marker, team search, `architecture` FTS5 |
69
- | S12 | `team_create_entry` | `content: "Team standup: discussed authorization flow improvements and deploy pipeline"`, `entry_type: "standup"`, `tags: ["standup", "auth", "deploy"]` | Team-only search, cross-DB date range, `auth*` and `deploy` in team DB |
70
-
71
- ### 0.5 Cross-Project Insights Seed
72
-
73
- > [!IMPORTANT]
74
- > `get_cross_project_insights` and `team_get_cross_project_insights` require a **minimum of 3 entries** sharing the same `project_number` before they appear in results (default `min_entries: 3`). S7 already has `project_number: 5` — add S13–S14 to reach the threshold in the personal journal. S15–S17 seed the team DB with project-linked entries.
75
-
76
- **Personal journal — complete project #5 to 3 entries:**
77
-
78
- | # | Tool | Params | Enables Tests |
79
- | --- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
80
- | S13 | `create_entry` | `content: "Completed sprint planning for project #5: scoped auth and deploy milestones"`, `entry_type: "planning"`, `project_number: 5`, `tags: ["planning", "sprint"]` | `project_number: 5` filter, `get_cross_project_insights` non-zero `project_count` |
81
- | S14 | `create_entry` | `content: "Project #5 retrospective: identified bottlenecks in deployment pipeline and action items"`, `entry_type: "personal_reflection"`, `project_number: 5`, `tags: ["retrospective", "deploy"]` | `get_cross_project_insights` — 3rd entry to meet `min_entries: 3` for project 5 |
82
-
83
- **Team DB — seed 3 project-linked entries:**
84
-
85
- | # | Tool | Params | Enables Tests |
86
- | --- | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
87
- | S15 | `team_create_entry` | `content: "Team kickoff for project #5: aligned on goals and delivery timeline"`, `entry_type: "standup"`, `project_number: 5`, `tags: ["kickoff", "project"]` | `team_get_cross_project_insights` non-zero `project_count` |
88
- | S16 | `team_create_entry` | `content: "Project #5 mid-sprint check-in: auth module ahead of schedule, deploy pipeline at risk"`, `entry_type: "standup"`, `project_number: 5`, `tags: ["standup", "project"]` | `team_get_cross_project_insights` — 2nd team entry for project 5 |
89
- | S17 | `team_create_entry` | `content: "Project #5 release review: all acceptance criteria met, feature flags enabled for rollout"`, `entry_type: "standup"`, `project_number: 5`, `tags: ["release", "project", "team-shared"]` | `team_get_cross_project_insights` — 3rd team entry to meet `min_entries: 3` threshold |
90
-
91
- ### 0.4 Post-Seed Verification
92
-
93
- After creating all 17 entries, verify the seed data is searchable:
94
-
95
- | Check | Command | Expected |
96
- | --------------------------- | ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
97
- | FTS5 indexed | `search_entries(query: "architecture")` | ≥ 1 result (S1 or S11 depending on BM25 rank); use phrase `"authentication architecture"` to ensure S1 specifically |
98
- | Filters work | `search_entries(issue_number: 44)` | ≥ 1 result (S7) |
99
- | Cross-DB merged | `search_entries(query: "architecture")` | At least 1 result includes `source: 'team'` (S11); use `auth*` for cross-DB results spanning both DBs |
100
- | Rebuild vector index | `rebuild_vector_index` | `entriesIndexed` > 0 |
101
- | Semantic search | `semantic_search(query: "improving performance")` | ≥ 1 result (S7, S10 should be semantically similar) |
102
- | Cross-project insights | `get_cross_project_insights({})` | `project_count ≥ 1`, project 5 appears with `entry_count ≥ 3` |
103
- | Team cross-project insights | `team_get_cross_project_insights({})` | `project_count ≥ 1`, project 5 appears with `entry_count ≥ 3` |
104
-
105
- ---
106
-
107
- ## Phase 1: Core Infrastructure
108
-
109
- ### 1.1 Server Health & Connectivity
110
-
111
- | Test | Command/Action | Expected Result |
112
- | ------------------ | ---------------------- | ----------------------------------------------------------------------------------------------- |
113
- | Basic connectivity | `test_simple` | Returns echo message |
114
- | Health resource | Read `memory://health` | Shows DB stats, tool filter status, vector index health |
115
- | Health team block | Read `memory://health` | Includes `teamDatabase` block with `configured`, `entryCount`, `path` (requires `TEAM_DB_PATH`) |
116
- | Scheduler inactive | Read `memory://health` | `scheduler.active: false`, `scheduler.jobs: []` (scheduler is HTTP-only, inactive in stdio) |
117
- | Statistics | `get_statistics` | Returns `structuredContent` with entry counts, types, periods |
118
- | Enhanced analytics | `get_statistics` | Returns `decisionDensity`, `relationshipComplexity`, `activityTrend`, `causalMetrics` |
119
-
120
- ### 1.2 Briefing Resource
121
-
122
- | Test | Command/Action | Expected Result |
123
- | -------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------ |
124
- | Read briefing | Read `memory://briefing` | Returns JSON with `userMessage`, `templateResources`, `journal`, `github` |
125
- | Verify `lastModified` annotation | Check resource metadata | ISO 8601 timestamp (client-dependent — AntiGravity doesn't expose MCP annotations) |
126
- | Confirm `userMessage` | Inspect briefing.userMessage | Formatted table with project/branch/CI/journal stats |
127
- | Milestone progress row | Inspect briefing.userMessage | Table includes milestone progress row (e.g., "🚩 Milestones: X open") |
128
- | Team DB row | Inspect briefing.userMessage | Table includes "Team DB" row with team entry count (requires `TEAM_DB_PATH`) |
129
- | Template URIs | Check `templateResources` array | 7 template URIs listed (includes `memory://milestones/{number}`) |
130
- | Workflow summary | Inspect `github.workflowSummary` | Present when `BRIEFING_WORKFLOW_STATUS=true` — has `passing`, `failing`, `pending`, `cancelled` counts |
131
- | Workflow named runs | Inspect `workflowSummary.runs` | Array of `{name, conclusion}` when `BRIEFING_WORKFLOW_COUNT > 0`; CI row shows icons (✅/❌) |
132
- | Rules metadata | Inspect `rulesFile` field | Present when `RULES_FILE_PATH` set — has `name`, `sizeKB`, `lastModified` |
133
- | Skills metadata | Inspect `skillsDir` field | Present when `SKILLS_DIR_PATH` set — has `count`, `names` array |
134
- | Enhanced CI row | Inspect briefing.userMessage | CI row shows breakdown or named runs (not just single-word status) when workflow env vars are set |
135
-
136
- ### 1.3 Protocol Validation — Run via Scripts - DO NOT SKIP!
137
-
138
- > [!IMPORTANT]
139
- > These tests require **separate server starts** — they cannot be run via MCP tool calls. Run the scripts below in a terminal. See `test-server/README.md` for full details and script locations.
140
-
141
- ```powershell
142
- # Test A — Instruction levels (essential < standard < full)
143
- node test-server/test-instruction-levels.mjs
144
-
145
- # Test B — Tool annotations (61 tools, 45 openWorldHint=false, 16 openWorldHint=true, 0 missing)
146
- node test-server/test-tool-annotations.mjs
147
- ```
148
-
149
- | Check | Expected |
150
- | ------------------ | -------------------------------------------------------------------- |
151
- | Instruction levels | essential (~1.5K) < standard (~1.7K) < full (~2.7K tokens) |
152
- | Tool annotations | 61 tools, all with `annotations`, 45 `false` + 16 `true` = 0 missing |
153
-
154
- ### 1.4 GitHub Status Resource
155
-
156
- | Test | Command/Action | Expected Result |
157
- | ----------------- | ----------------------------- | ---------------------------------------------------------------- |
158
- | Read status | Read `memory://github/status` | Compact JSON with repo, branch, CI, issues, PRs, Kanban summary |
159
- | CI status mapping | Verify CI status value | Shows `passing`, `failing`, `pending`, `cancelled`, or `unknown` |
160
- | Milestone data | Inspect status data | Includes milestones summary (open count, completion percentages) |
161
-
162
- ---
163
-
164
- ## Phase 2: Entry CRUD Operations
165
-
166
- ### 2.1 Create Entry
167
-
168
- | Test | Command/Action | Expected Result |
169
- | -------------------- | ----------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
170
- | Minimal create | `create_entry_minimal(content: "Test entry")` | Returns entry ID |
171
- | Full create | `create_entry(content: "...", entry_type: "planning", tags: ["test"])` | Entry created with metadata |
172
- | With GitHub linking | `create_entry(..., issue_number: <N>)` | Entry links to issue |
173
- | issueUrl auto-pop | `create_entry(content: "...", issue_number: <N>)` — omit issueUrl | `issueUrl` auto-populated from cached repo info (requires prior `get_github_context`) |
174
- | Invalid entry_type | `create_entry(content: "test", entry_type: "invalid")` | Structured error: `{ success: false, error: "..." }` listing valid enum values |
175
- | Invalid significance | `create_entry(content: "test", significance_type: "invalid")` | Structured error: `{ success: false, error: "..." }` listing valid enum values |
176
- | With PR fields | `create_entry(content: "PR test", pr_number: 67, pr_status: "merged")` | Entry created with `prNumber`, `prStatus` fields persisted |
177
- | With workflow fields | `create_entry(content: "CI test", workflow_run_id: 123, workflow_name: "CI", workflow_status: "completed")` | Entry created with all workflow fields persisted |
178
- | With project_owner | `create_entry(content: "...", project_number: 5, project_owner: "neverinfamous")` | Entry created with `projectOwner` field |
179
- | auto_context off | `create_entry(content: "No context", auto_context: false)` | Entry created without auto-generated context |
180
- | share_with_team | `create_entry(content: "Shared entry", share_with_team: true)` | Entry in personal DB + team DB; response has `sharedWithTeam: true`, `author` |
181
-
182
- ### 2.2 Read & Update
183
-
184
- | Test | Command/Action | Expected Result |
185
- | ------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------ |
186
- | Get by ID | `get_entry_by_id(entry_id: <N>)` | Returns `structuredContent` with relationships |
187
- | Importance score | `get_entry_by_id(entry_id: <N>)` | Response includes `importance` field (0.0-1.0) and `importanceBreakdown` |
188
- | No relationships | `get_entry_by_id(entry_id: <N>, include_relationships: false)` | Response omits `relationships` array (or returns empty) |
189
- | Update tags | `update_entry(entry_id: <N>, tags: ["updated"])` | Tags changed |
190
- | Update content | `update_entry(entry_id: <N>, content: "Updated content")` | Content changed; verify via `get_entry_by_id` |
191
- | Update entry_type | `update_entry(entry_id: <N>, entry_type: "technical_note")` | Entry type changed |
192
- | Update is_personal | `update_entry(entry_id: <N>, is_personal: false)` | `isPersonal` toggled |
193
- | Update nonexistent | `update_entry(entry_id: 999999, tags: ["x"])` | Returns `{ success: false, error: "Entry 999999 not found" }` |
194
- | Update invalid type | `update_entry(entry_id: <N>, entry_type: "invalid")` | Structured error listing valid enum values |
195
- | Get recent | `get_recent_entries(limit: 5)` | Returns `structuredContent` array |
196
- | Get recent (personal) | `get_recent_entries(limit: 5, is_personal: true)` | Only personal entries returned |
197
- | Get recent (not personal) | `get_recent_entries(limit: 5, is_personal: false)` | Only non-personal entries returned |
198
-
199
- ### 2.3 Delete (Test Last!)
200
-
201
- | Test | Command/Action | Expected Result |
202
- | ------------------------ | ----------------------------------------------------- | --------------------------------------------------------- |
203
- | Soft delete | `delete_entry(entry_id: <test_id>, permanent: false)` | Entry hidden from search |
204
- | Permanent delete | `delete_entry(entry_id: <test_id>, permanent: true)` | Entry removed |
205
- | Delete nonexistent entry | `delete_entry(entry_id: 999999, permanent: false)` | Returns `success: false, error: "Entry 999999 not found"` |
206
-
207
- ---
208
-
209
- ## Phase 3: Search Tools
210
-
211
- ### 3.1 Text Search
212
-
213
- | Test | Command/Action | Expected Result |
214
- | --------------------- | ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
215
- | FTS5 search | `search_entries(query: "architecture")` | ≥ 1 result — S1 and S11 both indexed; BM25 may rank team entry first; use `search_entries(query: "authentication architecture")` to target S1 specifically |
216
- | FTS5 phrase | `search_entries(query: "\"error handling\"")` | ≥ 1 result (S2) — exact phrase match only; the query param value must contain the literal quotes as part of the string: `"error handling"` (not JSON escape sequences) |
217
- | FTS5 prefix | `search_entries(query: "auth*")` | ≥ 2 results (S1, S8) — matches "authentication", "authorization", etc. |
218
- | FTS5 boolean NOT | `search_entries(query: "deploy NOT staging")` | Returns S3, S11 but NOT S5 (S5 contains "staging") |
219
- | FTS5 boolean OR | `search_entries(query: "deploy OR release")` | ≥ 2 results (S3, S4, S5 expected) |
220
- | FTS5 fallback | `search_entries(query: "test's")` | ≥ 1 result (S6) — LIKE fallback, single quotes are FTS5-unsafe |
221
- | FTS5 special chars | `search_entries(query: "100%")` | ≥ 1 result (S6) — LIKE fallback, `%` is FTS5-unsafe |
222
- | Date range | `search_by_date_range(start_date: "2026-01-01", end_date: "2026-01-31")` | Returns `structuredContent` array |
223
- | Cross-DB search | `search_entries(query: "test")` | Results include `source: 'personal' \| 'team'` marker on each entry |
224
- | Cross-DB date | `search_by_date_range(start_date: "2026-01-01", end_date: "2026-12-31")` | Results include `source` marker merging personal + team entries |
225
- | Invalid date fmt | `search_by_date_range(start_date: "Jan 1", end_date: "Jan 31")` | Structured error: `{ success: false, error: "..." }` with YYYY-MM-DD hint |
226
- | Filter by issue | `search_entries(issue_number: 44)` | Returns entries linked to issue #44 |
227
- | Filter by PR status | `search_entries(pr_status: "merged")` | Returns entries with `prStatus: "merged"` |
228
- | Filter by workflow | `search_entries(workflow_run_id: <N>)` | Returns entries linked to workflow run |
229
- | Filter by project | `search_entries(project_number: 5)` | Returns entries linked to project #5 |
230
- | Filter by is_personal | `search_entries(query: "test", is_personal: true)` | Only personal entries returned |
231
- | Date range + type | `search_by_date_range(start_date: "2026-01-01", end_date: "2026-12-31", entry_type: "planning")` | Only "planning" entries in date range |
232
- | Date range + tags | `search_by_date_range(start_date: "2026-01-01", end_date: "2026-12-31", tags: ["test"])` | Only entries with "test" tag in date range |
233
- | Date range + personal | `search_by_date_range(start_date: "2026-01-01", end_date: "2026-12-31", is_personal: true)` | Only personal entries in date range |
234
- | Date range + project | `search_by_date_range(start_date: "2026-01-01", end_date: "2026-12-31", project_number: 5)` | Only project #5 entries in date range |
235
- | Inverted date range | `search_by_date_range(start_date: "2026-12-31", end_date: "2026-01-01")` | Returns `{ success: false, error: "Invalid date range: start_date (...) is after end_date (...)", code: "VALIDATION_ERROR", suggestion: "Ensure start_date is before or equal to end_date" }` |
236
-
237
- > [!NOTE]
238
- > **Cross-DB Search Behavior:** When a team DB is present, per-DB queries fetch `limit × 2` (capped at 500) to prevent BM25 ranking in one DB from silently dropping entries before the cross-DB merge. The user's requested `limit` is applied after merging.
239
- >
240
- > **Code Mode API Group Structure:** When testing `mj_execute_code`, methods are bound to specific groups. Key mapping: `listTags` → `mj.core`, `mergeTags` → `mj.admin`, `getStatistics` → `mj.analytics`. Use `mj.help()` or `mj.<group>.help()` to discover available methods per group.
241
-
242
- ### 3.2 Semantic Search
243
-
244
- | Test | Command/Action | Expected Result |
245
- | ---------------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------------------- |
246
- | Vector index stats | `get_vector_index_stats` | Shows `itemCount`, `modelName`, `dimensions` |
247
- | Rebuild index | `rebuild_vector_index` | `entriesIndexed` > 0 (indexes seed entries) |
248
- | Semantic query | `semantic_search(query: "improving performance")` | ≥ 1 result — S7, S10 semantically similar |
249
- | Custom threshold | `semantic_search(query: "performance", similarity_threshold: 0.5)` | Fewer results than default threshold (0.25) |
250
- | Personal filter | `semantic_search(query: "test", is_personal: true)` | Only personal entries in results |
251
- | Hint disabled | `semantic_search(query: "xyznonexistent", hint_on_empty: false)` | Noise results with quality gate `hint` still shown (only advisory hints suppressed) |
252
- | Hint enabled (default) | `semantic_search(query: "xyznonexistent")` | Noise results with quality gate `hint` (all hints shown) |
253
-
254
- ### 3.3 Analytics & Index Management
255
-
256
- | Test | Command/Action | Expected Result |
257
- | ------------------------ | ------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------- |
258
- | Stats group by month | `get_statistics(group_by: "month")` | Periods grouped by month |
259
- | Stats group by day | `get_statistics(group_by: "day")` | Periods grouped by day |
260
- | Stats with dates | `get_statistics(start_date: "2026-01-01", end_date: "2026-03-01")` | Returns `dateRange` in response; results filtered to date range |
261
- | Stats project breakdown | `get_statistics(project_breakdown: true)` | Returns `projectBreakdown` array with per-project stats |
262
- | Cross-project insights | `get_cross_project_insights` | `project_count ≥ 1`, `projects` array with project 5 (entry_count ≥ 3, top_tags present) |
263
- | Insights with dates | `get_cross_project_insights(start_date: "2026-01-01", end_date: "2026-03-01")` | Date-filtered project insights — project 5 visible if S7/S13/S14 within range |
264
- | Insights min_entries | `get_cross_project_insights(min_entries: 1)` | Same or more projects than default (min_entries: 3) |
265
- | Add to vector index | `add_to_vector_index(entry_id: <existing_id>)` | `success: true`, `entryId` in response |
266
- | Add nonexistent to index | `add_to_vector_index(entry_id: 999999)` | Returns `{ success: false, error: "..." }` |
267
-
268
- ---
269
-
270
- ## Phase 4: Relationships & Visualization
271
-
272
- ### 4.1 Basic Relationships
273
-
274
- | Test | Command/Action | Expected Result |
275
- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
276
- | Link entries | `link_entries(from_entry_id: <A>, to_entry_id: <B>, relationship_type: "references")` | Relationship created |
277
- | Duplicate link | Call `link_entries` again with same params | Returns `duplicate: true`, `message`, existing relationship |
278
- | Link nonexistent source | `link_entries(from_entry_id: 999999, to_entry_id: <B>, ...)` | Returns `success: false`, message: `"One or both entries not found (from: 999999, to: <B>)"` |
279
- | Link nonexistent target | `link_entries(from_entry_id: <A>, to_entry_id: 999999, ...)` | Returns `success: false`, message: `"One or both entries not found (from: <A>, to: 999999)"` |
280
- | Visualize | `visualize_relationships(entry_id: <A>)` | JSON object with `mermaid` string field containing diagram, `entry_count`, `relationship_count`, `legend` |
281
- | Link with description | `link_entries(from_entry_id: <A>, to_entry_id: <C>, relationship_type: "implements", description: "Implements the plan")` | Relationship created with `description` field |
282
- | Reverse duplicate | `link_entries(from_entry_id: <B>, to_entry_id: <A>, relationship_type: "references")` | Succeeds — only same-direction duplicates are checked (confirmed) |
283
- | Visualize nonexistent | `visualize_relationships(entry_id: 999999)` | Returns `message: "Entry 999999 not found"` |
284
- | Visualize by tags | `visualize_relationships(tags: ["test"])` | Diagram scoped to entries with "test" tag |
285
- | Visualize depth 3 | `visualize_relationships(entry_id: <A>, depth: 3)` | Deeper traversal than default `depth: 2` |
286
- | Visualize custom limit | `visualize_relationships(entry_id: <A>, limit: 5)` | Diagram limited to 5 entries |
287
- | Graph resource | Read `memory://graph/recent` | Raw Mermaid text (`text/plain` MIME), arrows harmonized with `visualize_relationships` |
288
-
289
- ### 4.2 Causal Relationship Types
290
-
291
- | Test | Command/Action | Expected Result |
292
- | ----------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
293
- | blocked_by type | `link_entries(from_entry_id: <A>, to_entry_id: <B>, relationship_type: "blocked_by")` | Relationship created with `blocked_by` type |
294
- | resolved type | `link_entries(from_entry_id: <A>, to_entry_id: <B>, relationship_type: "resolved")` | Relationship created with `resolved` type |
295
- | caused type | `link_entries(from_entry_id: <A>, to_entry_id: <B>, relationship_type: "caused")` | Relationship created with `caused` type |
296
- | Causal viz arrows | `visualize_relationships(entry_id: <A>)` | Mermaid shows `--x` (blocked_by), `==>` (resolved), `-.->` (caused) arrows |
297
- | Graph harmonized | Read `memory://graph/recent` | Raw Mermaid `text/plain`: `--x`, `==>`, `-.->` for causal types, `-->` for references |
298
-
299
- ---
300
-
301
- ## Phase 5: Admin & Backup Tools
302
-
303
- ### 5.1 Tags
304
-
305
- | Test | Command/Action | Expected Result |
306
- | ----------------- | ------------------------------------------------------------- | --------------------------------------------------------------------------- |
307
- | List tags | `list_tags` | Returns all tags with counts |
308
- | Create source tag | `create_entry(content: "Test tag merge", tags: ["test-old"])` | Creates "test-old" tag (pre-req) |
309
- | Merge tags | `merge_tags(source_tag: "test-old", target_tag: "test-new")` | Merges source into target, deletes source |
310
- | Verify merge | `list_tags` + `search_entries(query: "Test tag merge")` | "test-old" gone, "test-new" exists, entry now has "test-new" tag |
311
- | Merge same tag | `merge_tags(source_tag: "test-new", target_tag: "test-new")` | Structured error: `{ success: false, error: "..." }` (source equals target) |
312
- | Merge nonexistent | `merge_tags(source_tag: "nonexistent-xyz", target_tag: "x")` | Structured error: `{ success: false, error: "Source tag not found: ..." }` |
313
-
314
- > [!NOTE]
315
- > If `restore_backup` is tested after `merge_tags`, the restored backup will revert the merge. This is expected behavior. Verify merge worked immediately after calling `merge_tags`, before any backup restoration.
316
-
317
- ### 5.2 Export
318
-
319
- | Test | Command/Action | Expected Result |
320
- | ----------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------- |
321
- | Export JSON | `export_entries(format: "json", limit: 5)` | JSON export with `entries` array |
322
- | Export markdown | `export_entries(format: "markdown", limit: 5)` | Markdown export with `content` string |
323
- | Export with tags | `export_entries(format: "json", tags: ["test"], limit: 10)` | Only entries with matching tags returned |
324
- | Export with dates | `export_entries(format: "json", start_date: "2026-01-01", end_date: "2026-03-01")` | Only entries within date range returned |
325
- | Export with entry_types | `export_entries(format: "json", entry_types: ["planning"], limit: 10)` | Only entries of specified type returned |
326
-
327
- ### 5.3 Backup & Restore
328
-
329
- | Test | Command/Action | Expected Result |
330
- | --------------------- | ----------------------------------------------------------- | -------------------------------------------------------------------------------- |
331
- | Create backup | `backup_journal(name: "test-backup")` | Backup file created with `success`, `filename`, `path`, `sizeBytes` |
332
- | Auto-named backup | `backup_journal` | Backup created with auto-generated timestamped name |
333
- | List backups | `list_backups` | Shows backup files with metadata including `path` field |
334
- | Cleanup backups | `cleanup_backups(keep_count: 5)` | Deletes old backups, keeps N most recent |
335
- | Backup path traversal | `backup_journal(name: "../../etc/passwd")` | Structured error: `{ success: false, error: "..." }` with path traversal message |
336
- | Restore backup | `restore_backup(filename: "test-backup.db", confirm: true)` | Restores + `revertedChanges` field with details |
337
- | Restore nonexistent | `restore_backup(filename: "nonexistent.db", confirm: true)` | Structured error: `{ success: false, error: "Backup file not found: ..." }` |
338
-
339
- ---
340
-
341
- ## Phase 6: Automated Scheduler — Run via Script [DO NOT SKIP!]
342
-
343
- > [!IMPORTANT]
344
- > The scheduler only activates in HTTP/SSE transport mode. Run the script below — it handles session init, health reads, and wait/verify automatically. See `test-server/README.md` for full details.
345
-
346
- ```powershell
347
- # Terminal 1: Start HTTP server with short scheduler intervals
348
- npm run build
349
- node dist/cli.js --transport http --port 3099 --backup-interval 1 --keep-backups 3 --vacuum-interval 2 --rebuild-index-interval 2
350
-
351
- # Terminal 2: Run scheduler test (waits 130s for jobs to fire)
352
- node test-server/test-scheduler.mjs
353
- ```
354
-
355
- | Check | Expected |
356
- | --------------------------- | ---------------------- |
357
- | `scheduler.active` | `true`, 3 jobs |
358
- | All jobs `lastResult` | `"success"` after wait |
359
- | All jobs `lastError` | `null` |
360
- | backup `runCount` | ≥ 2 |
361
- | vacuum + rebuild `runCount` | ≥ 1 each |
362
-
363
- ---
364
-
365
- ## Test Execution Order
366
-
367
- 0. **Phase 0**: Seed Test Data (creates entries for FTS5, filter, and semantic search tests)
368
- 1. **Phase 1**: Infrastructure (must pass before proceeding)
369
- 2. **Phase 2**: Entry CRUD (creates additional test data + validates CRUD operations)
370
- 3. **Phase 3**: Search + Analytics (requires entries from Phase 0 + 2)
371
- 4. **Phase 4**: Relationships (links entries from Phase 0 + 2)
372
- 5. **Phase 5**: Admin/Backup (test last to avoid data loss)
373
- 6. **Phase 6**: Automated Scheduler (HTTP only — manual terminal test)
374
-
375
- ---
376
-
377
- ## Success Criteria
378
-
379
- ### Core Functionality
380
-
381
- - [ ] All 24 core tools execute without errors on happy paths (GitHub tools tested in `test-tools2.md`, team tools in `test-tools-team.md`)
382
- - [ ] Server instructions length respects `--instruction-level`: essential (~1.5K tokens) < standard (~1.7K) < full (~2.7K)
383
- - [ ] 45 core/local tools have `openWorldHint: false`; 16 GitHub tools have `openWorldHint: true` (61 total, 0 missing)
384
-
385
- ### Entry CRUD
386
-
387
- - [ ] `create_entry` persists all optional fields: PR fields, workflow fields, `projectOwner`, `autoContext`
388
- - [ ] `create_entry` with `share_with_team: true` creates entries in both personal and team DBs
389
- - [ ] `create_entry` rejects invalid `entry_type` and `significance_type` with structured errors (not raw throws)
390
- - [ ] `create_entry` with `issue_number` auto-populates `issueUrl` from cached repo info
391
- - [ ] `get_entry_by_id` returns `importance` score (0.0-1.0) and `importanceBreakdown`
392
- - [ ] `get_recent_entries` with `is_personal` filter returns only matching entries
393
- - [ ] `update_entry` returns `success: false` for nonexistent entry IDs
394
- - [ ] `delete_entry` returns `success: false` for nonexistent entry IDs
395
-
396
- ### Search & Analytics
397
-
398
- - [ ] `search_entries` FTS5 phrase, prefix, and boolean operators work correctly
399
- - [ ] `search_entries` gracefully falls back to LIKE for FTS5-unsafe queries (single quotes, `%`)
400
- - [ ] `search_entries` filters work: `issue_number`, `pr_status`, `workflow_run_id`, `project_number`, `is_personal`
401
- - [ ] `search_by_date_range` filters work: `entry_type`, `tags`, `is_personal`, `project_number`
402
- - [ ] `search_by_date_range` rejects non-YYYY-MM-DD date strings with structured errors
403
- - [ ] Cross-DB merging includes `source: 'personal' | 'team'` marker
404
- - [ ] `semantic_search` with custom `similarity_threshold` affects result count
405
- - [ ] `get_statistics` returns all 4 enhanced analytics metrics with correct groupings
406
- - [ ] `get_cross_project_insights` returns `project_count ≥ 1` with seed entries S7, S13, S14 present (project 5 has 3 entries, meeting `min_entries: 3`)
407
- - [ ] `get_cross_project_insights` response includes `top_tags`, `first_entry`, `last_entry`, `active_days`, `time_distribution` per project
408
- - [ ] `get_cross_project_insights` returns all required schema fields (including `projects: []`) when empty (tested with `min_entries: 9999`)
409
-
410
- ### Relationships
411
-
412
- - [ ] Causal relationship types (`blocked_by`, `resolved`, `caused`) create correctly
413
- - [ ] `link_entries` returns `success: false` for nonexistent entry IDs
414
- - [ ] `visualize_relationships` shows distinct arrows for causal types
415
- - [ ] `memory://graph/recent` uses harmonized arrows matching `visualize_relationships`
416
-
417
- ### Admin & Backup
418
-
419
- - [ ] `merge_tags` consolidates duplicate tags correctly — verified via `list_tags` and entry re-check
420
- - [ ] `merge_tags` returns structured error when source equals target or source tag nonexistent
421
- - [ ] `backup_journal` rejects names containing path traversal characters (`../`) with structured errors
422
- - [ ] `restore_backup` with nonexistent filename returns structured error
423
-
424
- ### Scheduler (Phase 6)
425
-
426
- - [ ] `memory://health` shows `scheduler.active: false` and empty `jobs` array in stdio mode
427
- - [ ] All 3 jobs active with `nextRun` timestamps in HTTP mode
428
- - [ ] All `lastResult` values are `"success"` after jobs fire
429
- - [ ] Error in one job does not prevent others from running