Repository navigation
4.979.0
Pull Request Summary
This pull request adds dispatch re-notification, expands department module visibility controls, improves security and authentication flows, and introduces a Docker-based QA department seeding and verification environment.
Dispatch re-notification
- Adds department-level dispatch re-notification settings, disabled by default.
- Re-notifies personnel and units that have not acknowledged a dispatch by setting a status.
- Stops re-notification when:
- The recipient acknowledges the dispatch.
- The call closes or the recipient is removed from the call.
- The configured attempts are exhausted.
- The department disables the feature.
- Uses push notifications by default, with timing fixed at 5-minute intervals and three attempts while system locks are enabled.
- Adds support for push, SMS, email, voice, and chat-platform channels when those channels are unlocked.
- Adds a dedicated reminder sound and localized “Reminder 1/3” notification titles.
- Tracks dispatch recipients, attempts, acknowledgments, cancellations, and retention through a new persistence model, repository, service, worker command, and migration.
- Registers re-notification recipients during call broadcasting while preserving the original dispatch behavior.
Department module visibility
Adds independent department-level visibility switches for:
- Records
- Contacts
- Certifications
- Deployments
- Chat
These switches control web navigation, dashboard widgets, and unified search without deleting data or changing permissions. Records is now independent from the legacy Logs switch, and Chat visibility does not affect mobile chat.
The new module settings are integrated into:
- Department module settings pages.
- Navigation and search authorization.
- Dashboard widget access checks.
- Admin Assist catalogs and documentation.
- Department import configuration.
- Localized resources.
Feature flag usage tracking
- Reworks feature flag evaluation tracking to buffer counts per process, department, and UTC day.
- Flushes usage data from each web, API, and worker host on a configurable interval and during shutdown.
- Retries failed writes and preserves buffered counts for later flushes.
- Adds atomic repository upserts and date-range queries.
- Adds database indexes and migrations to prevent duplicate usage rows.
- Adds host services for web, API, and worker processes.
Authentication and password recovery
- Adds reference access token support for OIDC to avoid oversized access-token headers.
- Adds periodic pruning of expired, revoked, and redeemed OIDC tokens and unused authorizations.
- Separates self-service and administrator password reset link lifetimes:
- Self-service links default to 2 hours.
- Administrator-issued links default to 24 hours.
- Includes the username, expiration duration, and expiration time in recovery emails.
- Ensures reset cookies match the actual grant lifetime.
- Clears stale or invalid recovery grants before displaying the reset form.
- Allows password recovery pages to run anonymously even when a browser contains a stale or active session cookie.
- Displays the username associated with the reset link and signs out the reset account’s browser session after a successful password change.
Rich-text and messaging output
- Adds
HtmlToMessageTextconversion for chat, chatbot, SMS-style output, and assistant responses. - Converts rich text into readable plain text with meaningful line breaks.
- Preserves text containing literal angle brackets when it is not recognized as HTML.
- Updates chatbot call and message handlers to avoid sending raw HTML markup.
Records and unit staffing
- Adds support for the locked Callback record definition and its field-based form.
- Preserves existing record relationships and protected fields when editing Callback records.
- Prevents unauthorized changes to redacted protected fields.
- Resolves unit staffing from roles persisted on the exact latest unit state rather than relying on pre-populated navigation data.
- Prevents deleted or cross-department units from authorizing field record operations.
API and web behavior
- Adds v4 endpoints for:
- Available call years.
- Archived calls scoped to the caller’s dispatch visibility.
- Adds reporting user and closure timestamps to call API results.
- Includes department time zone information in configuration responses.
- Marks linked calls in mapping results.
- Improves PostgreSQL map-layer persistence so GeoJSON geometry and properties survive round trips.
- Supports PostgreSQL map-layer identifiers alongside legacy identifiers and rejects deleted layers.
- Adds combined close-call and delete-call rights to the security rights response.
- Allows explicit empty dispatch lists to create or edit calls with no recipients while preserving existing blank-list behavior.
- Validates numeric deployment route fields as non-negative 32-bit integers.
- Improves archived call timestamp formatting and deployment form layout.
- Preserves workflow ownership, trigger type, credentials, and steps when editing workflow settings.
QA department environment
Introduces Docker/qa-departments, including:
- A Python-based seeder for PostgreSQL and SQL Server.
- Fifteen configurable QA department scenarios covering modules, feature flags, ADP, SSO, MFA, permissions, records, incident command, dispatch, and volume testing.
- Stable generated identities, password hashes, TOTP secrets, and manifests.
- Schema validation before writes.
- Transactional seeding with database and run-tag safeguards.
- ADP-compatible encrypted test data generation.
- A local Docker Compose stack with Core, PostgreSQL, Redis, RabbitMQ, Mailpit, API, eventing, and TLS gateway services.
- API-based verification of sign-in, bootstrap endpoints, feature flags, and protected-data redaction.
- Unit tests covering catalog generation, SQL generation, identity handling, ADP encryption, feature flags, and verification behavior.
Testing
Adds and updates coverage for:
- Dispatch re-notification registration, acknowledgment, retry, cancellation, channels, localization, and notification sounds.
- Feature flag usage buffering and flushing.
- Password reset lifetimes and email templates.
- OIDC token pruning.
- Session validation and signed-out recovery flows.
- Module visibility and dashboard gating.
- Rich-text conversion.
- Records callback forms and unit staffing authorization.
- Call dispatch list handling and archived-call APIs.
- PostgreSQL GUID and map-layer handling.
- QA department seeding and verification.