@Bruce_D_Arcus1 I’m adopting semantic versioning in citeproc-rs. Styles can declare their version requirements like “1.1” or “1.1.0”, which means >=1.1.0 but <2.0.0. A style that doesn’t depend on any 1.1+ only features can stick with “1.0” or “1.0.1” etc and doesn’t need updating. You can use any version requirement syntax supported by the semver crate.
This requirement is checked by the engine: the engine knows what version it supports, and it will bail out if its own version is not within the specified range. This could, I suppose, be a warning, but few CSL tools have the ability to report warnings at runtime, so I’m not sure of the utility there. Such a bailout would be a prompt to update one’s engine.
From that point on, the engine just processes as normal. It won’t disable 1.1-only features for 1.0-supporting styles, and verifying that declared
1.0 support would actually still work in 1.0 is up to the style author, not the engine. You could do this by downloading an old engine. (Although it will disallow parsing CSL-M-only features for CSL styles and vice versa. These errors get reported at parse time.)
As far as I know, CSL does use de facto semver numbers and the 1.1 release will correspond to “adds features but introduces no breaking changes” rule for minor version bumps. There is a note in the spec about styles declaring themselves 1.0-compatible, but maybe 1.1 could include a statement of the versioning semantics! The tricky part of that is declaring what a breaking change is. One interpretation would be “would an old style fail to parse or produce an error?” but it should probably cover more than that.
I also introduced a new way to specify that a style is CSL-M:
<style ... version="1.1" variant="csl-m">
version="1.1mlz1" is non-standard and cannot be parsed into a semantic version range (see the semver spec) but that specific string is special-cased for compatibility. I don’t know if there are other CSL-M version numbers that should be recognised; it’s not clear to me what the
mlz1 means. @Frank_Bennett ? CSL-M version numbers are a separate stream from CSL. The engine will declare one engine version per variant.