OK. Today I will write about the bug I encountered. A similar bug report will also be submitted to the official site.
Back when I started the game, I installed a custom database for the Netherlands league system.
The Eerste Klasse, the sixth level of the Dutch football system, consisting of 11 sub-leagues (five Saturday leagues and six Sunday leagues), has no automatic promotion positions. Each sub-league, however, has three playoff positions, forming a promotion playoff cup of 33 teams. 24 of them will be qualified for upper division playoff.
The Hoofdklasse, the fifth level of the Dutch football system, consisting of four sub-leagues, has a relegation playoff. The relegation playoff of the higher league is also the promotion playoff for the lower league. This playoff consists of 16 teams from the bottom 4 of each sub-league, as well as the 24 qualified teams I mentioned above. It will choose 16 teams to stay (or get promoted to) Hoofdklasse, and the other 24 teams to relegate (or fail to promote to) the Eerste Klasse.
Note that the “Number of Teams Qualified for Upper Division Playoff” is being very clear about what it does. In fact, the option only exists if both a relegation playoff from the higher league and a promotion playoff in the lower league exist, and the checker of the pre-game editor apparently wants to ensure the number of qualified teams equals to “the number of teams from lower division to playoff”. The intention is clear, the checker says OK. It doesn’t look like a hidden, untouched corner case.
There is more than a rule checker available for a database editor. I can run quick simulation to see whether the league rules are off.
Similar to what I experienced during actual play, the game creates a Promotion Playoff cup for the lower league, and a separate Relegation Playoff for the upper league.
And similar to my experience, both matches are created on the same date, June 2nd of 2019. Hence, there is no chance the winners of the lower league promotion playoff could actually qualify for the upper league relegation playoff.
So, it seems to be a bug in the game scheduler rather than the custom database! The scheduler has failed to take into account the dependency between the two playoff cups, and arranged them in a fashion that the qualification of the lower league means absolutely nothing.
There is one question left: if the playoff of the lower league is useless, then where does the 24 teams of the higher league relegation playoff come from?
The first 16 teams come from the bottom of the Hoofdklasse, as expected. The next 33 teams are the top 3 of each Eerste Klasse sub-league, sorted by sub-league ID. The qualification playoff gets completely ignored, so is reputation, or league rank, or league points, or any tiebreaker that you think would make sense.
And I happen to be in the 10th sub-league, the Eerste Klasse Zontag E, which means even if I keep winning it, I would appear at the 28th position in the list, where only the first 24 gets actually picked.
Hence, unless I intentionally relegate and promote again, and am lucky enough to get in one of the sub-leagues with a smaller ID, I am stuck there and have no hope of promotion.
I am not the first player to encounter this bug. This forum thread has probably hit the same problem as well.
Once we know what’s happening, it’s easy to find a fix. I can just remove the promotion playoff, and enter all 33 qualifying teams into the relegation playoff of Hoofdklasse. It might be farther from reality, but at least it works.
That said, there is no way to change the league rules of an ongoing game. Not even the paid tools (official or otherwise) claim to have such a functionality. And during my trial of these tools, I also happen to peek at the CA and PA values of my team.
That particular save is dead, and spoiled, and beyond repair.
I spent a few hours to trace the origin of the problem. The time might not be completely wasted, as I will produce a bug report, which might help Football Manager’s stability in the long run, and at least I learned a lesson here: I should run simulation leagues before I try another custom database!