A shell is the product frame: navigation, layout, runtime/device state, and where surfaces appear. It should place surfaces, not become every feature.
Your app has a sidebar, a main panel, and a details panel. The shell decides those regions exist. Package surfaces decide what product body appears inside them.Shell
Navigation, route, account state, runtime/device state, and layout regions.
→
Descriptor
Which product surface belongs in which shell region.
→
Surface
Reads named data, renders UI states, and sends named action requests.
Shell ownership
Placeable surface rule
The shell should be able to place a surface from a descriptor without importing the feature’s private screens, stores, actions, or file layout.What this prevents
Verify
You have the right boundary when you can move a surface frommain to details without editing the target implementation or named data read contract.