-
Notifications
You must be signed in to change notification settings - Fork 2.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Define a stability policy #2394
Comments
Black is stable once Django adopts it |
😀 Just to comment on that, it was a point at the time Django agreed to adopt Black that we would wait for the stable release. That we haven't adopted it is because no such release has come. So from our perspective it would be good to reach that point. It's been a couple of years now, so I suspect resistance to adopting Black (at all) has probably shrunk considerably, but from the outside it's not easy to see what's left to do for a stable version. I think it has to be acceptable to leave open the possibility of future changes, so stable can't just mean frozen. If there were a clear statement, it might allow us to decide to adopt Black anyway, even though a stable version wasn't yet released. Of course that conversation might not go well, but at the moment it's hard to even find grounds to open it. I hope that's of some use. Thanks for the great efforts, and the great project! 🏅 |
Linking #1256 as related. |
I don't have an opinion on the first two as a user -- those are decision making process items and are a maintenance question so IMO purely for the maintainers to decide. :) For the other two, a proposal I have is to promise something similar to For Black, IMO that sould look something along the lines of:
It would also be useful to mention earlier on the page that:
|
This gives the users a year of peaceful use with "will the format change?" only being a concern at the start of every year -- there are no promises that things will change but also none that things won't. This is a significantly more dilute promise than "it will never change, except bugs" but that also means you can make improvements and don't have to argue about "is that a bug" with users. I think y'all are very aware that changes in black's behaviours are very disruptive, so I'm willing to trust that you won't make horrible choices just because you have this option. With such a policy, it would also make sense to have a Of course, this ties improvements to the calendar year, but honestly, I kinda like that. Plus, with Python itself moving to an annual cadence and black becoming more and more stable, I feel like that's fine. Plus, I can't think of any other approach to use version numbers to communicate compatibility; unless you're open to changing the versioning scheme. :) |
Given that all modern usages of black I am aware of use pinning, Even if there are necessary changes, people would have those as part of the pin update in a controlled manner. So i really don't understand why anyone still has a problem with black changing on occasion. It's rare and well manageable. |
So, could this be closed by just stating that on the Readme/docs and removing the beta modifier from the version number? (Is Black really still Beta? It doesn't seem that way but... 🤔) |
@carltongibson there is a separate issue about having a non-beta release. But removing the |
@JelleZijlstra Sure. I was probably being overly rhetorical. Sorry. I think is a good topic to be resolved (i.e. what counts as stable) — it's hard to see from the outside, and I know we're just one project, but we've got stuck in a position where, having agreed to wait for the stable release, we're not currently able to adopt. (That's not your issue of course, but I'm hoping a resolution here will allow us to push forwards.) I'll leave it now. I wanted to add a big 👍 with some context, rather than distract. Thanks again. |
I think what @carltongibson and @RonnyPfannschmidt are saying won't answer the first two questions, but they do definitely answer the other two, as I read it.
Whenever I want to, and feel comfortable doing so.
Not at all. The guarantees are same as what they are today. Here's my try at phrasing what they're suggesting as a compatibility policy:
I think this is definitely the implicit contract right now. It is probably also diametrically opposite to what some folks might want -- but I guess the point is that there's no need to be changing anything beyond documenting this implicit contract. |
Thank you for all the discussion so far. I started wondering, given our choice of calendar versioning, what would be the best way of communicating the degree of disruption. Semantic versions (or if not strictly semantic, simply ordinary version numbers) are more obvious in that regard, but we won't have such luxury. Would it suffice to describe the changes in release notes and expect users to thoroughly review them? I mean, that's a perfectly valid option! And maybe the only good one. A short summary of changes or their scope might also help users. |
I'm warming up to @pradyunsg's idea above, which I'd detail as follows: We provide a stability guarantee for one year, plus an |
That'd be quite good in my opinion too! And having the option, rather than some separate unstable releases, should also be smoother for development. Concretely then, I imagine our release notes would have an "Unstable" section, and new year's releases could pull them all to one big changelog. This all seems very reasonable, since it won't hinder development behind the unstable flag at all! Hooray for SemCalVer 😄
I think it should be whenever the new style is decidedly better, by whatever metric we choose. Otherwise we would be cornering ourselves once more. "How?", is the harder question. I think the current approach of communication, consensus and Łukasz' veto have been working well.
In my opinion the current exceptions are fine. Some programs might rely on strict docstring formatting and such, but the gain does outweigh the potential problems. However, as @pradyunsg suggested on Discord with changing the indent of
With all of this in mind, I don't see a clear reason to keep Black in beta. So there could be two options of performing our first non-beta release. Right away: let's communicate it's nothing special and document our stability and version support policies, OR next january, when we would have more time to set things up and prepare users. It would be really nice to hear what @ambv thinks of all this! |
I'd like to see some level of stability for the unstable flag, eg if black were to hesitate at the end of the year or roll back formatting decisions it would still break trust in it. Perhaps |
also new syntax changes in the input source code, like parenthesized with or match, can automatically opt into new formatting styles and features because black makes no promises where it previously produced no output |
Oh, do you mean only in the naming? Sure, |
Fixes #2394. Eventually fixes #517. This is essentially @pradyunsg's suggestion from #2394. I suggest that at the same time we start the formal stability policy, we take a few other disruptive steps and drop Python 2 and the "b" marker.
As a user, a semver-like versioning seems the best understood: Guarantee format stability during a major version (for a set of options). It's possible to add forward compatibility by using options. Minor versions can add features, like support for new syntax constructs (think |
To expand on that. This would mean that minor or urgent fixes are not possible at the start of a year. Basically, the black project would need to have a big push to get changes in at that point or block all further releases. It basically forces contributors to finish features before the start of the new year, traditionally a very hectic time, to have a chance to get a feature in. For users, using calver to signal "API" stability is quite unusual. Calver is usually on projects, where stability guarantees are not necessary, for example apps or libraries with a rock-solid API that mainly updates data. |
Rust does it though, no? This would be like Rust "editions". |
Fixes #2394. Eventually fixes #517. This is essentially @pradyunsg's suggestion from #2394. I suggest that at the same time we start the formal stability policy, we take a few other disruptive steps and drop Python 2 and the "b" marker.
Fixes #2394. Eventually fixes #517. This is essentially @pradyunsg's suggestion from #2394. I suggest that at the same time we start the formal stability policy, we take a few other disruptive steps and drop Python 2 and the "b" marker. Co-authored-by: Pradyun Gedam <pradyunsg@gmail.com> Co-authored-by: Łukasz Langa <lukasz@langa.pl>
Fixes #2394. Eventually fixes #517. This is essentially @pradyunsg's suggestion from #2394. I suggest that at the same time we start the formal stability policy, we take a few other disruptive steps and drop Python 2 and the "b" marker. Co-authored-by: Pradyun Gedam <pradyunsg@gmail.com> Co-authored-by: Łukasz Langa <lukasz@langa.pl>
Hi. CalVer is legit, 0ver is legit, semver is legit. These three formats should cover basically every people need:
I can see My libs uses semver and works great. But most of the CLI tools I provides use 0-ver or calver, both are great, because guaranteeing backward compatibility when the tool is complex can be hard (and costly) to achieve. Effort can be put elsewhere. |
Please don't take the maintenance of this library as granted or suggest things as if they are obvious. We try to do our best here and make smart decisions. It's not like we try to antagonise users and try to prolong releases just for the sake of it. Do you have any suggestions to change the policy that was discussed above? |
Publish next version as 21.12.0 ? |
So now Black is really stable since Django adopted black with this PR |
We're often hesitant to change formatting now, even though technically we're still in beta (#517). Some questions we should document the answer to:
black
changes ASTs #2150)The answers to these questions should be in the documentation. Feel free to respond to this issue with other similar questions.
The text was updated successfully, but these errors were encountered: