Skip to content

fix: stop Symphony retries after HUMAN_GATE #100

Description

@dapi

Контекст

В 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.

  1. Обновить исходную SPEC.md — это source contract для generated/reference Elixir implementation.
  2. Обновить Elixir orchestrator/runner по spec.
  3. Читать persisted run ledger после worker completion и распознавать run_status: HUMAN_GATE.
  4. Переиспользовать существующий blocked state: не занимать agent slot, хранить blocker/workspace context.
  5. Сохранить текущую семантику normal continuation, failure retry, stall retry, terminal state и unroutable issue.
  6. Добавить явный resume contract: после решения maintainer-а и повторной маршрутизации issue (например, восстановлением required dispatch label) разрешается новый dispatch.
  7. Добавить тесты и обновить logging/implementation docs.

Acceptance criteria

  • SPEC.md определяет HUMAN_GATE как отдельный worker outcome и resume condition.
  • HUMAN_GATE не создаёт continuation retry.
  • Issue появляется в blocked snapshot/dashboard с blocker и workspace context.
  • Blocked issue не занимает running-agent slot.
  • Снятие required dispatch label освобождает claim; повторная маршрутизация после ответа разрешает новый dispatch.
  • Normal active run сохраняет continuation до agent.max_turns.
  • Failure и stall retries сохраняют существующий backoff.
  • После рестарта preserved human-gated workspace не запускается немедленно без resume signal.
  • В логах различаются human-gate handoff, failure retry и normal continuation.
  • Пройдены mix specs.check, целевые тесты и полный make all.

Ограничения

  • Не парсить произвольный natural-language output как orchestration signal.
  • Не добавлять generic tracker comment/approval API в эту задачу.
  • Не закрывать issue автоматически и не выдавать Git capabilities.
  • Изменять spec и generated/reference implementation вместе.

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationenhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions