-
-
Notifications
You must be signed in to change notification settings - Fork 80.7k
Heartbeat fallback can deliver repeated internal stream-error placeholders #97357
Copy link
Copy link
Closed
Closed
Copy link
Labels
P2Normal backlog priority with limited blast radius.Normal backlog priority with limited blast radius.clawsweeper:fix-shape-clearClawSweeper found a clear likely implementation shape for this issue.ClawSweeper found a clear likely implementation shape for this issue.clawsweeper:queueable-fixClawSweeper marked this issue as an existing queue_fix_pr work candidate.ClawSweeper marked this issue as an existing queue_fix_pr work candidate.clawsweeper:source-reproClawSweeper found a high-confidence source-level issue reproduction.ClawSweeper found a high-confidence source-level issue reproduction.impact:auth-providerAuth, provider routing, model choice, or SecretRef resolution may break.Auth, provider routing, model choice, or SecretRef resolution may break.impact:message-lossChannel message delivery can be lost, duplicated, or misrouted.Channel message delivery can be lost, duplicated, or misrouted.impact:session-stateSession, memory, transcript, context, or agent state can drift or corrupt.Session, memory, transcript, context, or agent state can drift or corrupt.issue-rating: 🦞 diamond lobsterVery strong issue quality with high-confidence source-level or clear reproduction.Very strong issue quality with high-confidence source-level or clear reproduction.maturity:stableIssue affects a taxonomy feature currently scored M4/M5.Issue affects a taxonomy feature currently scored M4/M5.no-staleExclude from stale automationExclude from stale automation
Description
Metadata
Metadata
Assignees
Labels
P2Normal backlog priority with limited blast radius.Normal backlog priority with limited blast radius.clawsweeper:fix-shape-clearClawSweeper found a clear likely implementation shape for this issue.ClawSweeper found a clear likely implementation shape for this issue.clawsweeper:queueable-fixClawSweeper marked this issue as an existing queue_fix_pr work candidate.ClawSweeper marked this issue as an existing queue_fix_pr work candidate.clawsweeper:source-reproClawSweeper found a high-confidence source-level issue reproduction.ClawSweeper found a high-confidence source-level issue reproduction.impact:auth-providerAuth, provider routing, model choice, or SecretRef resolution may break.Auth, provider routing, model choice, or SecretRef resolution may break.impact:message-lossChannel message delivery can be lost, duplicated, or misrouted.Channel message delivery can be lost, duplicated, or misrouted.impact:session-stateSession, memory, transcript, context, or agent state can drift or corrupt.Session, memory, transcript, context, or agent state can drift or corrupt.issue-rating: 🦞 diamond lobsterVery strong issue quality with high-confidence source-level or clear reproduction.Very strong issue quality with high-confidence source-level or clear reproduction.maturity:stableIssue affects a taxonomy feature currently scored M4/M5.Issue affects a taxonomy feature currently scored M4/M5.no-staleExclude from stale automationExclude from stale automation
Type
Fields
Priority
None yet
Describe the Bug
An agent heartbeat poll can send a visible Feishu DM containing many repetitions of the internal stream-error placeholder:
In the observed case, the heartbeat did not actually complete its configured check. Instead, after the primary model failed and the fallback model was selected, the fallback model returned a final visible message made only of repeated placeholder strings.
Steps to Reproduce
HEARTBEAT_OK.deepseek/deepseek-v4-flash.Evidence
OpenClaw version:
Observed local session:
Timeline:
The fallback turn ended with
stopReason=stop, so the bad placeholder text was treated as a normal final assistant response and delivered to the Feishu default bot DM.I also checked the runtime stores around 11:35-11:50 CST:
So this was not a cron job delivery and not a queued task failure. It was the heartbeat session itself producing a visible reply.
Expected Behavior
Heartbeat should either:
HEARTBEAT_OK, orInternal stream-error placeholder text should never be delivered as user-visible heartbeat output.
Actual Behavior
The heartbeat fallback model produced a visible final reply containing 43 repetitions of
[assistant turn failed before producing content].The configured heartbeat check did not run to completion. In this case
scripts/heartbeat_check.pywas not called.Why This Matters
This creates a noisy direct message blast to the user and makes heartbeat status ambiguous:
Related Issues
This is related to but distinct from:
This report is specifically about heartbeat + fallback + visible channel delivery: a fallback model echoes internal placeholder text as a normal final reply, and the heartbeat output filter does not suppress it.
Possible Fix Direction
[assistant turn failed before producing content]from visible heartbeat replies even when returned by a fallback model as normal text.