Create a layout stability policy #235
Labels
No Label
blocked: dependency
blocked: info-needed
bug
duplicate
enhancement
fixed in HEAD
help wanted
hs:arrows
hs:brackets
hs:classes
hs:comments
hs:do-notation
hs:guards
hs:lists
hs:operators
hs:patterns
hs:records
hs:types
invalid
language extension support
layouting
needs confirmation
priority: high
priority: low
question
revisit before next release
wontfix
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: hexagoxel/brittany#235
Loading…
Reference in New Issue
There is no content yet.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may exist for a short time before cleaning up, in most cases it CANNOT be undone. Continue?
As proposed by @lspitzner,
brittany
needs a layout stability policy (cc @tfausak). Version 1.0.0.0 will introduce a milestone where stability is expected. This means that layout changes need to be minimized. Using versioning for this scheme is a likely strategy. Isolating layout change to major was the initially proposed scheme.The
PVP
adds some complexity and a decision point with its two major components (MAJOR.MAJOR.MINOR
). For this discussion we should refer to these asEPOCH.MAJOR.MINOR.POINT
.I propose the following system.
EPOCH
. A breaking layout change is an alteration to layout that is enabled by default.MAJOR
should be used for breaking API changes in thebrittany
library that don't effect layout.MINOR
can be used as expected via the PVP. Maintainers may introduce configurable layout changes that are "off by default" inMINOR
versions.POINT
can be used for bug fix releases.Slightly more controversial, but should
brittany
maintain a list of "experimental" features that are exempt from the stability policy. This should allow experimentation without introducing restrictive versioning overhead. Should experimental features be kept behind a config flag?👍
Here are some examples of each level of breakage:
EPOCH
: #203 changed behavior by default and did not provide a way to opt out.MAJOR
: (It was hard to find an example of this.) #50 would change the representation of some core data types.MINOR
: #201 would add a new feature that would be opt-in.POINT
: #234 was a bona fide bug fix. Yes it changes layout, but the previous output was not correct.Should experimental features be kept behind a config flag?
Speaking as a user, I have a script that calls brittany via stack exec with a specified resolver. The potential impacts of an experimental feature and my immediate remedies / mitigations:
git status
reports unstaged filesOn my end, then, there's little potential risk if you're pushing new features out aggressively.
Variations
or
☝️ unnassigned since
assignees
will be used for active work.I approve the proposed
EPOCH.MAJOR.MINOR.POINT
versioning scheme.Even with what you mention, @scooby, I think this makes sense. We may have releases that add both a bugfix and that change layout. I.e. we don't want to force changes on the user just so they can get some bugfix.
This might involve just three actions:
Seems to be reasonable it its cost. And it does eliminate the cognitive overhead of weighing up which goal is more important in individual cases (better defaults vs stability). Which has been a minor factor already.