Commit Graph
5481 Commits
Author SHA1 Message Date
Saurabh Mishra 2420942e88 [AI] Only show stacked bar tooltip truncation indicator when categories are hidden (#8917)
* [AI] Only show stacked bar tooltip truncation indicator when categories are hidden

* [AI] Cover the non-compact tooltip case and sharpen the release note
2026-09-29 00:52:52 +00:00
Mohammed Yasin Zuhayr 967684afa4 chore: migrate sync-server app-sync validation and errors to TypeScript (#9030)
* chore: migrate sync-server app-sync validation and errors to TypeScript

* fix: reject an empty x-actual-group-id header on upload
2026-09-29 00:51:16 +00:00
Boris Rybalkin 421f16638b Add Syncloud to the additional installation options (#9034)
* Add Syncloud to the additional installation options

Syncloud is a server operating system for a Raspberry Pi, a spare PC or a VPS,
which packages actual-server as one of the apps it installs and updates. Listed
under the community options alongside the other platform guides, with one link
for what it is and one for setting a device up.

* Drop the Syncloud description and setup link

Keep only the link that is about running Actual, as requested in review.
2026-09-28 21:11:18 +00:00
Mats NilssonandClaude Opus 5 dd32a55506 [AI] Keep mobile payee/rule filter (#8977)
Co-authored-by: Claude Opus 5 (1M context) <[email protected]>
2026-09-28 19:55:27 +00:00
815286d253 docs: add Rauthy to the list of tested OpenID providers (#8966)
* docs: add Rauthy to the list of tested OpenID providers

Closes #8838

Co-Authored-By: Claude Opus 5 <[email protected]>

* docs: note Rauthy needs RS256 for token and ID token algorithms

Co-Authored-By: Claude Opus 5.5 <[email protected]>

---------

Co-authored-by: Fionn Jones <[email protected]>
Co-authored-by: Claude Opus 5 <[email protected]>
Co-authored-by: youngcw <[email protected]>
2026-09-28 17:29:37 +00:00
Maksim Ustinov 24deae74e6 [AI] Reserve children of matched bank splits (#8909)
* [AI] Reserve children of matched bank splits

* [AI] Add split matching release note

* [AI] Avoid split-child lookup during bank matching
2026-09-27 22:50:42 +00:00
Matt Fiddaman 6d224f676c 📝 add experimental sidebar docs (#9022)
* add images

* add docs

* fix spelling
2026-09-27 21:18:01 +00:00
Michael Clark ef0f0614a0 fix rare freeze when saving a change (#9027) 2026-09-27 19:58:29 +00:00
Michael Clark 09c47beb66 🐛 Fix app failing to start when opened offline (#9025)
* fix app failing to start when opened offline after latest pendng migrations change

* feedback
2026-09-27 18:29:09 +00:00
ManafandCopilot 18688645f0 [AI] Add light-theme border to redesigned sidebar (#9013)
* [AI] Add light-theme border to redesigned sidebar

Co-authored-by: Copilot <[email protected]>

* [AI] Allow custom themes to override sidebar border

Co-authored-by: Copilot <[email protected]>

* renamed the  css variable for the sidebar right border forclarity (RightBorder) + used exisitng palette colors

---------

Co-authored-by: Copilot <[email protected]>
2026-09-27 14:57:09 +00:00
Matt Fiddaman bfa850ca61 experimental sidebar: respect light theme sidebar overrides (#9003)
* fix light themes

* note

* coderabbit
2026-09-24 14:41:16 +00:00
Matt Fiddaman 516673a887 sidebar: add feedback link (#9008)
* add feedback link

* note
2026-09-24 14:38:16 +00:00
Matt Fiddaman 8b36554d5c sidebar pt. 7: group-aware account drag and drop (#8974)
* let account-move reassign the account group

* provide a react-aria router to the app

* add account tree keys and pure move helpers

* rebuild the sidebar account list on the react-aria tree with drag and drop

* add a keyboard drag handle to sidebar tree rows

* fix typecheck

* coderabbit

* fix chevron spacing and indentation

* coderabbit
2026-09-24 10:45:39 +00:00
Felipe MediciandFelipe Medici bc9bba67f3 [AI] Keep custom report charts stable with long legends (#5394) (#8911)
* [AI] Keep custom report charts stable with long legends (#5394)

Fixes #5394

* [AI] Use forEach for parameterized report tests

---------

Co-authored-by: Felipe Medici <[email protected]>
2026-09-24 01:44:25 +00:00
Matt Fiddaman f95e66b85e sidebar: trigger group balance updates on sync (#8994)
* trigger group balance updates on sync

* note

* coderabbit
2026-09-23 10:15:19 +00:00
954f970241 [AI] Migrate create-folders migration to TypeScript (#8851)
* [AI] Migrate create-folders migration to TypeScript

* [AI] Add release note for create-folders migration

* [AI] Preserve migration titles after TypeScript conversion

* [AI] Reject duplicate normalized migration titles

---------

Co-authored-by: Baris Arı <[email protected]>
Co-authored-by: Baris Ari <[email protected]>
2026-09-23 07:53:19 +00:00
4e263d983d [AI] Detect CSV file encoding and add a per-account encoding selector (#8924)
* [AI] Detect CSV file encoding and add a per-account encoding selector

Read CSV/TSV files as raw bytes and decode them based on the detected
encoding instead of always assuming UTF-8: the byte order mark, BOM-less
UTF-16 (NUL byte analysis), strict UTF-8 validation, and a windows-1252
fallback that also decodes ISO-8859-1 content. A mostly-valid UTF-8 file
with a few corrupted bytes still decodes as UTF-8 with replacement
characters instead of falling back to windows-1252.

Add an encoding selector to the CSV import options, persisted per
account like the delimiter, for files in encodings that cannot be
detected automatically (e.g. windows-1250, ISO-8859-2).

Adds fixtures and tests for UTF-16 (with and without BOM), UTF-8 with
BOM, corrupted UTF-8, NUL-padded UTF-8, and windows-1252 content.

Fixes #6327

* Update VRT screenshots

Auto-generated by VRT workflow

PR: #8924

* Update VRT screenshots

Auto-generated by VRT workflow

PR: #8924

* [AI] Address review: require dominant NUL parity and translate encoding labels

Require one parity to clearly dominate (>= 90% of NUL bytes) before
detecting BOM-less UTF-16, so a UTF-8 file with dense contiguous NUL
padding (even split across parities) is no longer misdetected as
UTF-16. Adds a fixture with padding above the 10% density threshold.

Wrap the encoding selector labels in t() per the repository's
translated user-facing text requirement.

* [AI] Drop iso-8859-1 from the CSV encoding selector

TextDecoder resolves the iso-8859-1 label to the windows-1252 decoder
per the WHATWG encoding spec, so the option was redundant and could
mislead users into expecting true ISO-8859-1 decoding. windows-1252
already covers ISO-8859-1 content; keep the alias accepted in
decodeCsvBytes with a clarifying comment and an alias test.

* [AI] Make the iso-8859-1 alias test distinguish Windows-1252

The alias test now uses a fixture containing the 0x80 byte, which
windows-1252 decodes as the euro sign while a true ISO-8859-1 decoder
would produce a C1 control character, so the assertion actually
verifies the windows-1252 alias semantics.

* [AI] Simplify CSV encoding detection to BOM and explicit selection

Follow the review suggestion: the byte order mark selects UTF-16
LE/BE and everything else decodes as UTF-8; other encodings are
handled by the manual per-account selector this PR adds. Drop the
speculative BOM-less UTF-16, windows-1252 fallback, and corrupted
UTF-8 heuristics along with their fixtures and tests.

---------

Co-authored-by: François Lafleur <[email protected]>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-22 22:31:04 +00:00
John CostaandTim 4350045c3b [AI] Fix YNAB4 import dropping the parent payee on split children (#8973)
* fix YNAB4 import dropping the parent payee on split children

YNAB4 stores the payee on the parent transaction only, but the importer
spread a `payee: undefined` key onto every non-transfer sub transaction.
`makeChild` treats a present key as explicit, so the children never fell
back to the parent's payee and showed up with no payee at all. Only emit
the key when a payee was actually resolved; transfer children are unchanged.

Fixes #3561

* Update packages/loot-core/src/server/importers/ynab4.ts

---------

Co-authored-by: Tim <[email protected]>
2026-09-21 22:18:40 +00:00
Michael Clark aa8df6eca9 📊 Monte carlo performance improvement (#8988)
* improve performance of monte carlo

* release notes
2026-09-21 19:05:27 +00:00
John Costa 036be73a84 fix(import): accept "Sept" as a month abbreviation in CSV dates (#8957)
The month rewrite in parseDate matched "Sep", "Sep." and "September"
but not the four-letter "Sept" that some bank exports use. The word
boundary after "sep" failed on the trailing "t", so the month was never
converted to a number and every September row was rejected as an
invalid date.

Extend the regex to also accept "Sept" and "Sept." and cover the
DD MMM YY, DD MMM YYYY and MMM DD, YYYY forms in the parseDate table.

Closes #8888
2026-09-21 18:59:40 +00:00
Julian Dominguez-Schatz e8d18adb09 Retry Weblate repository lock conflicts (#8979)
* [AI] Retry Weblate repository lock conflicts

* [AI] Add release note for translation retries
2026-09-21 16:34:43 +00:00
Matt Fiddaman 8f2318d1dc ⬆️ better-sqlite3 v13 (#8736)
* better-sqlite3 v13

* note

* fix build

* engine update

* fix yarn warning and arm32 docker builds
2026-09-20 20:22:32 +00:00
Michael Clark d51d13c889 📈 Monte carlo -Warn when contribution is too large (#8971)
* warn when monte carlo contribution is too large

* feedback
2026-09-20 07:45:59 +00:00
Matt Fiddaman 749fa26457 add account hover card (#8969)
* add account hover card

* add context menus

* note

* generalise touch helper

* coderabbit
2026-09-19 12:46:33 +00:00
Matt Fiddaman d789e41540 sidebar pt. 5: account search (#8914)
* filter helper

* add search

* note

* review improvements
2026-09-19 09:17:43 +00:00
Spaghettio73 15fb66368b docs: add receipt2actual and actual2ics to Community Projects (#8945) 2026-09-19 07:26:08 +00:00
Michael Clark 7548b0bfa9 🐛 Monte carlo cashflow chart underfunding fix (#8964)
* fix underfunded gap amount when using withdrawal rules and min spending amount

* release notes
2026-09-18 21:13:52 +00:00
Terry Lockett 71e133ef7d fix ToBudget actions not showing in firefox (#8958) 2026-09-18 21:06:53 +00:00
Michael Clark df0cfe3489 🦔 Speeding up large budgets by only running rules when needed (#8946)
* optimise transactions edits/deletes by making the running balance query find applicable rules first, and only run if required

* balance now fetched at most once and only for a rule whos conditions matched
2026-09-18 16:17:44 +00:00
Michael Clark dc006aa192 📈 Monte Carlo income streams (#8955)
* monte carlo income streams

* simplify release note

* enhancement

* fix withdrawal rule floor when income is specified

* update screenshots

* suplus pot and images

* way better description in the run details

* covering case where income is all thats setup and spending is the same as the income

* feedback

* screenshots and rename of minimum withdrawal to min spending

* additional docs
2026-09-18 15:23:05 +00:00
Stephen Brown II 9788bb123a [AI] Show a progress bar while importing a YNAB budget (#8956)
* [AI] Show a progress bar while importing a YNAB budget

* [AI] Name the account in transaction import progress

* [AI] Defer scheduled import progress until rule updates finish

Change-Id: rnuttktwqnkslztsvklpqxvnwnvqvopy

* [AI] Prevent dismissing an import while it is running

Change-Id: tnwzlovsmtsqwtkxorqnymtxvwuyrsvk

* [AI] Subscribe to import progress before importing

Change-Id: kwnmmmslpoxpxrmpzltnwsrqvuryzous
2026-09-18 14:08:21 +00:00
Michael Clark 5a131c7c88 🦔 Make saving transaction edits slightly faster on big budgets (#8944)
* increasing cache size, wrap updatetransactions in one transaction to reduce number

* rabbit feedback
2026-09-17 18:19:32 +00:00
J-LCRXandClaude Sonnet 5 5bb7d6f6fd [AI] Rank exact payee matches above tied substring matches (#8811)
* [AI] Rank exact payee matches above tied substring matches

fzf's tiebreakers default to none, so when two suggestions tie on match
score (e.g. querying 'Amazon' against both 'Amazon' and 'Amazon Prime'),
the ranking falls back to original array order instead of favoring the
exact match. useTags.ts already fixes this for tag filtering via
tiebreakers: [byLengthAsc, byStartAsc]; this applies the same fix to
payee autocomplete matching.

Split out from the combined payee/category fix on
fix/exact-match-tiebreak-scoring — the category half is intentionally
not carried over, since category suggestions are meant to stay ordered
the way they appear within the budget arrangement.

* [AI] Use alphabetically-ordered payee names in exact-match tiebreak test

'Amazon Prime'/'Amazon' needed to be listed out of alpha order to
demonstrate the bug, which doesn't match how the payee list is
naturally sorted. 'AAA Google'/'Google' demonstrates the same fix
while staying in alpha order like the rest of the suite.

Co-Authored-By: Claude Sonnet 5 <[email protected]>

---------

Co-authored-by: Claude Sonnet 5 <[email protected]>
2026-09-16 22:27:05 +00:00
Stephen Brown II 5f60f2971c [AI] fix(sync): receive only the latest timestamp to stop counter overflow (#8706)
* [AI] fix(sync): receive only the latest timestamp to stop counter overflow

Timestamp.recv was called once per incoming message. Each call burns one
tick of the 16-bit HLC counter whenever the logical clock does not advance,
and the counter only resets when Date.now() moves forward. Browsers that
coarsen Date.now() (LibreWolf, or Firefox with resistFingerprinting, which
rounds it to 100ms) give the loop enough time to pass 65535 messages in a
single tick, so a large sync throws OverflowError and the budget never
opens.

Receive only the highest incoming timestamp instead. The clock lands in the
same place, the drift check still sees the furthest-ahead message, and the
counter advances once per batch.

* [AI] fix(sync): address timestamp review feedback

Change-Id: oowtnqoxrmltvupuxowqqnnynnqwkxqx
2026-09-15 19:51:21 +00:00
Michael Clark 2ff97090d6 :electron: When data folder is unavailable show a friendly message (#8928)
* when data folder is unavailable due to permissions etc, show a friendly prompt

* feedback from rabbit
2026-09-15 19:43:59 +00:00
danielcovill 021ceba57c Tips tricks docs fix (#8940)
* Update tips-tricks.md

Correct out of date documentation.

* Add release notes

* Clearer writing, filename fix for release notes
2026-09-15 01:48:11 +00:00
Matiss Janis AboltinsandClaude Fable 5.1 f8ad7c0ebd [AI] Warn API users about deferred sync messages and fix stale docs row (#8925)
Co-authored-by: Claude Fable 5.1 <[email protected]>
2026-09-13 21:34:35 +00:00
Albert Bendichoandautofix-ci[bot] ccaaa90cd8 Update enable-banking.md Clarify needed steps (#8821)
* Clarify enable-banking.md steps

It seems to be a common problem people face that they skip the `Link the accounts you want in the Enable Banking interface`

https://github.com/actualbudget/actual/issues/7799#issuecomment-4433943297
https://github.com/actualbudget/actual/issues/7799#issuecomment-4629194825
https://github.com/actualbudget/actual/issues/7799#issuecomment-4641704020
https://github.com/actualbudget/actual/issues/7799#issuecomment-4477748895
https://github.com/actualbudget/actual/issues/7799#issuecomment-4488926240
https://github.com/actualbudget/actual/issues/7799#issuecomment-4511171800
https://github.com/actualbudget/actual/issues/7799#issuecomment-4641704020

* [autofix.ci] apply automated fixes

* coderabbitai requested improvements

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-09-13 21:26:43 +00:00
74402bbfed [AI] Fix missing vite-plugin-peggy workspace in sync-server.Dockerfile (#8798)
* [AI] Fix missing vite-plugin-peggy workspace in sync-server.Dockerfile

The deps stage copies each workspace's package.json individually for Docker layer caching, but packages/vite-plugin-peggy/package.json was never added to that list even though loot-core and api both depend on it via workspace:*, so yarn install fails resolution with Workspace not found. Add the missing COPY line.

Co-Authored-By: Claude Sonnet 5 <[email protected]>

* release note

---------

Co-authored-by: Amy Hawkins <[email protected]>
Co-authored-by: Claude Sonnet 5 <[email protected]>
2026-09-13 21:25:42 +00:00
Sreetam Das 8bba0a66cc [AI] Add Karma to the custom theme catalog (#8930)
* [AI] Add Karma to the custom theme catalog

Karma is a dark theme for Actual Budget. The CSS is hosted at
sreetamdas/karma/actual.css and every --color-* token is mapped from the
canonical Karma palette, so the theme stays in step with the Karma ports for
VS Code, Zed and iTerm.

Colors are the six representative hues for the catalog swatch: the near-black
background, the purple primary accent, and the green/pink/orange/cyan accents.

* [AI] Add release note for the Karma theme
2026-09-13 21:24:12 +00:00
Krzysztof Wójt 93508bc6a3 [AI] Expose parent transaction fields to split rule formulas (#8898)
* [AI] Expose parent transaction text to split rule formulas

* [AI] Categorize split parent context as an enhancement
2026-09-13 02:03:53 +00:00
d5d0b663c9 Bump @vitest/mocker from 4.1.10 to 5.0.0 in the npm_and_yarn group across 0 directory (#8923)
* Bump @vitest/mocker in the npm_and_yarn group across 0 directory



Updates `@vitest/mocker` from 4.1.10 to 5.0.0
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)
- [Commits](https://github.com/vitest-dev/vitest/commits/v5.0.0/packages/mocker)

---
updated-dependencies:
- dependency-name: "@vitest/mocker"
  dependency-version: 5.0.0
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <[email protected]>

* [AI] Fix typecheck failures under vitest 5

Vitest 5 changed two things that broke the typecheck/build jobs:

- `vi.fn()`'s inferred type now references `Procedure` from an internal
  vitest chunk that cannot be named from outside, so the hoisted mocks in
  `cloud-storage.test.ts` tripped TS2883. Annotate them as `Mock`.
- The `expect` package was inlined and the global `jest.Matchers`
  declaration dropped, so `@testing-library/jest-dom`'s default entry no
  longer augments vitest's `Assertion`. Use the `/vitest` entry point
  instead.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Bvwt76cXUoLwfHiy1jhToc

* [AI] Bump @actual-app/crdt to 3.1.3

The dependency bump touches packages/crdt/package.json, so the CRDT
version bump check requires a new version. Matches how the previous
dependabot group bump (#8921) was handled.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Bvwt76cXUoLwfHiy1jhToc

* [AI] Add release note for the vitest bump

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Bvwt76cXUoLwfHiy1jhToc

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: MatissJanis <[email protected]>
Co-authored-by: Claude Opus 5 <[email protected]>
2026-09-12 18:38:38 +00:00
Fabian Markert 4a7ba96877 [AI] Fix character encoding corruption when importing CAMT files (#8912) (#8913) 2026-09-12 09:20:29 +00:00
Tim 353e5dd26a [AI] Fix theme colour ordering and custom theme refresh (#8922)
* [AI] Fix theme colour ordering and custom theme refresh

* Apply suggestion from @tim-smart
2026-09-11 21:51:20 +00:00
Matiss Janis AboltinsandClaude Fable 5 2fc69915c2 [AI] migrations: pending messages DB (#8519)
* [AI] Keep older app versions syncing and loading budgets touched by newer versions

Cross-version compatibility for sync and budget files:

- Sync messages referencing tables/columns this client doesn't have yet
  (sent by a newer app version) are deferred into a messages_pending
  table (coalesced per cell) instead of failing the sync, and replayed
  after migrations run on budget load. Deferral applies only to inbound
  messages; local writes still surface apply-failure.
- Budgets already migrated by a newer app version now load, as long as
  every known migration is present (checkDatabaseValidity tolerance).
- A CI guard (schema introspection over the real migration chain)
  enforces that migrations stay additive-only: no dropped/renamed
  tables or columns, no constraint changes on existing tables
  (NOT NULL, DEFAULT, UNIQUE, CHECK, primary keys), and new synced
  tables use a single id primary key with optional columns.
- An "Update available" notification tells the user when deferred
  changes are waiting for an app update, re-shown on budget load while
  messages remain pending.

Co-Authored-By: Claude Fable 5 <[email protected]>

* [AI] Address review findings for cross-version sync

- Clear messages_pending during sync reset so replaying deferred
  messages can't resurrect hard-deleted rows as empty stubs
- Treat an explicit DEFAULT NULL as no usable default in the
  additive-migration validator
- Make the CHECK-clause scanner quote/comment-aware so changes behind
  a quoted paren can't slip through
- Flag type and DEFAULT changes on existing columns
- Make the deferred-messages notification sticky so it isn't dismissed
  during budget load

* [AI] Harden and simplify the additive-migration schema validator

- Ignore CHECK( tokens inside quoted literals and comments by scanning
  a masked copy of the stored CREATE TABLE text
- Skip schema snapshots for pre-cutoff migrations in the chain test
- Collapse per-column attribute comparisons into a single changed-keys
  check and drop the redundant required-flip branch

* [AI] Harden the cross-version sync deferral and replay flow

Findings from several review rounds of the deferral feature:

- Carry inbound values with unknown serialization formats opaquely
  (deferring them like missing columns) instead of wedging sync
- Replay honors last-write-wins against the crdt log, takes a real
  UPDATE path so row constraints see the merged row, retries
  dependency chains to a fixpoint, drops only deterministic failures,
  and aborts safely on possibly-transient errors
- Notify the user when deferred changes are dropped or discarded
  (new dropped-messages event), delivered reliably during budget load
- Reset sync counts only real losses toward the discard warning
- Guard replay behind a configured server so serverless-session edits
  can't be reverted; ignore legacy spreadsheet_cells messages
- Restore corruption detection for empty migration directories and
  narrow the UI's schema-mismatch classification
- Move serialization and notification helpers into their own modules

* [AI] Simplify the cross-version sync branch and shrink its diff

- Hoist the applyMessages callback to a named function, undoing ~280
  lines of reindentation churn
- Fold the sync notification helpers into sync/utils.ts
- Drop an unreachable pending-message cleanup clause, a consumer-less
  re-export, and a committed empty-fixture directory (mkdtemp instead)
- Tighten review-era comments to their load-bearing constraints
- Skip pointless work: unfiltered return when nothing deferred,
  snapshot reuse in the additive chain test

* [AI] Bump pending-messages migration timestamp past latest master migration

Co-Authored-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01BYNhGvhoHHKeAwiCJxfHsN

* [AI] Make messages_pending migration idempotent

Use CREATE TABLE IF NOT EXISTS so budgets that already have the table
from the previous migration id still open after the timestamp bump.

* [AI] Document additive-only migration rules for contributors

Add a README in the migrations folder explaining cross-version sync
constraints, allowed schema changes, and what the additive test misses.

* [AI] Preserve CHECK literal case in migration schema diff

Lowercase SQL tokens outside quoted strings when comparing CHECK
constraints so 'ARCHIVED' and 'archived' are treated as different.

* [AI] Create messages_pending on demand instead of relying on the migration

The browser serves migration files through caches that can lag behind
the app code (stale service-worker precache, unrebuilt dev
environment), producing 'no such table: messages_pending' on every
budget load — and a failed sync batch if a message needed deferring.
The code that uses the table now creates it on first touch, sharing
one copy of the DDL with the (idempotent) migration.

---------

Co-authored-by: Claude Fable 5 <[email protected]>
2026-09-11 20:13:57 +00:00
Michael Clark 59bde67ba6 📈 Monte carlo - Cashflow chart (#8903)
* cashflow chart

* showing years that are unfunded

* update screenshots

* refactor a bit

* fix dead years withdrawal rules
2026-09-11 18:44:21 +00:00
Emil Tveden Bjerglund d8008e0d31 Ensure only valid months can be selected in Sankey chart datepicker (#8790)
* Make sure datepicker cannot go before earliest transaction

* [AI] use sendCatch for Sankey budget-month queries

Avoids triggering global server-error notifications when selected months have no budget data.

* Release note

* Revert "[AI] use sendCatch for Sankey budget-month queries"

This reverts commit 89db5a9d8c.

* Add function to calculate bounded month range

* Ensure only valid months can be selected

* Update release note

* Revert "Ensure only valid months can be selected"

This reverts commit 12b3850ec6.

* Use bounded start and end in createBaseGraphSpreadsheet

* Linting fix

* [AI] Adapt SankeyCard initialization per rabbit comments

* Update release note
2026-09-11 18:25:03 +00:00
9766aaac68 [AI] Respect OFX ENCODING/CHARSET headers when importing files (#8874)
* [AI] Respect OFX ENCODING/CHARSET headers when importing files

Read OFX/QFX files as raw bytes and decode using the encoding declared in the file header instead of always assuming UTF-8. Files declaring CHARSET:8859-1 or 1252 are decoded as windows-1252, and ENCODING:UTF-8 files as UTF-8.

Also converts the 8859-1.qfx fixture to actual Latin-1 bytes (it was saved as UTF-8 despite declaring CHARSET:8859-1, so the test did not exercise the charset path) and adds fixtures and tests for windows-1252 and UTF-8 with non-ASCII content.

Fixes #8872

* [AI] Add release note for OFX charset decoding fix

* Apply suggestion from @coderabbitai[bot]

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

---------

Co-authored-by: François Lafleur <[email protected]>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-09-11 10:42:40 +00:00
dependabot[bot]andMatiss Janis Aboltins 5c76dfbd92 Bump the npm_and_yarn group across 1 directory with 5 updates (#8921)
* Bump the npm_and_yarn group across 1 directory with 5 updates

Bumps the npm_and_yarn group with 5 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [csv-parse](https://github.com/adaltas/node-csv/tree/HEAD/packages/csv-parse) | `7.0.1` | `7.0.2` |
| [colord](https://github.com/omgovich/colord) | `2.9.3` | `2.10.0` |
| [joi](https://github.com/hapijs/joi) | `17.13.4` | `17.13.7` |
| [smol-toml](https://github.com/squirrelchat/smol-toml) | `1.6.1` | `1.8.0` |
| [svgo](https://github.com/svg/svgo) | `3.3.4` | `3.3.5` |



Updates `csv-parse` from 7.0.1 to 7.0.2
- [Changelog](https://github.com/adaltas/node-csv/blob/master/packages/csv-parse/CHANGELOG.md)
- [Commits](https://github.com/adaltas/node-csv/commits/[email protected]/packages/csv-parse)

Updates `colord` from 2.9.3 to 2.10.0
- [Release notes](https://github.com/omgovich/colord/releases)
- [Changelog](https://github.com/omgovich/colord/blob/master/CHANGELOG.md)
- [Commits](https://github.com/omgovich/colord/commits/v2.10)

Updates `joi` from 17.13.4 to 17.13.7
- [Commits](https://github.com/hapijs/joi/compare/v17.13.4...v17.13.7)

Updates `smol-toml` from 1.6.1 to 1.8.0
- [Release notes](https://github.com/squirrelchat/smol-toml/releases)
- [Commits](https://github.com/squirrelchat/smol-toml/compare/v1.6.1...v1.8.0)

Updates `svgo` from 3.3.4 to 3.3.5
- [Release notes](https://github.com/svg/svgo/releases)
- [Commits](https://github.com/svg/svgo/compare/v3.3.4...v3.3.5)

---
updated-dependencies:
- dependency-name: csv-parse
  dependency-version: 7.0.2
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: colord
  dependency-version: 2.10.0
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: joi
  dependency-version: 17.13.7
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: smol-toml
  dependency-version: 1.8.0
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: svgo
  dependency-version: 3.3.5
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <[email protected]>

* Bump version from 3.1.1 to 3.1.2

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Matiss Janis Aboltins <[email protected]>
2026-09-10 22:23:04 +00:00
dependabot[bot] 12de7e9972 Bump the npm_and_yarn group across 1 directory with 5 updates (#8906)
Bumps the npm_and_yarn group with 5 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [@humanfs/node](https://github.com/humanwhocodes/humanfs/tree/HEAD/packages/node) | `0.16.7` | `0.16.8` |
| [@xmldom/xmldom](https://github.com/xmldom/xmldom) | `0.8.13` | `0.8.15` |
| [browserslist](https://github.com/browserslist/browserslist) | `4.28.2` | `4.28.9` |
| [fast-uri](https://github.com/fastify/fast-uri) | `3.1.5` | `3.1.7` |
| [qs](https://github.com/ljharb/qs) | `6.15.2` | `6.15.3` |



Updates `@humanfs/node` from 0.16.7 to 0.16.8
- [Release notes](https://github.com/humanwhocodes/humanfs/releases)
- [Changelog](https://github.com/humanwhocodes/humanfs/blob/main/packages/node/CHANGELOG.md)
- [Commits](https://github.com/humanwhocodes/humanfs/commits/node-v0.16.8/packages/node)

Updates `@xmldom/xmldom` from 0.8.13 to 0.8.15
- [Release notes](https://github.com/xmldom/xmldom/releases)
- [Changelog](https://github.com/xmldom/xmldom/blob/master/CHANGELOG.md)
- [Commits](https://github.com/xmldom/xmldom/compare/0.8.13...0.8.15)

Updates `browserslist` from 4.28.2 to 4.28.9
- [Release notes](https://github.com/browserslist/browserslist/releases)
- [Changelog](https://github.com/browserslist/browserslist/blob/main/CHANGELOG.md)
- [Commits](https://github.com/browserslist/browserslist/compare/4.28.2...4.28.9)

Updates `fast-uri` from 3.1.5 to 3.1.7
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.5...v3.1.7)

Updates `qs` from 6.15.2 to 6.15.3
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.15.2...v6.15.3)

---
updated-dependencies:
- dependency-name: "@humanfs/node"
  dependency-version: 0.16.8
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: "@xmldom/xmldom"
  dependency-version: 0.8.15
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: browserslist
  dependency-version: 4.28.9
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: fast-uri
  dependency-version: 3.1.7
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: qs
  dependency-version: 6.15.3
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-10 19:38:36 +00:00