Description
Today 3 PRs have been made (perhaps more that slipped my RADAR), which all bumped MAJOR version, because of trivial changes.
In all 3 PRs voices rose that wanted a less drastic version bump:
- queen-attack: represent positions as objects #935 and robot-simulator: encode position as object instead of string #936: It was requested that only PATCH was bumped, since the actual testdata didn't change, only its source representation. No track had to change its language specific representation of the testdata to actually comply to the new testdata.
- crypto-square: Improve test data #937: It was requested that only MINOR was bumped, because the tests stayed the same, but were only slightly re-orderd, a single one added and also de-nested.
But the current versioning and bumping guidelines tell us this:
- MAJOR changes should be expected to break even well-behaved test generators.
- MINOR changes would never break well-designed test generators, because the test-generation logic remains exactly the same.
- PATCH changes would never break well-designed test generators, because the test data remains exactly the same
[enumeration mine, detailed descriptions omitted for now]
After reading this TL;DRs of the various kinds of version bumps, some question arise.
- What is a “well-behaved” testgenator?
- What changes except for renaming, adding, removing or reordering tests, will not break a generator?
Even worse, on a further read of the more thorough description of each bump I found this:
[bump PATCH when] Regrouping/"Renesting" test cases without changing test case ordering.
But how is changing the nesting, not changing the logic of the testgenerator? It can't find the tests anymore where it expects them.
Also I do feel, that adding and removing testcases, may end in a completely different way to solve the exercise, which makes the whole testsuite incompatible with its previous version, so it should be a MAJOR bump here, instead of a MINOR as in the document:
[bump MINOR when] Adding or deleting test cases.
Nearly the same reasoning applies in my eyes for the other two cases where a MINOR were sufficient, but I'd do a MAJOR because it changes the way to solve the exercise drastically:
- Changing the test cases inputs and/or outputs.
- Changing the test cases ordering.
When we introduced the versioning scheme, I've understood it as versioning the exercise, today I learnt it's meant to version the generator.
I do not think this is the way to go, but I will not try to change that anymore, I think I'm just to late to the party to change this, but what I can try, is to simplify the current bumping guide and remove ambiguity:
- Bump MAJOR when you do not bump MINOR
- Bump MINOR on fixing typos in comments and descriptions or you are reformatting/reordering the JSON document without changing its semantics.
- Remove PATCH from versioning scheme
Basically, this would mean, everything which could break existing solutions or examples or testgenerators gets a MAJOR bump. MINOR bumps are for semantically no-ops…
Edit: Fix typos