# M13-04A Status status: done task: server job one-shot directory updated: 2026-08-19 America/New_York enablingTask: false parityStateChange: false ## Scope The server-side job allocator creates an unpredictable `0700` directory below a configured absolute root for each request. Directory names do not contain the request ID, two concurrent jobs receive distinct directories, and successful or failed cleanup removes the directory exactly once. Repeated cleanup is idempotent. This task does not claim read-only source mounts, process limits or Blender execution. Browser E2E is not applicable: this is a Node server filesystem boundary. The checker uses real temporary directories and `fs.stat`/`fs.rm` calls. ## Evidence - `node --test web/tests/unit/server-job-isolation.test.mjs` passed 2/2. - `npm --prefix web run test:server-job-directory` passed unit 2/2 and the independent checker. - `node tools/web/check-server-job-isolation.mjs` passed: `server-job-directory-ok allocated=2 cleaned=2 unique=1 requestIdsHidden=1 mode=0700 residual=0 idempotent=1 next=M13-04B`. - `npm --prefix web run typecheck`, `npm --prefix web run lint` and `git diff --check` passed. ## Artifact Hashes - protocol: `3aa5678a2c2769e4db5bb8f5c755b97e23045c4106e5636459748ab9b41929cd` - checker: `b8d0e741144f742946246370bd35820d806686fb00dc0b040c925cf16f2179da` - unit: `b1ac3324332180f7b3522f135520e7b5dace334dc461c92f2bce48fbcba2e147` - package: `0c2633da831e7ca10cf74797650353b6dfb1507ed5957688d34bc97f9a6dd193` - report: `07ed66fe0b2e1f1bbdba1cfb1089b052a5961d38f761bfcf79d8362980d2d502` - manifest: `fd2407a7b9fefe67e2d77ed844e6c2ca17cdc4a746857a5825a38ff02ab664e3` ## Next Task `M13-04B`: source read-only mount and independent writable output directory. ## Rollback Remove the directory allocator, focused tests/checker, report, manifest, package command and this status entry; restore M13-03G as the queue tail and move `nextTask` back to `M13-04A`.