The user's explicit delivery (FlushTelemetry in @igpapi/mobile): sends
everything the process accumulated through one Pigeon batch. An empty store
sends nothing — not even an init — so a flush with nothing pending is no
request; an upload the transport or the analytics server rejects fails with
TelemetryDeliveryError after putting its events back, and the next
flush carries them again. Nothing calls this on its own: there is no timer,
no send on leave, no background trigger.
It sends only into the Pigeon session the process began: the caller starts
it with pigeonSendInfraBatches (the Android launch does where the app's
first upload of the process goes out). A process that never began it gets
TelemetryDeliverySessionError (reason: 'session') and the batch stays in
the store, because no recording covers an upload without the session.
The user's explicit delivery (
FlushTelemetryin@igpapi/mobile): sends everything the process accumulated through one Pigeon batch. An empty store sends nothing — not even an init — so a flush with nothing pending is no request; an upload the transport or the analytics server rejects fails with TelemetryDeliveryError after putting its events back, and the next flush carries them again. Nothing calls this on its own: there is no timer, no send onleave, no background trigger.It sends only into the Pigeon session the process began: the caller starts it with
pigeonSendInfraBatches(the Android launch does where the app's first upload of the process goes out). A process that never began it getsTelemetryDeliverySessionError(reason: 'session') and the batch stays in the store, because no recording covers an upload without the session.