Surface / Surface and Bundle
Who owns what
| Surface | Bundle (placed) | |
|---|---|---|
| State | Owned elsewhere; the Surface reads it | Owned by the parent Model at the Link's path |
| Transitions | None. A Surface has no update, no private Model, no Message wrapping | The child's update, compiled to Foldkit's own child fold |
| Messages | An allowlist of constructible union variants | Wrapped variants of the parent union, routed to the slice by wrapper |
| Runtime behavior | None — pure contract | None added — compiles to existing lifts, no store/reducer/runtime of its own |
| May read across Submodels | Yes; that is the point | No; a placement renders and folds its own slice |
The shorthand from the Surface README still holds:
Optic = structural focus
Surface = observation + capability contract
Submodel = state-machine ownership boundaryA Bundle is the packaging of the third line: a Submodel written once and placed through a Link.