Our current release procedure consists of taking a snapshot and putting it on the R drive. We cannot rebuild that snapshot, and it's difficult to patch with certainty.
My experience with building products comes from a commercial environment where we had many products and variants, with a lot of sub-products, as well as different installers.
Here I will sketch out a design for what I think is necessary to achieve a re-buildable release. It is however only a proposal and ideas are welcome.
A way of developing product is to develop along the trunk (or master), freeze development, then branch. However, we have the added complication of pips.