• v0.11.0 0724fa102e

    v0.11.0
    All checks were successful
    Check / fmt + clippy + tests (push) Successful in 2m1s
    Build OCI container / Build and push mokosh-www image (push) Successful in 5m27s
    Stable

    David released this 2026-08-07 19:08:31 +02:00 | 87 commits to main since this release

    Changelog

    0724fa1 Merge pull request 'Release v0.11.0' (#491) from release/v0.11.0 into main
    4c8256e Release v0.11.0
    8030e59 Merge pull request 'fix(kb): declutter the article screen and fix Cancel' (#490) from fix/MAPPS-423-kb-article-screen-declutter into main
    aadc97a fix(kb): declutter the article screen and fix Cancel
    52beb43 Merge pull request 'chore(lint): clear the two clippy failures on a current toolchain' (#489) from chore/clippy-current-toolchain into main
    76addd0 chore(lint): clear the two clippy failures on a current toolchain
    506b0da Merge pull request 'feat(kb): show the measured duration on the article' (#488) from feat/PMS-732-article-measured-duration into main
    4641b0f feat(kb): show the measured duration on the article
    c84a1b5 feat(kb): add the measured-duration DTO
    0bef34b Merge pull request 'feat(forms): send a client a request-form link' (#487) from feat/PMS-730-send-request-link into main
    e735f4d feat(forms): send a client a request-form link from their company
    67d7dc9 feat(forms): add request-link DTOs
    4990741 Merge pull request 'feat(forms): request-form builder' (#486) from feat/PMS-731-admin-form-builder into main
    3f6e8d6 feat(routes): route /admin/forms and add its nav entry
    48bbe24 feat(forms): add the request-form builder page
    d8fb9e7 feat(forms): add form-definition client DTOs
    95dc128 feat(fetch): add a typed PATCH
    78bfcd6 Merge pull request 'feat(forms): public client request-form page' (#485) from feat/PMS-730-public-request-form-page into main
    47aa333 feat(routes): route /request-forms/:token and gate the emailed link
    8fa3599 feat(forms): add the public client request-form page
    8b2eaba feat(fetch): add an unauthed typed GET
    b5a746b Merge pull request 'fix(ui): wire theme-token guard into CI and tokenize grays' (#484) from fix/MAPPS-401-theme-token-ci into main
    159cfbe fix(ui): wire theme-token guard into CI and tokenize grays
    bab7562 Merge pull request 'fix(ui): migrate the timesheet grid onto the shared Table kit' (#483) from fix/MAPPS-415-timesheet-grid into main
    47bc1f0 style(ui): block-form the compact padding let-if in table
    6d9e5d0 fix(ui): migrate the timesheet grid onto the shared Table kit
    7e897ec Merge pull request 'fix(ui): replace em-dash in theme-picker WCAG-lock label' (#482) from fix/MAPPS-419-theme-picker-emdash into main
    e2894d1 Merge pull request 'fix(ui): extract shared ErrorBanner and migrate inline banners' (#481) from fix/MAPPS-418-error-banner into main
    fa354c1 Merge pull request 'fix(ui): route component-site link chips through Button{Link}' (#480) from fix/MAPPS-416-link-chips into main
    d9c94b0 fix(ui): replace em-dash in theme-picker WCAG-lock label
    13c7bf9 style(ui): rustfmt repack of components imports after ErrorBanner
    5062ea8 fix(ui): extract shared ErrorBanner and migrate inline banners
    d47ce69 fix(ui): route component-site link chips through Button{Link}
    d9ff7da Merge pull request 'fix(ui): standardize non-busy label ellipsis to single character' (#479) from fix/MAPPS-417-placeholder-ellipsis into main
    932a662 fix(ui): standardize non-busy label ellipsis to single character
    190d390 Merge pull request 'fix(ui): unify error-banner recipe, portal chrome tokens, portal name, 404' (#478) from fix/MAPPS-412-copy-token into main
    ecc761f fix(ui): unify error-banner recipe, portal chrome tokens, portal name, 404
    dd4a86e Merge pull request 'fix(ui): hover feedback on clickable rows and Secondary button' (#477) from fix/MAPPS-411-hover-feedback into main
    6eb6589 fix(ui): hover feedback on clickable rows and Secondary button
    fe1df8f Merge pull request 'fix(ui): one busy-button pattern and one ellipsis glyph' (#476) from fix/MAPPS-410-busy-labels into main
    499439a fix(ui): one busy-button pattern and one ellipsis glyph
    a39dd2a Merge pull request 'fix(a11y): announce auth errors, th scope,

    Downloads
  • v0.10.0 1a5ef7fdf7

    v0.10.0
    All checks were successful
    Check / fmt + clippy + tests (push) Successful in 3m51s
    Build OCI container / Build and push mokosh-www image (push) Successful in 4m8s
    Stable

    David released this 2026-08-04 14:15:20 +02:00 | 152 commits to main since this release

    Changelog

    1a5ef7f Merge pull request 'Release v0.10.0' (#464) from release/v0.10.0 into main
    553580a Release v0.10.0
    28742a9 Merge pull request 'feat(types): adopt shared mokosh-types crate (MAPPS-378, rebased, supersedes #445)' (#463) from feat/MAPPS-378-adopt-mokosh-types-rebased into main
    daa5d13 feat(types): adopt shared mokosh-types crate via HTTPS git dep
    683e878 Merge pull request 'feat(ui): show only the version in the left menu, linked to status (PMS-712)' (#462) from feat/PMS-712-version-only-footer into main
    e8c4327 feat(ui): show only the version in the left menu, linked to status (PMS-712)
    276be02 Merge pull request 'ci: run Check on the dev runner label' (#461) from chore/MAPPS-398-check-dev-runner-label into main
    bb77a2c ci: run Check on the dev runner label
    4dfadaa Merge pull request 'refactor(portal): gate the route guard on a session predicate' (#460) from feat/MAPPS-395-portal-session into main
    d679632 refactor(portal): gate the route guard on a session predicate
    c09676f feat(portal): give the SPA a portal session
    64808c7 Merge pull request 'feat(portal): add the set-password page the setup email links to' (#459) from feat/MAPPS-396-portal-set-password into main
    fa1fdfd feat(portal): add the set-password page the setup email links to
    f1af926 Merge pull request 'feat(login): handle the emailed sign-in approval code' (#458) from feat/MAPPS-397-spa-login-approval-code into main
    a713853 feat(login): handle the emailed sign-in approval code
    ae80257 Merge pull request 'feat(models): source contacts + time_tracking DTOs from mokosh-types' (#457) from feat/MAPPS-383-adopt-mokosh-types-contacts-time into main
    f468d58 feat(models): source contacts + time_tracking DTOs from mokosh-types
    514c6b2 Merge pull request 'fix(oci): pre-stage wasm-opt where dx 0.7.7 looks for it' (#456) from fix/MAPPS-381-wasm-opt-prestage-path into main
    1919c2a fix(oci): pre-stage wasm-opt where dx 0.7.7 looks for it
    72e25e8 Merge pull request 'ci: warn loudly when the public image mirror is skipped (PSA-58)' (#455) from fix/PSA-58-warn-on-skipped-mirror into main
    6dd6026 ci: warn loudly when the public image mirror is skipped (PSA-58)

    Downloads
  • v0.9.1 ac1cec2350

    v0.9.1
    All checks were successful
    Check / fmt + clippy + tests (push) Successful in 3m6s
    Build OCI container / Build and push mokosh-www image (push) Successful in 5m47s
    Stable

    David released this 2026-07-30 18:53:31 +02:00 | 173 commits to main since this release

    Changelog

    ac1cec2 Merge pull request 'Release v0.9.1' (#454) from release/v0.9.1 into main
    f8c8008 Release v0.9.1
    2f63cd0 Merge pull request 'fix(caddy/oci): no-cache SPA routes + ship theme-init.js (PMS-687)' (#453) from fix/PMS-687-spa-cache-and-theme-init into main
    8dcba3b fix(oci): ship theme-init.js so /assets/theme-init.js serves as JS (PMS-687)
    b73a2b1 fix(caddy): no-cache SPA routes so a stale callback page is never pinned (PMS-687)

    Downloads
  • v0.9.0 6405a4482d

    v0.9.0
    All checks were successful
    Build OCI container / Build and push mokosh-www image (push) Successful in 6m57s
    Check / fmt + clippy + tests (push) Successful in 10m9s
    Stable

    David released this 2026-07-30 18:16:29 +02:00 | 178 commits to main since this release

    Changelog

    6405a44 Merge pull request 'Release v0.9.0' (#452) from release/v0.9.0 into main
    1e1f738 Release v0.9.0
    dec9924 Merge pull request 'fix(ui): scope table-row hover to interactive rows only (MAPPS-389)' (#451) from fix/MAPPS-389-scope-row-hover into main
    2120018 fix(ui): scope table-row hover to interactive rows only (MAPPS-389)
    8a669a7 Merge pull request 'fix(ui): de-box list page filters and center table empty states (MAPPS-388)' (#450) from fix/MAPPS-388-header-box-empty-states into main
    fc5e29e fix(ui): remove oversized filter box on Projects/Companies/Contacts (MAPPS-388)
    df0032d fix(ui): center left-aligned table empty states (MAPPS-388)
    0dd2f27 feat(ui): add centered full-width TableEmptyRow with a render test (MAPPS-388)
    263f708 Merge pull request 'fix(calendar): keep the 12 AM row clear of the sticky header (MAPPS-387)' (#449) from fix/MAPPS-387-midnight-row-clipped into main
    08088c2 fix(calendar): keep the 12 AM row clear of the sticky header (MAPPS-387)
    7ddf2b4 Merge pull request 'feat(calendar): full-day scheduling grid that scrolls in its box (MAPPS-387)' (#448) from feat/MAPPS-387-full-day-scheduling-grid into main
    8f95d6c feat(calendar): full-day dispatch timeline with off-hours shading (MAPPS-387)
    7a00edc feat(calendar): scroll day/week grid in its box and shade off-hours (MAPPS-387)
    ae8740f feat(calendar): full-day grid geometry and working-hours window (MAPPS-387)
    823ca09 Merge pull request 'fix(ui): let the user-menu icon inherit hover color (MAPPS-384 follow-up)' (#447) from fix/MAPPS-384-profile-icon-hover-color into main
    a46db43 fix(ui): let the user-menu icon inherit hover color (MAPPS-384 follow-up)
    ccf6054 Merge pull request 'fix(ui): user-menu hover, tooltip, and dismiss behavior (MAPPS-384)' (#446) from fix/MAPPS-384-user-menu-hover-dismiss into main
    f1f323e ci: run the gcc install through sudo
    e76e08f ci: install gcc on the openSUSE runner so cargo can link
    274b368 fix(ui): user-menu hover, tooltip, and dismiss behavior (MAPPS-384)

    Downloads
  • v0.8.0 2684168991

    v0.8.0
    All checks were successful
    Check / fmt + clippy + tests (push) Successful in 1m37s
    Build OCI container / Build and push mokosh-www image (push) Successful in 3m20s
    Stable

    David released this 2026-07-24 18:05:08 +02:00 | 198 commits to main since this release

    Changelog

    2684168 Merge pull request 'Release v0.8.0' (#444) from release/v0.8.0 into main
    adf41e8 Release v0.8.0
    0e7ffad Merge pull request 'Sync drifted shared DTO fields, drop vestigial ticket copies (MAPPS-378)' (#443) from fix/MAPPS-378-mokosh-types into main
    f76f419 Merge pull request 'fix(hooks): call hooks unconditionally before early returns (MAPPS-377)' (#442) from fix/MAPPS-377-rules-of-hooks into main
    ecdd6d0 Merge pull request 'fix(auth): re-enable real GET /v1/auth/memberships call (MAPPS-379)' (#441) from fix/mapps-379-memberships into main
    8abfd0e Merge pull request 'fix: align id_token claims, surface mutation errors, drop dead user() (MAPPS-380)' (#440) from fix/mapps-380-review-cleanup into main
    cec5d47 fix(models): sync drifted shared DTO fields, drop vestigial copies
    4374407 fix(hooks): call hooks unconditionally before early returns
    134d2b5 fix(auth): re-enable real GET /v1/auth/memberships call
    389a34c fix: align id_token claims, surface mutation errors, drop dead user()
    1e49bcc Merge pull request 'fix(layout): hoist AppLayout into a persistent AppShell router layout (MAPPS-366)' (#439) from fix/MAPPS-366-persistent-app-shell into main
    318c298 fix(layout): hoist AppLayout into a persistent AppShell router layout (MAPPS-366)
    6a4443f Merge pull request 'fix(settings): correct Import & Export copy (MAPPS-376)' (#438) from fix/MAPPS-376-import-export-copy into main
    2ed25bf Merge pull request 'feat(settings): Load demo data button in Settings -> Data (PMS-679)' (#437) from feat/PMS-679-load-demo-data-button into main
    aba014d style(settings): drop the dash in the Load demo data copy (PMS-679)
    8abecc1 fix(settings): correct Import & Export copy (MAPPS-376)
    8527fa9 feat(settings): add "Load demo data" button to Settings -> Data (PMS-679)
    3f510e0 Merge pull request 'feat(quotes): staff and portal Quotes UI (PMS-675)' (#436) from feat/PMS-675-quotes-ui into main
    201024c feat(quotes): routes and Quotes nav entry (PMS-675)
    2ebd5c5 feat(portal): client quote view with accept and decline (PMS-675)
    4ea3033 feat(quotes): staff quote list, detail, and editor (PMS-675)
    117f128 refactor(approvals): parameterise ApprovalsSection by entity (PMS-675)
    c633069 feat(quotes): client DTOs and the status vocabulary (PMS-675)
    8561604 Merge pull request 'fix(auth): silently refresh standalone (non-OIDC) sessions (MAPPS-374)' (#435) from fix/MAPPS-374-standalone-silent-refresh into main
    e5c2c3c fix(auth): silently refresh standalone (non-OIDC) sessions (MAPPS-374)

    Downloads
  • v0.7.3 57f3ec3177

    v0.7.3
    All checks were successful
    Check / fmt + clippy + tests (push) Successful in 4m1s
    Build OCI container / Build and push mokosh-www image (push) Successful in 6m19s
    Stable

    David released this 2026-07-15 19:38:11 +02:00 | 223 commits to main since this release

    Changelog

    57f3ec3 Merge pull request 'Release v0.7.3' (#434) from release/v0.7.3 into main
    9cad904 Release v0.7.3
    d52d673 Merge pull request 'fix(version): judge API/client skew at minor granularity, not patch (MAPPS-372)' (#433) from fix/MAPPS-372-minor-version-skew into main
    b680ee2 fix(version): judge API/client skew at minor granularity, not patch

    Downloads
  • v0.7.2 f483298dac

    v0.7.2
    All checks were successful
    Check / fmt + clippy + tests (push) Successful in 1m38s
    Build OCI container / Build and push mokosh-www image (push) Successful in 7m6s
    Stable

    David released this 2026-07-15 18:36:19 +02:00 | 227 commits to main since this release

    Changelog

    f483298 Merge pull request 'Release v0.7.2' (#432) from release/v0.7.2 into main
    710fab2 Release v0.7.2
    c94a50e Merge pull request 'fix(release): sync Cargo.lock in create-release so it stops drifting (MAPPS-371)' (#431) from fix/MAPPS-371-create-release-lock-sync into main
    14815b9 fix(release): sync Cargo.lock in create-release so it stops drifting (MAPPS-371)
    034fa99 Merge pull request 'fix(version): gate update banner on semver ordering, not string inequality (MAPPS-370)' (#430) from fix/MAPPS-370-update-banner-semver-compare into main
    2539588 feat(version): surface a "server behind client" banner for the reverse skew
    7e83439 fix(version): gate update banner on semver ordering, not string inequality

    Downloads
  • v0.7.1 0cc0de69c3

    v0.7.1
    All checks were successful
    Check / fmt + clippy + tests (push) Successful in 1m20s
    Build OCI container / Build and push mokosh-www image (push) Successful in 2m54s
    Stable

    David released this 2026-07-15 17:06:44 +02:00 | 234 commits to main since this release

    Changelog

    0cc0de6 Merge pull request 'Release v0.7.1' (#429) from release/v0.7.1 into main
    fe8a521 Release v0.7.1
    838fb7f Merge pull request 'fix(csp): scope connect-src to API/OIDC origins so all sub-paths are allowed (MAPPS-369)' (#428) from fix/MAPPS-369-csp-connect-src-origin into main
    b562424 fix(csp): scope connect-src to API/OIDC origins so all sub-paths are allowed

    Downloads
  • v0.7.0 de527bd6b1

    v0.7.0
    All checks were successful
    Check / fmt + clippy + tests (push) Successful in 1m39s
    Build OCI container / Build and push mokosh-www image (push) Successful in 3m39s
    Stable

    David released this 2026-07-15 14:18:13 +02:00 | 238 commits to main since this release

    Changelog

    de527bd Merge pull request 'Release v0.7.0' (#427) from release/v0.7.0 into main
    9a47aea Release v0.7.0
    54f50d2 Merge pull request 'feat(auth): standalone username/password login when no bunyip is configured (MAPPS-368)' (#426) from feat/MAPPS-368-standalone-login into main
    c7efeec fix(auth): recover expired standalone session, accept MFA on standalone login
    d0648bc feat(auth): standalone username/password login when no bunyip/OIDC is configured (MAPPS-368)
    17b2196 Merge pull request 'docs(auth): record accepted-risk decision for SPA OIDC token storage (MAPPS-362)' (#425) from docs/MAPPS-362-oidc-token-storage into main
    6e7f646 docs(auth): record accepted-risk decision for SPA OIDC token storage
    719b448 Merge pull request 'feat/mapps-364-import-export' (#424) from feat/mapps-364-import-export into main
    edc3829 docs(settings): drop stale group count after adding the Data group
    bfdc78e refactor(settings): move Import & Export into its own "Data" group
    857b733 Merge pull request 'feat(settings): admin-only Import & Export page for tenant data' (#423) from feat/mapps-364-import-export into main
    39f7bae fix(settings): harden data export/import per code review
    4fb7648 feat(settings): admin-only Import & Export page for tenant data
    b948abf Merge pull request 'feat(billing): masked write-only Stripe/gateway key in the config UI' (#422) from feat/mapps-363-stripe-masked-key into main
    c99a6bc fix(billing): associate the API-key label and align gateway status wording
    7833a50 feat(billing): masked write-only Stripe/gateway key in the config UI
    d480794 Merge pull request 'fix(release): preserve Cargo.toml comments in create-release' (#421) from fix/create-release-preserve-cargo-comments into main
    7c2afb1 fix(release): preserve Cargo.toml comments in create-release

    Downloads
  • v0.6.0 78be16e7fa

    v0.6.0
    All checks were successful
    Check / fmt + clippy + tests (push) Successful in 1m26s
    Build OCI container / Build and push mokosh-www image (push) Successful in 6m29s
    Stable

    David released this 2026-07-07 16:59:27 +02:00 | 256 commits to main since this release

    Changelog

    78be16e Merge pull request 'Release v0.6.0' (#420) from release/v0.6.0 into main
    23771f5 fix(release): restore Cargo.toml comments stripped by create-release
    1c4e135 Release v0.6.0
    465954a Merge pull request 'feat(assets): add/remove UI for asset relationships' (#419) from feat/MAPPS-233-asset-relationships-add-remove into main
    559fdc5 feat(assets): add/remove UI for asset relationships
    32a6e2f Merge pull request 'feat(spa): distinct sidebar icons and per-category color accents' (#418) from feat/MAPPS-359-sidebar-icons-category-colors into main
    4ef5a18 feat(spa): distinct sidebar icons and per-category color accents
    084ffe2 Merge pull request 'feat(spa): collapse sidebar to Dashboard-only while server is down' (#417) from feat/MAPPS-358-server-down-sidebar into main
    f1da628 feat(spa): collapse sidebar to Dashboard-only while server is down
    9c3ab0b Merge pull request 'feat(time): show reviewable submit/change/approve history in approvals' (#416) from feat/MAPPS-340-timesheet-approval-history into main
    3793751 feat(time): show reviewable submit/change/approve history in approvals
    f1429d9 Merge pull request 'feat(spa): retrofit remaining data-driven pages onto explicit server-down UX' (#415) from feat/MAPPS-357-retrofit-remote-resource-pages into main
    d212d32 feat(spa): retrofit remaining data-driven pages onto explicit server-down UX
    1c3f466 Merge pull request 'fix(spa): clean up three CSP + manifest console errors on msp.a8n.systems' (#414) from fix/MAPPS-356-console-errors into main
    548064b fix(spa): clean up three CSP + manifest console errors on msp.a8n.systems
    813f637 Merge pull request 'feat(auth): auto-retry OIDC callback storage errors + 30s /auth/me heartbeat' (#413) from feat/MAPPS-355-auth-callback-retry-plus-heartbeat into main
    cdd6574 feat(auth): auto-retry OIDC callback storage errors + 30s /auth/me heartbeat
    994f08a Merge pull request 'feat(ui): explicit server-unavailable state + auto-refetch on reconnect (MAPPS-351)' (#412) from feat/MAPPS-351-server-down-ux into main
    9e4b49a feat(ui): explicit server-unavailable state + auto-refetch on reconnect
    77aff3f Merge pull request 'feat(auth): render terminal modal on 410 Gone (ACCOUNT_DELETED) and force logout' (#411) from feat/MAPPS-348-terminal-modal-on-account-deleted into main
    21287da feat(auth): render terminal modal on 410 Gone (ACCOUNT_DELETED) and force logout
    b9c2eb3 Merge pull request 'fix(forms): keep inline validation errors rendering on empty submit' (#410) from fix/MAPPS-347-form-validation-inline-errors into main
    39872ab fix(forms): keep inline validation errors rendering on empty submit
    b028b7d Merge pull request 'MAPPS-346: consistent even spacing across collapsed sidebar icons' (#409) from feat/MAPPS-346-collapsed-nav-even into main
    c39157f feat(sidebar): even icon spacing on the collapsed rail
    e0a587f Merge pull request 'MAPPS-346: spread collapsed sidebar to fill spare height (current density as minimum)' (#408) from feat/MAPPS-346-collapsed-nav-fill into main
    584a49f feat(sidebar): spread collapsed rail across spare height, tight as minimum
    b59dc2e Merge pull request 'MAPPS-346: tighten collapsed sidebar density so the rail fits without scrolling' (#407) from feat/MAPPS-346-collapsed-nav-density into main
    ad94958 feat(sidebar): tighten collapsed rail density so it fits without scrolling
    a52815e Merge pull request 'MAPPS-346: sidebar collapse as a half-circle edge handle, hide rail scrollbar' (#406) from feat/MAPPS-346-sidebar-edge-handle into main
    e3f0df7 feat(sidebar): move collapse toggle to a half-circle edge handle
    c9944d1 Merge pull request 'MAPPS-346: collapse global search to an icon + top bar/sidebar polish' (#405) from feat/MAPPS-346-collapsible-search into main
    dfb12cb feat(topbar): collapse global search to an expand-on-click icon
    f6cbdb2 Merge pull request 'feat(sla): show schedule/holiday JSON validation errors inline' (#404) from feat/PMS-604-sla-json-inline-errors into main
    177d192 feat(sla): show holiday JSON validation errors inline on the field
    d6f7a9c feat(sla): show schedule JSON validation errors inline on the field
    99f7daa Merge pull request 'fix(spa): tab title stuck on Loading… (re-render + unicode ellipsis)' (#403) from fix/MAPPS-287-tab-title-stuck-loading into main
    29d3970 fix(spa): set tab title on every render so it advances past "Loading…"
    a53e9d1 Merge pull request 'fix(spa): serve favicon/manifest at root + stop tab sticking on Loading...' (#402) from fix/MAPPS-favicon-manifest-and-loading-title into main
    a1414c6 fix(spa): serve favicon/manifest at root + stop tab sticking on "Loading..."

    Downloads