Раньше постмортем-агенту передавался только session_id, без содержимого
сессии — анализировать было нечего. Теперь Runner умеет читать сообщения
сессии (Messages → renderTranscript) через SessionMessages, а postMortem
подставляет реальные шаги агента (сообщения/tool-вызовы) в промпт.
Пустая/недоступная сессия помечается явно. Сбои чтения не фатальны.
После завершения задачи со статусом failed/timeout воркер запускает
постмортем-анализ (агент postmortem): разбирает сессии dev/reviewer,
оценивает причины сбоя и шлёт владельцу уведомление с анализом. Статус
задачи не меняет; сбои анализа не влияют на исход.
Исправляет баг: воркер захватывал задачу на выполнение по статусу ready
ещё до «создавай» (consent был заглушкой). Теперь:
- новый статус approved: «создавай» → ready→approved;
- воркер (pollAndDispatch + runTask) берёт ТОЛЬКО approved,
ready = черновик готов, ждёт одобрения;
- правка/текст в approved запрещены (финальное одобрение);
- e2e-тест TestE2EWorkerDoesNotTakeUnconfirmed: в ready воркер задачу
не трогает, запускает только после «создавай» → success;
- обновлены все затронутые тесты (models/core/worker) и retry-фикстуры.
LiveRegistry собирает live-шаги из stdout процесса opencode по taskID
(через контекст, без изменения интерфейса Runner). /status N для running-задачи
прикладывает живое состояние: активный субагент, давность последнего шага,
последние text-шаги агента. Ничего не перезапускается и не убивается —
только наблюдение по запросу.
- Task.Repos []string (XML-колонка repos, обратная совместимость с repo)
- config: блок git {base_url, token}
- аналитик: ответ repos[], шаблон показывает список
- core: propose без repos → возврат в сбор (E1)
- worker вариант A: один dev из общего cwd, prepareRepos клонирует
недостающие репо (git clone), validateRepoName (E3), ErrRepoNotGit (E4)
- ошибки E1-E4 в worker/errors.go