fix(builder): decouple from controller

closes #1097
replaces #1089