When you move the player from the top UTIL slot in a way that leaves it empty, the ESPN page automatically moves the next player up to the top UTIL slot. The same thing probably affects any other slot type with multiple instances, but usually UTIL is the only such slot.
Example:
Because there isn't room for everybody, the extension wants to move people around in the following way (preferring to keep LeBron on the bench because he's DTD):
PG: Kyrie Irving
SG: Malcolm Brogdon
SF: Brandon Ingram
PF: Domantas Sabonis
C: Montrezl Harrell
G: Dillon Brooks
F: Miles Bridges
UTIL: Collin Sexton
UTIL: LaMelo Ball
UTIL: Wendell Carter Jr.
Which is fine, but instead it ends up with this:
The reason is that when the extension moves Sabonis from UTIL to PF, LaMelo moves up from UTIL slot 2 to UTIL slot 1, and then Sexton replaces LaMelo instead of keeping both.
It's not very obvious what the best solution is. One possible solution is to treat all slots of the same type as the same target, so instead of assigning a particular destination slot ID for each player we would instead assign a destination slot type. The responsibility for finding the first such slot that doesn't have an active player would be shifted from the setup algorithm to the auto-move algorithm, but even this approach could fail in cases where all the available UTIL slots are currently filled with players that are active (playing on that day) but injured.
When you move the player from the top UTIL slot in a way that leaves it empty, the ESPN page automatically moves the next player up to the top UTIL slot. The same thing probably affects any other slot type with multiple instances, but usually UTIL is the only such slot.
Example:![problem-roster](https://user-images.githubusercontent.com/284189/103704865-4f653700-4faa-11eb-9caa-4462e03683c8.png)
Because there isn't room for everybody, the extension wants to move people around in the following way (preferring to keep LeBron on the bench because he's DTD): PG: Kyrie Irving SG: Malcolm Brogdon SF: Brandon Ingram PF: Domantas Sabonis C: Montrezl Harrell G: Dillon Brooks F: Miles Bridges UTIL: Collin Sexton UTIL: LaMelo Ball UTIL: Wendell Carter Jr.
Which is fine, but instead it ends up with this:![problem-roster-bad-result](https://user-images.githubusercontent.com/284189/103705251-fd70e100-4faa-11eb-9ff2-0a1bee660fcc.png)
The reason is that when the extension moves Sabonis from UTIL to PF, LaMelo moves up from UTIL slot 2 to UTIL slot 1, and then Sexton replaces LaMelo instead of keeping both.
It's not very obvious what the best solution is. One possible solution is to treat all slots of the same type as the same target, so instead of assigning a particular destination slot ID for each player we would instead assign a destination slot type. The responsibility for finding the first such slot that doesn't have an active player would be shifted from the setup algorithm to the auto-move algorithm, but even this approach could fail in cases where all the available UTIL slots are currently filled with players that are active (playing on that day) but injured.