# live_interaction_contracts v1.0.0 - Table of Contents

> Dev/test-only conformance harness that checks whether browser-native interaction state (popover, dialog, focus, scroll, combobox listbox) is patch-safe under Phoenix LiveView. Not a UI component library.

## Pages

- [live_interaction_contracts](readme.md)
- [SPEC — live_interaction_contracts (v1, frozen)](spec.md)
- [KERNEL — five members (v1, frozen definitions)](kernel.md)

## Modules

- [LiveInteractionContracts](LiveInteractionContracts.md): Dev/test-only conformance harness for Phoenix LiveView browser-native
interaction contracts. **Not a UI component library.**
- [LiveInteractionContracts.Channel](LiveInteractionContracts.Channel.md): Server-side monotonic guard for versioned async query/result exchange — the piece
that upgrades the Channel contract from **convention to construction**
(CHANNEL_CONTRACT.md; combobox spike verdict 1).
- [LiveInteractionContracts.Components](LiveInteractionContracts.Components.md): Single import entrypoint for the conformance-backed reference components.
- [LiveInteractionContracts.Components.Combobox](LiveInteractionContracts.Components.Combobox.md): Headless, unstyled, **patch-safe** combobox — the composition case:
popover listbox (openness in the top layer) × Cursor (`aria-activedescendant`
on the input) × **Channel** (versioned async query/results with the server-side
monotonic guard, `LiveInteractionContracts.Channel`).
- [LiveInteractionContracts.Components.Menu](LiveInteractionContracts.Components.Menu.md): Headless, unstyled, **patch-safe** dropdown menu — `popover` (open/close,
browser-owned) composed with a **Cursor** (`aria-activedescendant`) over
server-rendered, identity-bearing menu items.
- [LiveInteractionContracts.Components.Popover](LiveInteractionContracts.Components.Popover.md): Headless, unstyled, **patch-safe** popover — the first conformance-backed
reference component.
- [LiveInteractionContracts.Components.Select](LiveInteractionContracts.Components.Select.md): Headless, unstyled, **patch-safe** select — popover (openness) + cursor
(aria-activedescendant) + **server-owned selection** projected into a hidden
form input.
- [LiveInteractionContracts.Components.Tooltip](LiveInteractionContracts.Components.Tooltip.md): Headless, unstyled, **patch-safe** tooltip — `popover` with a hover/focus
trigger instead of a click trigger. Simpler than `<.popover>`: no cursor, no
`aria-activedescendant`, no item navigation, and (unlike popover/menu) no
client-managed ARIA reflection either, since tooltips have no expanded state.

## Mix Tasks

- [mix live_interaction_contracts.audit](Mix.Tasks.LiveInteractionContracts.Audit.md): Scans a target LiveView app's source for the KERNEL invariants that predict
interaction bugs under DOM patching, and reports candidate risk sites.
- [mix live_interaction_contracts.compare](Mix.Tasks.LiveInteractionContracts.Compare.md): The version-upgrade fuse. Runs the harness against two LiveView versions and
reports which browser-native machines changed patch-safety behavior — so an
interaction-heavy app can see, before merging a LiveView bump, exactly which
delegated machines drifted.
- [mix live_interaction_contracts.ledger](Mix.Tasks.LiveInteractionContracts.Ledger.md): Regenerates `delegation-ledger.{json,md}` (at the package root, or `--out`)
from the harness's stable full-matrix results (`priv/harness/results-1.2.5.json`
by default). Pass `--results results.json` to use freshly generated local results.
- [mix live_interaction_contracts.test](Mix.Tasks.LiveInteractionContracts.Test.md): Boots a bundled LiveView fixture app against a chosen LiveView version, drives
it with Playwright in real browsers, and asserts the frozen classification
(green machines green, red fixtures red, deterministic). Exits non-zero on any
regression — this is the fuse.

