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

137 lines
11 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.

# Гигиена репозитория и цепочки поставки
## Репозиторий и ветка
- Репозиторий: https://github.com/ochenstarik-ui/server-monitor-manager
- База: `main` @ `b11c277ac7f79a18670932eca4622982d9ff48e0`
- Ветка: `antigravity/repo-hygiene`
- Работать в **отдельном клоне или worktree**. Клон `C:\Users\Ochenstarik\projects\server-monitor-manager` и рабочая копия `C:\Users\Ochenstarik\projects\server-monitor-manager-task3-b3` заняты другими исполнителями; вторая содержит 24 незакоммиченных файла, которые нельзя потерять.
Задание самодостаточно: истории переписки у исполнителя нет, всё нужное — ниже.
## Зачем
Server Monitor Manager устанавливает на серверы бинарники, работающие с правами root, и управляет firewall. При этом:
- все GitHub Actions подключены по плавающим тегам, то есть содержимое шага сборки может измениться без нашего ведома и без изменения кода репозитория;
- у проекта нет `SECURITY.md` — для инструмента безопасности отсутствие канала сообщений об уязвимостях само по себе дефект;
- нет истории изменений, хотя опубликовано пять предрелизов;
- нет автоматического отслеживания уязвимых зависимостей.
Задача закрывает это. Она не касается кода, тестов и логики — только цепочки поставки и оформления репозитория.
## Работы
### 1. Запинить GitHub Actions по commit SHA
Полная инвентаризация на базе `b11c277` — 23 подключения, 5 различных действий, 5 файлов в `.github/workflows/`:
| Действие | Текущий тег | Вхождений |
|---|---|---|
| `actions/checkout` | `@v6` | 8 |
| `actions/setup-dotnet` | `@v5` | 5 |
| `actions/upload-artifact` | `@v6` | 5 |
| `actions/download-artifact` | `@v8` | 2 |
| `softprops/action-gh-release` | `@v2` | 3 |
Файлы: `linux-control-agent.yml`, `linux-platform-matrix.yml`, `linux-release.yml`, `windows-build.yml`, `windows-release.yml`.
Формат замены — полный 40-символьный SHA коммита, тег сохраняется комментарием:
```yaml
uses: actions/checkout@<40-символьный-sha> # v6.x.x
```
**Требование, нарушение которого само по себе проваливает задание: SHA нельзя придумывать.** Каждый SHA обязан быть получен из upstream-репозитория действия и соответствовать указанному тегу. В отчёте привести способ получения — например вывод `gh api repos/actions/checkout/git/ref/tags/v6` или `git ls-remote --tags https://github.com/actions/checkout` — для каждого из пяти действий. Если тег указывает на аннотированный объект, разыменовать до commit SHA.
### 2. Автоматическое отслеживание зависимостей
`.github/dependabot.yml` с двумя экосистемами:
- `github-actions`, каталог `/`, еженедельно — чтобы запиненные SHA не превратились в вечно устаревшие;
- `nuget`, каталог `/`, еженедельно.
Ограничить число одновременно открытых PR разумным значением, чтобы бот не завалил доску.
### 3. Сузить права workflow
`linux-release.yml` и `windows-release.yml` объявляют `permissions: contents: write` на уровне всего workflow. Право записи нужно только шагу публикации релиза.
Перенести `permissions` на уровень job'а публикации; на уровне workflow оставить `contents: read`. Проверить остальные три workflow: если права шире необходимого — сузить, если уже минимальны — оставить и отметить это в отчёте.
### 4. `SECURITY.md` в корне
Содержательный документ, не заглушка:
- канал сообщения об уязвимости — приватный, не публичные issue;
- ожидаемое время первичного ответа;
- какие версии поддерживаются: сейчас alpha, поддерживается последний предрелиз;
- что считается уязвимостью в этом проекте, с опорой на его модель угроз (`docs/security-model.md`): обход разделения ролей, получение root вне typed provisioning, утечка приватных ключей или enrollment-токенов, обход kill switch, подмена артефактов поставки;
- что уязвимостью не считается: известные и задокументированные ограничения alpha — в частности отсутствие подписи release manifest и отсутствие доверенной подписи Windows MSIX, оба пункта открыты в `docs/roadmap.md`.
### 5. `CHANGELOG.md`
Формат Keep a Changelog, версии по существующим тегам. Содержание восстанавливать **из git-истории и текстов релизов**, не сочинять.
Опубликованные предрелизы: `v0.1.0-alpha.1`, `.2`, `.3`, `.4` (все 16.07.2026), `.5` (17.07.2026).
После `v0.1.0-alpha.5` в `main` вошли PR #6#12 — они попадают в раздел `Unreleased`.
### 6. Оформление вклада
- `CONTRIBUTING.md`: как собрать, как прогнать тесты, требование прогонять Control suite **на Linux** (часть тестов помечена `OperatingSystem.IsLinux()` и на Windows молча пропускается), один PR — одна тема;
- `CODEOWNERS`;
- шаблоны issue (баг, задача) и pull request. В шаблоне PR — обязательный раздел с раздельным перечислением: что проверено локально, что в CI, что не проверялось и почему.
### 7. SBOM
Генерация SBOM (`dotnet CycloneDX`) и приложение его к артефактам релиза в `linux-release.yml` и `windows-release.yml`.
### 8. Удалить слитые ветки
На origin остались слитые ветки: `agent/remove-lightweight-server-references`, `codex/ttl-backup-acceptance`. Удалить.
**Не трогать** `hermes/release-alpha.6`, `hermes/sprint1-desktop-security`, `hermes/sprint1-server-security`, `hermes/task2-b-link-reconciliation` — их статус не проверен. `docs/product-horizons-and-integration` — открытый PR #13, не трогать.
## Границы
Задание не касается кода. Категорически не изменять:
- `src/ServerMonitorManager.Control/LinkService.cs`, `LinkPolicyApplier.cs`, `LinkReconciliationBackgroundService.cs`, `ControlStore.cs`, `ControlMaintenance.cs`, `ControlOptions.cs`, `appsettings.json`;
- `src/ServerMonitorManager.Provisioning.Helper/**`, `deploy/ochenstarik-smm-policy-apply`, `deploy/ochenstarik-server-monitor-manager.sh`;
- `src/ServerMonitorManager.Control/CertificateAuthority.cs`, `CertificateLifecycleService.cs`, `src/ServerMonitorManager.Agent/AgentClient.cs`;
- `src/ServerMonitorManager.Desktop/**`, `tests/**`.
Первые две группы заняты заданием B-3R, третья — заданием по жизненному циклу сертификатов, обе ведутся параллельно.
Также не входит в задание:
- `Directory.Build.props`, `Directory.Packages.props`, lock-файлы и `TreatWarningsAsErrors` — отдельная задача; включение сейчас сломает незавершённую ветку;
- изменение логики workflow: шаги, матрицы, условия остаются как есть, меняются только версии действий, права и добавление SBOM;
- merge собственного PR.
## Критерий приёмки
- ни одно подключение действия в пяти workflow не ссылается на плавающий тег; все 23 вхождения используют 40-символьный SHA с комментарием-тегом;
- в отчёте для каждого из пяти действий показано, откуда взят SHA;
- `dependabot.yml` покрывает `github-actions` и `nuget`;
- `contents: write` присутствует только на job'ах публикации релиза;
- `SECURITY.md` содержит канал, сроки, поддерживаемые версии и перечень того, что уязвимостью не считается, со ссылкой на открытые пункты roadmap;
- `CHANGELOG.md` соответствует реальным тегам и реальной истории; выдуманных записей нет;
- шаблон PR требует раздельного перечисления локальных проверок, CI и непроверенного;
- слитые ветки удалены, чужие не тронуты;
- ни один файл из списка границ не изменён — проверяется `git diff --name-only main`;
- CI зелёный на PR;
- PR создан, но не смержен.
## Отчётность
В описании PR раздельно перечислить:
- что запущено локально и с каким результатом;
- что запущено в CI, со ссылками на прогоны;
- что не запускалось и почему.
Физический acceptance (`SMM_ACCEPT_RESTORE=1 SMM_ACCEPT_REBOOT=1 tests/acceptance/three-server-mesh.sh`) выполнить нельзя — не выданы SSH- и topology-параметры. Contract- и mock-тесты за него не выдавать.
Отсутствие проверки — не дефект отчёта. Выдача непроверенного за проверенное — дефект, и он обесценивает весь отчёт.