From 8ebb946645efcba2abea6506c500edef7f707ea6 Mon Sep 17 00:00:00 2001 From: Ochenstarik Date: Wed, 19 Aug 2026 16:46:59 +0700 Subject: [PATCH] =?UTF-8?q?chore(agents):=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20Antigravity=20=D0=BF=D0=BE=20=D0=B7=D0=B0=D0=BC?= =?UTF-8?q?=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D1=8F=D0=BC=20=D1=80=D0=B0=D0=B7?= =?UTF-8?q?=D0=B1=D0=BE=D1=80=D0=B0=20PR=20#63?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Два задания по замечаниям разбора: поведенческие тесты веб-консоли вместо проверок строк в статическом HTML и троттлинг обновления дашборда по событиям. В обоих критерий приёмки требует чисел или показанного отказа теста, а не формулировки «работает». Co-Authored-By: Claude Opus 5 --- .../2026-08-19-console-behaviour-tests.md | 67 +++++++++++++++++++ .../2026-08-19-console-events-throttle.md | 59 ++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100644 agents/antigravity/inbox/2026-08-19-console-behaviour-tests.md create mode 100644 agents/antigravity/inbox/2026-08-19-console-events-throttle.md diff --git a/agents/antigravity/inbox/2026-08-19-console-behaviour-tests.md b/agents/antigravity/inbox/2026-08-19-console-behaviour-tests.md new file mode 100644 index 0000000..c7e05e6 --- /dev/null +++ b/agents/antigravity/inbox/2026-08-19-console-behaviour-tests.md @@ -0,0 +1,67 @@ +# Поведенческие тесты веб-консоли + +- **Кому:** `antigravity` +- **Дата:** 2026-08-19 +- **От кого:** главный агент (`claude`), по разбору PR #63 — + `agents/claude/done/2026-08-18-review-pr63-console-links.md` +- **Ветка:** `antigravity/console-behaviour-tests` +- **Файл отчёта:** `../done/2026-08-19-console-behaviour-tests.md` + +## Что нужно сделать + +Покрыть тестами поведение веб-консоли, а не наличие разметки. + +Сейчас `tests/ServerMonitorManager.Control.Tests/WebConsoleTests.cs` состоит +из проверок вида `Assert.Contains("id=\"create-link-btn\"", html)`. Такие +тесты проходят и при полностью нерабочем `app.js`: они доказывают, что в +`index.html` есть элемент с нужным идентификатором, и ничего больше. При этом +в PR #63 977 строк изменений — почти целиком логика на JavaScript. + +Нужны тесты, падающие при поломке поведения. Как минимум: + +1. **Создание Link** — форма отправляет `POST /api/v1/control/links` с + `sourceNodeId`, `targetNodeId`, `protocol`, `port`, `ttl`, `reason` и + заголовком идемпотентности; повторная отправка той же формы использует + **тот же** ключ, а новое открытие формы — новый. +2. **Отклонение неверного ввода до отправки** — совпадающие источник и + назначение, пустой `reason`, порт вне 1–65535: запрос не уходит. +3. **Отключение Link** — `POST /api/v1/control/links/{id}/disable`, + и повторное нажатие на уже отключённом Link не отправляет запрос. +4. **Разбор потока событий** — событие, разорванное на границе чанка NDJSON, + собирается и попадает в журнал целиком; строка, не являющаяся JSON, + не роняет поток. +5. **Ограничение журнала** — после 150 событий в списке остаётся 100, + и остаются последние. +6. **Разбор Problem Details** — ответ `400` с `detail` показывается + оператору текстом, а не молча. + +Способ проверки выбираешь сам и обосновываешь в отчёте: тесты на JS-движке, +проверка через headless-браузер в CI или вынос логики из `app.js` в +тестируемый модуль. Требование одно: тест должен падать, когда поведение +сломано. Если для этого нужна новая зависимость или шаг в CI — предложи в +отчёте, не добавляй молча. + +## Границы + +Только тесты и, если это необходимо для тестируемости, реорганизация +`src/ServerMonitorManager.Control/wwwroot/app.js` без изменения поведения. +Не менять эндпоинты Control, не трогать `deploy/**`, релизные workflow, +Desktop и bootstrap. Троттлинг обновления дашборда — отдельное задание +`2026-08-19-console-events-throttle.md`, здесь его не делать. + +## Как проверить результат + +- каждый новый тест предъявить дважды: зелёным на исправном коде и **красным** + на намеренно сломанном поведении. В отчёт — вывод обоих прогонов. Тест, + который не показан падающим, ничего не доказывает; +- `dotnet test` целиком — зелёный, с выводом; +- прогоны CI на PR — ссылками. + +## Контекст и ограничения + +Соглашение 6 из `agents/claude/notes/2026-08-18-передача-состояния.md`: +зелёный CI не означает работающую машину. Этим заданием закрывается именно +такой разрыв, поэтому «тесты добавлены и проходят» критерием приёмки не +является — нужен показанный отказ. + +Формат отчёта — раздел в описании PR плюс файл в `done/`. diff --git a/agents/antigravity/inbox/2026-08-19-console-events-throttle.md b/agents/antigravity/inbox/2026-08-19-console-events-throttle.md new file mode 100644 index 0000000..1d84247 --- /dev/null +++ b/agents/antigravity/inbox/2026-08-19-console-events-throttle.md @@ -0,0 +1,59 @@ +# Троттлинг обновления дашборда по событиям + +- **Кому:** `antigravity` +- **Дата:** 2026-08-19 +- **От кого:** главный агент (`claude`), по разбору PR #63 — + `agents/claude/done/2026-08-18-review-pr63-console-links.md` +- **Ветка:** `antigravity/console-events-throttle` +- **Файл отчёта:** `../done/2026-08-19-console-events-throttle.md` + +## Что нужно сделать + +Убрать усиление нагрузки на Control при пачке событий. + +В `src/ServerMonitorManager.Control/wwwroot/app.js` обработчик события +делает так: + +```js +const eventType = (ev.type || '').toLowerCase(); +if (eventType.startsWith('link.') || eventType.startsWith('agent.')) { + loadDashboardData(false); +} +``` + +`loadDashboardData` выполняет два запроса — `/api/v1/control/agents` и +`/api/v1/control/links`. Ни debounce, ни throttle в файле нет: `setTimeout` +встречается трижды и ни разу для этой цели. Согласование политик Links в +Control работает непрерывно (`CHANGELOG.md`, Unreleased, #11), поэтому пачка +событий согласования по флоту превращается в удвоенный поток запросов от +**каждой** открытой вкладки консоли. + +Нужно свести пачку событий к одному обновлению. Интервал выбираешь сам и +обосновываешь в отчёте; требование — консоль остаётся отзывчивой на +одиночное событие и не отправляет запрос на каждое событие в пачке. +Одновременные обновления не должны накладываться: пока запрос в полёте, +следующий не начинается, но и не теряется. + +## Границы + +Только `app.js`. Не менять эндпоинты Control, разметку, стили, серверную +часть, `deploy/**` и релизные workflow. Поведенческие тесты консоли — +отдельное задание `2026-08-19-console-behaviour-tests.md`. + +## Как проверить результат + +- предъявить количество запросов на пачке событий до и после правки: + на N событий подряд должно уйти одно обновление, а не N. В отчёт — способ + измерения и числа; +- показать, что одиночное событие по-прежнему обновляет дашборд; +- `dotnet test` — зелёный, с выводом; +- прогоны CI на PR — ссылками. + +«Стало лучше» без чисел результатом проверки не является. + +## Контекст и ограничения + +Дефект найден чтением кода, а не наблюдением на живой машине: подтверждения +с работающего Hub у меня нет, объём эффекта не измерен. Если при измерении +окажется, что усиления нет, — так и напиши в отчёте с числами; это +допустимый результат, а не провал задания.