the bug is an army assigned to attack an adjacent rebel settlement in the first turn before it has moved is not fully initialized in some way and only becomes so after its first move
with further testing it turns out the army doesn't have to be in another region just > 2 turns move away from the target settlement so < 1 or > 2 turns away is okay but if both > 1 and < 2 turns away it gets stuck
Some weird internal thing? Does the same thing happen with a faction at war with another faction, rather than rebels?

but after 100+ turns of not expanding and paying the upkeep for a full stack that isn't doing anything it's a bit late
Seen that scenario played out repeatedly

took me 10+ years but finally figured it out
Sometimes, the solution isn't in a straight line...