123 lines
12 KiB
Markdown
123 lines
12 KiB
Markdown
# P84 · 2025-02 · Проверка сгенерированного кода — три прохода ревью
|
||
|
||
## Граница пакета
|
||
|
||
- Переписываются только `editorial-2025-02-practice-ai-code-verification`, `editorial-2025-02-mechanism-ai-code-verification` и `editorial-2025-02-field-ai-code-verification` через самостоятельный overlay `web/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](https://github.com/github/docs/blob/7b3918e77baf865d1f16bd60e570acea874ee9eb/content/copilot/responsible-use-of-github-copilot-features/responsible-use-of-github-copilot-code-review.md) | immutable commit `7b3918e77baf865d1f16bd60e570acea874ee9eb`, 12.12.2024 | AI review и suggestions дополняют, а не заменяют человеческую проверку; предложения могут быть неверными, небезопасными, давать false positive или пропускать проблемы. | Документация одного preview-продукта. Она не измеряет качество других ассистентов, не задаёт merge policy и не доказывает конкретный synthetic case. |
|
||
| [NIST SP 800-218, SSDF Version 1.1](https://csrc.nist.gov/pubs/sp/800/218/final) | final, 03.02.2022 | PW.7 связывает code review и analysis с правилами организации, фиксирует findings и triage; результаты analysis/testing могут быть входом peer review. | Это высокоуровневая рамка: не выбирает инструмент, не даёт порог покрытия и не определяет риск конкретного diff. |
|
||
| [OWASP Code Review Guide 2.0](https://owasp.org/www-project-code-review-guide/assets/OWASP_Code_Review_Guide_v2.pdf) | 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.
|
||
|
||
Результат:
|
||
|
||
```text
|
||
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 или роли; финалы дают конкретное действие, а не лозунг.
|
||
|
||
Результат автоматического редакторского аудита:
|
||
|
||
```text
|
||
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 и рендер повторно проверены.
|
||
|
||
```text
|
||
xmllint --noout <3 SVG>
|
||
PASS
|
||
|
||
SVG safety scan
|
||
PASS
|
||
|
||
Sharp 375 px + ручная проверка
|
||
PASS
|
||
```
|
||
|
||
Полная build, registry update, staging, commit и push сознательно не запускались: это запрещено границей самостоятельного P84 draft-пакета. Перед будущей публикацией нужен отдельный выпускной проход с подключением overlay к registry и полной сборкой.
|
||
|
||
## Выпуск после независимой приёмки
|
||
|
||
Основной редактор выполнил отдельные три прохода после подключения overlay:
|
||
|
||
1. **Факты и техника.** Raw-снимок GitHub Docs по commit
|
||
<code>7b3918e77baf865d1f16bd60e570acea874ee9eb</code> подтверждает дату
|
||
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**.
|
||
2. **Редактура и голос.** Полные тексты перечитаны. Они различают стоимость
|
||
проверки для маленького diff, ложную уверенность нескольких похожих зелёных
|
||
сигналов и решение владельца границы. В начале каждой статьи есть симптом и
|
||
цена ошибки, что повторно подтвердил усиленный `audit:draft`: 8 647 / 10 031
|
||
/ 10 695 знаков. Термины contract, evidence, stop, revert и rollback
|
||
раскрыты в контексте и не выданы за синонимы.
|
||
3. **Визуал и выпуск.** Три 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** страницы.
|
||
|
||
Вердикт: февральская партия готова к отдельному публикационному коммиту.
|