|
1262 | 1262 | "Tests pass" |
1263 | 1263 | ], |
1264 | 1264 | "priority": 64, |
1265 | | - "passes": false, |
1266 | | - "notes": "Spec: docs-internal/specs/v8-context-snapshot.md Phase 1. Prerequisite for context snapshot." |
| 1265 | + "passes": true, |
| 1266 | + "notes": "Already implemented in prior iteration (getter-based Object.defineProperties in setup-fs-facade.ts and generated isolate-runtime.ts). All 19 fs functions covered. Typecheck passes (28/28), fs type tests pass (3/3)." |
1267 | 1267 | }, |
1268 | 1268 | { |
1269 | 1269 | "id": "US-060", |
|
1427 | 1427 | "priority": 73, |
1428 | 1428 | "passes": false, |
1429 | 1429 | "notes": "Research story — no code changes required beyond documentation and profiling scripts." |
| 1430 | + }, |
| 1431 | + { |
| 1432 | + "id": "US-085", |
| 1433 | + "title": "Fix V8 process cleanup hang on terminate/dispose", |
| 1434 | + "description": "As a developer, I need terminate() and dispose() on V8Runtime to cleanly shut down the Rust child process so the Node process can exit without hanging or requiring process.exit().", |
| 1435 | + "acceptanceCriteria": [ |
| 1436 | + "After runtime.terminate(), the Rust child process exits within 5 seconds", |
| 1437 | + "After runtime.dispose(), no child process, socket, or file descriptor remains open", |
| 1438 | + "Node process exits cleanly after all runtimes are terminated — no hanging event loop", |
| 1439 | + "Remove process.exit(0) hacks from benchmarks/quick-bench.ts and benchmarks/coldstart.bench.ts", |
| 1440 | + "Investigate root cause: check for unclosed IPC socket, pending event listeners on child process, or unfinished async operations preventing Node exit", |
| 1441 | + "Add integration test: create runtime, run code, terminate, verify process exits cleanly without process.exit()", |
| 1442 | + "If SIGTERM is insufficient, add SIGKILL fallback after timeout", |
| 1443 | + "cargo test passes", |
| 1444 | + "Typecheck passes", |
| 1445 | + "Tests pass" |
| 1446 | + ], |
| 1447 | + "priority": 76, |
| 1448 | + "passes": false, |
| 1449 | + "notes": "Workaround: benchmarks use process.exit(0) after completion. Root cause likely unclosed socket or event listener keeping Node event loop alive after terminate(). Related to US-076 (shared lifecycle) but distinct issue." |
1430 | 1450 | } |
1431 | 1451 | ] |
1432 | 1452 | } |
0 commit comments