Mutation guard
Captured host state crosses the boundary as a one-way devalue snapshot. Writing to it inside an island updates nothing. The runtime helps you notice.
This page captures a config object (a Map and a Set survive the boundary) and passes it to the island below. The island mutates
all three fields in onMount. Because the prop is a deserialized copy with no
reactive link back here, those writes are a no-op โ the host's config is
untouched.
The warning is dev-only, so it is not faked here. Under vite dev the runtime wraps the captured prop in a deep Proxy and
logs a warning once per mutated path โ you would see something like config.count, config.meta.set(), and config.roles.add() in the console. A production build ships the plain object
with no proxy and no warning, so the mutation is silent and free. Open this page under pnpm --filter docs dev with the console open to see the real warnings; this
preview build intentionally shows none.
The fix is always the same: keep mutable state inside the island
($state seeded from the prop), not in the dead shell. And two islands never
share reactive state โ if they must agree on something, both read it from the server.