Skip to content

Wealth Watcher v0.4.0

Choose a tag to compare

@paevans87 paevans87 released this 15 Aug 22:44
· 61 commits to main since this release
a8d4bb1

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.

Docker images

  • ghcr.io/paevans87/wealth-watcher-public-api:v0.4.0
  • ghcr.io/paevans87/wealth-watcher-public-web:v0.4.0
  • 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.