server-monitor-manager/agents/antigravity/inbox/from-smm-deliverables/Старые задачи/smm-antigravity-task-pr15-continue-2026-08-07.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

67 lines
5.7 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.

# PR #15: доделать, не отключая аналайзеры
## Состояние
Рабочая папка `C:\Users\Ochenstarik\projects\smm-antigravity`, ветка `antigravity/reproducible-builds`, PR #15, последний запушенный коммит `5ca4832` (CI красный). В рабочей копии есть незакоммиченные правки: `Directory.Build.props` и четыре `packages.lock.json`.
Разбор трёх дефектов — в задании `smm-antigravity-task-locked-restore-fix-2026-08-07.md`, оно остаётся в силе.
## Дефект 2 — закрыт правильно
`packages.lock.json` теперь содержат все три RID:
```json
"net10.0": {},
"net10.0/linux-arm64": {},
"net10.0/linux-x64": {},
"net10.0/win-x64": {}
```
Это предпочтительный вариант из задания. Сохранить.
## Дефект 1 — решается запрещённым способом
Незакоммиченная правка `Directory.Build.props`:
```diff
- <EnableNETAnalyzers>true</EnableNETAnalyzers>
- <AnalysisLevel>latest-recommended</AnalysisLevel>
```
В задании этот вариант назван недопустимым дословно: «Отключить `EnableNETAnalyzers` или понизить `AnalysisLevel`, чтобы CI позеленел: это отменяет смысл изменения». Аналайзеры — половина ценности `Directory.Build.props`; удалив их, PR перестаёт отличаться от простого переноса версий.
Вернуть обе строки и решить дефект 1 одним из разрешённых способов:
**Предпочтительно.** Разделить проверки в CI: `dotnet format whitespace --verify-no-changes` и `dotnet format style --verify-no-changes` вместо общего `dotnet format`. Тогда гейт проверяет форматирование, а диагностики аналайзеров остаются warning'ами в сборке и не блокируют.
**Допустимо.** Оставить общий `dotnet format`, но подавить конкретные правила в `.editorconfig`, перечислив каждое с причиной в отчёте. Сейчас мешают `CA1848` (LoggerMessage-делегаты, десять вхождений в `ControlMaintenance.cs` и `LinkReconciliationBackgroundService.cs`) и `CA1865` (`TimezoneProvisioningExecutor.cs:76`). Подавлять семейство целиком нельзя — только поимённо.
## Дефект 3 — не сделан
`--locked-mode` стоит только в двух явных шагах `dotnet restore`. Все `dotnet publish` восстанавливают неявно и без него:
- `linux-control-agent.yml` — строки 58, 61, 64, 67, 71, 74, 77;
- `linux-platform-matrix.yml` — строки 49, 52, 55;
- `linux-release.yml` — строки 82, 85, 88.
Это ровно те шаги, которые собирают артефакты, уходящие пользователям. Воспроизводимость, не покрывающая путь выпуска, не решает исходную задачу.
Добавить `--locked-mode` (либо `-p:RestoreLockedMode=true`) во все перечисленные шаги. Дефект 2 закрыт, поэтому RID-специфичная публикация больше не должна падать по NU1004 — но это надо подтвердить прогоном, а не рассуждением.
## Критерий приёмки
- `EnableNETAnalyzers` и `AnalysisLevel=latest-recommended` присутствуют в `Directory.Build.props`;
- `build` и `build-and-test` зелёные;
- `--locked-mode` действует во всех шагах восстановления и публикации всех пяти workflow;
- продемонстрирована работа гарантии: правка одного lock-файла во временном коммите даёт красный прогон **на RID-специфичной публикации**, затем коммит откатывается — со ссылкой на красный прогон;
- версии пакетов не изменились относительно `main`;
- если правила подавлены — каждое перечислено поимённо с причиной;
- `TreatWarningsAsErrors` по-прежнему не включён;
- границы прошлого задания соблюдены: `git diff --name-only main` не содержит `LinkService.cs`, `LinkPolicyApplier.cs`, `LinkReconciliationBackgroundService.cs`, `ControlStore.cs`, `ControlMaintenance.cs`, `ControlOptions.cs`, `appsettings.json`, `src/ServerMonitorManager.Provisioning.Helper/**`, `deploy/**`, `CertificateAuthority.cs`, `CertificateLifecycleService.cs`, `AgentClient.cs`, содержимого файлов в `tests/**` кроме `.csproj`;
- PR не смержен.
## Отчёт
Описание PR обновляется **после** завершения CI. Ссылки на конкретные завершённые прогоны с их статусом. Если прогон красный — сказать прямо и держать PR черновиком.
Отдельно объяснить выбор по дефекту 1: почему выбран именно этот из двух разрешённых вариантов.