Problem
An existing project can show an enabled, healthy Builder and advertise /builder
as always available on demand, while approving a current Architect plan fails
with:
plan_acceptance_builder_not_configured
New projects seed Builder agents with both a GitHub command trigger and a manual
trigger. Older project rows can legitimately contain only the manual trigger.
findAgentDef currently falls back to the agent name only when triggers is not
an array. A valid trigger array with no command or handle therefore makes an
enabled legacy Builder undiscoverable, despite the UI's on-demand contract.
Expected behavior
- An enabled legacy agent with no explicit command binding is addressable by its
name.
- A renamed agent with an explicit
/builder binding remains addressable by that
binding.
- An explicit remapping (for example, a Builder named
builder bound to /ship)
is not overridden by the name fallback.
- Approved plan execution can dispatch through a legacy manual-only Builder.
Acceptance
- Add focused unit coverage for fallback, explicit alias, and explicit remapping.
- Add an API integration regression that executes approved plan acceptance with
a manual-only legacy Builder.
- Keep tenant/project/enabled filtering unchanged.
Problem
An existing project can show an enabled, healthy Builder and advertise
/builderas always available on demand, while approving a current Architect plan fails
with:
plan_acceptance_builder_not_configuredNew projects seed Builder agents with both a GitHub command trigger and a manual
trigger. Older project rows can legitimately contain only the manual trigger.
findAgentDefcurrently falls back to the agent name only whentriggersis notan array. A valid trigger array with no
commandorhandletherefore makes anenabled legacy Builder undiscoverable, despite the UI's on-demand contract.
Expected behavior
name.
/builderbinding remains addressable by thatbinding.
builderbound to/ship)is not overridden by the name fallback.
Acceptance
a manual-only legacy Builder.