12 KiB
P84 · 2025-02 · Проверка сгенерированного кода — три прохода ревью
Граница пакета
- Переписываются только
editorial-2025-02-practice-ai-code-verification,editorial-2025-02-mechanism-ai-code-verificationиeditorial-2025-02-field-ai-code-verificationчерез самостоятельный overlayweb/scripts/upgrade-2025-02.mjs. - Все prompts, diff fragments, contracts, tests, roles, verdicts и «стоимость» — versioned fixed synthetic JavaScript literals в памяти. Пакет не читает и не пишет source repository, user code, secrets, Git, CI, сеть, telemetry, production, clock или API и не вызывает модель.
- Скрипт не меняет
articles.json; registry, README, очередь, staging, commit, push и полная production-сборка не входят в эту самостоятельную draft-партию.
База исследования
Все ссылки ниже открыты обычным HTTPS без авторизации и без TLS bypass: curl -I -L --fail вернул HTTP 200 для каждой. Один и тот же набор из трёх первичных/официальных источников указан в каждой статье; это больше минимальных двух источников и сохраняет один исторический срез на февраль 2025.
| Источник | Версия / дата | Узкое утверждение в статье | Ограничение источника |
|---|---|---|---|
| GitHub Docs: Responsible use of GitHub Copilot code review | immutable commit 7b3918e77baf865d1f16bd60e570acea874ee9eb, 12.12.2024 |
AI review и suggestions дополняют, а не заменяют человеческую проверку; предложения могут быть неверными, небезопасными, давать false positive или пропускать проблемы. | Документация одного preview-продукта. Она не измеряет качество других ассистентов, не задаёт merge policy и не доказывает конкретный synthetic case. |
| NIST SP 800-218, SSDF Version 1.1 | final, 03.02.2022 | PW.7 связывает code review и analysis с правилами организации, фиксирует findings и triage; результаты analysis/testing могут быть входом peer review. | Это высокоуровневая рамка: не выбирает инструмент, не даёт порог покрытия и не определяет риск конкретного diff. |
| OWASP Code Review Guide 2.0 | release PDF, July 2017 | Code review проверяет security и logical controls; tools масштабируют поиск, но не заменяют контекст и человеческое подтверждение. | Руководство не даёт языковых правил, не заменяет threat model и не обещает найти все уязвимости. |
Историческая оговорка: в текст не перенесены сведения о моделях, агентах, benchmark, policy или возможностях инструментов после февраля 2025.
Проход 1 — факты и техника
Проверил тезисы с узкими утверждениями источников и убрал обещания correctness/security. В статьях сказано, что contract check, static check, focused test, review и manual reproduction дают evidence с ограниченной областью действия; ни один из них и их комбинация не названы гарантией.
Практическая модель закреплена в synthetic-ai-code-verification-2025-02-v1 и принимает только три case: contract-mismatch, hidden-side-effect, incomplete-test. Она возвращает только in-memory report/plan/stop object и на невалидных данных работает fail-closed. Отрицательная fixture проверяет:
- exact keys у input, report, plan и stop contracts;
- dense arrays для evidence и actions;
- unknown keys;
- cyclic input/report/plan без выброса исключения;
- canonical comparison fixed input, evidence и actions;
- подменённые finding/action;
- запрет merge без human approval и отсутствие production effect.
Результат:
node --check scripts/upgrade-2025-02.mjs
PASS
node scripts/upgrade-2025-02.mjs --verify-fixture
PASS fixture: 25/25 assertions
Ограничение этого прохода: fixture подтверждает форму синтетического механизма, не поведение реального линтера, теста, ревьюера, модели или системы доступа.
Проход 2 — редактура и голос M8
Проверены первые два абзаца каждой статьи: в них есть симптом, причина и стоимость ошибки без вымышленных денег, инцидентов или метрик. Автор февраля 2025 сравнивает стоимость способов проверки и оставляет повторяемый процесс, но не делает вид, что владеет универсальной AI-стратегией.
| Статья | Основной текст | Проверка голоса и содержания |
|---|---|---|
| Practice | 8 647 знаков | Один зелёный test не равен contract proof; дан verification plan, evidence table, fixed example и чёткий stop. |
| Mechanism | 10 031 знак | Раскрыты matrix risk → evidence, overlap, independence, false confidence, scope и stop condition. |
| Field | 10 695 знаков | Разобраны три diff case, evidence chain, human approval, next action и граница stop/revert/rollback. |
Редакторская вычитка отдельно проверила: короткую связку «симптом → причина → проверка → действие», отсутствие шаблонных оборотов из аудита, отсутствие анхронизмов 2026–2027 и отсутствие ложной формулы «зелёный статус = безопасность». Термины привязаны к фиксированному контракту, field, input ownership или роли; финалы дают конкретное действие, а не лозунг.
Результат автоматического редакторского аудита:
npm run audit:draft -- scripts/upgrade-2025-02.mjs
PASS editorial-2025-02-practice-ai-code-verification: 8647 body chars
PASS editorial-2025-02-mechanism-ai-code-verification: 10031 body chars
PASS editorial-2025-02-field-ai-code-verification: 10695 body chars
Ограничение этого прохода: объём и стиль подтверждают плотность текста, но не переносят fixed verdict на чужой исходный код.
Проход 3 — визуал и выпуск
Для каждой статьи создан отдельный безопасный SVG с содержательным alt и подписью: воронка verification, matrix risk → evidence и evidence chain. SVG проверены как XML и safety scan не нашёл script, foreignObject, javascript:, data:image или event handlers. Каждый визуал отрендерен Sharp и вручную просмотрен на ширине 375 px.
| Asset | Рендер 375 px | Что проверено вручную |
|---|---|---|
ai-code-verification-2025-verification-funnel.svg |
375 × 238 | Порядок пяти gates, красная stop-ветка и подписи читаются. |
ai-code-verification-2025-risk-detection-matrix.svg |
375 × 250 | Колонки, маркеры ✓/? и легенда читаются без горизонтального обрезания. |
ai-code-verification-2025-evidence-chain.svg |
375 × 250 | Видны разница между observation/decision и раздельные ветки stop/human approval. |
После первого узкого render-прохода сокращена подпись первого шага воронки и разбита длинная нижняя легенда матрицы на две строки; затем XML и рендер повторно проверены.
xmllint --noout <3 SVG>
PASS
SVG safety scan
PASS
Sharp 375 px + ручная проверка
PASS
Полная build, registry update, staging, commit и push сознательно не запускались: это запрещено границей самостоятельного P84 draft-пакета. Перед будущей публикацией нужен отдельный выпускной проход с подключением overlay к registry и полной сборкой.
Выпуск после независимой приёмки
Основной редактор выполнил отдельные три прохода после подключения overlay:
- Факты и техника. Raw-снимок GitHub Docs по commit
7b3918e77baf865d1f16bd60e570acea874ee9ebподтверждает дату 12 декабря 2024 и предупреждает, что Copilot code review дополняет, а не заменяет человеческий review; возможны пропуски, false positive и правдоподобный, но небезопасный код. В финальном PDF NIST SP 800-218 пункты PW.7.1–PW.7.2 требуют выбирать review/analysis по правилам организации, фиксировать и triage найденные вопросы. OWASP Guide 2.0 подтверждает, что tools не заменяют человеческий context и verification. Утверждения статей не выходят за эти границы; fixture повторно прошёл 25/25. - Редактура и голос. Полные тексты перечитаны. Они различают стоимость
проверки для маленького diff, ложную уверенность нескольких похожих зелёных
сигналов и решение владельца границы. В начале каждой статьи есть симптом и
цена ошибки, что повторно подтвердил усиленный
audit:draft: 8 647 / 10 031 / 10 695 знаков. Термины contract, evidence, stop, revert и rollback раскрыты в контексте и не выданы за синонимы. - Визуал и выпуск. Три SVG отрисованы Sharp на 375 px и просмотрены:
воронка 375×238, матрица 375×250, evidence chain 375×250. Карточки,
стрелки, легенды и stop-ветви остаются читаемыми; XML и safety scan чисты.
Целевой аудит подтверждает figure, code и таблицу в каждой статье. Реестр
содержит 247 уникальных ревизий,
git diff --checkчист, production build успешно сгенерировал 374 страницы.
Вердикт: февральская партия готова к отдельному публикационному коммиту.