With thanks to @Zoredache I have managed to get this build the way I need.
I'm using the [main] section to dynamically create and manage branches and [production] to override the noop setting. I'm sure it could also be done in [agent] but I already had it started here.
logdir = /var/log/puppet
rundir = /var/run/puppet
confdir = /puppet/$environment
vardir = /puppet/.$environment-var
environment = production
server = puppet.domain.org
pluginsync = true
noop = true
# Disable running all branches by default
noop = false
Looks like I spoke too soon. The noop is bleeding through. Although the syntax above is right one of the caviats I looked over won't let this work. http://docs.puppetlabs.com/guides/environment.html
.. environments have some
limitations, most of which are known bugs or vagaries of
implementation rather than design choices.
Puppet will only read the modulepath, manifest, manifestdir, and
templatedir settings from environment config blocks; other settings in
any of these blocks will be ignored in favor of settings in the
[master] or [main] blocks. (Issue 7497)