Skip to content

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

NameDescription
CASES_CODENo description.
SKIPPED_DIRSNo description.

Classes

NameDescription
CasesErrorОтказ регистрации дел; code — канонический код диагностики.
RegisteredCaseОдна строка [[cases]]: имя декларации и путь файла внутри пакета.
RegistrationCheckedСвидетельство шага «регистрация дел пакета полна» (LDC-E1354, §168.4).

Functions

NameDescription
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_CODE

messageattributeinstance attribute#

message = message

RegisteredCaseclassdataclass#

class RegisteredCase(name: str, path: str)

Одна строка [[cases]]: имя декларации и путь файла внутри пакета.

nameattributeinstance attribute#

name: str

pathattributeinstance attribute#

path: str

filemethod#

def file(root: Path) -> Path

RegistrationCheckedclassdataclass#

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: Path

check_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.