> So to attempt to distill a set of heuristics from the discussion: > > Patch release: Goal: maintain and improve stability > - Non-disruptive, non-API changing bugs are fine w/out consensus > - Bugs that change defaults or interfaces require consensus > - Improvements of any kind require consensus and must be small, in safe > areas, non default changing > > Minor release: Goal: stable introduction of new features > - New features, always with feature flag (added; happy to drop if > controversial) > - No API breaking changes; additive API changes w/sane defaults acceptable > > Major release: Goal: provide avenue to make breaking, non-backwards > compatible evolutionary changes > - API breaking changes > - Deprecating functionality > - Changing default behaviors > - Destructive / removing changes (params, features, etc) > - Major, well-tested and well documented component refactors (added; happy > to drop if controversial) > > With the above structure, we may go from Major to patches to Major without > a Minor, or go from Minor to patches for awhile to Minors if we don't have > destructive changes. > > Is that consistent w/what you're saying above Mick? If so - what do others > think? >
Yes, thanks Josh. I do think there's a lot of ambiguity and discussion to be had around what constitutes a Major change. And, to stress it, I think it's easy for us to look at it solely from a code and accuracy perspective, but that it would be more valuable to take a user-centric (WIIFM) approach and to be as pragmatic as possible. e.g. let's take the discussions whether certain interfaces/APIs are user-facing enough to signal a major change to all users (index, triggers, etc, come to mind), bearing in mind our mix-version upgrade ability deals with a lot (and the planned work raised to deal more easily with rolling back a started upgrade), us having a NEWS.txt, and that small API stuff is often changing in minor versions anyway. I would move "Deprecating functionality" to be under Minor version. Something could be deprecated in 4.1, and then removed in 5.0.