Задания, отчёты и патчи, лежавшие в 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>
6.6 KiB
Antigravity: жизненный цикл клиентских сертификатов
Сначала — слить открытые PR
Три PR зелёные и ждут merge. Слить до начала новой работы, иначе всё придётся ребейзить дважды: main уехал на d645812 (B-3R), а PR #14 и #15 сделаны от b11c277.
Порядок:
- #13 —
docs/product-horizons-and-integration, только документация, конфликтов нет; - #14 —
antigravity/repo-hygiene; - #15 —
antigravity/reproducible-builds.
#14 и #15 трогают одни и те же два workflow, но в разных местах: #14 меняет строки uses:, #15 — строки run: с восстановлением. Автослияние должно пройти; если нет — ребейз #15 поверх #14, а не наоборот.
После merge проверить, что main зелёный: обе ветки сделаны от старой базы, а B-3R с тех пор добавил файлы.
Приёмка PR #15 — принято
Все три дефекта закрыты правильно:
- разделение
dotnet format whitespaceиdotnet format styleвместо общего вызова, аналайзеры сохранены, подавлений в.editorconfigнет — это был предпочтительный из трёх вариантов; - RID в lock-файлах;
-p:RestoreLockedMode=trueна всех семи шагахpublish, включая release-workflow.
Новая задача
Репозиторий и ветка
- База:
mainпосле merge трёх PR выше - Ветка:
antigravity/cert-lifecycle - Рабочая папка:
C:\Users\Ochenstarik\projects\smm-antigravity
Полная постановка — в smm-hermes-task-cert-lifecycle-2026-08-06.md, она остаётся в силе целиком. Ниже только то, что изменилось с 6 августа.
Зачем это сейчас
Пункт Горизонта 0, который не начинал никто. Hermes занят блокирующим дефектом регистрации Node, а без сертификатов гейт не закрывается всё равно.
CertificateAuthority.cs выдаёт клиентские сертификаты сроком на год, автопродления нет ни у Agent, ни у Operator. Через год после развёртывания весь парк одновременно перестаёт проходить mTLS, и восстановление потребует ручной перерегистрации каждого Node одноразовым кодом. Процедуры ротации Control CA в проекте нет вообще.
Объём
По документу от 6 августа: срок в конфигурации с валидацией, автопродление Agent за треть срока через действующий mTLS-канал, продление Operator-сертификата Desktop, событие certificate.expiring, документ docs/certificate-rotation.md, семь тестов.
Разграничение с Hermes — изменилось
Hermes ведёт ветку hermes/node-enrollment-fix и трогает:
src/ServerMonitorManager.Agent/AgentOptions.cs
src/ServerMonitorManager.Agent/Program.cs
src/ServerMonitorManager.Agent/ServerMonitorManager.Agent.csproj
src/ServerMonitorManager.Control/ServerMonitorManager.Control.csproj
deploy/ochenstarik-server-monitor-manager.sh
tests/acceptance/three-server-mesh.sh
tests/bootstrap/test-bootstrap-contract.sh
.github/workflows/* (расширение smoke-теста)
Не трогать ничего из этого списка. В частности: правки в Agent/Program.cs для продления сертификата вносить нельзя — если понадобится, описать нужное изменение в REPORT.md, Hermes внесёт у себя.
Ваша область: CertificateAuthority.cs, CertificateLifecycleService.cs, AgentClient.cs, ControlOptions.cs, Control/Program.cs, appsettings.json, Desktop, новый docs/certificate-rotation.md, тесты сертификатов.
Пересечение по .csproj возможно: Hermes добавляет EnableConfigurationBindingGenerator в Agent и Control. Вам .csproj менять не нужно — если понадобится, согласовать.
Дополнительное требование, которого не было 6 августа
Сегодня выяснилось, что AgentOptions теряет конфигурацию при PublishTrimmed=true, потому что в нём нет [DynamicDependency], который есть в ControlOptions. Дефект прожил недели и был найден только запуском на живом сервере.
Поэтому: всё, что вы добавите в конфигурацию, обязано проверяться на опубликованном trimmed-артефакте, а не только в тестах. Новая настройка срока сертификата — не исключение. В TEST_EVIDENCE.md показать, что значение из control.env действительно доходит до кода в собранном релизном бинарнике, а не подменяется умолчанием.
Простейшая проверка: задать заведомо невалидное значение и убедиться, что сервис отказывается стартовать с внятной ошибкой валидации. Если стартует — конфигурация не читается.
Критерий приёмки
Как в документе от 6 августа, плюс:
- новая настройка срока подтверждена на опубликованном
linux-x64 PublishTrimmedартефакте; git diff --name-only mainне содержит ни одного файла из списка Hermes;- CI зелёный, PR не смержен.
Отчёт
Раздельно: локально, в CI со ссылками, не проверялось и почему. Описание PR обновлять после завершения CI.