lawref.cases
Регистрация дел пакета-дела §168.4 (DECISION-0165 §1.4): секция [[cases]].
Секция — метаданные обнаружения по образцу [[tests]] (DECISION-0127): в
нормативную схему манифеста она не входит, оба разбора манифеста её
отбрасывают до валидации. Читают её загрузчик пакета-дела (lawref.ask,
ops::ask компилятора), выпуск (apps/registry/package.py) и ворота
check_lawcase_discovery. Здесь — общий читатель и проверка полноты:
осиротевший .lawcase в границах пакета, запись без файла, запись без
одноимённой декларации case, дубль пары (путь, имя) — отказ LDC-E1354,
а не тихий ноль (класс молчаливой потери CLAUDE.md).
Attributes
| Name | Description |
|---|---|
CASES_CODE | No description. |
SKIPPED_DIRS | No description. |
Classes
| Name | Description |
|---|---|
CasesError | Отказ регистрации дел; code — канонический код диагностики. |
RegisteredCase | Одна строка [[cases]]: имя декларации и путь файла внутри пакета. |
RegistrationChecked | Свидетельство шага «регистрация дел пакета полна» (LDC-E1354, §168.4). |
Functions
| Name | Description |
|---|---|
check_package_registration | Регистрация дел пакета: отказ CasesError, иначе свидетельство. |
check_registration | Полнота регистрации дел пакета: возвращает список записей либо |
declared_case_names | Имена деклараций case в исходнике (поверхностный разбор: одна |
discover_lawcases | Все .lawcase в границах пакета: без deps/, выпусков и вложенных |
read_cases_section | [[cases]] манифеста в порядке записи; форма каждой строки проверяется. |
select_case | Выбор дела по имени; при одном зарегистрированном деле имя необязательно. |
CASES_CODEattributemodule attribute#
CASES_CODE = 'LDC-E1354'SKIPPED_DIRSattributemodule attribute#
SKIPPED_DIRS = frozenset({'deps', 'release', 'releases', '.git', '__pycache__', 'target'})CasesErrorclass#
class CasesError(message: str)Bases: ValueError
Отказ регистрации дел; code — канонический код диагностики.
codeattributeclass attributeinstance attribute#
code = CASES_CODEmessageattributeinstance attribute#
message = messageRegisteredCaseclassdataclass#
class RegisteredCase(name: str, path: str)Одна строка [[cases]]: имя декларации и путь файла внутри пакета.
filemethod#
def file(root: Path) -> PathRegistrationCheckedclassdataclass#
class RegistrationChecked(root: Path, entries: tuple[RegisteredCase, ...])Свидетельство шага «регистрация дел пакета полна» (LDC-E1354, §168.4).
Регистрация — свойство манифеста и дерева пакета, а не дела. Хост,
исполняющий много дел одного открытого пакета (population-impact,
DECISION-0255 §1), проверяет её один раз при открытии стороны и подаёт
свидетельство в ask.prepare/ask.ask: без него каждая строка читала
манифест и все .lawcase пакета заново (O(N²) на пакет из N дел, O(N³) на
прогон; повтор Ф6, 16.09.2026, §9). Одиночный ask свидетельства не имеет
и проверяет на прежнем месте — порядок отказов §168.4 не меняется. Образец —
ask.ResourcesChecked; у порта регистрация на строке не вызывается вовсе.
entriesattributeinstance attribute#
entries: tuple[RegisteredCase, ...]rootattributeinstance attribute#
root: Pathcheck_package_registrationfunction#
def check_package_registration(root: Path) -> RegistrationCheckedРегистрация дел пакета: отказ CasesError, иначе свидетельство.
check_registrationfunction#
def check_registration(root: Path, registered: list[RegisteredCase] | None = None) -> list[RegisteredCase]Полнота регистрации дел пакета: возвращает список записей либо
поднимает CasesError с первой найденной потерей.
Проверяются: дубль пары (путь, имя); запись без файла; запись без
одноимённой декларации в файле; файл .lawcase в границах пакета, не
названный ни одной записью; декларация case файла, не названная ни одной
записью (вторая декларация в файле — тоже дело, и его потеря молчалива).
Имена записей индексируются по пути одним проходом, декларации файла
читаются один раз за вызов (как law_cli_core::ask::check_registration):
прежний перебор всех записей на каждый файл стоил O(N²). Порядок и текст
отказов прежние: записи — в порядке манифеста, файлы — в порядке обхода.
declared_case_namesfunction#
def declared_case_names(text: str) -> list[str]Имена деклараций case в исходнике (поверхностный разбор: одна
декларация на строку заголовка, как пишет форматер §227).
discover_lawcasesfunction#
def discover_lawcases(root: Path) -> list[Path]Все .lawcase в границах пакета: без deps/, выпусков и вложенных
пакетов (собственный law.toml — другой корень, T102).
read_cases_sectionfunction#
def read_cases_section(law_toml_bytes: bytes) -> list[RegisteredCase][[cases]] манифеста в порядке записи; форма каждой строки проверяется.
Секция читается ИЗ СЫРОГО TOML: parse_manifest её отбрасывает, и это
намеренно (нормативная схема манифеста не растёт под метаданные обнаружения).
select_casefunction#
def select_case(registered: list[RegisteredCase], wanted: str | None) -> RegisteredCaseВыбор дела по имени; при одном зарегистрированном деле имя необязательно.
Пустой выбор при нескольких делах и неизвестное имя — отказ LDC-E1354.
Documentation for Arxo. Writings — blog.arxo.io.
Anonymous visit counts on stats.arxo.io, no cookies.