> Yes, exactly correct. We have three "contracts" to keep that I think aligns 
> very well with the following semver "contracts":
> Major => API/ABI compatibility for modules
> Minor => Feature and directives
> Patch => Functional and configuration syntax guarantees
>
> Demonstrating by way of a few examples:
> If we add a directive but do not change exported structure, that would result 
> in a minor bump since the directive is part of the feature set that would 
> necessitate a config change to use (not forward compatible).

I don't agree that adding directives is adding function,  in terms of
versioning or user expectations.  I don't see why it a new directive
or parameter should necessarily wait for a new minor release
especially when there's so much sensitivity to behavior changes. It
seems backwards.

> If we were to fix a security bug that does not impact running configs, that 
> would be a patch bump since a config that works today must work tomorrow for 
> the same maj.min.
> If we were to change default behavior, we would bump minor. This is because 
> although the change doesn't break existing explicit configs of the directive, 
> it would modify behavior due to implicit defaults => a visible change in 
> functionality.

I think it is more illustrative to turn this around and say certain
changes must wait for a minor or major release.

To me the case worth enumerating is what tolerance for behavior change
we want to allow for a security fix that goes into a patch release.

> In all cases, the changelog would clearly state the changes and we would ship 
> what we consider to be the best default config.

I'm not understanding the "best default config" part. Is this a way to
illustrate the stuff with bad hard-coded default values that won't be
fixed until the next minor? I think the term you're using is a little
broad/abstract for something like that.

Reply via email to