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
| Name | Description |
|---|---|
ENTRENCHED_CHANGED_CODE | No description. |
Functions
| Name | Description |
|---|---|
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.