Reporter: Meesho supplier automation user (chat 1503962408)
Date: 2026-09-10 (IST)
Severity: High — scheduled runs fail silently; platform reports them as OK
Status: Recurring (2 consecutive scheduled runs, 2 different tasks)
Error (exact)
Error code: 400 - {'error': {'message': "Messages with role 'tool' must be a response to a preceding message with 'tool_calls'", 'type': 'invalid_request_error', 'param': None, 'code': 'invalid_request_error'}}
What happens
A scheduled (cron) task run starts, then aborts mid-execution with the error above.
The run produces no output artifacts (no report file, no Telegram message), yet the
task's last_status is recorded as "ok" and run_count increments — so there is no
visible failure signal other than the missing outputs.
Recurrence — both affected runs
| # |
Task |
Schedule |
First run? |
When (IST) |
Result |
| 1 |
Meesho daily pending-orders accept |
daily 23:00 |
No (had run ok before manually-created) |
2026-09-09 23:00 |
400 error, no outputs |
| 2 |
Meesho Label Download — Every 4 Hours |
0 */4 * * * |
Yes — task created ~25 min earlier, never ran before |
2026-09-10 00:00 |
400 error, no outputs |
Key observation: run #2 was the first ever run of a brand-new task — so the failure is
not caused by long-running state, accumulated context, or the task's instructions.
What works
Interactive (chat) sessions running the same steps against the same website complete
successfully every time (same tools: browser automation via Puppeteer MCP, file writes,
send_message). The failure is specific to the scheduled-run execution path.
Hypothesis for the platform team
The scheduled-run engine compacts/rewrites the agent's message history mid-run; afterwards a
tool role message remains that no longer follows a matching tool_calls message, and the
model API rejects the request with this 400. Additionally, the runner does not propagate
this failure into last_status (reports "ok" instead of an error).
Requested fix
- Prevent tool-role messages from surviving context compaction without their
tool_calls
parent (drop or re-pair them before sending to the API).
- Record genuinely failed runs as failed (
last_status error) so users/alerts can detect
missed runs instead of discovering them from missing outputs.
Current state (so support can triage)
- Tasks affected:
task-272f869009 (Label Download — Every 4 Hours), task-ac6a7c2f06
(Meesho daily pending-orders accept)
- Both schedules remain enabled and will keep failing until the runner is fixed.
- Business impact so far: 2 missed runs, recovered manually (~2 min each); no orders lost.
Reporter: Meesho supplier automation user (chat 1503962408)
Date: 2026-09-10 (IST)
Severity: High — scheduled runs fail silently; platform reports them as OK
Status: Recurring (2 consecutive scheduled runs, 2 different tasks)
Error (exact)
What happens
A scheduled (cron) task run starts, then aborts mid-execution with the error above.
The run produces no output artifacts (no report file, no Telegram message), yet the
task's
last_statusis recorded as "ok" andrun_countincrements — so there is novisible failure signal other than the missing outputs.
Recurrence — both affected runs
Key observation: run #2 was the first ever run of a brand-new task — so the failure is
not caused by long-running state, accumulated context, or the task's instructions.
What works
Interactive (chat) sessions running the same steps against the same website complete
successfully every time (same tools: browser automation via Puppeteer MCP, file writes,
send_message). The failure is specific to the scheduled-run execution path.Hypothesis for the platform team
The scheduled-run engine compacts/rewrites the agent's message history mid-run; afterwards a
toolrole message remains that no longer follows a matchingtool_callsmessage, and themodel API rejects the request with this 400. Additionally, the runner does not propagate
this failure into
last_status(reports "ok" instead of an error).Requested fix
tool_callsparent (drop or re-pair them before sending to the API).
last_statuserror) so users/alerts can detectmissed runs instead of discovering them from missing outputs.
Current state (so support can triage)
task-272f869009(Label Download — Every 4 Hours),task-ac6a7c2f06(Meesho daily pending-orders accept)