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

11 KiB
Raw Permalink Blame History

Гигиена репозитория и цепочки поставки

Репозиторий и ветка

  • Репозиторий: 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 коммита, тег сохраняется комментарием:

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-тесты за него не выдавать.

Отсутствие проверки — не дефект отчёта. Выдача непроверенного за проверенное — дефект, и он обесценивает весь отчёт.