CIAgent b49b9189fe fix(P02): destroy kills the inner namespace init, not just the unshare shim
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---
2026-09-12 01:39:44 +00:00
2026-09-10 21:23:47 +00:00

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

S
Description
AI-native outcome school + marketplace — graduates prove what they can build, not what they can write.
Readme 2.4 MiB
2026-09-13 00:05:37 +00:00
Languages
Python 58.7%
TypeScript 40.2%
Shell 0.8%
JavaScript 0.2%
CSS 0.1%