# Граф составляющих объекта конфигурации Объект конфигурации — это корень, а не минимальная единица работы. Его составляющие: модуль объекта, формы и их модули, макеты, схема компоновки данных (СКД), а после декодирования СКД — наборы данных, запросы, поля, ресурсы и варианты. Для записи нужен адрес именно составляющей и доказанный физический носитель этой составляющей. ## Публичная инвентаризация `metadata.object.components` — read-only фасад над уже доказанными SQL декодерами. Он принимает обычный селектор владельца (`ref` либо `kind` и `name`, при необходимости `extension`) и возвращает граф: - корень `metadata_object`; - только реально найденные `module`, `form`, `template` и `scd`; - публичные `path` и `read_selector` каждого потомка; - `unresolved` для областей, которые не были подтверждены. Метод не создаёт потомок потому, что он обычно есть у такого типа объекта. Например, пустой ответ `metadata.object.modules` у общей формы означает «модуль этим маршрутом не найден», а не повод назвать форму модулем. Пример запроса: ```json { "method": "metadata.object.components", "payload": { "base_id": "upo_test", "extension": "test2", "ref": "Report.tt_Отчет", "include_storage": false } } ``` `read_selector` можно передать следующему read-only методу. Это не является разрешением на запись: запись выбирает компонент по его `path`, повторно подтверждает конкретный carrier/stream и разрешается только для семейства контейнеров с доказанным byte-preserving кодеком. ## Иерархия и кодеки Логический BSL один и тот же независимо от владельца, но его физический носитель может различаться. Поэтому не нужны отдельные эвристики «для формы» и «для отчёта»: нужен реестр семейств carrier-кодеков. Один кодек применяется к нескольким типам объектов лишь после доказательства одинаковых границ, непрозрачных атомов и round-trip проверки. Текущий пример: модуль общего формы в `upo_test/test2` имеет доказанный write-кодек saved-state; обнаруженный поток модуля отчёта — только read-only structural codec. Второй компонент может быть найден и прочитан, но не получит разрешение на SQL-запись, пока его служебный хвост не будет декодирован.