-
v0.5.0
Stablereleased this
2026-07-01 16:44:56 +02:00 | 296 commits to main since this releaseChangelog
29e5da1Merge pull request 'Release v0.5.0' (#401) from release/v0.5.0 into main
9249e3bRelease v0.5.0: bump package.json to match Cargo.toml
513c8a0Release v0.5.0
d399f2aMerge pull request 'chore(docs): consolidate markdown under docs/ + distill audits into changelog (PSA-48)' (#400) from chore/PSA-48-docs-sanitize into main
2f0ce62chore(docs): consolidate markdown under docs/, distill audits + handoff into changelog
0932bacMerge pull request 'feat(assets): replace app icons with Mokosh-M logo and wire brand mark' (#399) from feat/MAPPS-325-mokosh-m-icons into main
55bea97feat(assets): replace app icons with Mokosh-M logo and wire brand mark
124d1bfMerge pull request 'fix(sla): clarify the 'None (24x7)' business-hours label (PMS-586)' (#398) from fix/PMS-586-business-hours-none-label into main
d20f331fix(sla): clarify the 'None (24x7)' business-hours label (PMS-586)
32ff247Merge pull request 'feat(calendar): inline field-level validation for the appointment form (PMS-578)' (#397) from feat/PMS-578-appointment-inline-validation into main
014eb70feat(calendar): show appointment validation inline under each field (PMS-578)
d912545feat(calendar): field-level appointment validation in handle_save (PMS-578)
949d8deMerge pull request 'feat(calendar): side-by-side layout for overlapping appointments (PMS-598)' (#396) from feat/PMS-598-overlap-appointments into main
72b457ffeat(calendar): stable keys on month chips and dispatch blocks (PMS-598)
bc5fca0feat(calendar): lane layout for overlapping appointments in day view (PMS-598)
c0b786ffeat(calendar): lane layout for overlapping appointments in week view (PMS-598)
b898229Merge pull request 'feat(calendar): grey out past appointments across all views (PMS-599)' (#395) from feat/PMS-599-grey-past-appointments into main
af025a6feat(calendar): grey out past appointments in dispatch view (PMS-599)
797d412feat(calendar): grey out past appointments in month/week/day views (PMS-599)
964812eMerge pull request 'feat(audit): filter audit log by user name instead of UUID (PMS-584)' (#394) from feat/PMS-584-audit-user-name-filter into main
9f8ab3cfeat(audit): filter audit log by user name, not UUID (PMS-584)
24a6b82feat(audit): fetch full user list for the audit filter (PMS-584)
dc3d99fMerge pull request 'feat(contacts): standardize company Address (US-only country, state dropdown, inline validation) (PMS-581)' (#393) from feat/PMS-581-company-address-validation into main
59027c3feat(contacts): inline validation for Street/City address fields (PMS-581)
94a7e64feat(contacts): Country as US-only Select on company form (PMS-581)
e3b7c8bfeat(contacts): State/Region as US-state dropdown (PMS-581)
e52b582Merge pull request 'feat(contacts): admin-editable Company Industries lookup + combobox source (PMS-601)' (#392) from feat/PMS-601-company-industries-lookup into main
9a5fc93style(settings): single-line industries fetch path (PMS-601)
2de3ba3feat(contacts): source Industry suggestions from the lookup (PMS-601)
d365c6ffeat(settings): register Company Industries route and nav (PMS-601)
bdce4a6feat(settings): Company Industries admin page (PMS-601)
8d84436Merge pull request 'feat(contacts): curated Industry combobox on company form (PMS-582)' (#391) from feat/PMS-582-company-industry-combobox into main
6bfeb0cfeat(contacts): curated Industry combobox on company form (PMS-582)
ab2eacfMerge pull request 'feat(contacts): free-text Title/Department with server-sourced suggestions (PMS-583)' (#390) from feat/PMS-583-contact-field-suggestions into main
d9b7a41feat(contacts): free-text Title/Department with server-sourced suggestions (PMS-583)
258a747Merge pull request 'feat(billing): explain frozen-invoice immutability on detail page (PMS-580)' (#389) from feat/PMS-580-invoice-frozen-ui-note into main
9c967fafeat(billing): explain frozen-invoice immutability on detail page (PMS-580)
988b8d7Merge pull request 'feat(billing): inline company validation on invoice form, drop UUID wording (PMS-579)' (#388) from feat/PMS-579-invoice-company-inline-error into main
85428a2feat(billing): inline company validation on invoice form, drop UUID wording (PMS-579)
f868cbafix(forms): paint checkbox checkmark on :checked (PMS-577)Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
v0.4.0
StableAll checks were successfulBuild OCI container / Build and push mokosh-www image (push) Successful in 3m4sreleased this
2026-06-30 16:07:36 +02:00 | 336 commits to main since this releaseChangelog
0bb25c7Merge pull request 'Release v0.4.0' (#386) from release/v0.4.0 into main
bb7498bRelease v0.4.0
6bc1e5cMerge pull request 'fix(auth): revoke refresh token on logout + strip code/state from URL on callback' (#385) from fix/MAPPS-336-spa-logout-revoke-url-strip into main
a90175fMerge pull request 'fix(spa): SPA hardening cluster (state/nonce, dev-bypass feature, pending TTL, CSP, doc)' (#384) from fix/MAPPS-338-spa-hardening-cluster into main
80726affix(spa): SPA hardening cluster (state/nonce, dev-bypass feature, pending TTL, CSP, doc)
69d9847Merge pull request 'feat(status): app-wide server-unreachable banner with recovery poll (MAPPS-333)' (#383) from feat/MAPPS-333-server-unreachable-banner into main
4599b20Merge branch 'main' into feat/MAPPS-333-server-unreachable-banner
f162160feat(status): app-wide server-unreachable banner with recovery poll
464d60bfix(auth): revoke refresh token on logout + strip code/state from URL on callback
71e475cMerge pull request 'fix(dev): point SPA API proxy at server:8080 not 4301' (#382) from fix/dev-server-proxy-port into main
8525a42fix(dev): point SPA API proxy at server:8080 not 4301
2fff3dbMerge pull request 'fix(time): make the Billable checkbox toggle reliably (PMS-571)' (#381) from fix/PMS-571-checkbox-toggle into main
6004f95fix(time): make the Billable checkbox toggle reliably (PMS-571)
a913a29Merge pull request 'fix(profile): surface the real /auth/me failure mode in the error banner' (#380) from fix/MAPPS-331-profile-load-error into main
5f9b94cfix(profile): surface the real /auth/me failure mode in the error banner
1d17a82Merge pull request 'fix(dev): bind dx serve to a private LAN IP only' (#378) from fix/MAPPS-dev-bind-private-ip into main
32a1021fix(dev): bind dx serve to a private LAN IP only
b3be9b8Merge pull request 'fix(billing): constrain New Tax Rate Rate (%) and Name inputs (MAPPS-220)' (#375) from fix/MAPPS-220-tax-rate-input-constraints into main
1ce3a52Merge pull request 'fix(ci): derive publish mode from trigger to kill latest overwrite race' (#373) from fix/GOV-15-twin-trigger-publish-mode into main
2d6eabafix(billing): constrain New Tax Rate Rate (%) and Name inputs (MAPPS-220)
8b55697Merge branch 'main' into fix/GOV-15-twin-trigger-publish-mode
30032b0Merge pull request 'Revamp the Mokosh landing page with the mascot hero + tagline' (#364) from feat/MAPPS-327-landing-revamp into main
657d49aMerge branch 'main' into feat/MAPPS-327-landing-revamp
b9f885fMerge branch 'main' into fix/GOV-15-twin-trigger-publish-mode
20c3418Merge pull request 'fix(security): triage mokosh-apps audit roll-up findings (MAPPS-308)' (#374) from security/MAPPS-308-audit-rollup-triage into main
ef4cdaefix(security): triage mokosh-apps audit roll-up findings (MAPPS-308)
9e5f9a5fix(ci): derive publish mode from trigger to kill latest overwrite race
fcb986aMerge pull request 'fix(tickets): enforce required Company/Description inline on ticket forms (MAPPS-322)' (#372) from fix/MAPPS-322-enforce-required-ticket-fields into main
f111ea0fix(tickets): enforce required Company/Description inline on ticket forms (MAPPS-322)
97db4d6Merge pull request 'fix(ci): route dispatcher pr_number through env in remaining run steps (MAPPS-306)' (#371) from fix/MAPPS-306-pr-number-injection into main
3db1424fix(ci): route dispatcher pr_number through env in remaining run steps (MAPPS-306)
117d01eMerge pull request 'fix(ci): pass untrusted PR data via env to block shell injection (MAPPS-307)' (#370) from fix/MAPPS-307-shell-injection-pr-title into main
ecf1076fix(ci): pass untrusted PR data via env to block shell injection (MAPPS-307)
b58d469Merge pull request 'docs(rollout): add SPA-rollout runbook to prevent two-build LB skew (MAPPS-315)' (#369) from docs/MAPPS-315-spa-rollout-runbook into main
d0c8498docs(rollout): add SPA-rollout runbook to prevent two-build LB skew (MAPPS-315)
e06874aMerge pull request 'feat(profile,nav): Mokosh Role label + Team nav behind runtime feature flag (MAPPS-329)' (#368) from feat/MAPPS-329-mokosh-role-label-team-flag into main
c7f28c6feat(profile,nav): Mokosh Role label + Team nav behind runtime feature flag (MAPPS-329)
a0ea058Merge pull request 'fix(pickers): set off '+ Create' row in its own band (MAPPS-320)' (#367) from fix/MAPPS-320-create-row-visual-separation into main
5861521fix(pickers): set off '+ Create' row in its own band (MAPPS-320)
69aaa1cMerge pull request 'feat(calendar): click an empty day cell to open New Appointment pre-filled (MAPPS-319)' (#365) from feat/MAPPS-319-calendar-cell-click into main
f021b14Merge pull request 'feat(routes): wrap Outlet in ErrorBoundary with recoverable fallback (MAPPS-318)' (#363) from feat/MAPPS-318-route-error-boundary into main
b8c7180Merge pull request 'fix(auth): gate AuthGuard onboarding redirect on /me reconcile (MAPPS-317)' (#362) from fix/MAPPS-317-calendar-bounce-router-guard into main
8fb08d1feat(landing): revamp the Mokosh landing with the mascot hero
f83f524feat(calendar): click an empty day cell to open New Appointment pre-filled (MAPPS-319)
c08209cfeat(routes): wrap Outlet in ErrorBoundary with recoverable fallback (MAPPS-318)
4c4cd3dfix(auth): gate AuthGuard onboarding redirect on /me reconcile (MAPPS-317)
cab4b6dMerge pull request 'Remove the Apps launcher link from the user-menu dropdown' (#360) from feat/MAPPS-324-remove-apps-button into main
c091cf1Merge branch 'main' into feat/MAPPS-324-remove-apps-button
2bce2f3Merge pull request 'ci(oci): switch build cache from registry to runner gha cache' (#361) from feat/MAPPS-326-oci-gha-build-cache into main
0665fb4ci(oci): switch build cache from registry to runner gha cache
d459f16Merge pull request 'feat(lists): visible company-scope chip on every list page (MAPPS-321)' (#346) from fix/MAPPS-321-context-filter-banner into main
9c18c51Merge branch 'main' into fix/MAPPS-321-context-filter-banner
58e0291Merge pull request 'feat(settings): consistent card sizing and section color-coding' (#279) from feat/MAPPS-257-settings-card-consistency-color-coding into main
a9a14f4Merge branch 'main' into feat/MAPPS-257-settings-card-consistency-color-coding
f1fa0a5feat(layout): hide the Apps launcher link in the user menu
d4a2740Merge pull request 'feat(dashboard): full-screen team-scoped TV-view dashboard mode' (#280) from feat/MAPPS-256-tv-view-dashboard into main
ebe9696fix(merge): restore TV-view content dropped by the main merge
9f24883Merge branch 'main' into feat/MAPPS-256-tv-view-dashboard
e751b56Merge branch 'main' into fix/MAPPS-321-context-filter-banner
0cc56ccMerge pull request 'fix(auth): preserve deep-link route across cold-load re-auth (MAPPS-323)' (#359) from fix/MAPPS-323-deeplink-return-to into main
20dc5abfix(auth): keep /dashboard soft on re-auth + unit-test return_to (MAPPS-323)
221191efix(auth): preserve deep-link route across cold-load re-auth (MAPPS-323)
ccb3f40Merge pull request 'docs(forms): mark PMS-518 migration complete in the audit doc' (#358) from docs/PMS-518-audit-progress into main
43d0381Merge pull request 'refactor(forms): report-all errors on contacts + asset-edit forms (PMS-518)' (#357) from feat/PMS-518-report-all-polish into main
dd70e55docs(forms): mark the PMS-518 migration complete in the audit doc
f5ccf55Merge pull request 'feat(contracts): focus-first-invalid on the contract form via FormGuard (PMS-518)' (#355) from feat/PMS-518-migrate-contracts-form into main
402d0ffrefactor(forms): make contacts + asset-edit forms report all errors at once (PMS-518)
baf92f4Merge pull request 'feat(billing): migrate New Invoice form to FormGuard (PMS-518)' (#354) from feat/PMS-518-migrate-billing-form into main
b28b8bdMerge pull request 'feat(forms): migrate remaining create/edit forms to FormGuard (PMS-518)' (#356) from feat/PMS-518-remaining-forms into main
cc705c4feat(contracts): migrate the contract modals to FormGuard (PMS-518)
f770dc0feat(billing): migrate the billing modals to FormGuard (PMS-518)
f9c3720feat(forms): migrate the remaining create/edit forms to FormGuard (PMS-518)
64d94b5Merge pull request 'feat(kb): migrate KB article + category forms to FormGuard (PMS-518)' (#353) from feat/PMS-518-migrate-kb-forms into main
59d080efeat(contracts): add focus-first-invalid to the contract form via FormGuard (PMS-518)
0083a28feat(billing): migrate New Invoice form to FormGuard (PMS-518)
a4be7c8Merge pull request 'feat(tickets): migrate new-ticket form to FormGuard, enforce Description (PMS-518)' (#352) from feat/PMS-518-migrate-ticket-time-forms into main
41375fbfeat(kb): migrate KB article + category forms to FormGuard (PMS-518)
815c4f8feat(time): migrate log-time form to FormGuard, enforce Description (PMS-518)
9eaf450feat(tickets): migrate new-ticket form to FormGuard, enforce Description (PMS-518)
64d9de9Merge pull request 'feat(forms): shared FormGuard submit guard (PMS-517)' (#351) from feat/PMS-517-form-submit-guard into main
39c1210feat(forms): shared FormGuard submit guard (PMS-517)
748d401Merge pull request 'feat(forms): component-owned field validation + shared validator set (PMS-516)' (#350) from feat/PMS-516-form-validation-layer into main
55d7c5efeat(forms): component-owned field validation + shared validator set (PMS-516)
b015412Merge pull request 'docs(forms): PMS-515 form-validation audit and decomposition' (#349) from docs/PMS-515-form-validation-audit into main
9cf48d2docs(forms): add PMS-515 form-validation audit and decomposition
0ae342eMerge pull request 'fix(tickets): flag every missing required field on new-ticket submit (PMS-514)' (#348) from fix/PMS-514-ticket-form-validate-all-required into main
5c5e8fdfix(tickets): flag every missing required field on new-ticket submit
079f7deMerge pull request 'fix(team): hide invite role picker until RBAC is complete (PMS-513)' (#347) from fix/PMS-513-disable-role-assignment-ui into main
c7e0581fix(team): hide invite role picker until RBAC is complete
b534782Merge pull request 'fix(companies): render every site on the company detail Sites card (MAPPS-316)' (#345) from fix/MAPPS-316-sites-card-show-all into main
7d05c7afeat(lists): visible company-scope chip on every list page (MAPPS-321)
4eb31a4fix(companies): render every site on the company detail Sites card (MAPPS-316)
e5712d9Merge pull request 'feat(a11y): GlobalSearch aria-label + theme button aria-expanded (MAPPS-314)' (#344) from fix/MAPPS-314-a11y-polish into main
4b98b05Merge pull request 'feat(toasts): auto-dismiss Success/Info after 5s; keep Warning/Error sticky (MAPPS-312)' (#343) from fix/MAPPS-312-toast-auto-dismiss into main
bc76fbdMerge pull request 'feat(kb): article delete UI on the detail page (MAPPS-309)' (#342) from fix/MAPPS-309-kb-article-delete into main
a9e3ba3Merge pull request 'feat(consistency): ticket-detail Delete + assets bulk-delete (MAPPS-313)' (#341) from fix/MAPPS-313-delete-affordances into main
0c75ffbMerge pull request 'fix(tickets): bulk-delete now confirms via ConfirmDialog (MAPPS-310)' (#340) from fix/MAPPS-310-ticket-bulk-delete-confirm into main
0d362bbMerge pull request 'fix(calendar): hoist timezone reads out of use_signal initialisers (MAPPS-299)' (#339) from fix/MAPPS-299-calendar-hook-violation into main
9a2cac8feat(a11y): GlobalSearch aria-label + theme button aria-expanded (MAPPS-314)
9297e2ffeat(toasts): auto-dismiss Success/Info after 5s; keep Warning/Error sticky (MAPPS-312)
1bf7460feat(consistency): ticket-detail Delete + assets bulk-delete (MAPPS-313)
97821f6feat(kb): article delete UI on the detail page (MAPPS-309)
e00902dfix(tickets): bulk-delete now confirms via ConfirmDialog (MAPPS-310)
2371173fix(calendar): hoist timezone reads out of use_signal initialisers (MAPPS-299)
656f357Merge pull request 'feat(timesheets): admin status filter + multi-week range + history rows (PMS-506)' (#338) from feat/PMS-506-timesheet-history-client into main
a665a7afeat(timesheets): admin status filter + multi-week range + history rows (PMS-506)
9160fa7Merge pull request 'feat(oidc): runtime MOKOSH_OIDC_SCOPES override for SPA scope query (BUNYIP-142)' (#337) from feat/BUNYIP-142-runtime-oidc-scopes into main
a7a6e38Merge pull request 'feat(reports): SVG bar chart on every report detail page (MAPPS-297)' (#336) from feat/MAPPS-297-report-charts into main
51ffb57Merge pull request 'fix/MAPPS-304-asset-save-spurious-error' (#335) from fix/MAPPS-304-asset-save-spurious-error into main
2990f4dMerge pull request 'feat(approvals): ticket-detail Approvals section + top-bar badge (PMS-486)' (#334) from feat/PMS-486-approvals-tab-and-badge into main
6bcfb19Merge pull request 'feat(kb): Top ticket-driving articles widget on landing page (PMS-485)' (#333) from feat/PMS-485-kb-top-driving into main
f628aafMerge pull request 'feat(dashboards): SPA widget view surface for saved layouts (PMS-472)' (#331) from feat/PMS-472-dashboard-view-surface into main
612fc25feat(oidc): runtime MOKOSH_OIDC_SCOPES override for SPA scope query (BUNYIP-142)
a8da01fMerge pull request 'feat(dashboards): editor + per-widget data fetches (PMS-487)' (#332) from feat/PMS-487-dashboard-editor into feat/PMS-472-dashboard-view-surface
f10dc81feat(reports): SVG bar chart on every report detail page (MAPPS-297)
1cfb097fix(assets): treat post-save decode quirks as success on the edit modal (MAPPS-304)
dabbe6bfeat(approvals): ticket-detail Approvals section + top-bar badge (PMS-486)
e8fc481feat(kb): Top ticket-driving articles widget on landing page (PMS-485)
a3a06f5feat(dashboards): editor + per-widget data fetches (PMS-487)
44bb5defeat(dashboards): SPA widget view surface for saved layouts (PMS-472)
5749c70Merge pull request 'feat(assets): edit-modal write surface for CMDB expansion fields (PMS-473)' (#328) from feat/PMS-473-cmdb-asset-edit-fields into main
1126d34feat(assets): edit-modal write surface for CMDB expansion fields (PMS-473)
d8b75f1Merge pull request 'feat(approvals): My Approvals page with inline approve/reject (PMS-481)' (#329) from feat/PMS-481-approvals-page into main
fb9fd56Merge pull request 'feat(assets): ITIL category + lifecycle stage pickers on asset forms (PMS-476)' (#325) from feat/PMS-476-itil-pickers into main
4bc07fcMerge pull request 'feat(audit-log): dated filename on CSV download button (PMS-474)' (#324) from feat/PMS-474-audit-log-csv-download into main
16165efMerge pull request 'feat(portal): render ticket comment thread + send-reply form (PMS-480)' (#327) from feat/PMS-480-portal-comment-thread into main
a623735Merge pull request 'feat/PMS-482-kb-open-ticket' (#326) from feat/PMS-482-kb-open-ticket into main
58f17edfeat(approvals): My Approvals page with inline approve/reject (PMS-481)
dd39bf4feat(portal): render ticket comment thread + send-reply form (PMS-480)
0ffe20bchore: cargo fmt (PMS-482 follow-up)
b6f71a2feat(kb): Open ticket about this article + source_kb_article_id stamp (PMS-482)
c7107fdfeat(assets): ITIL category + lifecycle stage pickers on asset forms (PMS-476)
5829d0cfeat(audit-log): dated filename on CSV download button (PMS-474)
fd480a7Merge pull request 'feat(assets): surface CMDB expansion fields on the detail panel (PMS-454)' (#323) from feat/PMS-454-cmdb-asset-fields into main
efcdf80Merge pull request 'feat(dashboards): management page for saved dashboards (PMS-453 phase 1 client)' (#322) from feat/PMS-453-saved-dashboards-client into main
2313f2cMerge pull request 'fix(ci): pre-stage wasm-opt in the WASM builder image (CI flake)' (#321) from fix/dx-build-wasm-opt-preinstall into main
3efbc8afix(ci): pre-stage wasm-opt in the WASM builder image (CI flake)
e8b8fbffeat(dashboards): management page for saved dashboards (PMS-453 phase 1 client)
34e74e9feat(assets): surface CMDB expansion fields on the detail panel (PMS-454)
73de63eMerge pull request 'feat(audit): Download CSV button on /admin/audit-log (PMS-455)' (#320) from feat/PMS-455-audit-log-export-button into main
a1b9104Merge pull request 'feat(topbar): GlobalSearch component wired to /api/v1/search (MAPPS-298)' (#319) from feat/MAPPS-298-global-search-client into main
a0ca848Merge pull request 'fix(layout): stack 2-column form / detail grids on narrow viewports (MAPPS-279)' (#315) from fix/MAPPS-279-mobile-responsive into main
890cd0bMerge pull request 'feat(tickets): capture Type / Category / Assignee / Due Date at create (MAPPS-296)' (#318) from feat/MAPPS-296-richer-ticket-create into main
440ef29Merge pull request 'feat(noc): Big View routes for kiosk-mounted ops-center screens (MAPPS-302)' (#316) from feat/MAPPS-302-noc-big-view into main
22bb8b2feat(audit): Download CSV button on /admin/audit-log (PMS-455)
c49701ffeat(topbar): GlobalSearch component wired to /api/v1/search (MAPPS-298)
421a7d6Merge pull request 'feat(dispatch): Day / Week / Month view toggle on the Dispatch board (MAPPS-280)' (#317) from feat/MAPPS-280-dispatch-week-month into main
07a7f38Merge pull request 'fix(billing): standardised 403 permission-required UI on Contracts + Rate Cards (MAPPS-271)' (#314) from fix/MAPPS-271-standardize-403-permission-ui into main
bf1c5f0feat(tickets): capture Type / Category / Assignee / Due Date at create (MAPPS-296)
751c817feat(dispatch): Day / Week / Month view toggle on the Dispatch board (MAPPS-280)
4196548feat(noc): Big View routes for kiosk-mounted ops-center screens (MAPPS-302)
56d50d4fix(layout): stack 2-column form / detail grids on narrow viewports (MAPPS-279)
6efd489fix(billing): standardised 403 permission-required UI on Contracts + Rate Cards (MAPPS-271)
8aeddccMerge pull request 'chore: Sync the checks and justfile recipes' (#313) from chore/sync-checks-justfile into main
c7d0cdcMerge branch 'main' into chore/sync-checks-justfile
194d49echore: Sync the checks and justfile recipes
3c19676Merge pull request 'feat(picker): inline '+ Create new contact' on ContactPicker (MAPPS-276)' (#312) from feat/MAPPS-276-picker-inline-create into main
523b7d6Merge pull request 'feat(assets): bulk-edit modal for Status / Company over N selected assets (MAPPS-303)' (#311) from feat/MAPPS-303-bulk-asset-edit into main
533e1daMerge pull request 'feat(lists): bulk-actions primitive + Tickets bulk-delete opt-in (MAPPS-290)' (#310) from feat/MAPPS-290-bulk-actions-primitive into main
22c8572feat(picker): inline '+ Create new contact' on ContactPicker (MAPPS-276)
c50bd0afeat(assets): bulk-edit modal for Status / Company over N selected assets (MAPPS-303)
89a2183feat(lists): bulk-actions primitive + Tickets bulk-delete opt-in (MAPPS-290)
d75137eMerge pull request 'feat(assets): warranty-expiry 'Needs refresh' / 'Expires soon' badge (MAPPS-305)' (#309) from feat/MAPPS-305-warranty-needs-refresh-tag into main
dbb6408Merge pull request 'feat(forms): breadcrumbs on Project / Contract / Asset create pages (MAPPS-294)' (#308) from feat/MAPPS-294-breadcrumbs-consistency into main
edf9ab3Merge pull request 'feat(toasts): success toast on Ticket / Company / Contact create + save (MAPPS-293)' (#307) from feat/MAPPS-293-success-toasts into main
de686f3Merge pull request 'feat(tickets): sortable list columns (MAPPS-289)' (#306) from feat/MAPPS-289-sortable-list-columns into main
1cbf750Merge pull request 'feat(theme): surface contrast ratio on accent hover (MAPPS-288)' (#305) from feat/MAPPS-288-wcag-contrast-guard into main
224168fMerge pull request 'fix(forms): collect every validation error on submit instead of one at a time (MAPPS-284)' (#304) from fix/MAPPS-284-show-all-validation-errors into main
14e5480Merge pull request 'feat(phone): render stored phone numbers with separators (MAPPS-283)' (#303) from feat/MAPPS-283-phone-format into main
848d884Merge pull request 'feat(time): honour ?project_id= prefill on Log Time link (MAPPS-275)' (#302) from feat/MAPPS-275-parent-context-nav into main
c328442Merge pull request 'fix(forms): drop HTML5 required on shared inputs; styled inline errors only (MAPPS-277)' (#301) from fix/MAPPS-277-styled-required-error into main
7b9cc90Merge pull request 'fix(detail-pages): replace generic header flash with honest loading state (MAPPS-278)' (#300) from fix/MAPPS-278-detail-header-flash into main
d66343fMerge pull request 'feat(lists): one-click 'Clear filters' on filtered-empty list states (MAPPS-291)' (#299) from feat/MAPPS-291-clear-filters-affordance into main
7e08a3eMerge pull request 'fix(a11y): set document.title from the page title every route hands AppLayout (MAPPS-287)' (#298) from fix/MAPPS-287-per-route-doc-titles into main
0e07ca8Merge pull request 'fix(assets): distinguish loading / empty / failed in Change History panel (MAPPS-304)' (#297) from fix/MAPPS-304-asset-change-history-states into main
542a2b3feat(theme): surface contrast ratio on accent hover (MAPPS-288)
e56bf0cfeat(assets): warranty-expiry 'Needs refresh' / 'Expires soon' badge (MAPPS-305)
526e5ccfix(forms): collect every validation error on submit instead of one at a time (MAPPS-284)
62ad8c7feat(time): honour ?project_id= prefill on Log Time link (MAPPS-275)
d32a77bfeat(forms): breadcrumbs on Project / Contract / Asset create pages (MAPPS-294)
6e3f15ffeat(tickets): sortable list columns (MAPPS-289)
3530223feat(toasts): success toast on Ticket / Company / Contact create + save (MAPPS-293)
f80ea24feat(phone): render stored phone numbers with separators (MAPPS-283)
c697940fix(forms): drop HTML5 required on shared inputs; styled inline errors only (MAPPS-277)
1da8f4ffix(detail-pages): replace generic header flash with honest loading state (MAPPS-278)
3511db0feat(lists): one-click 'Clear filters' on filtered-empty list states (MAPPS-291)
9817c14fix(a11y): set document.title from the page title every route hands AppLayout (MAPPS-287)
e3137d4Merge pull request 'fix(calendar): today-cell highlight uses theme-aware accent + ring (MAPPS-301)' (#296) from fix/MAPPS-301-calendar-today-cell-contrast into main
dea4121Merge pull request 'feat(company): New Contract / Project / Invoice / Asset CTAs on Company detail (MAPPS-300)' (#295) from feat/MAPPS-300-company-detail-ctas into main
9ef8c06Merge pull request 'feat(forms): browser-level unsaved-changes guard for the Company form (MAPPS-292)' (#293) from feat/MAPPS-292-unsaved-changes-guard into main
51b8a1dMerge pull request 'fix(tickets): source list status filter from tenant ticket_statuses (MAPPS-295)' (#294) from fix/MAPPS-295-ticket-status-enum into main
56d6a63Merge pull request 'fix(a11y): label + aria-expanded on every collapsible toggle (MAPPS-286)' (#292) from fix/MAPPS-286-collapsible-aria into main
11ce65eMerge pull request 'fix(time): drop duplicate placeholder in Log Time Work Item dropdown (MAPPS-274)' (#288) from fix/MAPPS-274-dup-log-time-placeholder into main
99c7d27Merge pull request 'fix(pickers): stop rendering raw UUIDs in selected-chip state (MAPPS-273)' (#287) from fix/MAPPS-273-contact-company-uuid-leak into main
529738aMerge pull request 'fix(portal): route portal invoice amounts through format_money_str (MAPPS-272)' (#286) from fix/MAPPS-272-currency-format into main
c04aa13Merge pull request 'fix(diag): forward wasm panics to console.error with a readable trace (MAPPS-299)' (#284) from fix/MAPPS-299-wasm-panic-hook into main
aa3a324Merge pull request 'fix(forms): reject whitespace-only required fields client-side (MAPPS-281)' (#289) from fix/MAPPS-281-whitespace-required-trim into main
0d275f7Merge pull request 'fix(a11y): hide mobile sidebar drawer from AT when closed (MAPPS-285)' (#291) from fix/MAPPS-285-duplicate-sidebar-nav into main
a7f9a2aMerge pull request 'fix(forms): replace developer-facing status strings with user messages (MAPPS-282)' (#290) from fix/MAPPS-282-422-inline-field-errors into main
9e71bb5Merge pull request 'fix(form): bind controlled value on the Select element itself (MAPPS-270)' (#285) from fix/MAPPS-270-inline-edit-refresh into main
0042625feat(forms): browser-level unsaved-changes guard for the Company form (MAPPS-292)
b783430feat(company): New Contract / Project / Invoice / Asset CTAs on Company detail (MAPPS-300)
979afbbfix(portal): route portal invoice amounts through format_money_str (MAPPS-272)
dfbcbacfix(a11y): label + aria-expanded on every collapsible toggle (MAPPS-286)
1fc7a36fix(a11y): hide mobile sidebar drawer from AT when closed (MAPPS-285)
bc15234fix(forms): replace developer-facing status strings with user messages (MAPPS-282)
b1ca568fix(forms): reject whitespace-only required fields client-side (MAPPS-281)
b377f31fix(form): bind controlled value on the Select element itself (MAPPS-270)
0e35352fix(tickets): source list status filter from tenant ticket_statuses (MAPPS-295)
c89f5bbfix(calendar): today-cell highlight uses theme-aware accent + ring (MAPPS-301)
1dab445fix(time): drop duplicate placeholder in Log Time Work Item dropdown (MAPPS-274)
64039ccfix(pickers): stop rendering raw UUIDs in selected-chip state (MAPPS-273)
e460ff8fix(assets): distinguish loading / empty / failed in Change History panel (MAPPS-304)
5f4e258fix(diag): forward wasm panics to console.error with a readable trace (MAPPS-299)
0842f91Merge pull request 'feat(contacts): scope company context cards with capped preview, scoped View All, and per-row edit/delete' (#278) from feat/MAPPS-249-scope-company-context-cards into main
30c3926Merge branch 'main' into feat/MAPPS-249-scope-company-context-cards
8a763ffMerge pull request 'feat(settings): nest groups, add breadcrumbs, search, basic/advanced toggle' (#281) from feat/MAPPS-258-settings-nesting-breadcrumbs-search into main
62513bdMerge branch 'main' into feat/MAPPS-257-settings-card-consistency-color-coding
8e5d0bfMerge branch 'main' into feat/MAPPS-258-settings-nesting-breadcrumbs-search
2eece0eMerge pull request 'feat(ci): cap native check.yml parallelism at nproc/2' (#283) from feat/GOV-10-native-check-nproc-cap into main
65e1195feat(ci): cap native check.yml parallelism at nproc/2
5d9b02aMerge branch 'main' into feat/MAPPS-258-settings-nesting-breadcrumbs-search
471736cMerge pull request 'fix(hooks): keep pre-commit working tree host-owned' (#282) from fix/dev-371-precommit-host-owned-target into main
c204e32fix(hooks): keep pre-commit working tree host-owned
3058003feat(settings): nest groups, add breadcrumbs, search, basic/advanced toggle
b2efe1bfeat(dashboard): full-screen team-scoped TV-view dashboard mode
7b7b1d1feat(settings): consistent card sizing and section color-coding
f52a763feat(contacts): scope company context cards with capped preview, scoped View All, and per-row edit/delete
74981adMerge pull request 'feat(time): General/ticketless time logging with own-company attribution (MAPPS-243)' (#277) from feat/MAPPS-243-general-ticketless-time-logging into main
0403ad0feat(time): add General work item for ticketless time logging
ed01b62Merge pull request 'feat(calendar): appointment templates + dispatch discoverability + in-screen help (MAPPS-253)' (#276) from feat/MAPPS-253-appointment-templates into main
0cdd2b0feat(calendar): appointment templates, dispatch discoverability, and in-screen help (MAPPS-253)
0b86d2cMerge pull request 'fix(hooks): build css before pre-commit checks' (#272) from fix/pre-commit-clean-clone into main
afb6ac6Merge branch 'main' into fix/pre-commit-clean-clone
a8770ceMerge pull request 'feat(calendar): start-time + duration appointment form with all-day span (MAPPS-252)' (#275) from feat/MAPPS-252-appointment-start-duration into main
6f0d1e0feat(calendar): adopt start-time plus duration model in appointment form
93478baMerge pull request 'feat(layout): collapsible desktop sidebar rail (MAPPS-250)' (#274) from feat/MAPPS-250-collapsible-desktop-sidebar into main
8cb27c2feat(layout): collapsible desktop sidebar rail (MAPPS-250)
1a08dc8Merge pull request 'feat(contacts): inline company name validation + duplicate-name feedback (MAPPS-246)' (#273) from feat/MAPPS-246-company-name-inline-validation into main
c3bb132feat(contacts): inline company name validation + duplicate-name feedback (MAPPS-246)
3b6cadfMerge pull request 'feat(contacts): freeform company entry on contact form (+ Add Company)' (#258) from feat/mapps-251-freeform-company-contact into main
005739dfeat(contacts): freeform company entry on contact form (+ Add Company)
b076170Merge pull request 'refactor(badges): centralize status->BadgeVariant mapping per domain' (#264) from refactor/MAPPS-268-centralize-status-badges into main
b02dd2efix(hooks): build css before pre-commit checks
929eb34Merge pull request 'fix(calendar): bucket dates/times in the user's profile timezone (PMS-360)' (#271) from fix/PMS-360-calendar-profile-tz into main
fd7eb28fix(calendar): bucket dates and times in the user's profile timezone (PMS-360)
a0b4a3arefactor(badges): centralize status->BadgeVariant mapping per domain
0bef2e8Merge pull request 'feat(table): all-row hover, opt-in zebra striping, always-visible sort affordance' (#270) from feat/mapps-263-table-polish into main
224d9cfMerge pull request 'feat(forms): consistent help/error spacing + persistent inline server errors' (#265) from feat/MAPPS-265-form-help-error-spacing-inline-validation into main
4c5d2e8Merge pull request 'feat(empty-states): use three-part EmptyState for filtered-empty lists' (#266) from feat/mapps-266-standardize-list-empty-states into main
194bcb5Merge pull request 'feat(modal): cap mobile height, pin chrome, restore focus to trigger' (#268) from feat/mapps-264-modal-mobile-height-focus-restore into main
8fe184dMerge pull request 'feat(a11y): surface disabled-action reasons via Button title + aria-disabled' (#269) from feat/mapps-262-disabled-reason-titles into main
a214a4fMerge pull request 'feat(ui): adopt shared StatCard tone, OverflowActions, PageHeader long-title guard' (#267) from feat/mapps-267-shared-ui-primitives into main
fe37ebcMerge pull request 'fix(billing): add an edit path for recorded payments' (#246) from fix/MAPPS-235-payment-edit-path into main
470483ffeat(table): all-row hover, opt-in zebra striping, always-visible sort affordance
d875d08fix(billing): add an edit path for recorded payments
6f53aa8feat(a11y): surface disabled-action reasons via Button title + aria-disabled
ca37aa3feat(modal): cap mobile height, pin chrome, restore focus to trigger
9375c9cMerge pull request 'feat(a11y): IconButton primitive + aria-label/title on icon-only buttons; non-color unread status' (#263) from feat/mapps-261-a11y-icon-buttons-status into main
bc247ddMerge pull request 'feat(time): max-hours-per-day settings page + inline day-cap error on log-time' (#256) from feat/mapps-244-max-hours-per-day into main
3667835feat(a11y): IconButton primitive + aria-label/title on icon-only buttons; non-color unread status
d5d4adafeat(ui): adopt shared StatCard tone, OverflowActions, PageHeader long-title guard
2934c93feat(time): max-hours-per-day settings page + inline day-cap error on log-time
113b7d2feat(empty-states): use three-part EmptyState for filtered-empty lists
09fd5adfeat(forms): consistent help/error spacing + persistent inline server errors
8d13277Merge pull request 'fix(calendar): allow editing and clearing appointment recurrence' (#248) from fix/MAPPS-236-edit-recurrence-rule into main
269049eMerge pull request 'feat(projects): disable Add Task on cancelled project with messaging' (#254) from feat/mapps-245-disable-add-task-cancelled into main
c5eabf7Merge pull request 'feat(contracts): show allotment headline and edit allotted hours from detail view' (#257) from feat/mapps-255-contract-allotment-edit into main
93ed62fMerge pull request 'feat(contracts): surface Weekly and Bi-weekly billing cycles' (#260) from feat/mapps-254-weekly-biweekly-billing-cycle into main
6df067cMerge pull request 'feat(contacts): collapsible company-detail sections (MAPPS-247)' (#261) from feat/mapps-247-collapsible-company-detail-sections into main
8115a31Merge pull request 'feat(theme): two-layer theme + accent picker, app-wide (MAPPS-259)' (#262) from feat/MAPPS-259-theme-picker into main
80737c7feat(theme): sync per-user theme + accent to the account (MAPPS-259)
a6a3a09feat(theme): migrate the app to semantic tokens + token lint guard (MAPPS-259)
ff13957feat(theme): two-layer theme + accent picker foundation (MAPPS-259)
1da4cc3feat(contacts): collapsible company-detail sections (MAPPS-247)
6ee6ee6feat(contracts): surface Weekly and Bi-weekly billing cycles
0d5bf5dMerge pull request 'feat(ux): Esc-to-cancel + type-to-confirm for destructive actions (PMS-369)' (#259) from feat/pms-369-confirm-esc-type-to-confirm into main
c5cd70bfeat(ux): Esc-to-cancel + type-to-confirm for destructive actions (PMS-369)
c95d5b4feat(contracts): show allotment headline and edit allotted hours from detail view
71f155bMerge pull request 'feat(forms): autocomplete CompanyPicker on Project + billing forms + conventions doc (PMS-367)' (#255) from feat/pms-367-company-picker-and-form-conventions into main
bf7c126feat(forms): autocomplete CompanyPicker on Project + billing forms, form-conventions doc (PMS-367)
8fbcc4efeat(projects): disable Add Task on cancelled project with messaging
90af980Merge pull request 'feat(time): prefill work-item from ?ticket_id on Log Time (PMS-362)' (#253) from feat/pms-362-log-time-ticket-prefill into main
e52924cfeat(time): prefill work-item from ?ticket_id on Log Time (PMS-362 AC2)
df91523Merge pull request 'docs(ui): canonical Button variant reference + showcase page (PMS-357)' (#252) from feat/pms-357-button-variant-doc into main
3ffd62ddocs(ui): canonical Button variant reference + showcase page (PMS-357 AC4)
4333fc2Merge pull request 'feat(ux): helpful empty states with CTAs across list pages (PMS-354)' (#251) from feat/pms-354-empty-state-cta into main
6a4b468feat(ux): helpful empty states with CTAs across list pages (PMS-354)
6d19118Merge pull request 'feat(ux): consistent skeleton loaders across list and detail pages (PMS-353)' (#250) from feat/pms-353-skeleton-loaders into main
cbb2009feat(ux): consistent skeleton loaders across list and detail pages (PMS-353)
f89736dMerge pull request 'feat(forms): inline create-company on contact, contract, and asset forms (PMS-352 AC3)' (#249) from feat/pms-352-inline-create-remaining-pickers into main
9e084d4feat(forms): inline create-company on contact, contract, and asset forms (PMS-352 AC3)
0be92beMerge pull request 'docs(assets): document config items as intentionally reveal-only' (#247) from fix/MAPPS-232-config-items-reveal-only-doc into main
7fb19ffMerge branch 'main' into fix/MAPPS-232-config-items-reveal-only-doc
1bef587Merge pull request 'feat(assets): add add/delete credential UI to asset detail' (#245) from feat/MAPPS-231-asset-credential-add-delete into main
0880c6aMerge branch 'main' into feat/MAPPS-231-asset-credential-add-delete
2515af4Merge pull request 'feat(kb): add category create/edit/delete UI' (#244) from feat/MAPPS-230-kb-category-crud-ui into main
6805af0Merge branch 'main' into feat/MAPPS-230-kb-category-crud-ui
0abf4e3Merge pull request 'fix(billing): edit invoice line items in the edit modal' (#243) from fix/MAPPS-234-invoice-edit-line-items into main
b851695Merge branch 'main' into fix/MAPPS-234-invoice-edit-line-items
aef1ad4Merge pull request 'fix(projects): add delete affordance to project tasks' (#242) from fix/MAPPS-237-task-delete-affordance into main
8c98bacMerge branch 'main' into fix/MAPPS-237-task-delete-affordance
3cce25fMerge pull request 'feat(billing): replace Record Payment UUID field with an invoice picker' (#218) from feat/MAPPS-191-record-payment-invoice-picker into main
0f5392fMerge branch 'main' into feat/MAPPS-191-record-payment-invoice-picker
f4e36e9Merge pull request 'feat(contracts): manage line items from the contract detail page' (#209) from feat/mapps-196-contract-line-item-management into main
ce2a058Merge branch 'main' into feat/mapps-196-contract-line-item-management
3d3b3acMerge pull request 'feat(contacts): attach existing contacts, new-ticket from company, breadcrumbs' (#204) from feat/mapps-207-relational-gaps into main
b18abadMerge branch 'main' into feat/mapps-207-relational-gaps
7253225fix(calendar): allow editing and clearing appointment recurrence
07901b6docs(assets): document config items as intentionally reveal-only
c34130ffeat(assets): add add/delete credential UI to asset detail
98c1580feat(kb): add category create/edit/delete UI
6e6e379fix(billing): edit invoice line items in the edit modal
8512732fix(projects): add delete affordance to project tasks
93b60e0Merge pull request 'fix(home): derive footer year and drop the dead footer links (MAPPS-229)' (#241) from fix/MAPPS-229-footer-year-and-links into main
da421f2Merge branch 'main' into fix/MAPPS-229-footer-year-and-links
c72ad0cMerge pull request 'fix(assets): validate the asset Edit modal like the create form (MAPPS-238)' (#240) from fix/MAPPS-238-asset-edit-modal-validation into main
ef3f206Merge branch 'main' into fix/MAPPS-238-asset-edit-modal-validation
69a129fMerge pull request 'fix(sla): validate Business Hours timezone as an IANA name (MAPPS-240)' (#239) from fix/MAPPS-240-business-hours-timezone-validation into main
afe9d4dfix(home): derive footer year and drop the dead footer links
34017cffix(assets): validate the asset Edit modal like the create form
47c141dfix(sla): validate Business Hours timezone as an IANA name
de0e270Merge pull request 'fix(sla): validate target hours, rejecting negatives and junk (MAPPS-239)' (#238) from fix/MAPPS-239-sla-target-hours-validation into main
184f90dstyle(sla): rustfmt block-wrap the long validate_hours error arm
7b2e502fix(sla): validate target hours, rejecting negatives and junk
4c5f016Merge pull request 'fix(settings): drop stale 3rd arg from RMM delete_lookup calls (MAPPS-224)' (#237) from fix/mapps-rmm-delete-lookup-arity into main
e385741fix(settings): drop stale 3rd arg from RMM delete_lookup calls
31b1188Merge main into feat/mapps-196-contract-line-item-management
e8f434fMerge main into feat/mapps-207-relational-gaps
4d9d4bfMerge pull request 'feat(timesheets): add manager UI to approve/reject submitted timesheets' (#207) from feat/mapps-194-timesheet-approvals-ui into main
750e519Merge pull request 'feat(rmm): add admin UI for RMM connections, device mappings, alert rules' (#211) from feat/mapps-199-rmm-admin-ui into main
081bfd6Merge pull request 'fix(tickets): show "Ticket not found" instead of infinite loading on 404' (#210) from fix/mapps-198-ticket-detail-not-found into main
bd628d1Merge pull request 'feat(contacts): surface company contracts, projects, invoices, assets on detail page' (#208) from feat/mapps-195-company-detail-relationships into main
9edc419Merge pull request 'feat(kb): filter article list by category from category cards' (#206) from feat/MAPPS-193-kb-category-card-filter into main
a99f49fMerge pull request 'feat(datetime): render timestamps in the user's profile timezone' (#205) from feat/mapps-208-display-profile-timezone into main
215808eMerge pull request 'feat(billing): wire invoice tax and discount into the create and edit UI' (#200) from feat/mapps-192-invoice-tax-discount-ui into main
57b40dcMerge pull request 'fix(layout): preserve sidebar scroll position across nav re-mount' (#199) from fix/mapps-203-sidebar-scroll-preserve into main
3c4de56Merge pull request 'fix(ui): replace native window.confirm() with styled ConfirmDialog for destructive actions' (#198) from feat/MAPPS-189-confirm-dialog-replace-native-confirm into main
cf5c120Merge pull request 'feat(projects): New Project form exposes status / dates / manager (PMS-361)' (#231) from fix/pms-361-new-project-form-exposes-edit-fields into main
877f18dfeat(projects): New Project form exposes status / dates / manager (PMS-361)
054f6f2Merge pull request 'fix(contacts): bind list Role column to contact_type, not title' (#230) from fix/PMS-368-contact-role-column-rebind into main
f54de81fix(contacts): bind list Role column to contact_type, not title
8df739cMerge pull request 'fix(display): uniform currency, billing-cycle label, resolved audit-log diff' (#229) from fix/PMS-365-display-formatting-sweep into main
1cbc34dfix(display): uniform currency formatting, billing-cycle label, resolved audit-log diff
6e4663dMerge pull request 'fix(contracts): surface server-side end_date field errors inline' (#228) from fix/PMS-364-inline-cross-field-errors into main
a83b5abfix(contracts): surface server-side end_date field errors inline
7c09928Merge pull request 'fix(companies): refresh Statistics counts after adding a site' (#227) from fix/PMS-363-company-sites-counter-reactive into main
8e5ed7afix(companies): refresh Statistics counts after adding a site
61f593fMerge pull request 'fix(reports): drop 'charts coming soon' placeholder from report views' (#226) from fix/PMS-356-remove-revenue-chart-placeholder into main
ae6c754fix(reports): drop "charts coming soon" placeholder from report views
bffe49eMerge pull request 'docs(qa): add technique-rich field and button audit prompt' (#225) from docs/MAPPS-221-qa-field-button-audit-prompt into main
52014efdocs(qa): index the three QA prompts in the dev-docs README
204aef7Merge pull request 'feat(kb): validate slug/tags and cap text fields on article form' (#224) from feat/mapps-218-kb-article-form-validation into main
3af4ba4fix(kb): pass Body maxlength as i64 after the Textarea unify
e356c05Merge remote-tracking branch 'origin/main' into feat/mapps-218-kb-article-form-validation
b79446bMerge pull request 'fix(rate-cards): wire /rate-cards/new to create form and explain disabled Add Rate' (#223) from fix/mapps-217-rate-card-create-route-disabled-styling into main
702f103fix(rate-cards): show the disabled Add Rate reason as visible helper text
bda15deMerge pull request 'fix(assets): field-level validation on the New Asset form' (#222) from fix/mapps-216-new-asset-form-field-validation into main
22fba2cMerge pull request 'fix(billing): validate Record Payment Amount and Invoice ID fields' (#221) from fix/mapps-215-record-payment-field-validation into main
045ccb4fix(billing): pass payment Notes maxlength as i64 after the Textarea unify
009325dMerge remote-tracking branch 'origin/main' into fix/mapps-215-record-payment-field-validation
47e68a2Merge pull request 'feat(calendar): validate appointment RRULE and cap text field lengths' (#219) from feat/MAPPS-219-appointment-rrule-validation-maxlength into main
baf80f1refactor(form): unify Textarea maxlength on i64 to match Input
3adffecdocs(qa): add technique-rich field and button audit prompt
cc7f104Merge remote-tracking branch 'origin/main' into feat/MAPPS-219-appointment-rrule-validation-maxlength
51a9f18feat(kb): validate slug/tags and cap text fields on article form
46941f3Merge pull request 'fix(billing): validate New Invoice fields client-side' (#217) from fix/MAPPS-214-invoice-form-validation into main
84d0c03Merge remote-tracking branch 'origin/main' into fix/MAPPS-214-invoice-form-validation
1318bf6fix(rate-cards): wire /rate-cards/new to create form and explain disabled Add Rate
97fd09aMerge pull request 'feat(contacts): validate Website field and cap text fields on company form' (#216) from feat/mapps-213-company-form-website-validation into main
75d6dfdMerge remote-tracking branch 'origin/main' into feat/mapps-213-company-form-website-validation
0ea7c78fix(assets): field-level validation on the New Asset form
980f153fix(billing): validate Record Payment Amount and Invoice ID fields
ff447c8Merge pull request 'fix(projects): bound budget amount, fix hours message, cap description' (#214) from fix/mapps-212-new-project-form-validation into main
a9f9201Merge remote-tracking branch 'origin/main' into fix/mapps-212-new-project-form-validation
a956d55feat(calendar): validate appointment RRULE and cap text field lengths
32466fbMerge pull request 'feat(contracts): field-level validation on the New Contract form' (#215) from feat/mapps-211-contract-form-field-validation into main
c54d02dMerge remote-tracking branch 'origin/main' into feat/mapps-211-contract-form-field-validation
6ad02f5feat(billing): replace Record Payment UUID field with an invoice picker
347369efix(billing): validate New Invoice fields client-side
8df2747Merge pull request 'fix(forms): surface server field validation errors in shared fetch hook' (#201) from fix/MAPPS-210-surface-server-validation-errors into main
81f5fe5fix(forms): surface server validation message on the string-error helpers too
eb66616feat(contacts): validate Website field and cap text fields on company form
226acdaMerge pull request 'feat(projects): show task logged/approved/estimated hours on project detail' (#202) from feat/MAPPS-205-task-hours-on-project-detail into main
8b95992Merge pull request 'feat(time): show work type name in the time entry list' (#213) from feat/mapps-202-work-type-name-in-time-list into main
88736f5style(time): wrap the work-types fetch call to satisfy rustfmt
33bb6bffix(time): fetch work types with per_page=100 in the edit modal
f51da80Merge pull request 'fix(version): source displayed version from CARGO_PKG_VERSION' (#212) from fix/mapps-200-version-source into main
e1f9e84feat(contracts): field-level validation on the New Contract form
62947a1fix(version): declare CARGO_PKG_VERSION as an explicit build rerun trigger
436283cfix(projects): bound budget amount, fix hours message, cap description
f0d81b2feat(time): show work type name in the time entry list
fb9d9a9fix(version): source displayed version from CARGO_PKG_VERSION
7268a92feat(rmm): add admin UI for RMM connections, device mappings, alert rules
f3529e2fix(tickets): show "Ticket not found" instead of infinite loading on 404
f1df205Merge pull request 'docs(qa): add reusable QA prompts for E2E testing and input validation' (#195) from docs/mapps-209-qa-prompts into main
2687bb3Merge branch 'main' into docs/mapps-209-qa-prompts
7d55c75feat(contracts): manage line items from the contract detail page
60161e6feat(contacts): surface company contracts, projects, invoices, assets on detail page
fba3675feat(timesheets): add manager UI to approve/reject submitted timesheets
8d60c50feat(kb): filter article list by category from category cards
91c9db2feat(datetime): render timestamps in the user's profile timezone
584173cfeat(contacts): attach existing contacts, new-ticket from company, breadcrumbs
cc37ac5feat(projects): show task logged/approved/estimated hours on project detail
e0366d3fix(forms): surface server field validation errors in shared fetch hook
0791032feat(billing): wire invoice tax and discount into the create and edit UI
8ea32b5fix(layout): preserve sidebar scroll position across nav re-mount
dd3485ffix(ui): replace native window.confirm() with styled ConfirmDialog for destructive actions
5c9c442Merge pull request 'feat(tickets): make ticket title editable from the detail edit modal' (#197) from feat/mapps-188-editable-ticket-title into main
14d2c5aMerge branch 'main' into feat/mapps-188-editable-ticket-title
6a02ec3feat(tickets): make ticket title editable from the detail edit modal
e05dc51Merge pull request 'fix(justfile): supply MOKOSH_OIDC_CLIENT_ID placeholder in down teardown (MAPPS-159)' (#146) from fix/MAPPS-159-down-oidc-client-id-placeholder into main
9a4140bMerge branch 'main' into fix/MAPPS-159-down-oidc-client-id-placeholder
e7e1b0cMerge pull request 'fix(tickets): AssetPicker inline-edit chip fits inside DetailItem row, no duplicate label (PMS-344 follow-up)' (#196) from fix/pms-344-asset-picker-detailitem-layout into main
f10aefbfix(tickets): AssetPicker inline-edit chip fits inside DetailItem row, no duplicate label (PMS-344 follow-up)
8957ba0docs(qa): add reusable QA prompts for E2E testing and input validation
9c4353bMerge pull request 'fix(tickets): asset inline-edit Change opens search picker without server roundtrip (PMS-344 follow-up)' (#194) from fix/pms-344-asset-inline-change-opens-search into main
98ff84cfix(tickets): asset inline-edit Change opens search picker without server roundtrip (PMS-344 follow-up)
ccbfcb8Merge pull request 'fix(ui): strip trailing _id suffix from history field labels (PMS-370)' (#193) from fix/pms-370-strip-id-suffix-in-history-labels into main
ba953a3Merge pull request 'fix(pickers): use_resource subscribes to query signal, populated-list affordance label echoes typed text' (#192) from fix/pms-371-company-picker-filter-and-affordance-label into main
470de0ffix(ui): strip trailing _id suffix from history field labels (PMS-370)
0300247fix(pickers): use_resource subscribes to query signal, populated-list affordance label echoes typed text
ad40f4cMerge pull request 'fix(layout): UpdateBanner re-mount on nav causes the 'page jump' MAPPS-203 reports' (#191) from fix/mapps-203-update-banner-no-shift-on-nav into main
dbe13d2Merge pull request 'feat(tickets,assets): bidirectional asset/ticket link (PMS-344)' (#190) from feat/pms-344-asset-picker-and-related-tickets into main
b8cf377feat(tickets,assets): bidirectional asset/ticket link (PMS-344)
8b5fe3afix(layout): UpdateBanner re-mount on nav causes the 'page jump' MAPPS-203 reports
b34e54dMerge pull request 'chore(ci): trigger image rebuild + :latest retag after Tier S merges' (#189) from chore/trigger-ci-rebuild-tier-s into main
d43a173chore(ci): trigger image rebuild + :latest retag after Tier S merges
7191f06Merge pull request 'feat(tickets): inline 'Create new company' affordance in CompanyPicker on New Ticket' (#188) from feat/pms-352-inline-create-company-on-ticket-form into main
44e2e0aMerge pull request 'fix(ux): confirm destructive actions on Team Revoke and SLA Remove' (#187) from fix/pms-369-confirm-destructive-actions into main
220cdccMerge pull request 'feat(tickets): inline-edit status/priority/assignee on ticket detail' (#186) from feat/pms-359-ticket-inline-edit into main
da022d0feat(tickets): inline-edit status/priority/assignee on ticket detail
d7e9132Merge pull request 'fix(tickets): send priority_id on New Ticket create (was dropped silently)' (#185) from fix/pms-358-ticket-priority-not-sent into main
4b2a7c8feat(tickets): inline 'Create new company' affordance in CompanyPicker on New Ticket
ed93f3cfix(ux): confirm destructive actions on Team Revoke and SLA Remove
9e9d199fix(tickets): send priority_id on New Ticket create (was dropped silently)
287dcc4Merge pull request 'feat(time): link work items in the timesheet grid (MAPPS-206)' (#184) from feat/MAPPS-206-link-projects-everywhere into main
3eb4a83feat(time): link work items in the timesheet grid (MAPPS-206)
10e60c2Merge pull request 'feat(ui): standardize date selection behind one DateField component (MAPPS-204)' (#183) from feat/MAPPS-204-standardize-date-inputs into main
0e5afd4feat(ui): standardize date selection behind one DateField component (MAPPS-204)
2fcb0f5Merge pull request 'feat(settings): add Scheduling page to edit the standard due date' (#182) from feat/MAPPS-345-scheduling-due-date-setting into main
0cb3918Merge branch 'main' into feat/MAPPS-345-scheduling-due-date-setting
424e9f6feat(settings): add Scheduling page to edit the standard due date
64219aeMerge pull request 'feat(time): empty-week timesheet prompt + Log Time shortcut (MAPPS-201)' (#181) from feat/MAPPS-201-timesheet-empty-log-time-cta into main
c5406f9feat(time): empty-week timesheet prompt + Log Time shortcut (MAPPS-201)
8dab207Merge pull request 'fix(update-banner): fetch /version once by keying on a memoized admin flag (MAPPS-187)' (#180) from fix/MAPPS-187-version-dedup into main
cf929bffix(update-banner): fetch /version once by keying the check on a memoized admin flag (MAPPS-187)
21e8bf5Merge pull request 'feat(ui): clickable, persisting Markdown task-list checkboxes (PMS-348)' (#179) from feat/PMS-348-interactive-task-checkboxes into main
f2d4bfcfeat(ui): make Markdown task-list checkboxes clickable and persist the toggle (PMS-348)
00e23fdMerge pull request 'fix(contracts): align contract dropdown values with backend CHECK constraints (MAPPS-190)' (#178) from fix/MAPPS-190-contract-dropdown-values into main
ab7056efix(contracts): align contract dropdown values with backend CHECK constraints (MAPPS-190)
4178769Merge pull request 'fix(fetch): bump tenant generation only when the access token changes (MAPPS-187)' (#176) from fix/MAPPS-187-double-fetch into main
54931e8Merge branch 'main' into fix/MAPPS-187-double-fetch
c1f27caMerge pull request 'refactor(ui): consolidate money formatting into one shared helper (MAPPS-197)' (#175) from fix/MAPPS-197-money-format into main
d4045e5Merge branch 'main' into fix/MAPPS-197-money-format
5dbaec6Merge pull request 'fix(ui): render task-list checkboxes in Markdown descriptions (PMS-347)' (#177) from fix/PMS-309-followup-tasklist-checkboxes into main
824e44bfix(ui): render task-list checkboxes in Markdown descriptions (PMS-347)
5fadac7fix(fetch): bump tenant generation only when the access token changes (MAPPS-187)
3005299refactor(ui): consolidate money formatting into one shared helper (MAPPS-197)
3d7f14bMerge pull request 'feat(ui): render Markdown in ticket and project descriptions (PMS-309)' (#174) from feat/PMS-309-render-markdown-descriptions into main
1a94c15feat(ui): render Markdown in ticket and project descriptions (PMS-309)
b8d146aMerge pull request 'feat(nav): detail-page nav highlight + breadcrumbs for rate cards/contracts (PMS-312)' (#173) from feat/PMS-312-detail-nav-highlight-breadcrumb into main
4c40233feat(nav): keep parent nav highlighted on detail pages + breadcrumbs for rate cards/contracts (PMS-312)
34528a9Merge pull request 'fix(time,projects,sla): clearer hours placeholder + bound task due-date range (PMS-346)' (#172) from fix/PMS-317-followup-placeholder-and-date-bounds into main
d56d86afix(time,projects,sla): clearer hours placeholder + bound task due-date range (PMS-346)
844340dMerge pull request 'feat(projects,sla): accept H:MM / fractional hours in Budget Hours and SLA times (PMS-340)' (#171) from feat/PMS-340-duration-fields-hhmm into main
ff30f58feat(projects,sla): accept H:MM / fractional hours in Budget Hours and SLA times (PMS-340)
3048790Merge pull request 'fix(projects): validate task due-date input and standardize change-history dates (PMS-317)' (#170) from fix/PMS-317-task-date-validation-and-history-format into main
4409388fix(projects): validate task due-date input and standardize change-history dates (PMS-317)
b15448dMerge pull request 'feat(projects): accept H:MM for the task estimated-hours field (PMS-319)' (#169) from feat/PMS-319-task-estimate-hhmm into main
294a3effeat(projects): accept H:MM for the task estimated-hours field (PMS-319)
60f3dacMerge pull request 'fix(time): link the project work-item in the time-entries list (PMS-320)' (#168) from fix/PMS-320-link-project-work-item into main
dd90f6bfix(time): link the project work-item in the time-entries list (PMS-320)
5f3c9f6Merge pull request 'fix(layout): reserve UpdateBanner height to kill admin login layout shift' (#167) from fix/PMS-313-update-banner-layout-shift into main
da0e809fix(layout): reserve UpdateBanner height to kill admin login layout shift
682e628Merge pull request 'feat(time): explain disabled timesheet Submit + add jump-to-current-week (PMS-310)' (#166) from feat/PMS-310-timesheet-empty-week-affordances into main
1c04965feat(time): explain the disabled timesheet Submit and add jump-to-current-week (PMS-310)
77a608dMerge pull request 'feat(billing): payment terms as a settings-managed dropdown (MAPPS-170)' (#165) from feat/mapps-170-payment-terms into main
1788773fix(billing): drop the no-op "no payment term" clear option
98d9de6feat(billing): payment terms as a settings-managed dropdown
19ea8e1Merge pull request 'feat(time): accept H:MM input in the Log Time hours field (PMS-314)' (#164) from feat/PMS-314-time-hhmm-input into main
9986017feat(time): accept H:MM input in the Log Time hours field (PMS-314)
87c2c3cMerge pull request 'feat(time): show work-item and task names in the time-entries list (MAPPS-168)' (#163) from feat/mapps-168-time-entry-names into main
c8c69c3docs(time): refresh RemoteTimeEntry comment now that names are joined
06877aefeat(time): show work-item and task names in the time-entries list
02ac258Merge pull request 'feat(projects): show task logged vs approved hours (MAPPS-167)' (#162) from feat/mapps-167-task-logged-hours into main
ddd221cfeat(projects): show task logged vs approved hours
70d9947Merge pull request 'style(time): rustfmt work_type use_signal closure' (#161) from fix/mapps-184-rustfmt-time into main
1e2a354Merge pull request 'style(time): apply rustfmt to TimeEntryEditModal work_type signal' (#160) from fix/mapps-183-time-rustfmt into main
1ef30a1Merge pull request 'feat(time): editable time entries (MAPPS-166)' (#159) from feat/mapps-166-editable-time-entries into main
4971e94style(time): rustfmt work_type use_signal closure
e0abe32fix(time): stop the edit modal from wiping task_id; UX tweaks
544f864style(time): apply rustfmt to TimeEntryEditModal work_type signal
7e1279bfeat(time): editable time entries (click-to-edit modal)
32e8144Merge pull request 'feat(projects): more intuitive task add/edit and back nav (MAPPS-165)' (#158) from feat/mapps-165-task-edit-ux into main
ea858f4Merge remote-tracking branch 'origin/feat/mapps-165-task-edit-ux' into feat/mapps-165-task-edit-ux
51ce7e9fix(projects): hold the selected task by value, not by id
7bbd772style(projects): apply rustfmt to task edit signals and history
117ed9cfeat(projects): more intuitive task add/edit and back nav
4ab3a1aMerge pull request 'fix(contacts): client-side inline validation for contact/company/site forms [MAPPS-177]' (#157) from fix/MAPPS-177-contact-form-validation into main
c6803a2Merge branch 'main' into fix/MAPPS-177-contact-form-validation
1dea92fMerge pull request 'fix(projects): client-side inline validation on project forms [MAPPS-176]' (#154) from fix/MAPPS-176-project-form-validation into main
302dfecMerge branch 'main' into fix/MAPPS-176-project-form-validation
7934772fix(contacts): inline validation on contact, company, and site forms
9873999Merge pull request 'fix(contracts): wrap conditional Card actions in Some/None' (#156) from chore/checks-workflow-24ff62c7 into main
230c89bMerge pull request 'fix(contracts): apply rustfmt and fix conditional rsx actions' (#155) from fix/mapps-179-contracts-fmt into main
eb4b2c8fix(contracts): wrap conditional Card actions in Some/None
26cf915Merge pull request 'fix(contracts): rustfmt diffs and conditional rsx actions in rate cards' (#153) from fix/mapps-178-contracts-fmt into main
c774b0dMerge main into fix/mapps-178-contracts-fmt
609e2cffix(contracts): apply rustfmt and fix conditional rsx actions
f2bfc41fix(projects): inline validation on project create and edit forms
24ff62cMerge pull request 'feat(contracts): editable rate cards and line items (MAPPS-160)' (#152) from feat/mapps-160-editable-rate-cards into main
dadd3d5fix(contracts): rustfmt diffs and conditional rsx actions in rate cards
4d32e34refactor(components): promote SettingFormModal to a shared component
e835447fix(contracts): rate-card editor review fixes
f06b1c9feat(contracts): editable rate cards and line items
562067aMerge pull request 'feat(settings): project type editor in the Settings hub (MAPPS-173)' (#151) from feat/mapps-173-project-type-editor into main
623f1b4fix(settings): stop showing the empty-state message when a list fetch fails
267414efeat(settings): project type editor in the Settings hub
81fd9dcMerge pull request 'feat(settings): ticket lookup editors in the Settings hub (MAPPS-172)' (#150) from feat/mapps-172-ticket-lookup-editors into main
1f72bedrefactor(settings): address code-review findings on the ticket editors
a594723style(settings): apply cargo fmt to satisfy CI check
6832e60docs(settings): refresh module comment now that ticket editors exist
6dd11f1feat(settings): ticket status/type/priority/queue/category editors
be48198Merge pull request 'feat(settings): centralized Settings hub with standard-type editors (MAPPS-169)' (#148) from feat/mapps-169-settings-hub into main
7ae3ae5fix(settings): correct modal prop types and admin-check borrow
80f008ffeat(settings): centralized Settings hub with standard-type editors
77b319ffix(justfile): supply MOKOSH_OIDC_CLIENT_ID placeholder in down teardownDownloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
v0.3.0
StableAll checks were successfulBuild OCI container / Build and push mokosh-www image (push) Successful in 2m27sreleased this
2026-06-14 19:01:17 +02:00 | 858 commits to main since this releaseChangelog
dc53564Merge pull request 'Release v0.3.0' (#145) from release/v0.3.0 into main
ac15f3cRelease v0.3.0
55c996aMerge pull request 'feat(ui): surface Delete on Project/Asset and Invoice lifecycle actions' (#144) from feat/mapps-158-detail-page-actions into main
32fd828feat(ui): surface Delete on Project/Asset and Invoice lifecycle actions
1017f77Merge pull request 'fix(kb): re-render article detail when the route id changes' (#142) from fix/mapps-155-kb-article-nav-rerender into main
9c2607fMerge branch 'main' into fix/mapps-155-kb-article-nav-rerender
e020aacMerge pull request 'feat(kb): surface article tags as clickable filter chips' (#141) from fix/mapps-157-kb-tags-display into main
ce33dd2fix(kb): re-render article detail when the route id changes
2ff408dfeat(kb): surface article tags as clickable filter chips
f25a9e7Merge pull request 'fix(dispatch): refetch appointments when the board date changes' (#140) from fix/mapps-153-dispatch-date-refetch into main
41f2dedMerge branch 'main' into fix/mapps-153-dispatch-date-refetch
d226f3afix(dispatch): refetch appointments when the board date changes
fed9144Merge pull request 'fix(tickets): make list search and status/priority filters work' (#139) from fix/mapps-154-tickets-list-filters into main
b45bdeeMerge branch 'main' into fix/mapps-154-tickets-list-filters
9b3d058fix(tickets): make list search and status/priority filters work
4a3d5cdMerge pull request 'fix(table): wrap long cell values to stop horizontal overflow' (#138) from fix/mapps-152-truncate-list-table-cells into main
5911444Merge branch 'main' into fix/mapps-152-truncate-list-table-cells
a8e9759Merge pull request 'fix(time): bound Hours input to positive decimals up to 24h' (#137) from fix/mapps-150-hours-decimal-bounds into main
74ad08eMerge branch 'main' into fix/mapps-150-hours-decimal-bounds
3e17ce7Merge pull request 'fix(contacts): sanitize company website href to block stored XSS' (#136) from fix/mapps-149-sanitize-website-href into main
40dd637Merge branch 'main' into fix/mapps-149-sanitize-website-href
4739635Merge pull request 'fix(system): probe real /api/v1/version instead of 404ing /system/version' (#135) from fix/mapps-151-spa-version-probe-path into main
54a3639Merge branch 'main' into fix/mapps-151-spa-version-probe-path
c1bf5afMerge pull request 'fix(contacts): fetch the requested page on pagination change' (#134) from fix/mapps-148-pagination-fetch-next-page into main
6095472fix(table): wrap long cell values to stop horizontal overflow
0f7f67bfix(time): bound Hours input to positive decimals up to 24h
51a813cfix(contacts): sanitize company website href to block stored XSS
d5bca66fix(system): probe real /api/v1/version instead of 404ing /system/version
7162edbfix(contacts): fetch the requested page on pagination change
1e0e5a1Merge pull request 'Release v0.2.0' (#133) from release/v0.2.0 into main
471b01fRelease v0.2.0
e0af4afMerge pull request 'refactor(ui): remove dead components and finish portal/admin stub pages' (#129) from feat/mapps-142-remove-dead-components into main
3a700e1Merge remote-tracking branch 'origin/main' into feat/mapps-142-remove-dead-components
4634e2dMerge pull request 'chore(cleanup): remove orphaned modules, hooks, structs, and cfg(server) stubs' (#128) from chore/mapps-141-remove-dead-code into main
8c718bfMerge remote-tracking branch 'origin/main' into chore/mapps-141-remove-dead-code
9e94768Merge 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
200fa61Merge remote-tracking branch 'origin/main' into fix/mapps-137-role-parser-uuid-oidc-defects
fc84bc5Merge 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
6ceab49Merge branch 'main' into chore/mapps-138-contract-drift-local-subset
9f813e0Merge 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
f7a313fMerge branch 'main' into fix/mapps-139-page-component-correctness
304c1efMerge pull request 'feat(profile): prefill date format presets with live examples' (#127) from feat/mapps-144-prefilled-date-format into main
94f3b1cMerge branch 'main' into feat/mapps-144-prefilled-date-format
3095e5fMerge pull request 'chore(infra): clean up Dockerfiles, CI workflows, justfile, packaging' (#130) from chore/mapps-143-infra-ci-packaging-cleanup into main
3259456Merge branch 'main' into chore/mapps-143-infra-ci-packaging-cleanup
4f66fbfMerge pull request 'fix(projects): render zero Total Budget as "$0" not "$-0"' (#131) from fix/mapps-145-total-budget-negative-zero into main
b3ee98dMerge branch 'main' into fix/mapps-145-total-budget-negative-zero
c6f67d0Merge pull request 'fix(404): point Contact support link to real support address' (#132) from fix/mapps-147-404-support-mailto into main
cea7e9cMerge branch 'main' into fix/mapps-147-404-support-mailto
cac3e3bMerge 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
f907232Merge branch 'main' into fix/mapps-136-time-entry-ownership-guard
31d5fe4Merge pull request 'fix: pagination count 500s, order_by, and billing state (MAPPS-135)' (#122) from fix/mapps-135-pagination-billing-correctness into main
99c581dMerge branch 'main' into fix/mapps-135-pagination-billing-correctness
fb2747fMerge pull request 'refactor: consolidate duplicated helpers and envelope types' (#121) from refactor/mapps-140-consolidate-helpers into main
c062923fix(404): point Contact support link to real support address
06fbf70fix(projects): render zero Total Budget as "$0" not "$-0"
52b7a3bchore(infra): clean up Dockerfiles, CI workflows, justfile, packaging
6db9195refactor(ui): remove dead components and finish portal/admin stub pages
694eb47chore(cleanup): remove orphaned modules, hooks, structs, and cfg(server) stubs
612a8bffeat(profile): prefill date format presets with live examples
1332872fix(apps): correct page and component defects across tickets, KB, picker, SLA, models
1260e37chore(contracts): align local DTOs and document mokosh-server drift (MAPPS-138)
147adbefix(auth): close OIDC callback role/uuid drift and flow defects
b2971c4fix(time): enforce user_id ownership on time-entry stop/update/delete
2a2fb6cfix: pagination count 500s, order_by, and billing state (MAPPS-135)
ab903b6refactor: consolidate duplicated helpers and envelope types
1610f78Merge pull request 'feat(time): add H:MM duration display format option (PMS-265)' (#120) from feat/pms-265-duration-format-option into main
5b15312feat(time): add H:MM duration display format option (PMS-265)
10b593eMerge pull request 'feat(profile): custom date/time format builder with token preview' (#119) from feat/pms-254-custom-date-format-builder into main
f4fe14efeat(profile): custom date/time format builder with token preview
7aa5d4cMerge pull request 'feat(profile): preset date/time format picker + central formatter (frontend)' (#118) from feat/pms-253-date-format-preference-frontend into main
24df1bcfeat(profile): preset date/time format picker + central formatter (frontend)
e1071faMerge pull request 'feat(status): dedicated System Status page in the user menu (PMS-237)' (#117) from feat/mapps-237-system-status into main
065043afeat(status): dedicated System Status page in the user menu (PMS-237)
84bb63aMerge pull request 'fix(time): accept fractional hours in Log Time form (PMS-233)' (#116) from fix/mapps-233-fractional-hours into main
357f5cefix(time): accept fractional hours in Log Time form (PMS-233)
01babc9Merge pull request 'feat(team): admin invitations management UI (PMS-247)' (#115) from feat/mapps-247-invitations-ui into main
c72a235chore: drop accidentally-committed local CLAUDE.md from PMS-247 branch
456111dfeat(team): admin invitations management UI (PMS-247)
2392b7aMerge pull request 'feat(timesheets): submit-certification modal and withdraw action (PMS-183)' (#114) from feat/mapps-183-timesheet-withdraw into main
d40e5cbfeat(timesheets): submit-certification modal and withdraw action (PMS-183)
aa10d64Merge 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
4da1a9afeat(projects): show the project's own change history and edited marker (PMS-205)
4f8e284Merge pull request 'feat(history): show before/after content in change history (PMS-204)' (#112) from feat/mapps-204-history-content into main
e67522fMerge pull request 'fix(tickets): keep Created and SLA Due on one line (PMS-181)' (#105) from fix/mapps-181-ticket-detail-oneline into main
17ccfe7feat(history): show the before/after content of each change, not just who/when (PMS-204)
b961d22Merge pull request 'feat(assets): edit asset with change history and edited marker (PMS-185)' (#109) from feat/mapps-185-asset-edit-history into main
46b78e9Merge pull request 'feat(projects): edit project and tasks with change history (PMS-184)' (#111) from feat/mapps-184-task-edit-history into main
c438ee0Merge pull request 'feat(tickets): edit ticket description with change history (PMS-182)' (#110) from feat/mapps-182-ticket-edit-history into main
4836870feat(projects): edit project and tasks with change history and edited marker (PMS-184)
c8832dbfeat(tickets): edit ticket description with change history and edited marker (PMS-182)
b08fe9cfeat(assets): edit asset from detail with change history and edited marker (PMS-185)
7c56e2eMerge pull request 'docs: add 2026-06-06 platform audit to dev-docs/audits' (#108) from docs/add-platform-audit-2026-06-06 into main
6356b22docs: add 2026-06-06 platform audit to dev-docs/audits
bfd0b31Merge pull request 'feat(audit-log): show resolved names instead of UUIDs in the table + detail' (#107) from feat/audit-log-show-names into main
841e47afeat(audit-log): show resolved names instead of UUIDs in the table + detail
068fa8cMerge pull request 'feat(auth): forced name-onboarding gate for new Bunyip-JIT users' (#106) from feat/force-name-onboarding into main
e45216afeat(auth): forced name-onboarding gate for new Bunyip-JIT users
df3701ffix(tickets): keep Created and SLA Due values on one line (PMS-181)
9cab36dMerge 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
651e1b7fix(billing): mark all required fields on the New Invoice form (PMS-187)
315f194Merge pull request 'feat(billing): label payments by invoice number, not UUID (PMS-186)' (#103) from feat/mapps-186-billing-company-name into main
a4ee1f6feat(billing): label payments by invoice number, not UUID (PMS-186)
748458dMerge 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
91f5195Merge pull request 'fix(billing): friendly locked state for users without finance access (MAPPS-133)' (#101) from fix/mapps-133-billing-locked-state into main
75b43f4feat(billing): show company name (not UUID) on invoices and payments (PMS-186)
b678a94fix(billing): friendly locked state for users without finance access (MAPPS-133)
376a9b6Merge 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
3508e1efix(auth): source the user role from mokosh-server /api/v1/auth/me (PMS-158)
a033622Merge pull request 'feat(reports): add custom Report Builder UI (PMS-180)' (#99) from feat/mapps-custom-report-builder into main
2c56c20feat(reports): add custom Report Builder UI (MAPPS, PMS-180)
d546181Merge pull request 'feat(reports): wire Projects + Clients report detail views (PMS-179)' (#98) from feat/mapps-reports-project-client into main
827a691feat(reports): wire Projects + Clients report detail views (MAPPS, PMS-179)
85ac2d7Merge pull request 'feat(notifications): wire the top-bar bell to the in-app inbox' (#97) from feat/mapps-132-notification-bell into main
0d34618style(notifications): match rustfmt multiline Date::new form
2dde8b2style(notifications): satisfy rustfmt on the Date::new call
ed0ca02fix(notifications): close panel on outside click + show local-tz timestamps
0c07ecffeat(notifications): wire the top-bar bell to the in-app inbox
094ab8fMerge 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
f25be87fix(ci): run cache-warm step last so a stall can't delay the mirror
0d447c5fix(ci): decouple build-cache export so a registry stall can't hang the job
e0ad230Merge 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
7aef060fix(ui,auth): modals dim instead of blanking + role parser covers all variants
0ab6a14Merge 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
4725c8cfeat(auto-update): SPA polls _mokosh_config.js build_sha and reloads on mismatch
806ae77Merge pull request 'chore(build): bump rust-builder-glibc to v1.0.1' (#90) from chore/bump-rust-builder-glibc-v1.0.1 into main
90503beMerge branch 'main' into chore/bump-rust-builder-glibc-v1.0.1
32221a4Merge pull request 'feat(dashboard,reports): wire Dashboard + Reports summaries (MAPPS-130)' (#93) from feat/mapps-130-wire-dashboard-reports into main
5e0e380feat(dashboard,reports): wire Dashboard + Reports summaries to the backend (MAPPS-130)
348b82eMerge pull request 'feat(assets): wire Assets list, create, detail (CMDB) to the backend (MAPPS-129)' (#92) from feat/mapps-129-wire-assets into main
bbc9048feat(assets): wire Assets list, create, and detail (CMDB) to the backend (MAPPS-129)
4dc3a27Merge 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
841b73dfeat(projects,time): task creation, budget input, and project/task time logging (MAPPS-128)
9e2ed17chore(build): bump rust-builder-glibc to v1.0.1
079faa4Merge pull request 'feat(projects): wire Project detail + tasks pages (MAPPS-127)' (#89) from feat/mapps-127-wire-project-detail-tasks into main
67ec6e1feat(projects): wire Project detail + tasks pages to the backend (MAPPS-127)
906942fMerge pull request 'feat(projects): wire Projects list + create to the backend (MAPPS-126)' (#88) from feat/mapps-126-wire-projects into main
202b603feat(projects): wire Projects list + create to the backend (MAPPS-126)
d3a3610Merge pull request 'fix(tickets): show ticket number + title in detail header, not the UUID' (#87) from fix/mapps-ticket-detail-title into main
c98f941fix(tickets): show ticket number + title in detail header, not the UUID
fc56575Merge pull request 'feat(time): wire Timesheets page to the backend (MAPPS-125)' (#86) from feat/mapps-125-wire-timesheets into main
0807f92feat(time): wire Timesheets page to the backend (MAPPS-125)
4fe4e93Merge pull request 'feat(time): wire Time Tracking pages to the backend (MAPPS-124)' (#70) from feat/mapps-124-wire-time-tracking into main
4756da1Merge branch 'main' into feat/mapps-124-wire-time-tracking
05d0da0Merge pull request 'chore: Sync .gitignore' (#85) from chore/sync-gitignore into main
42cedf2chore: Sync .gitignore
3013822Merge pull request 'fix(oidc): persist tokens before navigating + router-push internal return_to' (#84) from fix/auth-callback-persists-tokens-before-nav into main
c75a6ebfix(oidc): persist tokens before navigating + router-push internal return_to
bfa5f30Merge pull request 'feat(profile): timezone is a select with curated IANA list + browser auto-detect' (#83) from feat/profile-timezone-dropdown into main
1d90100feat(profile): timezone is a select with curated IANA list + browser auto-detect
1647be4Merge pull request 'feat(profile): Bunyip identity strip + local Preferences (theme, time format, week start)' (#82) from feat/profile-bunyip-identity-preferences into main
83075c4feat(profile): Bunyip identity strip + local Preferences (theme, time format, week start)
c1eda0bMerge 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
04943c8fix(auth): logout lands on this SPA's origin home, not Bunyip's login
9084771Merge pull request 'feat(profile): add mokosh-side Profile page, rename hub link to Account Settings' (#80) from feat/mokosh-profile-page into main
18e2f77feat(profile): add mokosh-side Profile page, rename hub link to Account Settings
6d6cf52Merge pull request 'fix(auth): drop auth-signal writes from UserMenu logout closure' (#79) from fix/logout-no-signal-writes-pre-navigation into main
8272512fix(auth): drop auth-signal writes from UserMenu logout closure
78d86ceMerge pull request 'fix(auth): logout via bunyip OptionalUser endpoint, Profile -> /settings, synthesize memberships locally' (#78) from fix/logout-profile-memberships-noise into main
f076391fix(auth): logout via bunyip OptionalUser endpoint, Profile -> /settings, synthesize memberships locally
27dea24Merge pull request 'feat(kb): one-vote rating UI (reflect + toggle the user's vote)' (#77) from feat/kb-rating-toggle-client into main
cd48d84Merge branch 'main' into feat/kb-rating-toggle-client
f677ad5Merge pull request 'fix(layout): main sidebar nav scrolls when it overflows' (#76) from fix/main-sidebar-scroll into main
506e2d3fix(layout): make the main sidebar nav scroll when it overflows
52163c5feat(kb): one-vote rating UI - reflect and toggle the user vote
0592aabMerge pull request 'fix(kb): read-mode button (derive + minimize icon) and density paragraph spacing' (#75) from fix/kb-readmode-button into main
bbea601chore: sync Cargo.lock with the ammonia dependency
e58bd90feat(kb): density toggle also controls paragraph spacing, not just line height
1689cc0fix(kb): derive read-mode from both rails collapsed, swap expand/minimize icon
6087886Merge pull request 'feat(ui): themed global scrollbars (no more white trough on the dark/blue theme)' (#74) from feat/themed-scrollbars into main
1b8f9feMerge branch 'main' into feat/themed-scrollbars
7636ef9Merge pull request 'feat(kb): KB UI/UX overhaul - rendered markdown, three-pane reading view, tree nav' (#71) from feat/kb-ui-overhaul into main
cb43bb6Merge branch 'main' into feat/kb-ui-overhaul
af77f18Merge pull request 'fix(billing): show permission message when user lacks finance access' (#73) from fix/billing-finance-permission into main
4ffbaa3Merge branch 'main' into fix/billing-finance-permission
a89a714Merge pull request 'fix(ci): embed commit hash in OCI build (footer no longer 'unknown')' (#72) from fix/ci-embed-git-sha into main
aa5b8b3feat(ui): themed global scrollbars instead of the default white trough
f9933a5fix(kb): share rating state across the duplicated header slots
2c23255fix(billing): show a permission message when the user lacks finance access
4a8866dfix(ci): embed the commit hash in the OCI build so the footer is not "unknown"
e0f2d10style(kb): apply rustfmt line wrapping
7819378fix(components): rebind CollapsibleRail signal props to mut
cdb77d7feat(kb): live slug generation and Write/Preview tabs on the article form
9864474feat(kb): add collapsible category tree rail to the article list page
1d03438fix(kb): drop redundant PageHeader on the article detail view
44a3d47feat(kb): three-pane reading view with rendered markdown and header
4ddf4b9feat(kb): add rating bar, density toggle, and read-mode button
d467f35feat(components): add OverflowActions collapsing header cluster
f120ef8feat(components): add CollapsibleRail with persisted collapse and overlay
8b41cf9feat(kb): add breadcrumb and category/article tree-nav components
2605e16feat(kb): add category/article tree builder
13f7828feat(time): wire Time Tracking pages to the backend (MAPPS-124)
df96fd8feat(kb): add category breadcrumb path resolution
f5b576ffeat(kb): add localStorage pref helper for KB UI state
dc1f800feat(kb): add sanitized markdown render helper
51e5687docs(kb): implementation plan for the KB UI/UX overhaul
545378edocs(kb): collapse header items into overflow dropdown when too narrow
c50e7c5docs(kb): consolidate metadata onto article header, slim right rail to versions
57c5946docs(kb): add fullscreen read-mode toggle
b831d1fdocs(kb): refine spec - collapsible chevron rails + card-free article
540095bdocs(kb): design spec for KB UI/UX overhaul
00c6eb6Merge pull request 'feat(tickets): wire TicketDetailPage to real data (MAPPS-123)' (#68) from feat/mapps-123-wire-ticket-detail into main
4483882Merge 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
8a5083efix(calendar): send dispatch from/to as Z-suffixed UTC, not +00:00
fd1c2d2feat(tickets): wire TicketDetailPage to real ticket data (MAPPS-123)
88be09aMerge pull request 'feat(dev-sso): point the SPA OIDC issuer at bunyip-api' (#67) from feat/dev-sso-bunyip-issuer into main
0b5a9d0feat(dev-sso): point the SPA OIDC issuer at bunyip-api
7a11e2fMerge 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
8b1cf53fix(calendar): create/update/delete via /appointments, role-gate users fetch
9fa67b2Merge pull request 'fix(calendar): /auth/users path + Z-suffix appointment timestamps' (#65) from fix/calendar-fetch-paths-and-tz-encoding into main
e5a9269fix(calendar): /auth/users path + Z-suffix appointment timestamps
ee01e54Merge pull request 'fix(contacts): decode paginated envelope on company-detail Contacts and Sites cards' (#64) from fix/company-detail-cards-shape into main
0423fdcfix(contacts): decode paginated envelope on company-detail Contacts and Sites cards
18683aeMerge pull request 'feat(calendar): wire calendar + dispatch to the API (PMS-58 client)' (#62) from feat/pms-58-calendar-client into main
56778b8Merge branch 'main' into feat/pms-58-calendar-client
f40e8b5Merge pull request 'feat(sla): SLA management pages + ticket badges (PMS-106 client)' (#59) from feat/pms-106-sla-client into main
9f3ada3Merge branch 'main' into feat/pms-106-sla-client
b52fa0eMerge remote-tracking branch 'origin/main' into feat/pms-58-calendar-client
193c4f5Merge remote-tracking branch 'origin/main' into feat/pms-106-sla-client
c9e3decMerge pull request 'feat(kb): wire knowledge base + portal feed to the API (PMS-79 client)' (#63) from feat/pms-79-kb-client into main
a87e28cMerge remote-tracking branch 'origin/main' into feat/pms-79-kb-client
158069efeat(kb): wire knowledge base + portal feed to the API (PMS-79 client)
b404ec7Merge remote-tracking branch 'origin/main' into feat/pms-58-calendar-client
f00e03ffeat(calendar): wire calendar + dispatch to the API (PMS-58 client)
a335172Merge pull request 'feat(billing): wire billing pages to the API (PMS-33 client)' (#61) from feat/pms-33-billing-client into main
f81f086Merge branch 'main' into feat/pms-33-billing-client
9ddfb58Merge remote-tracking branch 'origin/main' into feat/pms-33-billing-client
3800fb4feat(billing): wire billing pages to the API (PMS-33 client)
e1232dfMerge pull request 'feat(contracts): wire contracts pages to the API (PMS-64 client)' (#60) from feat/pms-64-contracts-client into main
d53bd41Merge branch 'main' into feat/pms-64-contracts-client
a60431afeat(contracts): wire contracts pages to the API (PMS-64 client)
4d601c3feat(sla): SLA management pages + ticket badges (PMS-106 client)
5688270Merge pull request 'feat(audit): admin audit-log page (PMS-117 client)' (#58) from feat/pms-117-audit-client into main
2dfc60cfeat(audit): admin audit-log page (PMS-117 client)
2a22f26Merge pull request 'fix(tickets): use CompanyPicker on TicketNewPage so create works (MAPPS-122)' (#57) from fix/mapps-122-ticket-new-company-picker into main
3bce482fix(tickets): use CompanyPicker on TicketNewPage so create works (MAPPS-122)
c5aaf2cMerge pull request 'fix(crm): the CompanyType variant is 'client', not 'customer'' (#56) from feat/crm-ops into main
9af4835fix(crm): the CompanyType variant is 'client', not 'customer'
0600485Merge pull request 'feat/crm-ops' (#55) from feat/crm-ops into main
1aac724feat(crm): prefill CompanyPicker on /contacts/new from ?company_id= query
e896c2efeat(crm): server-side pagination, filters, and sort on Company + Contact lists
6b8e5dafeat(crm): inline add/edit/delete sites modal on the company detail page
77042f2Merge pull request 'style: cargo fmt --all (rewrap long format!/post_authed calls past 100 cols)' (#54) from feat/crm-ops into main
4556b33style: cargo fmt --all (rewrap long format!/post_authed calls past 100 cols)
817d506Merge pull request 'fix(crm): point CRM client paths at /contacts/companies and /contacts/contacts' (#53) from feat/crm-ops into main
e9e2ae6fix(crm): point CRM client paths at /contacts/companies and /contacts/contacts
c07d1f3Merge pull request 'feat/crm-ops' (#52) from feat/crm-ops into main
cd01007feat(crm): rewrite contact pages on live backend, add CompanyPicker, Edit, portal toggle
cd6aa78feat(crm): rewrite CompanyDetailPage on live backend data, add Edit + Delete
7799af5feat(crm): drop demo-rows fallback in Company + Contact lists
6ae5471Merge pull request 'feat(time-tracking): add byte-identical time-tracking DTOs from server' (#51) from feat/time-tracking-client-dtos into main
948e97dfeat(time-tracking): add byte-identical time-tracking DTOs from server
799c0edMerge pull request 'feat(oidc): kick off code+PKCE flow on /login instead of HubRedirect' (#50) from feat/start-authorize-on-sign-in into main
a6959f8feat(oidc): kick off code+PKCE flow on /login instead of HubRedirect
a1b06c2Merge pull request 'feat(oidc): derive issuer host from bunyip apex (bunyip-as-OP cutover)' (#49) from feat/bunyip-op-cutover into main
5918051feat(oidc): derive issuer host from bunyip apex (bunyip-as-OP cutover)
39f9a9dMerge pull request 'fix(ci): generate release notes from commits since previous tag' (#48) from fix/release-notes-since-prev-tag into main
664ca91fix(ci): generate release notes from commits since previous tag
768110dMerge 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
2ee900cfix(dev-sso): route mokosh-apps on nebula-secure via list-syntax labels
dfc95a6Merge pull request 'Rename to mokosh-apps + Phase-4 audit fixes' (#46) from feat/m1-vas into main
f6860ebfix(oidc): derive the API/issuer host as api.msp, not msp-api
aca886brefactor(m1): defer tickets + portal to dev-yousif (drop redundant F2/F3)
8822b77feat(m1): Phase-4 audit fixes - tenant-cache reactivity, portal wiring, list controls, OIDC nonce
0e6ad3crefactor: rename mokosh-client to mokosh-apps
2cf12e2feat(m1): vas sprint - gitignore For AI working dir
4c32e87Merge pull request 'fix(ci): skip cache-to on tag builds (MAPPS-121)' (#45) from fix/oci-cache-skip-tag-builds-MAPPS-121 into main
b9c0285fix(ci): skip cache-to on tag builds (MAPPS-121)
e322f98Merge 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
be127a0fix(ci): use $RUNNER_TEMP instead of hardcoded /tmp in claude-fix
db7260aMerge pull request 'SSO related' (#43) from feat/mfa-spa into main
285f0bdMerge remote-tracking branch 'origin/main' into feat/mfa-spa
834bb5dMerge remote-tracking branch 'origin/main' into feat/mfa-spa
0ca67b4Merge pull request 'feat(justfile): fj-driven create-release + group attrs (DEV-331)' (#42) from feat/justfile-fj-pr-create-DEV-331 into main
81ce881feat(justfile): fj-driven create-release + group attrs (DEV-331)
167f806refresh CurrentUser from /v1/auth/me after each token rotation
5993a1fMerge pull request 'feat: consolidate PMC client UI PRs (PMC-2..PMC-119)' (#41) from feat/pmc-merge into main
964f092ci(check): stub the generated CSS asset before cargo steps
f275f68fix(clippy): resolve all clippy warnings for the CI -D warnings gate
7943007style: cargo fmt --all across consolidated PMC branches
254a77dMerge remote-tracking branch 'origin/chore/claude-fix-workflow' into feat/pmc-merge
ee013f9Merge remote-tracking branch 'origin/feat/pmc-100-component-infra' into feat/pmc-merge
f9dc2b5Merge remote-tracking branch 'origin/feat/pmc-92-portal-ui' into feat/pmc-merge
aad7dd3Merge remote-tracking branch 'origin/feat/pmc-88-admin-ui' into feat/pmc-merge
b7e9abcMerge remote-tracking branch 'origin/feat/pmc-72-kb-ui' into feat/pmc-merge
56addb1Merge remote-tracking branch 'origin/feat/pmc-66-assets-ui' into feat/pmc-merge
2a66facMerge remote-tracking branch 'origin/feat/pmc-60-billing-ui' into feat/pmc-merge
841e94cMerge remote-tracking branch 'origin/feat/pmc-55-contracts-ui' into feat/pmc-merge
db0e9e2Merge remote-tracking branch 'origin/feat/pmc-50-calendar-dispatch' into feat/pmc-merge
641d674Merge remote-tracking branch 'origin/feat/pmc-41-contacts-ui' into feat/pmc-merge
91740c8Merge remote-tracking branch 'origin/feat/pmc-36-projects-ui' into feat/pmc-merge
e0e6959Merge remote-tracking branch 'origin/feat/pmc-31-time-tracking-ui' into feat/pmc-merge
dbe9a28Merge remote-tracking branch 'origin/feat/pmc-23-tickets-ui' into feat/pmc-merge
5a0792fMerge remote-tracking branch 'origin/fix/pmc-17-dashboard-scrollbar' into feat/pmc-merge
935e6e3Merge remote-tracking branch 'origin/feat/pmc-2-api-client-layer' into feat/pmc-merge
f19c612ci: add claude-fix workflow
de5747bfeat(components): optional data-testid prop on Button, Input, TableRow (PMC-111)
6002b25fix(detail-pages): route-param titles on Asset + Contract detail (PMC-104)
858fa21feat(portal): row nav, file input, invoice detail, KB links, route titles (PMC-95, PMC-96, PMC-97, PMC-98, PMC-99)
265c191fix(admin): hide decorative Add Tenant on TenantManagementPage (PMC-90)
ae79cacfeat(kb): scaffold article editor, linkify related, route-param title (PMC-73, PMC-75, PMC-77)
9e2594afeat(assets): implement AssetNewPage form (PMC-67)
a2960b2fix(assets): linkify Related Tickets sub-table on AssetDetailPage (PMC-71)
b424683feat(billing): implement InvoiceNewPage form (PMC-61)
78b6b61fix(billing): wire PaymentList invoice cells to InvoiceDetail (PMC-64)
bba764cfix(billing): use route param for InvoiceDetailPage title (PMC-65)
3128d64feat(contracts): implement ContractNewPage form (PMC-56)
78c9d85feat(calendar): render dispatch board appointments (PMC-53)
e42460dfix(contacts): detail-page titles, hide Edit, demote Open Tickets stat (PMC-46, PMC-47, PMC-48, PMC-49)
134947efix(projects): hide decorative Add Task on tasks page (PMC-39)
3945440fix(projects): route-param title + hide decorative Add Task on detail (PMC-40, PMC-38)
4d991a5feat(time): work_item navigation on TimeEntryListPage (PMC-35)
85473f9feat(tickets): wire Add Note modal submit + inputs (PMC-25)
7cf0d56feat(tickets): POST /tickets on TicketNewPage submit (PMC-27)
718289cfix(tickets): wire Log Time button to TimeEntryNew route (PMC-26)
1bb76fdfix(tickets): use route param for TicketDetailPage title (PMC-28)
404783efix(layout): show scrollbar affordance on short-viewport sidebars (PMC-22)
eaea8c6feat(admin): wire TenantManagementPage to /tenants with demo fallback (PMC-8)
86ddde4feat(client): wire ContactListPage to /contacts with demo fallback (PMC-7)
6ec701efeat(client): wire TicketListPage to /tickets with demo fallback (PMC-6)
a497bfdfeat(client): wire TableLoading + TableEmpty on companies list (PMC-11)
4262f7ffeat(client): typed ApiError + global toast surface (PMC-10)
9bb81c4Merge pull request 'fix(ci): replace setup-qemu-action with direct binfmt install' (#25) from fix/ci-qemu-no-toolcache into main
b5a0b04fix(ci): replace setup-qemu-action with direct binfmt install
325b248Merge pull request 'fix/milestone-1-review-findings' (#24) from fix/milestone-1-review-findings into main
1ef686cfix(update-banner): gate version fetch on admin status
42852b8fix(milestone-1): address multi-arch review findings
05ab2acMerge pull request 'feat(client): admin update-available banner' (#23) from feat/update-banner into main
8f54151Merge branch 'main' into feat/update-banner
0d07352feat(client): admin update-available banner
d328eedMerge pull request 'feat(oci): operator compose example + public registry mirror' (#22) from feat/operator-compose-and-public-mirror into main
ee4cfc7feat(oci): operator compose example + public registry mirror
1b64a87Merge pull request 'feat(oci): runtime config injection via entrypoint' (#21) from feat/runtime-config-injection into main
0bbf267feat(oci): runtime config injection via entrypoint
8b56a26Merge pull request 'feat(oci): multi-arch image build for amd64 + arm64' (#20) from feat/multi-arch-oci-build into main
e8f702fMerge pull request 'fix(contacts): pass usize to DataTable.total_items' (#19) from fix/contacts-total-items-usize into main
5b29870feat(oci): multi-arch image build for amd64 + arm64
4feabc5fix(contacts): pass usize to DataTable.total_items
d265914Merge pull request 'feat: runtime URL derivation + calendar wire + org-aware TopBar' (#18) from feat/runtime-url-derivation into main
de872bbdocs: milestone-1 handoff for the PSA Systems v0.1.0 cutoverDownloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
v0.2.0
StableSome checks failedBuild OCI container / Build and push mokosh-www image (push) Failing after 6m38sreleased this
2026-05-14 23:57:17 +02:00 | 1197 commits to main since this releaseChangelog
1e0e5a1Merge pull request 'Release v0.2.0' (#133) from release/v0.2.0 into main
471b01fRelease v0.2.0
e0af4afMerge pull request 'refactor(ui): remove dead components and finish portal/admin stub pages' (#129) from feat/mapps-142-remove-dead-components into main
3a700e1Merge remote-tracking branch 'origin/main' into feat/mapps-142-remove-dead-components
4634e2dMerge pull request 'chore(cleanup): remove orphaned modules, hooks, structs, and cfg(server) stubs' (#128) from chore/mapps-141-remove-dead-code into main
8c718bfMerge remote-tracking branch 'origin/main' into chore/mapps-141-remove-dead-code
9e94768Merge 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
200fa61Merge remote-tracking branch 'origin/main' into fix/mapps-137-role-parser-uuid-oidc-defects
fc84bc5Merge 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
6ceab49Merge branch 'main' into chore/mapps-138-contract-drift-local-subset
9f813e0Merge 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
f7a313fMerge branch 'main' into fix/mapps-139-page-component-correctness
304c1efMerge pull request 'feat(profile): prefill date format presets with live examples' (#127) from feat/mapps-144-prefilled-date-format into main
94f3b1cMerge branch 'main' into feat/mapps-144-prefilled-date-format
3095e5fMerge pull request 'chore(infra): clean up Dockerfiles, CI workflows, justfile, packaging' (#130) from chore/mapps-143-infra-ci-packaging-cleanup into main
3259456Merge branch 'main' into chore/mapps-143-infra-ci-packaging-cleanup
4f66fbfMerge pull request 'fix(projects): render zero Total Budget as "$0" not "$-0"' (#131) from fix/mapps-145-total-budget-negative-zero into main
b3ee98dMerge branch 'main' into fix/mapps-145-total-budget-negative-zero
c6f67d0Merge pull request 'fix(404): point Contact support link to real support address' (#132) from fix/mapps-147-404-support-mailto into main
cea7e9cMerge branch 'main' into fix/mapps-147-404-support-mailto
cac3e3bMerge 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
f907232Merge branch 'main' into fix/mapps-136-time-entry-ownership-guard
31d5fe4Merge pull request 'fix: pagination count 500s, order_by, and billing state (MAPPS-135)' (#122) from fix/mapps-135-pagination-billing-correctness into main
99c581dMerge branch 'main' into fix/mapps-135-pagination-billing-correctness
fb2747fMerge pull request 'refactor: consolidate duplicated helpers and envelope types' (#121) from refactor/mapps-140-consolidate-helpers into main
c062923fix(404): point Contact support link to real support address
06fbf70fix(projects): render zero Total Budget as "$0" not "$-0"
52b7a3bchore(infra): clean up Dockerfiles, CI workflows, justfile, packaging
6db9195refactor(ui): remove dead components and finish portal/admin stub pages
694eb47chore(cleanup): remove orphaned modules, hooks, structs, and cfg(server) stubs
612a8bffeat(profile): prefill date format presets with live examples
1332872fix(apps): correct page and component defects across tickets, KB, picker, SLA, models
1260e37chore(contracts): align local DTOs and document mokosh-server drift (MAPPS-138)
147adbefix(auth): close OIDC callback role/uuid drift and flow defects
b2971c4fix(time): enforce user_id ownership on time-entry stop/update/delete
2a2fb6cfix: pagination count 500s, order_by, and billing state (MAPPS-135)
ab903b6refactor: consolidate duplicated helpers and envelope types
1610f78Merge pull request 'feat(time): add H:MM duration display format option (PMS-265)' (#120) from feat/pms-265-duration-format-option into main
5b15312feat(time): add H:MM duration display format option (PMS-265)
10b593eMerge pull request 'feat(profile): custom date/time format builder with token preview' (#119) from feat/pms-254-custom-date-format-builder into main
f4fe14efeat(profile): custom date/time format builder with token preview
7aa5d4cMerge pull request 'feat(profile): preset date/time format picker + central formatter (frontend)' (#118) from feat/pms-253-date-format-preference-frontend into main
24df1bcfeat(profile): preset date/time format picker + central formatter (frontend)
e1071faMerge pull request 'feat(status): dedicated System Status page in the user menu (PMS-237)' (#117) from feat/mapps-237-system-status into main
065043afeat(status): dedicated System Status page in the user menu (PMS-237)
84bb63aMerge pull request 'fix(time): accept fractional hours in Log Time form (PMS-233)' (#116) from fix/mapps-233-fractional-hours into main
357f5cefix(time): accept fractional hours in Log Time form (PMS-233)
01babc9Merge pull request 'feat(team): admin invitations management UI (PMS-247)' (#115) from feat/mapps-247-invitations-ui into main
c72a235chore: drop accidentally-committed local CLAUDE.md from PMS-247 branch
456111dfeat(team): admin invitations management UI (PMS-247)
2392b7aMerge pull request 'feat(timesheets): submit-certification modal and withdraw action (PMS-183)' (#114) from feat/mapps-183-timesheet-withdraw into main
d40e5cbfeat(timesheets): submit-certification modal and withdraw action (PMS-183)
aa10d64Merge 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
4da1a9afeat(projects): show the project's own change history and edited marker (PMS-205)
4f8e284Merge pull request 'feat(history): show before/after content in change history (PMS-204)' (#112) from feat/mapps-204-history-content into main
e67522fMerge pull request 'fix(tickets): keep Created and SLA Due on one line (PMS-181)' (#105) from fix/mapps-181-ticket-detail-oneline into main
17ccfe7feat(history): show the before/after content of each change, not just who/when (PMS-204)
b961d22Merge pull request 'feat(assets): edit asset with change history and edited marker (PMS-185)' (#109) from feat/mapps-185-asset-edit-history into main
46b78e9Merge pull request 'feat(projects): edit project and tasks with change history (PMS-184)' (#111) from feat/mapps-184-task-edit-history into main
c438ee0Merge pull request 'feat(tickets): edit ticket description with change history (PMS-182)' (#110) from feat/mapps-182-ticket-edit-history into main
4836870feat(projects): edit project and tasks with change history and edited marker (PMS-184)
c8832dbfeat(tickets): edit ticket description with change history and edited marker (PMS-182)
b08fe9cfeat(assets): edit asset from detail with change history and edited marker (PMS-185)
7c56e2eMerge pull request 'docs: add 2026-06-06 platform audit to dev-docs/audits' (#108) from docs/add-platform-audit-2026-06-06 into main
6356b22docs: add 2026-06-06 platform audit to dev-docs/audits
bfd0b31Merge pull request 'feat(audit-log): show resolved names instead of UUIDs in the table + detail' (#107) from feat/audit-log-show-names into main
841e47afeat(audit-log): show resolved names instead of UUIDs in the table + detail
068fa8cMerge pull request 'feat(auth): forced name-onboarding gate for new Bunyip-JIT users' (#106) from feat/force-name-onboarding into main
e45216afeat(auth): forced name-onboarding gate for new Bunyip-JIT users
df3701ffix(tickets): keep Created and SLA Due values on one line (PMS-181)
9cab36dMerge 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
651e1b7fix(billing): mark all required fields on the New Invoice form (PMS-187)
315f194Merge pull request 'feat(billing): label payments by invoice number, not UUID (PMS-186)' (#103) from feat/mapps-186-billing-company-name into main
a4ee1f6feat(billing): label payments by invoice number, not UUID (PMS-186)
748458dMerge 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
91f5195Merge pull request 'fix(billing): friendly locked state for users without finance access (MAPPS-133)' (#101) from fix/mapps-133-billing-locked-state into main
75b43f4feat(billing): show company name (not UUID) on invoices and payments (PMS-186)
b678a94fix(billing): friendly locked state for users without finance access (MAPPS-133)
376a9b6Merge 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
3508e1efix(auth): source the user role from mokosh-server /api/v1/auth/me (PMS-158)
a033622Merge pull request 'feat(reports): add custom Report Builder UI (PMS-180)' (#99) from feat/mapps-custom-report-builder into main
2c56c20feat(reports): add custom Report Builder UI (MAPPS, PMS-180)
d546181Merge pull request 'feat(reports): wire Projects + Clients report detail views (PMS-179)' (#98) from feat/mapps-reports-project-client into main
827a691feat(reports): wire Projects + Clients report detail views (MAPPS, PMS-179)
85ac2d7Merge pull request 'feat(notifications): wire the top-bar bell to the in-app inbox' (#97) from feat/mapps-132-notification-bell into main
0d34618style(notifications): match rustfmt multiline Date::new form
2dde8b2style(notifications): satisfy rustfmt on the Date::new call
ed0ca02fix(notifications): close panel on outside click + show local-tz timestamps
0c07ecffeat(notifications): wire the top-bar bell to the in-app inbox
094ab8fMerge 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
f25be87fix(ci): run cache-warm step last so a stall can't delay the mirror
0d447c5fix(ci): decouple build-cache export so a registry stall can't hang the job
e0ad230Merge 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
7aef060fix(ui,auth): modals dim instead of blanking + role parser covers all variants
0ab6a14Merge 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
4725c8cfeat(auto-update): SPA polls _mokosh_config.js build_sha and reloads on mismatch
806ae77Merge pull request 'chore(build): bump rust-builder-glibc to v1.0.1' (#90) from chore/bump-rust-builder-glibc-v1.0.1 into main
90503beMerge branch 'main' into chore/bump-rust-builder-glibc-v1.0.1
32221a4Merge pull request 'feat(dashboard,reports): wire Dashboard + Reports summaries (MAPPS-130)' (#93) from feat/mapps-130-wire-dashboard-reports into main
5e0e380feat(dashboard,reports): wire Dashboard + Reports summaries to the backend (MAPPS-130)
348b82eMerge pull request 'feat(assets): wire Assets list, create, detail (CMDB) to the backend (MAPPS-129)' (#92) from feat/mapps-129-wire-assets into main
bbc9048feat(assets): wire Assets list, create, and detail (CMDB) to the backend (MAPPS-129)
4dc3a27Merge 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
841b73dfeat(projects,time): task creation, budget input, and project/task time logging (MAPPS-128)
9e2ed17chore(build): bump rust-builder-glibc to v1.0.1
079faa4Merge pull request 'feat(projects): wire Project detail + tasks pages (MAPPS-127)' (#89) from feat/mapps-127-wire-project-detail-tasks into main
67ec6e1feat(projects): wire Project detail + tasks pages to the backend (MAPPS-127)
906942fMerge pull request 'feat(projects): wire Projects list + create to the backend (MAPPS-126)' (#88) from feat/mapps-126-wire-projects into main
202b603feat(projects): wire Projects list + create to the backend (MAPPS-126)
d3a3610Merge pull request 'fix(tickets): show ticket number + title in detail header, not the UUID' (#87) from fix/mapps-ticket-detail-title into main
c98f941fix(tickets): show ticket number + title in detail header, not the UUID
fc56575Merge pull request 'feat(time): wire Timesheets page to the backend (MAPPS-125)' (#86) from feat/mapps-125-wire-timesheets into main
0807f92feat(time): wire Timesheets page to the backend (MAPPS-125)
4fe4e93Merge pull request 'feat(time): wire Time Tracking pages to the backend (MAPPS-124)' (#70) from feat/mapps-124-wire-time-tracking into main
4756da1Merge branch 'main' into feat/mapps-124-wire-time-tracking
05d0da0Merge pull request 'chore: Sync .gitignore' (#85) from chore/sync-gitignore into main
42cedf2chore: Sync .gitignore
3013822Merge pull request 'fix(oidc): persist tokens before navigating + router-push internal return_to' (#84) from fix/auth-callback-persists-tokens-before-nav into main
c75a6ebfix(oidc): persist tokens before navigating + router-push internal return_to
bfa5f30Merge pull request 'feat(profile): timezone is a select with curated IANA list + browser auto-detect' (#83) from feat/profile-timezone-dropdown into main
1d90100feat(profile): timezone is a select with curated IANA list + browser auto-detect
1647be4Merge pull request 'feat(profile): Bunyip identity strip + local Preferences (theme, time format, week start)' (#82) from feat/profile-bunyip-identity-preferences into main
83075c4feat(profile): Bunyip identity strip + local Preferences (theme, time format, week start)
c1eda0bMerge 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
04943c8fix(auth): logout lands on this SPA's origin home, not Bunyip's login
9084771Merge pull request 'feat(profile): add mokosh-side Profile page, rename hub link to Account Settings' (#80) from feat/mokosh-profile-page into main
18e2f77feat(profile): add mokosh-side Profile page, rename hub link to Account Settings
6d6cf52Merge pull request 'fix(auth): drop auth-signal writes from UserMenu logout closure' (#79) from fix/logout-no-signal-writes-pre-navigation into main
8272512fix(auth): drop auth-signal writes from UserMenu logout closure
78d86ceMerge pull request 'fix(auth): logout via bunyip OptionalUser endpoint, Profile -> /settings, synthesize memberships locally' (#78) from fix/logout-profile-memberships-noise into main
f076391fix(auth): logout via bunyip OptionalUser endpoint, Profile -> /settings, synthesize memberships locally
27dea24Merge pull request 'feat(kb): one-vote rating UI (reflect + toggle the user's vote)' (#77) from feat/kb-rating-toggle-client into main
cd48d84Merge branch 'main' into feat/kb-rating-toggle-client
f677ad5Merge pull request 'fix(layout): main sidebar nav scrolls when it overflows' (#76) from fix/main-sidebar-scroll into main
506e2d3fix(layout): make the main sidebar nav scroll when it overflows
52163c5feat(kb): one-vote rating UI - reflect and toggle the user vote
0592aabMerge pull request 'fix(kb): read-mode button (derive + minimize icon) and density paragraph spacing' (#75) from fix/kb-readmode-button into main
bbea601chore: sync Cargo.lock with the ammonia dependency
e58bd90feat(kb): density toggle also controls paragraph spacing, not just line height
1689cc0fix(kb): derive read-mode from both rails collapsed, swap expand/minimize icon
6087886Merge pull request 'feat(ui): themed global scrollbars (no more white trough on the dark/blue theme)' (#74) from feat/themed-scrollbars into main
1b8f9feMerge branch 'main' into feat/themed-scrollbars
7636ef9Merge pull request 'feat(kb): KB UI/UX overhaul - rendered markdown, three-pane reading view, tree nav' (#71) from feat/kb-ui-overhaul into main
cb43bb6Merge branch 'main' into feat/kb-ui-overhaul
af77f18Merge pull request 'fix(billing): show permission message when user lacks finance access' (#73) from fix/billing-finance-permission into main
4ffbaa3Merge branch 'main' into fix/billing-finance-permission
a89a714Merge pull request 'fix(ci): embed commit hash in OCI build (footer no longer 'unknown')' (#72) from fix/ci-embed-git-sha into main
aa5b8b3feat(ui): themed global scrollbars instead of the default white trough
f9933a5fix(kb): share rating state across the duplicated header slots
2c23255fix(billing): show a permission message when the user lacks finance access
4a8866dfix(ci): embed the commit hash in the OCI build so the footer is not "unknown"
e0f2d10style(kb): apply rustfmt line wrapping
7819378fix(components): rebind CollapsibleRail signal props to mut
cdb77d7feat(kb): live slug generation and Write/Preview tabs on the article form
9864474feat(kb): add collapsible category tree rail to the article list page
1d03438fix(kb): drop redundant PageHeader on the article detail view
44a3d47feat(kb): three-pane reading view with rendered markdown and header
4ddf4b9feat(kb): add rating bar, density toggle, and read-mode button
d467f35feat(components): add OverflowActions collapsing header cluster
f120ef8feat(components): add CollapsibleRail with persisted collapse and overlay
8b41cf9feat(kb): add breadcrumb and category/article tree-nav components
2605e16feat(kb): add category/article tree builder
13f7828feat(time): wire Time Tracking pages to the backend (MAPPS-124)
df96fd8feat(kb): add category breadcrumb path resolution
f5b576ffeat(kb): add localStorage pref helper for KB UI state
dc1f800feat(kb): add sanitized markdown render helper
51e5687docs(kb): implementation plan for the KB UI/UX overhaul
545378edocs(kb): collapse header items into overflow dropdown when too narrow
c50e7c5docs(kb): consolidate metadata onto article header, slim right rail to versions
57c5946docs(kb): add fullscreen read-mode toggle
b831d1fdocs(kb): refine spec - collapsible chevron rails + card-free article
540095bdocs(kb): design spec for KB UI/UX overhaul
00c6eb6Merge pull request 'feat(tickets): wire TicketDetailPage to real data (MAPPS-123)' (#68) from feat/mapps-123-wire-ticket-detail into main
4483882Merge 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
8a5083efix(calendar): send dispatch from/to as Z-suffixed UTC, not +00:00
fd1c2d2feat(tickets): wire TicketDetailPage to real ticket data (MAPPS-123)
88be09aMerge pull request 'feat(dev-sso): point the SPA OIDC issuer at bunyip-api' (#67) from feat/dev-sso-bunyip-issuer into main
0b5a9d0feat(dev-sso): point the SPA OIDC issuer at bunyip-api
7a11e2fMerge 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
8b1cf53fix(calendar): create/update/delete via /appointments, role-gate users fetch
9fa67b2Merge pull request 'fix(calendar): /auth/users path + Z-suffix appointment timestamps' (#65) from fix/calendar-fetch-paths-and-tz-encoding into main
e5a9269fix(calendar): /auth/users path + Z-suffix appointment timestamps
ee01e54Merge pull request 'fix(contacts): decode paginated envelope on company-detail Contacts and Sites cards' (#64) from fix/company-detail-cards-shape into main
0423fdcfix(contacts): decode paginated envelope on company-detail Contacts and Sites cards
18683aeMerge pull request 'feat(calendar): wire calendar + dispatch to the API (PMS-58 client)' (#62) from feat/pms-58-calendar-client into main
56778b8Merge branch 'main' into feat/pms-58-calendar-client
f40e8b5Merge pull request 'feat(sla): SLA management pages + ticket badges (PMS-106 client)' (#59) from feat/pms-106-sla-client into main
9f3ada3Merge branch 'main' into feat/pms-106-sla-client
b52fa0eMerge remote-tracking branch 'origin/main' into feat/pms-58-calendar-client
193c4f5Merge remote-tracking branch 'origin/main' into feat/pms-106-sla-client
c9e3decMerge pull request 'feat(kb): wire knowledge base + portal feed to the API (PMS-79 client)' (#63) from feat/pms-79-kb-client into main
a87e28cMerge remote-tracking branch 'origin/main' into feat/pms-79-kb-client
158069efeat(kb): wire knowledge base + portal feed to the API (PMS-79 client)
b404ec7Merge remote-tracking branch 'origin/main' into feat/pms-58-calendar-client
f00e03ffeat(calendar): wire calendar + dispatch to the API (PMS-58 client)
a335172Merge pull request 'feat(billing): wire billing pages to the API (PMS-33 client)' (#61) from feat/pms-33-billing-client into main
f81f086Merge branch 'main' into feat/pms-33-billing-client
9ddfb58Merge remote-tracking branch 'origin/main' into feat/pms-33-billing-client
3800fb4feat(billing): wire billing pages to the API (PMS-33 client)
e1232dfMerge pull request 'feat(contracts): wire contracts pages to the API (PMS-64 client)' (#60) from feat/pms-64-contracts-client into main
d53bd41Merge branch 'main' into feat/pms-64-contracts-client
a60431afeat(contracts): wire contracts pages to the API (PMS-64 client)
4d601c3feat(sla): SLA management pages + ticket badges (PMS-106 client)
5688270Merge pull request 'feat(audit): admin audit-log page (PMS-117 client)' (#58) from feat/pms-117-audit-client into main
2dfc60cfeat(audit): admin audit-log page (PMS-117 client)
2a22f26Merge pull request 'fix(tickets): use CompanyPicker on TicketNewPage so create works (MAPPS-122)' (#57) from fix/mapps-122-ticket-new-company-picker into main
3bce482fix(tickets): use CompanyPicker on TicketNewPage so create works (MAPPS-122)
c5aaf2cMerge pull request 'fix(crm): the CompanyType variant is 'client', not 'customer'' (#56) from feat/crm-ops into main
9af4835fix(crm): the CompanyType variant is 'client', not 'customer'
0600485Merge pull request 'feat/crm-ops' (#55) from feat/crm-ops into main
1aac724feat(crm): prefill CompanyPicker on /contacts/new from ?company_id= query
e896c2efeat(crm): server-side pagination, filters, and sort on Company + Contact lists
6b8e5dafeat(crm): inline add/edit/delete sites modal on the company detail page
77042f2Merge pull request 'style: cargo fmt --all (rewrap long format!/post_authed calls past 100 cols)' (#54) from feat/crm-ops into main
4556b33style: cargo fmt --all (rewrap long format!/post_authed calls past 100 cols)
817d506Merge pull request 'fix(crm): point CRM client paths at /contacts/companies and /contacts/contacts' (#53) from feat/crm-ops into main
e9e2ae6fix(crm): point CRM client paths at /contacts/companies and /contacts/contacts
c07d1f3Merge pull request 'feat/crm-ops' (#52) from feat/crm-ops into main
cd01007feat(crm): rewrite contact pages on live backend, add CompanyPicker, Edit, portal toggle
cd6aa78feat(crm): rewrite CompanyDetailPage on live backend data, add Edit + Delete
7799af5feat(crm): drop demo-rows fallback in Company + Contact lists
6ae5471Merge pull request 'feat(time-tracking): add byte-identical time-tracking DTOs from server' (#51) from feat/time-tracking-client-dtos into main
948e97dfeat(time-tracking): add byte-identical time-tracking DTOs from server
799c0edMerge pull request 'feat(oidc): kick off code+PKCE flow on /login instead of HubRedirect' (#50) from feat/start-authorize-on-sign-in into main
a6959f8feat(oidc): kick off code+PKCE flow on /login instead of HubRedirect
a1b06c2Merge pull request 'feat(oidc): derive issuer host from bunyip apex (bunyip-as-OP cutover)' (#49) from feat/bunyip-op-cutover into main
5918051feat(oidc): derive issuer host from bunyip apex (bunyip-as-OP cutover)
39f9a9dMerge pull request 'fix(ci): generate release notes from commits since previous tag' (#48) from fix/release-notes-since-prev-tag into main
664ca91fix(ci): generate release notes from commits since previous tag
768110dMerge 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
2ee900cfix(dev-sso): route mokosh-apps on nebula-secure via list-syntax labels
dfc95a6Merge pull request 'Rename to mokosh-apps + Phase-4 audit fixes' (#46) from feat/m1-vas into main
f6860ebfix(oidc): derive the API/issuer host as api.msp, not msp-api
aca886brefactor(m1): defer tickets + portal to dev-yousif (drop redundant F2/F3)
8822b77feat(m1): Phase-4 audit fixes - tenant-cache reactivity, portal wiring, list controls, OIDC nonce
0e6ad3crefactor: rename mokosh-client to mokosh-apps
2cf12e2feat(m1): vas sprint - gitignore For AI working dir
4c32e87Merge pull request 'fix(ci): skip cache-to on tag builds (MAPPS-121)' (#45) from fix/oci-cache-skip-tag-builds-MAPPS-121 into main
b9c0285fix(ci): skip cache-to on tag builds (MAPPS-121)
e322f98Merge 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
be127a0fix(ci): use $RUNNER_TEMP instead of hardcoded /tmp in claude-fix
db7260aMerge pull request 'SSO related' (#43) from feat/mfa-spa into main
285f0bdMerge remote-tracking branch 'origin/main' into feat/mfa-spa
834bb5dMerge remote-tracking branch 'origin/main' into feat/mfa-spa
0ca67b4Merge pull request 'feat(justfile): fj-driven create-release + group attrs (DEV-331)' (#42) from feat/justfile-fj-pr-create-DEV-331 into main
81ce881feat(justfile): fj-driven create-release + group attrs (DEV-331)
167f806refresh CurrentUser from /v1/auth/me after each token rotation
5993a1fMerge pull request 'feat: consolidate PMC client UI PRs (PMC-2..PMC-119)' (#41) from feat/pmc-merge into main
964f092ci(check): stub the generated CSS asset before cargo steps
f275f68fix(clippy): resolve all clippy warnings for the CI -D warnings gate
7943007style: cargo fmt --all across consolidated PMC branches
254a77dMerge remote-tracking branch 'origin/chore/claude-fix-workflow' into feat/pmc-merge
ee013f9Merge remote-tracking branch 'origin/feat/pmc-100-component-infra' into feat/pmc-merge
f9dc2b5Merge remote-tracking branch 'origin/feat/pmc-92-portal-ui' into feat/pmc-merge
aad7dd3Merge remote-tracking branch 'origin/feat/pmc-88-admin-ui' into feat/pmc-merge
b7e9abcMerge remote-tracking branch 'origin/feat/pmc-72-kb-ui' into feat/pmc-merge
56addb1Merge remote-tracking branch 'origin/feat/pmc-66-assets-ui' into feat/pmc-merge
2a66facMerge remote-tracking branch 'origin/feat/pmc-60-billing-ui' into feat/pmc-merge
841e94cMerge remote-tracking branch 'origin/feat/pmc-55-contracts-ui' into feat/pmc-merge
db0e9e2Merge remote-tracking branch 'origin/feat/pmc-50-calendar-dispatch' into feat/pmc-merge
641d674Merge remote-tracking branch 'origin/feat/pmc-41-contacts-ui' into feat/pmc-merge
91740c8Merge remote-tracking branch 'origin/feat/pmc-36-projects-ui' into feat/pmc-merge
e0e6959Merge remote-tracking branch 'origin/feat/pmc-31-time-tracking-ui' into feat/pmc-merge
dbe9a28Merge remote-tracking branch 'origin/feat/pmc-23-tickets-ui' into feat/pmc-merge
5a0792fMerge remote-tracking branch 'origin/fix/pmc-17-dashboard-scrollbar' into feat/pmc-merge
935e6e3Merge remote-tracking branch 'origin/feat/pmc-2-api-client-layer' into feat/pmc-merge
f19c612ci: add claude-fix workflow
de5747bfeat(components): optional data-testid prop on Button, Input, TableRow (PMC-111)
6002b25fix(detail-pages): route-param titles on Asset + Contract detail (PMC-104)
858fa21feat(portal): row nav, file input, invoice detail, KB links, route titles (PMC-95, PMC-96, PMC-97, PMC-98, PMC-99)
265c191fix(admin): hide decorative Add Tenant on TenantManagementPage (PMC-90)
ae79cacfeat(kb): scaffold article editor, linkify related, route-param title (PMC-73, PMC-75, PMC-77)
9e2594afeat(assets): implement AssetNewPage form (PMC-67)
a2960b2fix(assets): linkify Related Tickets sub-table on AssetDetailPage (PMC-71)
b424683feat(billing): implement InvoiceNewPage form (PMC-61)
78b6b61fix(billing): wire PaymentList invoice cells to InvoiceDetail (PMC-64)
bba764cfix(billing): use route param for InvoiceDetailPage title (PMC-65)
3128d64feat(contracts): implement ContractNewPage form (PMC-56)
78c9d85feat(calendar): render dispatch board appointments (PMC-53)
e42460dfix(contacts): detail-page titles, hide Edit, demote Open Tickets stat (PMC-46, PMC-47, PMC-48, PMC-49)
134947efix(projects): hide decorative Add Task on tasks page (PMC-39)
3945440fix(projects): route-param title + hide decorative Add Task on detail (PMC-40, PMC-38)
4d991a5feat(time): work_item navigation on TimeEntryListPage (PMC-35)
85473f9feat(tickets): wire Add Note modal submit + inputs (PMC-25)
7cf0d56feat(tickets): POST /tickets on TicketNewPage submit (PMC-27)
718289cfix(tickets): wire Log Time button to TimeEntryNew route (PMC-26)
1bb76fdfix(tickets): use route param for TicketDetailPage title (PMC-28)
404783efix(layout): show scrollbar affordance on short-viewport sidebars (PMC-22)
eaea8c6feat(admin): wire TenantManagementPage to /tenants with demo fallback (PMC-8)
86ddde4feat(client): wire ContactListPage to /contacts with demo fallback (PMC-7)
6ec701efeat(client): wire TicketListPage to /tickets with demo fallback (PMC-6)
a497bfdfeat(client): wire TableLoading + TableEmpty on companies list (PMC-11)
4262f7ffeat(client): typed ApiError + global toast surface (PMC-10)
9bb81c4Merge pull request 'fix(ci): replace setup-qemu-action with direct binfmt install' (#25) from fix/ci-qemu-no-toolcache into main
b5a0b04fix(ci): replace setup-qemu-action with direct binfmt install
325b248Merge pull request 'fix/milestone-1-review-findings' (#24) from fix/milestone-1-review-findings into main
1ef686cfix(update-banner): gate version fetch on admin status
42852b8fix(milestone-1): address multi-arch review findings
05ab2acMerge pull request 'feat(client): admin update-available banner' (#23) from feat/update-banner into main
8f54151Merge branch 'main' into feat/update-banner
0d07352feat(client): admin update-available banner
d328eedMerge pull request 'feat(oci): operator compose example + public registry mirror' (#22) from feat/operator-compose-and-public-mirror into main
ee4cfc7feat(oci): operator compose example + public registry mirror
1b64a87Merge pull request 'feat(oci): runtime config injection via entrypoint' (#21) from feat/runtime-config-injection into main
0bbf267feat(oci): runtime config injection via entrypoint
8b56a26Merge pull request 'feat(oci): multi-arch image build for amd64 + arm64' (#20) from feat/multi-arch-oci-build into main
e8f702fMerge pull request 'fix(contacts): pass usize to DataTable.total_items' (#19) from fix/contacts-total-items-usize into main
5b29870feat(oci): multi-arch image build for amd64 + arm64
4feabc5fix(contacts): pass usize to DataTable.total_items
d265914Merge pull request 'feat: runtime URL derivation + calendar wire + org-aware TopBar' (#18) from feat/runtime-url-derivation into main
de872bbdocs: milestone-1 handoff for the PSA Systems v0.1.0 cutoverDownloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)