Safe maintenance operations for legacy lifecycle rows without tenant ownership.
The report deliberately exposes only durable identifiers and NULL ownership. Assignment is explicit: Chimeway never derives a tenant from lifecycle data.
@spec assign_event_tree(String.t(), String.t(), keyword()) :: {:ok, map()} | {:error, :invalid_event_id | :invalid_tenant_id | :not_found | :already_assigned | :ownership_conflict}
@spec report(keyword()) :: map()