# M13-03F Status status: done task: sandbox resource disposal gate updated: 2026-08-19 America/New_York enablingTask: false parityStateChange: false ## Scope The sandbox Worker now owns an explicit disposal receipt. Both `MessagePort` endpoints, the timer, `AbortController`, transferable buffer, pending request and cache reference are observed before disposal and are all zero after the first dispose. A second dispose is accepted and reports `idempotent=true`; the cleared timer produces no late message. Script execution remains `DISABLED`, and this task does not claim same-session recovery or server isolation. ## Evidence - `node --test web/tests/unit/script-sandbox-dispose.test.mjs` passed 2/2. - `CHROME_PATH=/usr/bin/google-chrome-stable WEB_TEST_PORT=5534 npm --prefix web run test:script-sandbox-dispose` passed unit 2/2 and Chromium Worker E2E 1/1. - `node tools/web/check-script-sandbox-dispose.mjs` passed: `script-sandbox-dispose-ok ports=0 timers=0 abortControllers=0 buffers=0 pending=0 cacheReferences=0 idempotent=true next=M13-03G`. - `npm --prefix web run typecheck`, `npm --prefix web run lint` and `git diff --check` passed. ## Artifact Hashes - protocol: `f3d9f667c3809cfad0f52bc6028d93e36e25c4b639fb6081c9c933fbad0ebc0a` - worker: `2a074b05d301c4083e60534eb9452aabf5d95aea0ab316fa657441ef4bcd5c96` - checker: `6549bd10f588281d23c4bea705fd164252c9e3f44d8f4b93c893a2c410907135` - unit: `6e00aa6286aae0eabc1345c04c7628dcc9acb32d51c1c27436a0e1b4c170b64c` - e2e: `b240d92c90e0d81272cd9cb3c0eb4e7d77102ce2e49ad05c761f763d1812b18e` - package: `0f06cd7ccdeed4213b6cb956aecf94e60dceff811ad8c3a2e239397685cfc1bf` - report: `2dbd3e79939b500c0fc83216c51f258b88ead42a667ed1a6da755e893d7f73c6` - manifest: `96abc7c7613ef4c18c64b84ffb8420c39369f9e4733bd1fa4d7d9ee9e53d6f89` ## Next Task `M13-03G`: recover a small script in the same session with a new Worker generation while keeping the Main revision/source hash stable and extending the audit hash chain. ## Rollback Remove the dispose protocol, Worker, focused tests/checker, report, manifest, package command and this status entry; restore M13-03E as the queue tail and move `nextTask` back to `M13-03F`.