Poetry's caret operator follows semantic versioning's rule that major version zero has no compatibility guarantee, so it allows changes only in the rightmost position that is not zero. ^1.2.3 means 1.2.3 up to but excluding 2.0.0, which is what most people expect. ^0.2.3 means 0.2.3 up to but excluding 0.3.0, and ^0.0.3 means 0.0.3 up to but excluding 0.0.4.
The practical effect is that poetry add httpx on a package still in 0.x pins you far tighter than the same command on a 1.x package. Since many widely used Python libraries stay in 0.x for years, a project can end up unable to receive a minor release that is in fact compatible, and poetry update will not move it.
Write the range explicitly when you disagree, for example httpx = ">=0.27,<1.0". The tilde operator differs again: ~1.2.3 allows patch updates only, while ~1.2 allows any 1.2.x. Run poetry show --tree after changing a constraint to confirm which version the resolver actually chose.