RendersTheSameComponent
The conformance every surface renderer must satisfy, shipped by the package that owns the contract. The claim this exists to keep honest is the one the architecture is built on: **a component definition is written once and projects on every surface, and adding a surface changes no component.** Two renderers declaring the same list of component names does not establish it — they can drift into rendering different things under matching labels, and nothing would say so. It lives here, and not in a test that imports both surfaces, because such a test cannot exist: `milpa/live-web` and `milpa/live-tui` do not depend on each other and must not start. So the contract package ships the suite and each surface runs it against its own implementation — the same reason `contracts/` outranks any one skill that implements a station. What is asserted is deliberately surface-agnostic. Not "the HTML has a div" or "the frame has a * box" — those are each surface's business. Only that the *component's data reaches the output*, which is the part that must be true everywhere or the promise is empty.
RendersTheSameComponent::test_it_declares_the_target_it_renders_for()
public function test_it_declares_the_target_it_renders_for(): voidClaims its own target and refuses the others.
RendersTheSameComponent::test_an_unmounted_component_is_mounted_and_its_snapshot_returned()
public function test_an_unmounted_component_is_mounted_and_its_snapshot_returned(): voidMounts when the caller did not, and hands back what it drew.
RendersTheSameComponent::test_the_components_data_reaches_the_output()
public function test_the_components_data_reaches_the_output(): voidThe component's data survives the trip to this surface.
RendersTheSameComponent::test_it_renders_the_same_definition_nobody_adapted()
public function test_it_renders_the_same_definition_nobody_adapted(): voidRenders a definition written for no surface in particular.
RendersTheSameComponent::test_a_component_it_does_not_support_is_refused_loudly()
public function test_a_component_it_does_not_support_is_refused_loudly(): voidRefuses a component outside its allow-list instead of drawing something empty.