@dizzlkheinz/ynab-mcpb 0.17.0 → 0.17.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 (142) hide show
  1. package/.env.example +33 -33
  2. package/.github/workflows/ci-tests.yml +45 -45
  3. package/.github/workflows/claude-code-review.yml +57 -57
  4. package/.github/workflows/claude.yml +50 -50
  5. package/.github/workflows/full-integration.yml +22 -22
  6. package/.github/workflows/publish.yml +11 -2
  7. package/CLAUDE.md +7 -6
  8. package/dist/bundle/index.cjs +52 -52
  9. package/dist/server/YNABMCPServer.d.ts +120 -54
  10. package/dist/server/securityMiddleware.d.ts +37 -8
  11. package/dist/tools/schemas/outputs/index.d.ts +2 -2
  12. package/dist/tools/schemas/outputs/index.js +2 -2
  13. package/dist/tools/schemas/outputs/utilityOutputs.d.ts +0 -15
  14. package/dist/tools/schemas/outputs/utilityOutputs.js +0 -9
  15. package/dist/tools/utilityTools.d.ts +0 -7
  16. package/dist/tools/utilityTools.js +1 -50
  17. package/docs/maintainers/npm-publishing.md +27 -0
  18. package/docs/reference/API.md +15 -70
  19. package/docs/technical/reconciliation-system-architecture.md +2251 -2251
  20. package/package.json +5 -5
  21. package/scripts/analyze-bundle.mjs +41 -41
  22. package/scripts/generate-mcpb.ps1 +95 -95
  23. package/scripts/watch-and-restart.ps1 +49 -49
  24. package/src/__tests__/comprehensive.integration.test.ts +0 -28
  25. package/src/__tests__/performance.test.ts +4 -12
  26. package/src/__tests__/setup.ts +45 -14
  27. package/src/__tests__/workflows.e2e.test.ts +0 -44
  28. package/src/server/__tests__/YNABMCPServer.test.ts +0 -1
  29. package/src/server/__tests__/toolRegistration.test.ts +2 -2
  30. package/src/tools/__tests__/transactionTools.integration.test.ts +63 -3
  31. package/src/tools/__tests__/utilityTools.integration.test.ts +1 -85
  32. package/src/tools/__tests__/utilityTools.test.ts +1 -123
  33. package/src/tools/schemas/outputs/index.ts +0 -3
  34. package/src/tools/schemas/outputs/utilityOutputs.ts +2 -43
  35. package/src/tools/toolCategories.ts +0 -1
  36. package/src/tools/utilityTools.ts +5 -76
  37. package/vitest.config.ts +2 -1
  38. package/.chunkhound.json +0 -11
  39. package/.code/agents/0098661e-0fa3-4990-beb9-c0cbf3f123aa/status.txt +0 -1
  40. package/.code/agents/01a13ef4-3f23-4f52-b33b-3585b73cfa60/error.txt +0 -3
  41. package/.code/agents/084fd32f-e298-4728-9103-a78d7dc39613/error.txt +0 -3
  42. package/.code/agents/0fed51e1-a943-4b97-a2a8-a6f0f27c844d/status.txt +0 -1
  43. package/.code/agents/1059b6bd-5ccd-4d83-a12c-7c9d89137399/error.txt +0 -5
  44. package/.code/agents/110/exec-call_F9BDNG7JfxKkq7Vc8ESAvdft.txt +0 -1569
  45. package/.code/agents/11ebcef3-b13f-4e44-ad80-d94a866804b7/error.txt +0 -3
  46. package/.code/agents/1324/exec-call_tIpx9uV1TpARbAMZonRQm8AO.txt +0 -757
  47. package/.code/agents/1398/exec-call_CjItcWMU1G6JoPshX62QvpaR.txt +0 -2832
  48. package/.code/agents/1398/exec-call_SUVq2ivmONQ5LMCmd7ngmOqr.txt +0 -2709
  49. package/.code/agents/1398/exec-call_SdNY4NOffdcC5pRYjVXHjPCK.txt +0 -2832
  50. package/.code/agents/1398/exec-call_qblJo9et1gsFFB63TtLOiji2.txt +0 -2832
  51. package/.code/agents/1398/exec-call_zaRrzlGz7GJcNzVfkAmML7Zg.txt +0 -2709
  52. package/.code/agents/1572/exec-call_GjVFBFOWcY7lE0idc5nWlLNh.txt +0 -781
  53. package/.code/agents/171834fd-5905-42fc-bbcc-2c755145b0fc/status.txt +0 -1
  54. package/.code/agents/1724/exec-call_HvHQe0w5CCG3T7Q3ULT6MO3g.txt +0 -5217
  55. package/.code/agents/1724/exec-call_QwUNESVzfxxk78K1frh1Vahb.txt +0 -2594
  56. package/.code/agents/1724/exec-call_aJ1Xwz71XmIpD4SBxSHERzLe.txt +0 -2594
  57. package/.code/agents/1846/exec-call_1YNAVD18RjrMN7JnfkkQhUP3.txt +0 -766
  58. package/.code/agents/1846/exec-call_lh3lDzE4WJAh1lFiomiiZ73D.txt +0 -766
  59. package/.code/agents/1d7d7ab7-7473-4b69-8b97-6e914f56056a/result.txt +0 -231
  60. package/.code/agents/2038/exec-call_DYwOukaYsL8VCONWmV2rUW5u.txt +0 -766
  61. package/.code/agents/2038/exec-call_c7fOQ7UrpVcTtvdfGBRM146V.txt +0 -652
  62. package/.code/agents/2038/exec-call_ySNyq9Mm55jWE480s54r5QcA.txt +0 -766
  63. package/.code/agents/210/exec-call_0tQCsKNJ1WTuIchb8wlcFJpW.txt +0 -2590
  64. package/.code/agents/210/exec-call_8ZlY9cUc8Ft1twi4ch8UJ6IN.txt +0 -5195
  65. package/.code/agents/2188/exec-call_5HqayBxIteJtoI8oPTiLWgvJ.txt +0 -286
  66. package/.code/agents/2188/exec-call_XRbBKBq3adZe6dcppAvQtM7G.txt +0 -218
  67. package/.code/agents/2188/exec-call_ehA0SjpYtrUi6GJXmibLjp4i.txt +0 -180
  68. package/.code/agents/21902821-ecaf-4759-bb9d-222b90921af5/error.txt +0 -3
  69. package/.code/agents/2256/exec-call_AtPcRWPmFPMcmX6qOFm1fCEY.txt +0 -766
  70. package/.code/agents/232073be-aa0e-46da-b478-5b64dbf03cf5/status.txt +0 -1
  71. package/.code/agents/234ff534-2336-4771-a8d9-aa04421a63be/result.txt +0 -747
  72. package/.code/agents/2454/exec-call_aFJpupwjfZeOBm7ixI5Vc8z2.txt +0 -766
  73. package/.code/agents/2454/exec-call_wogZ4HfXTodTEXvdgXlVUBpv.txt +0 -766
  74. package/.code/agents/253e2695-dc36-4022-b436-27655e0fc6c7/status.txt +0 -1
  75. package/.code/agents/2583/exec-call_M59I4eDjpjlBIWBiSxyS0YlJ.txt +0 -2594
  76. package/.code/agents/2583/exec-call_usLRGh7OhVHtsRBL4iUwRhjq.txt +0 -2594
  77. package/.code/agents/292aa3ff-dbab-470f-97c9-e7e8fd65e0db/result.txt +0 -144
  78. package/.code/agents/2e905864-aa07-4314-bcf9-c5b32277e4ac/result.txt +0 -36
  79. package/.code/agents/3073/exec-call_Peeagc9DxGYLgE6pNdMZhqIE.txt +0 -766
  80. package/.code/agents/3073/exec-call_d2YSE3hXF08KRSoUM3qd8Z3x.txt +0 -766
  81. package/.code/agents/3134/exec-call_IgCAMGx19lWfuo8zfYIt5FFC.txt +0 -416
  82. package/.code/agents/3134/exec-call_IxvLR2Oo7kba2QTsI1gHVko8.txt +0 -2590
  83. package/.code/agents/3134/exec-call_jYvc8hksZChSiysbzKjl2ZbB.txt +0 -2590
  84. package/.code/agents/329/exec-call_4QdP3SfSO7HGPCwVcqZIth6s.txt +0 -2590
  85. package/.code/agents/335aa031-466d-4fb7-925f-3cd864e264d0/result.txt +0 -191
  86. package/.code/agents/3364/exec-call_NbhIrsM5HhyDZDmJZG5CuCYL.txt +0 -766
  87. package/.code/agents/3364/exec-call_cKtJg0NrXiwXEFwlsE3uPZRA.txt +0 -766
  88. package/.code/agents/36d98414-5cde-4d9d-9a67-a240a18c1f07/result.txt +0 -189
  89. package/.code/agents/4604e866-b7b8-44f5-992f-2f683b0a523b/status.txt +0 -1
  90. package/.code/agents/472/exec-call_4AxzEEcWwkKhpqRB3bE8Ha4L.txt +0 -790
  91. package/.code/agents/472/exec-call_CB3LPYQA8QIZRi8I6kj4J17A.txt +0 -766
  92. package/.code/agents/472/exec-call_YeoUWvaFoktay2nqVUsa9KKX.txt +0 -790
  93. package/.code/agents/472/exec-call_jPWgKVquBBXTg0T3Lks5ZfkK.txt +0 -2594
  94. package/.code/agents/472/exec-call_qBkvunpGBDEHph2jPmTwtcsb.txt +0 -1000
  95. package/.code/agents/472/exec-call_v0ffRV1p0kTckBmJPzzHAEy0.txt +0 -3489
  96. package/.code/agents/472/exec-call_xAX5FXqWIlk02d9WubHbHWh8.txt +0 -766
  97. package/.code/agents/5346/exec-call_9q0muXUuLaucwEqI51Pt7idT.txt +0 -2594
  98. package/.code/agents/5346/exec-call_B2el3B79rVkq9LhWTI2VYlz7.txt +0 -2456
  99. package/.code/agents/5346/exec-call_BfX08f02qkZI9uJD5dvCvuoj.txt +0 -2594
  100. package/.code/agents/543328d0-61d6-4fd1-a723-bb168656e2e2/error.txt +0 -18
  101. package/.code/agents/5580c02c-1383-4d18-9cbd-cc8a06e3408d/result.txt +0 -48
  102. package/.code/agents/5f8dc01c-47b3-4163-b0b3-aa31be89fcdc/status.txt +0 -1
  103. package/.code/agents/60ce1a22-5126-44b2-b977-1d5b56142a7b/status.txt +0 -1
  104. package/.code/agents/6215d9db-7fa9-4429-aeec-3835c3212291/error.txt +0 -1
  105. package/.code/agents/6743db55-30e5-4b4e-9366-a8214fc7f714/error.txt +0 -1
  106. package/.code/agents/6bf9591b-b9c9-422c-b0a5-e968c7d8422a/status.txt +0 -1
  107. package/.code/agents/7/exec-call_HltHpkDox0Zm1vGEjdksUgpE.txt +0 -1120
  108. package/.code/agents/7/exec-call_LCATrOPPAgbxW9Q1z0XaVi2E.txt +0 -2646
  109. package/.code/agents/7/exec-call_W8DeRfNG9hvbgVFvf0clBf6R.txt +0 -2646
  110. package/.code/agents/7/exec-call_eww3GfdEiJZx61sJEQ9wNmt3.txt +0 -1271
  111. package/.code/agents/70/exec-call_owUtDMYiVgqDf8vsz1i32PFf.txt +0 -1570
  112. package/.code/agents/8/exec-call_UtrjAcLbhYLatxR4O97fZgnm.txt +0 -2590
  113. package/.code/agents/82490bc9-f34e-4b1b-8a8e-bccc2e6254f5/error.txt +0 -3
  114. package/.code/agents/841/exec-call_7nTNhSBCNjTDUIJv7py6CepO.txt +0 -3299
  115. package/.code/agents/841/exec-call_TLI0yUdUijuUAvI4o3DXEvHO.txt +0 -3299
  116. package/.code/agents/9/exec-call_XaABQT1hIlRpnKZ2uyBMWsTC.txt +0 -1882
  117. package/.code/agents/941/exec-call_GuGHRx7NNXWIDAnxUG2NEWPa.txt +0 -2594
  118. package/.code/agents/94a0ddf3-a304-4ec3-913e-3cceef509948/error.txt +0 -1
  119. package/.code/agents/95d9fbab-19a2-48af-83f9-c792566a347f/error.txt +0 -1
  120. package/.code/agents/b0098cb8-cb32-4ada-9bc4-37c587518896/result.txt +0 -170
  121. package/.code/agents/b4fe59a4-81df-42e2-a112-0153e504faca/error.txt +0 -1
  122. package/.code/agents/bf4ce152-f623-49d7-aa52-c18631625c3c/error.txt +0 -3
  123. package/.code/agents/d7d1db75-d7eb-468e-adea-4ef4d916d187/status.txt +0 -1
  124. package/.code/agents/e2baa9c8-bac3-49e3-a39d-024333e6a990/status.txt +0 -1
  125. package/.code/agents/e2c752b7-711d-423a-af57-f53c809deb84/result.txt +0 -160
  126. package/.code/agents/e350b8c3-8483-408c-b2bb-94515f492a11/error.txt +0 -3
  127. package/.code/agents/e63f9919-719f-4ad0-bccf-01b1a596e1e9/status.txt +0 -1
  128. package/.code/agents/e6601719-c31f-4a0e-8c71-d70787d0ab71/status.txt +0 -1
  129. package/.code/agents/e71695a8-3044-478d-8f12-ed13d02884c7/status.txt +0 -1
  130. package/.code/agents/f250b7ed-5bd5-4036-aa8c-ce63caee7d61/result.txt +0 -20
  131. package/.code/agents/f95b7464-3e25-4897-b153-c8dfd63fd605/error.txt +0 -5
  132. package/.code/agents/fa3c5ddf-cdf7-47a2-930a-b806c6363689/status.txt +0 -1
  133. package/AGENTS.md +0 -1
  134. package/NUL +0 -0
  135. package/package.json.tmp +0 -105
  136. package/temp-recon.ts +0 -126
  137. package/test-exports/ynab_account_e9ddc2a6_minimal_1items_2025-11-19_09-04-53.json +0 -23
  138. package/test-exports/ynab_account_e9ddc2a6_minimal_1items_2025-11-19_10-37-42.json +0 -23
  139. package/test-exports/ynab_account_e9ddc2a6_minimal_4items_2025-11-19_09-02-09.json +0 -44
  140. package/test-exports/ynab_account_e9ddc2a6_minimal_6items_2025-11-19_10-37-52.json +0 -58
  141. package/test-exports/ynab_since_2025-10-16_account_53298e13_238items_2025-11-28_13-46-20.json +0 -3662
  142. package/test-exports/ynab_since_2025-11-01_account_4c18e9f0_minimal_14items_2025-11-16_10-07-10.json +0 -115
@@ -1,3299 +0,0 @@
1
-
2
- > @dizzlkheinz/ynab-mcpb@0.14.0 test
3
- > vitest run --project unit && npm run filter-test-results
4
-
5
-
6
-  RUN  v3.2.4 C:/Users/ksutk/projects/ynab-mcpb
7
-
8
- ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > high confidence matches (≥90%) > should return high confidence for exact match 25ms
9
-  → expected 'none' to be 'high' // Object.is equality
10
- ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > high confidence matches (≥90%) > should return high confidence for normalized payee match 3ms
11
-  → expected 'none' to be 'high' // Object.is equality
12
- ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > high confidence matches (≥90%) > should handle date within tolerance 3ms
13
-  → expected 'none' to be 'high' // Object.is equality
14
- ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > high confidence matches (≥90%) > should return high confidence for fuzzy payee match 3ms
15
-  → expected 'none' to be 'high' // Object.is equality
16
- ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > medium confidence matches (60-89%) > should provide multiple candidates for medium confidence 3ms
17
-  → expected 0 to be greater than 0
18
- ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > low/no confidence matches > should return no match when amount differs 11ms
19
-  → expected undefined to be +0 // Object.is equality
20
- ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > low/no confidence matches > should not match opposite-signed transactions 1ms
21
- ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > prioritization > should prioritize uncleared transactions over cleared 2ms
22
-  → expected undefined to be 'y2' // Object.is equality
23
- ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > prioritization > should use date proximity as tiebreaker 2ms
24
-  → expected undefined to be 'y2' // Object.is equality
25
- ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > amount tolerance > should match within amount tolerance 2ms
26
-  → expected 'none' not to be 'none' // Object.is equality
27
- ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > amount tolerance > should not match outside amount tolerance 0ms
28
- ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > used IDs > should skip already-used YNAB transaction IDs 0ms
29
- ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findMatches > should match multiple bank transactions 4ms
30
-  → Cannot read properties of undefined (reading 'id')
31
- ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findMatches > should prevent duplicate matching of YNAB transactions 3ms
32
-  → expected 'none' to be 'high' // Object.is equality
33
- ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findMatches > should handle mix of matched and unmatched transactions 2ms
34
-  → expected 'none' to be 'high' // Object.is equality
35
- ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findMatches > should use custom configuration 1ms
36
-  → expected 'none' not to be 'none' // Object.is equality
37
- ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > edge cases > should handle empty YNAB transactions list 6ms
38
-  → the given combination of arguments (undefined and string) is invalid for this assertion. You can use an array, a map, an object, a set, a string, or a weakset instead of a string
39
- ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > edge cases > should handle null payee names 1ms
40
-  → expected 'none' not to be 'none' // Object.is equality
41
- ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > edge cases > should handle very small amounts 3ms
42
-  → expected 'medium' to be 'high' // Object.is equality
43
- ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > edge cases > should handle large amounts 1ms
44
-  → expected 'none' to be 'high' // Object.is equality
45
- ✓  unit  src/server/__tests__/rateLimiter.test.ts > RateLimiter > isAllowed > should allow requests within the limit 7ms
46
- ✓  unit  src/server/__tests__/rateLimiter.test.ts > RateLimiter > isAllowed > should track requests correctly 3ms
47
- ✓  unit  src/server/__tests__/rateLimiter.test.ts > RateLimiter > isAllowed > should limit requests when max is reached 4ms
48
- ✓  unit  src/server/__tests__/rateLimiter.test.ts > RateLimiter > isAllowed > should handle multiple identifiers independently 1ms
49
- ✓  unit  src/server/__tests__/rateLimiter.test.ts > RateLimiter > isAllowed > should reset after time window expires 62ms
50
- ✓  unit  src/server/__tests__/rateLimiter.test.ts > RateLimiter > recordRequest > should record requests correctly 1ms
51
- ✓  unit  src/server/__tests__/rateLimiter.test.ts > RateLimiter > recordRequest > should handle rapid successive requests 1ms
52
- ✓  unit  src/server/__tests__/rateLimiter.test.ts > RateLimiter > getStatus > should return current status without modifying state 0ms
53
- ✓  unit  src/server/__tests__/rateLimiter.test.ts > RateLimiter > reset > should reset specific identifier 1ms
54
- ✓  unit  src/server/__tests__/rateLimiter.test.ts > RateLimiter > reset > should reset all identifiers when no specific identifier provided 1ms
55
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Basic Functionality > should store and retrieve data 12ms
56
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Basic Functionality > should return null for non-existent keys 2ms
57
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Basic Functionality > should delete entries 2ms
58
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Basic Functionality > should clear all entries 2ms
59
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Basic Functionality > should handle TTL expiration 3ms
60
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Basic Functionality > should generate consistent cache keys 2ms
61
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Basic Functionality > should filter undefined parameters in key generation 1ms
62
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Hit/Miss Counters > should track cache hits 2ms
63
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Hit/Miss Counters > should track cache misses 2ms
64
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Hit/Miss Counters > should track expired entries as misses 2ms
65
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Hit/Miss Counters > should calculate hit rate correctly 2ms
66
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Hit/Miss Counters > should reset counters on clear 1ms
67
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Hit/Miss Counters > should handle zero requests for hit rate 1ms
68
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > LRU Eviction > should not evict when under limit 2ms
69
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > LRU Eviction > should evict LRU entry when maxEntries is exceeded 2ms
70
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > LRU Eviction > should update access order on get 8ms
71
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > LRU Eviction > should handle zero maxEntries (no caching) 1ms
72
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > LRU Eviction > should evict multiple entries if needed 2ms
73
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > LRU Eviction > should not evict when updating existing key at maxEntries limit 1ms
74
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Per-Entry Options > should use custom TTL from options 1ms
75
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Per-Entry Options > should use default TTL when no options provided 2ms
76
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Per-Entry Options > should support staleWhileRevalidate 1ms
77
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Per-Entry Options > should not return data outside stale window 1ms
78
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Per-Entry Options > should maintain backward compatibility with number TTL 1ms
79
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > wrap() Helper > should return cached data immediately on hit 4ms
80
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > wrap() Helper > should call loader and cache result on miss 2ms
81
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > wrap() Helper > should deduplicate concurrent requests 2ms
82
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > wrap() Helper > should handle loader errors gracefully 6ms
83
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > wrap() Helper > should serve stale data and trigger background refresh 2ms
84
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > wrap() Helper > should apply cache options from wrap call 1ms
85
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > wrap() Helper > should clean up pending operations on completion 2ms
86
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > wrap() Helper > should preserve existing TTL/SWR when options omitted in background refresh 2ms
87
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Cleanup Enhancement > should update lastCleanup timestamp 1ms
88
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Cleanup Enhancement > should include cleanup removals in eviction count 2ms
89
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Cleanup Enhancement > should return zero when no cleanup needed 1ms
90
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Cleanup Enhancement > should provide detailed cleanup information 1ms
91
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Cleanup Enhancement > should maintain backward compatibility with cleanup() method 1ms
92
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Environment Variable Configuration > should use environment variable for maxEntries 1ms
93
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Environment Variable Configuration > should use environment variable for stale window 1ms
94
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Environment Variable Configuration > should fall back to defaults for invalid environment values 1ms
95
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Environment Variable Configuration > should use environment variable for default TTL 1ms
96
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Environment Variable Configuration > should fall back to defaults when environment variables are missing 1ms
97
- ✓  unit  src/server/__tests__/rateLimiter.test.ts > RateLimiter > cleanup > should remove expired requests 71ms
98
- ✓  unit  src/server/__tests__/rateLimiter.test.ts > RateLimiter > logging > should log when logging is enabled 11ms
99
- ✓  unit  src/server/__tests__/rateLimiter.test.ts > RateLimiter > logging > should not log when logging is disabled 3ms
100
- ✓  unit  src/server/__tests__/rateLimiter.test.ts > RateLimiter > RateLimitError > should create error with correct properties 2ms
101
- ✓  unit  src/server/__tests__/rateLimiter.test.ts > RateLimiter > YNAB API compliance > should use YNAB API limits by default 1ms
102
- ✓  unit  src/server/__tests__/rateLimiter.test.ts > RateLimiter > YNAB API compliance > should handle YNAB-scale request volumes 4ms
103
- ✓  unit  src/server/__tests__/rateLimiter.test.ts > RateLimiter > security considerations > should hash identifiers in logs to avoid token exposure 1ms
104
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Enhanced Statistics > should return comprehensive stats 4ms
105
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Enhanced Statistics > should maintain backward compatibility with basic stats 2ms
106
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Enhanced Statistics > should handle getEntriesForSizeEstimation correctly 2ms
107
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Enhanced Statistics > should provide lightweight cache metadata without full entry data 3ms
108
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Edge Cases and Error Handling > should handle circular references in cache values 1ms
109
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Edge Cases and Error Handling > should handle very large cache sizes 8ms
110
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Edge Cases and Error Handling > should handle concurrent wrap calls with different keys independently 1ms
111
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Edge Cases and Error Handling > should clean up failed operations 2ms
112
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Prefix and Budget-based Deletion > deleteByPrefix > should delete entries matching prefix and return count 1ms
113
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Prefix and Budget-based Deletion > deleteByPrefix > should return 0 when no matches found 1ms
114
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Prefix and Budget-based Deletion > deleteByPrefix > should handle empty prefix safely 1ms
115
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Prefix and Budget-based Deletion > deleteByPrefix > should not delete when prefix only partially matches a resource's namespace 2ms
116
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Prefix and Budget-based Deletion > deleteByPrefix > should not affect cache hit or miss counters 1ms
117
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Prefix and Budget-based Deletion > deleteByBudgetId > should delete entries containing the provided budget ID 1ms
118
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Prefix and Budget-based Deletion > deleteByBudgetId > should return 0 when budget ID does not exist in cache 1ms
119
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Prefix and Budget-based Deletion > deleteByBudgetId > should not match budget IDs that are substrings of other IDs 1ms
120
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Prefix and Budget-based Deletion > deleteByBudgetId > should handle UUID formatted budget identifiers 1ms
121
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Prefix and Budget-based Deletion > deleteByBudgetId > should not affect cache stats when deleting by budget ID 1ms
122
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Prefix and Budget-based Deletion > getKeys > should return an empty array when cache is empty 1ms
123
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Prefix and Budget-based Deletion > getKeys > should return all cache keys 1ms
124
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Prefix and Budget-based Deletion > getKeys > should preserve insertion order of cache keys 1ms
125
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Integration with Existing Patterns > should work with existing tool usage patterns 1ms
126
- ✓  unit  src/server/__tests__/cacheManager.test.ts > CacheManager > Integration with Existing Patterns > should maintain singleton behavior 2ms
127
- ✓  unit  src/server/__tests__/config.test.ts > Config Module > reloads environment variables on each loadConfig call 558ms
128
- ✓  unit  src/server/__tests__/config.test.ts > Config Module > keeps the config singleton as a one-time parse 21ms
129
- ✓  unit  src/server/__tests__/config.test.ts > Config Module > throws a detailed error if YNAB_ACCESS_TOKEN is missing 37ms
130
- ✓  unit  src/server/__tests__/config.test.ts > Config Module > parses optional MCP_PORT correctly 36ms
131
- ✓  unit  src/server/__tests__/config.test.ts > Config Module > handles missing optional MCP_PORT 51ms
132
- ✓  unit  src/server/__tests__/config.test.ts > Config Module > throws an error for an invalid MCP_PORT 21ms
133
- ✓  unit  src/server/__tests__/config.test.ts > Config Module > parses LOG_LEVEL and defaults to info 23ms
134
- ×  unit  src/tools/reconciliation/__tests__/scenarios/repeatAmount.scenario.test.ts > scenario: repeat amount collisions > prioritizes repeat-amount insight when multiple bank rows share totals 51ms
135
-  → expected undefined to be defined
136
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > empty context scenarios > should return empty array for completely empty context 65ms
137
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > empty context scenarios > should return empty array with no insights and no unmatched transactions 5ms
138
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > insight processing > should process near_match insights 11ms
139
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > insight processing > should process repeat_amount insights 6ms
140
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > insight processing > should process anomaly insights 5ms
141
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > insight processing > should process critical anomaly insights with higher severity 4ms
142
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > insight processing > should process multiple insights 6ms
143
- ×  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched bank transactions > should create create_transaction recommendation for unmatched bank transaction 20ms
144
-  → expected -75.5 to be -75500 // Object.is equality
145
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched bank transactions > should include memo if present in bank transaction 6ms
146
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched bank transactions > should not include memo if not present in bank transaction 9ms
147
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched bank transactions > should create recommendations for multiple unmatched bank transactions 9ms
148
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched YNAB transactions > should create update_cleared recommendation for uncleared YNAB transaction 5ms
149
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched YNAB transactions > should not create recommendation for already cleared YNAB transaction 5ms
150
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched YNAB transactions > should not create recommendation for reconciled YNAB transaction 3ms
151
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched YNAB transactions > should handle null payee_name in YNAB transaction 4ms
152
- ×  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > suggested matches > should create review_duplicate recommendation for suggested match 6ms
153
-  → Cannot read properties of undefined (reading 'date')
154
- ×  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > suggested matches > should create create_transaction for suggested match with no YNAB transaction 5ms
155
-  → Cannot read properties of undefined (reading 'date')
156
- ×  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > suggested matches > should create manual_review for combination match with multiple candidates 6ms
157
-  → Cannot read properties of undefined (reading 'payee')
158
- ×  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > amount sign preservation (CRITICAL) > should preserve negative amounts for expenses in create_transaction 6ms
159
-  → expected -123.45 to be -123450 // Object.is equality
160
- ×  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > amount sign preservation (CRITICAL) > should preserve positive amounts for income in create_transaction 5ms
161
-  → expected 500 to be 500000 // Object.is equality
162
- ×  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > amount sign preservation (CRITICAL) > should preserve negative amounts in suggested match create_transaction 3ms
163
-  → Cannot read properties of undefined (reading 'date')
164
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > amount sign preservation (CRITICAL) > should handle zero amounts correctly 9ms
165
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > sorting logic > should sort by priority (high > medium > low) 6ms
166
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > sorting logic > should sort by confidence when priorities are equal 6ms
167
- ×  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > sorting logic > should handle mixed priorities and confidence 5ms
168
-  → Cannot read properties of undefined (reading 'date')
169
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > recommendation metadata > should include correct metadata in all recommendations 8ms
170
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > recommendation metadata > should generate unique IDs for each recommendation 5ms
171
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > recommendation metadata > should use correct currency from balance info 11ms
172
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > recommendation metadata > should include enhanced metadata in insight-based manual review recommendations 13ms
173
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > recommendation metadata > should include enhanced metadata for all insight-based recommendation types 12ms
174
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle empty insights array 5ms
175
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle empty unmatched arrays 3ms
176
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle missing optional fields 3ms
177
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle very large arrays of recommendations 31ms
178
- ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > error normalization helpers > normalizes YNAB SDK error objects with status and detail 5ms
179
- ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > error normalization helpers > retains status from Error-like objects and propagates HTTP code decisions 1ms
180
- ×  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation (dry run) > produces action plan without calling YNAB APIs when dry_run=true 72ms
181
-  → expected 1 to be 2 // Object.is equality
182
- ×  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation (apply mode) > creates, updates, and adjusts when dry_run=false 11ms
183
-  → expected +0 to be 1 // Object.is equality
184
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle insight without evidence 5ms
185
- ×  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle transactions with very small amounts 4ms
186
-  → expected -0.01 to be -10 // Object.is equality
187
- ×  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle transactions with very large amounts 5ms
188
-  → expected -999999.99 to be -999999990 // Object.is equality
189
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > combined scenarios > should handle combination of insights, unmatched bank, and unmatched YNAB 4ms
190
- ×  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > combined scenarios > should handle all recommendation types at once 6ms
191
-  → Cannot read properties of undefined (reading 'date')
192
- ×  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation (ordered halting) > processes newest auto matches first and stops once balances align 7ms
193
-  → Cannot read properties of undefined (reading 'date')
194
- ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > uses bulk create API for batches with multiple transactions 20ms
195
- ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > falls back to sequential mode for single transaction scenarios 11ms
196
- ×  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > falls back to sequential creation when bulk request fails 11ms
197
-  → expected "spy" to be called 3 times, but got 2 times
198
- ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > propagates rate-limit error payloads with status codes from bulk create 6ms
199
- ×  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > splits large batches into 100-transaction chunks 38ms
200
-  → expected 148 to be 150 // Object.is equality
201
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > ListTransactionsSchema > should validate valid parameters 10ms
202
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > ListTransactionsSchema > should require budget_id 3ms
203
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > ListTransactionsSchema > should validate date format 1ms
204
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > ListTransactionsSchema > should validate type enum 1ms
205
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > ListTransactionsSchema > should allow optional parameters to be undefined 1ms
206
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleListTransactions > should bypass cache in test environment for unfiltered requests 7ms
207
- ↓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleListTransactions > should use cache when NODE_ENV is not test for unfiltered requests - obsolete test, caching now handled by DeltaFetcher
208
- ↓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleListTransactions > should not cache filtered requests - obsolete test (account_id)
209
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleListTransactions > should list all transactions when no filters are provided 1ms
210
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleListTransactions > should filter by account_id when provided 2ms
211
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleListTransactions > should filter by category_id when provided 1ms
212
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleListTransactions > should include since_date parameter when provided 1ms
213
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleListTransactions > should handle 401 authentication errors 2ms
214
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleListTransactions > should handle 404 not found errors 1ms
215
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleListTransactions > should handle 429 rate limit errors 1ms
216
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleListTransactions > should handle generic errors 2ms
217
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleListTransactions > should include cached property in large response path 51ms
218
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > GetTransactionSchema > should validate valid parameters 1ms
219
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > GetTransactionSchema > should require budget_id 1ms
220
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > GetTransactionSchema > should require transaction_id 1ms
221
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > GetTransactionSchema > should reject empty strings 1ms
222
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleGetTransaction > should get transaction details successfully 2ms
223
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleGetTransaction > should handle 404 not found errors 1ms
224
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleGetTransaction > should handle authentication errors 0ms
225
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleGetTransaction > should handle generic errors 1ms
226
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateTransactionSchema > should validate valid parameters with required fields only 3ms
227
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateTransactionSchema > should validate valid parameters with all optional fields 1ms
228
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateTransactionSchema > should require budget_id 1ms
229
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateTransactionSchema > should require account_id 1ms
230
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateTransactionSchema > should require amount to be an integer 1ms
231
- ×  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > throws on fatal sequential creation errors surfaced as objects 19ms
232
-  → promise resolved "{ summary: { …(9) }, …(4) }" instead of rejecting
233
- ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > flags duplicate transactions returned by YNAB API 5ms
234
- ×  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > honors halting logic when balance aligns mid-batch 6ms
235
-  → expected 4 to be 5 // Object.is equality
236
- ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > processes multiple chunks and halts at chunk boundaries when balance aligns 13ms
237
- ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > simulates bulk preview during dry-run mode 7ms
238
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateTransactionSchema > should validate date format 1ms
239
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateTransactionSchema > should validate cleared status enum 1ms
240
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateTransactionSchema > should validate flag_color enum 1ms
241
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateTransactionSchema > should validate parameters with subtransactions when totals match 2ms
242
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateTransactionSchema > should reject parameters when subtransaction totals do not match amount 1ms
243
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransaction > should create transaction with required fields only 5ms
244
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransaction > should create transaction with all optional fields 2ms
245
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransaction > should create split transaction with subtransactions 3ms
246
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransaction > should handle 404 not found errors 1ms
247
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransaction > should handle authentication errors 1ms
248
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransaction > should handle generic errors 1ms
249
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransaction > should invalidate transaction cache on successful transaction creation 2ms
250
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransaction > should not invalidate cache on dry_run transaction creation 1ms
251
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransactions > surfaces top-level validation errors with a reserved transaction index 5ms
252
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransactions > combines reserved and per-transaction validation errors 3ms
253
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateReceiptSplitTransactionSchema > should validate a well-formed receipt split payload 12ms
254
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateReceiptSplitTransactionSchema > should reject when subtotal does not match categorized items 1ms
255
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateReceiptSplitTransactionSchema > should reject when total does not equal subtotal plus tax 4ms
256
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateReceiptSplitTransaction > should return a detailed dry-run summary without calling the API 3ms
257
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateReceiptSplitTransaction > should create a split transaction and attach receipt summary 3ms
258
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > UpdateTransactionSchema > should validate valid parameters with minimal fields 2ms
259
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > UpdateTransactionSchema > should validate valid parameters with all optional fields 0ms
260
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > UpdateTransactionSchema > should require budget_id 1ms
261
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > UpdateTransactionSchema > should require transaction_id 1ms
262
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > UpdateTransactionSchema > should require amount to be an integer when provided 1ms
263
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > UpdateTransactionSchema > should validate date format when provided 0ms
264
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > UpdateTransactionSchema > should validate cleared status enum when provided 0ms
265
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > UpdateTransactionSchema > should validate flag_color enum when provided 1ms
266
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransaction > should update transaction with single field 3ms
267
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransaction > should update transaction with multiple fields 1ms
268
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransaction > should handle 404 not found errors 0ms
269
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransaction > should handle authentication errors 0ms
270
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransaction > should handle generic errors 0ms
271
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransaction > should invalidate transaction cache on successful transaction update 1ms
272
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransaction > should not invalidate cache on dry_run transaction update 1ms
273
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > DeleteTransactionSchema > should validate valid parameters 1ms
274
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > DeleteTransactionSchema > should require budget_id 1ms
275
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > DeleteTransactionSchema > should require transaction_id 1ms
276
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > DeleteTransactionSchema > should reject empty strings 0ms
277
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateTransactionsSchema > should accept a valid batch of multiple transactions 1ms
278
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateTransactionsSchema > should accept the minimum batch size of one transaction 0ms
279
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateTransactionsSchema > should accept the maximum batch size of 100 transactions 2ms
280
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateTransactionsSchema > should reject an empty transactions array 1ms
281
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateTransactionsSchema > should reject batches exceeding 100 transactions 3ms
282
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateTransactionsSchema > should reject transactions missing required fields 1ms
283
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateTransactionsSchema > should validate ISO date format for each transaction 1ms
284
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateTransactionsSchema > should require integer milliunit amounts 1ms
285
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateTransactionsSchema > should reject invalid cleared enum values 1ms
286
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateTransactionsSchema > should reject transactions containing subtransactions 1ms
287
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateTransactionsSchema > should fail when any transaction in the batch is invalid 1ms
288
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > CreateTransactionsSchema > should accept optional import_id values 2ms
289
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleDeleteTransaction > should delete transaction successfully 1ms
290
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleDeleteTransaction > should handle 404 not found errors 0ms
291
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleDeleteTransaction > should handle authentication errors 0ms
292
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleDeleteTransaction > should handle generic errors 2ms
293
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleDeleteTransaction > should invalidate transaction cache on successful transaction deletion 1ms
294
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleDeleteTransaction > should not invalidate cache on dry_run transaction deletion 1ms
295
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransactions > dry run > returns validation summary without calling the API 2ms
296
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransactions > dry run > surfaces validation errors before execution 1ms
297
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransactions > successful creation > creates a small batch with import_ids and correlates results 3ms
298
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransactions > successful creation > correlates transactions without import_ids using hashes 2ms
299
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransactions > successful creation > handles mixed import_id and hash correlation scenarios 1ms
300
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransactions > duplicate handling > marks all transactions as duplicates when import_ids already exist 2ms
301
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransactions > duplicate handling > marks partial duplicates while creating the rest 1ms
302
- stderr | src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > metadata completeness threshold > throws ValidationError when >5% of transactions have missing metadata (live mode)
303
- [ERROR] ynab:update_transactions:resolve_metadata | FAILED | error:"Failed to resolve transaction metadata"
304
- [ERROR] ynab:update_transactions:resolve_metadata | FAILED | error:"Failed to resolve transaction metadata"
305
-
306
- stderr | src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > metadata completeness threshold > succeeds when <=5% of transactions have missing metadata (live mode)
307
- [ERROR] ynab:update_transactions:resolve_metadata | FAILED | error:"Failed to resolve transaction metadata"
308
-
309
- stderr | src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > metadata completeness threshold > succeeds when <=5% of transactions have missing metadata (live mode)
310
- [INFO] ynab:update_transactions:metadata_resolution_warning | SUCCESS
311
-
312
- stderr | src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > metadata completeness threshold > returns warnings in dry_run mode when metadata is missing
313
- [ERROR] ynab:update_transactions:resolve_metadata | FAILED | error:"Failed to resolve transaction metadata"
314
- [ERROR] ynab:update_transactions:resolve_metadata | FAILED | error:"Failed to resolve transaction metadata"
315
-
316
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransactions > response size management > keeps full response when under 64KB 1ms
317
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransactions > response size management > downgrades to summary mode when response exceeds 64KB 3ms
318
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransactions > response size management > downgrades to ids_only mode when necessary 2ms
319
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransactions > response size management > errors when response cannot fit under 100KB 2ms
320
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransactions > correlation edge cases > supports multi-bucket matching for identical transactions 2ms
321
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransactions > correlation edge cases > records failures and logs correlation errors when correlation fails 2ms
322
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransactions > cache invalidation > invalidates transaction, account, and month caches for affected resources 1ms
323
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransactions > cache invalidation > deduplicates cache keys for repeated accounts and months 2ms
324
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransactions > cache invalidation > does not invalidate caches during dry runs 1ms
325
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransactions > error handling and edge cases > propagates API failures 1ms
326
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransactions > error handling and edge cases > handles general validation errors outside of dry run 1ms
327
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransactions > error handling and edge cases > supports transactions without payees or categories and special memo characters 1ms
328
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleCreateTransactions > error handling and edge cases > allows transfer transactions by passing transfer payee ids 1ms
329
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > UpdateTransactionsSchema > should accept a valid batch of updates with all fields optional except id 2ms
330
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > UpdateTransactionsSchema > should require id field for each transaction 1ms
331
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > UpdateTransactionsSchema > should accept minimum batch size of one transaction 0ms
332
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > UpdateTransactionsSchema > should accept maximum batch size of 100 transactions 2ms
333
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > UpdateTransactionsSchema > should reject empty transactions array 1ms
334
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > UpdateTransactionsSchema > should reject batches exceeding 100 transactions 2ms
335
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > UpdateTransactionsSchema > should validate ISO date format for optional date field 1ms
336
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > UpdateTransactionsSchema > should validate ISO date format for optional original_date field 1ms
337
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > UpdateTransactionsSchema > should require integer milliunit amounts when provided 1ms
338
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > UpdateTransactionsSchema > should reject invalid cleared enum values 1ms
339
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > UpdateTransactionsSchema > should accept optional metadata fields for cache invalidation 1ms
340
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > UpdateTransactionsSchema > should accept update with only id field (no changes) 0ms
341
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > UpdateTransactionsSchema > should reject account_id field (account moves not supported) 1ms
342
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > dry run > returns validation summary without calling the API 4ms
343
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > dry run > provides before/after preview showing only changed fields 2ms
344
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > dry run > sets before to "unavailable" when current state cannot be fetched 1ms
345
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > dry run > includes summary with accounts_affected and fields_to_update 2ms
346
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > dry run > surfaces validation errors before execution 1ms
347
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > dry run > reuses metadata resolution output for preview without duplicate fetches 1ms
348
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > successful updates > updates transactions and correlates results 2ms
349
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > successful updates > only updates provided fields (partial updates) 1ms
350
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > metadata resolution for cache invalidation > uses client-supplied original_* metadata when provided 2ms
351
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > metadata resolution for cache invalidation > falls back to cache when metadata not provided 1ms
352
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > metadata resolution for cache invalidation > falls back to API when metadata not in cache 1ms
353
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > error handling > handles network failures 1ms
354
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > error handling > handles invalid transaction IDs gracefully 1ms
355
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > error handling > handles metadata resolution failures without crashing 1ms
356
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > metadata completeness threshold > throws ValidationError when >5% of transactions have missing metadata (live mode) 10ms
357
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > metadata completeness threshold > succeeds when <=5% of transactions have missing metadata (live mode) 5ms
358
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > metadata completeness threshold > returns warnings in dry_run mode when metadata is missing 3ms
359
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > metadata completeness threshold > does not return warnings in dry_run when all metadata is resolved 2ms
360
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > correlation_key in results > includes correlation_key in successful update results 1ms
361
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > correlation_key in results > includes correlation_key in failed update results 1ms
362
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > correlation_key in results > preserves correlation_key in ids_only downgrade mode 2ms
363
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > response size management > keeps full response when under 64KB 1ms
364
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > response size management > downgrades to summary mode when response exceeds 64KB 1ms
365
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > cache invalidation > invalidates transaction and account caches after successful updates 2ms
366
- ✓  unit  src/tools/__tests__/transactionTools.test.ts > transactionTools > handleUpdateTransactions > cache invalidation > does not invalidate cache on dry run 1ms
367
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Feature Flag > should use delta path when the feature flag is enabled 19ms
368
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Feature Flag > should bypass delta logic when flag is disabled 4ms
369
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Feature Flag > should still cache results when delta is disabled 3ms
370
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Delta Detection > should detect delta when server knowledge increases 4ms
371
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Delta Detection > should treat response as unchanged when knowledge stays equal 2ms
372
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Delta Detection > should treat cache miss as full refresh 2ms
373
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Delta Detection > should use merger when delta detected and cache exists 2ms
374
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Delta Detection > should filter deleted entities on full refresh 2ms
375
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Delta Detection > should handle initial fetch with no cache or knowledge 2ms
376
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Knowledge Gap Warnings > should log warning when knowledge gap exceeds threshold 5ms
377
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Knowledge Gap Warnings > should not log warning when gap is within tolerance 2ms
378
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Knowledge Gap Warnings > should include cacheKey in warning metadata 2ms
379
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Knowledge Gap Warnings > should continue processing even after warning 2ms
380
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Cache Operations > should store entries in cache manager format 3ms
381
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Cache Operations > should update knowledge store after fetch 2ms
382
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Cache Operations > should return cached data on cache hit 3ms
383
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Cache Operations > should respect custom TTL overrides 2ms
384
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Cache Operations > should use fresh cache but disable delta when forceFullRefresh is true 2ms
385
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Merge Options > should pass merge options to merger 3ms
386
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Merge Options > should allow preserveDeleted to keep deleted entities after merge 2ms
387
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Merge Options > should support custom equality functions via merge options 2ms
388
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Invalidation > should delete by prefix when resource type provided 1ms
389
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Invalidation > should delete by budget when resource type omitted 2ms
390
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Invalidation > should not reset knowledge on invalidate 1ms
391
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Invalidation > should reset targeted knowledge during forceFullRefresh 2ms
392
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Invalidation > should reset entire budget knowledge on forceFullRefresh without resource type 3ms
393
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Invalidation > should support global forceFullRefresh without budgetId 1ms
394
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Error Handling > should propagate fetcher errors without caching 5ms
395
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Error Handling > should propagate merger errors 6ms
396
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Error Handling > should not cache when fetch fails before delta detection 4ms
397
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Error Handling > should not update knowledge when fetch fails 3ms
398
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Result Metadata > should mark wasCached true on cache hits 2ms
399
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Result Metadata > should mark wasCached false when cache misses 1ms
400
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Result Metadata > should mark usedDelta true when merge applied 2ms
401
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Result Metadata > should mark usedDelta false when no merge happens 2ms
402
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Stats tracking > increments deltaHits and mergeOperations when delta merge occurs 2ms
403
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Stats tracking > increments deltaMisses when full refresh is required 1ms
404
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > Stats tracking > tracks knowledge gap events and treats them as hits 2ms
405
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > TTL Validation > should throw when ttl is missing for fetchWithDelta 2ms
406
- ✓  unit  src/server/__tests__/deltaCache.test.ts > DeltaCache > TTL Validation > should throw when ttl is not finite for fetchWithoutDelta 2ms
407
- ✓  unit  src/tools/__tests__/compareTransactions/index.test.ts > compareTransactions index (main handler) > CompareTransactionsSchema > should export schema correctly 10ms
408
- ✓  unit  src/tools/__tests__/compareTransactions/index.test.ts > compareTransactions index (main handler) > CompareTransactionsSchema > should apply default values through schema 2ms
409
- ✓  unit  src/tools/__tests__/compareTransactions/index.test.ts > compareTransactions index (main handler) > handleCompareTransactions orchestration > should orchestrate CSV data processing correctly 10ms
410
- ✓  unit  src/tools/__tests__/compareTransactions/index.test.ts > compareTransactions index (main handler) > handleCompareTransactions orchestration > should orchestrate CSV file processing correctly 4ms
411
- ✓  unit  src/tools/__tests__/compareTransactions/index.test.ts > compareTransactions index (main handler) > handleCompareTransactions orchestration > should handle auto-detection correctly 3ms
412
- ✓  unit  src/tools/__tests__/compareTransactions/index.test.ts > compareTransactions index (main handler) > handleCompareTransactions orchestration > should call YNAB API correctly 6ms
413
- ✓  unit  src/tools/__tests__/compareTransactions/index.test.ts > compareTransactions index (main handler) > handleCompareTransactions orchestration > should calculate date range correctly 3ms
414
- ✓  unit  src/tools/__tests__/compareTransactions/index.test.ts > compareTransactions index (main handler) > handleCompareTransactions orchestration > should pass filtered transactions to matcher 5ms
415
- ✓  unit  src/tools/__tests__/compareTransactions/index.test.ts > compareTransactions index (main handler) > handleCompareTransactions orchestration > should apply statement window filtering 16ms
416
- ✓  unit  src/tools/__tests__/compareTransactions/index.test.ts > compareTransactions index (main handler) > handleCompareTransactions orchestration > should build final result correctly 4ms
417
- ✓  unit  src/tools/__tests__/compareTransactions/index.test.ts > compareTransactions index (main handler) > handleCompareTransactions orchestration > should handle empty bank transactions correctly 4ms
418
- ✓  unit  src/tools/__tests__/compareTransactions/index.test.ts > compareTransactions index (main handler) > handleCompareTransactions orchestration > should handle auto-detection errors gracefully 2ms
419
- ✓  unit  src/utils/__tests__/money.test.ts > money utilities > toMilli > converts dollars to milliunits correctly 6ms
420
- ✓  unit  src/utils/__tests__/money.test.ts > money utilities > toMilli > throws for invalid amounts 3ms
421
- ✓  unit  src/utils/__tests__/money.test.ts > money utilities > fromMilli > converts milliunits with 2 decimal digits (USD) by default 1ms
422
- ✓  unit  src/utils/__tests__/money.test.ts > money utilities > fromMilli > converts milliunits with 0 decimal digits (JPY) 7ms
423
- ✓  unit  src/utils/__tests__/money.test.ts > money utilities > fromMilli > converts milliunits with 3 decimal digits (BHD) 1ms
424
- ✓  unit  src/utils/__tests__/money.test.ts > money utilities > fromMilli > converts milliunits with explicit 2 decimal digits 1ms
425
- ✓  unit  src/utils/__tests__/money.test.ts > money utilities > assertMilli > passes for safe integers 1ms
426
- ✓  unit  src/utils/__tests__/money.test.ts > money utilities > assertMilli > throws for non-safe integers 1ms
427
- ✓  unit  src/utils/__tests__/money.test.ts > money utilities > addMilli > adds milliunits correctly 1ms
428
- ✓  unit  src/utils/__tests__/money.test.ts > money utilities > addMilli > throws on overflow 1ms
429
- ✓  unit  src/utils/__tests__/money.test.ts > money utilities > inWindow > checks date windows correctly 1ms
430
- ✓  unit  src/utils/__tests__/money.test.ts > money utilities > inWindow > handles optional bounds 0ms
431
- ✓  unit  src/utils/__tests__/money.test.ts > money utilities > currency format helpers > extracts decimal digits from currency format 0ms
432
- ✓  unit  src/utils/__tests__/money.test.ts > money utilities > currency format helpers > returns default decimal digits for null/undefined 0ms
433
- ✓  unit  src/utils/__tests__/money.test.ts > money utilities > currency format helpers > extracts currency code from currency format 0ms
434
- ✓  unit  src/utils/__tests__/money.test.ts > money utilities > currency format helpers > returns default currency for null/undefined 0ms
435
- ✓  unit  src/utils/__tests__/money.test.ts > money utilities > moneyValue helpers > derives direction correctly 0ms
436
- ✓  unit  src/utils/__tests__/money.test.ts > money utilities > moneyValue helpers > formats milliunits into currency strings with default 2 decimals 64ms
437
- ✓  unit  src/utils/__tests__/money.test.ts > money utilities > moneyValue helpers > formats milliunits with custom currency format 3ms
438
- ✓  unit  src/utils/__tests__/money.test.ts > money utilities > moneyValue helpers > creates money values from milliunits with default 2 decimals 3ms
439
- ✓  unit  src/utils/__tests__/money.test.ts > money utilities > moneyValue helpers > creates currency-aware money values with decimal digits 1ms
440
- ✓  unit  src/utils/__tests__/money.test.ts > money utilities > moneyValue helpers > creates money values from decimal amounts 1ms
441
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > handleListAccounts > should include cache metadata from delta fetcher results 10ms
442
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > handleListAccounts > should return formatted account list on success 4ms
443
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > handleListAccounts > should handle 404 budget not found errors 3ms
444
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > handleListAccounts > should handle 401 authentication errors 1ms
445
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > handleListAccounts > should handle generic errors 2ms
446
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > handleGetAccount > should return detailed account information on success 9ms
447
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > handleGetAccount > should report cached responses when cache entries exist 1ms
448
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > handleGetAccount > should handle 404 account not found errors 1ms
449
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > handleGetAccount > should handle authentication errors 2ms
450
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > handleCreateAccount > should create account with all supported types 8ms
451
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > handleCreateAccount > should create account without initial balance 3ms
452
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > handleCreateAccount > should convert balance to milliunits 1ms
453
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > handleCreateAccount > should handle creation errors 1ms
454
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > handleCreateAccount > should invalidate account list cache on successful account creation 1ms
455
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > handleCreateAccount > should not invalidate cache on dry_run account creation 4ms
456
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > Schema Validation > ListAccountsSchema > should validate valid budget_id 6ms
457
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > Schema Validation > ListAccountsSchema > should reject empty budget_id 5ms
458
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > Schema Validation > ListAccountsSchema > should reject missing budget_id 2ms
459
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > Schema Validation > GetAccountSchema > should validate valid parameters 1ms
460
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > Schema Validation > GetAccountSchema > should reject missing account_id 1ms
461
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > Schema Validation > GetAccountSchema > should reject empty account_id 1ms
462
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > Schema Validation > CreateAccountSchema > should validate valid account creation parameters 2ms
463
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > Schema Validation > CreateAccountSchema > should validate without optional balance 0ms
464
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > Schema Validation > CreateAccountSchema > should validate all supported account types 2ms
465
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > Schema Validation > CreateAccountSchema > should reject invalid account type 1ms
466
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > Schema Validation > CreateAccountSchema > should reject empty name 2ms
467
- ✓  unit  src/tools/__tests__/accountTools.test.ts > Account Tools > Schema Validation > CreateAccountSchema > should reject missing required fields 1ms
468
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > resolveBudgetId > with valid provided budget ID > should return provided UUID v4 budget ID 4ms
469
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > resolveBudgetId > with valid provided budget ID > should return error for "default" keyword when no default budget set 3ms
470
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > resolveBudgetId > with valid provided budget ID > should return default budget ID when "default" keyword provided 1ms
471
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > resolveBudgetId > with valid provided budget ID > should return error for "last-used" keyword (not supported) 1ms
472
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > resolveBudgetId > with valid provided budget ID > should prioritize provided ID over default ID 1ms
473
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > resolveBudgetId > with valid provided budget ID > should trim whitespace from provided ID 0ms
474
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > resolveBudgetId > with invalid provided budget ID > should return error for invalid UUID format 1ms
475
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > resolveBudgetId > with invalid provided budget ID > should return error for malformed UUID 1ms
476
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > resolveBudgetId > with invalid provided budget ID > should return error for empty string 1ms
477
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > resolveBudgetId > with invalid provided budget ID > should return error for whitespace-only string 1ms
478
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > resolveBudgetId > with default budget ID fallback > should return valid default UUID when no provided ID 1ms
479
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > resolveBudgetId > with default budget ID fallback > should return error for "default" keyword as default budget ID 1ms
480
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > resolveBudgetId > with default budget ID fallback > should return error when default ID is invalid 1ms
481
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > resolveBudgetId > with missing budget ID > should return error when no provided ID and no default 1ms
482
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > resolveBudgetId > with missing budget ID > should return error when provided ID is undefined and no default 1ms
483
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > validateBudgetId > with valid budget IDs > should return valid UUID v4 format 0ms
484
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > validateBudgetId > with valid budget IDs > should return error for "default" keyword (keywords not allowed in validation) 1ms
485
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > validateBudgetId > with valid budget IDs > should return error for "last-used" keyword (keywords not allowed in validation) 0ms
486
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > validateBudgetId > with valid budget IDs > should trim whitespace and return valid ID 0ms
487
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > validateBudgetId > with valid budget IDs > should handle mixed case UUID correctly 0ms
488
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > validateBudgetId > with invalid budget IDs > should return error for invalid UUID format 1ms
489
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > validateBudgetId > with invalid budget IDs > should return error for malformed UUID 1ms
490
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > validateBudgetId > with invalid budget IDs > should return error for empty string 1ms
491
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > validateBudgetId > with invalid budget IDs > should return error for whitespace-only string 3ms
492
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > validateBudgetId > with invalid budget IDs > should return error for non-string input 1ms
493
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > validateBudgetId > with invalid budget IDs > should return error for invalid keyword format 1ms
494
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > validateBudgetId > edge cases > should handle very long strings 1ms
495
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > validateBudgetId > edge cases > should handle special characters 1ms
496
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > validateBudgetId > edge cases > should handle unicode characters 1ms
497
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > convenience throw functions > resolveBudgetIdOrThrow > should return valid budget ID when successful 0ms
498
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > convenience throw functions > resolveBudgetIdOrThrow > should throw error when resolution fails 2ms
499
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > convenience throw functions > resolveBudgetIdOrThrow > should throw error when no budget provided and no default 1ms
500
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > convenience throw functions > validateBudgetIdOrThrow > should return valid budget ID when successful 1ms
501
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > convenience throw functions > validateBudgetIdOrThrow > should throw error when validation fails 1ms
502
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > convenience throw functions > validateBudgetIdOrThrow > should throw error for empty string 1ms
503
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > error creation functions > createMissingBudgetError > should create standardized missing budget error 1ms
504
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > error creation functions > createInvalidBudgetError > should create standardized invalid budget error with details 6ms
505
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > convenience functions > resolveBudgetId function > should work the same as BudgetResolver.resolveBudgetId 2ms
506
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > convenience functions > validateBudgetId function > should work the same as BudgetResolver.validateBudgetId 0ms
507
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > convenience functions > createMissingBudgetError function > should work the same as BudgetResolver.createMissingBudgetError 1ms
508
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > convenience functions > createInvalidBudgetError function > should work the same as BudgetResolver.createInvalidBudgetError 1ms
509
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > error response structure > should create consistent error response shape for missing budget 4ms
510
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > error response structure > should create consistent error response shape for invalid budget 1ms
511
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > error response structure > should include actionable suggestions in error messages 1ms
512
- ✓  unit  src/server/__tests__/budgetResolver.test.ts > BudgetResolver > integration with ErrorHandler > should use ErrorHandler.createValidationError for consistent formatting 2ms
513
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts > TransactionSchema > should validate complete transaction with all fields 10ms
514
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts > TransactionSchema > should validate minimal transaction with only required fields 2ms
515
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts > TransactionSchema > should validate transaction with cleared status values 1ms
516
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts > TransactionSchema > should validate split transaction with subtransactions 1ms
517
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts > TransactionSchema > should validate transfer transaction 1ms
518
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts > TransactionSchema > should fail validation when missing required id field 2ms
519
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts > TransactionSchema > should fail validation when missing required date field 1ms
520
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts > TransactionSchema > should fail validation when amount is not a number 1ms
521
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts > TransactionSchema > should fail validation when approved is not a boolean 1ms
522
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts > TransactionPreviewSchema > should validate preview transaction with all fields 1ms
523
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts > TransactionPreviewSchema > should validate minimal preview transaction 1ms
524
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts > TransactionPreviewSchema > should fail validation when missing required id field 0ms
525
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts > ListTransactionsOutputSchema - Normal Mode > should validate normal mode output with multiple transactions 6ms
526
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts > ListTransactionsOutputSchema - Normal Mode > should validate normal mode output with empty transactions array 1ms
527
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts > ListTransactionsOutputSchema - Preview Mode > should validate preview mode output for large result sets 5ms
528
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts > ListTransactionsOutputSchema - Preview Mode > should validate preview mode output with minimal preview transactions 1ms
529
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts > ListTransactionsOutputSchema - Preview Mode > should fail validation when preview mode missing required fields 3ms
530
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts > GetTransactionOutputSchema > should validate output with complete transaction and cache metadata 3ms
531
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts > GetTransactionOutputSchema > should validate output with minimal transaction 1ms
532
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts > GetTransactionOutputSchema > should fail validation when transaction is not an object 1ms
533
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts > GetTransactionOutputSchema > should fail validation when transaction missing required fields 1ms
534
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionOutputs.test.ts > GetTransactionOutputSchema > should fail validation when missing required transaction field 0ms
535
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should execute operation successfully with valid input
536
- Rate limit check for token_12bf80ff: 0/200 requests, remaining: 200, limited: false
537
-
538
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should execute operation successfully with valid input
539
- Recorded request for token_12bf80ff: 1/200 requests
540
-
541
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should execute operation successfully with valid input
542
- Rate limit check for token_12bf80ff: 1/200 requests, remaining: 199, limited: false
543
- [INFO] ynab:test:test operation | SUCCESS | 7ms | rate_limit_remaining:199
544
-
545
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should validate input parameters
546
- Rate limit check for token_12bf80ff: 0/200 requests, remaining: 200, limited: false
547
- [ERROR] ynab:test:test operation | FAILED | 2ms | rate_limit_remaining:200 | error:"Validation failed: Validation error: Too small: expected string to have >=1 characters at "budget_id"; Invalid input: expected number, received string at "amount""
548
-
549
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should enforce rate limiting
550
- [INFO] ynab:test:test operation | SUCCESS | 0ms | rate_limit_remaining:1
551
-
552
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should enforce rate limiting
553
- [INFO] ynab:test:test operation | SUCCESS | 0ms | rate_limit_remaining:0
554
- [WARN] Rate limit exceeded for ynab:test
555
-
556
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should enforce rate limiting
557
- [ERROR] ynab:test:test operation | FAILED | 0ms | rate_limit_remaining:0 | error:"Rate limit exceeded. Please wait before making additional requests."
558
- [WARN] Rate limit exceeded for ynab:test
559
-
560
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should log successful requests
561
- Rate limit check for token_12bf80ff: 0/200 requests, remaining: 200, limited: false
562
-
563
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should log successful requests
564
- Recorded request for token_12bf80ff: 1/200 requests
565
-
566
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should log successful requests
567
- Rate limit check for token_12bf80ff: 1/200 requests, remaining: 199, limited: false
568
- [INFO] ynab:test:test operation | SUCCESS | 1ms | rate_limit_remaining:199
569
-
570
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should log failed requests
571
- Rate limit check for token_12bf80ff: 0/200 requests, remaining: 200, limited: false
572
-
573
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should log failed requests
574
- Recorded request for token_12bf80ff: 1/200 requests
575
-
576
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should log failed requests
577
- Rate limit check for token_12bf80ff: 1/200 requests, remaining: 199, limited: false
578
- [ERROR] ynab:test:test operation | FAILED | 1ms | rate_limit_remaining:199 | error:"Test error"
579
-
580
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should handle rate limit errors specially
581
- Rate limit check for token_12bf80ff: 0/200 requests, remaining: 200, limited: false
582
-
583
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should handle rate limit errors specially
584
- Recorded request for token_12bf80ff: 1/200 requests
585
-
586
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should handle rate limit errors specially
587
- Rate limit check for token_12bf80ff: 1/200 requests, remaining: 199, limited: false
588
- [ERROR] ynab:test:test operation | FAILED | 0ms | rate_limit_remaining:199 | error:"Rate limit exceeded"
589
-
590
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should include rate limit info in logs
591
- Rate limit check for token_12bf80ff: 0/200 requests, remaining: 200, limited: false
592
-
593
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should include rate limit info in logs
594
- Recorded request for token_12bf80ff: 1/200 requests
595
-
596
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should include rate limit info in logs
597
- Rate limit check for token_12bf80ff: 1/200 requests, remaining: 199, limited: false
598
- [INFO] ynab:test:test operation | SUCCESS | 1ms | rate_limit_remaining:199
599
-
600
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > input validation > should validate required fields
601
- Rate limit check for token_12bf80ff: 0/200 requests, remaining: 200, limited: false
602
- [ERROR] ynab:test:test operation | FAILED | 1ms | rate_limit_remaining:200 | error:"Validation failed: Validation error: Invalid input: expected string, received undefined at "budget_id""
603
-
604
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > input validation > should validate field types
605
- Rate limit check for token_12bf80ff: 0/200 requests, remaining: 200, limited: false
606
- [ERROR] ynab:test:test operation | FAILED | 1ms | rate_limit_remaining:200 | error:"Validation failed: Validation error: Invalid input: expected number, received string at "amount""
607
-
608
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > input validation > should pass valid optional fields
609
- Rate limit check for token_12bf80ff: 0/200 requests, remaining: 200, limited: false
610
-
611
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > input validation > should pass valid optional fields
612
- Recorded request for token_12bf80ff: 1/200 requests
613
-
614
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > input validation > should pass valid optional fields
615
- Rate limit check for token_12bf80ff: 1/200 requests, remaining: 199, limited: false
616
- [INFO] ynab:test:test operation | SUCCESS | 1ms | rate_limit_remaining:199
617
-
618
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > token hashing > should use consistent hashing for the same token
619
- Rate limit check for token_1e79b1c0: 0/200 requests, remaining: 200, limited: false
620
-
621
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > token hashing > should use consistent hashing for the same token
622
- Recorded request for token_1e79b1c0: 1/200 requests
623
-
624
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > token hashing > should use consistent hashing for the same token
625
- Rate limit check for token_1e79b1c0: 1/200 requests, remaining: 199, limited: false
626
- [INFO] ynab:test1:test | SUCCESS | 1ms | rate_limit_remaining:199
627
-
628
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > token hashing > should use consistent hashing for the same token
629
- Rate limit check for token_1e79b1c0: 1/200 requests, remaining: 199, limited: false
630
-
631
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > token hashing > should use consistent hashing for the same token
632
- Recorded request for token_1e79b1c0: 2/200 requests
633
-
634
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > token hashing > should use consistent hashing for the same token
635
- Rate limit check for token_1e79b1c0: 2/200 requests, remaining: 198, limited: false
636
- [INFO] ynab:test2:test | SUCCESS | 1ms | rate_limit_remaining:198
637
-
638
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > token hashing > should use different hashing for different tokens
639
- Rate limit check for token_16a2a057: 0/200 requests, remaining: 200, limited: false
640
-
641
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > token hashing > should use different hashing for different tokens
642
- Recorded request for token_16a2a057: 1/200 requests
643
-
644
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > token hashing > should use different hashing for different tokens
645
- Rate limit check for token_16a2a057: 1/200 requests, remaining: 199, limited: false
646
- [INFO] ynab:test:test | SUCCESS | 0ms | rate_limit_remaining:199
647
-
648
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > token hashing > should use different hashing for different tokens
649
- Rate limit check for token_16a2a058: 0/200 requests, remaining: 200, limited: false
650
-
651
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > token hashing > should use different hashing for different tokens
652
- Recorded request for token_16a2a058: 1/200 requests
653
-
654
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > token hashing > should use different hashing for different tokens
655
- Rate limit check for token_16a2a058: 1/200 requests, remaining: 199, limited: false
656
- [INFO] ynab:test:test | SUCCESS | 1ms | rate_limit_remaining:199
657
-
658
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > getSecurityStats > should return security statistics
659
- Rate limit check for token_12bf80ff: 0/200 requests, remaining: 200, limited: false
660
-
661
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > getSecurityStats > should return security statistics
662
- Recorded request for token_12bf80ff: 1/200 requests
663
-
664
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > getSecurityStats > should return security statistics
665
- Rate limit check for token_12bf80ff: 1/200 requests, remaining: 199, limited: false
666
- [INFO] ynab:test:test operation | SUCCESS | 1ms | rate_limit_remaining:199
667
-
668
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > reset > should reset security state
669
- Rate limit check for token_12bf80ff: 0/200 requests, remaining: 200, limited: false
670
-
671
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > reset > should reset security state
672
- Recorded request for token_12bf80ff: 1/200 requests
673
-
674
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > reset > should reset security state
675
- Rate limit check for token_12bf80ff: 1/200 requests, remaining: 199, limited: false
676
- [INFO] ynab:test:test operation | SUCCESS | 1ms | rate_limit_remaining:199
677
-
678
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurityWrapper > should create a properly configured wrapper function
679
- Rate limit check for token_12bf80ff: 0/200 requests, remaining: 200, limited: false
680
-
681
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurityWrapper > should create a properly configured wrapper function
682
- Recorded request for token_12bf80ff: 1/200 requests
683
-
684
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurityWrapper > should create a properly configured wrapper function
685
- Rate limit check for token_12bf80ff: 1/200 requests, remaining: 199, limited: false
686
- [INFO] ynab:test:test operation | SUCCESS | 0ms | rate_limit_remaining:199
687
-
688
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > error handling > should handle validation errors gracefully
689
- Rate limit check for token_12bf80ff: 0/200 requests, remaining: 200, limited: false
690
- [ERROR] ynab:test:test operation | FAILED | 1ms | rate_limit_remaining:200 | error:"Validation failed: Validation error: Too small: expected string to have >=10 characters at "budget_id""
691
-
692
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > error handling > should handle operation errors and re-throw them
693
- Rate limit check for token_12bf80ff: 0/200 requests, remaining: 200, limited: false
694
-
695
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > error handling > should handle operation errors and re-throw them
696
- Recorded request for token_12bf80ff: 1/200 requests
697
-
698
- stderr | src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > error handling > should handle operation errors and re-throw them
699
- Rate limit check for token_12bf80ff: 1/200 requests, remaining: 199, limited: false
700
- [ERROR] ynab:test:test operation | FAILED | 1ms | rate_limit_remaining:199 | error:"Operation failed"
701
-
702
- ✓  unit  src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should execute operation successfully with valid input 22ms
703
- ✓  unit  src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should validate input parameters 8ms
704
- ✓  unit  src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should enforce rate limiting 6ms
705
- ✓  unit  src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should log successful requests 5ms
706
- ✓  unit  src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should log failed requests 4ms
707
- ✓  unit  src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should handle rate limit errors specially 2ms
708
- ✓  unit  src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurity > should include rate limit info in logs 2ms
709
- ✓  unit  src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > input validation > should validate required fields 8ms
710
- ✓  unit  src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > input validation > should validate field types 7ms
711
- ✓  unit  src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > input validation > should pass valid optional fields 3ms
712
- ✓  unit  src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > token hashing > should use consistent hashing for the same token 5ms
713
- ✓  unit  src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > token hashing > should use different hashing for different tokens 3ms
714
- ✓  unit  src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > getSecurityStats > should return security statistics 3ms
715
- ✓  unit  src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > reset > should reset security state 3ms
716
- ✓  unit  src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > withSecurityWrapper > should create a properly configured wrapper function 2ms
717
- ✓  unit  src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > error handling > should handle validation errors gracefully 3ms
718
- ✓  unit  src/server/__tests__/securityMiddleware.test.ts > SecurityMiddleware > error handling > should handle operation errors and re-throw them 4ms
719
- stderr | src/server/__tests__/requestLogger.test.ts > RequestLogger > logRequest > should log a successful request
720
- [INFO] ynab:create_transaction:creating transaction | SUCCESS | 150ms
721
-
722
- stderr | src/server/__tests__/requestLogger.test.ts > RequestLogger > logRequest > should log a failed request
723
- [ERROR] ynab:get_budget:getting budget | FAILED | 75ms | error:"Budget not found"
724
-
725
- stderr | src/server/__tests__/requestLogger.test.ts > RequestLogger > logRequest > should include rate limit information
726
- [INFO] ynab:list_budgets:listing budgets | SUCCESS | 100ms | rate_limit_remaining:150
727
-
728
- stderr | src/server/__tests__/requestLogger.test.ts > RequestLogger > parameter sanitization > should sanitize sensitive parameter names
729
- [INFO] ynab:test:test | SUCCESS
730
-
731
- stderr | src/server/__tests__/requestLogger.test.ts > RequestLogger > parameter sanitization > should sanitize long alphanumeric strings in values
732
- [INFO] ynab:test:test | SUCCESS
733
-
734
- stderr | src/server/__tests__/requestLogger.test.ts > RequestLogger > parameter sanitization > should sanitize Bearer tokens in strings
735
- [INFO] ynab:test:test | SUCCESS
736
-
737
- stderr | src/server/__tests__/requestLogger.test.ts > RequestLogger > parameter sanitization > should sanitize nested objects
738
- [INFO] ynab:test:test | SUCCESS
739
-
740
- stderr | src/server/__tests__/requestLogger.test.ts > RequestLogger > parameter sanitization > should sanitize arrays
741
- [INFO] ynab:test:test | SUCCESS
742
-
743
- stderr | src/server/__tests__/requestLogger.test.ts > RequestLogger > parameter sanitization > should not sanitize when sanitization is disabled
744
- [INFO] ynab:test:test | SUCCESS
745
-
746
- stderr | src/server/__tests__/requestLogger.test.ts > RequestLogger > error sanitization > should sanitize error messages
747
- [ERROR] ynab:test:test | FAILED | error:"Authentication failed with token=***"
748
-
749
- stderr | src/server/__tests__/requestLogger.test.ts > RequestLogger > error sanitization > should sanitize Bearer tokens in error messages
750
- [ERROR] ynab:test:test | FAILED | error:"Invalid authorization header: Bearer ***"
751
-
752
- stderr | src/server/__tests__/requestLogger.test.ts > RequestLogger > log management > should maintain maximum log entries
753
- [INFO] ynab:test0:test | SUCCESS
754
- [INFO] ynab:test1:test | SUCCESS
755
- [INFO] ynab:test2:test | SUCCESS
756
- [INFO] ynab:test3:test | SUCCESS
757
- [INFO] ynab:test4:test | SUCCESS
758
-
759
- stderr | src/server/__tests__/requestLogger.test.ts > RequestLogger > log management > should clear all logs
760
- [INFO] ynab:test1:test | SUCCESS
761
- [INFO] ynab:test2:test | SUCCESS
762
-
763
- stderr | src/server/__tests__/requestLogger.test.ts > RequestLogger > log filtering > should filter by tool name
764
- [INFO] ynab:list_budgets:listing | SUCCESS
765
- [ERROR] ynab:get_budget:getting | FAILED | error:"Not found"
766
- [INFO] ynab:list_accounts:listing | SUCCESS
767
- [ERROR] ynab:create_transaction:creating | FAILED | error:"Invalid data"
768
-
769
- stderr | src/server/__tests__/requestLogger.test.ts > RequestLogger > log filtering > should filter by success status
770
- [INFO] ynab:list_budgets:listing | SUCCESS
771
- [ERROR] ynab:get_budget:getting | FAILED | error:"Not found"
772
- [INFO] ynab:list_accounts:listing | SUCCESS
773
- [ERROR] ynab:create_transaction:creating | FAILED | error:"Invalid data"
774
-
775
- stderr | src/server/__tests__/requestLogger.test.ts > RequestLogger > log filtering > should filter by date
776
- [INFO] ynab:list_budgets:listing | SUCCESS
777
- [ERROR] ynab:get_budget:getting | FAILED | error:"Not found"
778
- [INFO] ynab:list_accounts:listing | SUCCESS
779
- [ERROR] ynab:create_transaction:creating | FAILED | error:"Invalid data"
780
-
781
- stderr | src/server/__tests__/requestLogger.test.ts > RequestLogger > log filtering > should limit results
782
- [INFO] ynab:list_budgets:listing | SUCCESS
783
- [ERROR] ynab:get_budget:getting | FAILED | error:"Not found"
784
- [INFO] ynab:list_accounts:listing | SUCCESS
785
- [ERROR] ynab:create_transaction:creating | FAILED | error:"Invalid data"
786
-
787
- stderr | src/server/__tests__/requestLogger.test.ts > RequestLogger > log filtering > should combine filters
788
- [INFO] ynab:list_budgets:listing | SUCCESS
789
- [ERROR] ynab:get_budget:getting | FAILED | error:"Not found"
790
- [INFO] ynab:list_accounts:listing | SUCCESS
791
- [ERROR] ynab:create_transaction:creating | FAILED | error:"Invalid data"
792
-
793
- stderr | src/server/__tests__/requestLogger.test.ts > RequestLogger > statistics > should calculate basic statistics
794
- [INFO] ynab:list_budgets:listing | SUCCESS | 100ms
795
- [ERROR] ynab:get_budget:getting | FAILED | 50ms | error:"Not found"
796
- [INFO] ynab:list_budgets:listing | SUCCESS | 150ms
797
- [INFO] ynab:create_transaction:creating | SUCCESS | 200ms | rate_limit_remaining:100
798
- [ERROR] ynab:update_transaction:updating | FAILED | 75ms | rate_limit_remaining:0 | error:"Rate limited"
799
- [WARN] Rate limit exceeded for ynab:update_transaction
800
-
801
- stderr | src/server/__tests__/requestLogger.test.ts > RequestLogger > statistics > should calculate average duration
802
- [INFO] ynab:list_budgets:listing | SUCCESS | 100ms
803
- [ERROR] ynab:get_budget:getting | FAILED | 50ms | error:"Not found"
804
- [INFO] ynab:list_budgets:listing | SUCCESS | 150ms
805
- [INFO] ynab:create_transaction:creating | SUCCESS | 200ms | rate_limit_remaining:100
806
- [ERROR] ynab:update_transaction:updating | FAILED | 75ms | rate_limit_remaining:0 | error:"Rate limited"
807
- [WARN] Rate limit exceeded for ynab:update_transaction
808
-
809
- stderr | src/server/__tests__/requestLogger.test.ts > RequestLogger > statistics > should count rate limited requests
810
- [INFO] ynab:list_budgets:listing | SUCCESS | 100ms
811
- [ERROR] ynab:get_budget:getting | FAILED | 50ms | error:"Not found"
812
- [INFO] ynab:list_budgets:listing | SUCCESS | 150ms
813
- [INFO] ynab:create_transaction:creating | SUCCESS | 200ms | rate_limit_remaining:100
814
- [ERROR] ynab:update_transaction:updating | FAILED | 75ms | rate_limit_remaining:0 | error:"Rate limited"
815
- [WARN] Rate limit exceeded for ynab:update_transaction
816
-
817
- stderr | src/server/__tests__/requestLogger.test.ts > RequestLogger > statistics > should track tool usage
818
- [INFO] ynab:list_budgets:listing | SUCCESS | 100ms
819
- [ERROR] ynab:get_budget:getting | FAILED | 50ms | error:"Not found"
820
- [INFO] ynab:list_budgets:listing | SUCCESS | 150ms
821
- [INFO] ynab:create_transaction:creating | SUCCESS | 200ms | rate_limit_remaining:100
822
- [ERROR] ynab:update_transaction:updating | FAILED | 75ms | rate_limit_remaining:0 | error:"Rate limited"
823
- [WARN] Rate limit exceeded for ynab:update_transaction
824
-
825
- stderr | src/server/__tests__/requestLogger.test.ts > RequestLogger > statistics > should handle empty logs
826
- [INFO] ynab:list_budgets:listing | SUCCESS | 100ms
827
- [ERROR] ynab:get_budget:getting | FAILED | 50ms | error:"Not found"
828
- [INFO] ynab:list_budgets:listing | SUCCESS | 150ms
829
- [INFO] ynab:create_transaction:creating | SUCCESS | 200ms | rate_limit_remaining:100
830
- [ERROR] ynab:update_transaction:updating | FAILED | 75ms | rate_limit_remaining:0 | error:"Rate limited"
831
- [WARN] Rate limit exceeded for ynab:update_transaction
832
-
833
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > logRequest > should log a successful request 12ms
834
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > logRequest > should log a failed request 2ms
835
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > logRequest > should include rate limit information 1ms
836
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > logRequest > should not log when disabled 1ms
837
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > parameter sanitization > should sanitize sensitive parameter names 2ms
838
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > parameter sanitization > should sanitize long alphanumeric strings in values 1ms
839
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > parameter sanitization > should sanitize Bearer tokens in strings 1ms
840
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > parameter sanitization > should sanitize nested objects 2ms
841
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > parameter sanitization > should sanitize arrays 2ms
842
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > parameter sanitization > should not sanitize when sanitization is disabled 2ms
843
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > error sanitization > should sanitize error messages 1ms
844
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > error sanitization > should sanitize Bearer tokens in error messages 1ms
845
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > log management > should maintain maximum log entries 1ms
846
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > log management > should clear all logs 1ms
847
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > log filtering > should filter by tool name 2ms
848
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > log filtering > should filter by success status 2ms
849
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > log filtering > should filter by date 1ms
850
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > log filtering > should limit results 1ms
851
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > log filtering > should combine filters 1ms
852
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > statistics > should calculate basic statistics 2ms
853
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > statistics > should calculate average duration 1ms
854
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > statistics > should count rate limited requests 1ms
855
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > statistics > should track tool usage 1ms
856
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > statistics > should handle empty logs 2ms
857
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > console output > should output success logs at info level 10ms
858
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > console output > should output error logs at error level 2ms
859
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > console output > should output rate limit warnings 1ms
860
- ✓  unit  src/server/__tests__/requestLogger.test.ts > RequestLogger > console output > should respect log level configuration 1ms
861
- ✓  unit  src/tools/reconciliation/__tests__/adapter.causes.test.ts > buildReconciliationPayload discrepancy causes mapping > maps legacy causes to MoneyValue entries with CAD currency 74ms
862
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > registers a tool and exposes it through getToolDefinitions 19ms
863
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > throws when registering duplicate tool names 8ms
864
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > rejects invalid tool definitions 1ms
865
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > lists tools with generated JSON schema when metadata missing 10ms
866
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > prefers custom metadata JSON schema when provided 2ms
867
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > executes a registered tool via security wrapper and handler 10ms
868
- ↓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > routes reconcile_account tool to handler emitting dual-channel output
869
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > merges default arguments before validation 4ms
870
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > passes cache helpers to the handler context when injected 6ms
871
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > extracts minify override from arguments when not explicitly provided 8ms
872
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > prefers explicit minify override option over argument hints 8ms
873
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > returns validation error result for unknown tools 3ms
874
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > surfaces validation failures from security wrapper 6ms
875
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > routes handler exceptions to error handler 4ms
876
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > normalizes unexpected security errors 3ms
877
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > returns permissive schema when conversion fails 4ms
878
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > supports empty registry listings 1ms
879
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > ErrorHandler integration > should use injected ErrorHandler instance 1ms
880
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > ErrorHandler integration > should use the same formatter instance for both ErrorHandler and ToolRegistry 1ms
881
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > ErrorHandler integration > should implement ErrorHandler contract interface 1ms
882
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > Output Schema Validation > validates handler output against declared output schema 3ms
883
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > Output Schema Validation > rejects handler output that does not match output schema 10ms
884
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > Output Schema Validation > rejects handler output with missing required fields 3ms
885
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > Output Schema Validation > rejects handler output with invalid JSON 3ms
886
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > Output Schema Validation > rejects handler output with empty content 3ms
887
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > Output Schema Validation > rejects handler output with non-text content 6ms
888
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > Output Schema Validation > rejects handler output with multiple invalid content items 2ms
889
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > Output Schema Validation > skips validation when no output schema is defined 2ms
890
- ✓  unit  src/server/__tests__/toolRegistry.test.ts > ToolRegistry > Output Schema Validation > includes output schema in tool listing when defined 4ms
891
- ✓  unit  src/server/__tests__/errorHandler.test.ts > ErrorHandler > handleError > should handle YNABAPIError correctly 9ms
892
- ✓  unit  src/server/__tests__/errorHandler.test.ts > ErrorHandler > handleError > should handle ValidationError correctly 7ms
893
- ✓  unit  src/server/__tests__/errorHandler.test.ts > ErrorHandler > handleError > should detect 401 errors from generic Error messages 10ms
894
- ✓  unit  src/server/__tests__/errorHandler.test.ts > ErrorHandler > handleError > should detect 403 errors from generic Error messages 1ms
895
- ✓  unit  src/server/__tests__/errorHandler.test.ts > ErrorHandler > handleError > should detect 404 errors from generic Error messages 1ms
896
- ✓  unit  src/server/__tests__/errorHandler.test.ts > ErrorHandler > handleError > should detect 429 errors from generic Error messages 2ms
897
- ✓  unit  src/server/__tests__/errorHandler.test.ts > ErrorHandler > handleError > should detect 500 errors from generic Error messages 1ms
898
- ✓  unit  src/server/__tests__/errorHandler.test.ts > ErrorHandler > handleError > should handle unknown errors gracefully 4ms
899
- ✓  unit  src/server/__tests__/errorHandler.test.ts > ErrorHandler > handleError > should preserve original error message in details field for unknown errors 3ms
900
- ✓  unit  src/server/__tests__/errorHandler.test.ts > ErrorHandler > handleError > should handle non-Error objects 1ms
901
- ✓  unit  src/server/__tests__/errorHandler.test.ts > ErrorHandler > sanitizeErrorDetails > should sanitize access tokens 1ms
902
- ✓  unit  src/server/__tests__/errorHandler.test.ts > ErrorHandler > sanitizeErrorDetails > should sanitize API keys 0ms
903
- ✓  unit  src/server/__tests__/errorHandler.test.ts > ErrorHandler > sanitizeErrorDetails > should sanitize passwords 0ms
904
- ✓  unit  src/server/__tests__/errorHandler.test.ts > ErrorHandler > sanitizeErrorDetails > should sanitize authorization headers 0ms
905
- ✓  unit  src/server/__tests__/errorHandler.test.ts > ErrorHandler > withErrorHandling > should return result when operation succeeds 8ms
906
- ✓  unit  src/server/__tests__/errorHandler.test.ts > ErrorHandler > withErrorHandling > should handle errors when operation fails 3ms
907
- ✓  unit  src/server/__tests__/errorHandler.test.ts > ErrorHandler > createValidationError > should create a validation error response 1ms
908
- ✓  unit  src/server/__tests__/errorHandler.test.ts > ErrorHandler > createYNABError > should create a YNAB API error 1ms
909
- ✓  unit  src/server/__tests__/errorHandler.test.ts > handleToolError > should format tool error messages correctly 2ms
910
- ✓  unit  src/server/__tests__/errorHandler.test.ts > withToolErrorHandling > should return result when tool operation succeeds 1ms
911
- ✓  unit  src/server/__tests__/errorHandler.test.ts > withToolErrorHandling > should handle errors when tool operation fails 2ms
912
- ✓  unit  src/server/__tests__/errorHandler.test.ts > YNABAPIError > should create error with correct properties 0ms
913
- ✓  unit  src/server/__tests__/errorHandler.test.ts > ValidationError > should create error with correct properties 1ms
914
- ✓  unit  src/server/__tests__/errorHandler.test.ts > ErrorHandler with formatter injection > should use injected formatter for error responses 1ms
915
- ✓  unit  src/server/__tests__/errorHandler.test.ts > ErrorHandler with formatter injection > should call formatter with error response object 10ms
916
- ✓  unit  src/server/__tests__/errorHandler.test.ts > ErrorHandler with formatter injection > should create different instances with different formatters 1ms
917
- ✓  unit  src/server/__tests__/errorHandler.test.ts > Static method delegation > should delegate static calls to default instance 1ms
918
- ✓  unit  src/server/__tests__/errorHandler.test.ts > Static method delegation > should delegate createValidationError to default instance 3ms
919
- ✓  unit  src/server/__tests__/errorHandler.test.ts > Static method delegation > should delegate withErrorHandling to default instance 2ms
920
- ✓  unit  src/server/__tests__/errorHandler.test.ts > Fallback formatter > should use fallback formatter when none is set initially 5ms
921
- ✓  unit  src/server/__tests__/errorHandler.test.ts > Instance vs static behavior > should produce identical results for instance and static calls 1ms
922
- ✓  unit  src/server/__tests__/errorHandler.test.ts > Instance vs static behavior > should produce identical results for createValidationError 2ms
923
- ✓  unit  src/server/__tests__/errorHandler.test.ts > Instance vs static behavior > should produce identical results for withErrorHandling 8ms
924
- ✓  unit  src/server/__tests__/errorHandler.test.ts > Error scenarios > should handle formatter errors gracefully 2ms
925
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > constructor > should initialize with dependencies 10ms
926
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > should always include timestamp 20ms
927
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > server diagnostics > should include server information when include_server is true 4ms
928
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > server diagnostics > should exclude server information when include_server is false 5ms
929
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > server diagnostics > should handle custom NODE_ENV 4ms
930
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > memory diagnostics > should include memory information when include_memory is true 13ms
931
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > memory diagnostics > should exclude memory information when include_memory is false 3ms
932
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > memory diagnostics > should handle undefined arrayBuffers 2ms
933
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > environment diagnostics > should include environment information when include_environment is true 13ms
934
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > environment diagnostics > should handle missing token 10ms
935
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > delta diagnostics > should include delta metrics when include_delta is true 3ms
936
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > delta diagnostics > should skip delta metrics when include_delta is not explicitly true 2ms
937
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > security diagnostics > should include security information when include_security is true 1ms
938
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > security diagnostics > should exclude security information when include_security is false 1ms
939
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > cache diagnostics > should include cache information when include_cache is true 4ms
940
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > cache diagnostics > should handle cache serialization errors gracefully 1ms
941
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > cache diagnostics > should include enhanced cache metrics when available 1ms
942
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > cache diagnostics > should handle missing enhanced metrics gracefully 2ms
943
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > cache diagnostics > should format lastCleanup timestamp correctly 3ms
944
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > cache diagnostics > should handle null lastCleanup timestamp 1ms
945
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > cache diagnostics > should calculate and display hit rate percentage 1ms
946
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > cache diagnostics > should include performance summary with evictions 2ms
947
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > cache diagnostics > should handle zero requests for hit rate calculation 2ms
948
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > combined diagnostics > should include all diagnostics when all options are true 3ms
949
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > DiagnosticManager > collectDiagnostics > combined diagnostics > should include only timestamp when all options are false 1ms
950
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > utility functions > formatUptime > should format seconds only 1ms
951
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > utility functions > formatUptime > should format minutes and seconds 1ms
952
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > utility functions > formatUptime > should format hours, minutes, and seconds 1ms
953
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > utility functions > formatUptime > should format days, hours, minutes, and seconds 1ms
954
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > utility functions > formatUptime > should handle zero uptime 0ms
955
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > utility functions > formatUptime > should handle fractional milliseconds 1ms
956
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > utility functions > formatBytes > should format bytes to MB with proper rounding 1ms
957
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > utility functions > formatBytes > should handle large values 1ms
958
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > utility functions > maskToken > should return null for undefined token 1ms
959
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > utility functions > maskToken > should return null for empty token 1ms
960
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > utility functions > maskToken > should mask tokens with 8+ characters 1ms
961
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > utility functions > maskToken > should mask short tokens differently 1ms
962
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > dependency injection > should use injected security middleware 1ms
963
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > dependency injection > should use injected cache manager 1ms
964
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > dependency injection > should use injected response formatter 1ms
965
- ✓  unit  src/server/__tests__/diagnostics.test.ts > diagnostics module > dependency injection > should use injected server version 2ms
966
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > calculateMatchScore > should give perfect score for exact matches 18ms
967
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > calculateMatchScore > should score date differences correctly 3ms
968
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > calculateMatchScore > should score amount differences correctly 1ms
969
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > calculateMatchScore > should not match when differences exceed tolerance 3ms
970
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > calculateMatchScore > should handle memo similarity 1ms
971
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > calculateMatchScore > should handle zero amounts 1ms
972
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > calculateMatchScore > should handle empty descriptions gracefully 0ms
973
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > groupTransactionsByAmount > should group transactions by amount 2ms
974
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > groupTransactionsByAmount > should handle mixed transaction types 1ms
975
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > groupTransactionsByAmount > should handle empty transaction list 1ms
976
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > matchDuplicateAmounts > should match duplicates chronologically 2ms
977
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > matchDuplicateAmounts > should give chronology bonus for close dates 3ms
978
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > matchDuplicateAmounts > should handle partial matches (more bank than YNAB) 1ms
979
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > matchDuplicateAmounts > should not reuse matched transactions 1ms
980
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > matchDuplicateAmounts > should respect minimum score threshold 0ms
981
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > findMatches > should find simple one-to-one matches 2ms
982
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > findMatches > should handle unmatched transactions 1ms
983
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > findMatches > should handle duplicate amounts with special logic 1ms
984
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > findMatches > should respect minimum score threshold 1ms
985
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > findMatches > should not reuse transactions 2ms
986
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > findMatches > should handle empty transaction lists 1ms
987
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > findMatches > should handle large datasets efficiently 5ms
988
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > findMatches > should handle negative amounts correctly 1ms
989
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > findMatches > should demonstrate parity mode (legacy behavior) vs enhanced mode with chronology bonus 1ms
990
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > findMatches > should preserve legacy behavior when chronology bonus is disabled 1ms
991
- ✓  unit  src/tools/__tests__/compareTransactions/matcher.test.ts > matcher > findMatches > should apply chronology bonus when enabled for duplicate amounts 2ms
992
- ×  unit  src/tools/reconciliation/__tests__/adapter.test.ts > buildReconciliationPayload > returns human narrative and structured payload with MoneyValue fields 12ms
993
-  → Cannot read properties of undefined (reading 'amount')
994
- ×  unit  src/tools/reconciliation/__tests__/adapter.test.ts > buildReconciliationPayload > includes execution data when provided 65ms
995
-  → Cannot read properties of undefined (reading 'amount')
996
- ✓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > handleListPayees > should include cache metadata from delta fetcher results 16ms
997
- ↓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > handleListPayees > should use cache when NODE_ENV is not test - obsolete test, caching now handled by DeltaFetcher
998
- ✓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > handleListPayees > should return formatted payee list on success 5ms
999
- ✓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > handleListPayees > should handle authentication errors 2ms
1000
- ✓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > handleListPayees > should handle forbidden errors 1ms
1001
- ✓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > handleListPayees > should handle not found errors 1ms
1002
- ✓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > handleListPayees > should handle rate limit errors 1ms
1003
- ✓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > handleListPayees > should handle server errors 1ms
1004
- ✓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > handleListPayees > should handle generic errors 2ms
1005
- ↓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > handleGetPayee > should use cache when NODE_ENV is not test - obsolete test, caching now handled by DeltaFetcher
1006
- ✓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > handleGetPayee > should return detailed payee information on success 2ms
1007
- ✓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > handleGetPayee > should return transfer payee information on success 1ms
1008
- ✓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > handleGetPayee > should handle 404 not found errors 1ms
1009
- ✓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > handleGetPayee > should handle authentication errors 1ms
1010
- ✓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > ListPayeesSchema > should validate valid budget_id 3ms
1011
- ✓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > ListPayeesSchema > should reject empty budget_id 4ms
1012
- ✓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > ListPayeesSchema > should reject missing budget_id 2ms
1013
- ✓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > ListPayeesSchema > should reject non-string budget_id 1ms
1014
- ✓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > GetPayeeSchema > should validate valid parameters 1ms
1015
- ✓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > GetPayeeSchema > should reject empty budget_id 1ms
1016
- ✓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > GetPayeeSchema > should reject empty payee_id 2ms
1017
- ✓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > GetPayeeSchema > should reject missing budget_id 1ms
1018
- ✓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > GetPayeeSchema > should reject missing payee_id 1ms
1019
- ✓  unit  src/tools/__tests__/payeeTools.test.ts > Payee Tools > GetPayeeSchema > should reject non-string parameters 1ms
1020
- ✓  unit  src/tools/__tests__/categoryTools.test.ts > Category Tools > handleListCategories > should include cache metadata from delta fetcher results 17ms
1021
- ✓  unit  src/tools/__tests__/categoryTools.test.ts > Category Tools > handleListCategories > should return formatted category list on success 7ms
1022
- ✓  unit  src/tools/__tests__/categoryTools.test.ts > Category Tools > handleListCategories > should handle authentication errors 2ms
1023
- ✓  unit  src/tools/__tests__/categoryTools.test.ts > Category Tools > handleListCategories > should handle not found errors 2ms
1024
- ✓  unit  src/tools/__tests__/categoryTools.test.ts > Category Tools > handleGetCategory > should return detailed category information on success 3ms
1025
- ✓  unit  src/tools/__tests__/categoryTools.test.ts > Category Tools > handleGetCategory > should reflect cached responses when data exists in cache 1ms
1026
- ✓  unit  src/tools/__tests__/categoryTools.test.ts > Category Tools > handleGetCategory > should handle 404 not found errors 1ms
1027
- ✓  unit  src/tools/__tests__/categoryTools.test.ts > Category Tools > handleUpdateCategory > should update category budget for current month on success 8ms
1028
- ✓  unit  src/tools/__tests__/categoryTools.test.ts > Category Tools > handleUpdateCategory > should handle 404 not found errors 1ms
1029
- ✓  unit  src/tools/__tests__/categoryTools.test.ts > Category Tools > handleUpdateCategory > should handle 403 forbidden errors 3ms
1030
- ✓  unit  src/tools/__tests__/categoryTools.test.ts > Category Tools > handleUpdateCategory > should invalidate category caches on successful category update 2ms
1031
- ✓  unit  src/tools/__tests__/categoryTools.test.ts > Category Tools > handleUpdateCategory > should not invalidate cache on dry_run category update 2ms
1032
- ✓  unit  src/tools/__tests__/categoryTools.test.ts > Category Tools > Schema Validation > ListCategoriesSchema > should validate valid budget_id 3ms
1033
- ✓  unit  src/tools/__tests__/categoryTools.test.ts > Category Tools > Schema Validation > ListCategoriesSchema > should reject empty budget_id 2ms
1034
- ✓  unit  src/tools/__tests__/categoryTools.test.ts > Category Tools > Schema Validation > ListCategoriesSchema > should reject missing budget_id 1ms
1035
- ✓  unit  src/tools/__tests__/categoryTools.test.ts > Category Tools > Schema Validation > GetCategorySchema > should validate valid parameters 1ms
1036
- ✓  unit  src/tools/__tests__/categoryTools.test.ts > Category Tools > Schema Validation > GetCategorySchema > should reject empty category_id 1ms
1037
- ✓  unit  src/tools/__tests__/categoryTools.test.ts > Category Tools > Schema Validation > GetCategorySchema > should reject missing category_id 1ms
1038
- ✓  unit  src/tools/__tests__/categoryTools.test.ts > Category Tools > Schema Validation > UpdateCategorySchema > should validate valid parameters 1ms
1039
- ✓  unit  src/tools/__tests__/categoryTools.test.ts > Category Tools > Schema Validation > UpdateCategorySchema > should reject non-integer budgeted amount 1ms
1040
- ✓  unit  src/tools/__tests__/categoryTools.test.ts > Category Tools > Schema Validation > UpdateCategorySchema > should reject missing budgeted amount 1ms
1041
- ✓  unit  src/tools/__tests__/categoryTools.test.ts > Category Tools > Schema Validation > UpdateCategorySchema > should accept negative budgeted amounts 0ms
1042
- ✓  unit  src/tools/__tests__/categoryTools.test.ts > Category Tools > Schema Validation > UpdateCategorySchema > should accept zero budgeted amount 0ms
1043
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > findSuggestedPayee > should find exact payee name match 5ms
1044
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > findSuggestedPayee > should find partial payee name match 1ms
1045
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > findSuggestedPayee > should be case insensitive 4ms
1046
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > findSuggestedPayee > should suggest cleaned description when no payee matches 1ms
1047
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > findSuggestedPayee > should handle empty description 3ms
1048
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > findSuggestedPayee > should remove numbers and consolidate whitespace 1ms
1049
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > findSuggestedPayee > should handle description with only numbers 0ms
1050
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > findSuggestedPayee > should find first matching payee when multiple matches 0ms
1051
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > buildSummary > should build complete summary 2ms
1052
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > buildSummary > should handle empty collections 1ms
1053
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > formatMatches > should format matches correctly 6ms
1054
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > formatMatches > should handle negative amounts 0ms
1055
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > formatMatches > should handle null payee names 0ms
1056
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > formatMatches > should handle large amounts 0ms
1057
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > formatMatches > should handle zero amounts 0ms
1058
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > formatMatches > should handle empty matches array 0ms
1059
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > formatUnmatchedBank > should format unmatched bank transactions with payee suggestions 1ms
1060
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > formatUnmatchedBank > should handle negative amounts 0ms
1061
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > formatUnmatchedBank > should handle empty transactions array 0ms
1062
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > formatUnmatchedYNAB > should format unmatched YNAB transactions 1ms
1063
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > formatUnmatchedYNAB > should handle negative amounts 0ms
1064
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > formatUnmatchedYNAB > should handle empty transactions array 0ms
1065
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > buildComparisonResult > should build complete comparison result 3ms
1066
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > buildComparisonResult > should handle empty results 1ms
1067
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > buildComparisonResult > should call responseFormatter.format with correct structure 8ms
1068
- ✓  unit  src/tools/__tests__/compareTransactions/formatter.test.ts > formatter > buildComparisonResult > should return CallToolResult with correct format 1ms
1069
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > parseDate > should parse MM/DD/YYYY format 9ms
1070
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > parseDate > should parse YYYY-MM-DD format 1ms
1071
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > parseDate > should parse MMM dd, yyyy format 4ms
1072
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > parseDate > should handle single digit dates 1ms
1073
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > parseDate > should throw error for invalid date 4ms
1074
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > parseDate > should fallback to native Date parsing for unrecognized formats 1ms
1075
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > parseDate > should handle whitespace in dates 1ms
1076
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > amountToMilliunits > should convert positive amounts 1ms
1077
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > amountToMilliunits > should convert negative amounts 1ms
1078
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > amountToMilliunits > should handle parentheses for negative amounts 0ms
1079
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > amountToMilliunits > should handle currency symbols 0ms
1080
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > amountToMilliunits > should handle commas in amounts 0ms
1081
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > amountToMilliunits > should handle positive sign 0ms
1082
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > amountToMilliunits > should handle zero amounts 0ms
1083
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > amountToMilliunits > should handle amounts with spaces 0ms
1084
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > amountToMilliunits > should handle very large amounts 0ms
1085
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > detectDateFormat > should detect MM/DD/YYYY format 0ms
1086
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > detectDateFormat > should detect YYYY-MM-DD format 0ms
1087
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > detectDateFormat > should detect MM-DD-YYYY format 0ms
1088
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > detectDateFormat > should detect MMM dd, yyyy format 0ms
1089
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > detectDateFormat > should default to MM/DD/YYYY for undefined input 1ms
1090
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > detectDateFormat > should default to MM/DD/YYYY for unrecognized format 0ms
1091
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > autoDetectCSVFormat > should detect header format with standard columns 12ms
1092
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > autoDetectCSVFormat > should detect no-header format 3ms
1093
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > autoDetectCSVFormat > should detect debit/credit columns 6ms
1094
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > autoDetectCSVFormat > should throw error for empty CSV 0ms
1095
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > autoDetectCSVFormat > should throw error for CSV with empty first line 0ms
1096
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > autoDetectCSVFormat > should detect date format from data rows 2ms
1097
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > autoDetectCSVFormat > should derive column names from non-standard headers - Transaction Date 4ms
1098
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > autoDetectCSVFormat > should derive column names from non-standard headers - Post Date and Desc 2ms
1099
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > autoDetectCSVFormat > should derive column names from non-standard headers - Payee column 1ms
1100
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > autoDetectCSVFormat > should detect debit/credit columns with non-standard headers 2ms
1101
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > autoDetectCSVFormat > should fallback to original headers when patterns do not match 2ms
1102
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > autoDetectCSVFormat > should handle case-insensitive header matching 1ms
1103
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > autoDetectCSVFormat > should detect semicolon delimiter 1ms
1104
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > autoDetectCSVFormat > should detect tab delimiter 2ms
1105
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > autoDetectCSVFormat > should detect pipe delimiter 2ms
1106
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > autoDetectCSVFormat > should detect semicolon delimiter without headers 2ms
1107
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > autoDetectCSVFormat > should detect tab delimiter without headers 1ms
1108
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > autoDetectCSVFormat > should detect semicolon delimiter with debit/credit columns 3ms
1109
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > autoDetectCSVFormat > should detect semicolon delimiter when quoted fields contain delimiter 4ms
1110
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > autoDetectCSVFormat > should detect comma delimiter when quoted fields contain commas 2ms
1111
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > autoDetectCSVFormat > should handle complex quoted fields with multiple delimiter types 2ms
1112
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > autoDetectCSVFormat > should detect tab delimiter with debit/credit columns 2ms
1113
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > parseBankCSV > should parse CSV with headers 27ms
1114
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > parseBankCSV > should parse CSV without headers 2ms
1115
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > parseBankCSV > should handle debit/credit columns with headers 1ms
1116
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > parseBankCSV > should handle debit/credit columns without headers 2ms
1117
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > parseBankCSV > should skip rows with missing data 1ms
1118
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > parseBankCSV > should handle quoted dates with commas (MMM dd, yyyy format) 1ms
1119
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > parseBankCSV > should parse quoted fields with commas in descriptions 2ms
1120
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > parseBankCSV > should throw error when no amount column configuration 1ms
1121
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > parseBankCSV > should handle invalid column indices gracefully 1ms
1122
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > parseBankCSV > should parse semicolon-delimited CSV with headers 1ms
1123
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > parseBankCSV > should parse tab-delimited CSV with headers 1ms
1124
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > parseBankCSV > should parse semicolon-delimited CSV without headers 1ms
1125
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > parseBankCSV > should parse tab-delimited CSV without headers 2ms
1126
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > parseBankCSV > should handle semicolon-delimited debit/credit columns with headers 1ms
1127
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > parseBankCSV > should handle tab-delimited debit/credit columns with headers 2ms
1128
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > parseBankCSV > should parse semicolon-delimited CSV with quoted fields containing delimiter 1ms
1129
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > extractDateRangeFromCSV > should extract min and max dates from CSV transactions 1ms
1130
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > extractDateRangeFromCSV > should handle single transaction 1ms
1131
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > readCSVFile > should read file successfully 2ms
1132
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > readCSVFile > should throw error when file reading fails 0ms
1133
- ✓  unit  src/tools/__tests__/compareTransactions/parser.test.ts > parser > readCSVFile > should handle unknown errors 0ms
1134
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > balanced direction (|amount| < 0.01) > should accept direction "balanced" when amount is 0 31ms
1135
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > balanced direction (|amount| < 0.01) > should accept direction "balanced" when amount is 0.001 2ms
1136
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > balanced direction (|amount| < 0.01) > should accept direction "balanced" when amount is -0.009 1ms
1137
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > balanced direction (|amount| < 0.01) > should reject direction "ynab_higher" when amount is 0 5ms
1138
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > balanced direction (|amount| < 0.01) > should reject direction "bank_higher" when amount is 0.005 1ms
1139
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > ynab_higher direction (amount >= 0.01) > should accept direction "ynab_higher" when amount is 25.50 1ms
1140
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > ynab_higher direction (amount >= 0.01) > should accept direction "ynab_higher" when amount is 0.02 (just above threshold) 1ms
1141
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > ynab_higher direction (amount >= 0.01) > should reject direction "balanced" when amount is 100 5ms
1142
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > ynab_higher direction (amount >= 0.01) > should reject direction "bank_higher" when amount is 50 3ms
1143
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > bank_higher direction (amount <= -0.01) > should accept direction "bank_higher" when amount is -25.50 1ms
1144
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > bank_higher direction (amount <= -0.01) > should accept direction "bank_higher" when amount is -0.02 (just below threshold) 1ms
1145
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > bank_higher direction (amount <= -0.01) > should reject direction "balanced" when amount is -100 1ms
1146
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > bank_higher direction (amount <= -0.01) > should reject direction "ynab_higher" when amount is -50 1ms
1147
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > edge cases > should accept exactly 0.01 as requiring "ynab_higher" 2ms
1148
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > edge cases > should accept exactly -0.01 as requiring "bank_higher" 1ms
1149
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > edge cases > should reject "balanced" for exactly 0.01 0ms
1150
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > edge cases > should reject "balanced" for exactly -0.01 0ms
1151
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > human-only output (no validation) > should accept human-only output without structured data 1ms
1152
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > MoneyValueSchema - non-finite value validation > should reject NaN amount 1ms
1153
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > MoneyValueSchema - non-finite value validation > should reject positive Infinity amount 1ms
1154
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > MoneyValueSchema - non-finite value validation > should reject negative Infinity amount 1ms
1155
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > MoneyValueSchema - non-finite value validation > should accept finite positive amounts 1ms
1156
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > MoneyValueSchema - non-finite value validation > should accept finite negative amounts 0ms
1157
- ✓  unit  src/tools/schemas/outputs/__tests__/discrepancyDirection.test.ts > ReconcileAccountOutputSchema - discrepancy_direction validation > MoneyValueSchema - non-finite value validation > should accept zero 0ms
1158
- ✓  unit  src/server/__tests__/resources.test.ts > resources module > ResourceManager > constructor > should initialize with dependencies 6ms
1159
- ✓  unit  src/server/__tests__/resources.test.ts > resources module > ResourceManager > listResources > should return list of available resources 4ms
1160
- ✓  unit  src/server/__tests__/resources.test.ts > resources module > ResourceManager > listResources > should return consistent resource list 1ms
1161
- ✓  unit  src/server/__tests__/resources.test.ts > resources module > ResourceManager > readResource > ynab://budgets > should fetch and format budgets data 7ms
1162
- ✓  unit  src/server/__tests__/resources.test.ts > resources module > ResourceManager > readResource > ynab://budgets > should handle YNAB API errors 4ms
1163
- ✓  unit  src/server/__tests__/resources.test.ts > resources module > ResourceManager > readResource > ynab://user > should fetch and format user data 2ms
1164
- ✓  unit  src/server/__tests__/resources.test.ts > resources module > ResourceManager > readResource > ynab://user > should handle YNAB API errors 2ms
1165
- ✓  unit  src/server/__tests__/resources.test.ts > resources module > ResourceManager > readResource > unknown resources > should throw error for unknown resource URIs 1ms
1166
- ✓  unit  src/server/__tests__/resources.test.ts > resources module > ResourceManager > readResource > unknown resources > should throw error for invalid URIs 1ms
1167
- ✓  unit  src/server/__tests__/resources.test.ts > resources module > ResourceManager > readResource > unknown resources > should throw error for empty URI 1ms
1168
- ✓  unit  src/server/__tests__/resources.test.ts > resources module > ResourceManager > dependency injection > should use injected YNAB API 2ms
1169
- ✓  unit  src/server/__tests__/resources.test.ts > resources module > ResourceManager > dependency injection > should use injected response formatter 1ms
1170
- ✓  unit  src/server/__tests__/resources.test.ts > resources module > ResourceManager > edge cases > should handle empty budgets list 1ms
1171
- ✓  unit  src/server/__tests__/resources.test.ts > resources module > ResourceManager > edge cases > should handle user without extended properties 8ms
1172
- ✓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > handleGetMonth > should bypass cache in test environment 8ms
1173
- ↓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > handleGetMonth > should use cache when NODE_ENV is not test - obsolete test, caching now handled by DeltaFetcher
1174
- ✓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > handleGetMonth > should return formatted month data on success 5ms
1175
- ✓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > handleGetMonth > should handle 401 authentication errors 3ms
1176
- ✓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > handleGetMonth > should handle 403 forbidden errors 1ms
1177
- ✓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > handleGetMonth > should handle 404 not found errors 1ms
1178
- ✓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > handleGetMonth > should handle 429 rate limit errors 1ms
1179
- ✓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > handleGetMonth > should handle 500 server errors 2ms
1180
- ✓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > handleGetMonth > should handle generic errors 2ms
1181
- ✓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > handleListMonths > should include cache metadata from delta fetcher results 3ms
1182
- ↓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > handleListMonths > should use cache when NODE_ENV is not test - obsolete test, caching now handled by DeltaFetcher
1183
- ✓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > handleListMonths > should return formatted months list on success 3ms
1184
- ✓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > handleListMonths > should handle authentication errors 1ms
1185
- ✓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > handleListMonths > should handle not found errors 1ms
1186
- ✓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > handleListMonths > should handle generic errors 3ms
1187
- ✓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > GetMonthSchema > should validate valid parameters 3ms
1188
- ✓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > GetMonthSchema > should reject empty budget_id 2ms
1189
- ✓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > GetMonthSchema > should reject missing budget_id 1ms
1190
- ✓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > GetMonthSchema > should reject invalid month format 1ms
1191
- ✓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > GetMonthSchema > should reject missing month 1ms
1192
- ✓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > GetMonthSchema > should reject non-ISO date format 1ms
1193
- ✓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > ListMonthsSchema > should validate valid budget_id 1ms
1194
- ✓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > ListMonthsSchema > should reject empty budget_id 1ms
1195
- ✓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > ListMonthsSchema > should reject missing budget_id 1ms
1196
- ✓  unit  src/tools/__tests__/monthTools.test.ts > Month Tools > ListMonthsSchema > should reject non-string budget_id 1ms
1197
- ✓  unit  src/tools/__tests__/compareTransactions.test.ts > compareTransactions > CompareTransactionsSchema > should validate valid parameters 8ms
1198
- ✓  unit  src/tools/__tests__/compareTransactions.test.ts > compareTransactions > CompareTransactionsSchema > should require budget_id and account_id 3ms
1199
- ✓  unit  src/tools/__tests__/compareTransactions.test.ts > compareTransactions > CompareTransactionsSchema > should require either csv_file_path or csv_data 1ms
1200
- ✓  unit  src/tools/__tests__/compareTransactions.test.ts > compareTransactions > CompareTransactionsSchema > should apply default values 1ms
1201
- ✓  unit  src/tools/__tests__/compareTransactions.test.ts > compareTransactions > handleCompareTransactions > should compare CSV data with YNAB transactions 18ms
1202
- ✓  unit  src/tools/__tests__/compareTransactions.test.ts > compareTransactions > handleCompareTransactions > should handle CSV file path 5ms
1203
- ✓  unit  src/tools/__tests__/compareTransactions.test.ts > compareTransactions > handleCompareTransactions > should handle custom CSV format 5ms
1204
- ✓  unit  src/tools/__tests__/compareTransactions.test.ts > compareTransactions > handleCompareTransactions > should handle CSV without headers using column indices 4ms
1205
- ✓  unit  src/tools/__tests__/compareTransactions.test.ts > compareTransactions > handleCompareTransactions > should handle MMM dd, yyyy date format (bank statement format) 5ms
1206
- ✓  unit  src/tools/__tests__/compareTransactions.test.ts > compareTransactions > handleCompareTransactions > should maintain backward compatibility with modular structure 4ms
1207
- ✓  unit  src/tools/__tests__/compareTransactions.test.ts > compareTransactions > handleCompareTransactions > should handle auto-detection correctly through modular structure 9ms
1208
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeFlatEntities > should merge new entities into snapshot 4ms
1209
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeFlatEntities > should update existing entities with latest data 1ms
1210
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeFlatEntities > should delete entities when delta marks them deleted 0ms
1211
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeFlatEntities > should preserve deleted entities when preserveDeleted enabled 0ms
1212
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeFlatEntities > should handle empty snapshot gracefully 0ms
1213
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeFlatEntities > should handle empty delta by returning snapshot 0ms
1214
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeFlatEntities > should handle both arrays empty 0ms
1215
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeFlatEntities > should process multiple operations in single delta batch 0ms
1216
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeFlatEntities > should maintain insertion order for unchanged entities 1ms
1217
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeFlatEntities > should keep additional fields intact 1ms
1218
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeCategories > should merge new category groups into snapshot 1ms
1219
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeCategories > should update existing group metadata 1ms
1220
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeCategories > should delete groups flagged as deleted 0ms
1221
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeCategories > should preserve deleted groups when preserveDeleted is true 0ms
1222
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeCategories > should merge new categories within existing group 1ms
1223
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeCategories > should update existing categories during merge 0ms
1224
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeCategories > should delete categories marked as deleted 1ms
1225
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeCategories > should preserve deleted categories when preserveDeleted is true 0ms
1226
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeCategories > should handle groups with empty category lists 0ms
1227
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeCategories > should handle metadata-only updates (no categories provided) 0ms
1228
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeCategories > should apply nested updates to metadata and categories simultaneously 1ms
1229
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeCategories > should maintain category order after merges 1ms
1230
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeCategories > should handle multiple groups with multiple category updates 1ms
1231
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeCategories > should keep nested structures immutable 0ms
1232
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeTransactions > should merge new transactions into snapshot 1ms
1233
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeTransactions > should update existing transactions 0ms
1234
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeTransactions > should delete transactions marked as deleted 0ms
1235
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeTransactions > should preserve deleted transactions when preserveDeleted is true 0ms
1236
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeTransactions > should merge new subtransactions into existing transaction 1ms
1237
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeTransactions > should update existing subtransactions 0ms
1238
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeTransactions > should delete subtransactions when flagged deleted 0ms
1239
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeTransactions > should preserve deleted subtransactions when preserveDeleted is true 0ms
1240
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeTransactions > should handle transactions without subtransactions arrays 0ms
1241
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeTransactions > should handle delta updates without subtransactions list 0ms
1242
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeTransactions > should apply nested operations to transaction and subtransactions 0ms
1243
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeTransactions > should maintain subtransaction order 0ms
1244
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeTransactions > should handle multiple transactions with distinct updates 1ms
1245
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > mergeTransactions > should avoid mutating input arrays 0ms
1246
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > Merge Edge Cases > should handle duplicate IDs in delta with last write winning 0ms
1247
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > Merge Edge Cases > should handle null and undefined optional fields 0ms
1248
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > Merge Edge Cases > should efficiently handle large snapshots 1ms
1249
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > Merge Edge Cases > should efficiently handle large delta payloads 1ms
1250
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > Merge Edge Cases > should handle deeply nested category structures 0ms
1251
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > Merge Edge Cases > should handle transactions with many subtransactions 0ms
1252
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > Merge Edge Cases > should not mutate snapshot or delta arrays 0ms
1253
- ✓  unit  src/server/__tests__/deltaCache.merge.test.ts > Merge Edge Cases > should handle special characters in IDs and names 0ms
1254
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > ISODateStringSchema > should validate correct ISO date format 7ms
1255
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > ISODateStringSchema > should reject invalid date formats 5ms
1256
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > ISODateStringSchema > should reject invalid calendar dates 5ms
1257
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > ISODateStringSchema > should validate leap year dates correctly 1ms
1258
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > DateRangeSchema > should validate valid date range 2ms
1259
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > DateRangeSchema > should validate date range where start equals end 2ms
1260
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > DateRangeSchema > should reject date range where start is after end 1ms
1261
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > DateRangeSchema > should reject invalid date formats in range 3ms
1262
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > MatchItemSchema > should validate complete match item 6ms
1263
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > MatchItemSchema > should validate match with negative amounts 2ms
1264
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > MatchItemSchema > should fail validation when amount format is incorrect 0ms
1265
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > MissingInYNABItemSchema > should validate complete missing in YNAB item with suggestions 1ms
1266
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > MissingInYNABItemSchema > should validate minimal missing in YNAB item without suggestions 0ms
1267
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > MissingInYNABItemSchema > should fail validation when amount format is incorrect 4ms
1268
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > MissingInBankItemSchema > should validate complete missing in bank item 1ms
1269
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > MissingInBankItemSchema > should validate missing in bank item with null fields 4ms
1270
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > MissingInBankItemSchema > should fail validation when missing required fields 1ms
1271
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > CompareTransactionsOutputSchema > should validate complete comparison result with all sections 6ms
1272
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > CompareTransactionsOutputSchema > should validate comparison result with empty match arrays 1ms
1273
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > CompareTransactionsOutputSchema > should fail validation when missing required summary fields 1ms
1274
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > CompareTransactionsOutputSchema > should fail validation when date range is invalid 0ms
1275
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > ExportTransactionsOutputSchema > should validate minimal export mode output 2ms
1276
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > ExportTransactionsOutputSchema > should validate full export mode output 0ms
1277
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > ExportTransactionsOutputSchema > should validate export output with empty preview 0ms
1278
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > ExportTransactionsOutputSchema > should fail validation when export_mode is invalid 1ms
1279
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > ExportTransactionsOutputSchema > should fail validation when missing required fields 1ms
1280
- ✓  unit  src/tools/schemas/outputs/__tests__/comparisonOutputs.test.ts > ExportTransactionsOutputSchema > should fail validation when preview_count is not a number 0ms
1281
- ✓  unit  src/tools/schemas/outputs/__tests__/accountOutputs.test.ts > AccountSchema > should validate complete account with all fields 8ms
1282
- ✓  unit  src/tools/schemas/outputs/__tests__/accountOutputs.test.ts > AccountSchema > should validate minimal account with only required fields 1ms
1283
- ✓  unit  src/tools/schemas/outputs/__tests__/accountOutputs.test.ts > AccountSchema > should validate closed account 1ms
1284
- ✓  unit  src/tools/schemas/outputs/__tests__/accountOutputs.test.ts > AccountSchema > should validate off-budget tracking account 1ms
1285
- ✓  unit  src/tools/schemas/outputs/__tests__/accountOutputs.test.ts > AccountSchema > should validate account with various account types 1ms
1286
- ✓  unit  src/tools/schemas/outputs/__tests__/accountOutputs.test.ts > AccountSchema > should fail validation when missing required id field 2ms
1287
- ✓  unit  src/tools/schemas/outputs/__tests__/accountOutputs.test.ts > AccountSchema > should fail validation when missing required name field 1ms
1288
- ✓  unit  src/tools/schemas/outputs/__tests__/accountOutputs.test.ts > AccountSchema > should fail validation when balance is not a number 0ms
1289
- ✓  unit  src/tools/schemas/outputs/__tests__/accountOutputs.test.ts > AccountSchema > should fail validation when on_budget is not a boolean 3ms
1290
- ✓  unit  src/tools/schemas/outputs/__tests__/accountOutputs.test.ts > ListAccountsOutputSchema > should validate output with multiple accounts and cache metadata 6ms
1291
- ✓  unit  src/tools/schemas/outputs/__tests__/accountOutputs.test.ts > ListAccountsOutputSchema > should validate output with single account 1ms
1292
- ✓  unit  src/tools/schemas/outputs/__tests__/accountOutputs.test.ts > ListAccountsOutputSchema > should validate output with empty accounts array 1ms
1293
- ✓  unit  src/tools/schemas/outputs/__tests__/accountOutputs.test.ts > ListAccountsOutputSchema > should fail validation when accounts is not an array 0ms
1294
- ✓  unit  src/tools/schemas/outputs/__tests__/accountOutputs.test.ts > ListAccountsOutputSchema > should fail validation when missing required total_count field 1ms
1295
- ✓  unit  src/tools/schemas/outputs/__tests__/accountOutputs.test.ts > ListAccountsOutputSchema > should fail validation when total_count is not an integer 0ms
1296
- ✓  unit  src/tools/schemas/outputs/__tests__/accountOutputs.test.ts > GetAccountOutputSchema > should validate output with complete account and cache metadata 2ms
1297
- ✓  unit  src/tools/schemas/outputs/__tests__/accountOutputs.test.ts > GetAccountOutputSchema > should validate output with minimal account 0ms
1298
- ✓  unit  src/tools/schemas/outputs/__tests__/accountOutputs.test.ts > GetAccountOutputSchema > should fail validation when account is not an object 0ms
1299
- ✓  unit  src/tools/schemas/outputs/__tests__/accountOutputs.test.ts > GetAccountOutputSchema > should fail validation when account is missing required fields 2ms
1300
- ✓  unit  src/tools/schemas/outputs/__tests__/accountOutputs.test.ts > GetAccountOutputSchema > should fail validation when missing required account field 0ms
1301
- ✓  unit  src/server/__tests__/prompts.test.ts > prompts module > PromptManager > constructor > should initialize without dependencies 4ms
1302
- ✓  unit  src/server/__tests__/prompts.test.ts > prompts module > PromptManager > listPrompts > should return list of available prompts 2ms
1303
- ✓  unit  src/server/__tests__/prompts.test.ts > prompts module > PromptManager > listPrompts > should return consistent prompt list 0ms
1304
- ✓  unit  src/server/__tests__/prompts.test.ts > prompts module > PromptManager > getPrompt > create-transaction > should generate transaction creation prompt with default values 4ms
1305
- ✓  unit  src/server/__tests__/prompts.test.ts > prompts module > PromptManager > getPrompt > create-transaction > should generate transaction creation prompt with provided arguments 1ms
1306
- ✓  unit  src/server/__tests__/prompts.test.ts > prompts module > PromptManager > getPrompt > create-transaction > should handle partial arguments 1ms
1307
- ✓  unit  src/server/__tests__/prompts.test.ts > prompts module > PromptManager > getPrompt > create-transaction > should include proper workflow instructions 1ms
1308
- ✓  unit  src/server/__tests__/prompts.test.ts > prompts module > PromptManager > getPrompt > budget-summary > should generate budget summary prompt with default values 1ms
1309
- ✓  unit  src/server/__tests__/prompts.test.ts > prompts module > PromptManager > getPrompt > budget-summary > should generate budget summary prompt with provided arguments 1ms
1310
- ✓  unit  src/server/__tests__/prompts.test.ts > prompts module > PromptManager > getPrompt > budget-summary > should include YNAB-specific guidance 1ms
1311
- ✓  unit  src/server/__tests__/prompts.test.ts > prompts module > PromptManager > getPrompt > account-balances > should generate account balances prompt with default values 1ms
1312
- ✓  unit  src/server/__tests__/prompts.test.ts > prompts module > PromptManager > getPrompt > account-balances > should generate account balances prompt with provided arguments 0ms
1313
- ✓  unit  src/server/__tests__/prompts.test.ts > prompts module > PromptManager > getPrompt > account-balances > should include proper balance display instructions 0ms
1314
- ✓  unit  src/server/__tests__/prompts.test.ts > prompts module > PromptManager > getPrompt > unknown prompts > should throw error for unknown prompt names 2ms
1315
- ✓  unit  src/server/__tests__/prompts.test.ts > prompts module > PromptManager > getPrompt > unknown prompts > should throw error for empty prompt name 0ms
1316
- ✓  unit  src/server/__tests__/prompts.test.ts > prompts module > PromptManager > getPrompt > argument handling > should handle undefined arguments 0ms
1317
- ✓  unit  src/server/__tests__/prompts.test.ts > prompts module > PromptManager > getPrompt > argument handling > should handle null arguments 3ms
1318
- ✓  unit  src/server/__tests__/prompts.test.ts > prompts module > PromptManager > getPrompt > argument handling > should handle empty arguments object 0ms
1319
- ✓  unit  src/server/__tests__/prompts.test.ts > prompts module > PromptManager > getPrompt > argument handling > should handle arguments with null/undefined values 0ms
1320
- ✓  unit  src/server/__tests__/prompts.test.ts > prompts module > PromptManager > getPrompt > edge cases > should handle very long argument values 0ms
1321
- ✓  unit  src/server/__tests__/prompts.test.ts > prompts module > PromptManager > getPrompt > edge cases > should handle special characters in arguments 0ms
1322
- ✓  unit  src/server/__tests__/prompts.test.ts > prompts module > PromptManager > getPrompt > edge cases > should maintain consistent message structure across all prompts 4ms
1323
- ✓  unit  src/tools/__tests__/deltaFetcher.test.ts > DeltaFetcher > fetchAccounts wires delta cache with proper key and merge strategy 11ms
1324
- ✓  unit  src/tools/__tests__/deltaFetcher.test.ts > DeltaFetcher > fetchCategories uses mergeCategories and TTL 2ms
1325
- ✓  unit  src/tools/__tests__/deltaFetcher.test.ts > DeltaFetcher > fetchTransactions includes filters in key and uses mergeTransactions 2ms
1326
- ✓  unit  src/tools/__tests__/deltaFetcher.test.ts > DeltaFetcher > fetchTransactionsByAccount encodes account in key 7ms
1327
- ✓  unit  src/tools/__tests__/deltaFetcher.test.ts > DeltaFetcher > fetchScheduledTransactions wires cache key and merge strategy 2ms
1328
- ✓  unit  src/tools/__tests__/deltaFetcher.test.ts > DeltaFetcher > fetchPayees delegates to mergeFlatEntities 1ms
1329
- ✓  unit  src/tools/__tests__/deltaFetcher.test.ts > DeltaFetcher > fetchMonths uses mergeMonths and month TTL 1ms
1330
- ✓  unit  src/tools/__tests__/deltaFetcher.test.ts > DeltaFetcher > fetchBudgets always forces full refresh 3ms
1331
- ✓  unit  src/tools/__tests__/deltaFetcher.test.ts > DeltaFetcher > fetchAccountsFull bypasses cache and filters deleted accounts 2ms
1332
- ✓  unit  src/tools/__tests__/deltaFetcher.test.ts > DeltaFetcher > fetchTransactionsByAccountFull bypasses delta cache 1ms
1333
- ✓  unit  src/server/__tests__/deltaCache.swr.test.ts > DeltaCache stale-while-revalidate > should pass staleWhileRevalidate to cache entry when set 22ms
1334
- ✓  unit  src/server/__tests__/deltaCache.swr.test.ts > DeltaCache stale-while-revalidate > should not set staleWhileRevalidate when omitted 8ms
1335
- ✓  unit  src/server/__tests__/deltaCache.swr.test.ts > DeltaCache stale-while-revalidate > should pass staleWhileRevalidate when delta is disabled 3ms
1336
- ✓  unit  src/server/__tests__/deltaCache.swr.test.ts > DeltaCache stale-while-revalidate > should include staleWhileRevalidate in entry after delta merge 2ms
1337
- ✓  unit  src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts > CategorySchema > should validate complete category with all fields including goals 7ms
1338
- ✓  unit  src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts > CategorySchema > should validate minimal category with only required fields 1ms
1339
- ✓  unit  src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts > CategorySchema > should validate hidden category 1ms
1340
- ✓  unit  src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts > CategorySchema > should validate deleted category 0ms
1341
- ✓  unit  src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts > CategorySchema > should validate category with various goal types 1ms
1342
- ✓  unit  src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts > CategorySchema > should fail validation when missing required id field 3ms
1343
- ✓  unit  src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts > CategorySchema > should fail validation when missing required name field 1ms
1344
- ✓  unit  src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts > CategorySchema > should fail validation when budgeted is not a number 1ms
1345
- ✓  unit  src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts > CategorySchema > should fail validation when hidden is not a boolean 1ms
1346
- ✓  unit  src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts > CategoryGroupSchema > should validate complete category group with all fields 1ms
1347
- ✓  unit  src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts > CategoryGroupSchema > should validate hidden category group 0ms
1348
- ✓  unit  src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts > CategoryGroupSchema > should fail validation when missing required id field 0ms
1349
- ✓  unit  src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts > CategoryGroupSchema > should fail validation when missing required name field 0ms
1350
- ✓  unit  src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts > ListCategoriesOutputSchema > should validate output with categories and category groups 3ms
1351
- ✓  unit  src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts > ListCategoriesOutputSchema > should validate output with empty arrays 1ms
1352
- ✓  unit  src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts > ListCategoriesOutputSchema > should fail validation when categories is not an array 1ms
1353
- ✓  unit  src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts > ListCategoriesOutputSchema > should fail validation when missing required categories field 0ms
1354
- ✓  unit  src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts > ListCategoriesOutputSchema > should fail validation when missing required category_groups field 1ms
1355
- ✓  unit  src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts > GetCategoryOutputSchema > should validate output with complete category and cache metadata 2ms
1356
- ✓  unit  src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts > GetCategoryOutputSchema > should validate output with minimal category 1ms
1357
- ✓  unit  src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts > GetCategoryOutputSchema > should fail validation when category is not an object 1ms
1358
- ✓  unit  src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts > GetCategoryOutputSchema > should fail validation when category missing required fields 1ms
1359
- ✓  unit  src/tools/schemas/outputs/__tests__/categoryOutputs.test.ts > GetCategoryOutputSchema > should fail validation when missing required category field 0ms
1360
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should format a basic report with header and sections 5ms
1361
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show statement date range 1ms
1362
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show balanced status when no discrepancy 1ms
1363
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show discrepancy with correct direction when YNAB higher 1ms
1364
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show discrepancy with correct direction when bank higher 1ms
1365
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show transaction analysis counts 1ms
1366
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should list unmatched bank transactions 1ms
1367
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should truncate long unmatched lists 1ms
1368
- ×  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show suggested matches 4ms
1369
-  → Cannot read properties of undefined (reading 'amount')
1370
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should include insights section when insights present 1ms
1371
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should use correct severity icons 1ms
1372
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should truncate insights list 0ms
1373
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should include execution section when execution provided 1ms
1374
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show dry run notice when dry run enabled 0ms
1375
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show execution recommendations 0ms
1376
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show next steps when no execution 0ms
1377
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should handle empty next steps gracefully 0ms
1378
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should use default account name when not provided 0ms
1379
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatBalanceInfo > should format balance info correctly 0ms
1380
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatTransactionList > should format bank transactions 0ms
1381
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatTransactionList > should format YNAB transactions 0ms
1382
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatTransactionList > should truncate long lists 0ms
1383
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatTransactionList > should handle empty list 0ms
1384
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > edge cases > should handle negative amounts correctly 0ms
1385
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > edge cases > should handle positive amounts correctly 0ms
1386
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > edge cases > should handle long payee names gracefully 0ms
1387
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > edge cases > should handle zero discrepancy 0ms
1388
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > edge cases > should format insight evidence when available 0ms
1389
- ✓  unit  src/tools/schemas/outputs/__tests__/budgetOutputs.test.ts > BudgetSummarySchema > should validate complete budget with all fields 10ms
1390
- ✓  unit  src/tools/schemas/outputs/__tests__/budgetOutputs.test.ts > BudgetSummarySchema > should validate minimal budget with only required fields 1ms
1391
- ✓  unit  src/tools/schemas/outputs/__tests__/budgetOutputs.test.ts > BudgetSummarySchema > should validate budget with date_format but no currency_format 1ms
1392
- ✓  unit  src/tools/schemas/outputs/__tests__/budgetOutputs.test.ts > BudgetSummarySchema > should fail validation when missing required id field 1ms
1393
- ✓  unit  src/tools/schemas/outputs/__tests__/budgetOutputs.test.ts > BudgetSummarySchema > should fail validation when missing required name field 0ms
1394
- ✓  unit  src/tools/schemas/outputs/__tests__/budgetOutputs.test.ts > BudgetSummarySchema > should fail validation when id is not a string 1ms
1395
- ✓  unit  src/tools/schemas/outputs/__tests__/budgetOutputs.test.ts > BudgetSummarySchema > should fail validation when name is not a string 0ms
1396
- ✓  unit  src/tools/schemas/outputs/__tests__/budgetOutputs.test.ts > BudgetSummarySchema > should fail validation when date_format is missing required format field 0ms
1397
- ✓  unit  src/tools/schemas/outputs/__tests__/budgetOutputs.test.ts > BudgetSummarySchema > should fail validation when currency_format has invalid types 1ms
1398
- ✓  unit  src/tools/schemas/outputs/__tests__/budgetOutputs.test.ts > ListBudgetsOutputSchema > should validate output with multiple budgets and cache metadata 3ms
1399
- ✓  unit  src/tools/schemas/outputs/__tests__/budgetOutputs.test.ts > ListBudgetsOutputSchema > should validate output with single budget 1ms
1400
- ✓  unit  src/tools/schemas/outputs/__tests__/budgetOutputs.test.ts > ListBudgetsOutputSchema > should validate output with empty budgets array 1ms
1401
- ✓  unit  src/tools/schemas/outputs/__tests__/budgetOutputs.test.ts > ListBudgetsOutputSchema > should validate output with complete budget including formats 0ms
1402
- ✓  unit  src/tools/schemas/outputs/__tests__/budgetOutputs.test.ts > ListBudgetsOutputSchema > should fail validation when budgets is not an array 1ms
1403
- ✓  unit  src/tools/schemas/outputs/__tests__/budgetOutputs.test.ts > ListBudgetsOutputSchema > should fail validation when budgets array contains invalid budget 1ms
1404
- ✓  unit  src/tools/schemas/outputs/__tests__/budgetOutputs.test.ts > ListBudgetsOutputSchema > should fail validation when missing required budgets field 1ms
1405
- ✓  unit  src/tools/schemas/outputs/__tests__/budgetOutputs.test.ts > ListBudgetsOutputSchema > should fail validation when cached is not a boolean 0ms
1406
- ✓  unit  src/tools/__tests__/budgetTools.test.ts > Budget Tools > handleListBudgets > should include cache metadata from delta fetcher results 7ms
1407
- ✓  unit  src/tools/__tests__/budgetTools.test.ts > Budget Tools > handleListBudgets > should return formatted budget list on success 3ms
1408
- ✓  unit  src/tools/__tests__/budgetTools.test.ts > Budget Tools > handleListBudgets > should handle errors reported by the delta fetcher 2ms
1409
- ✓  unit  src/tools/__tests__/budgetTools.test.ts > Budget Tools > handleGetBudget > should not use cache (as per design - individual budgets change less frequently) 2ms
1410
- ✓  unit  src/tools/__tests__/budgetTools.test.ts > Budget Tools > handleGetBudget > should return detailed budget information on success 4ms
1411
- ✓  unit  src/tools/__tests__/budgetTools.test.ts > Budget Tools > handleGetBudget > should return zero counts for empty collections and exclude arrays 1ms
1412
- ✓  unit  src/tools/__tests__/budgetTools.test.ts > Budget Tools > handleGetBudget > should return correct counts for multiple items and exclude arrays 2ms
1413
- ✓  unit  src/tools/__tests__/budgetTools.test.ts > Budget Tools > handleGetBudget > should handle 404 not found errors 1ms
1414
- ✓  unit  src/tools/__tests__/budgetTools.test.ts > Budget Tools > handleGetBudget > should handle authentication errors 1ms
1415
- ✓  unit  src/tools/__tests__/budgetTools.test.ts > Budget Tools > GetBudgetSchema > should validate valid budget_id 2ms
1416
- ✓  unit  src/tools/__tests__/budgetTools.test.ts > Budget Tools > GetBudgetSchema > should reject empty budget_id 2ms
1417
- ✓  unit  src/tools/__tests__/budgetTools.test.ts > Budget Tools > GetBudgetSchema > should reject missing budget_id 2ms
1418
- ✓  unit  src/tools/__tests__/budgetTools.test.ts > Budget Tools > GetBudgetSchema > should reject non-string budget_id 1ms
1419
- ↓  unit  src/__tests__/performance.test.ts > Reconciliation Performance - Bulk vs Sequential > processes 20 transactions in bulk mode in under 8 seconds
1420
- ↓  unit  src/__tests__/performance.test.ts > Reconciliation Performance - Bulk vs Sequential > pure sequential mode (single transaction) takes longer than 20 seconds
1421
- ↓  unit  src/__tests__/performance.test.ts > Reconciliation Performance - Bulk vs Sequential > sequential fallback takes longer than 20 seconds for 20 transactions
1422
- ↓  unit  src/__tests__/performance.test.ts > Reconciliation Performance - Bulk vs Sequential > achieves at least a 3x speedup over pure sequential mode
1423
- ↓  unit  src/__tests__/performance.test.ts > Reconciliation Performance - Bulk vs Sequential > handles 150-transaction chunking without significant overhead
1424
- ↓  unit  src/__tests__/performance.test.ts > Reconciliation Performance - Bulk vs Sequential > stays within 10MB of heap growth for 100 bulk transactions
1425
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > ExecutionActionRecordSchema > create_transaction type > should validate successful transaction creation with full response 15ms
1426
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > ExecutionActionRecordSchema > create_transaction type > should validate successful transaction creation with null transaction 0ms
1427
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > ExecutionActionRecordSchema > create_transaction type > should accept additional YNAB API fields via passthrough 1ms
1428
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > ExecutionActionRecordSchema > create_transaction_failed type > should validate failed transaction creation with payload 3ms
1429
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > ExecutionActionRecordSchema > create_transaction_failed type > should reject when transaction is null for failed creation 3ms
1430
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > ExecutionActionRecordSchema > create_transaction_duplicate type > should validate duplicate detection with transaction ID 1ms
1431
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > ExecutionActionRecordSchema > create_transaction_duplicate type > should validate duplicate detection with null transaction ID 1ms
1432
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > ExecutionActionRecordSchema > create_transaction_duplicate type > should require duplicate field to be true 1ms
1433
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > ExecutionActionRecordSchema > create_transaction_duplicate type > should require bulk_chunk_index for duplicates 1ms
1434
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > ExecutionActionRecordSchema > update_transaction type > should validate update with full created transaction (real execution) 1ms
1435
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > ExecutionActionRecordSchema > update_transaction type > should validate update with partial payload (dry run) 1ms
1436
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > ExecutionActionRecordSchema > update_transaction type > should validate update with null transaction 0ms
1437
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > ExecutionActionRecordSchema > balance_checkpoint type > should validate balance checkpoint 1ms
1438
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > ExecutionActionRecordSchema > balance_checkpoint type > should require transaction to be null for balance checkpoint 1ms
1439
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > ExecutionActionRecordSchema > bulk_create_fallback type > should validate bulk create fallback 1ms
1440
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > ExecutionActionRecordSchema > bulk_create_fallback type > should require bulk_chunk_index for fallback 0ms
1441
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > ExecutionActionRecordSchema > discriminated union behavior > should reject unknown action types 3ms
1442
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > ExecutionActionRecordSchema > discriminated union behavior > should provide clear error messages for type mismatches 1ms
1443
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > Helper schemas > CreatedTransactionSchema > should validate minimal created transaction 0ms
1444
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > Helper schemas > CreatedTransactionSchema > should allow passthrough fields 0ms
1445
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > Helper schemas > TransactionCreationPayloadSchema > should validate minimal creation payload 0ms
1446
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > Helper schemas > TransactionCreationPayloadSchema > should validate full creation payload 0ms
1447
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > Helper schemas > TransactionUpdatePayloadSchema > should validate update with all fields 0ms
1448
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > Helper schemas > TransactionUpdatePayloadSchema > should validate update with only transaction_id 0ms
1449
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > Helper schemas > DuplicateDetectionPayloadSchema > should validate with both fields 1ms
1450
- ✓  unit  src/tools/schemas/outputs/__tests__/reconciliationOutputs.test.ts > reconciliationOutputs > Helper schemas > DuplicateDetectionPayloadSchema > should validate with null transaction_id 0ms
1451
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Response Time Performance > should respond to budget listing within acceptable time
1452
- Rate limit check for token_5f854540: 0/200 requests, remaining: 200, limited: false
1453
-
1454
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Response Time Performance > should respond to budget listing within acceptable time
1455
- Recorded request for token_5f854540: 1/200 requests
1456
-
1457
- ✓  unit  src/tools/schemas/outputs/__tests__/monthOutputs.test.ts > MonthCategorySchema > should validate complete month category with all fields including goals 12ms
1458
- ✓  unit  src/tools/schemas/outputs/__tests__/monthOutputs.test.ts > MonthCategorySchema > should validate minimal month category with only required fields 1ms
1459
- ✓  unit  src/tools/schemas/outputs/__tests__/monthOutputs.test.ts > MonthCategorySchema > should fail validation when missing required fields 2ms
1460
- ✓  unit  src/tools/schemas/outputs/__tests__/monthOutputs.test.ts > MonthDetailSchema > should validate complete month detail with all fields including categories 4ms
1461
- ✓  unit  src/tools/schemas/outputs/__tests__/monthOutputs.test.ts > MonthDetailSchema > should validate minimal month detail with only required fields 1ms
1462
- ✓  unit  src/tools/schemas/outputs/__tests__/monthOutputs.test.ts > MonthDetailSchema > should validate month detail with empty categories array 1ms
1463
- ✓  unit  src/tools/schemas/outputs/__tests__/monthOutputs.test.ts > MonthDetailSchema > should validate month with proper date format YYYY-MM-01 1ms
1464
- ✓  unit  src/tools/schemas/outputs/__tests__/monthOutputs.test.ts > MonthDetailSchema > should fail validation when missing required month field 0ms
1465
- ✓  unit  src/tools/schemas/outputs/__tests__/monthOutputs.test.ts > MonthDetailSchema > should fail validation when income is not a number 1ms
1466
- ✓  unit  src/tools/schemas/outputs/__tests__/monthOutputs.test.ts > MonthSummarySchema > should validate complete month summary with all fields 1ms
1467
- ✓  unit  src/tools/schemas/outputs/__tests__/monthOutputs.test.ts > MonthSummarySchema > should validate minimal month summary with only required fields 0ms
1468
- ✓  unit  src/tools/schemas/outputs/__tests__/monthOutputs.test.ts > MonthSummarySchema > should validate month summary with null age_of_money 0ms
1469
- ✓  unit  src/tools/schemas/outputs/__tests__/monthOutputs.test.ts > MonthSummarySchema > should fail validation when missing required fields 1ms
1470
- ✓  unit  src/tools/schemas/outputs/__tests__/monthOutputs.test.ts > GetMonthOutputSchema > should validate output with complete month detail and cache metadata 2ms
1471
- ✓  unit  src/tools/schemas/outputs/__tests__/monthOutputs.test.ts > GetMonthOutputSchema > should validate output with minimal month detail 1ms
1472
- ✓  unit  src/tools/schemas/outputs/__tests__/monthOutputs.test.ts > GetMonthOutputSchema > should fail validation when month is not an object 0ms
1473
- ✓  unit  src/tools/schemas/outputs/__tests__/monthOutputs.test.ts > GetMonthOutputSchema > should fail validation when missing required month field 1ms
1474
- ✓  unit  src/tools/schemas/outputs/__tests__/monthOutputs.test.ts > ListMonthsOutputSchema > should validate output with multiple month summaries 2ms
1475
- ✓  unit  src/tools/schemas/outputs/__tests__/monthOutputs.test.ts > ListMonthsOutputSchema > should validate output with single month summary 1ms
1476
- ✓  unit  src/tools/schemas/outputs/__tests__/monthOutputs.test.ts > ListMonthsOutputSchema > should validate output with empty months array 0ms
1477
- ✓  unit  src/tools/schemas/outputs/__tests__/monthOutputs.test.ts > ListMonthsOutputSchema > should fail validation when months is not an array 0ms
1478
- ✓  unit  src/tools/schemas/outputs/__tests__/monthOutputs.test.ts > ListMonthsOutputSchema > should fail validation when months array contains invalid month 1ms
1479
- ✓  unit  src/tools/schemas/outputs/__tests__/monthOutputs.test.ts > ListMonthsOutputSchema > should fail validation when missing required months field 2ms
1480
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Response Time Performance > should respond to budget listing within acceptable time
1481
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
1482
- [INFO] ynab:clear_cache | SUCCESS | 11ms | rate_limit_remaining:199
1483
-
1484
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Response Time Performance > should respond to budget listing within acceptable time
1485
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
1486
-
1487
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Response Time Performance > should respond to budget listing within acceptable time
1488
- Recorded request for token_5f854540: 2/200 requests
1489
-
1490
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Response Time Performance > should respond to budget listing within acceptable time
1491
- Rate limit check for token_5f854540: 2/200 requests, remaining: 198, limited: false
1492
- [INFO] ynab:list_budgets | SUCCESS | 5ms | rate_limit_remaining:198
1493
-
1494
- ✓  unit  src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Response Time Performance > should respond to budget listing within acceptable time 392ms
1495
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should convert to lowercase 8ms
1496
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should remove all spaces 1ms
1497
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should remove special characters 2ms
1498
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should keep only alphanumeric characters 1ms
1499
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should handle null and undefined 0ms
1500
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should handle empty string 0ms
1501
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should handle real-world examples 1ms
1502
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should match identical normalized strings 0ms
1503
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should match despite different special characters 1ms
1504
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should not match different strings 1ms
1505
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should handle null and undefined 1ms
1506
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should match empty strings 0ms
1507
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should match real-world examples 0ms
1508
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should return 100 for identical strings 0ms
1509
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should return high score for similar strings 1ms
1510
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should return lower score for different strings 0ms
1511
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should return 0 for completely different strings 0ms
1512
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should handle null and undefined 0ms
1513
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should calculate Levenshtein distance correctly 0ms
1514
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should handle real-world payee variations 0ms
1515
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should return 100 for identical tokens 1ms
1516
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should return score for same tokens in different order 0ms
1517
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should return partial score for partial overlap 0ms
1518
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should return 0 for no overlap 0ms
1519
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should handle null and undefined 0ms
1520
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should split on alpha/numeric boundaries 0ms
1521
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should handle real-world examples 0ms
1522
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > should return 100 for exact normalized match 0ms
1523
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > should return best score from fuzzy or token matching 0ms
1524
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > should handle typos with fuzzy matching 0ms
1525
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > should return 0 for completely different payees 0ms
1526
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > should handle null and undefined 0ms
1527
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > real-world examples from design spec > should match Shell variations 0ms
1528
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > real-world examples from design spec > should match Amazon variations 0ms
1529
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > real-world examples from design spec > should match Netflix variations 0ms
1530
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should return true when payee contains substring 0ms
1531
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should be case insensitive 0ms
1532
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should ignore special characters 0ms
1533
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should return false when substring not found 0ms
1534
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should handle null and undefined 0ms
1535
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should match partial words 0ms
1536
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > edge cases > should handle very long payee names 0ms
1537
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > edge cases > should handle Unicode characters 0ms
1538
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > edge cases > should handle numbers only 0ms
1539
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > edge cases > should handle mixed case with numbers 0ms
1540
- ✓  unit  src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts > PayeeSchema > should validate complete payee with all fields 8ms
1541
- ✓  unit  src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts > PayeeSchema > should validate transfer payee with transfer_account_id 1ms
1542
- ✓  unit  src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts > PayeeSchema > should validate minimal payee with only required fields 0ms
1543
- ✓  unit  src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts > PayeeSchema > should validate deleted payee 4ms
1544
- ✓  unit  src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts > PayeeSchema > should fail validation when missing required id field 2ms
1545
- ✓  unit  src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts > PayeeSchema > should fail validation when missing required name field 1ms
1546
- ✓  unit  src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts > PayeeSchema > should fail validation when missing required deleted field 1ms
1547
- ✓  unit  src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts > PayeeSchema > should fail validation when deleted is not a boolean 0ms
1548
- ✓  unit  src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts > ListPayeesOutputSchema > should validate output with multiple payees including transfers 5ms
1549
- ✓  unit  src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts > ListPayeesOutputSchema > should validate output with single payee 1ms
1550
- ✓  unit  src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts > ListPayeesOutputSchema > should validate output with empty payees array 1ms
1551
- ✓  unit  src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts > ListPayeesOutputSchema > should validate output with deleted payees 2ms
1552
- ✓  unit  src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts > ListPayeesOutputSchema > should fail validation when payees is not an array 1ms
1553
- ✓  unit  src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts > ListPayeesOutputSchema > should fail validation when missing required payees field 0ms
1554
- ✓  unit  src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts > ListPayeesOutputSchema > should fail validation when missing required total_count field 0ms
1555
- ✓  unit  src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts > ListPayeesOutputSchema > should fail validation when total_count is not an integer 1ms
1556
- ✓  unit  src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts > GetPayeeOutputSchema > should validate output with complete payee and cache metadata 2ms
1557
- ✓  unit  src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts > GetPayeeOutputSchema > should validate output with transfer payee 0ms
1558
- ✓  unit  src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts > GetPayeeOutputSchema > should validate output with deleted payee 0ms
1559
- ✓  unit  src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts > GetPayeeOutputSchema > should fail validation when payee is not an object 1ms
1560
- ✓  unit  src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts > GetPayeeOutputSchema > should fail validation when payee missing required fields 0ms
1561
- ✓  unit  src/tools/schemas/outputs/__tests__/payeeOutputs.test.ts > GetPayeeOutputSchema > should fail validation when missing required payee field 0ms
1562
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Response Time Performance > should handle large transaction lists efficiently
1563
- Rate limit check for token_5f854540: 0/200 requests, remaining: 200, limited: false
1564
-
1565
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Response Time Performance > should handle large transaction lists efficiently
1566
- Recorded request for token_5f854540: 1/200 requests
1567
-
1568
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Response Time Performance > should handle large transaction lists efficiently
1569
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
1570
- [INFO] ynab:clear_cache | SUCCESS | 4ms | rate_limit_remaining:199
1571
-
1572
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Response Time Performance > should handle large transaction lists efficiently
1573
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
1574
-
1575
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Response Time Performance > should handle large transaction lists efficiently
1576
- Recorded request for token_5f854540: 2/200 requests
1577
-
1578
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Response Time Performance > should handle large transaction lists efficiently
1579
- Rate limit check for token_5f854540: 2/200 requests, remaining: 198, limited: false
1580
- [INFO] ynab:list_transactions | SUCCESS | 8ms | rate_limit_remaining:198
1581
-
1582
- ✓  unit  src/tools/schemas/outputs/__tests__/utilityOutputs.test.ts > SetOutputFormatOutputSchema > should validate output with success, message, and options 7ms
1583
- ✓  unit  src/tools/schemas/outputs/__tests__/utilityOutputs.test.ts > SetOutputFormatOutputSchema > should validate output with only defaultMinify option 1ms
1584
- ✓  unit  src/tools/schemas/outputs/__tests__/utilityOutputs.test.ts > SetOutputFormatOutputSchema > should validate output with only prettySpaces option 0ms
1585
- ✓  unit  src/tools/schemas/outputs/__tests__/utilityOutputs.test.ts > SetOutputFormatOutputSchema > should validate output with empty options 1ms
1586
- ✓  unit  src/tools/schemas/outputs/__tests__/utilityOutputs.test.ts > SetOutputFormatOutputSchema > should fail validation when missing required success field 1ms
1587
- ✓  unit  src/tools/schemas/outputs/__tests__/utilityOutputs.test.ts > SetOutputFormatOutputSchema > should fail validation when missing required message field 1ms
1588
- ✓  unit  src/tools/schemas/outputs/__tests__/utilityOutputs.test.ts > SetOutputFormatOutputSchema > should fail validation when missing required options field 1ms
1589
- ✓  unit  src/tools/schemas/outputs/__tests__/utilityOutputs.test.ts > EnvironmentInfoSchema > should validate environment info with null token_preview 2ms
1590
- ✓  unit  src/tools/schemas/outputs/__tests__/utilityOutputs.test.ts > EnvironmentInfoSchema > should validate environment info with string token_preview 1ms
1591
- ✓  unit  src/tools/schemas/outputs/__tests__/utilityOutputs.test.ts > CacheInfoSchema > should validate cache info with null lastCleanup 2ms
1592
- ✓  unit  src/tools/schemas/outputs/__tests__/utilityOutputs.test.ts > CacheInfoSchema > should validate cache info with string lastCleanup 0ms
1593
- ✓  unit  src/tools/schemas/outputs/__tests__/utilityOutputs.test.ts > CacheInfoSchema > should validate cache info without optional performance metrics 0ms
1594
- ✓  unit  src/tools/schemas/outputs/__tests__/utilityOutputs.test.ts > DeltaInfoSchema > should validate delta info with numeric delta_hit_rate 2ms
1595
- ✓  unit  src/tools/schemas/outputs/__tests__/utilityOutputs.test.ts > DeltaInfoSchema > should fail validation when delta_hit_rate is a string 1ms
1596
- ✓  unit  src/tools/schemas/outputs/__tests__/utilityOutputs.test.ts > DiagnosticInfoOutputSchema > should validate complete diagnostic output with all null cases 3ms
1597
- ✓  unit  src/tools/schemas/outputs/__tests__/utilityOutputs.test.ts > DiagnosticInfoOutputSchema > should validate minimal diagnostic output with only timestamp 0ms
1598
- ✓  unit  src/tools/schemas/outputs/__tests__/utilityOutputs.test.ts > DiagnosticInfoOutputSchema > should validate diagnostic output with some optional sections 0ms
1599
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionMutationSchemas.test.ts > Transaction Mutation Schema Type Safety > TransactionDryRunPreviewSchema > should accept valid transaction preview 9ms
1600
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionMutationSchemas.test.ts > Transaction Mutation Schema Type Safety > TransactionDryRunPreviewSchema > should accept minimal transaction preview with required fields only 1ms
1601
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionMutationSchemas.test.ts > Transaction Mutation Schema Type Safety > TransactionDryRunPreviewSchema > should reject invalid date format 2ms
1602
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionMutationSchemas.test.ts > Transaction Mutation Schema Type Safety > TransactionDryRunPreviewSchema > should reject invalid cleared status 1ms
1603
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionMutationSchemas.test.ts > Transaction Mutation Schema Type Safety > TransactionDryRunPreviewSchema > should reject transaction with server-generated fields 2ms
1604
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionMutationSchemas.test.ts > Transaction Mutation Schema Type Safety > SubtransactionPreviewSchema > should accept valid subtransaction preview 2ms
1605
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionMutationSchemas.test.ts > Transaction Mutation Schema Type Safety > SubtransactionPreviewSchema > should accept minimal subtransaction with amount only 0ms
1606
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionMutationSchemas.test.ts > Transaction Mutation Schema Type Safety > SubtransactionPreviewSchema > should not include server-generated fields 1ms
1607
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionMutationSchemas.test.ts > Transaction Mutation Schema Type Safety > CreateReceiptSplitTransactionOutputSchema - Dry Run Branch > should accept valid dry-run response with strongly-typed preview 4ms
1608
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionMutationSchemas.test.ts > Transaction Mutation Schema Type Safety > CreateReceiptSplitTransactionOutputSchema - Dry Run Branch > should reject dry-run response with loose unknown types 2ms
1609
- ✓  unit  src/tools/schemas/outputs/__tests__/transactionMutationSchemas.test.ts > Transaction Mutation Schema Type Safety > CreateReceiptSplitTransactionOutputSchema - Dry Run Branch > should reject subtransactions with server-generated id fields 1ms
1610
- ✓  unit  src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Response Time Performance > should handle large transaction lists efficiently 385ms
1611
- ✓  unit  src/tools/__tests__/utilityTools.test.ts > Utility Tools > handleGetUser > should return user information successfully 10ms
1612
- ✓  unit  src/tools/__tests__/utilityTools.test.ts > Utility Tools > handleGetUser > should handle 401 authentication errors 2ms
1613
- ✓  unit  src/tools/__tests__/utilityTools.test.ts > Utility Tools > handleGetUser > should handle 403 authorization errors 1ms
1614
- ✓  unit  src/tools/__tests__/utilityTools.test.ts > Utility Tools > handleGetUser > should handle 429 rate limiting errors 1ms
1615
- ✓  unit  src/tools/__tests__/utilityTools.test.ts > Utility Tools > handleGetUser > should handle 500 server errors 1ms
1616
- ✓  unit  src/tools/__tests__/utilityTools.test.ts > Utility Tools > handleGetUser > should handle generic errors 3ms
1617
- ✓  unit  src/tools/__tests__/utilityTools.test.ts > Utility Tools > handleConvertAmount > should convert dollars to milliunits correctly 1ms
1618
- ✓  unit  src/tools/__tests__/utilityTools.test.ts > Utility Tools > handleConvertAmount > should convert milliunits to dollars correctly 1ms
1619
- ✓  unit  src/tools/__tests__/utilityTools.test.ts > Utility Tools > handleConvertAmount > should handle zero amounts 2ms
1620
- ✓  unit  src/tools/__tests__/utilityTools.test.ts > Utility Tools > handleConvertAmount > should handle negative amounts 0ms
1621
- ✓  unit  src/tools/__tests__/utilityTools.test.ts > Utility Tools > handleConvertAmount > should handle floating-point precision correctly 0ms
1622
- ✓  unit  src/tools/__tests__/utilityTools.test.ts > Utility Tools > handleConvertAmount > should handle large amounts 1ms
1623
- ✓  unit  src/tools/__tests__/utilityTools.test.ts > Utility Tools > handleConvertAmount > should round to nearest milliunit when converting from dollars 0ms
1624
- ✓  unit  src/tools/__tests__/utilityTools.test.ts > Utility Tools > ConvertAmountSchema validation > should validate correct parameters 3ms
1625
- ✓  unit  src/tools/__tests__/utilityTools.test.ts > Utility Tools > ConvertAmountSchema validation > should reject non-finite numbers 1ms
1626
- ✓  unit  src/tools/__tests__/utilityTools.test.ts > Utility Tools > ConvertAmountSchema validation > should reject NaN values 0ms
1627
- ✓  unit  src/tools/__tests__/utilityTools.test.ts > Utility Tools > ConvertAmountSchema validation > should reject missing amount parameter 0ms
1628
- ✓  unit  src/tools/__tests__/utilityTools.test.ts > Utility Tools > ConvertAmountSchema validation > should reject missing to_milliunits parameter 0ms
1629
- ✓  unit  src/tools/__tests__/utilityTools.test.ts > Utility Tools > ConvertAmountSchema validation > should reject non-boolean to_milliunits parameter 0ms
1630
- ✓  unit  src/tools/schemas/outputs/__tests__/dateValidation.test.ts > Date Validation in comparisonOutputs > ISODateStringSchema > should accept valid dates 22ms
1631
- ✓  unit  src/tools/schemas/outputs/__tests__/dateValidation.test.ts > Date Validation in comparisonOutputs > ISODateStringSchema > should reject invalid months 3ms
1632
- ✓  unit  src/tools/schemas/outputs/__tests__/dateValidation.test.ts > Date Validation in comparisonOutputs > ISODateStringSchema > should reject invalid days 7ms
1633
- ✓  unit  src/tools/schemas/outputs/__tests__/dateValidation.test.ts > Date Validation in comparisonOutputs > ISODateStringSchema > should reject non-leap year February 29 2ms
1634
- ✓  unit  src/tools/schemas/outputs/__tests__/dateValidation.test.ts > Date Validation in comparisonOutputs > ISODateStringSchema > should reject invalid format 2ms
1635
- ✓  unit  src/tools/schemas/outputs/__tests__/dateValidation.test.ts > Date Validation in comparisonOutputs > BankTransactionComparisonSchema > should accept valid bank transaction with valid date 2ms
1636
- ✓  unit  src/tools/schemas/outputs/__tests__/dateValidation.test.ts > Date Validation in comparisonOutputs > BankTransactionComparisonSchema > should reject bank transaction with invalid date 1ms
1637
- ✓  unit  src/tools/schemas/outputs/__tests__/dateValidation.test.ts > Date Validation in comparisonOutputs > DateRangeSchema > should accept valid date range 1ms
1638
- ✓  unit  src/tools/schemas/outputs/__tests__/dateValidation.test.ts > Date Validation in comparisonOutputs > DateRangeSchema > should accept date range where start equals end 1ms
1639
- ✓  unit  src/tools/schemas/outputs/__tests__/dateValidation.test.ts > Date Validation in comparisonOutputs > DateRangeSchema > should reject date range with invalid start date 1ms
1640
- ✓  unit  src/tools/schemas/outputs/__tests__/dateValidation.test.ts > Date Validation in comparisonOutputs > DateRangeSchema > should reject date range with invalid end date 1ms
1641
- ✓  unit  src/tools/schemas/outputs/__tests__/dateValidation.test.ts > Date Validation in comparisonOutputs > DateRangeSchema > should reject date range where start is after end 1ms
1642
- ✓  unit  src/tools/schemas/outputs/__tests__/dateValidation.test.ts > Date Validation in comparisonOutputs > DateRangeSchema > should reject date range where start is after end (same month) 1ms
1643
- ✓  unit  src/tools/schemas/outputs/__tests__/dateValidation.test.ts > Date Validation in comparisonOutputs > DateRangeSchema > should reject date range where start is after end (consecutive days) 1ms
1644
- ✓  unit  src/tools/reconciliation/__tests__/scenarios/extremes.scenario.test.ts > scenario: zero, negative, and large statements > handles zero and negative statement balances with mixed unmatched items 28ms
1645
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Response Time Performance > should handle concurrent requests efficiently
1646
- Rate limit check for token_5f854540: 0/200 requests, remaining: 200, limited: false
1647
-
1648
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Response Time Performance > should handle concurrent requests efficiently
1649
- Recorded request for token_5f854540: 1/200 requests
1650
-
1651
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Response Time Performance > should handle concurrent requests efficiently
1652
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
1653
- [INFO] ynab:clear_cache | SUCCESS | 1ms | rate_limit_remaining:199
1654
-
1655
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Response Time Performance > should handle concurrent requests efficiently
1656
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
1657
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
1658
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
1659
- Recorded request for token_5f854540: 2/200 requests
1660
- Recorded request for token_5f854540: 3/200 requests
1661
- Recorded request for token_5f854540: 4/200 requests
1662
-
1663
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Response Time Performance > should handle concurrent requests efficiently
1664
- Rate limit check for token_5f854540: 4/200 requests, remaining: 196, limited: false
1665
- [INFO] ynab:get_user | SUCCESS | 3ms | rate_limit_remaining:196
1666
-
1667
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Response Time Performance > should handle concurrent requests efficiently
1668
- Rate limit check for token_5f854540: 4/200 requests, remaining: 196, limited: false
1669
- [INFO] ynab:list_budgets | SUCCESS | 7ms | rate_limit_remaining:196
1670
- Rate limit check for token_5f854540: 4/200 requests, remaining: 196, limited: false
1671
- [INFO] ynab:list_budgets | SUCCESS | 5ms | rate_limit_remaining:196
1672
-
1673
- ✓  unit  src/utils/__tests__/dateUtils.test.ts > dateUtils > formatYNABMonth > should format date as YYYY-MM-01 6ms
1674
- ✓  unit  src/utils/__tests__/dateUtils.test.ts > dateUtils > formatYNABMonth > should handle December correctly 1ms
1675
- ✓  unit  src/utils/__tests__/dateUtils.test.ts > dateUtils > formatISODate > should format date as YYYY-MM-DD 1ms
1676
- ✓  unit  src/utils/__tests__/dateUtils.test.ts > dateUtils > getCurrentMonth > should return current month in YYYY-MM-01 format 1ms
1677
- ✓  unit  src/utils/__tests__/dateUtils.test.ts > dateUtils > getToday > should return today in YYYY-MM-DD format 27ms
1678
- ✓  unit  src/utils/__tests__/dateUtils.test.ts > dateUtils > getHistoricalMonths > should generate correct number of historical months 8ms
1679
- ✓  unit  src/utils/__tests__/dateUtils.test.ts > dateUtils > getHistoricalMonths > should handle year boundary correctly 1ms
1680
- ✓  unit  src/utils/__tests__/dateUtils.test.ts > dateUtils > getHistoricalMonths > should use current date when no base date provided 3ms
1681
- ✓  unit  src/utils/__tests__/dateUtils.test.ts > dateUtils > getHistoricalMonths > should generate 6 months correctly (bug test case) 5ms
1682
- ✓  unit  src/utils/__tests__/dateUtils.test.ts > dateUtils > subtractMonths > should subtract months correctly 1ms
1683
- ✓  unit  src/utils/__tests__/dateUtils.test.ts > dateUtils > subtractMonths > should handle year boundary 1ms
1684
- ✓  unit  src/utils/__tests__/dateUtils.test.ts > dateUtils > isValidISODate > should validate correct ISO dates 9ms
1685
- ✓  unit  src/utils/__tests__/dateUtils.test.ts > dateUtils > isValidISODate > should reject invalid formats 0ms
1686
- ✓  unit  src/utils/__tests__/dateUtils.test.ts > dateUtils > isValidISODate > should reject invalid dates with correct format 1ms
1687
- ✓  unit  src/utils/__tests__/dateUtils.test.ts > dateUtils > isValidYNABMonth > should validate correct YNAB month format 2ms
1688
- ✓  unit  src/utils/__tests__/dateUtils.test.ts > dateUtils > isValidYNABMonth > should reject invalid formats 0ms
1689
- ✓  unit  src/utils/__tests__/dateUtils.test.ts > dateUtils > isValidYNABMonth > should reject invalid months with correct format 1ms
1690
- ✓  unit  src/utils/__tests__/dateUtils.test.ts > dateUtils > yearMonthToYNABMonth > should convert YYYY-MM to YYYY-MM-01 0ms
1691
- ✓  unit  src/utils/__tests__/dateUtils.test.ts > dateUtils > yearMonthToYNABMonth > should throw error for invalid format 2ms
1692
- ✓  unit  src/server/__tests__/serverKnowledgeStore.test.ts > ServerKnowledgeStore > Basic Operations > should return undefined for non-existent keys 4ms
1693
- ✓  unit  src/server/__tests__/serverKnowledgeStore.test.ts > ServerKnowledgeStore > Basic Operations > should store and retrieve knowledge values 1ms
1694
- ✓  unit  src/server/__tests__/serverKnowledgeStore.test.ts > ServerKnowledgeStore > Basic Operations > should update existing knowledge values 1ms
1695
- ✓  unit  src/server/__tests__/serverKnowledgeStore.test.ts > ServerKnowledgeStore > Basic Operations > should handle multiple cache keys independently 4ms
1696
- ✓  unit  src/server/__tests__/serverKnowledgeStore.test.ts > ServerKnowledgeStore > Basic Operations > should return correct stats with entryCount and entries object 2ms
1697
- ✓  unit  src/server/__tests__/serverKnowledgeStore.test.ts > ServerKnowledgeStore > Validation > should throw error for negative server_knowledge values 2ms
1698
- ✓  unit  src/server/__tests__/serverKnowledgeStore.test.ts > ServerKnowledgeStore > Validation > should accept zero as valid server_knowledge 1ms
1699
- ✓  unit  src/server/__tests__/serverKnowledgeStore.test.ts > ServerKnowledgeStore > Validation > should accept large positive integers 1ms
1700
- ✓  unit  src/server/__tests__/serverKnowledgeStore.test.ts > ServerKnowledgeStore > Reset Operations > should reset all knowledge when called without pattern 1ms
1701
- ✓  unit  src/server/__tests__/serverKnowledgeStore.test.ts > ServerKnowledgeStore > Reset Operations > should reset only matching keys when pattern provided 1ms
1702
- ✓  unit  src/server/__tests__/serverKnowledgeStore.test.ts > ServerKnowledgeStore > Reset Operations > should not reset non-matching keys 1ms
1703
- ✓  unit  src/server/__tests__/serverKnowledgeStore.test.ts > ServerKnowledgeStore > Reset Operations > should handle resetByBudgetId correctly 1ms
1704
- ✓  unit  src/server/__tests__/serverKnowledgeStore.test.ts > ServerKnowledgeStore > Reset Operations > should not affect other budgets when resetting by budget ID 0ms
1705
- ✓  unit  src/server/__tests__/serverKnowledgeStore.test.ts > ServerKnowledgeStore > Reset Operations > should handle empty store gracefully 1ms
1706
- ✓  unit  src/server/__tests__/serverKnowledgeStore.test.ts > ServerKnowledgeStore > Edge Cases > should handle very long cache keys 0ms
1707
- ✓  unit  src/server/__tests__/serverKnowledgeStore.test.ts > ServerKnowledgeStore > Edge Cases > should handle special characters in cache keys 0ms
1708
- ✓  unit  src/server/__tests__/serverKnowledgeStore.test.ts > ServerKnowledgeStore > Edge Cases > should handle rapid updates to same key 0ms
1709
- ✓  unit  src/server/__tests__/serverKnowledgeStore.test.ts > ServerKnowledgeStore > Edge Cases > should maintain isolation between different store instances 0ms
1710
- ✓  unit  src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Response Time Performance > should handle concurrent requests efficiently 370ms
1711
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1712
- Rate limit check for token_5f854540: 0/200 requests, remaining: 200, limited: false
1713
-
1714
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1715
- Recorded request for token_5f854540: 1/200 requests
1716
-
1717
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1718
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
1719
- [INFO] ynab:clear_cache | SUCCESS | 1ms | rate_limit_remaining:199
1720
-
1721
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1722
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
1723
-
1724
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1725
- Recorded request for token_5f854540: 2/200 requests
1726
-
1727
- ✓  unit  src/tools/__tests__/compareTransactions.window.test.ts > compareTransactions statement window filtering > inWindow function > excludes transactions outside statement window 7ms
1728
- ✓  unit  src/tools/__tests__/compareTransactions.window.test.ts > compareTransactions statement window filtering > inWindow function > handles partial window bounds 2ms
1729
- ✓  unit  src/tools/__tests__/compareTransactions.window.test.ts > compareTransactions statement window filtering > inWindow function > filters candidates before matching logic 2ms
1730
- ✓  unit  src/tools/__tests__/compareTransactions.window.test.ts > compareTransactions statement window filtering > statement window clamping > clamps bank and YNAB candidates to statement window 3ms
1731
- ✓  unit  src/tools/__tests__/compareTransactions.window.test.ts > compareTransactions statement window filtering > statement window clamping > matches use filtered transactions not original counts 1ms
1732
- ✓  unit  src/tools/__tests__/compareTransactions.window.test.ts > compareTransactions statement window filtering > integration with modular compareTransactions > should apply window filtering in the main handler 0ms
1733
- ✓  unit  src/tools/__tests__/compareTransactions.window.test.ts > compareTransactions statement window filtering > integration with modular compareTransactions > should filter transactions before matching in modular structure 1ms
1734
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1735
- Rate limit check for token_5f854540: 2/200 requests, remaining: 198, limited: false
1736
- [INFO] ynab:list_categories | SUCCESS | 65ms | rate_limit_remaining:198
1737
-
1738
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1739
- Rate limit check for token_5f854540: 2/200 requests, remaining: 198, limited: false
1740
-
1741
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1742
- Recorded request for token_5f854540: 3/200 requests
1743
-
1744
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1745
- Rate limit check for token_5f854540: 3/200 requests, remaining: 197, limited: false
1746
- [INFO] ynab:list_categories | SUCCESS | 39ms | rate_limit_remaining:197
1747
-
1748
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1749
- Rate limit check for token_5f854540: 3/200 requests, remaining: 197, limited: false
1750
-
1751
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1752
- Recorded request for token_5f854540: 4/200 requests
1753
-
1754
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1755
- Rate limit check for token_5f854540: 4/200 requests, remaining: 196, limited: false
1756
- [INFO] ynab:list_categories | SUCCESS | 36ms | rate_limit_remaining:196
1757
-
1758
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1759
- Rate limit check for token_5f854540: 4/200 requests, remaining: 196, limited: false
1760
-
1761
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1762
- Recorded request for token_5f854540: 5/200 requests
1763
-
1764
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1765
- Rate limit check for token_5f854540: 5/200 requests, remaining: 195, limited: false
1766
- [INFO] ynab:list_categories | SUCCESS | 17ms | rate_limit_remaining:195
1767
-
1768
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1769
- Rate limit check for token_5f854540: 5/200 requests, remaining: 195, limited: false
1770
-
1771
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1772
- Recorded request for token_5f854540: 6/200 requests
1773
-
1774
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1775
- Rate limit check for token_5f854540: 6/200 requests, remaining: 194, limited: false
1776
- [INFO] ynab:list_categories | SUCCESS | 20ms | rate_limit_remaining:194
1777
-
1778
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1779
- Rate limit check for token_5f854540: 6/200 requests, remaining: 194, limited: false
1780
-
1781
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1782
- Recorded request for token_5f854540: 7/200 requests
1783
-
1784
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1785
- Rate limit check for token_5f854540: 7/200 requests, remaining: 193, limited: false
1786
- [INFO] ynab:list_categories | SUCCESS | 20ms | rate_limit_remaining:193
1787
-
1788
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1789
- Rate limit check for token_5f854540: 7/200 requests, remaining: 193, limited: false
1790
-
1791
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1792
- Recorded request for token_5f854540: 8/200 requests
1793
-
1794
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1795
- Rate limit check for token_5f854540: 8/200 requests, remaining: 192, limited: false
1796
- [INFO] ynab:list_categories | SUCCESS | 22ms | rate_limit_remaining:192
1797
-
1798
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1799
- Rate limit check for token_5f854540: 8/200 requests, remaining: 192, limited: false
1800
-
1801
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1802
- Recorded request for token_5f854540: 9/200 requests
1803
-
1804
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1805
- Rate limit check for token_5f854540: 9/200 requests, remaining: 191, limited: false
1806
- [INFO] ynab:list_categories | SUCCESS | 18ms | rate_limit_remaining:191
1807
-
1808
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1809
- Rate limit check for token_5f854540: 9/200 requests, remaining: 191, limited: false
1810
-
1811
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1812
- Recorded request for token_5f854540: 10/200 requests
1813
-
1814
- ✓  unit  src/tools/__tests__/deltaSupport.test.ts > deltaSupport runtime validation > resolveDeltaFetcherArgs > should accept valid 2-argument form (ynabAPI, params) 7ms
1815
- ✓  unit  src/tools/__tests__/deltaSupport.test.ts > deltaSupport runtime validation > resolveDeltaFetcherArgs > should accept valid 3-argument form (ynabAPI, deltaFetcher, params) 1ms
1816
- ✓  unit  src/tools/__tests__/deltaSupport.test.ts > deltaSupport runtime validation > resolveDeltaFetcherArgs > should reject 2-argument form with DeltaFetcher instead of params 2ms
1817
- ✓  unit  src/tools/__tests__/deltaSupport.test.ts > deltaSupport runtime validation > resolveDeltaFetcherArgs > should reject 3-argument form with wrong types 1ms
1818
- ✓  unit  src/tools/__tests__/deltaSupport.test.ts > deltaSupport runtime validation > resolveDeltaFetcherArgs > should reject non-object params 1ms
1819
- ✓  unit  src/tools/__tests__/deltaSupport.test.ts > deltaSupport runtime validation > resolveDeltaWriteArgs > should accept valid 1-argument form (params) 1ms
1820
- ✓  unit  src/tools/__tests__/deltaSupport.test.ts > deltaSupport runtime validation > resolveDeltaWriteArgs > should accept valid 3-argument form (deltaCache, knowledgeStore, params) 1ms
1821
- ✓  unit  src/tools/__tests__/deltaSupport.test.ts > deltaSupport runtime validation > resolveDeltaWriteArgs > should reject 1-argument form with DeltaCache instead of params 1ms
1822
- ✓  unit  src/tools/__tests__/deltaSupport.test.ts > deltaSupport runtime validation > resolveDeltaWriteArgs > should reject 2-argument form (ambiguous) 1ms
1823
- ✓  unit  src/tools/__tests__/deltaSupport.test.ts > deltaSupport runtime validation > resolveDeltaWriteArgs > should reject 3-argument form with wrong types 3ms
1824
- ✓  unit  src/tools/__tests__/deltaSupport.test.ts > deltaSupport runtime validation > resolveDeltaWriteArgs > should reject non-object params 2ms
1825
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1826
- Rate limit check for token_5f854540: 10/200 requests, remaining: 190, limited: false
1827
- [INFO] ynab:list_categories | SUCCESS | 21ms | rate_limit_remaining:190
1828
-
1829
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1830
- Rate limit check for token_5f854540: 10/200 requests, remaining: 190, limited: false
1831
-
1832
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1833
- Recorded request for token_5f854540: 11/200 requests
1834
-
1835
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets
1836
- Rate limit check for token_5f854540: 11/200 requests, remaining: 189, limited: false
1837
- [INFO] ynab:list_categories | SUCCESS | 16ms | rate_limit_remaining:189
1838
-
1839
- ✓  unit  src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Memory Usage Performance > should handle memory efficiently with large datasets 690ms
1840
- ✓  unit  src/types/__tests__/index.test.ts > Error Classes > AuthenticationError > should create error with correct name and message 7ms
1841
- ✓  unit  src/types/__tests__/index.test.ts > Error Classes > AuthenticationError > should be throwable and catchable 3ms
1842
- ✓  unit  src/types/__tests__/index.test.ts > Error Classes > ConfigurationError > should create error with correct name and message 1ms
1843
- ✓  unit  src/types/__tests__/index.test.ts > Error Classes > ConfigurationError > should be throwable and catchable 1ms
1844
- ✓  unit  src/tools/reconciliation/__tests__/scenarios/adapterCurrency.scenario.test.ts > scenario: non-USD formatting in adapter payload > emits CAD currency values and csv_format metadata when provided 9ms
1845
- ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should perform full analysis and return structured results 30ms
1846
- ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should categorize high-confidence matches as auto-matches 3ms
1847
- ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should categorize medium-confidence matches as suggested 2ms
1848
- ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should identify unmatched bank transactions 2ms
1849
- ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should identify unmatched YNAB transactions 2ms
1850
- ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should calculate balance information correctly 2ms
1851
- ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should generate appropriate summary 2ms
1852
- ✓  unit  src/tools/reconciliation/__tests__/schemaUrl.test.ts > buildReconciliationPayload schema reference > points to the master branch schema file on raw.githubusercontent.com 7ms
1853
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Error Handling Performance > should handle errors quickly without blocking
1854
- Rate limit check for token_5f854540: 0/200 requests, remaining: 200, limited: false
1855
-
1856
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Error Handling Performance > should handle errors quickly without blocking
1857
- Recorded request for token_5f854540: 1/200 requests
1858
-
1859
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Error Handling Performance > should handle errors quickly without blocking
1860
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
1861
- [INFO] ynab:clear_cache | SUCCESS | 0ms | rate_limit_remaining:199
1862
-
1863
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Error Handling Performance > should handle errors quickly without blocking
1864
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
1865
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
1866
- Recorded request for token_5f854540: 2/200 requests
1867
- Recorded request for token_5f854540: 3/200 requests
1868
-
1869
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Error Handling Performance > should handle errors quickly without blocking
1870
- Rate limit check for token_5f854540: 3/200 requests, remaining: 197, limited: false
1871
- [INFO] ynab:list_budgets | SUCCESS | 5ms | rate_limit_remaining:197
1872
- Rate limit check for token_5f854540: 3/200 requests, remaining: 197, limited: false
1873
- [INFO] ynab:list_budgets | SUCCESS | 4ms | rate_limit_remaining:197
1874
-
1875
- ↓  unit  src/__tests__/delta.performance.test.ts > Delta performance characteristics > reuses cache and avoids repeated full refreshes
1876
- ✓  unit  src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Error Handling Performance > should handle errors quickly without blocking 341ms
1877
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Error Handling Performance > should recover from rate limiting gracefully
1878
- Rate limit check for token_5f854540: 0/200 requests, remaining: 200, limited: false
1879
-
1880
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Error Handling Performance > should recover from rate limiting gracefully
1881
- Recorded request for token_5f854540: 1/200 requests
1882
-
1883
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Error Handling Performance > should recover from rate limiting gracefully
1884
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
1885
- [INFO] ynab:clear_cache | SUCCESS | 1ms | rate_limit_remaining:199
1886
-
1887
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Error Handling Performance > should recover from rate limiting gracefully
1888
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
1889
-
1890
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Error Handling Performance > should recover from rate limiting gracefully
1891
- Recorded request for token_5f854540: 2/200 requests
1892
-
1893
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Error Handling Performance > should recover from rate limiting gracefully
1894
- Rate limit check for token_5f854540: 2/200 requests, remaining: 198, limited: false
1895
- [INFO] ynab:list_budgets | SUCCESS | 1ms | rate_limit_remaining:198
1896
-
1897
- ✓  unit  src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Error Handling Performance > should recover from rate limiting gracefully 253ms
1898
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Validation Performance > should validate input parameters quickly
1899
- Rate limit check for token_5f854540: 0/200 requests, remaining: 200, limited: false
1900
-
1901
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Validation Performance > should validate input parameters quickly
1902
- Recorded request for token_5f854540: 1/200 requests
1903
-
1904
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Validation Performance > should validate input parameters quickly
1905
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
1906
- [INFO] ynab:clear_cache | SUCCESS | 1ms | rate_limit_remaining:199
1907
-
1908
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Validation Performance > should validate input parameters quickly
1909
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
1910
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
1911
- [ERROR] ynab:get_budget | FAILED | 1ms | rate_limit_remaining:199 | error:"Validation failed: Validation error: Budget ID is required at "budget_id""
1912
- Recorded request for token_5f854540: 2/200 requests
1913
-
1914
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Validation Performance > should validate input parameters quickly
1915
- Rate limit check for token_5f854540: 2/200 requests, remaining: 198, limited: false
1916
- [INFO] ynab:convert_amount | SUCCESS | 3ms | rate_limit_remaining:198
1917
-
1918
- ✓  unit  src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Validation Performance > should validate input parameters quickly 180ms
1919
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1920
- Rate limit check for token_5f854540: 0/200 requests, remaining: 200, limited: false
1921
-
1922
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1923
- Recorded request for token_5f854540: 1/200 requests
1924
-
1925
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1926
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
1927
- [INFO] ynab:clear_cache | SUCCESS | 0ms | rate_limit_remaining:199
1928
-
1929
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1930
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
1931
-
1932
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1933
- Recorded request for token_5f854540: 2/200 requests
1934
-
1935
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1936
- Rate limit check for token_5f854540: 2/200 requests, remaining: 198, limited: false
1937
- [INFO] ynab:get_user | SUCCESS | 1ms | rate_limit_remaining:198
1938
-
1939
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1940
- Rate limit check for token_5f854540: 2/200 requests, remaining: 198, limited: false
1941
-
1942
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1943
- Recorded request for token_5f854540: 3/200 requests
1944
-
1945
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1946
- Rate limit check for token_5f854540: 3/200 requests, remaining: 197, limited: false
1947
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:197
1948
-
1949
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1950
- Rate limit check for token_5f854540: 3/200 requests, remaining: 197, limited: false
1951
-
1952
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1953
- Recorded request for token_5f854540: 4/200 requests
1954
-
1955
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1956
- Rate limit check for token_5f854540: 4/200 requests, remaining: 196, limited: false
1957
- [INFO] ynab:get_user | SUCCESS | 1ms | rate_limit_remaining:196
1958
-
1959
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1960
- Rate limit check for token_5f854540: 4/200 requests, remaining: 196, limited: false
1961
-
1962
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1963
- Recorded request for token_5f854540: 5/200 requests
1964
-
1965
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1966
- Rate limit check for token_5f854540: 5/200 requests, remaining: 195, limited: false
1967
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:195
1968
-
1969
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1970
- Rate limit check for token_5f854540: 5/200 requests, remaining: 195, limited: false
1971
-
1972
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1973
- Recorded request for token_5f854540: 6/200 requests
1974
-
1975
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1976
- Rate limit check for token_5f854540: 6/200 requests, remaining: 194, limited: false
1977
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:194
1978
-
1979
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1980
- Rate limit check for token_5f854540: 6/200 requests, remaining: 194, limited: false
1981
-
1982
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1983
- Recorded request for token_5f854540: 7/200 requests
1984
-
1985
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1986
- Rate limit check for token_5f854540: 7/200 requests, remaining: 193, limited: false
1987
- [INFO] ynab:get_user | SUCCESS | 1ms | rate_limit_remaining:193
1988
-
1989
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1990
- Rate limit check for token_5f854540: 7/200 requests, remaining: 193, limited: false
1991
-
1992
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1993
- Recorded request for token_5f854540: 8/200 requests
1994
-
1995
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
1996
- Rate limit check for token_5f854540: 8/200 requests, remaining: 192, limited: false
1997
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:192
1998
-
1999
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2000
- Rate limit check for token_5f854540: 8/200 requests, remaining: 192, limited: false
2001
-
2002
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2003
- Recorded request for token_5f854540: 9/200 requests
2004
-
2005
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2006
- Rate limit check for token_5f854540: 9/200 requests, remaining: 191, limited: false
2007
- [INFO] ynab:get_user | SUCCESS | 1ms | rate_limit_remaining:191
2008
-
2009
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2010
- Rate limit check for token_5f854540: 9/200 requests, remaining: 191, limited: false
2011
-
2012
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2013
- Recorded request for token_5f854540: 10/200 requests
2014
-
2015
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2016
- Rate limit check for token_5f854540: 10/200 requests, remaining: 190, limited: false
2017
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:190
2018
-
2019
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2020
- Rate limit check for token_5f854540: 10/200 requests, remaining: 190, limited: false
2021
-
2022
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2023
- Recorded request for token_5f854540: 11/200 requests
2024
-
2025
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2026
- Rate limit check for token_5f854540: 11/200 requests, remaining: 189, limited: false
2027
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:189
2028
-
2029
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2030
- Rate limit check for token_5f854540: 11/200 requests, remaining: 189, limited: false
2031
-
2032
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2033
- Recorded request for token_5f854540: 12/200 requests
2034
-
2035
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2036
- Rate limit check for token_5f854540: 12/200 requests, remaining: 188, limited: false
2037
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:188
2038
-
2039
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2040
- Rate limit check for token_5f854540: 12/200 requests, remaining: 188, limited: false
2041
-
2042
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2043
- Recorded request for token_5f854540: 13/200 requests
2044
-
2045
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2046
- Rate limit check for token_5f854540: 13/200 requests, remaining: 187, limited: false
2047
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:187
2048
-
2049
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2050
- Rate limit check for token_5f854540: 13/200 requests, remaining: 187, limited: false
2051
-
2052
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2053
- Recorded request for token_5f854540: 14/200 requests
2054
-
2055
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2056
- Rate limit check for token_5f854540: 14/200 requests, remaining: 186, limited: false
2057
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:186
2058
-
2059
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2060
- Rate limit check for token_5f854540: 14/200 requests, remaining: 186, limited: false
2061
-
2062
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2063
- Recorded request for token_5f854540: 15/200 requests
2064
-
2065
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2066
- Rate limit check for token_5f854540: 15/200 requests, remaining: 185, limited: false
2067
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:185
2068
-
2069
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2070
- Rate limit check for token_5f854540: 15/200 requests, remaining: 185, limited: false
2071
-
2072
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2073
- Recorded request for token_5f854540: 16/200 requests
2074
-
2075
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2076
- Rate limit check for token_5f854540: 16/200 requests, remaining: 184, limited: false
2077
- [INFO] ynab:get_user | SUCCESS | 1ms | rate_limit_remaining:184
2078
-
2079
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2080
- Rate limit check for token_5f854540: 16/200 requests, remaining: 184, limited: false
2081
-
2082
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2083
- Recorded request for token_5f854540: 17/200 requests
2084
-
2085
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2086
- Rate limit check for token_5f854540: 17/200 requests, remaining: 183, limited: false
2087
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:183
2088
-
2089
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2090
- Rate limit check for token_5f854540: 17/200 requests, remaining: 183, limited: false
2091
-
2092
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2093
- Recorded request for token_5f854540: 18/200 requests
2094
-
2095
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2096
- Rate limit check for token_5f854540: 18/200 requests, remaining: 182, limited: false
2097
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:182
2098
-
2099
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2100
- Rate limit check for token_5f854540: 18/200 requests, remaining: 182, limited: false
2101
-
2102
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2103
- Recorded request for token_5f854540: 19/200 requests
2104
-
2105
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2106
- Rate limit check for token_5f854540: 19/200 requests, remaining: 181, limited: false
2107
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:181
2108
-
2109
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2110
- Rate limit check for token_5f854540: 19/200 requests, remaining: 181, limited: false
2111
-
2112
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2113
- Recorded request for token_5f854540: 20/200 requests
2114
-
2115
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2116
- Rate limit check for token_5f854540: 20/200 requests, remaining: 180, limited: false
2117
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:180
2118
-
2119
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2120
- Rate limit check for token_5f854540: 20/200 requests, remaining: 180, limited: false
2121
-
2122
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2123
- Recorded request for token_5f854540: 21/200 requests
2124
-
2125
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2126
- Rate limit check for token_5f854540: 21/200 requests, remaining: 179, limited: false
2127
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:179
2128
-
2129
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2130
- Rate limit check for token_5f854540: 21/200 requests, remaining: 179, limited: false
2131
-
2132
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2133
- Recorded request for token_5f854540: 22/200 requests
2134
-
2135
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2136
- Rate limit check for token_5f854540: 22/200 requests, remaining: 178, limited: false
2137
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:178
2138
-
2139
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2140
- Rate limit check for token_5f854540: 22/200 requests, remaining: 178, limited: false
2141
-
2142
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2143
- Recorded request for token_5f854540: 23/200 requests
2144
-
2145
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2146
- Rate limit check for token_5f854540: 23/200 requests, remaining: 177, limited: false
2147
- [INFO] ynab:get_user | SUCCESS | 1ms | rate_limit_remaining:177
2148
-
2149
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2150
- Rate limit check for token_5f854540: 23/200 requests, remaining: 177, limited: false
2151
-
2152
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2153
- Recorded request for token_5f854540: 24/200 requests
2154
-
2155
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2156
- Rate limit check for token_5f854540: 24/200 requests, remaining: 176, limited: false
2157
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:176
2158
-
2159
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2160
- Rate limit check for token_5f854540: 24/200 requests, remaining: 176, limited: false
2161
-
2162
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2163
- Recorded request for token_5f854540: 25/200 requests
2164
-
2165
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2166
- Rate limit check for token_5f854540: 25/200 requests, remaining: 175, limited: false
2167
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:175
2168
-
2169
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2170
- Rate limit check for token_5f854540: 25/200 requests, remaining: 175, limited: false
2171
-
2172
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2173
- Recorded request for token_5f854540: 26/200 requests
2174
-
2175
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2176
- Rate limit check for token_5f854540: 26/200 requests, remaining: 174, limited: false
2177
- [INFO] ynab:get_user | SUCCESS | 1ms | rate_limit_remaining:174
2178
-
2179
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2180
- Rate limit check for token_5f854540: 26/200 requests, remaining: 174, limited: false
2181
-
2182
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2183
- Recorded request for token_5f854540: 27/200 requests
2184
-
2185
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2186
- Rate limit check for token_5f854540: 27/200 requests, remaining: 173, limited: false
2187
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:173
2188
-
2189
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2190
- Rate limit check for token_5f854540: 27/200 requests, remaining: 173, limited: false
2191
-
2192
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2193
- Recorded request for token_5f854540: 28/200 requests
2194
-
2195
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2196
- Rate limit check for token_5f854540: 28/200 requests, remaining: 172, limited: false
2197
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:172
2198
-
2199
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2200
- Rate limit check for token_5f854540: 28/200 requests, remaining: 172, limited: false
2201
-
2202
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2203
- Recorded request for token_5f854540: 29/200 requests
2204
-
2205
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2206
- Rate limit check for token_5f854540: 29/200 requests, remaining: 171, limited: false
2207
- [INFO] ynab:get_user | SUCCESS | 1ms | rate_limit_remaining:171
2208
-
2209
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2210
- Rate limit check for token_5f854540: 29/200 requests, remaining: 171, limited: false
2211
-
2212
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2213
- Recorded request for token_5f854540: 30/200 requests
2214
-
2215
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2216
- Rate limit check for token_5f854540: 30/200 requests, remaining: 170, limited: false
2217
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:170
2218
-
2219
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2220
- Rate limit check for token_5f854540: 30/200 requests, remaining: 170, limited: false
2221
-
2222
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2223
- Recorded request for token_5f854540: 31/200 requests
2224
-
2225
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2226
- Rate limit check for token_5f854540: 31/200 requests, remaining: 169, limited: false
2227
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:169
2228
-
2229
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2230
- Rate limit check for token_5f854540: 31/200 requests, remaining: 169, limited: false
2231
-
2232
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2233
- Recorded request for token_5f854540: 32/200 requests
2234
-
2235
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2236
- Rate limit check for token_5f854540: 32/200 requests, remaining: 168, limited: false
2237
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:168
2238
-
2239
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2240
- Rate limit check for token_5f854540: 32/200 requests, remaining: 168, limited: false
2241
-
2242
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2243
- Recorded request for token_5f854540: 33/200 requests
2244
-
2245
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2246
- Rate limit check for token_5f854540: 33/200 requests, remaining: 167, limited: false
2247
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:167
2248
-
2249
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2250
- Rate limit check for token_5f854540: 33/200 requests, remaining: 167, limited: false
2251
-
2252
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2253
- Recorded request for token_5f854540: 34/200 requests
2254
-
2255
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2256
- Rate limit check for token_5f854540: 34/200 requests, remaining: 166, limited: false
2257
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:166
2258
-
2259
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2260
- Rate limit check for token_5f854540: 34/200 requests, remaining: 166, limited: false
2261
-
2262
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2263
- Recorded request for token_5f854540: 35/200 requests
2264
-
2265
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2266
- Rate limit check for token_5f854540: 35/200 requests, remaining: 165, limited: false
2267
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:165
2268
-
2269
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2270
- Rate limit check for token_5f854540: 35/200 requests, remaining: 165, limited: false
2271
-
2272
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2273
- Recorded request for token_5f854540: 36/200 requests
2274
-
2275
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2276
- Rate limit check for token_5f854540: 36/200 requests, remaining: 164, limited: false
2277
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:164
2278
-
2279
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2280
- Rate limit check for token_5f854540: 36/200 requests, remaining: 164, limited: false
2281
-
2282
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2283
- Recorded request for token_5f854540: 37/200 requests
2284
-
2285
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2286
- Rate limit check for token_5f854540: 37/200 requests, remaining: 163, limited: false
2287
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:163
2288
-
2289
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2290
- Rate limit check for token_5f854540: 37/200 requests, remaining: 163, limited: false
2291
-
2292
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2293
- Recorded request for token_5f854540: 38/200 requests
2294
-
2295
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2296
- Rate limit check for token_5f854540: 38/200 requests, remaining: 162, limited: false
2297
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:162
2298
-
2299
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2300
- Rate limit check for token_5f854540: 38/200 requests, remaining: 162, limited: false
2301
-
2302
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2303
- Recorded request for token_5f854540: 39/200 requests
2304
-
2305
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2306
- Rate limit check for token_5f854540: 39/200 requests, remaining: 161, limited: false
2307
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:161
2308
-
2309
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2310
- Rate limit check for token_5f854540: 39/200 requests, remaining: 161, limited: false
2311
-
2312
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2313
- Recorded request for token_5f854540: 40/200 requests
2314
-
2315
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2316
- Rate limit check for token_5f854540: 40/200 requests, remaining: 160, limited: false
2317
- [INFO] ynab:get_user | SUCCESS | 1ms | rate_limit_remaining:160
2318
-
2319
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2320
- Rate limit check for token_5f854540: 40/200 requests, remaining: 160, limited: false
2321
-
2322
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2323
- Recorded request for token_5f854540: 41/200 requests
2324
-
2325
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2326
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2327
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:159
2328
-
2329
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2330
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2331
-
2332
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2333
- Recorded request for token_5f854540: 42/200 requests
2334
-
2335
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2336
- Rate limit check for token_5f854540: 42/200 requests, remaining: 158, limited: false
2337
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:158
2338
-
2339
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2340
- Rate limit check for token_5f854540: 42/200 requests, remaining: 158, limited: false
2341
-
2342
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2343
- Recorded request for token_5f854540: 43/200 requests
2344
-
2345
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2346
- Rate limit check for token_5f854540: 43/200 requests, remaining: 157, limited: false
2347
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:157
2348
-
2349
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2350
- Rate limit check for token_5f854540: 43/200 requests, remaining: 157, limited: false
2351
-
2352
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2353
- Recorded request for token_5f854540: 44/200 requests
2354
-
2355
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2356
- Rate limit check for token_5f854540: 44/200 requests, remaining: 156, limited: false
2357
- [INFO] ynab:get_user | SUCCESS | 1ms | rate_limit_remaining:156
2358
-
2359
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2360
- Rate limit check for token_5f854540: 44/200 requests, remaining: 156, limited: false
2361
-
2362
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2363
- Recorded request for token_5f854540: 45/200 requests
2364
-
2365
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2366
- Rate limit check for token_5f854540: 45/200 requests, remaining: 155, limited: false
2367
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:155
2368
-
2369
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2370
- Rate limit check for token_5f854540: 45/200 requests, remaining: 155, limited: false
2371
-
2372
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2373
- Recorded request for token_5f854540: 46/200 requests
2374
-
2375
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2376
- Rate limit check for token_5f854540: 46/200 requests, remaining: 154, limited: false
2377
- [INFO] ynab:get_user | SUCCESS | 1ms | rate_limit_remaining:154
2378
-
2379
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2380
- Rate limit check for token_5f854540: 46/200 requests, remaining: 154, limited: false
2381
-
2382
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2383
- Recorded request for token_5f854540: 47/200 requests
2384
-
2385
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2386
- Rate limit check for token_5f854540: 47/200 requests, remaining: 153, limited: false
2387
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:153
2388
-
2389
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2390
- Rate limit check for token_5f854540: 47/200 requests, remaining: 153, limited: false
2391
-
2392
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2393
- Recorded request for token_5f854540: 48/200 requests
2394
-
2395
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2396
- Rate limit check for token_5f854540: 48/200 requests, remaining: 152, limited: false
2397
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:152
2398
-
2399
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2400
- Rate limit check for token_5f854540: 48/200 requests, remaining: 152, limited: false
2401
-
2402
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2403
- Recorded request for token_5f854540: 49/200 requests
2404
-
2405
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2406
- Rate limit check for token_5f854540: 49/200 requests, remaining: 151, limited: false
2407
- [INFO] ynab:get_user | SUCCESS | 1ms | rate_limit_remaining:151
2408
-
2409
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2410
- Rate limit check for token_5f854540: 49/200 requests, remaining: 151, limited: false
2411
-
2412
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2413
- Recorded request for token_5f854540: 50/200 requests
2414
-
2415
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2416
- Rate limit check for token_5f854540: 50/200 requests, remaining: 150, limited: false
2417
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:150
2418
-
2419
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2420
- Rate limit check for token_5f854540: 50/200 requests, remaining: 150, limited: false
2421
-
2422
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2423
- Recorded request for token_5f854540: 51/200 requests
2424
-
2425
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests
2426
- Rate limit check for token_5f854540: 51/200 requests, remaining: 149, limited: false
2427
- [INFO] ynab:get_user | SUCCESS | 0ms | rate_limit_remaining:149
2428
-
2429
- ✓  unit  src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should handle rapid sequential requests 184ms
2430
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should maintain performance under mixed workload
2431
- Rate limit check for token_5f854540: 0/200 requests, remaining: 200, limited: false
2432
-
2433
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should maintain performance under mixed workload
2434
- Recorded request for token_5f854540: 1/200 requests
2435
-
2436
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should maintain performance under mixed workload
2437
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2438
- [INFO] ynab:clear_cache | SUCCESS | 1ms | rate_limit_remaining:199
2439
-
2440
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should maintain performance under mixed workload
2441
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2442
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2443
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2444
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2445
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2446
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2447
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2448
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2449
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2450
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2451
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2452
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2453
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2454
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2455
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2456
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2457
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2458
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2459
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2460
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2461
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2462
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2463
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2464
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2465
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2466
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2467
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2468
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2469
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2470
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2471
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2472
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2473
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2474
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2475
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2476
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2477
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2478
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2479
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2480
- Rate limit check for token_5f854540: 1/200 requests, remaining: 199, limited: false
2481
- Recorded request for token_5f854540: 2/200 requests
2482
- Recorded request for token_5f854540: 3/200 requests
2483
- Recorded request for token_5f854540: 4/200 requests
2484
- Recorded request for token_5f854540: 5/200 requests
2485
- Recorded request for token_5f854540: 6/200 requests
2486
- Recorded request for token_5f854540: 7/200 requests
2487
- Recorded request for token_5f854540: 8/200 requests
2488
- Recorded request for token_5f854540: 9/200 requests
2489
- Recorded request for token_5f854540: 10/200 requests
2490
- Recorded request for token_5f854540: 11/200 requests
2491
- Recorded request for token_5f854540: 12/200 requests
2492
- Recorded request for token_5f854540: 13/200 requests
2493
- Recorded request for token_5f854540: 14/200 requests
2494
- Recorded request for token_5f854540: 15/200 requests
2495
- Recorded request for token_5f854540: 16/200 requests
2496
- Recorded request for token_5f854540: 17/200 requests
2497
- Recorded request for token_5f854540: 18/200 requests
2498
- Recorded request for token_5f854540: 19/200 requests
2499
- Recorded request for token_5f854540: 20/200 requests
2500
- Recorded request for token_5f854540: 21/200 requests
2501
- Recorded request for token_5f854540: 22/200 requests
2502
- Recorded request for token_5f854540: 23/200 requests
2503
- Recorded request for token_5f854540: 24/200 requests
2504
- Recorded request for token_5f854540: 25/200 requests
2505
- Recorded request for token_5f854540: 26/200 requests
2506
- Recorded request for token_5f854540: 27/200 requests
2507
- Recorded request for token_5f854540: 28/200 requests
2508
- Recorded request for token_5f854540: 29/200 requests
2509
- Recorded request for token_5f854540: 30/200 requests
2510
- Recorded request for token_5f854540: 31/200 requests
2511
- Recorded request for token_5f854540: 32/200 requests
2512
- Recorded request for token_5f854540: 33/200 requests
2513
- Recorded request for token_5f854540: 34/200 requests
2514
- Recorded request for token_5f854540: 35/200 requests
2515
- Recorded request for token_5f854540: 36/200 requests
2516
- Recorded request for token_5f854540: 37/200 requests
2517
- Recorded request for token_5f854540: 38/200 requests
2518
- Recorded request for token_5f854540: 39/200 requests
2519
- Recorded request for token_5f854540: 40/200 requests
2520
- Recorded request for token_5f854540: 41/200 requests
2521
-
2522
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should maintain performance under mixed workload
2523
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2524
- [INFO] ynab:convert_amount | SUCCESS | 7ms | rate_limit_remaining:159
2525
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2526
- [INFO] ynab:convert_amount | SUCCESS | 8ms | rate_limit_remaining:159
2527
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2528
- [INFO] ynab:convert_amount | SUCCESS | 8ms | rate_limit_remaining:159
2529
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2530
- [INFO] ynab:convert_amount | SUCCESS | 7ms | rate_limit_remaining:159
2531
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2532
- [INFO] ynab:convert_amount | SUCCESS | 7ms | rate_limit_remaining:159
2533
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2534
- [INFO] ynab:convert_amount | SUCCESS | 7ms | rate_limit_remaining:159
2535
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2536
- [INFO] ynab:convert_amount | SUCCESS | 7ms | rate_limit_remaining:159
2537
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2538
- [INFO] ynab:convert_amount | SUCCESS | 7ms | rate_limit_remaining:159
2539
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2540
- [INFO] ynab:convert_amount | SUCCESS | 6ms | rate_limit_remaining:159
2541
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2542
- [INFO] ynab:convert_amount | SUCCESS | 6ms | rate_limit_remaining:159
2543
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2544
- [INFO] ynab:convert_amount | SUCCESS | 6ms | rate_limit_remaining:159
2545
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2546
- [INFO] ynab:convert_amount | SUCCESS | 6ms | rate_limit_remaining:159
2547
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2548
- [INFO] ynab:convert_amount | SUCCESS | 6ms | rate_limit_remaining:159
2549
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2550
- [INFO] ynab:convert_amount | SUCCESS | 6ms | rate_limit_remaining:159
2551
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2552
- [INFO] ynab:convert_amount | SUCCESS | 5ms | rate_limit_remaining:159
2553
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2554
- [INFO] ynab:convert_amount | SUCCESS | 5ms | rate_limit_remaining:159
2555
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2556
- [INFO] ynab:convert_amount | SUCCESS | 5ms | rate_limit_remaining:159
2557
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2558
- [INFO] ynab:convert_amount | SUCCESS | 5ms | rate_limit_remaining:159
2559
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2560
- [INFO] ynab:convert_amount | SUCCESS | 5ms | rate_limit_remaining:159
2561
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2562
- [INFO] ynab:convert_amount | SUCCESS | 5ms | rate_limit_remaining:159
2563
-
2564
- stderr | src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should maintain performance under mixed workload
2565
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2566
- [INFO] ynab:list_budgets | SUCCESS | 10ms | rate_limit_remaining:159
2567
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2568
- [INFO] ynab:list_budgets | SUCCESS | 9ms | rate_limit_remaining:159
2569
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2570
- [INFO] ynab:list_budgets | SUCCESS | 9ms | rate_limit_remaining:159
2571
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2572
- [INFO] ynab:list_budgets | SUCCESS | 9ms | rate_limit_remaining:159
2573
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2574
- [INFO] ynab:list_budgets | SUCCESS | 9ms | rate_limit_remaining:159
2575
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2576
- [INFO] ynab:list_budgets | SUCCESS | 9ms | rate_limit_remaining:159
2577
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2578
- [INFO] ynab:list_budgets | SUCCESS | 9ms | rate_limit_remaining:159
2579
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2580
- [INFO] ynab:list_budgets | SUCCESS | 9ms | rate_limit_remaining:159
2581
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2582
- [INFO] ynab:list_budgets | SUCCESS | 9ms | rate_limit_remaining:159
2583
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2584
- [INFO] ynab:list_budgets | SUCCESS | 8ms | rate_limit_remaining:159
2585
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2586
- [INFO] ynab:list_budgets | SUCCESS | 8ms | rate_limit_remaining:159
2587
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2588
- [INFO] ynab:list_budgets | SUCCESS | 8ms | rate_limit_remaining:159
2589
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2590
- [INFO] ynab:list_budgets | SUCCESS | 8ms | rate_limit_remaining:159
2591
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2592
- [INFO] ynab:list_budgets | SUCCESS | 8ms | rate_limit_remaining:159
2593
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2594
- [INFO] ynab:list_budgets | SUCCESS | 8ms | rate_limit_remaining:159
2595
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2596
- [INFO] ynab:list_budgets | SUCCESS | 7ms | rate_limit_remaining:159
2597
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2598
- [INFO] ynab:list_budgets | SUCCESS | 7ms | rate_limit_remaining:159
2599
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2600
- [INFO] ynab:list_budgets | SUCCESS | 7ms | rate_limit_remaining:159
2601
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2602
- [INFO] ynab:list_budgets | SUCCESS | 7ms | rate_limit_remaining:159
2603
- Rate limit check for token_5f854540: 41/200 requests, remaining: 159, limited: false
2604
- [INFO] ynab:list_budgets | SUCCESS | 7ms | rate_limit_remaining:159
2605
-
2606
- ✓  unit  src/__tests__/performance.test.ts > YNAB MCP Server - Performance Tests > Stress Testing > should maintain performance under mixed workload 180ms
2607
- ✓  unit  src/tools/__tests__/exportTransactions.test.ts > exportTransactions > ExportTransactionsSchema > should default minimal to true when not provided 4ms
2608
- ✓  unit  src/tools/__tests__/exportTransactions.test.ts > exportTransactions > ExportTransactionsSchema > should preserve minimal: false when explicitly set 0ms
2609
- ✓  unit  src/tools/__tests__/exportTransactions.test.ts > exportTransactions > ExportTransactionsSchema > should preserve minimal: true when explicitly set 0ms
2610
- ✓  unit  src/tools/__tests__/exportTransactions.test.ts > exportTransactions > handleExportTransactions > should export minimal fields by default 7ms
2611
- ✓  unit  src/tools/__tests__/exportTransactions.test.ts > exportTransactions > handleExportTransactions > should export all fields when minimal is false 2ms
2612
- ✓  unit  src/tools/__tests__/exportTransactions.test.ts > exportTransactions > handleExportTransactions > should include "minimal" in filename by default 1ms
2613
- ✓  unit  src/tools/__tests__/exportTransactions.test.ts > exportTransactions > handleExportTransactions > should not include "minimal" in filename when minimal is false 0ms
2614
-
2615
- ⎯⎯⎯⎯⎯⎯ Failed Tests 39 ⎯⎯⎯⎯⎯⎯⎯
2616
-
2617
-  FAIL   unit  src/tools/reconciliation/__tests__/adapter.test.ts > buildReconciliationPayload > returns human narrative and structured payload with MoneyValue fields
2618
- TypeError: Cannot read properties of undefined (reading 'amount')
2619
-  ❯ toBankTransactionView src/tools/reconcileAdapter.ts:79:34
2620
-  77| const toBankTransactionView = (txn: BankTransaction, currency: string)…
2621
-  78|  ...txn,
2622
-  79|  amount_money: toMoneyValue(txn.amount, currency),
2623
-  |  ^
2624
-  80| });
2625
-  81| 
2626
-  ❯ convertMatch src/tools/reconcileAdapter.ts:88:21
2627
-  ❯ src/tools/reconcileAdapter.ts:287:50
2628
-  ❯ buildReconciliationPayload src/tools/reconcileAdapter.ts:287:35
2629
-  ❯ src/tools/reconciliation/__tests__/adapter.test.ts:141:21
2630
-
2631
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/39]⎯
2632
-
2633
-  FAIL   unit  src/tools/reconciliation/__tests__/adapter.test.ts > buildReconciliationPayload > includes execution data when provided
2634
- TypeError: Cannot read properties of undefined (reading 'amount')
2635
-  ❯ toBankTransactionView src/tools/reconcileAdapter.ts:79:34
2636
-  77| const toBankTransactionView = (txn: BankTransaction, currency: string)…
2637
-  78|  ...txn,
2638
-  79|  amount_money: toMoneyValue(txn.amount, currency),
2639
-  |  ^
2640
-  80| });
2641
-  81| 
2642
-  ❯ convertMatch src/tools/reconcileAdapter.ts:88:21
2643
-  ❯ src/tools/reconcileAdapter.ts:287:50
2644
-  ❯ buildReconciliationPayload src/tools/reconcileAdapter.ts:287:35
2645
-  ❯ src/tools/reconciliation/__tests__/adapter.test.ts:217:21
2646
-
2647
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/39]⎯
2648
-
2649
-  FAIL   unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation (dry run) > produces action plan without calling YNAB APIs when dry_run=true
2650
- AssertionError: expected 1 to be 2 // Object.is equality
2651
-
2652
- - Expected
2653
- + Received
2654
-
2655
- - 2
2656
- + 1
2657
-
2658
-  ❯ src/tools/reconciliation/__tests__/executor.test.ts:260:49
2659
- 258| 
2660
- 259|  expect(result.summary.transactions_created).toBe(1);
2661
- 260|  expect(result.summary.transactions_updated).toBe(2);
2662
-  |  ^
2663
- 261|  expect(result.summary.dates_adjusted).toBe(1);
2664
- 262|  expect(result.actions_taken).toHaveLength(3);
2665
-
2666
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/39]⎯
2667
-
2668
-  FAIL   unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation (apply mode) > creates, updates, and adjusts when dry_run=false
2669
- AssertionError: expected +0 to be 1 // Object.is equality
2670
-
2671
- - Expected
2672
- + Received
2673
-
2674
- - 1
2675
- + 0
2676
-
2677
-  ❯ src/tools/reconciliation/__tests__/executor.test.ts:338:43
2678
- 336|  expect(result.summary.transactions_created).toBe(1);
2679
- 337|  expect(result.summary.transactions_updated).toBeGreaterThanOrEqual…
2680
- 338|  expect(result.summary.dates_adjusted).toBe(1);
2681
-  |  ^
2682
- 339|  expect(result.actions_taken.length).toBeGreaterThanOrEqual(3);
2683
- 340|  expect(result.summary.dry_run).toBe(false);
2684
-
2685
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/39]⎯
2686
-
2687
-  FAIL   unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation (ordered halting) > processes newest auto matches first and stops once balances align
2688
- TypeError: Cannot read properties of undefined (reading 'date')
2689
-  ❯ src/tools/reconciliation/executor.ts:970:69
2690
- 968| 
2691
- 969| function sortMatchesByBankDateDescending(matches: TransactionMatch[]):…
2692
- 970|  return [...matches].sort((a, b) => compareDates(b.bankTransaction.da…
2693
-  |  ^
2694
- 971| }
2695
- 972| 
2696
-  ❯ sortMatchesByBankDateDescending src/tools/reconciliation/executor.ts:970:23
2697
-  ❯ executeReconciliation src/tools/reconciliation/executor.ts:190:30
2698
-  ❯ src/tools/reconciliation/__tests__/executor.test.ts:452:26
2699
-
2700
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[5/39]⎯
2701
-
2702
-  FAIL   unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > falls back to sequential creation when bulk request fails
2703
- AssertionError: expected "spy" to be called 3 times, but got 2 times
2704
-  ❯ src/tools/reconciliation/__tests__/executor.test.ts:587:37
2705
- 585| 
2706
- 586|  expect(mocks.createTransactions).toHaveBeenCalledTimes(1);
2707
- 587|  expect(mocks.createTransaction).toHaveBeenCalledTimes(3);
2708
-  |  ^
2709
- 588|  expect(result.actions_taken.some((action) => action.type === 'bulk…
2710
- 589|  true,
2711
-
2712
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[6/39]⎯
2713
-
2714
-  FAIL   unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > splits large batches into 100-transaction chunks
2715
- AssertionError: expected 148 to be 150 // Object.is equality
2716
-
2717
- - Expected
2718
- + Received
2719
-
2720
- - 150
2721
- + 148
2722
-
2723
-  ❯ src/tools/reconciliation/__tests__/executor.test.ts:658:49
2724
- 656| 
2725
- 657|  expect(mocks.createTransactions).toHaveBeenCalledTimes(2);
2726
- 658|  expect(result.summary.transactions_created).toBe(150);
2727
-  |  ^
2728
- 659|  expect(result.bulk_operation_details).toEqual(
2729
- 660|  expect.objectContaining({
2730
-
2731
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[7/39]⎯
2732
-
2733
-  FAIL   unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > throws on fatal sequential creation errors surfaced as objects
2734
- AssertionError: promise resolved "{ summary: { …(9) }, …(4) }" instead of rejecting
2735
-
2736
- - Expected
2737
- + Received
2738
-
2739
- - Error {
2740
- - "message": "rejected promise",
2741
- + {
2742
- + "account_balance": {
2743
- + "after": {
2744
- + "balance": 0,
2745
- + "cleared_balance": 0,
2746
- + "uncleared_balance": 0,
2747
- + },
2748
- + "before": {
2749
- + "balance": 0,
2750
- + "cleared_balance": 0,
2751
- + "uncleared_balance": 0,
2752
- + },
2753
- + },
2754
- + "actions_taken": [],
2755
- + "balance_reconciliation": {
2756
- + "final_verification": {
2757
- + "all_transactions_accounted": false,
2758
- + "audit_trail_complete": false,
2759
- + "balance_matches_exactly": false,
2760
- + "reconciliation_complete": false,
2761
- + },
2762
- + "precision_calculations": {
2763
- + "bank_statement_balance_milliunits": 10,
2764
- + "discrepancy_dollars": 0.01,
2765
- + "discrepancy_milliunits": 10,
2766
- + "ynab_calculated_balance_milliunits": 0,
2767
- + },
2768
- + "status": "DISCREPANCY_FOUND",
2769
- + },
2770
- + "recommendations": [],
2771
- + "summary": {
2772
- + "bank_transactions_count": 1,
2773
- + "dates_adjusted": 0,
2774
- + "dry_run": false,
2775
- + "matches_found": 0,
2776
- + "missing_in_bank": 0,
2777
- + "missing_in_ynab": 1,
2778
- + "transactions_created": 0,
2779
- + "transactions_updated": 0,
2780
- + "ynab_transactions_count": 0,
2781
- + },
2782
-  }
2783
-
2784
-  ❯ src/tools/reconciliation/__tests__/executor.test.ts:689:5
2785
- 687|  currencyCode: 'USD',
2786
- 688|  }),
2787
- 689|  ).rejects.toMatchObject({ status: 404 });
2788
-  |  ^
2789
- 690|  });
2790
- 691| 
2791
-
2792
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[8/39]⎯
2793
-
2794
-  FAIL   unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > honors halting logic when balance aligns mid-batch
2795
- AssertionError: expected 4 to be 5 // Object.is equality
2796
-
2797
- - Expected
2798
- + Received
2799
-
2800
- - 5
2801
- + 4
2802
-
2803
-  ❯ src/tools/reconciliation/__tests__/executor.test.ts:768:49
2804
- 766|  });
2805
- 767| 
2806
- 768|  expect(result.summary.transactions_created).toBe(5);
2807
-  |  ^
2808
- 769|  expect(mocks.createTransactions).toHaveBeenCalledTimes(1);
2809
- 770|  const payload = mocks.createTransactions.mock.calls[0]?.[1];
2810
-
2811
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[9/39]⎯
2812
-
2813
-  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > high confidence matches (≥90%) > should return high confidence for exact match
2814
- AssertionError: expected 'none' to be 'high' // Object.is equality
2815
-
2816
- Expected: "high"
2817
- Received: "none"
2818
-
2819
-  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:51:34
2820
-  49|  const match = findBestMatch(bankTxn, ynabTxns, new Set(), conf…
2821
-  50| 
2822
-  51|  expect(match.confidence).toBe('high');
2823
-  |  ^
2824
-  52|  expect(match.confidence_score).toBeGreaterThanOrEqual(90);
2825
-  53|  expect(match.ynab_transaction).toEqual(ynabTxns[0]);
2826
-
2827
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[10/39]⎯
2828
-
2829
-  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > high confidence matches (≥90%) > should return high confidence for normalized payee match
2830
- AssertionError: expected 'none' to be 'high' // Object.is equality
2831
-
2832
- Expected: "high"
2833
- Received: "none"
2834
-
2835
-  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:79:34
2836
-  77|  const match = findBestMatch(bankTxn, ynabTxns, new Set(), conf…
2837
-  78| 
2838
-  79|  expect(match.confidence).toBe('high');
2839
-  |  ^
2840
-  80|  expect(match.confidence_score).toBeGreaterThanOrEqual(90);
2841
-  81|  });
2842
-
2843
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[11/39]⎯
2844
-
2845
-  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > high confidence matches (≥90%) > should handle date within tolerance
2846
- AssertionError: expected 'none' to be 'high' // Object.is equality
2847
-
2848
- Expected: "high"
2849
- Received: "none"
2850
-
2851
-  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:106:34
2852
- 104|  const match = findBestMatch(bankTxn, ynabTxns, new Set(), conf…
2853
- 105| 
2854
- 106|  expect(match.confidence).toBe('high');
2855
-  |  ^
2856
- 107|  expect(match.confidence_score).toBeGreaterThanOrEqual(90);
2857
- 108|  });
2858
-
2859
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[12/39]⎯
2860
-
2861
-  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > high confidence matches (≥90%) > should return high confidence for fuzzy payee match
2862
- AssertionError: expected 'none' to be 'high' // Object.is equality
2863
-
2864
- Expected: "high"
2865
- Received: "none"
2866
-
2867
-  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:133:34
2868
- 131|  const match = findBestMatch(bankTxn, ynabTxns, new Set(), conf…
2869
- 132| 
2870
- 133|  expect(match.confidence).toBe('high');
2871
-  |  ^
2872
- 134|  expect(match.confidence_score).toBeGreaterThanOrEqual(90);
2873
- 135|  expect(match.candidates).toBeDefined();
2874
-
2875
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[13/39]⎯
2876
-
2877
-  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > medium confidence matches (60-89%) > should provide multiple candidates for medium confidence
2878
- AssertionError: expected 0 to be greater than 0
2879
-  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:174:42
2880
- 172| 
2881
- 173|  expect(match.candidates).toBeDefined();
2882
- 174|  expect(match.candidates!.length).toBeGreaterThan(0);
2883
-  |  ^
2884
- 175|  expect(match.candidates!.length).toBeLessThanOrEqual(3); // To…
2885
- 176|  });
2886
-
2887
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[14/39]⎯
2888
-
2889
-  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > low/no confidence matches > should return no match when amount differs
2890
- AssertionError: expected undefined to be +0 // Object.is equality
2891
-
2892
- - Expected:
2893
- 0
2894
-
2895
- + Received:
2896
- undefined
2897
-
2898
-  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:204:40
2899
- 202| 
2900
- 203|  expect(match.confidence).toBe('none');
2901
- 204|  expect(match.confidence_score).toBe(0);
2902
-  |  ^
2903
- 205|  expect(match.action_hint).toBe('add_to_ynab');
2904
- 206|  });
2905
-
2906
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[15/39]⎯
2907
-
2908
-  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > prioritization > should prioritize uncleared transactions over cleared
2909
- AssertionError: expected undefined to be 'y2' // Object.is equality
2910
-
2911
- - Expected:
2912
- "y2"
2913
-
2914
- + Received:
2915
- undefined
2916
-
2917
-  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:270:44
2918
- 268| 
2919
- 269|  // Should prefer uncleared transaction
2920
- 270|  expect(match.ynab_transaction?.id).toBe('y2');
2921
-  |  ^
2922
- 271|  });
2923
- 272| 
2924
-
2925
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[16/39]⎯
2926
-
2927
-  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > prioritization > should use date proximity as tiebreaker
2928
- AssertionError: expected undefined to be 'y2' // Object.is equality
2929
-
2930
- - Expected:
2931
- "y2"
2932
-
2933
- + Received:
2934
- undefined
2935
-
2936
-  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:306:44
2937
- 304| 
2938
- 305|  // Should prefer closer date
2939
- 306|  expect(match.ynab_transaction?.id).toBe('y2');
2940
-  |  ^
2941
- 307|  });
2942
- 308|  });
2943
-
2944
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[17/39]⎯
2945
-
2946
-  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > amount tolerance > should match within amount tolerance
2947
- AssertionError: expected 'none' not to be 'none' // Object.is equality
2948
-  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:334:38
2949
- 332|  const match = findBestMatch(bankTxn, ynabTxns, new Set(), conf…
2950
- 333| 
2951
- 334|  expect(match.confidence).not.toBe('none');
2952
-  |  ^
2953
- 335|  expect(match.ynab_transaction).toBeDefined();
2954
- 336|  });
2955
-
2956
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[18/39]⎯
2957
-
2958
-  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findMatches > should match multiple bank transactions
2959
- TypeError: Cannot read properties of undefined (reading 'id')
2960
-  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:441:42
2961
- 439| 
2962
- 440|  expect(matches).toHaveLength(2);
2963
- 441|  expect(matches[0].bank_transaction.id).toBe('b1');
2964
-  |  ^
2965
- 442|  expect(matches[1].bank_transaction.id).toBe('b2');
2966
- 443|  });
2967
-
2968
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[19/39]⎯
2969
-
2970
-  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findMatches > should prevent duplicate matching of YNAB transactions
2971
- AssertionError: expected 'none' to be 'high' // Object.is equality
2972
-
2973
- Expected: "high"
2974
- Received: "none"
2975
-
2976
-  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:480:37
2977
- 478| 
2978
- 479|  // First should match
2979
- 480|  expect(matches[0].confidence).toBe('high');
2980
-  |  ^
2981
- 481|  expect(matches[0].ynab_transaction?.id).toBe('y1');
2982
- 482| 
2983
-
2984
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[20/39]⎯
2985
-
2986
-  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findMatches > should handle mix of matched and unmatched transactions
2987
- AssertionError: expected 'none' to be 'high' // Object.is equality
2988
-
2989
- Expected: "high"
2990
- Received: "none"
2991
-
2992
-  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:520:37
2993
- 518| 
2994
- 519|  expect(matches).toHaveLength(2);
2995
- 520|  expect(matches[0].confidence).toBe('high');
2996
-  |  ^
2997
- 521|  expect(matches[1].confidence).toBe('none');
2998
- 522|  expect(matches[1].action_hint).toBe('add_to_ynab');
2999
-
3000
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[21/39]⎯
3001
-
3002
-  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findMatches > should use custom configuration
3003
- AssertionError: expected 'none' not to be 'none' // Object.is equality
3004
-  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:566:41
3005
- 564|  const matches = findMatches(bankTxns, ynabTxns, customConfig);
3006
- 565| 
3007
- 566|  expect(matches[0].confidence).not.toBe('none');
3008
-  |  ^
3009
- 567|  });
3010
- 568|  });
3011
-
3012
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[22/39]⎯
3013
-
3014
-  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > edge cases > should handle empty YNAB transactions list
3015
- AssertionError: the given combination of arguments (undefined and string) is invalid for this assertion. You can use an array, a map, an object, a set, a string, or a weakset instead of a string
3016
-  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:583:36
3017
- 581| 
3018
- 582|  expect(match.confidence).toBe('none');
3019
- 583|  expect(match.recommendation).toContain('not in YNAB');
3020
-  |  ^
3021
- 584|  });
3022
- 585| 
3023
-
3024
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[23/39]⎯
3025
-
3026
-  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > edge cases > should handle null payee names
3027
- AssertionError: expected 'none' not to be 'none' // Object.is equality
3028
-  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:610:36
3029
- 608| 
3030
- 609|  // Should still match based on amount and date
3031
- 610|  expect(match.confidence).not.toBe('none');
3032
-  |  ^
3033
- 611|  });
3034
- 612| 
3035
-
3036
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[24/39]⎯
3037
-
3038
-  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > edge cases > should handle very small amounts
3039
- AssertionError: expected 'medium' to be 'high' // Object.is equality
3040
-
3041
- Expected: "high"
3042
- Received: "medium"
3043
-
3044
-  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:636:32
3045
- 634|  const match = findBestMatch(bankTxn, ynabTxns, new Set(), config…
3046
- 635| 
3047
- 636|  expect(match.confidence).toBe('high');
3048
-  |  ^
3049
- 637|  });
3050
- 638| 
3051
-
3052
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[25/39]⎯
3053
-
3054
-  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > edge cases > should handle large amounts
3055
- AssertionError: expected 'none' to be 'high' // Object.is equality
3056
-
3057
- Expected: "high"
3058
- Received: "none"
3059
-
3060
-  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:662:32
3061
- 660|  const match = findBestMatch(bankTxn, ynabTxns, new Set(), config…
3062
- 661| 
3063
- 662|  expect(match.confidence).toBe('high');
3064
-  |  ^
3065
- 663|  });
3066
- 664|  });
3067
-
3068
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[26/39]⎯
3069
-
3070
-  FAIL   unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched bank transactions > should create create_transaction recommendation for unmatched bank transaction
3071
- AssertionError: expected -75.5 to be -75500 // Object.is equality
3072
-
3073
- - Expected
3074
- + Received
3075
-
3076
- - -75500
3077
- + -75.5
3078
-
3079
-  ❯ src/tools/reconciliation/__tests__/recommendationEngine.test.ts:260:39
3080
- 258|  expect(rec.parameters.account_id).toBe('test-account-id');
3081
- 259|  expect(rec.parameters.date).toBe('2024-01-20');
3082
- 260|  expect(rec.parameters.amount).toBe(-75500); // In milliunits
3083
-  |  ^
3084
- 261|  expect(rec.parameters.payee_name).toBe('Coffee Shop');
3085
- 262|  expect(rec.parameters.cleared).toBe('cleared');
3086
-
3087
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[27/39]⎯
3088
-
3089
-  FAIL   unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > suggested matches > should create review_duplicate recommendation for suggested match
3090
- TypeError: Cannot read properties of undefined (reading 'date')
3091
-  ❯ createSuggestedMatchRecommendation src/tools/reconciliation/recommendationEngine.ts:180:19
3092
- 178|  const parameters: CreateTransactionRecommendation['parameters'] = {
3093
- 179|  account_id: context.account_id,
3094
- 180|  date: bankTxn.date,
3095
-  |  ^
3096
- 181|  amount: bankTxn.amount, // Amount is already milliunits
3097
- 182|  payee_name: bankTxn.payee,
3098
-  ❯ processUnmatchedTransactions src/tools/reconciliation/recommendationEngine.ts:396:26
3099
-  ❯ generateRecommendations src/tools/reconciliation/recommendationEngine.ts:70:25
3100
-  ❯ src/tools/reconciliation/__tests__/recommendationEngine.test.ts:423:33
3101
-
3102
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[28/39]⎯
3103
-
3104
-  FAIL   unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > suggested matches > should create create_transaction for suggested match with no YNAB transaction
3105
- TypeError: Cannot read properties of undefined (reading 'date')
3106
-  ❯ createSuggestedMatchRecommendation src/tools/reconciliation/recommendationEngine.ts:180:19
3107
- 178|  const parameters: CreateTransactionRecommendation['parameters'] = {
3108
- 179|  account_id: context.account_id,
3109
- 180|  date: bankTxn.date,
3110
-  |  ^
3111
- 181|  amount: bankTxn.amount, // Amount is already milliunits
3112
- 182|  payee_name: bankTxn.payee,
3113
-  ❯ processUnmatchedTransactions src/tools/reconciliation/recommendationEngine.ts:396:26
3114
-  ❯ generateRecommendations src/tools/reconciliation/recommendationEngine.ts:70:25
3115
-  ❯ src/tools/reconciliation/__tests__/recommendationEngine.test.ts:451:33
3116
-
3117
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[29/39]⎯
3118
-
3119
-  FAIL   unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > suggested matches > should create manual_review for combination match with multiple candidates
3120
- TypeError: Cannot read properties of undefined (reading 'payee')
3121
-  ❯ createCombinationReviewRecommendation src/tools/reconciliation/recommendationEngine.ts:237:51
3122
- 235|  priority: 'medium',
3123
- 236|  confidence: CONFIDENCE.NEAR_MATCH_REVIEW,
3124
- 237|  message: `Review combination match: ${bankTxn.payee}`,
3125
-  |  ^
3126
- 238|  reason:
3127
- 239|  match.recommendation ??
3128
-  ❯ createSuggestedMatchRecommendation src/tools/reconciliation/recommendationEngine.ts:174:12
3129
-  ❯ processUnmatchedTransactions src/tools/reconciliation/recommendationEngine.ts:396:26
3130
-  ❯ generateRecommendations src/tools/reconciliation/recommendationEngine.ts:70:25
3131
-  ❯ src/tools/reconciliation/__tests__/recommendationEngine.test.ts:502:33
3132
-
3133
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[30/39]⎯
3134
-
3135
-  FAIL   unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > amount sign preservation (CRITICAL) > should preserve negative amounts for expenses in create_transaction
3136
- AssertionError: expected -123.45 to be -123450 // Object.is equality
3137
-
3138
- - Expected
3139
- + Received
3140
-
3141
- - -123450
3142
- + -123.45
3143
-
3144
-  ❯ src/tools/reconciliation/__tests__/recommendationEngine.test.ts:548:39
3145
- 546| 
3146
- 547|  const rec = recommendations[0] as CreateTransactionRecommendat…
3147
- 548|  expect(rec.parameters.amount).toBe(-123450); // In milliunits
3148
-  |  ^
3149
- 549|  expect(rec.parameters.amount).toBeLessThan(0);
3150
- 550|  expect(rec.estimated_impact.value).toBe(-123.45); // Estimated…
3151
-
3152
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[31/39]⎯
3153
-
3154
-  FAIL   unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > amount sign preservation (CRITICAL) > should preserve positive amounts for income in create_transaction
3155
- AssertionError: expected 500 to be 500000 // Object.is equality
3156
-
3157
- - Expected
3158
- + Received
3159
-
3160
- - 500000
3161
- + 500
3162
-
3163
-  ❯ src/tools/reconciliation/__tests__/recommendationEngine.test.ts:569:39
3164
- 567| 
3165
- 568|  const rec = recommendations[0] as CreateTransactionRecommendat…
3166
- 569|  expect(rec.parameters.amount).toBe(500000); // In milliunits
3167
-  |  ^
3168
- 570|  expect(rec.parameters.amount).toBeGreaterThan(0);
3169
- 571|  expect(rec.estimated_impact.value).toBe(500.0); // Estimated i…
3170
-
3171
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[32/39]⎯
3172
-
3173
-  FAIL   unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > amount sign preservation (CRITICAL) > should preserve negative amounts in suggested match create_transaction
3174
- TypeError: Cannot read properties of undefined (reading 'date')
3175
-  ❯ createSuggestedMatchRecommendation src/tools/reconciliation/recommendationEngine.ts:180:19
3176
- 178|  const parameters: CreateTransactionRecommendation['parameters'] = {
3177
- 179|  account_id: context.account_id,
3178
- 180|  date: bankTxn.date,
3179
-  |  ^
3180
- 181|  amount: bankTxn.amount, // Amount is already milliunits
3181
- 182|  payee_name: bankTxn.payee,
3182
-  ❯ processUnmatchedTransactions src/tools/reconciliation/recommendationEngine.ts:396:26
3183
-  ❯ generateRecommendations src/tools/reconciliation/recommendationEngine.ts:70:25
3184
-  ❯ src/tools/reconciliation/__tests__/recommendationEngine.test.ts:591:33
3185
-
3186
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[33/39]⎯
3187
-
3188
-  FAIL   unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > sorting logic > should handle mixed priorities and confidence
3189
- TypeError: Cannot read properties of undefined (reading 'date')
3190
-  ❯ createSuggestedMatchRecommendation src/tools/reconciliation/recommendationEngine.ts:180:19
3191
- 178|  const parameters: CreateTransactionRecommendation['parameters'] = {
3192
- 179|  account_id: context.account_id,
3193
- 180|  date: bankTxn.date,
3194
-  |  ^
3195
- 181|  amount: bankTxn.amount, // Amount is already milliunits
3196
- 182|  payee_name: bankTxn.payee,
3197
-  ❯ processUnmatchedTransactions src/tools/reconciliation/recommendationEngine.ts:396:26
3198
-  ❯ generateRecommendations src/tools/reconciliation/recommendationEngine.ts:70:25
3199
-  ❯ src/tools/reconciliation/__tests__/recommendationEngine.test.ts:686:33
3200
-
3201
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[34/39]⎯
3202
-
3203
-  FAIL   unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle transactions with very small amounts
3204
- AssertionError: expected -0.01 to be -10 // Object.is equality
3205
-
3206
- - Expected
3207
- + Received
3208
-
3209
- - -10
3210
- + -0.01
3211
-
3212
-  ❯ src/tools/reconciliation/__tests__/recommendationEngine.test.ts:921:39
3213
- 919| 
3214
- 920|  const rec = recommendations[0] as CreateTransactionRecommendat…
3215
- 921|  expect(rec.parameters.amount).toBe(-10); // In milliunits (0.0…
3216
-  |  ^
3217
- 922|  });
3218
- 923| 
3219
-
3220
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[35/39]⎯
3221
-
3222
-  FAIL   unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle transactions with very large amounts
3223
- AssertionError: expected -999999.99 to be -999999990 // Object.is equality
3224
-
3225
- - Expected
3226
- + Received
3227
-
3228
- - -999999990
3229
- + -999999.99
3230
-
3231
-  ❯ src/tools/reconciliation/__tests__/recommendationEngine.test.ts:937:39
3232
- 935| 
3233
- 936|  const rec = recommendations[0] as CreateTransactionRecommendat…
3234
- 937|  expect(rec.parameters.amount).toBe(-999999990); // In milliuni…
3235
-  |  ^
3236
- 938|  });
3237
- 939|  });
3238
-
3239
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[36/39]⎯
3240
-
3241
-  FAIL   unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > combined scenarios > should handle all recommendation types at once
3242
- TypeError: Cannot read properties of undefined (reading 'date')
3243
-  ❯ createSuggestedMatchRecommendation src/tools/reconciliation/recommendationEngine.ts:180:19
3244
- 178|  const parameters: CreateTransactionRecommendation['parameters'] = {
3245
- 179|  account_id: context.account_id,
3246
- 180|  date: bankTxn.date,
3247
-  |  ^
3248
- 181|  amount: bankTxn.amount, // Amount is already milliunits
3249
- 182|  payee_name: bankTxn.payee,
3250
-  ❯ processUnmatchedTransactions src/tools/reconciliation/recommendationEngine.ts:396:26
3251
-  ❯ generateRecommendations src/tools/reconciliation/recommendationEngine.ts:70:25
3252
-  ❯ src/tools/reconciliation/__tests__/recommendationEngine.test.ts:992:33
3253
-
3254
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[37/39]⎯
3255
-
3256
-  FAIL   unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show suggested matches
3257
- TypeError: Cannot read properties of undefined (reading 'amount')
3258
-  ❯ formatSuggestedMatchLine src/tools/reconciliation/reportFormatter.ts:177:42
3259
- 175| function formatSuggestedMatchLine(match: TransactionMatch): string {
3260
- 176|  const bankTxn = match.bankTransaction;
3261
- 177|  const amountStr = formatAmount(bankTxn.amount);
3262
-  |  ^
3263
- 178|  const confidenceStr = `${match.confidenceScore}%`;
3264
- 179|  return ` ${bankTxn.date} - ${bankTxn.payee.substring(0, 35).padEnd…
3265
-  ❯ formatTransactionAnalysisSection src/tools/reconciliation/reportFormatter.ts:153:18
3266
-  ❯ formatHumanReadableReport src/tools/reconciliation/reportFormatter.ts:47:17
3267
-  ❯ src/tools/reconciliation/__tests__/reportFormatter.test.ts:291:22
3268
-
3269
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[38/39]⎯
3270
-
3271
-  FAIL   unit  src/tools/reconciliation/__tests__/scenarios/repeatAmount.scenario.test.ts > scenario: repeat amount collisions > prioritizes repeat-amount insight when multiple bank rows share totals
3272
- AssertionError: expected undefined to be defined
3273
-  ❯ src/tools/reconciliation/__tests__/scenarios/repeatAmount.scenario.test.ts:92:27
3274
-  90| 
3275
-  91|  const repeatInsight = result.insights.find((insight) => insight.id…
3276
-  92|  expect(repeatInsight).toBeDefined();
3277
-  |  ^
3278
-  93|  expect(repeatInsight?.severity).toBe('warning');
3279
-  94|  expect(result.summary.unmatched_bank).toBeGreaterThan(0);
3280
-
3281
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[39/39]⎯
3282
-
3283
-
3284
-  Test Files  6 failed | 53 passed | 1 skipped (60)
3285
-  Tests  39 failed | 1293 passed | 14 skipped (1346)
3286
-  Start at  21:58:21
3287
-  Duration  10.82s (transform 6.51s, setup 0ms, collect 44.62s, tests 7.85s, environment 52ms, prepare 18.54s)
3288
-
3289
-
3290
- 📊 Test results written to test-results/
3291
- - summary.json (overview)
3292
- - *-tests.json (1 project file(s))
3293
- - failed-tests.json (39 failure(s))
3294
- - passed-tests-summary.json
3295
- - index.html (interactive report)
3296
-
3297
- 💡 test-results.json contains a pointer to the detailed results
3298
-  HTML  Report is generated
3299
-  You can run npx vite preview --outDir test-results to see the test results.