Severity: medium (conformance), adjudication required before code.
enter-sync-call (intrinsics/mod.ts:454-483) performs no may_enter
check. In the reference, every guest->guest call routes through the callee
lift's enter gate (definitions.py:581 chain), so a sync fused-adapter
cycle A -> C -> A traps "cannot enter component instance". FACT's static
trap covers only same/ancestor pairs (trusted fact/trampoline.rs:124), and
the trusted wasmtime sources examined (concurrent.rs:1723) show no obvious
sibling-cycle rejection either — this may be wasmtime parity or a shared
gap.
Protocol (docs/architecture.md §1): bare wasmtime behavior never
supersedes the reference; a corpus assertion counts only if
schedule-independent. So:
- Check the official suite + wasmtime misc corpus for sibling-cycle
coverage (async/ and linking/ wast files). If a schedule-independent
corpus test pins the permissive behavior, stop and re-adjudicate
(CM-3-style exception, named finding).
- Build the differential fixture (3-component composition, A -> C -> A
through sync fused adapters) and run it under native wasmtime
(installed CLI, 47.x) and deltic.
- Absent corpus backing for permissiveness: implement the reference trap
in enter-sync-call (may_enter check against the callee instance,
same-instance/ancestor semantics per the reference chain), and record
any wasmtime delta in upstream-component-model-repo-findings.md
(tracker entry; filing is the operator's call).
Found in the 2026-08-10 adversarial conformance review (runtime + translator vs component-model @ 73b7ad5 definitions.py; wasmtime-environ 47.0.3 treated as trusted).
Severity: medium (conformance), adjudication required before code.
enter-sync-call(intrinsics/mod.ts:454-483) performs nomay_entercheck. In the reference, every guest->guest call routes through the callee
lift's enter gate (definitions.py:581 chain), so a sync fused-adapter
cycle A -> C -> A traps "cannot enter component instance". FACT's static
trap covers only same/ancestor pairs (trusted fact/trampoline.rs:124), and
the trusted wasmtime sources examined (concurrent.rs:1723) show no obvious
sibling-cycle rejection either — this may be wasmtime parity or a shared
gap.
Protocol (docs/architecture.md §1): bare wasmtime behavior never
supersedes the reference; a corpus assertion counts only if
schedule-independent. So:
coverage (async/ and linking/ wast files). If a schedule-independent
corpus test pins the permissive behavior, stop and re-adjudicate
(CM-3-style exception, named finding).
through sync fused adapters) and run it under native wasmtime
(installed CLI, 47.x) and deltic.
in enter-sync-call (may_enter check against the callee instance,
same-instance/ancestor semantics per the reference chain), and record
any wasmtime delta in upstream-component-model-repo-findings.md
(tracker entry; filing is the operator's call).
Found in the 2026-08-10 adversarial conformance review (runtime + translator vs component-model @ 73b7ad5 definitions.py; wasmtime-environ 47.0.3 treated as trusted).