lawref.verbalize
B1 — вербализатор CLIR (WP-25 MVP; LAYERS-SURFACES §3).
Детерминированная односторонняя проекция CLIR в контролируемый русский
текст. Продукт — ревью-артефакт .lawread.md: юрист читает и утверждает текст,
а не код. Вербализация НЕ является официальным текстом и не имеет
семантической силы; расхождение утверждённого текста и семантики — всегда
дефект template pack (LS §3.1).
Контракт (LS §3.2), проверяемый VER-векторами:
- чистая функция: ни сети, ни часов, ни внешних сервисов, ни LLM; одинаковые (CLIR, язык, версия pack) дают байтово одинаковый текст;
- вербализация получает content hash (sha256 байтов документа);
- тотальность (LS §3.3): у каждого node kind либо шаблон, либо видимый
маркер
⟦не вербализуется: … (LDC-E8201)⟧. Молчаливый пропуск запрещён — он прячет семантику от утверждающего.
Формульный стиль — ступень (1) LS §3.8: слоты стоят в именительном падеже и
кавычках; морфологические формы §218.1 используются, если метка их несёт, и
деградируют к text, если нет.
Attributes
| Name | Description |
|---|---|
FORMS_FORMAT | No description. |
GAP_WHAT_KEYS | No description. |
GAP_WHAT_RU | No description. |
SECTION_ORDER | No description. |
SUPPORTED_PACK_FORMATS | No description. |
VERBALIZATION_GAP | No description. |
Classes
| Name | Description |
|---|---|
PackError | Дефект template pack: отсутствует обязательная фраза или поле. |
Functions
| Name | Description |
|---|---|
load_pack | Загрузка template pack. Pack — данные, а не код (LS §3.2). |
local_name | Локальное имя StableId: часть после #, у порождённых — с суффиксом. |
render_atom | No description. |
render_formula | No description. |
render_node | Тело блока одной декларации: список абзацев (без заголовка). |
render_term | No description. |
verbalize | CLIR → ревью-документ .lawread.md. |
FORMS_FORMATattributemodule attribute#
FORMS_FORMAT = 'law.verb/0.2'GAP_WHAT_KEYSattributemodule attribute#
GAP_WHAT_KEYS: tuple[str, ...] = tuple(sorted(GAP_WHAT_RU))GAP_WHAT_RUattributemodule attribute#
GAP_WHAT_RU: dict[str, str] = {
'node.kind': '{kind}',
'node.no_kind': 'узел без kind',
'term.unknown_shape': 'терм неизвестной формы',
'term.kind': 'терм {kind}',
'interval.unknown_shape': 'интервал неизвестной формы',
'formula.unknown_shape': 'формула неизвестной формы',
'formula.kind': 'формула {kind}',
'formula.status': 'статус {status}',
'formula.quantifier': 'квантор {quantifier}',
'formula.norm_template_ref': 'формула norm_template_ref',
'rule.scope': 'область применения правила',
'definition.part': 'происхождение из определения (§144)',
'external.effect': 'внешний канал {effect}',
'norm.no_payload': 'norm_template без payload',
'goal.unknown_shape': 'цель обязанности неизвестной формы',
'goal.kind': 'цель обязанности {kind}',
'effect.unknown_shape': 'правовой эффект неизвестной формы',
'effect.kind': 'правовой эффект {kind}',
'interpretation.selection': 'политика выбора толкования {selection}',
'revision.unknown_shape': 'операция поправки неизвестной формы',
'revision.op': 'операция поправки {kind}'
}SECTION_ORDERattributemodule attribute#
SECTION_ORDER: list[tuple[str, str]] = [
('source.section', 'source_work'),
('source.section', 'source_edition'),
('entrenchment.section', 'entrenchment'),
('revision.section', 'revision'),
('publication.section', 'publication'),
('fragment.section', 'fragment'),
('reference.section', 'reference'),
('interpretation.section', 'interpretation_group'),
('interpretation.section', 'interpretation'),
('entity.section', 'type_decl'),
('relation.section', 'symbol_decl'),
('function.section', 'function_decl'),
('external.section', 'external_decl'),
('assertion.section', 'assertion'),
('anchor.section', 'anchor'),
('query.section', 'query'),
('unit.section', 'unit_decl'),
('procedure.section', 'procedure'),
('stage.section', 'stage'),
('evidence_policy.section', 'evidence_policy'),
('temporal_policy.section', 'temporal_resolution_policy'),
('evidence.section', 'evidence_item'),
('support.section', 'support_edge'),
('closure.section', 'closure_policy'),
('calendar.section', 'calendar_snapshot'),
('deadline.section', 'deadline_policy'),
('rule.section', 'rule'),
('norm.section', 'norm_template'),
('priority.section', 'priority_rule'),
('constraint.section', 'constraint'),
('precedent.section', 'factor_vocabulary'),
('precedent.section', 'precedent_decl'),
('counterfactual.section', 'counterfactual_decl')
]SUPPORTED_PACK_FORMATSattributemodule attribute#
SUPPORTED_PACK_FORMATS = ('law.verb/0.1', 'law.verb/0.2')VERBALIZATION_GAPattributemodule attribute#
VERBALIZATION_GAP = 'LDC-E8201'PackErrorclass#
class PackError(ValueError)Bases: ValueError
Дефект template pack: отсутствует обязательная фраза или поле.
load_packfunction#
def load_pack(path: str | Path) -> dictЗагрузка template pack. Pack — данные, а не код (LS §3.2).
local_namefunction#
def local_name(identifier: str) -> strЛокальное имя StableId: часть после #, у порождённых — с суффиксом.
render_atomfunction#
def render_atom(ctx: _Ctx, literal: dict) -> strrender_formulafunction#
def render_formula(ctx: _Ctx, formula: Any) -> strrender_nodefunction#
def render_node(ctx: _Ctx, node: dict) -> list[str]Тело блока одной декларации: список абзацев (без заголовка).
render_termfunction#
def render_term(ctx: _Ctx, term: Any) -> strverbalizefunction#
def verbalize(document: dict, pack: dict) -> dictCLIR → ревью-документ .lawread.md.
Возвращает {"text", "contentHash", "gaps"}. gaps непуст — документ НЕ
ДОЛЖЕН допускаться к утверждению статусом выше draft (LS §3.3).
Documentation for Arxo. Writings — blog.arxo.io.
Anonymous visit counts on stats.arxo.io, no cookies.