@odoaker2015 From the FIDE rules on Swiss tournaments:
http://www.rrweb.org/javafo/C04.pdf"B Pairing Criteria
Absolute Criteria
(These may not be violated. If necessary players will be moved down to a lower score bracket.)
B.1 a Two players shall not meet more than once.
b A player who has received a point or half point without playing, either through a bye or due
to an opponent not appearing in time, is a downfloater (see A4) and shall not receive a bye.
B.2 Two players with the same absolute colour preference (see A7.a) shall not meet (therefore no player’s
colour difference will become >+2 or < -2 nor a player will receive the same colour three times in row)"
Absolute criteria... may not be violated... two players shall not meet more than once!
At a first glance this would seem to support your position. But look very carefully at what it says:
-->> ** If necessary players will be moved down to a lower score bracket. ** <<--
If you apply this, you can always have an N round swiss tournament with N+1 players. (Which of course would, effectively, be a round robin tournament.)
Personally I think it would make more sense to abandon the 'not playing the same player twice' requirement before the 'same score bracket' requirement, simply because it's much more interesting to pair players with similar scores. Apparently FIDE does it the other way around.
In any case, if pairing fails, one of the two requirements will have to give way. It definitely beats "sorry, we can't pair anymore". And I'm not surprised this has been forseen in the FIDE rules for it. Nor am I surprised that some pairing applications fail to implement these rules, at least regarding moving players down score brackets to solve potential dead locks. This likely is the reason your pairing program refuses to make a pairing after a certain number of rounds. (And as such I would call it a bug.)