Задания, отчёты и патчи, лежавшие в 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>
86 lines
6.6 KiB
Markdown
86 lines
6.6 KiB
Markdown
# Antigravity: жизненный цикл клиентских сертификатов
|
||
|
||
## Сначала — слить открытые PR
|
||
|
||
Три PR зелёные и ждут merge. Слить **до** начала новой работы, иначе всё придётся ребейзить дважды: `main` уехал на `d645812` (B-3R), а PR #14 и #15 сделаны от `b11c277`.
|
||
|
||
Порядок:
|
||
|
||
1. **#13** — `docs/product-horizons-and-integration`, только документация, конфликтов нет;
|
||
2. **#14** — `antigravity/repo-hygiene`;
|
||
3. **#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.
|