contractroot

package
v1.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 10, 2026 License: Apache-2.0 Imports: 3 Imported by: 0

Documentation

Overview

Package contractroot объявляет ЗАКРЫТОЕ множество корней дерева контрактов и резолвит домен в свой корень ОБХОДОМ дерева.

ПРЕДМЕТ. Пока корень был один, всякий, кому нужно было дерево контрактов или имя пакета домена, писал литерал — `proto/kacho/cloud`, `"kacho.cloud."+домен`, `filepath.Join(root, "kacho", "cloud")`. Литералов таких в дереве десятки, и они были верны ровно до второго корня.

ЧЕМ ЭТО ПЛОХО, И ЭТО ИЗМЕРЕНО. Корней стало два: платформа называет себя `kacho`, служба доступа — `kaname` (KAN-PKG-1, решение Р14 замысла перехода). Проверка, отбирающая популяцию литералом приставки, после переезда домена НЕ КРАСНЕЕТ и не зеленеет — она МОЛЧИТ: обход находит меньше файлов, чем прежде, и честно печатает «находок ноль» по опустевшей популяции. Отличить это от исправной работы можно только переписью объёма осмотренного, и половина проверок дерева её печатает именно поэтому.

РЕШЕНИЕ. Перечень корней объявлен ЗДЕСЬ и в единственном экземпляре; домен резолвится в корень обходом, а не выводится из имени. Имя домена о своём корне не сообщает ничего, и всякий вывод по имени был бы второй копией этого перечня — расходящейся молча.

ПУСТОЙ ПЕРЕЧЕНЬ ОЗНАЧАЛ БЫ «НИ ОДНОГО КОРНЯ», то есть пустую популяцию у каждого читателя. Читатели обязаны ронять прогон на пустом обходе сами — пакет за них этого не решает, но и пустым перечень быть не может: он объявлен константой, а не собран из окружения.

Index

Constants

This section is empty.

Variables

View Source
var Roots = []string{"kacho", "kaname", "corelib"}

Roots — объявленное закрытое множество корней дерева контрактов.

Порядок значим только для устойчивости вывода: домен обязан лежать РОВНО под одним корнем, и `ResolveDomain` возвращает первый совпавший. Два корня, несущие домен с одним именем, — находка дерева, а не случай, который этот пакет обязан разрешать. Третий корень — `corelib` — это НЕЙТРАЛЬНЫЙ дом словаря аннотаций доступа (`corelib.authz.v1`, решение владельца Р12, задача #2089). Домена под ним нет и не предполагается: `CloudDirs` вернёт только существующие каталоги, поэтому резолв домена он не расширяет. Он нужен здесь потому, что читатели этого перечня спрашивают не только «где домен», но и «НАШ ли это пакет»: без него нейтральный словарь в собственном дереве судился бы как чужой код.

Functions

func CloudDirs

func CloudDirs(protoDir string) []string

CloudDirs — существующие каталоги `<protoDir>/<корень>/cloud`. Возвращает только те, что есть на диске: корень, объявленный и не заведённый, популяцию не расширяет и обход не роняет.

func DomainRoots

func DomainRoots(protoDir string) []string

DomainRoots — корни, под которыми ДЕЙСТВИТЕЛЬНО лежит дерево доменов (`<корень>/cloud`). Выводится из CloudDirs, а не выписывается вторым списком.

Существует ради обходчиков, которым нужен относительный префикс, а не путь на диске. Прежде они шли по Roots напрямую и склеивали `proto/<корень>/cloud`, молча полагая, что домены есть у КАЖДОГО корня. Полагание было верно, пока корни были только доменными, и отказало на первом же нейтральном корне (`corelib`, задача #2089): обходчик падал на несуществующем каталоге. Место, где «корень без доменов законен», объявлено ОДНО — здесь, — иначе каждый обходчик заводил бы свою проверку и они разошлись бы молча.

ПУСТОЙ ОТВЕТ — НАХОДКА ВЫЗЫВАЮЩЕГО, а не повод продолжить: ноль доменных корней означает, что дерева контрактов нет вовсе. Пакет за вызывающего этого не решает — ронять прогон обязан он сам.

func Domains

func Domains(protoDir string) []string

Domains — имена деревьев доменов под всеми объявленными корнями.

func HasAnyPrefix

func HasAnyPrefix(s string, prefixes []string) bool

HasAnyPrefix — начинается ли s с приставки какого-нибудь объявленного корня.

Существует ради вызывающих, которые прежде писали `strings.HasPrefix(s, "kacho.")`. Литерал был верен, пока корень был один, и после появления второго перестал НАХОДИТЬ дерево второго корня — не покраснел и не позеленел, а замолчал.

func NamePrefixes

func NamePrefixes() []string

NamePrefixes — корни в форме приставки ПОЛНОГО ИМЕНИ (`kacho.`, `kaname.`).

Отдельно от PackagePrefixes: не всякий контракт дерева лежит под `<корень>.cloud.` — каталог прав объявлен как `kacho.iam.authz.catalog.v1`. Отбор по `.cloud.` оставил бы его вне популяции, и это было бы МОЛЧАНИЕ, а не находка.

func PackageOf

func PackageOf(protoDir, domain string) (string, bool)

PackageOf — имя proto-пакета домена (`<корень>.cloud.<домен>.v1`), РЕЗОЛВЕННОЕ по дереву. Именно это заменяет `"kacho.cloud." + домен + ".v1"`: строка собиралась из литерала, поэтому после переезда домена называла пакет, которого нет, и дескрипторы по ней не находились вовсе.

func PackagePrefixes

func PackagePrefixes() []string

PackagePrefixes — те же корни в форме приставки имени пакета (`kacho.cloud.`, `kaname.cloud.`). Выводится из Roots, а не выписывается: выписанный перечень разошёлся бы с Roots при добавлении третьего корня.

func PathPrefixes

func PathPrefixes() []string

PathPrefixes — те же корни в форме приставки ПУТИ (`kacho/`, `kaname/`).

func ResolveDomain

func ResolveDomain(protoDir, domain string) (root, dir string, ok bool)

ResolveDomain — корень и каталог, под которым лежит дерево домена. ok=false означает, что домена нет НИ ПОД ОДНИМ объявленным корнем: это находка вызывающего, а не повод молча продолжить с пустой популяцией.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL