Versioning and Support¶
Mycel follows Semantic Versioning. For a runtime whose
interface is a configuration file rather than a set of function signatures,
the useful way to read the three numbers is what happens to a .mycel file
you already have.
What the numbers mean¶
| Release | What it may do to a configuration that works today |
|---|---|
| PATCH (3.7.0 → 3.7.1) | Nothing. It parses the same and means the same. Fixes only. |
| MINOR (3.7.0 → 3.8.0) | Nothing is taken away. New blocks, attributes, connectors and functions become available. |
| MAJOR (3.x → 4.0.0) | A configuration that started before may be refused, or may mean something different. |
That is why 3.0.0 was a major release: it was not about the size of the
change. Configurations that used to start began to be refused, and settings
in auth that had been parsed and ignored started to act. The version number
has one job there, which is to make someone read the notes before upgrading.
The grey area, stated¶
A fix changes behaviour. That is what a fix is. The rule we apply:
- If the old behaviour was silently wrong — an attribute that was parsed and never read, a write that was dropped, a field that answered an empty list — the fix ships in a patch, and the changelog entry says exactly what changes and what it looked like before. Nobody could have deliberately built on a behaviour that was reporting success while doing nothing.
- If someone could reasonably have built on the old behaviour, the change waits for a minor and is announced there, or for a major when it cannot be made compatible at all.
Deprecation¶
An attribute or a block is never removed in a minor release. It is marked
deprecated, keeps working, and mycel validate warns about it. The earliest
it can be removed is the next major, and the changelog for that major lists
every removal under a Breaking heading, which is also what the release
notes are built from.
Supported versions¶
The latest minor of the current major receives fixes, including security fixes. Earlier minors do not.
This is deliberately modest. Mycel is maintained by one person, and a support promise that cannot be kept is worse than a narrow one that can. If you need to stay on an older line, the source is MIT and the release you are on is tagged; the practical advice is to pin a version and upgrade deliberately rather than to expect backports.
Release cadence¶
Releases are cut when something is ready, not on a calendar, so there are a lot of them. That is not the same as instability: what a patch is allowed to do is bounded by the table above, so upgrading within a minor is meant to be uneventful. Pin an exact version in production and read the changelog before moving.
go install github.com/matutetandil/mycel/v3/cmd/mycel@v3.7.0 # exact
docker pull mdenda/mycel:3.7.0 # exact
helm install mycel oci://ghcr.io/matutetandil/charts/mycel --version 3.7.0
The floating tags — 3.7, 3, latest — exist for convenience and are not
what a production deployment should follow.
The Go toolchain¶
The go directive in go.mod may move in a minor release, never in a
patch. It is the version the published container images are built with, and
moving it is a change to the build, not to a configuration.
It moves on purpose only. A dependency update can raise it on its own: during
3.7.1 three golang.org/x updates each required Go 1.26 and silently rewrote
the directive, which would have broken a release whose images pin Go 1.25.
The directive is checked against both Dockerfiles after every dependency
change.
Dependencies¶
In a patch release we take security fixes and patch-level updates of direct dependencies. Nothing else.
Anything that changes an engine waits for a minor and is verified against built binaries rather than only against tests: the CEL evaluator behind every transform, a database driver, the GraphQL layer. A test suite that passes does not prove that thousands of existing expressions still evaluate to the same values.
When a vulnerability is reported against a dependency, the fix goes out as a
patch release with a Security section in the changelog, which is what the
release notes lead with. See Security
for how to report one.