# Обход без потерь *Построение мета-модели · урок 3 из 6 · ~15 мин* ## Что вы узнаете Контракт обхода (ARCH-017): как модель гарантирует, что любой читатель может посетить каждый файл, знать, что каждый из них означает, и доказать, что ничего не пропущено. ## Почему "прочитать всё" нуждается в контракте Модель заслуживает доверия ровно настолько, насколько читатель способен убедиться, что увидел её целиком. Без контракта каждый читатель импровизирует: какие-то каталоги просматривает бегло, какие-то пропускает, о смысле файлов догадывается. С агентами хуже: агент, молча пропустивший каталог, уверенно ответит так, будто не пропускал. ARCH-017 превращает добросовестность в механику. ## Объявление обхода Порядок обхода - это данные, объявленные сверху вниз: - Манифест репозитория объявляет **упорядоченный список бандлов** (в порядке зависимостей, основания первыми; циклы не соответствуют стандарту). - Каждый бандл объявляет свои упорядоченные слои; каждый слой перечисляет своё содержимое с указанием **вида** и однострочного смысла. - Репозитории, у которых имена файлов несут вид по соглашению, могут вместо этого объявить **централизованные правила** в манифесте: упорядоченные glob-шаблоны, отображаемые в виды, побеждает первое совпадение, с подстановкой `{prefix}`, так что одно правило вроде `kind: "object/{prefix}"` классифицирует целое соглашение об именовании. Два обходчика, получившие одну и ту же версию репозитория, обязаны посетить одни и те же файлы в одном и том же порядке: канонический обход детерминирован. ## Правило полноты Каждый файл в репозитории попадает ровно в один из трёх классов: 1. **Перечисленный**: сопоставлен объявлением или правилом классификации; 2. **Известного места**: лежит в зарезервированном месте (canon/, raw/, artifacts/, bootstrap) и наследует его смысл; 3. **Исключённый**: явно указан как не несущий смысла модели (внутренности системы контроля версий, конфиги редактора). Обходчик сравнивает полный рекурсивный список файлов с объединением трёх классов. Файл, не попавший ни в один, - это **сирота**; попавший в два - неоднозначность; и то и другое является провалом структурной валидации. Исключать смысловое содержимое, лишь бы пройти проверку, - несоответствие стандарту: список исключений это объявление, а не свалка. ## Виды и происхождение Каждый классифицированный файл несёт **вид** (чем он является *в модели*: объект, событие, контракт, канон, сырьё, артефакт, документ, инструмент...) и **происхождение**: авторское, собранное или порождённое. Происхождение решает вопрос редактируемости: авторские файлы правятся на месте, собранные и порождённые - никогда: исправление принадлежит источнику или генератору. Именно это различие позже делает владение данными обеспечиваемым. ## Как ощущается запуск обходчика Обе рабочие модели поставляют обходчик (`tools/mu-walk.ps1`), который выполняет канонический обход и пишет отчёт в `artifacts/`. С полей: - Модель Orkestron.AI: 613 файлов, 0 сирот. Первый прогон не выявил ничего: небольшой дисциплинированный репозиторий. - Модель DevTeam.Games: 2613 файлов на диске, включая свидетельства, игнорируемые git, и 146 МБ подключённых зеркал исходников. Первый прогон нашёл **47 настоящих сирот**: прототипы дизайна и UI-материалы, которых никто не объявлял, и одну запись, чей префикс вида (`i18n`) сломал наивное регулярное выражение классификации. Каждая сирота стала *правилом*, а не исключением: карта стала правдивее. - Оба обходчика проверены и на отрицательном сценарии: подложите посторонний файл - обход падает с кодом 1 и называет его. В этом и выигрыш: "ничего не потеряно" перестаёт быть надеждой и становится зелёной галочкой, которую можно потребовать перед тем, как доверять модели, и передать зелёной следующей сессии. ## Главное - Порядок объявлен, классификация тотальна, покрытие проверяется: сироты валят сборку. - Вид говорит, чем файл является; происхождение (авторское/собранное/порождённое) говорит, можно ли его править. - Реальные репозитории проходят проверку: унаследованные раскладки, бинарные материалы и гигантские зеркала классифицируются горсткой правил. ## Копнуть глубже - [Обход модели и известные места (ARCH-017)](/spec/#02-architecture/Model-Traversal-and-Layout.md) - [Уровни валидации V0-V5](/spec/#02-architecture/Validation.md) Дальше: [Владение данными](04-mastership.md)