Skip to content
Все посты /

AI пишет код. Где доказательства?

Proofpack связывает контракт, реализацию и аудит в верифицируемую цепочку. Proof artifacts - недостающий примитив AI-кодогенерации.

#context-engineering #claude-code #verification #proofpack #supply-chain

AI сгенерировал функцию за секунды. Три модели провели ревью. Все сказали “выглядит хорошо”. Вопрос: где артефакт, который это подтверждает?

Не “модель одобрила” - где машиночитаемое свидетельство того, что было проверено, против чего, и с каким результатом? В software supply chain такой артефакт называется attestation. Для AI-сгенерированного кода его не существует.

Proofpack: что внутри

Вот как выглядит proofpack.json после прогона Signum:

{
  "schemaVersion": "4.0",
  "createdAt": "2026-03-04T14:23:07Z",
  "runId": "signum-2026-03-04-a7f3c1",
  "decision": "AUTO_OK",
  "confidence": { "overall": 87 },
  "auditChain": {
    "contractSha256": "e3b0c44298fc1c14...",
    "approvedAt": "2026-03-04T14:01:12Z",
    "baseCommit": "8a4f2dc"
  },
  "contract": {
    "sha256": "a1b2c3d4...",
    "fullSha256": "f5e6d7c8...",
    "status": "present"
  },
  "diff": {
    "sha256": "9f8e7d6c...",
    "sizeBytes": 4820,
    "status": "present"
  },
  "checks": {
    "mechanic": { "status": "present" },
    "holdout": { "status": "present" },
    "reviews": {
      "claude": { "status": "present" },
      "codex": { "status": "present" },
      "gemini": { "status": "present" }
    }
  }
}

Два хэша для контракта - sha256 (редактированная версия без holdout-критериев) и fullSha256 (оригинал). Базовый коммит зафиксирован до начала реализации. Три независимых ревью. Holdout-результаты - отдельно, потому что инженер их не видел.

CI гейтит на этом:

DECISION=$(jq -r '.decision' .signum/proofpack.json)
if [ "$DECISION" != "AUTO_OK" ]; then
  echo "Signum: $DECISION - блокирую merge"
  exit 1
fi

Не нужно парсить логи трёх моделей. Один файл, одно поле, детерминированный гейт.

Сломанное настоящее

Индустрия AI code review сейчас работает на одном уровне - diff. Модель смотрит на патч и говорит, что думает. Проблема не в качестве моделей, а в отсутствии определения “корректно”.

CodeRabbit в своих собственных замерах1 показывает 46% полезных комментариев. Copilot Code Review в тесте на 117 файлах с известными уязвимостями не нашёл ни одной security-проблемы2. Это не обвинение конкретных инструментов - это следствие архитектуры: ревью без контракта ограничено тем, что ревьюер считает “разумным”.

Проблема глубже. Даже если модель находит баг, результат - комментарий в PR. Не машиночитаемый артефакт, не цепочка верификации, не что-то, на чём CI может строить гейт. Между “модель оставила комментарий” и “код верифицирован” - пропасть.

Четыре слоя: как собирается proofpack

В предыдущем посте я разбирал контракт как точку истины. Здесь - как четыре слоя вместе создают верифицируемый артефакт.

CONTRACT. Спецификация формализуется до начала реализации. Оценивается по 6 измерениям (A-F). Codex и Gemini валидируют на пробелы. Генерируются holdout-сценарии - скрытые критерии приёмки, которые инженер не увидит.

EXECUTE. Инженер работает с contract-engineer.json, из которого holdout-критерии физически удалены - не спрятаны инструкцией, а убраны из файла. Baseline (lint, typecheck, имена тестов) зафиксирован до первой строки кода.

AUDIT. Механик - детерминированные проверки без LLM: линтер, тайпчекер, новые провалы тестов по имени (не по exit code). Затем Claude, Codex и Gemini проверяют diff независимо, параллельно, не видя оценок друг друга. Holdout-критерии запускаются против результата. Синтезатор агрегирует: детерминированная политика + confidence score.

PACK. Все артефакты встраиваются в proofpack.json. SHA-256 связывает: одобренный контракт → временная метка → базовый коммит → diff → результаты аудита. Это не лог - это attestation.

Ключевые решения:

  • Ослепление на уровне данных, не инструкций. Инженер не может вывести holdout-критерии из контекста или структуры файла.
  • Мультимодельный аудит: 3 вендора, 3 независимые оценки. Не одна модель проверяет саму себя.
  • Воспроизводимые артефакты для человека и CI, а не доверие к суждению модели. Proofpack существует как файл, его можно проверить, архивировать, подвергнуть аудиту.

Модель угроз: что proofpack защищает и что нет

Защищает:

  • Реализация не соответствует спецификации → holdout-критерии поймают
  • Rubber-stamp ревью (одна модель проверяет саму себя) → 3 независимых ревьюера
  • Нет аудиторского следа → SHA-256 цепочка с временными метками
  • Оптимизация под известные тесты → data-level blinding

Не защищает:

  • Плохая спецификация. Garbage in - verified garbage out. Гейт качества (A-F) снижает риск, но не устраняет.
  • Сговор моделей. Теоретически возможен. 3 вендора (Anthropic, OpenAI, Google) смягчают, но не исключают.
  • Формальная корректность. Proofpack - это целостность процесса, не математическое доказательство. SLSA тоже не доказывает отсутствие багов - доказывает, что билд не был подменён.
  • Злонамеренный автор спецификации. Если человек намеренно прячет требования, система не поможет.

Точнее: proofpack - не proof of correctness, а proof of process. Разница принципиальная.

Смежные работы

ФреймворкЧто делаетПробел
SLSAAttestation провенанса сборкиНе знает про AI-кодогенерацию
in-totoLayout цепочки поставок ПОТолько этап сборки, нет spec → code
SigstoreПодпись кода + transparency logИдентичность, не корректность
CodeRabbitAI-ревью diffНет контракта, holdouts, proof artifact
Copilot Code ReviewAI-ревью PRDiff-уровень, одна модель
QodoAI-тестирование + complianceБлиже, но без мультимодельного аудита и proofpack
GitHub Spec KitСпецификация как вход для CopilotSpec → code, но без цикла верификации

Что действительно ново: цепочка из четырёх слоёв - от спецификации через ослеплённое выполнение и состязательный аудит до tamper-evident артефакта. Ни один существующий инструмент не соединяет все четыре.

Proof artifacts - недостающий примитив

Индустрия software supply chain потратила годы на то, чтобы билды стали верифицируемыми. SLSA, in-toto, Sigstore - всё это про одно: не доверяй, верифицируй, и оставляй артефакт для аудита.

AI-кодогенерация пока обходится без этого. Модель пишет код, другая модель оставляет комментарий в PR, человек нажимает merge. Ничего машиночитаемого не остаётся. Proofpack - одна реализация; паттерн важнее инструмента.

Ссылки

Footnotes

  1. CodeRabbit, “How We Measure Review Quality”, 2025. Self-reported metric из их блога.

  2. Исследование Copilot Code Review на проекте с 117 файлами, содержащими известные уязвимости (SQL injection, XSS, command injection). Ни одна из уязвимостей не была отмечена. Результат зависит от конфигурации и выборки.