You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Wealth Watcher v0.4.0
Highlights
Adds optional Wealth Milestones: enable the feature in Settings, configure up to 50 unique positive GBP targets, and see progress from the latest achieved target to the next target on the dashboard.
Hardens integration boundaries so provider and exception details are not returned through the API or persisted in connection and sync-audit records.
Makes the dashboard and settings UI more resilient to malformed persisted settings, invalid dynamic content, unsafe colors, and null forecast collections.
Improves the public site and browser demo with search metadata, canonical and social-preview metadata, robots and sitemap files, privacy-aware analytics events, and automated public-site validation.
Strengthens release and deployment provenance with digest-pinned base images, pinned runtime packages, signed container images, SBOM/provenance generation, and a pinned local PostgreSQL image.
Fixes
Validates and canonicalizes milestone targets in both the API and browser demo, rejecting malformed, duplicate, non-positive, or over-precise values while keeping dashboard progress derived from current wealth.
Treats null forecast collections as ordinary validation input and returns a validation failure instead of allowing an unhandled request failure.
Escapes rendered user/provider values and validates dynamic colors and delegated UI actions across dashboard, budget, integration, audit, and catalog surfaces.
Stops provider failure messages and sensitive values from leaking into integration responses, stored errors, or sync-audit output while retaining safe client-facing status messages.
Corrects the API runtime image digest and applies the Microsoft.EntityFrameworkCore.Relational patch update to 10.0.11.
Adds regression coverage for the Milestones, security, persisted-settings, forecast-validation, rendering, demo, and public-site contracts.
Upgrade notes
This release includes the AddMilestoneSettings database migration, which adds the MilestoneJson column to AppPreferences; the API applies it during startup. Back up PostgreSQL before upgrading and verify that the migration completes successfully.
Milestones is optional and disabled by default. Enable it under Settings, then add positive GBP targets if you want the dashboard to track progress. No new deployment or environment configuration setting is required. The public Pages workflow gains build validation and the browser demo includes Milestones contract support.
Back up the ASP.NET Data Protection key directory as a normal operational precaution. Review provider integration behavior and run a test sync after updating because integration failures now use intentionally generic client-facing messages.
For published images, pull the v0.4.0 API and web tags after the tagged workflow succeeds. For local builds, rebuild the images so the digest-pinned base images and updated release metadata are included.
Rolling back images does not automatically undo the Milestones schema migration. A v0.3.0 application should not depend on the new column, but Milestones settings will not be available there; retain the verified backup and use a controlled database restore or migration rollback only when an exact schema rollback is required.
The successful tagged workflow also moves the stable latest alias for both images.
Image digests are not available until the tagged build completes. Record the published digests from that workflow when immutable release evidence or deployment pinning is required; sha-<full-commit-sha> remains available for commit-based rollback.
Known issues
Forecast views can still be unreliable or calculate unexpectedly in some cases; this release hardens input validation but does not remove that broader limitation.
The browser-only public demo uses fictional, resettable data and does not connect to the API, database, accounts, or provider integrations.