What is missing
ADR 0061 adopts CEL trigger expressions on harness files and routing through fullsend dispatch, but per-repo installations still route all default agents through bash logic in reusable-dispatch.yml. Custom agents still require per-agent workflow files and dispatch bash edits (#1985).
What should happen
Per-repo dispatch is implemented in vertical slices:
- Custom agents first —
harness-dispatch job + fullsend dispatch (ADR 0054 authorization, kill switch, CEL matching) without modifying the existing bash route job.
- Behaviour baseline per default agent — dispatch trigger scenarios on the current bash router (dummy runtime) before porting that agent.
- Port default agents one at a time — move each agent's trigger logic to harness CEL; agent-specific gating and possible ADR/harness extensions decided per agent.
- Cutover — remove bash routing when all agents are ported.
Out of scope: org-mode dispatch.yml.
Implementation plan
Sub-issues track each PR. Principles:
- Vertical slices (code + tests in the same PR)
- Lint co-located with
trigger: field and each agent's expression
- No changes to bash
route until the cutover issue
- Denied dispatch → empty matrix (no structured deny output for now)
roles: config check — decide per agent during port, not in the initial custom-agent slice
Related
What is missing
ADR 0061 adopts CEL
triggerexpressions on harness files and routing throughfullsend dispatch, but per-repo installations still route all default agents through bash logic inreusable-dispatch.yml. Custom agents still require per-agent workflow files and dispatch bash edits (#1985).What should happen
Per-repo dispatch is implemented in vertical slices:
harness-dispatchjob +fullsend dispatch(ADR 0054 authorization, kill switch, CEL matching) without modifying the existing bashroutejob.Out of scope: org-mode
dispatch.yml.Implementation plan
Sub-issues track each PR. Principles:
trigger:field and each agent's expressionrouteuntil the cutover issueroles:config check — decide per agent during port, not in the initial custom-agent sliceRelated