I forget where to find the details on position eligibility for basketball - but I am seeing some small differences across different sources. It is probably just a data source thing.
I compared the positions that all the players on Rosters in my league were to what it is on the Leaderboard. For the most part, they match (ignoring college players or others who haven’t played in the NBA this year - the leaderboard only contains players who have played). But I found 3 examples where it doesn’t match.
All 3 are rookies:
Egor Demin - eligible at G/F, but Leaderboard has him at G
Ace Bailey - eligible at G/F, but Leaderboard has him at F
Maxime Reynaud - eligible at F, but Leaderboard has him at C
I have Reynaud on my team, and I was hoping to be able to play him at C. I would guess that he will be eligible for it next year, but just checking to make sure there isn’t a bug.
Current answer: they are locked in on a given date (the keeper deadline) and then any data provider changes show in “Projected Positions” on the player’s player card page.
I’d guess what you are seeing is the leaderboards not using the stored positions for the season but instead using the projected positions from the data provider, which is for example changing Egor Demin from G/F to G next year.
I think leaderboards should use current positions and not the data provider’s whimsical changes, so I’ll look into that.