Skip to content

bug: unconfirmed_targets застревает навсегда — нет operator-пути снять/разрешить (follow-up #1253) #1261

Description

@axisrow

Выявлено Codex при ревью #1253 (#1239 идемпотентная публикация). PR #1253 вводит metadata.unconfirmed_targets: если отправка в Telegram таймаутит ПОСЛЕ ухода запроса, цель помечается «unconfirmed» и НЕ переотправляется при ретрае (защита от дубля) — вместо этого сюрфейсится как «Unconfirmed delivery — manual check required».

Проблема (follow-up, вне scope #1253)

Нет operator-facing пути снять/разрешить unconfirmed-статус. Цель застревает в unconfirmed_targets навсегда: если пост НЕ дошёл — он никогда не будет опубликован (нет resend), если дошёл — статус не снять. Run остаётся status="completed" и фактически неопубликованным без пути вперёд.

Что сделать

Добавить operator-путь (CLI + Web + agent-tool, по правилу parity), позволяющий по run.id + цели:

  • пометить unconfirmed-цель как delivered (пост подтверждён вручную в канале) → перевести в published_targets;
  • ЛИБО пометить как failed/eligible-for-resend (пост НЕ дошёл) → убрать из unconfirmed, разрешить повторную публикацию.

Файлы

  • src/services/publish_service.py (unconfirmed_targets lifecycle)
  • CLI src/cli/commands/pipeline.py, Web src/web/.../moderation.py, agent-tool src/agent/tools/pipeline_runs.py (parity)

Оценка

  • LOC: ~150–350 (parity 3-4 слоя + tests)
  • Размер: M–L
  • Время (агент): ~50–90 мин

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority/lowНизкий приоритет

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions