Commit Graph
41 Commits
Author SHA1 Message Date
Yichen Jiang b25c5ad82e feat(web): restore sidebar layouts and reclaim unattended terminals 2026-09-15 10:27:44 +08:00
Tianyi Cui dd55f38614 docs(subprocess): record signal error isolation and fixture safety 2026-09-12 19:44:51 +08:00
Tianyi Cui 71334b9c78 fix(subprocess): preserve direct outcomes on signal failure 2026-09-12 19:14:34 +08:00
Tianyi Cui c07df5aa65 fix(subprocess): confirm direct SIGKILL after group delivery 2026-09-12 18:49:15 +08:00
Tianyi Cui 4b99ace8fb fix(subprocess): await direct fallback settlement before scope failure 2026-09-12 17:55:53 +08:00
Tianyi Cui d8efd4f8cd feat(subprocess): carry a duplex control pipe through managed launches 2026-09-12 15:03:00 +08:00
Dudu-0223 dafff8e51c fix(subprocess): settle consumed empty scopes before exit notification 2026-09-11 17:05:15 +08:00
turtle1999 18a1955b7e fix(ci): handle scope termination races and cyclic process snapshots 2026-09-11 14:50:46 +08:00
turtle1999 aaa02a3970 fix(subprocess): settle a Linux scope left active with no processes
Range observation waited for an active transient scope to leave `active`
before it would prove the managed range empty. systemd ends a scope only when
it observes the populated-to-empty transition, so a payload killed before the
manager placed it in the scope's cgroup leaves the unit active with an empty
cgroup forever. `waitForExit()` then polled a unit that could not change, and
`LocalSubprocessRuntime.disposeManagedProcesses()` awaited it without bound —
teardown hung for any command cancelled immediately after spawn.

Each state query now also reads the unit's process count. Once termination was
requested and the launcher has exited, a still-active unit reporting no
processes is the empty range: the launcher forked every process it will ever
fork, so nothing later joins that cgroup. The owner stops the leftover unit so
transient units cannot accumulate, and an unreported or `[not set]` count
stays unknown and keeps waiting.

The race needs a live user-systemd manager, so it stayed dormant wherever the
native scope path was unavailable and surfaced once CI routed lanes onto the
Blacksmith hosted image, whose runners accept that path. Ten repetitions of
`local.spec.ts > disposal kills still-running processes and awaits their exit`
in a Linux container with a user manager failed seven times before the change
and passed ten times after it.
2026-09-10 17:27:52 +08:00
Yichen Jiang b79a227cec fix(subprocess): preserve Linux cancellation before bootstrap consumption 2026-09-10 14:45:45 +08:00
pku-xht ff6a49660f fix(subprocess): tighten native containment settlement 2026-09-03 03:26:42 +08:00
pku-xht bc681d7a54 fix(subprocess): harden cancellation settlement 2026-09-03 01:18:40 +08:00
pku-xht ac1a5891c2 fix(subprocess): close remaining native containment findings 2026-09-02 22:49:46 +08:00
pku-xht fc19a0a3fa fix(subprocess): clarify provider failures and scope polling 2026-08-31 19:26:08 +08:00
pku-xht 8bb19f8f7f fix(subprocess): close containment review findings 2026-08-31 14:36:13 +08:00
pku-xht 93c11689e7 fix(subprocess): address containment review findings 2026-08-29 15:44:13 +08:00
pku-xht 1760649ba7 refactor(subprocess): derive native owner state 2026-08-29 11:28:33 +08:00
pku-xht 6e7b152de7 fix(subprocess): preserve native runner contracts 2026-08-29 07:57:59 +08:00
pku-xht 40279aea17 fix(subprocess): preserve native runner stdio 2026-08-29 00:03:12 +08:00
pku-xht a95f0b368f fix(subprocess): contain escaped descendants with native owners 2026-08-28 18:15:49 +08:00
pku-xht 3caa9e4f5a fix(subprocess): retain failed cleanup ownership 2026-08-26 22:16:20 +08:00
pku-xht 26969588b7 fix(subprocess): address native containment review findings 2026-08-25 21:51:22 +08:00
pku-xht 8e9bac4a27 fix(subprocess): align native containment contract 2026-08-25 20:06:00 +08:00
pku-xht 71e27e4667 fix(subprocess): close native lifecycle gaps 2026-08-22 07:35:51 +08:00
pku-xht 7228c821b7 refactor(subprocess): centralize stream settlement 2026-08-22 06:40:12 +08:00
pku-xht 6e1b8eda77 fix(subprocess): preserve runner result boundary 2026-08-22 05:30:09 +08:00
pku-xht b6dc88be51 fix(subprocess): preserve forced Linux outcomes 2026-08-22 04:59:36 +08:00
pku-xht f72ce2299a fix(subprocess): keep native Job ownership in runner 2026-08-21 22:49:56 +08:00
pku-xht 153f1579e1 refactor(subprocess): restore native containment baseline 2026-08-21 22:08:49 +08:00
pku-xht ac69b1e0c4 fix(subprocess): decouple Windows target stdio 2026-08-21 12:56:34 +08:00
pku-xht f913c813d2 fix(subprocess): harden managed-range cleanup 2026-08-21 08:21:33 +08:00
pku-xht e6bc1f2e1d fix(subprocess): close managed launch gaps 2026-08-21 05:08:36 +08:00
pku-xht 273c2847e5 fix(subprocess): support packaged native runner 2026-08-21 01:17:12 +08:00
pku-xht 1fc04feb77 fix(subprocess): close native platform CI gaps 2026-08-20 23:59:55 +08:00
pku-xht 21820b6816 test(subprocess): cover async scope failures 2026-08-20 23:47:19 +08:00
pku-xht 436f9e9686 fix(subprocess): preserve native failure semantics 2026-08-20 23:24:22 +08:00
pku-xht b9c0028f95 fix(subprocess): launch systemd scopes without pipe mode 2026-08-20 22:28:30 +08:00
pku-xht eb60d74155 fix(subprocess): harden native range settlement 2026-08-20 22:16:24 +08:00
pku-xht 7185a62d58 fix(subprocess): harden native runner lifecycle 2026-08-20 18:41:30 +08:00
pku-xht 4c164cd163 fix(subprocess): close native containment CI gaps 2026-08-20 17:29:22 +08:00
pku-xht 894f6aeb8a fix(subprocess): contain escaped descendants with native owners 2026-08-20 16:26:19 +08:00