Summary
A task whose PROMPT.md has zero parseable ### Step headings is silently marked succeeded: the lane-runner writes a .DONE and skips the worker entirely, producing a false completion. With integration: auto, this false success then auto-integrated an empty change into the target branch.
Severity
P0 — data-integrity / correctness. "Succeeding" work that never ran is the worst failure mode; it corrupts the task ledger and (with auto-integration) contaminates the base branch.
Repro
- Create a task whose
PROMPT.md uses ## Step N: (h2) headings instead of ### Step N: (h3). The step parser keys off ### Step (h3), so it finds no steps.
taskplane doctor passes (see companion issue on the doctor gap).
/orch <that-task>.
Observed
- Batch reports
1/1 succeeded in ~26ms; costUsd: 0, toolCalls: 0, worker elapsedMs: 0; no worker agent runtime dir is ever created.
STATUS.md untouched (0/N checkboxes, "Not Started"), yet Status: ✅ Complete and a .DONE are written.
- Engine stderr (verbatim):
lane-1/<TASK>: committed task artifacts to lane branch (... checkpoint: <TASK> task artifacts (.DONE, STATUS.md))
monitor/ALL: poll #1: 1/1 done, 0 failed, 0 active lane(s)
- Diagnostic event:
"exitReason": ".DONE file created by lane-runner", "durationSec": 0.
Expected
A task with zero parseable executable steps must hard-fail (or refuse to launch), never be marked complete. The lane-runner should not fabricate a .DONE when the worker never ran / no steps were parsed.
Impact amplifier
Because the false lane completion is counted as succeeded, integration: auto fast-forwarded the (empty) result into develop. Two consecutive runs each contaminated the base branch; recovery required a manual git reset --hard.
Environment
Taskplane 0.30.4, Runtime V2 backend, Windows, Pi 0.80.x. Real incident: Penster batches 20260719T113031 and 20260719T113450 (task TP-208, PROMPT authored with ## Step headings).
Summary
A task whose
PROMPT.mdhas zero parseable### Stepheadings is silently marked succeeded: the lane-runner writes a.DONEand skips the worker entirely, producing a false completion. Withintegration: auto, this false success then auto-integrated an empty change into the target branch.Severity
P0 — data-integrity / correctness. "Succeeding" work that never ran is the worst failure mode; it corrupts the task ledger and (with auto-integration) contaminates the base branch.
Repro
PROMPT.mduses## Step N:(h2) headings instead of### Step N:(h3). The step parser keys off### Step(h3), so it finds no steps.taskplane doctorpasses (see companion issue on the doctor gap)./orch <that-task>.Observed
1/1 succeededin ~26ms;costUsd: 0,toolCalls: 0, workerelapsedMs: 0; no worker agent runtime dir is ever created.STATUS.mduntouched (0/Ncheckboxes, "Not Started"), yetStatus: ✅ Completeand a.DONEare written."exitReason": ".DONE file created by lane-runner","durationSec": 0.Expected
A task with zero parseable executable steps must hard-fail (or refuse to launch), never be marked complete. The lane-runner should not fabricate a
.DONEwhen the worker never ran / no steps were parsed.Impact amplifier
Because the false lane completion is counted as
succeeded,integration: autofast-forwarded the (empty) result intodevelop. Two consecutive runs each contaminated the base branch; recovery required a manualgit reset --hard.Environment
Taskplane 0.30.4, Runtime V2 backend, Windows, Pi 0.80.x. Real incident: Penster batches
20260719T113031and20260719T113450(task TP-208, PROMPT authored with## Stepheadings).