0.1.10 admin naming and agency-scoped reporting updates
Version 0.1.10Build 2026.08.11.1August 11, 2026
AdminReportsRBACAgencyDocumentationRelease
Pre-production update focused on admin navigation naming, agency-scoped reporting, report access hardening, and current handoff documentation.
Admin navigation naming
- Renamed Data Sources to Email/Data Sources across admin navigation, section headings, help links, help content, and related mapping copy.
- Renamed Email Intake to Email Mapping across admin navigation, section headings, help links, action summaries, and related intake rule copy.
- Renamed Email Delivery to Outbound Email Setup across admin navigation, page headings, help content, action summaries, and Email Mapping forwarding copy.
- Moved Outbound Email Setup from Administration to Configuration in the admin landing page and admin help index.
- Corrected Feeds & Intake back-navigation defaults for Email/Data Sources and Email Mapping.
Agency-scoped reporting
- Added the Agency user role for report-only access scoped by assigned source agency values.
- Added Agency role support to User Management, RBAC, report filtering, CSV export, admin badge labels, help content, and current project documentation.
- Populated Agency assignment choices from distinct source agency values already seen in ingested unit records.
- Added recent matching-unit previews for saved Agency users so administrators can verify scope before relying on the login.
- Validated Agency assignments server-side so Agency users can only be assigned source agency values present in feed data.
Report access
- Hid and blocked ETA Actual vs Predicted and Ingest Exceptions for Hospital, Reports, and Agency users.
- Kept Hospital Volumes, Turnaround Performance, and Volumes By Call Info available to scoped report users.
- Applied the same report restrictions to CSV export so direct URL access follows the visible report selector.
Validation and runtime
- Regenerated Prisma Client after adding the Agency role and scope model.
- Applied the Agency migration to the local Docker Postgres database.
- Restarted the local system worker container after the database migration.
- Validated with lint, focused RBAC/report tests, and a production build.
Release metadata
- Advanced source-controlled release metadata to 0.1.10 and build 2026.08.11.1.
- Aligned package metadata, app version metadata, changelog data, and handoff documentation with the 0.1.10 release target.
0.1.9 light-mode accessibility and admin usability updates
Version 0.1.9Build 2026.08.10.1August 10, 2026
AccessibilityAdminLight ModeBrandingDocumentationRelease
Pre-production update focused on light-mode accessibility, admin card/pill/button readability, Hospital Management help, Branding upload layout, and clearer Email Delivery KPI wording.
Light-mode accessibility
- Improved light-mode contrast for admin text, semantic status colors, placeholder text, file picker controls, footer text, and shared primary, secondary, and ghost buttons.
- Improved public dashboard feed-status popover readability and alert/status pill contrast in light mode.
- Aligned Administration and Reporting cards, tables, metric tiles, pills, notices, and action buttons with scoped light-mode surface treatments.
- Improved Global Admin-only changelog note panels so internal release notes remain readable in light mode.
- Improved changelog release chips, tags, release navigation pills, and Read/Hide controls so they remain visible in light mode.
Admin navigation and controls
- Updated top-level admin group tabs and section subtabs so selected, inactive, and hover states have ADA-safer light-mode contrast.
- Aligned subtab color treatment across Operations, Feeds & Intake, Configuration, Administration, and Reporting.
- Improved light-mode visibility for System Settings timezone controls, About page editor buttons, Alert Mapping controls, Email Intake tabs, Email Delivery controls, Hospital tabs, and Mapping tabs.
Hospital Management
- Fixed the System Bucket status pill so it stays readable and no longer wraps awkwardly in the status column.
- Improved light-mode readability for the Other Destinations banner and listed alias pills in expanded hospital rows.
- Expanded Hospital Management help to explain list columns, status values, editable hospital fields, aliases, thresholds, alert visibility, email recipients, activity controls, and Other Destinations behavior.
Branding
- Moved Upload Logo into the same row as the file picker so it sits beside the selected file name or no-file-selected text.
- Improved light-mode visibility for Branding buttons, logo upload controls, and file picker pills.
Routing, Administration, and Reporting
- Improved light-mode readability for Routing / ETA readiness cards, KPI tiles, status pills, and action cards.
- Improved light-mode card, table, metric, notice, and button visibility across User Management, Audit Logs, Database Maintenance, Email Delivery, and Reports.
- Renamed the Email Delivery KPI from Active Breaches to Open Trigger Conditions so the value is clearer at a glance.
Release metadata
- Advanced source-controlled release metadata to `0.1.9` and build `2026.08.10.1`.
- Aligned package metadata, app version metadata, changelog data, and handoff documentation with the 0.1.9 release target.
- Updated 0.1.9 changelog notes to include the final changelog readability and auth build-warning cleanup changes.
Build cleanup
- Removed the Next.js production build warnings about `jose` CompressionStream and DecompressionStream usage in the Edge Runtime.
0.1.8 dashboard readability, feed-status privacy, and mapper preview updates
Version 0.1.8Build 2026.05.24.1May 24, 2026
DashboardResponsivePrivacyMappingsRelease
Pre-production update focused on public dashboard readability, feed-status privacy, and clearer Alert XML Mapping previews.
Dashboard readability
- Expanded the public dashboard content width for 1920x1080 viewing.
- Adjusted large-screen typography so hospital names and unit rows remain easier to read from operational viewing distance.
- Increased hospital card table spacing and row readability without changing dashboard data logic.
- Improved spacing between hospital cards so primary hospital sections scan more clearly.
- Changed constrained dashboard tables so Incident Number hides earlier as hospital cards shrink.
- Gave the Duration column more protected space so longer ETA and arrival-pending labels do not run off the card.
Responsive table behavior
- Prepared dashboard tables to preserve Unit, Call Info, Arrival, and Duration readability as available width shrinks.
- Changed Incident Number to drop out before the hospital card becomes too narrow for the core no-wrap columns.
- Protected Arrival and Duration columns from wrapping or running off the card in constrained layouts.
Feed-status privacy
- Redacted hostnames, IP addresses, and ports from public dashboard feed-status connection errors.
- Kept the public connection error visible enough to identify the failure state without exposing the remote endpoint.
Alert XML Mapping
- Changed the Alert Mapping preview to show mapped sample data instead of repeating the selected XML field path.
- Kept field path selection in Step 2 while making Step 4 a true mapped-output preview.
Release metadata
- Advanced source-controlled release metadata to `0.1.8` and build `2026.05.24.1`.
- Aligned package metadata and public changelog data with the 0.1.8 release.
0.1.7 dashboard readability and responsive table preparation
Version 0.1.7Build 2026.05.19.1May 19, 2026
DashboardResponsiveReadabilityRelease
Pre-production update focused on making the public dashboard more readable at the recommended 1920x1080 wallboard resolution while preserving constrained-width table behavior.
Dashboard readability
- Expanded the public dashboard content width for 1920x1080 viewing.
- Adjusted large-screen typography so hospital names and unit rows remain easier to read from operational viewing distance.
- Increased hospital card table spacing and row readability without changing dashboard data logic.
- Improved spacing between hospital cards so primary hospital sections scan more clearly.
Responsive table behavior
- Prepared dashboard tables to preserve Unit, Call Info, Arrival, and Duration readability as available width shrinks.
- Changed Incident Number to drop out only when the hospital card becomes too narrow for the core no-wrap columns.
- Protected Arrival and Duration columns from wrapping or running off the card in constrained layouts.
Release metadata
- Advanced source-controlled release metadata to `0.1.7` and build `2026.05.19.1`.
- Aligned package metadata and active handoff documentation for a clean next-session pickup.
0.1.6 alert pill behavior and deployment-readiness updates
Version 0.1.6Build 2026.05.18.2May 18, 2026
AlertsReleaseDashboardDocumentation
Pre-production update focused on hospital card alert interaction reliability, deployment metadata consistency, and release communication.
Alerts
- Hospital alert pills now remain clickable when an active hospital alert has no message content.
- Hospital alert chips now continue using alert tone styling while an active alert is present, even with empty descriptions.
- Updated alert description rendering to keep the dashboard indicator interaction stable under production deployment.
Changelog and release metadata
- Updated source-controlled release version/build target to `0.1.6` and `2026.05.18.2`.
- Aligned changelog route data with current release work so `/changelog` shows the latest in-progress release entry.
0.1.5 admin settings, alert editing, and footer metadata updates
Version 0.1.5Build 2026.05.18.1May 18, 2026
SettingsAlertsAboutRoutingHelpRelease
Pre-production update focused on admin settings organization, Routing / ETA readability, configurable audit retention, editable About page content, alert terminology, shared formatting controls, modal alert editing, help accuracy, persistent admin back navigation, and footer-based release metadata.
Database Maintenance
- Added configurable audit-log retention days to Database Maintenance.
- Kept the default audit-log retention at 365 days for existing saved settings.
- Applied the configured audit-log retention window to cleanup preview counts, manual cleanup, queued cleanup jobs, and daily worker audit cleanup.
- Added regression coverage for legacy Database Maintenance settings and custom audit-log cutoff calculation.
Routing / ETA
- Restructured Routing / ETA to reduce scrolling and improve scanability.
- Consolidated routing state into a compact Readiness card with primary ETA readiness metrics and secondary provider, test, and job status.
- Kept settings and operational actions below Readiness, with routing data settings and job logs collapsed.
System Settings
- Reorganized System Settings into subject tabs for System Timezone, About Page, and Alert Color Settings.
- Moved Alert Color Settings out of Alerts and into System Settings.
- Renamed the public-about settings tab to About Page and removed the old Operations label from the time-zone settings card.
- Changed System Timezone from a datalist text field to a searchable themed dropdown.
- Expanded the timezone selector to U.S. IANA time zones, including regional and territory zones.
About Page
- Replaced the single optional About agency section with editable public About page cards.
- Converted the previous fixed About content into default editable cards when no structured About content has been saved.
- Added safe formatting controls for editable About card bodies, including restricted links.
- Moved version, build, and changelog access out of the About page and into the site footer.
Alerts
- Renamed the visible Normal alert type label to Advisory while keeping existing stored alert values unchanged.
- Changed global alert subjects to plain text.
- Replaced marker-based global alert description formatting with a toolbar editor for global alert descriptions only.
- Changed existing alert editing from inline expanded forms to edit modals that match the Add Alert workflow.
- Kept hospital alert descriptions as plain text.
Shared Formatting
- Reused the same formatted-text editor foundation for About card bodies and global alert descriptions.
- Kept About-specific links and extra-small text enabled while keeping global alert descriptions more restricted.
- Added regression coverage for the shared formatted HTML sanitizer.
Release Metadata
- Updated the source-controlled release version to 0.1.5.
- Updated the source-controlled build number to 2026.05.18.1.
- Added the changelog link to the footer next to the version and build text.
- Rebuilt the changelog as a navigable release browser with collapsible releases, category chips, a release index, and show-all controls.
- Show Global Admin-only detailed notes when a Global Admin is signed in while sending only sanitized public notes to all other users.
Help and Navigation
- Reviewed admin help pages and on-page notes against the current application behavior.
- Updated help content for Manager access, Alert Color Settings, footer release metadata, alert mapping profiles, guarded parser paths, OSRM data locations, audit coverage, and report scope.
- Added persistent admin Back controls so section pages return to the originating admin group even after save redirects.
- Preserved return context while switching System Settings and XML Mappings tabs.
Data Sources
- Preserved the SFTP connection timestamp in the final last-poll summary so the Data Sources card shows the last successful connection instead of Never after a completed poll.
Alert Color Settings
- Replaced native browser color inputs with a themed custom color picker matching the app pop-out surface treatment.
- Added a rectangular saturation and brightness selector, hue slider, direct hex entry, Apply and Cancel behavior, and per-alert revert-to-default action.
- Kept default colors at #22d3ee, #ffd500, and #ff5900.
- Preserved the existing alert.colorSettings storage and dashboard/admin alert color behavior.
0.1.3 configurable alert colors and changelog polish
Version 0.1.3Build 2026.05.17.2May 17, 2026
AlertsHospitalsChangelog
Pre-production update focused on making alert tone colors configurable, tightening Hospital Management layout, and aligning the public changelog layout with the rest of the application.
Alert display
- Added configurable colors for Informational, Advisory, and Critical alert tones.
- Applied configured alert colors to public global alert banners, hospital alert status chips, and admin alert type badges.
- Added a compact Alert Colors configuration panel on the Alerts admin page with small color swatches and live preview pills.
- Kept existing alert records unchanged while storing the shared color settings separately.
Public changelog
- Moved the Back to About link into the changelog page header so it aligns with other top-right page actions.
Hospital management
- Changed hospital records to a compact expandable row layout with status, coordinate, alias, and manage columns.
- Added a coordinate readiness badge so mapped and unmapped hospitals are easier to scan.
- Moved Add Hospital into a collapsed panel to keep the hospital list focused during routine edits.
0.1.2 dashboard polish, alert mapping, and ingest stability
Version 0.1.2Build 2026.05.17.1May 17, 2026
DashboardMappingsIngest
Pre-production update focused on dashboard alert usability, clearer admin mapping tools, source-specific alert mapping profiles, and safer SFTP ingest behavior.
Dashboard
- Changed global alert details from inline expansion to a compact pop-out panel anchored to the selected alert.
- Made global alert detail panels close when the user clicks anywhere on the screen.
- Removed repeated alert subject text from the global alert detail panel.
Admin usability
- Unified help bubble colors with the global alert pop-out style in dark and light themes.
- Changed the XML Mapping sample-file control so only the Browse button opens the file picker.
- Made the Alert Mapping tab a guided workflow with sample XML loading, click-to-assign fields, source usage, scope mode, and preview.
Alert mapping profiles
- Added multiple named alert mapping profiles for different XML sources.
- Added Data Source assignment for alert mapping profiles so hospital and global alert feeds can use different mappings.
- Kept compatibility with the previous single alert mapping configuration.
Ingest stability
- Ensured production bootstrap creates or repairs the default incident XML mapping profile before web and worker services start.
- Added SFTP parser-readiness checks before remote files are listed, downloaded, parsed, or moved.
- Changed parser/configuration readiness problems to source-level poll failures so remote SFTP files remain available for retry.
- Kept the default incident XML mapping self-heal path as a defensive fallback.
Release metadata
- Moved pre-production versioning to the 0.x.x series.
- Recorded 0.0.0 as the initial internal development baseline.
- Set the current release to 0.1.2.
0.1.1 audit, Manager role, and dashboard display updates
Version 0.1.1Build 2026.05.15.2May 15, 2026
AuditRBACDashboardReports
Pre-production update focused on broader audit coverage, bounded audit-log retention, Manager access, dashboard duration display, and report tooltip containment.
Authentication and access
- Added the Manager user role.
- Managers have global access to Alerts, Reports, KPI Settings, Unit Maintenance, User Management, and Audit Logs.
- Managers are blocked from Feeds & Intake, Hospitals, Branding, Routing / ETA, System Settings, Database Maintenance, and Email Delivery.
- Managers cannot assign or manage Global Admin users.
Dashboard
- Changed Live Average Turnaround and Overall Average Turnaround KPI values to display as HH:MM:SS.
- Changed hospital-card average turnaround durations to show MM:SS below one hour and HH:MM:SS once hours apply.
Reports
- Changed report metric help bubbles to stay fully visible inside the browser window.
Audit and retention
- Expanded audit logging for administrative changes across alerts, hospitals, data sources, settings, mappings, database maintenance, Email Intake, Email Delivery, branding, and routing.
- Added audit logging for audit log, incident, and report CSV exports.
- Added a one-year rolling retention limit for audit log records.
- Included audit log cleanup counts in Database Maintenance cleanup and preview.
0.1.0 operational fixes and production acceptance
Version 0.1.0Build 2026.05.15.1May 15, 2026
ProductionAuthReportsETA
Pre-production update focused on production readiness, role hardening, global alert usability, reports, ETA diagnostics, and operational maintenance.
Dashboard and alerts
- Added source-controlled About/footer version and build tracking.
- Added safe formatting for global alert subjects and descriptions: bold, italic, small text, large text, and line breaks.
- Changed public global alert banners to show subject-only while collapsed.
- Added click-to-expand global alert descriptions when a description exists.
- Changed collapsed global alert banners to use less vertical space.
- Made alert descriptions optional for global and hospital alerts.
- Reduced the dashboard title and subtitle font sizes.
- Improved dashboard card formatting for phone portrait screens.
- Changed dashboard unit ordering so inbound units show first by earliest expected arrival, followed by arrived units newest first.
- Added the public About page Agency Information section controlled from System Settings.
- Added fixed About page credit for Thurston County Medic One.
- Added a public changelog page linked from About.
- Added reserved Other Destinations dashboard bucket for unmapped transport destinations.
Authentication and access
- Added the GLOBAL_ADMIN role.
- Added migrations that move existing ADMIN users into Global Admin.
- Kept legacy ADMIN as a full-access compatibility role during migration.
- Removed seeded and phase guidance from the login page.
- Added My Account for self-service email updates and password changes.
- Changed User Management to a compact expandable table.
- Added Global Admin user editing for email, role, hospital scope, and password reset.
- Improved session validation so account changes take effect more quickly.
- Added additional login abuse protection.
Routing and ETA
- Added Routing / ETA diagnostics to the admin UI.
- Updated the default production routing service configuration.
- Added OSRM connection testing with stored latest diagnostic result.
- Added active and inbound ETA coordinate coverage checks.
- Added hospital missing-coordinate visibility.
- Added active inbound ETA recalculation after OSRM settings or routing data are fixed.
- Added UnitEtaPrediction history for comparing predicted ETA against actual arrival.
- Added ETA Actual vs Predicted report multiplier hints, median hint, and P75 hint.
- Changed ETA multiplier display to two decimals so values such as 0.95 stay visible.
Reports
- Added canned Reports under /admin/reports.
- Added Hospital Volumes report.
- Added Turnaround Performance report.
- Added Volumes By Call Info report.
- Added ETA Actual vs Predicted report.
- Added Ingest Exceptions report.
- Added date range and hospital filters.
- Added scoped CSV export at /admin/reports/export.csv.
- Constrained hospital-scoped report users to assigned hospitals.
- Hid global ingest exception details from hospital-scoped users.
- Formatted report durations as H:MM:SS and timestamps to seconds.
- Reduced ETA report preview columns while keeping full detail in CSV export.
Ingest and data handling
- Changed XML feed timestamp parsing to store feed epoch values directly without operational time zone shifting.
- Added same-unit destination diversion persistence through UnitDiversionEvent.
- Kept the latest same-unit destination visible on the dashboard after a diversion.
- Ensured a unit cannot remain active on the board more than once.
- Wrapped unit destination, diversion, and ETA persistence in one transaction.
- Added manual-upload size protection before reading content into memory.
- Added parser coverage for completed lifecycle, removal-state precedence, and multiple transported units.
- Kept Other Destinations active and eligible for unmatched XML fallback.
Email intake and delivery
- Added manual retry/reprocess for stored Email Intake messages.
- Reworked Email Intake into Messages, Rules, and Simulator tabs.
- Added WATrac diversion parsing for hospital alert create and clear behavior.
- Added alert source tracking for manual and email-generated alerts.
- Protected manual alerts from email replacement or clearing by default.
- Added Email Delivery SMTP settings, SMTP verify, and test send.
- Added EmailDeliveryLog records for outbound delivery attempts.
- Added Email Delivery trigger rules for hospital average turnaround, unit dwell, feed degraded, and feed offline events.
- Added trigger state so notifications send once on breach and reset after recovery.
- Wired Email Intake forwarding rules through Email Delivery.
- Added forwarding subject/body templates and placeholders.
Configuration and admin
- Added System Settings at /admin/configuration.
- Added operational time zone settings for dashboard, admin, and report display.
- Expanded suggested US operational time zones.
- Reworked Hospital Management so normal hospitals can be edited from active and inactive tabs.
- Clarified hospital latitude and longitude labels, examples, ranges, and validation messages.
- Improved dropdown readability across browsers.
- Updated Data Source parser menu labels for clearer alerting configuration.
- Reorganized admin landing groups into Operations, Feeds & Intake, Configuration, Administration, and Reporting.
- Added Database Maintenance cleanup coverage for unit records, ingest metadata, and email intake messages.
- Added cleaner system-worker shutdown handling for Docker restarts.
- Added validation for worker poll interval input.
Production and deployment
- Added production Dockerfiles for web, worker, and OSRM.
- Added docker-compose.prod.yml for web, worker, Postgres, OSRM, and migrate/bootstrap services.
- Improved production admin bootstrap behavior.
- Changed production routing service exposure to avoid unnecessary host-level access.
- Fixed worker image runtime tooling so tsx is available for worker and bootstrap commands.
- Fixed Prisma web runtime engine mismatch by aligning the web runtime image family.
- Fixed web container hostname binding for health checks and host access.
- Added environment-aware secure session cookie configuration.
- Added STACK_PREFIX and WEB_HOST_PORT for side-by-side Docker stacks.
- Standardized production internal service discovery.
- Added GitHub upload scope documentation and source ignore coverage for secrets, generated output, runtime data, OSRM data, dumps, samples, and local tool state.
- Added public/.gitkeep so production Docker builds always have a public directory.
- Removed optional Docker NTP/Chrony service and documented host-level time synchronization.
Validation and acceptance
- Added automated RBAC role/path tests for Global Admin, legacy Admin, Hospital Admin, and Report User.
- Added XML lifecycle parser tests for representative samples.
- Verified lint, tests, and production image builds during the 0.1 workstream.
- Added docs/PRODUCTION-V1-CHECKLIST.md for go-live checks, browser acceptance, hardening notes, and runbook commands.
- Deployed the dev branch through Portainer for testing.
- Confirmed deployment migration and bootstrap behavior in the testing stack.
- Documented expected routing-service readiness behavior during first deployment.
- Documented external access troubleshooting status without publishing network details.