Closed raulk closed 1 year ago
Strong preference for developing directly on master. Linear commit history and one-thing-per-commit means that the worst case where we have to revert partial development on something that doesn't have time to land is not even that bad.
@ZenGround0 I didn't follow your line of reasoning. This isn't about merging strategy. This is about supporting concurrent development.
Yes I understand that. I was trying to understand the reason behind a develop
branch which I think mostly exists to separate out changes that we think might not land. If that's the motivation it's not sufficient given the nice properties of the linear commit history imo. Maybe I'm missing stronger motivation.
Doing development on one branch is simpler when there is not too much going on and my intuition is that these two streams combined are not big enough to violate that heuristic. If you'd strongly prefer a development branch we can make it work too.
I was trying to understand the reason behind a develop branch which I think mostly exists to separate out changes that we think might not land.
That isn't the motivation. The motivation is to enable concurrent development of network versions that are pipelined in time. Merging all changes to master will imply that changes slated for nv18 would end up shipping in nv17 (if master represented nv17).
I think you're both right, but maybe with different contexts.
I concur with @ZenGround0 a strong preference for development of the code that we expect to ship soon happens on master
. At the moment "soon" means for nv17 (actors v8 has already branched off for release in nv16). So Zen this means all the work you're preparing for would be on master
.
We do then need a way to develop code that's targeting a release further in the future. A long-lived branch that's treated as a target for PRs is a good way of doing this. Maintainers need to continually rebase on master
. I would caution against maintaining more than one of these, as the cost of conflict between these branches runs high. But either "M2" or "nv18" or even just "next" are ok labels for this.
All that said, @raulk, if changes to the init actor or account actor are ready in time for nv17, I would tend to just release them with that, following the principle of minimising work in progress. The closer that M2 comes to just flicking a switch to enable already-implemented behaviour, the better.
I think the ask for developing in a dev branch was partially from me.
reason being:
If we land on everything goes directly into master, then we need to establish stricter rules on the test coverage with each PR imho.
we need to establish stricter rules on the test coverage with each PR imho
We should anyway, so if master
is intimidating enough to make it actually happen, so much the better!
Yeah, I like just having master
and a next
(and a release/vX
branch that preserves old releases and supports any quick changes needed there). My opinion (which is really just a mashup of @anorth and @ZenGround0's stated opinions) is:
master
represents stuff we expect to go into the next network upgrade, as people have said. The precise definition of "expect to go into the next network upgrade" is a little unclear, but I think we've generally found enough consensus on what that means (and when we've had to quickly add / remove a change, it's not been too hard).
next
represents a dev branch with more future-looking changes. We should aim to have next
"always" track master
so that future work is always on top of latest master
. I agree with @anorth that work should only live in next
if there is some compelling reason why it can't be merged into master
instead (eg. "it needs a new syscall that will only be provided by the FVM in M2").
This isn't really that different from the method we've used in specs-actors
in the past, except that we are expecting more future-looking dev work happening in parallel, and so need some new place for that work (when absolutely necessary). A single next
branch serves that purpose.
@arajasek sounds like the approach I suggested in the original post, but limiting concurrency to 1 in a next
branch.
@anorth is also aligned with that approach.
Re: the suggestions of shipping FVM M2-related changes (init, system, and account actors) in nv17 if they're ready, I'm strongly opposed.
Here is the latest proposal from the FVM perspective, assuming nv17 is for addressing selected non-FVM FIPs, an nv18 will be reserved for nv18.
FVM Milestone | Network version | Actors version | builtin-actors branch | ||
---|---|---|---|---|---|
FVM M1 | nv16 | v8 | release/v8 | ||
— | nv17 | v9 | master | ||
FVM M2 EVM | nv18 | v10 | next | ||
FVM M2 Native | (tbd) | (tbd) | next with feature flags |
with this proposal, question:
next
as well?cc @lemmih - how does the forest used to manage this? any thoughts on the proposals above & how we should go forward?
In short, we essentially didn't manage network versions so I have no insight to offer. :) I might be reading this discussion wrong but which branches to use is an internal matter. As long as you publish your crates and use semver, forest will be happy.
For the record, my immediate interest is coming out with an actionable item here that we all mildly agree on. That seems to be to target all "projected" (vs. confirmed) changes to a next
branch. This outcome limits our abillity to project changes into the future beyond the next network version, which basically results in clipping our own wings to fly and achieve higher velocities and rates of innovation in the long-term. I do not agree with that outcome and develop/fvm-m2
would be a ton better, but this (in my view, defective) policy can be reversed very quickly when the time comes.
M2 native should go in next with feature flags, not master imo.
Well spotted, @vyzo. I've also updated it in the original mapping table which includes ref-fvm version alignment.
I might be reading this discussion wrong but which branches to use is an internal matter. As long as you publish your crates and use semver, forest will be happy.
@lemmih No such thing as an internal matter -- your (team's) input on things like this is very welcome, since it'll affect anyone building an implementation of Filecoin :)
Re: the suggestions of shipping FVM M2-related changes (init, system, and account actors) in nv17 if they're ready, I'm strongly opposed
I will note some arguments in favour of shipping code when it's ready, though we can defer a decision until we have a concrete case to evaluate.
we are set for m2.1 - open new issue when m2.2 comes if needed.
Context
The FVM M2 milestone requires changes to these actors:
Furthermore, we propose bringing in EVM actors into the builtin-actors tree (#482).
We would like to figure out ways to support concurrent development of nv17 and FVM M2 (presumably nv18).
Proposal
master
branch contains the actor changes that are confidently going to ship in the next network version, either because their FIPs have already been approved for inclusion in the next network version, or they are de facto on track for that.develop/<project name>
branches for future changes. FVM M2 develoment would happen underdevelop/fvm-m2
, but would still use the pull request process to merge changes there, so that the community has visibility and can review.