Fact-Audit — read-only аудит качества по факту
Аудит ценен ровно настолько, насколько каждая находка верифицирована фактом и
правильно приоритизирована. Ложная находка в аудите хуже пропущенной: она
тратит время команды и подрывает доверие к остальным. Поэтому скилл строит вокруг
двух осей — систематическое покрытие (измерения A–H) и доказуемость каждого
пункта (провенанс + проверка против намеренного дизайна).
Аудит строго read-only: ноль мутаций целевого репо. Если репо заморожен —
только git show <sha>:path. Реализацию фиксов делегируешь (это работа автора
кода или отдельного субагента), сам только находишь и приоритизируешь. Роль и
оркестрация вокруг аудита — в скилле censor; этот — про методологию разбора.
Измерения качества A–H (систематическое покрытие)
Прогоняй разбор по всем восьми — это защита от «посмотрел только на то, что
бросилось в глаза». Каждая находка тегируется измерением.
- A. Correctness — логика делает то, что заявлено; краевые случаи; off-by-one;
неверная модель домена.
- B. Security — инъекции, XXE/десериализация, креды в коде, небезопасные
дефолты, недоверенный вход.
- C. Reliability / error-handling — тихо проглоченные исключения
(
except: pass/return None), отсутствие таймаутов, неустойчивость к сбою.
- D. Reproducibility — незапиненные зависимости (нет lockfile), недетерминизм
(FP/BLAS-порядок, time/random), env-зависимость результата.
- E. Testability / coverage — что не покрыто; flaky-тесты; тесты, зелёные по
неправильной причине; обойдённые/замьюченные гейты.
- F. Maintainability — мёртвый код, дублирование, god-объекты, связность,
«магические» константы без объяснения.
- G. Documentation — расхождение кода и доков; необъяснённые эвристики;
отсутствие провенанса решений.
- H. Process / release-engineering — CI-гейты, версионирование (SSOT
README==const==tag), политика push, two-tier publish, манифест зависимостей.
Severity P0–P3
- P0 — ломает корректность/безопасность сейчас; релиз нельзя выпускать.
- P1 — серьёзный дефект, тихая деградация результата, или дыра процесса;
чинить до следующего релиза.
- P2 — заметный долг/риск; запланировать.
- P3 — косметика/полировка.
Каждая находка: [severity][измерение] заголовок — file:line — суть — почему это дефект — (если применимо) предлагаемое направление фикса.
Провенанс и фиксация на commit
- Каждая находка ссылается на конкретику:
file:line, байт-offset, commit
SHA, URL. Нет ссылки — нет находки. «Не нашёл» — допустимый и честный результат.
- Когда HEAD целевого репо движется (сосед активно работает) — фиксируй аудит
на конкретный SHA:
git show <sha>:path. Иначе ссылки file:line протухают
между чтением и доставкой. В шапке критики укажи SHA снимка.
- Read-only: не переключай ветки с мутацией, не трогай рабочее дерево соседа.
Каждую находку — верифицировать по факту
Находка существует, только когда подтверждена в источнике. Две типовые ловушки,
которые ОБЯЗАН ловить:
- false-green (ложно-зелёное): гейт/проверка проходит, но не по той причине.
Пример: зависимость стоит только в inline-install команде CI, а в манифесте
(
requirements.txt/lockfile) её нет → прод сломается, CI «зелёный». Или
CI-гейт замьючен/закомментирован, но числится активным.
- false-red (ложно-красное): тест краснит гейт не из-за дефекта продукта, а
из-за собственной flaky-природы (FP/BLAS-недетерминизм при
-n auto, гонка
порядка). Не выдавай инфраструктурную flaky за баг продукта — но и не позволяй
ей маскировать настоящие падения (карантин ≠ решение проблемы).
Валидируй вывод любого субагента/Ollama против исходных строк. Субагент заявил
«0 hits / кэшей нет» — перепроверь сам прежде, чем внести в критику.
Дефект vs намеренный дизайн (проверка ПЕРЕД ранжированием)
Самая дорогая ошибка аудитора — выдать намеренное решение автора за баг. Прежде
чем ранжировать доменную находку (физика детектора, бизнес-правило, эвристика
идентификации) как дефект — прочитай документированную методологию/ручные
эвристики автора. Пользователь часто закладывает практические указания
(«эвристика спектрометра», proxy-нуклиды, grandfather-chain), которые выглядят
«странно» вне контекста, но являются осознанным дизайном.
- Нашёл «странность» в домене → ищи в
NOTES/methodology/README обоснование →
только если обоснования нет ИЛИ оно противоречит коду, это находка.
- Уже внёс находку, а потом нашёл документированный дизайн, который её
опровергает → отзови находку аддендумом (честная само-коррекция), не тихой
правкой. Отзыв с указанием источника дизайна (
methodology.md:296) — это
работающий verify-by-fact, а не слабость. В этой практике так были отозваны
две физические находки, когда выяснилось: bare-NPR и raw-branching — намеренны.
Формат deliverable
ВСЕГДА этот скелет (адаптируй заголовки под домен):
# Критика <система> — снимок <SHA>, режим read-only
## Резюме (вердикт одной фразой + счётчики P0/P1/P2/P3)
## Критика по измерениям A–H
(по каждому измерению — находки с file:line-провенансом)
## Таблица статуса закрытия
| Находка | severity | измерение | file:line | статус | commit-провенанс |
## Приоритизированный план P0→P1→P2→P3
## Аддендумы / само-коррекции
(отозванные находки с указанием источника намеренного дизайна)
- Статус закрытия ведётся по commit-провенансу: какой коммит закрыл находку
(верифицировано фактом, не «автор сказал, что починил»).
- Само-коррекции — аддендумом, не тихой правкой тела. Прозрачность отзыва так
же важна, как сама находка.
Анти-паттерны
- ❌ Находка без
file:line/SHA. → Нет провенанса — нет находки.
- ❌ Ранжировать доменную странность как баг, не прочитав методологию автора.
- ❌ Принять «зелёный CI» / «0 hits субагента» на слово (false-green, неверифиц.).
- ❌ Тихо удалить отозванную находку (теряется честность аудита) — только аддендум.
- ❌ Мутировать целевой репо ради проверки. Аудит read-only; фикс делегируется.
- ❌ Аудит «по верхам» вместо прохода по всем A–H.
1---2name: fact-audit3description: Read-only комплексный аудит качества чужой кодовой базы/системы с приоритизированной критикой, провенанс file:line. Триггеры: «проведи аудит», «покритикуй», «что не так в коде», «найди баги/слабые места». Голое «проверь» на кодовую базу целиком → сюда; один финализированный артефакт на гейте → six-corner-audit; код внешнего заказчика → code-audit-core. Строго read-only, НЕ для написания фичи.4---56# Fact-Audit — read-only аудит качества по факту78Аудит ценен ровно настолько, насколько каждая находка **верифицирована фактом** и9**правильно приоритизирована**. Ложная находка в аудите хуже пропущенной: она10тратит время команды и подрывает доверие к остальным. Поэтому скилл строит вокруг11двух осей — систематическое покрытие (измерения A–H) и доказуемость каждого12пункта (провенанс + проверка против намеренного дизайна).1314Аудит **строго read-only**: ноль мутаций целевого репо. Если репо заморожен —15только `git show <sha>:path`. Реализацию фиксов делегируешь (это работа автора16кода или отдельного субагента), сам только находишь и приоритизируешь. Роль и17оркестрация вокруг аудита — в скилле `censor`; этот — про методологию разбора.1819---2021## Измерения качества A–H (систематическое покрытие)2223Прогоняй разбор по всем восьми — это защита от «посмотрел только на то, что24бросилось в глаза». Каждая находка тегируется измерением.2526- **A. Correctness** — логика делает то, что заявлено; краевые случаи; off-by-one;27 неверная модель домена.28- **B. Security** — инъекции, XXE/десериализация, креды в коде, небезопасные29 дефолты, недоверенный вход.30- **C. Reliability / error-handling** — тихо проглоченные исключения31 (`except: pass`/`return None`), отсутствие таймаутов, неустойчивость к сбою.32- **D. Reproducibility** — незапиненные зависимости (нет lockfile), недетерминизм33 (FP/BLAS-порядок, time/random), env-зависимость результата.34- **E. Testability / coverage** — что не покрыто; flaky-тесты; тесты, зелёные по35 неправильной причине; обойдённые/замьюченные гейты.36- **F. Maintainability** — мёртвый код, дублирование, god-объекты, связность,37 «магические» константы без объяснения.38- **G. Documentation** — расхождение кода и доков; необъяснённые эвристики;39 отсутствие провенанса решений.40- **H. Process / release-engineering** — CI-гейты, версионирование (SSOT41 README==const==tag), политика push, two-tier publish, манифест зависимостей.4243## Severity P0–P34445- **P0** — ломает корректность/безопасность сейчас; релиз нельзя выпускать.46- **P1** — серьёзный дефект, тихая деградация результата, или дыра процесса;47 чинить до следующего релиза.48- **P2** — заметный долг/риск; запланировать.49- **P3** — косметика/полировка.5051Каждая находка: `[severity][измерение] заголовок — file:line — суть — почему это52дефект — (если применимо) предлагаемое направление фикса`.5354## Провенанс и фиксация на commit5556- **Каждая** находка ссылается на конкретику: `file:line`, байт-offset, commit57 SHA, URL. Нет ссылки — нет находки. «Не нашёл» — допустимый и честный результат.58- Когда HEAD целевого репо движется (сосед активно работает) — **фиксируй аудит59 на конкретный SHA**: `git show <sha>:path`. Иначе ссылки `file:line` протухают60 между чтением и доставкой. В шапке критики укажи SHA снимка.61- Read-only: не переключай ветки с мутацией, не трогай рабочее дерево соседа.6263## Каждую находку — верифицировать по факту6465Находка существует, только когда подтверждена в источнике. Две типовые ловушки,66которые ОБЯЗАН ловить:6768- **false-green** (ложно-зелёное): гейт/проверка проходит, но не по той причине.69 Пример: зависимость стоит только в inline-install команде CI, а в манифесте70 (`requirements.txt`/lockfile) её нет → прод сломается, CI «зелёный». Или71 CI-гейт замьючен/закомментирован, но числится активным.72- **false-red** (ложно-красное): тест краснит гейт не из-за дефекта продукта, а73 из-за собственной flaky-природы (FP/BLAS-недетерминизм при `-n auto`, гонка74 порядка). Не выдавай инфраструктурную flaky за баг продукта — но и не позволяй75 ей маскировать настоящие падения (карантин ≠ решение проблемы).7677Валидируй вывод любого субагента/Ollama против исходных строк. Субагент заявил78«0 hits / кэшей нет» — перепроверь сам прежде, чем внести в критику.7980## Дефект vs намеренный дизайн (проверка ПЕРЕД ранжированием)8182Самая дорогая ошибка аудитора — выдать намеренное решение автора за баг. Прежде83чем ранжировать **доменную** находку (физика детектора, бизнес-правило, эвристика84идентификации) как дефект — **прочитай документированную методологию/ручные85эвристики автора**. Пользователь часто закладывает практические указания86(«эвристика спектрометра», proxy-нуклиды, grandfather-chain), которые выглядят87«странно» вне контекста, но являются осознанным дизайном.8889- Нашёл «странность» в домене → ищи в `NOTES/methodology/README` обоснование →90 только если обоснования нет ИЛИ оно противоречит коду, это находка.91- Уже внёс находку, а потом нашёл документированный дизайн, который её92 опровергает → **отзови находку аддендумом** (честная само-коррекция), не тихой93 правкой. Отзыв с указанием источника дизайна (`methodology.md:296`) — это94 работающий verify-by-fact, а не слабость. В этой практике так были отозваны95 две физические находки, когда выяснилось: bare-NPR и raw-branching — намеренны.9697## Формат deliverable9899ВСЕГДА этот скелет (адаптируй заголовки под домен):100101```102# Критика <система> — снимок <SHA>, режим read-only103## Резюме (вердикт одной фразой + счётчики P0/P1/P2/P3)104## Критика по измерениям A–H105 (по каждому измерению — находки с file:line-провенансом)106## Таблица статуса закрытия107 | Находка | severity | измерение | file:line | статус | commit-провенанс |108## Приоритизированный план P0→P1→P2→P3109## Аддендумы / само-коррекции110 (отозванные находки с указанием источника намеренного дизайна)111```112113- **Статус закрытия** ведётся по commit-провенансу: какой коммит закрыл находку114 (верифицировано фактом, не «автор сказал, что починил»).115- **Само-коррекции — аддендумом**, не тихой правкой тела. Прозрачность отзыва так116 же важна, как сама находка.117118## Анти-паттерны119120- ❌ Находка без `file:line`/SHA. → Нет провенанса — нет находки.121- ❌ Ранжировать доменную странность как баг, не прочитав методологию автора.122- ❌ Принять «зелёный CI» / «0 hits субагента» на слово (false-green, неверифиц.).123- ❌ Тихо удалить отозванную находку (теряется честность аудита) — только аддендум.124- ❌ Мутировать целевой репо ради проверки. Аудит read-only; фикс делегируется.125- ❌ Аудит «по верхам» вместо прохода по всем A–H.