Class
orchestrator-defect
Symptom
During a bounded local execution, lintGateCommands returned zero errors and warnings for plans whose validation commands were inside text fences and whose implementation instructions used plain bullets/prose. parsePlan found the expected slices but extracted empty tasks and null validationGate. Slice-count and lint-only readiness checks therefore gave a false-ready result. A local validator now calls the real parser; the original format fails with 'runtime parsed no tasks'. After normalizing to numbered tasks and powershell fences, mutations back to text fences or non-numbered tasks fail as expected. This mismatch can allow execution without the intended validation gate.
Workaround Applied
Added fail-closed runtime assertions for nonempty tasks, nonempty validationGate and the required typecheck in every slice, plus parser-based negative controls for both ignored formats. Normalized the affected local plan syntax while checking that scopes, dependencies and command bodies remain unchanged. Actual launches use independently checked one-slice records; no additional launches were authorized by the formatting repair. Recommended upstream fix: use the same parser contract for lint/readiness and reject slices with no executable tasks or gate before any worker launch.
Files
pforge-mcp/orchestrator.mjs
Class
orchestrator-defectSymptom
During a bounded local execution, lintGateCommands returned zero errors and warnings for plans whose validation commands were inside text fences and whose implementation instructions used plain bullets/prose. parsePlan found the expected slices but extracted empty tasks and null validationGate. Slice-count and lint-only readiness checks therefore gave a false-ready result. A local validator now calls the real parser; the original format fails with 'runtime parsed no tasks'. After normalizing to numbered tasks and powershell fences, mutations back to text fences or non-numbered tasks fail as expected. This mismatch can allow execution without the intended validation gate.
Workaround Applied
Added fail-closed runtime assertions for nonempty tasks, nonempty validationGate and the required typecheck in every slice, plus parser-based negative controls for both ignored formats. Normalized the affected local plan syntax while checking that scopes, dependencies and command bodies remain unchanged. Actual launches use independently checked one-slice records; no additional launches were authorized by the formatting repair. Recommended upstream fix: use the same parser contract for lint/readiness and reject slices with no executable tasks or gate before any worker launch.
Files
pforge-mcp/orchestrator.mjs