# Reflect.3. Keeping scopes separate — Mercury LMS > Contract: `@fiberfx/reflect` 4.1.1; Hypergraph and Hyperscript 4.1.1. ## Contract Use the existing `Provider` from @fiberfx/hypergraph/hyperscript. Reflect owns neither scope creation nor disposal. setScopeMode("required") refuses a missing Provider in the shared binding. Unmount before disposing owned scopes. ## Isolation One model, two fork() scopes. Bind callbacks through Reflect. Left 2, right 1; scoped left reset yields 0 and 1. Separately assert global state unchanged. A previously bound callback keeps its originating scope under a nested Provider. A child's own useUnit reads its rendered Provider. ## Refusals and limits Test missing Provider in isolation. Raw external event calls do not become scoped because a Provider exists on the page. Do not generalize the awaited-Hypergraph-effect test to all foreign async boundaries. ## Exercise [Scopes lab](/examples/reflect-lab/index.html?part=scopes&lang=en). Per-panel reset changes its model; footer restart recreates the whole stage. Source: reflect.ts:108-117, composition.test.ts:80-105; npm 4.1.1. ## Navigation - [HTML](/reflect/scopes) - [Reflect](/reflect/llms.txt) - [Index](/llms.txt) - [Sitemap](/sitemap.xml) - [All English companions](/llms-full.txt)