Hello, the community. I looked throughout the Internet and found little information about the villager population cap in Java 1.19. I studied the Fandom Wiki a bit and found it controversial in my game.
In Villager/Mechanics, Fandom wiki,
Population of a village is never measured. Villager breeding succeeds if the birthing parent can path to an unclaimed bed with at least two empty blocks over its head.
Okay guys. I found a way to solve this problem although I don't know the mechanism. I place a bed near villagers when they are breeding. Then villagers can realize available beds and do breed. I then sleep on/break it to destroy their connection to the bed so they can pathfind a bed in the village even far. I just breed some villagers using this method but haven't checked the outcome yet. Hope these newborns are okay. /crossfingers
Probably the pathfinding code for beds in the case of breeding is different in the case of a villager serarching a new bed. I don't know if baby villagers have limitations about block heights or whatever different from adults.
Thanks Palin. I think the mechanism is rather unclear, especially on newer versions like 1.19. The best code-based interpretation I found is on 1.14 though the mechanism might not changed too much since then.
For any followers on this post... I searched a bit about the same problem and my conclusion is that issue 1 in the OP might be the dominating issue.
When two villagers are breeding, they search for available/unclaimed beds within a radius of 48 blocks (taxicab distance) to the breeding coordinate. If there are no available beds, either because they are all claimed or because they are too far away, breeding becomes unsuccessful and angry particles are emitted from those villagers.
Q: Does placing a bed near them and breaking it work?
A: Yes but not aesthetically. They do breed under this circumstance but breaking the bed doesn't make the newborn claim a bed far away. The mechanism is the same. When night comes and the newborn starts pathfinding his bed, he walks to where the bed was originally placed (pillow coordinate) and cannot find it because it is destroyed. Then, at that exact moment, the newborn starts pathfinding again. I don't know if this is specific to this version but weird things happen here. (Sources from many reddit posts)
A villager is now able to claim a bed/job site that has already been claimed by another villager.
By this rule, the newborn will locate the closest bed even if a villager or I have slept on it. He doesn't push you or the villager off but stands on the bed doing nothing. I believe if the newborn reaches the bed earlier than the original owner, the original owner will stand on the bed instead. (This also explains my other post recently). Therefore, they only pathfind beds within 48 blocks. If it is too far away, they don't see it.
Note: I have to admit that I might have done a thing wrong here. I throw breads to villagers when they are gossiping at the gathering site for convenience every time so they breed at the gathering site. This is quite limiting because the newborn will pathfind in the proximity of the gathering site, ignoring the beds and houses on the edges. I should correct this method by feeding villagers when they are wandering to see if things get improved.