• v0.8.0 a317a14e34

    v0.8.0
    All checks were successful
    E2E / Playwright against staging (push) Successful in 40s
    Check / fmt + clippy + build + tests (push) Successful in 1m41s
    Build OCI container / Build and push mokosh-server image (push) Successful in 4m52s
    Integration / integration tests (push) Successful in 8m45s
    Stable

    David released this 2026-07-24 20:19:51 +02:00 | 144 commits to main since this release

    Changelog

    a317a14 Merge pull request 'Release v0.8.0' (#465) from release/v0.8.0 into main
    80fcb02 Release v0.8.0
    34750f7 Merge pull request 'feat(db): fail-closed RLS backstop on quote tables and tenant-RLS coverage guard (PMS-683)' (#464) from fix/PMS-683-rls-backstop into main
    f9f98a0 Merge pull request 'fix(cleanup): pagination offset overflow, constant-time code check, module docs (PMS-684)' (#463) from fix/PMS-684-cleanup into main
    0c22cc0 feat(db): enable RLS on quote tables and add tenant-RLS coverage guard
    9381130 fix(cleanup): offset overflow, constant-time code check, module docs
    f2dd3a9 Merge pull request 'test(auth): lock in bootstrap-admin login without email verification (PMS-676)' (#462) from feat/PMS-676-bootstrap-admin-unverified-login into main
    7f371b4 test(auth): lock in bootstrap-admin login without email verification (PMS-676)
    25cb584 Merge pull request 'chore(config): reconcile OAUTH_SUPER_ADMIN env var name with the code (PMS-682)' (#461) from chore/PMS-682-oauth-super-admin-env-drift into main
    006bd81 chore(config): reconcile OAUTH_SUPER_ADMIN env var name with the code (PMS-682)
    7f62826 Merge pull request 'feat(auth): invalidate access tokens on password reset/change (PMS-681)' (#460) from feat/PMS-681-invalidate-tokens-on-password-change into main
    c28dff4 refactor(auth): address PMS-681 review (fold password_changed_at into the user load, atomic revoke)
    acd0b58 feat(auth): invalidate access tokens on password reset/change (PMS-681)
    80c261f Merge pull request 'feat(auth): rate-limit /forgot-password per (IP, email) (PMS-680)' (#459) from feat/PMS-680-forgot-password-rate-limit into main
    f6b9a77 feat(auth): rate-limit /forgot-password per (IP, email) (PMS-680)
    ad6e4eb Merge pull request 'test(auth): password-reset redeem coverage (PMS-659)' (#458) from test/PMS-659-password-reset-coverage into main
    066e3f7 test(auth): cover the password-reset redeem flow (PMS-659)
    d2cbd64 Merge pull request 'feat(data): add admin Load demo data endpoint (PMS-679)' (#457) from feat/PMS-679-load-demo-data-button into main
    67c16d4 feat(data): add admin "Load demo data" endpoint (PMS-679)
    3ea1df7 Merge pull request 'feat(dev): just verify-demo for the demo seed + import/export path (PMS-677)' (#456) from feat/PMS-677-verify-demo-recipe into main
    5713f70 feat(dev): add just verify-demo for the demo-critical seed + import/export path (PMS-677)
    9420509 Merge pull request 'feat(quotes): convert an accepted quote into a Project (PMS-674)' (#455) from feat/PMS-674-convert-quote-to-project into main
    bb2e456 test(quotes): integration coverage for quote-to-project conversion (PMS-674)
    302bcd0 feat(quotes): mount POST /quotes/{id}/convert (PMS-674)
    a61298d feat(quotes): convert an accepted quote into a Project (PMS-674)
    b5c11a0 Merge pull request 'feat(quotes): send to client + portal accept/decline sign-off (PMS-673)' (#454) from feat/PMS-673-quote-send-and-portal-signoff into main
    d6b241f Merge pull request 'feat(quotes): quotes module CRUD with server-computed totals (PMS-672)' (#453) from feat/PMS-672-quotes-module-crud into main
    1142548 test(quotes): integration coverage for send and client sign-off (PMS-673)
    fd88bde feat(quotes): send route plus the portal sign-off routes (PMS-673)
    7ff7d54 feat(quotes): issue to the client and record their sign-off (PMS-673)
    f657485 feat(portal): rate limiter for the quote decision routes (PMS-673)
    ece3d9a feat(email): quote-ready template for the client sign-off link (PMS-673)
    9196a2b test(quotes): integration coverage for CRUD, totals, freezing, tenancy (PMS-672)
    b630b68 feat(quotes): mount the quotes routes under /api/v1 (PMS-672)
    2bcc117 feat(quotes): quotes service with server-computed totals (PMS-672)
    5955c86 feat(quotes): quote + line DTOs and the lifecycle status model (PMS-672)
    438c84d Merge pull request 'feat(quotes): promote the quote stub to a real entity + quote_lines (PMS-671)' (#452) from feat/PMS-671-quotes-entity-schema into main
    2b97c45 test(approvals): seed a company for the quote fixture (PMS-671)
    e233923 feat(quotes): promote the quote stub to a real entity + quote_lines (PMS-671)
    7b4d1fa Merge pull request 'feat(auth): suspicious-login notify-and-approve gate for password login (PMS-658)' (#451) from feat/PMS-658-suspicious-login-approval into main
    5d9a6e0 feat(auth): suspicious-login notify-and-approve gate for password login

    Downloads