deepseek-ai/deepseek-harness · error · Error
Ralph workflow returned an invalid blocked report
Error message
Ralph workflow returned an invalid blocked report
What it means
Thrown while decoding a round report returned by the Ralph workflow provider (the worker/subprocess side) before it crosses into the consumer. The generic shape checks already passed, but the field values are inconsistent with the declared 'blocked' status — specifically the blocker string is missing, empty, or not normalized. This is a defensive validation of an external process boundary: the workflow itself produced a malformed blocked report, not the caller.
Solutions
- Ensure blocked reports carry a concrete blocker string; fix the workflow's report validation or prompt.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at packages/workflow/tool-ralph/src/index.ts:273 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of deepseek-ai/deepseek-harness@b150a551b8 (2026-08-24).
Data as JSON: /api/errors/d02e78703aef49dc.
Report an issue: GitHub.
Appendix: source
Thrown at packages/workflow/tool-ralph/src/index.ts:273
|| value['blocker'] !== value['blocker'].trim()) {
throw new Error('Ralph workflow returned a malformed round report')
}
const report: RalphRoundReport = {
status: expectedStatus,
summary: value['summary'],
evidence: value['evidence'],
nextSteps: value['nextSteps'],
blocker: value['blocker'],
}
if (expectedStatus === 'continue' && (report.nextSteps.length === 0 || report.blocker !== '')) {
throw new Error('Ralph workflow returned an invalid continuing report')
}
if (expectedStatus === 'complete'
&& (report.evidence.length === 0 || report.nextSteps.length !== 0 || report.blocker !== '')) {
throw new Error('Ralph workflow returned an invalid completion report')
}
if (expectedStatus === 'blocked' && !normalizedText(report.blocker)) {
throw new Error('Ralph workflow returned an invalid blocked report')
}
const chars = JSON.stringify(report).length
if (chars > maxChars) {
throw new Error(`Ralph workflow returned an oversized handoff (${chars} > ${maxChars})`)
}
return report
}
/** Defensively decode the fixed script's terminal value. */
function readRunResult(value: unknown, maxRounds: number, maxHandoffChars: number): RalphTerminalResult {
if (!isRecord(value)
|| typeof value['roundsStarted'] !== 'number'
|| !Number.isSafeInteger(value['roundsStarted'])
|| value['roundsStarted'] < 1
|| value['roundsStarted'] > maxRounds) {
throw new Error('Ralph workflow returned a malformed terminal result')
}
const roundsStarted = value['roundsStarted']View on GitHub (pinned to b150a551b8)