b49b9189febc7b999c9b65871257078f1a061407
Verifier-found P0: UnshareBackend.destroy reaped agent → inner → helper as
asyncio subprocesses, but the inner entry is the `unshare --fork` PARENT —
its forked child (the `sleep` that is PID 1 of the sandbox pid/mnt/net ns)
reparents to host init and survives, holding the tmpfs + workspace bind for
the sleep duration (3600s). Every tracked-sandbox destroy leaked one
namespace process: ~30 orphaned `sleep 3600` observed after one suite run.
`--kill-child` does not reach the child under this flag combo (verified
empirically: the child still survives parent SIGTERM).
Fix: SIGKILL the ns-init's host pid (already tracked as `inner_pid` for
nsenter) in destroy(), after reaping the agent so it cannot flush into a
dead sandbox. Regression test creates a REAL task sandbox, asserts agent +
ns-init alive, destroys, and asserts both host pids are gone — fails on the
old code, passes with the fix. Full suite 218 green; ruff clean.
---ci---
phase: 2
milestone: v0.3
status: verify
requirements: {covered: [REQ-3-003], partial: []}
---/ci---
Nextcraft
AI-native outcome school + marketplace — graduates prove what they can build, not what they can write.
Status
Milestone v0.1 — UI/UX Prototype (high-fidelity interactive, all mock data)
Initialized via CIAgent v0.7.0
Description
AI-native outcome school + marketplace — graduates prove what they can build, not what they can write.
Releases
24
Languages
Python
58.7%
TypeScript
40.2%
Shell
0.8%
JavaScript
0.2%
CSS
0.1%