Concurrency foundation: get the threading model right before parallel/GPU work (tracking)
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 25/100
- Issue type
- Feature
- Clarity
- Needs clarification
- Activity status
- Active
- Tech stack
- c
- Domain
- operating-systems, testing-qa
Research direction
Start with the whole-runtime concurrency review and the probes under ~/src/wt/briefs/conc-review/, then read the unchecked Tier 1 and Tier 2 issues listed here. The tracking work spans memory safety, runtime contracts, documentation, and the proposed tsan-http Makefile target and CI lane; done means the selected findings and gate debt are resolved and verified.
Written by the indexing model from the issue text.
Description
Jon, 2026-09-14: "we really need to get concurrency right, that way when we get gpu access we have a solid foundation for parallelism."
A whole-runtime concurrency review (three independent reviewers, every finding executed on main @ a18deac; probes kept under ~/src/wt/briefs/conc-review/) produced the issues below. They are ordered by the fix set that closes the most with the least: the first five are memory-unsafety in programs with NO user-written race; the rest are silent-wrong contracts and the doc/gate debt.
Tier 1 — memory unsafety without a user race
- #1141 dict keys interned per thread dangle after a worker exits (spawn → join → read reads garbage)
- #1142 the trace tape has no lock: sink buffer overflow, torn tapes (workers AND HTTP states), replay-reader use-after-free, observer-config ping-pong
- #1144
load_file/importfrom a worker: per-STATE loading stack, unlocked module cache, module namespace table freed under readers (false "circular dependency") - #1145 arming sets realloc'd under readers (occurrence tier never widened; two embed states race with no spawn)
- #1161 module-env lock (#607) keyed on a predicate that is false for imported modules — never locked (found landing #1141)
- #1162 embed API: a host thread attach/eval/detach frees its intern table — global env names incl. builtins dangle for the state (pre-existing, found reviewing #1141)
- #1146
thread_joinhas no claim step (double join = UB hang); handle ids recycle without a generation; full table → silent null - #1140 HTTP: a code route mutates the live route table from a worker
Tier 2 — silent-wrong contracts
- #1147 cycle collector off for the rest of the run after the first spawn (117x peak RSS)
- #1148 "messages copy" is false for buffer / text_builder / closures
- #1149
exitinside a worker does not stop the program; main blocked inrecvhangs forever - #1150
randomshares libc's generator state across workers with a racy seed - #1151 process-wide SIGPIPE flip;
printignores flush errors - #1143
eigs_closeon one embed state shuts the tape for every other state
Docs and the gate
- #1152 state that user races are UNDEFINED (allocator corruption), enumerate the process-global surfaces for embedders, extend the TSan slice to the shapes it never runs
- #1139 a
tsan-httpMakefile target and CI lane (the ad-hoc one found #1137)
Verified sound (by execution) — the foundation to build on
Channel semantics incl. close-while-blocked and multi-receiver; nested spawn and tasks inside workers; the per-thread cooperative scheduler; the refcount-atomics flip and every raw refcount site; per-thread freelists under the copy rule for lists/dicts; the JIT cliff incl. a spawn while emitted code is running; the replay boundary for recv; the binding-count and config-cache fixes from #1137.
Where the stress would come from
No consumer in the ecosystem exercises OS-thread parallelism today (eddy covers the COOPERATIVE layer against Porcupine/Elle; hq/PORTFOLIO.md lists the true-parallel slice as uncovered). Once Tier 1 lands, a parallel consumer is the forcing function: a portfolio SAT solver in EigenMiniSat (N workers, N seeds, first result wins over a channel, native MiniSat as the oracle) and a parallel tensor workload (the shape GPU work will take) are the two natural candidates.
- Dominant language
- C
- Stars
- 3
- Forks
- 7
- Avg merge
- 3h 56m
- Merged PRs (30d)
- 102
Getting set up
Starts the project's dev container in your browser, under your own GitHub account.
- Ships a Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from InauguralSystems/EigenScript
-
area:lint-tooling bug
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
InauguralSystems/EigenScript#1340 ·
Maintainers usually reply within 1 day
-
area:stdlib found-by:code-review kind:silent-wrong
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
InauguralSystems/EigenScript#1338 ·
Maintainers usually reply within 1 day
-
area:lint-tooling found-by:critic kind:docs-drift
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
InauguralSystems/EigenScript#1335 ·
Maintainers usually reply within 1 day
-
area:ci found-by:critic kind:gate-defect
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
InauguralSystems/EigenScript#1311 ·
Maintainers usually reply within 1 day
-
enrolment: decide test_gc_runner_controls.py (exempt vs enrol) and whether floors need a ratchetOpenarea:gates found-by:critic kind:decision
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
InauguralSystems/EigenScript#1280 · 1 comment ·
Maintainers usually reply within 1 day
All issues in InauguralSystems/EigenScript
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
libretro/libretro-common#233 ·
-
[Bug]: chunk_span_bounds and _validated_chunk_spans reject Pydantic models ChunkSpan and AudioFileOpen
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
BasedHardware/omi#19047 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
obsproject/obs-studio#13936 · 2 comments ·
Maintainers usually reply within 1 day