# Please be mindful of version bounds and semantic versioning when tagging your packages

**URL:** https://discourse.julialang.org/t/please-be-mindful-of-version-bounds-and-semantic-versioning-when-tagging-your-packages/30708
**Category:** Community
**Created:** [November 4, 2019, 6:53pm UTC](https://discourse.julialang.org/t/please-be-mindful-of-version-bounds-and-semantic-versioning-when-tagging-your-packages/30708 "2019-11-04T18:53:20Z")
**Posts on this page:** 1
**Showing post:** 29

<div class="post-metadata">

### Author: ![fredrikekre](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fredrikekre/32/1688_2.png) [@fredrikekre](https://discourse.julialang.org/u/fredrikekre)
#### Post date: [November 4, 2019, 10:21pm UTC](https://discourse.julialang.org/t/please-be-mindful-of-version-bounds-and-semantic-versioning-when-tagging-your-packages/30708/29 "2019-11-04T22:21:04Z")

</div>

> [@chakravala](#):
>
> I would rather wait until the breaking release was made, then test and then add bounds, but I can see why you want it this way. I’m not sure yet whether I am going to do it this way or not.

So consider this; we have package `A` (versions `A@1.0` and `A@1.1`) that depends on `B` (version `B@1.0`). Now, the author of `B` has made some breaking changes and decide to release `B@2.0`. Lets compare “your” approach with “mine”.

* * *

With “your” approach, `A@1.0` and `A@1.1` has no bounds on `B` at all (because that is “reckless and careless”, and “incorrect”).

Lets first consider the case where `B@2.0` **does not** break our versions of `A`: _Phew, we guessed correctly, thats a relief, our users are safe to `pkg> up` and get `B@2.0` without that breaking anything. Lets hope we are lucky with `B@3.0` too._

Now, consider the case where `B@2.0` **does** break our versions of `A`: _Panic mode; quickly add bounds and release `A@1.1.1` with correct upper bounds on `B`. Now our users are safe to `pkg> update` again. Right?_

Well, no, because versions `A@1.0` and `A@1.1` still claims to support `B@2.0`, and users might end up with `A@1.1.0` and `B@2.0`: _Panic again, what to do? Ah! We can modify the registry and add the bounds we should have had there in the first place! All good!_

Again, no, because there is a user that has `A@1.1.0` and `B@2.0` and everything works perfectly fine; that user happened to not be affected by the breakage. Now, by modifying the registry that user has ended up in an “impossible” state (according to the registry), and that will wreak havoc as soon as that user tries to use the package manager.

* * *

With “my” approach, `A@1.0` and `A@1.1` has bounds on `B`: since only `B@1.0` exist, we require `B = "1"`, since that is what we can verify.

Lets first consider the case where `B@2.0` **does not** break our versions of `A`: _Ah, nice, we can relax the bounds to `B = "1,2"`, and make a new release `A@1.1.1`. And just to be nice, lets also release `A@1.0.1` with the relaxed bound if someone still uses `A@1.0`._

Now, consider the case where `B@2.0` **does** break our versions of `A`: _Makes sense, `B@2.0` is an (according to SemVer) breaking release, and we already have reasonable bounds so nothing to do. Let’s just put on our TODO list to fix `A` to be compatible with `B@2.0`._

* * *

Why do you prefer your approach here? The only “good” thing I can see with your approach is that it makes it a bit more simple in the (presumably) rare case that we guessed correctly about how breaking the next breaking release of `B` would be.

* * *

> [@chakravala](#):
>
> Frankly, I am not paid enough ($0) to really care

Welcome to the club 🙂

---

_[View the full topic](https://discourse.julialang.org/t/please-be-mindful-of-version-bounds-and-semantic-versioning-when-tagging-your-packages/30708)._
