Skip to content

lawref.amend

Синтез минимальной поправки — L8.3 плана LAYERS-NEXT (горизонт §5, заведён поручением владельца; см. spec/decisions/0035-loophole-and-amend.ru.md).

Вход — пакет, целевые исходы (сценарии с ожидаемым truth status) и регрессионные сценарии, чьи исходы меняться не должны. Выход — минимальный по числу операций набор МЕХАНИЧЕСКИХ правок документа, при котором каждый целевой сценарий даёт ожидание, а каждый регрессионный — байтово тот же исход (проекция О-1: {results, positions, conflicts, issues}). «Поправка как PR»: к находке прикладывается impact-отчёт О-1 до→после.

Оркестрация без семантики (инвариант CLAUDE.md №5): правки — операции над СТРУКТУРОЙ документа (снять узел, снять поле, добавить узел готовой формы), их смысл нигде не интерпретируется — каждый кандидат ИСПОЛНЯЕТСЯ обоими классами сценариев через impact.run_scenario, и решают канонические байты исходов §208. Прецедент — reanchor (спутник О-2): инструмент предлагает кандидатов механически, проверяет исполнением.

Пространство операций (DECISION-0035, DECISION-0178; каждый кап назван):

  • remove_rule — снять правило; каскадом снимаются priority_rule §116, ссылающиеся на него (иначе повисшая ссылка — ровно тот вис, который диагностирует edition_projection);
  • remove_priority — снять priority_rule §116;
  • drop_effective — снять окно effective §87 у правила (норма действует на всей оси времени);
  • exclude_enum_value — добавить к телу исключение одного enum-значения из подстановки proof-графа; остальные члены перечня проверяются автоматически;
  • add_priority — добавить priority_rule §106 на упорядоченную пару правил; пары не выдумываются, а добываются из ВЫХОДА движка: участники §115- конфликтов целевых сценариев на базовом документе (rule_application из proof-графа, как в фаззере О-4).

Не входит (открытая часть исследовательской задачи, названная в плане): свободный синтез правил и формул, правка скаляров, операции над норм-шаблонами. Автопроверка ограничена одной enum-осью при остальных фиксированных входах.

Поиск детерминирован без PRNG: полный перебор наборов операций по возрастанию мощности (1 … max_edits) в порядке канонических байтов дескрипторов внутри групп релевантности; точечные enum-исключения первыми. Первая находка минимальна по числу правок в опубликованном пространстве. Бюджет вызовов evaluate ограничен и назван в манифесте.

Attributes

NameDescription
DEFAULT_BUDGETNo description.
DEFAULT_MAX_EDITSNo description.
OPS_CAPNo description.
SCHEMA_VERSIONNo description.

Functions

NameDescription
amended_documentДокумент с применённой найденной поправкой (для --apply).
apply_editsПрименить набор операций; None — набор внутренне несовместим
edit_space(операции, было_ли_усечение, сколько релевантных).
render_textNo description.
report_bytesNo description.
synthesizeПеребор; отчёт детерминирован кортежем (документ, цели, регресс,

DEFAULT_BUDGETattributemodule attribute#

DEFAULT_BUDGET = 600

DEFAULT_MAX_EDITSattributemodule attribute#

DEFAULT_MAX_EDITS = 2

OPS_CAPattributemodule attribute#

OPS_CAP = 64

SCHEMA_VERSIONattributemodule attribute#

SCHEMA_VERSION = 'law.amend/0.2'

amended_documentfunction#

def amended_document(document: dict, report: dict) -> dict | None

Документ с применённой найденной поправкой (для –apply).

apply_editsfunction#

def apply_edits(document: dict, edits: list[dict]) -> dict | None

Применить набор операций; None — набор внутренне несовместим (операция ссылается на снятый узел). Каскад remove_rule снимает и priority_rule на него — повисших ссылок §116 поправка не оставляет.

edit_spacefunction#

def edit_space(document: dict, targets: list[tuple[str, dict]], counter: list[int], budget: int, *, view=None, enum_ops: list[dict] | None = None) -> tuple[list[dict], bool, int]

(операции, было_ли_усечение, сколько релевантных).

Порядок — сначала операции над правилами, ПРИМЕНЁННЫМИ в proof-графах целевых сценариев, затем остальные; внутри группы — сначала точечные enum-исключения (DECISION-0178), затем канонические байты. Кап OPS_CAP режет хвост, а не голову: до 03.09.2026 сортировка была чисто канонической, и на акте в 2124 правила (kz-income-tax) нужная операция в 64 первых не попадала — перебор сжигал бюджет на заведомо чужих правилах и отвечал «не найдена, перебор усечён». Релевантность читается с витрины движка (rule_application), детерминирована документом и сценариями, семантики не добавляет.

render_textfunction#

def render_text(report: dict) -> str

report_bytesfunction#

def report_bytes(report: dict) -> bytes

synthesizefunction#

def synthesize(document: dict, targets: list[tuple[str, dict]], regression: list[tuple[str, dict]], max_edits: int = DEFAULT_MAX_EDITS, budget: int = DEFAULT_BUDGET, goal_targets: tuple[list[dict], list[tuple[str, dict]]] | None = None, profile: dict | None = None) -> dict[str, Any]

Перебор; отчёт детерминирован кортежем (документ, цели, регресс, max_edits, budget). targets — [(имя, {“case”,“query”,“expect”})], regression — [(имя, {“case”,“query”})] формата О-1.

goal_targets (DECISION-0089 §4.2, amend --goals) — (понижённые документы целей, миры формата О-1): целевой исход — всякая цель, павшая на базовом документе (FAILED), держится (HELD) после поправки, и ни одна цель не падает и не пропускается; цели HELD/VACUOUS до поправки — сторожа, они входят в условие вместе с регрессом. Enum-исключения и автоматические соседи (DECISION-0178) добываются из явных truth-целей; goals-only не задаёт входа для такой подстановки. Свободный синтез правил, скалярных условий и сочетаний нескольких осей остаётся вне пространства.

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

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