internal async Task <TimelinePoint> WriteFromApp(Event e)
        {
            var(copy, type) = CopyEvent(e);

            _topicType.ExpectObserves(type);

            var point = new TimelinePoint(
                AdvancePosition(),
                TimelinePosition.None,
                type,
                copy.When,
                Event.Traits.WhenOccurs.Get(copy),
                Event.Traits.EventId.Get(copy),
                Event.Traits.CommandId.Get(copy),
                Event.Traits.UserId.Get(copy),
                null,
                type.GetRoutes(copy, Event.IsScheduled(copy)).ToMany(),
                () => copy);

            await OnNext(point);

            return(point);
        }