Com agradecimentos à @Zoredache, consegui fazer com que essa build fosse do jeito que eu preciso.
Estou usando a seção [principal] para criar e gerenciar dinamicamente ramificações e [produção] para substituir a configuração noop. Tenho certeza que isso também poderia ser feito em [agente], mas eu já tinha começado aqui.
[main]
logdir = /var/log/puppet
rundir = /var/run/puppet
confdir = /puppet/$environment
vardir = /puppet/.$environment-var
ssldir=/etc/puppet/ssl
environment = production
server = puppet.domain.org
pluginsync = true
noop = true
# Disable running all branches by default
[production]
noop = false
EDITAR: Parece que falei cedo demais. O noop está sangrando. Embora a sintaxe acima esteja certa, uma das cavidades que eu examinei não permitirá que isso funcione. link
.. 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)