server-monitor-manager/agents/antigravity/inbox/2026-09-05-agent-certificate-lifecycle.md
Ochenstarik aae4d2dcb3
Some checks are pending
Linux control and agent / build-and-test (push) Waiting to run
Windows build / build (push) Waiting to run
chore(agents): plan project completion and review
2026-09-05 16:18:06 +07:00

98 lines
6.8 KiB
Markdown
Raw 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.

# Автопродление Agent-сертификата и ротация Control CA
- **Кому:** antigravity
- **Дата:** 2026-09-05
- **От кого:** владелец проекта через проверяющего `codex`
- **Ветка:** `antigravity/agent-certificate-lifecycle`
- **Файл отчёта:** `../done/2026-09-05-agent-certificate-lifecycle.md`
## Что нужно сделать
Закрыть оставшийся программный критерий certificate lifecycle Горизонта 0:
1. Реализовать автоматическое продление сертификата Agent до истечения срока без
потери накопленных метрик и без повторного использования отозванной identity.
2. Сделать замену сертификата атомарной: сбой после получения нового материала не
должен уничтожать рабочий старый сертификат; после успешной замены старый не
должен продолжать использоваться.
3. Определить и зафиксировать порог продления, retry/backoff, поведение при
недоступном Control, при clock skew и при отзыве сертификата.
4. Документировать операционную ротацию Control CA с rollback/recovery: подготовка,
распространение trust, переключение, проверка Agent/Operator/Desktop,
завершение старой CA и действия при частично обновлённом флоте.
5. Обновить roadmap/horizon status только для критериев, доказанных тестами и
воспроизводимой процедурой. Не объявлять Горизонт 0 закрытым: физический mesh
acceptance проверяется отдельным заданием.
## Порядок выполнения
Это задание начинается после закрытия уже находящихся в твоём inbox задач:
1. `2026-08-19-console-behaviour-tests.md`;
2. `2026-08-19-console-events-throttle.md`;
3. `2026-08-20-console-node-metrics.md`;
4. `2026-08-20-reconciliation-poll-interval.md`.
По каждой из них нужен отдельный отчёт; объединять их изменения с certificate
lifecycle в один PR запрещено.
### Обязательное обновление локального репозитория перед началом
Не начинать certificate lifecycle из текущей рабочей ветки или поверх чужих
незакоммиченных изменений. Сначала завершить и сдать предыдущую задачу, убедиться,
что рабочее дерево чистое, затем выполнить:
```powershell
git fetch --all --prune
git switch main
git pull --ff-only gitea main
git switch -c antigravity/agent-certificate-lifecycle
git status --short --branch
```
Если `git pull --ff-only` не проходит, локальный `main` содержит собственные
коммиты либо рабочее дерево не чистое — не использовать reset/rebase и не терять
изменения. Остановиться, записать фактический вывод в отчёт и передать ситуацию
проверяющему. В отчёте обязательно привести commit SHA актуального `gitea/main`,
от которого создана рабочая ветка.
## Границы
Допустимы Agent, Control, Core, относящиеся к lifecycle тесты и документация
ротации CA. Не менять web console, Links, provisioning actions, `deploy/**`,
release workflows, MSIX version и release-status переводы. Доверенная подпись
MSIX и физическая three-server приёмка — отдельные работы.
Не ослаблять mTLS, revocation, CSR ownership, срок одноразовых token или проверки
привязки Node identity. Не добавлять silent fallback на недоверенный сертификат.
## Как проверить результат
Обязательные доказательства в отчёте:
- `dotnet build ServerMonitorManager.slnx --configuration Release` — фактический
вывод, ошибок 0;
- полный `dotnet test` Control-набора — все тесты зелёные;
- тесты: продление при остатке менее порога; отсутствие продления выше порога;
Control недоступен — старый валидный сертификат продолжает работать и метрики
сохраняются; revoked certificate не продлевается; mismatch `node_id` отвергается;
прерванная атомарная замена сохраняет рабочий сертификат; повтор запроса
идемпотентен либо явно безопасен;
- каждый новый тест показать зелёным на исправном коде и красным на намеренно
сломанном соответствующем поведении;
- отдельная репетиция процедуры CA rotation на disposable Control + минимум одном
Agent: команды, фактические fingerprints/chain results до и после, reconnect и
rollback. Если полноценная dual-trust схема ещё не реализуема, не отмечать
критерий выполненным, а вернуть точный блокер и минимальное следующее задание;
- ссылки на зелёные CI-прогоны PR.
## Контекст и ограничения
Источник требований: `docs/product-horizons.md`, Горизонт 0, и
`docs/roadmap.md`, этап 14. В репозитории уже есть
`CertificateLifecycleTests`; существование тестов не доказывает наличие полного
runtime lifecycle — необходимо проследить фактический Agent path от определения
срока до атомарного переключения сохранённого PFX.
Приёмку выполняет `codex`. Не пушить в `main` и не смешивать с соседними
исправлениями.