^0.2.0 does not accept 0.3.0: pinning @sume-com/sdk in npm
A caret range on a 0.x version only allows patch updates: ^0.2.0 means >=0.2.0 <0.3.0-0. What that means for @sume-com/sdk upgrades and CI.

Short answer
A caret range allows changes that do not modify the left-most non-zero digit, so ^0.2.0 means >=0.2.0 <0.3.0-0, per the node-semver README. For @sume-com/sdk, currently published as 0.2.0, a caret range will take 0.2.x patch releases but never 0.3.0. A minor bump needs a deliberate edit of package.json, which is the safe behavior for a pre-1.0 package.
How the caret behaves
npm describes ^version as compatible with version. The precise rule lives in node-semver, and the examples below come from its README. The further left the first non-zero digit sits, the narrower the range.
| Range | Allows |
|---|---|
| ^1.2.3 | >=1.2.3 <2.0.0-0 |
| ^0.2.0 | >=0.2.0 <0.3.0-0 |
| ^0.0.3 | >=0.0.3 <0.0.4-0 |
What it means for the Sume SDK
The SDK docs describe @sume-com/sdk@0.2.0 as MIT licensed with no runtime dependencies. Under 0.x, the caret treats 0.3.0 as a different compatibility line and does not install it on its own. That is good for production, because nothing about a 0.x version number promises that a minor release keeps every behavior you rely on. It also means a fresh install will not silently move you to a newer minor when you run npm update.
The practical effect is that you control the upgrade. When you decide to move, read the release notes, bump the range by hand, run your offline tests and then your live smoke check.
A floor for the features you rely on
Pin a floor as well as a ceiling. The webhook docs state that verifyWebhook in 0.2.0 handles the multi-signature header that Sume sends for 24 hours after a signing secret rotation. A hand-rolled verifier that compares the header for equality fails on every delivery during that window. If your code depends on 0.2.0 behavior, say so in the range, and let the lockfile record the exact version CI installs.
{
"dependencies": {
"@sume-com/sdk": "^0.2.0"
}
}
CI habits that help
Install from the lockfile in CI so every run uses the same version, and make version bumps a pull request of their own. A bump pull request should run the full offline suite, including webhook verification tests with signed fixtures and a fake-fetch retry test, and then one live read-only call. If an upgrade changes error handling, you want that to fail a test, not a customer.
Choosing a range style
There are three common choices. An exact version such as 0.2.0 never moves, which is the strictest and the most work. A caret range such as ^0.2.0 takes patch releases within 0.2.x. A broader range such as >=0.2.0 accepts anything newer, including a future 1.0 with breaking changes, so it suits only a library that tests against a matrix.
For an application that spends money through the SDK, the caret on the current minor, together with a committed lockfile, is a reasonable default: patches arrive, minors wait for a human.
- Exact pin: no movement, most manual.
- Caret on the minor: patch updates only while the major is 0.
- Open floor: accepts any newer version, including breaking ones.
After the 1.0 release
Once a package reaches 1.0, the same caret means something wider. Per the README, ^1.2.3 allows >=1.2.3 <2.0.0-0, so minors and patches flow in. Remember to revisit your ranges and your test suite at that point, because a caret that was conservative at 0.x becomes permissive at 1.x.
Sources
Related posts
More in Developers
- oasdiff breaking: catch Sume OpenAPI changes in CI
Commit a snapshot of the Sume OpenAPI spec and run oasdiff breaking against the live document in CI, so changes that break your client show up before release.
- og:image width, height and alt tags for an AI image from Sume
Open Graph has optional og:image:width, og:image:height and og:image:alt. Read the real size from a Sume render with Pillow and print all three tags.
- One reference image on Seedance 2.5 is not a first frame
On /v1/videos, input_references steer a generation; frame_images pin frames. Send one image the wrong way and the clip does not start on your picture.
- One Python verifier for Sume job and run webhooks, routed on event
Job webhooks and run webhooks share one signing secret and one signature scheme, so one verify function plus a router on the event field covers both.
Written by Sume