diff --git a/memory/2026-06-03.md b/memory/2026-06-03.md index 3ad7cc9..8e3703a 100644 --- a/memory/2026-06-03.md +++ b/memory/2026-06-03.md @@ -157,3 +157,35 @@ approved=a519a341-dada-4a91-8910-7604f82b79c5 rejected=ba958f3c-5db5-461d- - Комментный механизм (:approved:/:rejected:/answer-by-comment) — ВЫПИЛИВАЕТСЯ полностью. ТЗ: tasks/orchestrator/DEV_TASK_STATUS_ONLY_VERDICT.md Ключевая правка vs прошлого PR: handle_status_start теперь должен ПЕРЕЗАПУСКАТЬ агента при возврате In Progress из Needs Input (не просто idempotent-skip), отличая от защиты-дублей через running-job/prev-status. + +--- + +## PR #12 — статус-онли модель + баг 3 закрыт, боевой прогон удачен (03.06 ~19:25) + +**Merge main = `2d392b6`.** Ветка `fix/status-only-verdict` (из main с PR #11). Задеплоен (rebuild+recreate). + +### Что выпилено/изменено (src/webhooks/plane.py): +- **handle_comment → чистый логгер.** Весь комментный механизм управления убран: ветки `:approved:` (~427), `:rejected:` (~420), answer-to-questions `if current_stage=="analysis"` (~433-490). Ни один коммент не меняет статус и не запускает агентов. Router routes comment.created → только лог. Корень бага 3 (эхо-самоудар) устранён. +- **handle_status_start: перезапуск агента при In Progress из Needs Input.** Развилка решена через running-job (а НЕ prev-status — его нет: tasks-таблица без status-колонки, payload несёт только новый статус). Логика: нет task → start_pipeline; task есть + НЕТ active job → агент простаивает = «Слава ответил на вопросы» → relaunch агента текущей стадии (STAGE_AUTHORS[stage]); task есть + active job → busy/дубль → skip. Двухслойный дедуп: insert_event_dedup (идентичные тела) + новый db-хелпер `has_active_job_for_task(task_id)` (`SELECT 1 FROM jobs WHERE task_id=? AND status IN ('queued','running')`) — для РАЗНЫХ webhook при живой джобе. +- **handle_verdict(approved): убран `set_issue_in_progress`** — он откатывал статус перед advance (мелькание In Progress). Подтверждено: `_try_advance_stage → advance_stage → notify_stage_change → update_issue_state` (plane_sync.py:255) сам PATCH-ит статус след. стадии. Безопасно. +- **handle_verdict(rejected): причина из последнего коммента.** Новый `_latest_comment_reason(issue_id, repo, project_id)`: GET .../issues//comments/, новейший по created_at, стрип HTML, trim 300. Fallback «Rejected via status, no reason comment». Передаётся в _rollback_stage. + +### Тесты (мой прогон сам): **204 passed, 9 failed** (те же 9 baseline pre-existing signature/401, regression 0, +12 новых). +Новые/переписанные: test_status_only_verdict.py (test_inreview_comment_does_not_revert = главный для бага3, test_any_comment_no_pipeline_action, test_approved_status_advances_without_inprogress_reset, test_rejected_status_pulls_reason_from_comment); test_status_trigger.py (test_repeat_in_progress_while_job_active_does_not_relaunch, test_inprogress_from_needs_input_relaunches_analyst); test_verdict_status.py (approved/rejected comment → noop); test_webhooks.py (approved/rejected переписаны на статус-триггеры). +Коммиты: `fix(webhook): remove comment-based approve, keep status-only verdict`, `fix(webhook): drop redundant in_progress reset on Approved`, `feat(webhook): pull reject reason from latest comment`. + +### ✅ БОЕВОЙ ПРОГОН — баг 3 побеждён (главное): +Почистил прошлый task 26, вернул #6 в Backlog → перевёл в In Progress → новый прогон **task 27 = ET-011** (guard снова ушёл от занятого ET-006). analyst run 61: 6105 out, $0.40. +- ✅ Лог: `comment.created ... logged only, no pipeline action (status-only verdict)` — коммент analyst НЕ триггерит ничего. +- ✅ Лог: `issue updated to state 38fb1f64... no pipeline action` — перевод в In Review больше НЕ вызывает откат. +- ✅ **#6 = In Review ДЕРЖИТСЯ** (раньше за 0.1с был откат в In Progress). Баг 3 закрыт в бою. + +### Артефакты analyst ET-011 (ветка feature/ET-011-untitled, Gitea admin/enduro-trails): +docs/work-items/ET-011/: 00-business-request.md, 01-brd.md, 02-trz.md, 03-acceptance-criteria.md, 04-test-plan.yaml, 04b-ui-test-cases.md. +Внешний URL Gitea = `https://git.mva154.duckdns.org/admin/enduro-trails/src/branch/feature/ET-011-untitled/docs/work-items/ET-011/<файл>`. + +### Открытый хвост (следующая сессия): +- **#6 сейчас в In Review** в Plane, ждёт ручной проверки Славы: перевести в **Approved** → должна уехать в Architecture БЕЗ мелькания In Progress. Или Reject: коммент причины → Rejected → analyst перезапуск с причиной. Слава решит — сам в UI или мне симулировать. +- **Косметика (предложен 2-й тикет Dev, Слава ещё не подтвердил):** (1) коммент analyst всё ещё пишет «Жду :approved:» — устаревшая формулировка, поправить на «переведите в Approved»; (2) добавить ссылки на артефакты прямо в коммент Plane (чтобы не лезть в Gitea руками). +- Ветка-slug всё ещё `untitled` (в тестовом webhook нет name; реальный Plane шлёт name — не критично). +- Tokenator: квота исчерпана (−116k), ждать сброса (~1 число) или саппорт. OpenClaw не блокирует (фолбэк), Claude CLI агентов не касается.