Surface / Surface and Bundle

What each one is made of

A Surface, built from the Model's own Schema so it cannot name a missing field: a name, optional params, a Projection of what it reads, and the Messages it may send. App.surface('TodoList', …) is plain data — inspectable without running anything, renderable, usable as an agent's context, and collected by Module next to contracts.

A Bundle, built from its own Model/Message Schemas: the child's transition parts in one value, plus args. Bundle.declare(MediaQuery, 'dark') gives the placement its Model field and its wrapper variant; Page.at(…) places it; Page.assemble(…) derives the parent's update, init, Subscriptions, and checks. The child's Messages travel wrapped (GotDarkMessage), so two placements of one bundle never claim the same tag.