chore(agents): задания Antigravity по замечаниям разбора PR #63
Два задания по замечаниям разбора: поведенческие тесты веб-консоли вместо проверок строк в статическом HTML и троттлинг обновления дашборда по событиям. В обоих критерий приёмки требует чисел или показанного отказа теста, а не формулировки «работает». Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
be58b48fe7
commit
8ebb946645
2 changed files with 126 additions and 0 deletions
|
|
@ -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/`.
|
||||
|
|
@ -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 у меня нет, объём эффекта не измерен. Если при измерении
|
||||
окажется, что усиления нет, — так и напиши в отчёте с числами; это
|
||||
допустимый результат, а не провал задания.
|
||||
Loading…
Reference in a new issue