{"record":{"id":"4b74fc39a1ffb303","repo":"tinyhumansai/openhuman","slug":"channel-count-channels-stale-stale","errorCode":null,"errorMessage":"{channel_count} channels, {stale} stale","messagePattern":"(.+?) channels, (.+?) stale","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/platform/doctor/core.rs","lineNumber":700,"sourceCode":"                    cat,\n                    format!(\"{name} fresh ({age}s ago)\"),\n                ));\n            } else {\n                stale += 1;\n                items.push(DiagnosticItem::error(\n                    cat,\n                    format!(\"{name} stale (ok={status_ok}, age={age}s)\"),\n                ));\n            }\n        }\n\n        if channel_count == 0 {\n            items.push(DiagnosticItem::warn(\n                cat,\n                \"no channel components tracked yet\",\n            ));\n        } else if stale > 0 {\n            items.push(DiagnosticItem::warn(\n                cat,\n                format!(\"{channel_count} channels, {stale} stale\"),\n            ));\n        }\n    }\n}\n\n// ── Environment checks ───────────────────────────────────────────\n\nfn check_environment(items: &mut Vec<DiagnosticItem>) {\n    let cat = \"environment\";\n\n    // git\n    check_command_available(\"git\", &[\"--version\"], cat, items);\n\n    // Shell\n    let shell = std::env::var(\"SHELL\").unwrap_or_default();\n    if shell.is_empty() {","sourceCodeStart":682,"sourceCodeEnd":718,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/platform/doctor/core.rs#L682-L718","documentation":"Doctor channel-health summary: at least one channel component is tracked but one or more failed the freshness test — either their last ok-status heartbeat is older than CHANNEL_STALE_SECONDS or reported ok=false. The counts say how many channels are tracked and how many are stale; each stale channel also emitted its own per-channel error line with its ok flag and age.","triggerScenarios":"Thrown at src/openhuman/platform/doctor/core.rs:700 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Inspect the per-channel error items to see which channel is stale and how old its heartbeat is","Check that provider's credentials/network (bot token revoked, daemon down, network blocked)","Restart the core so channel workers reconnect and republish fresh heartbeats"],"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"}