transistorsoft / transistorsoft/react-native-background-geolocation

[Bug]: Samsung devices stuck in stationary mode

Open
#2,631 27 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

bug stale
Dominant language
TypeScript
Stars
2.9k
Forks
446
PR merge metrics
No merged PRs in 30d

Description

Required Reading
  • Confirmed
Plugin Version

5.1.1

Mobile operating-system(s)
  • iOS
  • Android
Device Manufacturer(s) and Model(s)

Samsung S25 Edge

Device operating-systems(s)

Android 16

React Native / Expo version

RN 0.81.5 / Expo 54.0.25

What happened?

We're running into an issue with Samsung devices where once they get into stationary mode, they sometimes never come out even if they break a separate geofence. We're wondering if there's anything we can do to prevent this from occurring or if this is a bug with the plugin. The log sample attached had to be condensed because it was over 16k lines long otherwise, hopefully it's still helpful.

TSLocationManager version is 4.1.6

Plugin Code and/or Config
{
    reset: false,

    // Geolocation settings
    geolocation: {
      desiredAccuracy: BackgroundGeolocation.DesiredAccuracy.Medium,
      distanceFilter: 15, // Meters between updates
      disableStopDetection: false, // Let plugin manage moving/stationary states naturally
      stopTimeout: 10, // Minutes to wait before entering stationary mode (1 min = quick response)
      stationaryRadius: 25, // Create 25m geofence when stationary (wakes on exit)
      disableElasticity: false, // Allow plugin to adapt distanceFilter based on speed
      elasticityMultiplier: 3,
      activityType: BackgroundGeolocation.ActivityType.OtherNavigation, // Better for outdoor tracking
      showsBackgroundLocationIndicator: false,
      ...(Platform.OS === 'ios' ? {pausesLocationUpdatesAutomatically: false} : {}),
      locationAuthorizationRequest: "Always",
      filter: {
        policy: LocationFilterPolicy?.Adjust ?? 1,
      }
    },

    // Activity recognition settings
    activity: {
      minimumActivityRecognitionConfidence: Platform.OS === 'ios' ? 32 : 75, // When iOS gets into it's weird stopped state, the activity recognition confidence is low at 33.
      disableStopDetection: false,
      motionTriggerDelay: 30000, // Start tracking immediately when motion detected
      disableMotionActivityUpdates: false, // Enable motion activity detection (still, walking, running, etc.)
      stopDetectionDelay: Platform.OS === 'ios' ? 1000 * 60 * 5 : 0, // Wait 5 minutes before beginning stop detection
    },

    // App lifecycle settings
    app: {
      stopOnTerminate: false, // CRITICAL: Keep tracking when app is killed
      startOnBoot: true, // Restart tracking after device reboot
      enableHeadless: true, // Run without UI on Android
      heartbeatInterval: 60,
      preventSuspend: Platform.OS === 'ios' ? true : false,
      notification: {
        channelName: "App Name Location",
        title: "App Name Location Sharing",
        text: "Sharing your location with contacts",
        color: "#ffffff",
        smallIcon: "drawable/notification_icon",
        priority: BackgroundGeolocation.NotificationPriority.Default,
        sticky: true,
      },
      // Android background permission dialog text
      backgroundPermissionRationale: {
        title: "Allow App to access this device's location in the background?",
        message: "App collects location data to enable live safety alerts and location sharing with your emergency contacts, even when the app is closed or not in use.",
        positiveAction: "Change to \"{backgroundPermissionOptionLabel}\"",
        negativeAction: "Cancel",
      },
    },

    // Native HTTP sync - CRITICAL for iOS background uploads
    // When app is backgrounded/terminated, native code handles uploads.
    http: {
      url: uploadUrl,
      autoSync: true,
      autoSyncThreshold: 0, // Sync after 3 updates are acquired
      batchSync: false, // Send locations in a batch to improve battery
      maxBatchSize: 1,
      headers: {
        "Content-Type": "application/json",
      },
      rootProperty: '.',
    },

    // Persistence settings for offline support
    persistence: {
      maxDaysToPersist: 3,
      persistMode: 2,
    },

    // Logger settings
    logger: {
      logLevel: BackgroundGeolocation.LogLevel.Verbose,
    },
}
Relevant log output
07-21 00:53:08.873 INFO [TSLocationManager a] 
╔═════════════════════════════════════════════
║ motionchange LocationResult: 1 (19ms old)
╠═════════════════════════════════════════════
╟─ 📍 Location[fused 40.720401,-99.170272 hAcc=4.685 et=+4d22h45m47s821ms alt=682.3965529478502 vAcc=1.6436102 vel=2.4644003 sAcc=0.871078 bear=18.978653 bAcc=22.551836], time: 1784613188853

07-21 00:53:08.873 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ location
07-21 00:53:08.873 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: location
07-21 00:53:08.873 INFO [Odometer b] 
  ℹ️  Update odometer: 229620.59 (± 777.27m)
07-21 00:53:08.874 INFO [TSLocationManager onSingleLocationResult] 
  🔵  MOTIONCHANGE isMoving=false df=15.0 — resetting short-term filter state
07-21 00:53:08.874 INFO [TSLocationManager onSingleLocationResult] 
  🔵  Acquired motionchange position, isMoving: false
07-21 00:53:08.874 INFO [TSLocationManager a] 
  🔴  Location-services: OFF
07-21 00:53:08.874 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ location
07-21 00:53:08.874 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: location
07-21 00:53:08.874 DEBUG [AbstractService a] 
  ⚙️︎  FINISH [LocationRequestService startId: 4, eventCount: 0, sticky: false]
07-21 00:53:08.874 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ motionchange
07-21 00:53:08.874 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: motionchange
07-21 00:53:08.875 DEBUG [TSGeofenceManager startMonitoringStationaryRegion] 
  🎾  Continue monitoring stationary region (radius: 25m 40.7204048,-99.1701798 hAcc=6.85)
07-21 00:53:08.877 DEBUG [AbstractService b] 
  🎾  STOP [LocationRequestService startId: 5, eventCount: 1]
07-21 00:53:08.877 DEBUG [AbstractService a] 
  ⚙️︎  FINISH [LocationRequestService startId: 5, eventCount: 0, sticky: false]
07-21 00:53:08.878 DEBUG [AbstractService a] 
  🎾  motionchange [TrackingService  startId: 2317, eventCount: 1]
07-21 00:53:08.878 INFO [TrackingService l] 
╔═════════════════════════════════════════════
║ TrackingService motionchange: false
╠═════════════════════════════════════════════

07-21 00:53:08.878 INFO [TSScheduleManager cancelOneShot] 
  ⏰ Cancel OneShot: STOP_TIMEOUT
07-21 00:53:08.879 DEBUG [AbstractService a] 
  ⚙️︎  FINISH [TrackingService startId: 2317, eventCount: 0, sticky: true]
07-21 00:53:08.879 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 1637
07-21 00:53:08.879 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 1638
07-21 00:53:08.879 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 1639
07-21 00:53:08.958 INFO [HttpService$e onResponse] 
  🔵  Response: 200
07-21 00:53:08.958 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ http
07-21 00:53:08.958 DEBUG [w a] 
  ✅  DESTROY: e2bd30da-16bd-4f9c-abf6-03d6584bbad5
07-21 00:53:08.958 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: http
07-21 00:53:08.960 DEBUG [w first] 
  ✅  Locked 1 records
07-21 00:53:08.960 INFO [HttpService a] 
  🔵  HTTP POST: 9f8e9089-dd9a-4a72-9dad-6f08de4ba47b
07-21 00:53:08.963 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 1640
07-21 00:53:09.048 INFO [HttpService$e onResponse] 
  🔵  Response: 200
07-21 00:53:09.049 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ http
07-21 00:53:09.049 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: http
07-21 00:53:09.049 DEBUG [w a] 
  ✅  DESTROY: 9f8e9089-dd9a-4a72-9dad-6f08de4ba47b
07-21 00:53:09.054 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 1641
07-21 00:53:09.054 DEBUG [w first] 
  ✅  Locked 1 records
07-21 00:53:09.054 INFO [HttpService a] 
  🔵  HTTP POST: 27ef0e8d-ec1a-49d5-bc26-e4f026cbd60b
07-21 00:53:09.079 DEBUG [AbstractService f] 
  ⚙️︎  LocationRequestService.stopSelfResult(5): true
07-21 00:53:09.079 DEBUG [AbstractService onDestroy] 
  🔴  LocationRequestService stopped
07-21 00:53:09.180 INFO [HttpService$e onResponse] 
  🔵  Response: 200
07-21 00:53:09.181 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ http
07-21 00:53:09.181 DEBUG [w a] 
  ✅  DESTROY: 27ef0e8d-ec1a-49d5-bc26-e4f026cbd60b
07-21 00:53:09.181 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: http
07-21 00:53:09.185 DEBUG [w first] 
  ✅  Locked 1 records
07-21 00:53:09.185 INFO [HttpService a] 
  🔵  HTTP POST: 82d8e4be-787b-47e4-bacc-5768ad8a9302
07-21 00:53:09.186 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 1642
07-21 00:53:09.305 INFO [HttpService$e onResponse] 
  🔵  Response: 200
07-21 00:53:09.306 DEBUG [w a] 
  ✅  DESTROY: 82d8e4be-787b-47e4-bacc-5768ad8a9302

<----- pattern continues for 16k lines ----->

07-21 00:55:42.309 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3208
07-21 00:55:42.311 DEBUG [w first] 
  ✅  Locked 1 records
07-21 00:55:42.311 INFO [HttpService a] 
  🔵  HTTP POST: 10b17b66-c280-404e-bde7-dcd8c5804b7d
07-21 00:55:42.400 INFO [HttpService$e onResponse] 
  🔵  Response: 200
07-21 00:55:42.400 DEBUG [w a] 
  ✅  DESTROY: 10b17b66-c280-404e-bde7-dcd8c5804b7d
07-21 00:55:42.401 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ http
07-21 00:55:42.401 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: http
07-21 00:55:42.407 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3209
07-21 00:55:42.407 DEBUG [w first] 
  ✅  Locked 1 records
07-21 00:55:42.407 INFO [HttpService a] 
  🔵  HTTP POST: 3ee49c31-0bfc-441d-8a5f-d879ca3c05f0
07-21 00:55:42.498 INFO [HttpService$e onResponse] 
  🔵  Response: 200
07-21 00:55:42.498 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ http
07-21 00:55:42.498 DEBUG [w a] 
  ✅  DESTROY: 3ee49c31-0bfc-441d-8a5f-d879ca3c05f0
07-21 00:55:42.498 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: http
07-21 00:55:42.504 INFO [BackgroundTaskManager$a m] ⏳ stopBackgroundTask: 1
07-21 00:55:42.504 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3210
07-21 00:56:35.765 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 00:56:35.766 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 00:56:35.767 DEBUG [m a] ❤️
07-21 00:56:35.783 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 00:56:35.783 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 00:56:35.786 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3211
07-21 00:56:44.692 DEBUG [HttpService a] 
╔═════════════════════════════════════════════
║ 📶  Connectivity change: connected? true
╠═════════════════════════════════════════════

07-21 00:56:44.692 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ connectivitychange
07-21 00:56:44.692 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: connectivitychange
07-21 00:56:44.695 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3212
07-21 00:56:45.694 INFO [HttpService flush] 
╔═════════════════════════════════════════════
║ HTTP Service (count: 0)
╠═════════════════════════════════════════════

07-21 00:58:22.241 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 00:58:22.241 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 00:58:22.242 DEBUG [m a] ❤️
07-21 00:58:22.252 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 00:58:22.252 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 00:58:22.254 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3213
07-21 01:00:08.243 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:00:08.243 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:00:08.244 DEBUG [m a] ❤️
07-21 01:00:08.246 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:00:08.246 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:00:08.248 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3214
07-21 01:01:54.252 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:01:54.252 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:01:54.253 DEBUG [m a] ❤️
07-21 01:01:54.256 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:01:54.256 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:01:54.258 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3215
07-21 01:03:39.255 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:03:39.255 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:03:39.256 DEBUG [m a] ❤️
07-21 01:03:39.266 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:03:39.267 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:03:39.271 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3216
07-21 01:05:24.270 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:05:24.271 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:05:24.272 DEBUG [m a] ❤️
07-21 01:05:24.284 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:05:24.285 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:05:24.288 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3217
07-21 01:07:09.277 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:07:09.282 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:07:09.283 DEBUG [m a] ❤️
07-21 01:07:09.290 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:07:09.290 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:07:09.297 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3218
07-21 01:07:09.508 DEBUG [HttpService a] 
╔═════════════════════════════════════════════
║ 📶  Connectivity change: connected? true
╠═════════════════════════════════════════════

07-21 01:07:09.508 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ connectivitychange
07-21 01:07:09.508 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: connectivitychange
07-21 01:07:09.516 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3219
07-21 01:07:10.509 INFO [HttpService flush] 
╔═════════════════════════════════════════════
║ HTTP Service (count: 0)
╠═════════════════════════════════════════════

07-21 01:08:55.253 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:08:55.258 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:08:55.259 DEBUG [m a] ❤️
07-21 01:08:55.264 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:08:55.264 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:08:55.267 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3220
07-21 01:10:41.255 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:10:41.255 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:10:41.255 DEBUG [m a] ❤️
07-21 01:10:41.258 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:10:41.258 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:10:41.260 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3221
07-21 01:12:27.235 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:12:27.245 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:12:27.246 DEBUG [m a] ❤️
07-21 01:12:27.248 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:12:27.248 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:12:27.250 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3222
07-21 01:14:13.234 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:14:13.234 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:14:13.234 DEBUG [m a] ❤️
07-21 01:14:13.239 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:14:13.239 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:14:13.241 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3223
07-21 01:16:00.232 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:16:00.233 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:16:00.235 DEBUG [m a] ❤️
07-21 01:16:00.242 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:16:00.242 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:16:00.244 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3224
07-21 01:17:45.243 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:17:45.244 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:17:45.247 DEBUG [m a] ❤️
07-21 01:17:45.256 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:17:45.256 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:17:45.262 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3225
07-21 01:19:31.233 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:19:31.234 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:19:31.234 DEBUG [m a] ❤️
07-21 01:19:31.237 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:19:31.237 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:19:31.239 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3226
07-21 01:21:17.239 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:21:17.240 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:21:17.242 DEBUG [m a] ❤️
07-21 01:21:17.244 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:21:17.244 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:21:17.246 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3227
07-21 01:22:30.576 DEBUG [HttpService a] 
╔═════════════════════════════════════════════
║ 📶  Connectivity change: connected? true
╠═════════════════════════════════════════════

07-21 01:22:30.580 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ connectivitychange
07-21 01:22:30.580 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: connectivitychange
07-21 01:22:30.585 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3228
07-21 01:22:31.578 INFO [HttpService flush] 
╔═════════════════════════════════════════════
║ HTTP Service (count: 0)
╠═════════════════════════════════════════════

07-21 01:23:02.252 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:23:02.253 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:23:02.255 DEBUG [m a] ❤️
07-21 01:23:02.266 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:23:02.266 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:23:02.269 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3229
07-21 01:24:48.238 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:24:48.238 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:24:48.239 DEBUG [m a] ❤️
07-21 01:24:48.242 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:24:48.242 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:24:48.243 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3230
07-21 01:26:34.219 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:26:34.220 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:26:34.221 DEBUG [m a] ❤️
07-21 01:26:34.223 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:26:34.223 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:26:34.226 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3231
07-21 01:28:20.227 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:28:20.227 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:28:20.228 DEBUG [m a] ❤️
07-21 01:28:20.229 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:28:20.229 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:28:20.231 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3232
07-21 01:30:06.244 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:30:06.244 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:30:06.245 DEBUG [m a] ❤️
07-21 01:30:06.247 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:30:06.247 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:30:06.248 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3233
07-21 01:31:52.235 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:31:52.235 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:31:52.236 DEBUG [m a] ❤️
07-21 01:31:52.239 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:31:52.239 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:31:52.244 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3234
07-21 01:33:38.237 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:33:38.237 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:33:38.238 DEBUG [m a] ❤️
07-21 01:33:38.242 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:33:38.242 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:33:38.245 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3235
07-21 01:35:24.220 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:35:24.221 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:35:24.223 DEBUG [m a] ❤️
07-21 01:35:24.225 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:35:24.225 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:35:24.227 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3236
07-21 01:37:09.233 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:37:09.235 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:37:09.239 DEBUG [m a] ❤️
07-21 01:37:09.257 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:37:09.257 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:37:09.263 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3237
07-21 01:38:27.263 DEBUG [HttpService a] 
╔═════════════════════════════════════════════
║ 📶  Connectivity change: connected? true
╠═════════════════════════════════════════════

07-21 01:38:27.264 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ connectivitychange
07-21 01:38:27.264 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: connectivitychange
07-21 01:38:27.266 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3238
07-21 01:38:28.265 INFO [HttpService flush] 
╔═════════════════════════════════════════════
║ HTTP Service (count: 0)
╠═════════════════════════════════════════════

07-21 01:38:54.256 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:38:54.257 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:38:54.257 DEBUG [m a] ❤️
07-21 01:38:54.265 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:38:54.265 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:38:54.268 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3239
07-21 01:40:40.216 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:40:40.216 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:40:40.217 DEBUG [m a] ❤️
07-21 01:40:40.219 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:40:40.219 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:40:40.221 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3240
07-21 01:41:32.239 DEBUG [AbstractService a] 
  🎾  geofencing [GeofencingService  startId: 1, eventCount: 1]
07-21 01:41:32.241 INFO [GeofencingProcessor handleGeofencingEvent] 
╔═════════════════════════════════════════════
║ Geofencing Event: EXIT
╠═════════════════════════════════════════════
╟─ waypoint:93cf4dd6-5030-472f-8bf8-2d048af565be
╟─ shared-waypoint:b017f850-a6dd-47d3-a7c8-d6bd0355b64e
╚═════════════════════════════════════════════
07-21 01:41:32.241 INFO [GeofencingProcessor a] 
╔═════════════════════════════════════════════
║ Trigger vs Geofence center: waypoint:93cf4dd6-5030-472f-8bf8-2d048af565be
╠═════════════════════════════════════════════
╟─ 📍 Trigger=Location[fused 40.717000,-99.175178 hAcc=116.1 et=+4d23h34m10s315ms alt=681.4736328125 vAcc=9.779788]
╟─ dist=568.0191m radius=300.0m
╟─ minPossibleDist=451.9191m (outsideBy=151.9191m)
╟─ triggerAge=894ms provider=fused
╚═════════════════════════════════════════════
07-21 01:41:32.241 INFO [GeofencingProcessor a] 
╔═════════════════════════════════════════════
║ Trigger vs last location: waypoint:93cf4dd6-5030-472f-8bf8-2d048af565be
╠═════════════════════════════════════════════
╟─ A: 40.7170004,-99.1751779 acc=116.1 age=894ms provider=fused
╟─ B: 40.7204006,-99.1702716 acc=4.685 age=2903387ms provider=fused
╟─ distance=560.7m
╟─ Δt(A-B)=2902494ms
╟─ requiredSpeed=0.19 m/s (0.7 km/h)
╚═════════════════════════════════════════════
07-21 01:41:32.242 DEBUG [l a] Updated geofence state waypoint:93cf4dd6-5030-472f-8bf8-2d048af565be (entry_state=0, hits=11)
07-21 01:41:32.243 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 25.0:  recommended geofence radius is >= 150.0meters
07-21 01:41:32.243 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 90.0:  recommended geofence radius is >= 150.0meters
07-21 01:41:32.243 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 100.0:  recommended geofence radius is >= 150.0meters
07-21 01:41:32.243 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 50.0:  recommended geofence radius is >= 150.0meters
07-21 01:41:32.243 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 50.0:  recommended geofence radius is >= 150.0meters
07-21 01:41:32.244 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 50.0:  recommended geofence radius is >= 150.0meters
07-21 01:41:32.244 INFO [GeofencingProcessor a] 
╔═════════════════════════════════════════════
║ Trigger vs Geofence center: shared-waypoint:b017f850-a6dd-47d3-a7c8-d6bd0355b64e
╠═════════════════════════════════════════════
╟─ 📍 Trigger=Location[fused 40.717000,-99.175178 hAcc=116.1 et=+4d23h34m10s315ms alt=681.4736328125 vAcc=9.779788]
╟─ dist=569.6415m radius=300.0m
╟─ minPossibleDist=453.54147m (outsideBy=153.54147m)
╟─ triggerAge=897ms provider=fused
╚═════════════════════════════════════════════
07-21 01:41:32.244 INFO [GeofencingProcessor a] 
╔═════════════════════════════════════════════
║ Trigger vs last location: shared-waypoint:b017f850-a6dd-47d3-a7c8-d6bd0355b64e
╠═════════════════════════════════════════════
╟─ A: 40.7170004,-99.1751779 acc=116.1 age=898ms provider=fused
╟─ B: 40.7204006,-99.1702716 acc=4.685 age=2903391ms provider=fused
╟─ distance=560.7m
╟─ Δt(A-B)=2902494ms
╟─ requiredSpeed=0.19 m/s (0.7 km/h)
╚═════════════════════════════════════════════
07-21 01:41:32.245 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ geofence
07-21 01:41:32.245 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: geofence
07-21 01:41:32.245 DEBUG [TSGeofenceManager$d run] 
╔═════════════════════════════════════════════
║ TSGeofenceManager monitoring 13/13
╠═════════════════════════════════════════════
╟─ 🎾  waypoint:d977090e-ed1c-4cc3-ab2e-ee9db1b7c574
╟─ 🎾  waypoint:3f844152-4394-4ae4-ad4a-ae3d44e54f8e
╟─ 🎾  shared-mile-marker:bbb0876c-d665-4706-b293-c63d6da475e2:e738ffcd-c364-4df3-ae02-dadf3840d8c0
╟─ 🎾  shared-trail:bbb0876c-d665-4706-b293-c63d6da475e2
╟─ 🎾  shared-waypoint:600d44ff-1f21-4ab5-b421-8de8af7bf6b6
╟─ 🎾  shared-waypoint:e25f5ef1-7524-409b-970f-d8cbd45acfb1
╟─ 🎾  shared-waypoint:b017f850-a6dd-47d3-a7c8-d6bd0355b64e
╟─ 🎾  shared-waypoint:17eaa8f7-e8f1-4798-801a-1cb8404d2881
╟─ 🎾  waypoint:93cf4dd6-5030-472f-8bf8-2d048af565be
╟─ 🎾  waypoint:97358893-37b7-49c2-a82d-b3993f5b7ce6
╟─ 🎾  waypoint:763db0f7-9f42-4f4c-837e-0a8ec0592a52
╟─ 🎾  shared-trail:a0d23871-9606-403d-8d2f-f3ba22548632
╟─ 🎾  shared-trail:a3feb828-76f9-4dc3-bccc-5ea94202d550
╚═════════════════════════════════════════════
07-21 01:41:32.246 DEBUG [l a] Updated geofence state shared-waypoint:b017f850-a6dd-47d3-a7c8-d6bd0355b64e (entry_state=0, hits=4)
07-21 01:41:32.246 DEBUG [AbstractService a] 
  ⚙️︎  FINISH [GeofencingService startId: 1, eventCount: 0, sticky: false]
07-21 01:41:32.247 INFO [w a] 
  💾 ✅ e8ef7869-a95e-4a98-8c29-d3b32d1d6507
07-21 01:41:32.247 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ geofence
07-21 01:41:32.247 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: geofence
07-21 01:41:32.247 INFO [w a] 
  💾 ✅ 9d1d49bc-a9e0-47db-b07f-8cc56f2a542e
07-21 01:41:32.250 INFO [HttpService flush] 
╔═════════════════════════════════════════════
║ HTTP Service (count: 2)
╠═════════════════════════════════════════════

07-21 01:41:32.250 INFO [HttpService flush] 
  ℹ️  HttpService is busy
07-21 01:41:32.296 INFO [BackgroundTaskManager$a a] ⏳ startBackgroundTask: 2
07-21 01:41:32.299 DEBUG [w first] 
  ✅  Locked 1 records
07-21 01:41:32.299 INFO [HttpService a] 
  🔵  HTTP POST: e8ef7869-a95e-4a98-8c29-d3b32d1d6507
07-21 01:41:32.300 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3241
07-21 01:41:32.305 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3242
07-21 01:41:32.448 DEBUG [AbstractService f] 
  ⚙️︎  GeofencingService.stopSelfResult(1): true
07-21 01:41:32.449 DEBUG [AbstractService onDestroy] 
  🔴  GeofencingService stopped
07-21 01:41:32.835 INFO [HttpService$e onResponse] 
  🔵  Response: 200
07-21 01:41:32.835 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ http
07-21 01:41:32.835 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: http
07-21 01:41:32.835 DEBUG [w a] 
  ✅  DESTROY: e8ef7869-a95e-4a98-8c29-d3b32d1d6507
07-21 01:41:32.841 DEBUG [w first] 
  ✅  Locked 1 records
07-21 01:41:32.842 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3243
07-21 01:41:32.842 INFO [HttpService a] 
  🔵  HTTP POST: 9d1d49bc-a9e0-47db-b07f-8cc56f2a542e
07-21 01:41:32.935 INFO [HttpService$e onResponse] 
  🔵  Response: 200
07-21 01:41:32.935 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ http
07-21 01:41:32.935 DEBUG [w a] 
  ✅  DESTROY: 9d1d49bc-a9e0-47db-b07f-8cc56f2a542e
07-21 01:41:32.936 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: http
07-21 01:41:32.937 INFO [BackgroundTaskManager$a m] ⏳ stopBackgroundTask: 2
07-21 01:41:32.942 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3244
07-21 01:41:35.880 DEBUG [AbstractService a] 
  🎾  geofencing [GeofencingService  startId: 1, eventCount: 1]
07-21 01:41:35.881 INFO [GeofencingProcessor handleGeofencingEvent] 
╔═════════════════════════════════════════════
║ Geofencing Event: ENTER
╠═════════════════════════════════════════════
╟─ waypoint:93cf4dd6-5030-472f-8bf8-2d048af565be
╟─ shared-waypoint:b017f850-a6dd-47d3-a7c8-d6bd0355b64e
╚═════════════════════════════════════════════
07-21 01:41:35.881 DEBUG [TSGeofenceManager a] isMoving: false | stateChanged: false | timerExpired: false | elapsed: 4505
07-21 01:41:35.881 INFO [GeofencingProcessor a] 
╔═════════════════════════════════════════════
║ Trigger vs Geofence center: waypoint:93cf4dd6-5030-472f-8bf8-2d048af565be
╠═════════════════════════════════════════════
╟─ 📍 Trigger=Location[fused 40.720435,-99.170227 hAcc=4.124 et=+4d23h34m14s820ms alt=682.3438720703125 vAcc=1.884559 vel=0.41039306 sAcc=0.070703976 bear=358.7792 bAcc=45.0]
╟─ dist=12.657006m radius=300.0m
╟─ minPossibleDist=8.533007m (insideBy=-291.46698m)
╟─ triggerAge=29ms provider=fused
╚═════════════════════════════════════════════
07-21 01:41:35.882 INFO [GeofencingProcessor a] 
╔═════════════════════════════════════════════
║ Trigger vs last location: waypoint:93cf4dd6-5030-472f-8bf8-2d048af565be
╠═════════════════════════════════════════════
╟─ A: 40.7204349,-99.1702271 acc=4.124 age=29ms provider=fused
╟─ B: 40.7204006,-99.1702716 acc=4.685 age=2907028ms provider=fused
╟─ distance=5.4m
╟─ Δt(A-B)=2906999ms
╟─ requiredSpeed=0.00 m/s (0.0 km/h)
╚═════════════════════════════════════════════
07-21 01:41:35.886 DEBUG [l a] Updated geofence state waypoint:93cf4dd6-5030-472f-8bf8-2d048af565be (entry_state=1, hits=12)
07-21 01:41:35.886 INFO [GeofencingProcessor a] 
╔═════════════════════════════════════════════
║ Trigger vs Geofence center: shared-waypoint:b017f850-a6dd-47d3-a7c8-d6bd0355b64e
╠═════════════════════════════════════════════
╟─ 📍 Trigger=Location[fused 40.720435,-99.170227 hAcc=4.124 et=+4d23h34m14s820ms alt=682.3438720703125 vAcc=1.884559 vel=0.41039306 sAcc=0.070703976 bear=358.7792 bAcc=45.0]
╟─ dist=4.765541m radius=300.0m
╟─ minPossibleDist=0.641541m (insideBy=-299.35846m)
╟─ triggerAge=34ms provider=fused
╚═════════════════════════════════════════════
07-21 01:41:35.887 INFO [GeofencingProcessor a] 
╔═════════════════════════════════════════════
║ Trigger vs last location: shared-waypoint:b017f850-a6dd-47d3-a7c8-d6bd0355b64e
╠═════════════════════════════════════════════
╟─ A: 40.7204349,-99.1702271 acc=4.124 age=35ms provider=fused
╟─ B: 40.7204006,-99.1702716 acc=4.685 age=2907033ms provider=fused
╟─ distance=5.4m
╟─ Δt(A-B)=2906999ms
╟─ requiredSpeed=0.00 m/s (0.0 km/h)
╚═════════════════════════════════════════════
07-21 01:41:35.887 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ geofence
07-21 01:41:35.887 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: geofence
07-21 01:41:35.887 INFO [w a] 
  💾 ✅ 7d1f801c-0e7d-4b94-bb26-c1e16c5ad2f9
07-21 01:41:35.889 DEBUG [l a] Updated geofence state shared-waypoint:b017f850-a6dd-47d3-a7c8-d6bd0355b64e (entry_state=1, hits=5)
07-21 01:41:35.889 INFO [HttpService flush] 
╔═════════════════════════════════════════════
║ HTTP Service (count: 1)
╠═════════════════════════════════════════════

07-21 01:41:35.889 DEBUG [AbstractService a] 
  ⚙️︎  FINISH [GeofencingService startId: 1, eventCount: 0, sticky: false]
07-21 01:41:35.889 INFO [w a] 
  💾 ✅ 1a0f93e3-f992-4f09-b5bf-af929639bf26
07-21 01:41:35.889 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ geofence
07-21 01:41:35.889 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: geofence
07-21 01:41:35.890 INFO [HttpService flush] 
  ℹ️  HttpService is busy
07-21 01:41:35.893 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3245
07-21 01:41:35.898 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3246
07-21 01:41:35.900 INFO [BackgroundTaskManager$a a] ⏳ startBackgroundTask: 3
07-21 01:41:35.902 DEBUG [w first] 
  ✅  Locked 1 records
07-21 01:41:35.902 INFO [HttpService a] 
  🔵  HTTP POST: 7d1f801c-0e7d-4b94-bb26-c1e16c5ad2f9
07-21 01:41:36.095 DEBUG [AbstractService f] 
  ⚙️︎  GeofencingService.stopSelfResult(1): true
07-21 01:41:36.095 DEBUG [AbstractService onDestroy] 
  🔴  GeofencingService stopped
07-21 01:41:36.112 INFO [HttpService$e onResponse] 
  🔵  Response: 200
07-21 01:41:36.113 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ http
07-21 01:41:36.113 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: http
07-21 01:41:36.113 DEBUG [w a] 
  ✅  DESTROY: 7d1f801c-0e7d-4b94-bb26-c1e16c5ad2f9
07-21 01:41:36.117 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3247
07-21 01:41:36.119 DEBUG [w first] 
  ✅  Locked 1 records
07-21 01:41:36.119 INFO [HttpService a] 
  🔵  HTTP POST: 1a0f93e3-f992-4f09-b5bf-af929639bf26
07-21 01:41:36.315 INFO [HttpService$e onResponse] 
  🔵  Response: 200
07-21 01:41:36.315 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ http
07-21 01:41:36.315 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: http
07-21 01:41:36.315 DEBUG [w a] 
  ✅  DESTROY: 1a0f93e3-f992-4f09-b5bf-af929639bf26
07-21 01:41:36.321 INFO [BackgroundTaskManager$a m] ⏳ stopBackgroundTask: 3
07-21 01:41:36.322 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3248
07-21 01:42:25.234 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 01:42:25.235 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 01:42:25.235 DEBUG [m a] ❤️
07-21 01:42:25.240 DEBUG [TSGeofenceManager a] isMoving: false | stateChanged: false | timerExpired: false | elapsed: 5505
07-21 01:42:25.241 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 01:42:25.241 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 01:42:25.243 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3249

<----- 6 hours of heartbeats & spurrious geofence exits / entry events like above ----->

07-21 07:48:59.369 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 07:48:59.370 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 07:48:59.371 DEBUG [m a] ❤️
07-21 07:48:59.384 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 07:48:59.384 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 07:48:59.391 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 25.0:  recommended geofence radius is >= 150.0meters
07-21 07:48:59.391 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 90.0:  recommended geofence radius is >= 150.0meters
07-21 07:48:59.391 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 100.0:  recommended geofence radius is >= 150.0meters
07-21 07:48:59.391 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 50.0:  recommended geofence radius is >= 150.0meters
07-21 07:48:59.391 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 50.0:  recommended geofence radius is >= 150.0meters
07-21 07:48:59.391 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 50.0:  recommended geofence radius is >= 150.0meters
07-21 07:48:59.392 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3514
07-21 07:48:59.394 DEBUG [TSGeofenceManager$d run] 
╔═════════════════════════════════════════════
║ TSGeofenceManager monitoring 13/13
╠═════════════════════════════════════════════
╟─ 🎾  waypoint:d977090e-ed1c-4cc3-ab2e-ee9db1b7c574
╟─ 🎾  waypoint:3f844152-4394-4ae4-ad4a-ae3d44e54f8e
╟─ 🎾  shared-mile-marker:bbb0876c-d665-4706-b293-c63d6da475e2:e738ffcd-c364-4df3-ae02-dadf3840d8c0
╟─ 🎾  shared-trail:bbb0876c-d665-4706-b293-c63d6da475e2
╟─ 🎾  shared-waypoint:600d44ff-1f21-4ab5-b421-8de8af7bf6b6
╟─ 🎾  shared-waypoint:e25f5ef1-7524-409b-970f-d8cbd45acfb1
╟─ 🎾  shared-waypoint:b017f850-a6dd-47d3-a7c8-d6bd0355b64e
╟─ 🎾  shared-waypoint:17eaa8f7-e8f1-4798-801a-1cb8404d2881
╟─ 🎾  waypoint:93cf4dd6-5030-472f-8bf8-2d048af565be
╟─ 🎾  waypoint:97358893-37b7-49c2-a82d-b3993f5b7ce6
╟─ 🎾  waypoint:763db0f7-9f42-4f4c-837e-0a8ec0592a52
╟─ 🎾  shared-trail:a0d23871-9606-403d-8d2f-f3ba22548632
╟─ 🎾  shared-trail:a3feb828-76f9-4dc3-bccc-5ea94202d550
╚═════════════════════════════════════════════
07-21 07:49:01.890 DEBUG [AbstractService a] 
  🎾  geofencing [GeofencingService  startId: 1, eventCount: 1]
07-21 07:49:01.893 INFO [GeofencingProcessor handleGeofencingEvent] 
╔═════════════════════════════════════════════
║ Geofencing Event: EXIT
╠═════════════════════════════════════════════
╟─ waypoint:93cf4dd6-5030-472f-8bf8-2d048af565be
╟─ shared-waypoint:b017f850-a6dd-47d3-a7c8-d6bd0355b64e
╚═════════════════════════════════════════════
07-21 07:49:01.893 DEBUG [TSGeofenceManager a] isMoving: false | stateChanged: false | timerExpired: false | elapsed: 3000
07-21 07:49:01.893 INFO [GeofencingProcessor a] 
╔═════════════════════════════════════════════
║ Trigger vs Geofence center: waypoint:93cf4dd6-5030-472f-8bf8-2d048af565be
╠═════════════════════════════════════════════
╟─ 📍 Trigger=Location[fused 40.719249,-99.173594 hAcc=3.79 et=+5d5h41m40s819ms alt=668.669677734375 vAcc=2.5 vel=11.29 sAcc=0.93427694 bear=288.0 bAcc=0.28743115]
╟─ dist=319.21286m radius=300.0m
╟─ minPossibleDist=315.42285m (outsideBy=15.422852m)
╟─ triggerAge=41ms provider=fused
╚═════════════════════════════════════════════
07-21 07:49:01.893 INFO [GeofencingProcessor a] 
╔═════════════════════════════════════════════
║ Trigger vs last location: waypoint:93cf4dd6-5030-472f-8bf8-2d048af565be
╠═════════════════════════════════════════════
╟─ A: 40.7192486,-99.1735943 acc=3.79 age=42ms provider=fused
╟─ B: 40.7204766,-99.170361 acc=7.789 age=11415041ms provider=fused
╟─ distance=305.3m
╟─ Δt(A-B)=11415000ms
╟─ requiredSpeed=0.03 m/s (0.1 km/h)
╚═════════════════════════════════════════════
07-21 07:49:01.894 DEBUG [l a] Updated geofence state waypoint:93cf4dd6-5030-472f-8bf8-2d048af565be (entry_state=0, hits=14)
07-21 07:49:01.895 INFO [GeofencingProcessor a] 
╔═════════════════════════════════════════════
║ Trigger vs Geofence center: shared-waypoint:b017f850-a6dd-47d3-a7c8-d6bd0355b64e
╠═════════════════════════════════════════════
╟─ 📍 Trigger=Location[fused 40.719249,-99.173594 hAcc=3.79 et=+5d5h41m40s819ms alt=668.669677734375 vAcc=2.5 vel=11.29 sAcc=0.93427694 bear=288.0 bAcc=0.28743115]
╟─ dist=317.8701m radius=300.0m
╟─ minPossibleDist=314.08008m (outsideBy=14.080078m)
╟─ triggerAge=44ms provider=fused
╚═════════════════════════════════════════════
07-21 07:49:01.895 INFO [GeofencingProcessor a] 
╔═════════════════════════════════════════════
║ Trigger vs last location: shared-waypoint:b017f850-a6dd-47d3-a7c8-d6bd0355b64e
╠═════════════════════════════════════════════
╟─ A: 40.7192486,-99.1735943 acc=3.79 age=44ms provider=fused
╟─ B: 40.7204766,-99.170361 acc=7.789 age=11415043ms provider=fused
╟─ distance=305.3m
╟─ Δt(A-B)=11415000ms
╟─ requiredSpeed=0.03 m/s (0.1 km/h)
╚═════════════════════════════════════════════
07-21 07:49:01.895 DEBUG [l a] Updated geofence state shared-waypoint:b017f850-a6dd-47d3-a7c8-d6bd0355b64e (entry_state=0, hits=7)
07-21 07:49:01.896 INFO [w a] 
  💾 ✅ 1acd380e-093a-4d04-8e75-df7821e65f07
07-21 07:49:01.896 DEBUG [AbstractService a] 
  ⚙️︎  FINISH [GeofencingService startId: 1, eventCount: 0, sticky: false]
07-21 07:49:01.896 INFO [w a] 
  💾 ✅ b82b3470-e890-4fbc-8520-b14c4997577a
07-21 07:49:01.897 INFO [HttpService flush] 
╔═════════════════════════════════════════════
║ HTTP Service (count: 2)
╠═════════════════════════════════════════════

07-21 07:49:01.897 INFO [HttpService flush] 
  ℹ️  HttpService is busy
07-21 07:49:01.897 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ geofence
07-21 07:49:01.897 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: geofence
07-21 07:49:01.899 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ geofence
07-21 07:49:01.900 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: geofence
07-21 07:49:01.924 INFO [BackgroundTaskManager$a a] ⏳ startBackgroundTask: 9
07-21 07:49:01.925 DEBUG [w first] 
  ✅  Locked 1 records
07-21 07:49:01.925 INFO [HttpService a] 
  🔵  HTTP POST: 1acd380e-093a-4d04-8e75-df7821e65f07
07-21 07:49:01.933 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3515
07-21 07:49:01.934 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3516
07-21 07:49:02.099 DEBUG [AbstractService f] 
  ⚙️︎  GeofencingService.stopSelfResult(1): true
07-21 07:49:02.099 DEBUG [AbstractService onDestroy] 
  🔴  GeofencingService stopped
07-21 07:49:02.696 INFO [HttpService$e onResponse] 
  🔵  Response: 200
07-21 07:49:02.697 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ http
07-21 07:49:02.697 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: http
07-21 07:49:02.697 DEBUG [w a] 
  ✅  DESTROY: 1acd380e-093a-4d04-8e75-df7821e65f07
07-21 07:49:02.700 DEBUG [w first] 
  ✅  Locked 1 records
07-21 07:49:02.700 INFO [HttpService a] 
  🔵  HTTP POST: b82b3470-e890-4fbc-8520-b14c4997577a
07-21 07:49:02.704 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3517
07-21 07:49:02.797 INFO [HttpService$e onResponse] 
  🔵  Response: 200
07-21 07:49:02.797 DEBUG [w a] 
  ✅  DESTROY: b82b3470-e890-4fbc-8520-b14c4997577a
07-21 07:49:02.797 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ http
07-21 07:49:02.797 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: http
07-21 07:49:02.802 INFO [BackgroundTaskManager$a m] ⏳ stopBackgroundTask: 9
07-21 07:49:02.803 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3518
07-21 07:50:02.501 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 07:50:02.502 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 07:50:02.503 DEBUG [m a] ❤️
07-21 07:50:02.513 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 25.0:  recommended geofence radius is >= 150.0meters
07-21 07:50:02.513 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 90.0:  recommended geofence radius is >= 150.0meters
07-21 07:50:02.513 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 100.0:  recommended geofence radius is >= 150.0meters
07-21 07:50:02.513 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 50.0:  recommended geofence radius is >= 150.0meters
07-21 07:50:02.513 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 50.0:  recommended geofence radius is >= 150.0meters
07-21 07:50:02.513 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 50.0:  recommended geofence radius is >= 150.0meters
07-21 07:50:02.513 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 07:50:02.513 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 07:50:02.515 DEBUG [TSGeofenceManager$d run] 
╔═════════════════════════════════════════════
║ TSGeofenceManager monitoring 13/13
╠═════════════════════════════════════════════
╟─ 🎾  waypoint:d977090e-ed1c-4cc3-ab2e-ee9db1b7c574
╟─ 🎾  waypoint:3f844152-4394-4ae4-ad4a-ae3d44e54f8e
╟─ 🎾  shared-mile-marker:bbb0876c-d665-4706-b293-c63d6da475e2:e738ffcd-c364-4df3-ae02-dadf3840d8c0
╟─ 🎾  shared-trail:bbb0876c-d665-4706-b293-c63d6da475e2
╟─ 🎾  shared-waypoint:600d44ff-1f21-4ab5-b421-8de8af7bf6b6
╟─ 🎾  shared-waypoint:e25f5ef1-7524-409b-970f-d8cbd45acfb1
╟─ 🎾  shared-waypoint:b017f850-a6dd-47d3-a7c8-d6bd0355b64e
╟─ 🎾  shared-waypoint:17eaa8f7-e8f1-4798-801a-1cb8404d2881
╟─ 🎾  waypoint:93cf4dd6-5030-472f-8bf8-2d048af565be
╟─ 🎾  waypoint:97358893-37b7-49c2-a82d-b3993f5b7ce6
╟─ 🎾  waypoint:763db0f7-9f42-4f4c-837e-0a8ec0592a52
╟─ 🎾  shared-trail:a0d23871-9606-403d-8d2f-f3ba22548632
╟─ 🎾  shared-trail:a3feb828-76f9-4dc3-bccc-5ea94202d550
╚═════════════════════════════════════════════
07-21 07:50:02.517 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3519
07-21 07:51:06.192 INFO [ScheduleEvent a] 
╔═════════════════════════════════════════════
║ ⏰ OneShot event fired: HEARTBEAT
╠═════════════════════════════════════════════

07-21 07:51:06.192 INFO [TSScheduleManager oneShot] 
  ⏰ Scheduled OneShot: HEARTBEAT in 60000ms (jobID: -1307475748)
07-21 07:51:06.193 DEBUG [m a] ❤️
07-21 07:51:06.201 DEBUG [HeadlessEventTx fire] 🛜 💀⚡️ heartbeat
07-21 07:51:06.201 DEBUG [HeadlessTask onHeadlessEvent] 💀  event: heartbeat
07-21 07:51:06.202 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 25.0:  recommended geofence radius is >= 150.0meters
07-21 07:51:06.202 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 90.0:  recommended geofence radius is >= 150.0meters
07-21 07:51:06.202 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 100.0:  recommended geofence radius is >= 150.0meters
07-21 07:51:06.202 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 50.0:  recommended geofence radius is >= 150.0meters
07-21 07:51:06.202 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 50.0:  recommended geofence radius is >= 150.0meters
07-21 07:51:06.203 WARN [TSGeofence$Builder build] 
  ⚠️  Geofence radius: 50.0:  recommended geofence radius is >= 150.0meters
07-21 07:51:06.204 DEBUG [TSGeofenceManager$d run] 
╔═════════════════════════════════════════════
║ TSGeofenceManager monitoring 13/13
╠═════════════════════════════════════════════
╟─ 🎾  waypoint:d977090e-ed1c-4cc3-ab2e-ee9db1b7c574
╟─ 🎾  waypoint:3f844152-4394-4ae4-ad4a-ae3d44e54f8e
╟─ 🎾  shared-mile-marker:bbb0876c-d665-4706-b293-c63d6da475e2:e738ffcd-c364-4df3-ae02-dadf3840d8c0
╟─ 🎾  shared-trail:bbb0876c-d665-4706-b293-c63d6da475e2
╟─ 🎾  shared-waypoint:600d44ff-1f21-4ab5-b421-8de8af7bf6b6
╟─ 🎾  shared-waypoint:e25f5ef1-7524-409b-970f-d8cbd45acfb1
╟─ 🎾  shared-waypoint:b017f850-a6dd-47d3-a7c8-d6bd0355b64e
╟─ 🎾  shared-waypoint:17eaa8f7-e8f1-4798-801a-1cb8404d2881
╟─ 🎾  waypoint:93cf4dd6-5030-472f-8bf8-2d048af565be
╟─ 🎾  waypoint:97358893-37b7-49c2-a82d-b3993f5b7ce6
╟─ 🎾  waypoint:763db0f7-9f42-4f4c-837e-0a8ec0592a52
╟─ 🎾  shared-trail:a0d23871-9606-403d-8d2f-f3ba22548632
╟─ 🎾  shared-trail:a3feb828-76f9-4dc3-bccc-5ea94202d550
╚═════════════════════════════════════════════
07-21 07:51:06.204 DEBUG [HeadlessTaskManager onHeadlessJsTaskFinish] [onHeadlessJsTaskFinish] taskId: 3520

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the geolocation and activity configuration in the issue, then trace the logged motionchange event where isMoving=false and stationary-region monitoring continues. Compare the condensed Samsung S25 Edge/Android 16 log around stationary entry and geofence exit; done means the device reliably leaves stationary mode after breaking the separate geofence.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, react-native, typescript
Domain
mobile
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.