You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Upstream is removing the non-reentrancy restriction: WebAssembly/component-model#705 ("CABI: remove the may_enter flag/trap", open as of 2026-08-20) deletes the may_enter flag+trap from the canon lift, resource.drop (destructor), and subtask.cancel paths and from cooperative scheduling conditions, making previously-trapping reentrance valid (new WAST coverage: reentrance.wast, the during-sync-call-* family, rewritten trap-on-reenter.wast). What remains upstream is "run to completion": exclusive-thread serialization of async callback turns via automatic backpressure. (#696/#697 are obviated by it.)
Discipline: the pinned definitions.py stays the tie-breaker until the submodule pin is deliberately advanced (docs/architecture.md §1). Nothing is removed preemptively. This issue is the map, filed so (a) no further investment lands in machinery with an expiry date, and (b) the pin-advance PR has a plan waiting.
Inventory: deltic machinery keyed on may_enter, with dispositions
Synthetic per-instantiation root (plan v3 amendment 4 / plan/task: component instance tree has no wire form — host-entry reentrance gate locks only the leaf #101: ComponentInstanceState.rootOf, isSyntheticRoot, enteringSet's host-entry {leaf, root}) — exists solely so host-entry reentrance traps through entering_set(None). Delete. The plan format never carried a wire form for the tree, so this is a contract-text amendment (orchestrator event), not a wire change.
Upstream is removing the non-reentrancy restriction: WebAssembly/component-model#705 ("CABI: remove the may_enter flag/trap", open as of 2026-08-20) deletes the
may_enterflag+trap from thecanon lift,resource.drop(destructor), andsubtask.cancelpaths and from cooperative scheduling conditions, making previously-trapping reentrance valid (new WAST coverage:reentrance.wast, theduring-sync-call-*family, rewrittentrap-on-reenter.wast). What remains upstream is "run to completion": exclusive-thread serialization of async callback turns via automatic backpressure. (#696/#697 are obviated by it.)Discipline: the pinned
definitions.pystays the tie-breaker until the submodule pin is deliberately advanced (docs/architecture.md §1). Nothing is removed preemptively. This issue is the map, filed so (a) no further investment lands in machinery with an expiry date, and (b) the pin-advance PR has a plan waiting.Inventory: deltic machinery keyed on
may_enter, with dispositionsComponentInstanceState.rootOf,isSyntheticRoot,enteringSet's host-entry{leaf, root}) — exists solely so host-entry reentrance traps throughentering_set(None). Delete. The plan format never carried a wire form for the tree, so this is a contract-text amendment (orchestrator event), not a wire change.createLiftedFunction's host-entry gate,Store.tick's bracket,Thread.resumeWith's bracket,Task.requestCancellation's delivery gate+bracket (#705 removes thesubtask.cancelcheck outright — note task core: record tick's poison marker; keep the bracket broken on cancellation-delivery traps #164's fix there is on the removal list), the FACT start-call gates (fact_calls.ts),enter-sync-call's check (adjudicated reentrance: enter-sync-call checks the callee gate but never takes it — host-mediated reentry passes where the reference traps #165), and the dtor lift's entry gate. Reentrance enforcement goes; only poisoning refusal remains (next item). The lift harness itself (resources: host-initiated dtors run as full canonical lifts #163) stays — it iscanon_resource_drop's model independent of the gate.mayEnterstays false forever" with thepoisonedInstancesWeakMap as a shadow (Go components trap (and poison their instance) when the Go runtime reads the clock inside cabi_realloc #145). Post-#705 the WeakMap marker is the only mechanism: entry refusal =isInstancePoisoned+withPoisonCause;releaseSyntheticRootOnPoisondeleted. Prerequisite — every bracket-break site must record the marker — landed in task core: record tick's poison marker; keep the bracket broken on cancellation-delivery traps #164 (the tick-path gap).readyCandidatesenterability filter,dispatchableTail,hasServiceableSettled,serviceSettledskip-in-place, driveAsync's race-set exclusion and all-deferred fallthrough). The lock states they defend against cease to exist; what survives is poisoned-tail retirement (resumeWith's early return). Most of scheduler: settled tails defer while their instance is not host-enterable #161 becomes removable — revisit whether the race-set exclusion is still load-bearing once nothing can defer (a queued settled entry is then always immediately serviceable).task_test.tssynthetic-root section (plan/task: component instance tree has no wire form — host-entry reentrance gate locks only the leaf #101/scheduler: tick skips threads whose instance is not host-enterable #155/scheduler: resumeWith has the same not-host-enterable window as tick, and the tick fix cannot transfer #156/task core: record tick's poison marker; keep the bracket broken on cancellation-delivery traps #164 pins),settled_deferral_test.ts, anddtor_normalization_test.ts's sibling-enterability pin mostly invert or become obsolete; the poisoning pins survive re-keyed per item 3. The conformance corpus gains #705's new reentrance family and loses trap expectations — testgen regen + expectation triage, including per-browser overlays.Sequencing sketch