Introduce a model to abstract SCM service integration

[finishes #80208778]
For now I'll assume this is the default path and wrap the alternate condition test in a context.