<!DOCTYPE html><html><head><title></title><style type="text/css">p.MsoNormal,p.MsoNoSpacing{margin:0}</style></head><body><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;">Cyrus developers,<br></div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;"><br></div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;">Right now, the policy on what goes in master is "when a committer thinks it's ready for master, it goes in master."  This hasn't been a serious problem, but we can do better.  What I'd like to do is have feature branches live longer <i style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;font-style:italic;">as</i><span> </span>branches, and then be merged when we think they're done.  This will make it easier to declare that a feature is really in Cyrus (even if it's only in a 3.${odd} release), and to produce builds with features turned off and on.  It will also make it easy to drop an experiment without scouring history much.  Finally, it should make code review better, as it can be part of the "can we merge this?" process and when it happens, the whole feature changeset can be seen at once.<br></div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;"><br></div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;">There isn't much actual policy change to talk about.  Something like this:<br></div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;"><br></div><blockquote type="cite" style="margin-top:0.13rem;margin-right:0px;margin-bottom:0.13rem;margin-left:0px;padding-top:0.2em;padding-right:0.75em;padding-bottom:0.2em;padding-left:0.75em;border-left-width:0.13rem;border-left-style:solid;border-left-color:initial;border-top-left-radius:0.5rem;border-top-right-radius:0.5rem;border-bottom-right-radius:0.5rem;border-bottom-left-radius:0.5rem;color:rgb(42, 73, 125);background-color:rgb(231, 235, 242);">Changes to Cyrus are made in branches.  Branches aren't merged until the feature seems plausibly done.  When a feature is still undergoing testing, it's left in a branch.  Pull requests are opened on GitHub, and before the branch is merged, code review is completed by another committer to the one who wrote the change.  Branches should, whenever practical, be rebased before merging.  Trivial bugfixes and changes to documentation may be applied directly to master, but when in doubt, favor making a branch!<br></blockquote><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;"><br></div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;">This will go somewhere in our "Contribute code and tests" section, but right now there seems to be no discussion of policy after the creation of a PR.</div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;"><br></div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;">At present, Fastmail tends to run very close to master, and we're often testing features before they're in a state we'd consider mergeable under this policy.  To make it easy to build a Cyrus that includes all the latest bugfixes and approved experimental branches, we built<span> </span><a href="https://github.com/fastmail/mint-tag" rel="noopener noreferrer" target="_blank" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;color:rgb(63, 93, 178);text-decoration-line:underline;text-decoration-style:initial;text-decoration-color:initial;">a tool to merge all the pull requests we've flagged for inclusion</a>.  You might also find this tool useful for building your own test Cyruses.<br></div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;"><br></div><div id="defanged2-sig65535536" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;"><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;">-- <br></div></div><div id="sig65535536"><div>rjbs<br></div></div></body></html>