Skip to content

lawref.entrenchment

Неизменяемое ядро источника: diff редакций и entrenchment-констрейнт (D4).

Механика для норм вида «положения X изменению не подлежат» (Конституция РК ст. 2.7 при порядке изменения ст. 92–93; аналогично — eternity clauses иных правопорядков). Формализуется НЕ как правило вывода, а как статическая проверка над парой редакций одного source_work (§32 revision graph): защищённые фрагменты обязаны совпадать байтово, иначе поправка неправомерна независимо от соблюдения процедуры.

Реализовано: проекция редакции в {(locator, language): digest} по фрагментам §29 (объявленный contentHash текста; при отсутствии — sha256 самих байтов, та же конвенция, что у гейта §194), трёхсторонний diff редакций (changed/added/removed) и констрейнт «защищённое множество ∩ изменённое = ∅» с диагностикой LDC-E5301. Защита задаётся ДАННЫМИ (список локаторов), а не кодом: перечень неизменяемых положений — часть пакета, а не компилятора.

Отложено: связывание с amendment-power (§127) — поправка как исполняемая процедура (этап 5 карты KZ-CONSTITUTION-AUDIT); сравнение редакций на разных языках между собой (здесь языки сопоставляются попарно, дивергенция kk/ru — предмет §158/D3).

Attributes

NameDescription
ENTRENCHED_CHANGED_CODENo description.

Functions

NameDescription
check_entrenched_changesКонстрейнт неизменяемого ядра над УЖЕ вычисленным множеством изменений.
check_entrenchmentКонстрейнт неизменяемого ядра: защищённое ∩ изменённое = ∅.
diff_editionsТрёхсторонний diff редакций по фрагментам; порядок детерминирован.
edition_projectionРедакция → {(locator, language): digest} по её фрагментам (§29).

ENTRENCHED_CHANGED_CODEattributemodule attribute#

ENTRENCHED_CHANGED_CODE = 'LDC-E5301'

check_entrenched_changesfunction#

def check_entrenched_changes(diff: dict[str, list[dict]], protected: list[str], target: str) -> list[dict]

Констрейнт неизменяемого ядра над УЖЕ вычисленным множеством изменений.

Отделено от check_entrenchment ради §32.2: множество затронутых положений может приходить не только из diff-а двух готовых редакций, но и из операций поправки — и тогда проверка выполняется ДО применения, а диагностика адресует конкретную операцию конкретного акта (DECISION-0009 §4 п. 8). Формулировки сообщений общие для обоих путей: они входят в байтовый контракт и правятся только вместе.

check_entrenchmentfunction#

def check_entrenchment(nodes: list[dict], edition_a: str, edition_b: str, protected: list[str]) -> list[dict]

Констрейнт неизменяемого ядра: защищённое ∩ изменённое = ∅.

Возвращает список диагностик LDC-E5301 (по одной на затронутое положение, порядок детерминирован diff-ом). Пустой список означает, что поправка не затрагивает ядра — но НЕ что она правомерна: соблюдение процедуры §92–93 проверяется отдельно и здесь не подразумевается.

diff_editionsfunction#

def diff_editions(nodes: list[dict], edition_a: str, edition_b: str) -> dict[str, list[dict]]

Трёхсторонний diff редакций по фрагментам; порядок детерминирован.

changed — локатор есть в обеих редакциях, но байты текста различаются; added/removed — присутствует только в одной. Все три класса значимы для entrenchment: изъятие защищённого положения — тоже его изменение.

edition_projectionfunction#

def edition_projection(nodes: list[dict], edition_id: str) -> dict[tuple[str, str], str]

Редакция → {(locator, language): digest} по её фрагментам (§29).

Ключ — пара локатора и языка: у одной редакции статья существует в нескольких аутентичных языках (ст. 9), и изменение любого из них есть изменение положения.

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

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