All documents · PBH-VERIFY-01: the verified sphdiag diagnostics module
mutation_report.md — PBH-VERIFY-01
This document is in Russian (original language). Your browser can translate it; the key results are summarised in English on the Results page.
0. Предрегистрация (записано 2026-09-28 до появления кода и тестов)
Цель: измерить чувствительность проверок (разработческих тестов, независимой матрицы, аудита) к контролируемым дефектам. Основной код и контракт не меняются; каждый мутант — отдельная копия mutants/<id>/src/sphdiag, порождаемая скриптом-патчем mutants/make_mutants.py.
Классы дефектов (минимальный набор ТЗ §9 + дополнительные):
| id | Класс | Намерение (реализация уточняется по коду после его появления) |
|---|---|---|
| M1 | ареальный ↔ координатный радиус | в M_MS и/или θ± использовать r вместо R |
| M2a | знак K_ij | U = +R K_B вместо −R K_B |
| M2b | ориентация нормали | s^a → −s^a (Γ = −R′/A) |
| M3a | потерян 4π | M_flux без 4π (или 𝓗_M без 4π в потоковом члене) |
| M3b | 8π/16π | 𝓗 с 8πρ вместо 16πρ |
| M3c | коэффициент потенциала | V = m²φ² вместо ½m²φ² |
| M4a | знак потока | j_r = +Πφ′ |
| M4b | поток исключён | U j_r → 0 в 𝓗_M и M_int |
| M5 | космологическая marginal-сфера объявлена PBH | ah_candidate без требования θ₋ < 0 / внутренней trapped-стороны |
| M6 | ожидаемый ответ теста зависит от проверяемой реализации | мутант теста: эталон вычисляется функцией модуля (проверяется, заметит ли аудит) |
| M7 | NaN трактуется как отсутствие коллапса | нечисловые Rθ± отбрасываются, статус → NO_TRAPPED_SPHERES |
| M8 | чётность в центре | R продолжается чётно |
| M9 | порядок производных | 2-й порядок вместо 4-го |
| M10 | Γ через γ_rr | Γ = R′/A² |
Для каждого мутанта фиксируется: внесён ли; физически ли нетривиален; эквивалентен ли (не меняет вывод ни на каких данных); ломает ли синтаксис/импорт немедленно; каким тестом обнаружен (разработческие тесты / независимая матрица / аудит); до или после ручной проверки; до или после усиления тестов.
Отдельно: в копию кода, передаваемую агенту adversarial audit, тайно вносится 3–4 дефекта из этого списка (аудитор об этом не знает). Результаты аудита по ним — мера чувствительности аудита; находки вне этих дефектов — естественные ошибки основного кода.
Сразу оговорка: ~10 искусственных дефектов не дают оценки вероятности правильности модуля; это проверка чувствительности конкретных тестов к конкретным классам ошибок.
1. Проведение (EXECUTED)
- Генератор:
mutants/make_mutants.py(одна текстовая правка на дефект, уникальность шаблона проверяется; для кода v0.2+ у M5 альтернативный шаблон — правило кандидата AH переписано под контракт v1.1). Мутанты построены для трёх версий кода:mutants/v0.1(до аудита),mutants/v0.3,mutants/v0.4; у каждой версии есть немутированная копияBASE. - Критерий обнаружения: мутант обнаружен набором, если падает хотя бы один тест, который базовая (немутированная) версия того же кода проходит. Тесты, падающие на базе, из подсчёта исключены.
- Наборы: разработческий (
tests/devтой же версии), независимая матрица v1 (замороженная копия тегаverify-matrix-v1) и v2 (verify-matrix-v2). Матрицы запускались из копийgit archive, поэтому правки верификатора во время прогона не могли на них повлиять. Первый прогон, который шёл из рабочего дерева, я остановил и перезапустил. - Ни один мутант не ломает импорт или синтаксис. Все физически нетривиальны. M1 (r вместо R в M_MS) эквивалентен на данных в ареальной координате (R ≡ r: PG, срезы с R = r) и обнаруживается только на данных с R ≠ r (FLRW в сопутствующей координате, изотропный Шварцшильд, T70).
2. Результаты (число тестов, падающих сверх базы; в скобках — имена, если их ≤ 3)
Источник: results/mutation_summary.md, results/mutants_*.txt.
| мутант | dev v0.1 (код v0.1) | матрица v1 (код v0.1) | dev v0.4 (код v0.4) | матрица v1 (код v0.4) | матрица v2 (код v0.4) |
|---|---|---|---|---|---|
| M1 r↔R | 12 | 8 | 16 | 7 | 11 |
| M2a знак K | 24 | 20 | 33 | 19 | 24 |
| M2b ориентация s | 27 | 21 | 35 | 19 | 25 |
| M3a нет 4π в M_flux | 3 | 3 (X50, X51, X52) | 4 | 3 (X50–X52) | 3 (X50–X52) |
| M3b 8πρ вместо 16πρ | 15 | 7 | 19 | 7 | 8 |
| M3c V = m²φ² | 3 | 3 (K41, V02, X50) | 5 | 3 | 4 |
| M4a знак j_r | 1 (test_scalar_field_projections_formulae_and_order) | 3 (V02, X50, X51) | 2 | 3 | 3 |
| M4b поток исключён | 5 | 5 | 8 | 5 | 5 |
| M5 космологическая сфера → кандидат AH | 5 | 4 | 6 | 4 | 6 |
| M7 NaN → «нет коллапса» | 20 | 1 (R95) | 22 | 1 (R95) | 1 (R95) |
| M8 чётность R | 19 | 14 | 29 | 14 | 18 |
| M9 2-й порядок | 22 | 17 | 25 | 15 | 18 |
| M10 Γ = R′/A² | 12 | 18 | 19 | 16 | 21 |
| убито | 13/13 | 13/13 | 13/13 | 13/13 | 13/13 |
Базы: dev v0.1 и dev v0.4 — без падений; матрица v1 на коде v0.1 — падает K40 (дефект допуска матрицы, audit_report V1); матрица v1 на коде v0.4 — K40, а также V00, M13, S22 (ожидания v1 противоречат изменённому контракту v1.1–v1.2: область inner, класс UNRESOLVED); матрица v2 на коде v0.4 — U62 (audit_report N15).
3. До и после усиления тестов
- Разработческие тесты: v0.1 → v0.4 — все 13 мутантов убиты в обеих версиях. Число «ловящих» тестов выросло, например M4a 1 → 2, M8 19 → 29. Тоньше этого была мини-мутация аудитора: 21 мутант второго порядка (A ≠ 1 в M_prop и L2vol, σ_M, правила PAST_MARGINAL, Γ(0) для cell и т. п.) дал 7 выживших на наборе v0.1 (audit_findings A13). По журналу B, после v0.2 выживших нет — это проверка самого разработчика, не повторённая независимо.
- Независимая матрица: v1 → v2 — 13/13 в обеих. v2 добавила обнаружение M5 тестом Z81, M2a — тестами G27 и Z81, M9 — тестом U61. M7 по-прежнему ловит только R95: это единственный тест матрицы, проверяющий путь NaN → статус.
- Проверка макетом у верификатора (
results/harness_mutation_test*.json): v1 — 9 из 9 внесённых ошибок пойманы, v2 — 19 из 19. Самомутации агента A: 23/24, после добавленного теста 24/24.
4. Тайные дефекты в копии для аудита
| Дефект | Найден аудитом | Порядок |
|---|---|---|
| S1 (M4a-частичный: знак M_flux) | да, A4 major | чтение → проба → падающий dev-тест |
| S2 (M5) | да, A2 critical | чтение → проба |
| S3 (M3c) | да, A3 critical | чтение → проба |
| S4 (M8) | да, A1 critical | чтение → проба |
| S5 (M6, круговой тест) | частично: «ФКГ-тест частично круговой», без указания, что ρ и H целиком взяты из тестируемого кода | чтение тестов |
Оговорка: S1–S4 вместе роняли 22 из 80 dev-тестов, поэтому аудит мог найти их и прогоном тестов. Порядок «сначала чтение» — самоотчёт аудитора.
5. Чего эти числа не означают
13 искусственных дефектов плюс 5 тайных — это проверка чувствительности конкретных наборов к конкретным классам ошибок. Вероятность правильности модуля из этого не выводится. Естественные ошибки, найденные в пилоте (audit_report), по характеру отличаются от внесённых: это неполнота контракта и эвристик ошибки (N4–N15), а не опечатки в формулах. Формульных ошибок в реализации B не нашёл никто.