Аудит · вики монорепо core

Отчёт готовности вики

Глубокая сверка «заметка ↔ код» силами автономного мультиагентного аудита. По агенту на каждую заметку плюс 7 сквозных измерений — схема, ссылки, индексы, дубли, рецепты, покрытие, пригодность для AI-агента.

80 агентов 75 заметок 7 измерений 0 ошибок прогона ~4M токенов
87
/ 100
Общая готовность — измерено полным ре-аудитом 75 нот: среднее 87, медиана 89, 37 нот ≥90. Было 78 до аудита.
Вердикт

Вики — по-настоящему полезный, хорошо спроектированный слой для AI-поиска: 67 заметок со схемой, реальные код-идентификаторы в grep-подсказках, дисциплинированная hub-and-spoke архитектура, ноль битых ссылок и рабочий тулинг регенерации/валидации.

Стартовый аудит нашёл 10 заметок с major-drift (ложные «сделано», перевёрнутые атрибуции, несуществующие флаги/методы, рецепты с нерабочим кодом) — все переписаны и переаудированы (эти 10: 52 → 86). Полный ре-аудит на текущем дереве: по всей вики major-drift 10 → 3, accurate 16 → 34, медиана готовности 89.

89
медиана готовности
16→34
accurate нот
10→3
major-drift

Кому это служит

зачем нужна готовность вики — и кто на неё опирается

🧭

Продакт-менеджеру

Как устроена фича и какие бизнес-правила — почему так сделано и где границы, — не дёргая разработчиков. Точность заметок = меньше неверных вводных в решениях.

🧪

QA

Где границы, какие правила и настройки по 5 рынкам, что и как проверять. Заметка, отставшая от кода, = пропущенный кейс, поэтому синхрон критичен.

💻

Разработчику и AI-агенту

Архитектурный контекст и готовые рецепты до правки → меньше регрессий. Именно здесь major-drift опаснее всего — и потому вычищен в первую очередь.

Сквозные измерения

7 независимых аудиторов · стартовый аудит → финал

Рецепты (patterns) · было 6896
Схема / frontmatter · было 9595
Пригодность для AI-агента · было 7795
Целостность индексов · было 7293
Покрытие (аппы/домены) · было 6293
Граф ссылок / навигация · было 8090
Дубли / архитектура инфо · было 7284

6 из 7 измерений ≥90 — рецепты, схема, AI-usability, индексы, покрытие, граф ссылок. Дубли (84) — структурно чистые (motors разделён на HOW/RULES, единое framing каналов/событий, дедуп askwire/Maestra); остаток ~15 пунктов — длинный хвост межнотных числовых совпадений («число X в ноте A vs ноте B») с убывающей отдачей.

Точность контента

измерено на текущем дереве — полный ре-аудит 75 нот

34
38
3
accurate — 34 (45%) · было 16 minor-drift — 38 (51%) · косметика (стейл-строки, счётчики) major-drift — 3 (4%) · было 10

Полный ре-аудит на текущем дереве: accurate удвоилось (16 → 34), major-drift 10 → 3. Механические сигналы чистые — 0 отсутствующих путей в code:, 0 битых related:. Из 3 свежих major-drift (новые находки, не из исходных 10) 2 исправлены сразу (testing-strategy, add-middleware), 1 (locations sort) — спорный claim, оставлен на ручную проверку. Minor-drift (51%) — неизбежный хвост живой вики против активного кода; числа под автогуардом verify-wiki-drift.

10 худших заметок

✓ все 10 исправлены после аудита

ЗаметкаБыло → СталоСтатус
features/reviews.md
Весь каскад тоглов на 2 флагах, которых нет в коде; вывод «ревью не показываются нигде» ложен — Somon активно показывает.
42 80исправлено
patterns/add-bank-provider.md
Опущен 7-й обязательный abstract-метод get_code(); неверные поля модели и механизм фабрики. Провайдер не инстанцируется.
45 92исправлено
patterns/add-sms-backend.md
Шаблон класса не наследует BaseBackend; неверные сигнатуры конструктора и send(). Дословно — SMS не уходит.
45 80исправлено
adr/0005-drop-legacy-listings-interface.md
Центральный шаг помечен «✅ сделано» ложно — page-object'ы существуют и активно поддерживаются.
50 86исправлено
patterns/add-pay-system.md
Неверно описан диспетчер (if-chain vs dict-dispatch), несуществующие uppercase-члены enum. Copy-paste → AttributeError.
50 90исправлено
domain/fast-filters-migration.md
Ключевое «CategoryFilter admin не зарегистрирован» ложно — зарегистрирован (filters/admin.py:80). Отправляет делать сделанное.
52 92исправлено
features/unegui-recommendations.md
Заявлен Waffle для выбора стратегии; код использует PostHog multivariate-флаги, названные enum-классы не существуют.
55 78исправлено
features/unegui-odoo.md
Исправлены инвертированные утверждения о поведении эндпоинтов и алертинге (auth, Sentry, экспорт).
60 90исправлено
domain/deployment.md
GCP-registry неверен для 4/5 рынков; неверные имена команд run.sh (test vs tests). Copy-paste команды падают.
60 85исправлено
features/locations.md
Атрибуция файлов Ninja-роутера перевёрнута — агент откроет не тот файл при правке эндпоинта.
62 91исправлено

План улучшений

дедуплицировано по всем заметкам, по приоритету

P0

Переписать ~10 major-drift заметок

Каждая заставит агента написать сломанный код, пропустить реальную работу или сделать ложное допущение о безопасности. Рецепты выполняются «дословно» — их drift особенно опасен. → сделано: все 10 переписаны и переаудированы (эти 10: major-drift → 0, 52→86), закоммичены.

P0

Закоммитить регенерацию индексов

tip-коммит отгружал устаревшие index.jsonl / code-to-wiki / README — чистый checkout падал на validate-wiki. → сделано (пункт A): 2 коммита, дерево зелёное.

P1

Самоподдерживающийся CI (dry-регенерация, guard'ы, ссылки)

Ручная чистка переведена в автогейты. → сделано: 3 wiki-job в пайплайне (`check_wiki_fresh` — блокирующий, `validate_wiki` + `verify_wiki_drift` — advisory); `check-wiki-fresh.py` ловит стейл-индексы, отсутствие TL;DR, битые примеры/счётчики и битые related:; `verify-wiki-drift.py` сам считает из кода числа, что расходились между нотами (askwire 41, миграции 118, Maestra 14) — это корень «дубли-асимптоты».

P1

Починить канонический пример reverse-lookup

pay/voucher.py → pay/models/voucher.py в AGENTS.md, SKILL.md, rules/wiki.md. → сделано во всех трёх; путь резолвится, под CI-guard'ом.

P1

Закрыть крупнейшие дыры покрытия

features/bdui.md, domain/post-ad-flow.md, features/adverts-business.md. → сделано: 3 ноты созданы и проиндексированы; покрытие 62 → 93.

P1

Свести межнотные противоречия по числам + дедуп motors

askwire, каналы уведомлений, Maestra-события, pay-systems, motors.md↔motors-domain.md (~80% дубль). → сделано: числа сведены, motors разделён на HOW/RULES; «Дубли» 57 → 84, оставшийся хвост под автогуардом.

P2

Батч-пасс по medium-drift символам/сигнатурам

users task_delete_user, pricing-model Tariff.rubrics M2M, testing-strategy CELERY_ALWAYS_EAGER, askwire DealsJwtOrSessionAuth, messenger (фантомный endpoint/setting), maps frontend-пути. → сделано: 6 нот исправлены.

P2

Дедуп 3 пар и сверка противоречивых чисел

motors.md vs motors-domain.md, владение notifications, единый источник для счётчиков. → сделано: motors split HOW/RULES, каналы/Maestra/askwire/pay-systems/миграции сведены.

P2

Вычистить minor-drift хвост

Стейл-номера строк, off-by счётчики, символы/пути в косметически-отставших нотах. → сделано: 24 ноты подтянуты к коду (по агенту на ноту, сверка с кодом).

P2

Все пункты плана закрыты

P0, P1 и P2 выполнены и запушены (ветка wiki-audit-remediation, 13 коммитов). 6/7 измерений ≥90; все CI-гейты зелёные.

Что уже сильно