• v0.2.0 36a04cc169

    v0.2.0
    Some checks failed
    Build OCI container / Build and push mokosh-www image (push) Failing after 6m38s
    Stable

    David released this 2026-05-14 23:57:17 +02:00 | 1197 commits to main since this release

    Changelog

    1e0e5a1 Merge pull request 'Release v0.2.0' (#133) from release/v0.2.0 into main
    471b01f Release v0.2.0
    e0af4af Merge pull request 'refactor(ui): remove dead components and finish portal/admin stub pages' (#129) from feat/mapps-142-remove-dead-components into main
    3a700e1 Merge remote-tracking branch 'origin/main' into feat/mapps-142-remove-dead-components
    4634e2d Merge pull request 'chore(cleanup): remove orphaned modules, hooks, structs, and cfg(server) stubs' (#128) from chore/mapps-141-remove-dead-code into main
    8c718bf Merge remote-tracking branch 'origin/main' into chore/mapps-141-remove-dead-code
    9e94768 Merge pull request 'fix(auth): close OIDC callback role/uuid drift and flow defects' (#124) from fix/mapps-137-role-parser-uuid-oidc-defects into main
    200fa61 Merge remote-tracking branch 'origin/main' into fix/mapps-137-role-parser-uuid-oidc-defects
    fc84bc5 Merge pull request 'chore(contracts): align local DTOs and document mokosh-server drift (MAPPS-138)' (#125) from chore/mapps-138-contract-drift-local-subset into main
    6ceab49 Merge branch 'main' into chore/mapps-138-contract-drift-local-subset
    9f813e0 Merge pull request 'fix(apps): correct page and component defects across tickets, KB, picker, SLA, models' (#126) from fix/mapps-139-page-component-correctness into main
    f7a313f Merge branch 'main' into fix/mapps-139-page-component-correctness
    304c1ef Merge pull request 'feat(profile): prefill date format presets with live examples' (#127) from feat/mapps-144-prefilled-date-format into main
    94f3b1c Merge branch 'main' into feat/mapps-144-prefilled-date-format
    3095e5f Merge pull request 'chore(infra): clean up Dockerfiles, CI workflows, justfile, packaging' (#130) from chore/mapps-143-infra-ci-packaging-cleanup into main
    3259456 Merge branch 'main' into chore/mapps-143-infra-ci-packaging-cleanup
    4f66fbf Merge pull request 'fix(projects): render zero Total Budget as "$0" not "$-0"' (#131) from fix/mapps-145-total-budget-negative-zero into main
    b3ee98d Merge branch 'main' into fix/mapps-145-total-budget-negative-zero
    c6f67d0 Merge pull request 'fix(404): point Contact support link to real support address' (#132) from fix/mapps-147-404-support-mailto into main
    cea7e9c Merge branch 'main' into fix/mapps-147-404-support-mailto
    cac3e3b Merge pull request 'fix(time): enforce user_id ownership on time-entry stop/update/delete' (#123) from fix/mapps-136-time-entry-ownership-guard into main
    f907232 Merge branch 'main' into fix/mapps-136-time-entry-ownership-guard
    31d5fe4 Merge pull request 'fix: pagination count 500s, order_by, and billing state (MAPPS-135)' (#122) from fix/mapps-135-pagination-billing-correctness into main
    99c581d Merge branch 'main' into fix/mapps-135-pagination-billing-correctness
    fb2747f Merge pull request 'refactor: consolidate duplicated helpers and envelope types' (#121) from refactor/mapps-140-consolidate-helpers into main
    c062923 fix(404): point Contact support link to real support address
    06fbf70 fix(projects): render zero Total Budget as "$0" not "$-0"
    52b7a3b chore(infra): clean up Dockerfiles, CI workflows, justfile, packaging
    6db9195 refactor(ui): remove dead components and finish portal/admin stub pages
    694eb47 chore(cleanup): remove orphaned modules, hooks, structs, and cfg(server) stubs
    612a8bf feat(profile): prefill date format presets with live examples
    1332872 fix(apps): correct page and component defects across tickets, KB, picker, SLA, models
    1260e37 chore(contracts): align local DTOs and document mokosh-server drift (MAPPS-138)
    147adbe fix(auth): close OIDC callback role/uuid drift and flow defects
    b2971c4 fix(time): enforce user_id ownership on time-entry stop/update/delete
    2a2fb6c fix: pagination count 500s, order_by, and billing state (MAPPS-135)
    ab903b6 refactor: consolidate duplicated helpers and envelope types
    1610f78 Merge pull request 'feat(time): add H:MM duration display format option (PMS-265)' (#120) from feat/pms-265-duration-format-option into main
    5b15312 feat(time): add H:MM duration display format option (PMS-265)
    10b593e Merge pull request 'feat(profile): custom date/time format builder with token preview' (#119) from feat/pms-254-custom-date-format-builder into main
    f4fe14e feat(profile): custom date/time format builder with token preview
    7aa5d4c Merge pull request 'feat(profile): preset date/time format picker + central formatter (frontend)' (#118) from feat/pms-253-date-format-preference-frontend into main
    24df1bc feat(profile): preset date/time format picker + central formatter (frontend)
    e1071fa Merge pull request 'feat(status): dedicated System Status page in the user menu (PMS-237)' (#117) from feat/mapps-237-system-status into main
    065043a feat(status): dedicated System Status page in the user menu (PMS-237)
    84bb63a Merge pull request 'fix(time): accept fractional hours in Log Time form (PMS-233)' (#116) from fix/mapps-233-fractional-hours into main
    357f5ce fix(time): accept fractional hours in Log Time form (PMS-233)
    01babc9 Merge pull request 'feat(team): admin invitations management UI (PMS-247)' (#115) from feat/mapps-247-invitations-ui into main
    c72a235 chore: drop accidentally-committed local CLAUDE.md from PMS-247 branch
    456111d feat(team): admin invitations management UI (PMS-247)
    2392b7a Merge pull request 'feat(timesheets): submit-certification modal and withdraw action (PMS-183)' (#114) from feat/mapps-183-timesheet-withdraw into main
    d40e5cb feat(timesheets): submit-certification modal and withdraw action (PMS-183)
    aa10d64 Merge pull request 'feat(projects): show the project's own change history and edited marker (PMS-205)' (#113) from feat/mapps-205-project-history into main
    4da1a9a feat(projects): show the project's own change history and edited marker (PMS-205)
    4f8e284 Merge pull request 'feat(history): show before/after content in change history (PMS-204)' (#112) from feat/mapps-204-history-content into main
    e67522f Merge pull request 'fix(tickets): keep Created and SLA Due on one line (PMS-181)' (#105) from fix/mapps-181-ticket-detail-oneline into main
    17ccfe7 feat(history): show the before/after content of each change, not just who/when (PMS-204)
    b961d22 Merge pull request 'feat(assets): edit asset with change history and edited marker (PMS-185)' (#109) from feat/mapps-185-asset-edit-history into main
    46b78e9 Merge pull request 'feat(projects): edit project and tasks with change history (PMS-184)' (#111) from feat/mapps-184-task-edit-history into main
    c438ee0 Merge pull request 'feat(tickets): edit ticket description with change history (PMS-182)' (#110) from feat/mapps-182-ticket-edit-history into main
    4836870 feat(projects): edit project and tasks with change history and edited marker (PMS-184)
    c8832db feat(tickets): edit ticket description with change history and edited marker (PMS-182)
    b08fe9c feat(assets): edit asset from detail with change history and edited marker (PMS-185)
    7c56e2e Merge pull request 'docs: add 2026-06-06 platform audit to dev-docs/audits' (#108) from docs/add-platform-audit-2026-06-06 into main
    6356b22 docs: add 2026-06-06 platform audit to dev-docs/audits
    bfd0b31 Merge pull request 'feat(audit-log): show resolved names instead of UUIDs in the table + detail' (#107) from feat/audit-log-show-names into main
    841e47a feat(audit-log): show resolved names instead of UUIDs in the table + detail
    068fa8c Merge pull request 'feat(auth): forced name-onboarding gate for new Bunyip-JIT users' (#106) from feat/force-name-onboarding into main
    e45216a feat(auth): forced name-onboarding gate for new Bunyip-JIT users
    df3701f fix(tickets): keep Created and SLA Due values on one line (PMS-181)
    9cab36d Merge pull request 'fix(billing): mark all required fields on the New Invoice form (PMS-187)' (#104) from fix/mapps-187-invoice-required-fields into main
    651e1b7 fix(billing): mark all required fields on the New Invoice form (PMS-187)
    315f194 Merge pull request 'feat(billing): label payments by invoice number, not UUID (PMS-186)' (#103) from feat/mapps-186-billing-company-name into main
    a4ee1f6 feat(billing): label payments by invoice number, not UUID (PMS-186)
    748458d Merge pull request 'feat(billing): show company name (not UUID) on invoices and payments (PMS-186)' (#102) from feat/mapps-186-billing-company-name into main
    91f5195 Merge pull request 'fix(billing): friendly locked state for users without finance access (MAPPS-133)' (#101) from fix/mapps-133-billing-locked-state into main
    75b43f4 feat(billing): show company name (not UUID) on invoices and payments (PMS-186)
    b678a94 fix(billing): friendly locked state for users without finance access (MAPPS-133)
    376a9b6 Merge pull request 'fix(auth): source the user role from mokosh-server /api/v1/auth/me (PMS-158)' (#100) from fix/mapps-158-role-from-server-me into main
    3508e1e fix(auth): source the user role from mokosh-server /api/v1/auth/me (PMS-158)
    a033622 Merge pull request 'feat(reports): add custom Report Builder UI (PMS-180)' (#99) from feat/mapps-custom-report-builder into main
    2c56c20 feat(reports): add custom Report Builder UI (MAPPS, PMS-180)
    d546181 Merge pull request 'feat(reports): wire Projects + Clients report detail views (PMS-179)' (#98) from feat/mapps-reports-project-client into main
    827a691 feat(reports): wire Projects + Clients report detail views (MAPPS, PMS-179)
    85ac2d7 Merge pull request 'feat(notifications): wire the top-bar bell to the in-app inbox' (#97) from feat/mapps-132-notification-bell into main
    0d34618 style(notifications): match rustfmt multiline Date::new form
    2dde8b2 style(notifications): satisfy rustfmt on the Date::new call
    ed0ca02 fix(notifications): close panel on outside click + show local-tz timestamps
    0c07ecf feat(notifications): wire the top-bar bell to the in-app inbox
    094ab8f Merge pull request 'fix(ci): decouple build-cache export so a registry stall can't hang the job' (#96) from fix/mapps-131-cache-export-stall into main
    f25be87 fix(ci): run cache-warm step last so a stall can't delay the mirror
    0d447c5 fix(ci): decouple build-cache export so a registry stall can't hang the job
    e0ad230 Merge pull request 'fix(ui,auth): modals dim instead of blanking + role parser covers all variants' (#95) from fix/modal-overlay-and-billing-perm into main
    7aef060 fix(ui,auth): modals dim instead of blanking + role parser covers all variants
    0ab6a14 Merge pull request 'feat(auto-update): SPA polls _mokosh_config.js build_sha and reloads on mismatch' (#94) from feat/auto-reload-on-new-spa-build into main
    4725c8c feat(auto-update): SPA polls _mokosh_config.js build_sha and reloads on mismatch
    806ae77 Merge pull request 'chore(build): bump rust-builder-glibc to v1.0.1' (#90) from chore/bump-rust-builder-glibc-v1.0.1 into main
    90503be Merge branch 'main' into chore/bump-rust-builder-glibc-v1.0.1
    32221a4 Merge pull request 'feat(dashboard,reports): wire Dashboard + Reports summaries (MAPPS-130)' (#93) from feat/mapps-130-wire-dashboard-reports into main
    5e0e380 feat(dashboard,reports): wire Dashboard + Reports summaries to the backend (MAPPS-130)
    348b82e Merge pull request 'feat(assets): wire Assets list, create, detail (CMDB) to the backend (MAPPS-129)' (#92) from feat/mapps-129-wire-assets into main
    bbc9048 feat(assets): wire Assets list, create, and detail (CMDB) to the backend (MAPPS-129)
    4dc3a27 Merge pull request 'feat(projects,time): task creation, budget input, project/task time logging (MAPPS-128)' (#91) from feat/mapps-128-project-task-budget-logtime into main
    841b73d feat(projects,time): task creation, budget input, and project/task time logging (MAPPS-128)
    9e2ed17 chore(build): bump rust-builder-glibc to v1.0.1
    079faa4 Merge pull request 'feat(projects): wire Project detail + tasks pages (MAPPS-127)' (#89) from feat/mapps-127-wire-project-detail-tasks into main
    67ec6e1 feat(projects): wire Project detail + tasks pages to the backend (MAPPS-127)
    906942f Merge pull request 'feat(projects): wire Projects list + create to the backend (MAPPS-126)' (#88) from feat/mapps-126-wire-projects into main
    202b603 feat(projects): wire Projects list + create to the backend (MAPPS-126)
    d3a3610 Merge pull request 'fix(tickets): show ticket number + title in detail header, not the UUID' (#87) from fix/mapps-ticket-detail-title into main
    c98f941 fix(tickets): show ticket number + title in detail header, not the UUID
    fc56575 Merge pull request 'feat(time): wire Timesheets page to the backend (MAPPS-125)' (#86) from feat/mapps-125-wire-timesheets into main
    0807f92 feat(time): wire Timesheets page to the backend (MAPPS-125)
    4fe4e93 Merge pull request 'feat(time): wire Time Tracking pages to the backend (MAPPS-124)' (#70) from feat/mapps-124-wire-time-tracking into main
    4756da1 Merge branch 'main' into feat/mapps-124-wire-time-tracking
    05d0da0 Merge pull request 'chore: Sync .gitignore' (#85) from chore/sync-gitignore into main
    42cedf2 chore: Sync .gitignore
    3013822 Merge pull request 'fix(oidc): persist tokens before navigating + router-push internal return_to' (#84) from fix/auth-callback-persists-tokens-before-nav into main
    c75a6eb fix(oidc): persist tokens before navigating + router-push internal return_to
    bfa5f30 Merge pull request 'feat(profile): timezone is a select with curated IANA list + browser auto-detect' (#83) from feat/profile-timezone-dropdown into main
    1d90100 feat(profile): timezone is a select with curated IANA list + browser auto-detect
    1647be4 Merge pull request 'feat(profile): Bunyip identity strip + local Preferences (theme, time format, week start)' (#82) from feat/profile-bunyip-identity-preferences into main
    83075c4 feat(profile): Bunyip identity strip + local Preferences (theme, time format, week start)
    c1eda0b Merge pull request 'fix(auth): logout lands on this SPA's origin home, not Bunyip's login' (#81) from fix/logout-lands-on-mokosh-home into main
    04943c8 fix(auth): logout lands on this SPA's origin home, not Bunyip's login
    9084771 Merge pull request 'feat(profile): add mokosh-side Profile page, rename hub link to Account Settings' (#80) from feat/mokosh-profile-page into main
    18e2f77 feat(profile): add mokosh-side Profile page, rename hub link to Account Settings
    6d6cf52 Merge pull request 'fix(auth): drop auth-signal writes from UserMenu logout closure' (#79) from fix/logout-no-signal-writes-pre-navigation into main
    8272512 fix(auth): drop auth-signal writes from UserMenu logout closure
    78d86ce Merge pull request 'fix(auth): logout via bunyip OptionalUser endpoint, Profile -> /settings, synthesize memberships locally' (#78) from fix/logout-profile-memberships-noise into main
    f076391 fix(auth): logout via bunyip OptionalUser endpoint, Profile -> /settings, synthesize memberships locally
    27dea24 Merge pull request 'feat(kb): one-vote rating UI (reflect + toggle the user's vote)' (#77) from feat/kb-rating-toggle-client into main
    cd48d84 Merge branch 'main' into feat/kb-rating-toggle-client
    f677ad5 Merge pull request 'fix(layout): main sidebar nav scrolls when it overflows' (#76) from fix/main-sidebar-scroll into main
    506e2d3 fix(layout): make the main sidebar nav scroll when it overflows
    52163c5 feat(kb): one-vote rating UI - reflect and toggle the user vote
    0592aab Merge pull request 'fix(kb): read-mode button (derive + minimize icon) and density paragraph spacing' (#75) from fix/kb-readmode-button into main
    bbea601 chore: sync Cargo.lock with the ammonia dependency
    e58bd90 feat(kb): density toggle also controls paragraph spacing, not just line height
    1689cc0 fix(kb): derive read-mode from both rails collapsed, swap expand/minimize icon
    6087886 Merge pull request 'feat(ui): themed global scrollbars (no more white trough on the dark/blue theme)' (#74) from feat/themed-scrollbars into main
    1b8f9fe Merge branch 'main' into feat/themed-scrollbars
    7636ef9 Merge pull request 'feat(kb): KB UI/UX overhaul - rendered markdown, three-pane reading view, tree nav' (#71) from feat/kb-ui-overhaul into main
    cb43bb6 Merge branch 'main' into feat/kb-ui-overhaul
    af77f18 Merge pull request 'fix(billing): show permission message when user lacks finance access' (#73) from fix/billing-finance-permission into main
    4ffbaa3 Merge branch 'main' into fix/billing-finance-permission
    a89a714 Merge pull request 'fix(ci): embed commit hash in OCI build (footer no longer 'unknown')' (#72) from fix/ci-embed-git-sha into main
    aa5b8b3 feat(ui): themed global scrollbars instead of the default white trough
    f9933a5 fix(kb): share rating state across the duplicated header slots
    2c23255 fix(billing): show a permission message when the user lacks finance access
    4a8866d fix(ci): embed the commit hash in the OCI build so the footer is not "unknown"
    e0f2d10 style(kb): apply rustfmt line wrapping
    7819378 fix(components): rebind CollapsibleRail signal props to mut
    cdb77d7 feat(kb): live slug generation and Write/Preview tabs on the article form
    9864474 feat(kb): add collapsible category tree rail to the article list page
    1d03438 fix(kb): drop redundant PageHeader on the article detail view
    44a3d47 feat(kb): three-pane reading view with rendered markdown and header
    4ddf4b9 feat(kb): add rating bar, density toggle, and read-mode button
    d467f35 feat(components): add OverflowActions collapsing header cluster
    f120ef8 feat(components): add CollapsibleRail with persisted collapse and overlay
    8b41cf9 feat(kb): add breadcrumb and category/article tree-nav components
    2605e16 feat(kb): add category/article tree builder
    13f7828 feat(time): wire Time Tracking pages to the backend (MAPPS-124)
    df96fd8 feat(kb): add category breadcrumb path resolution
    f5b576f feat(kb): add localStorage pref helper for KB UI state
    dc1f800 feat(kb): add sanitized markdown render helper
    51e5687 docs(kb): implementation plan for the KB UI/UX overhaul
    545378e docs(kb): collapse header items into overflow dropdown when too narrow
    c50e7c5 docs(kb): consolidate metadata onto article header, slim right rail to versions
    57c5946 docs(kb): add fullscreen read-mode toggle
    b831d1f docs(kb): refine spec - collapsible chevron rails + card-free article
    540095b docs(kb): design spec for KB UI/UX overhaul
    00c6eb6 Merge pull request 'feat(tickets): wire TicketDetailPage to real data (MAPPS-123)' (#68) from feat/mapps-123-wire-ticket-detail into main
    4483882 Merge pull request 'fix(calendar): send dispatch from/to as Z-suffixed UTC, not +00:00' (#69) from fix/dispatch-board-timestamp-z-suffix into main
    8a5083e fix(calendar): send dispatch from/to as Z-suffixed UTC, not +00:00
    fd1c2d2 feat(tickets): wire TicketDetailPage to real ticket data (MAPPS-123)
    88be09a Merge pull request 'feat(dev-sso): point the SPA OIDC issuer at bunyip-api' (#67) from feat/dev-sso-bunyip-issuer into main
    0b5a9d0 feat(dev-sso): point the SPA OIDC issuer at bunyip-api
    7a11e2f Merge pull request 'fix(calendar): create/update/delete via /appointments, role-gate users fetch' (#66) from fix/calendar-appointment-crud-paths-and-role-gate-users-fetch into main
    8b1cf53 fix(calendar): create/update/delete via /appointments, role-gate users fetch
    9fa67b2 Merge pull request 'fix(calendar): /auth/users path + Z-suffix appointment timestamps' (#65) from fix/calendar-fetch-paths-and-tz-encoding into main
    e5a9269 fix(calendar): /auth/users path + Z-suffix appointment timestamps
    ee01e54 Merge pull request 'fix(contacts): decode paginated envelope on company-detail Contacts and Sites cards' (#64) from fix/company-detail-cards-shape into main
    0423fdc fix(contacts): decode paginated envelope on company-detail Contacts and Sites cards
    18683ae Merge pull request 'feat(calendar): wire calendar + dispatch to the API (PMS-58 client)' (#62) from feat/pms-58-calendar-client into main
    56778b8 Merge branch 'main' into feat/pms-58-calendar-client
    f40e8b5 Merge pull request 'feat(sla): SLA management pages + ticket badges (PMS-106 client)' (#59) from feat/pms-106-sla-client into main
    9f3ada3 Merge branch 'main' into feat/pms-106-sla-client
    b52fa0e Merge remote-tracking branch 'origin/main' into feat/pms-58-calendar-client
    193c4f5 Merge remote-tracking branch 'origin/main' into feat/pms-106-sla-client
    c9e3dec Merge pull request 'feat(kb): wire knowledge base + portal feed to the API (PMS-79 client)' (#63) from feat/pms-79-kb-client into main
    a87e28c Merge remote-tracking branch 'origin/main' into feat/pms-79-kb-client
    158069e feat(kb): wire knowledge base + portal feed to the API (PMS-79 client)
    b404ec7 Merge remote-tracking branch 'origin/main' into feat/pms-58-calendar-client
    f00e03f feat(calendar): wire calendar + dispatch to the API (PMS-58 client)
    a335172 Merge pull request 'feat(billing): wire billing pages to the API (PMS-33 client)' (#61) from feat/pms-33-billing-client into main
    f81f086 Merge branch 'main' into feat/pms-33-billing-client
    9ddfb58 Merge remote-tracking branch 'origin/main' into feat/pms-33-billing-client
    3800fb4 feat(billing): wire billing pages to the API (PMS-33 client)
    e1232df Merge pull request 'feat(contracts): wire contracts pages to the API (PMS-64 client)' (#60) from feat/pms-64-contracts-client into main
    d53bd41 Merge branch 'main' into feat/pms-64-contracts-client
    a60431a feat(contracts): wire contracts pages to the API (PMS-64 client)
    4d601c3 feat(sla): SLA management pages + ticket badges (PMS-106 client)
    5688270 Merge pull request 'feat(audit): admin audit-log page (PMS-117 client)' (#58) from feat/pms-117-audit-client into main
    2dfc60c feat(audit): admin audit-log page (PMS-117 client)
    2a22f26 Merge pull request 'fix(tickets): use CompanyPicker on TicketNewPage so create works (MAPPS-122)' (#57) from fix/mapps-122-ticket-new-company-picker into main
    3bce482 fix(tickets): use CompanyPicker on TicketNewPage so create works (MAPPS-122)
    c5aaf2c Merge pull request 'fix(crm): the CompanyType variant is 'client', not 'customer'' (#56) from feat/crm-ops into main
    9af4835 fix(crm): the CompanyType variant is 'client', not 'customer'
    0600485 Merge pull request 'feat/crm-ops' (#55) from feat/crm-ops into main
    1aac724 feat(crm): prefill CompanyPicker on /contacts/new from ?company_id= query
    e896c2e feat(crm): server-side pagination, filters, and sort on Company + Contact lists
    6b8e5da feat(crm): inline add/edit/delete sites modal on the company detail page
    77042f2 Merge pull request 'style: cargo fmt --all (rewrap long format!/post_authed calls past 100 cols)' (#54) from feat/crm-ops into main
    4556b33 style: cargo fmt --all (rewrap long format!/post_authed calls past 100 cols)
    817d506 Merge pull request 'fix(crm): point CRM client paths at /contacts/companies and /contacts/contacts' (#53) from feat/crm-ops into main
    e9e2ae6 fix(crm): point CRM client paths at /contacts/companies and /contacts/contacts
    c07d1f3 Merge pull request 'feat/crm-ops' (#52) from feat/crm-ops into main
    cd01007 feat(crm): rewrite contact pages on live backend, add CompanyPicker, Edit, portal toggle
    cd6aa78 feat(crm): rewrite CompanyDetailPage on live backend data, add Edit + Delete
    7799af5 feat(crm): drop demo-rows fallback in Company + Contact lists
    6ae5471 Merge pull request 'feat(time-tracking): add byte-identical time-tracking DTOs from server' (#51) from feat/time-tracking-client-dtos into main
    948e97d feat(time-tracking): add byte-identical time-tracking DTOs from server
    799c0ed Merge pull request 'feat(oidc): kick off code+PKCE flow on /login instead of HubRedirect' (#50) from feat/start-authorize-on-sign-in into main
    a6959f8 feat(oidc): kick off code+PKCE flow on /login instead of HubRedirect
    a1b06c2 Merge pull request 'feat(oidc): derive issuer host from bunyip apex (bunyip-as-OP cutover)' (#49) from feat/bunyip-op-cutover into main
    5918051 feat(oidc): derive issuer host from bunyip apex (bunyip-as-OP cutover)
    39f9a9d Merge pull request 'fix(ci): generate release notes from commits since previous tag' (#48) from fix/release-notes-since-prev-tag into main
    664ca91 fix(ci): generate release notes from commits since previous tag
    768110d Merge pull request 'fix(dev-sso): route mokosh-apps on nebula-secure via list-syntax labels' (#47) from fix/dev-sso-nebula-secure-list into main
    2ee900c fix(dev-sso): route mokosh-apps on nebula-secure via list-syntax labels
    dfc95a6 Merge pull request 'Rename to mokosh-apps + Phase-4 audit fixes' (#46) from feat/m1-vas into main
    f6860eb fix(oidc): derive the API/issuer host as api.msp, not msp-api
    aca886b refactor(m1): defer tickets + portal to dev-yousif (drop redundant F2/F3)
    8822b77 feat(m1): Phase-4 audit fixes - tenant-cache reactivity, portal wiring, list controls, OIDC nonce
    0e6ad3c refactor: rename mokosh-client to mokosh-apps
    2cf12e2 feat(m1): vas sprint - gitignore For AI working dir
    4c32e87 Merge pull request 'fix(ci): skip cache-to on tag builds (MAPPS-121)' (#45) from fix/oci-cache-skip-tag-builds-MAPPS-121 into main
    b9c0285 fix(ci): skip cache-to on tag builds (MAPPS-121)
    e322f98 Merge pull request 'fix(ci): use $RUNNER_TEMP instead of hardcoded /tmp in claude-fix' (#44) from fix/claude-fix-no-tmp-PMC-120 into main
    be127a0 fix(ci): use $RUNNER_TEMP instead of hardcoded /tmp in claude-fix
    db7260a Merge pull request 'SSO related' (#43) from feat/mfa-spa into main
    285f0bd Merge remote-tracking branch 'origin/main' into feat/mfa-spa
    834bb5d Merge remote-tracking branch 'origin/main' into feat/mfa-spa
    0ca67b4 Merge pull request 'feat(justfile): fj-driven create-release + group attrs (DEV-331)' (#42) from feat/justfile-fj-pr-create-DEV-331 into main
    81ce881 feat(justfile): fj-driven create-release + group attrs (DEV-331)
    167f806 refresh CurrentUser from /v1/auth/me after each token rotation
    5993a1f Merge pull request 'feat: consolidate PMC client UI PRs (PMC-2..PMC-119)' (#41) from feat/pmc-merge into main
    964f092 ci(check): stub the generated CSS asset before cargo steps
    f275f68 fix(clippy): resolve all clippy warnings for the CI -D warnings gate
    7943007 style: cargo fmt --all across consolidated PMC branches
    254a77d Merge remote-tracking branch 'origin/chore/claude-fix-workflow' into feat/pmc-merge
    ee013f9 Merge remote-tracking branch 'origin/feat/pmc-100-component-infra' into feat/pmc-merge
    f9dc2b5 Merge remote-tracking branch 'origin/feat/pmc-92-portal-ui' into feat/pmc-merge
    aad7dd3 Merge remote-tracking branch 'origin/feat/pmc-88-admin-ui' into feat/pmc-merge
    b7e9abc Merge remote-tracking branch 'origin/feat/pmc-72-kb-ui' into feat/pmc-merge
    56addb1 Merge remote-tracking branch 'origin/feat/pmc-66-assets-ui' into feat/pmc-merge
    2a66fac Merge remote-tracking branch 'origin/feat/pmc-60-billing-ui' into feat/pmc-merge
    841e94c Merge remote-tracking branch 'origin/feat/pmc-55-contracts-ui' into feat/pmc-merge
    db0e9e2 Merge remote-tracking branch 'origin/feat/pmc-50-calendar-dispatch' into feat/pmc-merge
    641d674 Merge remote-tracking branch 'origin/feat/pmc-41-contacts-ui' into feat/pmc-merge
    91740c8 Merge remote-tracking branch 'origin/feat/pmc-36-projects-ui' into feat/pmc-merge
    e0e6959 Merge remote-tracking branch 'origin/feat/pmc-31-time-tracking-ui' into feat/pmc-merge
    dbe9a28 Merge remote-tracking branch 'origin/feat/pmc-23-tickets-ui' into feat/pmc-merge
    5a0792f Merge remote-tracking branch 'origin/fix/pmc-17-dashboard-scrollbar' into feat/pmc-merge
    935e6e3 Merge remote-tracking branch 'origin/feat/pmc-2-api-client-layer' into feat/pmc-merge
    f19c612 ci: add claude-fix workflow
    de5747b feat(components): optional data-testid prop on Button, Input, TableRow (PMC-111)
    6002b25 fix(detail-pages): route-param titles on Asset + Contract detail (PMC-104)
    858fa21 feat(portal): row nav, file input, invoice detail, KB links, route titles (PMC-95, PMC-96, PMC-97, PMC-98, PMC-99)
    265c191 fix(admin): hide decorative Add Tenant on TenantManagementPage (PMC-90)
    ae79cac feat(kb): scaffold article editor, linkify related, route-param title (PMC-73, PMC-75, PMC-77)
    9e2594a feat(assets): implement AssetNewPage form (PMC-67)
    a2960b2 fix(assets): linkify Related Tickets sub-table on AssetDetailPage (PMC-71)
    b424683 feat(billing): implement InvoiceNewPage form (PMC-61)
    78b6b61 fix(billing): wire PaymentList invoice cells to InvoiceDetail (PMC-64)
    bba764c fix(billing): use route param for InvoiceDetailPage title (PMC-65)
    3128d64 feat(contracts): implement ContractNewPage form (PMC-56)
    78c9d85 feat(calendar): render dispatch board appointments (PMC-53)
    e42460d fix(contacts): detail-page titles, hide Edit, demote Open Tickets stat (PMC-46, PMC-47, PMC-48, PMC-49)
    134947e fix(projects): hide decorative Add Task on tasks page (PMC-39)
    3945440 fix(projects): route-param title + hide decorative Add Task on detail (PMC-40, PMC-38)
    4d991a5 feat(time): work_item navigation on TimeEntryListPage (PMC-35)
    85473f9 feat(tickets): wire Add Note modal submit + inputs (PMC-25)
    7cf0d56 feat(tickets): POST /tickets on TicketNewPage submit (PMC-27)
    718289c fix(tickets): wire Log Time button to TimeEntryNew route (PMC-26)
    1bb76fd fix(tickets): use route param for TicketDetailPage title (PMC-28)
    404783e fix(layout): show scrollbar affordance on short-viewport sidebars (PMC-22)
    eaea8c6 feat(admin): wire TenantManagementPage to /tenants with demo fallback (PMC-8)
    86ddde4 feat(client): wire ContactListPage to /contacts with demo fallback (PMC-7)
    6ec701e feat(client): wire TicketListPage to /tickets with demo fallback (PMC-6)
    a497bfd feat(client): wire TableLoading + TableEmpty on companies list (PMC-11)
    4262f7f feat(client): typed ApiError + global toast surface (PMC-10)
    9bb81c4 Merge pull request 'fix(ci): replace setup-qemu-action with direct binfmt install' (#25) from fix/ci-qemu-no-toolcache into main
    b5a0b04 fix(ci): replace setup-qemu-action with direct binfmt install
    325b248 Merge pull request 'fix/milestone-1-review-findings' (#24) from fix/milestone-1-review-findings into main
    1ef686c fix(update-banner): gate version fetch on admin status
    42852b8 fix(milestone-1): address multi-arch review findings
    05ab2ac Merge pull request 'feat(client): admin update-available banner' (#23) from feat/update-banner into main
    8f54151 Merge branch 'main' into feat/update-banner
    0d07352 feat(client): admin update-available banner
    d328eed Merge pull request 'feat(oci): operator compose example + public registry mirror' (#22) from feat/operator-compose-and-public-mirror into main
    ee4cfc7 feat(oci): operator compose example + public registry mirror
    1b64a87 Merge pull request 'feat(oci): runtime config injection via entrypoint' (#21) from feat/runtime-config-injection into main
    0bbf267 feat(oci): runtime config injection via entrypoint
    8b56a26 Merge pull request 'feat(oci): multi-arch image build for amd64 + arm64' (#20) from feat/multi-arch-oci-build into main
    e8f702f Merge pull request 'fix(contacts): pass usize to DataTable.total_items' (#19) from fix/contacts-total-items-usize into main
    5b29870 feat(oci): multi-arch image build for amd64 + arm64
    4feabc5 fix(contacts): pass usize to DataTable.total_items
    d265914 Merge pull request 'feat: runtime URL derivation + calendar wire + org-aware TopBar' (#18) from feat/runtime-url-derivation into main
    de872bb docs: milestone-1 handoff for the PSA Systems v0.1.0 cutover

    Downloads