Documentation
¶
Overview ¶
Package moduleselfgating — ОБЪЯВЛЕНИЕ отношений модели прав, которые модуль платформы гейтит СВОИМ прод-кодом.
───────────────────────────────────────────────────────────────────────────── ЗАЧЕМ ЭТО СУЩЕСТВУЕТ
Отношение, которое материализация ПРОИЗВОДИТ, обязано кем-то ЧИТАТЬСЯ при решении о доступе: оно оплачивается трижды — выводом, записью и индексом, — и отношение без читателя есть стоимость без предмета. Читателей три: каталог прав края, вывод самой модели и ПРОД-КОД модуля-владельца. Третий источник ловит решения, которых каталог выразить не может: часть модулей гейтит собственные RPC сама.
Первые два источника служба доступа читает у себя (каталог она везёт побайтовой копией, модель — своим каноном). Третий лежал в дереве ПЛАТФОРМЫ, и после разреза службы читать его было бы неоткуда: утверждение перестало бы исполняться в ОБОИХ деревьях — у службы нет чужого кода, у платформы нет модели, — а вопрос «оплачивается ли это отношение впустую» задать стало бы некому. Тихо: ни красного, ни зелёного.
───────────────────────────────────────────────────────────────────────────── ПОЧЕМУ ОБЪЯВЛЕНИЕ, А НЕ ВЫВОД — И ЧТО ЗА ЭТО ПЛАТИТСЯ
Вывести это из дерева может только тот, у кого дерево есть; прочитать — только тот, у кого есть модель. После разреза это РАЗНЫЕ продукты, и общего дерева у них не будет ни одного. Значит одна сторона обязана ОБЪЯВИТЬ факт, а другая — его прочитать; форма связи выбрана та же, что у словаря написаний модулей (`pkg/platformmodules`): объявление живёт в ФУНДАМЕНТЕ, который оба продукта тянут зависимостью, а его ИСТИННОСТЬ держит гейт ПЛАТФОРМЫ.
Плата названа прямо: объявленное расходится с деревом молча, если его никто не сверяет. Поэтому сверка обязательна и двусторонняя — гейт платформы (`internal/repohygiene`, TestModuleSelfGatingMatchesTheProdCodeOfEachModule) требует РАВЕНСТВА: отношение, объявленное и не читаемое, — находка ровно так же, как читаемое и не объявленное. Обе координаты этой сверки платформенные, поэтому разрез она переживает.
───────────────────────────────────────────────────────────────────────────── ЧЕГО ЗДЕСЬ НЕТ И ПОЧЕМУ
Службы доступа здесь НЕТ, и это не пропуск. Её собственный прод-код лежит в её же поставке, поэтому свой источник она ВЫВОДИТ обходом собственного модуля — в обеих посадках одинаково. Объявить его здесь значило бы завести второе место об одном предмете там, где вывод доступен: после разреза сверять объявление с кодом службы платформе стало бы нечем, и запись пережила бы свой предмет.
Правило шва: КАЖДАЯ сторона ВЫВОДИТ то, чем владеет, и ОБЪЯВЛЯЕТ то, чем не владеет. Тогда ни одна координата сверки границу разреза не пересекает.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Modules ¶
func Modules() []string
Modules — короткие имена модулей, о которых объявление что-либо говорит.
Отдельно от Relations ради вызывающего, который сверяет объявление с деревом: без перечня «объявлено про модуль, которого нет» и «про модуль не объявлено ничего» были бы неотличимы.
func Reads ¶
Reads — гейтит ли модуль это отношение сам. Удобная форма Relations для единственного вопроса, который задаёт читатель на пути проверки.
func Relations ¶
Relations — отношения, которые модуль гейтит своим прод-кодом.
Различайте два «нет»: ok=false — про модуль не объявлено ничего (его прод-код не читает ни одного отношения либо модуля нет вовсе); ok=true с пустым перечнем здесь не бывает by construction — пустая запись есть запись без предмета, и её отвергает гейт платформы.
Возвращается КОПИЯ: перечень объявления вызывающим не правится.
Types ¶
This section is empty.