@dizzlkheinz/ynab-mcpb 0.17.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) 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 +12 -3
  7. package/.github/workflows/release.yml +2 -2
  8. package/CHANGELOG.md +10 -1
  9. package/CLAUDE.md +16 -12
  10. package/README.md +6 -1
  11. package/dist/bundle/index.cjs +49 -49
  12. package/dist/server/YNABMCPServer.d.ts +125 -54
  13. package/dist/server/YNABMCPServer.js +42 -11
  14. package/dist/server/cacheManager.js +6 -5
  15. package/dist/server/completions.d.ts +25 -0
  16. package/dist/server/completions.js +160 -0
  17. package/dist/server/config.d.ts +2 -2
  18. package/dist/server/errorHandler.js +1 -0
  19. package/dist/server/rateLimiter.js +3 -1
  20. package/dist/server/resources.d.ts +1 -0
  21. package/dist/server/resources.js +33 -16
  22. package/dist/server/securityMiddleware.d.ts +38 -8
  23. package/dist/server/securityMiddleware.js +1 -0
  24. package/dist/server/toolRegistry.d.ts +9 -0
  25. package/dist/server/toolRegistry.js +11 -0
  26. package/dist/tools/adapters.d.ts +3 -1
  27. package/dist/tools/adapters.js +1 -0
  28. package/dist/tools/reconciliation/executor.d.ts +2 -0
  29. package/dist/tools/reconciliation/executor.js +26 -1
  30. package/dist/tools/reconciliation/index.d.ts +3 -2
  31. package/dist/tools/reconciliation/index.js +4 -3
  32. package/dist/tools/schemas/outputs/index.d.ts +2 -2
  33. package/dist/tools/schemas/outputs/index.js +2 -2
  34. package/dist/tools/schemas/outputs/utilityOutputs.d.ts +0 -15
  35. package/dist/tools/schemas/outputs/utilityOutputs.js +0 -9
  36. package/dist/tools/utilityTools.d.ts +0 -7
  37. package/dist/tools/utilityTools.js +1 -50
  38. package/docs/maintainers/npm-publishing.md +27 -0
  39. package/docs/reference/API.md +83 -97
  40. package/docs/technical/reconciliation-system-architecture.md +2251 -2251
  41. package/package.json +6 -6
  42. package/scripts/analyze-bundle.mjs +41 -41
  43. package/scripts/generate-mcpb.ps1 +95 -95
  44. package/scripts/watch-and-restart.ps1 +49 -49
  45. package/src/__tests__/comprehensive.integration.test.ts +4 -32
  46. package/src/__tests__/performance.test.ts +5 -14
  47. package/src/__tests__/setup.ts +45 -14
  48. package/src/__tests__/smoke.e2e.test.ts +70 -0
  49. package/src/__tests__/testUtils.ts +2 -113
  50. package/src/server/YNABMCPServer.ts +64 -10
  51. package/src/server/__tests__/YNABMCPServer.test.ts +0 -1
  52. package/src/server/__tests__/completions.integration.test.ts +117 -0
  53. package/src/server/__tests__/completions.test.ts +319 -0
  54. package/src/server/__tests__/resources.template.test.ts +3 -3
  55. package/src/server/__tests__/resources.test.ts +3 -3
  56. package/src/server/__tests__/toolRegistration.test.ts +3 -3
  57. package/src/server/cacheManager.ts +7 -6
  58. package/src/server/completions.ts +279 -0
  59. package/src/server/errorHandler.ts +1 -0
  60. package/src/server/rateLimiter.ts +4 -1
  61. package/src/server/resources.ts +49 -13
  62. package/src/server/securityMiddleware.ts +1 -0
  63. package/src/server/toolRegistry.ts +42 -0
  64. package/src/tools/__tests__/transactionTools.integration.test.ts +63 -3
  65. package/src/tools/__tests__/utilityTools.integration.test.ts +1 -85
  66. package/src/tools/__tests__/utilityTools.test.ts +1 -123
  67. package/src/tools/adapters.ts +22 -1
  68. package/src/tools/reconciliation/__tests__/executor.progress.test.ts +462 -0
  69. package/src/tools/reconciliation/executor.ts +55 -1
  70. package/src/tools/reconciliation/index.ts +7 -3
  71. package/src/tools/schemas/outputs/index.ts +0 -3
  72. package/src/tools/schemas/outputs/utilityOutputs.ts +2 -43
  73. package/src/tools/toolCategories.ts +0 -1
  74. package/src/tools/utilityTools.ts +5 -76
  75. package/vitest.config.ts +4 -1
  76. package/.chunkhound.json +0 -11
  77. package/.code/agents/0098661e-0fa3-4990-beb9-c0cbf3f123aa/status.txt +0 -1
  78. package/.code/agents/01a13ef4-3f23-4f52-b33b-3585b73cfa60/error.txt +0 -3
  79. package/.code/agents/084fd32f-e298-4728-9103-a78d7dc39613/error.txt +0 -3
  80. package/.code/agents/0fed51e1-a943-4b97-a2a8-a6f0f27c844d/status.txt +0 -1
  81. package/.code/agents/1059b6bd-5ccd-4d83-a12c-7c9d89137399/error.txt +0 -5
  82. package/.code/agents/110/exec-call_F9BDNG7JfxKkq7Vc8ESAvdft.txt +0 -1569
  83. package/.code/agents/11ebcef3-b13f-4e44-ad80-d94a866804b7/error.txt +0 -3
  84. package/.code/agents/1324/exec-call_tIpx9uV1TpARbAMZonRQm8AO.txt +0 -757
  85. package/.code/agents/1398/exec-call_CjItcWMU1G6JoPshX62QvpaR.txt +0 -2832
  86. package/.code/agents/1398/exec-call_SUVq2ivmONQ5LMCmd7ngmOqr.txt +0 -2709
  87. package/.code/agents/1398/exec-call_SdNY4NOffdcC5pRYjVXHjPCK.txt +0 -2832
  88. package/.code/agents/1398/exec-call_qblJo9et1gsFFB63TtLOiji2.txt +0 -2832
  89. package/.code/agents/1398/exec-call_zaRrzlGz7GJcNzVfkAmML7Zg.txt +0 -2709
  90. package/.code/agents/1572/exec-call_GjVFBFOWcY7lE0idc5nWlLNh.txt +0 -781
  91. package/.code/agents/171834fd-5905-42fc-bbcc-2c755145b0fc/status.txt +0 -1
  92. package/.code/agents/1724/exec-call_HvHQe0w5CCG3T7Q3ULT6MO3g.txt +0 -5217
  93. package/.code/agents/1724/exec-call_QwUNESVzfxxk78K1frh1Vahb.txt +0 -2594
  94. package/.code/agents/1724/exec-call_aJ1Xwz71XmIpD4SBxSHERzLe.txt +0 -2594
  95. package/.code/agents/1846/exec-call_1YNAVD18RjrMN7JnfkkQhUP3.txt +0 -766
  96. package/.code/agents/1846/exec-call_lh3lDzE4WJAh1lFiomiiZ73D.txt +0 -766
  97. package/.code/agents/1d7d7ab7-7473-4b69-8b97-6e914f56056a/result.txt +0 -231
  98. package/.code/agents/2038/exec-call_DYwOukaYsL8VCONWmV2rUW5u.txt +0 -766
  99. package/.code/agents/2038/exec-call_c7fOQ7UrpVcTtvdfGBRM146V.txt +0 -652
  100. package/.code/agents/2038/exec-call_ySNyq9Mm55jWE480s54r5QcA.txt +0 -766
  101. package/.code/agents/210/exec-call_0tQCsKNJ1WTuIchb8wlcFJpW.txt +0 -2590
  102. package/.code/agents/210/exec-call_8ZlY9cUc8Ft1twi4ch8UJ6IN.txt +0 -5195
  103. package/.code/agents/2188/exec-call_5HqayBxIteJtoI8oPTiLWgvJ.txt +0 -286
  104. package/.code/agents/2188/exec-call_XRbBKBq3adZe6dcppAvQtM7G.txt +0 -218
  105. package/.code/agents/2188/exec-call_ehA0SjpYtrUi6GJXmibLjp4i.txt +0 -180
  106. package/.code/agents/21902821-ecaf-4759-bb9d-222b90921af5/error.txt +0 -3
  107. package/.code/agents/2256/exec-call_AtPcRWPmFPMcmX6qOFm1fCEY.txt +0 -766
  108. package/.code/agents/232073be-aa0e-46da-b478-5b64dbf03cf5/status.txt +0 -1
  109. package/.code/agents/234ff534-2336-4771-a8d9-aa04421a63be/result.txt +0 -747
  110. package/.code/agents/2454/exec-call_aFJpupwjfZeOBm7ixI5Vc8z2.txt +0 -766
  111. package/.code/agents/2454/exec-call_wogZ4HfXTodTEXvdgXlVUBpv.txt +0 -766
  112. package/.code/agents/253e2695-dc36-4022-b436-27655e0fc6c7/status.txt +0 -1
  113. package/.code/agents/2583/exec-call_M59I4eDjpjlBIWBiSxyS0YlJ.txt +0 -2594
  114. package/.code/agents/2583/exec-call_usLRGh7OhVHtsRBL4iUwRhjq.txt +0 -2594
  115. package/.code/agents/292aa3ff-dbab-470f-97c9-e7e8fd65e0db/result.txt +0 -144
  116. package/.code/agents/2e905864-aa07-4314-bcf9-c5b32277e4ac/result.txt +0 -36
  117. package/.code/agents/3073/exec-call_Peeagc9DxGYLgE6pNdMZhqIE.txt +0 -766
  118. package/.code/agents/3073/exec-call_d2YSE3hXF08KRSoUM3qd8Z3x.txt +0 -766
  119. package/.code/agents/3134/exec-call_IgCAMGx19lWfuo8zfYIt5FFC.txt +0 -416
  120. package/.code/agents/3134/exec-call_IxvLR2Oo7kba2QTsI1gHVko8.txt +0 -2590
  121. package/.code/agents/3134/exec-call_jYvc8hksZChSiysbzKjl2ZbB.txt +0 -2590
  122. package/.code/agents/329/exec-call_4QdP3SfSO7HGPCwVcqZIth6s.txt +0 -2590
  123. package/.code/agents/335aa031-466d-4fb7-925f-3cd864e264d0/result.txt +0 -191
  124. package/.code/agents/3364/exec-call_NbhIrsM5HhyDZDmJZG5CuCYL.txt +0 -766
  125. package/.code/agents/3364/exec-call_cKtJg0NrXiwXEFwlsE3uPZRA.txt +0 -766
  126. package/.code/agents/36d98414-5cde-4d9d-9a67-a240a18c1f07/result.txt +0 -189
  127. package/.code/agents/4604e866-b7b8-44f5-992f-2f683b0a523b/status.txt +0 -1
  128. package/.code/agents/472/exec-call_4AxzEEcWwkKhpqRB3bE8Ha4L.txt +0 -790
  129. package/.code/agents/472/exec-call_CB3LPYQA8QIZRi8I6kj4J17A.txt +0 -766
  130. package/.code/agents/472/exec-call_YeoUWvaFoktay2nqVUsa9KKX.txt +0 -790
  131. package/.code/agents/472/exec-call_jPWgKVquBBXTg0T3Lks5ZfkK.txt +0 -2594
  132. package/.code/agents/472/exec-call_qBkvunpGBDEHph2jPmTwtcsb.txt +0 -1000
  133. package/.code/agents/472/exec-call_v0ffRV1p0kTckBmJPzzHAEy0.txt +0 -3489
  134. package/.code/agents/472/exec-call_xAX5FXqWIlk02d9WubHbHWh8.txt +0 -766
  135. package/.code/agents/5346/exec-call_9q0muXUuLaucwEqI51Pt7idT.txt +0 -2594
  136. package/.code/agents/5346/exec-call_B2el3B79rVkq9LhWTI2VYlz7.txt +0 -2456
  137. package/.code/agents/5346/exec-call_BfX08f02qkZI9uJD5dvCvuoj.txt +0 -2594
  138. package/.code/agents/543328d0-61d6-4fd1-a723-bb168656e2e2/error.txt +0 -18
  139. package/.code/agents/5580c02c-1383-4d18-9cbd-cc8a06e3408d/result.txt +0 -48
  140. package/.code/agents/5f8dc01c-47b3-4163-b0b3-aa31be89fcdc/status.txt +0 -1
  141. package/.code/agents/60ce1a22-5126-44b2-b977-1d5b56142a7b/status.txt +0 -1
  142. package/.code/agents/6215d9db-7fa9-4429-aeec-3835c3212291/error.txt +0 -1
  143. package/.code/agents/6743db55-30e5-4b4e-9366-a8214fc7f714/error.txt +0 -1
  144. package/.code/agents/6bf9591b-b9c9-422c-b0a5-e968c7d8422a/status.txt +0 -1
  145. package/.code/agents/7/exec-call_HltHpkDox0Zm1vGEjdksUgpE.txt +0 -1120
  146. package/.code/agents/7/exec-call_LCATrOPPAgbxW9Q1z0XaVi2E.txt +0 -2646
  147. package/.code/agents/7/exec-call_W8DeRfNG9hvbgVFvf0clBf6R.txt +0 -2646
  148. package/.code/agents/7/exec-call_eww3GfdEiJZx61sJEQ9wNmt3.txt +0 -1271
  149. package/.code/agents/70/exec-call_owUtDMYiVgqDf8vsz1i32PFf.txt +0 -1570
  150. package/.code/agents/8/exec-call_UtrjAcLbhYLatxR4O97fZgnm.txt +0 -2590
  151. package/.code/agents/82490bc9-f34e-4b1b-8a8e-bccc2e6254f5/error.txt +0 -3
  152. package/.code/agents/841/exec-call_7nTNhSBCNjTDUIJv7py6CepO.txt +0 -3299
  153. package/.code/agents/841/exec-call_TLI0yUdUijuUAvI4o3DXEvHO.txt +0 -3299
  154. package/.code/agents/9/exec-call_XaABQT1hIlRpnKZ2uyBMWsTC.txt +0 -1882
  155. package/.code/agents/941/exec-call_GuGHRx7NNXWIDAnxUG2NEWPa.txt +0 -2594
  156. package/.code/agents/94a0ddf3-a304-4ec3-913e-3cceef509948/error.txt +0 -1
  157. package/.code/agents/95d9fbab-19a2-48af-83f9-c792566a347f/error.txt +0 -1
  158. package/.code/agents/b0098cb8-cb32-4ada-9bc4-37c587518896/result.txt +0 -170
  159. package/.code/agents/b4fe59a4-81df-42e2-a112-0153e504faca/error.txt +0 -1
  160. package/.code/agents/bf4ce152-f623-49d7-aa52-c18631625c3c/error.txt +0 -3
  161. package/.code/agents/d7d1db75-d7eb-468e-adea-4ef4d916d187/status.txt +0 -1
  162. package/.code/agents/e2baa9c8-bac3-49e3-a39d-024333e6a990/status.txt +0 -1
  163. package/.code/agents/e2c752b7-711d-423a-af57-f53c809deb84/result.txt +0 -160
  164. package/.code/agents/e350b8c3-8483-408c-b2bb-94515f492a11/error.txt +0 -3
  165. package/.code/agents/e63f9919-719f-4ad0-bccf-01b1a596e1e9/status.txt +0 -1
  166. package/.code/agents/e6601719-c31f-4a0e-8c71-d70787d0ab71/status.txt +0 -1
  167. package/.code/agents/e71695a8-3044-478d-8f12-ed13d02884c7/status.txt +0 -1
  168. package/.code/agents/f250b7ed-5bd5-4036-aa8c-ce63caee7d61/result.txt +0 -20
  169. package/.code/agents/f95b7464-3e25-4897-b153-c8dfd63fd605/error.txt +0 -5
  170. package/.code/agents/fa3c5ddf-cdf7-47a2-930a-b806c6363689/status.txt +0 -1
  171. package/AGENTS.md +0 -1
  172. package/NUL +0 -0
  173. package/package.json.tmp +0 -105
  174. package/src/__tests__/delta.performance.test.ts +0 -80
  175. package/src/__tests__/workflows.e2e.test.ts +0 -1702
  176. package/temp-recon.ts +0 -126
  177. package/test-exports/ynab_account_e9ddc2a6_minimal_1items_2025-11-19_09-04-53.json +0 -23
  178. package/test-exports/ynab_account_e9ddc2a6_minimal_1items_2025-11-19_10-37-42.json +0 -23
  179. package/test-exports/ynab_account_e9ddc2a6_minimal_4items_2025-11-19_09-02-09.json +0 -44
  180. package/test-exports/ynab_account_e9ddc2a6_minimal_6items_2025-11-19_10-37-52.json +0 -58
  181. package/test-exports/ynab_since_2025-10-16_account_53298e13_238items_2025-11-28_13-46-20.json +0 -3662
  182. package/test-exports/ynab_since_2025-11-01_account_4c18e9f0_minimal_14items_2025-11-16_10-07-10.json +0 -115
@@ -1,286 +0,0 @@
1
-
2
-  RUN  v3.2.4 C:/Users/ksutk/projects/ynab-mcpb
3
-
4
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should format a basic report with header and sections 4ms
5
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show statement date range 1ms
6
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show balanced status when no discrepancy 1ms
7
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show discrepancy with correct direction when YNAB higher 1ms
8
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show discrepancy with correct direction when bank higher 0ms
9
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show transaction analysis counts 0ms
10
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should list unmatched bank transactions 1ms
11
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should truncate long unmatched lists 1ms
12
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show suggested matches 1ms
13
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should include insights section when insights present 1ms
14
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should use correct severity icons 1ms
15
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should truncate insights list 0ms
16
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should include execution section when execution provided 1ms
17
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show dry run notice when dry run enabled 1ms
18
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show execution recommendations 0ms
19
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show next steps when no execution 0ms
20
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should handle empty next steps gracefully 0ms
21
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should use default account name when not provided 0ms
22
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatBalanceInfo > should format balance info correctly 1ms
23
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatTransactionList > should format bank transactions 1ms
24
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatTransactionList > should format YNAB transactions 1ms
25
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatTransactionList > should truncate long lists 0ms
26
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatTransactionList > should handle empty list 1ms
27
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > edge cases > should handle negative amounts correctly 0ms
28
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > edge cases > should handle positive amounts correctly 0ms
29
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > edge cases > should handle long payee names gracefully 0ms
30
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > edge cases > should handle zero discrepancy 0ms
31
- ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > edge cases > should format insight evidence when available 0ms
32
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should convert to lowercase 3ms
33
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should remove all spaces 0ms
34
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should remove special characters 1ms
35
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should keep only alphanumeric characters 2ms
36
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should handle null and undefined 1ms
37
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should handle empty string 0ms
38
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should handle real-world examples 1ms
39
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should match identical normalized strings 0ms
40
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should match despite different special characters 1ms
41
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should not match different strings 1ms
42
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should handle null and undefined 0ms
43
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should match empty strings 0ms
44
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should match real-world examples 1ms
45
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should return 100 for identical strings 1ms
46
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should return high score for similar strings 1ms
47
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should return lower score for different strings 0ms
48
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should return 0 for completely different strings 0ms
49
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should handle null and undefined 0ms
50
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should calculate Levenshtein distance correctly 0ms
51
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should handle real-world payee variations 0ms
52
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should return 100 for identical tokens 0ms
53
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should return score for same tokens in different order 0ms
54
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should return partial score for partial overlap 0ms
55
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should return 0 for no overlap 0ms
56
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should handle null and undefined 0ms
57
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should split on alpha/numeric boundaries 0ms
58
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should handle real-world examples 0ms
59
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > should return 100 for exact normalized match 0ms
60
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > should return best score from fuzzy or token matching 22ms
61
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > should handle typos with fuzzy matching 4ms
62
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > should return 0 for completely different payees 1ms
63
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > should handle null and undefined 0ms
64
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > real-world examples from design spec > should match Shell variations 0ms
65
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > real-world examples from design spec > should match Amazon variations 0ms
66
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > real-world examples from design spec > should match Netflix variations 0ms
67
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should return true when payee contains substring 0ms
68
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should be case insensitive 0ms
69
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should ignore special characters 53ms
70
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should return false when substring not found 0ms
71
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should handle null and undefined 0ms
72
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should match partial words 0ms
73
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > edge cases > should handle very long payee names 0ms
74
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > edge cases > should handle Unicode characters 0ms
75
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > edge cases > should handle numbers only 0ms
76
- ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > edge cases > should handle mixed case with numbers 0ms
77
- ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > high confidence matches (≥90%) > should return high confidence for exact match 10ms
78
- ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > high confidence matches (≥90%) > should return high confidence for normalized payee match 1ms
79
- ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > high confidence matches (≥90%) > should handle date within tolerance 1ms
80
- ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > medium confidence matches (60-89%) > should return medium confidence for fuzzy payee match 17ms
81
-  → expected 'high' to be 'medium' // Object.is equality
82
- ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > medium confidence matches (60-89%) > should provide multiple candidates for medium confidence 3ms
83
- ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > low/no confidence matches > should return no match when amount differs 2ms
84
-  → expected 'medium' to be 'none' // Object.is equality
85
- ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > low/no confidence matches > should not match opposite-signed transactions 1ms
86
- ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > prioritization > should prioritize uncleared transactions over cleared 2ms
87
-  → expected 'y1' to be 'y2' // Object.is equality
88
- ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > prioritization > should use date proximity as tiebreaker 2ms
89
-  → expected 'y1' to be 'y2' // Object.is equality
90
- ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > amount tolerance > should match within amount tolerance 1ms
91
- ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > amount tolerance > should not match outside amount tolerance 2ms
92
-  → expected 'high' to be 'none' // Object.is equality
93
- ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > used IDs > should skip already-used YNAB transaction IDs 0ms
94
- ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findMatches > should match multiple bank transactions 2ms
95
- ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findMatches > should prevent duplicate matching of YNAB transactions 38ms
96
- ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findMatches > should handle mix of matched and unmatched transactions 8ms
97
- ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findMatches > should use custom configuration 1ms
98
- ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > edge cases > should handle empty YNAB transactions list 3ms
99
-  → expected 'Consider adding this transaction to Y…' to contain 'not in YNAB'
100
- ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > edge cases > should handle null payee names 1ms
101
- ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > edge cases > should handle very small amounts 0ms
102
- ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > edge cases > should handle large amounts 0ms
103
- ✓  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 7ms
104
- ✓  unit  src/tools/reconciliation/__tests__/adapter.causes.test.ts > buildReconciliationPayload discrepancy causes mapping > maps legacy causes to MoneyValue entries with CAD currency 46ms
105
- ✓  unit  src/tools/reconciliation/__tests__/adapter.test.ts > buildReconciliationPayload > returns human narrative and structured payload with MoneyValue fields 44ms
106
- ✓  unit  src/tools/reconciliation/__tests__/adapter.test.ts > buildReconciliationPayload > includes execution data when provided 4ms
107
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > empty context scenarios > should return empty array for completely empty context 43ms
108
- ✓  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
109
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > insight processing > should process near_match insights 9ms
110
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > insight processing > should process repeat_amount insights 4ms
111
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > insight processing > should process anomaly insights 4ms
112
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > insight processing > should process critical anomaly insights with higher severity 4ms
113
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > insight processing > should process multiple insights 10ms
114
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched bank transactions > should create create_transaction recommendation for unmatched bank transaction 3ms
115
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched bank transactions > should include memo if present in bank transaction 3ms
116
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched bank transactions > should not include memo if not present in bank transaction 4ms
117
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched bank transactions > should create recommendations for multiple unmatched bank transactions 5ms
118
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched YNAB transactions > should create update_cleared recommendation for uncleared YNAB transaction 3ms
119
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched YNAB transactions > should not create recommendation for already cleared YNAB transaction 3ms
120
- ✓  unit  src/tools/reconciliation/__tests__/scenarios/repeatAmount.scenario.test.ts > scenario: repeat amount collisions > prioritizes repeat-amount insight when multiple bank rows share totals 27ms
121
- ✓  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 31ms
122
- ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should perform full analysis and return structured results 28ms
123
- ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should categorize high-confidence matches as auto-matches 2ms
124
- ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should categorize medium-confidence matches as suggested 2ms
125
- ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should identify unmatched bank transactions 2ms
126
- ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should identify unmatched YNAB transactions 2ms
127
- ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should calculate balance information correctly 2ms
128
- ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should generate appropriate summary 2ms
129
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched YNAB transactions > should not create recommendation for reconciled YNAB transaction 3ms
130
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched YNAB transactions > should handle null payee_name in YNAB transaction 4ms
131
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > suggested matches > should create review_duplicate recommendation for suggested match 4ms
132
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > suggested matches > should create create_transaction for suggested match with no YNAB transaction 3ms
133
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > suggested matches > should create manual_review for combination match with multiple candidates 5ms
134
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > amount sign preservation (CRITICAL) > should preserve negative amounts for expenses in create_transaction 4ms
135
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > amount sign preservation (CRITICAL) > should preserve positive amounts for income in create_transaction 3ms
136
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > amount sign preservation (CRITICAL) > should preserve negative amounts in suggested match create_transaction 3ms
137
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > amount sign preservation (CRITICAL) > should handle zero amounts correctly 3ms
138
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > sorting logic > should sort by priority (high > medium > low) 3ms
139
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > sorting logic > should sort by confidence when priorities are equal 3ms
140
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > sorting logic > should handle mixed priorities and confidence 4ms
141
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > recommendation metadata > should include correct metadata in all recommendations 4ms
142
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > recommendation metadata > should generate unique IDs for each recommendation 4ms
143
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > recommendation metadata > should use correct currency from balance info 9ms
144
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > recommendation metadata > should include enhanced metadata in insight-based manual review recommendations 4ms
145
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > recommendation metadata > should include enhanced metadata for all insight-based recommendation types 12ms
146
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle empty insights array 7ms
147
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle empty unmatched arrays 3ms
148
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle missing optional fields 4ms
149
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle very large arrays of recommendations 22ms
150
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle insight without evidence 4ms
151
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle transactions with very small amounts 3ms
152
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle transactions with very large amounts 3ms
153
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > combined scenarios > should handle combination of insights, unmatched bank, and unmatched YNAB 4ms
154
- ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > combined scenarios > should handle all recommendation types at once 4ms
155
- ✓  unit  src/tools/reconciliation/__tests__/schemaUrl.test.ts > buildReconciliationPayload schema reference > points to the master branch schema file on raw.githubusercontent.com 4ms
156
- ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > error normalization helpers > normalizes YNAB SDK error objects with status and detail 2ms
157
- ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > error normalization helpers > retains status from Error-like objects and propagates HTTP code decisions 0ms
158
- ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation (dry run) > produces action plan without calling YNAB APIs when dry_run=true 20ms
159
- ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation (apply mode) > creates, updates, and adjusts when dry_run=false 3ms
160
- ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation (ordered halting) > processes newest auto matches first and stops once balances align 1ms
161
- ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > uses bulk create API for batches with multiple transactions 5ms
162
- ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > falls back to sequential mode for single transaction scenarios 2ms
163
- ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > falls back to sequential creation when bulk request fails 2ms
164
- ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > propagates rate-limit error payloads with status codes from bulk create 2ms
165
- ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > splits large batches into 100-transaction chunks 14ms
166
- ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > throws on fatal sequential creation errors surfaced as objects 1ms
167
- ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > flags duplicate transactions returned by YNAB API 1ms
168
- ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > honors halting logic when balance aligns mid-batch 1ms
169
- ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > processes multiple chunks and halts at chunk boundaries when balance aligns 5ms
170
- ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > simulates bulk preview during dry-run mode 1ms
171
-
172
- ⎯⎯⎯⎯⎯⎯⎯ Failed Tests 6 ⎯⎯⎯⎯⎯⎯⎯
173
-
174
-  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > medium confidence matches (60-89%) > should return medium confidence for fuzzy payee match
175
- AssertionError: expected 'high' to be 'medium' // Object.is equality
176
-
177
- Expected: "medium"
178
- Received: "high"
179
-
180
-  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:127:34
181
- 125|  const match = findBestMatch(bankTxn, ynabTxns, new Set(), conf…
182
- 126| 
183
- 127|  expect(match.confidence).toBe('medium');
184
-  |  ^
185
- 128|  expect(match.confidence_score).toBeGreaterThanOrEqual(60);
186
- 129|  expect(match.confidence_score).toBeLessThan(90);
187
-
188
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/6]⎯
189
-
190
-  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > low/no confidence matches > should return no match when amount differs
191
- AssertionError: expected 'medium' to be 'none' // Object.is equality
192
-
193
- Expected: "none"
194
- Received: "medium"
195
-
196
-  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:196:34
197
- 194|  const match = findBestMatch(bankTxn, ynabTxns, new Set(), conf…
198
- 195| 
199
- 196|  expect(match.confidence).toBe('none');
200
-  |  ^
201
- 197|  expect(match.confidence_score).toBe(0);
202
- 198|  expect(match.action_hint).toBe('add_to_ynab');
203
-
204
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/6]⎯
205
-
206
-  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > prioritization > should prioritize uncleared transactions over cleared
207
- AssertionError: expected 'y1' to be 'y2' // Object.is equality
208
-
209
- Expected: "y2"
210
- Received: "y1"
211
-
212
-  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:263:44
213
- 261| 
214
- 262|  // Should prefer uncleared transaction
215
- 263|  expect(match.ynab_transaction?.id).toBe('y2');
216
-  |  ^
217
- 264|  });
218
- 265| 
219
-
220
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/6]⎯
221
-
222
-  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > prioritization > should use date proximity as tiebreaker
223
- AssertionError: expected 'y1' to be 'y2' // Object.is equality
224
-
225
- Expected: "y2"
226
- Received: "y1"
227
-
228
-  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:299:44
229
- 297| 
230
- 298|  // Should prefer closer date
231
- 299|  expect(match.ynab_transaction?.id).toBe('y2');
232
-  |  ^
233
- 300|  });
234
- 301|  });
235
-
236
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/6]⎯
237
-
238
-  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > amount tolerance > should not match outside amount tolerance
239
- AssertionError: expected 'high' to be 'none' // Object.is equality
240
-
241
- Expected: "none"
242
- Received: "high"
243
-
244
-  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:356:34
245
- 354|  const match = findBestMatch(bankTxn, ynabTxns, new Set(), conf…
246
- 355| 
247
- 356|  expect(match.confidence).toBe('none');
248
-  |  ^
249
- 357|  });
250
- 358|  });
251
-
252
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[5/6]⎯
253
-
254
-  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > edge cases > should handle empty YNAB transactions list
255
- AssertionError: expected 'Consider adding this transaction to Y…' to contain 'not in YNAB'
256
-
257
- Expected: "not in YNAB"
258
- Received: "Consider adding this transaction to YNAB"
259
-
260
-  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:568:36
261
- 566| 
262
- 567|  expect(match.confidence).toBe('none');
263
- 568|  expect(match.recommendation).toContain('not in YNAB');
264
-  |  ^
265
- 569|  });
266
- 570| 
267
-
268
- ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[6/6]⎯
269
-
270
-
271
-  Test Files  1 failed | 11 passed (12)
272
-  Tests  6 failed | 155 passed (161)
273
-  Start at  20:23:36
274
-  Duration  1.82s (transform 1.36s, setup 0ms, collect 6.18s, tests 745ms, environment 6ms, prepare 3.07s)
275
-
276
-
277
- 📊 Test results written to test-results/
278
- - summary.json (overview)
279
- - *-tests.json (1 project file(s))
280
- - failed-tests.json (6 failure(s))
281
- - passed-tests-summary.json
282
- - index.html (interactive report)
283
-
284
- 💡 test-results.json contains a pointer to the detailed results
285
-  HTML  Report is generated
286
-  You can run npx vite preview --outDir test-results to see the test results.