public void MakeReportForLeader(Leadership leader, List <string> currentWork)
        {
            CurrentWork = currentWork;
            Tock++;

            if (leader.Term < Term)
            {
                LeaderTock = 0;
                return;
            }

            if (leader.Term > Term)
            {
                if (currentWork.Any())
                {
                    return;
                }
                Term       = leader.Term;
                Tock       = leader.Tock;
                LeaderTock = leader.Tock;
            }

            if (leader.Tock > LeaderTock)
            {
                Tock       = leader.Tock;
                LeaderTock = leader.Tock;
            }
        }
        void Lead()
        {
            using (var session = RavenFactory.OpenSession())
            {
                session.Advanced.UseOptimisticConcurrency = true;

                var l = session.Advanced.Lazily.Load <Leadership>(Leadership.Identifier);
                var f = session.Advanced.Lazily.LoadStartingWith <Followership>(Followership.IdPrefix);
                session.Advanced.Eagerly.ExecuteAllPendingLazyOperations();

                var leadership = l.Value;

                var followers = f.Value.ToList();
                var me        = followers.FirstOrDefault(x => x.FollowerId == ProcessIdentity);
                if (me == null)
                {
                    return;
                }

                if (me.ConsideringCoup)
                {
                    if (leadership == null)
                    {
                        leadership = new Leadership();
                        session.Store(leadership);
                    }

                    if (leadership.IsHumbleFollower(ProcessIdentity))
                    {
                        leadership.UsurpPower(ProcessIdentity);
                        session.SaveChanges(); //throw if someone else beats me
                        //TODO: Log Won Election!
                    }
                }

                if (leadership == null)
                {
                    return;
                }
                if (leadership.IsHumbleFollower(ProcessIdentity))
                {
                    return;
                }

                leadership.CommandFollowers(followers);

                var dead = followers.Where(leadership.IsDeadFollower).ToList();
                dead.ForEach(session.Delete);

                session.SaveChanges();
                Console.WriteLine("counts... {0}, {1}", _workQueue.Count, InProgress.Count);
            }
        }