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
| Name | Description |
|---|---|
ALLOWED_ROOT_KINDS | No description. |
DOCUMENT_CAPABILITY | No description. |
DOCUMENT_CODE | No description. |
DOCUMENT_KIND | No description. |
LOCK_CLOSURE_CODE | No description. |
QUERY_ID_CODE | No description. |
QUERY_INVALID_CODE | No description. |
QUERY_NAME | No description. |
ROOT_KIND_CODE | No description. |
VERSION_CODE | No description. |
Classes
| Name | Description |
|---|---|
AskError | Отказ ПОДГОТОВКИ: {"error": {"code", "message"}}, evaluation-документа |
Prepared | Полный запрос и конверт подготовки (пины мира — вне caseHash). |
ResourcesChecked | Свидетельство шага «ресурсы пакета сверены с локом» (LDC-E8704, PAR-007). |
Functions
| Name | Description |
|---|---|
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_context | resolve-контекст пакета-дела с проверками §11/§23 и замыкания лока. |
lowering_imports | Контекст --imports компилятора для корня, дела и вопроса. |
prepare | Полный EvaluationRequest из пониженных входов пакета-дела. |
query_id_for | queryId §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.
envelopemethod#
def envelope() -> dictPreparedclassdataclass#
class Prepared(request: EvaluationRequest, envelope: dict = dict())Полный запрос и конверт подготовки (пины мира — вне caseHash).
envelopeattributeclass attributeinstance attribute#
envelope: dict = field(default_factory=dict)requestattributeinstance attribute#
request: EvaluationRequestResourcesCheckedclassdataclass#
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: Pathaskfunction#
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) -> Nonecheck_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 локу.
linkfunction#
def link(ir: dict, context: dict) -> dictСлитый мир: узлы корня + узлы зависимостей, диагностики — отказ.
load_contextfunction#
def load_context(root: Path) -> dictlowering_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) -> strDocumentation for Arxo. Writings — blog.arxo.io.
Anonymous visit counts on stats.arxo.io, no cookies.