Repository navigation
Resgrid IC 2.25
Resgrid IC 2.25
Channel production · build 100025 · run 25 · commit 0e1aaea
| Platform | Path | Details |
|---|---|---|
| android | native build | 37bb3713a34c — binaries attached |
| ios | native build | 2efcfd56a6d6 — binaries attached |
Docker: resgridllc/ic:2.25, ghcr.io/resgrid/ic:2.25
Verify downloads with sha256sum -c SHA256SUMS.
Pull request #28: RO-T102 Fixes for Dispatch, pending operation handling, outbox
Summary
- Restrict status hold-to-confirm behavior to native Responder and Unit apps.
- Improve outbox handling for idempotent writes and pending operations.
- Prevent post-delivery refreshes from blocking subsequent writes.
- Clean up stale “Pending sync” markers when their outbox events no longer exist.
- Improve Dispatch unit status refresh behavior and call-file upload deduplication.
Details
Status hold-to-confirm
- Added the
status.holdToConfirmcapability to all app variants. - Enabled it only for Responder and Unit variants.
- Dispatch, IC, BigBoard, web, and Electron builds now set statuses immediately without a hold.
- The department’s
StatusHoldToConfirmsetting is honored only when the app capability and native-platform requirements are met. - Added manifest, configuration, provider, and behavior tests for the new capability.
Idempotent writes and retry handling
- Added
defineIdempotentDataHandlerfor writes that Core deduplicates using the outbox event ID. - HTTP
409responses for these writes are treated as in-progress operations and remain queued instead of being marked rejected. - Idempotent operations receive an extended retry budget so Core’s five-minute processing claim can expire before the outbox gives up.
- Applied this behavior to call creation, call notes, call-file uploads, personnel status/staffing updates, and unit status updates.
- Call-file uploads now include the outbox event ID as an optional
IdempotencyKey, preventing duplicate attachments when an upload is retried.
Outbox delivery and refresh behavior
- Added a separate
refreshphase for post-delivery reads. - Required local acknowledgement work still completes before the next write is sent.
- Screen-refresh reads now run asynchronously after delivery and no longer block the outbox drain.
- Updated call details, messages, check-ins, operations, routes, personnel status, and unit status handlers to use the new refresh flow.
- Added per-failure retry budgets so handlers can use a different limit for specific errors such as HTTP
409.
Pending operation marker reconciliation
- Added centralized reconciliation for queued-operation markers across calls, call details, check-ins, messages, personnel status, unit status, and work orders.
- Markers are removed when their corresponding outbox event is no longer present, including delivered, discarded, expired, or dead-lettered events.
- Reconciliation runs after data initialization and whenever the outbox changes.
- Reconciliation failures are logged while preserving the existing markers.
Dispatch improvements
- Multi-unit status updates no longer wait for status-list reads between each unit submission.
- Dispatch now refreshes unit rows and map markers once after selected-unit status updates are sent.
- Call detail reads support bypassing in-flight cached requests so a save followed by a refresh uses the latest server data.
- Notes and files are refreshed after acknowledgement without delaying subsequent outbox operations.
Validation
- Added coverage for:
- Idempotent retries and HTTP
409handling. - Extended retry behavior while Core holds a processing claim.
- Duplicate-safe call-file uploads.
- Non-blocking post-delivery refreshes.
- Stale queued-marker cleanup and reconciliation failures.
- Multi-unit Dispatch status updates.
- Variant-specific status hold-to-confirm behavior.
- Idempotent retries and HTTP