• v0.4.0 15731b8152

    v0.4.0
    Some checks failed
    Build API image / Build and push API image (push) Failing after 41s
    Build Web image / Build and push Web image (push) Successful in 4m7s
    Stable

    nrupard released this 2026-06-24 10:53:56 +02:00 | 751 commits to main since this release

    Changelog

    4101161 Merge pull request 'Release v0.4.0' (#214) from release/v0.4.0 into main
    9cb932e Release v0.4.0
    791147e Merge pull request 'feat(stripe): auto-bootstrap default product on first config save (BUNYIP-189)' (#212) from feat/BUNYIP-189-auto-bootstrap-product into main
    4ad0524 Merge pull request 'fix(membership): surface checkout errors as a flash banner (BUNYIP-187)' (#211) from fix/BUNYIP-187-surface-checkout-errors into main
    a9cc08c Merge pull request 'fix/BUNYIP-188-cors-origin-comma-list' (#210) from fix/BUNYIP-188-cors-origin-comma-list into main
    fa1cb5a feat(stripe): auto-bootstrap default product on first config save (BUNYIP-189)
    46e90e6 fix(membership): surface checkout errors as a flash banner (BUNYIP-187)
    7415fac chore: cargo fmt
    ca54fb9 fix(stripe): split CORS_ORIGIN on comma for success_url fallback (BUNYIP-188)
    ad06e7a Merge pull request 'docs(stripe): document the app-tagged product/price checkout prerequisite (BUNYIP-175)' (#209) from docs/BUNYIP-175-tagged-product-step into main
    8f69fc1 docs(stripe): document the app-tagged product/price checkout prerequisite (BUNYIP-175)
    1410ffa Merge pull request 'fix(dev): pass Stripe checkout redirect URLs to the api on dev-sso (BUNYIP-175)' (#208) from fix/BUNYIP-175-dev-sso-checkout-urls into main
    ff970cc fix(dev): pass STRIPE_SUCCESS_URL + STRIPE_CANCEL_URL to api (BUNYIP-175)
    44b9bef Merge pull request 'fix(dev): pass Stripe test-mode keys to the api container (BUNYIP-175)' (#207) from fix/BUNYIP-175-compose-pass-stripe-keys into main
    85052b1 fix(dev): pass STRIPE_SECRET_KEY + STRIPE_WEBHOOK_SECRET to api (BUNYIP-175)
    3f8a9dd Merge pull request 'docs(stripe): document test-mode subscription testing (BUNYIP-175)' (#206) from docs/BUNYIP-175-stripe-test-mode into main
    b5c0ab7 docs(stripe): document test-mode subscription testing (BUNYIP-175)
    5bb6e28 Merge pull request 'fix(web): 404 fallback returns a real 404, not a soft-404 200 (BUNYIP-186)' (#205) from fix/BUNYIP-186-not-found-404-status into main
    ad81fa8 fix(web): 404 fallback returns a real 404, not a soft-404 200
    af0892b Merge pull request 'fix(e2e): hard + body-validate the hub /healthz probe (BUNYIP-185)' (#204) from fix/BUNYIP-185-hub-healthz-hard-probe into main
    3d9acc6 fix(e2e): hard + body-validate the hub /healthz probe (BUNYIP-185)
    12012f3 Merge pull request 'feat(e2e): /e2e-bootstrapped readiness endpoint + skip-when-unseeded gate (BUNYIP-163)' (#203) from feat/BUNYIP-163-e2e-bootstrapped-gate into main
    b1475e1 feat(e2e): /e2e-bootstrapped readiness endpoint + skip-when-unseeded gate
    b1c8bff Merge pull request 'feat(web): add /healthz liveness endpoint for e2e + monitoring (BUNYIP-149)' (#202) from feat/BUNYIP-149-web-healthz into main
    2432d8e feat(web): add /healthz liveness endpoint + wire it into the e2e gate
    4c8216a Merge pull request 'feat(settings): paginate the sessions and trusted-device lists (BUNYIP-177)' (#200) from feat/BUNYIP-177-paginate-sessions-devices into main
    bf49cba Merge origin/main into feat/BUNYIP-177-paginate-sessions-devices
    3fa1357 Merge pull request 'test(e2e): accept both paginated and legacy session-list shapes' (#201) from fix/BUNYIP-183-sessions-e2e-shape-transition into main
    96c1534 fix(settings): widen pagination offset to i64 + un-garble the pager doc
    61ee862 test(e2e): accept both paginated and legacy session-list shapes
    f6637dd feat(settings): paginate the sessions and trusted-device lists
    8472e29 Merge pull request 'test(e2e): verify the /settings renderer fix by un-fixme'ing profile + sessions (BUNYIP-176)' (#198) from fix/BUNYIP-176-settings-ci-crash into main
    ff0c04c fix(e2e): unwrap the success envelope in the sessions assertion
    427084e fix(e2e): assert profile + sessions via request-context, not a /settings render
    9472ebd fix(e2e): block the FontAwesome kit on /settings (kills the headless renderer)
    0c0b370 test(e2e): un-fixme profile + sessions to verify the /settings renderer fix
    5a811bc Merge pull request 'fix/BUNYIP-148-serial-project-ordering' (#197) from fix/BUNYIP-148-serial-project-ordering into main
    2c0ad13 chore(e2e): fixme profile + sessions until /settings renderer crash is rooted (BUNYIP-148)
    9c56dcf fix(e2e): --disable-gpu + --no-sandbox to stop the /settings renderer crash (BUNYIP-148)
    6f7ba14 fix(e2e): goto /settings with waitUntil:'commit' so the load-stage race fails diagnosably (BUNYIP-148)
    9c0aa9f fix(e2e): serialise account-ui before api to stop the project-switch chromium relaunch (BUNYIP-148)
    a865c7e chore(e2e): TEMP pw:browser diagnostic to capture the /settings browser-process death reason
    dadf184 fix(e2e): run full chromium (channel: chromium), not headless-shell, for heavy pages
    0407e4f fix(e2e): --disable-dev-shm-usage (browser crash on /settings) + DOM-set profile fields
    34abe6f Merge pull request 'fix(e2e): fixme consent-screen + diagnose the /settings page-close (BUNYIP-148)' (#195) from fix/BUNYIP-148-account-ui-and-consent into main
    d067214 fix(e2e): fixme the consent-screen spec + diagnose the /settings page-close
    8f6611e Merge pull request 'fix(e2e): set login fields via the DOM - Playwright fill() no-ops on the CI runner (BUNYIP-168)' (#194) from fix/BUNYIP-168-dom-set-login-fields into main
    5266cd2 fix(e2e): set login fields via the DOM (Playwright fill() no-ops on the CI runner)
    c6196c8 Merge pull request 'chore(e2e): log the login page the runner loads (BUNYIP-168 diag)' (#193) from chore/BUNYIP-168-log-runner-login-page into main
    ba0ffda chore(e2e): log the login page the runner actually loads (BUNYIP-168 diag)
    488be89 Merge pull request 'chore(e2e): remove BUNYIP-167 diagnostics + make blockLiveReload work via addInitScript (BUNYIP-168)' (#192) from chore/BUNYIP-167-remove-temp-diagnostics into main
    94ad872 chore(e2e): remove BUNYIP-167 diagnostics + make blockLiveReload actually work
    9dd6f38 Merge pull request 'fix(e2e): block the SSE reload that wipes the login form (BUNYIP-168)' (#191) from fix/BUNYIP-168-block-sse-reload into main
    2ee03b8 fix(e2e): block the SSE reload that wipes the login form (the real root cause)
    dcfc92b Merge pull request 'fix(e2e): robustly fill the login form - it was posting empty credentials (BUNYIP-168)' (#190) from fix/BUNYIP-168-login-fill-empty into main
    f24fac8 fix(e2e): robustly fill the login form (it was posting empty email+password)
    19b1006 Merge pull request 'chore(e2e): log the actual /login POST to pin the rejection (BUNYIP-167)' (#189) from chore/BUNYIP-167-login-wire-diagnostic into main
    35e71da chore(e2e): log the actual /login POST (fields + headers + response)
    fa25be3 Merge pull request 'chore(e2e): fingerprint resolved-config diagnostic to dodge secret masking (BUNYIP-167)' (#188) from chore/BUNYIP-167-fingerprint-masked-inputs into main
    2d09ada chore(e2e): fingerprint the resolved-config diagnostic to dodge secret masking
    ea165dc Merge pull request 'chore(e2e): log resolved suite inputs to diagnose login mismatch (BUNYIP-167)' (#187) from chore/BUNYIP-167-log-resolved-config into main
    6128680 chore(e2e): log resolved suite inputs to diagnose the login mismatch
    2814049 Merge pull request 'fix(e2e): trim bootstrap password before hashing (BUNYIP-166)' (#186) from fix/BUNYIP-166-bootstrap-trim-password into main
    7c4ac02 fix(e2e): trim the bootstrap password before hashing (whitespace login mismatch)

    Downloads