{"record":{"id":"84b2de45ebd38583","repo":"ruvnet/ruflo","slug":"device-offline-deviceid","errorCode":null,"errorMessage":"Device offline: ${deviceId}","messagePattern":"Device offline: (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"v3/@claude-flow/plugin-iot-cognitum/src/plugin.ts","lineNumber":69,"sourceCode":"      fleetRepository: new InMemoryFleetRepository(),\n    }, {\n      onDeviceRegistered: (device) => {\n        context.logger.info(`Device registered: ${device.deviceId} at ${device.endpoint}`);\n        context.eventBus.emit('iot:device-registered', device);\n      },\n      onTrustChange: (deviceId, oldLevel, newLevel) => {\n        context.logger.info(`Trust change for ${deviceId}: ${oldLevel} -> ${newLevel}`);\n        context.eventBus.emit('iot:trust-change', { deviceId, oldLevel, newLevel });\n      },\n    });\n\n    context.services.register('iot:coordinator', this.coordinator);\n\n    const healthIntervalMs = (config['healthIntervalMs'] as number) ?? 30_000;\n    this.healthProbe = new HealthProbeWorker(this.coordinator, {\n      intervalMs: healthIntervalMs,\n      onDeviceOffline: (deviceId) => {\n        context.logger.warn(`Device offline: ${deviceId}`);\n        context.eventBus.emit('iot:device-offline', { deviceId });\n      },\n      onDeviceOnline: (deviceId) => {\n        context.logger.info(`Device back online: ${deviceId}`);\n        context.eventBus.emit('iot:device-online', { deviceId });\n      },\n    });\n    this.healthProbe.start();\n\n    const telemetryIntervalMs = (config['telemetryIntervalMs'] as number) ?? 60_000;\n    this.telemetryIngest = new TelemetryIngestWorker(this.coordinator, {\n      intervalMs: telemetryIntervalMs,\n      onIngestionComplete: (deviceId, vectorCount) => {\n        context.logger.debug(`Telemetry ingest for ${deviceId}: ${vectorCount} vectors`);\n      },\n      onIngestionError: (deviceId, error) => {\n        context.logger.warn(`Telemetry ingest error for ${deviceId}: ${error.message}`);\n      },","sourceCodeStart":51,"sourceCodeEnd":87,"githubUrl":"https://github.com/ruvnet/ruflo/blob/fa13ee4ad60ac2090b1480656eb233521790d640/v3/@claude-flow/plugin-iot-cognitum/src/plugin.ts#L51-L87","documentation":"Diagnostic from the IoT cognitum plugin's coordinator lifecycle hooks: the device with the given deviceId has gone offline (missed health/heartbeat), transitioning it out of the active fleet. Purely informational — it does not indicate a plugin failure, only device availability state.","triggerScenarios":"Thrown at v3/@claude-flow/plugin-iot-cognitum/src/plugin.ts:69 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check power/connectivity of the named device; commands will fail until it comes back online."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"fa13ee4ad60ac2090b1480656eb233521790d640","analyzedAt":"2026-08-18T21:34:22.708Z","contentChangedAt":"2026-08-18T21:34:22.708Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}