Задания, отчёты и патчи, лежавшие в 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>
9.4 KiB
Antigravity: завершить подписанную поставку, Queue B
Исходное состояние
- Репозиторий:
ochenstarik-ui/server-monitor-manager. - Ветка:
antigravity/signed-delivery-queue-b. - Актуальная база на момент задания:
main/v0.1.0-alpha.9@2ca059f. - Коммит
ef137bcуже добавляет bootstrap-проверку manifest и совместимости компонентов. - Незакоммичены
MainPage.xaml,MainPage.xaml.csиtests/bootstrap/test-manifest-verification.sh. - PR и CI для Queue B отсутствуют.
- PR #34 с repo hygiene открыт отдельно. Не включать его изменения вручную. Перед публикацией ветки снова получить актуальный
mainи перебазироваться, если #34 или другой PR был смержен.
Цель
Довести проверку подписанных обновлений Desktop и bootstrap до fail-closed реализации, покрытой изолированными тестами, и открыть готовый к независимой приёмке PR. Релиз и тег не создавать — это отдельный gate Hermes.
Обязательная работа
1. Сохранить и довести bootstrap
verify_archiveполучает ожидаемый SHA-256 из проверенного manifest, а не из соседнего.sha256.verify-manifest MANIFEST SIGNATUREпроверяет подпись production keyless identity.- Issuer и identity-regexp зафиксированы в коде; рядом с identity должна быть ссылка на
docs/release-policy.md. - Отсутствующий
cosign, manifest или signature, чужая identity, неверная подпись и неверный hash завершаются отказом. SMM_ALLOW_UNSIGNED=1остаётся только явным аварийным developer bypass с громким предупреждением; default — fail closed.update-controlиupdate-agentблокируют несовместимую пару Control ↔ Agent ↔ helper по manifest v2.- Проверить CLI-контракт: тесты должны передавать ровно те аргументы, которые принимает команда. Текущий bootstrap-тест ошибочно передаёт
verify-manifestтри аргумента при контракте из двух.
2. Переделать Desktop updater для тестируемости
- Не использовать закрыто созданный внутри класса
HttpClientи реальный GitHub в unit tests. Внедрить HTTP transport, signature verifier, файловое хранилище и launcher либо эквивалентные тестовые границы. - Поддержать alpha/pre-release update channel явно.
releases/latestнельзя считать источником текущего alpha-релиза без отдельного контракта и теста. - Manifest, signature и MSIX должны принадлежать одному release/tag; нельзя смешивать URL или ассеты разных тегов.
- Проверить manifest keyless-подпись pinned issuer/identity до показа кнопки обновления.
- После загрузки MSIX сверить его SHA-256 с уже проверенным manifest и только затем разрешить запуск.
- Отсутствующая, чужая или неверная подпись и несовпадающий hash — безусловный отказ. В production нет кнопки «продолжить всё равно».
- Отказ записывается в штатную диагностику приложения; одного
Debug.WriteLineнедостаточно. - Developer bypass, если он сохраняется для Desktop, должен быть явным, выключенным по умолчанию и покрытым тестом; он не должен попадать в обычный пользовательский путь.
- Не скачивать доверенный ключ/identity из проверяемого релиза.
- Не запускать установщик автоматически. Пользователь видит действие только после успешной проверки metadata.
3. Исправить тесты
Обязательны полностью offline и детерминированные проверки:
- корректная production-equivalent подпись и hash принимаются;
- manifest, подписанный другой identity, отклоняется;
- подписанный manifest с hash, не совпадающим с MSIX/архивом, отклоняется;
- отсутствующая signature отклоняется;
- повреждённая signature отклоняется;
- отсутствующий verifier отклоняется;
- несовместимые версии Control/Agent/helper блокируют оба
update-*; - Desktop не показывает update action до завершения всех проверок;
- prerelease-channel корректно находит
alpha.9/alpha.10, а не полагается на stable-only endpoint; - URL/asset из другого тега отклоняется.
UpdateServiceTests.cs должен реально компилировать production-код. Сейчас тестовый .csproj не подключает UpdateService.cs, а существующие четыре теста проверяют только создание объекта, cancellation, NullReferenceException и свойства record — это не критерии Queue B.
Bootstrap-тест не должен объявлять успех, если production implementation игнорирует его тестовый ключ. Тестовый seam допустим только если он недоступен в обычном production path и не ослабляет pinned identity.
4. Проверить фактический alpha.9
- Скачать manifest и signature именно из неизменяемого
v0.1.0-alpha.9. - Подтвердить, что выбранная команда
cosign verify-blobдействительно проверяет опубликованный формат.sigи pinned identity. - Проверить hash хотя бы одного Linux archive и MSIX против manifest.
- Если опубликованной
.sigнедостаточно для offline/keyless verification и требуется certificate/bundle, не ослаблять проверку и не менять workflow самостоятельно. Зафиксировать точный producer-side gap в отчёте для Hermes.
5. Git и CI
- Не включать
ci_log*.txt, ключи, временные manifest/signature, скачанные binaries и тестовые архивы. - Не менять
.github/workflows/**. Если producer-side изменение действительно необходимо, описать его для Hermes. - Сначала синхронизировать ветку с текущим
main, затем оформить логические коммиты. - Прогнать
actionlintна существующих workflow, shellcheck/bash syntax для изменённых shell-файлов, Desktop tests, Control tests и релевантные acceptance/bootstrap tests. - Открыть PR, дождаться Linux и Windows CI. Не merge.
- Не запускать публикацию на существующем теге и не создавать
alpha.10.
Критерий приёмки
- Реальные четыре security-сценария Desktop и расширенный negative suite зелёные.
- Bootstrap и Desktop используют один зафиксированный trust policy и отказывают при любой неоднозначности.
- Проверка опубликованных ассетов
alpha.9воспроизводима и приложена к отчёту. - Версионная несовместимость блокируется до изменения установленной системы.
- Рабочее дерево чистое, ветка основана на текущем
main, лишних файлов нет. - PR открыт, все обязательные CI зелёные, workflow не изменены, PR не смержен.
Отчёт
Раздельно перечислить:
- коммиты и изменённые файлы;
- локальные команды и результаты;
- GitHub CI со ссылками;
- проверку фактических
alpha.9assets; - negative tests;
- не запускавшиеся проверки и причину;
- producer-side требования для Hermes, если обнаружены;
- ссылку на PR.