The server-side module graph and HMR update propagation.
Semantics follow Vite's model (the de-facto standard the React ecosystem is written against): on a file change, walk UP the importer chain from the changed module looking for accepting boundaries. If every path terminates in a boundary, send a targeted hot update; if any path dead-ends at an entry without acceptance, fall back to a full reload.
For React, a module becomes self-accepting when the Fast Refresh glue
decides every export is a component (the validateRefreshBoundary rule).
That wiring lands in milestone 1; the propagation algorithm below is
already the real one.