Skip to content

Resgrid IC 2.25

Choose a tag to compare

@github-actions github-actions released this 12 Nov 00:07
0e1aaea

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.holdToConfirm capability 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 StatusHoldToConfirm setting 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 defineIdempotentDataHandler for writes that Core deduplicates using the outbox event ID.
  • HTTP 409 responses 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 refresh phase 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 409 handling.
    • 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.

Changes

  • RO-T101 PR #28 Fixes (2db1efb)
  • RO-T102 Fixes for Dispatch, pending operation handling, outbox (7b82e12)