# M13-04G Status status: done task: server process-tree cancellation updated: 2026-08-19 America/New_York enablingTask: false parityStateChange: false ## Scope Real server jobs now run in a detached process group on POSIX and are cancelled as a tree. The cancellation path sends SIGTERM to the group, escalates to SIGKILL after the grace window, waits for the group to exit, and performs one idempotent job-directory cleanup. Windows uses `taskkill /T /F`. The receipt reports the actual signal path, cleanup count and orphan count. Execution remains `DISABLED`. ## Evidence - `npm --prefix web run test:server-job-cancellation` passed 2/2 real-process unit tests and the checker. - Checker output: `server-job-cancel-ok state=CANCELLED tree=SIGTERM_GROUP cleanup=1 orphan=0 residual=0 execution=DISABLED next=M13-04H`. - `git diff --check` passed. ## Artifact Hashes - parent manifest: `b5b4b26183dc48ebcae009e49999010d9b60d512f5daa4674a0aff0577d6602c` - protocol: `74fbbac806f34904bc9cb8e40eaf386cb60d44d978973950f1809262d311ec95` - checker: `751ecafc642595d0de69b618e223cbff49d414f2958fc371371e4a668d66a8cc` - unit: `39ac445ff51a9bfe249363204cf2edca906b16bf67ab1f8321166b440eba8629` - package: `ca092a9a1d48ac41dc20f978bb26c8268adde9f7602a06459c7df8c2cb2d4cc7` - report: `61f5c3ad315f94bac48e58627fcc46015c173dd9f303d5914acb8dbbe93caa97` ## Next Task `M13-04H`: map timeout/OOM/non-zero exit/signal to stable error codes. ## Rollback Remove the process control protocol, unit/checker, report, manifest, package command and this status entry; restore `M13-04F` as the queue tail.