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

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

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

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

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

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

0
major-drift осталось
52→86
10 исправленных нот
+9
общая: 78 → 87

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

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

🧭

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

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

🧪

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») с убывающей отдачей.

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

72 заметки по глубине сверки с кодом

21
51
accurate — 21 · сверено, всё сходится minor-drift — 51 · косметика (стейл-строки, счётчики) major-drift — 0 · было 10, все исправлены

После ремедиации: ни одной major-drift заметки. Механические сигналы чистые — 0 отсутствующих путей в code:, 0 битых related:, 0 нерезолвящихся grep-подсказок. Косметический minor-drift-хвост вычищен: 24 ноты подтянуты к коду (стейл-номера строк, off-by счётчики, символы/пути), а числа, что расходились, теперь под автогуардом 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 переписаны, переаудированы (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. → сделано в AGENTS.md/SKILL.md; в rules/wiki.md остался 1 хвост (в добивании).

P1

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

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

P1

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

askwire (61+ vs 43 в realestate.md), каналы уведомлений (4 vs 6 vs модель 3), Maestra-события (состав 12 расходится), pay-systems (30+ vs 26), motors.md↔motors-domain.md (~80% дубль). Это тянет «Дубли» вниз до 57 — основной остаток до all-90.

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

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

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

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