auto-sync: 2026-06-03 22:30:01

This commit is contained in:
Stream
2026-06-03 22:30:01 +03:00
parent a61a23d6ac
commit 2932172c2e

View File

@@ -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/<id>/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 агентов не касается.