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.
- package/README.md +44 -28
- package/dist/{chunk-X4SWFATC.js → chunk-BI4ZNSKA.js} +38 -24
- package/dist/{chunk-HCEWINSB.js → chunk-N6EBIDN7.js} +99 -102
- package/dist/cli.js +2 -2
- package/dist/index.js +2 -2
- package/dist/tools-WPRY5MJ6.js +2 -0
- package/package.json +10 -1
- package/skills/github-commander/SKILL.md +151 -0
- package/skills/github-commander/config/project-config.example.md +125 -0
- package/skills/github-commander/workflows/code-quality-audit.md +80 -0
- package/skills/github-commander/workflows/full-audit.md +134 -0
- package/skills/github-commander/workflows/issue-triage.md +239 -0
- package/skills/github-commander/workflows/milestone-sprint.md +81 -0
- package/skills/github-commander/workflows/perf-audit.md +142 -0
- package/skills/github-commander/workflows/pr-review.md +123 -0
- package/skills/github-commander/workflows/security-audit.md +170 -0
- package/skills/github-commander/workflows/update-deps.md +109 -0
- package/.dockerignore +0 -139
- package/.gitattributes +0 -20
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -95
- package/.github/ISSUE_TEMPLATE/config.yml +0 -11
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -110
- package/.github/ISSUE_TEMPLATE/question.md +0 -78
- package/.github/aw/actions-lock.json +0 -14
- package/.github/copilot-instructions.md +0 -122
- package/.github/dependabot.yml +0 -93
- package/.github/pull_request_template.md +0 -135
- package/.github/workflows/README.md +0 -133
- package/.github/workflows/agentics-maintenance.yml +0 -141
- package/.github/workflows/auto-release.yml +0 -68
- package/.github/workflows/ci-health-monitor.lock.yml +0 -1121
- package/.github/workflows/ci-health-monitor.md +0 -87
- package/.github/workflows/codeql.yml +0 -41
- package/.github/workflows/dependabot-auto-merge.yml +0 -42
- package/.github/workflows/dependency-maintenance.lock.yml +0 -1182
- package/.github/workflows/dependency-maintenance.md +0 -147
- package/.github/workflows/docker-publish.yml +0 -254
- package/.github/workflows/docs-drift-detector.lock.yml +0 -1142
- package/.github/workflows/docs-drift-detector.md +0 -115
- package/.github/workflows/lint-and-test.yml +0 -60
- package/.github/workflows/publish-npm.yml +0 -85
- package/.github/workflows/secrets-scanning.yml +0 -32
- package/.github/workflows/security-update.yml +0 -127
- package/.gitleaks.toml +0 -9
- package/.prettierignore +0 -21
- package/.prettierrc +0 -33
- package/.scout-ignore +0 -12
- package/.trivyignore +0 -21
- package/CHANGELOG.md +0 -1814
- package/CODE_OF_CONDUCT.md +0 -133
- package/CONTRIBUTING.md +0 -263
- package/DOCKER_README.md +0 -331
- package/Dockerfile +0 -128
- package/SECURITY.md +0 -227
- package/UNRELEASED.md +0 -1
- package/dist/tools-T4U5A3X4.js +0 -2
- package/docker-compose.yml +0 -71
- package/docs/README.md +0 -18
- package/docs/agentic-journal-synergy.md +0 -175
- package/docs/copilot-setup.md +0 -72
- package/eslint.config.js +0 -110
- package/mcp-config-example.json +0 -21
- package/playwright.config.ts +0 -35
- package/releases/v2.1.0.md +0 -220
- package/releases/v2.2.0.md +0 -168
- package/releases/v3.0.0.md +0 -237
- package/releases/v3.1.0.md +0 -104
- package/releases/v3.1.1.md +0 -42
- package/releases/v3.1.2.md +0 -40
- package/releases/v3.1.3.md +0 -64
- package/releases/v3.1.4.md +0 -32
- package/releases/v3.1.5.md +0 -44
- package/releases/v4.0.0.md +0 -71
- package/releases/v4.1.0.md +0 -88
- package/releases/v4.2.0.md +0 -90
- package/releases/v4.3.0.md +0 -92
- package/releases/v4.3.1.md +0 -69
- package/releases/v4.4.0.md +0 -120
- package/releases/v4.4.1.md +0 -33
- package/releases/v4.4.2.md +0 -31
- package/releases/v4.5.0.md +0 -116
- package/releases/v5.0.0.md +0 -105
- package/releases/v5.0.1.md +0 -25
- package/releases/v5.1.0.md +0 -83
- package/releases/v5.1.1.md +0 -10
- package/releases/v6.0.0.md +0 -48
- package/releases/v6.0.1.md +0 -36
- package/releases/v6.1.0.md +0 -68
- package/releases/v6.1.1.md +0 -30
- package/releases/v6.1.2.md +0 -23
- package/scripts/generate-server-instructions.ts +0 -306
- package/scripts/server-instructions-function-body.ts +0 -107
- package/scripts/server-instructions-gotchas.ts +0 -45
- package/server.json +0 -42
- package/social-preview.png +0 -0
- package/src/auth/auth-context.ts +0 -78
- package/src/auth/authorization-server-discovery.ts +0 -263
- package/src/auth/errors.ts +0 -215
- package/src/auth/index.ts +0 -58
- package/src/auth/middleware.ts +0 -392
- package/src/auth/oauth-resource-server.ts +0 -170
- package/src/auth/scope-map.ts +0 -46
- package/src/auth/scopes.ts +0 -256
- package/src/auth/token-validator.ts +0 -293
- package/src/auth/transport-agnostic.ts +0 -164
- package/src/auth/types.ts +0 -372
- package/src/cli.ts +0 -279
- package/src/codemode/api-constants.ts +0 -263
- package/src/codemode/api.ts +0 -302
- package/src/codemode/auto-return.ts +0 -65
- package/src/codemode/index.ts +0 -47
- package/src/codemode/sandbox-factory.ts +0 -144
- package/src/codemode/sandbox.ts +0 -220
- package/src/codemode/security.ts +0 -155
- package/src/codemode/types.ts +0 -228
- package/src/codemode/worker-sandbox.ts +0 -277
- package/src/codemode/worker-script.ts +0 -239
- package/src/constants/icons.ts +0 -183
- package/src/constants/server-instructions.md +0 -166
- package/src/constants/server-instructions.ts +0 -514
- package/src/database/adapter-factory.ts +0 -16
- package/src/database/core/entry-columns.ts +0 -10
- package/src/database/core/interfaces.ts +0 -188
- package/src/database/core/schema.ts +0 -152
- package/src/database/sqlite-adapter/backup.ts +0 -167
- package/src/database/sqlite-adapter/entries/crud.ts +0 -233
- package/src/database/sqlite-adapter/entries/importance.ts +0 -76
- package/src/database/sqlite-adapter/entries/index.ts +0 -142
- package/src/database/sqlite-adapter/entries/search.ts +0 -294
- package/src/database/sqlite-adapter/entries/shared.ts +0 -102
- package/src/database/sqlite-adapter/entries/statistics.ts +0 -162
- package/src/database/sqlite-adapter/index.ts +0 -265
- package/src/database/sqlite-adapter/native-connection.ts +0 -301
- package/src/database/sqlite-adapter/relationships.ts +0 -70
- package/src/database/sqlite-adapter/tags.ts +0 -182
- package/src/filtering/tool-filter.ts +0 -312
- package/src/github/github-integration/client.ts +0 -114
- package/src/github/github-integration/index.ts +0 -297
- package/src/github/github-integration/insights.ts +0 -155
- package/src/github/github-integration/issues.ts +0 -213
- package/src/github/github-integration/milestones.ts +0 -262
- package/src/github/github-integration/projects.ts +0 -414
- package/src/github/github-integration/pull-requests.ts +0 -235
- package/src/github/github-integration/repository.ts +0 -110
- package/src/github/github-integration/types.ts +0 -43
- package/src/handlers/prompts/github.ts +0 -210
- package/src/handlers/prompts/index.ts +0 -97
- package/src/handlers/prompts/workflow.ts +0 -361
- package/src/handlers/resources/core/briefing/context-section.ts +0 -182
- package/src/handlers/resources/core/briefing/github-section.ts +0 -354
- package/src/handlers/resources/core/briefing/index.ts +0 -106
- package/src/handlers/resources/core/briefing/user-message.ts +0 -114
- package/src/handlers/resources/core/health.ts +0 -75
- package/src/handlers/resources/core/index.ts +0 -31
- package/src/handlers/resources/core/instructions.ts +0 -45
- package/src/handlers/resources/core/utilities.ts +0 -310
- package/src/handlers/resources/github.ts +0 -340
- package/src/handlers/resources/graph.ts +0 -218
- package/src/handlers/resources/help.ts +0 -410
- package/src/handlers/resources/index.ts +0 -143
- package/src/handlers/resources/shared.ts +0 -219
- package/src/handlers/resources/team.ts +0 -134
- package/src/handlers/resources/templates.ts +0 -334
- package/src/handlers/tools/admin.ts +0 -351
- package/src/handlers/tools/analytics.ts +0 -346
- package/src/handlers/tools/backup.ts +0 -272
- package/src/handlers/tools/codemode.ts +0 -188
- package/src/handlers/tools/core.ts +0 -359
- package/src/handlers/tools/error-fields-mixin.ts +0 -10
- package/src/handlers/tools/export.ts +0 -150
- package/src/handlers/tools/github/copilot-tools.ts +0 -72
- package/src/handlers/tools/github/helpers.ts +0 -125
- package/src/handlers/tools/github/insights-tools.ts +0 -112
- package/src/handlers/tools/github/issue-tools.ts +0 -442
- package/src/handlers/tools/github/kanban-tools.ts +0 -153
- package/src/handlers/tools/github/milestone-tools.ts +0 -371
- package/src/handlers/tools/github/mutation-tools.ts +0 -17
- package/src/handlers/tools/github/read-tools.ts +0 -302
- package/src/handlers/tools/github/schemas.ts +0 -435
- package/src/handlers/tools/github.ts +0 -39
- package/src/handlers/tools/index.ts +0 -255
- package/src/handlers/tools/relationships.ts +0 -390
- package/src/handlers/tools/schemas.ts +0 -165
- package/src/handlers/tools/search.ts +0 -448
- package/src/handlers/tools/team/admin-tools.ts +0 -164
- package/src/handlers/tools/team/analytics-tools.ts +0 -233
- package/src/handlers/tools/team/backup-tools.ts +0 -83
- package/src/handlers/tools/team/core-tools.ts +0 -197
- package/src/handlers/tools/team/export-tools.ts +0 -130
- package/src/handlers/tools/team/helpers.ts +0 -66
- package/src/handlers/tools/team/index.ts +0 -45
- package/src/handlers/tools/team/relationship-tools.ts +0 -219
- package/src/handlers/tools/team/schemas.ts +0 -558
- package/src/handlers/tools/team/search-tools.ts +0 -145
- package/src/handlers/tools/team/vector-tools.ts +0 -261
- package/src/index.ts +0 -57
- package/src/server/mcp-server.ts +0 -446
- package/src/server/registration.ts +0 -141
- package/src/server/scheduler.ts +0 -283
- package/src/transports/http/handlers.ts +0 -78
- package/src/transports/http/index.ts +0 -8
- package/src/transports/http/security.ts +0 -147
- package/src/transports/http/server/index.ts +0 -397
- package/src/transports/http/server/legacy-sse.ts +0 -87
- package/src/transports/http/server/stateful.ts +0 -222
- package/src/transports/http/server/stateless.ts +0 -42
- package/src/transports/http/types.ts +0 -132
- package/src/types/entities.ts +0 -145
- package/src/types/error-types.ts +0 -92
- package/src/types/errors.ts +0 -200
- package/src/types/filtering.ts +0 -55
- package/src/types/github.ts +0 -216
- package/src/types/index.ts +0 -348
- package/src/utils/error-helpers.ts +0 -78
- package/src/utils/errors/error-response-fields.ts +0 -29
- package/src/utils/errors/suggestions.ts +0 -94
- package/src/utils/github-helpers.ts +0 -33
- package/src/utils/logger.ts +0 -107
- package/src/utils/mcp-logger.ts +0 -155
- package/src/utils/progress-utils.ts +0 -100
- package/src/utils/query-helpers.ts +0 -78
- package/src/utils/resource-annotations.ts +0 -75
- package/src/utils/security-utils.ts +0 -198
- package/src/utils/vector-index-helpers.ts +0 -24
- package/src/vector/vector-search-manager.ts +0 -409
- package/src/version.ts +0 -15
- package/test-server/README.md +0 -193
- package/test-server/code-map.md +0 -399
- package/test-server/test-agent-experience.md +0 -213
- package/test-server/test-filter-instructions.mjs +0 -295
- package/test-server/test-instruction-levels.mjs +0 -102
- package/test-server/test-preflight.md +0 -55
- package/test-server/test-prompts.mjs +0 -185
- package/test-server/test-scheduler.mjs +0 -174
- package/test-server/test-tool-annotations.mjs +0 -115
- package/test-server/test-tools-codemode.md +0 -632
- package/test-server/test-tools-codemode2.md +0 -1218
- package/test-server/test-tools-team.md +0 -215
- package/test-server/test-tools.md +0 -429
- package/test-server/test-tools2.md +0 -361
- package/test-server/test-tools3.md +0 -396
- package/test-server/tool-reference.md +0 -231
- package/tests/README.md +0 -54
- package/tests/auth/auth-context.test.ts +0 -162
- package/tests/auth/authorization-server-discovery.test.ts +0 -265
- package/tests/auth/errors.test.ts +0 -170
- package/tests/auth/middleware.test.ts +0 -585
- package/tests/auth/oauth-resource-server.test.ts +0 -173
- package/tests/auth/scope-map.test.ts +0 -66
- package/tests/auth/scopes.test.ts +0 -347
- package/tests/auth/token-validator.test.ts +0 -271
- package/tests/codemode/api.test.ts +0 -396
- package/tests/codemode/auto-return.test.ts +0 -167
- package/tests/codemode/codemode-tool-handlers.test.ts +0 -197
- package/tests/codemode/sandbox-factory.test.ts +0 -152
- package/tests/codemode/sandbox.test.ts +0 -190
- package/tests/codemode/security.test.ts +0 -242
- package/tests/codemode/worker-sandbox.test.ts +0 -106
- package/tests/constants/icons.test.ts +0 -101
- package/tests/constants/server-instructions.test.ts +0 -514
- package/tests/database/crud-workflow-branches.test.ts +0 -418
- package/tests/database/database-branches.test.ts +0 -132
- package/tests/database/entries-auth-branches.test.ts +0 -390
- package/tests/database/native-connection.test.ts +0 -249
- package/tests/database/shared-helpers.test.ts +0 -103
- package/tests/database/sqlite-adapter.bench.ts +0 -63
- package/tests/database/sqlite-adapter.test.ts +0 -690
- package/tests/database/tags.test.ts +0 -134
- package/tests/e2e/README.md +0 -39
- package/tests/e2e/auth.spec.ts +0 -106
- package/tests/e2e/codemode-abuse.spec.ts +0 -75
- package/tests/e2e/health.spec.ts +0 -63
- package/tests/e2e/helpers.ts +0 -139
- package/tests/e2e/oauth-discovery.spec.ts +0 -102
- package/tests/e2e/oauth-scopes.spec.ts +0 -222
- package/tests/e2e/payloads-admin.spec.ts +0 -76
- package/tests/e2e/payloads-analytics.spec.ts +0 -37
- package/tests/e2e/payloads-backup-restore.spec.ts +0 -102
- package/tests/e2e/payloads-backup.spec.ts +0 -44
- package/tests/e2e/payloads-codemode-api.spec.ts +0 -131
- package/tests/e2e/payloads-codemode-readonly.spec.ts +0 -116
- package/tests/e2e/payloads-codemode.spec.ts +0 -116
- package/tests/e2e/payloads-core.spec.ts +0 -82
- package/tests/e2e/payloads-error-contracts.spec.ts +0 -159
- package/tests/e2e/payloads-export.spec.ts +0 -46
- package/tests/e2e/payloads-github-degradation.spec.ts +0 -73
- package/tests/e2e/payloads-github.spec.ts +0 -176
- package/tests/e2e/payloads-relationships.spec.ts +0 -56
- package/tests/e2e/payloads-search.spec.ts +0 -64
- package/tests/e2e/payloads-team-happy.spec.ts +0 -231
- package/tests/e2e/payloads-team.spec.ts +0 -174
- package/tests/e2e/prompts-expanded.spec.ts +0 -137
- package/tests/e2e/prompts.spec.ts +0 -62
- package/tests/e2e/protocols.spec.ts +0 -134
- package/tests/e2e/rate-limiting.spec.ts +0 -291
- package/tests/e2e/resources-briefing-env.spec.ts +0 -106
- package/tests/e2e/resources-complete.spec.ts +0 -180
- package/tests/e2e/resources-expanded.spec.ts +0 -83
- package/tests/e2e/resources-instructions-levels.spec.ts +0 -145
- package/tests/e2e/resources-templates.spec.ts +0 -123
- package/tests/e2e/resources.spec.ts +0 -103
- package/tests/e2e/scheduler.spec.ts +0 -79
- package/tests/e2e/security.spec.ts +0 -112
- package/tests/e2e/session-advanced.spec.ts +0 -152
- package/tests/e2e/sessions.spec.ts +0 -95
- package/tests/e2e/stateless.spec.ts +0 -79
- package/tests/e2e/streaming.spec.ts +0 -176
- package/tests/e2e/tool-filtering-presets.spec.ts +0 -192
- package/tests/e2e/tool-filtering.spec.ts +0 -77
- package/tests/e2e/tools.spec.ts +0 -111
- package/tests/filtering/tool-filter.test.ts +0 -314
- package/tests/github/client-issues-errors.test.ts +0 -433
- package/tests/github/github-integration-branches.test.ts +0 -490
- package/tests/github/github-integration.test.ts +0 -1015
- package/tests/github/github-managers-branches.test.ts +0 -907
- package/tests/github/pull-requests.test.ts +0 -334
- package/tests/handlers/analytics-branches.test.ts +0 -222
- package/tests/handlers/backup-branches.test.ts +0 -270
- package/tests/handlers/briefing-context-section.test.ts +0 -388
- package/tests/handlers/briefing-github-section.test.ts +0 -392
- package/tests/handlers/briefing-user-message.test.ts +0 -405
- package/tests/handlers/codemode-tools.test.ts +0 -85
- package/tests/handlers/copilot-tools.test.ts +0 -126
- package/tests/handlers/error-path-coverage.test.ts +0 -324
- package/tests/handlers/export-tools.test.ts +0 -203
- package/tests/handlers/github-resource-handlers.test.ts +0 -929
- package/tests/handlers/github-tool-handlers.test.ts +0 -1452
- package/tests/handlers/handler-error-branches.test.ts +0 -346
- package/tests/handlers/help-resource.test.ts +0 -92
- package/tests/handlers/prompt-handler-coverage.test.ts +0 -108
- package/tests/handlers/prompt-handlers.test.ts +0 -131
- package/tests/handlers/resource-handler-coverage.test.ts +0 -281
- package/tests/handlers/resource-handlers.test.ts +0 -357
- package/tests/handlers/resource-prompt-branches.test.ts +0 -495
- package/tests/handlers/search-tool-handlers.test.ts +0 -379
- package/tests/handlers/targeted-gap-closure.test.ts +0 -387
- package/tests/handlers/team-admin.test.ts +0 -291
- package/tests/handlers/team-analytics.test.ts +0 -220
- package/tests/handlers/team-core.test.ts +0 -148
- package/tests/handlers/team-data.test.ts +0 -198
- package/tests/handlers/team-relationships.test.ts +0 -271
- package/tests/handlers/team-resource-handlers.test.ts +0 -161
- package/tests/handlers/team-search.test.ts +0 -134
- package/tests/handlers/team-tool-handlers.test.ts +0 -301
- package/tests/handlers/team-vector.test.ts +0 -213
- package/tests/handlers/template-github-branches.test.ts +0 -676
- package/tests/handlers/tool-annotations.test.ts +0 -90
- package/tests/handlers/tool-handler-coverage.test.ts +0 -514
- package/tests/handlers/tool-handlers.test.ts +0 -510
- package/tests/handlers/tool-output-schemas.test.ts +0 -116
- package/tests/handlers/vector-tool-handlers.test.ts +0 -238
- package/tests/security/sql-injection.test.ts +0 -284
- package/tests/server/mcp-server.bench.ts +0 -55
- package/tests/server/mcp-server.test.ts +0 -1326
- package/tests/server/scheduler.test.ts +0 -400
- package/tests/transports/http-legacy-sse.test.ts +0 -275
- package/tests/transports/http-security.test.ts +0 -322
- package/tests/transports/http-stateful.test.ts +0 -487
- package/tests/transports/http-transport-server.test.ts +0 -301
- package/tests/transports/http-transport.test.ts +0 -771
- package/tests/utils/github-helpers.test.ts +0 -58
- package/tests/utils/logger.test.ts +0 -180
- package/tests/utils/mcp-logger.test.ts +0 -211
- package/tests/utils/progress-utils.test.ts +0 -156
- package/tests/utils/query-helpers.test.ts +0 -80
- package/tests/utils/security-utils.test.ts +0 -82
- package/tests/vector/vector-search-branches.test.ts +0 -111
- package/tests/vector/vector-search-manager.test.ts +0 -375
- package/tests/vector/vector-search.bench.ts +0 -48
- package/tsconfig.json +0 -42
- package/tsup.config.ts +0 -19
- 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
|