7.5 KiB
Автопродление Agent-сертификата и ротация Control CA
- Кому: antigravity
- Дата: 2026-09-05
- От кого: владелец проекта через проверяющего
codex - Ветка:
antigravity/agent-certificate-lifecycle - Файл отчёта:
../done/2026-09-05-agent-certificate-lifecycle.md
Что нужно сделать
Закрыть оставшийся программный критерий certificate lifecycle Горизонта 0:
- Реализовать автоматическое продление сертификата Agent до истечения срока без потери накопленных метрик и без повторного использования отозванной identity.
- Сделать замену сертификата атомарной: сбой после получения нового материала не должен уничтожать рабочий старый сертификат; после успешной замены старый не должен продолжать использоваться.
- Определить и зафиксировать порог продления, retry/backoff, поведение при недоступном Control, при clock skew и при отзыве сертификата.
- Документировать операционную ротацию Control CA с rollback/recovery: подготовка, распространение trust, переключение, проверка Agent/Operator/Desktop, завершение старой CA и действия при частично обновлённом флоте.
- Обновить roadmap/horizon status только для критериев, доказанных тестами и воспроизводимой процедурой. Не объявлять Горизонт 0 закрытым: физический mesh acceptance проверяется отдельным заданием.
Порядок выполнения
Это задание начинается после закрытия уже находящихся в твоём inbox задач:
2026-08-19-console-behaviour-tests.md;2026-08-19-console-events-throttle.md;2026-08-20-console-node-metrics.md;2026-08-20-reconciliation-poll-interval.md.
По каждой из них нужен отдельный отчёт; объединять их изменения с certificate lifecycle в один PR запрещено.
Обязательное обновление локального репозитория перед началом
Не начинать certificate lifecycle из текущей рабочей ветки или поверх чужих незакоммиченных изменений. Сначала завершить и сдать предыдущую задачу, убедиться, что рабочее дерево чистое, затем выполнить:
git -c core.sshCommand="ssh -i C:/Users/trush/.ssh/forgejo-agi2 -o IdentitiesOnly=yes -p 2222" fetch gitea --prune
git switch main
git -c core.sshCommand="ssh -i C:/Users/trush/.ssh/forgejo-agi2 -o IdentitiesOnly=yes -p 2222" pull --ff-only gitea main
git switch -c antigravity/agent-certificate-lifecycle
git status --short --branch
Использовать только отдельную Forgejo identity Antigravity (forgejo-agi2) и
IdentitiesOnly=yes; не использовать repo-local ключ codex-1, принадлежащий
проверяющему. Перед изменениями предъявить успешный ls-remote gitea HEAD с тем
же core.sshCommand и сравнить полученный SHA с git rev-parse HEAD после
создания ветки.
Если 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 testControl-набора — все тесты зелёные; - тесты: продление при остатке менее порога; отсутствие продления выше порога;
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 и не смешивать с соседними
исправлениями.