server-monitor-manager/agents/antigravity/inbox/from-smm-deliverables/Старые задачи/smm-antigravity-task-signed-delivery-queue-b-final-2026-08-10.md
Ochenstarik 23eb3f5233 chore(agents): разбор рабочих папок с диска на 2026-08-18
Задания, отчёты и патчи, лежавшие в 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>
2026-08-18 14:19:54 +07:00

98 lines
9.4 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.

# 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 и детерминированные проверки:
1. корректная production-equivalent подпись и hash принимаются;
2. manifest, подписанный другой identity, отклоняется;
3. подписанный manifest с hash, не совпадающим с MSIX/архивом, отклоняется;
4. отсутствующая signature отклоняется;
5. повреждённая signature отклоняется;
6. отсутствующий verifier отклоняется;
7. несовместимые версии Control/Agent/helper блокируют оба `update-*`;
8. Desktop не показывает update action до завершения всех проверок;
9. prerelease-channel корректно находит `alpha.9/alpha.10`, а не полагается на stable-only endpoint;
10. 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.9` assets;
- negative tests;
- не запускавшиеся проверки и причину;
- producer-side требования для Hermes, если обнаружены;
- ссылку на PR.