Ok, so here is the tentative plan for Stormblood. Right now when you transfer servers, you get a new character. I connect your new character to your old character by figuring out that the lodestone IDs are the same. One of the motivations for doing it this way was to preserve old server history and the sanctity of server rankings. I think, though, that what server you were on when you got a ranking should not be relevant any longer, and that you should just always have All Star points on your current server, even for things you did on another server a long time ago, etc.
So what this means is that I want to move to the following model.
(1) Character ID = Lodestone ID. There is no difference. This means that when you name change and/or server change, the character will actually be mutated in place and the old name and server will be lost.
(2) Job levels will be cached for all characters.
(3) I'm going to make "server resolution" into a completely independent operation from report exporting. This will allow for the re-exporting of reports without endangering the server placement of characters. This ensures that if I have to recrawl reports because of changes to damage/healing #s etc. that I can do so without suddenly placing you on a different server.
(4) I'm going to show a new panel in Rankings above the actual rankings that says what server I think each person is on, and you'll be able to say "This is wrong!" and pick from all relevant matches that have the job leveled. This means that even if I get it wrong, there will be a facility in place to correct FFLogs' mistake.
(5) All characters will have a "last_updated" timestamp. If I haven't checked Lodestone in more than 24 hours, I will make sure I do so whenever that character is checked (in a variety of places in the UI), e.g., your character page, when you're checked for rankings, etc. This should ensure that name changes get picked up relatively quickly. Updating your characters in Settings will force a name change check.
With that out of the way, let's get into how server resolution will work.
(a) A speculative static will be established based off where you uploaded. If you upload to a static that static will be used. If you upload to personal logs, I will look for a claimed character whose name and job level match, and then use that character's static. If a speculative static cannot be established, the report will not be ranked. I will explain why when people view rankings, so that they can claim their characters in order to ensure this does not happen.
(b) For each character in the log, I will look to see if there is a match in the static/FC with the same name and job level. If so, I'll use that character.
(c) If there is no match within the static/FC, I will look for characters on all the servers used by the static/FC, starting with the server that the static/FC was created on in FFLogs. If I find a name and job level match, I will use that.
(d) On a miss, i.e., no match found within any static/FC, I will look for any character with the same name and job level that matches. If more than one exists, I'll give up and not rank that character.
(e) If no match is found, I will go to the Lodestone and look for a name/job level match there. If I find one, I'll add that character to FFLogs' database and then use it.
(f) I will cache the resolved results for each fight, e.g., (fight id, character name, lodestone id) and if the report is re-exported, etc. I will simply use those cached results rather than running this algorithm again.