You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Define shared iOS and Android activity expiry policy #10864
The cross-platform audit of #10416 found different freshness clocks: APNs emits a stale-date relative to delivery time, while Android derives activity expiry from the activity state timestamp. Queue delays and replays can therefore leave the two cards stale at different times.
Decide which parts are shared product policy and which are native presentation constraints. Put the shared deadline calculation in the relay policy and add adapter-level cases for delayed delivery, foreground replay, stale running work, and the 15-minute completed-card window.
Keep this policy decision outside the Android feature PR. A stale marker and card removal are different native behaviors; the follow-up should make that distinction explicit rather than force identical UI.
Cross-platform consistency follow-up from the #10416 audit. iOS and Android still use different freshness clocks for the activity card. This is accepted product/policy work, not a current production bug, and it should stay outside the Android feature PR.
activity_expires_at = state updatedAt + 15 min (terminal) or row TTL
Native code removes the card (setTimeoutAfter / alarm)
A delayed or replayed job can therefore leave the iOS card looking fresh (deadline restarts at send) while Android has already expired it from the original state time — or the reverse for long-quiet running work (iOS dims 10 minutes after last delivery; Android keeps the card until the 2h/24h state TTL).
A stale marker and card removal are different native behaviors. Shared policy should compute one deadline; adapters should apply it without forcing the same UI.
Not a duplicate / not done
#10416 is the Android adapter. Do not fold this decision into that PR or close this when it merges.
Activity
juliusmarminge commentedon Sep 9, 2026
Triage
Cross-platform consistency follow-up from the #10416 audit. iOS and Android still use different freshness clocks for the activity card. This is accepted product/policy work, not a current production bug, and it should stay outside the Android feature PR.
What the code does today
#10848 already extracted shared aggregation and alert policy (
agentActivityAggregate.ts,agentActivityAlerts.ts,agentActivityPayloads.ts):updatedAt(agentActivityExpiresAt)updatedAtupdatedAt(#10849)Presentation clocks were not unified:
ApnsClient.ts)stale-date= delivery time + 10 min;dismissal-date= delivery + 5 min (15s if contentless)fcmPayloads.tsin #10416)activity_expires_at= stateupdatedAt+ 15 min (terminal) or row TTLsetTimeoutAfter/ alarm)A delayed or replayed job can therefore leave the iOS card looking fresh (deadline restarts at send) while Android has already expired it from the original state time — or the reverse for long-quiet running work (iOS dims 10 minutes after last delivery; Android keeps the card until the 2h/24h state TTL).
A stale marker and card removal are different native behaviors. Shared policy should compute one deadline; adapters should apply it without forcing the same UI.
Not a duplicate / not done
Suggested follow-up
Labels:
enhancement,accepted,via-triage(removeneeds-triage)