A dated record of website updates, product behaviour changes, and testing coverage added to keep the system verifiable end to end.
2026-06-26
UAT email testing has a one-command interactive runner
E2E
Added a dedicated PowerShell helper for running the full UAT Playwright email/deep-link suite interactively without creating a local secrets file first.
Interactive UAT helper
The new run-uat-email-interactive.ps1 script sets the UAT website/API URLs, Mailcow host, Mailcow mailbox, mythos365.com test domain, and extended mail timeout before launching Playwright.
Prompted secrets
When Basic Auth or Mailcow passwords are missing from the current PowerShell process, the helper prompts for them and keeps them in process environment variables only.
Documented usage
The testing README now shows the one-command headed-browser flow and the Playwright UI variant for selecting individual UAT scenarios.
Verification
The helper script parses as valid PowerShell.
The testing README documents headed and UI-mode UAT email runs with the helper.
2026-06-25
Share and request emails show unique receipts
Messaging
Profile share and request emails now include a visible receipt number, the profile-detail count, and the note text where applicable so inbox rows are distinguishable before opening the link.
Visible receipt numbers
Share emails expose an SH receipt derived from the grant or invite id, while request emails expose the existing RQ receipt in a shared receiptNumber payload field.
Inbox-friendly subjects
Novu templates can render the readable profile-detail count and receipt in the subject, for example a sender sharing several profile details with a unique receipt.
Receipt-aware E2E checks
The Mailcow E2E suite now derives the expected receipt from the delivered deep link and requires that same value in the email subject/body, with note text checked where present.
Verification
API outbox tests assert receiptNumber and attributeCountLabel for request and share emails.
The Playwright email suite asserts delivered Mailcow messages contain the link-derived receipt before opening login/signup deep links.
2026-06-25
Email deep links survive the logged-out app redirect
Website
The app login redirect now preserves the exact share or request URL from email links even when the app shell is opened before a browser session exists.
Browser-time return target
The app shell computes its login return path from the live browser location before redirecting, preventing prerender/hydration state from collapsing links back to /app.
Sanitized destination retained
The existing same-origin allow-list still rejects unsafe redirects while keeping allowed /app deep links and their grant or request-code query parameters.
Live auth query handling
The login and signup screens read returnTo, email, and auth_error from live search parameters so prerendered defaults cannot hide an email-link destination.
Verification
The failing UAT trace showed login receiving returnTo=/app after opening a delivered /app/connections?grant=... email link.
A navigation probe confirmed the app redirect now sends /login?returnTo=/app/connections?grant=..., and the auth screen fix keeps that destination visible.
Web typecheck and lint passed after the redirect fix; lint continues to report only the existing image/unused-variable warnings.
2026-06-25
Email links now drive login, signup, requests, and password reset
Messaging
Share and request emails now behave as deep links, unregistered recipients are guided into signup, and password reset is covered by the same Novu/Mailcow E2E path.
Deep-link auth redirects
Logged-out recipients who open share or request links are sent through login/signup with a sanitized return path, then redirected back to the intended app screen.
Unregistered recipient claiming
Blind email shares are stored as pending invites and blind email profile requests are claimed when the addressed email signs up.
Password reset email flow
Added one-use password reset tokens, Novu workflow routing, forgot/reset password screens, and session revocation after successful reset.
Public request sends real API requests
The /request page now creates a real account and /api/requests row, shows the backend RQ receipt, and fails if the API does not return that receipt.
Verification
Novu has active share_invite_email, profile_request_email, and password_reset_email workflows; password_reset_email was directly triggered and received in Mailcow.
Focused API tests cover password reset, pending request claiming, pending share claiming, Novu workflow mapping, and auth security coverage.
The Playwright email suite now covers existing-email login redirects, non-existent-email signup redirects, forgot password, and public /request delivery.
2026-06-25
Signup country validation works in UAT containers
App
Registration now validates country codes without relying on runtime globalization data that is disabled in the published API.
Invariant-safe country catalog
The API uses an in-repo ISO country catalog aligned to the website signup selector instead of RegionInfo, which is unavailable in the invariant production runtime.
Explicit rejection
Unknown country codes still fail with a Bad Request response rather than silently substituting another country.
Verification
Country catalog tests cover AU, US, GB, NZ, and unknown codes.
Registration tests cover AU home-country seeding and explicit unknown-country rejection.
2026-06-25
Email-backed UAT testing and request notifications
E2E
UAT can now exercise the normal website and real email delivery path for profile shares and profile requests.
Profile request notifications
Profile requests made by handle or unique code now enqueue the same durable Novu email notification as private email requests, including an RQ link back to the website.
Email E2E scenarios
Added Playwright coverage for share invites and profile requests by existing email, handle, unique code, and non-existent email.
Fail-fast mail harness
Mailcow configuration is now explicit for email E2E runs; missing placeholders, invalid ports, invalid flags, and IMAP failures stop the run at the failing operation.
Release history
Added this release notes page so website changes, app behaviour changes, and testing expansions have a visible history.
Verification
API integration tests cover profile-request email outbox creation for handle and unique-code lookups.
The email Playwright suite opens delivered links through the configured public website URL.
The target runner validates Basic Auth and Mailcow configuration before sending test traffic.