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,396 +0,0 @@
1
- # Test memory-journal-mcp — Error Handling, Integrity & Edge Cases
2
-
3
- Exhaustively validate the memory-journal-mcp server's prompt handlers, structured error responses, data integrity, boundary values, and implementation correctness.
4
-
5
- **Scope:** This file covers prompt handler verification, structured error testing, data integrity round-trips, boundary values, and implementation bug detection. Phases 3-7.
6
-
7
- **Prerequisites:**
8
-
9
- - The core tests in `test-tools.md` must have completed successfully and any fixes applied before running this file.
10
- - The schema/resource/GitHub tests in `test-tools2.md` must have completed successfully before running this file.
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-tools3.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. Read `memory://briefing` to confirm context loaded (the briefing table confirms receipt).
28
-
29
- ---
30
-
31
- ## Phase 3: Prompt Handler Verification (16 prompts) - **DO NOT SKIP!**
32
-
33
- > [!IMPORTANT]
34
- > Prompts return `GetPromptResult` objects with `messages` arrays. Most MCP clients don't expose `prompts/get` as a callable tool — run the script below instead. It handles session init, prompt listing, and shape verification automatically. See `test-server/README.md` for full details.
35
-
36
- ```powershell
37
- npm run build
38
- node test-server/test-prompts.mjs
39
- ```
40
-
41
- | Check | Expected |
42
- | -------------------- | -------------------------------------------------------------- |
43
- | Prompts listed | 16 prompts with correct argument signatures |
44
- | All 18 prompt calls | PASS — `messages[0].role === 'user'`, non-empty `content.text` |
45
- | Nonexistent prompt | MCP error (code `-32602`) |
46
- | Missing required arg | Error returned or handled gracefully |
47
- | **Total** | **20 pass, 0 fail** |
48
-
49
- The tables below document what the script tests — use them as a reference for manual verification or when adding new prompts.
50
-
51
- ### 3.1 Workflow Prompts (10 prompts)
52
-
53
- #### No-Argument Prompts
54
-
55
- | Prompt | Arguments | Expected Response |
56
- | -------------------- | --------- | --------------------------------------------------------------------------------------------------------------- |
57
- | `prepare-standup` | _(none)_ | `messages` array with 1 `user` role message containing "standup" and date references |
58
- | `weekly-digest` | _(none)_ | `messages` array with 1 `user` role message containing "weekly digest" |
59
- | `goal-tracker` | _(none)_ | `messages` array with 1 `user` role message containing "goals" and "milestones" |
60
- | `get-context-bundle` | _(none)_ | `messages` array with 1 `user` role message containing "Project context bundle", recent entries, and statistics |
61
- | `confirm-briefing` | _(none)_ | `messages` array with 1 `user` role message containing "Session Context Received" and entry count |
62
- | `session-summary` | _(none)_ | `messages` array with 1 `user` role message containing "session summary" and instructions for entry creation |
63
-
64
- #### Required-Argument Prompts
65
-
66
- | Prompt | Arguments | Expected Response |
67
- | ---------------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
68
- | `find-related` | `query: "architecture"` | `messages` array with 1 `user` role message containing `"architecture"` and matching entries (from seed data) |
69
- | `analyze-period` | `start_date: "2026-01-01"`, `end_date: "2026-12-31"` | `messages` array with 1 `user` role message containing date range and statistics JSON |
70
-
71
- #### Optional-Argument Prompts
72
-
73
- | Prompt | Arguments | Expected Response |
74
- | -------------------- | ------------------------------ | --------------------------------------------------------------------------------------------------------- |
75
- | `prepare-retro` | _(none — defaults to 14 days)_ | `messages` array with 1 `user` role message containing "retrospective" and "14 days" |
76
- | `prepare-retro` | `days: "7"` | `messages` array with 1 `user` role message containing "7 days" |
77
- | `get-recent-entries` | _(none — defaults to 10)_ | `messages` array with 1 `user` role message containing entries formatted with timestamps, types, and tags |
78
- | `get-recent-entries` | `limit: "3"` | `messages` array with 1 `user` role message containing at most 3 entries |
79
-
80
- ### 3.2 GitHub Prompts (6 prompts)
81
-
82
- #### Required-Argument Prompts
83
-
84
- | Prompt | Arguments | Expected Response |
85
- | --------------------------- | --------------------- | ---------------------------------------------------------------------------------------------------------------- |
86
- | `project-status-summary` | `project_number: "5"` | `messages` array with 1 `user` role message containing `"Project #5"` and status summary instructions |
87
- | `pr-summary` | `pr_number: "67"` | `messages` array with 1 `user` role message containing `"PR #67"` and journal entries for that PR (from seed S8) |
88
- | `code-review-prep` | `pr_number: "67"` | `messages` array with 1 `user` role message containing `"PR #67"` and review checklist instructions |
89
- | `pr-retrospective` | `pr_number: "67"` | `messages` array with 1 `user` role message containing `"PR #67"` and retrospective instructions |
90
- | `project-milestone-tracker` | `project_number: "5"` | `messages` array with 1 `user` role message containing `"Project #5"` and milestone entries (from seed S7) |
91
-
92
- #### No-Argument Prompts
93
-
94
- | Prompt | Arguments | Expected Response |
95
- | ------------------------ | --------- | ----------------------------------------------------------------------------------------------------------- |
96
- | `actions-failure-digest` | _(none)_ | `messages` array with 1 `user` role message containing "CI/CD failures" and workflow entries (from seed S9) |
97
-
98
- ### 3.3 Error Handling
99
-
100
- | Test | Action | Expected Result |
101
- | --------------------- | ----------------------------------------------------- | --------------------------------------------------------------------------------------- |
102
- | Missing required arg | `prompts/get` for `find-related` with no `query` | Structured error or empty query handled gracefully (handler uses `args['query'] ?? ''`) |
103
- | Missing required arg | `prompts/get` for `analyze-period` with no dates | Structured error or empty dates handled gracefully |
104
- | Nonexistent prompt | `prompts/get` for `nonexistent-prompt` | MCP error: prompt not found |
105
- | Invalid argument name | `prompts/get` for `prepare-standup` with `foo: "bar"` | Succeeds (no-argument prompt ignores extra args) |
106
-
107
- ### 3.4 Response Shape Verification
108
-
109
- For **every** prompt response, verify:
110
-
111
- | Check | Expected |
112
- | ---------------------- | ---------------------------------------------------------------------- |
113
- | `messages` is an array | `Array.isArray(result.messages) === true` |
114
- | At least 1 message | `messages.length >= 1` |
115
- | Message has `role` | `messages[0].role === 'user'` |
116
- | Message has `content` | `messages[0].content` is object with `type: 'text'` and `text: string` |
117
- | Text is non-empty | `messages[0].content.text.length > 0` |
118
-
119
- ---
120
-
121
- ## Phase 4: Structured Error Response Verification
122
-
123
- > [!IMPORTANT]
124
- > All 61 tools now use deterministic error handling via `formatHandlerError()` in `src/utils/error-helpers.ts`. Each handler is wrapped in a `try/catch` block that catches all errors (including Zod validation) and returns enriched structured responses. This phase verifies that no tool produces raw MCP error frames.
125
-
126
- ### Structured Error Response Pattern
127
-
128
- All tools return errors as structured objects via `formatHandlerError()` (never thrown). A thrown error propagates as a raw MCP error, which is unhelpful to clients. The expected pattern:
129
-
130
- ```json
131
- {
132
- "success": false,
133
- "error": "Human-readable error message",
134
- "code": "VALIDATION_ERROR",
135
- "category": "validation",
136
- "recoverable": false,
137
- "suggestion": "Check input parameters against the tool schema"
138
- }
139
- ```
140
-
141
- #### Handler Error vs MCP Error — How to Distinguish
142
-
143
- There are two kinds of error responses. Only one is correct:
144
-
145
- | Type | Source | What you see | Verdict |
146
- | -------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | ------------------ |
147
- | **Handler error** ✅ | Handler catches error and returns enriched `ErrorResponse` | Parseable JSON object with `success`, `error`, `code`, `category`, `recoverable` fields | Correct |
148
- | **MCP error** ❌ | Uncaught throw propagates to MCP framework | Raw text error string, often prefixed with `Error:`, wrapped in an `isError: true` content block — no `success` field | Bug — report as ❌ |
149
-
150
- **Concrete examples:**
151
-
152
- ```
153
- ✅ Handler error (correct):
154
- {"success": false, "error": "Entry 999999 not found"}
155
-
156
- ❌ MCP error (bug — handler threw instead of catching):
157
- content: [{type: "text", text: "Error: Entry 999999 not found"}]
158
- isError: true
159
- ```
160
-
161
- The MCP error case means the handler is missing a `try/catch` block. When testing, if you see a raw error string (especially one without a `success` field), report it as ❌.
162
-
163
- #### Zod Validation Errors
164
-
165
- Calling a tool with wrong parameter types or missing required fields triggers a Zod validation error. If the handler has no outer `try/catch`, this surfaces as a raw MCP error (often `-32602`). Test every tool with `{}` (empty params) if it has required parameters — the response must be a handler error, not an MCP error.
166
-
167
- ### Error Path Testing Checklist
168
-
169
- For each tool group, verify at least one scenario from each applicable row:
170
-
171
- | Error Scenario | Tool Groups to Test | Example Input |
172
- | ----------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- |
173
- | Nonexistent entry ID | core, admin, relationships | `entry_id: 999999` |
174
- | Invalid entry_type enum | core (`create_entry`, `update_entry`) | `entry_type: "invalid_type"` |
175
- | Invalid significance_type enum | core (`create_entry`) | `significance_type: "invalid"` |
176
- | Invalid date format | search (`search_by_date_range`) | `start_date: "Jan 1"` |
177
- | Inverted date range | search (`search_by_date_range`) | `start_date: "2026-12-31", end_date: "2026-01-01"` — verify behavior |
178
- | Vector manager unavailable | search (`semantic_search`) | Verify `{ success: false, error: "..." }` not raw throw |
179
- | Add nonexistent to vector index | admin (`add_to_vector_index`) | `entry_id: 999999` |
180
- | Nonexistent backup filename | backup (`restore_backup`) | `filename: "nonexistent.db"` |
181
- | Path traversal in backup name | backup (`backup_journal`) | `name: "../../etc/passwd"` |
182
- | Invalid relationship_type enum | relationships (`link_entries`) | `relationship_type: "invalid"` |
183
- | Missing required params (Zod) | **Every tool with required params** | `{}` (empty object — must return handler error, not MCP `-32602` error) |
184
- | Wrong param type (Zod) | **Tools with typed params** | Pass string where number expected, etc. |
185
- | No GitHub token / unavailable | github (all 16 tools) | Verify structured `{ error, requiresUserInput }` not raw throw |
186
- | Nonexistent GitHub issue | github (`get_github_issue`) | `issue_number: 999999` → `{ error: "Issue #999999 not found" }` |
187
- | Nonexistent GitHub PR | github (`get_github_pr`) | `pr_number: 999999` → `{ error: "PR #999999 not found" }` |
188
- | Nonexistent GitHub milestone | github (`get_github_milestone`) | `milestone_number: 999999` → `{ error: "Milestone #999999 not found" }` |
189
- | Close already-closed issue | github (`close_github_issue_with_entry`) | Close an issue that's already closed |
190
- | move_to_done without project_number | github (`close_github_issue_with_entry`) | `move_to_done: true` but no `project_number` |
191
- | Invalid Kanban target_status | github (`move_kanban_item`) | `target_status: "Nonexistent"` — ⚠️ verify outputSchema compatibility |
192
- | Nonexistent Kanban project | github (`get_kanban_board`) | `project_number: 99999` |
193
- | Merge same tag (source = target) | admin (`merge_tags`) | `source_tag: "x", target_tag: "x"` |
194
- | Merge nonexistent source tag | admin (`merge_tags`) | `source_tag: "nonexistent-xyz", target_tag: "test"` |
195
- | Team DB not configured | team (all 20 tools) | Returns `{ success: false, error: "Team database not configured..." }` |
196
- | Invalid team entry_type | team (`team_create_entry`) | `entry_type: "invalid"` → structured error |
197
- | Nonexistent team entry ID | team (`team_get_entry_by_id`, `team_update_entry`, `team_delete_entry`) | `entry_id: 999999` → structured error |
198
- | Invalid team date format | team (`team_search_by_date_range`) | `start_date: "Jan 1"` → structured error |
199
- | Merge same team tag | team (`team_merge_tags`) | `source_tag: "x", target_tag: "x"` → structured error |
200
- | Team link nonexistent | team (`team_link_entries`) | `from_entry_id: 999999` → structured error |
201
- | Team vector unavailable | team (`team_semantic_search`) | Verify `{ success: false, error: "..." }` not raw throw |
202
- | Team add nonexistent to vector | team (`team_add_to_vector_index`) | `entry_id: 999999` → structured error |
203
- | Team insights empty | team (`team_get_cross_project_insights`) | Returns all required schema fields even when empty |
204
-
205
- ### What to Report
206
-
207
- - ❌ **Fail**: Tool returns a raw MCP error (no JSON body with `success` field) instead of `{ success: false, error: "..." }`
208
- - ⚠️ **Issue**: Tool silently succeeds for invalid input (e.g., `update_entry` returns `success: true` for nonexistent entry)
209
- - ✅ **Pass**: Tool returns `{ success: false, error: "..." }` — correct structured error
210
-
211
- ### Wrong-Type Numeric Parameter Coercion
212
-
213
- For every tool with optional numeric parameters, call the tool with `param: "abc"` (string instead of number). The tool must NOT return a raw MCP `-32602` error. Acceptable behaviors:
214
-
215
- - Handler returns `{success: false, error: "..."}` with a validation message
216
- - Handler silently applies the default value
217
- - Handler coerces to NaN and returns a descriptive error
218
-
219
- Unacceptable: Raw MCP error frame with `-32602` code.
220
-
221
- | Tool | Parameter | Test Call |
222
- | --------------------------------- | ---------------------- | --------------------------------------------------------------------------------------------- |
223
- | `get_recent_entries` | `limit` | `get_recent_entries({limit: "abc"})` |
224
- | `search_entries` | `limit` | `search_entries({query: "test", limit: "abc"})` |
225
- | `search_by_date_range` | `limit` | `search_by_date_range({start_date: "2026-01-01", end_date: "2026-12-31", limit: "abc"})` |
226
- | `semantic_search` | `limit` | `semantic_search({query: "test", limit: "abc"})` |
227
- | `semantic_search` | `similarity_threshold` | `semantic_search({query: "test", similarity_threshold: "abc"})` |
228
- | `export_entries` | `limit` | `export_entries({format: "json", limit: "abc"})` |
229
- | `cleanup_backups` | `keep_count` | `cleanup_backups({keep_count: "abc"})` |
230
- | `visualize_relationships` | `depth` | `visualize_relationships({entry_id: 1, depth: "abc"})` |
231
- | `visualize_relationships` | `limit` | `visualize_relationships({entry_id: 1, limit: "abc"})` |
232
- | `get_github_issues` | `limit` | `get_github_issues({limit: "abc"})` |
233
- | `get_github_prs` | `limit` | `get_github_prs({limit: "abc"})` |
234
- | `team_get_recent` | `limit` | `team_get_recent({limit: "abc"})` |
235
- | `team_search_by_date_range` | `limit` | `team_search_by_date_range({start_date: "2026-01-01", end_date: "2026-12-31", limit: "abc"})` |
236
- | `team_export_entries` | `limit` | `team_export_entries({format: "json", limit: "abc"})` |
237
- | `team_visualize_relationships` | `depth` | `team_visualize_relationships({entry_id: 1, depth: "abc"})` |
238
- | `get_cross_project_insights` | `min_entries` | `get_cross_project_insights({min_entries: "abc"})` |
239
- | `team_semantic_search` | `limit` | `team_semantic_search({query: "test", limit: "abc"})` |
240
- | `team_semantic_search` | `similarity_threshold` | `team_semantic_search({query: "test", similarity_threshold: "abc"})` |
241
- | `team_get_cross_project_insights` | `min_entries` | `team_get_cross_project_insights({min_entries: "abc"})` |
242
-
243
- ### Reporting Format
244
-
245
- - ❌ Fail: Tool errors or produces incorrect results (include error message)
246
- - ⚠️ Issue: Unexpected behavior or improvement opportunity
247
- - 📦 Payload: Unnecessarily large response that could be optimized
248
-
249
- ---
250
-
251
- ## Phase 5: Data Integrity & Round-Trip Tests
252
-
253
- > [!NOTE]
254
- > These tests verify that data survives full lifecycles and that operations compose correctly.
255
-
256
- ### 5.1 Create → Read Round-Trip
257
-
258
- | Test | Steps | Expected Result |
259
- | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
260
- | All fields persist | 1. `create_entry(content: "RT test", entry_type: "planning", tags: ["rt"], pr_number: 99, pr_status: "open", workflow_run_id: 1, workflow_name: "CI", workflow_status: "completed", project_number: 5)` 2. `get_entry_by_id(entry_id: <new>)` | All fields match: `prNumber`, `prStatus`, `workflowRunId`, `workflowName`, `workflowStatus`, `projectNumber` |
261
- | share_with_team round-trip | 1. `create_entry(content: "Shared RT", share_with_team: true)` 2. `team_search(query: "Shared RT")` | Entry appears in team search with `author` field |
262
-
263
- ### 5.2 Soft Delete Isolation
264
-
265
- | Test | Steps | Expected Result |
266
- | --------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
267
- | Hidden from search | 1. Create entry 2. `delete_entry(entry_id: <id>, permanent: false)` 3. `search_entries(query: ...)` | Entry does not appear in search results |
268
- | Hidden from recent | Same setup, then `get_recent_entries` | Entry does not appear in recent results |
269
- | Hidden from semantic search | Same setup, then `semantic_search(query: ...)` | Entry does not appear in semantic results |
270
- | Still fetchable by ID | Same setup, then `get_entry_by_id(entry_id: <id>)` | ⚠️ Verify behavior — document whether soft-deleted entries are retrievable by direct ID |
271
-
272
- ### 5.3 Backup → Restore Integrity
273
-
274
- | Test | Steps | Expected Result |
275
- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ |
276
- | Entry count preserved | 1. Note `get_statistics` total 2. `backup_journal` 3. Create 2 entries 4. `restore_backup` 5. `get_statistics` | Total matches pre-backup count |
277
- | Specific entry survives | 1. Create entry with known content 2. `backup_journal` 3. `delete_entry(permanent: true)` 4. `restore_backup` 5. `get_entry_by_id` | Entry is restored with original content |
278
- | Relationships survive | 1. Link two entries 2. `backup_journal` 3. Delete one entry 4. `restore_backup` 5. `visualize_relationships` | Relationship graph is intact after restore |
279
- | Tags survive | 1. `merge_tags` 2. `backup_journal` 3. `restore_backup` 4. `list_tags` | Tags reflect post-merge state from backup |
280
-
281
- ### 5.4 Merge Tags Verification
282
-
283
- | Test | Steps | Expected Result |
284
- | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------- |
285
- | Entries re-tagged | 1. Create entries with "old-tag" 2. `merge_tags(source_tag: "old-tag", target_tag: "new-tag")` 3. `search_entries` for each entry | Each entry now has "new-tag", not "old-tag" |
286
- | Source tag removed | After merge, `list_tags` | "old-tag" no longer appears |
287
- | Target tag count accurate | After merge, `list_tags` | "new-tag" count equals sum of original counts |
288
-
289
- ---
290
-
291
- ## Phase 6: Boundary Value Tests
292
-
293
- > [!NOTE]
294
- > These tests exercise min/max limits and edge values defined in Zod schemas.
295
-
296
- | Test | Command/Action | Expected Result |
297
- | ------------------------------- | ----------------------------------------------------------- | ---------------------------------------------------- |
298
- | Content at max length | `create_entry(content: <50000 chars>)` | Entry created successfully |
299
- | Content empty string | `create_entry(content: "")` | Structured error: min length 1 |
300
- | get_recent limit=0 | `get_recent_entries(limit: 0)` | Structured error or empty results — verify behavior |
301
- | get_recent limit=500 | `get_recent_entries(limit: 500)` | Returns up to 500 entries (max boundary) |
302
- | get_recent limit=501 | `get_recent_entries(limit: 501)` | Structured error: exceeds max 500 |
303
- | search limit=500 | `search_entries(query: "test", limit: 500)` | Returns up to 500 entries |
304
- | search limit=501 | `search_entries(query: "test", limit: 501)` | Structured error: exceeds max 500 |
305
- | semantic_search limit=500 | `semantic_search(query: "test", limit: 500)` | Returns up to 500 entries |
306
- | semantic threshold=0.0 | `semantic_search(query: "test", similarity_threshold: 0.0)` | Returns all indexed entries (no threshold filtering) |
307
- | semantic threshold=1.0 | `semantic_search(query: "test", similarity_threshold: 1.0)` | Returns zero or very few results (exact match only) |
308
- | visualize depth=1 | `visualize_relationships(entry_id: <A>, depth: 1)` | Only direct relationships (no transitive) |
309
- | visualize depth=3 | `visualize_relationships(entry_id: <A>, depth: 3)` | Maximum depth traversal |
310
- | cleanup keep_count=1 | `cleanup_backups(keep_count: 1)` | Keeps only 1 backup, deletes rest |
311
- | cleanup keep_count=0 | `cleanup_backups(keep_count: 0)` | Structured error: min 1 |
312
- | get_statistics invalid group_by | `get_statistics(group_by: "invalid")` | Structured error or validation failure |
313
- | export limit=500 | `export_entries(format: "json", limit: 500)` | Returns up to 500 entries |
314
-
315
- ---
316
-
317
- ## Phase 7: Implementation Bug Detection
318
-
319
- > [!IMPORTANT]
320
- > These tests are designed to surface known or suspected implementation bugs where tool handlers accept parameters via Zod but silently ignore them. If a filter has no effect, report it as ⚠️ — the handler accepts the parameter but doesn't pass it to the database query.
321
-
322
- ### 7.1 Silent Filter Bugs
323
-
324
- | Test | Command/Action | Verification |
325
- | -------------------------- | --------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
326
- | export_entries tag filter | 1. Create entries with tag "export-test" and without 2. `export_entries(format: "json", tags: ["export-test"], limit: 100)` | ⚠️ All results should have "export-test" tag — if unfiltered, handler bug |
327
- | export_entries date filter | `export_entries(format: "json", start_date: "2099-01-01", end_date: "2099-12-31")` | ⚠️ Should return 0 entries for future dates — if returns entries, handler ignores dates |
328
- | export_entries type filter | `export_entries(format: "json", entry_types: ["milestone"], limit: 100)` | ⚠️ Should only return "milestone" type — if unfiltered, handler bug |
329
- | get_statistics date filter | `get_statistics(start_date: "2099-01-01", end_date: "2099-12-31")` | ⚠️ Should return 0 entries for future dates — if returns all entries, handler ignores dates |
330
- | get_statistics project | `get_statistics(project_breakdown: true)` | ⚠️ Verify if response includes project-level breakdown (currently not implemented) |
331
- | search_by_date_range issue | `search_by_date_range(start_date: "2026-01-01", end_date: "2026-12-31", issue_number: 44)` | ⚠️ Verify if issue filter applies (handler may not pass to DB query) |
332
- | search_by_date_range PR | `search_by_date_range(start_date: "2026-01-01", end_date: "2026-12-31", pr_number: 67)` | ⚠️ Verify if PR filter applies (handler may not pass to DB query) |
333
- | search_by_date_range wf | `search_by_date_range(start_date: "2026-01-01", end_date: "2026-12-31", workflow_run_id: 999)` | ⚠️ Verify if workflow filter applies (handler may not pass to DB query) |
334
-
335
- ### 7.2 OutputSchema Compatibility on Error Paths
336
-
337
- > [!NOTE]
338
- > Some tools return extra fields in error responses that aren't declared in their outputSchema. This can cause `-32602` errors when `structuredContent` validation is strict.
339
-
340
- | Test | Command/Action | Verification |
341
- | --------------------------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
342
- | move_kanban_item invalid status | `move_kanban_item(project_number: 5, item_id: <id>, target_status: "Bad")` | Error response includes `availableStatuses` — verify this doesn't break outputSchema |
343
- | get_repo_insights partial failure | `get_repo_insights(sections: "traffic")` (may require push access) | Verify partial API failures don't produce fields outside outputSchema |
344
-
345
- ### 7.3 Duplicate Relationship Direction
346
-
347
- | Test | Command/Action | Verification |
348
- | ------------------------ | ------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
349
- | Same-direction duplicate | `link_entries(from: A, to: B, type: "references")` twice | Second call returns `duplicate: true` — correct |
350
- | Reverse-direction | `link_entries(from: B, to: A, type: "references")` after A→B exists | ⚠️ Creates a second relationship (only same-direction checked) — document if intentional |
351
-
352
- ---
353
-
354
- ## Test Execution Order
355
-
356
- 3. **Phase 3**: Prompt Handler Verification (scripted + response shape for all 16 prompts)
357
- 4. **Phase 4**: Structured Error Response Verification (expanded error path testing for all groups)
358
- 5. **Phase 5**: Data Integrity & Round-Trip Tests (create→read, backup→restore, merge→verify)
359
- 6. **Phase 6**: Boundary Value Tests (min/max limits, Zod schema edges)
360
- 7. **Phase 7**: Implementation Bug Detection (silent filter bugs, schema compatibility, duplicate directions)
361
-
362
- ---
363
-
364
- ## Success Criteria
365
-
366
- ### Prompt Handlers (Phase 3)
367
-
368
- - [ ] All 16 prompts return valid `GetPromptResult` with `messages` array
369
- - [ ] Every message has `role: 'user'` and non-empty `content.text`
370
- - [ ] Nonexistent prompt name returns MCP error (not crash)
371
-
372
- ### Structured Error Verification (Phase 4)
373
-
374
- - [ ] **All tools return structured handler errors — no raw MCP error frames**
375
- - [ ] **Zod validation errors (empty params, wrong types) return `{ success: false, error: "..." }`**
376
-
377
- ### Data Integrity (Phase 5)
378
-
379
- - [ ] All `create_entry` fields survive round-trip through `get_entry_by_id`
380
- - [ ] Soft-deleted entries are hidden from all search/recent; direct ID fetch behavior documented
381
- - [ ] Backup → restore preserves entry counts, specific entries, relationships, and tags
382
- - [ ] `merge_tags` results verified: entries re-tagged, source removed, target count accurate
383
-
384
- ### Boundary Values (Phase 6)
385
-
386
- - [ ] Content at max length (50,000 chars) creates successfully
387
- - [ ] Empty content rejected
388
- - [ ] Limit boundaries: 0, 500, 501 behave correctly
389
- - [ ] `similarity_threshold` at 0.0 and 1.0 produce expected result counts
390
-
391
- ### Implementation Bugs (Phase 7)
392
-
393
- - [ ] ⚠️ `export_entries` filters (`tags`, `start_date/end_date`, `entry_types`) functional or documented
394
- - [ ] ⚠️ `get_statistics` filters (`start_date`, `end_date`, `project_breakdown`) functional or documented
395
- - [ ] ⚠️ `move_kanban_item` error path `availableStatuses` field doesn't break outputSchema
396
- - [ ] ⚠️ Reverse-direction relationship duplicate behavior documented as intentional or fixed