{"record":{"id":"7dfd25022c7b3978","repo":"tinyhumansai/openhuman","slug":"scheduler-component-not-tracked-yet","errorCode":null,"errorMessage":"scheduler component not tracked yet","messagePattern":"scheduler component not tracked yet","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/platform/doctor/core.rs","lineNumber":654,"sourceCode":"                .and_then(serde_json::Value::as_str)\n                .and_then(parse_rfc3339)\n                .map_or(i64::MAX, |dt| {\n                    Utc::now().signed_duration_since(dt).num_seconds()\n                });\n\n            if scheduler_ok && scheduler_age <= SCHEDULER_STALE_SECONDS {\n                items.push(DiagnosticItem::ok(\n                    cat,\n                    format!(\"scheduler healthy (last ok {scheduler_age}s ago)\"),\n                ));\n            } else {\n                items.push(DiagnosticItem::error(\n                    cat,\n                    format!(\"scheduler unhealthy (ok={scheduler_ok}, age={scheduler_age}s)\"),\n                ));\n            }\n        } else {\n            items.push(DiagnosticItem::warn(\n                cat,\n                \"scheduler component not tracked yet\",\n            ));\n        }\n\n        // Channels\n        let mut channel_count = 0u32;\n        let mut stale = 0u32;\n        for (name, component) in components {\n            if !name.starts_with(\"channel:\") {\n                continue;\n            }\n            channel_count += 1;\n            let status_ok = component\n                .get(\"status\")\n                .and_then(serde_json::Value::as_str)\n                .is_some_and(|s| s == \"ok\");\n            let age = component","sourceCodeStart":636,"sourceCodeEnd":672,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/platform/doctor/core.rs#L636-L672","documentation":"Doctor service-health check: the scheduler component has never published a heartbeat to the component-status store, so `scheduler_ok` is false and no last-ok timestamp exists (the age defaults to i64::MAX, which also fails the staleness comparison). This means either the core just started and the cron scheduler has not ticked yet, or the scheduler service is not running/persisting status at all.","triggerScenarios":"Thrown at src/openhuman/platform/doctor/core.rs:654 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Re-run the doctor a minute after core start to let the scheduler publish its first heartbeat","Verify the cron service is in the active ServiceSet (not disabled via headless/none services preset)","Check core logs for scheduler startup errors if no heartbeat ever appears"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"749120085864ce16e0f273c7b86fac7740b39c5b","analyzedAt":"2026-08-17T21:21:45.363Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}