# ECP-0066: iroh-Gossip Control Protocol For Hybrid MoQ Discovery

Status: Implemented

## Decision

Add a first-party control protocol carried over iroh-gossip to advertise stream availability across multiple transport paths:

- MoQ relay (WebTransport URL + broadcast name + track),
- iroh direct (EndpointAddr + broadcast name + track).

`ec-node` will expose:

1. `control-announce`: publish control announcements to an iroh gossip topic.
2. `control-listen`: subscribe to the topic and print announcements.
3. Optional integration in `wt-publish` to announce relay-published streams via the same control topic.

## Motivation

We currently have two transport worlds:

- relay-centric (`wt-publish`),
- direct iroh (`moq-publish` / `moq-subscribe`).

Discovery is fragmented. A shared iroh control channel makes transport selection explicit and allows consumers to discover either path (or both) from one substrate.

## Scope

In scope:

- New control protocol data types in `ec-core`.
- New `ControlGossip` helper in `ec-iroh`.
- New CLI surfaces in `ec-node` for announce/listen.
- Optional relay announcement from `wt-publish`.

Out of scope:

- Policy engine for automatic best-path selection.
- Security policy beyond existing iroh/gossip trust boundaries.
- Replacing existing catalog gossip immediately (coexist first).

## Alternatives considered

- Keep relay and direct discovery completely separate. Rejected because it forces duplicated consumer logic.
- Replace existing catalog gossip in one cutover. Rejected because additive coexistence is safer for rollout.

## Rollout / Reversibility

- Additive and reversible: removing control commands and topic does not affect existing media paths.
- Existing MoQ publish/subscribe flows continue unchanged.
