ccc9b900cf
- Subagents inherit the parent's eval session id, so a child's reset: true destroyed the co-owned kernel and every sibling's interpreter state mid-session. - resolveOwnerScopedSessionKey now routes a reset from a non-exclusive owner onto a deterministic per-owner fork key: the requester gets a fresh private kernel, co-owners keep the shared one, and the fork stays sticky for that owner until its teardown reaps it. - Applied across Python, JavaScript, Ruby, and Julia executors; JS contexts gained an owner registry plus disposeVmContextsByOwner, wired into EvalRunner.disposeKernels and SDK session teardown. - Covered by pure key-resolution contracts and an end-to-end JS test: co-owner reset forks, shared state survives, fork is sticky, and per-owner dispose reaps only the fork.