On 2018-04-24 09:22, Eric Covener wrote:
On Tue, Apr 24, 2018 at 10:08 AM, William A Rowe Jr <wrowe@xxxxxxxxxxxxx> wrote:On Tue, Apr 24, 2018 at 8:27 AM, Eric Covener <covener@xxxxxxxxx> wrote: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.As a general rule, adding a directive introduces a new feature, along with new functions, and structure additions.I won't argue the semantics any further, but I don't agree there is any such equivalence or general rule.
One thing you mention above is "wait for a new minor release". I can definitely see that being an issue for our current maj.minor layout given that minor bumps are measured in years. In this proposal, unless there's a pressing need to send out a patch release right now, the next version WOULD be that minor bump. Put into practice, I would see major bumps being measured in years, minor bumps in quarters and patch bumps in weeks/months.
For me including this would poison almost any proposal it is added to. In the context above: I want to use directives for opt-in of fixes in a patch release.
FWIW, I propose that a directive addition would be a minor bump because directives are part of a configuration "contract" with users - a set of directives that exist in that major.minor. By adding directives in a patch, we break the contract that would state "Any configuration valid in 3.4.x will always be valid in 3.4.x." We can't do that today, but it would be great if we could. Adding directives only in a minor bump provides a clean point at which a known set of directives are valid.
-- Daniel Ruggeri