lawref.population
population-impact/0.1 — эталон оценки реформы на закреплённой выборке
(DECISION-0255; трек О, spec/LAYERS-NEXT.ru.md §2–§3).
Оркестрация без семантики (инвариант CLAUDE.md №5): строка банка — два вызова
операции ask §168.4 (lawref.ask) над пакетами-делами сторон; исход
сравнивается проекцией scenario._outcome_view, модели — semdiff §215.
Инструмент ничего не выводит из права: состояние стороны — механическая
проекция закрытого evaluation-документа по матрице §5 решения, как
impact.verdict. Взвешенные суммы — арифметика хоста над уже вычисленными
значениями Money (§6 решения), а не правовой ответ, и так не называются.
Поток (последовательный: у эталона одна задача — байты). Все отказы §12 — до первой строки:
USAGE флаги, --bank, компилятор (CLI)→ путь хранилища, без создания каталога (POPULATION_STORE_ERROR)→ форма банка по схеме, самопин, веса (POPULATION_BANK_INVALID)→ открытие стороны: пины law.toml, law.lock, ресурсы; понижение ОДНОГО корня, связанный мир W, theoryHash/artifactHash [§209](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/28-part-xxvii-canonical-legal-ir.ru.md#209-theory-hash-и-artifact-hash) (POPULATION_WORLD_MISMATCH)→ semantic diff [§215](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/29-part-xxviii-compiler-pipeline.ru.md#215-semantic-diff) миров сторон→ банк против сторон: одно множество [[cases]] и равные байты .lawcase; понижение дел строк, один вид legalTime (H4), Instant со смещением и не точнее микросекунд ([§2](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/01-part-i-audit.ru.md#2-что-необходимо-исправить)) (POPULATION_BANK_INVALID)→ дело каждой строки (POPULATION_CASE_UNKNOWN)→ мера на обеих сторонах, статически (POPULATION_MEASURE_INVALID)→ создание каталога хранилища (POPULATION_STORE_ERROR)→ строка за строкой: ask(before), ask(after) → документы в хранилище по sha256 канонических байтов → состояния сторон → класс строки→ покрытие, суммы, вердикт [§7](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/03-part-iii-architecture-and-conformance.ru.md#7-обязательные-компоненты-реализации) → reportCore (канон [§208](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/28-part-xxvii-canonical-legal-ir.ru.md#208-canonical-serialization)) + receipt.Сбой посреди прогона — FAILED строки: в ядре только код и фиксированное
сообщение по коду (FAILED_MESSAGES), подробность — в receipt.failures и
stderr (§5). Необработанное исключение хоста и сбой, после которого отчёт
выдать нельзя, — код 4 без отчёта с диагностикой в stderr (§12).
Понижение исходников — работа компилятора: модуль получает функции Lower
(дело) и LowerRoot (корень), а вызов lawc живёт в CLI (lawc_lowering,
тот же путь, что у python -m lawref ask).
Attributes
| Name | Description |
|---|---|
AMBIGUOUS_MEASURE | No description. |
ASK_FAILED_MESSAGE | No description. |
BANK_INVALID | No description. |
BANK_SCHEMA_VERSION | No description. |
BLOCKING_SEVERITIES | No description. |
CASE_LOWERING | No description. |
CASE_UNKNOWN | No description. |
CLASSES | No description. |
CRASH_EXIT | No description. |
DOCUMENT_CANON | No description. |
EXCLUDED | No description. |
EXIT_CODES | No description. |
EXIT_HELP | No description. |
FAILED | No description. |
FAILED_MESSAGES | No description. |
Lower | No description. |
LowerRoot | No description. |
MEASURE_CURRENCY | No description. |
MEASURE_INVALID | No description. |
MEASURE_KIND | No description. |
MISSING_PARAMETER_VALUE | No description. |
MONEY_TYPE | No description. |
MONEY_TYPE_NAMES | No description. |
NO_COMPARABLE_VALUE | No description. |
NO_VALUE | No description. |
PANIC | No description. |
REFUSED_EXIT | No description. |
REPORT_SCHEMA_VERSION | No description. |
RESULT_COUNT | No description. |
SIDES | No description. |
STORE_ERROR | No description. |
TOOL | No description. |
USAGE | No description. |
USAGE_TEXT | No description. |
VALUE | No description. |
VALUE_AFTER_ONLY | No description. |
VALUE_BEFORE_ONLY | No description. |
VALUE_ON_BOTH | No description. |
VERDICT_CHANGE | No description. |
VERDICT_INCOMPLETE | No description. |
VERDICT_NO_COMPARABLE_WEIGHT | No description. |
VERDICT_NO_WEIGHTED_CHANGE | No description. |
WORLD_MISMATCH | No description. |
Classes
| Name | Description |
|---|---|
Lowered | Понижение дела на стороне: (CLIR корня, документ дела) либо сбой. |
Outcome | Итог ask одной стороны: документ либо сбой. |
PopulationRefusal | Отказ §12 решения: отчёта нет, код выхода 2. |
Side | Открытая сторона банка: пакет-дело с проверенными пинами. |
Functions
| Name | Description |
|---|---|
bank_content_hash | Самопин банка (§8): sha256 канонических байтов §208 банка без |
build_report | Полный прогон банка: отчёт {reportCore, reportCoreHash, receipt}; |
canonical_legal_time | Каноническая форма §208 даты банка (§2): Instant — представление UTC |
check_bank | Форма банка по схеме целиком — закрытость, обязательные поля, запрос |
check_case_sets | §1: одно множество имён [[cases]] и побайтово равные .lawcase. |
check_legal_time_kinds | H4: один вид legalTime на банк (Date либо Instant). |
check_legal_time_precision | §2: Instant без явного смещения или с дробью секунд длиннее шести |
check_measure | §3 статически: вид запроса, distinct (H2), options.empty в терме |
check_store_path | Отказ STORE второй после USAGE (§12), но каталог здесь НЕ создаётся: |
create_store | Создание каталога хранилища после всех отказов §12, до первой строки. |
decimal_text | Точная десятичная запись §208 (канон canonical_decimal). |
execute | ask пониженного дела на стороне. Отказ подготовки и крах — FAILED. |
exit_code | No description. |
failed_record | Состояние FAILED в ядре: код и фиксированное сообщение по коду (§5). |
failure | Сбой стороны: код (в ядро) и подробность (в квитанцию и stderr). |
lawc_lowering | Понижение дела тем же путём, что python -m lawref ask: корень — `lawc |
lawc_root_lowering | Понижение одного корня (lawc lower --imports) — шаг открытия стороны |
legal_time_section | Распределение дат банка (§2): минимум и максимум — по моменту UTC для |
load_bank | No description. |
lower_rows | Понижение дел строк до первой строки: дата дела нужна проверке H4. |
main | python -m lawref population-impact --bank B --store D [--json] [--lawc L]. |
open_side | Открытие стороны (§1): пины, понижение ОДНОГО корня, связывание мира, |
prepare_store | Проверка пути и создание каталога разом (для вызывающих вне прогона). |
render_text | Сводка для человека; полный отчёт — --json. |
report_bytes | No description. |
root_lowering_of | Понижение корня к поданному понижению дела: атрибут root (так его |
row_class | Класс строки по паре состояний (§5). FAILED старше EXCLUDED: неполный |
side_state | Состояние стороны по матрице §5: (запись ядра, значение Money, сбой). |
store_document | Атомарная запись <sha256>.json; повтор того же хэша — не ошибка (§9). |
verdict | §7: 4 → 1 → 3 → 0. «Изменение найдено» — положительное утверждение и |
world_pins | Пины стороны в форме банка (без package) — для сверки и для |
AMBIGUOUS_MEASUREattributemodule attribute#
AMBIGUOUS_MEASURE = 'AMBIGUOUS_MEASURE'ASK_FAILED_MESSAGEattributemodule attribute#
ASK_FAILED_MESSAGE = 'подготовка или исполнение ask отказали (§168.4)'BANK_INVALIDattributemodule attribute#
BANK_INVALID = 'POPULATION_BANK_INVALID'BANK_SCHEMA_VERSIONattributemodule attribute#
BANK_SCHEMA_VERSION = 'law.population.bank/0.1'BLOCKING_SEVERITIESattributemodule attribute#
BLOCKING_SEVERITIES = ('error', 'fatal')CASE_LOWERINGattributemodule attribute#
CASE_LOWERING = 'POPULATION_CASE_LOWERING'CASE_UNKNOWNattributemodule attribute#
CASE_UNKNOWN = 'POPULATION_CASE_UNKNOWN'CLASSESattributemodule attribute#
CLASSES = (
VALUE_ON_BOTH,
VALUE_BEFORE_ONLY,
VALUE_AFTER_ONLY,
NO_COMPARABLE_VALUE,
EXCLUDED,
FAILED
)CRASH_EXITattributemodule attribute#
CRASH_EXIT = 4DOCUMENT_CANONattributemodule attribute#
DOCUMENT_CANON = 'POPULATION_DOCUMENT_CANON'EXCLUDEDattributemodule attribute#
EXCLUDED = 'EXCLUDED'EXIT_CODESattributemodule attribute#
EXIT_CODES = {
VERDICT_INCOMPLETE: 4,
VERDICT_CHANGE: 1,
VERDICT_NO_COMPARABLE_WEIGHT: 3,
VERDICT_NO_WEIGHTED_CHANGE: 0
}EXIT_HELPattributemodule attribute#
EXIT_HELP = 'коды выхода population-impact: 0 NO_WEIGHTED_CHANGE, 1 CHANGE, 2 отказ (USAGE, POPULATION_*), 3 NO_COMPARABLE_WEIGHT, 4 INCOMPLETE либо сбой без отчёта (у impact и impact-editions коды 3 и 4 значат другое)'FAILEDattributemodule attribute#
FAILED = 'FAILED'FAILED_MESSAGESattributemodule attribute#
FAILED_MESSAGES = {
CASE_LOWERING: 'понижение дела на стороне не удалось (§168.4)',
RESULT_COUNT: 'документ несёт не один результат запроса меры (§4)',
STORE_ERROR: 'запись документа в хранилище не удалась (§9)',
DOCUMENT_CANON: 'документ не канонизируется по §208',
PANIC: 'крах исполнения строки (§5)'
}Lowerattributemodule attribute#
Lower = Callable[[Path, RegisteredCase, dict], tuple[dict, dict]]LowerRootattributemodule attribute#
LowerRoot = Callable[[Path, dict], dict]MEASURE_CURRENCYattributemodule attribute#
MEASURE_CURRENCY = 'MEASURE_CURRENCY'MEASURE_INVALIDattributemodule attribute#
MEASURE_INVALID = 'POPULATION_MEASURE_INVALID'MEASURE_KINDattributemodule attribute#
MEASURE_KIND = 'MEASURE_KIND'MISSING_PARAMETER_VALUEattributemodule attribute#
MISSING_PARAMETER_VALUE = 'MISSING_PARAMETER_VALUE'MONEY_TYPEattributemodule attribute#
MONEY_TYPE = 'urn:law:std#Money'MONEY_TYPE_NAMESattributemodule attribute#
MONEY_TYPE_NAMES = frozenset({'Money', MONEY_TYPE})NO_COMPARABLE_VALUEattributemodule attribute#
NO_COMPARABLE_VALUE = 'NO_COMPARABLE_VALUE'NO_VALUEattributemodule attribute#
NO_VALUE = 'NO_VALUE'PANICattributemodule attribute#
PANIC = 'PANIC'REFUSED_EXITattributemodule attribute#
REFUSED_EXIT = 2REPORT_SCHEMA_VERSIONattributemodule attribute#
REPORT_SCHEMA_VERSION = 'law.population.impact-report/0.1'RESULT_COUNTattributemodule attribute#
RESULT_COUNT = 'POPULATION_RESULT_COUNT'SIDESattributemodule attribute#
SIDES = ('before', 'after')STORE_ERRORattributemodule attribute#
STORE_ERROR = 'POPULATION_STORE_ERROR'TOOLattributemodule attribute#
TOOL = 'population-impact'USAGEattributemodule attribute#
USAGE = 'USAGE'USAGE_TEXTattributemodule attribute#
USAGE_TEXT = 'python -m lawref population-impact --bank <bank.json> (--store <каталог> | --no-store | --no-proof) [--json] [--lawc <бинарь>]'VALUEattributemodule attribute#
VALUE = 'VALUE'VALUE_AFTER_ONLYattributemodule attribute#
VALUE_AFTER_ONLY = 'VALUE_AFTER_ONLY'VALUE_BEFORE_ONLYattributemodule attribute#
VALUE_BEFORE_ONLY = 'VALUE_BEFORE_ONLY'VALUE_ON_BOTHattributemodule attribute#
VALUE_ON_BOTH = 'VALUE_ON_BOTH'VERDICT_CHANGEattributemodule attribute#
VERDICT_CHANGE = 'CHANGE'VERDICT_INCOMPLETEattributemodule attribute#
VERDICT_INCOMPLETE = 'INCOMPLETE'VERDICT_NO_COMPARABLE_WEIGHTattributemodule attribute#
VERDICT_NO_COMPARABLE_WEIGHT = 'NO_COMPARABLE_WEIGHT'VERDICT_NO_WEIGHTED_CHANGEattributemodule attribute#
VERDICT_NO_WEIGHTED_CHANGE = 'NO_WEIGHTED_CHANGE'WORLD_MISMATCHattributemodule attribute#
WORLD_MISMATCH = 'POPULATION_WORLD_MISMATCH'Loweredclassdataclass#
class Lowered(root_ir: dict | None, case: dict | None, failure: dict | None)Понижение дела на стороне: (CLIR корня, документ дела) либо сбой.
caseattributeinstance attribute#
case: dict | Nonefailureattributeinstance attribute#
failure: dict | Noneroot_irattributeinstance attribute#
root_ir: dict | Nonelegal_timeproperty#
legal_time: str | NoneOutcomeclassdataclass#
class Outcome(document: dict | None, failure: dict | None)Итог ask одной стороны: документ либо сбой.
PopulationRefusalclass#
class PopulationRefusal(code: str, message: str)Bases: Exception
Отказ §12 решения: отчёта нет, код выхода 2.
linemethod#
def line() -> strSideclassdataclass#
class Side(label: str, root: Path, context: dict, world: dict, cases: dict[str, RegisteredCase], resources: ask_module.ResourcesChecked | None = None, registration: RegistrationChecked | None = None)Открытая сторона банка: пакет-дело с проверенными пинами.
casesattributeinstance attribute#
cases: dict[str, RegisteredCase]contextattributeinstance attribute#
context: dictlabelattributeinstance attribute#
label: strregistrationattributeclass attributeinstance attribute#
registration: RegistrationChecked | None = Noneresourcesattributeclass attributeinstance attribute#
resources: ask_module.ResourcesChecked | None = Nonerootattributeinstance attribute#
root: Pathworldattributeinstance attribute#
world: dictbank_content_hashfunction#
def bank_content_hash(bank: dict) -> strbuild_reportfunction#
def build_report(bank_path: Path, store_path: str | Path | None, lower: Lower, lower_root: LowerRoot | None = None, write_store: bool = True, record_proof: bool = True) -> dictПолный прогон банка: отчёт {reportCore, reportCoreHash, receipt};
отказ §12 — PopulationRefusal, всегда до первой строки.
canonical_legal_timefunction#
def canonical_legal_time(value: str) -> strcheck_bankfunction#
def check_bank(bank: object) -> Nonecheck_case_setsfunction#
def check_case_sets(before: Side, after: Side) -> None§1: одно множество имён [[cases]] и побайтово равные .lawcase.
check_legal_time_kindsfunction#
def check_legal_time_kinds(lowered: dict[str, dict[str, Lowered]]) -> NoneH4: один вид legalTime на банк (Date либо Instant).
check_legal_time_precisionfunction#
def check_legal_time_precision(lowered: dict[str, dict[str, Lowered]]) -> None§2: Instant без явного смещения или с дробью секунд длиннее шести
знаков — отказ банка. Момент без смещения не определён (SPEC §5: у
литералов нет скрытой зоны), точность сверх микросекунд — граница 0.1.
lawc lower-ask дело с legal_time без смещения понижает; отказ
CONTEXT_FIELD_INVALID дала бы лишь подготовка ask уже в строке, поэтому
проверка стоит до первой строки (фикстура: bank-instant-no-offset).
check_measurefunction#
def check_measure(measure: dict, side: Side, case_name: str) -> None§3 статически: вид запроса, distinct (H2), options.empty в терме
запроса (H3), явный тип переменной в любой записи, разрешение в мире стороны.
check_store_pathfunction#
def check_store_path(path: str | Path | None) -> Pathcreate_storefunction#
def create_store(store: Path) -> PathСоздание каталога хранилища после всех отказов §12, до первой строки.
decimal_textfunction#
def decimal_text(value: Fraction) -> strexecutefunction#
def execute(side: Side, case_name: str, lowered: Lowered, query: dict, record_proof: bool = True) -> Outcomeask пониженного дела на стороне. Отказ подготовки и крах — FAILED.
exit_codefunction#
def exit_code(report: dict) -> intfailed_recordfunction#
def failed_record(code: str) -> dictСостояние FAILED в ядре: код и фиксированное сообщение по коду (§5).
failurefunction#
def failure(code: str, detail: str) -> dictСбой стороны: код (в ядро) и подробность (в квитанцию и stderr).
lawc_loweringfunction#
def lawc_lowering(lawc: list[str]) -> LowerПонижение дела тем же путём, что python -m lawref ask: корень — lawc lower --imports, дело — lawc lower-ask под тем же контекстом, композиция
§168.5 — core_cli._composed_case. Атрибут root — понижение одного корня.
lawc_root_loweringfunction#
def lawc_root_lowering(lawc: list[str]) -> LowerRootПонижение одного корня (lawc lower --imports) — шаг открытия стороны
(§1), общий с python -m lawref ask (core_cli._lower_package_root).
legal_time_sectionfunction#
def legal_time_section(dates: set[str]) -> dictload_bankfunction#
def load_bank(path: Path) -> dictlower_rowsfunction#
def lower_rows(side: Side, names: list[str], lower: Lower) -> dict[str, Lowered]Понижение дел строк до первой строки: дата дела нужна проверке H4. Сбой понижения — всегда POPULATION_CASE_LOWERING при любом коде компилятора; исходный код и текст — в подробности (§5).
mainfunction#
def main(argv: list[str], lower: Lower | None = None, lower_root: LowerRoot | None = None) -> intpython -m lawref population-impact --bank B --store D [--json] [--lawc L].
lower/lower_root — понижение дела и корня, поданные вызывающим вместо
компилятора (ворота и замеры); CLI их не принимает.
open_sidefunction#
def open_side(label: str, pin: dict, base: Path, lower_root: LowerRoot) -> Sideprepare_storefunction#
def prepare_store(path: str | Path | None) -> PathПроверка пути и создание каталога разом (для вызывающих вне прогона).
render_textfunction#
def render_text(report: dict) -> strСводка для человека; полный отчёт — --json.
report_bytesfunction#
def report_bytes(report: dict) -> bytesroot_lowering_offunction#
def root_lowering_of(lower: Lower) -> LowerRootПонижение корня к поданному понижению дела: атрибут root (так его
несёт lawc_lowering), иначе — компилятор по умолчанию CLI
(core_cli._lawc_command: LAWREF_LAWC, PATH). Совместимость для
вызывающих, подающих одну Lower; явный lower_root старше.
row_classfunction#
def row_class(before: dict, after: dict) -> tuple[str, str | None]Класс строки по паре состояний (§5). FAILED старше EXCLUDED: неполный прогон обязан дойти до вердикта INCOMPLETE.
side_statefunction#
def side_state(outcome: Outcome, measure: dict, store: Path | None, record_proof: bool = True) -> tuple[dict, Fraction | None, dict | None]Состояние стороны по матрице §5: (запись ядра, значение Money, сбой).
record_proof=False (DECISION-0275): документа с proof нет, адреса нет —
сторона несёт только outcomeHash.
store_documentfunction#
def store_document(store: Path | None, document: dict) -> strverdictfunction#
def verdict(complete: bool, classes: dict[str, _Tally], absolute: Fraction) -> str§7: 4 → 1 → 3 → 0. «Изменение найдено» — положительное утверждение и стоит без сравнимого веса; «изменения нет» не печатается, пока судить нечем.
world_pinsfunction#
def world_pins(root: Path, context: dict, world: dict) -> dictПины стороны в форме банка (без package) — для сверки и для
сборки фикстур тем же вычислением, что проверяет инструмент.
Documentation for Arxo. Writings — blog.arxo.io.
Anonymous visit counts on stats.arxo.io, no cookies.