System Health follows the runtime switcher for all 32 runtimes: no OpenClaw cards elsewhere, no invented sub-agent success rate - #5982
Conversation
✅ Drift Bot (ClawMetry): no drift detectedDrift Bot analyzed the changed files against this project's blueprints and requirements and found no drift. |
Visual diffComparing 26 of 70 comparison(s) flagged (>1% pixel diff).
Folder: 5a5df63d35d4. Full PNGs also attached as a workflow artefact. Generated by visual-diff bot. Pixel diffs >1% flagged; eyeball the table before merging. This check is non-blocking — fail = bot bug, not a code problem. |
✅ Drift Bot (ClawMetry): no drift detectedDrift Bot analyzed the changed files against this project's blueprints and requirements and found no drift. |
|
E2E Gate timed out — not a code failure; needs a re-push to trigger a fresh run. The E2E Gate (
All five passed cleanly — the gate just hit the 1-hour ceiling before they reported in. All other checks including Syntax & Lint and Drift Bot were green. A trivial push to the branch will start a fresh CI run; on a quieter runner slot the gate should complete well inside the 60-minute window. Generated by Claude Code |
|
Auto-rebase attempted by the PR-mergeability janitor; conflicts span >5 files (add/add conflicts in Generated by Claude Code |
✅ Drift Bot (ClawMetry): no drift detectedDrift Bot analyzed the changed files against this project's blueprints and requirements and found no drift. |
|
Resolved merge conflict in Generated by Claude Code |
|
✨ auto-fixed: merged latest main into branch (was behind) Generated by Claude Code |
✅ Drift Bot (ClawMetry): no drift detectedDrift Bot analyzed the changed files against this project's blueprints and requirements and found no drift. |
|
Blocked on required review — skipping (auto-mergeability sweep). @vivekchand please approve when ready. Generated by Claude Code |
784f5ae to
aed367c
Compare
✅ Drift Bot (ClawMetry): no drift detectedDrift Bot analyzed the changed files against this project's blueprints and requirements and found no drift. |
…cess rate With the switcher on Claude Code the Overview System Health panel listed "OpenClaw Gateway :18789", a Healthy heartbeat, Cron Jobs and "Connect a channel", none of which Claude Code has. Sub-Agents read "0 runs, 100%": the endpoint counted session ids containing "subagent" across every runtime and stamped each one a success. - loadSystemHealth scopes sections to the runtime's declared _CM_RT_CAPS: OpenClaw-family checks (gateway service and vitals, heartbeat, version regression, diagnostics, openclaw.json inference/security, delegation chains) need GATEWAY_RPC; crons need CRONS; channels and ingest need CHANNELS; sub-agents need SUBAGENTS. Disk, sandbox, daemon and latency stay. Gating runs before the fetch, so a slow request never paints OpenClaw's error state under another runtime. A scope line says what the panel covers; the node-wide reliability trend hides under one runtime. - Switching runtime reloads the panel instead of waiting 30s. - /api/system-health reads query_subagent_stats_by_runtime with ?runtime= and returns runs/completed/failed/running; successPct is null until a run finished, and "unavailable" when the store cannot be read. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QpcVFD77MdQbNCsvrBSLDW
"Is your agent alive?" and the Overview header heartbeat card both read OpenClaw's 30-minute HEARTBEAT_OK session, so under Claude Code they sat at "waiting..." with an empty check-in. loadHeartbeat, the template renderer and loadSystemHealth (on a runtime switch) now hide them unless the runtime declares GATEWAY_RPC. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QpcVFD77MdQbNCsvrBSLDW
… runtimes System Health scopes from _CM_RT_CAPS. A local install overrides that map from /api/agents, but the hosted dashboard has only the static copy, and it had drifted from what the adapters declare in clawmetry-pro 0.7.28: - SUBAGENTS added for codex, copilot, cursor, deepagents, devin, goose, grok, n8n, nanoclaw, opencode, pi, picoclaw and qwen_code; removed for exo, which declares none. - muse_code, openworker, qm and replit had no entry, so the sidebar showed them every tab, OpenClaw's included. The Sub-Agents card also shows whenever a runtime has runs, so a stale map never hides real children, and _cmLoadDeclaredCaps re-renders System Health when the local override lands. New guard: every FREE|PAID runtime needs an entry, and only OpenClaw/NemoClaw may claim GATEWAY_RPC, CRONS or CHANNELS. COST flags are unchanged (computed per install for some adapters). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QpcVFD77MdQbNCsvrBSLDW
aed367c to
5a5df63
Compare
|
Auto-rebase pushed; CI now running. If still not green in 10min, may need manual attention. Generated by Claude Code |
✅ Drift Bot (ClawMetry): no drift detectedDrift Bot analyzed the changed files against this project's blueprints and requirements and found no drift. |
…cope param and _cmMarkLoaded
Takes both sides of the app.js conflict:
- ?runtime= query param for scoped system health (this PR)
- _cmMarkLoaded('systemHealth') call (#5935, landed on main)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011Ai4CGH9XcWK1Jc3wy1a62
✅ Drift Bot (ClawMetry): no drift detectedDrift Bot analyzed the changed files against this project's blueprints and requirements and found no drift. |
…his PR) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011Ai4CGH9XcWK1Jc3wy1a62
✅ Drift Bot (ClawMetry): no drift detectedDrift Bot analyzed the changed files against this project's blueprints and requirements and found no drift. |
Problem
With the runtime switcher on Claude Code, Overview showed OpenClaw-only health: "OpenClaw Gateway :18789", a "Healthy" heartbeat, Cron Jobs, "Connect a channel", gateway config diagnostics and an empty "Is your agent alive?" card. Sub-Agents read "0 runs, 100% success":
/api/system-healthcounted session ids containing "subagent" across every runtime, stamped each one a success, and defaulted an idle node to 100.The same was true for every non-OpenClaw runtime, and the capability map that decides what a runtime has had drifted: the hosted dashboard, which has only the static map, hid sub-agents for 13 runtimes that emit them, showed them for Exo, which does not, and had no entry at all for Muse Code, OpenWorker, qm and Replit (so the sidebar showed them every tab, OpenClaw's included).
Fix
loadSystemHealth,_shRuntimeScope): sections follow the runtime's capabilities. Gateway service and vitals, heartbeat (both Overview heartbeat cards too), version regression, diagnostics, inference and security read from openclaw.json, and delegation chains needGATEWAY_RPC. Crons needCRONS, channels and channel ingest needCHANNELS, sub-agents needSUBAGENTSor real runs. Disk, sandbox, daemon and handler latency are machine-wide and always shown. A line under the title says what the panel covers; the node-wide reliability trend hides under one runtime. Gating runs before the fetch, so a slow request cannot paint OpenClaw's error state under another runtime. A runtime switch, and the local/api/agentscapability override landing, both re-render the panel._base_capabilities()in clawmetry-pro 0.7.28 (the version the local daemon runs, read from the installed wheel): SUBAGENTS added for Codex, Copilot, Cursor, DeepAgents, Devin, Goose, Grok, n8n, NanoClaw, OpenCode, Pi, PicoClaw, Qwen Code; removed for Exo; entries added for Muse Code, OpenWorker, qm, Replit. COST flags unchanged.subagent_health_block): readsquery_subagent_stats_by_runtimeper runtime (?runtime=); its prefix list covers all 30 non-OpenClaw runtimes.successPctisnulluntil a run finished ("N/A, No finished runs"), and "unavailable" when the store cannot be read. A legacy payload without completed/failed counts never renders its percentage.Result per runtime
Verified
tests/test_system_health_runtime_scope.py(24 tests): backend block, template wrappers, gating, heartbeat cards, a node run of_shRuntimeScopeagainst the real map, and a guard that every shipped runtime has an entry and only OpenClaw/NemoClaw claim gateway, cron or channel capabilities.app.jsfor all 32FREE_RUNTIMES | PAID_RUNTIMES./api/system-health?runtime=claude_code+/api/handler-latencyare fetched; under OpenClaw the full set renders; both heartbeat cards hide under Claude Code. No console errors.check_ac_coverage --check,lint_daemon_allowlist,check_py39_annotations,node --checkpass.test_runtime_tab_capability_parityfails identically on untouchedorigin/main(OpenClaw now declares INPUTS/REASONING), unrelated.Cloud
The hosted dashboard serves this
app.js, so the gating and the synced map apply there. Cloud's own/api/system-healthstill sendssuccessPct: 100without completed/failed counts; the card ignores that value, and fixing the cloud payload is a follow-up in clawmetry-cloud.Requirements: https://factory.8090.ai/project/b415065f-ab2f-4f53-8864-0c009fd098cb/requirements/d518c6c3-eb50-4b0f-9ed0-59440380b7bf (AC-OBS-002.3), https://factory.8090.ai/project/b415065f-ab2f-4f53-8864-0c009fd098cb/requirements/1a471e48-24c5-4a19-8e40-bf35c24f7084 (AC-GOV-001.3)
🤖 Generated with Claude Code
https://claude.ai/code/session_01QpcVFD77MdQbNCsvrBSLDW