[PR #8144] Restore budget table scroll position when navigating back from spent transactions #131719

Open
opened 2026-06-16 00:29:05 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/actualbudget/actual/pull/8144
Author: @clintharris
Created: 6/7/2026
Status: 🔄 Open

Base: masterHead: feat/remember-scroll-position


📝 Commits (5)

  • 199bb49 feat: Restore budget table scroll position when navigating back from spent transactions page
  • dc3756d fix: Update transaction tests to include new categories and adjust assertions
  • 1308c5c Add release notes for budget scroll position restoration
  • 8f7855e refactor: Improve error handling when clicking on visible spent-amount cells, per suggestion from coderabbit bot
  • eea0f57 Update VRT screenshots

📊 Changes

268 files changed (+192 additions, -7 deletions)

View changed files

📝 packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-individual-account-page-and-checks-that-filtering-is-working-1-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-individual-account-page-and-checks-that-filtering-is-working-2-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-individual-account-page-and-checks-that-filtering-is-working-3-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-individual-account-page-and-checks-that-filtering-is-working-4-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-individual-account-page-and-checks-that-filtering-is-working-5-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-individual-account-page-and-checks-that-filtering-is-working-6-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-individual-account-page-and-checks-that-filtering-is-working-7-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-individual-account-page-and-checks-that-filtering-is-working-8-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-individual-account-page-and-checks-that-filtering-is-working-9-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-the-accounts-page-and-asserts-on-balances-1-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-the-accounts-page-and-asserts-on-balances-2-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-the-accounts-page-and-asserts-on-balances-3-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-Import-Transactions-import-csv-file-twice-1-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-Import-Transactions-import-csv-file-twice-2-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-Import-Transactions-import-csv-file-twice-3-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-Import-Transactions-imports-transactions-from-a-CSV-file-1-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-Import-Transactions-imports-transactions-from-a-CSV-file-2-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-Import-Transactions-imports-transactions-from-a-CSV-file-3-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-closes-an-account-1-chromium-linux.png (+0 -0)
📝 packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-closes-an-account-2-chromium-linux.png (+0 -0)

...and 80 more files

📄 Description

Description

When a user scrolls down the budget table to view categories below the fold and clicks a Spent amount to inspect transactions, they are taken to the accounts view. Clicking Back returned them to the budget page, but the scroll position was always reset to the top — requiring them to scroll back down to where they were.

This PR saves the budget table's scroll position to sessionStorage at the moment the user navigates away, then restores it on mount when they return. sessionStorage was chosen over window.history.state because React Router's popstate handler overwrites custom usr state on navigation, whereas sessionStorage is independent of router state management and has existing precedent in this codebase (the reports feature uses the same pattern).

A new E2E test covers the scroll-restore behaviour. Adding the necessary mock data (18 new subcategories in "Usual Expenses") to make the budget list scrollable also required updating three existing tests to match the new category distribution.

Claude was the primary source of code changes in this PR, with meaningful human involvement throughout — reviewing, testing, and modifying the AI-generated output at each step rather than accepting it wholesale.

Demo

https://github.com/user-attachments/assets/5e7a2f2b-e289-47e8-9b4e-dd639d60c88f

https://github.com/user-attachments/assets/cca85c6c-6fcf-443e-a93a-4a9e232cf83c

Closes #7952

Testing

  1. Open the demo budget (or any budget with enough categories to scroll).
  2. Scroll the budget table down so some categories are below the fold.
  3. Click a Spent amount — you are taken to the transactions view.
  4. Click Back.
  5. Verify the budget table returns to the same scroll position rather than the top.

Checklist

  • Release notes added (see link above)
  • No obvious regressions in affected areas
  • Self-review has been performed - I have read every line of this diff and can explain what each change does and why it is needed

Bundle Stats

Bundle Files count Total bundle size % Changed
desktop-client 37 14.13 MB → 14.13 MB (+2.43 kB) +0.02%
loot-core 1 5.28 MB → 5.28 MB (+2.77 kB) +0.05%
api 2 3.87 MB → 3.87 MB (+2.7 kB) +0.07%
cli 1 7.97 MB 0%
crdt 1 11.12 kB 0%
View detailed bundle stats

desktop-client

Total

Files count Total bundle size % Changed
37 14.13 MB → 14.13 MB (+2.43 kB) +0.02%
Changeset
File Δ Size
src/components/budget/BudgetTable.tsx 📈 +1009 B (+9.86%) 9.99 kB → 10.97 kB
locale/de.json 📈 +1.44 kB (+0.84%) 172.1 kB → 173.54 kB
View detailed bundle breakdown

Added
No assets were added

Removed
No assets were removed

Bigger

Asset File Size % Changed
static/js/de.js 172.1 kB → 173.54 kB (+1.44 kB) +0.84%
static/js/wide.js 298.88 kB → 299.87 kB (+1009 B) +0.33%

Smaller
No assets were smaller

Unchanged

Asset File Size % Changed
static/js/index.js 1.6 MB 0%
static/js/BackgroundImage.js 121.09 kB 0%
static/js/FormulaEditor.js 962.55 kB 0%
static/js/ManageRules.js 46.63 kB 0%
static/js/PayeeRuleCountLabel.js 7.33 kB 0%
static/js/ReportRouter.js 1.27 MB 0%
static/js/ScheduleEditForm.js 146.57 kB 0%
static/js/SchedulesTable.js 206.26 kB 0%
static/js/TransactionEdit.js 90.63 kB 0%
static/js/TransactionList.js 85.81 kB 0%
static/js/Value.js 5.08 MB 0%
static/js/_baseIsEqual.js 98.38 kB 0%
static/js/ca.js 185.63 kB 0%
static/js/client.js 451.37 kB 0%
static/js/da.js 100.19 kB 0%
static/js/en-GB.js 9.25 kB 0%
static/js/en.js 201.61 kB 0%
static/js/es.js 177.58 kB 0%
static/js/extends.js 508.79 kB 0%
static/js/fr.js 177.35 kB 0%
static/js/indexeddb-main-thread-worker-e59fee74.js 13.46 kB 0%
static/js/it.js 163.93 kB 0%
static/js/narrow.js 365.05 kB 0%
static/js/nb-NO.js 147.07 kB 0%
static/js/nl.js 119.71 kB 0%
static/js/pt-BR.js 187.34 kB 0%
static/js/resize-observer.js 18.06 kB 0%
static/js/th.js 173.33 kB 0%
static/js/theme.js 31.88 kB 0%
static/js/toString.js 705.14 kB 0%
static/js/uk.js 216.7 kB 0%
static/js/useFormatList.js 2.52 kB 0%
static/js/useTransactionBatchActions.js 9.71 kB 0%
static/js/workbox-window.prod.es5.js 7.33 kB 0%
static/js/zh-Hans.js 116.44 kB 0%

loot-core

Total

Files count Total bundle size % Changed
1 5.28 MB → 5.28 MB (+2.77 kB) +0.05%
Changeset
File Δ Size
home/runner/work/actual/actual/packages/loot-core/src/mocks/budget.ts 📈 +2.77 kB (+13.63%) 20.35 kB → 23.12 kB
View detailed bundle breakdown

Added

Asset File Size % Changed
kcab.worker.CtVbV-mv.js 0 B → 5.28 MB (+5.28 MB) -

Removed

Asset File Size % Changed
kcab.worker.COd5U_ND.js 5.28 MB → 0 B (-5.28 MB) -100%

Bigger
No assets were bigger

Smaller
No assets were smaller

Unchanged
No assets were unchanged


api

Total

Files count Total bundle size % Changed
2 3.87 MB → 3.87 MB (+2.7 kB) +0.07%
Changeset
File Δ Size
home/runner/work/actual/actual/packages/loot-core/src/mocks/budget.ts 📈 +2.7 kB (+13.72%) 19.71 kB → 22.42 kB
View detailed bundle breakdown

Added
No assets were added

Removed
No assets were removed

Bigger

Asset File Size % Changed
index.js 3.87 MB → 3.87 MB (+2.7 kB) +0.07%

Smaller
No assets were smaller

Unchanged

Asset File Size % Changed
models.js 0 B 0%

cli

Total

Files count Total bundle size % Changed
1 7.97 MB 0%
View detailed bundle breakdown

Added
No assets were added

Removed
No assets were removed

Bigger
No assets were bigger

Smaller
No assets were smaller

Unchanged

Asset File Size % Changed
cli.js 7.97 MB 0%

crdt

Total

Files count Total bundle size % Changed
1 11.12 kB 0%
View detailed bundle breakdown

Added
No assets were added

Removed
No assets were removed

Bigger
No assets were bigger

Smaller
No assets were smaller

Unchanged

Asset File Size % Changed
index.js 11.12 kB 0%

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/actualbudget/actual/pull/8144 **Author:** [@clintharris](https://github.com/clintharris) **Created:** 6/7/2026 **Status:** 🔄 Open **Base:** `master` ← **Head:** `feat/remember-scroll-position` --- ### 📝 Commits (5) - [`199bb49`](https://github.com/actualbudget/actual/commit/199bb498767d81c3b9f0865bc2b9610011bfbbd2) feat: Restore budget table scroll position when navigating back from spent transactions page - [`dc3756d`](https://github.com/actualbudget/actual/commit/dc3756def0b69727146fdde9617afe320e7d39c5) fix: Update transaction tests to include new categories and adjust assertions - [`1308c5c`](https://github.com/actualbudget/actual/commit/1308c5cdffe0513c706b6a2c314b6a1763268aa1) Add release notes for budget scroll position restoration - [`8f7855e`](https://github.com/actualbudget/actual/commit/8f7855e82f263a19b3d1e800a3469e24aaf5dfac) refactor: Improve error handling when clicking on visible spent-amount cells, per suggestion from coderabbit bot - [`eea0f57`](https://github.com/actualbudget/actual/commit/eea0f57c96f811c4c727bab6c4b4f3369a97b282) Update VRT screenshots ### 📊 Changes **268 files changed** (+192 additions, -7 deletions) <details> <summary>View changed files</summary> 📝 `packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-individual-account-page-and-checks-that-filtering-is-working-1-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-individual-account-page-and-checks-that-filtering-is-working-2-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-individual-account-page-and-checks-that-filtering-is-working-3-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-individual-account-page-and-checks-that-filtering-is-working-4-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-individual-account-page-and-checks-that-filtering-is-working-5-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-individual-account-page-and-checks-that-filtering-is-working-6-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-individual-account-page-and-checks-that-filtering-is-working-7-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-individual-account-page-and-checks-that-filtering-is-working-8-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-individual-account-page-and-checks-that-filtering-is-working-9-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-the-accounts-page-and-asserts-on-balances-1-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-the-accounts-page-and-asserts-on-balances-2-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.mobile.test.ts-snapshots/Mobile-Accounts-opens-the-accounts-page-and-asserts-on-balances-3-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-Import-Transactions-import-csv-file-twice-1-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-Import-Transactions-import-csv-file-twice-2-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-Import-Transactions-import-csv-file-twice-3-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-Import-Transactions-imports-transactions-from-a-CSV-file-1-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-Import-Transactions-imports-transactions-from-a-CSV-file-2-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-Import-Transactions-imports-transactions-from-a-CSV-file-3-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-closes-an-account-1-chromium-linux.png` (+0 -0) 📝 `packages/desktop-client/e2e/accounts.test.ts-snapshots/Accounts-closes-an-account-2-chromium-linux.png` (+0 -0) _...and 80 more files_ </details> ### 📄 Description ## Description When a user scrolls down the budget table to view categories below the fold and clicks a **Spent** amount to inspect transactions, they are taken to the accounts view. Clicking **Back** returned them to the budget page, but the scroll position was always reset to the top — requiring them to scroll back down to where they were. This PR saves the budget table's scroll position to `sessionStorage` at the moment the user navigates away, then restores it on mount when they return. `sessionStorage` was chosen over `window.history.state` because React Router's `popstate` handler overwrites custom `usr` state on navigation, whereas `sessionStorage` is independent of router state management and has existing precedent in this codebase (the reports feature uses the same pattern). A new E2E test covers the scroll-restore behaviour. Adding the necessary mock data (18 new subcategories in "Usual Expenses") to make the budget list scrollable also required updating three existing tests to match the new category distribution. Claude was the primary source of code changes in this PR, with meaningful human involvement throughout — reviewing, testing, and modifying the AI-generated output at each step rather than accepting it wholesale. ## Demo https://github.com/user-attachments/assets/5e7a2f2b-e289-47e8-9b4e-dd639d60c88f https://github.com/user-attachments/assets/cca85c6c-6fcf-443e-a93a-4a9e232cf83c ## Related issue(s) Closes #7952 ## Testing 1. Open the demo budget (or any budget with enough categories to scroll). 2. Scroll the budget table down so some categories are below the fold. 3. Click a **Spent** amount — you are taken to the transactions view. 4. Click **Back**. 5. Verify the budget table returns to the same scroll position rather than the top. ## Checklist - [x] Release notes added (see link above) - [x] No obvious regressions in affected areas - [x] Self-review has been performed - I have read every line of this diff and can explain what each change does and why it is needed <!--- actual-bot-sections ---> <!--- bundlestats-action-comment key:combined start ---> ### Bundle Stats Bundle | Files count | Total bundle size | % Changed ------ | ----------- | ----------------- | --------- desktop-client | 37 | 14.13 MB → 14.13 MB (+2.43 kB) | +0.02% loot-core | 1 | 5.28 MB → 5.28 MB (+2.77 kB) | +0.05% api | 2 | 3.87 MB → 3.87 MB (+2.7 kB) | +0.07% cli | 1 | 7.97 MB | 0% crdt | 1 | 11.12 kB | 0% <details> <summary>View detailed bundle stats</summary> #### desktop-client **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 37 | 14.13 MB → 14.13 MB (+2.43 kB) | +0.02% <details> <summary>Changeset</summary> File | Δ | Size ---- | - | ---- `src/components/budget/BudgetTable.tsx` | 📈 +1009 B (+9.86%) | 9.99 kB → 10.97 kB `locale/de.json` | 📈 +1.44 kB (+0.84%) | 172.1 kB → 173.54 kB </details> <details> <summary>View detailed bundle breakdown</summary> <div> **Added** No assets were added **Removed** No assets were removed **Bigger** Asset | File Size | % Changed ----- | --------- | --------- static/js/de.js | 172.1 kB → 173.54 kB (+1.44 kB) | +0.84% static/js/wide.js | 298.88 kB → 299.87 kB (+1009 B) | +0.33% **Smaller** No assets were smaller **Unchanged** Asset | File Size | % Changed ----- | --------- | --------- static/js/index.js | 1.6 MB | 0% static/js/BackgroundImage.js | 121.09 kB | 0% static/js/FormulaEditor.js | 962.55 kB | 0% static/js/ManageRules.js | 46.63 kB | 0% static/js/PayeeRuleCountLabel.js | 7.33 kB | 0% static/js/ReportRouter.js | 1.27 MB | 0% static/js/ScheduleEditForm.js | 146.57 kB | 0% static/js/SchedulesTable.js | 206.26 kB | 0% static/js/TransactionEdit.js | 90.63 kB | 0% static/js/TransactionList.js | 85.81 kB | 0% static/js/Value.js | 5.08 MB | 0% static/js/_baseIsEqual.js | 98.38 kB | 0% static/js/ca.js | 185.63 kB | 0% static/js/client.js | 451.37 kB | 0% static/js/da.js | 100.19 kB | 0% static/js/en-GB.js | 9.25 kB | 0% static/js/en.js | 201.61 kB | 0% static/js/es.js | 177.58 kB | 0% static/js/extends.js | 508.79 kB | 0% static/js/fr.js | 177.35 kB | 0% static/js/indexeddb-main-thread-worker-e59fee74.js | 13.46 kB | 0% static/js/it.js | 163.93 kB | 0% static/js/narrow.js | 365.05 kB | 0% static/js/nb-NO.js | 147.07 kB | 0% static/js/nl.js | 119.71 kB | 0% static/js/pt-BR.js | 187.34 kB | 0% static/js/resize-observer.js | 18.06 kB | 0% static/js/th.js | 173.33 kB | 0% static/js/theme.js | 31.88 kB | 0% static/js/toString.js | 705.14 kB | 0% static/js/uk.js | 216.7 kB | 0% static/js/useFormatList.js | 2.52 kB | 0% static/js/useTransactionBatchActions.js | 9.71 kB | 0% static/js/workbox-window.prod.es5.js | 7.33 kB | 0% static/js/zh-Hans.js | 116.44 kB | 0% </div> </details> --- #### loot-core **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 1 | 5.28 MB → 5.28 MB (+2.77 kB) | +0.05% <details> <summary>Changeset</summary> File | Δ | Size ---- | - | ---- `home/runner/work/actual/actual/packages/loot-core/src/mocks/budget.ts` | 📈 +2.77 kB (+13.63%) | 20.35 kB → 23.12 kB </details> <details> <summary>View detailed bundle breakdown</summary> <div> **Added** Asset | File Size | % Changed ----- | --------- | --------- kcab.worker.CtVbV-mv.js | 0 B → 5.28 MB (+5.28 MB) | - **Removed** Asset | File Size | % Changed ----- | --------- | --------- kcab.worker.COd5U_ND.js | 5.28 MB → 0 B (-5.28 MB) | -100% **Bigger** No assets were bigger **Smaller** No assets were smaller **Unchanged** No assets were unchanged </div> </details> --- #### api **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 2 | 3.87 MB → 3.87 MB (+2.7 kB) | +0.07% <details> <summary>Changeset</summary> File | Δ | Size ---- | - | ---- `home/runner/work/actual/actual/packages/loot-core/src/mocks/budget.ts` | 📈 +2.7 kB (+13.72%) | 19.71 kB → 22.42 kB </details> <details> <summary>View detailed bundle breakdown</summary> <div> **Added** No assets were added **Removed** No assets were removed **Bigger** Asset | File Size | % Changed ----- | --------- | --------- index.js | 3.87 MB → 3.87 MB (+2.7 kB) | +0.07% **Smaller** No assets were smaller **Unchanged** Asset | File Size | % Changed ----- | --------- | --------- models.js | 0 B | 0% </div> </details> --- #### cli **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 1 | 7.97 MB | 0% <details> <summary>View detailed bundle breakdown</summary> <div> **Added** No assets were added **Removed** No assets were removed **Bigger** No assets were bigger **Smaller** No assets were smaller **Unchanged** Asset | File Size | % Changed ----- | --------- | --------- cli.js | 7.97 MB | 0% </div> </details> --- #### crdt **Total** Files count | Total bundle size | % Changed ----------- | ----------------- | --------- 1 | 11.12 kB | 0% <details> <summary>View detailed bundle breakdown</summary> <div> **Added** No assets were added **Removed** No assets were removed **Bigger** No assets were bigger **Smaller** No assets were smaller **Unchanged** Asset | File Size | % Changed ----- | --------- | --------- index.js | 11.12 kB | 0% </div> </details> </details> <!--- bundlestats-action-comment key:combined end ---> --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
GiteaMirror added the pull-request label 2026-06-16 00:29:05 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/actual#131719