[PR #8159] [MERGED] [AI] Add missing widget types to dashboard import validation #131729

Closed
opened 2026-06-16 00:30:08 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/actualbudget/actual/pull/8159
Author: @samaluk
Created: 6/9/2026
Status: ✅ Merged
Merged: 6/9/2026
Merged by: @youngcw

Base: master ← Head: fix/dashboard-import-all-widgets


📝 Commits (3)

  • 4072a27 [AI] Add missing widget types to dashboard import validation
  • df8fae4 [AI] Add test ensuring all widget types are covered by import validation
  • 6738dc1 [AI] Add release notes for dashboard import widget type support

📊 Changes

3 files changed (+51 additions, -1 deletions)

View changed files

➕ packages/loot-core/src/server/dashboard/app.test.ts (+40 -0)
📝 packages/loot-core/src/server/dashboard/app.ts (+5 -1)
➕ upcoming-release-notes/dashboard-import-all-widgets.md (+6 -0)

📄 Description

Description

The isWidgetType() validation function in the dashboard import logic was missing two widget types that are fully defined in the TypeScript type system and rendered in the UI: balance-forecast-card and age-of-money-card. This meant exporting a dashboard containing these widgets and re-importing it would fail validation with "Invalid widget type".
This PR adds both missing types to the validation list and introduces a regression test that verifies all 13 known widget types pass validation — ensuring future additions to the SpecializedWidget union don't get silently missed.
AI tools (OpenCode, Deepseek V4 Flash) assisted with writing the test scaffolding and release notes, under human direction.

Related issue(s)

N/A

Testing

  • Added packages/loot-core/src/server/dashboard/app.test.ts with 2 tests:
  • All 13 known widget types are accepted by isWidgetType()
  • Unknown types are correctly rejected
  • Ran yarn test — 2/2 passed
  • Ran yarn lint:fix — 0 errors
  • Ran yarn typecheck — all relevant packages pass (core, web, api)

Checklist

  • Release notes added (see upcoming-release-notes/dashboard-import-all-widgets.md)
  • 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 0%
loot-core 1 5.28 MB → 5.28 MB (+52 B) +0.00%
api 2 3.87 MB → 3.87 MB (+50 B) +0.00%
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 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
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/de.js 173.68 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.18 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/wide.js 298.88 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 (+52 B) +0.00%
Changeset
File Δ Size
home/runner/work/actual/actual/packages/loot-core/src/server/dashboard/app.ts 📈 +52 B (+0.68%) 7.44 kB → 7.49 kB
View detailed bundle breakdown

Added

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

Removed

Asset File Size % Changed
kcab.worker.BuloPXUY.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 (+50 B) +0.00%
Changeset
File Δ Size
home/runner/work/actual/actual/packages/loot-core/src/server/dashboard/app.ts 📈 +50 B (+0.67%) 7.28 kB → 7.33 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 (+50 B) +0.00%

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/8159 **Author:** [@samaluk](https://github.com/samaluk) **Created:** 6/9/2026 **Status:** ✅ Merged **Merged:** 6/9/2026 **Merged by:** [@youngcw](https://github.com/youngcw) **Base:** `master` ← **Head:** `fix/dashboard-import-all-widgets` --- ### 📝 Commits (3) - [`4072a27`](https://github.com/actualbudget/actual/commit/4072a27c0ef3fe74a7b0bc629a6e4b315fbafaed) [AI] Add missing widget types to dashboard import validation - [`df8fae4`](https://github.com/actualbudget/actual/commit/df8fae4c2e6b1c70a2f8b9210b60c59f66fd67dd) [AI] Add test ensuring all widget types are covered by import validation - [`6738dc1`](https://github.com/actualbudget/actual/commit/6738dc13627d0c0f2e6f7f68643fbe0e0f957c36) [AI] Add release notes for dashboard import widget type support ### 📊 Changes **3 files changed** (+51 additions, -1 deletions) <details> <summary>View changed files</summary> ➕ `packages/loot-core/src/server/dashboard/app.test.ts` (+40 -0) 📝 `packages/loot-core/src/server/dashboard/app.ts` (+5 -1) ➕ `upcoming-release-notes/dashboard-import-all-widgets.md` (+6 -0) </details> ### 📄 Description ## Description The isWidgetType() validation function in the dashboard import logic was missing two widget types that are fully defined in the TypeScript type system and rendered in the UI: balance-forecast-card and age-of-money-card. This meant exporting a dashboard containing these widgets and re-importing it would fail validation with "Invalid widget type". This PR adds both missing types to the validation list and introduces a regression test that verifies all 13 known widget types pass validation — ensuring future additions to the SpecializedWidget union don't get silently missed. AI tools (OpenCode, Deepseek V4 Flash) assisted with writing the test scaffolding and release notes, under human direction. ## Related issue(s) N/A ## Testing - Added packages/loot-core/src/server/dashboard/app.test.ts with 2 tests: - All 13 known widget types are accepted by isWidgetType() - Unknown types are correctly rejected - Ran yarn test — 2/2 passed - Ran yarn lint:fix — 0 errors - Ran yarn typecheck — all relevant packages pass (core, web, api) ## Checklist - [x] Release notes added (see upcoming-release-notes/dashboard-import-all-widgets.md) - [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 | 0% loot-core | 1 | 5.28 MB → 5.28 MB (+52 B) | +0.00% api | 2 | 3.87 MB → 3.87 MB (+50 B) | +0.00% 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 | 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 ----- | --------- | --------- 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/de.js | 173.68 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.18 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/wide.js | 298.88 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 (+52 B) | +0.00% <details> <summary>Changeset</summary> File | Δ | Size ---- | - | ---- `home/runner/work/actual/actual/packages/loot-core/src/server/dashboard/app.ts` | 📈 +52 B (+0.68%) | 7.44 kB → 7.49 kB </details> <details> <summary>View detailed bundle breakdown</summary> <div> **Added** Asset | File Size | % Changed ----- | --------- | --------- kcab.worker.D_lQN6qp.js | 0 B → 5.28 MB (+5.28 MB) | - **Removed** Asset | File Size | % Changed ----- | --------- | --------- kcab.worker.BuloPXUY.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 (+50 B) | +0.00% <details> <summary>Changeset</summary> File | Δ | Size ---- | - | ---- `home/runner/work/actual/actual/packages/loot-core/src/server/dashboard/app.ts` | 📈 +50 B (+0.67%) | 7.28 kB → 7.33 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 (+50 B) | +0.00% **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:30:08 -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#131729