Аудит · вики монорепо core
Глубокая сверка «заметка ↔ код» силами автономного мультиагентного аудита. По агенту на каждую заметку плюс 7 сквозных измерений — схема, ссылки, индексы, дубли, рецепты, покрытие, пригодность для AI-агента.
Вики — по-настоящему полезный, хорошо спроектированный слой для AI-поиска: 67 заметок со схемой, реальные код-идентификаторы в grep-подсказках, дисциплинированная hub-and-spoke архитектура, ноль битых ссылок и рабочий тулинг регенерации/валидации.
Стартовый аудит нашёл 10 заметок с major-drift (ложные «сделано», перевёрнутые атрибуции, несуществующие флаги/методы, рецепты с нерабочим кодом) — все переписаны и переаудированы (эти 10: 52 → 86). Полный ре-аудит на текущем дереве: по всей вики major-drift 10 → 3, accurate 16 → 34, медиана готовности 89.
зачем нужна готовность вики — и кто на неё опирается
Как устроена фича и какие бизнес-правила — почему так сделано и где границы, — не дёргая разработчиков. Точность заметок = меньше неверных вводных в решениях.
Где границы, какие правила и настройки по 5 рынкам, что и как проверять. Заметка, отставшая от кода, = пропущенный кейс, поэтому синхрон критичен.
Архитектурный контекст и готовые рецепты до правки → меньше регрессий. Именно здесь major-drift опаснее всего — и потому вычищен в первую очередь.
7 независимых аудиторов · стартовый аудит → финал
6 из 7 измерений ≥90 — рецепты, схема, AI-usability, индексы, покрытие, граф ссылок. Дубли (84) — структурно чистые (motors разделён на HOW/RULES, единое framing каналов/событий, дедуп askwire/Maestra); остаток ~15 пунктов — длинный хвост межнотных числовых совпадений («число X в ноте A vs ноте B») с убывающей отдачей.
измерено на текущем дереве — полный ре-аудит 75 нот
Полный ре-аудит на текущем дереве: 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 исправлены после аудита
| Заметка | Было → Стало | Статус |
|---|---|---|
| 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 | исправлено |
дедуплицировано по всем заметкам, по приоритету
Каждая заставит агента написать сломанный код, пропустить реальную работу или сделать ложное допущение о безопасности. Рецепты выполняются «дословно» — их drift особенно опасен. → сделано: все 10 переписаны и переаудированы (эти 10: major-drift → 0, 52→86), закоммичены.
tip-коммит отгружал устаревшие index.jsonl / code-to-wiki / README — чистый checkout падал на validate-wiki. → сделано (пункт A): 2 коммита, дерево зелёное.
Ручная чистка переведена в автогейты. → сделано: 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) — это корень «дубли-асимптоты».
pay/voucher.py → pay/models/voucher.py в AGENTS.md, SKILL.md, rules/wiki.md. → сделано во всех трёх; путь резолвится, под CI-guard'ом.
features/bdui.md, domain/post-ad-flow.md, features/adverts-business.md. → сделано: 3 ноты созданы и проиндексированы; покрытие 62 → 93.
askwire, каналы уведомлений, Maestra-события, pay-systems, motors.md↔motors-domain.md (~80% дубль). → сделано: числа сведены, motors разделён на HOW/RULES; «Дубли» 57 → 84, оставшийся хвост под автогуардом.
users task_delete_user, pricing-model Tariff.rubrics M2M, testing-strategy CELERY_ALWAYS_EAGER, askwire DealsJwtOrSessionAuth, messenger (фантомный endpoint/setting), maps frontend-пути. → сделано: 6 нот исправлены.
motors.md vs motors-domain.md, владение notifications, единый источник для счётчиков. → сделано: motors split HOW/RULES, каналы/Maestra/askwire/pay-systems/миграции сведены.
Стейл-номера строк, off-by счётчики, символы/пути в косметически-отставших нотах. → сделано: 24 ноты подтянуты к коду (по агенту на ноту, сверка с кодом).
P0, P1 и P2 выполнены и запушены (ветка wiki-audit-remediation, 13 коммитов). 6/7 измерений ≥90; все CI-гейты зелёные.