Skip to content

lawref.evaluator.editions

§92.3: применимость редакции на дату права — проекция §31 ВНУТРИ evaluate.

Errata E-0095, плечо (а), решение владельца 02.09.2026. До него evaluate обеих реализаций звал машину применимости D1 (lawref.applicability) только для динамических ссылок §30.2, и правило, чьи якоря ведут на редакцию, закрытую на дату права, исполнялось как действующее — обе реализации были согласны, и differential этого не видел по построению.

Критерий — тот же, что у внешней проекции impact.edition_projection, с одним намеренным отличием, названным ниже:

  • проецируются нормативные узлы (NORMATIVE_KINDS) с непустыми якорями; фрагмент датирует узел своей редакцией §28, редакция — собой;
  • якорь, не разрешившийся ни во фрагмент, ни в редакцию, узел НЕ датирует (строки внешнего реестра вида KZ-MARRIAGE-CODE-ART-11 — провенанс, а не lifecycle);
  • узел ИСКЛЮЧАЕТСЯ из вычисления, если ВСЕ его датирующие редакции на дату права неприменимы (closed | suspended | not_yet); достаточно одной применимой, чтобы узел остался;
  • редакция без единого события применимости (in_force, restored, suspended, repealed, expired, invalidated) и без applicability: timeless считается ВНЕ ДАТИРОВКИ и узел не исключает. Это и есть отличие от внешней проекции, которая такую редакцию читает как not_yet и снимает всё заякоренное на любую дату: обычай, доктрину и памятник (tuystyq: 88 правил из 93 на редакции без in_force) никто в действие датой не вводил, и для них «право не датировано» — ответ, а не «право не действует». Внешняя проекция при этом строже внутренней, поэтому раннеры, проецирующие снаружи, после проекции внутри не меняют ни байта: снимать уже нечего.

Граница §82/§2.15: событие lifecycle с granularity, отличной от даты права (Date против Instant), сравнению не подлежит — TemporalResolutionPolicy в v1 нет. Такая редакция читается как вне датировки (узел остаётся), и о ней сообщает предупреждение EDITION_APPLICABILITY_AMBIGUOUS: молчать здесь значило бы вернуть E-0095 другой дверью.

Отчёт — двумя каналами и ровно там, где §92 их обещает («каждый шаг появляется в proof/explanation»):

  • одна issue EDITION_NOT_APPLICABLE (severity info) НА РЕДАКЦИЮ с перечнем исключённых узлов — документы без исключений не меняются ни байтом, и это ровно граница перезаморозки голденов «по факту»;
  • у why_not(P) §185 исключённое правило-кандидат отвечает applicability: NOT_APPLICABLE с причиной §92.3 — тем же словарём, что у окна effective §87 (условие 4 списка §92; здесь — условие 3).

Ex tunc в §31 по-прежнему невыразим (invalidated — ex nunc, docstring applicability), и времени ЗАПИСИ у lifecycle-события нет: оба предела названы E-0095 и здесь не закрываются.

Attributes

NameDescription
EDITIONS_AS_PRESENTED_CODENo description.
EDITION_AMBIGUOUS_CODENo description.
EDITION_NOT_APPLICABLE_CODENo description.
NORMATIVE_KINDSNo description.

Functions

NameDescription
anchor_editionРедакция, которой якорь датирует узел: фрагмент → его редакция §28,
describe_stateСловесная форма состояния редакции — одна на обе реализации (байты).
is_datedНесёт ли редакция хоть одно событие применимости §31 (или timeless).
presented_issue§92 (E-0167): состав редакций предъявлен вызывающим — одна issue.
project_editionsПроекция §92.3 → (оставшиеся узлы, исключённые правила,

EDITIONS_AS_PRESENTED_CODEattributemodule attribute#

EDITIONS_AS_PRESENTED_CODE = 'EDITIONS_AS_PRESENTED'

EDITION_AMBIGUOUS_CODEattributemodule attribute#

EDITION_AMBIGUOUS_CODE = 'EDITION_APPLICABILITY_AMBIGUOUS'

EDITION_NOT_APPLICABLE_CODEattributemodule attribute#

EDITION_NOT_APPLICABLE_CODE = 'EDITION_NOT_APPLICABLE'

NORMATIVE_KINDSattributemodule attribute#

NORMATIVE_KINDS = ('assertion', 'constraint', 'norm_template', 'priority_rule', 'rule')

anchor_editionfunction#

def anchor_edition(by_id: dict[str, dict], anchor: str) -> dict | None

Редакция, которой якорь датирует узел: фрагмент → его редакция §28, либо редакция напрямую; иначе None (якорь узел не датирует).

describe_statefunction#

def describe_state(state: dict) -> str

Словесная форма состояния редакции — одна на обе реализации (байты).

is_datedfunction#

def is_dated(edition: dict) -> bool

Несёт ли редакция хоть одно событие применимости §31 (или timeless).

presented_issuefunction#

def presented_issue(as_of: str, legal_time: str) -> dict

§92 (E-0167): состав редакций предъявлен вызывающим — одна issue.

Проекция вызывающего НЕ проверяется: проверить её значило бы вновь исполнить условие 3 по дате дела, то есть исполнить пересечение двух проекций — ровно тот дефект, ради которого поле заведено (отчёт О-2). Поэтому режим не доказывается, а НАЗЫВАЕТСЯ: здесь — в документе, и полем editionsAsPresented в манифесте §170. Читатель обязан видеть, что перед ним контрфактический ответ «то же дело при предъявленном составе редакций», а не право на дату дела.

project_editionsfunction#

def project_editions(nodes: list[dict], legal_time: str) -> tuple[list[dict], list[dict], dict[str, str], list[dict]]

Проекция §92.3 → (оставшиеся узлы, исключённые правила, причина по id исключённого узла, issues).

Порядок узлов сохраняется (§211); issues — по id редакции, узлы внутри issue — по id. Правила возвращаются отдельно ради why_not §185: в вычислении их нет, а в объяснении они обязаны быть названы.

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

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