Repository navigation
Releases
Resgrid Unit 8.26
Resgrid Unit 8.26
Channel production · build 100026 · run 26 · commit 49fcfc0
| Platform | Path | Details |
|---|---|---|
| android | native build | 3545a1119dd9 — binaries attached |
| ios | native build | ee9be4590957 — binaries attached |
Docker: resgridllc/unit:8.26, ghcr.io/resgrid/unit:8.26
Verify downloads with sha256sum -c SHA256SUMS.
Pull request #29: RO-T101 Custom Map Icon Fixes
Summary
Fix custom map icon sizing and compatibility for previously cached map markers.
Changes
- Updated
getMapDataAndMarkersto always requestfullSizeIcons=true, ensuring uploaded icons are returned at their full size. - Added the
fullSizeIconsquery parameter to the mapping endpoint definition and pending Swagger contract. - Scaled uploaded 128 px icons to the standard 32 px map pin size while keeping status and bundled icons at their existing scale.
- Added per-pin icon scale metadata to MapLibre symbol features.
- Versioned persisted map marker data to version 1.
- Added migration handling for version 0 cached markers:
- Removes previously persisted uploaded
IconUrlvalues that referenced undersized 32 px renditions. - Preserves marker locations, map center, zoom, fetch timestamps, and status pin information.
- Handles empty or partial legacy storage safely.
- Removes previously persisted uploaded
- Added tests covering the API query, icon scaling behavior, persistence versioning, and legacy storage migration.
Changes
Resgrid Responder 11.26
Resgrid Responder 11.26
Channel production · build 5100026 · run 26 · commit 49fcfc0
| Platform | Path | Details |
|---|---|---|
| android | native build | 9936a97d35eb — binaries attached |
| ios | native build | 7776f36f3af3 — binaries attached |
Docker: resgridllc/responder:11.26, ghcr.io/resgrid/responder:11.26
Verify downloads with sha256sum -c SHA256SUMS.
Pull request #29: RO-T101 Custom Map Icon Fixes
Summary
Fix custom map icon sizing and compatibility for previously cached map markers.
Changes
- Updated
getMapDataAndMarkersto always requestfullSizeIcons=true, ensuring uploaded icons are returned at their full size. - Added the
fullSizeIconsquery parameter to the mapping endpoint definition and pending Swagger contract. - Scaled uploaded 128 px icons to the standard 32 px map pin size while keeping status and bundled icons at their existing scale.
- Added per-pin icon scale metadata to MapLibre symbol features.
- Versioned persisted map marker data to version 1.
- Added migration handling for version 0 cached markers:
- Removes previously persisted uploaded
IconUrlvalues that referenced undersized 32 px renditions. - Preserves marker locations, map center, zoom, fetch timestamps, and status pin information.
- Handles empty or partial legacy storage safely.
- Removes previously persisted uploaded
- Added tests covering the API query, icon scaling behavior, persistence versioning, and legacy storage migration.
Changes
Resgrid IC 2.26
Resgrid IC 2.26
Channel production · build 100026 · run 26 · commit 49fcfc0
| Platform | Path | Details |
|---|---|---|
| android | native build | 37bb3713a34c — binaries attached |
| ios | native build | 2efcfd56a6d6 — binaries attached |
Docker: resgridllc/ic:2.26, ghcr.io/resgrid/ic:2.26
Verify downloads with sha256sum -c SHA256SUMS.
Pull request #29: RO-T101 Custom Map Icon Fixes
Summary
Fix custom map icon sizing and compatibility for previously cached map markers.
Changes
- Updated
getMapDataAndMarkersto always requestfullSizeIcons=true, ensuring uploaded icons are returned at their full size. - Added the
fullSizeIconsquery parameter to the mapping endpoint definition and pending Swagger contract. - Scaled uploaded 128 px icons to the standard 32 px map pin size while keeping status and bundled icons at their existing scale.
- Added per-pin icon scale metadata to MapLibre symbol features.
- Versioned persisted map marker data to version 1.
- Added migration handling for version 0 cached markers:
- Removes previously persisted uploaded
IconUrlvalues that referenced undersized 32 px renditions. - Preserves marker locations, map center, zoom, fetch timestamps, and status pin information.
- Handles empty or partial legacy storage safely.
- Removes previously persisted uploaded
- Added tests covering the API query, icon scaling behavior, persistence versioning, and legacy storage migration.
Changes
Resgrid Dispatch 2.26
Resgrid Dispatch 2.26
Channel production · build 100026 · run 26 · commit 49fcfc0
| Platform | Path | Details |
|---|---|---|
| android | native build | 682fa279de2a — binaries attached |
| ios | native build | 5196f592a168 — binaries attached |
Docker: resgridllc/dispatch:2.26, ghcr.io/resgrid/dispatch:2.26
Verify downloads with sha256sum -c SHA256SUMS.
Pull request #29: RO-T101 Custom Map Icon Fixes
Summary
Fix custom map icon sizing and compatibility for previously cached map markers.
Changes
- Updated
getMapDataAndMarkersto always requestfullSizeIcons=true, ensuring uploaded icons are returned at their full size. - Added the
fullSizeIconsquery parameter to the mapping endpoint definition and pending Swagger contract. - Scaled uploaded 128 px icons to the standard 32 px map pin size while keeping status and bundled icons at their existing scale.
- Added per-pin icon scale metadata to MapLibre symbol features.
- Versioned persisted map marker data to version 1.
- Added migration handling for version 0 cached markers:
- Removes previously persisted uploaded
IconUrlvalues that referenced undersized 32 px renditions. - Preserves marker locations, map center, zoom, fetch timestamps, and status pin information.
- Handles empty or partial legacy storage safely.
- Removes previously persisted uploaded
- Added tests covering the API query, icon scaling behavior, persistence versioning, and legacy storage migration.
Changes
BigBoard 4.26
BigBoard 4.26
Channel production · build 100026 · run 26 · commit 49fcfc0
| Platform | Path | Details |
|---|---|---|
| android | native build | c29069ba0efd — binaries attached |
| ios | native build | 6a4c91100497 — binaries attached |
Docker: resgridllc/bigboard:4.26, ghcr.io/resgrid/bigboard:4.26
Verify downloads with sha256sum -c SHA256SUMS.
Pull request #29: RO-T101 Custom Map Icon Fixes
Summary
Fix custom map icon sizing and compatibility for previously cached map markers.
Changes
- Updated
getMapDataAndMarkersto always requestfullSizeIcons=true, ensuring uploaded icons are returned at their full size. - Added the
fullSizeIconsquery parameter to the mapping endpoint definition and pending Swagger contract. - Scaled uploaded 128 px icons to the standard 32 px map pin size while keeping status and bundled icons at their existing scale.
- Added per-pin icon scale metadata to MapLibre symbol features.
- Versioned persisted map marker data to version 1.
- Added migration handling for version 0 cached markers:
- Removes previously persisted uploaded
IconUrlvalues that referenced undersized 32 px renditions. - Preserves marker locations, map center, zoom, fetch timestamps, and status pin information.
- Handles empty or partial legacy storage safely.
- Removes previously persisted uploaded
- Added tests covering the API query, icon scaling behavior, persistence versioning, and legacy storage migration.
Changes
Resgrid Unit 8.25
Resgrid Unit 8.25
Channel production · build 100025 · run 25 · commit 0e1aaea
| Platform | Path | Details |
|---|---|---|
| android | native build | 3545a1119dd9 — binaries attached |
| ios | native build | ee9be4590957 — binaries attached |
Docker: resgridllc/unit:8.25, ghcr.io/resgrid/unit:8.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
Changes
Resgrid Unit 8.24
Resgrid Unit 8.24
Channel production · build 100024 · run 24 · commit 05d81c3
| Platform | Path | Details |
|---|---|---|
| android | native build | 3545a1119dd9 — binaries attached |
| ios | native build | ee9be4590957 — binaries attached |
Docker: resgridllc/unit:8.24, ghcr.io/resgrid/unit:8.24
Verify downloads with sha256sum -c SHA256SUMS.
Pull request #27: Develop
Summary
-
Restricts EAS/OTA updates to critical and emergency fixes delivered from the
hotfixbranch.- Pull requests into
hotfixrun validation only and publish nothing. - Native changes are detected by comparing fingerprint sources with the
hotfixbranch, with changed packages, files, and app configuration reported. - The required
hotfix-okcheck passes only when the native comparison and OTA dry runs succeed. - Pushes to
hotfixpublish updates for all variants on the production channel. - Manual updates are accepted only when dispatched from
hotfix, with selectable variants, platforms, and channels. - Updates are refused unless released binaries on the target channel use the bundle’s runtime fingerprint, including support for matching an older store build behind newer release candidates.
- Pull requests into
-
Changes
release.ymlso every release run builds native Android and iOS binaries and never publishes an EAS update.- Removes the native-versus-OTA decision stage, OTA release job, and
force_nativeinput. - Keeps fingerprint calculation to record platform runtimes in
fingerprints.json. - Removes OTA metadata from release assembly and records only native build or carried-forward binary information.
- Ensures web and Electron fixes continue to be delivered through regular release runs.
- Removes the native-versus-OTA decision stage, OTA release job, and
-
Enables R8 minification for Android release builds across all variants.
- Adds keep rules for native libraries and code that relies on reflection, JNI, or name-based lookups.
- Keeps resource shrinking disabled so runtime-discovered notification and audio resources remain available.
- Updates app configuration tests to verify R8 settings, keep rules, and the supported
expo-navigation-baroptions.
-
Adds coverage for hotfix update behavior, including:
- Runtime matching and failed-build handling.
- Finding compatible binaries among multiple releases.
- Native source change reporting.
- Enforcing that only
ota.ymlpublishes EAS updates and only fromhotfix. - Verifying that regular release workflows always build native binaries.
-
Updates architecture, CI secrets, build guidance, app-update documentation, implementation status, and agent instructions to reflect the hotfix-only OTA policy and Android R8 configuration.
Changes
Resgrid Responder 11.25
Resgrid Responder 11.25
Channel production · build 5100025 · run 25 · commit 0e1aaea
| Platform | Path | Details |
|---|---|---|
| android | native build | 9936a97d35eb — binaries attached |
| ios | native build | 7776f36f3af3 — binaries attached |
Docker: resgridllc/responder:11.25, ghcr.io/resgrid/responder:11.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
Changes
Resgrid Responder 11.24
Resgrid Responder 11.24
Channel production · build 5100024 · run 24 · commit 05d81c3
| Platform | Path | Details |
|---|---|---|
| android | native build | 9936a97d35eb — binaries attached |
| ios | native build | 7776f36f3af3 — binaries attached |
Docker: resgridllc/responder:11.24, ghcr.io/resgrid/responder:11.24
Verify downloads with sha256sum -c SHA256SUMS.
Pull request #27: Develop
Summary
-
Restricts EAS/OTA updates to critical and emergency fixes delivered from the
hotfixbranch.- Pull requests into
hotfixrun validation only and publish nothing. - Native changes are detected by comparing fingerprint sources with the
hotfixbranch, with changed packages, files, and app configuration reported. - The required
hotfix-okcheck passes only when the native comparison and OTA dry runs succeed. - Pushes to
hotfixpublish updates for all variants on the production channel. - Manual updates are accepted only when dispatched from
hotfix, with selectable variants, platforms, and channels. - Updates are refused unless released binaries on the target channel use the bundle’s runtime fingerprint, including support for matching an older store build behind newer release candidates.
- Pull requests into
-
Changes
release.ymlso every release run builds native Android and iOS binaries and never publishes an EAS update.- Removes the native-versus-OTA decision stage, OTA release job, and
force_nativeinput. - Keeps fingerprint calculation to record platform runtimes in
fingerprints.json. - Removes OTA metadata from release assembly and records only native build or carried-forward binary information.
- Ensures web and Electron fixes continue to be delivered through regular release runs.
- Removes the native-versus-OTA decision stage, OTA release job, and
-
Enables R8 minification for Android release builds across all variants.
- Adds keep rules for native libraries and code that relies on reflection, JNI, or name-based lookups.
- Keeps resource shrinking disabled so runtime-discovered notification and audio resources remain available.
- Updates app configuration tests to verify R8 settings, keep rules, and the supported
expo-navigation-baroptions.
-
Adds coverage for hotfix update behavior, including:
- Runtime matching and failed-build handling.
- Finding compatible binaries among multiple releases.
- Native source change reporting.
- Enforcing that only
ota.ymlpublishes EAS updates and only fromhotfix. - Verifying that regular release workflows always build native binaries.
-
Updates architecture, CI secrets, build guidance, app-update documentation, implementation status, and agent instructions to reflect the hotfix-only OTA policy and Android R8 configuration.
Changes
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