@dizzlkheinz/ynab-mcpb 0.13.1 → 0.15.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 (207) hide show
  1. package/.code/agents/01a13ef4-3f23-4f52-b33b-3585b73cfa60/error.txt +3 -0
  2. package/.code/agents/084fd32f-e298-4728-9103-a78d7dc39613/error.txt +3 -0
  3. package/.code/agents/0fed51e1-a943-4b97-a2a8-a6f0f27c844d/status.txt +1 -0
  4. package/.code/agents/1059b6bd-5ccd-4d83-a12c-7c9d89137399/error.txt +5 -0
  5. package/.code/agents/110/exec-call_F9BDNG7JfxKkq7Vc8ESAvdft.txt +1569 -0
  6. package/.code/agents/11ebcef3-b13f-4e44-ad80-d94a866804b7/error.txt +3 -0
  7. package/.code/agents/1398/exec-call_CjItcWMU1G6JoPshX62QvpaR.txt +2832 -0
  8. package/.code/agents/1398/exec-call_SUVq2ivmONQ5LMCmd7ngmOqr.txt +2709 -0
  9. package/.code/agents/1398/exec-call_SdNY4NOffdcC5pRYjVXHjPCK.txt +2832 -0
  10. package/.code/agents/1398/exec-call_qblJo9et1gsFFB63TtLOiji2.txt +2832 -0
  11. package/.code/agents/1398/exec-call_zaRrzlGz7GJcNzVfkAmML7Zg.txt +2709 -0
  12. package/.code/agents/171834fd-5905-42fc-bbcc-2c755145b0fc/status.txt +1 -0
  13. package/.code/agents/1724/exec-call_HvHQe0w5CCG3T7Q3ULT6MO3g.txt +5217 -0
  14. package/.code/agents/1724/exec-call_QwUNESVzfxxk78K1frh1Vahb.txt +2594 -0
  15. package/.code/agents/1724/exec-call_aJ1Xwz71XmIpD4SBxSHERzLe.txt +2594 -0
  16. package/.code/agents/1d7d7ab7-7473-4b69-8b97-6e914f56056a/result.txt +231 -0
  17. package/.code/agents/210/exec-call_0tQCsKNJ1WTuIchb8wlcFJpW.txt +2590 -0
  18. package/.code/agents/210/exec-call_8ZlY9cUc8Ft1twi4ch8UJ6IN.txt +5195 -0
  19. package/.code/agents/2188/exec-call_5HqayBxIteJtoI8oPTiLWgvJ.txt +286 -0
  20. package/.code/agents/2188/exec-call_XRbBKBq3adZe6dcppAvQtM7G.txt +218 -0
  21. package/.code/agents/2188/exec-call_ehA0SjpYtrUi6GJXmibLjp4i.txt +180 -0
  22. package/.code/agents/21902821-ecaf-4759-bb9d-222b90921af5/error.txt +3 -0
  23. package/.code/agents/232073be-aa0e-46da-b478-5b64dbf03cf5/status.txt +1 -0
  24. package/.code/agents/234ff534-2336-4771-a8d9-aa04421a63be/result.txt +747 -0
  25. package/.code/agents/253e2695-dc36-4022-b436-27655e0fc6c7/status.txt +1 -0
  26. package/.code/agents/2583/exec-call_M59I4eDjpjlBIWBiSxyS0YlJ.txt +2594 -0
  27. package/.code/agents/2583/exec-call_usLRGh7OhVHtsRBL4iUwRhjq.txt +2594 -0
  28. package/.code/agents/292aa3ff-dbab-470f-97c9-e7e8fd65e0db/result.txt +144 -0
  29. package/.code/agents/3134/exec-call_IgCAMGx19lWfuo8zfYIt5FFC.txt +416 -0
  30. package/.code/agents/3134/exec-call_IxvLR2Oo7kba2QTsI1gHVko8.txt +2590 -0
  31. package/.code/agents/3134/exec-call_jYvc8hksZChSiysbzKjl2ZbB.txt +2590 -0
  32. package/.code/agents/329/exec-call_4QdP3SfSO7HGPCwVcqZIth6s.txt +2590 -0
  33. package/.code/agents/472/exec-call_4AxzEEcWwkKhpqRB3bE8Ha4L.txt +790 -0
  34. package/.code/agents/472/exec-call_CB3LPYQA8QIZRi8I6kj4J17A.txt +766 -0
  35. package/.code/agents/472/exec-call_YeoUWvaFoktay2nqVUsa9KKX.txt +790 -0
  36. package/.code/agents/472/exec-call_jPWgKVquBBXTg0T3Lks5ZfkK.txt +2594 -0
  37. package/.code/agents/472/exec-call_qBkvunpGBDEHph2jPmTwtcsb.txt +1000 -0
  38. package/.code/agents/472/exec-call_v0ffRV1p0kTckBmJPzzHAEy0.txt +3489 -0
  39. package/.code/agents/472/exec-call_xAX5FXqWIlk02d9WubHbHWh8.txt +766 -0
  40. package/.code/agents/5346/exec-call_9q0muXUuLaucwEqI51Pt7idT.txt +2594 -0
  41. package/.code/agents/5346/exec-call_B2el3B79rVkq9LhWTI2VYlz7.txt +2456 -0
  42. package/.code/agents/5346/exec-call_BfX08f02qkZI9uJD5dvCvuoj.txt +2594 -0
  43. package/.code/agents/543328d0-61d6-4fd1-a723-bb168656e2e2/error.txt +18 -0
  44. package/.code/agents/5580c02c-1383-4d18-9cbd-cc8a06e3408d/result.txt +48 -0
  45. package/.code/agents/60ce1a22-5126-44b2-b977-1d5b56142a7b/status.txt +1 -0
  46. package/.code/agents/6215d9db-7fa9-4429-aeec-3835c3212291/error.txt +1 -0
  47. package/.code/agents/6743db55-30e5-4b4e-9366-a8214fc7f714/error.txt +1 -0
  48. package/.code/agents/6bf9591b-b9c9-422c-b0a5-e968c7d8422a/status.txt +1 -0
  49. package/.code/agents/7/exec-call_eww3GfdEiJZx61sJEQ9wNmt3.txt +1271 -0
  50. package/.code/agents/70/exec-call_owUtDMYiVgqDf8vsz1i32PFf.txt +1570 -0
  51. package/.code/agents/8/exec-call_UtrjAcLbhYLatxR4O97fZgnm.txt +2590 -0
  52. package/.code/agents/82490bc9-f34e-4b1b-8a8e-bccc2e6254f5/error.txt +3 -0
  53. package/.code/agents/841/exec-call_7nTNhSBCNjTDUIJv7py6CepO.txt +3299 -0
  54. package/.code/agents/841/exec-call_TLI0yUdUijuUAvI4o3DXEvHO.txt +3299 -0
  55. package/.code/agents/9/exec-call_XaABQT1hIlRpnKZ2uyBMWsTC.txt +1882 -0
  56. package/.code/agents/941/exec-call_GuGHRx7NNXWIDAnxUG2NEWPa.txt +2594 -0
  57. package/.code/agents/95d9fbab-19a2-48af-83f9-c792566a347f/error.txt +1 -0
  58. package/.code/agents/b0098cb8-cb32-4ada-9bc4-37c587518896/result.txt +170 -0
  59. package/.code/agents/b4fe59a4-81df-42e2-a112-0153e504faca/error.txt +1 -0
  60. package/.code/agents/bf4ce152-f623-49d7-aa52-c18631625c3c/error.txt +3 -0
  61. package/.code/agents/d7d1db75-d7eb-468e-adea-4ef4d916d187/status.txt +1 -0
  62. package/.code/agents/e2baa9c8-bac3-49e3-a39d-024333e6a990/status.txt +1 -0
  63. package/.code/agents/e350b8c3-8483-408c-b2bb-94515f492a11/error.txt +3 -0
  64. package/.code/agents/e63f9919-719f-4ad0-bccf-01b1a596e1e9/status.txt +1 -0
  65. package/.code/agents/e71695a8-3044-478d-8f12-ed13d02884c7/status.txt +1 -0
  66. package/.code/agents/f95b7464-3e25-4897-b153-c8dfd63fd605/error.txt +5 -0
  67. package/.code/agents/fa3c5ddf-cdf7-47a2-930a-b806c6363689/status.txt +1 -0
  68. package/.github/workflows/publish.yml +3 -3
  69. package/.github/workflows/release.yml +4 -0
  70. package/CHANGELOG.md +75 -0
  71. package/NUL +1 -0
  72. package/dist/bundle/index.cjs +65 -42
  73. package/dist/server/errorHandler.d.ts +2 -0
  74. package/dist/server/errorHandler.js +49 -5
  75. package/dist/tools/reconcileAdapter.js +10 -5
  76. package/dist/tools/reconciliation/analyzer.d.ts +8 -2
  77. package/dist/tools/reconciliation/analyzer.js +127 -409
  78. package/dist/tools/reconciliation/csvParser.d.ts +51 -0
  79. package/dist/tools/reconciliation/csvParser.js +413 -0
  80. package/dist/tools/reconciliation/executor.d.ts +8 -0
  81. package/dist/tools/reconciliation/executor.js +204 -58
  82. package/dist/tools/reconciliation/index.d.ts +7 -7
  83. package/dist/tools/reconciliation/index.js +115 -39
  84. package/dist/tools/reconciliation/matcher.d.ts +24 -3
  85. package/dist/tools/reconciliation/matcher.js +175 -133
  86. package/dist/tools/reconciliation/recommendationEngine.js +22 -18
  87. package/dist/tools/reconciliation/reportFormatter.js +9 -8
  88. package/dist/tools/reconciliation/signDetector.d.ts +2 -0
  89. package/dist/tools/reconciliation/signDetector.js +54 -0
  90. package/dist/tools/reconciliation/types.d.ts +20 -34
  91. package/dist/tools/reconciliation/types.js +1 -7
  92. package/dist/tools/reconciliation/ynabAdapter.d.ts +4 -0
  93. package/dist/tools/reconciliation/ynabAdapter.js +15 -0
  94. package/dist/types/reconciliation.d.ts +24 -0
  95. package/dist/types/reconciliation.js +1 -0
  96. package/docs/guides/ARCHITECTURE.md +12 -129
  97. package/docs/plans/2025-11-21-v014-hardening.md +153 -0
  98. package/docs/plans/reconciliation-v2-redesign.md +1571 -0
  99. package/package.json +6 -1
  100. package/scripts/test-recommendations.ts +1 -1
  101. package/src/__tests__/tools/reconciliation/csvParser.integration.test.ts +129 -0
  102. package/src/__tests__/tools/reconciliation/real-world.integration.test.ts +53 -0
  103. package/src/server/errorHandler.ts +52 -5
  104. package/src/tools/reconcileAdapter.ts +10 -5
  105. package/src/tools/reconciliation/__tests__/adapter.test.ts +28 -22
  106. package/src/tools/reconciliation/__tests__/analyzer.test.ts +114 -180
  107. package/src/tools/reconciliation/__tests__/csvParser.test.ts +87 -0
  108. package/src/tools/reconciliation/__tests__/executor.integration.test.ts +1 -1
  109. package/src/tools/reconciliation/__tests__/executor.test.ts +88 -61
  110. package/src/tools/reconciliation/__tests__/matcher.test.ts +68 -54
  111. package/src/tools/reconciliation/__tests__/recommendationEngine.test.ts +37 -30
  112. package/src/tools/reconciliation/__tests__/reportFormatter.test.ts +6 -5
  113. package/src/tools/reconciliation/__tests__/scenarios/extremes.scenario.test.ts +30 -11
  114. package/src/tools/reconciliation/__tests__/scenarios/repeatAmount.scenario.test.ts +50 -15
  115. package/src/tools/reconciliation/__tests__/signDetector.test.ts +211 -0
  116. package/src/tools/reconciliation/__tests__/ynabAdapter.test.ts +61 -0
  117. package/src/tools/reconciliation/analyzer.ts +191 -550
  118. package/src/tools/reconciliation/csvParser.ts +617 -0
  119. package/src/tools/reconciliation/executor.ts +249 -66
  120. package/src/tools/reconciliation/index.ts +148 -54
  121. package/src/tools/reconciliation/matcher.ts +234 -214
  122. package/src/tools/reconciliation/recommendationEngine.ts +23 -19
  123. package/src/tools/reconciliation/reportFormatter.ts +16 -11
  124. package/src/tools/reconciliation/signDetector.ts +117 -0
  125. package/src/tools/reconciliation/types.ts +39 -61
  126. package/src/tools/reconciliation/ynabAdapter.ts +33 -0
  127. package/src/types/reconciliation.ts +49 -0
  128. package/test-exports/ynab_since_2025-10-16_account_53298e13_238items_2025-11-28_13-46-20.json +3662 -0
  129. package/.code/agents/0427d95e-edca-431f-a214-5e53264e29c4/error.txt +0 -8
  130. package/.code/agents/0d675174-d1e1-41c3-9975-4c2e275819a9/error.txt +0 -3
  131. package/.code/agents/0d8c5afd-4787-422b-abf8-2e5943fc7e67/error.txt +0 -3
  132. package/.code/agents/0ec34a70-ed5d-4b9e-bee4-bb0e4cccbc4b/error.txt +0 -1
  133. package/.code/agents/0ef51a21-1ab1-49d7-9561-0eaa43875ebc/error.txt +0 -12
  134. package/.code/agents/15db95d7-abad-4b4d-9c3b-8446089cb61d/error.txt +0 -1
  135. package/.code/agents/19ab9acb-f675-4ff0-902a-09a5476f8149/error.txt +0 -1
  136. package/.code/agents/1ef7e12d-f6ff-4897-8a9b-152d523d898e/error.txt +0 -5
  137. package/.code/agents/2465/exec-call_lroN9KKzJVWC7t5423DK1nT9.txt +0 -1453
  138. package/.code/agents/28edb6fe-95a9-41a0-ae69-aa0100d26c0c/error.txt +0 -8
  139. package/.code/agents/2ae40cf5-b4bf-42e2-92bf-7ea350a7755e/error.txt +0 -9
  140. package/.code/agents/2bfc4e1f-ac4b-45a5-b6df-bf89d4dbb54c/error.txt +0 -1
  141. package/.code/agents/2e2e1134-eff0-49be-ba25-8e2c3468a564/error.txt +0 -5
  142. package/.code/agents/3/exec-call_203OC4TNVkLxW7z2HCVEQ1cM.txt +0 -81
  143. package/.code/agents/3/exec-call_SS5T0XSiXB4LSNzUKTl75wkh.txt +0 -610
  144. package/.code/agents/3322c003-ce5e-48e3-a342-f5049c5bf9a2/error.txt +0 -1
  145. package/.code/agents/391e9b08-1ebc-468c-9bcd-6d0cc3193b37/error.txt +0 -1
  146. package/.code/agents/3ab0aa84-b7bb-4054-afa3-40b8fd7d3be0/error.txt +0 -1
  147. package/.code/agents/3bed368d-50fe-477e-aee3-a6707eaa1ab9/error.txt +0 -3
  148. package/.code/agents/3e40b925-db12-442f-8d7a-a25fc69a6672/error.txt +0 -8
  149. package/.code/agents/414d5776-cf58-41f3-9328-a6daed503a50/error.txt +0 -5
  150. package/.code/agents/42687751-4565-4610-b240-67835b17d861/error.txt +0 -1
  151. package/.code/agents/46b98876-1a39-43c9-9e2f-507ca6d47335/error.txt +0 -9
  152. package/.code/agents/4a7d9491-b26f-43dd-850d-2ecdc49b5d1b/error.txt +0 -1
  153. package/.code/agents/4e60f00a-1b3e-447f-87f3-7faf9deddec3/error.txt +0 -13
  154. package/.code/agents/5138fc1c-4d49-4b74-a7da-ccdb3a8e44e7/error.txt +0 -14
  155. package/.code/agents/521cff39-a7a3-42e5-a557-134f0f7daaa0/error.txt +0 -5
  156. package/.code/agents/53302dc5-3857-4413-9a47-9e0f64a51dc4/error.txt +0 -5
  157. package/.code/agents/567c7c2e-6a6f-4761-a08d-d36deeb2e0ac/error.txt +0 -5
  158. package/.code/agents/57b00845-80dc-47c9-953c-3028d16275d6/error.txt +0 -3
  159. package/.code/agents/593d9005-c2a5-48fd-8813-ece0d3f2de96/error.txt +0 -1
  160. package/.code/agents/5a112e66-0e1a-42f9-877c-53af56ea3551/error.txt +0 -1
  161. package/.code/agents/5b05e8ed-7788-4738-b7ee-9faa8180f992/error.txt +0 -5
  162. package/.code/agents/5f888d6f-d7ca-4ac8-be23-9ea1bf753951/error.txt +0 -5
  163. package/.code/agents/607db3ab-e4b0-435b-b497-93e9aa525549/error.txt +0 -8
  164. package/.code/agents/67dcb2a2-900f-4c78-b3fc-80b5213e0ddf/error.txt +0 -8
  165. package/.code/agents/69ad848c-4e98-49b3-b16c-0094ac2d1759/error.txt +0 -5
  166. package/.code/agents/6c9cfc5f-0d0b-445c-b121-9f60082c4f70/error.txt +0 -1
  167. package/.code/agents/6f6f8f77-4ab0-4f6e-9f30-40e8be0bd8f5/error.txt +0 -1
  168. package/.code/agents/72a7cde4-fa8a-4024-9038-27faa550539b/error.txt +0 -1
  169. package/.code/agents/7b48335c-8247-43aa-9949-5f820ba8e199/error.txt +0 -1
  170. package/.code/agents/80944249-bea9-4ac5-87de-a666c4df306e/error.txt +0 -1
  171. package/.code/agents/826099df-1b66-4186-a915-7eb59f9db19d/error.txt +0 -5
  172. package/.code/agents/8291d158-18a8-4a92-b799-4e9a4d9cce88/error.txt +0 -1
  173. package/.code/agents/82fb71a3-20fb-4341-804a-a2fc900f95bc/error.txt +0 -1
  174. package/.code/agents/855790ea-54ee-43e4-8209-a66994e37590/error.txt +0 -1
  175. package/.code/agents/88ce3a2e-04f2-42be-9062-bf97aa798da0/error.txt +0 -3
  176. package/.code/agents/9a17e398-b6ed-4218-bb55-bc64a8d38ce8/error.txt +0 -8
  177. package/.code/agents/9a4f4bfc-a2a6-4f40-a896-9335b41a7ed1/error.txt +0 -1
  178. package/.code/agents/9b633e55-ef84-47d6-94bb-fd3dd172ad97/error.txt +0 -1
  179. package/.code/agents/9b81f3ab-c72b-4a81-9a8f-28a49ddba84a/error.txt +0 -8
  180. package/.code/agents/a35daf29-b2d1-4aef-9b42-dad63a76bd47/error.txt +0 -3
  181. package/.code/agents/a81990cc-69ee-44d2-b907-17403c9bc5d7/error.txt +0 -5
  182. package/.code/agents/ab56260a-4a83-4ad4-9410-f88a23d6520a/error.txt +0 -1
  183. package/.code/agents/ad722c31-2d1d-45f7-bae2-3f02ca455b60/error.txt +0 -1
  184. package/.code/agents/b62e8690-3324-4b97-9309-731bee79416b/error.txt +0 -5
  185. package/.code/agents/baf60a3a-752b-4ad8-99d6-df32423ed2eb/error.txt +0 -1
  186. package/.code/agents/be049042-7dcb-4ac8-9beb-c8f1aea67742/error.txt +0 -14
  187. package/.code/agents/bed1dcb4-bfce-4a9f-8594-0f994962aafd/error.txt +0 -1
  188. package/.code/agents/c324a6cf-e935-4ede-9529-b3ebc18e8d6b/error.txt +0 -5
  189. package/.code/agents/c37c06ff-dfe3-43f2-9bbc-3ec73ec8f41d/error.txt +0 -5
  190. package/.code/agents/c8cd6671-433a-456b-9f88-e51cb2df6bfc/error.txt +0 -11
  191. package/.code/agents/ca2ccb67-2f24-428e-b27d-9365beadd140/error.txt +0 -1
  192. package/.code/agents/cf08c0c8-e7f0-423e-93ba-547e8e818340/error.txt +0 -8
  193. package/.code/agents/d579c74f-874b-40a4-9d56-ced1eb6a701d/error.txt +0 -1
  194. package/.code/agents/df412c98-7378-4deb-8e1e-76c416931181/error.txt +0 -3
  195. package/.code/agents/e5134eb3-2af4-45b0-8998-051cb4afdb45/error.txt +0 -3
  196. package/.code/agents/e6308471-aa45-4e9e-9496-2e9404164d97/error.txt +0 -8
  197. package/.code/agents/e7bd8bc7-23fb-4f46-98dc-b0dcf11b75a1/error.txt +0 -1
  198. package/.code/agents/e92bec35-378d-4fe1-8ac0-6e1bb3c86911/error.txt +0 -5
  199. package/.code/agents/ed918fbf-2dc4-4aa2-bfc5-04b65d9471ea/error.txt +0 -1
  200. package/.code/agents/ef1d756f-b272-48fc-8729-f05c494674f7/error.txt +0 -1
  201. package/.code/agents/ef359853-0249-4e41-a804-c0fc459fe456/error.txt +0 -1
  202. package/.code/agents/effc7b4a-4b90-40a0-8c86-a7a99d2d5fd2/error.txt +0 -1
  203. package/.code/agents/fa15f8d5-8359-4a8b-83a3-2f2056b3ff40/error.txt +0 -3
  204. package/.code/agents/fbef4193-eadf-4c8a-83ff-4878a6310f25/error.txt +0 -8
  205. package/.code/agents/fd0a4b4a-fda4-4964-a6d6-2b8a2da387c6/error.txt +0 -1
  206. package/.gemini/settings.json +0 -8
  207. package/WARP.md +0 -245
@@ -0,0 +1,218 @@
1
+
2
+  RUN  v3.2.4 C:/Users/ksutk/projects/ynab-mcpb
3
+
4
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should convert to lowercase 4ms
5
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should remove all spaces 0ms
6
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should remove special characters 0ms
7
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should keep only alphanumeric characters 0ms
8
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should handle null and undefined 0ms
9
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should handle empty string 0ms
10
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should handle real-world examples 0ms
11
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should match identical normalized strings 0ms
12
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should match despite different special characters 1ms
13
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should not match different strings 0ms
14
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should handle null and undefined 0ms
15
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should match empty strings 0ms
16
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should match real-world examples 0ms
17
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should return 100 for identical strings 0ms
18
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should return high score for similar strings 1ms
19
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should return lower score for different strings 0ms
20
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should return 0 for completely different strings 0ms
21
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should handle null and undefined 0ms
22
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should calculate Levenshtein distance correctly 0ms
23
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should handle real-world payee variations 0ms
24
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should return 100 for identical tokens 1ms
25
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should return score for same tokens in different order 0ms
26
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should return partial score for partial overlap 0ms
27
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should return 0 for no overlap 0ms
28
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should handle null and undefined 0ms
29
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should split on alpha/numeric boundaries 0ms
30
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should handle real-world examples 0ms
31
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > should return 100 for exact normalized match 0ms
32
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > should return best score from fuzzy or token matching 0ms
33
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > should handle typos with fuzzy matching 0ms
34
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > should return 0 for completely different payees 0ms
35
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > should handle null and undefined 0ms
36
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > real-world examples from design spec > should match Shell variations 0ms
37
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > real-world examples from design spec > should match Amazon variations 0ms
38
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > real-world examples from design spec > should match Netflix variations 0ms
39
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should return true when payee contains substring 0ms
40
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should be case insensitive 0ms
41
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should ignore special characters 0ms
42
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should return false when substring not found 0ms
43
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should handle null and undefined 0ms
44
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should match partial words 0ms
45
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > edge cases > should handle very long payee names 0ms
46
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > edge cases > should handle Unicode characters 0ms
47
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > edge cases > should handle numbers only 0ms
48
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > edge cases > should handle mixed case with numbers 0ms
49
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should format a basic report with header and sections 5ms
50
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show statement date range 1ms
51
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show balanced status when no discrepancy 1ms
52
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show discrepancy with correct direction when YNAB higher 1ms
53
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show discrepancy with correct direction when bank higher 0ms
54
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show transaction analysis counts 1ms
55
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should list unmatched bank transactions 1ms
56
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should truncate long unmatched lists 1ms
57
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show suggested matches 13ms
58
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should include insights section when insights present 1ms
59
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should use correct severity icons 1ms
60
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should truncate insights list 0ms
61
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should include execution section when execution provided 1ms
62
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show dry run notice when dry run enabled 0ms
63
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show execution recommendations 0ms
64
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show next steps when no execution 0ms
65
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should handle empty next steps gracefully 0ms
66
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should use default account name when not provided 0ms
67
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatBalanceInfo > should format balance info correctly 1ms
68
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatTransactionList > should format bank transactions 1ms
69
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatTransactionList > should format YNAB transactions 1ms
70
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatTransactionList > should truncate long lists 0ms
71
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatTransactionList > should handle empty list 1ms
72
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > edge cases > should handle negative amounts correctly 0ms
73
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > edge cases > should handle positive amounts correctly 0ms
74
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > edge cases > should handle long payee names gracefully 0ms
75
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > edge cases > should handle zero discrepancy 0ms
76
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > edge cases > should format insight evidence when available 0ms
77
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > high confidence matches (≥90%) > should return high confidence for exact match 36ms
78
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > high confidence matches (≥90%) > should return high confidence for normalized payee match 18ms
79
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > high confidence matches (≥90%) > should handle date within tolerance 6ms
80
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > medium confidence matches (60-89%) > should return high confidence for fuzzy payee match 53ms
81
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > medium confidence matches (60-89%) > should provide multiple candidates for medium confidence 3ms
82
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > low/no confidence matches > should return no match when amount differs 1ms
83
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > low/no confidence matches > should not match opposite-signed transactions 1ms
84
+ ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > prioritization > should prioritize uncleared transactions over cleared 13ms
85
+  → expected 'y1' to be 'y2' // Object.is equality
86
+ ×  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > prioritization > should use date proximity as tiebreaker 4ms
87
+  → expected 'y1' to be 'y2' // Object.is equality
88
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > amount tolerance > should match within amount tolerance 2ms
89
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > amount tolerance > should not match outside amount tolerance 4ms
90
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > used IDs > should skip already-used YNAB transaction IDs 0ms
91
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findMatches > should match multiple bank transactions 2ms
92
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findMatches > should prevent duplicate matching of YNAB transactions 1ms
93
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findMatches > should handle mix of matched and unmatched transactions 1ms
94
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findMatches > should use custom configuration 0ms
95
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > edge cases > should handle empty YNAB transactions list 1ms
96
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > edge cases > should handle null payee names 1ms
97
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > edge cases > should handle very small amounts 1ms
98
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > edge cases > should handle large amounts 4ms
99
+ ✓  unit  src/tools/reconciliation/__tests__/adapter.causes.test.ts > buildReconciliationPayload discrepancy causes mapping > maps legacy causes to MoneyValue entries with CAD currency 74ms
100
+ ✓  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
101
+ ✓  unit  src/tools/reconciliation/__tests__/scenarios/repeatAmount.scenario.test.ts > scenario: repeat amount collisions > prioritizes repeat-amount insight when multiple bank rows share totals 56ms
102
+ ✓  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 33ms
103
+ ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should perform full analysis and return structured results 46ms
104
+ ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should categorize high-confidence matches as auto-matches 4ms
105
+ ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should categorize medium-confidence matches as suggested 3ms
106
+ ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should identify unmatched bank transactions 2ms
107
+ ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should identify unmatched YNAB transactions 3ms
108
+ ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should calculate balance information correctly 2ms
109
+ ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should generate appropriate summary 4ms
110
+ ✓  unit  src/tools/reconciliation/__tests__/adapter.test.ts > buildReconciliationPayload > returns human narrative and structured payload with MoneyValue fields 83ms
111
+ ✓  unit  src/tools/reconciliation/__tests__/adapter.test.ts > buildReconciliationPayload > includes execution data when provided 6ms
112
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > empty context scenarios > should return empty array for completely empty context 50ms
113
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > empty context scenarios > should return empty array with no insights and no unmatched transactions 6ms
114
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > insight processing > should process near_match insights 8ms
115
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > insight processing > should process repeat_amount insights 4ms
116
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > insight processing > should process anomaly insights 4ms
117
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > insight processing > should process critical anomaly insights with higher severity 4ms
118
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > insight processing > should process multiple insights 6ms
119
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched bank transactions > should create create_transaction recommendation for unmatched bank transaction 11ms
120
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched bank transactions > should include memo if present in bank transaction 5ms
121
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched bank transactions > should not include memo if not present in bank transaction 6ms
122
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched bank transactions > should create recommendations for multiple unmatched bank transactions 5ms
123
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched YNAB transactions > should create update_cleared recommendation for uncleared YNAB transaction 4ms
124
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched YNAB transactions > should not create recommendation for already cleared YNAB transaction 5ms
125
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched YNAB transactions > should not create recommendation for reconciled YNAB transaction 3ms
126
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched YNAB transactions > should handle null payee_name in YNAB transaction 3ms
127
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > suggested matches > should create review_duplicate recommendation for suggested match 5ms
128
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > suggested matches > should create create_transaction for suggested match with no YNAB transaction 7ms
129
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > suggested matches > should create manual_review for combination match with multiple candidates 7ms
130
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > amount sign preservation (CRITICAL) > should preserve negative amounts for expenses in create_transaction 4ms
131
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > amount sign preservation (CRITICAL) > should preserve positive amounts for income in create_transaction 3ms
132
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > amount sign preservation (CRITICAL) > should preserve negative amounts in suggested match create_transaction 3ms
133
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > amount sign preservation (CRITICAL) > should handle zero amounts correctly 3ms
134
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > sorting logic > should sort by priority (high > medium > low) 5ms
135
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > sorting logic > should sort by confidence when priorities are equal 4ms
136
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > sorting logic > should handle mixed priorities and confidence 4ms
137
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > recommendation metadata > should include correct metadata in all recommendations 7ms
138
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > recommendation metadata > should generate unique IDs for each recommendation 4ms
139
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > recommendation metadata > should use correct currency from balance info 5ms
140
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > recommendation metadata > should include enhanced metadata in insight-based manual review recommendations 5ms
141
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > recommendation metadata > should include enhanced metadata for all insight-based recommendation types 8ms
142
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle empty insights array 6ms
143
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle empty unmatched arrays 4ms
144
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle missing optional fields 11ms
145
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle very large arrays of recommendations 29ms
146
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle insight without evidence 4ms
147
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle transactions with very small amounts 3ms
148
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle transactions with very large amounts 6ms
149
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > combined scenarios > should handle combination of insights, unmatched bank, and unmatched YNAB 5ms
150
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > combined scenarios > should handle all recommendation types at once 4ms
151
+ ✓  unit  src/tools/reconciliation/__tests__/schemaUrl.test.ts > buildReconciliationPayload schema reference > points to the master branch schema file on raw.githubusercontent.com 4ms
152
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > error normalization helpers > normalizes YNAB SDK error objects with status and detail 2ms
153
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > error normalization helpers > retains status from Error-like objects and propagates HTTP code decisions 1ms
154
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation (dry run) > produces action plan without calling YNAB APIs when dry_run=true 29ms
155
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation (apply mode) > creates, updates, and adjusts when dry_run=false 5ms
156
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation (ordered halting) > processes newest auto matches first and stops once balances align 1ms
157
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > uses bulk create API for batches with multiple transactions 7ms
158
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > falls back to sequential mode for single transaction scenarios 2ms
159
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > falls back to sequential creation when bulk request fails 2ms
160
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > propagates rate-limit error payloads with status codes from bulk create 4ms
161
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > splits large batches into 100-transaction chunks 19ms
162
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > throws on fatal sequential creation errors surfaced as objects 1ms
163
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > flags duplicate transactions returned by YNAB API 2ms
164
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > honors halting logic when balance aligns mid-batch 3ms
165
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > processes multiple chunks and halts at chunk boundaries when balance aligns 8ms
166
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > simulates bulk preview during dry-run mode 2ms
167
+
168
+ ⎯⎯⎯⎯⎯⎯⎯ Failed Tests 2 ⎯⎯⎯⎯⎯⎯⎯
169
+
170
+  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > prioritization > should prioritize uncleared transactions over cleared
171
+ AssertionError: expected 'y1' to be 'y2' // Object.is equality
172
+
173
+ Expected: "y2"
174
+ Received: "y1"
175
+
176
+  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:262:44
177
+ 260| 
178
+ 261|  // Should prefer uncleared transaction
179
+ 262|  expect(match.ynab_transaction?.id).toBe('y2');
180
+  |  ^
181
+ 263|  });
182
+ 264| 
183
+
184
+ ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/2]⎯
185
+
186
+  FAIL   unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > prioritization > should use date proximity as tiebreaker
187
+ AssertionError: expected 'y1' to be 'y2' // Object.is equality
188
+
189
+ Expected: "y2"
190
+ Received: "y1"
191
+
192
+  ❯ src/tools/reconciliation/__tests__/matcher.test.ts:298:44
193
+ 296| 
194
+ 297|  // Should prefer closer date
195
+ 298|  expect(match.ynab_transaction?.id).toBe('y2');
196
+  |  ^
197
+ 299|  });
198
+ 300|  });
199
+
200
+ ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/2]⎯
201
+
202
+
203
+  Test Files  1 failed | 11 passed (12)
204
+  Tests  2 failed | 159 passed (161)
205
+  Start at  20:25:39
206
+  Duration  2.38s (transform 1.83s, setup 0ms, collect 7.65s, tests 943ms, environment 6ms, prepare 3.77s)
207
+
208
+
209
+ 📊 Test results written to test-results/
210
+ - summary.json (overview)
211
+ - *-tests.json (1 project file(s))
212
+ - failed-tests.json (2 failure(s))
213
+ - passed-tests-summary.json
214
+ - index.html (interactive report)
215
+
216
+ 💡 test-results.json contains a pointer to the detailed results
217
+  HTML  Report is generated
218
+  You can run npx vite preview --outDir test-results to see the test results.
@@ -0,0 +1,180 @@
1
+
2
+  RUN  v3.2.4 C:/Users/ksutk/projects/ynab-mcpb
3
+
4
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should convert to lowercase 6ms
5
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should remove all spaces 0ms
6
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should remove special characters 1ms
7
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should keep only alphanumeric characters 0ms
8
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should handle null and undefined 1ms
9
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should handle empty string 0ms
10
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizePayee > should handle real-world examples 100ms
11
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should format a basic report with header and sections 15ms
12
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show statement date range 0ms
13
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show balanced status when no discrepancy 1ms
14
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show discrepancy with correct direction when YNAB higher 1ms
15
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show discrepancy with correct direction when bank higher 0ms
16
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show transaction analysis counts 1ms
17
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should list unmatched bank transactions 1ms
18
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should truncate long unmatched lists 1ms
19
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show suggested matches 1ms
20
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should include insights section when insights present 1ms
21
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should use correct severity icons 0ms
22
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should truncate insights list 0ms
23
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should include execution section when execution provided 1ms
24
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show dry run notice when dry run enabled 0ms
25
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show execution recommendations 0ms
26
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should show next steps when no execution 0ms
27
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should handle empty next steps gracefully 100ms
28
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > high confidence matches (≥90%) > should return high confidence for exact match 11ms
29
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > high confidence matches (≥90%) > should return high confidence for normalized payee match 1ms
30
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > high confidence matches (≥90%) > should handle date within tolerance 1ms
31
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > medium confidence matches (60-89%) > should return high confidence for fuzzy payee match 2ms
32
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > medium confidence matches (60-89%) > should provide multiple candidates for medium confidence 3ms
33
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > low/no confidence matches > should return no match when amount differs 1ms
34
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > low/no confidence matches > should not match opposite-signed transactions 1ms
35
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > prioritization > should prioritize uncleared transactions over cleared 1ms
36
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > prioritization > should use date proximity as tiebreaker 1ms
37
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > amount tolerance > should match within amount tolerance 1ms
38
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > amount tolerance > should not match outside amount tolerance 0ms
39
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findBestMatch > used IDs > should skip already-used YNAB transaction IDs 0ms
40
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findMatches > should match multiple bank transactions 3ms
41
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findMatches > should prevent duplicate matching of YNAB transactions 1ms
42
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findMatches > should handle mix of matched and unmatched transactions 1ms
43
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > findMatches > should use custom configuration 1ms
44
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > edge cases > should handle empty YNAB transactions list 1ms
45
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > edge cases > should handle null payee names 0ms
46
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > edge cases > should handle very small amounts 1ms
47
+ ✓  unit  src/tools/reconciliation/__tests__/matcher.test.ts > matcher > edge cases > should handle large amounts 1ms
48
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatHumanReadableReport > should use default account name when not provided 0ms
49
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatBalanceInfo > should format balance info correctly 0ms
50
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatTransactionList > should format bank transactions 1ms
51
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatTransactionList > should format YNAB transactions 0ms
52
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatTransactionList > should truncate long lists 0ms
53
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > formatTransactionList > should handle empty list 0ms
54
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > edge cases > should handle negative amounts correctly 0ms
55
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > edge cases > should handle positive amounts correctly 0ms
56
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > edge cases > should handle long payee names gracefully 0ms
57
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > edge cases > should handle zero discrepancy 0ms
58
+ ✓  unit  src/tools/reconciliation/__tests__/reportFormatter.test.ts > reportFormatter > edge cases > should format insight evidence when available 0ms
59
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should match identical normalized strings 1ms
60
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should match despite different special characters 1ms
61
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should not match different strings 1ms
62
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should handle null and undefined 1ms
63
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should match empty strings 0ms
64
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > normalizedMatch > should match real-world examples 0ms
65
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should return 100 for identical strings 0ms
66
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should return high score for similar strings 1ms
67
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should return lower score for different strings 0ms
68
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should return 0 for completely different strings 0ms
69
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should handle null and undefined 0ms
70
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should calculate Levenshtein distance correctly 0ms
71
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > fuzzyMatch > should handle real-world payee variations 0ms
72
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should return 100 for identical tokens 1ms
73
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should return score for same tokens in different order 0ms
74
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should return partial score for partial overlap 0ms
75
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should return 0 for no overlap 0ms
76
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should handle null and undefined 0ms
77
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should split on alpha/numeric boundaries 0ms
78
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > tokenBasedSimilarity > should handle real-world examples 0ms
79
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > should return 100 for exact normalized match 1ms
80
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > should return best score from fuzzy or token matching 0ms
81
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > should handle typos with fuzzy matching 0ms
82
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > should return 0 for completely different payees 0ms
83
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > should handle null and undefined 3ms
84
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > real-world examples from design spec > should match Shell variations 1ms
85
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > real-world examples from design spec > should match Amazon variations 1ms
86
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeSimilarity > real-world examples from design spec > should match Netflix variations 0ms
87
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should return true when payee contains substring 0ms
88
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should be case insensitive 0ms
89
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should ignore special characters 0ms
90
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should return false when substring not found 0ms
91
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should handle null and undefined 0ms
92
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > payeeContains > should match partial words 0ms
93
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > edge cases > should handle very long payee names 0ms
94
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > edge cases > should handle Unicode characters 0ms
95
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > edge cases > should handle numbers only 0ms
96
+ ✓  unit  src/tools/reconciliation/__tests__/payeeNormalizer.test.ts > payeeNormalizer > edge cases > should handle mixed case with numbers 0ms
97
+ ✓  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 6ms
98
+ ✓  unit  src/tools/reconciliation/__tests__/adapter.causes.test.ts > buildReconciliationPayload discrepancy causes mapping > maps legacy causes to MoneyValue entries with CAD currency 57ms
99
+ ✓  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 25ms
100
+ ✓  unit  src/tools/reconciliation/__tests__/scenarios/repeatAmount.scenario.test.ts > scenario: repeat amount collisions > prioritizes repeat-amount insight when multiple bank rows share totals 28ms
101
+ ✓  unit  src/tools/reconciliation/__tests__/adapter.test.ts > buildReconciliationPayload > returns human narrative and structured payload with MoneyValue fields 56ms
102
+ ✓  unit  src/tools/reconciliation/__tests__/adapter.test.ts > buildReconciliationPayload > includes execution data when provided 5ms
103
+ ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should perform full analysis and return structured results 27ms
104
+ ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should categorize high-confidence matches as auto-matches 2ms
105
+ ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should categorize medium-confidence matches as suggested 2ms
106
+ ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should identify unmatched bank transactions 1ms
107
+ ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should identify unmatched YNAB transactions 1ms
108
+ ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should calculate balance information correctly 1ms
109
+ ✓  unit  src/tools/reconciliation/__tests__/analyzer.test.ts > analyzer > analyzeReconciliation > should generate appropriate summary 2ms
110
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > empty context scenarios > should return empty array for completely empty context 41ms
111
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > empty context scenarios > should return empty array with no insights and no unmatched transactions 3ms
112
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > insight processing > should process near_match insights 8ms
113
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > insight processing > should process repeat_amount insights 4ms
114
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > insight processing > should process anomaly insights 4ms
115
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > insight processing > should process critical anomaly insights with higher severity 3ms
116
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > insight processing > should process multiple insights 5ms
117
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched bank transactions > should create create_transaction recommendation for unmatched bank transaction 3ms
118
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched bank transactions > should include memo if present in bank transaction 2ms
119
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched bank transactions > should not include memo if not present in bank transaction 3ms
120
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched bank transactions > should create recommendations for multiple unmatched bank transactions 3ms
121
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched YNAB transactions > should create update_cleared recommendation for uncleared YNAB transaction 6ms
122
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched YNAB transactions > should not create recommendation for already cleared YNAB transaction 3ms
123
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched YNAB transactions > should not create recommendation for reconciled YNAB transaction 2ms
124
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > unmatched YNAB transactions > should handle null payee_name in YNAB transaction 3ms
125
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > suggested matches > should create review_duplicate recommendation for suggested match 6ms
126
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > suggested matches > should create create_transaction for suggested match with no YNAB transaction 3ms
127
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > suggested matches > should create manual_review for combination match with multiple candidates 4ms
128
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > amount sign preservation (CRITICAL) > should preserve negative amounts for expenses in create_transaction 2ms
129
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > amount sign preservation (CRITICAL) > should preserve positive amounts for income in create_transaction 2ms
130
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > amount sign preservation (CRITICAL) > should preserve negative amounts in suggested match create_transaction 2ms
131
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > amount sign preservation (CRITICAL) > should handle zero amounts correctly 2ms
132
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > sorting logic > should sort by priority (high > medium > low) 3ms
133
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > sorting logic > should sort by confidence when priorities are equal 2ms
134
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > sorting logic > should handle mixed priorities and confidence 3ms
135
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > recommendation metadata > should include correct metadata in all recommendations 3ms
136
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > recommendation metadata > should generate unique IDs for each recommendation 3ms
137
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > recommendation metadata > should use correct currency from balance info 3ms
138
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > recommendation metadata > should include enhanced metadata in insight-based manual review recommendations 4ms
139
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > recommendation metadata > should include enhanced metadata for all insight-based recommendation types 5ms
140
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle empty insights array 3ms
141
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle empty unmatched arrays 2ms
142
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle missing optional fields 3ms
143
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle very large arrays of recommendations 25ms
144
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle insight without evidence 2ms
145
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle transactions with very small amounts 2ms
146
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > edge cases > should handle transactions with very large amounts 3ms
147
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > combined scenarios > should handle combination of insights, unmatched bank, and unmatched YNAB 4ms
148
+ ✓  unit  src/tools/reconciliation/__tests__/recommendationEngine.test.ts > recommendationEngine > generateRecommendations > combined scenarios > should handle all recommendation types at once 4ms
149
+ ✓  unit  src/tools/reconciliation/__tests__/schemaUrl.test.ts > buildReconciliationPayload schema reference > points to the master branch schema file on raw.githubusercontent.com 3ms
150
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > error normalization helpers > normalizes YNAB SDK error objects with status and detail 2ms
151
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > error normalization helpers > retains status from Error-like objects and propagates HTTP code decisions 1ms
152
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation (dry run) > produces action plan without calling YNAB APIs when dry_run=true 24ms
153
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation (apply mode) > creates, updates, and adjusts when dry_run=false 3ms
154
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation (ordered halting) > processes newest auto matches first and stops once balances align 1ms
155
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > uses bulk create API for batches with multiple transactions 5ms
156
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > falls back to sequential mode for single transaction scenarios 1ms
157
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > falls back to sequential creation when bulk request fails 2ms
158
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > propagates rate-limit error payloads with status codes from bulk create 2ms
159
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > splits large batches into 100-transaction chunks 14ms
160
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > throws on fatal sequential creation errors surfaced as objects 1ms
161
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > flags duplicate transactions returned by YNAB API 1ms
162
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > honors halting logic when balance aligns mid-batch 2ms
163
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > processes multiple chunks and halts at chunk boundaries when balance aligns 5ms
164
+ ✓  unit  src/tools/reconciliation/__tests__/executor.test.ts > executeReconciliation - bulk create mode > simulates bulk preview during dry-run mode 1ms
165
+
166
+  Test Files  12 passed (12)
167
+  Tests  161 passed (161)
168
+  Start at  20:26:44
169
+  Duration  1.79s (transform 1.28s, setup 0ms, collect 6.36s, tests 802ms, environment 5ms, prepare 2.78s)
170
+
171
+
172
+ 📊 Test results written to test-results/
173
+ - summary.json (overview)
174
+ - *-tests.json (1 project file(s))
175
+ - passed-tests-summary.json
176
+ - index.html (interactive report)
177
+
178
+ 💡 test-results.json contains a pointer to the detailed results
179
+  HTML  Report is generated
180
+  You can run npx vite preview --outDir test-results to see the test results.
@@ -0,0 +1,3 @@
1
+ Command failed: Error loading configuration: config profile `From the repo root, run `pwd` and `git status -sb`, then describe the current branch and top-level directories. Do not modify any files.
2
+
3
+ [Running in read-only mode - no modifications allowed]` not found