# Stem: Composition declared

## Claim

Hosts declare **`composes`**, **`does_not_compose`** (with CI locks), and
**`extensions`**. Resemblance is not composition. Reverse index is
`CONSUMER_MAP.md`.

## Reconstruct

- Before mutating an L1, open the consumer map.
- Refuse edges need require/forbid substrings + optional spike.
- When the host is an overlay shell, also reconstruct
  **`stems/host-chrome-symmetry.md`**: form_shell vs exchange_shell, and
  mount guests with their standalone DOM contracts (no almost-DOM forks).
- Machine check: `python tools/composition_matrix.py --validate`.

## Not this

- Silent dogfood of combobox into grid cells.
- Prose-only “we don’t use X.”
- Composing `switch` while emitting `input.dz-switch` (controls pill).
- Composing `field` as label+hint meta without a control.

## Expressions

- `docs/decisions/0003-composition-declared.md`
- `docs/agent/compose-or-refuse.md`
- `docs/spikes/combobox-in-grid-cell.md`
- `stems/host-chrome-symmetry.md`
- `tools/composition_matrix.py`
