Why — the biggest contradiction in the language today. recv/try_recv/recv_timeout fail loudly under EIGS_REPLAY (#148, replay_blocks in src/builtins.c; docs/TRACE.md) — deterministic replay, the signature niche, currently EXCLUDES concurrent programs. Meanwhile two consumers independently reinvented the missing layer downstream: EigenOS task_eval (strings-by-copy isolation, window=task, hung-window detection) and liferaft's hand-rolled deterministic scheduler. Upstreaming it converts the contradiction into the headline capability no incumbent has: byte-identical replay of concurrent executions (Go/BEAM/Rust users need rr or Antithesis-class external heroics for this).
What.
Acceptance. A multi-task program with message passing records under EIGS_TRACE and replays byte-identically under EIGS_REPLAY; JIT stays enabled (verify via the bench harness MT-vs-task workload); liferaft migration green.
Effort: weeks (VM change; the extend-vm all-N-sites checklist is the discipline). Blocks: lib/supervise.eigs. Source: 2026-07-04 survey (concurrency dimension — the study's single largest strategic item).
Why — the biggest contradiction in the language today.
recv/try_recv/recv_timeoutfail loudly under EIGS_REPLAY (#148,replay_blocksin src/builtins.c; docs/TRACE.md) — deterministic replay, the signature niche, currently EXCLUDES concurrent programs. Meanwhile two consumers independently reinvented the missing layer downstream: EigenOS task_eval (strings-by-copy isolation, window=task, hung-window detection) and liferaft's hand-rolled deterministic scheduler. Upstreaming it converts the contradiction into the headline capability no incumbent has: byte-identical replay of concurrent executions (Go/BEAM/Rust users need rr or Antithesis-class external heroics for this).What.
task_spawn/task_send/task_recv/task_yieldbuiltins with per-task isolated state — values-by-copy on every boundary, reusing the existingval_clone_for_sendmachinery (Cross-thread channel transfer corrupts dict string keys (use-after-free) #293/Cross-thread UAF: a spawned worker's arena-allocated return value is freed by arena_destroy at detach before the joiner reads it #302) that channels already use.g_vm_multithreadednever flips, so the JIT stays ON for concurrent code (fixing the Data races: parallel workers executing the same shared chunk (exec_count, JIT counters, inline caches, shared-env refcounts) #297 perf cliff for the common case), and per-task isolation protects Env::obs binding identity.spawn) keep their honest fail-loudly wall under replay — this is a new tier, not a replacement.examples/task_pipeline.eigs.Acceptance. A multi-task program with message passing records under EIGS_TRACE and replays byte-identically under EIGS_REPLAY; JIT stays enabled (verify via the bench harness MT-vs-task workload); liferaft migration green.
Effort: weeks (VM change; the extend-vm all-N-sites checklist is the discipline). Blocks: lib/supervise.eigs. Source: 2026-07-04 survey (concurrency dimension — the study's single largest strategic item).