Контекст
В experimental Symphony Elixir runner агент может завершить run с persisted run_status: HUMAN_GATE, но orchestrator проверяет только tracker state/routability. Если issue остаётся active и сохраняет dispatch label, Symphony запускает continuation retry каждые 1 секунду.
Это приводит к бесконечному циклу, занимает все agent slots и создаёт новые Codex sessions вместо ожидания ответа/снятия блокера.
Цель
Изменить контракт Symphony так, чтобы HUMAN_GATE был отдельным worker outcome и переводил issue в существующий durable blocked handoff, а не в continuation retry.
Scope
Работа выполняется в отдельном worktree репозитория dapi/symphony.
- Обновить исходную
SPEC.md — это source contract для generated/reference Elixir implementation.
- Обновить Elixir orchestrator/runner по spec.
- Читать persisted run ledger после worker completion и распознавать
run_status: HUMAN_GATE.
- Переиспользовать существующий
blocked state: не занимать agent slot, хранить blocker/workspace context.
- Сохранить текущую семантику normal continuation, failure retry, stall retry, terminal state и unroutable issue.
- Добавить явный resume contract: после решения maintainer-а и повторной маршрутизации issue (например, восстановлением required dispatch label) разрешается новый dispatch.
- Добавить тесты и обновить logging/implementation docs.
Acceptance criteria
Ограничения
- Не парсить произвольный natural-language output как orchestration signal.
- Не добавлять generic tracker comment/approval API в эту задачу.
- Не закрывать issue автоматически и не выдавать Git capabilities.
- Изменять spec и generated/reference implementation вместе.
Контекст
В experimental Symphony Elixir runner агент может завершить run с persisted
run_status: HUMAN_GATE, но orchestrator проверяет только tracker state/routability. Если issue остаётся active и сохраняет dispatch label, Symphony запускает continuation retry каждые 1 секунду.Это приводит к бесконечному циклу, занимает все agent slots и создаёт новые Codex sessions вместо ожидания ответа/снятия блокера.
Цель
Изменить контракт Symphony так, чтобы
HUMAN_GATEбыл отдельным worker outcome и переводил issue в существующий durable blocked handoff, а не в continuation retry.Scope
Работа выполняется в отдельном worktree репозитория
dapi/symphony.SPEC.md— это source contract для generated/reference Elixir implementation.run_status: HUMAN_GATE.blockedstate: не занимать agent slot, хранить blocker/workspace context.Acceptance criteria
SPEC.mdопределяетHUMAN_GATEкак отдельный worker outcome и resume condition.HUMAN_GATEне создаёт continuation retry.agent.max_turns.mix specs.check, целевые тесты и полныйmake all.Ограничения