Search

All documents · PBH-VERIFY-01: the verified sphdiag diagnostics module

mutation_report.md — PBH-VERIFY-01

RU 2026-09-29 · 10.4 KB · Markdown

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 не нашёл никто.