Severity: medium | Category: correctness | Phase: P2.14
Problem
_execute_serial/_execute_parallel call reconcile_stop.set() only on the success path; a worker exception (e.g. create_execution_context failing) leaks the 30s-polling daemon thread and leaves the batch row RUNNING forever in the long-lived server.
Evidence
codeframe/core/conductor.py:1583
Acceptance criteria
reconcile_stop.set() moved into finally; unexpected worker exceptions mark the batch FAILED.
Dependencies
None
Filed from the SaaS launch-readiness audit. Atomic: one developer, one session. Work order: strictly P0.1 → P3.12 (no forward dependencies).
Severity: medium | Category: correctness | Phase: P2.14
Problem
_execute_serial/_execute_parallelcallreconcile_stop.set()only on the success path; a worker exception (e.g.create_execution_contextfailing) leaks the 30s-polling daemon thread and leaves the batch row RUNNING forever in the long-lived server.Evidence
codeframe/core/conductor.py:1583Acceptance criteria
reconcile_stop.set()moved intofinally; unexpected worker exceptions mark the batch FAILED.Dependencies
None
Filed from the SaaS launch-readiness audit. Atomic: one developer, one session. Work order: strictly P0.1 → P3.12 (no forward dependencies).