I wish your graphing software had a better label-layout algorithm. (I'm not seeing AbstractSpyTreeBot on the charts, even after downloading the images to look closer? Was it disqualified, or am I just blind?)
Neither. I just forgot to uncomment it. I included literally every other bot. Time for another restart. At least I only wrote 11,800 words this time.
I'm going to finish this version of the game anyway, in personal blog posts, since I have already written up the results. Then I'll post the real game with AbstractSpyTreeBot.
Not quite as good for me as I would have hoped, but we're leaving the early game and heading into the midgame, where the clones will gradually start defecting against outsiders, leading to a showdown for dominance between clones and Chaos. The clones don't quite seem to have critical mass, but I care less about who wins and more about how long it lasts.
The graph for Silly 2 Bot is great, it shows exactly where weirdos and attackers became a marginal force.
Edit: This unofficial version of the game is missing AbstractSpyTreeBot.

MeasureBot maintains its lead. SimplePatternFinderBot takes second place.
Deep dive into SimplePatternFinderBot
Yonge's SimplePatternFinder can speak for itself.
           if pattern != None:
                if pattern.IsPatternFairOrGoodForUs():
                    # Try and stick to it as it looks good
                    ret = pattern.OurNext()
                else:
                    # We have a problem. If it is a smart opponent we
                    # don't want to encourage it to stick with it, on
                    # the other hand if it is a dumb bot that will stick
                    # with it regardless then we are better getting
                    # something rather than nothing. It's also possible
                    # we might not have been able to establish
                    # co-operation yet
                    if pattern.OurNext() >= 3:
                        # The pattern is godd for us for at least this
                        # move, so stick to it for now.
                        ret = pattern.OurNext()
                    elif (self.theirScore + pattern.GetNext())/self.turn\
                        >= 2.25:
                        # Under no circumstances allow it to get too many
                        # points from playing an unfavourable pattern
                        ret = 3
                    elif self.theirMoves[-1] + self.ourMoves[-1] == 5:
                        # If we managed to co-operate last round,
                        # hope we can break the pattern and co-operate
                        # this round.
                        return self.theirMoves[-1]
                    elif not self.hasTotalOfFiveBeenPlayed:
                        # If the combined scores have never been 5
                        # before try to arrange this to see if it will
                        # break the deadlock.
                        ret = pattern.OurNext()
                    elif self.round < 4 and pattern.OurNext() >= 1:
                        # It looks like we are probably dealing with
                        # a nasty bot. Tolerate this within limits in
                        # the early game where it is more likely to be
                        # a dum bot than a sophisticated bot that is
                        # very good at exploiting us, so we at least
                        # get something
                        ret = pattern.OurNext()
                    elif self.round < 8 and pattern.OurNext() >= 2:
                        # If we would get an extra point be tolerant
                        # for a little longer.
                        ret = pattern.OurNext()
                    else:
                        # It looks like it is being completly
                        # unreasonable, so normally return 3
                        # to stop us from being exploited,
                        # but occasionally offer 2 just in case
                        # we have managed to accidentally get
                        # ourselves into a defect cycle against
                        # a more reasonable bot
                        num = random.randint(0,50)
                        if num == 0:
                            # Possibly this should only be done once?
                            ret = 2
                        else:
                            ret = 3

| Bot | Team | Summary | Round | 
|---|---|---|---|
| Silly Chaos Bot | NPCs | Plays randomly. | 4 | 
| Silly 4 Bot | NPCs | Always returns 4. | 5 | 
| S_A | Chaos Army | "79% of the time it submits 1, 20% of the time it submits 5, 1% of the time it submits a random number between 0 and 5." | 6 | 
| Silly 5 Bot | NPCs | Always returns 5. | 6 | 
| Silly Invert Bot 0 | NPCs | Returns 0onthe first round. Returns5 - <opponents_last_move>on subsequent rounds. | 6 | 
| Silly 1 Bot | NPCs | Always returns 1. | 6 | 
| PasswordBot | Multics | Fodder for EarlyBirdMimicBot | 8 | 
| Definitely Not Collusion Bot | Multics | Fodder for EarlyBirdMimicBot | 8 | 
| Silly Invert Bot 2 | NPCs | Returns 2onthe first round. Returns5 - <opponents_last_move>on subsequent rounds. | 9 | 
| Silly Random Invert Bot | NPCs | Plays randomly on first turn. Returns 5 - <opponents_last_move>on subsequent rounds. | 9 | 
| Ben-Bot | Norm Enforcers | Collaborates with jacobjacob | 9 | 
Rounds 10-20 will be posted on November 16, at 5 pm Pacific Time.