Commit Graph

  • c25c82932d void: a statementless row for a charge that never posted (migration 0040) main siddharthdandClaude Opus 5.5 2026-10-12 18:05:05 +11:00
  • a1c2eb736f rules: run history timestamps in en-AU, not the browser's locale (d/m, never m/d) siddharthd 2026-10-11 00:48:20 +11:00
  • 069034951e reconcile queue: offer a foreign row's exact native twin regardless of provisional AUD siddharthd 2026-10-11 00:35:50 +11:00
  • e956f39ffc order-parse: document that both order lanes must send the RFC Message-ID siddharthdandClaude Opus 5.5 2026-10-03 18:59:56 +10:00
  • d75589e128 docs: the wallet lane -- storage convention, pairing, lock, skips, replay siddharthdandClaude Opus 5.5 2026-10-03 17:30:48 +10:00
  • ce0bf0a775 reconcile queue: never list or offer a superseded row siddharthdandClaude Opus 5.5 2026-10-03 17:21:31 +10:00
  • a3e4e1102a wallet: lock the ingest, pair on time and app, skip notices, ECB fallback siddharthdandClaude Opus 5.5 2026-10-03 16:55:07 +10:00
  • 22fde30b26 currency: a wallet row's amount is AUD, so show its native figure, not the AUD one under a foreign label siddharthdandClaude Opus 5.5 2026-10-03 16:38:33 +10:00
  • 48c6b2395f wallet: never store a native figure as AUD; rate from statement rows only siddharthdandClaude Opus 5 2026-09-11 12:43:25 +10:00
  • 5076f27f68 annual charges: surface upcoming card/loan fees from payments alone siddharthd 2026-08-23 21:44:17 +10:00
  • 10cf0aaf21 transactions: merge/supersede a duplicate by hand, and widen the picker band siddharthd 2026-08-23 19:00:57 +10:00
  • 2251060ac6 db: append-only change log for the ledger (migration 0037) siddharthd 2026-08-23 15:57:44 +10:00
  • 2c05f10aed wallet+intake: adopt the row that is already there, and keep a gift card out of the queue siddharthd 2026-08-22 18:10:08 +10:00
  • 9b59edcf48 reconcile: machine auth for the scheduled sweep, across all owners siddharthd 2026-08-22 16:50:40 +10:00
  • 3d0d75519a wallet: the deterministic parse must beat the model's location siddharthd 2026-08-22 16:33:56 +10:00
  • 8d1875225f wallet: a transaction for every tap (board #252, ING-11) siddharthd 2026-08-22 16:24:28 +10:00
  • 8e66e527ae receipts: adopt the wallet row instead of creating a second one (board #252) siddharthd 2026-08-22 16:17:38 +10:00
  • f31f12799a reconcile: automatic pass for unambiguous statement matches (board #252) siddharthd 2026-08-22 16:13:28 +10:00
  • 5e355c7e85 currency: normalise foreign_currency_code to ISO-4217 (board #254) siddharthd 2026-08-22 16:03:06 +10:00
  • 669f9119b9 enrichment readers: resolve one metadata row, deterministically (board #253) siddharthd 2026-08-22 15:57:31 +10:00
  • 258fe3b617 intake: the needs-header card names what is missing and gives the right advice for it siddharthd 2026-08-22 12:35:09 +10:00
  • 0823244e4a intake: the word "Image" is not a receipt, and the prompt must not be data siddharthd 2026-08-22 11:46:05 +10:00
  • d88ca2a24c intake: a duplicate card that refuses a purchase must say what to do instead feat/intake-router siddharthd 2026-08-21 18:27:53 +10:00
  • 91586ce4a4 test(intake): the second review pass, and CLAUDE.md for the rules it set siddharthd 2026-08-21 18:23:52 +10:00
  • 4b09d4136f intake: lock the purchase, not the batch, and hold on both write paths siddharthd 2026-08-21 18:23:51 +10:00
  • 4f0f0dd285 intake: escape the currency and the button label too siddharthd 2026-08-21 18:23:51 +10:00
  • b788b4e8fa line-items: snapshot before writing, and stop reporting writes that did not happen siddharthd 2026-08-21 18:23:32 +10:00
  • b5569b8ccc schema: previous_line_items on the model; say what the finish_reason rule is siddharthd 2026-08-21 18:23:32 +10:00
  • d4ff68363a expense_metadata: every reader resolves the row a write lands on siddharthd 2026-08-21 18:23:31 +10:00
  • 631e75e58f test(intake): cover the review findings, and CLAUDE.md for the rules they set siddharthd 2026-08-21 17:53:06 +10:00
  • c25db5211b intake: a NULL platform is "no platform", and Create re-checks before it inserts siddharthd 2026-08-21 17:53:06 +10:00
  • 9a442b7355 intake: escape mrkdwn, and stop printing every total as dollars siddharthd 2026-08-21 17:52:47 +10:00
  • f9638cc5e5 line-items: one metadata row, agreed on by the write and the read siddharthd 2026-08-21 17:52:47 +10:00
  • 7424d13858 intake: only a reply that finished is a reply the schema constrained siddharthd 2026-08-21 17:52:25 +10:00
  • be3d10d4f1 intake: match merchants on whole words, not substrings siddharthd 2026-08-21 17:52:25 +10:00
  • a4e5f540cc docs: intake router routes, env vars, migration 0034 siddharthd 2026-08-21 12:10:06 +10:00
  • 32a47bf8ee test(intake): rules, PDF text, C2 idempotency, enrich-vs-candidates, pantry hand-off, Slack taps siddharthd 2026-08-21 12:10:06 +10:00
  • c7ea516c34 slack: dispatch the four intake taps on action_id (plan §11 C5) siddharthd 2026-08-21 12:10:05 +10:00
  • db5c9a02a7 intake: POST /api/intake router + PUT /api/transactions/[id]/line-items (plan §11 C1, C2) siddharthd 2026-08-21 12:10:05 +10:00
  • a538376638 db(0034): intake_batches + intake_merchant_kinds for the intake router siddharthd 2026-08-21 12:10:05 +10:00
  • b958d05287 test(db): resolve the integration DSN at run time instead of storing an IP (#161) siddharthd 2026-08-21 00:52:54 +10:00
  • eaf5d5ac66 test(analytics): guard the three unguarded Priority 0 behaviours (#155) siddharthd 2026-08-21 00:52:36 +10:00
  • fc9ffaba25 chore(ci): clear the lint debt and make lint blocking (#79) siddharthd 2026-08-21 00:52:14 +10:00
  • 9f1be74330 transactions: let a gift card be a payment method you can pick siddharthd 2026-08-17 18:14:58 +10:00
  • 4f307e9517 docs: what importing a BNPL account changes, and the Zip data decisions siddharthd 2026-08-15 19:11:50 +10:00
  • 2cfaf8e8c8 statements: derive account identity, fix the new-bank alert (0033) siddharthd 2026-08-15 17:03:13 +10:00
  • c3b623052d statements: keep one bank's national entities apart (migration 0032) siddharthd 2026-08-15 16:52:14 +10:00
  • 0bb4329249 statements: one institution, one bank name (migration 0031) siddharthd 2026-08-15 16:45:04 +10:00
  • 95d8544752 transactions: change who paid, on a row and on a statement siddharthd 2026-08-15 16:17:38 +10:00
  • 6c14b493ef analytics: your share of what someone else paid is your spend siddharthd 2026-08-15 15:37:32 +10:00
  • 22c2349a47 docs: one CSV import path, and the statement-coverage rule that replaced the Frollo importer siddharthd 2026-08-13 15:09:11 +10:00
  • 3edcc27781 csv import: map a currency column, or foreign rows land as AUD siddharthd 2026-08-13 15:08:50 +10:00
  • 461c021e7a csv import: exclude what the statements already cover, and delete the Frollo importer siddharthd 2026-08-13 12:58:06 +10:00
  • b82c4570bd frollo: don't import what the statements already cover siddharthd 2026-08-13 12:36:08 +10:00
  • afd75d3f09 transactions: never print a foreign amount as AUD siddharthd 2026-08-13 12:32:17 +10:00
  • 2738213a23 docs: record the ledger-duplicate guard and why awaitsStatementLine is gone siddharthd 2026-08-13 12:24:59 +10:00
  • bb8a009e02 frollo: don't re-import what the ledger already has, and stop hiding the queue siddharthd 2026-08-13 12:23:01 +10:00
  • 3e826a317b CLAUDE.md: document the Frollo account feed and the new reconcile exclusion siddharthd 2026-08-13 11:29:08 +10:00
  • 21e9e765a3 Add /api/frollo/ingest so the import can run unattended siddharthd 2026-08-13 11:19:27 +10:00
  • 493ff6f631 Import Frollo account feeds for the accounts statements don't cover siddharthd 2026-08-13 10:49:35 +10:00
  • 2c666236b2 orders: share the merchant tidy, and fix two bugs the corpus run found (board 212) siddharthd 2026-08-12 21:07:50 +10:00
  • 215303161b orders: bring the lifecycle-only toggle's numbers up to date (board 210) siddharthd 2026-08-12 20:38:43 +10:00
  • 3b5e495ca4 orders phase 2: order_transaction_links, and move every reader to it (board 205) siddharthd 2026-08-12 20:29:42 +10:00
  • 6b9b5fe518 orders: badge the annual summary receipts (board 211) siddharthd 2026-08-12 20:12:36 +10:00
  • 231ef3411a orders: record why line items may not exempt a row from the phantom filter siddharthd 2026-08-12 18:26:24 +10:00
  • 699e4a2ddd orders: cast cadence order_count to int — BigInt broke every recurring merchant siddharthd 2026-08-12 17:12:14 +10:00
  • 79940202f1 orders: fix the 42703 that broke EVERY order detail page siddharthd 2026-08-12 17:10:13 +10:00
  • 9790b64e1d orders: badge sender authentication, not source_trust siddharthd 2026-08-12 17:10:04 +10:00
  • 1b34cd65d8 orders: restore the design the prototype had, and stop repeating the row siddharthd 2026-08-12 13:28:06 +10:00
  • c05c4b5a35 orders: show the context, not just the row siddharthd 2026-08-12 12:50:03 +10:00
  • b26d526e83 orders: a browse surface for the purchase history the ledger cannot show siddharthd 2026-08-12 12:15:16 +10:00
  • 872da3b12c shared page: window the rendered rows — DOM no longer grows with history siddharthd 2026-08-10 19:46:58 +10:00
  • b4f28010df shared page: fix expand freeze — cache date formatter, memoize rows siddharthd 2026-08-10 19:39:19 +10:00
  • 0e5422919e shared page: expandable receipt details on split transactions siddharthd 2026-08-10 18:27:16 +10:00
  • 7f8e363b5b order details: hide the review surface for spine-bridged retail rows siddharthd 2026-08-10 18:02:51 +10:00
  • 502e3f563c 0029: rescope uq_expense_source_order for per-shipment bridge rows siddharthd 2026-08-10 17:42:45 +10:00
  • 7819a88af2 order-details: null item amounts render nothing, not $0.00; qty defaults to 1 siddharthd 2026-08-10 13:37:39 +10:00
  • a1e776e9be docs: quote the net trip phase figures, not the raw sums siddharthd 2026-08-02 22:22:46 +10:00
  • 9e4b518f57 Split a trip into its two economies, so travel stops being a 60% slab siddharthd 2026-08-02 22:20:55 +10:00
  • 2d341e24a0 A negative trip balance is over-coverage, not a bill siddharthd 2026-08-02 21:52:51 +10:00
  • 6db2345c49 Net the trip debt to one figure, and show payer, category and search on Shared siddharthd 2026-08-02 21:19:40 +10:00
  • cb7665ded1 Let everyone on a trip see it, and give payments their scope back siddharthd 2026-08-02 19:11:19 +10:00
  • 6e179d3a0a docs: put the UI review's priorities 1-4 on the board, and correct two claims siddharthd 2026-08-02 16:44:04 +10:00
  • dbc6fd1352 Add source identity to transactions so a feed can be re-imported safely siddharthd 2026-08-01 22:13:07 +10:00
  • c70d2b1fac Sign the investments line so withdrawals net against contributions siddharthd 2026-07-31 00:05:05 +10:00
  • f6c500b27a Hide transfers in the transactions view by default siddharthd 2026-07-30 23:34:31 +10:00
  • 549abd8cca docs: point work tracking at the board, not ACTIONS.md siddharthd 2026-07-30 23:12:50 +10:00
  • a465b147a3 Read receipt lines under the keys the receipt panel renders siddharthd 2026-07-30 13:51:33 +10:00
  • 17028c79ff Accept grocery receipts scanned in pantry as candidate spend siddharthd 2026-07-30 13:40:32 +10:00
  • 69b3ed8ea9 docs: catch CLAUDE.md and the UI review up with the shared-expenses rebuild siddharthd 2026-07-29 22:22:42 +10:00
  • a56e5e2de5 docs: splits total 100%, and why the remainder is the owner's siddharthd 2026-07-29 10:26:44 +10:00
  • 22e4a1ead0 fix(splits): make every split account for 100% siddharthd 2026-07-29 10:23:06 +10:00
  • dd0462a5f9 fix(orders): decode • so item options separate again siddharthd 2026-07-28 22:38:38 +10:00
  • 3144cf3176 feat(orders): record credits orders from before the cutover siddharthd 2026-07-28 22:20:03 +10:00
  • fe104a9618 fix(orders): read both legs of an Uber payment siddharthd 2026-07-28 21:59:35 +10:00
  • 63aaf1eb21 fix(orders): read A$ totals and credits-funded receipts siddharthd 2026-07-28 20:32:02 +10:00
  • 7cf247951a docs: the verdict scale, and the two Slack rules that cost real data siddharthd 2026-07-28 19:17:25 +10:00
  • d458228625 feat(orders): a fifth verdict, 'bad', between ok and never again siddharthd 2026-07-28 19:12:26 +10:00
  • 82f751cbf4 fix(slack): update the card via response_url, not the HTTP response siddharthd 2026-07-28 18:54:53 +10:00
  • 9f0f38449b feat(slack): ask the other person too, and put rating before sharing siddharthd 2026-07-28 18:33:25 +10:00