Skip to content

lawref.ask

Эталонная подготовка операции ask §168.4 (DECISION-0165 §1.10–§1.11).

Оракул раньше движка (инвариант 6): здесь — независимая от law-cli подготовка полного EvaluationRequest из пакета-дела:

пакет + выбранное дело + вопрос + явные ресурсы
→ регистрация дел ([[cases]], `lawref.cases`)
→ resolve-контекст и пины (`lawref.resolver.load_package_context`)
→ замыкание лока == замыкание импортов (LDC-E1358)
→ корень: закрытый состав (LDC-E1355), imports == лок
→ связывание мира (`link_world`)
→ дело и вопрос, пониженные ПОД ТЕМ ЖЕ контекстом
→ документы дела ↔ ресурсы лока (LDC-E8704)
→ queryId (LDC-E1356)
→ EvaluationRequest (semanticVersion — из корневого CLIR)
→ evaluate.

Понижение исходников (.law, .lawcase, строка evaluate …;) — работа компилятора (общий Rust frontend, как у .lawtest): модуль принимает УЖЕ пониженные документы, а вызов lawc живёт только в CLI python -m lawref ask (прецедент _goals_documents в __main__). Хост ничего не вычисляет и не фильтрует (инвариант 5) и ничего не дописывает в case.options: всё, что входит в caseHash, пишет понижение дела (§168.4).

Attributes

NameDescription
ALLOWED_ROOT_KINDSNo description.
DOCUMENT_CAPABILITYNo description.
DOCUMENT_CODENo description.
DOCUMENT_KINDNo description.
LOCK_CLOSURE_CODENo description.
QUERY_ID_CODENo description.
QUERY_INVALID_CODENo description.
QUERY_NAMENo description.
ROOT_KIND_CODENo description.
VERSION_CODENo description.

Classes

NameDescription
AskErrorОтказ ПОДГОТОВКИ: {"error": {"code", "message"}}, evaluation-документа
PreparedПолный запрос и конверт подготовки (пины мира — вне caseHash).
ResourcesCheckedСвидетельство шага «ресурсы пакета сверены с локом» (LDC-E8704, PAR-007).

Functions

NameDescription
askПодготовка + evaluate: (evaluation-документ, конверт подготовки).
check_documentsКаждый evidence с uri, указывающим внутрь пакета, обязан быть
check_package_resourcesРесурсы пакета ↔ лок: первый расход — отказ LDC-E8704, иначе свидетельство.
check_queryФорма вопроса — по query.schema.json; queryId — по §172.
check_rootЗакрытый состав корня (LDC-E1355) и соответствие imports локу.
linkСлитый мир: узлы корня + узлы зависимостей, диагностики — отказ.
load_contextresolve-контекст пакета-дела с проверками §11/§23 и замыкания лока.
lowering_importsКонтекст --imports компилятора для корня, дела и вопроса.
prepareПолный EvaluationRequest из пониженных входов пакета-дела.
query_id_forqueryId §172 (DECISION-0165 §1.6): короткое имя дополняется до URN

ALLOWED_ROOT_KINDSattributemodule attribute#

ALLOWED_ROOT_KINDS = frozenset(
  {
    'deadline_policy',
    'temporal_resolution_policy',
    'evidence_policy',
    'calendar_snapshot'
  }
)

DOCUMENT_CAPABILITYattributemodule attribute#

DOCUMENT_CAPABILITY = 'evidence'

DOCUMENT_CODEattributemodule attribute#

DOCUMENT_CODE = 'LDC-E8704'

DOCUMENT_KINDattributemodule attribute#

DOCUMENT_KIND = 'document'

LOCK_CLOSURE_CODEattributemodule attribute#

LOCK_CLOSURE_CODE = 'LDC-E1358'

QUERY_ID_CODEattributemodule attribute#

QUERY_ID_CODE = 'LDC-E1356'

QUERY_INVALID_CODEattributemodule attribute#

QUERY_INVALID_CODE = 'QUERY_INVALID'

QUERY_NAMEattributemodule attribute#

QUERY_NAME = re.compile('[A-Za-z0-9_.-]+')

ROOT_KIND_CODEattributemodule attribute#

ROOT_KIND_CODE = 'LDC-E1355'

VERSION_CODEattributemodule attribute#

VERSION_CODE = 'LDC-E1359'

AskErrorclass#

class AskError(code: str, message: str)

Bases: ValueError

Отказ ПОДГОТОВКИ: {"error": {"code", "message"}}, evaluation-документа нет (DECISION-0165 §1.10). Отличим от вычисленного fatal issue.

codeattributeinstance attribute#

code = code

messageattributeinstance attribute#

message = message

envelopemethod#

def envelope() -> dict

Preparedclassdataclass#

class Prepared(request: EvaluationRequest, envelope: dict = dict())

Полный запрос и конверт подготовки (пины мира — вне caseHash).

envelopeattributeclass attributeinstance attribute#

envelope: dict = field(default_factory=dict)

requestattributeinstance attribute#

request: EvaluationRequest

ResourcesCheckedclassdataclass#

class ResourcesChecked(root: Path)

Свидетельство шага «ресурсы пакета сверены с локом» (LDC-E8704, PAR-007).

Сверка — свойство дерева пакета и его лока, а не дела: discover_resources обходит всё дерево, документы конкретного дела сверяет отдельно check_documents. Хост, понижающий много дел одного пакета (population-impact, DECISION-0255 §1), сверяет ресурсы один раз при открытии стороны и подаёт свидетельство в prepare/ask: без него пакет из N дел стоил O(N²) обходов дерева (замер Ф6, 15.09.2026). Одиночный ask свидетельства не имеет и сверяет на прежнем месте — порядок отказов §168.4 не меняется. Порт — law_cli_core::ask::ResourcesChecked.

rootattributeinstance attribute#

root: Path

askfunction#

def ask(root: Path, *, case_name: str | None, root_ir: dict, case: dict, query: dict, query_id: str | None = None, evaluator: Callable[[EvaluationRequest], dict] | None = None, context: dict | None = None, resources: ResourcesChecked | None = None, registration: RegistrationChecked | None = None) -> tuple[dict, dict]

Подготовка + evaluate: (evaluation-документ, конверт подготовки).

check_documentsfunction#

def check_documents(root: Path, lock: dict, case: dict) -> None

Каждый evidence с uri, указывающим внутрь пакета, обязан быть закреплён ресурсом лока вида document с тем же хэшем байтов (§168.4).

Целостность байтов — отказ подготовки, а не признание evidence подлинным: приёмка опор остаётся у EvidencePolicy §78.2.

check_package_resourcesfunction#

def check_package_resources(root: Path, lock: dict) -> ResourcesChecked

Ресурсы пакета ↔ лок: первый расход — отказ LDC-E8704, иначе свидетельство.

check_queryfunction#

def check_query(query: dict, namespace: str, case_name: str, explicit_id: str | None = None) -> dict

Форма вопроса — по query.schema.json; queryId — по §172.

check_rootfunction#

def check_root(ir: dict, context: dict) -> None

Закрытый состав корня (LDC-E1355) и соответствие imports локу.

def link(ir: dict, context: dict) -> dict

Слитый мир: узлы корня + узлы зависимостей, диагностики — отказ.

load_contextfunction#

def load_context(root: Path) -> dict

resolve-контекст пакета-дела с проверками §11/§23 и замыкания лока.

lowering_importsfunction#

def lowering_imports(context: dict) -> list[dict]

Контекст --imports компилятора для корня, дела и вопроса.

preparefunction#

def prepare(root: Path, *, case_name: str | None, root_ir: dict, case: dict, query: dict, query_id: str | None = None, registered: list[RegisteredCase] | None = None, context: dict | None = None, resources: ResourcesChecked | None = None, registration: RegistrationChecked | None = None) -> Prepared

Полный EvaluationRequest из пониженных входов пакета-дела.

root_ir — CLIR корня, пониженный компилятором ПОД контекстом lowering_imports(load_context(root)); case — документ дела, пониженный под тем же контекстом и той же программой; query — вопрос §172. context — уже загруженный load_context(root) вызывающего: тот же контекст, под которым понижены входы, не читается и не валидируется второй раз (цена — минуты jsonschema на большом мире). resources — свидетельство check_package_resources того же корня: ресурсы пакета уже сверены открытием пакета и второй раз не обходятся. registration — свидетельство cases.check_package_registration того же корня: регистрация дел уже проверена открытием пакета, манифест и .lawcase второй раз не читаются.

query_id_forfunction#

def query_id_for(namespace: str, case_name: str, given: str | None) -> str

queryId §172 (DECISION-0165 §1.6): короткое имя дополняется до URN пространства пакета-дела, полный URN сверяется с пространством.

Documentation for Arxo. Writings — blog.arxo.io.

Anonymous visit counts on stats.arxo.io, no cookies.