server-monitor-manager/agents/antigravity/inbox/from-smm-deliverables/Старые задачи/smm-antigravity-task-console-embedded-assets-2026-08-18.md
Ochenstarik 23eb3f5233 chore(agents): разбор рабочих папок с диска на 2026-08-18
Задания, отчёты и патчи, лежавшие в C:\Users\Ochenstarik\projects и в
домашней папке, перенесены в agents/. Разложено по агентам там, где имя
файла позволяло определить автора; остальное — в _salvage-2026-08-18/
и разбирается вручную.

Патчи в notes/salvage-2026-08-18/ — незакоммиченная работа из брошенных
рабочих копий: она существовала только на диске.

Тяжёлое (релизные архивы, инсталляторы, наборы данных) в репозиторий не
попало: оно лежит рядом, в Agent_projects/_archive и Agent_projects/_data.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 14:19:54 +07:00

47 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Antigravity: покрыть тестом отдачу консоли из ресурсов сборки
## Репозиторий
- https://github.com/ochenstarik-ui/server-monitor-manager
- Ветка: `antigravity/web-console`, открытый PR **#59**
- Работа делается **в этом же PR**, новый не открывать
- `main` защищён: PR обязателен, обязательны статусы `build-and-test` и `build`
## Задача
Одна проверка. Ничего в поведении консоли менять не нужно.
`GetWebConsoleAsset` в `src/ServerMonitorManager.Control/Program.cs` берёт файл из двух источников по очереди:
1. с диска, по пути `IWebHostEnvironment.WebRootPath`;
2. если файла там нет — из ресурсов сборки, через `GetManifestResourceNames()` и поиск по `EndsWith(fileName)`.
Тесты поднимают хост в процессе, где `WebRootPath` существует и файлы лежат на диске. Значит проверяется **первая** ветка.
Control публикуется с `PublishSingleFile=true`, каталога `wwwroot` рядом с исполняемым файлом на сервере нет. Значит на настоящей машине работает **вторая** ветка — та, которую не проверяет ничто.
## Что сделать
Добавить в `tests/ServerMonitorManager.Control.Tests/WebConsoleTests.cs` тест, который поднимает хост с несуществующим или пустым `WebRootPath` и убеждается, что при обращении с сертификатом роли `Operator`:
- `/`, `/index.html`, `/style.css` и `/app.js` отвечают кодом 200;
- `Content-Type` соответствует типу файла;
- тело ответа непустое и содержит опознаваемый фрагмент: для HTML — предупреждение о сверке отпечатка, для JS — обращение к `/api/v1/control/agents`.
Побочная польза, ради которой это и стоит делать: тест зафиксирует соглашение об именах ресурсов. Поиск идёт через `EndsWith(fileName)`, поэтому переименование каталога `wwwroot` или смена схемы имён сломает отдачу консоли молча, без ошибки сборки.
## Границы
**Не трогать:** `deploy/**`, `.github/workflows/linux-*.yml`, `.github/workflows/release-verification.yml`, `tests/release-verification/**`, `tests/bootstrap/**`.
Ваша область: `tests/ServerMonitorManager.Control.Tests/**`. Если для подмены `WebRootPath` потребуется правка в `src/ServerMonitorManager.Control/**` — допустимо, но опишите зачем.
## Критерий приёмки
- тест поднимает хост без каталога `wwwroot` на диске и получает все четыре ресурса;
- существующие проверки ролей продолжают проходить;
- CI зелёный, PR не смержен до зелёного.
## Отчёт
В описании PR. Отдельным файлом отчёт не является.