Repository navigation
4.971.0
Summary
Implements RG-T151, introducing a feature-flagged modern home dashboard while preserving the existing classic dashboard experience.
Modern dashboard
- Adds the
Dashboard.Modernfeature flag, seeded off by default and evaluated per department. - Replaces the home page with a customizable widget board when enabled.
- Supports:
- Drag-and-drop and keyboard widget reordering.
- Widget resizing from XS through Full.
- Widget-specific settings and department-scoped option lists.
- Up to five boards per member, with the Home board protected from deletion.
- Server-side persistence per member and department.
- Optimistic concurrency handling with conflict resolution.
- Compact and Comfortable density modes.
- Wall-display mode.
- Live updates where supported, with polling fallbacks.
- Classic-dashboard fallback when JavaScript is unavailable or the modern dashboard cannot load.
Dashboard templates
- Adds department dashboard templates for department administrators.
- Templates can target:
- Everyone.
- A personnel role.
- A group.
- Adds priority-based template resolution and a department-default template.
- Preserves customized member boards when templates change.
- Adds limits of 25 templates per department and 40 widgets per board.
- Records template saves and deletions as
DashboardTemplateChangedsystem audit events.
Widget catalog and module coverage
Adds a catalog and provider model for dashboard widgets across Operations, Personnel, Map & Weather, Communications, Planning, Readiness, Records, Workforce & Business, Incident Back Office, Intelligence, and Administration.
Widgets expose module-consistent data and access behavior for areas including:
- Active, pending, scheduled, and awaiting-resource calls.
- Unit status, alerts, summaries, routes, and incident command.
- Personnel status, staffing, and status boards.
- Calendar, shifts, trainings, documents, notes, links, and contacts.
- Checklists, work orders, inventory, and certifications.
- Records queues, analytics, prevention, hydrants, investigations, legal holds, and NERIS.
- Deployments, time reports, invoicing, bids, contracts, cost recovery, and workforce reporting.
- Chat, messaging, communication tests, Push-To-Talk, weather, maps, AI dispatch triage, and administrative health information.
Security and entitlement handling
- Reuses module policies, permissions, feature flags, add-on entitlements, visibility rules, and module switches when determining widget availability.
- Adds locked gallery cards for department administrators when an offered paid add-on is not held.
- Keeps add-on widgets read-only or hidden according to the associated module behavior when an entitlement lapses.
- Adds Advanced Data Protection handling for protected dashboard values:
- Protected values are hidden by default.
- Reveals use the existing step-up verification flow.
- Reveals are audited.
- Wall display never reveals protected data.
- Protected values are represented using dashboard-specific protected-value DTOs rather than exposing redaction markers or encrypted envelopes.
Supporting services and persistence
- Adds
UserDashboardsandDepartmentDashboardTemplatespersistence models, repositories, and SQL Server/PostgreSQL migrations. - Adds dashboard layout validation, schema handling, size validation, setting allow-lists, limits, and unknown-widget preservation.
- Adds dashboard entitlement, board resolution, option-source, widget data, and provider contracts.
- Adds supporting aggregate reads for calls, chat, workflows, inventory, documents, deployments, time reports, imports, hydrants, security posture, and other widget data.
- Extracts personnel status-board construction into a shared service used by both the classic dashboard and the modern personnel board widget.
- Extends SignalR/eventing support for dashboard-relevant staffing, checklist, unit alert, outstanding-resource, and incident-command updates.
- Adds localized dashboard chrome and widget resources for the supported languages.
Additional fix
- Changes route lookup caching so successful routes remain cached for 30 days, while failed lookups are retried after a short failure window instead of retaining the failure for the full cache duration.
Testing
Adds coverage for dashboard catalog validation, entitlement and add-on gating, layout normalization, board/template resolution, concurrency, persistence, widget providers, protected data behavior, localization completeness, controller security attributes, and route lookup caching.