---
name: avtero-gemini-audit-fixes-2026-07
description: Gemini прислал 13-пунктный аудит avtero (honesty-паритет/кэш/security/auto-learn); 12 подтверждены и почищены 2026-07-22, плюс докрутка на оставшиеся категории тем же днём
metadata: 
  node_type: memory
  type: project
  originSessionId: 4eea915e-3b47-4cd5-8a0e-bfa29b78a87c
  modified: 2026-07-22T12:17:36.397Z
---

Пользователь получил от Gemini сторонний code-review проекта Автеро (13 находок: 1 critical, 6 high, 4 medium,
2 low) и попросил сначала верифицировать против реального кода, затем почистить всё подтверждённое.

**Почему это важно помнить:** ни одна находка не оказалась полностью ложной, но у половины реальная
серьёзность оказалась ниже заявленной из-за уже существующих частичных митигаций в коде (проект имеет
долгую историю итеративных фиксов над этим же классом багов — видно по `.bak-*` файлам). Полный разбор,
все фиксы и живые e2e-верификации (включая реальный репро security-бага account-merge на проде с последующим
подтверждением, что фикс держит) — в `Projects/Автеро/Changelog.md` (запись 2026-07-22) и `Decisions.md`
(3 новые записи: D-magic-link-merge-needs-clicker-session, D-auto-learn-oem-gate-needs-two-catalog-sources).

**Как применять:** при следующей работе над Автеро — сверить, не тронуты ли те же места повторно
(rendering.py honesty-паритет, live_harvest UNIQUE-ключ, auto_learn OEM-гейт, auth_email_consume session-check).
Если появится ещё один сторонний аудит того же проекта — тот же протокол: верификация параллельными
саб-агентами против реального кода ПЕРЕД любым фиксом, не доверять чужому ревью вслепую (находки могут
ссылаться на устаревшую версию кода или переоценивать серьёзность без учёта существующих митигаций).

Связано: [[avtero_oem_provenance]] (провенанс-гейт, тот же файл где нашёлся пробел с alternatives),
[[avtero_paired_sides]] (та же ambiguous-детекция, которую расширил на tecdoc_local/autodoc_catalog).

**Докрутка тем же днём (2026-07-22, вторая половина сессии):** юзер попросил закрыть пункт «вне скоупа» —
аудит остальных ~85 категорий (= 111 классифицируемых минус 27 уже покрытых `_ENGINE_CATS`). Нашёл и
починил 3 новых конкретных пробела того же класса «tie/allowlist решается молча»:
1. `autodoc_catalog.get_oem_by_vin` — не имел tie-детекции, которую `emex_catalog.get_oem_by_vin` уже
   получил ранее (07-18, `D-two-resolve-paths-need-same-honesty`). **Важно:** та старая Decisions-запись
   утверждала, что «зеркальная копия в autodoc_catalog.py» тоже исправлена — это оказалось НЕВЕРНО (прямая
   читка кода + отсутствие бэкапов файла между 02.07 и 22.07 подтвердили, что фикс туда никогда не попадал).
   `orchestrator.py:5888` пробует autodoc ПЕРВЫМ и возвращает на первом попадании — так что дыра была не
   косметической. Живое подтверждение на реальном VIN `KNAFW411BD5677381`/`handbrake_cable`: autodoc отдал
   `ambiguous:True` на паре тай-кандидатов, а emex для той же пары вообще вернул `None` (был бы единственным
   источником без фикса).
2. `_classify_cat_loose` (emex_catalog.py) — кросс-категорийный тай молча брал первую по dict-порядку
   категорию (не OEM-тай, а КАТЕГОРИЙНЫЙ тай) — теперь возвращает None при тае.
3. `FLUID_CATEGORIES` не хватало `transfer_case_oil` — грейд-жидкость могла получить part-numbered OEM.
   Найдено механической сверкой всех 111 категорий на «масляные» слова против списка из 4 записей.

Плюс дедуп 13 задублированных ключей `_CATEGORY_RU` (12 косметика, `oil_pump` реально расходился текстом).

**Осознанно НЕ стал** повторно живо аудировать остальные 5 allowlist-структур (`_AXLE_CATS_STRICT` и др.) —
в отличие от `_ENGINE_CATS`, они уже активно и инкрементально поддерживаются с явным design-принципом
«add-only, false-negative safe» и version-комментариями с живыми подтверждениями по каждой записи (это
результат отдельного прошлого захода `Full-catalog audit: A/B bug classes`, #162-169 в task-истории) —
повтор задублировал бы огромный объём работы почти без ожидаемого выхода.

**Главный урок сессии:** Decisions.md/Changelog.md могут документировать НАМЕРЕНИЕ фикса, а не гарантию,
что он попал во все зеркальные copy-paste места — сверять с реальным кодом перед тем, как полагаться на
«это уже было исправлено», особенно когда в кодовой базе есть несколько параллельных путей резолва одной
и той же логики (см. `D-two-resolve-paths-need-same-honesty` в Decisions.md, теперь с коррекцией).

Полный разбор докрутки — `Projects/Автеро/Changelog.md` (запись «Докрутка: аудит остальных категорий»,
2026-07-22) и коррекция в `Decisions.md` под `D-two-resolve-paths-need-same-honesty`.
