I think it is indeed important to have that discussion, because it would be nice to start building a 1.0.1 library of styles.
It is also true that the ‘master’ branch almost looks like it has no role other than an alias for the official stable version. But in a way, that is exactly what master is supposed to be, so it’s not necessarily a bad thing to keep it around for that role.
With the Travis CI stuff in place, I think we can have the following setup (sorry it’s again different from the proposals so far):
-
one branch for each version, where only Travis-approved commits go, thus for instance:
- branch “1.0”
- branch “1.0.1”
- branch “1.1”
- branch “master” = same as 1.0 for now, and soon same as 1.0.1, etc…
-
…and one branch for each version, that will be the development branch for each, thus for instance:
- branch “dev-1.0”
- branch “dev-1.0.1”
- branch “dev-1.1”
Those latter branches are the ones being tested by Travis, with the Travis config files pointing at the different schemas for validation, and the extra checks potentially also version-dependent (maybe we enforce more things as versions evolve, in addition to the pure XML validation).
As part of the Travis-CI run, validated commits are automatically pushed to the non-dev branch for that version. Thus any commit valid in “dev-1.0” goes into “1.0”, any commit valid in “dev-1.0.1” goes into “1.0.1”, etc… And for the current stable version, also pushed to “master”. So for now, any commit valid in “dev-1.0” goes into “master” as well.
The workflows are then very straightforward:
- The bulk of the style tweaks and additions is done on the current stable version of CSL, e.g. soon “dev-1.0-1”
- Work on future versions for styles are done in the corresponding branches, e.g. “dev-1.1”
- Put older versions on maintenance mode, and keep them consistent with current version during a transition period
- Clients can pull from the non-dev branches of their choice, e.g. maybe pull from “1.0”, or from “1.0.1” if they are ready
In this context, assuming for instance that 1.0.1 has become the current stable version (soon!), we can do all the following things:
-
work on the current dev branch “dev-1.0.1”, where most of the modifications are supposed to take place, including merging pull requests; fix errors after the fact when reported by Travis-CI
-
work on future versions on “dev-1.1”, including pull requests; fix errors after the fact when reported by Travis-CI
-
on a regular basis, merge changes from “dev-1.0.1” into “dev-1.1” so style tweaks are properly applied to the future styles as well; this requires to manually check that we are not overriding elements or properties that take advantage of the new version; deprecated stuff, or bigger schema changes would also be caught by the Travis validation
-
on a regular basis, but only during the transition, also merge changes from “dev-1.0.1” back into “dev-1.0”, so style tweaks are applied to older versions; note that this process does not need to be manually checked, since any incompatible feature will be flagged by Travis and can then be corrected before it gets into the “1.0” branch
-
pull requests on older styles can be accepted into “dev-1.0”, but we never merge 1.0 into 1.0.1 (the situation is different from point 3 above); fix errors after the fact when reported by Travis-CI; such direct changes should be the exception, because it’s likely that any tweaks to the 1.0 style should also apply to 1.0.1
I think it’s the best way to take full advantage of the set up with Travis CI. IMO, the tricky part is point (3), because it’s possible to inadvertently remove an element or property taking advantage of a new feature. It should be very straightforward for the 1.0 to 1.0.1 transition. However, the transition from 1.0.1 to 1.1 might be trickier, as the structure of the CSL could have significant changes, enough to break things more often. But no matter what we do, it’s going to be tricky to maintain styles that take advantage of new features, and at the same time merging the everyday changes we make to those styles. The merging strategy may or may not be the best way to achieve that, but having a separate branch will always help.
Those were my 2 cents 
charles