I've seen situations where promotion is postponed while there are still future WAL files available.
Would recommend:
Stop your postgres service, set your recovery target to a new transaction id or timestamp that is known to be in the future. Start the postmaster. Manually and then verify that 1) the recovery target is actually in the future after starting and that 2) you are advancing toward that target. It should promote when the target is reached.