zeroclaw-labs/zeroclaw · warning · DiagItem

no channel components tracked yet

Error message

no channel components tracked yet

What it means

A `zeroclaw doctor` warning from `check_daemon_state`: the daemon state file's `components` object contains no entry whose name starts with `channel:`. Doctor counts channel components by that prefix; zero means it cannot report any channel health — usually because no channels are enabled, the daemon just started, or channel components have not registered yet.

Source

Thrown at crates/zeroclaw-runtime/src/doctor/mod.rs:1706

                .and_then(serde_json::Value::as_str)
                .and_then(parse_rfc3339)
                .map_or(i64::MAX, |dt| {
                    Utc::now().signed_duration_since(dt).num_seconds()
                });

            if status_ok && age <= CHANNEL_STALE_SECONDS {
                items.push(DiagItem::ok(cat, format!("{name} fresh ({age}s ago)")));
            } else {
                stale += 1;
                items.push(DiagItem::error(
                    cat,
                    format!("{name} stale (ok={status_ok}, age={age}s)"),
                ));
            }
        }

        if channel_count == 0 {
            items.push(DiagItem::warn(cat, "no channel components tracked yet"));
        } else if stale > 0 {
            items.push(DiagItem::warn(
                cat,
                format!("{channel_count} channels, {stale} stale"),
            ));
        }
    }
}

// ── Environment checks ───────────────────────────────────────────

fn check_environment(items: &mut Vec<DiagItem>) {
    let cat = "environment";

    // git
    check_command_available("git", &["--version"], cat, items);

    // Shell — Unix uses $SHELL, Windows uses %ComSpec% (path to cmd.exe).

View on GitHub (pinned to 88bb9c8533)

Solutions

  1. Confirm at least one channel is enabled and its token is set (see the channel config warnings doctor reports).
  2. Give the daemon time to start the channels and write component status, then re-run `zeroclaw doctor`.
  3. If channels are enabled but never register, check daemon logs for channel startup errors.

Example fix

# before: no channel:* entries in the daemon state file
# doctor: no channel components tracked yet

# after
journalctl --user -u zeroclaw -n 100   # confirm channels started
systemctl --user restart zeroclaw && sleep 10 && zeroclaw doctor
Defensive patterns

Strategy: validation

Validate before calling

let has_channels = state
    .get("components")
    .and_then(|c| c.as_object())
    .map(|c| c.keys().any(|k| k.starts_with("channel:")))
    .unwrap_or(false);

Prevention

When it happens

Trigger: Running `zeroclaw doctor` when the daemon is running with zero enabled channels, or before any channel component has written its first status into the state file's `components` map.

Common situations: Doctor run against a fresh daemon before channels connect; all channels disabled in config; channels failing so early they never register components.

Related errors


AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23). Data as JSON: /api/errors/f8c95e06bec8bd48. Report an issue: GitHub.