Skip to content

Журнал изменений

[Unreleased] Latest

Досье нормативного изменения (23.09.2026, DECISION-0364, Э0)

  • Две схемы каталога spec/schema/: change-set.schema.json (law.change-set/0.1 — пары состояний «до/после» пакета или выпуска дела, мир по локу, режим введения в действие, намерение, продюсеры) и change-dossier.schema.json (law.change-dossier/0.1 — досье из разделов плана: состав с мерой §33.1 и границей мира, различия с классификацией ожидаемое/за границей/наблюдённое/без наблюдения, цели, выборка, переход, зависимые, три состояния, открытое, четыре гарантии раздельно; ядро и его хэш §208, квитанция вне хэша). Вписаны в пять реестров, типы TypeScript/Python и бандл оракула перегенерированы.
  • Сборщик corpus/tools/change-dossier/build_dossier.py: читает артефакты impact/goals/differential/меры/манифестов, сверяет их sha256 с пакетом изменения, ничего не исполняет; --check — байтовая воспроизводимость.
  • Первое досье — проект поправок к Налоговому кодексу 2026 (corpus/drafts/kz-tax-code-amendment-2026/analysis/): 172/39 норм, 64 из 165 исходов, 77 наблюдённых и 134 тронутых нормы без наблюдения, цели 3/3, differential 330/330, 11 потребителей по локам без перепрогона.
  • Э1 (DECISION-0364 §8): намерение как граница — intent пакета изменения, классы expected / expectedMissing / outside-boundary / unverified, --strict; ось редакций в досье; lower_scenarios.py. Второе досье — бонус-малус № 102 → № 87 (corpus/laws/kz/regulators/bonus-malus/analysis/change-2025-04-08/): 16 из 42 исходов, 5 ожидаемых, 2 не показанных, 11 за границей, 224 без наблюдения; две находки подтверждены текстом.
  • Э2 (DECISION-0364 §9): роли продюсеров, композиция плеч, профиль покрытия, реестр институциональных зависимостей, перепрогон потребителя; lower_scenarios.py --calendar-snapshot. На ОГПО ВТС ← бонус-малус: 9 переходных сценариев цепи № 102 → № 87 → № 82, покрытие 8 из 85 клеток, два межактовых пробела (датировки закон ↔ правила; цепочка премии вне замыкания импортов из-за concat).
  • Э3 (DECISION-0364 §10): channels_check.py, index_computations.py, каналы поставки в операционном состоянии, индекс затронутых расчётов, задания исполнителям. Досье «выложенный канон ОГПО 0.1.0 → текущий CLIR» (corpus/laws/kz/laws/ogpo-vts/analysis/release-2026-09-23/): 4 канала из 4 несут форму ir/0.2 при тех же нормах (0 изменённых исходов на 101 деле, 88 узлов anchor), 23 сохранённых расчёта прежней программой.
  • Э4 (DECISION-0364 §11): прочтения как два мира черновика (build_after.py --reading), readings/objections в пакете изменения, раздел 5 досье. Проект НК 2026: прочтения «статья 2» и «таблица» расходятся на 12 делах из 165 (все — 2026 год); возражение obj-001 в банке: NEITHER под A, TRUE_ONLY под B, отклонено с историей.
  • Э6 (DECISION-0364 §13): replay_consumer.py — перепрогон потребителя миром семейства (concat) и «здоровье банка»; ОГПО ← бонус-малус: 19 сцен премии NEITHER → TRUE_ONLY при появлении правил № 82, 71 из 101 дел здоровы на обеих сторонах, 30 не считаются (встроенный deadlinePolicy у lower-test).
  • Э5 (DECISION-0364 §12): независимый чекер verify_dossier.py без оракула (свой канон §208, свои схемы, пересчёт разделов, канарейка) — три досье воспроизведены без расхождений; раздел протокола «Досье нормативного изменения» в docs; перевыпуск артефактов НК 2026 текущим деревом.

Узел anchor §33 с цитатой места нормы (22.09.2026, DECISION-0358, errata E-0240)

  • Аннотация @source(F, …, quote = "…") называет точное место нормы внутри текста фрагмента; цитата обязана быть непрерывной подстрокой текста байт в байт, иначе новая статическая ошибка LDC-E5208 (§194). Аннотация с хотя бы одним атрибутом (relation, coverage, quote) материализуется в CLIR узлом anchor (<узел>/anchor/<k>); документ с ним пишется schemaVersion: law.core.ir/0.4. Узел вне theoryHash, внутри artifactHash и programHash (§209). Голый @source(F) байтов не меняет.
  • lawc: эмиссия узлов, проверка цитат на путях check и lower, law-canon исключает anchor из проекции теории. lawref: strip_theory, чтение 0.4, имя кода. Схема legal-ir, типы Rust/Python/TypeScript перегенерированы. Векторы ERR-E0240-* (static, lower-shape).
  • text-reader берёт место нормы из цитаты (fallback — подбор по метке); check_source_pinning печатает долю цитат. Образец цитат — kz.corpus.complaints_106, kz.corpus.vred_ts, kz.corpus.ogpovts; 18 пакетов с атрибутами relation/coverage получили узлы anchor.

Протоколы Arxo и единый адрес схем (22.09.2026, DECISION-0357)

  • Схемы spec/schema/*.json получили единый $id https://law.arxo.io/schema/<имя>; проставляет и держит spec/tools/schema_ids.py --check. Внешние имена: Arxo Fact Protocol (дело, вопрос, снимки при закреплённой программе) и Arxo Decision Protocol (evaluation-документ); правила эволюции — в решении и docs/reference/embed/06-protocols.ru.md.
  • Каталог /schema/ указателя law.arxo.io: копии схем байт в байт по их $id и оглавление (apps/demos/hub/tools/schema_page.py). Выложен и тем же днём снят с публикации владельцем: флаг schemaCatalog: false в описании хаба, /schema/ отдаёт 404.
  • Python-типы из тех же схем: spec/tools/generate_py.py → spec/python/, пакет apps/pypi/arxo-law-types (публикация отложена); ворота check_py_types.py сверяют четыре списка и воспроизводимость.
  • Реестр схем оракула получил package-questions (лежала без строки, ворота check_schema_refs были красны); браузерный оракул и копии VS Code пересобраны.
  • title/description всех 51 схем переведены на английский (298 строк, 22 файла): каталог /schema/ публичен; идентификаторы, §-ссылки и имя «Law DSL» сохранены; TS/Python-типы, копии VS Code и бандл пересобраны.

Точность div_round и канонической записи Decimal (15.09.2026)

  • Python сохраняет все разряды после явного округления div_round до 34 знаков; внешний Decimal context больше не округляет результат повторно.
  • Сериализация готовых Decimal/Money/Quantity сохраняет точные цифры.
  • 14 новых conformance-векторов, пять тестов контекста; встроенный оракул конструктора обновлён, браузерная проверка включает E-0182.

Синхронизация движков конструктора (15.09.2026)

  • Встроенные WASM и Python-бандл включают исправления E-0179–E-0181; манифест соответствует обоим артефактам.
  • Проверка свежести понимает resources.schema_dir() и проверяет каталог схем в изолированной копии бандла; добавлены шесть контрольных мутаций.
  • Новый браузерный тест сверяет 53 сценария обоих оценщиков с замороженными эталонами и 19 пар статических сценариев scope/when.

Scope в статическом графе зависимостей (15.09.2026)

  • lawc check учитывает scope ∧ when у правил, фикций и классификаций (E-0181): циклы LDC-E4102, поздние производители LDC-E4103, closure, completion и условные термы.
  • 19 пар статических сценариев защищают диагностику и допустимые контроли; 9 векторов исполнения подтверждают прежнюю семантику оценщиков.

Условные аргументы отношений (15.09.2026)

  • Python и Rust вычисляют if в аргументах тела перед поиском факта (E-0180).
  • Вычисляемый аргумент ждёт связывания переменных; невыбранная ветвь не исполняется, опоры условия объясняют вывод.
  • 23 новых вектора покрывают прямой и поздний вывод, статусы, collect, квантор и создание нормы; 45 прежних голденов сохранены.

Нарушение запретов forbearance (15.09.2026, E-0179)

  • Python и Rust исполняют forbearance как maintenance отсутствия действия: установленное действие даёт VIOLATED, противоречие — CONFLICTED, после окна без полноты наблюдений — UNDETERMINED. Опоры действия входят в proof.
  • Нарушение не снимает запрет для weak permission до конца его окна.
  • Генераторы Python/TypeScript/Go используют ту же лестницу статусов; неподдерживаемый assertion.valid теперь явно отклоняется раннерами.
  • Добавлены 21 conformance-вектор и пара сценариев ОГПО ВТС ст. 22 п. 5; обновлены рецепт А3 и ожидание установленного нарушения ст. 8 п. 2.

Короткие математические имена (15.09.2026)

  • Добавлены math::sqrt/ln/exp/sin/cos/pi и bounds::add/sub/mul/div/scale/exact/round: прежняя семантика и старые имена сохранены (E-0178, DECISION-0246).
  • Мигратор по AST с планом, проверкой затенения и --write; 131 вызов в 17 рабочих файлах переведён на новую запись.
  • Редактор распознаёт псевдонимы в подсветке и показывает тип результата.

STATUS.md разрезан: живой срез в корне, журнал работ в docs/status/ (13.09.2026)

  • Корневой STATUS.md (43 243 строки, 6,6 МБ, 887 разделов) разложен на 13 файлов docs/status/ по календарю: границы проходят только по датам, дни добираются в файл до ~4500 строк, вехи плана M0–M5 и L0–L3 вынесены в milestones.ru.md. Содержание перенесено дословно — сверка показала ноль потерянных непустых строк.
  • Два сгенерированных индекса: index-by-date.ru.md (все 887 записей) и index-by-subject.ru.md (218 пакетов, решения, errata, 16 рубрик; предметно покрыто 571 запись). Генератор — docs/status/build_index.py; имена пакетов сверяются с манифестами дерева.
  • В корне остался живой срез «что сейчас не сделано» (40 строк). Граница со CHANGELOG.md записана в docs/status/README.md: здесь — что изменилось в поставке, там — что выяснилось при работе.
  • docs/README.md пополнен группой status/, правило записи обновлено в CLAUDE.md.

corpus/laws/: DECISION-0084 принят и исполнен — иерархия по оси «чей текст», [metadata].act обязателен (13.09.2026)

  • Дерево corpus/laws/ разложено по одной оси (правопорядок → издатель → род текста; внутри kz/ — кто издал), 518 пакетов переехали, ворота check_laws_tree в фазе enforce; имя акта — поле act манифеста, от пути не зависит (схема манифеста и порт в law-resolver расширены аддитивно). Подробности — DECISION-0084 §10 и STATUS.md.

Импорт знаний: адаптер Rocq (P6) — Ltac2-экспорт термов ядра, индекс .glob, пакет rocq.order (12.09.2026)

  • engines/importers/rocq/: Export.v (библиотека Ltac2: Env.get → Constr.type → Constr.Unsafe.kind, JSON по одной строке на ссылку, признак мономорфности вхождения), adapter.py (протокол 0.1/0.2, survey, части P4o, кэш нативного запуска, проекция arxo.rocq.sorted-relations/0.1, якоря и граф Require из .glob), pin.py (lock установки), README. engines/importers/replay.py — воспроизведение закреплённого transcript как команды extract.
  • corpus/imports/mappings/rocq-order-profile.json, rocq-orders.json; corpus/imports/recipes/rocq-orders.{extract,survey,lock}.json; издание corpus/imports/rocq-orders/publication.json; пакет corpus/laws/rocq/order (три правила над ℚ, три сценария), CLIR rocq-order.lawir.json, титул MCP, реестры меток и API.
  • verify/imports/check_rocq.py + verify/imports/rocq/ (снимок, отвергнутый Qlt_irrefl, ROCQ-LICENSE) — в run_all.sh; check_survey.py — rocq-orders (195/10/54/131).
  • DECISION-0202; документация: KNOWLEDGE-IMPORT (P6), план импорта (строка P6), MATHEMATICS, DEPENDENCIES.

Компилятор: атомы норм-шаблона в голове правила проверяются как атомы тела; линт «действие в посылке» (12.09.2026)

  • law-hir/types: check_types посещает голову с нормативным шаблоном (RuleHead::Norms): action свободы §125 и запрета §130, action forbearance-цели §124.3, goal.condition §124 и activation §135.1 проходят ту же проверку, что атом тела, — объявленность (LDC-E2102), арность §45 (LDC-E2103), аргументы §48 (§189 «modality-specific payloads»). До этого голова не посещалась вовсе: action assigned_night_work(e, r) при отношении на три параметра проходил check и lower и уезжал в CLIR вызовом, не совпадающим ни с одним фактом, — запрет не нарушался никогда (Трудовой кодекс РК, ввод PayPeriod). Термовые поля сторон и окон и конструкторы типов действия §80 не судятся (граница E-0078 и DECISION-0003 сохранена). Вектор T333 (static, LDC-E2103 ровно раз), юнит-тест norm_template_atoms_are_checked_like_body_atoms.
  • corpus/ql/lints/deontic-action-in-premise.lawq (DECISION-0108, каталог ловушек): запрет или свобода, чьё действие стоит положительной посылкой своего же правила, — позиция возникает лишь после совершения действия, а ACTIVE у запрета читается как «уже нарушено». Сверка по предикату (кортеж аргументов literals не несёт); строки baseline — debt для тождественного атома, false_positive для того же предиката при иных аргументах.
  • Чистая тавтология when P(x); then P(x); (strict и defeasible) уже отвергается стратификацией LDC-E4102; вакуумное самочтение через monotone(P(x))/supported(P(x)) с тем же кортежем компилируется молча, в корпусе не встречается (0 из 82 463 правил) и в этот срез не входит.

Движок: два квадратичных участка исполнения сняты — конфликты позиций и порядок соединения (11.09.2026)

  • law-eval/normconflict.rs: detect §105 сравнивал каждую позицию с каждой и на каждую из P² пар канонизировал subject обеих (same), строил литерал incompatible и сканировал узлы программы за ключами предиката. На деле kz.corpus.vred_ts с 1000 расчётов со сроками (≈3800 позиций, 7 млн пар) это было 64 % вызова, K=3000 стоил 141 с. Теперь ключи §208 считаются один раз на позицию (Prepared), несовместимость — один раз на пару шаблонов, ключи — один раз на предикат, а кандидаты в пары порождаются корзинами по subject, действию, шаблону и ключевым столбцам §45.1; обходятся они в порядке (i, j) прежней логикой. Множество пар с эффектом, их порядок, issue и узлы defeat те же байт в байт — эталон полного перебора живёт в тесте модуля.
  • law-eval/solver.rs: порядок конъюнктов тела канонический §207.1, и наивный solve_rec перечислял первый по телу литерал, не глядя на связанность, — у VyplataPriPeredacheOstatkov это давало K×K пар с отсевом третьим литералом (2·K² посещений кандидатов). Планировщик pick_literal предпочитает литерал со связанной позицией и наименьшей корзиной индекса by_arg; наивный порядок выдачи восстанавливается сортировкой по кортежу §208-ключей перечислительных позиций (naive_enumeration_order, то же свойство, что у SemiPlan::enum_order), ошибка терма повторяется наивным порядком, чтобы звучать дословно. Потоковый курсор LiteralSolutions остаётся у тел со связанным наивным порядком; несвязанные тела идут в scratch-решатель. SupportStore::candidate_len отдаёт размер корзины без обхода.
  • Семантика и SPEC не менялись. Зелёные: check_differential 724/724 векторов байтово, наборы kz.corpus.vred_ts (три семейства) и kz.corpus.ogpovts (семь) обоими оценщиками, KZ-differential профиля, cargo test -p law-eval (кроме заранее красного guard::tests::comparisons_match_json_evaluator…, не связанного с правкой), clippy law-eval с детерминизм-линтами. Замер до/после — docs/performance/2026-09-11/vred-ts-stress.ru.md, раздел 8.

Отчёт по оси редакций: проекция ВМЕСТО условия 3 §92 — errata E-0167 (11.09.2026)

  • Запрос §168.3 получил transport-поле editionsAsPresented (LegalTime): состав нормативных узлов уже спроецирован вызывающим по §31 на эту дату, и условие 3 §92 по дате права ДЕЛА не исполняется. Заменяется ровно условие 3: окно effective §87, ось governs, датированный параметр и временной статус позиции §133 читают дату дела. Значение не LegalTime — EVALUATION_REQUEST_INVALID.
  • Режим назван двумя каналами: поле манифеста editionsAsPresented §170 (входит в semanticHash) и info-issue EDITIONS_AS_PRESENTED. Документ без поля не меняется ни байтом — differential 724/724.
  • impact-editions обеих реализаций исполняет каждую сторону с датой ЭТОЙ стороны. До правки сторона считалась по пересечению двух проекций — на дату отчёта и на дату дела: ворота check_liver_edition_impact.py падали девятью расхождениями, а разбор пакета КС на паре 2026-06-30 → 2026-07-01 врал в восьми строках из одиннадцати. Issue режима исключена из сравнимого вида исхода (иначе «изменилось» истинно у каждой строки), но остаётся в полных документах изменившихся сценариев.
  • Прозе: §92 (абзац о предъявленном составе), §168.3 (transport-поля), §170 (поле манифеста), LAYERS-NEXT О-2; схемы evaluation-request и evaluation.

Мера §33.1 берёт единицу из первого адреса локатора (11.09.2026)

  • corpus/tools/lib/act_split.py: разбор адреса фрагмента вынесен в locator_unit(). Прежде boundaries.py собирал номера по ВСЕМ совпадениям LOCATOR_RE, и вложенный article/63/paragraph/3 объявлял вдобавок несуществующую «статью 3» — ветвь paragraph, заведённая для параграфов немецкого закона. Ворота закрепления тот же локатор разбирали правильно: две меры §33.1 говорили о разных множествах единиц.
  • Ветвь paragraph (именованная группа paragraph_unit) действует только там, где параграф — сама единица деления: локатор начинается с paragraph/ либо объявлена единица из PARAGRAPH_UNITS (de_paragraph, ifrs_paragraph, ias2008_paragraph). Регрессия на обе формы — LocatorUnitTests в .claude/skills/formalize-act/scripts/test_boundaries.py.
  • База глубины перерегистрирована точечно по пяти сдвинувшимся актам (kz-constitutional-court-np, kz-gosreg-yurlits, fia-f1-sporting, kz-peaceful-assembly, intl-antarctic-treaty): ушли 20 ложных единиц SOURCE_ONLY и столько же UNEXPLAINED, EXECUTABLE не изменился нигде.

Выводимое включает эффект полномочия §127 (11.09.2026)

  • verify/ci/gates/coverage/check_package_questions.py (surface()) и apps/mcp/law_mcp/catalog.py (_derivable_predicates) считали выводимыми только головы правил и assert-факты; предикат эффекта create полномочия §127 попадал в «факты дела», хотя материализуется norm runtime §280.3 и отвечает на truth/collect как любой вывод (§143.1, E-0134). Исправлено; terminate/modify производителями не признаны (вне v1, NON_EXECUTABLE_RULE) — дополнение к DECISION-0190.
  • Ветвь карточки каталога может называть правило с головой norm_template_ref, если эффект названной нормы — предикат карточки; канарейка ворот получила седьмую подделку (снятая карточка предиката, выводимого только эффектом), scaffold_questions.py скилла formalize-act знает тех же производителей, apps/mcp/test_server.py сторожит деление на acceded Договора о космосе.
  • corpus/laws/kz/constitutional-court-np: обходные positions-карточки заменены запросами к provision_ceases_on и judgment_reviewed (33 карточки); corpus/laws/kz/migration: 34 карточки на предикаты эффектов, вход границы resheniya-organov исправлен на осуществление полномочия (638 карточек).

Миграция населения РК — полная формализация Закона 477-IV и постановления № 148 (11.09.2026)

  • corpus/laws/kz/migration/ (kz.corpus.migration), DECISION-0192: постановление № 148 закреплено тремя документами (sources/{postanovlenie,pravila-vezda,pravila-kontrolya}-148/), фрагменты — corpus/tools/sources/sync/sync_migration_148_fragments.py (впаян в verify/ci/run_all.sh); 14 областей modules/, 992 правила, 1942 теста в 9 семействах, календарь §85 импортом, политики §86 узлами пакета, канал суждения §47.3, pub у 43 символов для пакета-дела.
  • Меры завершённости: матрица покрытия, каталог вопросов, находки шаблонов, независимая модель tools/oracle/ (349 дел, 94 мутации), пакет-дело examples/inostranec-v-kazakhstane (строка в packs/examples/README.md), audit.ru.md. Реестры глубины, меток, состава и находок шаблонов — их --register; общий CLIR — gen_kz_clir.py --only kz-migration.lawir.json.
  • Семь спорных прочтений записаны развилками DECISION-0192 до решения владельца.

Нормативные постановления Конституционного Суда 2023–2026 — новый пакет (11.09.2026)

  • corpus/laws/kz/constitutional-court-np/ (kz.corpus.constitutional_court_np): вся линия НП № 1–89 факт-группами §23.1, закреплённые байты «Әділет» (91 публикация, 458 фрагментов); Конституционный закон «О Конституционном Суде» в двух редакциях (2022 — снимок Архива Интернета; с 01.07.2026).
  • Модель: признание неконституционным — полномочие §127 с эффектом provision_ceases_on(p, day) (день принятия либо дата Суда); пересмотр решений и иммунитет §128 FinalJudgmentStands с явным изъятием дела заявителя; «иной порядок» — изъятие в общем полномочии, без приоритета; частичное признание — provision_partly_ceases_on; прямое применение Конституции и переходный порядок до изменения закона (ст. 64 п. 1, 4).
  • Генератор corpus/tools/sources/sync/sync_constitutional_court_np_fragments.py (источники описываются данными source.json/fragments.json, --check в конвейере); analysis/impact-editions/check_impact.py — «что изменилось» на трёх парах дат, lawc == lawref, в конвейере с канарейкой.
  • Рекомендации ст. 64 п. 3 (np_recommends, recommendations_must_be_considered); правила истолкования требуют пределов полномочия ст. 23.
  • 276 файлов .lawtest, семейство #authored, оба оценщика; каталог вопросов (28 карточек), матрица покрытия (399 строк), пакет-дело (14 дел, 26 вопросов), независимый оракул (54 теста паритета), мутационные канарейки (14: 13 убиты, 1 эквивалентная); аудит полноты audit.ru.md; регистрация: LOWERED_ACTS, CLIR_PACKAGES, метки (276/0), глубина §33.1, храповик каталогов, мёртвые символы (6 документарных).
  • check_source_pinning.py: сторож склейки заголовков пропускается при объявленном пустом охвате scope: [] (канарейка 19/19).

Операции над Text: длина и образец — errata E-0166, DECISION-0191 (10.09.2026)

  • §57: Text упорядочен по кодовым точкам после NFC (норма записала неписаное поведение обеих реализаций). §257: text_length(t) — число кодовых точек; text_matches(t, pattern) — предикат уровня формулы (как rounds_to §64.2), полное совпадение с образцом закрытого диалекта §257.1; §27 — LDC-E2117, LDC-E2103, LDC-E2108, LDC-E1305.
  • Каталог std: роль intrinsic_predicate, STD_PREDICATES в порождённых модулях, ворота check_std_catalogue с обработчиком предиката и починенным разбором §59. Схема CLIR: ComparisonFormula.op += text_matches.
  • lawref: textpattern.py, text_length_value, ветвь text_matches в binary. lawc: law_canon::text_pattern, values/text.rs, ветвь в ops::binary, обработчик calls.rs, понижение lower_text_matches, типизация. Оператор text_matches в паках вербализатора.
  • Векторы ERR-E0166-TEXT-{LENGTH-*,ORDER-*,MIN,MATCH-*} (19 L0, 3 L1); ERR-E0076-STD-SLICE-ORDER перезаморожен точечно. Реестры: digitize, builder text_terms, differential, backends-vectors.
  • Ревизия семантики E-0156 введена (DECISION-0191 §2.7, вариант A): 0.1 → law.core/0.1.1, 0.2 → law.core/0.2.1; SEMANTICS_REVISIONS из реестра языка в обеих реализациях (manifest.semantics, конверт hand-authored CLIR, версии запроса); CLIR корпуса, локи, голдены векторов, профили, демо и опубликованные копии перегенерированы. Маска в kz.corpus.vred_ts — граница (§2.9).
  • Издатель импортов (law-import emit, ratio_scales.py) печатает форму источников после ручной миграции: параметры правила в заголовке, assert "<id>": p(…) { }, (count all … for … where …); публикации orders/divisibility/integer-divisibility/physics/quantity-order воспроизводятся байтово; check_lean, check_publication, check_quantity_order зелены.

Экзистенциальный аргумент _ в теле правила — errata E-0165 (10.09.2026)

  • §98/§190/§185: _ аргументом положительного литерала тела — «есть какое-либо значение»: опора как дизъюнкция §64 по совпадающим атомам, одно применение на подстановку, свидетель — наименьший по §208; в голове, под not, в статус-тесте, в терме, в деле и в вопросе — прежний LDC-E0207 (E-0041). Грамматика argument = expression | "_", WildcardTerm в схеме CLIR, модель law-clir перегенерирована.
  • lawc: Expr::Wildcard в парсере, понижение в lower_body_atom, CompiledArg::Any/PatternArg::Any (связанная позиция — свидетель по ключу, перечисление — дедупликация по остальным позициям и обход по ключу), потоковый курсор и индекс равенств литералы с _ не квалифицируют, why_not (детали «есть значение»/«нет ни одного значения»), вербализатор. lawref: wildcard_witness/ground_or_witness, solve, посылки, why_not, вербализатор. Фраза term.wildcard во всех пакетах.
  • Векторы ERR-E0165-WILDCARD-{ONE-VALUE,MANY-ONE-APPLICATION,NO-VALUE,BOTH-ONLY,WHYNOT} (L0) и {POSITIONS-REJECTED,BODY-ACCEPTED} (L1); ERR-E0041-UNDERSCORE-NOT-A-NAME перезаморожен (2 → 1). Реестры: digitize, builder wildcard, differential, backends-vectors.
  • kz.corpus.vred_ts: слой наличия и мосты сняты в акте и отчёте (38 + 38), группы читают значения через _; сценарии, parity-эмиттер, мутанты и матрица покрытия переведены; CLIR и потребители пересобраны; учебное дело перезамкнуто; бланки демо и читалка перепорождены.

Предметная раскладка пакета: modules/<область>/ на образце vred-ts (09.09.2026)

  • corpus/laws/kz/vred-ts перенесён из шести нумерованных файлов в тринадцать предметных модулей modules/{raschet,osmotr,vyplata,detali,otchet,iznos}/; 00-package.law → package.law, 01-sources.law → sources.law. Сценарии разложены по tests/<область>/, tests/integration/ и tests/regression/; tests/parity/ не тронут. Заведён corpus/laws/kz/vred-ts/README.ru.md с таблицей «задача → файл → входы → результаты → сценарии».
  • Байтовая нейтральность измерена, а не заявлена. Частный снимок профиля до и после переноса дал побайтово равный kz-vred-ts.lawir.json (sha256:999ccaa7…, 273 узла): StableId, публичные символы, @source-якоря, semanticHash/theoryHash/artifactHash — те же. Три анонимных assert переезд пережили: в law.core/0.2 их id — digest содержания (§207.2), а не позиция. Сверка некомментарных строк: то же множество из 828 строк.
  • Конвенция: docs/PACKAGE-LAYOUT.ru.md получил раздел «Предметная раскладка норм» и строку modules/<область>/ в таблице подкаталогов; modules внесён в lint.PACKAGE_SUBDIRS. Миграция остальных пакетов НЕ требуется — плоская нумерованная раскладка остаётся законной.
  • Починено попутно, и это дефекты до переноса. (1) Обнаружение сценариев искало tests/*.lawtest НЕРЕКУРСИВНО: tests/parity/*.lawtest у vred-ts уже выпадал из проверки «файл не назван ни одним [tests]», то есть незаявленный вложенный сценарий проходил молча. Обход стал рекурсивным, владелец файла берётся ближайшим law.toml вверх, у check_lawtest_discovery появилась вторая канарейка (она падает на прежней форме); корпус зелен — 746 наборов, 7123 файла. (2) Шесть из двадцати якорей tools/catala/mutants.py протухли после миграций 09.09 (именованные аргументы, let, именованные unless) — инструмент отказал бы на первом мутанте; якори восстановлены, смысл мутаций сохранён, прогон 20/20 убито. (3) tools/coverage_matrix.py искал правила через glob("0*.law") — с любым переездом это дало бы ноль правил при зелёной двусторонней полноте; заменено рекурсивным обходом с границей вложенного пакета. (4) В references/package-layout.md навыка formalize-act исправлено утверждение «anonymous assert IDs are positional» — это правило 0.1, а не 0.2.
  • Проверено: профиль sh verify/ci/run_all.sh PASS (3 семейства обоими оценщиками, регрессия vred_ts 33/33, 35 вычислений байтово идентичны, векторы 1218, check_differential 668/668, check_backends OK); coverage_matrix --check 0 замечаний; compare.py --check актуально; mutants.py 20/20; check_source_pinning --only 0 нарушений; boundaries.py EXECUTABLE 11 / SOURCE_ONLY 2; lint.py по всем 15 файлам 0 замечаний. Замороженные пакеты не проверялись.

Пилот «бланк из канона»: акт осмотра по приложению 2 vred-ts (09.09.2026)

  • Новая демо-поверхность apps/demos/akt-osmotra/ (строка манифеста, скелет DECISION-0066). Генератор без семантики читает CLIR kz-vred-ts, строит дерево бланка обходом правил от предиката «акт содержит сведения приложения 2» до эмпирических предикатов (18 полей, 5 групп, оговорка об одометре — альтернатива двух правил), кладёт рядом закреплённый текст приложения с точными строками подпунктов и вшивает в страницу wasm-ядро law_wasm_core с обёрткой лендинга.
  • Проверка заполнения — движок в браузере: truth по корню, при NEITHER спуск why_not по конъюнктам UNDETERMINED до полей; список «чего не хватает» с подпунктами и цитатами приходит из ответов движка. Полный акт — TRUE_ONLY за ~0,2 с; без обеих ветвей 4.8 и без ФИО осмотревшего — четыре вопроса, 1,8 с, названы 4.8 (либо фото, либо отсутствие одометра) и 6.
  • Место поля в тексте: точная строка по адресу из метки; у трёх полей без адреса — строка по доле слов метки (Дайс штрафовал длинные строки и уводил «сведения о собственнике» на строку 4).
  • Вторая форма тем же генератором (--form akt|otchet|all): отчёт о размере вреда по приложению 3 — 27 полей, 10 групп, четыре альтернативы, поле с параметром Money (итоговая величина) вводится суммой и уходит движку литералом Money. Адрес «пункт N подпункт M» ведёт к строке M) внутри пункта, ненумерованные элементы находятся по словам внутри области подпункта, поле без строки наследует строку группы. Спуск why_not различает гард правила (сумма с дробной частью) и предъявленное поле, которое по отдельности не проверяется. Навигация между бланками.
  • Третья форма — заявление по приложению 1 (2 поля, 1 группа, строки по словам): все три приложения Правил собираются одним генератором, --form zayavlenie|akt|otchet|all.
  • 10.09: поля со значениями. Канон kz.corpus.vred_ts получил аддитивный слой значений акта осмотра (21 предикат с аргументом и меткой параметра, 19 мостов «есть, если указано», наличие — institutional; старые сценарии не менялись, новый 19-znacheniya-akta.lawtest, матрица покрытия дополнена). Генератор бланка рисует ввод по типу параметра (Text, Date, Integer, Money, Quantity с единицей из метки), сворачивает «наличие ← значение» в одно поле, пишет .lawcase значениями; граница области подпункта учитывает строки «4.2.». Читалка text-reader ищет модули рекурсивно (modules/**), без examples/ и tests/.
  • 10.09: слой значений отчёта по приложению 3 в kz.corpus.vred_ts (25 предикатов, 19 мостов, суммы Money; сценарий 20-znacheniya-otcheta.lawtest, матрица 105 правил без замечаний). Бланк отчёта — 33 поля с типами; подбор строки внутри подпункта по трёхзначным основам; формулировка «предъявлено, наличие не выведено» для соседних значений незакрытого сведения.

E-0164: блокер why_not для правила с вычисляемой головой (09.09.2026)

  • §185: правило, чья голова несёт call, арифметику или let, стоит в blockers по совместимости головы с целью и несёт headArguments (position, term, status: UNEVALUATED, detail); равенство вычисляемого аргумента с целью не проверяется — считать в объяснении нельзя, и при trigger: SATISFIED правило могло вывести другое значение. Схема EvidenceBlocker.headArguments; оракул и law-eval байтово равны.
  • Векторы ERR-E0164-WHYNOT-COMPUTED-HEAD-BLOCKER и …-SATISFIED; голден ERR-E0105-WHYNOT-MISSING-POLICY перезаморожен по errata.
  • Пример kz/vred-ts/examples/gibel-i-detali: вопрос pochemu-ne-vyplata к делу Molchanie теперь называет оба правила пункта 9.
  • Там же дело MolchanieSnyato: те же факты плюс установленное отрицание передачи остатков — выплата 850 000; check.py 8 дел, 19 вопросов.

Кодогенерация модели в самостоятельный модуль: TypeScript, Python, Go (09.09.2026)

  • DECISION-0188, engines/backends/: между CLIR и целевым языком стоит план law-backend-plan/0.1 — таблицы, правила, соединения, гарды, термы, окна действия §31, собственные факты пакета. План строит plan.py, целевой язык живёт только в эмиттере targets/<цель>/emit.py. Срез — слой L0 в профиле core-executable (§8.4): ответ и статус без доказательства, семантического хэша и канонического документа.
  • Все отказы принадлежат плану, а не эмиттеру. Отказ в эмиттере означал бы, что один пакет в разных языках значит разное: где-то отказ, где-то тихо другой ответ. Незнакомое объявление, поле правила или форма терма отвергаются названной причиной.
  • Найдено векторами и починено: молчаливый пропуск жизненного цикла редакции §31/§92.3 давал TRUE_ONLY вместо NEITHER на ERR-E0095-CLOSED-EDITION-RULE.
  • Ворота verify/ci/gates/backends/check_backends.py, шаг 73/73 полного конвейера (прежние 72 шага перенумерованы). Из 328 рассмотренных L0-векторов план построен и запрос truth поддержан у 25; совпали с голденом во всех трёх целях 19; расхождений между целями и с голденами нет; отказов рантайма вслух 6. Шаг целиком — 11 секунд вместе с tsc и 25 сборками go build. Пол храповика MIN_CHECKED не даёт числу исполненных векторов молча упасть.
  • Цель Python исполняется всегда и тулчейна не требует: без неё ворота сообщали бы «зелено», не исполнив ни одного бэкенда. TypeScript и Go пропускаются только при отсутствии тулчейна и называются в отчёте.
  • Стоимость новой цели: эмиттер 80–100 строк при рантайме 80–180. Дорожает не грамматика, а точная десятичная арифметика — у TypeScript родной bigint, Go потребовал math/big.
  • docs/reference/overview/CATALA-COMPARISON.ru.md: утверждение «самодостаточного модуля без рантайма правил здесь не получить» опровергнуто для L0 и исправлено тем же изменением.
  • Ворота различают отказ и крах, план 0.2 (позже тем же днём). Раннеры трёх целей получили общий протокол выхода: ответ — код 0, названный отказ — код 3 и {"refused": текст} одного типа Refused, всё остальное — крах, который валит ворота; отказ обязан быть единогласным и дословным. Прежние ворота прерывали вектор на первом ненулевом коде и не видели, что на ERR-E0046-CASE-ARG-TYPE Python и Go отвечают TRUE_ONLY против NEITHER. Исход каждого L0-вектора закреплён в verify/ci/data/backends-vectors.json (--write-manifest), --require делает отсутствие тулчейна отказом. План law-backend-plan/0.2: таблицы несут params, типы параметров проверяются планом, эмиттеры отвергают чужую версию (отрицательная проба в воротах). Раннеры сверяют аргументы дела с сигнатурой §189 (E-0046) и кладут TYPE_ERROR в issues; TypeScript принимает Integer; Go читает числовой литерал байтами. Замер: 23 исполнено, 21 совпало, 2 отказа, 0 крахов и расхождений (было 25 / 19 / 6).
  • Сертификация рантайма, шаг профиля, ключи §45.1 (тем же вечером). engines/backends/runtime-cert.json — 51 случай контракта рантайма с ожиданиями из README; харнессы targets/<цель>/cert.*; ворота сверяют до векторов. Починена коллизия ключа дедупликации (экранирование | и \), Python отказывает на неизвестный оператор сравнения вместо KeyError. Ворота вошли в рабочий профиль с обязательными ts,py,go (backends_targets в плане, тест); тулчейн TypeScript — свой проект targets/ts/package.json, workflow ставит node, npm ci и go. План отказывает на ключах отношения §45.1 (LAY-L0-KEYS и ещё три вектора сменили исход). Замер: 22 исполнено, 20 совпало, 2 отказа.
  • Типы аргументов запроса и головы (позже). Оракул ключует атом по каноническим args с типом (§208): запрос Integer 1 к утверждению Decimal 1 даёт NEITHER без issue, бэкенд по величине отвечал TRUE_ONLY. Новые векторы LAY-L0-QUERY-ARG-TYPE (NEITHER) и LAY-L0-QUERY-ARG-SCALE (0.5 против 0.50 — TRUE_ONLY): голдены из оракула, differential 2/2 байтово, lawc check чист, дела понижаются в те же байты. Раннеры сверяют запрос с сигнатурой; план статически проверяет типы аргументов головы против параметров (E-0077). Замер: 24 исполнено, 22 совпало.
  • Поставка, обзор корпуса и первый потребитель (ночь). deliver.py (./law dev backend) печатает пакет в каталог с рантаймом, раннером, планом и паспортом law.backend-delivery/1 (семантический хэш §209, SHA-256 файлов); ворота печатают проекты той же функцией. survey.py (./law dev backend-survey) собирает все отказы плана по 701 снимку: узел publication (провенанс §27.3) отвергал 621 пакет — пропущен, план строится у 31 пакета вместо 5. consumer.py (./law dev backend-consumer) понижает .lawtest пакета компилятором и спрашивает поставленный модуль: 24 пакета, 300 сценариев, 298 совпали, 2 пропуска why_not, расхождений нет. Отчёт — engines/backends/SURVEY-2026-09-09.ru.md.
  • План 0.3: Date, константы, перечисления (ночь). Date §2.15 — хранимое и сравнимое по дню значение (векторы LAY-L0-DATE-ORDER-AFTER /-BEFORE из §57/§58, голдены из оракула, differential 2/2); константы §54 разыменовываются раннером в деле и запросе с проверкой типа и наследованием сущностей (ERR-E0032 перешёл из отказа в совпадение); члены перечислений §38 — значения-идентичности, как в ключе оракула (ERR-E0067-ENUM-GUARD-EQ/-FILTERS совпали); порядок над перечислением и сравнение разных перечислений — отказ плана. Сертификация рантайма — 75 случаев. Обзор корпуса уточнён: «константа не найдена» была членами перечислений и параметрами A3, «несовпадение типа головы» — ложным срабатыванием статической типизации; принятых пакетов по-прежнему 31.
  • План 0.4: арифметика §58 (10.09.2026). Операции add, sub, mul, div, mod и функции min, max, abs, pow, round над Integer, Decimal и Money; пары видов — статически по таблицам §58 (пара вне таблицы — отказ плана), зависящее от значения — названный отказ рантайма (не 10-гладкое частное, INEXACT_DIVISION, ноль, пределы pow). Три рантайма переписаны на общий контракт с точным делением и евклидовым остатком; сертификация — 111 случаев из prose. Шесть новых векторов LAY-L0-ARITH-* по строкам §58 (в том числе E-0036: 62400.00 / 12 точно, 65000.00 / 12 — INEXACT_DIVISION), голдены из оракула, differential 6/6; четыре старых вектора E-0062/E-0075/E-0110 перешли из отказа в совпадение. Ворота: 39 исполнено, 36 совпало. Принятых пакетов корпуса по-прежнему 31.
  • Десять целей (10.09.2026). К TypeScript, Python и Go добавлены Ruby, Rust, Java, C#, Kotlin, Erlang и Elixir. У каждой цели дескриптор в targets/<цель>/emit.py (available, MODEL, layout, build, run), ворота, поставка и потребитель ветвятся по нему, а не по языку; --targets выбирает цели (по умолчанию ts,py,go, all — все с тулчейном). Каждая новая цель принята сертификацией из 111 случаев и 36 векторами наравне с первыми тремя; сертификация нашла ту же ловушку в Python, Erlang и Elixir — собственные max/abs/min рантайма затеняли встроенные — и общий бинарь у Rust при общем --target-dir. Java и Kotlin несут свой разбор JSON: числа сохраняются текстом. Поставка myco.primety перепечатана в десять целей.

Учебные дела над vred-ts: гибель автомобиля и стоимость детали (09.09.2026)

  • corpus/laws/kz/vred-ts/examples/gibel-i-detali/: пакет-дело §168.4 с семью делами по пунктам 9–10 Правил и сноске приложения 3, семнадцать вопросов (truth, why_not, collect, positions), check.py — ожидания по тексту, основания с якорем, Rust/Python, replay — 17/17; README с маршрутом law ask → law engine explain → law eval.
  • В каноне kz.corpus.vred_ts открыты pub 29 символов для фактов и результатов сцен; логика не менялась. Снимки kz-vred-ts, kz-ogpo-vts, kz-uproshchennoe-uregulirovanie и профиль kz.sources пересобраны генераторами (генератор ходил устаревшим target/debug/law-cli).
  • Регистрация: check_corpus_enrollment (NOT_LOWERED с причиной), run_all.sh (материализация + check.py), каталог packs/examples/README.md.

Демо text-reader для любого пакета корпуса, страница vred-ts (09.09.2026)

  • apps/demos/text-reader/tools/gen_data.py: флаги --package, --clir, --lower, --out; каталог исходников находится по короткому имени CLIR; заголовок, номер, редакция, дата вступления в силу и публикация — из узлов source_work/source_edition/publication; роль единицы по локатору, порядок по тексту закреплённой публикации; адресный префикс метки («Пункт 10 подпункт 1.», «Приложение 3 пункт 1…») снимается перед подбором места. Шаблон: главы заголовками, приложения блоками, перенос строк внутри единицы, метка «+N норм без места» вместо молчаливой потери нормы.
  • Вторая страница — kz-vred-ts (dist/kz-vred-ts/index.html, пакет вписан в apps/demos/manifest.json): 19 единиц, 93 привязки, 78 с местом, код у всех. Собирается с --lower: снимок corpus/clir/kz-vred-ts.lawir.json отстаёт от .law (56 правил против 67).

Массовый перенос DECISION-0187 на остальные пакеты (09.09.2026)

  • По явному поручению пользователя: 556 единых заголовков, 42 коротких приоритета, 1 471 агрегат и 165 786 именованных assert в 7 186 файлах corpus/laws и packs. Vred-ts исключён; 769 расширенных приоритетов оставлены полными. Повторный проход 13 506 файлов не предлагает замен.
  • AST сохранён; CLIR 266 пакетов / 133 435 узлов побайтово эквивалентен. У bio.mendel остаётся исходная ошибка хеша публикации LDC-E5204. Предметные сценарии не запускались, общие CLIR и lock-файлы не обновлялись.
  • Заголовок assert теперь различается по двоеточию, сохраняя прежние вызовы отношений по строковому StableId в деле. Мигратор сохраняет вложенные скобки генераторов, URL-литералы и утверждения facts-блоков. Проверены 94 теста парсера, один HIR и 10 тестов миграторов.

Заголовки, приоритеты, агрегаты и assert (09.09.2026)

  • DECISION-0187: параметры presumption/constraint/term в заголовке, priority P: A > B reason R;, sum/count/min/max all/distinct … where … и assert "id": proposition. Прежние формы и семантика сохранены.
  • LDC-E2142 предупреждает о статически видимых разных числовых значениях голов одной полярности: ребро приоритета не становится выбором значения.
  • Скриптовая миграция только vred-ts: 482 утверждения, 20 файлов; CLIR дел, запросов и ожиданий 96 тестов побайтово совпадает до/после.
  • 94 теста парсера, 256 HIR, 14 форматтера и 4 мигратора прошли. Профиль: 161 lawtest, 33 regression, 35 differential-вызовов; ядро: 1214 conformance, 664 differential. Замороженные пакеты не проверялись.

Сокращения синтаксиса: пилот vred-ts (09.09.2026)

  • DECISION-0186: общий тип группы параметров, именованные unless, локальные арифметические let, числовые test variants и именованные аргументы relation. Сохранены прежние формы; неверные имена аргументов и типы ячеек диагностируются.
  • Python и Rust вычисляют LetTerm с внешними связанными переменными в правилах. Контекст импортов дополнен именами параметров без изменения экспорта типов.
  • AST-проверяемая массовая миграция ограничена vred-ts; повторный проход пустой. Сохранены прежние ожидания, добавлены четыре сценария числовых границ.
  • Активный профиль passed: 161 сценарий, 33 regression, 35 байтовых сравнений; 1201 conformance-вектор и 656 differential-векторов ядра прошли. Новый T304 отдельно прошёл differential и включён в постоянный список. Замороженные пакеты не проверялись.

Редактор: преобразование синтаксиса с предпросмотром (09.09.2026)

  • law.refactorSyntax: параметры правил и краткие цели duty преобразуются в обе стороны после сравнения AST; diff и применение разделены, устаревший буфер и небезопасная оболочка отклоняются.
  • Подсказки объявленных типов и переход к переменным своего правила; E4103 исправляет AST-спан strict, включая заголовки с параметрами.
  • WASM сохраняет ok и диагностики в parse --ast --json, AST-кэш отклоняет устаревший результат. Дополнен реестр деклараций редактора.
  • 418 проверок расширения, 13 новых тестов и профиль vred_ts прошли.

Краткие цели обязанностей (09.09.2026)

  • По отдельному поручению перенесены ещё 3 257 целей в 876 файлах остальных пакетов, кроме vred-ts. AST и CLIR 276 пакетов эквивалентны, перенос идемпотентен; 45 неподходящих целей сохранили полную форму.
  • DECISION-0185 / E-0163: achieve F during W; и maintain F during W; в duty эквивалентны полным блокам achievement/maintenance. Повторные цели отклоняются; CLIR и исполнение сохраняются. Обновлены редакторы.
  • Мигратор с предпросмотром, diff и проверкой AST перенёс 24 цели НК РК в девяти файлах. Частные CLIR совпали побайтово. Налоговый профиль и core conformance прошли; полный корпус не запускался.

Типизированные значения и универсальная санкционная развёртка (08.09.2026)

  • E-0162: value<T> и выводимый value в expansions, типизация констант и импортированных позиций, подстановка const_ref/entity-ref и source map. T270–T291 проверяют допустимые значения, отказы и чувствительность хэшей.
  • law.expansions.sanction 0.1.0: применимость фиксированного варианта, самостоятельные основания исключения и явные приоритеты. Учебные штраф и ограничение права — 16 сценариев; пилот КоАП 592.2 переведён на шаблон.
  • Компилятор строит таблицу типов значений один раз на пакет; сборка экспортных сигнатур индексирует узлы по StableId. Словарь санкций, вычисления мер и семантика evaluator-а остаются прежними.

Станция в Arxo Lens: три подмены, которых машина не делает (09.09.2026)

  • apps/answers/examples/autonomous_station.py — три разбора и 30 проверенных расчётов: конфликт двух датчиков (истину не выбирают, среднего нет, наблюдение не прекращается), чужой запорный контур (принадлежность считает vocab.systems, требование изоляции остаётся) и разрешение против исполнения (квитанция, устаревшая база, молчание, повтор ключа). Приёмка — test_autonomous_station_example.py, 16 тестов.
  • Шесть станционных пакетов вписаны в LOWERED_ACTS: law_ask читает пакеты только из corpus/clir, и без снимка витрина станцию спросить не может. check_corpus_enrollment получил ПЯТЫЙ пакетный корень со своей конвенцией имени; храповики публичного API и меток дополнены шестью строками (у station-operations — руками, с $comment: 60 неразмеченных суть порождённые узлы шести pub procedure §201.1, 6 × 10).
  • Каталог MCP научился ЧИТАТЬ манифесты пакетов вне corpus/laws (EXTRA_MANIFEST_ROOTS). До этого провенанс подписывал станционные ответы jurisdiction = None — молчанием, тогда как манифест объявляет "none"; а «правопорядка не объявил» и «вне юрисдикции государства» — разные утверждения. Приёмка витрин проверяет вымышленность предмета по провенансу.
  • Исключение packs/demo в общем обнаружении сценариев разбито поимённо: 339 станционных сценариев вошли в общий раннер (наборов 743, файлов 7107) и проходят обеими реализациями.

Исполняемая автономная станция: двенадцать пакетов и host-трек H0–H4 (08.09.2026)

  • vocab.systems, arxo.world_protocol, calc.resources, calc.intervals, calc.reconciliation, шесть станционных пакетов (packs/demo/autonomous-station/packages/) и пакет-дело examples.cases.station_demo_72h: 513 сценариев и 9 свойств §270 обеими реализациями байтово (22 vocab.systems, 37 arxo.world_protocol, 41 + 37 + 37 вычислителей, 339 станционных), 23 сквозных вопроса к трём контрольным делам.
  • Седьмой корень категории verify/ci/gates/differential/check_station.py (та же фаза пакетов, что у check_primitives, плюс полнота объявления [tests], запрет фиктивного официального источника и свежесть порождённого) и check_station_demo.py (журнал 72 часов, схемы транспорта, лок с полным замыканием, матрица F01–F18, сторож чистоты хоста).
  • Host-трек: шесть схем транспорта, детерминированный world runner с append-only журналом и идемпотентностью, дискретный симулятор без генератора случайных чисел, планировщик конечных путей, представление.
  • Пробы импорта трёх вычислителей переписаны с синтетических потребителей на НАСТОЯЩИЕ станционные (слитые миры из трёх, шести и девяти пакетов); снимки CLIR заведены в LOWERED_ACTS, и общее обнаружение сценариев больше не сообщает об их отсутствии.
  • Паспорт P07 приведён к фактическому API и переведён СРЕЗ → СУЩЕСТВУЕТ.
  • check_lower научился находить источник демо ИЗ НЕСКОЛЬКИХ ПАКЕТОВ (clir/<каталог>.lawir.json → packages/<каталог>/) — общее правило корня packs/demo, а не запись про станцию.

Импорт иерархии порядков mathlib (08.09.2026)

  • Профиль проекции Lean arxo.lean.sorted-relations/0.2: родительские проекции классов (PartialOrder.toPreorder, LinearOrder.toPartialOrder) становятся правилами guard_T(o) :- guard_S(o); экспортёр сообщает вид instance по атрибуту Lean, вид добавлен в Import IR, inventory, схемы и law-import (DECISION-0172 §34).
  • arxo.order: guards partial_order_structure, linear_order_structure и два правила ступеней вниз; mathlib.order условно принимает обе проекции с отдельными разрешениями. Снимок verify/imports/lean/order-hierarchy.jsonl, ворота verify/imports/check_order_hierarchy.py в run_all.sh.
  • Делимость (DECISION-0172 §35): пути instance через объявленные проекции; пакеты arxo.divisibility, mathlib.divisibility, разрешения и целочисленное прочтение arxo.integer_divisibility; манифесты corpus/imports/divisibility/ и integer-divisibility/, ворота verify/imports/check_divisibility.py.

Семейство «эфир и относительность» (08.09.2026)

  • Шесть пакетов исполняют сопоставление трёх моделей движения света и тел: phys.relativity_core (протокол), phys.classical_ether, eng.lorentz.electromagnetic_phenomena_1904, eng.einstein.electrodynamics_1905, eng.michelson_morley.ether_drift_1887, phys.relativity_comparisons. Пакет-дело examples.cases.efir_i_otnositelnost — два дела §168 и 18 сохранённых запросов.
  • Закреплены байты трёх первоисточников по приколоченным ревизиям страниц: Эйнштейн 1905 в ДВУХ редакциях (немецкий подлинник и перевод Saha 1920) с парными якорями §194, Лоренц 1904 по первопубликации KNAW (а не по перепечатке 1923 года), Майкельсон и Морли 1887 сплошным тайлированием в 41 фрагмент. Четыре сверки --check без сети стоят в run_all.sh.
  • Отношение теории к принципу четверояко (accepted, rejected, not_required, not_settled_here) и отделено от истинностного статуса: «эфир не нужен» не превращается в «эфира нет» ни правилом, ни показом. ether_shown_not_to_exist и theories_are_equivalent объявлены и не выводятся; верхняя граница опыта опровергает сверх себя и не подтверждает под собой.
  • openstax.relativity расширен: pub у восьми входов и три новых правила — преобразование времени, замедление, сокращение; speeds_to_compose даёт точную дробь сложения скоростей отдельным входом, чтобы прежнее правило величины продолжало отказывать громко на непредставимом результате.
  • Новые ворота check_relativity_mutations.py --canary: четыре мутанта связанного мира §23 со свидетелями в наборах разных пакетов, плюс два свойства мира — испорченный пин роняет сборку (§11), порядок загрузки её не меняет.
  • Показ: apps/answers/examples/relativity_comparison.py — восемь разборов и 39 расчётов, каждый сверен с независимо записанным ожиданием; ключ --export-public вносит их во встроенную подборку Lens, которую оба штатных сборщика включают в деплой автоматически.

Универсальные ответы Lens 0.2 (08.09.2026)

  • DECISION-0176. Один engine-free answer_contract читает неизменяемые документы 0.1/0.2; строгий validator, refs, типизированные значения, semantic dimensions и полнота проверяются до записи.
  • Producer registry даёт проверяемые capture/replay/projection для поставляемых инструментов и машинно отличает declared_only пробелы.
  • Writer 0.2 сохраняет весь native results, включая CONSTRAINT; generic RU/EN reader не зависит от имени пакета и показывает ограничения кратко.
  • Content-addressed parts доступны только через активный документ, входят в статический export и закрываются отзывом. Jobs защищены idempotency key, lease и номером попытки.
  • Полный hash проекции покрывает значения, semantic dimensions, профиль, полноту и ссылки; manifest страниц отвергает пропуск, перестановку и несогласованный счётчик. Выбор view детерминирован registry-приоритетом.

Официальный календарь стал закреплённой зависимостью (08.09.2026)

  • DECISION-0175. Календарь §85 приходил в мир 33 актов сложением узлов без объявленного импорта; пин §11 для него не считался никем, хотя календарь выводится исполнением закона о праздниках. Переведено 30 актов на обычный import с закреплением; три отложены названной причиной.
  • Порядок сборки: календарь строится ДО актов (build_official_calendar_2026, PREBUILT_PACKAGES), а не из результата сборки — прежний порядок и делал импорт невозможным. Байты календаря при этом не изменились.
  • Ответы не изменились: миры concat и link совпадают поэлементно, semanticHash и theoryHash актов не двигаются; голдены не переписывались.

Мост метазнания и акта права: doctrine.notice_provenance (08.09.2026)

  • Новый пакет corpus/laws/doctrine/notice-provenance связывает рекомендацию W3C PROV со статьёй 92 АППК Республики Казахстан. Ни один из источников о другом не высказывался, и связь выполнена третьим пакетом без единой правки у w3c.prov и kz.corpus.appc.
  • Запись в голову чужого пакета: прослеженная запись об извещении даёт kz.corpus.appc::act_became_known_on — факт, который АППК ждёт от дела и вывести сам не может; предельную дату дальше считают его собственные правила.
  • Три состояния вместо двух: прослежено / описано без оценки содержания / содержание отвергнуто. Второе и третье дня осведомлённости не дают, и жалоба тогда не признаётся ни поданной в срок, ни просроченной.
  • 20 сценариев, обе реализации согласны; байтовый differential 20/20.
  • Витрина Lens notice-provenance-and-the-deadline (apps/answers/examples/notice_provenance.py, 12 проверенных расчётов): пользователь спрашивает право, недостающий факт приходит из графа происхождения. Провенанс ответа называет три акта РАЗНЫХ юрисдикций — kz-appc (KZ), doctrine-notice-provenance и w3c-prov (none), — и это отдельное утверждение приёмки test_notice_provenance_example.py (9 тестов). examples/metaknowledge.py параметризован по набору витрин; прежние шесть разборов и 42 расчёта пересобраны без изменений.

Четыре разбора Lens о способах рассуждения (08.09.2026)

  • Разборы logic-implication-proof, logic-modus-ponens, logic-classical-step, logic-deontic-boundary — витрина впервые показывает СПОСОБ рассуждения, а не его применение к случаю: пять шагов обоснования импликации с пометкой границы показа в данных; правило отделения как объект знания (пара к proof-checker-modus-ponens, который то же правило проверяет); номер шага, на котором методу нужен классический принцип, и правило ⊥C, блокирующее перенос; отказ отождествить оператор SDL с позицией duty §120. Ни один расчёт не подаёт предметных фактов — это свойство закреплено тестом apps/answers/test_logic_examples.py.
  • logic.methods::step_text — читаемая проекция шага под его номером; без неё инструкция метода не спрашивается у пакета одним обращением.
  • Справочник — docs/reference/families/LOGIC-PACKAGES.ru.md; предметное руководство дисциплины заведено: docs/sciences/formal/LOGIC.ru.md, строка в таблице CLAUDE.md, дорожная карта docs/sciences/README.ru.md и раздел логики в MATHEMATICS.ru.md приведены в соответствие с построенным.

Описания алгоритмов: шестнадцать пакетов algo/*, 96 алгоритмов (08.09.2026)

  • Словарь algo.description (DECISION-0173): задача, вход, выход, предусловия, параметры, роли, состояние, операции, шаги и их роды, переходы с условиями, инварианты и меры убывания, основания шагов и завершения, утверждения о корректности с обоснованиями, модель стоимости и оценки с условиями действия, варианты и условия применимости, понятия и их зависимости, ссылки на источники и исполнимые вычислители.
  • Пятнадцать предметных пакетов: арифметика столбиком и дроби (12), теория чисел (5), поиск (5), сортировки (7), строки (5), обходы графа (7), пути и сети (8), деревья (11), динамическое программирование (4), линейная алгебра (5), многочлены (6), численные методы (6), геометрия (4), автоматы (5), сжатие и коды (6) — 96 описаний, перечень точен в обе стороны.
  • Вход пользователя — corpus/tools/algo/explain.py: каталог, поиск, инструкция, раскрытие шага и понятия, «почему шаг допустим», «почему завершается», ветви и циклы, сравнение вариантов одной задачи, источники. Входных данных описываемого алгоритма ни одна команда не принимает.
  • Оснастка: corpus/tools/sources/sync/sync_algo_sources.py (изложения → source-модель), corpus/tools/gen/gen_algo_packages.py (algorithms.json → факты, с проверкой целостности описания), verify/ci/gates/coverage/check_algo_coverage.py (перечень в обе стороны и полнота по ответам движка), реестр охвата docs/catalogs/ALGORITHMS-COVERAGE.ru.md.
  • Витрина Lens: examples/algo_showcases.py — десять разборов по три расчёта об устройстве алгоритмов, приёмка test_algo_showcases.py (25 проверок). Каждый предметный пакет объявляет визитку describes/answers_here: без неё вопрос к предикату словаря собирал мир без описаний и отвечал NEITHER.
  • Проверки: сцены §267 — 178/178 в 16 наборах (check_lawtest_suites); ворота охвата — 96/96; doctor.py — «пробелов нет» у всех шестнадцати; §194 — 16 публикаций, нарушений закрепления 0; вербализация — без пробелов; differential вопроса documented по трём пакетам — байты обеих реализаций совпали.

Ветвь метазнания: восемь пакетов метода и мост между ними (08.09.2026)

  • Восемь пакетов: w3c.skos (SKOS Reference, S1–S46), w3c.prov (PROV-DM, шесть компонентов), nist.experimental_design (глава 5 NIST/SEMATECH), nist.process_modeling (глава 4), pearl.causal_models (обзор Перла), asa.p_values (заявление ASA 2016), nasem.reproducibility (отчёт NASEM 2019), nasa.decision_analysis (раздел 6.8 справочника NASA). Предмет — знание о том, как устроены понятия, происхождение, эксперимент, модель, статистический вывод, повторение исследования и выбор решения.
  • Метод раскрывается без исполнения. Структура метода — шаги, порядок, условия применимости, требуемые входы и ожидаемые результаты — записана фактами пакета и отвечает на запрос без единого факта дела, как раскладка деления столбиком в calc.long_division. Сведения о фактическом выполнении живут отдельным слоем, и ни один переход к ним не выводится: выполнение шага, проведённое сравнение, вынесенная рекомендация, принятое решение и проведённая идентификация следуют ТОЛЬКО из записи о себе.
  • Отрицательные утверждения источников исполнены, а не пересказаны: иерархия SKOS не даёт наследования типов; описание происхождения не делает утверждение истинным; высокого R-квадрат недостаточно для вывода об адекватности модели; p-значение не есть вероятность истинности гипотезы (FALSE_ONLY, а не молчание); точное воспроизведение не гарантирует правильности вычисления; ассоциация не становится причинностью, границы эффекта не суть идентифицируемость; описание способа сравнения не означает выполненного сравнения.
  • Интеграционный пакет doctrine.method_bridge импортирует все восемь и jcgm.vim: одиннадцать сопоставлений понятий с записанным основанием (вид «ложный друг» отделяет прецизионность VIM от воспроизводимости NASEM и валидацию VIM от проверки адекватности NIST), мосты тождества с предъявляемым делом отождествлением и цепочка обоснования из восьми звеньев шести источников. Ни одна связь не приписывается источникам: якоря ведут в собственный источник пакета, приписывание ловит misattributed_alignment.
  • Показательные объяснения — corpus/tools/metaknowledge/explain.py: шесть демонстраций читают закоммиченные снимки CLIR (ни строки семантики, инвариант 5) и каждая называет сценарий, проверяющий то же утверждение машинно; --check краснеет и на расхождении с голденом, и на названном сценарии, которого нет в tests/.
  • Проверка: 572 сценария §267 в девяти семействах, каждое обеими реализациями (check_lawtest_suites), отказов ноль; дополнительных мёртвых символов и недостижимых правил ноль. Карты покрытия «фрагмент источника → объявления → сценарии» порождает corpus/tools/gen_metaknowledge_coverage.py и сверяет --check.

Семейство logic.*: формализованное знание о логиках (08.09.2026)

  • Двенадцать пакетов corpus/laws/logic/* — связанный словарь логических понятий, синтаксис двух языков, семантика, пять исчислений, одиннадцать методов рассуждения плюс индукция, классическая и интуиционистская системы, их сопоставление, модальные K, KT, S4 и S5 (в определении источника — KT4 и KTB4, с доказанным там равенством KTB4 = KT5), LTL и CTL, SDL, FDE и LP. Предмет — знание О ЛОГИКАХ: Arxo показывает способ рассуждения, не выполняя конкретного вывода, и универсального поиска доказательств не реализует.
  • Правило отделения заведено как объект знания: посылки и заключение — обходимые схемы со своими схемными переменными, инструкция применения — из четырёх шагов, принадлежность — пяти исчислениям с указанием статуса. Его описание НЕ выводит заключения ни для каких предметных фактов; граница проведена конструкцией (logic.core, 06-reasoning) и проверяется отрицательными сценариями в четырёх пакетах.
  • Источники закреплены байтами: 84 раздела Open Logic Project (CC BY 4.0) на коммите 1e960be плюс пять авторских изложений репозитория — 159 фрагментов под §194. Байты работ, чьё авторское право этого не допускает, не закрепляются: источники названы декларациями без страниц.
  • 258 сценариев §267 в двенадцати семействах, каждое обоими оценщиками, отказов ноль. Из них 60 отрицательных: правило не получает принадлежности к чужому исчислению, молчание не превращается в запрет, допустимость не даёт производности, схемные переменные разных схем не смешиваются, побочные условия не исчезают, показ инструкции не выдаётся за доказательство, значения FDE не отождествляются со статусами движка.
  • Четыре разбора витрины Lens из этих пакетов: обоснование импликации, правило отделения как объект знания (пара к уже опубликованному разбору, который то же правило проверяет), расхождение двух «от противного» с указанием номера шага и правила ⊥C, и граница между оператором O в SDL и позицией duty §120. Сборки — apps/answers/examples/logic_*.py, приёмка — apps/answers/test_logic_examples.py. Ни один расчёт разборов не подаёт предметных фактов, и это проверяется тестом.
  • Десять сквозных демонстраций (corpus/tools/logic/explain.py demos) читают данные пакетов и сверяются с голденом; каждая называет сценарии, проверяющие то же машинно. Восемь вопросов — «что это?», «из чего состоит?», «как применять?», «при каких условиях?», «какое основание у шага?», «где используется?», «чем отличается?», «какой источник?» — отвечаются восемью головами logic.core, общими для всех двенадцати пакетов.
  • Найдено при работе: сравнение ключей двух исчислений объявляло чужим собственное правило, принадлежащее обоим вариантам естественного вывода; «чуждо» обязано считаться по ПАРЕ «правило, исчисление», а не по различию ключей. Тот же класс — у схемных переменных, и там решение противоположное: различность владельцев там и есть содержание утверждения.
  • Реестры: LOWERED_ACTS, label-ratchet (неразмеченного ноль), public-api-manifest, mathtex.PROFILE_PACKAGES, scenario-manifest и ratchet, две строки run_all.sh. Мёртвых символов у семейства ноль. Карта, команды и границы — docs/reference/families/LOGIC-PACKAGES.ru.md.

Кэрролл, «Алиса»: дело источника прогнано через пакет (07.09.2026)

  • Повествование глав XI—XII формализовано как МАТЕРИАЛЫ ПРОИЗВОДСТВА: сцена ALICE-19 подаёт 31 факт, каждый назван абзацем источника, и получает 23 ответа. Стадия — показания (вердикта не было ни разу), виновность — REQUIRES_JUDGMENT, Алиса обязана остаться не по той причине, о которой шёл спор, явка Шляпника нарушена, обязанность вспомнить нарушенной быть не может (§124.1 без срока).
  • Учёт абзацев стал трёхчастным и печатается генератором: 50 несут право, 46 — факт производства, 64 обстановка, 71 вне производства. Правового материала 96 из 231. Неизвестный род разбора роняет сборку (канарейка).
  • 21 .lawtest, 19 сцен регрессии, differential 51 вызов, proof-analytics READ 37 / UNREAD 0.

Кэрролл, «Алиса»: пофрагментный учёт и третья волна норм (07.09.2026)

  • Исчерпанность формализации стала проверяемой: генератор требует разбора для КАЖДОГО абзаца обоих документов (231 фрагмент — 50 несут право, 181 покрыт 34 диапазонами с причиной), абзац без разбора роняет сборку; канарейка проверена. --check держит инвариант в run_all.sh.
  • Второе сплошное чтение нашло ещё шесть мест: третья презумпция (обвинение из оправдывающего факта — чужой почерк), спор о доказанности с единственным not_known §113 («you don’t even know») и находкой «доказанность не есть вердикт», свобода §125 не искать смысла в бессмысленной улике, обязанность коллегии записывать по указанию судьи, обязанность явиться готовым, основание обратного порядка Зазеркалья.
  • 38 правил, 11 шаблонов (10 duty + 1 liberty), 3 презумпции, 4 приоритета, 2 автомата; 20 .lawtest, 18 сцен регрессии, differential 38 вызовов, proof-analytics без непроверенных осей.

Кэрролл, «Алиса»: полная формализация, вторая редакция (07.09.2026)

  • Сплошное чтение источника нашло девять нормативных мест, пропущенных первой редакцией. Заведён второй автомат §160 — дело гонца Короля («Зазеркалье», гл. V: наказание, затем суд, затем преступление), зеркальный двойник требования «сначала приговор, потом вердикт»; две презумпции §20 (кража из чужой вещи при носящем — с оговоркой источника; злой умысел из отсутствия подписи — без оговорки); правило об исключении отвергнутого показания с контролем из того же абзаца; основание отпустить свидетеля; обязанность суда подвергнуть перекрёстному допросу; обязанность вспомнить; порядок в зале; порядок оглашения улики. Модули 05-probatio, 06-nuntius.
  • Оба закреплённых документа фрагментированы сплошь: 237 фрагментов, text coverage 97,7 % и 97,2 % — вторая мера §33.1 перестала быть неизмеримой. Учёт по единицам деления остаётся объявленно неприменимым.
  • Второй автомат квалифицировал предикаты профиля §164.1 обоих (TrialOfTheKnave__current_state, DECISION-0013 §2.3); шесть сцен §267 переписаны тем же изменением.
  • 32 правила, 8 шаблонов, 4 приоритета, 20 .lawtest, 16 сцен регрессии, KZ-differential байтовый (33 вызова), proof-analytics без непроверенных осей. Отчёт аудита переписан и называет ошибку первой редакции.

Кэрролл, «Алиса»: суд над Валетом Червей (07.09.2026)

  • Новый пакет corpus/laws/eng/carroll-alice-trial (Macmillan 1866, гл. XI—XII и Macmillan 1872, гл. V; PINNED_UNOFFICIAL_COPY по 53 страничным ревизиям английской Викитеки): суд автоматом §160 с попыткой перехода без правового эффекта §164 («сначала приговор, потом вердикт»), приоритет §116 БЕЗ объявленного основания рядом с приоритетом, у которого основание названо (Правило Сорок Два против «You may go»), и обязанность поддержания §124.2, неисполнимая ни в один день окна (варенье никогда не сегодня). Виновность — канал суждения §47.3 к присяжным, REQUIRES_JUDGMENT. 16 правил, 3 шаблона, 16 .lawtest и 8 сцен регрессии; KZ-differential байтовый (19 вызовов). Мера §33.1 неприменима: у повествовательного источника единицы деления нет, и обе меры говорят это словами. Регистрация: LOWERED_ACTS, label-ratchet, scenario-manifest и храповик, dead-symbols, run_all.sh.

Позиционирование: Arxo исполняет канон (07.09.2026)

  • DECISION-0167: формула «Arxo исполняет канон; модель формализует, Arxo исполняет и доказывает» принята владельцем; LAYERS-NEXT §8, README и CLAUDE.md обновлены, семантика и артефакты не тронуты.

jcgm/gum — оценивание неопределённости по GUM (06.09.2026)

  • Новый пакет corpus/laws/jcgm/gum (JCGM 100:2008, ABSTRACT_ONLY): типы A и B, закон распространения при некоррелированных и коррелированных входах, относительная форма для произведения степеней, U = k·uc, уровень доверия при условиях G.6.6, формула Уэлча–Саттертуэйта и таблица G.2 (p = 95 %), полнота записи 7.2.3; мост к CombinedStandardUncertainty VIM 2.31. 100 правил, 66 сцен, регрессия и KZ-differential байтово. Дисперсии — точные дроби, корень — sqrt_bounds (E-0152), частное дробей — bounds_div. Регистрация: LOWERED_ACTS, label-ratchet, scenario-manifest, proof-analytics, template-manifest.

Пакеты OpenStax на термах E-0152 (06.09.2026)

  • openstax/fluids-oscillations-waves, electrodynamics, quantum, relativity, measurement: тринадцать вычисляющих правил через sqrt_bounds, pi_bounds, sin_bounds/cos_bounds, bounds_mul, bounds_div (период маятника и пружины, гармонический закон, k из ε₀, поле провода из μ₀, ħ из h, γ по скорости, Доплер для света, длина вектора и компоненты по углу); тринадцать сцен, регрессия и KZ-differential по пяти семействам байтово.
  • openstax/kinematics и openstax/particles: модуль скорости по двум составляющим (§4.5) и красное смещение из скорости удаления (§11.7) — ещё два правила и две сцены, регрессия 25/25 и 19/19, differential байтово.

Сертифицированные границы: корень, π, синус и косинус, умножение и деление отрезков (06.09.2026)

  • §259.2 (errata E-0152, DECISION-0163): термы sqrt_bounds, pi_bounds, sin_bounds, cos_bounds, bounds_mul, bounds_div; ln/exp/sqrt принимают отрезок (монотонный подъём), sin/cos — по липшицевости. Деривация получила головы sqrt, pi, sin, cos, mul, div и форму подъёма; rederive обеих реализаций разбирает их тем же кодом. Профили и счётчики работы прежние. 27 векторов CERT-*, differential байтово.
  • law-eval: три отказа разбора порченой дроби в деривации совпадают с оракулом дословно (до этого — одно сообщение на все три).
  • openstax/fluids-oscillations-waves: уровень звука в децибелах выводится правилом SoundIntensityLevelInDecibels через bounds_div(ln x, ln 10); три сцены, семейство вписано в манифест сценариев.

Конечные сети Петри и химический пилот (06.09.2026)

  • Добавлен calc.petri_nets (P40): явно конечные ресурсы и переходы, плотные входные/выходные матрицы, версии маркировки, проверка предъявленного порядка, точная цель и первый отказ с required/available. Пропуски, повторы, противоречия, отрицательные и чрезмерные количества блокируют вычисление; после отказа последующие состояния не возникают.
  • Добавлен calc.examples.reaction_network, связывающий вычислитель с calc.stoichiometry без обратной химической зависимости. Сценарии покрывают R1,R2,R1, конкурирующий R3×3, присутствующий и отсутствующий Pt и пропущенный состав. Python-команда только проецирует настоящий proofGraph.
  • Перед передачей в стехиометрию DSL проверяет полноту и однозначность участников, соответствий, элементов, составов и зарядов. Пропуск реагента, продукта или известного элемента больше не даёт ложный баланс. Все 113 запросов внутри сценариев проверены байтово, включая последующие evaluate; ожидаемые конфликты ключей заявлены явно в тестах.
  • Обе реализации и байтовый differential: 7/7 сценариев вычислителя и 35/35 сценариев потребителя; слитый мир потребителя — 440 узлов. Добавлены воспроизводимые lock/deps, CLIR-снимок, декларативный набор тестов, каталог, MCP-титул и храповик меток. Ядро и семантика языка не менялись.

Проверка доказательств — calc.proof_checker (06.09.2026)

  • Конечный фрагмент атомов, → и ∧: проверка структур, предпосылок и шагов, явные ошибки, зависимые строки, условное заключение с контекстом.
  • Строгий JSON-вход, CLI, canonical evaluation и экспорт с полным входом и хэшем программы. 74/74 differential; 65/65 правил наблюдаются; 6 дополнительных проверок, 5 мутаций условий, закреплённый источник правил.
  • Потребитель proof-consumer: проверка конкретного утверждения и всех предпосылок для того же объекта, свежие law.lock/deps, differential 5/5.
  • Измерены цепочки, ветви и дефекты. 32 MP подтверждены обоими движками; для 100/1000 нет двойного подтверждения в 30-секундном бюджете. Команды и границы.

Ускорение арифметической рекурсии lawc (06.09.2026)

Semi-naive допускает чистые скалярные сравнения и add/sub/mul; агрегаты, вызовы и отрицание сохраняют прежнюю ветвь. Ошибка переводит правило в наивный режим до конца вызова, сохраняя диагностики и порядок вывода. Период 1/983 вычисляется за 0,25–0,28 с, период 1/10007 — за 3,64 с; результаты и полные доказательства в проверенных A/B совпали. Добавлены арифметические формы fuzz и тройная сверка стратегий с оракулом. Замеры и проверки.

Десятичные периоды и просмотр шагов — calc.long_division (06.09.2026)

Добавлены дробные цифры, минимальный период, неповторяющийся участок, конечная дробь и явное исчерпание бюджета. 94 сценария, differential 94/94, 62/62 правила наблюдаются в proofGraph; ядро не менялось. Интерактивный HTML показывает сохранённые результаты обеих реализаций и основания каждой цифры. 1/97: период 96, глубина 203. Для 1/983 при бюджете 256 глубина 521 и байты совпали; полный период 982 за 5,3 с получен lawc, оракул не завершился за 45 с. 1/10007 не завершился за 45 с у обоих движков. Подробности и команды — packs/primitives/mathematics-and-logic/long-division/DECIMALS.ru.md.

Skill maintenance — formalize-act (2026-09-06)

  • Входной SKILL.md сокращён до 173 строк; инструкции и справочники переведены на английский с сохранением оригинальных цитат. Процедуры вынесены в workflow/verification/stub-contract, связанные ссылки и генераторы обновлены.
  • Теневой протокол перезакреплён по стабильным маркерам четырёх документов; добавлены проверки безопасного repin и времён CLI. Фикстуры приведены к native procedure; живые журналы сохранены. Два существующих расхождения REQUIRES_JUDGMENT остаются видимыми тестами (см. README протокола).

Added

  • kz.constitution_kazssr — Конституция Казахской ССР 1978 года (04.09.2026). Республиканская сторона союзной цепи: узкий срез из пятнадцати статей (5, 68–75, 97–98, 115, 118, 172–173) плюс три изменяющих акта 1990–1991 годов, отвечающий на три вопроса — какой орган был вправе решить вопрос о выходе из СССР, что резервировалось за Союзом и как Конституция изменялась. EXECUTABLE 15 из 173, SOURCE_ONLY 158 (границами не прикрыты), байтов под фрагментами 97,8 %, посылок в один конец 0 из 37 правил. 68 сценариев регрессии, 7 тестов §267, 4 цели §270 на 35 мирах, differential 68 из 68 байтово. Источник — текстовый PDF worldstatesmen.org, извлечение pdftotext -layout (умолчание снимает настоящие дефисы на переносе); поправки и дата закрытия окна — своими закреплёнными байтами Adilet. Редакция 1937 года объявлена UNAVAILABLE БЕЗ окна: даты 26.03.1937 нет ни в одних закрепляемых байтах. Цели §270 нашли два дефекта формализации при полностью зелёном differential: мост «перечень статьи 75 → ведение» действовал в мире без предъявленного акта, и один предикат нёс сразу факт о тексте статьи и правовое последствие.

  • Пример деления столбиком для Lens: восемь Rust-запросов с проверкой повтора, локальные RU/EN-страницы, результаты и поиск ошибки. Вычислитель подключён к MCP; категория calc.* подписывается как не имеющая юрисдикции. Публичная публикация ожидает разрешённого доступа редактора.

  • jcgm/vim — метрологический словарь JCGM 200:2012 (06.09.2026): срез 25 пунктов, 18 определений и 12 явных правил, 75 сценариев; погрешность со знаком, виды неопределённости, калибровка, прослеживаемость, верификация/валидация и различие сопоставимости и совместимости. Регрессия 75/75; все evaluation-документы Rust и Python побайтово равны. abstract_only: URL и хэш прочитанного PDF без его перепубликации. Для штатного аудита восстановлено распознавание трёх форм unit_decl после изменения грамматики E-0150; селфтест аудитора пройден.

  • calc.long_division: деление столбиком для целых до девяти разрядов, доказательства шагов и проверка записанного решения. Ошибки полей, пропуски после завершения ввода и итог проверяются правилами DSL; команда tools/show.py отображает proofGraph. 60 сценариев, байтовый differential 60/60; 44 из 44 правил наблюдались в доказательствах.

  • Классическая физика по OpenStax University Physics — семь пакетов уровней 1–3 (corpus/laws/openstax/*, 06.09.2026): измерение и размерный анализ, кинематика, динамика, энергия и импульс, вращение и тяготение, жидкости и волны, термодинамика. 146 сцен, все обеими реализациями. Закреплены байты 143 модулей CNXML на коммите d0ed34a58511; лицензия CC BY-NC-SA 4.0 названа в шапке каждого sources.law.

  • openstax/electrodynamics (главы 5–16 тома 2, 06.09.2026): заряд и его сохранение, закон Кулона, теорема Гаусса, потенциал, ёмкость, закон Ома с ГРАНИЦЕЙ применимости (омические и неомические вещества), правила Кирхгофа, сила Лоренца, поле прямого провода, законы Фарадея и Ленца, индуктивность и четыре уравнения Максвелла как ОДНО утверждение о полноте. 33 правила, 33 сцены, 40 фрагментов; закреплены байты ещё 84 модулей CNXML. 15 единиц электродинамики в units.si (фарад, тесла, вебер, генри и др.).

  • openstax/optics (главы 1–4 тома 3, 06.09.2026): показатель преломления, закон отражения, закон Снеллиуса и полное внутреннее отражение по ПРЕДЪЯВЛЕННОМУ синусу, формула тонкой линзы обратными метрами, увеличение и оптическая сила в диоптриях, когерентность как условие, светлая полоса двух щелей против ТЁМНОЙ полосы одной щели тем же уравнением, критерий Рэлея. 22 правила, 26 сцен, 25 фрагментов; закреплены байты 87 модулей CNXML тома 3. Единица per_m (диоптрия). Тригонометрии в §58 нет: дело предъявляет sin θ числом — величину измеримую, которой оперирует и сам источник, — и утрачен ровно арксинус.

  • ТРИ ТОМА OpenStax University Physics ВЗЯТЫ ЦЕЛИКОМ — пятнадцать пакетов уровней 1–3 покрывают тома 1, 2 и 3 без остатка; 314 модулей CNXML на коммите d0ed34a58511, все сверены fetch --check.

  • openstax/relativity (глава 5 тома 3, 06.09.2026): два постулата и опровержение галилеева c + v, относительность одновременности ОБЕИМИ сторонами, сверка лоренцева множителя рациональным тождеством γ²(c² − u²) = c² вместо корня, замедление времени против сокращения длины, преобразование Лоренца, релятивистское сложение скоростей, предельная скорость как ЗАПРЕТ, импульс, энергия и связь E² = p²c² + m²c⁴. 22 правила, 26 сцен, 27 фрагментов, 10 модулей.

  • openstax/quantum (главы 6–8 тома 3, 06.09.2026): энергия фотона от ОДНОЙ частоты, работа выхода по таблице §6.4 и ПОРОГ фотоэффекта обеими сторонами, баланс Эйнштейна, волна де Бройля, соотношение неопределённостей, лестницы связанных состояний в проверочной форме (n²·E_n = E₁), ненулевая энергия основного состояния, четыре квантовых числа, принцип Паули и вместимость оболочек. 32 правила, 33 сцены, 42 фрагмента, 21 модуль.

  • Скорость света, постоянная Планка и электронвольт БЕРУТСЯ ИЗ БРОШЮРЫ, а не предъявляются делом: правила-мосты читают определяющие константы таблицы 1 bipm.si_brochure и требуют, чтобы единица в таблице была та самая ("m s−1", "J s", "C"). Первое использование фактов брошюры предметным пакетом как ИСТОЧНИКА ЧИСЕЛ, а не словаря.

  • Единица J_s в packs/units/si/units.json — законный синоним набора kg_m2_per_s: постоянная Планка есть действие, а kg·m²/s — момент импульса.

  • openstax/condensed-matter (глава 9 тома 3, 06.09.2026): ионная и ковалентная связь, энергия диссоциации, вращательные уровни l(l+1)·E₀ᵣ, правило отбора Δl = ±1 С ГРАНИЦЕЙ ПРИМЕНИМОСТИ (симметричные молекулы дипольных переходов не испытывают вовсе), зоны и их вместимость 2N и 6N как прямое следствие запрета Паули, порог возбуждения фотоном через запрещённую зону, легирование, диод ТРЕМЯ случаями (прямое смещение, обратное, лавина выше пробоя), критическая температура, критическое поле и эффект Мейснера. 30 правил, 32 сцены, 37 фрагментов, 9 модулей.

  • openstax/nuclear (глава 10 тома 3, 06.09.2026): A = Z + N и изотопы целочисленно, дефект массы и энергия связи через E = mc², закон радиоактивного распада и период полураспада СЕРТИФИЦИРОВАННЫМИ ГРАНИЦАМИ §259.1, активность в беккерелях, альфа/бета/гамма-распад и сохранение числа нуклонов и заряда порознь. 19 правил, 22 сцены, 28 фрагментов, 8 модулей.

  • openstax/particles (глава 11 тома 3, 06.09.2026): барионы и мезоны, четыре закона сохранения ПОРОЗНЬ и каждый со своим запретом, странность с границей применимости (сохраняется в сильных взаимодействиях, не в слабых), заряд адрона точными третями (2/3 + 2/3 − 1/3 = 1 ровно), закон Хаббла. 15 правил, 18 сцен, 23 фрагмента, 8 модулей.

  • Два дефекта источника, найденные обмером главы 9 (записаны в шапке condensed-matter/02-bands-and-doping.law, а НЕ исправлены молча): глоссарий m58600 приписывает лишний валентный электрон АКЦЕПТОРУ, а недостающий — ДОНОРУ, тогда как тело §9.7 говорит обратное и подробно; и тело §9.7 в одной фразе называет основными носителями p-типа электроны, тогда как определение p-типа («the primary carriers of charge (holes) are positive») и глоссарий («conducts holes») говорят о дырках. Пакет формализует первичные утверждения тела; расхождение формализации с текстом — предмет отчёта, а не тихой правки. Третий такой случай после errata 28340 (§9.4 тома 1).

  • Первый предметный потребитель сертифицированных границ §259.1. До этой волны ln_bounds/exp_bounds применял в корпусе один медицинский акт (MELD); закон распада — первое место, где экспонента нужна САМОМУ предмету и где её не обойти ни рациональным тождеством, ни проверочной формой.

  • Два моста уровня 5. openstax.second_law_readings — второй закон Ньютона двумя прочтениями под selection exactly_one (формулировки расходятся на переменной массе); законы Кеплера — два производителя одной головы без группы прочтений (основания не спорят).

  • Уровень 4 — редакции учебника двумя датами. Определение абсолютно неупругого столкновения до и после errata 28340 (23.04.2026); обе редакции закреплены байтами, правила датированы effective.

  • calc.mechanics (packs/primitives/natural-sciences/mechanics) — общие механические расчёты по DECISION-0123: равноускоренное движение, работа, энергия, импульс, КПД и предел Карно. 10 сцен, differential байтово.

  • 15 производных единиц в packs/units/si/units.json: Pa, Hz, per_s, Pa_s, kg_m_per_s, kg_m2, kg_m2_per_s, N_per_m, m3_per_s, W_per_m2, J_per_K, J_per_mol_K, mol_per_m3, m3_per_mol, m3_per_kg.

Changed

  • Задел volume-3-modern-physics снят. Каталог без law.toml, куда складывались байты глав 5–11 тома 3 до формализации, свою службу отслужил: все 56 его модулей разошлись по пакетам relativity, quantum, condensed-matter, nuclear и particles. Приём (каталог, невидимый сканерам по построению) описан в шапке фетчера и остаётся доступен.

  • gen_units.py отвергает размерность, которую §49.2 не выражает. Степень записывается повторением имени, и на отрицательном показателе генератор повторял его НОЛЬ раз — молча выбрасывая множитель. Электронвольт (L²·M·T⁻²) вышел так единицей размерности L²·M и упал лишь при конверсии в джоуль, далеко от места ошибки. Теперь непозитивный показатель и составная размерность у простой единицы отвергаются с указанием §49.2 и того, что такие величины берутся мостом к определяющим константам.

  • bipm.si_brochure и la.newton.principia получили pub у словарных деклараций: до этого не экспортировали НИЧЕГО и были непригодны как зависимость (импорт нёс пустой интерфейс §6).

  • check_primitives.py ищет зависимость вычислительного пакета и в packs/units/, а фазу 1 испытывает в СЛИТОМ мире: импорт несёт интерфейс, а не узлы (§23), и реестр единиц §49.2 живёт в узлах units.si. Обе стороны differential получают одну программу — прежде асимметрия входов выглядела бы расхождением реализаций.

  • bipm.si_brochure зарегистрирован в LOWERED_ACTS: прежде пакет не был вписан ни в один реестр.

Fixed

  • note в packs/units/si/units.json исправлен: синонимы по мультимножителю (N_s и kg_m_per_s, N_m и J, Hz и per_s) ДОПУСТИМЫ. 06.09.2026 они были ошибочно сняты как «неразрешимые» — UNIT_UNKNOWN давал ПРОТУХШИЙ снимок corpus/clir/units-si.lawir.json, не пересобранный после правки units.json. Единицы восстановлены, верный порядок правки записан в note: gen_units.py И gen_kz_clir --only units-si.lawir.json.

DECISION-0157 / E-0150: масштабированная единица как атом (06.09.2026)

  • §49.2: составная размерность, деление и скобки, сахар unit atm = 101325 * Pa;; точная нормализация до §209 общим проходом check/lower и независимым оракулом.
  • units.si: atm, eV, cal_th, конвенциональный mmHg с первичными источниками. Существующие кратные сохраняют факторы и канон.
  • 36 новых векторов, 77/77 байтовый differential вычислений; 32 голдена units обновлены только по трём хэш-ключам. Три потребителя и lock-файлы проверены.
  • Грамматика, hover, snippet, wasm и oracle bundle обновлены. Исправлены обнаруженные на baseline пробелы регистрации векторов и устаревший авторский тест датировки liver-status; семантика этих областей сохранена.

Добавлено (iupac/periodic-table, 06.09.2026)

  • Корень химии рода «данные»: таблица стандартных атомных весов CIAAW 2024 (corpus/laws/iupac/periodic-table, iupac.periodic_table). Страница ciaaw.org/atomic-weights.htm закреплена байтами; строка таблицы <tr>…</tr> — фрагмент элемента, и каждое из 472 утверждений стоит на своей строке @source. 118 pub const элементов с английским названием (официальная метка) и русским (неофициальная); факты element, atomic_number, element_symbol, element_name; три формы веса тремя отношениями — standard_atomic_weight(e, v, u) (70), standard_atomic_weight_interval(e, lo, hi) (14), no_standard_atomic_weight(e) (34) — и сноски g/m/r перечислением. Выводимое: has_standard_atomic_weight, interval_standard_atomic_weight, atomic_weight_range ([v − u, v + u] по толкованию самой страницы: иридий 192.217 ± 0.002 → 192.215…192.219), standard_atomic_weight_qualified; замыкание §70 над element с доменом checked_element — элемент 119 отвечает FALSE_ONLY, без факта домена NEITHER. Модули sources.law и 01-standard-atomic-weights.law порождает corpus/tools/sources/sync/sync_iupac_periodic_table_fragments.py (--check впаян в run_all.sh). Семейство iupac_periodic_table: 19 сцен, differential 19/19 байтово, два авторских теста, два свойства §270 (14 интервалов, 34 прочерка), разметка 133/0. Границы названы в шапке package.law: период, группа и блок не взяты (PDF таблицы ИЮПАК без текстового слоя), редакции по датам не заведены, дальтон единицей не является (DECISION-0157 §7).

Добавлено (chem/stoichiometry — мост таблица → вычислитель, 06.09.2026)

  • Первый корпусный потребитель calc.stoichiometry и второй — iupac/periodic-table (corpus/laws/chem/stoichiometry, chem.stoichiometry). Два правила: границы атомного веса каждого элемента таблицы (atomic_number + atomic_weight_range) становятся calc.stoichiometry::element_mass(z, lo, hi), а состав частицы, предъявленный элементами таблицы (composition_of), — составом вычислителя по атомному номеру. Молярная масса воды по двум закреплённым источникам без единого числа в деле — [18.01471, 18.01599]; NaF — из диапазонов по неопределённостям; элемент вне таблицы — молчание. Якоря правил — на pub fragment таблицы (семь текстовых фрагментов CIAAW стали pub тем же изменением: межпакетный @source видит только экспорт, LDC-E1105). Семейство chem_stoichiometry 7 сцен, differential 7/7; calc-stoichiometry.lawir.json вписан в LOWERED_ACTS, label-ratchet (unanchored = числу норм, как у calc-tiers) и титул MCP; [[tests]] вычислителя объявлен — с появлением снимка в corpus/clir обнаружение сценариев требует секцию. Молярная масса в г/моль не выводится: M_u после 2019 не равна ровно 1 g/mol (CODATA 2018: 0,99999999965(30)), множитель ждёт закреплённого codata/constants.

Добавлено (calc.stoichiometry, 06.09.2026)

  • Вычислитель стехиометрии уравнения (packs/primitives/natural-sciences/stoichiometry, паспорт P37 каталога): баланс по каждому элементу и по заряду с громким дисбалансом, интервал молярной массы по границам атомных весов (Integer * Decimal), лимитирующий реагент сравнением дробей крест-накрест, теоретический выход и выход в процентах одним делением Integer / Integer. Элемент — целое Z, мост к iupac/periodic-table — одно правило потребителя; взвешенные суммы — свёртками по индексу через supported §65 с предъявленным числом участников и строк, пропущенная строка — молчание, а не ноль. 15 сцен по одной на файл, check_primitives --only stoichiometry: обе реализации байтово. Коэффициенты не подбираются; «сбалансировано по всем элементам» — за агрегатом над выводимым (§111).

Изменено (chem/rules на корне iupac/periodic-table, 06.09.2026)

  • chem.rules больше не держит собственный Element. Тип и 21 константа элементов (F, O, H; Cr, Cu, Nb…Au; K…Pb) сняты, модули 01, 03, 04, 08 читают iupac.periodic_table::Element и iupac.periodic_table::F и далее; манифест объявляет [dependencies], law.lock записан lawc lock --write, CLIR закрепляет импорт contentHash-ом. Сцены семи наборов переписаны на квалифицированные имена (49 мест); миры всех тринадцати [[tests]] включают iupac.periodic_table. Семейство chem_argumentation поднимает кап профиля §274 осью дела max_arguments 4096 (errata E-0127): умолчание 64 считает листом КАЖДОЕ принятое утверждение мира, а таблица приносит 472 — под ним ответом был бы RESOURCE_LIMIT, а не право. Все 13 семейств зелены обеими реализациями, регрессия и differential байтово. Храповики разметки и i18n у chem-rules опущены осознанно на 22 переехавших объявления (185 → 163): метки живут у владельца, оверлей en.json перегенерирован без элементов.

Добавлено (формулы в Arxo Lens, 06.09.2026)

  • answers_app/mathtex.py — рендер формул без JavaScript. CSP Lens не пускает ни скриптов, ни внешних шрифтов, ни data:-картинок, поэтому KaTeX и MathJax в браузере невозможны: слой строит MathML на сервере при показе, снимка не касаясь. Сегментация закреплённого TeX, одиннадцать макросов Stacks по токенам, latex2mathml с пином версии, санитайзер по закрытому списку тегов и атрибутов, детерминированные лимиты до конверсии, откат в исходник при любом отказе — включая молчаливый провал конвертера, который печатает неизвестную команду текстом. Диаграммы \xymatrix показываются видимым блоком исходника. 24 теста.
  • 453 метки §218 пяти пакетов stacks/* размечены \(…\) пятью параллельными агентами: в строках .law действует escape, поэтому слеши удваиваются; юникод не переписывается. Текст меток не изменён. Регрессия 101 сцена и differential трёх семейств зелены.

Изменено (Arxo Lens: общий читательский слой, 06.09.2026)

  • Запасной вид данных перестал быть дампом JSON. _data в Lens теперь переводит имена полей ответов движка (label, rule, premises, missing, anchors, computedHead), показывает урны хвостом с полным адресом в подсказке, статусы (NEITHER, TRUE_ONLY, …) — словами общего словаря, а литерал предикат(аргументы) — подписью §218 объявления из словаря снимка; ложь у служебных полей (computedHead) не печатается. Ничего не отбрасывается по существу: полные значения живут в подсказках и в блоке JSON. То же обогащение получил чек-лист посылок views.truth_block. Действует на ВСЕ разборы, включая опубликованные ранее, — перепубликация не нужна, потому что это чистый рендер.

Изменено (Arxo Lens, 06.09.2026)

  • Блокеры §185 читаемыми карточками вместо дампа JSON. Проектор project_blockers в apps/mcp/law_mcp/answer_presentation.py даёт presentation.blockers: правило со StableId, якоря, посылки по частям (предикат, его id, аргументы, статус); IR служит словарём, ненайденное имя оставляет исходную строку. _blockers_reader в Lens рендерит их теми же карточками, что путь вывода: метка §218 на языке страницы, «Чего не хватает», источник читаемым локатором, идентификатор в раскрытии. anchor_title понимает локатор tag/<тег>. Дубль missing/premises схлопнут, computedHead: Нет больше не печатается. Старые снимки без проекции рендерятся прежней формой.

Errata E-0139 и пакет bipm.si_brochure (06.09.2026)

  • Терм unit_exponent(m, unit) §259.1 (E-0139). Показатель простой единицы в мультимножителе величины: алиас через цель, производная — UNIT_MISMATCH, незнакомое имя — UNIT_UNKNOWN, отсутствующий множитель — 0. Обе реализации, шесть реестров термов, семь векторов units, differential OK. Номер перенумерован с E-0138 из-за одновременной erratы о стратах.
  • Брошюра SI, модуль 06. Таблица 4 сверяется с реестром одним правилом над полными векторами показателей (154 факта); 13 равенств последнего столбца отдельно; интервал Цельсия — алиас degC_interval = K, абсолютный перевод — формула §2.3.1 в голове правила. Реестр units.si: +16 производных и +3 простых единицы, потребители перепинены. 89 сцен обеими реализациями, 25 голденов units перезаморожены после роста реестра (изменились только хэши программы).

DECISION-0152 — межпакетная ссылка прочтения и цепочка кислотно-основного равновесия (06.09.2026)

  • Исправлен зазор грамматики и реализации (аддитивно). EBNF §38 допускала qualified_name у of §152 и у alternatives §155, а парсер отвергал (LDC-E0201 «вне v1») и lowering повторял отказ (LDC-E1105 «пока не поддержана»); прозы, объявляющей запрет, в §152–§157 не было. Теперь позиции ПРОВЕНАНСА и КОМПОЗИЦИИ (of, source_anchor, extends, alternatives) принимают pkg::Symbol §23 с проверкой состава экспорта §24 и ВИДА цели по exportKinds; interpretation добавлен в EXPORTABLE_KINDS (четыре зеркала), pub interpretation доносит видимость до узла. Позиция ЧЛЕНСТВА (include/exclude) остаётся локальной: каноническая экспансия объявления (E-0115) у соседа невычислима. Векторы T248–T251.
  • Не изменено. Семантика оценки: resolve_interpretations собирает словарь прочтений из всех узлов слитого мира, и чужая альтернатива попадает в него так же, как своя. Ни одного pub interpretation и ни одной квалифицированной ссылки этих позиций в корпусе и векторах не было — ни один contentHash не сдвинут.
  • Первый потребитель — цепочка кислот. openstax/chemistry-acids (закреплённые гл. 14 и §15.2 Chemistry 2e, CC BY-NC-SA 4.0, 23 pub fragment), chem/acid-base (три прочтения кислоты §152 группой exactly_one), chem/acid-strength (сила, гидролиз, буфер; вторая группа any_of), iupac/red-book-acids (глава IR-8 как кодекс), calc.acid_base (точная арифметика без логарифма). 56 сцен корпуса и 12 сцен вычислителя, обе реализации сходятся.
  • Errata E-0137 (компилятор). Правило, вложенное в interpretation, не проверялось на range restriction §190 — отказ обнаруживал только оракул на исполнении; проход §190 теперь спускается в члены прочтений, диагностика называет Прочтение/Правило; вектор T260; 84 пакета корпуса с прочтениями — ни одного нового красного.
  • Errata E-0139 (компилятор). Все межправиловые проходы страт (§110, §111/§113, §116, §149, §71, §87) видят членов прочтений и считаются с учётом членства §104.4 — по максимальным согласованным выборам прочтений; цикл через две альтернативы exactly_one не репортится (T261), внутри одного прочтения — репортится (T262). В корпусе найдены и исправлены два латентных поздних производителя §111 (grc/laws-of-thought, vat/paenitentia): десять читателей записаны defeasible.
  • Errata E-0140 (семантика оценки, обе реализации). INTERPRETATION_REQUIRED — статус результата, а не документа: его получают только зависимые truth-запросы (цель в замыкании по телам правил от голов заблокированных альтернатив); независимый вопрос под невыбранной группой exactly_one отвечается, issue в документе остаётся. Векторы ERR-E0140-EXACTLY-ONE-INDEPENDENT/-TRANSITIVE; T020 прежний. Дополнение: зависимость определена и для collect (предикаты литералов comprehension-терма) и positions (заблокированный производитель нормы либо активный производитель, читающий зависимый предикат); зависимый результат получает INTERPRETATION_REQUIRED статусом результата в обеих версиях семантики. Векторы ERR-E0140-COLLECT-INDEPENDENT/-DEPENDENT, ERR-E0140-POSITIONS-INDEPENDENT/-READS-Q/-BLOCKED.
  • Найдено попутно (замер 06.09.2026). Неразрешённая группа exactly_one гасит ВЕСЬ документ, а не только вопросы своей темы. Ось interpretation контекста §168.2 принимала только локальное имя (LDC-E1307) — закрыто §7 того же решения тем же днём.
  • DECISION-0152 §7 (аддитивно). Ось interpretation дела §168.2 и ожидание interpretations(…) §267.4 принимают пакет::Прочтение — та же квалификация, что у оси calendar (E-0127), с проверкой состава экспорта §24 и вида цели по exportKinds; отказы — LDC-E1105. Векторы T257–T259. Первый потребитель — мостовой набор chem/acid-strength.

Исполнено (DECISION-0151, 06.09.2026)

  • Семантика определений — Ф0–Ф3. Понижение definition пишет ребро provenance was_derived_from → символ понятия с {declaration, mode, part, alternative?} на правиле и ограничении (§144, T253–T256; голден LAY-L0-CONSTRAINT-NECESSARY перезаморожен, CLIR 11 пакетов и lilliput пересобраны). Proof-узел применения несёт attributes.definition (§180, T252 в SUPPORTED); lawc explain и MCP law_explain печатают «по определению X: достаточная часть». Вербализаторы обеих реализаций открывают такие узлы фразой «часть определения понятия …»: подъём всех восьми паков (ru 0.9.0, kk 0.5.0, en/ky/uz/ar/la/zh 0.3.0), пины консьюмеров подняты, VER-RU/KK/EN-L0-DEFINITION и VER-RU-GAP-DEFINITION. Раскрыватель терминов получил контракт docs/reference/authoring/UNFOLD.ru.md (обе полярности, ограничения по антецеденту, происхождение, граница мира), Rust-двойник lawc unfold и ворота check_unfold_differential.py с пятью голденами. В stacks/sheaf-cohomology — отрицательные головы refuted(cond) ⇒ not sheaf_of_sets_on и мост от покрытий: «не пучок» отвечает FALSE_ONLY, конфликт листа — NEITHER, две опоры — BOTH.

DECISION-0154 — алгебра размерностей §49.1 и сертифицированные границы ln/exp (06.09.2026)

  • Добавлено (аддитивно, errata E-0136). Вид значения Magnitude с точным рациональным коэффициентом и каноническим мультимножителем простых единиц (§49.1); три декларации единиц и узел CLIR unit_decl (§49.2); закрытые таблицы операций §58.1; сертифицированные границы ln_bounds/exp_bounds с дословно закреплённым алгоритмом, композицией и независимым проверяющим (§259.2); вид формулы rounding с четырёхзначной опорой (§64.2) и производящий терм round_bounds; семейство packs/units/ с пакетом si; ворота категории check_units; флаги law.units/0.1 и law.cert/0.1.
  • Не изменено. Quantity и все его операции — байты те же; Quantity * Quantity по-прежнему LDC-E2108. Девятнадцать голденов-сторожей байтово идентичны.
  • Исполнимо стало. Балл MELD по OPTN Policy 9.1.D в us/liver-status — 32 набора против отдельной записи формулы источника, 32/32.
  • Мигрирован целиком phys/zadachnik. Терм quantity_of(m, unit) §259.1 снял стену «всё или ничего»: отношения пакета остаются Quantity, формулы считают алгеброй, а тег ЗАЯВЛЯЕТСЯ и сверяется с реестром §49.2 вместо пришивки литералом. Пятнадцать мест де-юнита переписаны, десять эталонов удалены. У трёх сценариев-сторожей сменился КОД отказа — всякий раз в сторону точности (INEXACT_DIVISION и UNIT_MISMATCH вместо TYPE_ERROR и DIMENSION_MISMATCH); отказ везде остался громким.
  • Довешен редактор. spec/grammar.ebnf не знал объявлений единиц вовсе: добавлены продукции §49.2 и строка unit_decl в трёх реестрах (production declaration, минимальная карта §38, docs/GRAMMAR-CAPABILITIES.ru.md). В грамматике подсветки заведены unit, alias, dimension, scale; hover.json и law.code-snippets перегенерированы. Пересобран wasm-dist: прежний был старше алгебры и не знал ни одного из девяти новых термов, отчего живые правила подчёркивались красным при зелёном lawc.
  • Исправлена проза §49. Голова секции после errata врала — говорила, что произведение двух размерных величин не определено, не называя §49.1/§49.2. Теперь названы обе половины: отрицательная у Quantity, положительная у Magnitude.
  • Перезаморожен точечно. ERR-E0076-STD-SLICE-ORDER: перечень std вырос на десять имён, и вектор сам требует осознанной перезаморозки при таком росте.

Корпус

  • Наряд H3 (06.09.2026): новый пакет kz.corpus.railway_transport — Закон 266-II «О железнодорожном транспорте», и с ним ПРЕТЕНЗИОННЫЙ ПОРЯДОК для пассажира. Закреплены байты «Әділет» (Z010000266_, 320 176 байт, фрагменты §194 на все 123 статьи; fetch_railway_transport_text.py сторожит восемь несущих величин, sync_railway_transport_fragments.py — перечень номеров, у акта исключена целая глава 5). Формализованы восемь статей пассажирского предмета: договор перевозки и последствие непредоставления места (ст. 65), провоз детей и ручной клади и возврат билета (ст. 67), приём и срок доставки багажа (ст. 68, 69), ответственность за утрату, недостачу и повреждение багажа и штрафы за просрочку и опоздание поезда (ст. 76, 80) и глава 11 целиком по пассажирской стороне (ст. 89, 90, 91, 93). Вопрос Q-13-11 переведён из partial в done: наряд G4 измерил, что у пассажира АВТОМОБИЛЬНОГО транспорта претензионного порядка нет вовсе, — у ЖЕЛЕЗНОДОРОЖНОГО он есть, с четырьмя собственными сроками и шестимесячной давностью против годичной по грузу. Связь с главой 34 ГК — вторым миром, а не импортом (содержание связи отрицательное, ст. 706 п. 3). Измерено: 81 сцена семейства railway_transport, регрессия 82/82 PASS, differential 83 вызова байтово идентичны, разметка §218 — словарь 114/0, нормы 103/0. Три замера о форме записаны в шапках модулей: переменная в единице срока (LDC-E1330), эмпирический домен замыкания §70, две политики §86 в одном деле.

  • Наряд G4 (05.09.2026): три новых пакета KZ с закреплёнными байтами «Әділет» — kz.corpus.real_estate_registration (Закон 310-III о государственной регистрации прав на недвижимое имущество), kz.corpus.identification_numbers (Закон 223-III о национальных реестрах идентификационных номеров) и kz.corpus.zhilishchnyy_sertifikat (решения маслихатов Алматы и Туркестана — первые акты маслихатов в корпусе). Расширены kz/passenger-rights (ст. 51 и 53 Закона 476-II) и kz/migration (гл. 9, регистрация по месту жительства). Починены два дефекта: add_business_days со единицей calendar_day в сроках статьи 6 Закона 477-IV (выходные входили в «рабочие дни» молча) и стаб налогового звена в раннере inostranets_status.

  • Закон «Об ипотеке недвижимого имущества» закреплён новым пакетом kz.corpus.mortgage; шесть мостов и оживление четырёх мёртвых пакетов (наряд F1, 05.09.2026). Закреплены байты обеих аутентичных редакций ИПС «Әділет» (U950002723_, 49 статей ru + kk); формализована глава 3 «Реализация ипотеки»: закрытый перечень трёх способов статьи 20, три срока самостоятельной реализации залогодателем (30 календарных дней на ходатайство, 15 рабочих дней залогодержателю позицией, 3 месяца на продажу), минимальная цена в 75 % оценочной стоимости, отказ в обращении взыскания и отсрочка до года с двумя изъятиями, право преимущественной покупки и ЗАКРЫТЫЙ перечень случаев, когда внесудебное удовлетворение не допускается, включая жилище физического лица. Закон о банках читает его двумя пунктами статьи 61 (приостановление мер по ходатайству; изъятие из внесудебного обращения взыскания), Закон о кредитных бюро — отзыв согласия из Закона о персональных данных, Закон об исполнительном производстве — третье основание отказа в возбуждении СЧИТАЕТСЯ из срока предъявления. Граница режимов гражданина и индивидуального предпринимателя (290-VII против 176-V) выражена правилами с обеих сторон. Четыре пакета были МЕРТВЫ на HEAD: credit-bureau, deposit-guarantee, macroprudential-normatives и np-bank-loan-disputes объявляли language 0.1 при схеме CLIR 0.2, и оракул падал AttributeError в calendar.py на любом сроке; заголовки подняты до 0.2, два раннера читали имя правила из шага доказательства формой, потерявшей смысл в 0.2. Регрессии семейств: mortgage 44/44, banks 147/147, credit_bureau 112/112, deposit_guarantee 118/118, personal_bankruptcy + rehabilitation_bankruptcy 313/313, macroprudential_normatives + np_bank_loan_disputes 235/235.

  • Правила ГФСС закреплены новым пакетом kz.corpus.gfss_rules; четыре моста Социального кодекса и свод расчёта при увольнении (наряд F2, 05.09.2026). Закреплены байты приказа Заместителя Премьер-Министра — Министра труда и социальной защиты населения РК от 27.06.2023 № 248 (рег. МЮ № 32912): среднемесячный доход за 12 и 24 месяца, потолок месяца в семь минимальных заработных плат, коэффициент замещения дохода 0,4, коэффициент количества дней нетрудоспособности и предельный размер выплаты по беременности и родам. Социальный кодекс читает этот вывод мостом (оба расчёта — подтипы расчёта Правил) и импортирует АППК: срок, адресат и последствие пропуска срока жалобы на отказ в назначении выплаты приходят выводом административного порядка. Сняты три эмпирических входа: доходы двух социальных выплат, МЗП статьи 245 (переведена на законы о республиканском бюджете окнами effective) и знаменатель пропорции пункта 7 статьи 210 (назван приказом № 245 п. 20, выведен из требуемого стажа пункта 4). В Трудовом кодексе свод сумм при увольнении получен закрытой формой без агрегата §59 (1 075 000 ₸ без KEY_CONFLICT) и добавлены шесть норм-позиций работодателя статей 98, 103 и 113, читаемых сценами. Регрессии: gfss_rules 20/20, trudovoy_put 50/50; differential байтовый.

  • Нормативная база физического лица в Казахстане: волны A–E сведены (наряд E1, 05.09.2026). Матрица задачи — 173 вопроса по шестнадцати областям (docs/foundations/personal/coverage.json): 92 done, 34 partial, 5 blocked, 42 open; сведение из отчётов нарядов ведёт детерминированный docs/foundations/personal/tools/update_coverage.py (--check idempotent). Двенадцать новых пакетов корпуса и восемь сквозных семейств personal_* (119 сцен) с примерами CLI в docs/foundations/personal/examples/. Карта источников, редакций, территорий и недоступного — SOURCES.md; команды, охват и чужие красные — VALIDATION.md; воспроизводимое использование и границы охвата — README.ru.md. Полные прогоны (run_all.sh, nightly.sh) по запрету владельца не выполнялись — DoD п. 6 не подтверждён; развилка F-PF-01 (момент достижения возраста) ждёт решения владельца.

  • Кредит физлица, просрочка, взыскание и банкротство связаны в одну цепь (наряд C2, 05.09.2026). Хаб лиц DECISION-0107 достроен у четырёх пакетов: kz.corpus.banks (Person был ПОДТИПОМ CivilParticipant — подстановка идёт только от подтипа к надтипу, и гражданин-банкрот в позицию заёмщика не вставал), kz.corpus.microfinance (свой Person был мёртв — ноль употреблений), kz.corpus.collectors и kz.corpus.payments (свои корни дерева лиц, ГК не импортировали вовсе). Все переведены на алиасы ГК. Задолженность по займу физического лица стала РАСЧЁТНОЙ ПОЗИЦИЕЙ общих вычислителей DECISION-0123 (новый модуль banks/21-zadolzhennost-fizlica.law, calc.obligations + calc.accruals): остаток основного долга — по журналу платежей, пеня статьи 58 — двумя окнами по 0,5 % и 0,03 % в день с годовым потолком 10 % от суммы займа; аннуитет остаётся границей (P33 — ДИЗАЙН). Перечень статьи 98 Закона об исполнительном производстве развёрнут поимённо (38 подпунктов константами со вторым замыканием §70) — «удержат ли с алиментов, пособия, зарплаты» стало вычислимым вопросом. Сторона клиента в Законе о платежах получила обязанности со сроками (возврат денег банком бенефициара — статья 57, ответ эмитента карточки в 15 дней — статья 40) и трёхлетний рубеж изъятием. Дубль пятилетнего запрета займа после банкротства снят: владелец — Закон о банкротстве граждан (pub), Закон о банках читает его день объявления и держит СВОЙ запрет позицией §130. Коллекторский должник выводится из фактов Закона о банках и Закона о микрофинансовой деятельности; «взыскание проводилось» подпункта 3) пункта 1 статьи 5 Закона о банкротстве граждан выводится из исполнительного производства, а не признаётся должником. KZ-регрессия шести семейств 991/991, differential 949/949 байтово. Попутно починен kz.corpus.collectors: модули были language 0.1 при CLIR 0.2, и перегенерация роняла оракула (DeadlinePolicyRef не разрешался).

Добавлено (пакет stacks.sets, дно словаря когомологий, 06.09.2026)

  • Теория множеств как основание цепочки stacks.* (corpus/laws/stacks/sets/). Глава «Set Theory» на коммите a04446e (тег 0007), 13 фрагментов pub, ДВА вида среза — окружение и РАЗДЕЛ: у главы нет ни одного \begin{definition}, класс, ранг, частичный универсум, мощность, счётность, арифметика кардиналов и кофинальность определены прозой разделов. Класс и собственный класс (000A), ординал (05N1), иерархия V_α, ранг и три производителя головы «лежит в стадии» — членство, ранг и лемма 000C (аксиома фундирования, данных не требует). Единственное место словаря, где лемма ВЫЧИСЛЯЕТ: κ ⊕ λ = κ ⊗ λ = max(κ, λ) для бесконечных кардиналов (000D); существование ординала большой кофинальности (05N3); принцип отражения одним листом (000F, 000G). Два моста наверх тем же изменением: small_category у stacks.category_theory (0014 с Remark 0015 поверх Set Theory 0009) и лемма 0010 о малой абелевой подкатегории у stacks.categories. 11 сцен семейства stacks_sets плюс по паре у каждого моста; пять семейств обеими реализациями OK, differential байтовый — 97 evaluate-вызовов.

Добавлено (пакет bipm.si_brochure, 06.09.2026)

  • Реестр units.si дополнен из брошюры. Pa, Hz, Wb, T, H, F, S, Gy, Sv, kat, lm, lx, ha, au, day и единицы констант (J_s, J_per_K, per_mol, lm_per_W); потребители перепинены. Модуль 06 сверяет 19 строк таблицы 4, семь значений таблицы 8 и четыре тождества единиц констант; семейство 73/73, check_units OK.

  • Модуль 06: брошюра против реестра единиц. После слияния DECISION-0154 пакет импортирует units.si и сверяет таблицы 4, 7, 8 алгеброй величин §49.1: N, J, W, C, V, Ω — тождеством мультимножителей, km/dm/cm/mm/mg/mmol и min/h/t/l — через unit_convert. 17 сцен, семейство 53/53 обеими реализациями, differential байтово. Бинарь ворот профиля gate после слияния движка пересобран вручную.

  • Брошюра SI как корень естественных наук (corpus/laws/bipm/si-brochure/). Три закреплённых текста (9-е изд. EN и FR, английская часть 8-го изд.; CC BY 4.0; NFC при извлечении — LDC-E1306 на знаке ома), 37 фрагментов по тексту строк. Таблицы 1, 2, 4, 7, 8 как facts; семь определений единиц двумя редакциями с окнами effective вокруг 20.05.2019 (килограмм, ампер, кельвин, моль меняют основание; секунда, метр, кандела не датированы); запреты §3 отрицательными головами (FALSE_ONLY у «микрокилограмма» и составного префикса); префиксы 2022 года с окном резолюции 3 27-й ГКМВ. 36 сцен в 10 .lawtest: обе реализации OK, регрессия 36/36, differential 36 байтово. Урок: узел с якорем в одну редакцию применим только пока она в силе — долгоживущие таблицы якорятся в обе редакции, ради чего закреплены таблицы 1, 3, 5, 6 8-го издания.

Добавлено (пакет stacks.sheaf_cohomology, топология Александрова и Чех над Z/2, 06.09.2026)

  • Когомологии, посчитанные системой. Модули 04-finite-spaces.law (точки, специализация 0061, открытость как устойчивость под генерализацией 0062, пересечения и покрытия — выводы из точек) и 05-cech-z2.law (сечения (Z/2)_X как функции по значениям 006W, локальная постоянность и ограничение — выводы; упорядоченный комплекс Чеха двучленного покрытия 01FI/01FM, порядки Ȟ⁰ и Ȟ¹ через count и таблицу степеней двойки, сверка с F(U) по 01EG). Псевдоокружность даёт Ȟ¹ = Z/2, конечный отрезок — тривиальную Ȟ¹, из точек и значений без единого листа о сечениях. Пятый источник «Topology», 26 фрагментов; семейство 38 сцен, обе реализации OK, differential байтовый.

Исправлено (lawref, 06.09.2026)

  • why_not по правилу с квантором в теле падал KeyError 'args' (evaluator/whynot.py, _conjunct_report подставлял литерал в конъюнкт-квантор). Квалификация: дефект оракула; конъюнкт-квантор описывается формулой с пустым args и парой опор NEITHER, как у lawc; differential на why_not семейства stacks_sheaf_cohomology байтовый, векторы why-not зелёные. §185 отчёт о кванторном конъюнкте не описывает — долг errata и вектора записан в STATUS.

Добавлено (пакеты stacks.*, 06.09.2026)

  • stacks.category_theory — основание словаря когомологий по главе «Categories». Категория 0014, изоморфизм 0017 на данных о композиции, функтор 001B, верность 001C, эквивалентность 001J/02C3, сопряжённость 0037, моно и эпи 003B, конечные пределы 002O, точность 0034/0035, правый сопряжённый точен слева 0038. Владение типами Category, Obj, Functor и отношениями object_of, functor_between, left_exact_functor переехало вниз; stacks.categories выводит аддитивность из предаддитивности и конечных произведений. 17 фрагментов pub, 15 сцен, четыре семейства обеими реализациями OK и differential байтовый.

Решения (черновик, 06.09.2026)

  • DECISION-0151 (черновик, затем принято и исполнено тем же днём): семантика определений — происхождение definition в provenance[] CLIR, отображение в B1 и explain, закрепление раскрывателя терминов; план по фазам сведён с Codex; контрапозиция и ключевые слова lemma/theorem/primitive отвергнуты.

Добавлено (пакет stacks.sheaf_cohomology, покрытия и сечения, 06.09.2026)

  • Условие пучка 006T проверяется на данных. Модуль 03-coverings.law: открытые множества, покрытия, сечения и семейства — сущности; согласованность — вложенный forall §52 по членам покрытия, склейка — forall, единственность — count §59 по выводимому glues_to тремя исходами. Провал на одном покрытии опровергает пучок выводом not_a_sheaf; три контрпримера как выводы: постоянный пучок на двухточечном X (выполнено), постоянный предпучок (провал только на пустом покрытии — 006U), предпучок постоянных функций на несвязном X (провал по существованию). Ограничение §93 DeclaredSheafNotRefutedByData даёт CONSTRAINT_VIOLATED, когда дело объявляет пучок листами и опровергает данными. 31 сцена: обе реализации OK, differential байтовый.

Изменено (пакеты stacks.*, 06.09.2026)

  • Нижний слой словаря когомологий вынесен в stacks.categories при втором потребителе. Абелевы категории (0104, 0109), функторы (00ZY, 010N), инъективные объекты (0135, 0136, 0138), короткая точная последовательность (010E) и фрагменты δ-функторов (010Q–010S) — отдельный пакет над главой «Homological Algebra»; stacks.derived_functors и stacks.sheaf_cohomology читают его типы алиасами, отношения — квалифицированным именем, якоря — межпакетно (pub fragment, иначе LDC-E1105). 8 сцен в 3 .lawtest; все три семейства обеими реализациями OK и differential байтовый (8, 21, 19 вызовов). Публичный API вписан (21 и 27 символов). Замечено: applied(…) не наблюдает правило зависимости (LDC-E1316), blocked_by через границу берёт полный URN.

Добавлено (раскрыватель терминов, 06.09.2026)

  • corpus/tools/unfold_term.py — «что такое X» без дела. Печатает определение термина деревом производителей по CLIR пакета и его импортов транзитивно: правило → метка, якоря, цитата фрагмента → посылки → эмпирические листья; sheaf_cohomology раскрывается сквозь три пакета до 21 листа. Только читает структуру, семантики нет (инвариант 5). Тесты corpus/tools/test_unfold_term.py, раздел в docs/agent-guide/analysis.ru.md.
  • Сцены с пустым делом в stacks/sheaf-cohomology (5) и stacks/derived-functors (5): why_not о голом имени без фактов, блокеры — производители головы, их число держит состав словаря. Семейство когомологий 24 сцены, обе реализации OK, differential байтово.

Добавлено (пакет stacks.sheaf_cohomology, 06.09.2026)

  • Когомологии пучков поверх словаря производных функторов — первый потребитель stacks.derived_functors (corpus/laws/stacks/sheaf-cohomology/). Подстановка F := Γ(X, −): потребитель пишет в листья зависимости квалифицированным именем (Ab(X) абелева по 01AG — четыре условия 0109 четырьмя правилами, достаточно инъективных по 01DG, Γ точен слева по 0716) и читает обратно right_derived, right_acyclic_for, higher_derived_vanish, long_exact_sequence_of_derived, называя их H^i(X, F) по 01DZ. Свои термины: предпучок 006E, абелев предпучок 006K (definition exact), пучок 006T (склейка раскрыта на существование и единственность), постоянные 006F/006W, пучковизация 007Y/0080/0085, вялые пучки 09SW–09SY, Годеман 0FKS, H^0 = Γ. Четыре главы Stacks на коммите a04446e, 20 фрагментов, два из них — разделы целиком. 19 сцен в 9 .lawtest, мир [потребитель, зависимость]: обе реализации OK, differential 19 вызовов байтово. В зависимости тем же коммитом: pub на всех объявлениях и object_of/functor_between в посылках RightDerivedByResolution (015A: R^iF : 𝒜 → ℬ; без этого H^1 выводился бы у предпучка, который не пучок).

Добавлено (пакет stacks.derived_functors, 06.09.2026)

  • Первый математический словарь корпуса: производные функторы по The Stacks Project (corpus/laws/stacks/derived-functors/, новая группа stacks). Определения 0109 (абелева категория) и 013I (инъективная резольвента) — definition … exact по пунктам; леммы 05TI, 05TH, 015A, 05TD, 015C, 05TE, 015B, 015E, 015M — rule strict с якорями на теги, доказательства остаются в источнике. Цепь R^nF(A) = H^n(F(I^•)) раскрывается proof-графом до четырёх условий 013I и четырёх условий 0109; why_not без посылки называет лемму. Источник — LaTeX двух глав на коммите a04446e (GFDL), PINNED_OFFICIAL_BYTES, 27 фрагментов по тегам генератором sync_stacks_derived_functors_fragments.py. 5 сущностей, 43 отношения, 25 правил, метки en/ru на всём (48/0, 25/0). 16 сцен в 10 .lawtest: движок 16/16, оракул 16/16, differential 16 вызовов байтово; аудит без посылок в никуда и стаб-цепей. Ловушки: definition — hard keyword (вид фрагмента defn); iff-лемма в обе стороны замыкает положительный цикл (LDC-E4102) — оставлено одно направление.

Исправлено (errata E-0134, 05.09.2026)

  • Эффект полномочия §127 — поздний производитель по построению §280.3: строгое not_known/unknown/refuted над предикатом, строго достижимым от головы эффекта, отклоняется lawc check (LDC-E4103) и пропускается исполнением с NON_EXECUTABLE_RULE в обеих реализациях — прежде default deny закрывал доступ по делегированной роли при истинном основании в том же документе (deny TRUE_ONLY при via TRUE_ONLY, вопреки §67). Проза §67/§111/§113/§127/§280.3; четыре вектора ERR-E0134-* (две статики, два evaluate в SUPPORTED); радиус по корпусу — 0 отказов, остаток (поражаемые читатели эффектов, 18 пакетов) назван в errata и С-4.

Исправлено (errata E-0133, 05.09.2026)

  • Счётчик позиций правила с норм-головой считается за весь evaluation, а не за шаг цепочки §143: вторая подстановка того же правила на позднем шаге (эффект полномочия → strict-вывод → новое применение, субделегирование) получает свой номер, и документ собирается — прежде обе реализации отвечали «proofGraph.nodes: отсутствующий либо повторный id (§180.1)». Проза §143.1; векторы ERR-E0133-POSITION-SEQ-ACROSS-CHAIN, ERR-E0133-POSITIONS-TWO-STEPS в SUPPORTED.

Добавлено (DECISION-0139, 05.09.2026)

  • Ответ law_ask для truth/collect несёт блок signature — типы спрошенного предиката для представления Lens; снимок хранит его внутри answer, статическая сборка сверяет с CLIR по world_ref.

  • Модуль представления apps/answers/answers_app/views.py: вид выводится из формы ответа и типов (три уровня, таблица VIEW_RULES); линт чистоты check_views_purity.py с канарейками.

  • Семейство словарных пакетов packs/vocab/* и первый словарь vocab.geo с воротами check_vocab.py; Казгидромет на словаре областей.

  • CSP Lens: единственный внешний источник — тайлы OpenStreetMap для карты статусов областей.

  • Мутанты CLIR на Rust: law_cli::mutate, валидатор нормативной схемы law_clir::schema, команда lawc mutate, differential-ворота (DECISION-0150, 06.09.2026). Порт lawref/mutate.py: отчёт law.mutate/0.1 байт в байт с эталоном, включая документы мутантов с пересчитанными хэшами. Валидатор читает ту же нормативную legal-ir.schema.json, что и оракул, и повторяет формулировки jsonschema. Ворота check_mutate_differential.py (шаг 71). Трек переноса аналитики на Rust закрыт.

  • Адаптеры импорта A3 остаются на оракуле по замыслу (DECISION-0149, 06.09.2026). a3_io переводит DMN/CSV/XLSX в каноническую поверхность law.decision/0.1 и ничего не решает; саму поверхность lawc уже валидирует law_a3 по тем же нормативным схемам. Тащить ZIP с DEFLATE и XML-парсер ради чужого файлового формата — отвергнуто.

  • Перевешивание якорей между редакциями на Rust: law_cli::reanchor, команда lawc reanchor, differential-ворота (DECISION-0148, 06.09.2026). Порт lawref/reanchor.py вместе с целой мерой сходства (мешок триграмм и слов, косинус в долях 10000): отчёт, текст, --apply и коды выхода байт в байт с эталоном на фикстурах слоя и на живой Конституции 2026↔1995. Ворота check_reanchor_differential.py (шаг 70).

  • Статика норм §105.1 на Rust: law_cli::normstatic, команда lawc norm-statics, differential-ворота (DECISION-0147, 06.09.2026). Порт lawref/normstatic.py вместе с точной рациональной арифметикой: отчёт, текст и коды выхода байт в байт с эталоном на 529 живых пакетах корпуса и на тяжёлом kz-administrative-code (25 млн пар правил). Ворота check_norm_statics_differential.py (шаг 69). Тем же изменением снят лимит вложенности serde_json у четырёх новых команд — живой fiqh-taqwim глубже 128 уровней.

  • Конечный решатель §186: контракт расширен до отказов; errata E-0135 по case.options (DECISION-0146, 06.09.2026). check_counterfactual.py сверяет двадцать отказов кодом И формулировкой; девять формулировок lawc выровнены по эталону. Оракул перестал выбрасывать case.options из внутренних прогонов кандидатов — расхождение роняло check_zheti_zhargy_audit.py на живом мире и не ловилось синтетической фикстурой с пустыми опциями.

  • Миграции редакций и неизменяемое ядро §32 над CLIR на Rust: law_clir::migrate, команды lawc diff-editions и lawc consolidate, differential-ворота (DECISION-0145, 06.09.2026). Порт lawref/entrenchment.py и lawref/migrate.py: diff редакций, констрейнт LDC-E5301, инвариант консолидации §32.2 и диагностики LDC-E54xx — байт в байт с эталоном, включая формулировки. AST-нога law_hir::consolidation не тронута. Ворота check_migrate_differential.py (шаг 68).

  • Контур утверждений B1 §3.6 на Rust: law_cli::approvals, команды lawc approve и lawc approvals-check, differential-ворота (DECISION-0144, 06.09.2026). Порт lawref/approvals.py: запись утверждения, сверка банка, очередь LDC-E8202 и сводка — байт в байт с эталоном, включая stderr и коды выхода. Схема записи читается из того же нормативного файла, что у оракула, формулировки jsonschema повторены дословно. Ворота check_approvals_differential.py (шаг 67).

  • Расхождение аутентичных редакций §158 на Rust: law_cli::divergence, команда lawc divergence, differential-ворота (DECISION-0153, 06.09.2026). Порт lawref/divergence.py: изолированный прогон каждой языковой редакции, проекция результатов и вердикт diverged — байт в байт с эталоном на фикстуре ворот слоя и живом аудит-мире «Жеті жарғы». Ворота check_divergence_differential.py (шаг 66); экспорта в wasm нет — хостов у отчёта §158 нет.

  • Аргументная карта L4-lite на Rust: law_cli::argmap, команда lawc argmap, экспорт law_argmap, differential-ворота (DECISION-0142, 05.09.2026). Дословный порт lawref/argmap.py: проекция proof-графа в граф «аргумент/атака», grounded-разметка, текст с паком вербализации — байт в байт с эталоном на голденах ворот слоя и свипе t-векторов. Ворота check_argmap_differential.py (шаг 65).

  • Фаззер кейсов L8.1 на Rust: law_cli::fuzz, команда lawc fuzz, экспорт law_fuzz, differential-ворота (DECISION-0140, 05.09.2026). Дословный порт lawref/fuzz.py: hash-DRBG, пулы и подстановки под капом, слепые и направленные миры, минимизация находок, охота на контрпримеры §93.1, причины капов, --emit — байт в байт с эталоном на фикстурах ворот слоя и живом kz-procurement (шестикратно быстрее). Ворота check_fuzz_differential.py (шаг 64). loophole берёт общие пулы из crate::fuzz. Последний модуль трека О без Rust-двойника закрыт.

  • Процессный слой О-5 на Rust: law_cli::process, команды lawc process / process-run, экспорты law_process / law_process_run, differential-ворота (DECISION-0138, 05.09.2026). Дословный порт lawref/process.py: автомат из CLIR профиля §159–§164, верификация структуры, прогон журнала с кадрами, блокерами §185 и календарём сроков — байт в байт с эталоном на фикстурах ворот слоя и живом kz-procurement. Ворота check_process_differential.py (шаг 63). MCP law_process / law_process_run считают ядром; аналитика MCP на Python закончилась.

  • Bounded-поиск лазеек L8.2 на Rust: law_cli::loophole, команда lawc loophole, экспорт law_loophole, differential-ворота (DECISION-0137, 05.09.2026). Дословный порт lawref/loophole.py: даты и alphabet из документа, BFS с бюджетом, минимизация и классификация находок, маркеры пустого права и усечения, --emit — байт в байт с эталоном на фикстурах ворот слоя. Ворота check_loophole_differential.py (шаг 62). MCP law_loophole считает ядром.

  • Lens: переносимые подписи только для того, что показывает страница (05.09.2026). project_presentation принимает вопрос и ответ и оставляет в calculations[].presentation лишь узлы, названные вопросом, фактами, ответом и графом доказательства, плюс типы их параметров; без вопроса и ответа — прежняя полная проекция. ОСМС: 1,35 МиБ → 51 КиБ на расчёт. Снимки, подготовленные до появления блока, подписей не получают и перепубликуются.

  • Витрина Lens публична: индексация, карточки ссылок, robots и sitemap (DECISION-0136, 05.09.2026). Опубликованный разбор и главная витрины сняли noindex и несут description, canonical, пары hreflang RU/EN и Open Graph из текста документа и манифеста (answers_app/seo.py); статическая сборка и runtime отдают robots.txt, sitemap.xml, favicon.svg; публичные ответы кэшируются public, max-age=300. Предпросмотр, внутренние маршруты, JSON, скачивание и ошибки остаются no-store/noindex. Тесты Lens 71/71, check_answers OK.

  • Синтез минимальной поправки L8.3 на Rust: law_cli::amend, команда lawc amend, экспорт law_amend, differential-ворота (DECISION-0135, 05.09.2026). Дословный порт lawref/amend.py: пространство механических правок, каскад §116, перебор с бюджетом, impact-раздел с парными proof-графами, цели DECISION-0089 §4.2, --apply — байт в байт с эталоном на фикстурах ворот слоя. Ворота check_amend_differential.py (шаг 61). MCP law_amend считает ядром.

  • Цели акта DECISION-0089 на Rust: law_cli::goals, команда lawc goals, --goals / --goals-doc у lawc impact и impact-editions, differential-ворота (DECISION-0134, 05.09.2026). Дословный порт lawref/goals.py над выделенным lawtest::run_property (тот же код, что у lawc test): вердикты HELD/FAILED/SKIPPED/VACUOUS по мирам, таблица «прочтение × цель», телеологический фильтр, раздел goals impact-отчёта — байт в байт с эталоном на фикстурах ворот слоя и двух пакетах корпуса; понижение целей в процессе. Ворота check_goals_differential.py (шаг 60).

  • Impact-отчёты трека О на Rust: крейт law-impact, команды lawc impact / lawc impact-editions, экспорты law_impact / law_impact_editions, differential-ворота (DECISION-0133, 05.09.2026). Дословный порт lawref/impact.py: О-1 (diff §215 + diff исходов, покрытие DECISION-0019/C, отвергнутый вход, слепой банк) и О-2 (проекции по машине D1 §31, датировка, повисшие ссылки §116, рубеж параметра §87) — байт в байт с эталоном на фикстурах ворот слоя и на пакетах корпуса с банком сценариев; semdiff переехал в крейт. Ворота check_impact_differential.py (шаг 59). MCP law_draft_impact / law_editions считают ядром; расширение VS Code зовёт lawc impact — Python ему больше не нужен (law.pythonPath снят).

  • Lens: снимок без мира CLIR, мир law_ask — срез замыкания (DECISION-0132, 05.09.2026). law_prepare_answer заменяет execution.request.ir адресом world_ref (programHash, хэш байтов IR, хэши артефактов пакетов); расчёт по ТК 23 МиБ → ~0,2 МиБ. law_ask truth/collect/positions строят мир срезом обратной достижимости (query._relevant_world_keys, для positions — деонтические корни): ответ тот же, провенанс перечисляет участвующие пакеты, programHash/resultHash ответов меняются.

  • Вербализатор B1 на Rust: крейт law-verbalize, команда lawc verbalize, differential-ворота (DECISION-0128, 05.09.2026). Дословный порт lawref/verbalize.py и оверлеев §218: текст, contentHash, пробелы §3.3 и блоки со спанами — байт в байт и поле в поле с оракулом на 45 голденах ver восьми языков и на всём корпусе (503 CLIR, русский пак). Разбор CLIR без лимита вложенности serde (fiqh-taqwim — 200 уровней). Ворота check_verbalize_differential.py (шаг 54): голдены, умолчание пака, выборка корпуса × последние паки, оверлеи, канарейка. Расширение VS Code зовёт lawc verbalize вместо python -m lawref verbalize.

  • Resolve-контекст §23 в компиляторе: lawc imports-context, ворота (DECISION-0128 §7, 05.09.2026). Тот же JSON, что gen_kz_clir --imports-for: индекс CLIR сканером верхнего уровня (0,3 с на 308 МБ), записи по правилам resolver.py, contentHash через law-canon; check_imports_context_differential.py (шаг 55) — индекс и контексты всех пакетов реестра против эталона. Редактор собирает контекст без Python.

  • Вербализация в liblaw_ffi и wasm (DECISION-0128 §8, 05.09.2026). Экспорты law_verbalize и law_verbalize_loaded в полном артефакте (law-wasm, liblaw_ffi, law_wasm.wasm); core и ABI 2 без изменений — в core вербализатор стоил бы +19 % байт. Ворота разделения сверяют состав «только у полного» по FULL_ONLY_EXPORTS; обвязки Python и @arxo/law-engine получили verbalize/verbalizeLoaded с именованным отказом у core; differential вербализации сверяет голдены через liblaw_ffi и law_wasm.wasm (wasm_verbalize_runner.mjs). MCP вербализует тем же in-process liblaw_ffi, что исполняет дела: ресурс verbalized — хэндлом пакета, правила и черновики — one-shot, оверлеи полем labels; lawref.verbalize из сервера ушёл.

  • LawQL на Rust — крейт law-ql, lawc query и differential-ворота (DECISION-0129, 05.09.2026). Дословный порт lawref/query/: те же queryResult / queryError / querySchema / queryCatalog байт в байт, включая порядок строк, provenance, explain и подсказки диагностик; eval() и query … over … исполняет law-eval в процессе. Ворота check_ql_differential.py (шаг 56; линты корпуса — за --lints). Редактор зовёт lawc query вместо python3 -m lawref query; настройка law.query.engine снята. MCP: law_query исполняет долгоживущий lawc query --serve (JSONL, кэш снимков по поколению корпуса, без fallback), lawref.query из сервера ушёл, engine — только lawc.

  • Скрининг DECISION-0120 и применимость редакций §31 для хостов на Rust (DECISION-0130, 05.09.2026). Крейт law-screen (порт lawref/screen.py), команды lawc screen и lawc edition-state (машина D1 — law_eval::refs, без второй копии), экспорты полного артефакта law_screen / law_edition_state, ворота check_screen_differential.py (шаг 57). MCP: law_screen и сторож закрытых редакций считает ядро через liblaw_ffi; lawref.screen/lawref.applicability из сервера ушли. Тем же днём (§6) сняты бессемантические импорты оракула в MCP: своя typed-форма запроса, дата по схеме, оверлеи §218 экспортом law_apply_overlays, assertion черновика с хэшем от ядра; на Python остались аналитика, календарь по локу и нога differential.

  • Резолвер §11 и law.lock на Rust — крейт law-resolver, команды lawc manifest / lock / resolve / expansions-context / calendar-resource / clir-for, экспорты law_calendar_resource и law_expansion_context, ворота check_resolver_differential.py (шаг 58) (DECISION-0131, 05.09.2026). Байты law.lock теперь порождают обе реализации; MCP берёт календарный ресурс §85 и контекст развёрток у ядра, редактор пересобирает лок и находит CLIR пакета через lawc.

Добавлено

  • Сценарии пакета объявляются метаданными (DECISION-0127, errata E-0127): [tests] в law.toml, обнаружение corpus/lawtests/, ворота check_lawtest_discovery и check_lawtest_suites. Поверхность §267 расширена аддитивно: несколько evaluate в тесте и наблюдения any_applied, any_position, any_issue, issues_within, issues_exactly, positions_present, position_status, position_count, collected*, judgment_request(s), conflicts, conflict_*, interpretations, certificate, blocked_by, blockers, refused; запрос argumentation; квалифицированный снимок календаря и полный StableId в id факта.
  • Инструмент переноса corpus/tools/lawtestgen/: ожидания выводятся из прежних проверок подменой документа, сохранность проверяется батареей мутаций, вход и ответ сверяются побайтово, вердикт — обеими реализациями.

Удалено

  • corpus/emit_lawtests.py и дерево corpus/tests/ (12 265 порождённых копий), ворота check_corpus_tests, прежний corpus/tools/migrate_lawtests.py.

Архитектура

  • Профиль развёртки law.expansion/0.1 (DECISION-0126, 05.09.2026). Схемы рассуждения каталога записываются определением expansion (закрытая алгебра §279.1.2, посылка-агрегат §59.1) и экземпляром expand; стадия §210.2 ДО статик заменяет экземпляр обычными rule/priority с явными @id по путям от self — CLIR байтово равен ручной записи, карта law.expansion-map/0.1 отдельным артефактом. Пины §279.1.8 (expansion.toml, [expansions] манифеста, секция lock, --expansions), lawc lower --expansion-map, lawc expand --symbol по экземпляру, диагностики LDC-E1335…E1342, векторы T185–T241, эталон lawref.expansion, law-hir::expansion. Библиотека packs/expansions/: presumption (rebuttable_presumption), offence, offence_liability, threshold_quantifier, threshold_quantifier_after, rule_exception; G4 — 122 из 235 презумпций корпуса выразимы, все узлы и исходы равны с точностью к поимённо разрешённым отличиям; старый lowering §146 сохранён. Корпус не менялся.

  • Третий язык вербализации — law.verb.en@0.1.0 (DECISION-0032 §8, 05.09.2026). Пак ступени (2) по формату (law.verb/0.2, paramNames, variableAliases), 162 фразы и 21 вид узла вровень с law.verb.ru@0.7.0 и law.verb.kk@0.3.0, gapWhat целиком, reviewStatus: draft — формулировки §3.4 написаны формализатором и юристом не заверены, make_approval выше draft отказывает. Открытый в DECISION-0032 §8 вопрос «что означает ступень (2) для языка без падежей» закрыт в самом паке: слота биндера у английского НЕТ — слоты §218.1 семейства en-* (plural, possessive) падежа не несут, и объявить любой из них значило бы догадку о форме (DECISION-0004 §4); метка с plural хранится в CLIR и не меняет ни байта текста (selftest, VER-EN-L0-CALC). stdTypeForms по той же причине не объявлены. Консьюмеры переведены тем же изменением: ворота тотальности (PACK_PATHS["en"], MIN_LANGUAGES = 3, три строки CONSUMERS, MIN_CONSUMERS = 12), MCP (VERB_PACK_PATH_EN, ресурс law://<пакет>/verbalized/en в перечне, law_rules lang: en, перечень известных языков в отказе — en, kk, ru), рабочий стол (третья опция в verb-packs.ts; бандл оракула берёт packs/verb/*.json глобом). Замер по corpus/clir/ (501 документ): пробелы под en в точности те же 288, что под ru и kk (терм list/record, precedent_decl, deadline_policy в пяти пакетах), — английский пак ничего не добавляет и не прячет; сами эти пробелы — состояние корпуса, шаг тотальности красен на всех трёх языках одинаково.

  • Конституция РК переведена оверлеями §218 на семь языков — kk, en, ky, uz, ar, la, zh (05.09.2026, DECISION-0070). 63 файла i18n/<lang>.json в девяти пакетах (sources, rights, president, government, court, kurultai, parliament-1995, president-1995, amendment): 2331 узел с меткой на каждом языке, полнота 100 %, висячих ключей нет; статус translation (у kk rights и четыре узла sources — official, дословно из закреплённого казахского текста). Семь агентов работали параллельно по одному брифу; терминология сведена с паками law.verb.<lang> и параллельными конституциями корпуса (kg, uz). MCP-ресурс law://kz-constitution-<пакет>/verbalized/<lang> отдаёт полный документ на восьми языках без маркеров LDC-E8201, заголовки блоков без кириллицы у en/ar/la/zh. Храповик i18n-ratchet.json получил 63 строки родным --register (обход сужен до Конституции: чужие висячие ключи в незакоммиченных kz/banks и kz/procurement блокировали запись). Ворота check_i18n_overlays.py починены: имя CLIR они строили только из пути («/»→«-») и объявляли оверлеи sources, parliament-1995, president-1995 «висячим файлом целиком» на любом языке; теперь при промахе конвенции CLIR находится по заявленному package через индекс хвостов файлов каталога. Не сделано: формы §218.1 (только text), заверение переводов, inline-канал kk для восьми пакетов (у rights он уже есть, оверлей там дублирует), ось la/ar/zh в label-ratchet.

  • Подъём вербализации на всех восьми языках — law.verb.ru@0.8.0, law.verb.kk@0.4.0, en/ky/uz/ar/la/zh@0.2.0 (05.09.2026): 288 пробелов тотальности закрыты. Рендерер verbalize.py научился термам §54 record/list (порождаются таблицами A3, в .law не пишутся) и узлам precedent_decl/factor_vocabulary §276 и deadline_policy §86 — 196 строк добавлений, ни одной правки существующих; каждый путь обусловлен паком (coveredNodeKinds, ctx.has), 39 прежних голденов байт в байт. Закрытые схемой перечисления (start_count, include_end, roll, month_end, полярность исхода) — фраза на каждое значение, машинное имя в текст не печатается; открытые имена судов — словарь precedent.court.<ИМЯ> с деградацией к идентификатору. 41 новая фраза, operators.concat, три вида узла; состав всех восьми паков вровень (selftest 6.13). Замер каждого по 503 документам corpus/clir/ — 0 пробелов, младшие версии по-прежнему 288. Голдены VER-RU-L0-{PRECEDENT,DEADLINE,TABLE-TERMS} под 0.8.0 и GAP-близнецы под 0.7.0 (3/1/6 маркеров); табличный вектор понижается каталогом с *.lawtable.json и бутстрапом law.lock у компилятора (ver_raise_08.py). Пины всех одиннадцати консьюмеров переведены, паспорт Конституции перегенерирован под 0.8.0 (2966 блоков, 0 маркеров, approvals пусты). Ступень 5 на 28 парах — ни одной новой записи. Не закреплены ветви record_empty, factors_none, courts_none, court_unnamed.

  • Пять языков без слота биндера — law.verb.ky, law.verb.uz, law.verb.ar, law.verb.la, law.verb.zh, все 0.1.0, draft (05.09.2026). Паки написаны пятью независимыми агентами по одному заданию (состав ключ в ключ с law.verb.en@0.1.0, без binderFormSlot и stdTypeForms: словарь слотов §218.1 для их семейств пуст, и метка форму нести не может), точки регистрации вписаны координатором одним проходом: PACK_PATHS и MIN_LANGUAGES = 8, пятнадцать строк CONSUMERS (MIN_CONSUMERS = 27), VERB_PACK_PATHS и ресурсы law://<пакет>/verbalized/<язык> MCP, enum lang (перечень в отказе — ar, en, kk, ky, la, ru, uz, zh), пять опций verb-packs.ts, пятнадцать векторов VER-<L>-{L0-CALC,L1-DEFAULTS,L0-PARAM-ALIAS}, selftest по реестру _DRAFT_PACKS_WITHOUT_BINDER_SLOT. Теги — по корпусу: ky-KG (563 метки), uz-Cyrl (все 953 метки и закреплённая редакция lex.uz кириллические), ar (1788 меток, четыре оверлея), la (2312), zh-Hans (меток нет; письменность названа, чтобы голый zh не подхватил будущую zh-Hant). Замер каждого по corpus/clir/: те же 288 пробелов, что под ru/kk/en. Ступень 5 ворот на 28 парах дала одиннадцать записей SHARED_LITERALS нового класса — общий тюркский корень в парах kk/ky, kk/uz, ky/uz («саны», «бала», «күн», «тил», «иш», «ким», «Функциялар», «{kind} терми») и одно заимствование ru/ky («текст»); латиница, арабское письмо и иероглифика с кириллицей не пересекаются по построению. Лингвистические решения записаны в README паков: арабское отрицание масдаром انتفاء (калька с ليس неграмматична после أنّ), латинский биндер юссивом sunto с именительным, китайское постпозитивное 不成立, узбекский порядок {left} {right} {op} в сравнении. Находки к рендереру, которые паки закрыть не могут: латинские разделители ", "/"; " в RTL/CJK-тексте, литерал «значение» в _type_label для любого пака, артикль ال как инициал алиаса, отсутствие mod/concat в operators, отсутствие осей ar/la в label-ratchet.json.

  • Векторы VER-EN-L0-CALC, VER-EN-L1-DEFAULTS, VER-EN-L0-PARAM-ALIAS закрепляют английские голдены: рамку документа («Identifier», а не литерал русского пака), различающие формулы §67 («it is established that» / «it is established that not» / «it is not established that»), словарь paramNames на единственном имени, где английское слово отличается от идентификатора (years → «number of years»), обозначения по инициалу английской метки («P», «P2») и спаны сайд-канала. Матрица возможностей и галерея рабочего стола перегенерированы генераторами (555 → 614 строк: в матрицу вошли и ранее не вписанные соседние векторы).

  • calc.tiers (P05) — первый вычислительный пакет с потребителем В КОРПУСЕ. packs/primitives/money-and-obligations/tiers применяет конечную денежную шкалу независимо от юрисдикции: два режима (Graduated — каждый участок по своей ставке; Volume — ставка достигнутой ступени на весь объём), три этапа округления (ExactOnly / TotalOnly / PerTier), бесплатный участок ступенью со ставкой ноль, открытая верхняя ступень. Ключ результата — пара (шкала, база), а не носитель расчёта: применение шкалы есть функция этой пары, и носитель потребовал бы от потребителя выдумать идентичность, которой в праве нет. Некорректная шкала (пустая, с разрывом, перекрытием, дублем, потерянной ставкой, без режима, без этапа округления, без политики, со смешанными валютами) НЕ считается вовсе и называет дефект по имени; база ниже пола шкалы даёт отказ, а не ноль. Все правила поражаемы вынужденно: строгое правило не вправе читать голову с поражаемыми производителями (§111), а база от предметного пакета почти всегда такова.

  • Налоговый кодекс РК перешёл на calc.tiers. Три прогрессивные шкалы статьи 363 (доход работника — статья 441, дивиденды, предпринимательский доход) считались тремя копиями одной формулы round(min(база, порог)·нижняя + max(0 ₸, база − порог)·верхняя, 0, "HALF_UP") прямо в головах правил. Формула уехала в вычислитель, величины остались у Кодекса: corpus/laws/kz/income-tax/06-progressive-scales.law объявляет ступени из тех же датированных параметров §87 и месячного расчётного показателя закона о бюджете, с прежними якорями @source. Округление осталось прежним — HALF_UP до тенге на итоге (TotalOnly), и оно по-прежнему объявленная политика ПАКЕТА, а не норма Кодекса. Появилась голова cumulative_taxable_income — нарастающий итог статьи 441 как отдельное понятие. Публичные результаты потребителя не изменились: ожидания сцен IPN-01…IPN-09 не тронуты.

  • Подключение нового корня к корпусной оснастке: строка в LOWERED_ACTS (corpus/gen_kz_clir.py), второй корень пакетов в verify/ci/gates/coverage/check_corpus_enrollment.py с правилом имени packs/primitives/<имя> → calc-<имя>.lawir.json, семейство регрессии и differential calc_tiers (corpus/kz/acts/calc_tiers.py), строки в corpus/ratchets/scenario-manifest.json, scenario-ratchet.json и label-ratchet.json, титул в PACKAGE_TITLES MCP. Копии вычислителя в corpus/laws/ не заводилось. Секции [metadata], sources.law и @source-якорей у вычислителя нет и не должно быть (DECISION-0123 §2).

Проверки

  • verify/ci/gates/differential/check_expansions.py (строка в run_all.sh, --canary): на векторах профиля §279.1 узлы и карта lawc байтово равны эталону lawref.expansion, коды статики равны; каждый пакет packs/expansions/<имя>/ с expansion.toml, README и примерами — check/lower --expansions с пином от резолвера, узлы lawc == lawref, тесты §267 обоими раннерами, байты evaluation. --regen — единственный генератор law.lock примеров.

  • packs/primitives/money-and-obligations/tiers/tests/regression.lawtest — 72 сценария §267 с независимо посчитанными ожиданиями: нулевая база, бесплатный участок, точное попадание на границу, одна/две/три ступени, открытая верхняя, перестановка входа и переименование ступеней, расхождение режимов на одном входе, отсутствие монотонности у Volume, три этапа округления (0,8 / 1 / 0 на одном входе), девять родов некорректной шкалы, база ниже пола. Прогон — семейство calc_tiers; differential 72/72 байтово. Двенадцать из них заведены по находке check_proof_analytics: пять правил СРАБАТЫВАЛИ, но их применение никто не читал и не спрашивал (четыре продюсера scale_declared, две причины одного дефекта TierBoundsMissing, обе ветви §206-развёртки проверки сравнимости валют). Стало head UNREAD 0, READ 43.

  • packs/primitives/money-and-obligations/tiers/tools/import_probe.py — единственная проба корня, спрашивающая НАСТОЯЩЕГО потребителя: закрепление §23/§209, отсутствие узлов с пустым предикатом, отсутствие второй реализации формулы в головах трёх мигрированных правил и обе стороны шва — на мире «Кодекс + calc.tiers» налог выводится, на мире без вычислителя не выводится вовсе.

  • У вычисляемых голов calc.tiers объявлены ключи §45.1: без них сводное значение, поданное фактом дела, было бы истинно ВМЕСТЕ с пересчитанным без единого issue (найдено воротами check_aggregate_keys).

  • Сцены ИПН дополнены: IPN-TIERS-01…03 (контрольная база 40 000 000 ₸ → 4 161 875 ₸ вкладами 3 676 250 и 485 625; расшифровка общего вычислителя, видимая из мира Кодекса; та же расшифровка ровно на пороге) и IPN-363-01…03 — дивиденды по обе стороны порога и фермерское уменьшение на семьдесят процентов. Последних трёх голов не спрашивала до этого ни одна сцена: пробел стал виден при переносе, когда фермерское уменьшение оказалось строгим правилом над ставшей поражаемой головой.

  • CLAUDE.md сокращён с 667 до 115 строк: подробные команды, реестры, рецепты, аналитика и инструкции приложений перенесены в пять документов docs/agent-guide/. Девять инвариантов и их нумерация сохранены; ссылки ведут к руководствам по текущей задаче, без загрузки всего справочника.

  • Добавлен docs/catalogs/REASONING-PRIMITIVES-CATALOG.ru.md — парный вычислительному каталог общих схем рассуждения: 17 прикладных и 6 пограничных семейств (презумпция, исключение, замыкание, состав, вина, знание, бремя §77, каноны толкования, иерархия источников, действие во времени, дееспособность, оценочные посылки, кванторы с порогом, эстоппель, причинность, прецедент §276, цели связности; пограничные — взвешивание, аналогия, аргументация, стандарт доказывания, определения, выбор правопорядка). Место каждого — один из действующих механизмов (ядро, форма DECISION-0099, словарь corpus/laws/doctrine, цель §270, анализ, посылка дела, канал суждения §47.3); новых конструкций и пакетов каталог не вводит, единственное предложение нового места — библиотека общих целей. Строка в таблице CLAUDE.md, указатели в README.md и индексе шаблонов.

  • Добавлены пакеты данных kz.national_bank.fx (corpus/laws/kz/nbk-fx, курсы Нацбанка 01.08–05.09.2026, официальные байты RSS) и kz.kazhydromet.observations (corpus/laws/kz/kazhydromet-observations, бюллетень экспресс-мониторинга за июль 2026, суточные ряды объявлены без фактов); генераторы tools/gen_rates.py и tools/gen_bulletin.py, строки в LOWERED_ACTS, CLIR в corpus/clir/, авторские .lawtest.

  • Принят spec/decisions/0126-declarative-expansions.ru.md: профиль развёртки law.expansion/0.1 для схем рассуждения (R01 презумпция, R04 состав, R13 квантор с порогом), синтаксис expansion/expand, секция expansions в law.lock, source-map отдельным артефактом; 11 развилок решены владельцем, исполнение — этапами §8. Каталог схем рассуждения docs/catalogs/REASONING-PRIMITIVES-CATALOG.ru.md получил указатели R01/R04.

  • Добавлен docs/catalogs/COMPUTATIONAL-PRIMITIVES-CATALOG.ru.md: 18 прикладных и 6 пограничных семейств вычислений, паспорта входов/результатов, зависимостей, границ и выразимости. Различены пакеты, расширения, шаблоны, ядро и данные; каталог связан с DECISION-0123 и packs/primitives/; в CLAUDE.md добавлен отдельный раздел с прямой ссылкой и порядком обращения к каталогу. Разграничены роли архитектурного решения, каталога и README. Это описание кандидатов, без новых реализаций и runtime-проб.

  • Каталог вычислений расширен второй волной P25–P36 по обзору корпуса: течение срока с приостановлением и перерывом, кворум и большинство, распределение мандатов, родство, цепочки владения и контроль, иерархические классификаторы, возраст, норма рабочего времени, аннуитет, амортизация, наследственные доли, дозирование. У каждого — потребители в corpus/laws/, место (пакет/расширение/шаблон/данные) и статус по документам; добавлены границы с P01–P24, композиции и примечание к очереди пилотов. Реализаций и runtime-проб нет.

  • DECISION-0123: закреплён packs/primitives/ для общих вычислительных Law DSL-пакетов calc.* без юрисдикции и скрытых нормативных умолчаний. Уточнены границы библиотек в PACKAGE-LAYOUT и связь с DECISION-0112. Реализации пакетов и интеграция нового корня остаются следующими этапами.

Корпус

  • Шов ОСМС ↔ Кодекс о здоровье и два подзаконных акта под ним (наряд B4, 05.09.2026). До этого дня право на помощь в системе ОСМС Кодекс выводил из СОБСТВЕННОГО признания «лицо застраховано и обратилось», а полностью исполнимый вывод insured Закона № 405-V не читал никто: osms::insured был терминальным. Теперь insured — pub, kz.corpus.healthcode импортирует kz.corpus.osms, и статья 200 читает статус из статьи 5 Закона. Вместе со швом закреплены два подзаконных акта, к которым Кодекс отсылает прямо и которые в корпусе отсутствовали: kz.corpus.gobmp — перечень гарантированного объёма бесплатной медицинской помощи (постановление Правительства РК от 16.10.2020 № 672, пункт 1 статьи 196 Кодекса), 14 пунктов нормативными фактами §71 и 20 видов помощи словарём; kz.corpus.pmsp_attachment — Правила прикрепления к организациям ПМСП (приказ МЗ РК ҚР ДСМ-194/2020, пункт 4 статьи 123), с основаниями прикрепления, пределом «не более двух смен в календарном году» агрегатом §59, сроком государственной услуги в один рабочий день, закрытым перечнем оснований отказа и сроками жалобы (пять и пятнадцать рабочих дней). Отсюда вопрос «покрыта ли услуга» перестал быть входным суждением: право на ГОБМП выводится из круга лиц статьи 196 И перечня Правительства, право по ОСМС — из застрахованности И перечня статьи 200, а оговорка «за исключением случаев лечения заболеваний в рамках гарантированного объёма» выражена дефитером. Права пациента переведены в позиции §122–§137: обязанность организации получить информированное согласие (статья 134 пункт 3), полномочие §127 законного представителя (статья 137 пункт 2), запрет разглашения тайны медицинского работника с парной поддерживаемой обязанностью (статья 273), запрет платного оказания покрытой помощи (статья 202 пункт 9) и обязанность оказать покрытую помощь с выводимым «отказ неправомерен» (статья 77). Маршрут жалобы — пять календарных дней службы поддержки пациента (статья 35 пункт 3) и десять рабочих дней на независимую экспертную комиссию (статья 270-2 пункт 1). Найден и закрыт дефект самого Закона № 405-V: вывод local_budget_covered (взносы за зарегистрированного безработного платит местный бюджет, статья 26-1) не давал статуса никому, и цепь «потеря работы → регистрация → взносы → право на помощь» рвалась; добавлено правило InsuredByLocalBudgetCoverage. Двенадцать сценариев в двух новых семействах (health_coverage, pmsp_attachment), differential 46 вызовов байтово идентичен.

  • Глава 15 КоАП РК на offence_liability (DECISION-0126 §8.0, 05.09.2026). 610 правил санкций 47 модулей → 376 экземпляров развёртки с головами квалификации и ответственности; санкции и ст. 44 — defeasible (§111); освобождения по примечаниям — случаи exemption (207, 207-1, 214-1, 220, 238, 256, 262); ст. 214-1 по поправке Astra; меры ст. 190 присоединены к ответственности; посылка actor общей части объявлена изменением поведения. Пакет закреплён law.lock (gen_kz_clir.py --relock-expansions, --expansions-for); offence_liability 0.2.0; gen_fines разворачивает цепь продюсеров.

  • Глава 15 КоАП РК: предикаты-блоки разложены на элементы по тексту статей (05.09.2026). Конъюнктивные элементы своими отношениями, альтернативные деяния — правилами-производителями одной головы «деяние установлено» (494), умысел ст. 197 — guilt = some, примечание ст. 261 — случай exemption; 330 из 376 экземпляров с ≥2 элементами, 2015 отношений; таблица разложения corpus/tools/migration/koap_chapter15_elements_table.py; gen_fines перечисляет варианты дела по альтернативам (--verify-unfolded: 1067 дел с учётом вариантов, расхождений 0; noCase 27).

  • gen_fines --verify-unfolded через Rust-ядро и пул потоков (05.09.2026). Проверка дел главы 15 шла Python-оракулом последовательно: 1067 полных прогонов по CLIR КоАП (14 363 узла, 7 102 правила) — 70 минут. Теперь — liblaw_ffi (обвязка verify/ci/lib/law_ffi.py): одна загруженная программа, потоки по числу ядер (ctypes отпускает GIL, таблица хэндлов общая для процесса) — 25 с, тот же вердикт на всех 1067 делах; путь через оракул снят, остался один; --jobs N — число потоков.

  • Редактор: профиль развёртки в подсветке, подсказках, переходах и дополнении; parse --ast чинится на файлах с expand; .vsix одной командой (05.09.2026). expand, expansion, emit, exports, cases — ключевые слова tmLanguage, подсказки на §279.1.2–§279.1.5 (подразделы §279.1 подняты до ##), сниппеты 52 → 55; параметр экземпляра expand объясняется карточкой из определения и ведёт к нему по Cmd+Click (lib/expansions.js); мост «правило → экземпляр» для узлов X/elements дерева доказательства и why-not с peek строки emit; дополнение внутри expand — незаданное по определению; install.sh собирает .vsix и ставит в Cursor/VS Code; линза «☰ по-русски» над правилом — абзац вербализации его узла peek-ом под объявлением и в подсказке (lawref verbalize --json: текст плюс блоки по узлам; пакет вербализуется раз на поколение файлов). Дефект компилятора: ArgumentValue::List как newtype-вариант с Vec во внутренне тегированном enum не сериализовался serde — lawc parse --ast отказывал на любом файле с expand.

  • Редактор: инлеи с метками, линза «кто проверяет это правило», компилятор в wasm внутри расширения (05.09.2026). Инлеи §218 у имён отношений в правилах и expand (язык и длина — настройки); линза над правилом, экземпляром и отношением — сцены .lawtest пакета и сценарии корпуса по головам, с переходом. Палитра §225 (parse, check, layer, lower, expand --symbol) считается law_wasm.wasm в воркере node:worker_threads: те же байты, что у lawc --json, без процесса на вызов и без сборки Rust у пользователя; .vsix несёт комплект engine/. Замер на КоАП: проверка пакета 1,5 с через wasm после прогрева против 1,8 с у бинаря. Модуль wasm-dist оказался собран до DECISION-0126 — пересобран; смок сверяет реестр features wasm с живым law-cli.

  • Редактор, первая очередь доработок (05.09.2026). Строка состояния: подпись law·wasm, даты сборок модуля и бинаря в подсказке, состояние «AST недоступен» с причиной раньше счётчиков. Быстрые правки: E4103 — записать strict-читателя defeasible (§111, DECISION-0088); E1337 — строка параметра expand по форме из определения; E1339 — метка экземпляра; E1340 — действие «пересобрать секцию expansions law.lock» (корпус — gen_kz_clir.py --relock-expansions, остальные — resolver.expansion_pins). Палитра в wasm доведена до test, why-not, explain, graph (--program, --node); lawc test контекста развёрток не принимает ни в CLI, ни в палитре — сцены пакетов с [expansions] по-прежнему гоняет раннер корпуса. Несохранённый буфер уходит в VFS модуля по своему пути, пакетный файл проверяется пакетом с текстом всех грязных буферов. Попутно: команды на векторах ищут бинарь и от рабочей папки.

  • Редактор, вторая очередь (05.09.2026). Поиск ссылок на параметре или имени expansion — в экземплярах всех пакетов рабочей папки, чей [expansions] ведёт в это определение (обход манифестов один на сессию). На экземпляре — линза «порождено N узлов · alias vX · пин в law.lock» (§279.1.4, клик — в определение) и инлеи версии и min N. «Сцена из правила»: заготовка .lawtest по конъюнктам тела и голове правила или экземпляра. Test Explorer: файлы .lawtest — наборы, сцены — тесты, прогон lawc test --json, отказ раннера (в том числе у пакетов с [expansions]) — errored с текстом, а не тихий «прошёл».

  • Редактор, третья очередь (05.09.2026). Переименование F2 по всем файлам пакета (ключевое слово и не-идентификатор отвергаются). Cmd+T по рабочей папке: текстовый индекс строк объявлений с кэшем по mtime. «Узел CLIR»: StableId объявления → узел (и порождённые имя/…) виртуальным документом; из любого JSON Cmd+Click по StableId — к объявлению или экземпляру. Панель «Law: пакет»: импорты, потребители по [dependencies], читаемое соседями с pub, без pub (долг §24) и не объявленное.

  • kz.private.dogovornaya_penya — второй частный акт под импортированным статутом и первый счётный. Модельные (вымышленные) условия договора поставки № 7/2026 закреплены байтами; из перечня обязательств, платежей и даты расчёта выводятся остаток основного долга, периоды с неизменной базой, число дней, применённая ставка, начисление, потолок (п. 3.4), округление до тиына половиной вверх (п. 3.5) и итоги по обязательству и договору. 38 правил, 8 инвариантов §93.1, 21 сценарий, differential 88/88 байтово. Гражданский кодекс РК читается ОДНИМ экспортированным §24 предикатом (court_may_reduce_penalty, ст. 297) — расширять экспорт Кодекса нельзя: обратное замыкание импортов 32 пакета. Размер ВЗЫСКИВАЕМОЙ неустойки остаётся каналом суждения §47.3 (REQUIRES_JUDGMENT), и расчётная сумма присуждаемой не притворяется. Отчёт — tools/raschet.py (JSON и читаемая таблица), семантики в нём нет.

  • Кандидат 4 KZ закрыт парой пакетов: kz.corpus.gosuslugi (Закон № 88-V «О государственных и социально ответственных услугах») и kz.corpus.gosusluga_nedvizhimost (Правила оказания государственной услуги «Государственная регистрация прав (обременений прав) на недвижимое имущество», приказ Минюста РК № 27). Делегация подпункта 1) статьи 10 проверяется lawref check-delegation, а не декларируется; 99 сценариев в двух семействах, differential байтовый, шесть целей §270 с двумя падающими канарейками, два автомата §159—§164 с журналами. Решение — DECISION-0122.

Исправлено

  • lawc parse завершается на A | B внутри аргумента generic (errata E-0129, 05.09.2026). Запись DeadlinePolicy §86, переписанная в .law буквально, разбиралась ~минуту стены с ростом памяти и без вердикта: цикл аргументов type_ref на | звал type_ref(), который ставил LDC-E0201, не съедая токен. Теперь — одна ошибка на поле (с указанием на variant_type_decl) и пропуск до парного >; grammar объединений в type_ref не знает, файл отклонён. Вектор ERR-E0129-UNION-IN-GENERIC-ARG (первый static путём parse), unit-тест law-syntax, таймаут static-вызова в run_vectors.py.
  • lawc lower без resolve-контекста больше не понижает чужую голову правила в пустой предикат (errata E-0126, 04.09.2026). У пакета с import-ами lower без --imports возвращал rc=0 и CLIR с "predicate": "" у каждой qualified-ссылки (13 правил пилота partial-payment) и пустым envelope.imports; гашение LDC-E1104/LDC-E1105, заведённое DECISION-0102 для check, lower унаследовал через общий конвейер DECISION-0111 §2.4. Конвейер получил стадию: гасит только check. Ворота check_cross_package_lowering.py (красные с WP-35 по этой причине и с 02.09 по LDC-E4101 в фикстуре @source) зелены; фикстура чужой головы, сверка с оракульным resolve_symbol; четыре вектора ERR-E0126-*; lower-shape раннер run_vectors.py принимает imports.
  • Модули актов KZ — на закрытый EvaluationRequest 0.2 (04.09.2026). 40 вызовов в 17 модулях corpus/kz/acts/ звали оракула прежней позиционной формой и падали TypeError до первого сценария; 22 семейства кластера были красны с момента слияния 0.2. Переведены на engine.EvaluationRequest / .build(...) (корпусной конструктор пинит inline deadlinePolicy в DeadlinePolicyRef §2.9); обёртки шва в run_goals credit-bureau и iban — на форму wrapper(request); тот же дефект снят в check_calendar_lawtest. Проверено: 14 семейств зелены, KZ-differential байтово сходится на oked (11 вызовов) и credit_bureau (109). Прямой конструктор оставлен только там, где дело само несёт options: он их не достраивает, и lawc отвергает такой запрос целиком при зелёной регрессии.
  • Харвест миров под цели §270 переживал копию IR (04.09.2026). Корпусный конструктор пинит inline deadlinePolicy в deepcopy(ir) на время вызова, поэтому дело, снятое швом set_evaluate, ссылалось на узел, которого в закоммиченном CLIR нет: run_goals credit-bureau снимал 98 миров и не исполнял ни одного. Обёртка забирает узлы политики из request.ir и пишет рядом с делами программу, которая их несёт. Цели HELD на 98 мирах, канарейка падает четырьмя контрпримерами.

Добавлено

  • packs/primitives/money-and-obligations/allocation — calc.allocation (DECISION-0123, каталог P04): пропорциональное распределение и очереди с пропорцией внутри недоплаченной очереди, наибольшие остатки поверх div_round, явные точность/единица/ политика остатка/приоритет, 30 дефектов входа, неразрешённое равенство как результат. 17 .lawtest + свойство §270, differential 17/17. Ворота verify/ci/gates/differential/check_primitives.py для всей категории packs/primitives/* (статика, lowering, тесты обеими реализациями, байты).

  • Конституция Кыргызской Республики 2021 — первый акт кыргызского правопорядка (04.09.2026). 116 статей из 116: EXECUTABLE 101, SOURCE_ONLY 15 с объявленной причиной, UNEXPLAINED 0; 260 сценариев, differential байтовый на каждом. Акт закреплён ДВУМЯ аутентичными редакциями (ст. 13: кыргызский государственный, русский официальный), поэтому правило парного якоря §194 действует с первого коммита и мера §33.1 даёт одинаковые числа на обеих сторонах. Пороги взяты парами: на девяноста депутатах «большинство» и «не менее половины» расходятся одним голосом, и обе нормы стоят в акте рядом (ст. 78 ч. 1 против ст. 80 ч. 3). Срок задержания выражен hours_between (48 против 49 часов), а не сутками: суточная единица дала бы другой ответ на деле, начатом вечером. Запрет изменения Конституции в чрезвычайном положении поставлен гардом при ОБОИХ путях изменения — при референдумном и парламентском, иначе один остался бы открытым.

  • Конституция Республики Узбекистан 2023 — первый акт узбекского правопорядка (04.09.2026). Действующая консолидация с изменениями ЎРҚ-1158 (в силе с 25.07.2026), 155 статей из 155: EXECUTABLE 143, ANCHORED 12, SOURCE_ONLY 0. Закрепление потребовало среза --lexuz-act-body (снятие трёх видов разметки портала между абзацами) и конвенции деления «155-модда.» в обеих мерах §33.1 — до неё документ не подпадал ни под одну и в учёте статей не участвовал. Набор признаков исполнимого содержания «uz» выведен замером по тексту: слова «фоиз» в акте нет ни разу. Одиннадцать порогов закрыты парами дел, три из них различаются одним словом («не менее двух третей» против «более двух третей»). Конституционность акта отдана каналу суждения §47.3 Конституционному суду; самозащита ст. 154 формализована в два хода. 120/120 регрессия, 121 вызов differential байтово, lawc test 5/5. Слияние ветки uz-anchored довело меру до 134/21 и само нашло дубль понятия гражданства, невидимый каждой стороне порознь; разбор оставшегося уровня ANCHORED, ст. 18 ч. 2 и ст. 3 с 14 — до 146/9. Все девять оставшихся определительны по существу; ст. 3 и 14 заведены решением владельца при неснятом доводе против, и дела сторожат границу выбранного прочтения.

  • Реестр обязательных требований: 33 → 51 канонической строки, F3 DECISION-0116 замкнут (04.09.2026). 21 несопоставленный пункт проверочного листа ОСиОТ закрыт не подзаконкой (её под этот остаток не существует — все ссылки ведут внутрь двух формализованных кодексов), а деонтикой самого Трудового кодекса: пять готовых шаблонов получили мост статуса субъекта предпринимательства, тринадцать заведены заново по статьям 68, 69, 81, 82, 96, 184, 158, 33, 26, 104, 62 п. 3 и 7. Пороги выражены сравнением в правиле, а не прозой в метке; минимальная заработная плата намеренно не числом — её устанавливает закон о республиканском бюджете. Мост к КоАП дополнен на все 18 строк тем же срезом статей 86–98 (6 mapped, 12 not_mapped с причиной по тексту). Пункты листа mapped 5 → 20, unmapped 21 → 6 (остаток — Социальный кодекс, роль которого в сфере меняет владелец). Сценариев семейства labour_osh 64 → 82, KZ-differential байтовый на 49 вызовах. Разбор — DECISION-0116 §8.

  • Измеритель безопасного strict-острова DECISION-0119 §10 (04.09.2026). Диагностическая phase-profile делит solve-попытки, grounded-применения, CPU и визиты strict-правил на case-independent и потенциально зависящие от дела по статическому графу чтений. На kz-criminal-code безопасный остров оказался равен 0 % для +0 и +1 факта; обязательное условие остановки сработало, поэтому кэш strict-базы шагов 3–6 не добавлялся.

  • Автоматическое взыскание КоАП для 33 трудовых требований (DECISION-0116 F6, 04.09.2026). Отдельный CLIR-пакет kz.corpus.labour_administrative_bridge сопоставляет 17 требований с объективными сторонами статей 88–90, 93 и 97 КоАП: 9 связей прямые, 8 требуют подтверждения более узкого состава. Остальные 16 имеют not_mapped с причиной после проверки статей 86–98, а не ложное no_sanction. Резолвер принимает класс адресата и повторность и запускает reference evaluator на существующих правилах КоАП, возвращая предупреждение либо штраф в МРП; суммы в Python не дублируются. Точный crosswalk и rule id включены в индекс и его храповик. Восемь новых сценариев и mutation-canary держат условность, повторность, адресата, предупреждение и штрафы 40/80/120/400 МРП.

  • Класс «старая арность вызова» в check_evaluate_seam (04.09.2026). Прежний линт держал ИМЯ (позднее связывание) и форму ОБЁРТКИ, но не арность самого вызова, поэтому 40 дослиянных вызовов были ему невидимы, а красили только ночную регрессию. Теперь engine.evaluate с числом аргументов, отличным от одного, — громкий отказ чтением AST; канарейка bad_evaluate_seam.py пополнена четвёртой формой (9/9 классов).

  • Полная проекция обязательных требований сферы инспекции труда (DECISION-0116, 04.09.2026). Manifest-driven индекс теперь содержит 33 канонических требования из Трудового кодекса и двух подзаконных актов, полный ОКЭД из 2108 кодов, 40 пунктов проверочного листа и воспроизводимый RSP-снимок из 61 страницы / 627 записей. Все строки имеют точный сценарий активации и READ-правило proof-графа; применимость к ОКЭД закрыта как 6 явных assertions и 27 not_oked_conditioned, без unknown. Добавлены ворота scope, официального снимка, полноты ОКЭД и связи канонической строки со сценарием/proof, все с mutation-canary. 124 обязанности небизнес- носителей удерживаются точными id, а 40 пунктов листа имеют сопоставление либо явную причину ambiguous/unmapped.

  • Разделяемый хэндл движка и ABI 2 (DECISION-0115 шаг 3, 04.09.2026). Таблица загруженных программ нативно разделяема процессом: программа загружается один раз и исполняется из любого потока, а не копируется по числу воркеров (каждая копия kz-criminal-code стоит 35–80 МБ; четыре потока на одном хэндле добавляют к программе ноль). На wasm32 таблица остаётся thread_local — у однопоточного рантайма глобальная блокировка была бы ценой без покупки, и байты браузерного пути не сдвинулись. Кэш видов остаётся у потока, EvaluationResources.program переведён на Arc, выгрузка определена под гонкой: начатый вызов доводится до конца, новые получают HANDLE_UNKNOWN. ABI_VERSION = 2 при неизменных именах и конвертах — меняется обещание хосту, и обвязки (law_ffi.py, npm, лендинг) сверяют версию при загрузке. Держат три теста крейта и новая проверка ворот check_ffi_differential: восемь потоков на одном хэндле и на разных делах обязаны дать байты одиночного вызова; байтовый контракт подтверждён на 313 векторах и 1960 вызовах шести живых семейств.

  • Профиль горячего пути как данные ночного окна (DECISION-0115 шаг 1, 04.09.2026). verify/ci/tools/hot_path_profile.py снимает тёплый вызов движка через хэндл liblaw_ffi по осям решения — загрузка программы, промах кэша вида, квантили p50/p95/p99 по wall и по CPU потока, размер ответа (узлы proof-графа и байты), рост с 0/10/100/1000 срабатывающими фактами дела, concurrency процессами — и пишет verify/ci/data/hot-path-profile.json с условиями прогона (git HEAD, тулчейн, CPU, load, профиль сборки, programHash). Дела живые, снятые швом set_evaluate. Это данные без порога, а не timing-gate: --compare A B печатает отношения парных снимков и предупреждает о разном programHash, --check держит форму файла. Первый снимок: тёплый вызов 2,1 мс CPU на пакете 1,1 МБ и 11,3 мс на кодексах при p99/p50 ≈ 1,17, но 1000 срабатывающих фактов дела дают 55–231 мс — цена линейна по узлам proof-графа (0,022–0,057 мс на узел), поэтому размер дела назван параметром допуска хоста.

  • Пилот реестра обязательных требований по ст. 83-1 ПК РК (DECISION-0109, 04.09.2026). Версионируемый ОКЭД и A3-классификация, хаб BusinessEntity, 26 шаблонов обязанностей главы 17 ТК, пакет 40-пунктового проверочного листа ОСиОТ и закреплённый RSP-снимок собраны в детерминированную проекцию apps/registry/index/business-requirements/. Канон содержит 6 требований для ОКЭД 25111; 3 эвристических кандидата изолированы от канона, 40 пунктов листа имеют сопоставление либо диспозицию, 43 расхождения названы по закрытому словарю. Персональная применимость доказывается движком в 7 сценариях по субъекту, identity, точному ОКЭД и дате. Новые ворота с канарейками держат источники, сопоставления, схему, provenance, детерминизм, свежесть и точный храповик 6 строк; not_observed и not_mapped явно не трактуются как отсутствие обязанности или санкции.

  • kz-macroprudential-normatives и kz-np-bank-loan-disputes: макропруденциальный контур НБРК и практика Верховного Суда по банковскому займу (04.09.2026). Постановление Правления НБРК от 25.08.2025 № 52 в двух консолидированных редакциях плюс постановление от 31.07.2026 № 92 отдельным источником (портал его не консолидировал): мера §33.1 EXECUTABLE 36 из 36 при нуле объявленных границ, 136 сценариев, differential байтовый на 136 вызовах, цели §270 5/5 HELD на 80 мирах, 23 A3-параметра §87 с одним датированным. Нормативное постановление Верховного Суда от 25.11.2016 № 7 в двух русских редакциях: EXECUTABLE 26 из 27 при одной объявленной границе, 97 сценариев, differential байтовый на 98 вызовах, цели 5/5 HELD на 69 мирах. ПЕРВОЕ применение профиля прецедента §276 в KZ-корпусе — четыре словаря factors, пять precedent, десять порождённых приоритетов (CONFLICT_OBSERVED 5) и четыре прочтения reason_model (OWNED_NODE_PROVED 4).

  • Закон о банках 258-VIII: даты опубликования и введения в действие. У редакций kz.corpus.banks не было published и in_force, и делегационная цепочка §30/§127 не замыкалась ни для одного подзаконного акта — D1 отвечал «ни одна редакция не применима» (LDC-E5305), то есть ошибкой о пороке подзаконного акта там, где порок был у родителя. Дата названа карточкой «Әділет» (17.01.2026), срок — пунктом 1 статьи 135 (шестьдесят календарных дней), Закон действует с 19.03.2026. Там же заведена power части третьей пункта 1 статьи 73 и pub-экспорт двенадцати деклараций.

  • Провода к Гражданскому кодексу и правило их формы. Кодекс экспортировал восемь голов и тип Pledge; постановление ВС читает статьи 299, 321 и 359 адаптерами, а Zalog пакета СТАЛ Pledge Кодекса — двух имён у одного понятия больше нет. Правило формы записано в шапке пакета: голова читается посылкой; держать её ВМЕСТЕ с собственными посылками запрещено; «у меня дробнее» не освобождает; грубую голову чинит владелец; место провода задаёт роль головы. Публичность сдвинула пин у 30 пакетов — регрессия 26 затронутых семейств (4524 сценария) прошла без падений у соседей.

  • Пятая живая пара делегационных ворот (check_delegation.py, 88/88): постановление НБРК № 92 → power статьи 73 Закона о банках без единой ошибки и предупреждения; обратная сторона — постановление № 52 (25.08.2025) основания не объявляет, и приписанная ему власть отвергается LDC-E5305. Темпоральное звено впервые работает на живых данных в обе стороны.

  • kz-macroprudential-normatives и kz-np-bank-loan-disputes: макропруденциальный контур НБРК и практика Верховного Суда по банковскому займу (04.09.2026). Постановление Правления НБРК от 25.08.2025 № 52 в двух консолидированных редакциях плюс постановление от 31.07.2026 № 92 отдельным источником (портал его не консолидировал): мера §33.1 EXECUTABLE 36 из 36 при нуле объявленных границ, 136 сценариев, differential байтовый на 136 вызовах, цели §270 5/5 HELD на 80 мирах, 23 A3-параметра §87 с одним датированным. Нормативное постановление Верховного Суда от 25.11.2016 № 7 в двух русских редакциях: EXECUTABLE 26 из 27 при одной объявленной границе, 97 сценариев, differential байтовый на 98 вызовах, цели 5/5 HELD на 69 мирах. ПЕРВОЕ применение профиля прецедента §276 в KZ-корпусе — четыре словаря factors, пять precedent, десять порождённых приоритетов (CONFLICT_OBSERVED 5) и четыре прочтения reason_model (OWNED_NODE_PROVED 4).

  • Закон о банках 258-VIII: даты опубликования и введения в действие. У редакций kz.corpus.banks не было published и in_force, и делегационная цепочка §30/§127 не замыкалась ни для одного подзаконного акта — D1 отвечал «ни одна редакция не применима» (LDC-E5305), то есть ошибкой о пороке подзаконного акта там, где порок был у родителя. Дата названа карточкой «Әділет» (17.01.2026), срок — пунктом 1 статьи 135 (шестьдесят календарных дней), Закон действует с 19.03.2026. Там же заведена power части третьей пункта 1 статьи 73 и pub-экспорт двенадцати деклараций.

  • Пятая живая пара делегационных ворот (check_delegation.py, 88/88): постановление НБРК № 92 → power статьи 73 Закона о банках без единой ошибки и предупреждения; обратная сторона — постановление № 52 (25.08.2025) основания не объявляет, и приписанная ему власть отвергается LDC-E5305. Темпоральное звено впервые работает на живых данных в обе стороны.

  • fatf-recommendations: Рекомендации ФАТФ целиком и мост к Закону РК № 191-IV (04.09.2026). Международные стандарты ФАТФ (редакция с изменениями июня 2026 года) — сорок Рекомендаций, формализованные положения Пояснительных записок и одиннадцать терминов Глоссария: мера §33.1 EXECUTABLE 62 из 67 при UNEXPLAINED 0 и одной объявленной границе, все сорок Рекомендаций EXECUTABLE, 206 сценариев в двух семействах, differential байтовый на 207 вызовах, цели §270 7/7 HELD на 147 мирах при падающей канарейке, стабовая доля НОЛЬ из 214 правил. Права на текст решены чтением уведомления в самой публикации: оно запрещает и воспроизведение, и перевод, поэтому закреплены байты авторского изложения, а английская редакция названа проверяемой отсылкой с sha256. ВТОРОЕ семейство fatf_aml_bridge исполняет ДВА CLIR на одном мире и сравнивает стандарт с Законом РК: восемь расхождений транспозиции, из них поставщики услуг траста и компаний вне перечня субъектов статьи 3 и полное отсутствие у Закона требований статьи 16 к сведениям о плательщике. Найдено попутно: entity_ref дела с полем type НЕ совпадает с const_ref нормы — правило молча не срабатывает при зелёном check и пустых issues.

  • kz-gats-financial-services: Перечень обязательств РК по ГАТС, сектор «финансовые услуги» (04.09.2026). WT/ACC/KAZ/93/Add.2 в части сектора 7 вместе с Частью I, Приложением к ГАТС по финансовым услугам и Протоколом о присоединении (Закон РК № 356-V). Первый в корпусе акт, чья единица деления — СТРОКА ТАБЛИЦЫ: заголовок строки стоит на той же строке байтов, что и содержимое двух других колонок, и мера §33.1 по статьям к нему неприменима — учёт ведётся явным списком строк, UNEXPLAINED 0. 96 сценариев, differential байтовый, цели §270 8/8 HELD на 61 мире при падающей канарейке. Цель нашла асимметрию Перечня: строка страхового посредничества допускает прямые филиалы через пять лет и не оговаривает ни одного условия. Политика §86 прочитана из текста («period starting FROM THE DATE of accession» → same_day): при умолчании next_day окно филиалов открывалось бы на сутки позже, и семь сцен краснели именно так. Мост к главе 4 kz/banks собран без импорта — у соседа публичны пять символов, и нужных среди них нет; сверка семи условий статьи 15 с Перечнем дала одно соответствие a fortiori (10 млрд против оговорённых 20) и пять находок транспозиции, ответ о которых раздваивается прочтением оборота «such as follows».

  • imf-articles-of-agreement: статья VIII Статей соглашения МВФ с переходным режимом статьи XIV (04.09.2026). Первый пакет группы imf: английский подлинник в редакции семи поправок, охват — шесть статей из тридцати одной (VIII разд. 1–7, XIV разд. 1–3, XXX(d), VI разд. 1–3, VII разд. 3–4, I), мера §33.1 EXECUTABLE 6 из 6 при UNEXPLAINED 0. 103 сценария, KZ-differential байтовый на 103 вызовах, цели §270 6/6 HELD на 61 мире при двух падающих канарейках. Пакет заведён ради одного противопоставления, которое инструмент делает видимым: в ОДНОМ договоре перечень ст. XXX(d) объявлен словами «includes, WITHOUT LIMITATION» — то есть открыт, и спор о его границе выражен группой прочтений §155 с политикой any_of, — а перечень изъятий ст. VIII разд. 4(b) закрыт формулой «shall not apply WHEN:» и выражен замыканием §70, дающим отрицания для строгого тела обязанности выкупа. Осевой спор ст. VIII разд. 2(a) против ст. XIV разд. 2 разрешён приоритетом §115 с наблюдённым конфликтом, а не порядком чтения. Форма заголовка «Article VIII: General Obligations of Members» развела две меры §33.1 МОЛЧА (act_split находит 31 заголовок, ворота закрепления — ноль); внутри пакета обойдено irregular_headings поверх en_article, конвенции «римский номер с двоеточием» в корпусе по-прежнему нет. Извлекатель свой: общий ломает строку по переносам PDF, и три перекрёстные ссылки становятся ложными заголовками статей.

  • kz-microfinance: Закон «О микрофинансовой деятельности» № 56-V формализован целиком (04.09.2026). 58 статей в обеих аутентичных редакциях «Әділет»; мера §33.1 — EXECUTABLE 53 из 58 при UNEXPLAINED 0 (пять границ объявлены с причиной, проверенной по тексту). 344 сценария, KZ-differential байтовый на 345 вызовах, цели §270 6/6 HELD на 313 мирах при падающей канарейке, парный якорь §194 без долга. Опечатку казахской публикации (заголовки 29-8, 29-12 и 29-13 без слова «бап») поймал второй независимый счёт: русская сторона 58 заголовков, казахская 55; байты не правятся, факт объявлен extra_unit, irregular_headings и закрытым списком фетчера. Исполнением найдены три границы шаговых термов, которые lawc check пропускал молча: add_calendar_period не берёт calendar_day при политике с month_end и не шагает назад, hours_between слеп ко всякому порогу короче часа. Два наблюдённых конфликта §116 давали BOTH и закрыты приоритетами.

  • eaeu-treaty-2014: раздел XVI и Протокол по финансовым услугам (04.09.2026). Договор о ЕАЭС расширен с адресуемости до норм: статья 70, переходные положения статьи 103 и приложение № 17 целиком (37 пунктов и оба его собственных приложения). Разрезано второе приложение публикации приложений — 39 фрагментов с локаторами annex/17/point/N; всего 157 фрагментов. Глубина §33.1 по телу Договора — EXECUTABLE 2 из 118 при UNEXPLAINED 0; мера по документу приложений НЕ снимается, и это граница с причиной (конвенции деления «ПРИЛОЖЕНИЕ № N» среди объявленных нет). 89 правил, 38 обязанностей §134, одиннадцать замыканий §70, один канал суждения §47.3. 69 сценариев четырёх семейств, differential байтовый на 70 вызовах, цели §270 — 6/6 HELD на 49 мирах при падающей канарейке. Семейство eaeu_banks_bridge задаёт один вопрос Протоколу и национальному закону и записывает расхождение редакций: закреплённая редакция 2014 года сохраняет за Казахстаном изъятие «открытие филиалов банков-нерезидентов запрещается», а действующий Закон 258-VIII даёт разрешительный порядок. Восемнадцать приоритетов §116 сняты по измерению: дефитер §107.3 поражает голову и без них, и check_proof_analytics показывал все восемнадцать ни разу не наблюдёнными.

  • kz-social-standards: Закон о минимальных социальных стандартах вместе с Правилами расчёта прожиточного минимума (04.09.2026). Первый пакет корпуса с ДВУМЯ источниками, связанными поручением: пункт 2 статьи 17 Закона № 314-V поручает уполномоченным органам утвердить порядок расчёта, и без совместного приказа № 623/585 величина прожиточного минимума названа, но не вычислима. Глубина §33.1 — EXECUTABLE 38 из 40 при SOURCE_ONLY 0; две исключённые статьи объявлены границей с причиной. 62 сценария, differential байтовый на 62 вызовах, три цели §270 HELD при падающей канарейке. Обе временны́е оси работают разом: окно effective по 1 января 2026 года между двумя законами о республиканском бюджете и датированный параметр §87 (возрастные границы женских групп, сдвигающиеся с 2019 по 2027 год). Движок шаблона pinning научен единице, оканчивающейся кавычкой: заголовок исключённой статьи 13 в text block §17 не выразим как есть — лексер закрывает блок на три байта раньше, — и граница сдвигается на один байт вправо; единица без перевода строки за ней теперь громкий отказ. Существующие блоки корпуса байтово те же.

  • iso-13616-iban: структура IBAN поверх свёртки ISO/IEC 7064 (04.09.2026). Второй акт линии стандартов идентификаторов и ПЕРВЫЙ пакет корпуса, чьи правила пишут ГОЛОВАМИ в отношения импортированного пакета: перестановку §194 ((pos + n - 4) mod n, одним выражением с переменным модулем) он вычисляет над позициями номера сам и подаёт результат свёртке MOD 97-10 iso.check_characters, которая до этого принимала позиции уже переставленными и объявляла перестановку СВОЕЙ ГРАНИЦЕЙ. Контрольной арифметики в новом пакете нет ни строки; сосед открыл pub ровно одиннадцать читаемых символов, его differential остался байтовым. Реестр форматов по 77 странам — A3-таблица с двумя Text-колонками (буквы кода страны читаются прямо из начальных позиций номера), total: false: страна вне Release 87 даёт NoDecision, а не отказ, и обе ветви длины при этом молчат. Второй независимый счёт длины при порождении таблицы (сумма шаблона структуры против поля длины, все 77 стран) нашёл ТРИ ОПЕЧАТКИ самого реестра — 18!n, 25!, 24!n/28!n в полях длины у CR, EG и SV; прочтение записано закрытым списком с сырыми байтами, молчаливой нормализации нет. 16 сценариев, differential 76 вызовов, цели §270 5/5 HELD на 13 мирах при FAILED канарейке (спрашиваются у СЛИНКОВАННОЙ программы — в несклеенном CLIR цель о диапазоне разрядов даёт VACUOUS, измерено), разметка §218 30/0 и 110/0, doctor — пробелов нет. Измеренная граница языка: entity X : pkg.name::Base допущена spec/grammar.ebnf (строки 251-252, 326, 1088) и отвергается парсером (LDC-E0201 на точке внешнего имени) — кандидат в errata; до неё стоит псевдоним типа, и потеря различия названа в package.law.

  • Ревью пилота нашло перенос чужих годов и четыре дефекта своей же оснастки (04.09.2026). Мосты в законах о бюджете были написаны по переменной году (when kz.corpus.budget_code::mrp(year, amount)), и потому закон 2026 года начал утверждать показатели 2025 года, а закон 2025 — показателей 2026: проба на живом мире дала TRUE_ONLY там, где право молчит. Регрессия этого не видела — все её сценарии спрашивают свой год. Мосты ограничены годом своего закона. Там же починены: inline-таблица в [dependencies] роняла весь манифест (LDC-E1109) вместо того, чтобы быть пропущенной; сборка мира молчала о ДВУХ сборках одной версии пакета (теперь LDC-E1112 называет и этот случай); список экспортируемых видов в воротах разошёлся с резолвером вопреки собственному комментарию; погашенный долг манифеста оставлял строку храповика, и возврат долга был бы молчаливым. Реестр диагностических кодов перегенерирован, три юнит-теста на новые правила.

  • DECISION-0114 исполнен: производительность после хэндлов (04.09.2026). Отложенная сверка programHash в пакетных хостах (CPU семейства 1,31×), поле externalSnapshots в конверте ABI и сертификаты §180 на хэндле (17,8–22,2 → 8,3–10,0 с), шарды семейств как единица параллелизма при семейной единице учёта (критический путь 185 → 21 с), индексы голов §230 и производные строгого слоя в компиляции у обеих реализаций (1,04–1,11×). Трое новых ворот с канарейками: check_deferred_verification, check_shard_coordinator, случай снимка §47.2 в check_ffi_differential. Байты CLIR, голдены и errata не тронуты; differential зелен после каждого шага. Темпоральные индексы §233 отменены замером (окно effective у 2 % правил, и оно уже отсекается при компиляции); focused_truth отложен — профиль называет представление Value, а не объём вывода.

  • Закон РК «О кредитных бюро и формировании кредитных историй в Республике Казахстан» формализован целиком (kz-credit-bureau, 04.09.2026). N 573 от 06.07.2004 (Z040000573_), 38 статей действующей редакции ru: EXECUTABLE 38, ANCHORED 0, SOURCE_ONLY 0, UNEXPLAINED 0. 108 сценариев, KZ-differential байтовый на 109 вызовах, цели §270 — три HELD на 98 мирах при падающей канарейке с пятью контрпримерами. Тридцать четыре замыкания §70 (категории поставщиков и получателей, компетенция органа, виды деятельности, основания отказа, приостановления и лишения, состав информации по семи видам поставщика, условия двух договоров, цели использования), двадцать один приоритет §116 и семнадцать сроков — от часа режима реального времени (hours_between §84.1) до десяти лет хранения согласия. Участник системы — CivilParticipant хаба лиц ГК (DECISION-0107), а роль (бюро, поставщик, получатель, субъект) — предикат: банк по статье 18 и по статье 20 есть одно лицо в двух качествах.

    Четыре находки, каждую нашёл инструмент, а не чтение. Сценарии нашли два правила, не срабатывавших НИКОГДА при чистом lawc check: запрет пункта 3 статьи 7 и несоблюдение требований статьи 8 читали классическое отрицание предикатов, у которых негативного продюсера не было вовсе. Цель §270 нашла непрочитанный круг действия подпункта 13-3 статьи 1 — негативная информация выводилась о любом лице с просрочкой свыше девяноста дней, а изъятие статьи 25 пункта 4 снимает требование согласия именно для неё. Запрос позиций нашёл, что датированный рубеж 01.01.2027 стоял окном исполнения обязанности, а не применимостью правила.

    Политика §86 разведена на две ПО ТЕКСТУ АКТА: сроки от ДАТЫ считаются same_day, единственный срок «со дня» (ст. 26 п. 7) — next_day по статье 14 Закона «О правовых актах»; ответы отличаются ровно на сутки. Две границы самого акта названы строками: отзыва согласия акт не знает вовсе, а редакция подпункта 4) пункта 4 статьи 21 с 01.01.2027 в закреплённых байтах отсутствует.

  • Закон РК «Об обязательном гарантировании депозитов, размещенных в банках второго уровня» формализован целиком (kz-deposit-guarantee, 04.09.2026). № 169-III от 07.07.2006 (Z060000169_), 28 статей действующей редакции ru: EXECUTABLE 27, UNEXPLAINED 0, SOURCE_ONLY 1 — статья 8, исключённая Законом РК от 05.07.2012 № 30-V, с записанной причиной. 115 сценариев (из них 14 запросов позиций §140), KZ-differential байтовый на 116 вызовах, цели §270 — две HELD при падающей канарейке с двумя контрпримерами из текста. Восемь датированных параметров A3 несут потолки возмещения (20/10/5 млн ₸ и совокупный 20 млн), предел и кратность взносов, доли резерва; покрытие открыто датой состояния закреплённой редакции, а не датой введения акта в действие — дат отдельных сумм в закреплённых байтах нет, они в аппарате портала, и ниже рубежа право отвечает MISSING_PARAMETER_VALUE, а не нулём. Пять замкнутых перечней §70, семнадцать обязанностей и одна свобода нормами §140, депозитор — физическое лицо Гражданского кодекса (хаб лиц DECISION-0107). Закон о банках сознательно НЕ импортирован: лишение лицензии настоящий Закон не выводит, а потребляет.

    Три находки, каждую нашёл инструмент, а не чтение. Линт нашёл 46 меток с деонтикой при нуле деонтических голов — весь акт был сплющен в признание, и нарушение срока не было наблюдаемо; заведены нормы §140 с окнами. Аналитика proof-графов (DECISION-0108) нашла два приоритета §116 в состоянии UNSEEN при ЗЕЛЁНЫХ сценариях обеих ветвей: §116 разрешает столкновение полярностей, а две разные СУММЫ одного отношения истинны разом (замер: база 4 000 000 и база 2 500 000 одновременно TRUE_ONLY, key головы этого не меняет), — оба изъятия переписаны в форму гарда, и общее правило при зачёте теперь молчит. Статический аудит нашёл две посылки в один конец: вычисленные пределы взносов никто не читал, и превышение предела не было наблюдаемо.

    Названы три границы (corpus/drafts/deposit-guarantee/STATUS.md), главная — §86: ОДНО дело не вправе исполнить оба семейства сроков, потому что month_end обязателен календарной единице и запрещён дневной (обе стороны проверены отказом DEADLINE_POLICY_INVALID), а deadlinePolicy у контекста одна. Акт несёт сроки обоих семейств от одного события — с даты лишения лицензии текут и рабочие дни, и год, — и дело о пропуске годичного срока после лишения лицензии юридически обычно, а машинно невыразимо одним контекстом. Закрывается errata (политика на уровне единицы), не правкой пакета.

  • Закон РК «О коллекторской деятельности» формализован целиком (kz-collectors, 04.09.2026). № 62-VI от 06.05.2017 (Z1700000062), 33 статьи в обеих аутентичных редакциях «Әділет»: EXECUTABLE 33 из 33, UNEXPLAINED 0, SOURCE_ONLY 0, учёт статей 33 из 33 в каждой редакции, паритет якорей §194 — непарных 0. 79 сценариев, KZ-differential байтовый, цели §270 5/5 HELD при падающей канарейке. Тринадцать замкнутых перечней §70; окно взаимодействия 8.00–21.00 взято сравнением часа в гарде, будний день — weekday_of (E-0091) плюс факт о выходном или праздничном дне, частота контактов — многосвязным comprehension по семи календарным дням. Названы две границы: forbearance-норма §130 VIOLATED в Core 0.1 не даёт никогда (§124.3 откладывает contra-action detection до событийной модели §79) — нарушение выражено поддерживаемой обязанностью §137; моста к перечню праздников нет, потому что предикат kz-prazdniki ключуется парой целых, а терма извлечения месяца и числа из Date в закрытом списке §84 не существует.

  • TypeScript SDK: четыре пакета, хэндлы в wasm, обе рукописные копии ABI сняты (DECISION-0113, 04.09.2026). @arxo/law-engine (wasm, палитра §225, хэндлы, воркер-адаптер, engineInfo), @arxo/law-types (17 файлов типов из нормативных схем + машинный реестр 157 кодов LDC-Exxxx тремя классами), @arxo/law-client (типизированный MCP-клиент из таблицы сервера и клиент реестра; Ajv живёт только здесь), @arxo/law-forms (4 модуля проекций из 10, 25 экспортов, 27 фикстур). Хэндловый слой переехал из law-ffi в law-wasm::handles — поправка к DECISION-0057 §2: довод «нативно-специфичное» был про поставку, а цена разбора IR (0,5–2 с на дело на пакете 5,7 МБ) у браузера та же. law-ffi остался единицей сборки без собственного кода: символы приезжают линковкой, 10 в nm -gU. Рабочий стол и лендинг перестали держать свои реализации ABI. Измерено: 311/311 векторов через хэндл байтово равны lawc eval и one-shot в обоих хостах; workspace 413 тестов; 139 ворот в конвейере. Четыре дефекта нашли пробы, а не рассуждение: onmessage в модульном воркере (strict mode — ReferenceError), instantiateStreaming без application/wasm, протухший артефакт wasm рабочего стола, вакуумная фикстура emitLawtest/refusals.

  • Заморожена law.core/0.2 (04.09.2026). Полностью реализованы пункты 1–11 DECISION-0111; заморожены 483 корпусных CLIR, 68 lock-файлов и 26 наборов 0.2-векторов, а 0.1-голдены сохранены без перезаписи. Добавлен постоянный gate границы версии и выпускной пакет release/0.2; digest-ID анонимного факта имеет форму assert-h<sha256>, синтаксически отличимую от запрещённого позиционного assert-N.

  • DECISION-0111 §2.11 — именованный срок term (04.09.2026). Новая контекстная декларация понижается без собственного CLIR-узла в стабильные D/S/X и direct priority; единый add_legal_term(Date, Quantity) исполняет runtime-unit, а производные метки используют фиксированные нейтральные префиксы без идентификаторов. Четыре вектора, ручная развёртка и независимый parser/lowering lawref держат байтовое равенство; Lezer и Constructor поддерживают ту же поверхность. Структурные diagnostics получили честный JSON Pointer вместо фиктивного нулевого source span.

  • Корпусные scenario ratchets синхронизированы (04.09.2026). Полный KZ- прогон монотонно затянул 88 выросших семейств (22 541 → 25 250 сценариев, понижений нет), а новое ru_constitution_continuity прошло 44/44 и внесено точными ID в manifest. Статические ворота видят 25 556 сценариев в 468 семействах шести раннеров без расхождений.

  • FNMA/Truv goldens догнали закреплённый CLIR (04.09.2026). В шести manifest.json обновлены только semantic hashes основного FNMA-пакета и deadline-спутника; 30 тестов адаптера снова держат байтовый round-trip, профиль, why-not и границу valid-through.

  • Реестры рабочей версии и CLIR-узлов 0.2 синхронизированы (04.09.2026). До заморозки feature-registry.schema.json разрешала точное имя prerelease 0.2-draft; deadline_policy и зарезервированный stage получили явные причины отсутствия в текущем русском verbalizer pack. Selftest снова различает сознательно непокрытый вид и молча потерянное покрытие.

  • Совместимость внутреннего EvaluationRequest с CLIR 0.1 (04.09.2026). Builder typed-запроса по умолчанию наследует semanticVersion из IR, а явная версия имеет приоритет. Старый корпус больше не попадает случайно под запрет inline deadlinePolicy из 0.2; отдельные selftest держат обе ветви.

  • Завершена фаза 0 DECISION-0084 для заявок ГЭСВ (04.09.2026). Два набора закреплённых source-байтов перемещены из ложных пакетов corpus/laws/kz/gesv-* к BLOCKED-заявкам corpus/drafts/kz-gesv-*; fetch_wave_a_missing_texts.py --check следует этому размещению и сохраняет прежние проверки SHA-256 и воспроизводимости извлечения.

  • Совместимость репозиторного Python-среза с 3.11 (04.09.2026). Формирование диапазона страниц в extract_pdf_layout_text.py и подсчёт строк в fetch_pacioli_computis_text.py вынесли литералы с escape-последовательностью из выражений f-string: текст вывода прежний, а AST-ворота снова могут разобрать весь Python-срез на поддерживаемом Python 3.11.

  • Полнота source-sync конвейера (04.09.2026). Девять генераторов с отказным --check добавлены в run_all.sh; пять write-only генераторов явно внесены в SYNC_OUT, а протухшее исключение GPK удалено.

  • DECISION-0111 §2.10 — зарезервированный stage (04.09.2026). Пустая именованная декларация понижается в schema-valid узел CLIR со статусом reserved; Lezer и карта возможностей знают форму. До появления локальной стратификации 0.3 оба evaluator-а тотально и побайтно одинаково отвечают fatal NON_EXECUTABLE_STAGE, не исполняя соседние узлы.

  • DECISION-0111 §2.8–§2.9 — лексические metadata-блоки и именованная DeadlinePolicy (04.09.2026). Синтаксис 0.2 поддерживает общие binder-ы, @source { … } и label … { … } с точной лексической областью; LDC-W1301 и невозрастающий unanchored делают пробел метки/якоря наблюдаемым. Политика срока стала именованным узлом CLIR и разрешаемой ссылкой контекста; inline и неизвестная ссылка отклоняются в 0.2, а оба evaluator-а исполняют один закреплённый документ политики.

  • DECISION-0111 §2.6–§2.7 — две идентичности и стабильные анонимные факты (04.09.2026). theoryHash отделён от provenance-aware artifactHash и оба закреплены CLIR/evaluation manifest; перенос якоря меняет только артефакт, перевод метки — ни один ключ. Анонимные assertions 0.2 получают digest-ID факта+provenance, точный дубль отклоняется LDC-E1331; lowering 0.1 сохраняет позиционные assert-N. Долгоживущие FFI handle и lawc eval-serve кэшируют обе идентичности 0.2 наряду с legacy programHash, не пересчитывая большие IR на каждом запросе.

  • DECISION-0111 §2.5 — точный proof приоритета и тотальный outcome (04.09.2026). defeat в 0.2 предъявляет outcome, цепочку объявленных priorityRule и grounded-свидетелей условных рёбер; schema-canary и Lean checker отвергают путь, который нельзя разрешить. Blocking issue больше не соседствует с COMPUTED; проекция 0.1 сохраняет прежние байты.

  • DECISION-0111 §2.3–§2.4 — тотальный резолвер и единый compiler pipeline (04.09.2026). A3-параметры входят в symbol table до lowering, висячие const_ref и чужие enum-members без квалификации отвергаются; check и lower используют один проход и обязаны дать одно множество кодов на всех 466 пакетах корпуса. Wiring различает нормативную точку gate и её исторический модуль реализации, не запуская один обход дважды.

  • DECISION-0111 §2.2 — единый закрытый EvaluationRequest (04.09.2026). evaluate(request) стал единственной сигнатурой во всех движках и хостах; case.options — единственное место семантических options, а calendar, external snapshots и receipt отделены как transport. Нормативная схема, сгенерированный тип Constructor и три request-вектора удерживают отказ на старой форме/неизвестном поле и выбранное прочтение в манифесте.

  • DECISION-0111 §2.1 — двусторонний completion barrier (04.09.2026). LDC-E4112 отклоняет дефитер без обычного defeasible-кандидата той же головы и полярности; оба evaluator-а зеркально отвергают вручную собранный CLIR кодом NON_EXECUTABLE_STRATUM_BARRIER. Четыре corpus-пакета освобождены от мёртвых дефитеров, PROC-29 закрепляет явный негатив.

  • Семь линтов LawQL из записанных ловушек и baseline с диспозициями (DECISION-0108, стадия A, 03.09.2026). aggregate-head-without-key, anchored-relation-without-executable, defeater-collision-without-direct-priority, same-side-priority-review, interpretation-without-group, dangling-const-ref, strict-reader-of-foreign-defeasible-head; ql-baseline.json — строка debt/accepted/false_positive с причиной на каждую находку, автоматической записи нет; check_ql_lints.py читает edges/fields/imports/literals и dogfood-ит агрегатные головы против check_aggregate_keys.

  • Аналитика над proof-графами регрессии (DECISION-0108, стадия B, 03.09.2026). check_proof_analytics.py снимает с накопителя report_norm_graph пять осей — приоритеты, прочтения, дефитеры, рубежи дат §87/редакций, непрочитанные головы — как монотонные состояния по точным id с храповиком corpus/ratchets/proof-analytics-ratchet.json; чтение proof-узлов — одной библиотекой verify/ci/lib/proof_evidence.py на все ворота; ночное окно N4b, канарейка в PR-гейте; пропуски .lawtest коллектором названы (report_norm_graph.SKIPPED) и красны вне DECLARED_OUT.

  • Первый содержательный мост на хабе лиц: ОСМС читает Трудовой кодекс (03.09.2026, ночь). Лицо и работодатель ОСМС стали алиасами лица и участника ГК (сестринский подтип в параметр не подставился бы), и Закон об ОСМС читает трудовой договор и месячную заработную плату Трудового кодекса: employed_by выводится из contract_binds (ст. 27), employment_income за расчётный месяц — из monthly_wage (ст. 29 п. 1). Оклад 300 000 KZT по договору даёт отчисления работодателя 9 000 KZT без единого факта ОСМС о выплате; без договора отчислений нет. Иные выплаты дело подаёт как прежде. Приёмка — регрессия ОСМС и налогового кодекса (читает ОСМС), differential; строка label-ratchet ОСМС ослаблена на два объявления (алиасы без меток).

  • Хаб лиц принят КоАП, УК и ОСМС (03.09.2026, ночь). Физическое лицо КоАП и УК — подтип лица ГК, юридическое лицо КоАП — подтип юрлица ГК, лицо и работодатель ОСМС — подтипы лица и участника ГК. Одноуровневые подтипы без мостов и без потери меток; lawc check чист у пакетов с зависимыми, регрессия и differential семейств — числа в STATUS.

  • Хаб лиц принят Социальным и Налоговым кодексами (03.09.2026, ночь). Физическое лицо Социального кодекса — подтип лица ГК (его читают налоговый кодекс и выслуга), налогоплательщик — подтип участника ГК (гражданин или организация). Одноуровневые подтипы без мостов и без потери меток; lawc check чист у трёх пакетов с зависимыми, регрессия и differential семейств — числа в STATUS.

  • Хаб лиц принят ещё четырьмя пакетами (03.09.2026, ночь). Одноуровневые подтипы лиц ГК без потери меток и без мостов: Закон о госзакупках — поставщик и заказчик как участники ГК (Правила закупок читают их алиасами как прежде); Трудовой кодекс — физическое лицо как лицо ГК, работник как его подтип, работодатель как участник; персональные данные — участник отношений по обработке как участник ГК (субъект и оператор остаются его подтипами); страхование — участник страховых отношений как участник ГК. lawc check чист у шести пакетов с зависимыми; регрессия и differential семи семейств — числа в STATUS.

  • Хаб лиц принят браком, акционерными обществами и банками (03.09.2026). Одноуровневые подтипы лиц ГК, без мостов и без потери меток: лицо закона о браке — Person : CivilPerson (супруг, родитель, ребёнок — граждане ГК); лицо закона об АО — Person : CivilParticipant (акционером бывает и организация), общество остаётся его подтипом; у закона о банках лицо — участник ГК, банк и организация с банковскими операциями — юридические лица ГК. Приёмка — lawc check чист у трёх, регрессия и differential семейств брака (с читающими его ДУМК и жеті ата), АО и банков — числа в STATUS.

  • Хаб лиц принят исполнительным производством и банкротством граждан; мост ст. 74 отложен до правки компилятора (03.09.2026). Взыскатель, должник и «лицо» исполнительного производства — алиасы CivilParticipant ГК (роль несёт отношение), должник-гражданин закона о банкротстве — pub entity Dolzhnik : CivilPerson, день возбуждения дела (ст. 14) — pub. Мост «возбуждено дело о банкротстве должника → реализация арестованного имущества приостанавливается» понижается и исполняется верно (оракул, 218/218 с парой сцен), но lawc check не ведёт цепь подтипов через границу пакета (должник банкротства → лицо ГК → участник ГК) и даёт LDC-E2104 — check и lower расходятся. Квалификация: дефект lawc (law-hir, entity_extends над Foreign без чтения base импортированного CLIR); мост снят до вектора и правки, находка записана в DECISION-0107 §6. Оба пакета check чисты, 216/216, разметка зелёная (строка исполнительного производства ослаблена на три объявления — алиасы без меток).

  • Хаб лиц в Гражданском кодексе (DECISION-0107, решение владельца 03.09.2026). CivilParticipant, Person, LegalEntity, PublicEntity ГК стали pub; отраслевой акт объявляет своего субъекта ПОДТИПОМ лица ГК через алиас (type CivilPerson = kz.corpus.civilcode::Person; pub entity Serviceman : Person), и один URN остаётся одним лицом во всех пакетах (identity §36) — без алиасов сущностей и фактов тождества, которыми начинались пять связей этого дня. Пробы: подтип подставляется в предикат надтипа (check OK, TRUE_ONLY), несвязанные типы компилятор отвергает (LDC-E2104), надтип из чужого пакета берётся через алиас. Пилот: Закон о воинской службе — Person : CivilPerson, Serviceman : Person, факт serviceman_identity снят; Правила прохождения службы выводят «не годен с исключением с учёта» из fitness_category(serviceman, FIT_E) напрямую. lawc check чист у четырёх пакетов, разметка и формы зелёные; регрессия и differential одиннадцати зависимых семейств — числа в STATUS.

  • Связь по карте № 4: заключение ВВЭ доходит до увольнения через тождество лица в Законе (03.09.2026). У Закона «О воинской службе» два субъекта — гражданин (Person) и военнослужащий (Serviceman) — без единого отношения тождества, поэтому категория годности ВВЭ (о лице) не могла дойти до увольнения по здоровью (о военнослужащем) ни в одном пакете. Выбран вариант «тождество в Законе»: pub relation serviceman_identity(serviceman, person) — факт документа ВВК; Person Закона — pub, освидетельствуемый Правил ВВЭ — его алиас (511 упоминаний не тронуты); Правила прохождения службы импортируют ВВЭ и выводят unfit_with_deregistration из категории «Е» (fitness_category(person, FIT_E)) и тождества; «Д» ведёт в запас, не в отставку. Попутно измерен барьер §111 через границу пакета: строгий мост над поражаемым выводом Закона (основания статьи 26 поражаемы) уходил в поздний строгий слой (DECISION-0088), и поражаемое правило запаса с not_known его не видело при работающей отставке — мост и четыре его читателя стали поражаемыми, lawc check держит это LDC-E4103. Приёмка: KZ-VSP-154V («Е» → отставка; «Д» → запас, не отставка), 76/76 в трёх семействах; строка label-ratchet ВВЭ ослаблена на одно объявление (алиас без метки).

  • WP-39 доведён до обучения (DECISION-0106 черновик, 03.09.2026): corpus/dataset/export.py — JSONL по задачам стенда, по умолчанию право Казахстана на русском (решение владельца), разделение по замороженному срезу, проекция скелета под бюджет; source-licenses.json — статус источника в паре (WP-39 §(e)); augment.py — синтетика §(c) с верификацией lawc lower против эталона через ту же вставку; train/ — награда RLVR, SFT и GRPO на TRL, вывод для стенда, рецепт. Срез перезаморожен (1 207 → 1 857 пар) — 37 норм утекли по §209 после роста корпуса. test_export.py — шаг 4 run_all.sh. Полный экспорт: train 11 011 / held-out 1 100 строк, синтетика 13 552. Попутно починен красный baseline.py --selftest --quick: anchor_spans поглощал соседние однострочники @source(X) rule …, а скелет со ссылкой на вырезанное правило теперь сверяется структурно. Первый GPU-замер (A100, 30 задач): Qwen3-14B 37 % / 0,14 → LoRA на 450 строках 60 % / 0,22 (gate_clean / iso_f1); отчёты в train/reports/. Ночной прогон 04.09 (1 707 строк × 2 эпохи, 5 ч на A100): на 60 задачах 87 % / 0,425 против 48 % / 0,25 у базы — уровень Claude с промптингом.

  • Ключ §45.1 у агрегатных голов: 82 объявления в 32 пакетах (DECISION-0105, 03.09.2026). Отношение, чьё значение выводится через count(collect …), объявляет key(…) по неагрегатным аргументам. Без него сводное число, поданное делом, уживалось с пересчитанным: истинны оба, issue нет (измерено на aba-skill-vocabulary — 20 и 0 одновременно TRUE_ONLY). Найдено отчётом модели через law_report. Исключены fard в faraid-shares и sa-personal-status — доля функциональна лишь внутри прочтения any_of §152. Держат: регрессия 583 сценария, differential 601 вызов байтово, check_lower, 141 сцена .lawtest.

  • Ворота на ключ у агрегатных голов — verify/ci/gates/silence/check_aggregate_keys.py (03.09.2026): голова без ключа и без записи — отказ, устаревшая запись (предикат обрёл ключ или исчез) — тоже. Реестр corpus/slices/aggregate-key-exemptions.json ведётся руками (exempt — норма законно многозначна, debt — пакет не собирается): функциональность не выводима из формы, и --register заглушал бы ворота не думая. Канарейка шесть проб; класс молчания вырос с пяти ворот до шести.

  • Статья 7 Закона о госзакупках разведена по подпунктам, и легли оставшиеся мосты Правил (03.09.2026). restricted выводился из одного основания — реестра недобросовестных (пп. 7); теперь restriction_ground(supplier, ART7_G1…G13) — по константе на подпункт, эмпирический факт на каждый с содержанием подпункта в метке (исключения пп. 2 и 9 вписаны в факт: строгие потребители Правил не допускают not_known, §111), restricted — при любом основании. Правила читают подмножества: п. 193 автоотклонение по девяти подпунктам (1, 3–9, 13), п. 284 невключение в перечень квалифицированных по десяти (3–11, 13); п. 206 недопуск — по любому. Приёмка: KZ-PR-LAW-03 (коррупционное преступление — автоотклонение и недопуск; приостановление деятельности — только недопуск), KZ-PR-LAW-04 (пп. 10 мешает перечню, пп. 1 для перечня не считается), 990/990 в трёх семействах, lawc check чист.

  • Связь по карте № 3: Правила госзакупок (приказ № 687) читают Закон 106-VIII (03.09.2026). Правила держали свои сущности лота и поставщика (1929 и 885 сигнатур) и брали «нарушил требования статьи 7 Закона» делом в пяти местах. Теперь type Lot/type Supplier — алиасы типов Закона, а два из пяти мостов выводятся: п. 206 пп. 2) (недопуск) — из restricted Закона и поданной заявки, п. 505 (закупка из одного источника несостоялась) — из restricted и приглашения поставщику. Три оставшихся (п. 193 автоотклонение по подпунктам 1, 3–9, 13; п. 284 перечень квалифицированных по подпунктам 3–11, 13; п. 207) намеренно не проведены: Закон пока выводит только одно основание статьи 7 — реестр недобросовестных участников, — а сами Правила говорят, что для п. 284 это основание не считается. В Законе pub у лота, поставщика и restricted. Приёмка: KZ-PR-LAW-01/02 (реестр Закона → недопуск и срыв единого источника; без записи в реестре — NEITHER), 988/988 в трёх семействах, lawc check чист; строка label-ratchet ослаблена на два объявления (алиасы без меток).

  • Судебное обжалование по статье 106 УПК: НП ВС № 3 в редакции с 01.07.2026 и правящее его НП ВС № 5 (03.09.2026). Заведён kz/complaints-106 — два инструмента Верховного Суда в одном CLIR. Глубина §33.1: у № 3 — 29 EXECUTABLE из 33 пунктов, 4 EXCLUDED, 0 UNEXPLAINED; у № 5 — 2 из 2. Регрессия 127/127, цели §270 3/3 HELD на 121 мире, три канарейки падают каждая по отдельности. Постановление № 5 закреплено ДВУМЯ редакциями: подписанный скан Верховного Суда (PINNED_OFFICIAL_BYTES, текстовый слой негоден — распознавание приняло кириллицу за латиницу) и текст ИПС «Әділет» как носитель фрагментов; связь — align со статусом reviewed_against_scan, сверка 99,5 % слов, расхождений по существу нет. Цель §270 нашла девятое основание возвращения жалобы (пункт 7 выводил возвращение мимо перечня пунктов 11 и 24 при закрытом и целом замыкании §70); ворота мёртвых символов нашли ещё две нормы — трёхсуточный срок исполнения требования судьи и различие «вручается / направляется» пункта 26. Спорная точка отсчёта «того же срока» пункта 6 объявлена двумя прочтениями §152 в группе §155 any_of — выбор за человеком.

  • Связь по карте № 2: конституционный закон о Правительстве читает Конституцию (03.09.2026). Разрез труда «принцип у Конституции, механика у закона» держался на собственной сущности Правительства в законе, и identity §36 делала два органа при одном URN: вывод статьи 69 (сложение полномочий перед новым Курултаем) в механику статьи 4 закона не входил, закон читал сложение делом. Теперь type Government = kz.constitution.government:: Government, powers_relinquished — институциональный с мостом из government_powers_relinquished Конституции; в конституционном пакете pub получили Правительство, Курултай и три предиката статьи 69. kz.constitution.government вписан в PREBUILT_PACKAGES генератора рядом с rights и court. Приёмка: KZ-GOV-CON-01 — избран новый Курултай (факт Конституции) → полномочия члена прекращены и обязанности продолжаются (механика закона), без избрания — NEITHER; 9/9, lawc check чист; строка label-ratchet ослаблена на одно объявление (алиас без метки).

  • verify/ci/tools/link_map.py — карта близости пакетов против графа импортов, и первая связь «закон ↔ его правила» по ней (03.09.2026). Инструмент читает лексический индекс слоя обнаружения (детерминированный, без внешних зависимостей) и даёт три проекции: центроиды пакетов (находит пересечение предмета: воинская служба ↔ правила прохождения 0,80, Конституция о Правительстве ↔ закон о Правительстве 0,76, семейство закупок 0,52–0,74; НЕ находит хабовые связи — у реальных рёбер импорта косинус 0,04–0,4; шаблонные метки стаб-слоя отмечает stub-like), метки, называющие чужой акт без импорта (ФНО → Налоговый кодекс ×52, правила закупок → закон о закупках ×44, Бюджетный кодекс → закон о бюджете ×22), и ближайшие предикаты других пакетов. По первой строке карты проведена связь: Правила прохождения воинской службы (Указ № 124) читают Закон «О воинской службе» — военнослужащий стал ОДНИМ лицом алиасом типа (type Serviceman = kz.corpus.conscription::Serviceman; до этого identity §36 делала его двумя лицами при одном URN), а срок службы, основание увольнения, предельный возраст и отпуск выводятся статьями 24, 26, 25 и 46 Закона вместо «моста делом». DischargeGround Закона стал pub. Приёмка: пара по виду службы (по призыву 12 месяцев истекли, офицеру по призыву 24 — нет), 46/46 в двух семействах, differential 185/185 байтово, lawc check чист; строка label-ratchet ослаблена на одно объявление осознанно — у алиаса метки нет по грамматике.

  • Четвёртая партия связи МРП ← бюджет: Социальный кодекс (03.09.2026). Девять «применимых МРП» пакета (адресная помощь, ст. 211, 213, 242, 256, специальное госпособие, пособия многодетным, награждённым матерям и на ребёнка) были эмпирическими отношениями на носителя: величина равнялась тому, что подаст дело, и у ст. 242 и 256 сцены подавали 1 000 тенге, а выплата на погребение «35 МРП» проверялась как 35 000. Бюджетные акты пакет импортировал давно ради МЗП ст. 244, но прогон семейства их не линковал. Теперь двадцать правил-мостов (носитель — из эмпирического факта, открывающего норму; год — окнами effective), прогон линкует бюджет, сцены ст. 242/256 пересчитаны от 4 325 (151 375, 158 295, 406 550; долг 26 000 > 6 МРП), пара по оси года на пособии на рождение (149 416 против 164 350). Регрессия соцкодекса и двух зависимых семейств (подоходный налог, выслуга) 1775/1775.

  • Третья партия связи МРП ← бюджет: банкротство граждан и бухучёт (03.09.2026). Оба пакета держали МРП ЭМПИРИЧЕСКИМ ЦЕЛЫМ («на дату заявления», «на дату платежа», «на 1 января»), а суммы обязательств, платежей и дохода — целыми тенге: величина равнялась тому, что подаст дело, и сцены подавали 3 932 на дату права 2026 года. Теперь оба импортируют kz.corpus.budget и kz.corpus.budget2025, суммы стали Money, выбор года записан окнами effective по тексту (ст. 1 пп. 11 и ст. 5 Закона о банкротстве граждан; ст. 2 п. 2 Закона о бухучёте, у которого МРП перестал быть «на субъекта» — величина одна на год). Приёмка: 173/173 в двух семействах, пары по оси даты (платёж 3 933 тенге — погашение в 2025 году и нет в 2026; доход 135 000 × 4 325 освобождает в 2026 и превышает предел 2025 года), differential байтовый.

  • Вторая партия связи МРП ← бюджет: упрощённое урегулирование, Трудовой кодекс, Закон об АО (03.09.2026). Три пакета читали величину по-разному и одинаково неверно: упрощённое урегулирование держало копию A3-параметром (как КоАП до утра), ст. 122 ТК и ст. 10 Закона об АО — ЭМПИРИЧЕСКИМ отношением, то есть МРП равнялся тому, что подаст дело (сцены АО подавали 100 тенге). Теперь все три импортируют kz.corpus.budget и kz.corpus.budget2025, ось выбора названа по тексту: день выплаты (п. 3 ст. 24 Закона 446-II; «на момент выплаты» ст. 122 ТК), финансовый год (ст. 10 АО). Приёмка: 245/245 в трёх семействах, пары по оси даты (ТК: 1 081 250 против 983 000 KZT за 250 МРП; АО: минимум капитала 216 250 000 против 196 600 000 KZT), differential пяти затронутых семейств 480/480 байтово. Четыре рукописных теста урегулирования получают МРП посылкой с записанной причиной: lawc test читает один CLIR без линковки.

  • Первая межотраслевая связь современного права РК: МРП КоАП и УК читается из законов о бюджете (03.09.2026). Замер графа импортов по 225 KZ-пакетам: 82 ребра, 160 изолированных; среди ~130 актов современного права связан один кластер из 21 вокруг бюджета и конституционных прав, а КоАП и УК стояли особняком. При этом КоАП держал КОПИЮ величины МРП A3-параметром (3 932 и 4 325 тенге, переписанные из бюджетных актов руками), а УК в тенге не отвечал вовсе — штраф статьи 41 оставался числом МРП. Теперь оба пакета импортируют kz.corpus.budget и kz.corpus.budget2025, а выбор года записан окнами effective по тексту самих кодексов: статья 44 КоАП берёт показатель «на момент возбуждения дела», статья 41 УК — «на момент совершения» (приём kz.corpus.incometax). Параметр и law.lock КоАП сняты, у УК заведены applicable_mrp и fine_amount_in_tenge. Приёмка — пара сцен по оси даты у каждого кодекса (43 250 против 39 320 KZT за десять МРП по ст. 592; 86 500 против 78 640 KZT за двадцать МРП по ст. 41) и сторож молчания за пределами закреплённых лет (2024 год — NEITHER, а не подсчёт по чужому году); регрессия 212/212. Ту же копию МРП параметром держит ещё kz/uproshchennoe-uregulirovanie — не тронут.

  • Два закона РК: надзор финансового рынка (474-II) и жилищные отношения (94) (03.09.2026). Оба цитировались уже закреплёнными байтами корпуса, а по адресу было пусто. Закреплены 76 и 168 статей (нумерация не сплошная: 66 и 46 вставных, у финансового рынка номер 15-20 не занят вовсе); перечни закрыты списками, и новая редакция со вставной статьёй роняет генератор, а не проезжает. Мера §33.1: EXECUTABLE 40 и 93, UNEXPLAINED ноль у обоих; разметка §218 с нулём неразмеченного. Приёмка — 27 и 36 сценариев, differential байтовый, 2 и 3 цели §270 HELD на мирах живой регрессии, обе канарейки FAILED. Пятнадцать и двадцать шесть статей учтены EXCLUDED с основанием из сноски закреплённого html: у финансового рынка это девять отменённых и шесть статей о финансовом омбудсмане, которые вводятся с 01.01.2027 и помечены порталом «текст исключен».

Исправлено

  • E-0121 · §42/§48: lawc check ведёт цепь подтипов сущностей через границу пакета (03.09.2026). Два разных чужих имени были несовместимы по построению (E-0098), хотя lower и оба движка принимали: мост хаба лиц «должник банкротства → лицо ГК → участник ГК» давал ложный LDC-E2104. Резолвер отдаёт базы публичных сущностей (export_bases, цепь алиасов пройдена до цели), генераторы контекста кладут их ключом exportBases, компилятор (check_types_with_imports) ведёт цепь §42 по Foreign-звеньям: доказана — принять, известна целиком и не доходит — LDC-E2104, звено в пакете без предъявленных баз — непроверяемо, принимается. Три статических вектора из прозы §48; юнит-тесты law-hir 206/206, clippy чист; core differential 311/311, check_lower 8/8, cross-package и resolve зелёные. gen_kz_clir.py --imports-for <CLIR> печатает контекст для строгой проверки пакета корпуса; на исполнительном производстве строгий check чист, а отрицательный контроль без баз даёт LDC-E2104. Мост ст. 74 п. 3 (возбуждение дела о банкротстве → реализация приостанавливается) возвращён: 218/218, differential 297/297.
  • Хвост дефектов ядра (03.09.2026): E-0117…E-0120. LDC-E1330 — голое имя в позиции терма без объявления отвергается на check и lower (метаданные источника — идентификаторы, не термы); запрос-коллекция §174.1 при ошибке терма generator-а отвечает документом, а не traceback-ом (E-0118); статическая арность std-термов LDC-E2116 (E-0119); иммунитет §128 глушит запрос судье (E-0120); знак слагаемых монотонного гарда — и в поражаемом слое; LDC-E4102 называет каждый цикл. Differential 311/311.
  • E-0032 п. 3 и E-0116 (03.09.2026). Миграция голых доменных констант генератором verify/ci/tools/migrate_const_decls.py: +5 114 объявлений const в 45 пакетах, ни один статус сценария не изменился, differential байтовый; ворота check_dead_symbols — восстановлен счётчик «ассертится и не читается», правило живости константы, --canary, 1 421 ожившая строка снята из реестра. E-0116: монотонный агрегатный гард (count/sum/max против нижней границы, min против верхней над monotone(P)) остаётся строго-положительным ребром, MONOTONE_GUARD_NEGATIVE_ADDEND сторожит слагаемые; us.ofac_50 снова исполним, differential 305/305.
  • MCP: каталог называл константу именем её СУЩНОСТИ, и вопрос по этому имени молчал (03.09.2026). У la-protagoras-euathlus объявление const PROTAGORAS: Persona = entity_ref("…#Protagoras") каталог показывал константой «Protagoras» (URN значения), а само объявление — нуль-арной сигнатурой «PROTAGORAS()». law_ask merces_debetur по подсказке каталога строил const_ref на сущность (публичный сервер) либо фантомную сущность дела (после правки _collect_refs того же дня) — посылка pactum_mercedis(PROTAGORAS, EVATHLUS) не унифицировалась, ответ NEITHER без единого issue при BOTH у оракула через шов (LA-PE-02). Один критерий на три стороны (catalog._addressable_constants): перечень констант каталога, словарь коротких имён резолва и сигнатуры; объявленная константа идёт в константы под именем объявления, короткое имя сущности-значения разрешается в const_ref на объявление-владельца (_entity_term), сущность из литералов без владельца (Kurek у словаря грамматики) — в entity_ref на неё, нуль-арные отношения и функции константами больше не считаются. По корпусу (472 пакета): в 249 из сигнатур в константы перешли 9 010 объявленных констант, из перечней ушли 323 URN значений. Семантики нет (инвариант 5); контракт test_server.py +6 проверок раздела 6в-кватер, на HEAD-копии apps/mcp три из них красны.
  • MCP: календарь §85 и политика §86 доходят до норм со сроками (03.09.2026). 44 акта KZ-корпуса считают рабочие дни (add_business_days), но узла calendar_snapshot не несут: раннеры регрессии подмешивают снимок и байты ресурса руками, а через сервер такие нормы отвечали NEITHER с MISSING_CALENDAR (замер: ст. 16 банкротства граждан). Теперь, когда мир вопроса зовёт add_business_days и снимка не несёт, в него входит календарный пакет профиля (официальный календарь РК), байты ресурса первого снимка мира подаются опцией, id — в case.options.calendarSnapshot, как в делах регрессии; календарь назван в соактах ответа. Политику §86 вопрос подаёт аргументом deadlinePolicy (law_ask, позиции, аналитика) — без неё ответ несёт MISSING_POLICY, сервер её не подразумевает. Контракт: +4 проверки (15-й рабочий день в срок, 16-й — нет, без политики — код, не-объект — отказ ввода).
  • MCP-сервер не видел импортов пакета: мир вопроса теперь включает замыкание imports (03.09.2026). law_ask/positions/факты склеивали мир только с пакетами, откуда пришли факты; норма, читающая чужой предикат, через сервер отвечала NEITHER (посылка DEPENDS) — так у ОСМС minimum_wage_for_year давал ноль записей, у КоАП штраф в тенге не выводился, и ни одно из 82 рёбер импорта корпуса не доходило до ответа. Полное замыкание — у law_ask; аналитика §274 берёт срез по обратной достижимости от цели (query._relevant_world_keys, совет Codex: вариант B с откатом к полному), иначе кап maxArguments 64 переполнялся нормативными фактами непричастных актов. Попутно: _merged_doc объединяет features (литерал ронял A3-параметр соседа), провенанс берёт якоря у ассерций §73 (статья 7 закона о бюджете названа), law_explain различает факт дела и нормативный факт акта, текст ответа перечисляет соакты.
  • Пачка закрытия дефектов ядра (03.09.2026): E-0110…E-0115, E-0100, DECISION-0102. abs/round над Integer в обеих реализациях и Lean (E-0110); все живые судейские ветви в каноническом порядке (E-0111); канал суждения §47.3 сквозь valid_when, condition цели и условие дефитера (E-0100, POWER_INVALID_EXERCISE не выпускается при судейском valid_when); ребро completion §110/§111 — агрегат и forall над выводимым предикатом считаются по замороженному множеству, цикл — LDC-E4102 (E-0112); многоуровневые замыкания §70 (E-0113); несколько when — конъюнкция, несколько then — <rule>/head/N, повтор scope/effective/defeat — LDC-E1329 (E-0114); include/exclude берут экспансию объявления (E-0115); lawc check исполняет сухой lower и звучит его кодами, ворота check_lower_parity (DECISION-0102). 27 новых векторов, differential 302/302, сертификаты 302/302. Открыто: три акта с рекурсией через агрегат стали нестратифицируемыми под completion (STATUS).
  • MCP: вход таблицы решений достижим (DECISION-0104, 03.09.2026). _resolve_predicate принимает полный id без # и короткое имя узла — до этого сервер называл …:table:<т>/input в whyNot и отвергал его как «не объявлен», и через MCP не срабатывала ни одна таблица режима rules (26 пакетов). law_rules помечает вход таблицы в factsTemplate и называет его фактом дела. DEFAULT_LEGAL_TIME 26.08 → 03.09.2026: редакции ВВК (in_force 28.08) на умолчании молчали целиком.

Добавлено

  • Казахская грамматика: срез kz.grammar.eliktew расширен вторым источником — §§95—100 академической «Қазақ грамматикасы» 2002. Связка еліктеуіш закрыта целиком: род подражательного слова (пять признаков одной конъюнкцией), три словообразовательных разряда, соседний класс бейнелеуіш и синтаксическая функция. Второй слой получил собственную сущность QgElikteuishSozi: §68 говорит о сочетании, §§95—100 о слове. Главная находка: источник ПРОТИВОРЕЧИТ САМ СЕБЕ — §95 включает в определение рода «сөйлемде ӘРҚАШАН сын-қимыл пысықтауыш», а §100 раздаёт роль по сочетанию и даёт тому же слову анықтауыш; пакет не выбирает между параграфами и держит оба вывода рядом. Ещё четыре находки: два источника среза расходятся в классификации бейнелеуіш (§99 без провода к роду против §68, соединяющего их одним основанием); §96 и §99 пересекаются по зрительному образу; род по проводу не несёт пяти признаков §95; §98 даёт четыре клетки перекрёстно. Правил стало 21, сценариев 9 в двух семействах, KZ-differential 58/58 байтово, четыре цели §270 HELD на 32 мирах.

  • Три независимых финансовых пакета РК: АО, платежи и реабилитация/банкротство. Закреплены русские текущие копии и закрытые синхронизаторы 99, 74 и 147 статей. Добавлены исполнимые срезы корпоративных порогов, дивидендов, кворума и крупных сделок; системной значимости, окончательности перевода и допуска платёжных услуг; точного пропорционального распределения первой очереди, расходов, залога и очередности. Регрессия — 184 + 146 + 195, KZ-differential — последний полный срез 318/318 байтово, а payments и rehabilitation_bankruptcy дополнительно подтверждены 146/146 и 194/194 байтово. Четыре цели HELD и три падающие канарейки. Карты глубины оставляют неисполненные статьи видимыми как SOURCE_ONLY (4, 6 и 99), при UNEXPLAINED=0. В АО добавлена проверяемая нижняя граница статьи 58: участие половины состава означает соблюдение только законодательного минимума, без предположения о более низком уставном кворуме; а статья 81 п. 2 отдельно связывает защиту кредитора с реорганизацией разделением или выделением; статья 82 п. 1 — создание нового общества и универсальное правопреемство при слиянии; статья 83 п. 1 — прекращение присоединяемого общества и такое же правопреемство; статья 84 п. 1 — прекращение при разделении и переход ко вновь возникающим обществам; статья 85 п. 1 — выделение без прекращения реорганизуемого общества; статья 86 п. 1 — универсальное правопреемство при преобразовании; статья 87 п. 1 — судебное назначение доверительного управляющего при просрочке; статья 90 п. 2 — судебное правомочие органа после переходного нарушения; статья 79 — обязанность раскрытия на двух установленных ресурсах; статья 6 п. 1 — учреждение общества решением учредительного собрания или единоличным решением единственного учредителя; статья 8 п. 1 — нотариальная форма учредительного договора либо решения единственного учредителя; статья 9 п. 3 — доступ заинтересованного лица к уставу общества; статья 10 — точная граница минимального капитала в 50 000 МРП; статья 11 п. 3 — увеличение капитала размещением объявленных акций; статья 13 п. 1 — ликвидационное имущественное право владельца простой акции; статья 20 п. 2 — отсутствие отчёта при отсутствии размещения за отчётный период; статья 23 п. 1 — конъюнкт аудита, устава и решения собрания для обычных дивидендов; статья 24 п. 1 — отсутствие такого требования для привилегированных акций; статья 26 п. 3.1 — запрет инициированного обществом выкупа до первого собрания. В платежах добавлен запрет правил системы на исключительное участие и ограничение участия в других платёжных системах (статья 5 п. 3), а также обязанность оператора или операционного центра системно значимой либо значимой системы обеспечить обратную связь с её участниками (статья 9 п. 6 подп. 2), а также критерий значимого поставщика для организатора пенсионных, пособийных, социальных и иных выплат из бюджета или фонда социального страхования (статья 11 п. 1 подп. 7). Статья 13 п. 7 дополнена самостоятельным запретом менять условия или реквизиты указания клиента. Статья 14 п. 2 подп. 3 добавляет обязанность агента или субагента выдать клиенту подтверждающий документ с необходимыми реквизитами. Статья 19-1 п. 1 подп. 1 запрещает статус учредителя или участника платёжной организации лицу с неснятой или непогашенной судимостью. Статья 21 п. 2 подп. 1 обязывает Национальный Банк мониторить системно значимые платёжные системы; отсутствие такого статуса не выводит обязанность. Статья 22 п. 1 отдельно связывает этот мониторинг с полученными от оператора, операционного центра либо участника сведениями. Статья 23 п. 2 подп. 8 закрепляет ведение и публикацию реестра значимых поставщиков. Статья 25-1 п. 2 подпп. 1–4 признаёт транзакцию мошеннической по обращению клиента, подтверждённой информации органа уголовного преследования, основаниям внутренних документов либо записи отправителя или бенефициара в базе антифрод-событий и попыток. Статья 28 п. 1 запрещает закрывать счёт по заявлению клиента при наличии неисполненных требований к нему; остальные основания прекращения договора не подменены этим срезом. Статья 30 развернута восемью самостоятельными правилами для каждого названного платёжного инструмента, а не одним обобщающим основанием. Статья 31 п. 3 отдельно допускает сводное платёжное поручение в названных конфигурациях нескольких отправителей и (или) бенефициаров. Статья 32 п. 1 связывает возникновение прав и обязанностей по платёжному требованию с его предъявлением в банк отправителя денег. Статья 33 п. 3 разводит выдачу чека, которая платёж не завершает, и получение чекодержателем денег, окончательно исполняющее обязательство. Статья 35 пп. 1–2 связывает законное безакцептное списание с инкассовым распоряжением и возникновение прав и обязанностей с его предъявлением. Статьи 36–38 добавляют основание платёжного ордера, использование извещения без банковского счёта отправителя и подтверждённое согласие держателя электронного средства платежа. Статья 39 п. 1 добавляет выпуск и использование платёжной карточки уполномоченным поставщиком на основании договора с её держателем. Статья 40 п. 2 связывает права и обязанности карточного платежа с согласием предпринимателя или юридического лица принять этот платёж. Статья 41 п. 1 закрепляет обработку и клиринг внутристрановой межбанковской карточной операции за оператором из реестра платёжных систем. Статья 41-1 п. 1 добавляет открытие цифрового счёта на платформе цифрового тенге по заявке клиента после заключения договора цифрового счёта. Статья 41-3 п. 1 закрепляет исключительное право Нацбанка выпускать и погашать цифровые тенге; статья 42 пп. 1 и 4 — национальную валюту номинала электронных денег и возникновение прав владельца при их получении. Статья 41-4 добавляет право пользователя платформы цифрового тенге сменить обслуживающего цифровой счёт участника путём направления заявления. Статья 43 п. 1 добавляет выпуск электронных денег после получения установленной суммы с подтверждением; статья 44 п. 2 — денежное требование продавца, принявшего электронные деньги по договору. В банкротстве добавлены способы установления банкротства по заявлению должника либо кредитора/уполномоченного лица (статья 4 пп. 1–2) и основание заявления должника при устойчивой неплатёжеспособности (статья 5 п. 1), а также основание реабилитационной процедуры при временной неплатёжеспособности (статья 5-1 п. 1). Статья 6 п. 1 добавляет субсидиарную ответственность виновного в преднамеренном банкротстве лица и солидарную ответственность нескольких таких лиц, не подменяя расчёт её размера по статье 96. Статья 8 п. 1 добавляет запрет контрагенту отказаться от ранее заключённого договора только по причине возбуждения дела о банкротстве. Статья 7 п. 4 устанавливает возврат в натуре либо денежное возмещение по недействительной сделке; статья 8 п. 4 запрещает зачет взаимных требований в период процедуры, не подменяя исключение для генерального финансового соглашения. Статья 9 п. 1 определяет аффилированность участника, учредителя или акционера должника либо кредитора; статья 10 п. 4 подп. 2 исключает из конфиденциальных сведения о составе и решениях комитета кредиторов. Статья 11 п. 2 подп. 1 связывает решение о ликвидации и недостаточность имущества с обязанностью должника обратиться в суд о признании банкротом. Статья 12 п. 1 допускает к деятельности администратора подавшее уведомление квалифицированное физическое лицо или профессионального бухгалтера, не подменяя детальный перечень требований к кандидату. Статья 22 п. 2 даёт кредитору проверяемое право обжаловать решение суда или действие администратора, ущемляющее его законные интересы в процедуре. Статья 23 п. 1 даёт кредитору право участвовать в собрании только при включении его требования в реестр на дату этого собрания. Статья 24 п. 1 закрепляет организацию и проведение обычного собрания кредиторов за администратором, не смешивая это правило со специальным случаем отстранения управляющего. Статья 25 п. 1 подп. 1 признаёт надлежащим уведомлением двуязычную публикацию на ресурсе уполномоченного органа только при сроке не менее десяти рабочих дней до собрания. Статья 26 п. 2 выражает общий кворум только при строго более чем половине голосов участвующих кредиторов, включая заочно голосующих; граница ровно 50% отдельным сценарием не проходит.

  • Полные постатейные пакеты законов РК «О промышленной политике» и «О страховой деятельности». RU/KK и сырой HTML закреплены воспроизводимыми фетчерами и постатейными sync-генераторами. Глубина: 83 EXECUTABLE + 1 EXCLUDED и 129 EXECUTABLE + 14 EXCLUDED, при SOURCE_ONLY=UNEXPLAINED=0; вставные якоря используют подчёркивание. Добавлены сквозные нормы по перечню мер, субъекту, выплате, лицензионной власти/иммунитету и пруденциальному исключению; 9 сценариев, 4 цели и две падающие канарейки. Глава 6-1 страхования включена в MCP-профиль islam.

  • Цели §270 связки етістік замерены и записаны в манифест. kz.grammar.etistik — 4/4 HELD на 45 мирах, kz.grammar.kosemshe — 3/3 HELD на 25; обе канарейки падают. Замер был отложен, потому что в момент фазы целей engines/ не компилировался под errata E-0114, а run_goals.py шеллит lawc lower-property; строки в goal-manifest.json не писались, пока вердикт не был измерен. Канарейка kosemshe при этом поймала собственную ошибку: первая её редакция стояла на однонаправленной цепи §66 и держалась — там всякая ступень по построению есть подмножество исходного факта, и ложного универсального утверждения не существует. Перенесена на единственное ветвление пакета (§§10—11, два маршрута к одной клетке письма), где падает с контрпримером Uyidy. Орфографический слой §§10—11 получил при этом первую цель за всё время существования среза №24.

  • Провод «словарь → срез» для kz.grammar.septik: одна строка дела даёт полную падежную парадигму. Устройство то же, что у kz.grammar.taueldik (импорт-поставщик kz.grammar.sozdik, ни один символ не назван, импорт ради пина байтов по contentHash). Измерено перебором всех тридцати аллморфов по шести падежам: у слова с аттестованным рядом отвечают ВСЕ ШЕСТЬ падежей, ровно по одной клетке на падеж («кітап» → -тың, -қа, -ты, -та, -тан, -пен). Граница ряда у септіка проходит по падежам: көмектес ряда не требует, и слово без аттестованного ряда получает ровно один падеж из шести, а не молчит целиком. Три сценария, регрессия 18/18.

  • Казахская грамматика: новый пакет kz.grammar.etistik (реестровый №67) и §66 у среза kosemshe. Связка етістік закрыта целиком: §§60—65 — база глагола (род с четырьмя напечатанными значениями, пара «жетекші ↔ көмекші» с закрытым перечнем из тридцати форм, пара «салт ↔ сабақты», аналитический формант); §66 — вторым источником среза №24, цепью причин «тиянақсыз → требует завершающего глагола → основа сложного глагола». EXECUTABLE 6 из 6 при нуле посылок в один конец. Главная находка: перечень §62 даёт КЛАСС, но не РОД — слово «етістіктер» стоит у него в определяющей части, и обратный провод дал бы неcтратифицируемый цикл LDC-E4102. Ещё пять находок: два входа §62 дают разные наборы выводов; §§63—64 описывают разряд, а не определяют его; «ғана» §61 — настоящее ограничение круга; три «возможности» §61 — не клетки; §65 определён через §62, показатель и глагол разведены разными сущностями. Правил 50 и 6, сценариев 9 и 6, KZ-differential 140/140 байтово.

  • Казахская грамматика: срез kz.grammar.esimdik расширен вторым источником — §§49—59 академической «Қазақ грамматикасы» 2002. Связка есімдік закрыта целиком: род местоимения (три признака), первое деление (субстантивтік и атрибутивтік), второе деление (семь разрядов с четырьмя закрытыми перечнями — 3, 13, 8 и 12 напечатанных форм) и синтаксическая функция. Второй слой получил собственную сущность QgEsimdikSozi: §66 говорит о сочетании, §§49—59 о слове. Главная находка: род, полученный проводом от разряда, НЕ несёт трёх признаков §49 — разрыв принадлежит источнику, и пакет его не «чинит». Ещё шесть находок: два деления источник между собой не связывает; подлежащее §50 эллиптично и восстановлено заголовком; ровно один перечень открыт («т.б.» у целей вопроса §54); парадигма §52 напечатана условным наклонением при «әрқашан» рядом; §59 ставит рядом склонность и строгое ограничение; §§53 и 56 дают признак принадлежности по-разному. Правил стало 70, сценариев 15 в двух семействах, KZ-differential 171/171 байтово, разметка затянута с 6/0 и 3/0 до 51/0 и 70/0, четыре цели §270 HELD на 112 мирах.

  • Казахская грамматика: новый пакет kz.grammar.san_esim (реестровый №66). Связка сан есім закрыта целиком: §§37—48 академической «Қазақ грамматикасы» 2002 — род числительного (четыре напечатанных значения), строение (дара/күрделі, негізгі/туынды), шесть разрядов и шесть синтаксических функций. EXECUTABLE 12 из 12 при нуле посылок в один конец. Первый пакет 2002-й ветви, который читает kz.grammar.phon: §43 выбирает аффикс реттік по классу конечного звука ОСНОВЫ, и отношения образования поэтому двуместны. Шесть находок чтения: четыре разряда аттестуются формой, два только значением; вопросы §42 и §46 совпадают и НЕ разделяют есептік и болжалдық; род выводится через значение каждого разряда, а не по заголовку; §38 требует одного корня, а §§40—41 этого не повторяют; §44 называет два аллоформа без признака выбора; «кейде» §48 п.6 — отдельный поражаемый вывод. Записана граница языка: числительность основы §44 нельзя выразить посылкой san_esim(b) — вышел бы неcтратифицируемый цикл LDC-E4102. Правил 60, сценариев 15, KZ-differential 84/84 байтово, четыре цели §270 HELD на 40 мирах.

  • Казахская грамматика: новый пакет kz.grammar.zat_esim (реестровый №65) и расширение kz.grammar.taueldik. Связка зат есім закрыта целиком: §§1—8 и §§22—30 академической «Қазақ грамматикасы» 2002 (род существительного, три пары его лексических разрядов, свойство көптік мағына и словообразовательные типы с пятью видами күрделі) — в новом пакете; §§10—11 (ортақ и оңаша тәуелдеу) — у taueldik, которому принадлежит §9. Это первый срез семьи, чей единственный источник — академическая грамматика, и первый, у которого мера §33.1 видит весь его источник: EXECUTABLE 17 из 17. Пять находок чтения остережены сценариями: три пары разрядов источником не объявлены взаимоисключающими; §§6, 7 и §30 требуют рода в посылке; в §8 нет ни одного закрытого перечня («тәрізді», «секілді», «т.б.»); «жиі ұшырайды» о қос сөз есть частота, а не наличие; §24 называет четыре способа, §§25—29 описывают пять видов, и только §28 называет свой вид күрделі. У taueldik записана граница: провода от аффикса §9 к виду §§10—11 источник не даёт. Правил 52 и 20, сценариев 15 и 14, KZ-differential 92/92 и 81/81 байтово.

  • Цели §270 у второго и третьего пакетов казахской грамматики. kz.grammar.zat_esim заведён сразу с четырьмя целями (HELD на 37 мирах), kz.grammar.taueldik получил две (HELD на 7 мирах); у обоих есть обязательная канарейка, падающая всеми своими свойствами. Строки записаны в corpus/ratchets/goal-manifest.json.

  • Пакет kz.halal — национальный стандарт РК «Общие требования к пищевой продукции Халал» (СТ РК OIC/SMIIC 1-2022). 95 пунктов, EXECUTABLE 44, 24 сценария, differential 43 вызова байтово, пять целей §270 HELD. Единица деления стандарта — ПУНКТ, и конвенция ru_standard_clause заведена вместе с пакетом в обоих реестрах меры §33.1 (corpus/tools/lib/act_split.py, verify/ci/gates/sources/check_source_pinning.py) и в профиле ru-standard-clause шаблона pinning; шаблон получил опциональный ключ locator (умолчание article — существующие блоки байтово те же). Граница пакета проведена определением 3.19 самого стандарта: дозволенность пищи по Нормам Ислама приходит импортом quran.atima, которому добавлены три pub-экспорта §24. Разбор — STATUS.md.

  • Казахская грамматика: новый пакет kz.grammar.zat_esim (реестровый №65) и расширение kz.grammar.taueldik. Связка зат есім закрыта целиком: §§1—8 и §§22—30 академической «Қазақ грамматикасы» 2002 (род существительного, три пары его лексических разрядов, свойство көптік мағына и словообразовательные типы с пятью видами күрделі) — в новом пакете; §§10—11 (ортақ и оңаша тәуелдеу) — у taueldik, которому принадлежит §9. Это первый срез семьи, чей единственный источник — академическая грамматика, и первый, у которого мера §33.1 видит весь его источник: EXECUTABLE 17 из 17. Пять находок чтения остережены сценариями: три пары разрядов источником не объявлены взаимоисключающими; §§6, 7 и §30 требуют рода в посылке; в §8 нет ни одного закрытого перечня («тәрізді», «секілді», «т.б.»); «жиі ұшырайды» о қос сөз есть частота, а не наличие; §24 называет четыре способа, §§25—29 описывают пять видов, и только §28 называет свой вид күрделі. У taueldik записана граница: провода от аффикса §9 к виду §§10—11 источник не даёт. Правил 52 и 20, сценариев 15 и 14, KZ-differential 92/92 и 81/81 байтово.

  • Цели §270 у второго и третьего пакетов казахской грамматики. kz.grammar.zat_esim заведён сразу с четырьмя целями (HELD на 37 мирах), kz.grammar.taueldik получил две (HELD на 7 мирах); у обоих есть обязательная канарейка, падающая всеми своими свойствами. Строки записаны в corpus/ratchets/goal-manifest.json.

  • Профили MCP: поле shared — названное разделение пакета между срезами. Профили не пересекаются селекторами, и это защита от молчаливого смешения правопорядков. Но акт бывает двупредметен по существу — годовые решения ҚМДБ о зекете суть исламское право, изданное органом в Казахстане, — и теперь второй профиль берёт такой пакет полем shared («ключ: причина»). Отличие от borrowed: тот вычисляется замыканием импортов и пишется --register, а shared есть решение владельца профиля и пишется рукой с причиной. Проверка пересечения СЕЛЕКТОРОВ не ослаблена — она смотрит только на префиксы; ворота дополнительно требуют, чтобы ключ существовал в корпусе, выбирался селектором другого профиля и не выбирался собственным, а разделённый пакет входит в обход импортов наравне с выбранными. Шапка initialize.instructions называет его с причиной. kz.dumk_zakat_nisab теперь в обоих срезах (kz 234 пакета, islam 42), kz-dumk-fatwa — нет; канарейка ворот выросла на девять случаев.

  • Формы правил без зеркал (DECISION-0099, WP-43). Семь извлекающих шаблонов формализации стали формами над CLIR: 1296 манифестов <модуль>.law<форма>.toml, семь текстовых движков и ruleform.py сняты; состав форм считается из узлов CLIR (verify/ci/lib/template_forms.py) и пиннится порождаемым corpus/ratchets/template-manifest.json воротами check_template_composition (шаг 6); находки шаблонов считаются из CLIR, новый вид split_deadlines — раздвоенная голова срока, невидимая competing_deadlines по построению (25 строк в 11 пакетах). Табличные closed-list и pinning остаются на манифестах.

  • Календарь хиджры Умм аль-Кура 1445–1460 (fiqh.taqwim). Закреплена конечная материализация 192 месяцев KACST без календарной формулы; три A3-таблицы дают интервальный hijri_of, начало и длину месяца, а типизированные правила — обратное соответствие и лунную арифметику. Два exactly-one прочтения §152 различают таблицу и адресное объявленное наблюдение. 11/11 сценариев, KZ-differential 12/12, G1–G6 HELD 12/12 на двух прочтениях, канарейка FAILED 2/2, разметка 620/0 и 21/0. По найденному разрыву добавлена E-0109: фиксированный шаг calendar_day в add_calendar_period; core differential 284/284. WASM/FFI carrier получил явный безопасный лимит вложенности 512, чтобы принимать законный A3 CLIR глубины 200 и по-прежнему отвергать неограниченно глубокий JSON.

  • Годовые решения ҚМДБ о пітір садақа и підия (kz.dumk_zakat_nisab) — и НАЙДЕННОЕ ОТСУТСТВИЕ тенгового нисаба. Семь решений Төралқа 2020–2026 парами kk/ru и шесть разъяснений Отдела шариата и пәтуа: 21 закреплённый документ, 13 source-узлов, 253 фрагмента, 23 правила, 1 констрейнт §93.3, восемь датированных параметров §87 на 37 ветвей. Нисаб закята в тенге ҚМДБ ежегодно НЕ устанавливает — во всех решениях он назван доктринально, а единственная тенговая величина (13.04.2021) есть приблизительная оценка нисаба СЕРЕБРА (595 г ≈ 200 тыс. ₸), не 85 г золота; параметры заведены на то, что решениями действительно установлено. Ось редакций §31 развела две нормы: величину объявляет каждое решение с 16.04.2020, а условие «обязан достигший нисаба» — только разъяснения с 13.04.2021. Мост к fiqh.zakat — сквозным сценарием на слитом мире, а не правилом: у соседа ноль pub-деклараций (LDC-E1105) и факты границу пакета в Core 0.1 не пересекают. Регрессия 36/36 за 1,1 с, KZ-differential 108/108 байтово за 2,4 с, цели §270 5/5 HELD на непустых доменах и на 10 мирах регрессии, impact-editions даёт PARAM-AXIS, разметка §218 76/0 и 23/0, парный якорь §194 с нулём непарных узлов, байтовое покрытие публикаций 99,6–99,8 %. Попутно записано расхождение реализаций: abs() над Integer-параметром A3 считается в lawref и даёт TYPE_ERROR в law-eval (94 расхождения из 108 вызовов); ядро не правилось, модель обошлась max(P, 0).

  • Фетвы Совета улемов ДУМК (kz.dumk.fatwa) — первое прочтение §152 с ИНСТАНЦИЕЙ. Три фетвы, каждая в двух аутентичных редакциях (kk и ru): никах через АХАТ/ЗАГС (2022), фамилия мужа (2021), хадж без визы (2023). У прочтения есть орган (authority DUMK), окно effective от даты издания и закреплённый текст; «лицо следует ханафитскому мазхабу» читается предикатом fiqh.taqlid::follows, а не своим дублем. Проба показала, что interpretation … of pkg::FRAGMENT и extends pkg::Reading через границу пакета отвергаются громко (LDC-E0201), а authority у прочтения ПЕРЕНОСИТСЯ (узел CLIR, semanticHash, вербализация), но оценщиком не читается — эффект производит тело правила. CLIR 85 узлов, регрессия 23/23, KZ-differential 29/29 байтово, разметка §218 26/0 и 19/0, парный якорь §194 с нулём непарных узлов, цели §270 4/4 HELD на 19 мирах при падающей канарейке. Фетв о курбане и об оразе Совет улемов не издавал ни на одном языке (обход полного архива: 99 URL) — граница названа в STATUS, а не закрыта материалом раздела сұрақ-жауап.

  • §24-экспорты у fiqh.taqlid, fiqh.hajj и kz.corpus.marriage. До этого первые два не имели pub-деклараций вовсе, и импорт по замыслу был невозможен при зелёном lawc check (LDC-E1105 приходит только на lower). Байты трёх пакетов сдвинулись; перегенерированы они и kz-zhetiata.

  • Казахская грамматика: второй источник среза shylau — §§101—117 академической «Қазақ грамматикасы» 2002. Пакет kz.grammar.shylau, до сих пор отвечавший только на вопрос «как записывается частица» (§§83—88 справочника Сыздық), получил семнадцать закреплённых единиц морфологии 2002 года, отвечающих на другой вопрос — «что она есть и что делает»: род шылау (§101), три вида (§102 септеулік, §103 демеулік, §111 жалғаулық) и их подгруппы с названными членами и функциями (§§104—110, §§112—117). Норму это не задваивает: имена второго слоя несут префикс qg_, общим остаётся только носитель сочетания. Членство выражено правилом на каждый напечатанный член (74 клеточных правила), и потому расхождения перечней источника остались видимыми: §111 против §112, §115 и §116 расходятся составом, §111 и §117 совпадают, семь групп §103 пересекаются, а аномалия §109 («құрылым» в перечне против «Ғұрлым» в теле) и опечатка §116 «немес» не починены. Провода «демеулік → шылау» НЕТ: §101 требует двух условий, §103 называет одно. Правил 153, сценариев 32 в двух семействах, KZ-differential 293/293 байтово.

  • Цели §270 у пакета казахской грамматики — впервые. kz.grammar.shylau получил tests/goals.lawtest (четыре многошаговые цели, все HELD на 150 мирах регрессии) и обязательную канарейку analysis/goals-canary.lawtest, падающую всеми тремя своими свойствами с контрпримерами. Строка пакета записана в corpus/ratchets/goal-manifest.json.

  • Османский декрет о семейном праве 1917. Новый пакет osm.family_1917 закрепляет 157 статей Hukuk-ı Aile Kararnâmesi во временно разрешённой единственной транслитерации Mehir, с полной глубиной EXECUTABLE 157. Исполнимы способность, препятствия, wali, форма, недействительность, mahr, talāq, tafriq и iddah; шесть A3-порогов имеют граничные сценарии, шесть целей проходят по выбранному официальному кодифицированному прочтению. Добавлены синхронизация источника --check, CLIR/раннер/ratchets, префикс профиля islam, карточка витрины и полный аудит. Сквозной MCP-сценарий сохраняет различие: fiqh.nikah оставляет тройное произнесение спорным, а декрет даёт окончательную séparation. Рецепция вне Турции и лунно-календарная часть iddah явно ограничены, а не выведены из отсутствующих данных.

  • MCP: law_report, грань feedback (DECISION-0100, 03.09.2026). Отчёт модели-потребителя о расхождении формализации с источником: адрес обязателен и сверяется с каталогом (пакет, fragment, predicate), категория из закрытого перечня, callId ответа; обработчик ничего не считает и не хранит, запись делает журнал транспорта полями MCP_REPORT_*, в ответе semanticHash пакета. Право отчёт не меняет. 22 инструмента у all, 12 у срезов; абзац в инструкциях сервера.

  • KZ: Правила религиозного туризма (приказ № 166) на двух языках. Новый пакет kz-dini-turizm закрепляет ОБЕ аутентичные ветви ИПС «Әділет» по 18 пунктов и ставит парный якорь §194 на каждое объявление (долг — ноль, канарейка проверена снятием одного якоря). Выражены определения пункта 2 (порог «от 24 часов до 1 года», лицензия внутри определения туроператора), конкурс религиозного объединения как автомат §160, замыкание §70 над кругом заключивших договор о взаимодействии, 13 обязанностей §134 и два канала суждения §47.3, названные самим текстом. Спор пункта 6 об отсылке к пункту 3 оставлен группой прочтений §152 со selection any_of. Добавлены 37 сценариев с байтовым differential и 6 тестов §267. Заведён вместо несостоявшегося kz-qazhylyq: правил ДУМК об очереди паломников как закрепляемого текста не существует, а этот акт распределяет квоту между ТУРОПЕРАТОРАМИ и модель очереди прямо отрицает (пункт 9). Полный аудит формализации нашёл два дефекта, невидимых батарее ворот (тридцать правил без единого сценария; обязанности, не способные стать VIOLATED при открытом окне), — оба починены: сценариев 61, окна пунктов 11 и 17 кончаются началом путешествия, заведены три цели §270 с падающей канарейкой. Заведена власть §127 пункта 6: компетенция объединения вынести решение отделена от законности его содержания — первая от рассмотрения документов, вторая от спорного прочтения §152; пункт 8 переведён с пригодности на эффект власти. Отчёт — corpus/laws/kz/dini-turizm/audit.ru.md.

  • Fiqh: джинаят (кисас, дия, акила, каффара). Новый doctrine-пакет fiqh.jinayat закрепляет 28 арабских и русских фрагментов Корана, Шараи’ аль-ислам и Бидаят аль-муджтахид; два доктринальных чтения изолированы interpretation_group. Кисас, эффект прощения, дия, акила и двухступенчатая каффара исполнимы; A3-таблица хранит точные доли 1/1, 1/2, 1/10, параметр — базу 100. Добавлены 19 сценариев JN-*, пять целей §270 с падающей канарейкой, source/QCR-bridge и полный аудит. Первичные владельцы Quran Clause Registry не изменены, 17:33 сохранён REVIEW_REQUIRED.

  • KZ: Закон об оценочной деятельности. Новый пакет kz-valuation зеркалит семь глав и 33 статьи закреплённой русской редакции: проверяет обязательность оценки, квалификацию и независимость оценщика, договор, отчёт, экспертизу, страхование, палату, контроль и переходные сроки, но оставляет числовую стоимость внешнему суждению Ocenshchik. Добавлены 92 сценария с байтовым differential, три цели §270 и падающая канарейка на отсутствующий в Законе срок действия отчёта; экспортирован предикат действительности отчёта для последующей интеграции одиннадцати соседних пакетов.

  • KZ: Закон № 261-IV «Об исполнительном производстве и статусе судебных исполнителей». Пакет kz-enforcement — 193 статьи в семнадцати главах, EXECUTABLE 164/193 при 27 объявленных границах и нуле необъяснённых. Пять очередей удовлетворения требований (статьи 111–112) записаны членом перечисления и правилом на основание; пятая — замыканием §70 над признаком «названо статьями». Пропорция статьи 110 пункта 2 считается точно через Money/Money → Rational и Money * Rational; округления акт не называет, и неделящееся дело отвечает INEXACT_DIVISION — граница объявлена решением владельца. Предел удержания статьи 95 выражен СОХРАНЯЕМОЙ долей, изъятие «кроме алиментов и вреда» адресовано прожиточному минимуму, а не половине дохода. Оценка имущества — канал суждения §47.3 с оценщиком; упрощённое производство — автомат §160 с двумя выходами, различающимися судьбой мер обеспечения. Пороги выезда, лицензий, санкции и оплаты ЧСИ — датированным параметром §87. 118 сценариев KZ-ENF, differential байтовый (175 вызовов), три цели §270 на 116 мирах, канарейка падает.

  • Фаза 0: третий облик исключённой статьи и второй счёт против него. У исполнительного производства нашлась статья (141-1), чья сноска об исключении снята извлечением, а уцелевшее «Примечание ИЗПИ!» о будущей статье осталось единственным телом — по байтам неотличимо от нормативного текста. Ни excluded (пустое тело), ни excluded_with_note её не описывали. Заведены поля absent (статьи, снятые вместе с заголовком) и excluded_with_apparatus, а главное — СЧЁТ С ДРУГОЙ СТОРОНЫ: публикация сама называет исключённые статьи сноской, и объявленное множество обязано совпасть с названным целиком. На восьми прочих актах таблицы новый счёт зелен без единой правки.

  • KZ: Закон № 21-VIII о возврате государству незаконно приобретённых активов. Пакет kz-asset-recovery отражает семь глав закона: применимость, реестр, обеспечительные меры, добровольный и принудительный возврат, специальный фонд и международное сотрудничество. Порог статьи 14 исполнен как 13 000 000 × ApplicableMrpAmount с A3-ставками 2025/2026, Комиссия включает лицо в реестр через власть, а статья 28 проверяется парой миров «явный отказ от доказательств / молчание». Исполнимы сроки статьи 17 (10-й и следующий рабочий день), право и сроки декларации статьи 18, а также 10/60 календарных дней статьи 38 от явной даты публикации и два старта пятилетней давности статьи 28. Добавлены обязанности публикации сведений фонда и раздельного учета управляющей компании, 22 KZ-AR сценария, три цели §270 с отрицательной канарейкой и differential в общих храповиках.

  • MCP: текст инструкций и промпты — под гранями профиля (03.09.2026). Тело initialize.instructions перестало быть статичным литералом и собирается из доступного (profile.instructions_body); промпт несёт грань, как инструмент, и в чужом профиле не показывается. Аудит нашёл, что на публичных срезах kz/islam тело предписывало как порядок работы восемь запрещённых там инструментов (весь черновой контур, law_loophole, law_amend) — тремя строками ниже шапки, где сказано, что этих граней нет, — и молчало о двух доступных (law_sources, law_query); промпт «Проверка черновика формализации» предлагался там, где запрещены все пять его шагов; строка про borrowed утверждала, будто заимствованные пакеты доступны «только как импортированные соседями», хотя law_ask по ним отвечает наравне. Добавлен абзац о самой формализации (модель акта, глубина §33.1 последним счётчиком обзора law_packages, «нормы нет в модели» ≠ «право молчит»), а kind='deadline' не перечисляется в профиле без календаря. Держат ворота check_mcp_profiles (audit_text, канарейка +5) и test_server.py (+5 проверок под islam).

  • Плановая сверка §170 — вне пути ответа (поправка к DECISION-0054, 03.09.2026). Расписание (степени двойки) остаётся в оракуле и остаётся детерминированным, переехало МЕСТО счёта: document.VERIFICATION — "inline" (умолчание: векторы, differential, selftest, stdio) либо "deferred", где вызов ставит программу в очередь (due_verifications), а полный хэш считает хост (verify_program). У HTTP-демона MCP это делает фоновый сторож law_mcp/verify.py вне глобального лока и в паузе простоя. Замер на kz-administrative-code: было 0,7–1,2 с стойки на 1-м, 3-м, 7-м и 15-м вопросе при медиане 103 мс — стало 24 вызова подряд с медианой 150 мс и максимумом 221 мс. Очередь видна в /healthz (verificationPending), а найденная мутация закрывает ответы (PROGRAM_MUTATED, -32002). Прогрев дополнительно доводит расписание семью вызовами на пакет.

  • MCP: срез корпуса читает с диска только себя (03.09.2026). Процесс под профилем (LAW_MCP_PROFILE=kz|islam) разбирает лишь селектор ∪ пин borrowed (Profile.reads, catalog._scan_corpus), а не весь corpus/clir: islam — 38 CLIR, 0,13 с и 92 МБ вместо 446, 2,9 с и 1052 МБ; kz — 219 файлов, 768 МБ. Состав и контент-ключ среза байт в байт те же, что у restrict над полным корпусом (тест сверяет два процесса одного кода); устаревший пин borrowed теперь не втягивает чужой пакет молча, а называет висячий импорт в stderr с командой --register (канарейка в test_server.py). Отдельные сборки срезов со своими корпусами отвергнуты: состав велся бы руками, срезы не дизъюнктны, на латентность вызова полный разбор не влиял.

  • Корпус: второй источник морфологии семьи kz.grammar (03.09.2026). Академическая «Қазақ грамматикасы» 2002 закреплена выдержками оқу корпуса Института языкознания (fetch_kz_grammar_2002_texts.py: 134 фрагмента по морфологии как документ с единицей-фрагментом; синтаксис 57 и фонетика 31 воспроизводятся из тех же сохранённых страниц и ждут первого среза), правила орфографии 2019 — публикацией «Egemen Qazaqstan» (84 §). kz.grammar.septik расширен на табыс, жатыс, шығыс и полный көмектес (56 правил, 15 сценариев, differential 99/99), исключения после ІІІ жақ тәуелдік — поражаемым слоем; фетчер впаян в run_all.sh (--check без сети по всем копиям семьи). kz.grammar.taueldik (§ 9: гласные основы I/II лица, I мн., II сыпайы — 12 сценариев) и kz.grammar.zhiktik (§ 21: множественное число по букве конца и ряду, мұғаліммін — 9 сценариев) расширены тем же источником, differential 116/116. Три новых среза по тем же выдержкам: kz.grammar.shaq (§§ 74, 78—81: подтип → время тотальным map, осы шақ по строению; реестровые №18—20 сведены), kz.grammar.esimshe (§ 67), kz.grammar.ustau (§§ 83—94: закрытые и открытые перечни разрядов, неизменяемость, роль в предложении); 13 сценариев, differential 112/112. kz.grammar.rai (§§ 76—77: шартты рай с парадигмой лиц тотальным map, қалау рай) и kz.grammar.etis (§§ 69—72: четыре залога по суффиксу, основе и названному признаку) расширены; 13 сценариев, differential 56/56.

  • Корпус: kz.grammar.sozdik — орфографический словарь 2013 снимком §47.2 (03.09.2026). Шестое издание «Орфографиялық сөздік» закреплено из PDF qazcorpus.kz двумя срезами (предисловие, словник 53 898 статей / 52 798 заглавных слов, 36 буквенных фрагментов §194); таблица sozdik.tsv порождается фетчером fetch_sozdik_texts.py, датасет §47.2 (105 596 вызовов, 25 МБ) — из таблицы одним кодом у синка и раннера (corpus/lib/sozdik_snapshot.py), закреплён его contentHash, а не копия. Два external snapshot function (статьи заглавного слова, их число) и два строгих правила; раннер corpus/kz/acts/grammar_sozdik.py (6 сценариев: статья байт в байт, склейка переноса, омонимы, честное молчание, отказ подменённого снимка, состав против meta), KZ-differential 8/8. Оси phon из статьи не выводятся намеренно (норма § 31 — предмет справочника, инвариант 5); мост — следующее решение каркаса (docs/KAZAKH-GRAMMAR.ru.md §8).

  • MCP: постраничный каталог и прогрев горячих пакетов (03.09.2026). law_packages постраничен во всех трёх режимах (limit/offset, единица — в pageUnit): обзор и query листают акты (200 и 25), package=… — сигнатуры акта (80, максимум 300). Прежний кап в 300 строк остаток называл, но не отдавал: деталь административного кодекса — 481 КБ (~48 тыс. токенов), из них 3324 сигнатуры недостижимы ни одним вызовом; теперь 87 КБ и продолжение в тексте и структуре. Новый law_mcp/warm.py греет самые дорогие пакеты при старте HTTP-транспорта (после объявления готовности, попакетно под глобальным локом; LAW_MCP_WARM_TOP/_BUDGET/_PACKAGES): первый вопрос к админкодексу — 0,28 с вместо 4,8 с, а на публичной точке холодная цена платилась по разу на каждый бэкенд пула (10,4 с дважды). Байты ответа от прогрева не зависят — это проверяется, а не декларируется.

  • E-0108 / DECISION-0097: вторая половина вехи §105.1 — конфликт ПОЗИЦИЙ (03.09.2026). Семь образцов деонтического конфликта §105.1 обнаруживаются: пара рассматривается при совместимом grounding субъектов и пересекающихся окнах §124, несовместимость доказывается структурно (обязанность воздержания против свободы на то же действие), явным urn:law:std#incompatible над ШАБЛОНАМИ либо сертификатом в разрешимом фрагменте §45.1. До правки пункты 1–3 перечня не обнаруживались вовсе: две несовместимые нормы давали две позиции ACTIVE без ребра и без предупреждения, а differential был зелён — обе реализации не делали одного и того же. Разрешение — §106/§107 без нового механизма: приоритет разводит пару (DEFEATED + узел defeat), иначе обе позиции сохраняются и звучит UNRESOLVED_NORMATIVE_CONFLICT (случайный tie-break §106 запрещает дословно). Solver-assisted работает только при solverProfile, закреплённом ДЕЛОМ и попадающем в semanticHash; сертификат движок ПЕРЕПРОВЕРЯЕТ, а не принимает на веру, и живёт в графе при ребре либо в details issue, когда ребра нет. Схема не менялась. Проза §105.2, результат запроса positions несёт evaluationStatus = UNRESOLVED_NORMATIVE_CONFLICT (иначе повторился бы E-0105: «право молчит» там, где право столкнулось), evaluator/normconflict.py + порт law-eval/src/normconflict.rs, девять векторов LAY-L2-CONFLICT-* (три из них отрицательные — без них утверждение пусто), differential 283/283.

  • E-0107 / DECISION-0096: веха §105.1 закрыта в части defeat норм-правил (03.09.2026). unless при НОРМ-голове §134 разворачивается в дефитер с той же норм-головой; побеждённое применение даёт позицию со статусом DEFEATED (§134.1) — видимую в ответе, но не публикующую ни статусных, ни связочных literals (§108). Соответствие «то же q» — пара «шаблон + подстановка на переменных payload» (§107.1); приоритеты §106 читаются тем же замыканием, что у литеральной головы. Замер до правки: strength на норм-пути не читался вовсе, и дефитер САМ создавал вторую позицию — обе реализации вели себя так согласованно, и differential этот класс не ловит. Пара векторов LAY-L2-NORM-DEFEAT-* (одна программа, один различающий факт), differential 274/274. Перечень §134 пополнен одним значением — это единственная неаддитивная часть, и цена записана в DECISION-0096 §3. Вторая половина вехи — семь образцов деонтического конфликта и solver-assisted incompatibility — остаётся НЕ сделанной и названа.

  • Закон РК № 349-I «О государственных секретах»: степени, сроки, допуск и рассекречивание (03.09.2026). Закреплена консолидированная копия Әділет — 39 hash-адресуемых статей. Добавлены тотальное отображение трёх степеней в 30-летний предел, исполняемое окно защиты и исключительное продление, 83 открытые секретные категории, 11 строгих отрицательных голов статьи 17, замыкание 12 оснований отказа, прекращение допуска и компетенция по рассекречиванию. 73/73 сценария и 73/73 differential-вызова; полный аудит и воспроизводимые fetch/sync-генераторы.

  • Директива Совета 98/59/ЕС о коллективных увольнениях, статьи 1–7 (03.09.2026). Две шкалы статьи 1 реализованы непересекающимися A3-таблицами unique и выбором exactly_one; процент сравнивается как точный Rational. Закреплены английская и французская равно аутентичные редакции с парными якорями и честным статусом PINNED_UNOFFICIAL_COPY. Добавлены процедуры консультации, уведомления и 30-дневного ожидания, 34 сценария на пороги и границы 20/21/99/100/299/300, 4 surface-теста и differential-контур.

  • Новый пакет intl.labour.c138 — Конвенция МОТ № 138 о минимальном возрасте для приёма на работу (26.06.1973), все 18 статей (03.09.2026). ПЕРВЫЙ АКТ КОРПУСА, ГДЕ ОСЬ НОРМЫ — ДАТИРОВАННЫЙ ПАРАМЕТР §87 ПО ГОСУДАРСТВАМ, А НЕ ПО РЕДАКЦИЯМ: Конвенция минимального возраста не называет, она называет его нижнюю границу и обязывает участника объявить свой, поэтому объявленный возраст приходит семью датасетами *.lawparam.json со значениями из закреплённой сноски тома UNTS (15, 18, 16, 15, 15, 15, 15). Закреплены байты ОФИЦИАЛЬНОГО опубликования — UNTS том 1015, № I-14862 — на ДВУХ равно аутентичных языках (ст. 18): PINNED_OFFICIAL_BYTES у обеих редакций, парный якорь §194 у каждой нормы, ноль долга. Заведены конвенции единицы деления en_article_inline и fr_article_inline в ОБЕИХ копиях соглашения. Статьи 4 и 5 — группа толкований §155 с exactly_one: круг применения объявляет государство, и запрос без выбранного прочтения даёт INTERPRETATION_REQUIRED, а не молчаливое «применяется ко всему». Статья 3 — канал суждения §47.3 с органом, названным самим текстом; ось статьи 2 судьи не спрашивает. Найдено исполнением: include §152 НЕ вносит в прочтение порождённый unless-дефитер §149, и тот гасит ту же голову под любым прочтением — прочтения смешивались молча при зелёных check, lower и differential; эффект полномочия §127 материализуется после поражаемой неподвижной точки, и дефитер над ним мёртв; голое имя A3-параметра в аргументе головы остаётся позицией идентичности; значение Integer-параметра обязано быть JSON-числом, а не строкой. Мера §33.1: EXECUTABLE 17, ANCHORED 1 (ст. 18 — правило о самом инструменте; тавтологичный констрейнт «каждая аутентичная версия закреплена» убран), учёт статей 18 из 18 в обоих документах, покрытие байтов 99,9 %. Регрессия 59/59, differential 109/109 байтово, эмиссия §267 — 81 тест, 81/81.

  • Новый пакет de.hilbert.grundlagen — «Основания геометрии» Гильберта (Festschrift 1899), группы аксиом I и II (03.09.2026). ПЕРВЫЙ АКТ КОРПУСА, ГДЕ ПРЕДМЕТ ЕСТЬ АКСИОМАТИКА, А ВОПРОС — «модель ли предъявленная конечная конфигурация точек, прямых и плоскостей». Закреплена глава I целиком (§§ 1—8, пять групп аксиом, 21 фрагмент); формализованы двенадцать аксиом групп I (Verknüpfung, I 1—7) и II (Anordnung, II 1—5, включая аксиому Паша), восемь аксиом групп III—V объявлены границами с причиной, проверенной по тексту каждой. Аксиома записана ИНВАРИАНТОМ §93.1, а не правилом: правило породило бы прямую, которой в чертеже нет, а инвариант отсекает и называет подстановку — ответ «на какой тройке точек». Единственность (I 2, I 4) записана И правилом с совпадением в голове — это третий вопрос пакета. Конечность модели вводит семнадцать замыканий §70 с ВЫВОДИМЫМИ областями той же арности (E-0087); без них «прямая не проходит через точку» не выводится (§93.2). Найдено исполнением: аксиома II 2 нарушена на КАЖДОЙ конечной конфигурации (тетраэдр удовлетворяет всей группе I и четырём аксиомам группы II — единственное нарушение названо с точной парой точек); закрывать §70 можно только предикат, выводимый чисто позитивно (замыкание над предикатом, читающим чужой негатив, дало BOTH и CONFLICTED при выполненной аксиоме — два требования I 7 оставлены без замыканий, их UNDETERMINED стерегут ПАДАЮЩИЕ сценарии); различие сущностей выражено буквами чертежа, потому что неравенство сущностей даёт TYPE_ERROR. Закреплён авторизованный перевод Таунсенда (набор Project Gutenberg), а не немецкий подлинник, — измерено: вычитанного немецкого набора нет, а все три распознавания первого издания портят аксиомы групп I—II, каждое по-своему (--collate воспроизводит замер); немецкое издание объявлено редакцией без байтов. Перевод несёт добавленную во французском переводе «Axiom of Completeness» — единица исключена из измеряемой редакции. Мера §33.1: EXECUTABLE 12, SOURCE_ONLY 8, EXCLUDED 1, UNEXPLAINED 0; закрепление 33,2 %; 25 сценариев (одиннадцать пар порогов, свидетель по подстановке proof-графа), differential 31 вызов байтово, .lawtest 3/3, разметка 52/0 и 66/0, doctor чист. Полный отчёт — corpus/laws/de/hilbert-grundlagen/audit.ru.md.

  • Регламент (ЕС) № 576/2013 о некоммерческом перемещении домашних животных (03.09.2026): закреплён английский аутентичный текст EUR-Lex, 45 статей и пять приложений — 91 фрагмент, покрывающий срез целиком; EXECUTABLE 45/45. Формализована КАЛЕНДАРНАЯ МАШИНА акта: возраст не менее 12 недель на дату вакцинации, запрет вакцинации ранее мечения, 21 день до защитного иммунитета, 30 дней до отбора пробы и три месяца от пробы до перемещения. Порядок событий выражен процедурой §160 — попытка привить непомеченное животное остаётся попыткой без правового эффекта §164. Изъятия статей 5, 7, 8, 11, 12, 16 и 32 — дефитеры по литеральной голове (unless при норм-голове §134 молча отбрасывается по вехе §105.1); статья 44 записана фикцией deem; «полнота перечня» шести условий выражена семнадцатью замыканиями §70 с явным негативом; оценочные понятия статей 32 и 35 отданы каналу суждения §47.3; спор о завершении многодозового протокола — interpretation §152 со статусом disputed, базой взято узкое прочтение. Власть §127 государства назначения (ст. 32) с раздельными exercise и effect. Полный аудит нашёл две НЕМЫЕ нормы — записаны и не действовали. Изъятие ст. 16, записанное дефитером по общему условию, не снимало строго выводимых оснований (перемещение Сан-Марино ↔ Италия оставалось запрещённым при действующем изъятии) — переписано ВЫТЕСНЕНИЕМ статьи 10. Один дефитер прощал ЧУЖОЕ основание: невакцинированный щенок 16 недель проходил по изъятию из титрования, потому что четыре изъятия атаковали общую голову, — разведено по основаниям, и каждое основание сделано поражаемым. Оба отказа были немы для check, lower, differential и обоих ворот молчания; нашла их секция достижимости, назвавшая правило, которого не касался ни один сценарий. Добавлены 49 сценариев, шесть .lawtest, байтовый differential (117 вызовов), воспроизводимые fetch/sync и полный audit.ru.md. Найдена и обойдена законно несовместимость политики сроков §86: month_end обязателен при calendar_month и ЗАПРЕЩЁН при calendar_week, а политика одна на дело — акт, которому нужны и недели, и месяцы, был бы неисполним целиком. Возраст выражен сутками (12 недель есть ровно 84 суток, и у возраста нет конвенции start_count), календарный шаг оставлен месяцам.

  • Фома Аквинский, Summa theologiae I-II, qq. 90–97 (03.09.2026): закреплена латинская передача Corpus Thomisticum четырьмя публикациями и 319 фрагментами; 38/38 артикулов имеют полные графы §274 с неатакуемым sed contra. Формализованы точное определение закона, четыре вида и четыре эффекта, предел запрета пороков, defeater q.96 a.4 и коллизия обычая с писаным законом по §116. Добавлены 54 сценария, байтовый differential, воспроизводимый fetch/sync и полный audit.ru.md.

  • Венская конвенция о правопреемстве государств в отношении договоров (1978) (03.09.2026): полный русский текст, статьи 1–50 и Приложение, закреплён 66 фрагментами; EXECUTABLE 50/50. Четыре классификации режимов, строгий чистый лист статьи 16, власть статьи 17, презумпция статьи 34, территориальные и согласительные исключения, календарные окна и процедура Приложения. Спор continuity/succession оставлен внешнему судье с REQUIRES_JUDGMENT. Добавлены 18 сценариев, 28 .lawtest, побайтовый differential, генератор источника и полные отчёты верификации/аудита.

  • Пять стоических индемонстраблей (03.09.2026): закреплены Диоген Лаэртский VII.79—81 и Секст Эмпирик PH II.156—162 (3/3 + 7/7 секций); реляционная модель Proposition/Inference, четыре общих strict-схемы и две exactly_one-ориентации пятой, отрицательные головы II—IV и исчерпывающий constraint. Неверные большая и малая посылки различимы в why_not, темата не достраиваются. Добавлены 14 сценариев, 8 .lawtest, байтовый differential, воспроизводимые fetch/sync и полный audit.ru.md.

  • Венские конвенции о дипломатических (1961) и консульских (1963) сношениях (03.09.2026): закреплены полные русская и английская аутентичные редакции, 53 и 79 постатейных пары §194. ВКДС — ровно 30 EXECUTABLE статей, личный иммунитет статьи 31 с тремя дефитерами, раздельные отказы статьи 32, категории и вычисляемые окна статей 37–39, обязанность статьи 41. Парный срез ВККС — 8 EXECUTABLE статей и функциональный иммунитет статьи 43. Добавлены 25 сценариев и .lawtest, воспроизводимые fetch/sync-генераторы и полные audit.ru.md.

  • E-0105: ошибка терма правила-кандидата доезжает до ответа (03.09.2026). truth/why_not при NEITHER несут статус §175 (MISSING_POLICY, MISSING_INPUT, TYPE_ERROR, …) по ошибкам терма правил, которые могли бы вывести цель, и missingInputs с адресом правила; why_not — список termErrors; law_ask печатает «Право не посчитано» первой строкой. До правки причина жила только в issues документа, и без политики §86 ответ читался как «право молчит». Векторы ERR-E0105-* (4) и PAR-011 (граница A3.2: разрыв датасета через правило — молчание права, не отказ), прежние голдены не сдвинулись.

  • Оборванные цепочки корпуса, фаза 0 и первый акт (03.09.2026): закреплены байты шести актов РК, названных основанием в корпусе, но не формализованных (референдум, бухучёт, банкротство граждан, МФЦА, Алатау, разрешения) — один фетчер и один генератор фрагментов на все шесть, состав статей сверяется СПИСКОМ (акты консолидированные, нумерация не сплошная). Заведён ключ манифеста [[extra_unit]] — зеркало not_unit: две опечатки портала («Статья 26 .», «Статья 2 Законодательство») молча стоили бы по статье каждая. Пакет kz-referendum формализован целиком: EXECUTABLE 39/39, UNEXPLAINED 0, 77 сценариев, байтовый differential, четыре цели §270 на 76 мирах при падающей канарейке.

  • kz-accounting целиком (03.09.2026): второй акт волны — EXECUTABLE 29/29, UNEXPLAINED 0, 74 сценария, байтовый differential, три цели §270 на 73 мирах. Опечатка портала «Статья 26 .» объявлена irregular_headings акта: общая конвенция act_split не ослаблена, обе меры §33.1 видят 29 единиц. Цель §270 нашла пробел нормы, невидимый воротам: девять правил стандарта не читали круг действия Закона.

  • kz-personal-bankruptcy целиком (03.09.2026): третий акт — EXECUTABLE 53/53 (статей у акта 53, а не 52), UNEXPLAINED 0, 96 сценариев, байтовый differential, три цели §270 на 94 мирах. Семь изъятий статьи 45 выражены дефитерами ПОСЛЕДСТВИЯ, а не условиями перехода §160. Названа граница среза: calendar_month требует month_end, business_day его запрещает, и норма, цепляющая одно к другому, не исполняется ни при какой политике §86.

  • vat-electiones целиком (03.09.2026): канонические выборы Кодекса 1983 года — c. 119, cann. 164–183 и титул о времени cann. 200–203, EXECUTABLE 25/25, UNEXPLAINED 0, 33 сценария, 30 .lawtest, байтовый differential, три цели §270 на 33 мирах. Титул о времени взят не для полноты: без него «trimestre utile» c. 165 (девяносто текущих дней) и «intra mensem» c. 177 §2 (календарный месяц) выглядят одним сроком. Цель §270 нашла лестницу c. 119 1°, запускавшуюся БЕЗ КВОРУМА при полностью зелёных воротах. Записан класс: замыкания §70 в v1 одноуровневы, и производитель закрытого предиката, читающий негатив другого замыкания, даёт BOTH — десять гардов «nisi aliud» переведены на счёт по эмпирическому отношению. Записан и второй класс: факт, материализованный эффектом власти §127.2, невидим поражаемому слою вместе со всем, что из него выведено, — весь строгий путь TRUE_ONLY при NEITHER у поражаемого потребителя.

  • kz-aifc целиком (03.09.2026): четвёртый акт — EXECUTABLE 25/25, UNEXPLAINED 0, 70 сценариев, байтовый differential, три цели §270 на 68 мирах. Специальный правовой режим выражен презумпцией с барьером по решению владельца; лестница субсидиарности статьи 4 разведена четырьмя мирами. Записаны две ошибки моделирования: дефитер над эмпирическим фактом дела мёртв, и цель §270 через две сущности была тавтологией.

  • kz-alatau целиком (03.09.2026): пятый акт волны и самый большой из шести — EXECUTABLE 90/90, UNEXPLAINED 0, разметка 509/0 и 293/0, 256 сценариев, байтовый differential, три цели §270 на 250 мирах при падающей канарейке. Пять модулей зеркалят пять глав источника. Специальный правовой режим выражен ПРЕЗУМПЦИЕЙ С ДЕВЯТЬЮ БАРЬЕРАМИ (пункт 3 статьи 4, по правилу на изъятие), оговорка «если иное не предусмотрено» — установленным отрицанием в теле каждого; правило телеологического толкования статьи 3 объявлено границей с причиной. Ступенчатое введение в действие (статья 90) выражено нормами: даты трёх ступеней объявлены актом, роспись положений по ступеням подаётся делом — окно редакции статьи не различает. Цель §270 нашла свёртку трёх последствий трёх статей в одну голову «акт незаконен и подлежит отмене», из-за которой «исключительно по иску Генерального Прокурора» распространялось и на ненормативные, и на административные акты; головы разделены. Попутно измерена латентная ловушка компилятора: повтор when грамматика разрешает, а парсер lawc присваивает — второй when молча затирает первый, и зелёное правило шире написанного (в дереве экземпляров нет; дефект lawc против грамматики, differential его не видит по построению).

  • kz-permits целиком — волна шести актов закрыта (03.09.2026): шестой акт — EXECUTABLE 53/54 при UNEXPLAINED 0 (статья 19 ИСКЛЮЧЕНА из действующего текста и объявлена границей с причиной: от неё остался заголовок без тела), разметка 269/0 и 161/0, 146 сценариев, байтовый differential (153 вызова), три цели §270 на 141 мире при падающей канарейке. Одиннадцать модулей зеркалят одиннадцать глав. Вычислительное ядро — МОЛЧАНИЕ СОГЛАСИЕМ, стоящее дважды с одним барьером: молчание согласующего органа есть согласование выдачи (ст. 25 п. 3), молчание разрешительного органа есть выдача, а по истечении ещё пяти рабочих дней — получение (ст. 26 пп. 1 и 2); оба снимает примечание приложений 1 и 2. Три приложения (2 240 строк табличного перечня) единицами §194 не режутся и отрезаны срезом статьи 53 на подписи — отдельного стопа не заводилось. Цель §270 нашла, что правило лицензирования (ст. 28) не читало круг действия Закона, и одиннадцать изъятий пункта 2 статьи 3 проходили мимо; правило починено. Вакуумная цель починена пересмотром утверждения с записанной причиной: голова «считается полученным» считается рабочими днями и требует снимка §85, которого миры целей не несут. Линт нашёл семь сплющенных обязанностей — все выпрямлены деонтическими головами §134. Измерена граница errata E-0029: «тридцать календарных дней» считает add_business_days с единицей calendar_day, а add_calendar_period(…, 30 calendar_day) даёт TYPE_ERROR.

  • Шаблоны формализации: ревью и правка (03.09.2026): якорь на строке объявления (@source(…) rule …, 6 394 правила корпуса) разбирается общим заголовком ruleform.ANCHORS — до этого он молча выпадал из манифеста при зелёном круге (250 экземпляров с anchors = []); поле anchor_seps. deadline владеет правилом по форме головы; диспозиция находок covered (правило взято другим шаблоном, --scaffold ставит сам); --register находок снимает нулевую строку; битый манифест — FAIL-строка ворот; ворота экземпляров 9,8 → 1,8 с; генератор рецептов рабочего стола отказывает на совпадении имён прочтений (NameClash).

  • Шаблоны формализации, четвёртый круг (03.09.2026): deadline на общем парсере формы ruleform.py с переменной длительностью — 823 экземпляра в 40 пакетах (было 747 в 29); манифесты перегенерированы, deadline-exception переведён вместе с ним; находки пересчитаны (228 строк, 27 открытых).

  • Шаблоны формализации, третий круг (03.09.2026): closure (замыкания §70, 334 экземпляра в 52 пакетах) и presumption (презумпции с опровержением, 226 в 18) — контракты с примерами, самотесты трёх родов, строки в check_template_instances. Всего под шаблонами 4 419 экземпляров восьми видов.

  • Шаблоны формализации, второй круг (03.09.2026): общий разбор формы правила ruleform.py (44 615 из 47 077 правил корпуса кругом) и три движка на нём — deadline-comparison (срок сравнением дат, 195 экземпляров в 24 пакетах), obligation-window (обязанность с окном четырёх видов, 2035 в 121 пакете), priority-pair (538 в 45 пакетах); добор closed-list до 339 пунктов в 11 пакетах. Каждый — контракт с примерами и разделом отказов, самотест трёх родов, строка в check_template_instances; индекс шаблонов corpus/templates/README.ru.md.

  • WP-42 / DECISION-0095 — шаблоны формализации: экземпляры на месте, находки под храповиком (03.09.2026). Ворота verify/ci/gates/compiler/check_template_instances.py (шаг 6: самотесты четырёх движков, сверка каждого манифеста корпуса байт в байт, храповик corpus/ratchets/template-instances.json только вверх) и verify/ci/gates/sources/check_template_findings.py (шаг 18: аномалии текста и отказы формы в analysis/template-findings.json пакета, незарегистрированная — красный, закрытие только диспозицией, храповик строк/открытых). Пилот на Таможенном кодексе и охват 29 пакетов: 747 экземпляров deadline в манифестах <модуль>.lawdeadline.toml рядом с модулями, .law и CLIR не тронуты; две раскладки по обмеру (константа в посылке, однострочная запись) — 597 → 767 экземпляров кругом. Новый шаблон deadline-exception (тройка «умолчание + особый случай + исключение», 5 экземпляров, контракт с разделом отказов). Находок 134, открытых 25 — диспозиции формализатора в фазе аудита formalize-act. Рабочий стол: рецепты порождают экземпляры с тремя состояниями поля (stated | absent | disputed), исход ok | partial_match | error, дымовые и верностные дела, dated_value снят в пользу A3-параметра, closed_list → enumerated_grounds, подпись сверки честная; проба живым lawc (LAWC_PROBE=1) — 8 экземпляров, expand видит группы толкований. Этап 7 (сахар языка) не открыт.

  • kz.corpus.forest_code — Лесной кодекс РК № 477-II, закреплённая русская редакция (03.09.2026). Публикация K030000477_ (398 608 байт): 133 статьи, 21 глава, 9 разделов, все 133 адресованы фрагментами §194, text coverage 98,2 %. Одиннадцать нормативных модулей по разделам (два крупных разбиты по главам), CLIR — 840 узлов и 271 правило; глубина EXECUTABLE 60, UNEXPLAINED 0, разметка словаря 380/380 и норм 302/302. Семейство forest_code — 275/275 сценариев, differential — 275 байтово идентичных вызовов; в регрессии срабатывают ВСЕ правила пакета. Четыре упорядоченные цели §270 (срок ст. 31 → воспроизводство ст. 3 и ст. 38 → действие обязанностей ст. 38 → закрытость перечня видов ст. 88) HELD на 249 мирах регрессии, канарейка FAILED; одна цель по ходу работы оказалась ШИРЕ ТЕКСТА (утверждала, что обязанность воспроизводства действует у всякой рубки, тогда как подпункт 12 статьи 38 даёт три года) и была сужена — правился не мир, а цель. Вычислимое ядро: шесть строк «цель → диапазон» пункта 2 статьи 31 и седьмая строка части второй (пожар свыше 100 га — до 10 лет), ценз участника тендера со стажем не менее двух лет, крупный проект от 250 000 м³/год, двукратный и однократный размеры воспроизводства по группам пород с трёхлетним сроком, систематичность «два и более раза в календарный год», три месяца невнесения платы, порог ста МРП статьи 19-1, сроки проверок 10+5 и 5+3 рабочих дня, надбавка не менее 25 процентов, кратности компенсационной посадки 2/6/3, охранная зона 20 метров, колочный лес 0,1–30 га.

  • E-0106: отброс исключения при норм-голове виден lawc check (03.09.2026). Правило с норм-головой §134 и клаузой unless компилируется с ОТБРОШЕННЫМ исключением — это определённое поведение (развёртка §149/§150 требует defeat позиции, §105.1 — веха L2+), давно замороженное вектором LAY-L2-NORM-EXCEPTION-DROPPED и сопровождаемое предупреждением LDC-E1302. Дефект был в СТАДИИ: предупреждение звучало только у lower, а lawc check давал check OK и ноль диагностик — у автора акта, MCP law_draft_check и рабочего стола признака не было. Найдено при формализации Лесного кодекса: три изъятия акта были записаны и не действовали, обязанность оставалась ACTIVE в исключённом мире, и differential этого не ловит по построению — оба движка получают один CLIR без оговорки. Закрыто по §210.1 одной функцией на обе стадии (law_hir::norms::dropped_exception_diagnostics); байты понижения не сдвинулись. Вектор LAY-L2-NORM-EXCEPTION-DROPPED-CHECK (static, command: check, файл принимается) плюс канарейка у литеральной головы. Сама веха §105.1 — defeat позиции — остаётся не сделанной и названа.

  • Профиль kz-adilet-article получил стоп section-numbered (03.09.2026). Разделы Лесного кодекса набраны строчными с номером и точкой («Раздел 1. Общие положения»), и существующий стоп ^РАЗДЕЛ здесь не срабатывает ни разу: без нового ключа статья 10 утянула бы заголовок раздела 2, и так девять раз. Ключ опционален и включается только строкой манифеста — существующие экземпляры байтово те же.

  • kz.corpus.digital_code — Цифровой кодекс РК № 255-VIII, полная русская редакция (03.09.2026). Закреплены 106 статей и 106 фрагментов, 19 модулей глав и 632 строгих правила; глубина EXECUTABLE 106, UNEXPLAINED 0, разметка словаря 679/679 и норм 650/650. Семейство digital_code — 118/118 сценариев, differential — 127 идентичных вызовов. Три цели §270 по статьям 41, 43 и 60 HELD на мирах регрессии, отрицательная канарейка FAILED. Вычислимые границы включают 90 дней, возраст 16 лет, пятилетнее хранение по статье 55(7) и шестимесячное введение по статье 106.

  • kz.corpus.construction_code — Строительный кодекс РК № 253-VIII целиком как закреплённый L0-пакет (03.09.2026). Русская публикация K2600000253, 148 статей и фрагментов, 20 модулей, 96 правил; ступени введения 2027/2028 моделируются окнами effective, для рабочих сроков добавлены воспроизводимые календарные снимки этих лет. Глубина: EXECUTABLE 72 + 76 объявленных границ, UNEXPLAINED 0; разметка 246/246. Семейство регрессии — 141 сценарий с 19 парами сроковых границ, differential — 143 байтово идентичных вызова. Четыре цели §270 HELD на мирах семейства, канарейка статьи 133 падает; четыре трудных места закрыты исполнимыми capability-пробами.

  • E-0104: обязательные поля замыкания §70 видит lawc check (03.09.2026). Замыкание без snapshot/complete_as_of или с датой вместо момента отвергается LDC-E1307 на стадии check, а не только на lowering-е: одна функция closure_diagnostics на обе стадии (law-hir/src/closures.rs), по образцу норм и map. До правки check печатал check OK, lower отказывал, и закрытие оставалось объявленным, но не действующим. Векторы ERR-E0104-* (2, static). Остальные коды lowering-а на check по-прежнему не звучат — названо в errata.

  • Канал суждения §47.3: errata E-0101/E-0102/E-0103 (02–03.09.2026). Судья называется только там, где его ответ решает: правило с опровергнутым соседним конъюнктом (E-0101) и поражаемое правило, чей вывод поразил бы уже сработавший дефитер §107.3 без приоритета §106 (E-0103), JudgmentRequest больше не выставляют; поражение читается по применениям дефитеров в proof-графе и замыканию приоритетов без копии §106–§108. Вход evaluate получил нормативную схему spec/schema/query.schema.json, невалидный вопрос отвергается error-объектом QUERY_INVALID (E-0102). Векторы ERR-E0101-* (4), ERR-E0102-* (2), ERR-E0103-* (4); открыты условные приоритеты §117/§118 и §107.2 у поражённого старшего противника.

  • kz.corpus.penal_execution — Уголовно-исполнительный кодекс РК № 234-V ЗРК целиком (03.09.2026). 178 заголовков статей и Приложение закреплены фрагментами; EXECUTABLE 167 + 11 объявленных границ = 178, UNEXPLAINED ноль. 363 сценария, differential 365 вызовов байтово, семь целей §270 (DECISION-0089) HELD на мирах регрессии, канарейка падает. Автомат отбывания §160 — шесть стадий и шесть переходов без структурных дефектов, живой журнал даёт две попытки перехода без правового эффекта §164. Датированный параметр §87 — МРП, читаемый нормами голым именем в семи местах Кодекса. Разбор семи дефектов, найденных исполнением при зелёной статике, и трёх пробелов самого Кодекса — corpus/laws/kz/penal-execution/verification.ru.md.

Изменено

  • Каталог law_packages под query-фильтром печатает каталожную строку, а не карточку акта (03.09.2026). Карточка детали — полный титул (у актов корпуса это эссе до 3 КБ), издатель, аннотация и счётчики акта — печаталась на КАЖДЫЙ совпавший акт, и потому две трети ответа на вопрос «в каких актах про это говорят» росли с числом совпавших актов, то есть с составом корпуса, а не с числом совпадений. Замер на query="препятствие" (15 актов, 30 совпавших строк): 20 413 Б при 6 642 Б самих совпадений; после сжатия рамки — 13 022 Б при тех же 6 642 Б, рамка акта 300 Б против 860 Б. Структура аннотацию под фильтром уже не несла — расхождение с текстом снято в пользу структуры. Деталь одного акта и обзор не изменились. Порог контракта переписан тем, что он утверждает: прежние «< 20 000 Б» покраснели от роста корпуса при неизменившемся ответе, теперь сверяется РАМКА — фиксированная преамбула плюс каталожная строка на совпавший акт (2 500 + 400 × актов); такой порог не переезжает от роста корпуса, а возврат карточки ловит сразу.
  • Голден «не формализованная область» выбирается по отсутствию нормативного текста, а не по далёкости темы (03.09.2026). Запрос про промысловую квоту в Беринговом море упал на kz-permits — тем же порядком, каким до него упал «уволить беременную» на ТК РК: оба выбирались как далёкая ТЕМА и оба назвали занятие, которое кто-то РЕГУЛИРУЕТ, так что приезд акта был вопросом времени. Новый признак отбора отсеивает и соседние соблазны: игры и спорт лежат в корпусе сводами правил, еда и одежда — предписаниями, техника — стандартами.
  • Корпус: десять пробелов формализации в срочных правилах пяти актов РК закрыты гейтами (03.09.2026). Разбор 27 открытых аномалий шаблона deadline: точки отсчёта ст. 13, 14-1, 26-1 антикоррупционного закона, п. 17 ст. 19 и п. 9 ст. 53 закона о банках, ст. 19–20 закона о правовых актах (рекомендации ст. 20 — свой предикат, семь исключений then not), п. 20 реестра недобросовестных, п. 569 правил закупок (тройка deadline-exception). Все правила остались экземплярами шаблона; открытых строк по пяти пакетам 0, регрессия и KZ-differential семейств зелёные.
  • Корпус: группы прочтений §152 для ГПК ст. 150 ч. 1 и УИК ст. 171 (03.09.2026). Совпадение примирения и досудебного протокола и совокупность преступлений разных категорий — два места, где текст не упорядочивает сроки; прочтения выбираются делом, второе прочтение УИК — канал суждения §47.3. Строки находок закрыты disputed_reading.
  • Корпус: пятнадцать аномалий сроков шести актов РК закрыты диспозицией «законная структура» (03.09.2026). Пояснение к каждой строке называет, чем посылки взаимно исключают; правила не менялись.
  • Корпус: четырнадцать строк split_deadlines по актам РК закрыты «законной структурой» (03.09.2026). Под особой головой везде другая обязанность, другой путь или служебная дата; правила не менялись.
  • Корпус: ст. 53 закона о Конституционном Суде — специальные сроки вытесняют общий (03.09.2026). Четыре исключения с приоритетом; до этого обращение гражданина получало месяц и три месяца разом. Строка ст. 14 закона о правовых актах закрыта «законной структурой».
  • Корпус: восемнадцать отказов формы шаблона deadline по актам РК закрыты диспозициями (03.09.2026). Одиннадцать — законная структура (отрицание, поражение, unless, граница интервала), семь — пробел формы: длительность именованной константой пакета. Открытых строк по актам РК нет.
  • Форма deadline: именованная константа пакета типа Quantity принимается как длительность (03.09.2026). Разрешение по объявлению из CLIR, канарейка на обе стороны; +8 экземпляров в 4 пакетах, четыре новые строки находок закрыты законной структурой.
  • zan.arxo.io: страница «Правовой мониторинг», партия 1 из трёх разобранных строк (03.09.2026). Генератор build_monitoring.py из реестров находок и живого оракула, словарь ru/kk, ворота свежести и состава; перегнаны «Государству» и демо marriage.
  • Витрины на главной arxo.io (03.09.2026): секция «06 · In public» — состав читается из реестра apps/demos/manifest.json (живой домен → карточка) плюс zan; тексты — словарь showcase.cards; живой домен без карточки или карточка без витрины роняют сборку, отложенная витрина называется в SHOWCASE_HOLD с причиной (Fannie Mae — решение владельца). Карточка «For lawyers and developers» ведёт на MCP, страница MCP и «О проекте» ссылаются на zan.arxo.io и fiqh.arxo.io.
  • Голос лендинга arxo.io (03.09.2026, решение владельца): механизм не называется — со всех четырёх страниц сняты две реализации, доказательства, хэши, «байт в байт», векторы, errata и заморозка семантики; остались эффекты: «те же факты — тот же ответ», статьи рядом с ответом, честная остановка у судьи. Переписаны главная, «О проекте» (блок самоуправления с числами журнала заменён принципами), MCP (перечень 21 инструмента свёрнут до трёх вызовов), Calculemus, подписи живого прогона и кейсов. Второе мнение — Codex; сборка зелёная, запрещённых слов в видимом тексте нет.

Удалено

  • Русская версия лендинга arxo.io (apps/landing, решение владельца 03.09.2026: документация переходит на английский). Сняты src/pages/ru/, русские словари (i18n/ui.ts, i18n/home.ts), русские данные кейсов и корпуса, переключатель языка, hreflang-альтернативы и og-ru.png; /ru/* перенаправляется на английские страницы (vercel.json). Русскоязычный вход проекта — витрина zan.arxo.io (ru/kk).
  • Страница /product/ лендинга (03.09.2026): снята вместе со стилями и ссылками в шапке и подвале; /product/ перенаправляется на главную, ссылка из FAQ страницы MCP ведёт в документацию.
  • Ссылки на атлас и документацию с лендинга (03.09.2026): сняты из шапки, подвала, ленты корпуса, страниц «About», «Calculemus» и MCP; событие аналитики outbound и экспорты atlasUrl/docsUrl в sites.ts удалены. Единственная внешняя ссылка лендинга — zan.arxo.io.

Исправлено

  • Демо «Океания» после E-0095: правила руководства заякорены в обеих редакциях. С проекцией §92.3 внутри evaluate правила, заякоренные только на апрельскую редакцию (окно до 01.06.1984), исключались из дел, датированных 15.06, и три сценария из двенадцати давали NEITHER/FALSE_ONLY вместо BOTH при байтовом differential 77/77. Июньская редакция переиздаёт параграфы руководства без изменений (те же хэши), добавлен параграф об архиве в обеих редакциях, шесть правил несут парный якорь §194. Узлов 51 → 56, ожидания сценариев не тронуты; демо 12/12, check_demo и check_demo_differential OK.

Добавлено

  • Трассировка вызова MCP (DECISION-0094): в записи журнала — профиль, id вызова ($request_id edge → MCP_CALL_ID → X-Law-Call-Id), ожидание лока, стадии evaluate/whynot/verbalize, снимок каталога и источник индекса, движок, нейронный лег, трейсбек внутренней ошибки (law_mcp/trace.py); Grafana над VictoriaLogs с провиженным дашбордом (deploy/grafana/), nginx пишет $request_id в access-log и бэкенду. Фаза 2: спаны OTLP тех же стадий в VictoriaTraces (law_mcp/otel.py, stdlib, фоновая очередь, тел нет; traceparent клиента — родитель; LAW_MCP_OTLP_URL drop-in-ом юнита), Jaeger-источник в Grafana.

  • Конституционная реформа 05.06.2026: пять актов № 296–300-VIII (02.09.2026). Пять самостоятельных пакетов одной публикации — kz.corpus.president, kz.corpus.kurultai, kz.corpus.halyq_kenesi, kz.corpus.capital_status, kz.corpus.administrative_territorial; 166 статей, закреплена русская ветвь ИПС «Әділет» (97,1–98,3 % байтов). Глубина §33.1: EXECUTABLE 50/37/21/16/21, UNEXPLAINED 0 у всех пяти; 294 сценария, differential 300 вызовов байтово; цели §270 — пятнадцать целей HELD на мирах регрессии, пять канареек падают. Один фетчер и один генератор фрагментов на весь пакет реформы, оба впаяны в run_all.sh; числа статей сверяются двумя независимыми счётчиками. Измерено: константа без assert роняет восемь порогов молча; not над поражённой презумпцией не срабатывает никогда; ЭФФЕКТ ВЛАСТИ §127 не читается телом правила; два поражаемых производителя одной головы дают NEITHER; обобщение перечня оставляет статьи SOURCE_ONLY при зелёном check. Поправка к постановке задачи из текста: направлений формирования Қазақстан Халық Кеңесі три по сорок два, а не четыре.

  • aba/pecs — автомат PECS I–VI, четвёртое звено и замок стека aba/ (02.09.2026). Новый пакет aba.pecs: авторское изложение структуры последовательности в двух редакциях-языках (15 разделов) при ЛИЦЕНЗИОННОЙ границе — руководство Bondy и Frost в пакет не входит ни байтами, ни формулировками; онтология PecsProgression/Trainer/PhaseAttempt, шесть этапов с порядком по номеру, замыкание §70 над ПОПЫТКОЙ (унарный предмет), потолок поддержки через барьер §111 с мостом обоснованности, автомат PecsSequence из шести стадий и пяти переходов, две achievement-обязанности, два прочтения §152. Семейство 46/46, .lawtest 46/46, differential 46 байтово, цели §270 4/4 HELD на 26 мирах с падающей канарейкой, журнал process-run с §164 и §140, полный оверлей §218 kk (86 ключей). Измерено: §160 порождает стадию с тем же StableId, что у одноимённой словарной константы, — A3 StableId collision на lowering при зелёном check; цель о потолке переписана на обратное включение вместе с прозой раздела 10. Разбор — STATUS.md пакета. Вертикальный стек семьи aba/ из четырёх пакетов закрыт целиком.

  • aba/program-evidence — доказательность программы обучения, третье звено стека aba/ (02.09.2026). Новый пакет aba.program_evidence: авторское изложение в двух редакциях-языках (16 разделов), онтология Program/ ProgramLead/ProgramGoal, два собственных перечня (качество доказательства и вердикт покрытия) как pub entity + pub const, закрытость операционального критерия из трёх частей первой посылкой всех вердиктов, четыре счёта по эмпирике, три замыкания §70 (одно — прямо над эмпирическим предикатом), key(g, s) §45.1 у observation_quality, три A3-параметра, две achievement-обязанности, два прочтения §152. Семейство 59/59, .lawtest 60/60, differential 60 байтово, цели §270 3/3 HELD на 30 мирах с падающей канарейкой, полный оверлей §218 kk (94 ключа). Измерено: над goal_novel замыкания §70 НЕТ намеренно, и цель о новизне на мире без дат введения даёт VACUOUS, а не FAILED — пустота домена есть точное отражение изложения; статический аудит между фазами 3 и 4 нашёл два мёртвых символа, оба оживлены правкой нормы. Разбор — STATUS.md пакета.

  • aba/repertoire — репертуар карточек и навыков, второе звено стека aba/ (02.09.2026). Новый пакет aba.repertoire: авторское изложение в двух редакциях-языках (14 разделов), онтология Repertoire/RepertoireKeeper/ Combination, собственный перечень категорий (pub entity + pub const), импорт типов aba.skill_vocabulary по pkg::T при собственных входах дела, key(c) §45.1 у card_category, замыкание §70 над построимостью, два A3-параметра, две achievement-обязанности, два прочтения §152. Семейство aba_repertoire 52/52, .lawtest 52/52, differential 52 байтово, цели §270 4/4 HELD на 29 мирах с падающей канарейкой, полный оверлей §218 kk (80 ключей). Измерено: счёт по выводимому предикату прошёл дверью барьера §111 (monotone(P)) — материализованных журналом чисел у пакета нет ни одного; цель о разделе 7 переписана с равенства на покрытие после падения на мире конфликта ключа — правила не тронуты, разбор в STATUS.md пакета.

  • kz.corpus.fno: формы налоговой отчётности и Правила их представления (приказ Минфина РК от 12.11.2025 № 695, в силе с 01.01.2026; 02.09.2026). Подзаконный уровень Налогового кодекса, на который тот ссылается дважды — п. 2 ст. 113 (формы) и часть третья п. 3 ст. 115 (порядок представления). Тридцать приложений, 937 фрагментов §194, 289 правил, 46 сценариев, differential байтовый (118 вызовов). Мера §33.1: EXECUTABLE 29 из 30, SOURCE_ONLY 1, UNEXPLAINED 0.

    • Новая единица деления — ПРИЛОЖЕНИЕ (конвенция prilozhenie в обоих реестрах меры плюс две таблицы имён boundaries.py и ветвь LOCATOR_RE): собственных статей у приказа ноль, а нумерация глав и пунктов перезапускается в каждом приложении — пункт «1.» есть у двадцати девяти из тридцати, и конвенция point свела бы их в один.
    • Срок каждой из двадцати восьми ФНО ВЫЧИСЛЯЕТСЯ из дня окончания налогового периода, а не приходит делом. Наивная запись невозможна: policy.month_end обязателен календарным единицам §86 и запрещён дневным (E-0029), политика одна на дело, — обе половины отказа воспроизведены пробой. Месяц шагается дневным термом через границу месяца, число месяца — тем же термом от последнего дня предыдущего.
    • Шага НАЗАД по датам §84.2 нет вовсе, и это найдено исполнением: ось «20 апреля ОТЧЁТНОГО года» сначала отсчитывалась от дня перед периодом и не сработала на пяти сроках. Пункт 36 приложения 29 («не позднее 31 декабря года, предшествующего году представления») объявлен границей ЯЗЫКА — та же граница, которую за собой записал Бюджетный кодекс РК.
    • Арифметика форм выведена целиком, включая приложения 7 (150.00), 13 (400.00) и 17 (590.00): 474 правила, из них 312 считают строку или графу. Три нормы оказались ОБЩИМИ для нескольких приложений (фиксированные активы по четырём группам — 2, 7 и 9; графы J и K о контролируемых иностранных компаниях — 2, 6 и 9; расчётный показатель графы F — 2 и 7) и записаны по одному разу с якорями на все повторы. Контракт «формула читает ЗАПОЛНЕННОЕ и пишет ВЫЧИСЛЕННОЕ» — не стиль, а условие стратифицируемости (LDC-E4102 §110/§191); «если разница отрицательна — ноль» записано вторым правилом с гардом, а не свёрнуто в max; формулы со скобками не раскрываются, потому что считают две разные ставки.
    • Ворота check_fno_xml (рендер формы 910.00 не вычисляет значений; адреса отображения сверены с нормами пакета) и подкаталог xml-map/ в закрытом списке конвенции раскладки.
  • Анкета нормы в рабочем столе (apps/constructor, перспектива «Текст», 02.09.2026). Ответы юриста на вопросы о статье — что делает фраза, о ком, при каком условии, кто решает, что факт установлен, можно ли отменить вывод, считать ли отсутствие в деле отсутствием, с какой даты — порождают текст .law генератором @law/forms (generateNorm, чистая функция, 17 тестов); порождённое проходит check, lower и сверку байтов §208 с оракулом до добавления в пакет и показывается словами вербализатором. Каждая порождаемая форма проверена компилятором на копии pinning-example: деонтической голове обязательно имя, закрытию §70 — snapshot, якорь — @source(…), фрагмент — in <редакция>. Заготовка из спана переписана на ту же форму (прежняя писала anchors […] и in_edition, которых в языке нет).

  • Подготовленная программа: анализы только по IR считаются один раз на объект (DECISION-0093, 02.09.2026). Профиль оракула на kz-income-tax (18,8 МБ, 9790 узлов) показал 2,94 с процессорного времени на ПУСТОЕ дело, из них ~90 % — разыменование констант §54 обходом всего IR, ранги и страты строгого слоя, анализ агрегатов, установка замыканий §70, хвосты proof-id, хэши 1657 фрагментов §194 — величины, не зависящие ни от дела, ни от запроса и пересчитывавшиеся на каждом вызове (тот же класс, что закрыл DECISION-0054 для programHash). Заведён engines/lawref/lawref/evaluator/prepared.py: вид программы (ProgramView) по ключу «дата права × прочтения как поданы × константы дела» в записи program_derived, LRU на 16, плановая сверка мутации на степенях двойки; установка слоёв вынесена в prepare_strict, prepare_defeasible, prepare_closures, таблицы TermEnv и индекс сигнатур — в производные вида; issues проходов записаны и воспроизводятся в прежнем порядке и числе. Разыменование §54 стало copy-on-write (вид держит ссылки на узлы IR, а не вторую программу), свободные переменные конъюнктов кэшируются по объекту (solver.free_vars). Замер после: пустое дело 2,94 → 0,13 с, дело регрессии kz-vve-pravila 3,10 → 1,28 с, синтетическая таблица 1000 строк 0,154 → 0,096 с. Зеркало для lawc — PreparedProgram, PreparedView, ViewCache в law-eval::engine с кэшем в хэндле liblaw_ffi (хэндл: 0,54–0,85 → 0,06–0,07 с на то же дело); параллельная сессия дописала поверх Ф5 типизированного IR (скомпилированные строгие правила в виде, eval-serve на кэше). Канарейки в selftest.py: байты при непустой таблице констант, copy-on-write, мутация копии узла падает сверкой вида. Полная регрессия и полный differential не гонялись по решению владельца: selftest, векторы 482, ворота FFI-differential, регрессия и KZ-differential --only income_tax/vve_pravila/osms/ terminkom_zantanu. Не ускорилось намеренно: дело со 100 кодами на таблице в 1000 строк — цена «строки × входы» гарда равенства, следующий шаг — проталкивание гарда в индекс by_arg.

  • Полная исполнимая цепочка континуитета РФ 1922–2020 (02.09.2026). Все 13 пакетов плана получили articles.json, пакетные runners, парные сценарии, lawtest, храповики глубины/разметки и отчёты аудита. Финальный su.constitution_1977_secession: 174/174 EXECUTABLE, 100 % из 150 179 байт публикации, 347 правил, 93 norm-template, 10 constraint, 714/714 сценариев (включая пары CLEAN/VIOLATED) и 714 байтовых differential-вызовов; закрытые перечни и компетенции разложены по членам, сроки и пороги сохранены числами. Audit-world пересобран до 2 674 узлов и остаётся 19/19, lawtest 5/5; главный ответ неизменен — NEITHER / REQUIRES_JUDGMENT с единственным duma_resolution_has_legal_force. chain.lawread.md перевербализован детерминированно. По решению владельца полный текст Конституции РФ не включался: её пакет остаётся согласованной исполнимой выдержкой.

  • Профили корпуса MCP (DECISION-0092): LAW_MCP_PROFILE=kz|islam режет corpus/clir на процесс — селектор по префиксам ключей каталога плюс автоматическое замыкание по импортам §23 (apps/mcp/law_mcp/profile.py, apps/mcp/profiles/*.json); пинятся только заимствования через границу (borrowed), запись — check_mcp_profiles.py --register. Имя сервера, юрисдикция ответов, шапка инструкций и календарь deadline — у профиля; умолчание all байтово равно прежнему серверу. Ворота verify/ci/gates/hosts/check_mcp_profiles.py (шаг 15/52): замкнутость, граница, живость селекторов, непересечение; канарейка 12 подделок. Публикация — путями /mcp/kz, /mcp/islam на mcp.arxo.io: экземпляры по списку INSTANCES в deploy.sh, профиль — drop-in юнита, свой upstream в nginx, нейроиндекс на профиль, смок джобы по трём путям. Требует разового deploy.sh install от root на хосте. Грани инструментов (03.09.2026): поле facet у инструментов реестра, словарь profile.FACETS, секция facets профиля (allow / deny с причиной, полнота держится парсером и воротами); публичные срезы kz и islam отвергают drafting и adversarial — 11 инструментов из 21, отвергнутый вызов отвечает отказом с причиной.

  • **Закон РК «О языках в Республике Казахстан» № 151-I — оборванная цепь

  • Таблица расхождений сравнительной цепи опубликована (Ф8 плана docs/plans/domains/IUS-PRIVATUM-CHAIN-PLAN.ru.md, 02.09.2026) — план DECISION-0091 реализован целиком. Инструмент verify/ci/tools/casus_matrix.py записывает ответы оракула на реестр казусов в apps/registry/index/casus/ (зал + файл на казус: вердикт, статус, resultHash/programHash, ожидание реестра с якорем, semanticHash каждого пакета мира звена); ворота verify/ci/gates/release/check_casus_index.py (--canary) держат свежесть якорями против corpus/clir/ и состав против реестра и LINK_ORDER; атлас получил страницу casus/ «Один казус, шесть эпох» (оба языка, таблица 31 × 6 с якорями на фрагменты, заметки по звеньям), публикуемую из закоммиченного индекса.

    basis → power терминологической комиссии связана носителем (02.09.2026).** Новый пакет kz.corpus.languages: 6 глав, 38 статей, обе языковые ветви «Әділет» закреплены (Z970000151_; казахская — как опора меток §218 для 58 казахских пакетов корпуса, фрагментов не несёт, решение записано строкой в 09-sources.law). Мера §33.1 — EXECUTABLE 34 / SOURCE_ONLY 1 (граница с причиной) / EXCLUDED 3, UNEXPLAINED 0; текстовое покрытие 98,9 %. Семейство languages 78/78, differential 79 вызовов байтово, .lawtest §267 45 из 79, цели §270 8/8 HELD на 65 мирах регрессии при TELEOLOGICAL-UNIQUE и канарейке, падающей 37 контрпримерами. Скрипты fetch_languages_text.py / sync_languages_fragments.py с --check. Ради чего заведён: corpus/laws/kz/terminkom/01-sources.law цитирует «подпункт 5-1) статьи 25 Закона “О языках”» как основание Положения о Республиканской терминологической комиссии, а носителя власти в корпусе не было — цепочка обрывалась на ссылке; теперь второй её конец есть (PolnomochieObespechitTerminologicheskuyuKomissiyu, сцены 31 и 32). Измерено четыре класса молчания: (а) портал размечает исключение статьи ДВУМЯ способами — из трёх исключённых статей (24-1, 25-4, 26) сноска уцелела в закреплённых байтах ровно у одной, у двух ушла вместе с аппаратом публикации, и «исключена» стало неотличимо от «извлечение потеряло текст»; различие взято из сырого html и закрыто счётчиком EXCLUDED_EMPTY/EXCLUDED_INLINE в фетчере; (б) власть §127, чей exercise называет собственный effect, мертва — эффект материализуется от осуществления, а осуществлением объявлялся сам эффект: при зелёном check пятнадцать полномочий не давали НИЧЕГО ни на одном деле (сцены 31, 33, 34 показывали NEITHER), лечится разделением на эмпирическое действие органа и институциональное последствие; (в) эмиссия .lawtest §267 давала ноль из 77 сцен тремя причинами подряд — снимок календаря в options §168.2 у всех дел, ось extends профиля §89.1 у 50 дел без сроков, слияние узлов календаря в мир КАЖДОЙ сцены у 43; после трёх сужений 43 теста, ответы не изменились; (г) цель шире собственного домена — свойство «активна обязанность ответить» над доменом «ответ уже отвечает требованию» дало FAILED на двух мирах регрессии и было право: обязанность там SATISFIED. Ошибка в цели, не в праве. Границы, названные вслух: фиксированные календарные даты пункта 2 статьи 25-6 (терма конструирования даты из года, месяца и числа в §57–§58 нет) и запрет §130, не получающий VIOLATED в v1 (сцена 67 записана падающей при отступлении границы).

  • aba/skill-vocabulary — базовый словарь навыков и записей, первое звено вертикального стека семьи aba/ (02.09.2026). Новый пакет aba.skill_vocabulary: авторское изложение в двух редакциях-языках (14 разделов, 28 фрагментов), онтология Learner/Recorder/Skill/SkillTarget/Card/ Session/Record, семантика записи из пяти членов (pub entity + pub const, чтобы СЛОВА пересекали границу пакета), четыре замыкания §70, три A3-параметра, две achievement-обязанности, два прочтения §152 без группы §155, key(r) §45.1 у record_semantics. Семейство aba_skill_vocabulary 53/53, .lawtest 53/53, differential 53 байтово, цели §270 4/4 HELD на 31 мире с падающей канарейкой, полный оверлей §218 kk (112 ключей). Измерено: замыкания §70 одноуровневы в v1 — производитель закрытого предиката, читающий негатив ДРУГОГО замыкания, даёт BOTH (18 строк воспроизведения); квалифицировано как граница v1 (§191 отложена в WP-11/WP-16) и обойдено перестройкой, разбор в STATUS.md пакета.

  • **Налоговый кодекс РК, Очередь 4 содержательной формализации

  • BGB 1896 — шестое звено сравнительной цепи (Ф7 плана docs/plans/domains/IUS-PRIVATUM-CHAIN-PLAN.ru.md, 02.09.2026). Новый пакет de.bgb_1896 (первая редакция, четыре книги немецкой Викитеки закреплены, 1760 параграфов de_paragraph, охват — 37 параграфов восьми блоков списком SCOPE, 73 нормы, мост в словарь doctrine.ius_privatum в обе стороны); скрипты fetch_bgb_1896_text.py / sync_bgb_1896_fragments.py и их --check в run_all.sh; звено bgb в раннере ius_privatum_casus и 31 клетка матрицы (29 с исходом, 2 skipped — res iudicata в ZPO). Семейство 204/204, матрица 12 × 6: 173 клетки с исходом, 13 skipped. Измерено: § 932 переворачивает казус 1 (четвёртое звено против Рима); 7г — FALSE давностью ПРИТЯЗАНИЯ (§§ 194, 195, 198, 222), а не приобретением; § 222 Abs. 2 даёт голое право словаря буквально; деликты — полная тройка (§§ 831–833) на поражаемых презумпциях с освобождением.

    (kz.corpus.incometax, 02.09.2026).** Восемь разделов Кодексов 2025 и 2017 годов углублены симметричными формулами, порогами, ставками, закрытыми перечнями и сроками с явными окнами редакций. Стабовая доля пакета снижена с 98 % до 75 % (1606/2124), отдельно по каждому Кодексу — также 75 %; новый Кодекс остаётся 848/848 EXECUTABLE, старый — 799/809. Семь целей принципов статей 25–32 HELD на двух невакуозных мирах, канарейка даёт контрпримеры, impact --goals — GOALS-PRESERVED. Десять датированных A3-наборов задают общие окна деклараций и платежей; они выводятся нормами и проверяются внутри деонтических позиций. Полное Учебный kz.corpus.stateduty снят решением владельца, его шесть сценариев перенесены в income_tax; при переносе льгота статьи 669 сужена до приобретения гражданства. Буквальная коллизия двух строк статьи 331 при десяти работниках сохранена без приоритета. Core 0.1 не изменялся.

  • Исполнимая конституционная выдержка РФ для цепочки континуитета (ru.constitution_continuity, 02.09.2026). По прямому исключению владельца полный текст Конституции не закреплялся: охват ограничен статьями 15, 67.1, 105, 106 и 125. Все пять статей EXECUTABLE, обе публикации покрыты на 100 %, 21 правило и два norm-template имеют 44/44 сценария и 44 байтово тождественных differential-вызова, .lawtest 1/1. Публичные source-assertions сохранены для совместимости: audit-world 19/19 и главный NEITHER / REQUIRES_JUDGMENT не изменились. Отчёт — corpus/laws/ru/constitution-continuity/audit.ru.md.

  • **Полная исполнимая формализация Закона СССР от 03.04.1990 о порядке

  • Code civil 1804 — пятое звено сравнительной цепи (Ф6 плана docs/plans/domains/IUS-PRIVATUM-CHAIN-PLAN.ru.md, 02.09.2026). Новый пакет fr.code_civil_1804 (первое издание, десять титулов Викитеки закреплены, 869 статей fr_article, охват 43 статьи, 65 правил, мост в обе стороны); семейство ius_privatum_casus 175/175. Измерено: «possession vaut titre» переворачивает казус 1 и снимает срок с движимых вещей, полная тройка ответственности за других (1384–1385), заём реален (1892), натуральное обязательство после давности (1235).

  • Маджалла — четвёртое звено сравнительной цепи (Ф5 плана docs/plans/domains/IUS-PRIVATUM-CHAIN-PLAN.ru.md, 02.09.2026). Срез osm.mejelle расширен до 191 статьи (продажа чужого, вадиа, гасб и итлаф, дееспособность, ибра, дава и давность, сила решения), семь модулей и мост в обе стороны; семейство mejelle 60/60, ius_privatum_casus 144/144. Измерено: добросовестность покупателя своду неизвестна, приобретательной давности нет — только процессуальная (ст. 1660) при неугасающем праве (ст. 1674), ибра гасит право вместе с иском.

  • Институции Юстиниана — третье звено сравнительной цепи (Ф4 плана docs/plans/domains/IUS-PRIVATUM-CHAIN-PLAN.ru.md, 02.09.2026). Новый пакет rom.corpus.institutiones_iustiniani (акт с силой, historical_monument; четыре книги издания Крюгера закреплены по Roman Law Library, 824 единицы новой конвенции inst_paragraph в трёх реестрах, охват списком 34 параграфов, 80 правил, мост в обе стороны); ось «370 лет внутри Рима» измерена казусами: res mancipi исчезли, usucapio удлинена, ноксальные иски только за рабов, pauperies названа, срок цивильных исков — граница (число вне акта, пять клеток skipped). Семейство ius_privatum_casus 117/117.

    выхода союзной республики (su.secession_law_1990, 02.09.2026).** Все 20 статей имеют исполнимые правила: референдум и его пороги, автономии, комиссии и наблюдение, календарные окна, переходный период, урегулирование имущества и обязательств, права граждан, передача дел и заключённых, подтверждение результата и итоговое решение Съезда. Закрепление — 35 167 из 35 167 байт и 21 фрагмент; глубина EXECUTABLE 20, UNEXPLAINED 0; 84 правила покрыты парами применения/неприменения, регрессия 186/186 и differential 186 вызовов байтово, .lawtest 1/1. Отчёт — corpus/laws/su/secession-law-1990/audit.ru.md.

  • foss.debian_constitution: приложение A.5 конституции Debian (02.09.2026). Шестой носитель словаря doctrine.vote_methods и первый без правопорядка (jurisdiction "none"). Бриф разошёлся с текстом дважды: приложения A.6 нет вовсе (подсчёт — A.5), а метод — Schwartz Sequential Dropping, не «Шульце». Нумерация пунктов восстановлена при извлечении собственным инструментом (номер печатает браузер, а конституция ссылается на него сама); единица §33.1 — заголовок раздела, конвенция debian_constitution в обоих реестрах, 38 единиц, охват — список из одной. ФАЗА 1 НАШЛА БЛОКЕР ЯДРА: шаги A.5.5–A.5.8 не выразимы — плоская положительная рекурсия запрещена (LDC-E4102), значит замыкание попадает в monotone-цикл, а всякий агрегат над предикатом такого цикла срабатывает до насыщения и обратно не берётся; гард полноты требует эмпирического знаменателя, которого у замыкания нет. Взятое кончается A.5.4 и даёт полный вход кондорсетовского подсчёта: V(A,B), оба отсева (включая сверхбольшинство S:1) и таблица попарных поражений. Регрессия 13/13, differential 44 вызова байтово, цели 3/3 HELD на 12 мирах при падающей канарейке, UNEXPLAINED 0; loophole — FOUND за один шаг на ИСЧЕРПАННОМ обходе: назначить вариант вариантом по умолчанию значит сделать его неуязвимым для обоих отсевов.

  • us.me.ranked_choice: 21-A M.R.S. § 723-A (02.09.2026). Пятый носитель словаря doctrine.vote_methods — instant-runoff. Три отказа одного класса: агрегат в голове считается при первом срабатывании подстановки, и счёты раунда, состав продолжающих и ветвь исчерпания выходили нулями при верных посылках; ноль в числе продолжающих держался особенно тихо — сверка «ноль сравнений равен нулю продолжающих» проходила, и удаление последнего места не происходило вовсе. Лекарство переносимо: гард полноты есть равенство двух счётов в ТЕЛЕ правила. Определение 1(D) взято целиком: овервот — счёт кандидатов на ранге, пропущенный ранг сам ограничен сверху отметкой; обе ветви привязаны к номеру ранга, а не к раунду, и потому остаются в нулевой страте. Жребий пункта 3 — канал суждения §47.3. LOCATOR_RE научен читать section/723-A (только верхний регистр: article-6-c Устава МВТ — подпункт, а не единица). Регрессия 16/16, differential 41 вызов байтово, цели 3/3 HELD на 11 мирах при падающей канарейке, UNEXPLAINED 0; loophole — FOUND за один шаг в знаменателе правила пятидесяти процентов.

  • us.code.apportionment: 2 U.S.C. § 2a (02.09.2026). Третий носитель словаря doctrine.vote_methods. Метод равных пропорций НАЗВАН, но не определён: формулы в секции нет, а свидетеля с ней закрепить не удалось — census.gov, crsreports.congress.gov и gao.gov отвечают 403 и вне браузера, и в нём, а официальный скан U.S. Reports разрушает знак корня и номера сносок в текстовом слое. Поэтому числа приходят ведомостью Президента как ВХОД, а секция их проверяет двумя ограничениями §93.1 (ни одному штату менее одного члена; сумма равна тогда существующему числу — числа 435 в секции нет ни разу). Сумма ведомости — свёртка по её строкам через supported. Взято также: пятнадцатидневная обязанность Клерка, её переход к Сержанту замыканием §70 и пять ветвей пункта (c). Заведена единица деления us_code_section в обоих реестрах; локатор с буквенным суффиксом читается теперь в любом регистре. Регрессия 15/15, differential 24 вызова байтово, цели HELD на 12 мирах при падающей канарейке, UNEXPLAINED 0.

  • Полная формализация международных правил қазақ күресі UWW в двух датированных редакциях (kz.corpus.qazaq_kuresi, 02.09.2026). Редакции 2023 (43 статьи) и 2026 (42) закреплены извлечением из PDF издателя, байтовое покрытие 99,4 % и 99,5 %, EXECUTABLE 42/43 и 41/42, UNEXPLAINED 0; 288 правил, 245 фактов весовых полос с якорями на редакцию, 8 каналов суждения, 7 прочтений в 3 группах; 123 сценария и differential 123/123, .lawtest 12/12. Расхождения редакций (ничья по очкам, БЕЛДЕСУ, допуск 500 г, сетка весов, пороги пассивности, порог лицензии) выводятся проекцией §31 на дату дела; противоречия внутри редакций (очки за БЕЛДЕСУ и за три замечания в ст. 7.1, превосходство разницей против суммы, подиум) — группами прочтений. Заведены конвенция единицы en_article_dotted (act_split + check_source_pinning, с приведением в uncovered.py) и правопорядок UWW. Отчёт — corpus/laws/kz/qazaq-kuresi/audit.ru.md.

  • Национальный стандарт финансовой отчетности РК (kz.corpus.nsfo, 02.09.2026). Приказ Министра финансов от 31.01.2013 № 50 — национальная альтернатива МСФО для субъектов малого предпринимательства; четвёртый бухгалтерский акт корпуса и первый из них НЕ международный. Закреплён сам Стандарт без утвердившего его приказа: пункты 1—4 есть у обоих документов, и конвенция point (первое вхождение номера) адресовала бы article/1 пункту приказа — тот же довод, что у kz/srednyaya-zarplata. Живая сверка байтов ВЫПОЛНЕНА (скачанная заново страница «Әділет» байтово равна закреплённой копии), в отличие от трёх соседей по своду за AWS WAF; отсюда verifiedAgainstSource = true — единственный среди четырёх. Новой единицы деления не заведено впервые за четыре акта: point переиспользована и даёт ряд 1…88 без пропусков и дублей. Фрагменты порождает ДВИЖОК ШАБЛОНА pinning (профиль kz-adilet-point, дополнен двумя опциональными стопами — paragraph и appendix-numbered; существующий экземпляр байтово тот же), а не рукописная таблица срезов. Охват объявлен по ВСЕМ 88 пунктам: EXECUTABLE 48, SOURCE_ONLY 40 — каждый с собственной причиной по своему тексту, UNEXPLAINED 0. Девять каналов суждения §47.3 с полномочием Rukovodstvo, взятым из пункта 76 самого акта; порогов не записано ни одного. Двадцать один констрейнт §93.3, семь дефитеров §116, процедура §160 с журналом и попыткой без правового эффекта §164. Регрессия 126/126, KZ-differential 133 вызова байтово, §267 13/13 тестов и 6/6 свойств §270, lawref goals 6 целей на 111 мирах — HELD. Новые генераторы: fetch_nsfo_text.py (впаян в run_all.sh) и sync_nsfo_fragments.py (сверяется общим шагом lawgen.py pinning --all --check). Замерено и записано: ОТСУТСТВИЕ ФАКТА НЕ ЕСТЬ ЕГО ОТРИЦАНИЕ — положительное требование констрейнта над незаявленным фактом даёт UNDETERMINED §93.2, а не VIOLATED, и not P §68 в теле правила молчанием не открывается; двадцать сцен первого прогона были красны по этой одной причине, и констрейнты теперь проверяются тройками «налицо / не сказано / показано обратное».

  • Корпус: kz.corpus.terminkom (Положение о Республиканской терминологической комиссии, приказ МНВО РК № 116: кворум, голосование с прочтением равенства голосов, сроки в рабочих днях, шесть заседаний в год, канал суждения экспертизы) и kz.corpus.terminkom_zantanu (2180 утверждённых терминов отрасли «Заңтану» 1971–2025 как датированный словарь с осью вытеснения и инвариантом «один термин — один действующий эквивалент»); раннер corpus/kz/acts/terminkom.py (35 + 7 сценариев), 11 .lawtest, скрипты fetch_terminkom_texts.py и sync_terminkom_zantanu.py в run_all.sh.

  • Рабочий стол: оракул поднимается сам, ворота говорят словами, «Проверка» ведёт шагами (02.09.2026). Второй движок грузится при открытии пакета с прогрессом «стадия k из 4» (OracleGate, одна стена вместо четырёх копий; выключается ?oracle=manual и переключателем в статусе движков); подписи полосы ворот человеческие, техническая строка ушла в Gate.technical (тултип и data-technical); перспектива «Проверка» получила три шага со счётом ролей и фактов, причину у каждой серой кнопки, «заполнить примером» и список .lawtest пакета. e2e: состояния «до оракула» открывают пакет с { oracle: 'manual' }, ожидания ворот — по новым подписям.

  • Рабочий стол, вторая порция (02.09.2026): навигатор подписан задачами (ru/kk), перспективы переключаются Alt+1…6, aria-current и role=status; первая сборка документа показывает скелет (BuildingSkeleton) вместо «CLIR не собран»; границы E-0013 правятся формой поверх articles.json (BoundariesForm, неизвестные поля файла проходят без изменений, вкладка JSON сохранена); минимальные кегли подняты с 7–9 до 8–11 px.

  • **Полная исполнимая формализация Белавежского соглашения 1991 года

  • ГК РК — второе звено сравнительной цепи, первая таблица 12 × 2 (Ф3 плана docs/plans/domains/IUS-PRIVATUM-CHAIN-PLAN.ru.md, 02.09.2026). Мост Общей части в словарь одной переменной через алиасы E-0098 (kz.corpus.civilcode/60-ius-privatum.law); новый пакет kz.corpus.civilcode_special (409-I: заём, хранение, вред, наследование по закону — охват списком из 22 статей, закрепление целиком, шесть тестов §267); раннер казусов умеет звено из двух пакетов; семейство ius_privatum_casus 91/91. Расхождения Гай ↔ ГК РК измерены по казусам 1, 4, 6б, 7, 9, 10, 11; по казусу 5 сходятся. Таблица — в STATUS.md.

    (intl.belovezha_1991, 02.09.2026).** Закреплены официальный PDF ООН и сверенная транскрипция Заявления, преамбулы и статей 1–14: 16 фрагментов, 15 614/15 614 байт (100 %), 14/14 статей, EXECUTABLE 14, остальные уровни глубины и UNEXPLAINED — ноль. 104 strict-правила, 20 duty, 5 power, constraint статьи 11, closure трёх равноаутентичных текстов; 217/217 сценариев и differential, .lawtest 1/1, audit-world 19/19 и связанные тесты 5/5 без изменения главного judgment-вердикта. Отчёт: corpus/laws/intl/belovezha-1991/audit.ru.md.

  • Функциональный анализ поведения (aba.functional_analysis, 02.09.2026): девятый пакет доктринальной семьи aba/ — полный анализ Iwata и др. (1982/1994) и краткий анализ Northup и др. (1991) авторским изложением ru+en (13 разделов, 26 фрагментов, библиография из 11 работ сверена по Crossref). Уровни условий кросс-умножением без деления, дифференциация тестовых условий и её ОТСУТСТВИЕ замыканием §70 над закрытыми сериями (первое применение closure в волне aba/), обращение контингенции, автомат FunctionalAnalysis(FaAssessment) из 6 стадий и 9 переходов, три обязанности аналитика §134, спор о недифференцированном высоком уровне двумя прочтениями §152 без группы §155. Девять A3-параметров. 67/67 сценариев, 67/67 .lawtest, differential 67 вызовов байтово; глубина EXECUTABLE 12 / SOURCE_ONLY 1; оверлей kk 90/60.

  • Женевские конвенции от 12 августа 1949 года (I–IV) формализованы целиком (intl.ihl.geneva_1949, 02.09.2026): 429 статей из 429, UNEXPLAINED 0. Четыре договора одним пакетом (64 + 63 + 143 + 159 статей), восемь закреплённых документов — четыре аутентичных английских текста и четыре русских перевода МККК. Официальное опубликование UNTS (том 75, № 970–973) отвергнуто ЗАМЕРОМ: распознавание тома читает четыре из 64 заголовков первой Конвенции неверно («ARTICLE I», «II», «20», «00»), и эти статьи выпали бы из меры §33.1 молча. Заведён третий контракт извлечения (corpus/tools/lib/extract_pdf_side_note_text.py): у издания МККК название статьи набрано боковой заметкой, и оба прежних контракта на нём ломаются. Общие статьи 1–3 выражены ОДНИМ правилом с четырьмя якорями §33; четыре РАЗНЫХ замыкания §70 над серьёзными нарушениями (перечни статей 50/51/130/147 не совпадают); презумпция статуса военнопленного (ст. 5 III) — поражаемое правило, снимаемое решением компетентного суда каналом §47.3; два автомата §160. 75 сценариев, 75/75 PASS, differential 75 вызовов байтово, семь порогов парами по обе стороны; шестнадцать целей DECISION-0089 с канарейкой. Замерена граница языка: неравенство сущностей (p != q) в теле правила проходит check и lower, а на исполнении даёт TYPE_ERROR. ПОЛНЫЙ АУДИТ (audit.ru.md) дочитал двенадцать статей, у которых бралось одно предложение — конферирующее статус, — а второе, связывающее державу, не читалось ни одним правилом: стаб-доля 17 из 605 правил (2 %) → 5 из 616 (0 %) при неподвижной мере §33.1, потому что EXECUTABLE стаб-мост удовлетворяет полностью. Тем же заходом вписано потерянное условие статьи 66 IV («on condition that the said courts sit in the occupied country»), лежавшее в метке. Ход дела по журналу (lawref process-run) нашёл дефект автомата §160: изъятие статьи 119 абзаца 5 стояло у одного перехода из четырёх, а состояния §160 накапливаются — репатриация состоялась через соседний переход при незаконченном производстве.

  • Полная исполнимая формализация закреплённого текста Договора об образовании СССР 1922 года (su.union_treaty_1922, 02.09.2026). Три lifecycle-публикации по 29 108 байт покрыты на 100%, 26/26 пунктов каждой учтены; EXECUTABLE 26, UNEXPLAINED = SOURCE_ONLY = ANCHORED = 0. 153 strict-правила и 44 norm-template выражают состав Союза и органов, 24 предмета ведения, созывы, бюджет, обязательности, исключительное ведение пункта 25 и право выхода пункта 26. Один judgment пункта 17 остаётся открытым до adjudication. Регрессия 314/314, differential 314/314 байтово, .lawtest 1/1, orphan/one-way/dead 0, doctor без пробелов; полный отчёт — corpus/laws/su/union-treaty-1922/audit.ru.md. Официальные байты и отдельный текст Декларации не найдены и не восстановлены по памяти; послероспускная сила Договора не выводится.

  • **Декрет ВЦИК и СНК РСФСР от 26.08.1920 «Об образовании Автономной

  • Реестр казусов сравнительной цепи частного права — Ф2 плана docs/plans/domains/IUS-PRIVATUM-CHAIN-PLAN.ru.md (02.09.2026). doctrine.ius_privatum: модуль facta.law (34 факта казуса, ни одного правила), casus/ — 31 .lawtest по двенадцати казусам DECISION-0091 §4 и matrix.json с ожиданием по звену и якорем на фрагмент; раннер corpus/kz/acts/ius_privatum_casus.py (факты через lawc lower-test, нулевое звено — голый словарь, 62/62); ворота check_casus_matrix.py (реестр полон, якоря разрешены, клетка не уходит молча, слово — только под казус); подкаталог casus/ в закрытом списке раскладки. Гай: закреплены книги II и III (охват списком параграфов, fetch_gai_institutiones_libri.py --check), модули 15–17 (мост от фактов казуса, traditio и usucapio, sui heredes); все 31 клетка Гая с исходом по тексту.

    Киргизской Социалистической Советской Республики» (ru.rsfsr.kirgizskaya_assr_1920, 02.09.2026).** Все 11 пунктов из 11 выражены правилами: глубина §33.1 — EXECUTABLE 11/11 при нуле SOURCE_ONLY, байтовое покрытие 99,8 % и 99,6 % двух закреплённых документов, стабовая доля 0 % (0 мостов из 35 правил). Первый акт корпуса с УСТАРЕВШЕЙ закреплённой ревизией источника, и причина в самом источнике: страница Викитеки 09.08.2026 была отредактирована так, что в пункт 1 вписан подпункт «ж) г. Оренбург…», внесённый на самом деле постановлением Президиума ВЦИК от 20.09.1920, — без всякой пометки. Закреплена ревизия 5213498 (редакция принятия), дополнение — отдельным документом, связь — ребром revision §32.1; сводный текст не закрепляется (слияние сделал участник вики, а не государственный орган). Территория — БИНАРНОЕ замыкание §70 (E-0087) по паре «территория, дата»; две оси даты (аргумент головы против окна effective §87) разведены тремя делами об Оренбурге. Цели §270 (DECISION-0089): три HELD, канарейка FAILED на Семиречье и Сыр-Дарье и проверена негативным контролем. 45 сценариев, differential 45/45 байтово, 44 эмитированных теста §267 проходят 44/44. Вторая находка того же дня: посылка единственного constraint стояла на одном из перечней и связывалась шестью органами в любом мире — документ всякого запроса нёс семь результатов вместо одного, и emit_lawtests отвергал ВСЕ сценарии акта как невыразимые на §267 (§174) при зелёных check, регрессии и differential. Посылка переписана конъюнкцией (связывается ровно на столкновении), заведена канарейка ограничения по коду CONSTRAINT_VIOLATED, а мир файла целей доведён до полного: канарейка цели «держалась» ВАКУУМНО на домене 0. Замер, стоивший 28 красных сценариев из 43: незакреплённое событие in_force у редакции гасило все заякоренные правила через проекцию применимости §92.3 (E-0095), а диагностика EDITION_NOT_APPLICABLE имеет severity info — сценарии краснели статусом, ни один кодом, и ответ приходил не «не знаю», а FALSE_ONLY из замыкания. События применимости у редакций сняты: акт о своём вступлении в силу не говорит ни слова.

  • Казахстанская audit-only связка прекращения СССР (kz.continuity_consent_linked, 02.09.2026). Пять закреплённых публикаций, 8 фрагментов и 93 узла CLIR выражают окно членства до независимости, вычисленные 94,1 % поддержки на референдуме против 76,4 % по Союзу, отсутствие Казахстана среди трёх сторон Беловежья и два документированных носителя согласия. Человек выбрал исполнительную подпись 21.12.1991 как юридически достаточный носитель; выбор закреплён отдельным adjudicated-делом, а ратификация 23.12.1991 сохранена как документированная контрфактическая альтернатива. В intl.alma_ata_1991 изменена только visibility трёх готовых отношений. Удалена локальная параллельная голова legal_continuator: в связанном audit-мире единственным производителем остаётся импортированное ru.continuity_linked::ContinuationThroughAlmaAta. Регрессия 13/13, differential 14/14; цели дают TELEOLOGICAL-UNIQUE AlmaAtaAndCouncilFoundation, канарейка FAILED; глубина EXECUTABLE 2 / EXCLUDED 4 / UNEXPLAINED 0, метки 33/0 и 14/0; снижение 15 → 14 — удаление недопустимого обходного правила, а не потеря разметки.

  • Семейство vote.methods: словарь способов подсчёта и статья 163 LOREG (02.09.2026). doctrine.vote_methods — вход и выход подсчёта, общие шести нормодателям семейства; выход порядковый (holds_seat_number), а не значением. es.loreg — правило д’Ондта, трёхпроцентный барьер, разрешение совпавших частных и жребий буквы d) каналом суждения §47.3, пункт 2 о Сеуте и Мелилье. Деления в акте нет: сравнение частных — перекрёстное произведение. Заведена единица деления §33.1 es_article_word (в 234 заголовках LOREG нет ни одной цифры) в обоих реестрах плюс испанские наборы признаков; срез извлечения --boe-consolidated-body; правопорядок ES в JURISDICTIONS. Регрессия 13/13, цели DECISION-0089 HELD на 8 мирах при падающей канарейке, UNEXPLAINED 0.

  • kz.orvi_deti (02.09.2026). Клинический протокол ОКК МЗ РК «Грипп и острые респираторные инфекции дыхательных путей у детей» (№ 242 от 05.12.2025) — третий пакет связки над листками парацетамола и ибупрофена: степень тяжести с именованными зазорами, строгий порог жаропонижающего, режимы парацетамола/ибупрофена пятью границами, запреты аспирина и антибиотиков, госпитализация и визит «до 5 лет», ДН по SpO₂ и ЧДД, сроки календарём, осельтамивир по возрасту и массе. Байты с портала ННЦРЗ (fetch_orvi_deti_protocol.py, sync_orvi_deti_fragments.py в run_all.sh), 30 единиц, 19 границ по тексту. Регрессия orvi_deti 69/69, 20 тестов §267, KZ-differential 70 вызовов байтово, Lean OK. kz.naznachenie читает протокол третьим документом (02-protokol.law): показание, режим и расхождение листка с протоколом в обе стороны; семейство naznachenie 29 сцен.

  • kz.ibuprofen и kz.naznachenie (02.09.2026). Листок-вкладыш детской суспензии ибупрофена (Ибуфен, держатель Химфарм; копия держателя с пустым грифом приказа — названо, а не додумано) как близнец парацетамола: полоса возраста A3 против ставки 20-30 мг/кг с именованным расхождением, десять противопоказаний, канал врача §47.3, дефитер аспирина, постпрививочный режим, передозировка ставкой; 70 сцен, 12 тестов, differential 75 вызовов. Пакет назначения над двумя листками: факты о ребёнке один раз, мосты в оба словаря, вердикт по каждому препарату и по назначению, совместное назначение названо вне обеих инструкций; 17 сцен на мире из трёх документов, differential 20 вызовов. В парацетамол вписан pub словаря.

  • Errata E-0098 — алиас типа через границу пакета (§40/§48, 02.09.2026). type Persona = doctrine.ius_privatum::Persona; принимался lower и отвергался check (LDC-E2101 на каждом употреблении); совместимость §48 с чужим типом была односторонней; оба движка читали алиас номинально при исполнении. lawc check — ResolvedType::Foreign, симметричная непрозрачность чужого типа против своих сущностей; оба движка — индекс алиасов в сверке сигнатур §189. Шесть векторов ERR-E0098-* (два в SUPPORTED); проза §40; корпус байтово неизменен (36 пакетов с qualified-типами перепроверены check). Ф1 плана docs/plans/domains/IUS-PRIVATUM-CHAIN-PLAN.ru.md.

  • Errata E-0097 — id proof-узла в слитом мире (§180, 02.09.2026). Одноимённые правила двух пакетов давали один urn:proof:apply:<имя>:<seq> и крах канонизации §187 при зелёной линковке. Аддитивно: хвост, который в мире носят декларации более одного пакета, заменяется хвостом namespace (<ns-tail>#<имя>, как у assertion); то же для norm, position, closure. Однопакетные миры байтово прежние (84 голдена не тронуты, differential 254/254). Три вектора ERR-E0097-*.

  • Перечни MCP по пакету постраничны, строки LawQL капаются на поверхности (02.09.2026). law_query: rowLimit (500, не более 5000) и rowOffset на стороне MCP — семантика LawQL и байты lawref query не тронуты; усечение названо предупреждением ROWS_TRUNCATED в warnings (корень queryResult закрыт схемой) с полным числом строк и продолжением, документ валиден по query-result.schema.json. law_sources/law_rules по пакету: offset/limit (50/200 и 200/500), total/truncated/next в структуре и «ещё N — продолжение: …» в тексте; оглавление большого акта тоже постранично; смещение за концом и limit сверх максимума — отказы с границей. Контракт test_server.py (раздел 6д): крупнейшие акты выбираются из живого корпуса, порог 600 КБ на страницу источников, правил и LawQL без сужения, инвариант §194-хэшей сверяется по всем страницам с требованием «сумма страниц = total». Замер до: 9,7 МБ (kz-income-tax), 2,9 + 1,6 МБ (kz-administrative-code), 10 и 62 МБ (law_query без сужения); после: 142 КБ на select n.id при умолчаниях.

  • МСФО (IAS) 37 «Резервы, условные обязательства и условные активы» (eu.ias.provisions, 02.09.2026). Первый акт корпуса, чей источник есть СВОД: приложение Регламента (ЕС) № 1126/2008 несёт тридцать семь стандартов, каждый нумерует параграфы с единицы, и единица деления §33.1 по всему документу неразрешима — закреплён срез ОДНОГО стандарта, и граница среза найдена по разметке (IAS 37 есть ровно один верхнеуровневый блок приложения), а не выбрана. Отсюда третья за три акта одного свода конвенция §33.1 — ias2008_paragraph (голый номер БЕЗ ТОЧКИ): ifrs_paragraph пакетов eu/ifrs-16-leases и eu/ifrs-15-revenue даёт здесь ровно ноль единиц. Охват первого круга — ПРИЗНАНИЕ без ОЦЕНКИ (§§1—35, 61—65), ни одного терма Money; раздел MEASUREMENT (§§36—52) вычеркнут осознанно. Восемь каналов суждения §47.3 с полномочием Management — больше, чем у любого другого акта корпуса, и порогов не записано ни одного. Мера §33.1: EXECUTABLE 35, ANCHORED 3, SOURCE_ONLY 2 с проверенной по тексту причиной, UNEXPLAINED 0. Регрессия 90/90, KZ-differential 104 вызова байтово, §267 11/11 рукописных тестов, 6/6 свойств §270 и 69/69 эмитированных, lawref goals 6 целей на 74 мирах — HELD. Процедура §160 ProvisionLifeCycle и журнал с попыткой без правового эффекта §164. Новые генераторы: fetch_ias37_text.py, sync_ias37_fragments.py (оба впаяны в run_all.sh). Замерено и записано: положение канала суждения в правиле решает, чем является молчание (посылка — REQUIRES_JUDGMENT, дефитер — COMPUTED); констрейнт с положительным требованием над выводимым предикатом никогда не даёт VIOLATED §93.2 и потому §14 разложен на три проверки. Найдено и НЕ закрыто (ядро в этой сессии не правится): реализации публикуют один и тот же запрос суждения §47.3 с разной ПОЛЯРНОСТЬЮ, когда канал читается и положительно, и под отрицанием, — вторая находка того же контура после eu/ifrs-16-leases и у́же первой; воспроизведение 19 строк лежит в corpus/laws/eu/ias-37-provisions/analysis/.

  • Институции Гая, книга IV (rom.corpus.gai_institutiones) и мостовой словарь doctrine.ius_privatum (02.09.2026). Классическое частное право как машина исков: 184 единицы la_paragraph издания Секкеля–Кюблера (PINNED_UNOFFICIAL_COPY, конъектуры и лакуны сохранены побайтово), 14 модулей по разрезу самого Гая, 383 правила, 41 приоритет, 7 групп прочтений (споры сабинианцев и прокулианцев), 5 каналов суждения §47.3 (Praetor, Iudex), замыкание §70 над спрошенной формулой, автомат тяжбы §160. Мера §33.1: EXECUTABLE 154, SOURCE_ONLY 29 с проверенной по тексту причиной, UNEXPLAINED 0. 36 тестов §267 парами на порогах, 41 сценарий на слитом мире, differential 41/41 байтово. Словарь записывает «ius есть actio» один раз (remedium_datur → remedium_competit → ius_efficax, ius_nudum, remedium_sine_iure) как общие головы сравнительной цепи Рим → Меджелле → Code civil → BGB → ГК РК. Новые генераторы: fetch_gai_institutiones_text.py, sync_gai_institutiones_fragments.py (впаян в run_all.sh). Найдено и обойдено: одноимённые правила двух пакетов на слитом мире роняют канонизацию proof-графа оракула; коллизия StableId правила с членом перечня видна только на lower; строгие читатели поражаемой головы на слитом мире дают NEITHER без диагностики check.

  • МСФО (IFRS) 15 «Выручка по договорам с покупателями» (02.09.2026). Пакет eu.ifrs.revenue над Регламентом Комиссии (ЕС) 2016/1905; охват первого круга — §§1—17 и 22—38 (опознание договора, обособленные обязанности к исполнению, момент их исполнения). Четыре канала суждения §47.3 с полномочием Management, два дефитера с отрицательной головой, единственное в корпусе правило над ПАРОЙ договоров (§17, симметрия не выводится), три констрейнта §93.3, одна процедура §160 с журналом §164, шесть целей DECISION-0089. 70 сцен регрессии, 88 байтово идентичных evaluate-вызовов, 9 рукописных и 56 эмитированных тестов §267. Единица деления ifrs_paragraph переиспользована у eu/ifrs-16-leases без правки реестров. Провенанс объявлен слабее соседей по своду: EUR-Lex за AWS WAF, байты закреплены браузерным каналом (сериализация DOM), --check офлайн, живая сверка — открытое обязательство (fetch_ifrs15_text.py --refetch).

  • Пять копий DERIVING_KINDS выровнены (02.09.2026). Соглашение «какой узел выражает единицу» жило пятью независимыми копиями: boundaries.py (ведущая), check_constitution_constants.py, check_quran_ayah_disposition.py, check_quran_norm_provenance.py, clause_ledger.py. Все четыре получили constraint с записанной причиной. Радиус нулевой: у актов Конституции и Корана/фикха констрейнтов нет вовсе, поведение ворот не изменилось — проверено прогонами всех четырёх (FAIL Корана идентичен до и после правки: 6236 аятов существующего долга).

  • Мера §33.1 видит исполняемый констрейнт: constraint вписан в DERIVING_KINDS (02.09.2026, решение владельца). До errata E-0086 констрейнт не исполнялся вовсе, и держать его вне выводящих видов было верно; после неё он даёт вердикт на каждом деле. Радиус измерен до правки: единицы под одними констрейнтами есть у четырёх актов — it-pacioli-computis (18 глав), eu-ifrs-16-leases (5), eu-ifrs-15-revenue (3), eo-fundamento (1), всего 27; у прочих мера не двинулась. У Пачоли EXECUTABLE 17 → 35, ANCHORED 18 → 0. База глубины перерегистрирована точечно по четырём актам (ANCHORED в храповике имеет направление 0 — любое движение роняет ворота). Внутри EXECUTABLE теперь два случая, «выводится» и «проверяется»; разница реальна (§93.1: констрейнт опоры не даёт) и называется в отчёте акта.

  • it.pacioli.computis, последние девять глав — невыраженной осталась одна из тридцати шести (02.09.2026, шестой проход аудита). Взяты реквизиты и однодневный срок описи, порядок «движимое прежде недвижимого», три способа счёта, состояние и природа вещи (гл. 2—4); свобода мелкого торговца вести только две книги, которая ограничивает норму гл. 9 без правки — констрейнт не triggered, потому что связывает мемориал (гл. 5); та же марка у журнала, что у мемориала, и дата в начале страницы (гл. 10); год в поле (гл. 29); запрет записей во время сверки (гл. 33); реквизиты письма, отметка об ответе и список важных писем слово в слово (гл. 35). Глава 25 оставлена вердиктом: описывает обычаи. Исправлены три собственных вердикта прошлых проходов — глава 4 казалась увещанием по заголовку, а начинается нормой. Побочно измерено свойство меры §33.1: акт, выраженный КОНСТРЕЙНТАМИ, даёт ANCHORED вместо EXECUTABLE, потому что констрейнт по §93.1 не выводит. EXECUTABLE 16 → 17, ANCHORED 11 → 18, SOURCE_ONLY 9 → 1, констрейнтов 64 → 76, сценариев 142 → 166 (differential 166/166 байтово).

  • it.pacioli.computis, главы 16—27 — «образцы проводок» оказались нормами в рамке из образцов (02.09.2026, пятый проход аудита). Взяты реквизиты товарной записи (гл. 16); свидетельство рукой клерка учреждения и норма венецианского права о маклере с санкцией «fined and dismissed» (гл. 17); порядок смешанного платежа «сперва вексель, потом банк» (гл. 19); денежная оценка мены и мост между свободой мемориала в монете и одной монетой книги (гл. 20); именование счетов товарищества (гл. 21); шесть норм банка и тратт, включая две расписки с заменой для не умеющего писать и возврат бумаг при закрытии счёта (гл. 24); две книги поездки, которые НЕ есть запрещённые главой 7 двойные книги — различие в предмете, а не в числе (гл. 26); единственный в трактате запрет записи в журнал (гл. 27). Глава 25 оставлена вердиктом: она описывает обычаи, а не устанавливает нормы. Поправка к прежней записи: замыкание §70 над БИНАРНЫМ предикатом работает — сцена после окна даёт VIOLATED. EXECUTABLE 14 → 16, SOURCE_ONLY 17 → 9, констрейнтов 47 → 64, правил 38 → 43, сценариев 106 → 142 (differential 142/142 байтово).

  • it.pacioli.computis, главы 6—8 — мемориал, марка и нумерация книг, заверение у должностного лица (02.09.2026, четвёртый проход аудита). Полнота записи мемориала перечислением («who, what, when, where» — четыре счётные посылки, а не один признак) и условное «stating the time» гл. 8 отдельным констрейнтом; две свободы §123, вторая из которых прямо ограничивает норму гл. 36 «одна монета в книге» (к мемориалу она не относится — «naming simply the money and weights which they know»); марка на обложке, отличная марка второй книги и нумерация каждой страницы с основанием, названным самим Пачоли (вырванную страницу иначе не обнаружить); предъявление книг должностному лицу с объявлением писца и монеты, отдельная обязанность записать смену писца, печать делает книги подлинными в суде; запрет двойных книг с выводом о клятвопреступлении. Ловушка, записанная сценой: x != y над сущностями даёт NON_EXECUTABLE_CONSTRAINT — проверка молча выпадает при зелёном check; различие пишущих выражено предметно, дизъюнкция в require исполняется. EXECUTABLE 11 → 14, SOURCE_ONLY 20 → 17, констрейнтов 39 → 47, правил 33 → 38, сценариев 81 → 106 (differential 106/106 байтово).

  • it.pacioli.computis, глава 22 — обязательный состав книги, первая свобода пакета и «расходный счёт не бывает в кредите» (02.09.2026, третий проход аудита). Пять обязательных счетов (торговые, обычные домашние и чрезвычайные расходы, приход-расход, прибыли и убытки) — пятью отдельными констрейнтами, потому что перечень закрыт словами Пачоли «what the merchant can not do without»; liberty §123 на любые счета сверх них — записать это обязанностью значило бы вменить купцу то, чего источник не требует; счёт чрезвычайных расходов обязателен, пока дело не скажет, что они ведутся в обычных, — дозволение гасит сам antecedent, и сцена показывает отсутствие результата CONSTRAINT, а не SATISFIED; инвариант «всегда в дебете» с парой по обе стороны границы; мешочек на мелкие платежи — один или два дуката, порог названный источником и потому литеральный. С главой 22 каждая учебная книга прежних сцен стала неполной (пять VIOLATED в сорока сценах) — верный ответ права, ожидания обновлены явно. EXECUTABLE 10 → 11, SOURCE_ONLY 21 → 20, констрейнтов 31 → 39, правил 27 → 33, сценариев 65 → 81 (differential 81/81 байтово), .lawtest 8 → 9.

  • it.pacioli.computis, глава 18 — единственная арифметика трактата (02.09.2026, второй проход аудита). Контора Мессетарии: причитается = цена × ставка, с продавца удерживается половина, конторе кредитуется вдвое против удержанного («for the commission due by the seller and by you»), продавцу платится цена минус удержанное; на примере Пачоли (100 дукатов, 4 %) — 4, 2, 4, 98. Третье равенство не тождество: книга, где контору кредитовали одной половиной, арифметически цела и нормативно неверна. Ставка приходит ДЕЛОМ, а не A3-параметром: трактат называет её чужой («as per public decrees of the Republic»), и параметр приписал бы Пачоли то, чего он не устанавливает. Половина берётся от ставки (r / 2.0), потому что Money / Integer и Decimal / Integer §58 отвергаются статически. Взяты также предел вывоза со склада с оговоркой о доплаченной сенсарии и полная вера записи маклера. EXECUTABLE 9 → 10, SOURCE_ONLY 22 → 21, констрейнтов 27 → 31, правил 22 → 27, сценариев 52 → 65 (differential 65/65 байтово), .lawtest 6 → 8.

  • Аудит it.pacioli.computis (audit-formalization, 02.09.2026): семь глав, объявленных границей без чтения текста, оказались нормами. Взяты модулем 04-cap-09-32-tenuta-del-quaderno.law: порядок трёх книг (гл. 9), касса-должник и прямо названное последствие «в книге ошибка» (гл. 12), согласие лица на запись его КРЕДИТОРОМ — половина нормы, пропущенная первым кругом (гл. 23), перенос заполненного счёта без пропуска страницы, «otherwise it would be considered a fraud», и остаток как разница сторон (гл. 28), выписка, в которой нельзя отказать, и её сверка с книгами до выдачи (гл. 30), исключение исправленных пост из выписки (гл. 31), неотмеченная при сверке поста как признак ошибки (гл. 32). EXECUTABLE 4 → 9, SOURCE_ONLY 29 → 22, констрейнтов 19 → 27, правил 13 → 22, сценариев 33 → 52 (differential 52/52 байтово), разметка 67/0 и 26/0. Границ по-прежнему не объявлено ни одной — измерено: ворота отвергают границу даже на главе-увещании с цитатами из Данте, потому что «you shall» стои́т в каждой главе трактата. Отчёт — corpus/laws/it/pacioli-computis/audit.ru.md. Побочно исправлена строка constraint_decl в справочнике аудита: «не исполняется вовсе» устарело с errata E-0086, вместо вердикта «ложное усиление» названы три живые ловушки.

  • Новый пакет it.pacioli.computis — двойная запись по Пачоли (1494), ПЕРВЫЙ АКТ КОРПУСА, ЧЕЙ НЕСУЩИЙ ИНВАРИАНТ ЕСТЬ CONSTRAINT §93.1 НАД АГРЕГАТАМИ (02.09.2026, «Particularis de computis et scripturis», Summa de arithmetica, Distinctio IX Tractatus XI, все 36 глав закреплены). Баланс книги — «summa del dare» равна «summa del avere» — у Пачоли не вывод, а ПРОВЕРКА готового состояния: «if these two grand totals are equal … your Ledger was very well kept … But if one of the grand totals is bigger than the other, that would indicate a mistake in your Ledger» (гл. 34). В языке это constraint … require sum(collect all …) == sum(collect all …) над Money, и до errata E-0086 такой инвариант был МОЛЧАЛИВ: объявление стояло, документ ответа его не считал вовсе. Здесь он исполняется обоими движками — результат CONSTRAINT со статусом SATISFIED/VIOLATED, узел constraint_check, issue CONSTRAINT_VIOLATED; differential 33/33 байтово. Всего 19 constraint-ов: баланс, две посты на статью (гл. 14), сумма посты равна сумме статьи, должник слева и кредитор справа, одна сторона у посты, «per» и «a» у статьи (гл. 11), касса на первой странице (гл. 13), первая пара «касса per капитал» (гл. 12, 15), три вещи в посте и исключение для кассы, один день, касса должник или равна, одна монета в книге, три инварианта исправления встречной постой (гл. 36). Своды пишутся collect all, и это проверяется сценой, а не обещанием: книга, где статья на 1000 проведена по обеим сторонам, а вторая на ТЕ ЖЕ 1000 — только в дебет, по списку даёт 2000 против 1000 (VIOLATED), по множеству {1000} против {1000} — «в порядке»; errata E-0012 на живом акте, потому что правильная книга даёт равные мультимножества, и Set-форма расходится с List-формой ровно там, где инвариант нужен (KZ-PACIOLI-02). Пустая сторона обойдена не молчанием: sum над пустой коллекцией — issue §59, а empty-политику поверхность .law не выражает, поэтому баланс спрашивается у книги с ОБЕИМИ сторонами, а книга с постами на одной стороне нарушает собственный constraint (гл. 14: «whenever there is a debit item there must exist at the same time a credit item»). Деньги: суммы — одно Money в одной монете; «одна монета в книге» (гл. 36) — ТЕКСТОВЫЕ факты, потому что Money двух валют не складываются, и нарушение стало бы отказом исполнителя вместо вердикта. Деонтика: обязанность провести статью (гл. 14) — позиция §123 с закрытым замыканием §70 над эмпирической отметкой «две косые черты в журнале» (после окна без отметки — VIOLATED, внутри — ACTIVE); запрет делать должником без согласия (гл. 36) — prohibition, а «счёт ложен» — отдельное правило, потому что VIOLATED для prohibition движок 0.1 не выводит (граница среза записана ПАДАЮЩЕЙ сценой KZ-PACIOLI-16B). Источник выбран ПОПЫТКОЙ ЗАКРЕПЛЕНИЯ: вычитанного набора подлинника 1494 года нет ни в одной Викитеке, а текстовый слой факсимильных страниц того же издания негоден до нечитаемости — доля словарных слов 0,00 против 0,18—0,40 на страницах перевода (замер по всем 196 страницам PDF); закреплён перевод Гейсбека (1914), подлинник объявлен редакцией UNAVAILABLE, verifiedAgainstSource = false с записанной причиной. Правило, годное не только здесь: у инкунабул текстовый слой разрушает всё, а не только формулы (у сканов XIX века — формулы раньше прозы, la.gauss.theorema_fermatianum). Заведена конвенция единицы en_chapter в оба реестра §33.1 и в таблицу русских имён boundaries.py. Измерено: lawc check чист, закрепление 99,6 % (36 фрагментов, 147 180 из 147 747 байт), §33.1 — EXECUTABLE 4, ANCHORED 3, SOURCE_ONLY 29 (главы об инвентаре, мемориале, образцах проводок и хранении бумаг — наставления о ФОРМЕ записи, названы границей охвата); регрессия 33/33, differential 33/33 байтово, .lawtest 6/6, разметка 47/0 и 15/0, мёртвых символов и правил 0, doctor — «пробелов нет».

  • Новый пакет go-tromp-taylor — Правила Го Тромпа–Тейлора, десять правил из десяти (02.09.2026). Новая группа go; источник — страница авторов, kind doctrine, jurisdiction "none"; собственный извлекатель extract_tromp_taylor_text.py восстанавливает нумерацию правил (единица point). Достижимость (правило 3) — рекурсия через supported; «не достигает пустого» — not_known в поражаемом слое: forall в строгом правиле над рекурсивным доменом срабатывает на частичном домене, а в поражаемом роняет lawref (defeasible.stratify, KeyError predicate; lawc исполняет — дефект оракула, не чинился). Захват по цепи, порядок захват → самоубийство, позиционное суперко по всей истории через supported, счёт count по monotone(counts_for) с ожиданием ранга. Измерено: EXECUTABLE 10/10, разметка 46/0 и 42/0, сцен 38/38, differential 38 вызовов байтово, Lean OK, .lawtest 3/3, doctor.py без пробелов. Самоубийство одного камня нелегально повтором раскраски (правило 6), не запретом.

  • Справочник Сыздық закрыт целиком: глава ІІІ «ТЫНЫС БЕЛГІЛЕРІ», 87 из 87 единиц (02.09.2026). Глава описывает те же знаки СО СТОРОНЫ ЗНАКА, и раздачу вело не сходство формулировок, а сам справочник: 48 её единиц несут ссылку «II тараудағы § N-ты қараңыз». 51 единица разошлась вторыми якорями по девяти пакетам главы ІІ, не породив ни одного нового правила. Остальные 36 взял новый пакет kz.grammar.tynys_belgileri (реестровый №64, 51 правило, EXECUTABLE 36 из 36): точка в особых положениях, где половина клеток отвечает «точка НЕ ставится»; многоточие при обрыве, ставящееся ВНУТРЬ словоформы (§21); кавычки и скобки не при прямой речи; и раздел совмещения знаков, которого у главы ІІ нет по построению — §78 и §79 разводят одно место на два ответа по признаку «к чему относится знак». Поражаемый слой дважды пришёл из источника: §81 отменяет §4 при ремарке за именем персонажа, ескерту §63 — кавычки у наименования со словом атындағы. 5/5 сценариев, differential байтовый. Итог по справочнику: «Емле ережелері» 129/129, «Пунктуация ережелері» 126/126, «Сөз сазы» 36/36, «Тыныс белгілері» 87/87.

  • МСФО (IFRS) 16 «Аренда» — первый бухгалтерский стандарт корпуса (02.09.2026). Пакет eu.ifrs.leases над Регламентом Комиссии (ЕС) 2017/1986: охват первого круга — §§1—11, 18—21, 61—66 (квалификация без оценки). Одиннадцать оценочных терминов выражены каналом суждения §47.3 с полномочием Management; порогов ASC 842 («75 %», «90 %») в пакете нет — их нет в закреплённых байтах. Разная сила §63 («would normally lead») и §64 («could also lead») выражена разной силой правила §100 — defeasible против default, обе поражаются §65 приоритетами §116. Пять норм выражены констрейнтами §93.3, две процедуры §160 с журналами §164, шесть целей DECISION-0089 на basis §1. Новая конвенция единиц §33.1 ifrs_paragraph в обоих реестрах. 75 сцен регрессии, 86 байтово идентичных evaluate-вызовов differential, 10 тестов §267.

  • Проба скилла formalize-act снова работает (02.09.2026). Таблица surface_checks.TOP_LEVEL_PATTERNS не знала factors_decl и precedent_decl, введённых профилем прецедента §276 в spec/grammar.ebnf; probe.py отказывался работать вовсе вердиктом «КОНТРАКТ SKILL УСТАРЕЛ».

  • Профиль прецедента §276 — law.precedent/0.2 (02.09.2026, DECISION-0090). Prose §276.1–§276.10; объявления factors (словарь факторов: сигнатура, domain, стороны, предпорядок судов) и precedent (факторные множества, исход, ratio, prefer over, overruled … by) — контекстные слова, ни одного нового hard keyword; узлы CLIR factor_vocabulary и precedent_decl под хэшем §209, origin у порождённых узлов; lowering §276.10 в law-hir/src/lower/precedent.rs (holding с not_known- дополнением и окном effective, приоритеты по prefer over и по рангу, ratio под прочтением <V>/reason_model), статика LDC-E2701…E2704, LDC-W2705. Вид запроса precedent в обеих реализациях (evaluator/precedent.py, law-eval/src/precedent.rs): статусы прецедентов, constraint, непротиворечивость базы, agreesWithRules. Lean LawCore/Precedent.lean + счётчик PREC §276 и две подделки в check_proof_certificates. Тринадцать векторов LAY-L3-PREC-* (SUPPORTED +12, LOWER-SHAPE под G-M1b). Пилот us.caselaw.advertisement_offers переведён на поверхность (23/23, differential байтовый). Типы протокола, парсер редактора и бандл оракула перегенерированы; law.precedent/0.2 активен в реестре фич.

  • Контрпример о признании Украины — полный formalize-act 0–5м (02.09.2026). Добавлены пять пакетов: Брестский договор с ратификацией и аннулированием, договор РСФСР—УССР 1920 года, ненормативная карта P1–P3, переименование РСФСР и audit-only связка. Две доктрины признания оформлены exactly_one, постаннулированный исход — типизированным judgment-запросом; P1/P2 отвергнуты, P3 скептически принят. Собственный генератор даёт 6 идемпотентных CLIR, профильный раннер — 44/44 байтовых differential- совпадения; добавлены scenario manifest, полный audit-отчёт, protocol- журнал и память решений моделирования.

  • Договор под Кодексом: законные пункты и границы (02.09.2026). П. 4.1 (ст. 84), 6.1 (ст. 103 с МЗП из kz.corpus.budget, второй импорт) и 6.2 (ст. 113, срок считает договор термом §86 со снимком §85) проверены парой «молчит на договоре / краснеет на мутации»; девять пунктов вне среза объявлены границами с причиной; оверлей i18n/kk.json. Регрессия 9/9, 11 новых pub у Кодекса.

  • E-0092 pub rule экспортируется, E-0093 повторный import отвергается и lower-ом (02.09.2026). rule внесён в оба реестра экспортируемых видов (helpers.rs, resolver.py), узел правила несёт visibility, pkg::Rule понижается в const_ref на StableId правила — старшинство чужой нормы §118 объявляется по имени. Проверка §23 (LDC-E1102/E1103) вынесена в resolve::import_diagnostics и звучит на обоих путях компилятора. Три errata-вектора, селфтест, модульные тесты; байты корпуса не двигаются. Договор под Кодексом переведён на форму по имени (pub у UnilateralChangeIsUnlawful).

  • Ф1 профиля прецедента §276 — база дел us.caselaw.advertisement_offers (02.09.2026). Три мнения линии «реклама как оферта» (Lefkowitz 1957, Carlill 1892, Leonard 1999) закреплены байтами и записаны факторными множествами по Хорти; holding — поражаемое правило с not_known-дополнением по замкнутому словарю факторов (ручной lowering §2.1 docs/plans/engine/PRECEDENT-PLAN.ru.md), окно effective с даты решения, приоритет §116 над общим правилом Restatement § 26; reason model — прочтением §152. Семейство caselaw_advertisement_offers 18/18, KZ-differential байтовый. Измерено: связанность воспроизводит все три исхода (исход Leonard выведен), различение видно как undermine в карте §274, стратная ловушка не воспроизведена, not_known над суждением §47.3 удовлетворяется молча (закреплено границей), result/reason model расходятся на одном деле. Новые генераторы fetch_/sync_caselaw_advertisement_offers_*, sync в run_all.sh; итоги — §9 плана.

  • Errata E-0090 — граница окна §135 вычисляется (02.09.2026). Обе реализации читали границу окна позиции только как литерал; вызов терма, константа и несвязанная переменная молча давали «границы нет», и обязанность со сроком не истекала никогда. Теперь граница-терм вычисляется под подстановкой правила, ошибка — громкий TYPE_ERROR с адресом правила и стороной окна. Пять векторов ERR-E0090-WINDOW-TERM-* исходником; радиус в корпусе измерен: labour_code, constitutional_court, environmental_code зелены, четыре семейства (un_charter, csto_treaty, qantar, qantar_amnesty) красны одной причиной — необъявленное имя moment в window [moment, infinity); акты перечислены владельцу, не правлены.

  • Errata E-0091 — weekday_of(d) (02.09.2026). День недели даты как Integer 1..7 по ISO 8601; свидетель — 5 U.S.C. §6103 («third Monday in January», «holiday that occurs on a Saturday»). Пять реестров синхронно, семь векторов ERR-E0091-WEEKDAY-*; голден ERR-E0076-STD-SLICE-ORDER сдвинут точечно (перечень термов вырос на имя).

  • Договор под статутом: kz.private.employment_contract (02.09.2026). Вымышленный трудовой договор импортирует Трудовой кодекс РК и подаёт свои условия в его предикаты; превышения (ст. 36, 68, 88) и недействительность (ст. 10 п. 2) выводит Кодекс, вердикт по пункту называет договор, конфликт п. 7.1 против ст. 10 п. 3 снимает политика §118 со старшинством из п. 8.1. Семейство employment_contract — 5 сценариев, differential 14 вызовов байтово; у Кодекса 15 pub. Записано: pub rule в exports не попадает; повторный import в модуле — LDC-E1103 у check при молчащем lower.

  • Закрыт корпусный остаток оживления constraint §93.1 (02.09.2026). YieldingIsNotMutual сужен до положительно определимого покрытия на перекрёстке: KZ-PDD-16/17 сохраняют дословную презумпцию пункта 105 без находок, а новый KZ-PDD-18A доказывает, что инвариант не снят, — искусственная взаимность даёт два точных CONSTRAINT_VIOLATED. Это исправление дефекта инварианта, не ожиданий: широкая формула ошибочно объявляла законное право нарушением. Цена покрытия записана явно: surface_determinable имели 20 из 33 прежних проверок; обязанности вне такого перекрёстка и дела без положительного признака больше не охвачены. GRC-LOT-09 требует ровно CONSTRAINT_CONFLICTED, а два запроса сцены Паули — ровно по одному CONSTRAINT_VIOLATED. Устаревшие шапки §93.1 и абзац CLAUDE.md о якобы нетипизированном payload судьи обновлены по E-0086/E-0089; комментарии .law байты CLIR не меняют. Исторически продублированные громкие правила сохранены и прямо помечены кандидатом отдельной корпусной работы.

  • Новый пакет gb-age-attainment — момент достижения возраста в трёх правопорядках (01.09.2026). Один вопрос («когда исполнилось N лет»), три закреплённых ответа: общее право Англии по Блэкстону (Comm. I.17, Гутенберг #30802) — накануне годовщины; Family Law Reform Act 1969 s. 9 (CLML legislation.gov.uk) — с началом годовщины, и только для годовщин после 1 января 1970 года, дату которого несёт закреплённый отдельно S.I. 1969/1140; п. 2 НП Верховного Суда РК от 11.04.2002 № 6 («Әділет») — со следующих суток. s. 1 акта — полный возраст в 18 вместо 21 с переходным членом; attained_age_england проводит границу редакций по s. 9(2). Годовщина — календарный шаг §86 с литеральным числом лет (граница языка названа), policy.month_end для 29 февраля — вход дела: без неё MISSING_POLICY, с reject_nonexistent — блокер. Приёмка: lawc check чист, 4 публикации / 9 фрагментов закреплены, 10/10 сценариев age_attainment, differential 52/52 байтово, разметка 13/0 и 14/0, doctor — пробелов нет. Не вошло и записано: Пленум ВС РФ 2011 № 1 (источник из среды сборки не получен), второй член s. 9(2).

  • ERRATA E-0089: ответ судьи типизирован (§47.3.1, 02.09.2026). Утверждение с origin adjudicated может нести judgment {authority, request?, payload?}; орган сверяется с декларацией, payload — с request_schema, несовпадение — issue и REQUIRES_JUDGMENT; ответ без объекта принимается как прежде. Три вектора LAY-L2-JUDGMENT-ANSWER-* в SUPPORTED; Lean сверяет орган листа.

  • ERRATA E-0087: замыкание §70 любой арности и с окном effective (02.09.2026). Закрытый предикат — любой арности, домен — предикат той же арности; closure принимает effective §87 (грамматика, схема CLIR, понижение), и замыкание отменённого акта вне окна не порождает негативов. Четыре вектора LAY-L0-CLOSURE-* в SUPPORTED; унарные замыкания корпуса байтово целы.

  • ERRATA E-0088: рекурсия доводов §274.2 — вне v1 (02.09.2026). Prose сужена по решению владельца, ноль байтов; вектор LAY-L3-ARG-RECURSION-REFUSED пиннит отказ §110 у обеих реализаций.

  • DECISION-0088 / WP-41: барьеры §111 в строгом слое (02.09.2026). Негативная голова §99, not_known §113 в строгом теле и агрегат или домен квантора по выводимому предикату без monotone исполняются стратами строгого слоя в обоих движках, а не отвергаются NON_EXECUTABLE_RULE; 23 правила четырёх пакетов ожили, реестр dead-rules.json/skipped пуст. Путь позитивной программы сохранён байтово. Граница: строгий читатель над поражаемыми производителями отказывается точной причиной и LDC-E4103. Lean допускает негативные головы и побеждения по их оппозиции. Шесть векторов в SUPPORTED; LAY-L0-QUANTIFIER-BARRIER и LAY-L1-PROPERTY-BARRIER-SKIPPED пересмотрены точечно с записью.

  • ERRATA E-0086: constraint §93.1 исполняется — §93.3 называет момент и место результата (01.09.2026). До errata ни один движок не вычислял constraint (172 узла в 21 пакете), prose не говорила, где живёт результат. Теперь при каждом evaluation после strata: результаты CONSTRAINT в results[] (вердикт — normativeStatus), узлы constraint_check, issues CONSTRAINT_VIOLATED/CONSTRAINT_CONFLICTED с объявленной severity; четырёхзначное чтение when/require сквозь обёртку established §204. Схема и TS-типы протокола расширены аддитивно, Lean сверяет структуру узла. Девять векторов LAY-L0-CONSTRAINT-* в SUPPORTED, differential 206/206. Реестр constraintOnly снят. Байты документов пакетов с constraint-ами сдвинулись; четыре сценария корпуса разошлись с ожиданиями и по решению владельца перечислены в STATUS.md, а не починены.

  • ERRATA E-0085: деньги на долю — Money * Rational (§58/§50, 01.09.2026). Ст. 78 Социального кодекса РК считает income * (days / 30.0); при числе дней, не кратном трём, частное есть точный Rational, и произведение было TYPE_ERROR — норма молчала на 134 входах из 200 при зелёных воротах. Таблица множимых §58 получила строку Money * Rational (и обратный порядок): произведение точное по правилу Money / Decimal — 10-гладкий итог даёт Money, иначе INEXACT_DIVISION; §50 округления не подразумевает и здесь. Decimal * Rational остаётся TYPE_ERROR (T163 цел), Quantity * Rational не названо до акта-свидетеля (DECISION-0068). Пять векторов ERR-E0085-* в SUPPORTED, differential 197/197 байтово, статика law-hir знает вид пары. Байты корпуса не сдвинулись: пары не существовало.

  • Новый срез kz.grammar.punktuacia_qurmalas (реестровый №62) — знаки в сложном предложении (02.09.2026). §§97—112 главы ІІ целиком: 25 862 / 167 499 байт (15,4 %), 16 правил. Знак выбирается отношением между частями; опущенный союз оставляет знак, зависящий от того, какой союз опущен; повтор союза здесь не решает ничего — противоположно разделу 7 той же главы. §§110—111 говорят о границе самого понятия. Приёмка: 4/4 сценария, 13/13 differential байтово, §33.1 EXECUTABLE 16 из 16.

  • Новый срез kz.grammar.punktuacia_tol_soz (реестровый №63) — знаки при прямой речи; глава ІІ закрыта, 126 из 126 единиц (02.09.2026). §§113—126 целиком: 27 534 / 167 499 байт (16,4 %), 25 правил. Знак выбирается порядком прямой речи и слов автора и типом предложения; место знака относительно кавычек — самостоятельная норма; пять клеток говорят «это не прямая речь». Глава взята восемью пакетами за один день. Приёмка: 4/4 сценария, 18/18 differential байтово, §33.1 EXECUTABLE 14 из 14.

  • Новый срез kz.grammar.punktuacia_birynggai (реестровый №61) — знаки при однородных членах (02.09.2026). §§75—96 главы ІІ целиком, самый большой раздел: 25 696 / 167 499 байт (15,3 %), 23 правила. Повтор союза решает запятую; один и тот же да даёт два ответа по части речи членов; место обобщающего слова решает знак. Шесть клеток говорят «знака нет», и каждая объяснена источником. Приёмка: 6/6 сценариев, 16/16 differential байтово, §33.1 EXECUTABLE 22 из 22 при нуле UNEXPLAINED.

  • Раздел 6 главы ІІ (§§69—74) взят расширением kz.grammar.punktuacia_ongashalangan_aiqyndauysh (02.09.2026). Пакет заводился на вводном очерке, потому что глава не была закреплена; три его клетки оказались её пересказом и получили второй якорь. Сверх них глава даёт тире вместо запятой и разрешение §69, согласование как признак §74, омонимию оборота §71 и два новых основания §§72—73. Порядок редакций изменён, чтобы мера глубины читала измеримый документ. Приёмка: 8/8 сценариев, 20/20 differential байтово, §33.1 EXECUTABLE 6 из 6.

  • Новый срез kz.grammar.punktuacia_odagai (реестровый №60) — знаки при междометии (02.09.2026). §§61—68 главы ІІ целиком: 7 113 / 167 499 байт (4,2 %), 10 правил. Третье место корпуса о междометии: письмо (№43), звучание (№52) и знаки (здесь) не пересекаются ни одной клеткой. Два параграфа говорят о различении, а не о знаке, и требование различать выражено выводом; §64 знака не называет, и пакет его не выдумывает. Приёмка: 3/3 сценария, 9/9 differential байтово, §33.1 EXECUTABLE 8 из 8.

  • Новый срез kz.grammar.punktuacia_qystyrma (реестровый №59) — знаки при вводном слове (02.09.2026). §§50—60 главы ІІ целиком: 16 013 / 167 499 байт (9,6 %), 15 правил. Раздел даёт три ответа — запятая, скобки и ничего; третий выражен выводом, потому что §57 назван источником как предупреждение об ошибке. §51 описывает состав и даёт цепь до знака, а §56 снимает запятую по окружению. Приёмка: 3/3 сценария, 9/9 differential байтово, §33.1 EXECUTABLE 11 из 11 при нуле UNEXPLAINED.

  • Новый срез kz.grammar.punktuacia_qaratpa (реестровый №58) — знаки при обращении (02.09.2026). §§43—49 главы ІІ целиком: 5 870 / 167 499 байт (3,5 %), 14 правил. Раздел отвечает на два вопроса разом: обращение отделяется запятой снаружи и не отделяется знаком внутри; место запятой — часть нормы, а подъём голоса меняет сам знак. Приёмка: 3/3 сценария, 10/10 differential байтово, §33.1 EXECUTABLE 7 из 7 при нуле UNEXPLAINED.

  • Новый срез kz.grammar.punktuacia_syzyqsha (реестровый №57) — тире между подлежащим и сказуемым (02.09.2026). §§20—42 главы ІІ целиком: 24 959 / 167 499 байт (14,9 %), 25 правил. У раздела два рода оснований — по частям речи и по опасности спутать, где часть речи роли не играет; четыре клетки снимают тире самостоятельными основаниями, а не поражением; §28 даёт одной форме два ответа по значению причастия. Приёмка: 7/7 сценариев, 16/16 differential байтово, §33.1 EXECUTABLE 23 из 23 при нуле UNEXPLAINED.

  • Пунктуация справочника закреплена байтами; новый срез kz.grammar.punktuacia_soilem_sony (реестровый №56) — знаки в конце предложения (02.09.2026). Фетчер извлекал три части книги из пяти и объяснял отказ тем, что «из разделов о знаках препинания не выводится ничего»; с 31.08.2026 это неверно — срезы №37—39 выводят правила, беря фрагменты из вводного очерка. Закреплены обе главы (§§1—126 и §§1—87, нумерация сплошная), и на первой заведён срез: §§1—19, 23 032 / 167 499 байт (13,8 %), 31 правило. Содержание раздела — расхождение формы и знака; ключа у результата нет, потому что §13 оставляет выбор автору, а §§18—19 ставят два знака подряд. Приёмка: 4/4 сценария, 19/19 differential байтово, §33.1 EXECUTABLE 19 из 19 при нуле UNEXPLAINED.

  • Срезы kz.grammar.duryz_aitu (№54, §§35—36) и kz.grammar.aituda_tolyq (№55, §§27—28) — раздел «Сөз сазы» закрыт, 36 из 36 единиц (02.09.2026). №54: 11 112 / 109 265 байт (10,2 %), 15 правил — язык-источник есть основание нормы, и одно положение «это заимствование» даёт три разных ответа; §35 требует произносить иначе, чем написано, в обе стороны; вердикт «противоречит норме» имеет своё основание. №55: 5 094 / 109 265 байт (4,7 %), 5 правил — сокращение меры читается полным словом, а -сың против -сын решает местоимение. Приёмка: 4/4 и 2/2 сценария, 14/14 и 6/6 differential байтово, §33.1 EXECUTABLE 2 из 2 у каждого при нуле UNEXPLAINED.

  • Новый срез kz.grammar.yqsham_tulgalar (реестровый №53) — полная и сокращённая формы глагола (02.09.2026). §§33—34 раздела «Сөз сазы»: 6 227 / 109 265 байт (5,7 %), 6 правил. Запрет §33 двусторонний, и обе половины выражены раздельно; §34 даёт разрешение, а не обязанность, и вне стиха его выводы молчат. Приёмка: 2/2 сценария, 9/9 differential байтово, §33.1 EXECUTABLE 2 из 2 при нуле UNEXPLAINED.

  • kz.grammar.yrgaq расширен на §29 — тот же стык со стороны частицы (02.09.2026). Начальный звук частицы становится звонким либо глухим по концу предыдущего слова, и это отражается в письме; обратное источник называет прямо недопустимым, и запрет выражен отдельным выводом. Приёмка: 7/7 сценариев, 24/24 differential байтово, §33.1 EXECUTABLE 7 из 7 при нуле UNEXPLAINED.

  • Новый срез kz.grammar.dybystyq_varianttar (реестровый №52) — когда два звучания одного слова оба допустимы (02.09.2026). §§30—32 раздела «Сөз сазы»: 8 468 / 109 265 байт (7,7 %), 8 правил. Три группы вариантов дают три разных ответа, и сценарий проверяет молчание по чужим выводам; намеренность автора поражает исправление при чтении. §32 есть зеркало среза №43: там междометие пишется как слышится, здесь — произносится как написано. Приёмка: 3/3 сценария, 11/11 differential байтово, §33.1 EXECUTABLE 3 из 3 при нуле UNEXPLAINED.

  • Новый срез kz.grammar.qosymsha_dybysy (реестровый №51) и §21 вторым якорем в kz.grammar.kirme_sozder (02.09.2026). §§22—23 раздела «Сөз сазы»: 3 254 / 109 265 байт (3,0 %), 9 правил. §22 даёт два противоположных ответа по признаку «чей мягкий знак», §23 меняет и звучание, и письмо, а его исключение названо поимённо и поражает общее правило. §21 повторяет §33 главы орфографии и получил второй якорь, ради чего kirme_sozder стал двухдокументным. Класс LDC-E4103 поймал компилятор, а не прогон. Приёмка: 3/3 сценария, 12/12 и 52/52 differential байтово.

  • §§24—26 раздела «Сөз сазы» взяты в kz.grammar.singarmonizm — первый повтор нормы между ДОКУМЕНТАМИ справочника (02.09.2026). §24 и §26 повторяют клетки §§29 и 26 главы орфографии и получили вторые якоря, а не новые правила. Две клетки шире главы и выражены отдельно: «е в последнем слоге» (§25 против §30) и фамилии на -ин, о которых глава молчит вовсе. Обе проверены на слове с жуан собственным рядом, иначе ответ совпал бы с общим законом. Приёмка: 14/14 сценариев, 63/63 differential байтово, разметка 40/0 и 47/0.

  • Новый срез kz.grammar.aralas_buyn (реестровый №50) — почти не слышные звуки и слоги разного ряда (02.09.2026). §§14 и 18 раздела «Сөз сазы»: 3 862 / 109 265 байт (3,5 %), 8 правил. §14 даёт норму и разрешение в одном параграфе, и они не отменяют друг друга; §18 называет обе группы поимённо и не даёт критерия между ними, поэтому общее правило поражаемо названным рядом слов, а не выдуманным признаком. Приёмка: 3/3 сценария, 12/12 differential байтово, §33.1 EXECUTABLE 2 из 2 при нуле UNEXPLAINED.

  • Новый срез kz.grammar.i_u_dybystaluy (реестровый №49) — одна буква за два звука (02.09.2026). §§16—17 раздела «Сөз сазы»: 11 755 / 109 265 байт (10,8 %), 13 правил. Источник даёт три разных способа узнать ряд буквы, которая ряда не несёт, и третий — «по смыслу предложения» — есть граница движка: у односложных выводится обязанность различать, а не ряд. Соблазн канала суждения §47.3 отклонён явно: §17 не называет органа, решающего вопрос. Исключение сый, тый выражено дефитером с причиной, названной источником. Приёмка: 4/4 сценария, 13/13 differential байтово, §33.1 EXECUTABLE 2 из 2 при нуле UNEXPLAINED.

  • Новый срез kz.grammar.kirme_dybystaluy (реестровый №48) — звучание конца заимствования (02.09.2026). §§9 и 19 раздела «Сөз сазы»: 2 200 / 109 265 байт (2,0 %), 6 правил. Источник сам строит цепь вывода («болғандықтан»), и правило об аффиксе читает вывод первого правила, а не факт дела. §19 отличает должное от наблюдаемого, и это выражено силой правил: строгая норма о притяжательном III лица против поражаемого наблюдения о склонности. Приёмка: 5/5 сценариев, 14/14 differential байтово, §33.1 EXECUTABLE 2 из 2 при нуле UNEXPLAINED.

  • kz.grammar.yrgaq расширен на §15 — третий исход того же стыка (02.09.2026). §§1—5 меняют согласный, §15 говорит о встрече двух гласных: один «проглатывается» (торы ат → торат). Источник сам перечисляет, что закону подчиняются все виды стыка, что подтвердило выбранную форму носителя. Приёмка: 6/6 сценариев, 19/19 differential байтово, §33.1 EXECUTABLE 6 из 6 при нуле UNEXPLAINED.

  • Сквозные сценарии доведены до всех пар документов семьи (02.09.2026). Добавлены три пары: приказ № 468 × справочник (единственная пара разных источников — НПА против доктрины, шов проходит по адресату запроса суждения §47.3), один стык с двумя влияниями §6 в двух пакетах, глава орфографии × раздел о знаках препинания. Находка: один ритмический стык §6 живёт в корпусе как две несовместимые сущности — assimilation_regressive переехал на общую ось стыка phon, assimilation_progressive держит собственный носитель, и дело приходится писать дважды разными словами; ни одни ворота этого не видят. Приёмка: 7/7 сценариев, 23/23 differential байтово.

  • Сквозные сценарии через два документа справочника — семейство grammar_cross_document (02.09.2026). Срезы казахской грамматики проверялись в изоляции, а справочник состоит из двух документов — о письме и о звучании, — и об одном слове они говорят с двух сторон. Четыре сценария закрывают два невидимых класса: полный ответ, которого нет ни у одного пакета в одиночку (жайлау), и одна норма, напечатанная в обоих документах и выводимая двумя пакетами порознь (жуан-аффикс при ә). Мир не склеивается: пакеты друг друга не импортируют, сквозным является ожидание, а не исполнение. Детектор проверен мутацией IR в памяти, без правки дерева. Приёмка: 4/4 сценария, 12/12 KZ-differential байтово.

  • Словарь kz.grammar.lexicon расширен втрое — с 11 слов до 40, без единого нового источника (02.09.2026). Оба закреплённых фрагмента те же; выросло прочтение: § 31 называет свои перечни примерами каждого подпункта и трёх ескерту, а очерк — сериями тәуелдік и жіктік. Каждое слово оговорено строкой источника, и оговорка сверена машинно с байтами до записи. Проверка отвергла шесть слов по четырём разным причинам: класс звука не назван буквой; аффикс примера не показывает ряда (-у и -қой § 26); байты несут слово искажённым распознаванием («прин-ңип» вместо «принцип»); какой звук конечный у удвоения, § 31 не решает. Рост словаря пересобрал пять потребителей; у koptik словарная таблица выросла с 10 слов до 32, а канал суждения §47.3 перестал держаться на одном примере — сонорных основ стало восемь. Приёмка: 7/7 и 7/7 сценариев, differential 115 вызовов байтово (было 34).

  • Ось СТЫКА вынесена в каркасный kz.grammar.phon (02.09.2026). Раздел «Сөз сазы» говорит о стыке двух членов в §§1—8, и каждый срез держал собственный носитель — из-за чего §6, прямо называющий случай с двумя правилами разных пакетов на одном стыке, требовал пяти фактов в двух несовместимых формах. Теперь phon держит носитель, обе позиции (включая начало второго члена, которого не было ни у кого) и вывод класса той же классификацией §31. Сверка семи перечней §§1—5 с классами дала совпадение ровно одно: §31 делит звуки для выбора аффикса, «Сөз сазы» — для озвончения, и чтение класса вместо перечня расширило бы норму. yrgaq и assimilation_regressive переведены, следом — assimilation_progressive (с каналом суждения §47.3), k_g_alternation и qosymsha_dybysy: собственных носителей стыка в разделе о звучании не осталось, пять срезов читают один. Приёмка: 15/15, 8/8, 8/8, 5/5, 8/8 и 3/3 сценариев, зелёная регрессия всех восьми зависимых от phon, 494 evaluate-вызова differential байтово по четырнадцати семействам.

  • Новый срез kz.grammar.a_dybystaluy (реестровый №47) — где пишется а, а слышится ә (02.09.2026). §§11—12 раздела «Сөз сазы»: 4 837 / 109 265 байт (4,4 %), 9 правил. Расхождение письма и звучания составляет саму норму, поэтому у слова два вывода разом; перечень §11 поражает ровно вывод о письме, а мягкое звучание остаётся. Главная клетка — аффикс идёт жуан вопреки мягкому корню. Границу с §26 ескерту 2 главы орфографии (та же норма со стороны письма, выраженная singarmonizm) проведена явно, чтобы один вывод не делали два пакета. Приёмка: 4/4 сценария, 10/10 differential байтово, §33.1 EXECUTABLE 2 из 2 при нуле UNEXPLAINED.

  • Новый срез kz.grammar.erin_undestigi (реестровый №46) — губная гармония и первый прямой вердикт об ошибке (02.09.2026). §10 раздела «Сөз сазы»: 4 954 / 109 265 байт (4,5 %), 7 правил. Источник впервые в семье называет чтение по написанию ошибкой, и это самостоятельный вывод со своим основанием. Гармония идёт по двум независимым осям, убывание её силы выражено собственным отношением, а закрытый первый слог — вторым основанием, а не исключением. Приёмка: 4/4 сценария, 12/12 differential байтово, разметка 15/0 и 7/0, §33.1 EXECUTABLE 1 из 1 при нуле UNEXPLAINED.

  • Новый срез kz.grammar.yrgaq (реестровый №45) — открыт документ о ЗВУЧАНИИ слова (02.09.2026). §§1—5 раздела «Сөз сазы»: 12 363 / 109 265 байт (11,3 %), 6 правил. Первый пакет семьи, чей результат — не письмо, а звучание: источник печатает две колонки, «Жазылуы» и «Айтылуы». Предмет нормы — стык двух членов одной ритмической группы, а не слово. Озвончение идёт в обе стороны (§§1—2 меняют начало второго члена, §3 — конец первого), §§4—5 дают три непересекающихся удвоения, а §5 сам распространяет закон на стык корня с аффиксом. Приёмка: 5/5 сценариев, 16/16 differential байтово, разметка 16/0 и 6/0, §33.1 EXECUTABLE 5 из 5 при нуле UNEXPLAINED, doctor «пробелов нет».

  • §117 взят вторым якорем в kz.grammar.qysqartu — глава заявлена целиком, 129 из 129 (01.09.2026). Последняя незаявленная единица нашлась СЧЁТОМ, а не чтением: объединение scope всех articles.json семьи против §§1—129. Право §117 давно выражено §79, но сама единица не принадлежала никому — а незаявленную единицу не видит ни одна мера: она не бывает ни SOURCE_ONLY, ни UNEXPLAINED, её просто нет в знаменателе. Взята вторым якорем на существующее правило, а не своим: одна норма — одно правило, сколько бы мест источника её ни печатали.

  • Новый срез kz.grammar.nusqa (реестровый №44) — вариантность написания корня; глава «Орфография ережелері» закрыта (01.09.2026). §24, последняя свободная единица подраздела о письме корней: 2 102 / 176 968 байт (1,2 %), 7 правил. Второе место справочника, где несколько написаний одного слова допущены прямо, и допущены иначе, чем у междометий: источник делит корни на две группы и требует их различать — у одной оба варианта законны параллельно, у другой принят один, он входит в словарь, а прочие помечаются «емес». Дефитер взят у самого источника: устоявшееся написание снимает помету, и поражена ровно она — словарь остаётся. Приёмка: 3/3 сценария, 16/16 differential байтово, разметка 11/0 и 7/0, §33.1 EXECUTABLE 1 из 1 при нуле UNEXPLAINED, doctor «пробелов нет».

  • kz.grammar.kirme_sozder расширен на §33, kz.grammar.shylau — на §40 (01.09.2026). §33 — первое место среза кірме сөздер, где письмо слова зависит от присоединяемого аффикса («класс», но «класқа»), и два класса имён дают противоположные ответы: у нарицательных конечный согласный выпадает, у собственных двойная буква сохраняется. Правило о трёх одинаковых буквах не отменяет сохранения — в «Гриммен» ушёл согласный аффикса, а не корня. §40 — пятый за день повтор нормы под другим номером: его середина равна §87, и двум правилам ма-семьи он дал лишь второй якорь; собственная клетка одна и шире §87 (остальные частицы форму не меняют). Приёмка: 9/9 и 15/15 сценариев, 52/52 и 74/74 differential байтово, §33.1 EXECUTABLE 6 из 6 и 7 из 7 при нуле UNEXPLAINED, doctor «пробелов нет» у обоих.

  • kz.grammar.singarmonizm расширен на §§20 и 26 — ряд КОРНЯ и фамильные аффиксы (01.09.2026). §20 отвечает на вопрос, предшествующий всему пакету: какими буквами пишется сам корень, а не каким рядом присоединяется аффикс; «көбінесе» источника выражено презумпцией, опровергаемой фактом смешанного слога. §26 — единственное место пакета, где гармония не решает ничего: выбор между -ев, -ов и -ин решает конечный звук имени, ключа у выбора нет (имя на гласный получает и -ин «әдетте», и -ев «мүмкін»), а гармония возвращается один раз — от ИСХОДНОГО корня (Аймановқа жуан по Ай-ман). Ескерту 2 добавляет отступление с обратным знаком: ә тянет жуан аффикс. Приёмка: 13/13 сценариев, 59/59 KZ-differential байтово, разметка 38/0 и 43/0, §33.1 EXECUTABLE 8 из 8 при нуле UNEXPLAINED, doctor «пробелов нет».

  • Новый срез kz.grammar.odagai (реестровый №43) — письмо междометий; раздел взят ЦЕЛИКОМ (01.09.2026). Раздел 10 главы, обе его единицы §§89—90, 1 049 / 176 968 байт (0,6 %), 4 правила. Единственное место главы, где источник допускает несколько написаний одного слова, и это содержание нормы, а не пробел: §89 даёт два разных вывода из одного основания — письмо по слуху и допустимость двух-трёх написаний, — и второе источник выводит сам, словом «сондықтан». «Көбінесе» есть хедж самого справочника, поэтому обе нормы §89 поражаемы БЕЗ дефитера: чем они поражаются, §89 не говорит. §90 даёт единственную клетку со знаком на двух основаниях — повтор слова и повтор отдельных звуков, — то есть двумя правилами (§206). Приёмка: 3/3 сценария, 7/7 KZ-differential байтово, разметка 7/0 и 4/0, §33.1 EXECUTABLE 2 из 2 при нуле UNEXPLAINED, doctor «пробелов нет».

  • Новый срез kz.grammar.dauyssyz_arip (реестровый №42) — письмо согласных букв; волна 7 заведена целиком (01.09.2026). Раздел 2 главы, шесть свободных единиц из восьми, 4 168 / 176 968 байт (2,4 %), 19 правил. У согласных ответ чаще всего есть происхождение слова, а не позиция: одно объявление «слово пришло через русский» даёт шесть букв разом. Раздел говорит и о том, где буква НЕ пишется (й после полного и, щ на стыке ш с ш), и это отдельный вывод собственным отношением, а не NEITHER: «не пишется» есть утверждение источника, а NEITHER — молчание пакета. Ескерту §14 не только запрещает щ, но и поражает его вывод, поэтому норма о щ поражаема — класс мёртвого дефитера учтён заранее, по опыту №41. Приёмка: 6/6 сценариев, 32/32 KZ-differential байтово, разметка 17/0 и 19/0, §33.1 EXECUTABLE 6 из 6 при нуле UNEXPLAINED, doctor.py без пробелов.

  • ERRATA E-0084: границы месяца термами — month_start_of и month_end_of (§84.2/§258, 01.09.2026). Срок «не позднее N-го числа месяца, следующего за отчётным» ядром не выводился: шаг «первое число следующего месяца плюс N дней» требует в одном деле календарной и дневной единицы, а policy.month_end обязателен у первых и запрещён у вторых (E-0029) при одной политике §86 на дело. Два одноместных терма над Date дают границы месяца без политики и без снимка §85: форма нормы — add_business_days(month_end_of(event), N calendar_day) при start_count = next_day, число N остаётся числом из текста. Конструктор date_of(год, месяц, день) отвергнут — он принёс бы переполнение месяца и несуществующий день, а границам они не нужны. Пять реестров std правлены синхронно, семь векторов ERR-E0084-* в SUPPORTED, differential 192/192 байтово. Голден ERR-E0076-STD-SLICE-ORDER сдвинут точечно (два пути: перечень в сообщении и resultHash) — вектор сам требует этого от нового имени в перечне.

  • Новый срез kz.grammar.dauysty_arip (реестровый №41) — письмо гласных букв (01.09.2026). Раздел 1 главы «Орфография ережелері», восемь свободных единиц из одиннадцати, 12 888 / 176 968 байт (7,3 %), 28 правил. Выражены оба слоя раздела: позиция буквы и расхождение слышимого с письменным. Два дефекта модели поймало ИСПОЛНЕНИЕ, и оба невидимы статически: key(t) у результата утверждал «в месте ровно одна буква», чего источник не говорит (§1 и §9 оба верны об одном слоге — это утверждения о допустимости), и дефитер над строгой головой был мёртв (§111, LDC-E4103) при чистом lawc check. Ключ снят, пять правил стали поражаемыми. Приёмка: 6/6 сценариев, 34/34 KZ-differential байтово, разметка 22/0 и 28/0, §33.1 EXECUTABLE 8 из 8 при нуле UNEXPLAINED, check_corpus_enrollment и doctor.py без пробелов.

  • scrum.guide: The 2020 Scrum Guide заведён пакетом (01.09.2026). Первый акт из мира системной и бизнес-аналитики: HTML scrumguides.org закреплён основной колонкой с sha256 в получателе, 28 именованных разделов по дереву заголовков издателя, §33.1 EXECUTABLE 25 / SOURCE_ONLY 3 при нуле UNEXPLAINED, 92,6 % байтов. Состав команды — агрегат §59 по трём эмпирическим отношениям, таймбоксы — термы minutes_between против потолка, длина спринта — календарный месяц с политикой §86 из профиля контекста, отмена спринта — полномочие §127 с единственным носителем, запреты «во время спринта» — обязанности поддержания с презумпцией, Definition of Done — замыкание §70, автомат спринта §160. НАХОДКА ЗАХОДА: обязанность достижения после окна без замыкания над ЭМПИРИЧЕСКИМ условием остаётся UNDETERMINED, а не VIOLATED. Приёмка: 43/43 сценария парами, 43 вызова KZ-differential байтово, 6/6 .lawtest, разметка 130/6 (остаток — профиль процедуры) и 130/0, doctor.py без пробелов.

  • kz.grammar.singarmonizm: отступлений стало одиннадцать вместо двух — взят подраздел «Қосымшалардың жазылуы» §§25, 27—29 (01.09.2026). Правил 23 вместо 5, фрагментов 8 (19 678 / 357 263 байта, 5,5 %). Первые предложения §25, §27 и §29 повторяют общий закон и правила не получают — у существующего прибавились якоря. Восемь отступлений из девяти дают жіңішке и только одно — жуан: у в последнем слоге заимствования есть единственная причина заднего ряда. НАХОДКА ЗАХОДА: §25 и §28 сталкиваются на слове пункт (пу + нкт), оба дефитера срабатывают, каждый гасит вывод другого — ответ NEITHER по обоим рядам (KZ-SING-09). Источник не называет ни приоритета, ни органа, и молчание честнее выбора; заметить это можно было только исполнением — статически обе нормы выглядят независимыми. Приёмка: 9/9 сценариев, 41/41 KZ-differential байтово, разметка 12/0 и 23/0, §33.1 EXECUTABLE 6 при нуле UNEXPLAINED, doctor.py без пробелов.

  • kz.grammar.birge_bolek: подраздел дефиса §§69—78 — глава о письме сочетания закрыта целиком (01.09.2026). Все три подраздела: бөлек (§§49—57), бірге (§§58—65, §67) и дефис (§§69—78) — 28 единиц, 53 029 / 176 968 байт (30,0 %), 67 правил, четырнадцать результатов письма. У дефиса источник говорит разными словами, и «дефис САҚТАЛАДЫ» отделено: оно о сохранении уже стоящего дефиса при переносе имени из другого письма, а не о постановке нового (сторож KZ-BIB-13). Заход нашёл ЧЕТВЁРТУЮ копию конвенции kk_paragraph_sign, сломанную иначе: шаблон после утренней правки находит «§ 6 4 .», но отдаёт номер сырым захватом «6 4 », и locator article/64 такую единицу не находит. У ворот закрепления нормализатор есть, у act_split.py поля для него нет вовсе — нормализация добавлена в boundaries.py, где мера превращает совпадение в номер. После правки EXECUTABLE 28 из 28, а у kz.corpus.emle UNEXPLAINED честно вырос 125 → 126. Приёмка: 13/13 сценариев, 91/91 KZ-differential байтово, разметка 84/0 и 67/0, doctor без пробелов.

  • Лендинг: живой движок в браузере и «Скотный двор» в демо (01.09.2026). Дело о рейсе на главной больше не только записанный прогон: apps/landing/public/engine/live-worker.js исполняет копию law_wasm.wasm рабочего стола на копии CLIR Регламента 261/2004, посетитель меняет дистанцию, срок уведомления, признаки «внутри Союза» и «перевозчик доказал уведомление», а страница пересказывает evaluation-документ — статус, сумму, применённые правила с метками §218 и статьями, programHash; в трассу идёт ОПОРА ответа (узлы, достижимые от узла запроса по premises proof-графа), а не весь фикспойнт с отменой Регламента 295/91 и строками таблиц о задержке. Семантики в JS нет (инвариант 5): генератор tools/gen_live_bridge.py строит четыре шаблона дела функциями corpus/kz/acts/air_passenger_rights.py с сентинелями (дистанция — целое, момент извещения — URN; таблица «дни → момент» считается генератором, браузер лишь выбирает строку) и записывает реперную сетку ответов оракула lawref на 40 точках (границы полос 1500/3500 км, рубеж двух недель) — на них страница делает live-differential и называет расхождение словами; замер в панели браузера: 70–110 мс на прогон после загрузки 1,2 МБ wasm. Мост КОММИТИТСЯ (Vercel собирает лендинг без корпуса), его отставание ловят новые ворота verify/ci/gates/release/check_landing_live_bridge.py в шаге 51: байты wasm против рабочего стола, байты и semanticHash IR против corpus/clir/, состав моста, канарейка. Вторая вкладка демо — «Скотный двор»: четыре поправки стены как записанные прогоны проекции редакций §31 (lawref impact-editions на impact-scenarios/ пакета): кровати, казни, виски и переписанная стена — одни факты, две даты права, исход TRUE_ONLY → NEITHER, поправка восстановлена семантическим diff §215 (added/removed названы в трассе). Демо-дело фараида получило вариант «минбария» из казуса c-minbariyya.

  • corpus/laws/: черновик DECISION-0084 и его фаза 0 (01.09.2026). Черновик решения об одной оси дерева и о [metadata] act вместо имени акта из пути; инструмент verify/ci/tools/plan_laws_tree.py порождает таблицу переносов из метаданных. Фаза 0 исполнена: ворота Торы переехали из corpus/laws/he/ в класс sources (check_torah_thematic_packages.py, профиль gate, строгий argv); сводка волны А — в corpus/review/, четыре BLOCKED-заявки без .law — в corpus/drafts/kz-<акт>/; check_declared_layer обходит вложенные пакеты (rglob); подкаталоги пакета — закрытый список в docs/PACKAGE-LAYOUT.ru.md и проверка 6 линта formalize-act; таблица классов verify/ci/README.md пересчитана. Фаза 1 подготовлена: развилки §7 решены (Алаш и tuystyq → KZ, три правки †, CLIR перегенерированы), пять сканеров читают [metadata].act с откатом к пути, ворота check_laws_tree.py (plan-фаза, канарейка на шести мутациях), инструмент write_act_fields.py для тихого окна.

  • quran.maida в базе глубины §33.1 (01.09.2026). EXECUTABLE 42, SOURCE_ONLY 78, UNEXPLAINED 0: генератор фазы A объявляет границы по аятам из контракта (11 аятов чужого QCR-владения, 67 аятов сплошных границ), despite называет признаки тем же набором маркеров, что и ворота закрепления. Первый Tanzil-пакет группы quran в базе.

  • kz.corpus.srednyaya_zarplata — коэффициент повышения пункта 13 выводится делением Money / Money (01.09.2026, первый потребитель E-0083 в корпусе после zhss_premiya). Факт дела koeffitsient_povysheniya снят, отношение стало institutional: правило KoeffitsientPovysheniya делит ставку, установленную в последнем месяце повышения, на каждую ставку до повышения — с осью МЕСЯЦА (Date), потому что «каждую» и «каждого соответствующего месяца» иначе не сшиваются. Точность негладкого частного (7/6) акт не называет, и пакет её не выбирает: Rational в слоте Decimal даёт ровно TYPE_ERROR (E-0077), прочтения §152 нет намеренно, граница записана. Сценарии SZP-09/10 (пара по обе стороны гладкости) и SZP-11 (ось месяца), .lawtest 12; регрессия 11/11, differential 16 вызовов байтово, разметка §218 затянута 57/0 и 35/0.

  • quran.maida — фаза C: QCR-зачисление (01.09.2026). Ledger qcr_enrolled, пакет в SOURCES реестра: первичный владелец 109 аятов, в 11 аятах с точными потребителями atima/hajj/salat — вторичное свидетельство. Реестр: CLAUSE_REVIEWED 908 → 1 016, клауз 1 899 → 2 298, прогресс затянут. В choose_canonical_claim явно заданный владелец теперь побеждает предпочтение Tanzil-точного разбора (иначе зачисление целой суры переписало бы владение уже пройденных аятов); генератор сверяет таблицу владельцев с составом единиц.

  • Реестровый №35 сведён в №31 (01.09.2026). kz.grammar.sheteldik_ataular выражал ровно один §107, а его подочередь (§§94, 99, 100, 104) оказалась выражена в kz.grammar.bas_arip. Срез снят: §107 переехал в №31 со своим фрагментом, основанием, правилом и сценарием; удалены каталог, CLIR, раннер, строка LOWERED_ACTS и записи в четырёх реестрах. Переезд вскрыл ошибку предыдущего захода: §107 говорит «бірінші сөзі», а §§101, 108, 109, 112 — «бірінші сөзі ҒАНА», и первый заход слил обе формулировки в одно отношение, заявив исключительность там, где источник её не пишет (пять норм из девяти). Ошибка была невидима линту: отношение одно, дублирующихся меток нет. Заведено второе отношение, шесть правил переведены, сторож KZ-BAR-17 проверяет, что «ғана» и «без ғана» не подменяют друг друга. Долг назван: индекс витрины остался при снятом пакете — ручная правка генерируемого запрещена инвариантом 2, а перегенерация втянула бы в коммит десять чужих незакоммиченных CLIR. Приёмка №31: 17/17 сценариев, 107/107 KZ-differential байтово, разметка 91/0 и 79/0, §33.1 EXECUTABLE 26 из 26 при нуле UNEXPLAINED.

  • quran.maida — фаза B: proof-матрица 104 сценария (01.09.2026). Раннер corpus/kz/acts/quran_maida.py на общей матрице exact_quran_proof_matrix: 92 прямых правила и 6 прочтений парой «база/выбор»; контракт фазы B пиннит полный кортеж якорей прочтения (хираба 5:33 — четыре клаузы). Регрессия 104/104, differential 104/104 байтово, исполненные выводы 163/163, .lawtest 104/104. Семейство вписано в check_executed_derivations, храповик и манифест; тест ворот приведён к их же константе (краснел с an_nisa).

  • Конвенция счёта единиц kk_paragraph_sign видела 127 из 129 — исправлена во всех трёх местах (01.09.2026). Слепое пятно перестало быть тихим: ворота закрепления ОТКАЗАЛИ пакету, объявившему scope на §63 и §64, чьи байты закреплены и сверены. Выражение теперь допускает пробелы и перед номером (включая перенос строки), и внутри него; исправлены check_source_pinning.py, corpus/tools/lib/act_split.py и генератор sync_emle_fragments.py. Замер после правки: 129 + 36 единиц, пропусков в рядах нет; полный прогон закрепления — 0 нарушений по корпусу. Следствия названы: у kz.corpus.emle стало 172 фрагмента вместо 170 и UNEXPLAINED вырос 124 → 125 (две единицы стали видимы, одна честно не объяснена — исправление занижения, а не регресс); генератору понадобилась нормализация номера, иначе имя фрагмента получало пробел внутри. Ошибочный вывод «§63 и §64 отсутствуют» был записан в шапке самого генератора и закреплён числом 127 — он держался на измерении сломанным инструментом.

  • kz.grammar.birge_bolek: подраздел слитного письма §§58—65 и §67 — предмет среза закрыт (01.09.2026). Восемнадцать единиц, 42 631 / 176 968 байт (24,1 %), правил 42. У слитности две независимые характеристики, и §58 называет их одной фразой: как пишется и что происходит с корнем; §59 и §61 отменяют вторую, слитность остаётся. Четыре слова источника для слитности не слиты — что это одна графика, текст нигде не утверждает; неразличимость меток поймал lint.py. Приёмка: 11/11 сценариев, 61/61 KZ-differential байтово, разметка 51/0 и 42/0, §33.1 EXECUTABLE 17 из 18 при нуле UNEXPLAINED, doctor.py без пробелов.

  • quran.maida — фаза A закрыта, CLIR заведён (01.09.2026). Пакет стоял без CLIR: порождённые файлы не проходили lawc check (две головы в одном правиле §206, повтор объявлений §24, носитель чужого типа §48 в прочтениях). Починен генератор фазы A, правила получили метки §218 арабской клаузой (NFC — сырые байты Tanzil роняли lawc lower при зелёном check), пакет вписан в LOWERED_ACTS, ворота мёртвого словаря и провенанса Quran, храповик разметки и витрину islam. 98 правил, 65 норм, 613 фрагментов. QCR и сценарии — фазы B/C. Общая матрица exact_quran_proof_matrix переименована без префикса run_: ворота полноты корпуса считали её раннером без строки в таблицах.

  • kz.grammar.birge_bolek расширен на оба примечания §49 и §§50—57 — раздел противоречит своему заголовку (01.09.2026). Девять единиц, 12 057 / 176 968 байт (6,8 %), правил 19 вместо 1. Раздел называется «раздельно пишущиеся слова», но внутри него источник четырежды называет обратный результат со своим основанием: слитно и с прописной, через запятую, через дефис, слитно, объединённо. Поэтому у пакета семь результатов письма, а не один. §§51—54 дают одну раздельность из семи разных оснований — §206 требует по правилу на каждое, иначе whynot не назвал бы, какое сработало. §55 взят наполовину: его капитализация эпитета по позиции дословно повторяет §94, уже выраженный kz.grammar.bas_arip, — третий за день повтор нормы между разделами справочника. Поражаемых норм нет: ни один из девяти параграфов себя не хеджирует. Заход попутно нашёл слепое пятно у счётчика единиц: §§63—64 сперва были сочтены отсутствующими, но они есть — у них искажены OCR-ом заголовки («§\n63.» разорван переносом, «§ 6 4 .» набран с пробелами между цифрами; тем же страдает §47). Конвенция kk_paragraph_sign видит 127 единиц там, где документ содержит 129, а невидимая единица не может стать ни SOURCE_ONLY, ни UNEXPLAINED — она выпадает из учёта целиком. Правка выражения сдвинула бы знаменатель §33.1 у всех 33 пакетов на этом документе и оставлена решением реестра. Приёмка: 8/8 сценариев (было 2), 34/34 KZ-differential байтово, разметка 27/0 и 19/0, §33.1 EXECUTABLE 9 из 9 при нуле UNEXPLAINED, doctor.py без пробелов; храповик сценариев 2 → 8.

  • kz.grammar.kirme_sozder расширен на §§15—16 и §§22—23 — подочередь закрыта, и акт перестал быть набором островов (01.09.2026). Пять фрагментов, 4 928 / 176 968 байт (2,8 %), правил 11 вместо 1. Главное здесь не объём, а починенная связность: §21 брал происхождение слова одним слитным фактом дела, тогда как текст говорит конъюнкцией. Посылка разделена, происхождение выводится §15 из конечного звука. Три хеджа источника («негізінен» §15, «басым көпшілігі» §21, «негізінен» §22) стали тремя поражаемыми нормами, и все три дефитера названы тем же текстом. Отдельно записана граница ЯДРА, а не нормы: первое правило §16 источник не хеджирует, но оно читает выведенное происхождение, а строгое правило не вправе читать вывод поражаемого (LDC-E4103). «Ғана» §16 даёт два результата, и отрицательная сторона выражена положительным фактом дела, а не not P. Носитель переименован: прежнее имя называло результат §21, а не предмет. Приёмка: 7/7 сценариев (было 2), 45/45 KZ-differential байтово, разметка 19/0 и 11/0, §33.1 EXECUTABLE 5 из 5 при нуле UNEXPLAINED, doctor.py без пробелов; храповик сценариев 2 → 7.

  • kz.grammar.bas_arip расширен на §§92—99: правил 40 вместо 4 (01.09.2026). Взят цельный блок о начале отрезка речи и об именах — восемь параграфов, 12 021 новый байт (вместе с §91 — 13 026 / 176 968, 7,4 %, scope 9 из 127 единиц). Пакет перестал быть односторонним: §92 и §93 дают на одном носителе прописную и строчную, и ни один результат не подменяет другого. У постоянного эпитета §94 результат решает только позиция относительно имени собственного. «Негізінен» §94 и «кейбір» §99 сделали русское написание поражаемым, а устоявшуюся казахскую форму — дефитером: без них Шыңғыс хан и Қытай получали бы оба результата разом и молча. Результатов письма девять, а не один. Записан принцип аттестации, отличающий орфографический срез от парадигмы: там клетку опознаёт пример, здесь условие и результат напечатаны словами. Статический аудит до дорогих прогонов нашёл три несплетённые дизъюнкции — расщеплены по §206 до differential. Приёмка: 13/13 сценариев (было 5), 59/59 KZ-differential байтово, разметка 50/0 и 40/0, §33.1 EXECUTABLE 9 из 9 при нуле UNEXPLAINED, doctor.py без пробелов. ТРЕТЬИМ заходом того же дня взяты §§100—106 и §§108—116: раздел «Бас әріптің қолданылуы» выражен на 25 единиц из 27 — 27 232 / 176 968 байт (15,4 %), правил 78. ДВЕ единицы не взяты намеренно, и обе — находки одного класса: сам справочник повторяет норму в разных разделах. §107 уже выражает kz.grammar.sheteldik_ataular (№35); §117 повторяет клетку §79, которую уже выражает kz.grammar.qysqartu (№33) — и тот пакет записал повтор в своей шапке заранее. Ни одни ворота корпуса такого дубля не видят: мера §33.1 считает EXECUTABLE поакт-но, а сверка охватов ловит лишь пересечение НОМЕРОВ единиц. Строка храповика меток ослаблена осознанно дважды. У прописной обнаружился ОБЪЁМ: «әрбір сөзі» против «бірінші сөзі ғана» — два разных результата, а не оттенок одного (KZ-BAR-17 сторожит, что они не подменяют друг друга); всего результатов письма стало четырнадцать. Ещё два поражаемых слоя хеджировал сам источник (§110 ескерту 2 и §116 «көбінесе»). §111 «у некоторых и второе слово» и §112 «осы тәртіппен» правил не получили и названы границами. Сценарий поймал реальный дефект: §115 имел голову bas_arippen_zhazylady при тексте «әрбір сөзі бас әріппен жазылады» — красный KZ-BAR-15 показал это до differential. Итог: 17/17 сценариев (было 5), 103/103 KZ-differential байтово, разметка 89/0 и 78/0, §33.1 EXECUTABLE 25 из 25 при нуле UNEXPLAINED; храповик сценариев 5 → 17.

  • Казахская грамматика: отчёты аудита есть у всех 35 пакетов семьи (01.09.2026). Семь пакетов волн 0—1 (phon, lexicon, koptik, septik, taueldik, zhiktik, singarmonizm) были заведены до конвенции audit.ru.md и оставались без вердиктов по неиспользованным конструкциям и без записанной стабовой доли. Разбор добавил измерения: у zhiktik множественное число — ноль вхождений четырёх форм в 247 998 байтах (очередь откроет другой источник, а не следующий заход); у singarmonizm единственный «мост в один конец» получил вердикт «общий закон без внутреннего потребителя по построению»; у phon названы 16 «мёртвых символов» как варианты enum (DECISION-0047), а не пробел; у lexicon записано, почему §33.1 даёт ANCHORED, а не EXECUTABLE. Числа отчётов сверены с составом CLIR.

  • kz.grammar.septik: очередь падежей заменена на причину (01.09.2026). Взята единственная аттестованная клетка көмектес (қаз+бен, § 31 а), а по табыс, шығыс и жатыс измерено, чего не хватает, — у каждого своё. Табыс: клетки есть графически (шам+ды, хат+ты), но § 31 — параграф о қосымша вообще, рядом стоит жұрнақ мұқтаж+дық, и падежом источник эти формы не называет. Шығыс: отнесение однозначно, но ось группы не решает — терезе+ден и шам+нан в одной группе, § 31 а) называет начало аффикса дизъюнктивно («үнді не ұяң»). Жатыс: ни одной клетки в закреплённых байтах. Заведён audit.ru.md — второй из семи пакетов семьи без отчёта закрыт. Приёмка: 8/8 сценариев (было 6), 44/44 KZ-differential байтово, разметка 4/0 и 11/0, §33.1 EXECUTABLE 2 при нуле UNEXPLAINED, doctor.py без пробелов; храповик сценариев 6 → 8.

  • kz.grammar.taueldik расширен на II лицо анайы и I лицо множественного числа (01.09.2026). Из записанной очереди пакета взято ровно то, что §13 «Сөз сазы» печатает буквальным примером: халқың и кәркің (II лицо анайы), халқымыз (I лицо множественного). Правил 9 вместо 6, выходов по лицам 4 вместо 2. Клетка -іміз в закреплённых документах не показана ни разу и осталась NEITHER, гласные основы II лица тоже — сторож KZ-TAU-10 по образцу KZ-TAU-04. §13 печатает клетку -ің как «кәркің» рядом с «көркім, көркі»: байты сохранены неиспорченными, аттестована клетка, а не слово. Заведён audit.ru.md — один из семи пакетов семьи без отчёта закрыт. Приёмка: 10/10 сценариев (было 7), 47/47 KZ-differential байтово, разметка 5/0 и 9/0, §33.1 EXECUTABLE 3 при нуле UNEXPLAINED, doctor.py без пробелов; храповик сценариев 7 → 10.

  • kz.corpus.pravovaya_statistika — Указ Президента РК № 1050 и Положение о Комитете по правовой статистике и специальным учетам (01.09.2026). Страница ИПС «Әділет» U030001050_ несёт ДВА документа подряд, каждый со своей нумерацией пунктов с единицы, поэтому закреплены два файла и объявлены две source-декларации: слить их было нельзя — локатор article/1 адресовал бы два разных текста, а генератор фрагментов отказал бы громко. Соседи разводят этот случай исключением утверждающего акта из среза (stazh-gossluzhby, gosstipendii, traffic-rules); здесь исключать нечего — нормативны оба. Закреплено 45 249 байт (Указ 3 246, Положение 42 003), 34 фрагмента §194; учёт статей 6 из 6 и 24 из 24, неучтённых 0. Мера §33.1 по тридцати пунктам обоих документов: EXECUTABLE 22, SOURCE_ONLY 8, и все восемь объявлены границей с причиной, UNEXPLAINED 0 (в базе глубины стоит Положение, 19/5 — она считает первый объявленный документ, и Указ мерится явной парой аргументов; учёт статей этой слепоты не имеет). 85 правил (75 строгих, 10 поражаемых) и 40 норм-шаблонов — 26 обязанностей, 11 свобод, 3 власти §127; 50 сценариев регрессии и 6 авторских .lawtest §267. Три исключения перечней (оперативные и ведомственные учёты и учёт конфидентов; одиннадцать адресатов обращений; формы проверок органов государственных доходов) построены каноном «строгие основания → строгий барьер → презумпция с unless»; внутренняя цепь акта замкнута — регистрация акта государственного контроля по подпункту 10 пункта 15 отменяется отказом по пункту 14, и отказ есть ДЕЙСТВИЕ Комитета, а не следствие самих нарушений. Приложение «Структура» к Указу опубликовано пустым (гриф и заголовок есть, содержания ни строки) — свойство публикации, названное в articles.json, а не потеря среза.

  • kz.grammar.shylau расширен на всю свою source-first подочередь — §§83–85 и §§87–88 (01.09.2026). Закреплены 6 173 байта в пяти фрагментах той же публикации Сыздық (SHA-256 79042dc…f3753; вместе с §86 — 6 696 / 176 968, 3,8 %, scope 6 из 127 единиц). Пакет вырос с 2 правил до 21 (17 strict, 2 defeasible, 2 defeater) и выражает четыре предмета: раздельное письмо частицы (§83 поражаемо — источник сам говорит «негізінен», §84 строго), её форму (§85 ше остаётся ше; §87 препозиция к жалғау даёт слитное письмо и меняет форму ма-семьи), дефис §86 и природу омонимичной формы (§88). §87 сделан дефитером §83: без него «бөлек жазылады» и «қосылып жазылады» стояли бы TRUE_ONLY разом и не столкнулись бы ни одним кодом — это разные атомы. Дефитеров два, а не три: перечень §83 (61 член) содержит ма и да и не содержит ақ, поэтому у ақ раздельность не выводится и поражать нечего — нашёл аудит, поставленный до дорогих прогонов. Вердикт §88 «это шылау» проведён в общую норму §83, иначе природа осталась бы островом внутри акта. §88 называет четыре омонимичные пары, а критерий даёт трём; четвёртая (ше против үстеу жұрнағы) осталась NEITHER, а не угадана. Природа выводится в отношение с key(t): противоречивые вердикты дают KEY_CONFLICT. «Басқа жағдайда» выражено положительным фактом отрицательного содержания, а не not P. Приёмка: 14/14 сценариев (было 3), 72/72 KZ-differential байтово, разметка 27/0 и 21/0, §33.1 EXECUTABLE 6 из 6 при нуле UNEXPLAINED, doctor.py без пробелов; храповик сценариев 3 → 14.

  • Коранические ворота: конвейер был красный, шесть проверок звал никто, а одна падала TypeError вместо отказа (01.09.2026). Разбор состояния группы quran (девять пакетов, 6 236 аятов Tanzil Uthmani v1.1). Найдено и закрыто три класса.

    (1) run_all.sh не проходил. Коммит 732013e1a переписал у quran.maida генератор фазы A и агрегат (343 + 181 строки, разбор клауз стал другим), но оставил 13 порождённых артефактов от прежней модели, а замороженный знаменатель в test_quran_maida_phase_a_sources.py — от ещё более старой. Три инструмента объявляли три разные модели одной суры: тест — 136 голов (E 51 / B 82), пакет — 998 (E 135 / B 860), генератор и агрегат — 493 (E 170 / B 323). Ворота maida подключены пятью строками и краснели 254 отказами. Арбитром взят агрегат: он переписан тем же коммитом, что и генератор, и оба независимо дают 493/170/323. Артефакты перегнаны генератором (инвариант 2), знаменатель теста подтянут к принятой модели; 254 → 0.

    (2) Итоговая строка тех же ворот печатала числа, которых не считала. heads=136 E=51 (39 local, 12 external) I=2 R=1 B=82 был литералом: зелёные ворота докладывали знаменатель модели, которой в пакете уже не было. Строка переведена на значения из проверенного контракта — устареть молча больше нечему.

    (3) test_quran_baqarah_phase_a_sources.py падал TypeError до первого вывода. После ветви externalOwner не хватало continue, и проверка шла в локальные поля головы с чужим владельцем, где premises есть None (113 голов из 693 E). Переход добавлен — проверка впервые доработала до конца и назвала 28 отказов, ни один из которых правкой не создан.

  • Шесть коранических проверок впаяны в verify/ci/run_all.sh (01.09.2026). До этого существовали и не вызывались никем: sync_quran_fatiha_juz_amma_fragments --check, test_quran_fatiha_juz_amma_sources, sync_quran_an_nisa_materialization --check, test_quran_an_nisa_phase_a_sources (изнутри достаёт шесть партиционных проверок 4:1–176 и агрегат), check_quran_an_nisa_phase_b, check_quran_ali_imran_audit. Все с канарейками, где те есть; блок стоит около 61 с.

  • Мета-ворота check_gate_wiring были красные и назвали седьмую осиротевшую проверку (01.09.2026). check_quran_tanzil_dayn_clause_bridge — мост закреплённого Tanzil к поклаузному разрезу fiqh.dayn — существовал вместе со своим селфтестом и канарейкой 11/11 вне конвейера. Впаян тройкой строк по образцу соседей; мета-ворота снова зелёные: 116 проверок verify/ci/gates/**/check_*.py — 116 в конвейере, вне его 0. Итог по группе: 42 коранических ворот конвейера зелёные.

  • M-CHAT-R/F полностью формализован в лицензионно безопасной границе v1 (01.09.2026). Пакет aba.mchat закрепляет PDF редакций 2018 и March 2025 и страницу скоринга, не воспроизводя текст двадцати пунктов: исходные единицы представлены номерами, PDF-якорями и авторскими русскими парафразами меток. Две A3-таблицы выражают рисковые ответы (реверс 2, 5, 12), общий счёт и универсальный Follow-Up; все пороги и возрастное окно 16–30 месяцев вынесены в параметры. Procedure реализует Screened → Negative / FollowUp / Referred, включая прямое направление при счёте от 8, а process-journal хранит полный среднерисковый маршрут. Мера глубины — EXECUTABLE 22/22, остальные уровни 0; закрепление — 22/22 безопасных единицы. Проверено 16/16 сценариев, 4/4 .lawtest, 14/14 differential-вызовов. Найдена особенность понижения: A3 $collect: "count" имеет тип Integer, поэтому пороги счёта нельзя объявлять Natural. Порождённые строки A3/procedure не имеют label-точек; неизбежный остаток разметки перечислен в ratchet, а не скрыт регистрацией.

  • Контракт MCP: гонка общего дерева перестала выглядеть недетерминизмом поиска (01.09.2026). Утверждение «повторный вызов law_search даёт тот же структурный ответ» краснело на верной работе сервера: между двумя вызовами ОДНОГО прогона параллельные сессии дописывали корпус, и поиск честно сообщал об этом сменившимся corpusFingerprint (замер: indexUnits 156 139 → 156 368 при доехавшем Земельном кодексе; во втором прогоне — тот же счёт 156 762 при ДРУГОМ отпечатке, то есть правили содержимое существующего акта). Красным при этом назывался поиск, а гонка дерева оставалась неназванной. Диагноз разделён: отпечаток тот же и ответы разошлись — дефект поиска; отпечаток другой — прогон шёл по движущемуся корпусу и для этого утверждения негоден, о чём отказ и говорит («повторите на тихом дереве»). Детерминизм по-прежнему утверждается, но при явно проверенном, а не предполагаемом условии неизменности корпуса.

  • Журнал вызовов MCP доставлен и проверен на живой точке; названа его полнота (01.09.2026, DECISION-0082 §7). Деплой 33516851462 зелёный целиком — публичный вызов пишется полями: http tools/call law_ask ok 2547ms с кодом исхода, длительностью, размерами, адресом клиента, четырьмя хэшами воспроизводимости и обоими телами. Четыре класса исхода различены КОДОМ, а не текстом: OK, TOOL_ERROR (выдуманный предикат), BAD_REQUEST (неизвестный инструмент), REJECTED со статусом и причиной (чужой Origin); кап на тело сработал громко — law_packages при 531 КБ ответа несёт MCP_TRUNCATED=response. Полнота названа явно, потому что пробел здесь молчалив — отсутствие записи неотличимо от отсутствия события. Главный пробел не в сервере: всё, что отсекает edge ДО бэкенда (429 от rate-limit, отказы TLS и маршрутизации), до handle() не доходит и записи не оставляет — живёт в docker logs law-mcp-edge (json-file), вне пространства law-mcp и вне хранилища, поэтому по журналу нельзя судить о злоупотреблении. Не пишутся также stdio (намеренно), /healthz как запись вызова и тела свыше капа (но с пометкой). Ловушка чтения: journalctl -o json отдаёт крупные поля как null без --all — тела каталога читались бы как «не пишутся», хотя их 32 768 символов. Первое, что журнал показал: холодный law_search занимает 41–42 с, а не «~12 с», как записано в nginx.conf и DECISION-0078 (тёплый — 356 мс); прогрев платит деплой, но запас до LAW_MCP_CALL_TIMEOUT=110 сжался с десятикратного до менее чем трёхкратного при растущем корпусе.

  • Земельный кодекс РК: завершена содержательная формализация действующего среза (01.09.2026). Пакет kz.corpus.land_code закрепляет 186 заголовков консолидированной редакции ИПС «Әділет»: 183 статьи с действующим текстом формализованы содержательно, статьи 19-1, 45 и 170 объявлены проверенными границами источника. Удалены все прежние 141 Article…Recognition и общий мост article_conditions → article_effect_applies; CLIR содержит 1926 правил и 46 адресных приоритетов. В первую очередь разобраны статьи 43, 43-1, 44-1, 44-2, 12, 49-1, 14-1 и 122; статья 12 теперь выражает определения. Приёмка расширена до 148 сценариев: закрыты 23 остаточные строки A3, snapshot ПДК, все ранее непоставляемые enum-варианты, исключения и обе стороны значимых порогов; LAND-134…148 фиксируют вердикт по 15 прежним терминальным цепям. Пакетные .lawtest проходят 6/6, differential — 148 байтово идентичных evaluate-вызовов, source-sync и doctor зелёные. Полные измерения и окончательные вердикты записаны в corpus/laws/kz/land-code/audit.ru.md и STATUS.md; КоАП и чужие пакеты не менялись в рамках этой формализации.

  • Отчёт о воздействии перестал молчать в трёх местах (01.09.2026, lawref.impact). Найдено проверкой направления нормотворчества на живом KZ-корпусе; все три — молчание ОТЧЁТА, движок не менялся ни строкой. (1) Ось параметров §87. Поправку можно закодировать новой редакцией источника (её меряет проекция D1) либо датированным значением параметра, и kz-osms кодирует 206-VIII вторым способом: у акта ОДНА редакция, а предел взносов переключает ContributionBaseCap(legal_time) рубежом 2026-01-01. impact-editions печатал «изменений нет» на паре 2025-06-30 → 2026-06-30, где право отвечает 17 000 ₸ и 34 000 ₸ — отрицательное утверждение обо всём корпусе делалось там, где мерилась не та ось. Теперь parameter_cutovers называет рубежи в интервале ВСЕГДА (а не только когда они определяют вердикт: на kz-osms вердикт занят NOT-DATED, и находка молчала бы), а когда блокировать отрицательное утверждение больше нечем — вердикт PARAM-AXIS с кодом выхода 4 по тому же доводу, что у NOT-DATED. Проекция намеренно НЕ трогает legalTime дела: смешение осей осталось запрещённым, отчёт лишь называет неизмеренную ось и говорит, чем её спросить. (2) Отвергнутый вход. Дело с утверждением без origin исполняется до конца и даёт честное «не установлено», неотличимое на вид от молчания права; движок печатает ASSERTION_NOT_ACCEPTED (§73) всегда, но отчёт issues сценария не показывал вовсе — аналитик читал «поправка никого не задевает» там, где вход не разобрался. Теперь rejectedInputs в строке сценария, счётчик в сводке и строка «ВХОД ОТВЕРГНУТ» до вердикта. (3) Слепой банк дел. Норма, ТРОНУТАЯ правкой, но не исполненная ни одним делом ни до, ни после, называется отдельно от общей непокрытости: «исход не изменился» про неё есть отсутствие наблюдения, а не вывод. Наблюдалось на kz-pd: снятие основания ст. 16 против банка из 16 собранных дел дало «исход изменился: 0», и лишь дело, построенное под снятую норму, показало TRUE_ONLY → NEITHER. Наблюдённость считается по ОБЕИМ сторонам — снятая норма после правки не применится никогда, и разность по одной стороне назвала бы слепым банк, который её как раз исполнял. Ворота расширены тремя нарушителями и тремя контролями на ложную тревогу (check_impact 5–6, check_impact_editions — ось параметров с решающим случаем «редакции стоят, параметр двигается»); selftest оракула, check_amend, check_fuzz, check_loophole, check_liver_edition_impact зелёные, байты отчёта детерминированы.

  • Журнал вызовов MCP — публичная точка перестала быть слепой (01.09.2026, DECISION-0082). Логирования запросов не существовало вовсе: stdio не писал ничего, log_message HTTP-обёртки писал строку запроса и тела не читал, у nginx-edge путь один на все 21 инструмент — то есть с 31.08 не было видно ни используемых инструментов, ни отказов, ни длительностей. Теперь HTTP-транспорт пишет нативными полями journald (apps/mcp/law_mcp/reqlog.py, чистый stdlib — ни одной новой зависимости): метод, инструмент, исход кодом (OK / STALE_PROCESS / TIMEOUT / TOOL_ERROR / REJECTED), длительность, размеры, адрес клиента, четыре хэша воспроизводимости и оба тела целиком; читается как journalctl -u law-mcp@8722 MCP_TOOL=law_ask -o json. Границы — проверками, а не расположением кода: stdio не пишет ничего и часов не читает вовсе, ответ побайтово тот же при включённой и выключенной записи (ради чего отказ по лимиту не получил своего кода в ответе, а классифицируется по константе watchdog.TIMEOUT_MARKER), а сам журнал проверяется НАСТОЯЩЕЙ датаграммой — тест поднимает приёмник AF_UNIX и разбирает native-протокол обратно в поля. Первый прогон поймал ловушку: SO_SNDBUF дейтаграммного AF_UNIX по умолчанию 2048 байт, без подъёма в датаграмму не влезал даже ответ tools/list, и «полный журнал» тихо стал бы журналом заголовков (поднят до 8 МиБ, потолок измерен в 2 МиБ, кап 32 КиБ на сторону, срезанное названо полем MCP_TRUNCATED). Цена названа вслух: полная запись делает mcp.arxo.io собирателем персональных данных — срок хранения 30 суток, хранилище (VictoriaLogs, выбрана как единственная не приносящая на хост вторую большую подсистему) слушает только 127.0.0.1, рубильник LAW_MCP_LOG=0. Развёрнуто на hotsrv 01.09.2026 руками (не деплой-джобой): сбор персональных данных не включается доставкой. Осмотр хоста опроверг обоснование выбора хранилища: на машине уже работает полный стек Grafana соседнего продукта (obs-loki, obs-grafana, obs-prometheus, obs-tempo, /opt/mineflow-obs), следов которого в репозитории нет вовсе, — то есть вопрос стоял не «вторая подсистема или нет», а «в чужую наблюдаемость или рядом»; выбрано рядом, и причина изоляция, а не вес: в телах вызовов факты дел. Вторая находка на месте, без которой решение было бы вредным: у systemd-journal-upload НЕТ фильтра по юниту (-u — это URL), и как есть он залил бы в хранилище журнал всего хоста — GitLab, Keycloak, Traefik. Сужение — journal namespace (LogNamespace=law-mcp в юните, --namespace в доставке), проверено запросом LogsQL: в хранилище приехали только юниты law-mcp. Побочное следствие названо в README: journalctl -u law-mcp@8722 без --namespace записей сервера больше не показывает. Кода на сервере пока нет — /opt/law-mcp/law-dsl наполняет только деплой-джоба (0064/0078), поэтому поля MCP_* появятся с первым зелёным деплоем master, без дополнительных действий.

  • Витрина «Право Казахстана» — новое приложение apps/kz-landing/ (01.09.2026, DECISION-0081). Отдельный Astro-проект под казахстанскую часть корпуса: русская версия в корне, казахская под /kk/, в Pages-артефакте — под /kz/ (job kz-landing в docs.yml, свой префикс KZ_LANDING_BASE). Ни одна цифра на странице не набрана руками (инвариант 5): четыре демо — ОСМС, сроки ГК ст. 172–176, брак и семья, праздники — порождает tools/build_demos.py, зовущий тот же tool_law_ask, что обслуживает агентов MCP; суммы, статусы, списки статей, разбор «чего не хватает» и хэши приходят из ответа оракула, а метрики покрытия (121 акт, 25 535 норм, 11 617 фрагментов, 3 248 тестов) — из снимка корпуса. Авторскими остаются только дела (scenarios/*.scenarios.json) и текст страницы. Заведён класс ворот, которого до сих пор не было: витрина отстала от корпуса. Страница статична и в байтовый контур не входит по построению, поэтому её устаревание невидимо и differential-у, и регрессии: акт правят, CLIR пересобирают, всё зелёное — а суммы прежней редакции остаются на экране. Якорь — semanticHash КАЖДОГО задействованного пакета (вопрос пересекает акты: у ОСМС в замыкании бюджетный закон, у брака — Конституция), сверка — шаг 51/51 verify/ci/gates/release/check_kz_landing_data.py с канарейкой; те же ворота держат состав (реестр DEMOS ⇄ scenarios/ ⇄ demos.json) и пакеты раздела охвата. Класс сработал в первый же час: соседняя сессия правила corpus/laws/kz/marriage/, и ворота назвали расхождение. Два дефекта найдены при отборе демо: данные прототипа apps/site-prototype/ по госпошлине устарели относительно пакета (там брак и развод, в корпусе — гражданство и визы; демо отвергнуто), а marriage_allowed без премиссы из kz-constitution-rights молча даёт NEITHER — в итоге демо показывает вывод, пересекающий два акта. Своя визуальная система, а не перекраска лендинга: бирюза изразцов Туркестана, войлочные панели, марена, несущий мотив қошқар мүйіз на оси сравнения (техника қиып алу: рисунок и фон — один разрез), кириллические по происхождению гарнитуры ради казахских ә ғ қ ң ө ұ ү һ і. Структура и язык — по задачам читателя-юриста (вопрос → ответ → на каких статьях), внутренние слова проекта на странице не появляются. Опубликована на zan.arxo.io (проект Vercel arxo-zan, деплой готовым выводом npm run deploy: vercel build звать нельзя — он пишет снимок метрик в общее дерево; vercel.json при --prebuilt не читается, заголовок иммутабельного кэша _astro/** переложен в config.json маршрутом с continue). Домен привязан и подтверждён по владению апексом, но DNS у arxo.io сторонний — за владельцем одна запись CNAME zan → 0c462cba98c7f14e.vercel-dns-017.com.; до неё прод отвечает на arxo-zan.vercel.app (проверены обе версии, 200, и заголовок кэша ассетов). Предмет — только действующее право: историческая лента («Жеті жарғы», Алаш, декреты 1920-х) из витрины снята решением владельца (пакеты остались в корпусе и открываются в реестре, но уводили читателя от рабочего вопроса); карточка «Встроить в свой сервис» переведена в «скоро» — публичного доступа к движку для встраивания ещё нет; акты в разделе охвата перестали быть ссылками, но сверка их имён с корпусом воротами осталась. Навигация на узком экране больше не исчезает: разделы уезжают под кнопку (aria-expanded, закрытие по Esc, клику вне и расширению окна) — до этого display: none оставлял телефон вовсе без меню. Границы записаны в решении: CI-пути к домену, og:image и казахских меток §218 у актов KZ пока нет.

  • Полная формализация Кодекса РК «О браке (супружестве) и семье» (01.09.2026). Один консолидированный срез на 26.08.2026, 286 статей: EXECUTABLE 281, EXCLUDED 5, SOURCE_ONLY/UNEXPLAINED 0, text coverage 98,9 %. Полные главы о браке, имуществе супругов, родительских мерах, усыновлении, опеке, устройстве детей, алиментах, актах гражданского состояния и коллизионных нормах дают 745 правил, 42 канала внешнего суждения и 215 сценариев. Ст. 139 хранит точные Rational-доли 1/4, 1/3 и 1/2; денежное округление — только явно выбираемое спорное прочтение. ГК подключён квалифицированным импортом kz.corpus.civilcode. Аудит разбирает 273 односторонние цепи, 18 ограничений синтезатора и 33 неиспользованные продукции. Компиляция нашла в ст. 137-3 несуществующие DateTime и Instant + hour; норма переписана через hours_between и закрыта парой 24/25 часов. Прогон с якорем LAB — 216/216 PASS; замыкание exogamy + marriage + tuystyq — 287/287 PASS; differential — 465/465 байтово. Семь рукописных .lawtest проходят 7/7 и держат точные доли, базовое/спорное округление и границу суток. Интеграционный потребитель теперь явно включает внешний профиль применимости абстрактной модели he.torah.arayot.

  • Демо-поверхность islam — витрина исламского кластера корпуса (01.09.2026). Четвёртый жилец семейства DECISION-0066: apps/demos/islam/, Astro, английская ветвь в корне и русская под /ru/. Показывает 28 пакетов faraid.*/fiqh.*/quran.* (3 279 правил) и 12 дел, исполненных оракулом ПРИ СБОРКЕ: аул 6→7 и минбария, политика округления и шкала верблюдов закята, лестница каффары в обе стороны, поражаемый слой дозволенности пищи в три хода и акдария под тремя состояниями (база молчит, ханафитское прочтение, прочтение Зайда). Ни строчки семантики в приложении (инвариант 5): авторские тексты — только заголовок дела и вопрос своими словами; подписи фактов берутся из словаря §218, шаги — из proofGraph (правило → метка → якорь @source → фрагмент с contentHash), исходы и хэши — из evaluation-документа; 97 шагов из 97 несут якорь в источник. Состав каталога перечисляется, а не пиннится: кластер определён префиксами CLIR, новый пакет корпуса приезжает на страницу сам, а витринный список реестра обязан быть его подмножеством (иначе gen_catalog.py отказывает). check_case_roundtrip.py в сборке закрывает именной класс «замороженный ответ поверхности дрейфует молча»: утверждается не «генератор повторяет сам себя», а совпадение с ожиданиями регрессии — у фараида это ответы классической литературы, старше движка; проверка проверена мутацией. Два дефекта найдены и закрыты в браузере: у Amiri нет кириллицы (русские заголовки молча падали в Times — заголовки переведены на Alegreya, Amiri оставлен арабскому тексту источника), и арабские метки §218 рендерились в sans (правило по [lang="ar"], а не по месту в вёрстке); охра затемнена до 4,6:1 расчётом контраста. Редакционное решение записано в README: худуд (quran.nur) остаётся в карте корпуса без демо-дела. Оба ворот семейства зелёные, islam/gen_data.py — 5,1 с. Язык страницы затем переписан под аудиторию (шариатские советы, исламские финансы, преподаватели фикха): инженерных слов в интерфейсе нет вовсе — ни «формализованный», ни «детерминированный», ни «хэш», ни §-ссылок; машинные имена (GoldFortieth, полный sha256, article/4) уехали в title, а на странице стоят «Статья 4», «Коран 2:173» и названный отпечаток. Слова традиции — иснад, матн, ихтиляф, фард, нисаб, каффара — оставлены: читателю они родные и точнее пересказа. Третья ветвь — казахская (/kk/, всего en + ru + kk): переведена ТОЛЬКО обвязка, один словарь §218 показывается всем трём с пометкой языка, и почему подписи норм приходят по-русски, а у коранических актов по-арабски, сказано на самой странице, а не оставлено на догадку. Дела разведены по вкладкам на чистом CSS (:has() над radio, без скрипта), карта собрания переделана из сетки карточек-ссылок в текстовые блоки: страница 14 522 → 5 155 px.

  • Устав Международного военного трибунала 1945 года формализован полностью — 30 из 30 статей (01.09.2026). Новый пакет intl.imt_charter_1945 закрепляет русский аутентичный текст (рабочая цифровая копия SHA-256 16065daecd91a8ec067eaacedf9263ca0a11d4cb7010b687f306745616de7c30, сверка с официальным UNTS 82) и Берлинский протокол; 61 фрагмент, по 98,2 % байтов каждой русской редакции, неучтённых статей 0. Две edition D1 — 08.08.1945 и 06.10.1945 — дают машинный semantic change: impact-editions снимает два и добавляет два правила статьи 6(c), а жестокость без nexus меняет ответ TRUE_ONLY → NEITHER. Все статьи EXECUTABLE: пороги статьи 4 проверены тремя парами, ответственность общего плана замыкается через supported, статьи 8–10 используют judgment/power/external effect/immunity, статьи 24 и 29 понижены в две процедуры (16 состояний, 14 переходов). Приёмка: .lawtest 15/15, регрессия imt 18/18, differential 18/18 байтово, разметка 243/12 и 155/0, мёртвых символов и посылок в никуда нет, doctor чист; аудит конструкций записан в пакете.

  • T164 и починка оракула: comparison в generator-е comprehension §52.1 (01.09.2026). Найдено проверкой собственного утверждения о границе языка. На одном CLIR lawc eval отвечал верно, а lawref падал с KeyError: 'args': цикл сбора опор в materialize_comprehension звал substitute_literal на каждом конъюнкте генератора, включая comparison. Квалификация (инвариант 8) — дефект оракула, не lawc и не SPEC: §52.1 перечисляет запреты генератора поимённо (not_known, judgment, opaque, side effects), сравнения среди них нет, а докстринг flatten_body уже называл comparison guard-ом «без support-пары в store»; errata не нужна. Молчало потому, что формы не было ни в одном пакете корпуса (обход всех CLIR — ноль вхождений) и ни в одном векторе. Вектор T164 написан ДО починки и упал; после правки ответ верен по причине — exceeding_count различает 1/2/3, а опоры содержат ровно прошедшие guard показания. Голден заморожен одноразовым --bootstrap-expected, ни один существующий не тронут. Приёмка: 399 векторов, differential 181/181 байтово, selftest и determinism-линты оракула зелёные, агрегатные семейства корпуса не пострадали. Следствие для ТК РК: три нормы (ст. 66, 90, 91), объявленные было границей языка, ВЫРАЖЕНЫ агрегатами — count ×1 и sum ×2, шесть новых сценариев парами, KZ-differential 40/40 байтовый.

  • Полная формализация Трудового кодекса РК (414-V ЗРК, 01.09.2026). Заведён пакет kz.corpus.labour_code: все пять разделов и все 23 главы закреплённой редакции, 223 статьи под фрагментами (байтовое покрытие 99,8 %), EXECUTABLE 201, ANCHORED 0, SOURCE_ONLY 22, UNEXPLAINED 0 по §33.1. 613 правил (486 strict, 82 defeasible, 45 defeater), 122 обязанности §123 с носителем и окном, 4 запрета §130, 4 канала суждения §47.3, разметка §218 — 1089/0 объявлений словаря и 739/0 норм. 34 сценария семейства labour_code, все парами по обе стороны порога; doctor.py сообщает «пробелов нет». Источник — подписанный реестр Парламента РК (zan.gov.kz/api/documents/95666/rus, ngr = K1500000414): хост «Әділет» 01.09.2026 не отвечал ни curl, ни браузеру. Три числа задания разошлись с закреплёнными байтами и решили байты: 223 статьи вместо 227, 23 главы вместо 24, Закона № 334-VIII в реестре нет вовсе — верхняя граница окна in_force поэтому не объявлена. Четыре класса молчаливых отказов найдены и закрыты: частичная необъявленная переменная правила (детектор — вычитание объявлений CLIR из const_ref внутри правил, четыре случая); единица §86 из переменной вместо литерала (статья 13, все четыре единицы стали висячими ссылками при чистом check); отрицательный шаг терма §86 (deadline: count < 0 только на исполнении — обе нормы переписаны шагом вперёд); цикл предикатных зависимостей от defeater-а над собственной головой (два случая). Инструменты нашли то, чего не нашёл автор: линт — восемь находок (пять порогов прозой, два свёрнутых «либо», деонтика статьи 54, сплющенная в признание); мера §33.1 — 17 статей с пропущенным содержанием; ворота закрепления отвергли 4 объявленные границы из 25 и оказались правы на трёх (ст. 114, 153, 167 формализованы, у ст. 1 признаки названы полем despite); аудит между фазами 3 и 4 — непрочитанную голову статьи 183, за которой стояли три нормы статей 69, 89 и 105; прогон сценариев — неверное ожидание автора на канале суждения §47.3. Названо словами то, что не сделано: агрегаты над интервалами (ст. 66, 90, 91) невыразимы поверхностью §86, расчёт средней заработной платы и календарь §85 — границы соседних актов, собственных .lawtest §267 у пакета нет.

  • Полная формализация ПДД РК и исполнимый мост в дорожную главу КоАП (01.09.2026). Пакет kz.corpus.traffic_rules расширен с 15 до всех 192 номерных пунктов: 190 EXECUTABLE и два обоснованных EXCLUDED (структурные пункты 167–168), плюс пять дефисных пунктов. Приложения 1–3 закреплены полными A3-каталогами: 295 кодов знаков, 30 кодов разметки и 18 подписей схем сигналов; общий source-sync проверяет одновременно 197 фрагментов и каталоги. Скорость выражена Quantity[km_per_h], знак 3.24 вычисляет установленный предел, а КоАП классифицирует интервалы статьи 592 и через погодовой параметр МРП переводит взыскание в тенге. Сквозной сценарий «знак 60, фактическая скорость 85» выводит превышение 25 км/ч → часть 2 статьи 592 → 10 МРП → 43 250 KZT на 2026 год без ручного факта состава. Приёмка: 42/42 сценария и 42/42 differential-вызова байтово; шесть рукописных .lawtest; разметка ПДД 327/0 и 626/0, КоАП 4543/0 и 5822/0; doctor обоих пакетов сообщает «пробелов нет».

  • Каналы доступа скилла formalize-act к корпусу: запрос вместо просмотра (01.09.2026, DECISION-0080). Поверхность чтения по корпусу сужена до своего акта и структурных запросов LawQL/MCP; чужие исходники читаются только внутри замыкания импортов, которое печатает новый verify.py --deps <акт> (принимает имя пакета, файл CLIR или путь). Измерено: 64 ребра импорта на 283 пакета, собственные [dependencies] у 9 пакетов из ~290. Паритет дробности переведён с чтения соседей на запрос — paritet.py обнаруживает со-формализации по общему documentHash (11 документов корпуса закреплены двумя и более пакетами) и советует, не блокируя. Добавлены references/lawql-recipes.md, references/scenario-harness.md (контракт модуля сценариев записан впервые) и порождаемые references/genre-samples/; четыре проверки выделены в собственный шаг 44/50 run_all.sh (свой предмет утверждения: отказ под чужим заголовком уводил бы читателя не туда), две дешёвые — ещё и в акт-локальный план под corpus/. Тест рецептов сверяет граф --deps с отношением imports LawQL — одну вещь читают дважды. Исправлен дефект первой версии paritet.py: поединичное сравнение через границу документа ложно и теперь гасится.

  • Пять source-first пакетов фикха с исполнимым разделением линий: fiqh.tahara, fiqh.khums, fiqh.waqf, fiqh.qada, fiqh.usul (01.09.2026). Закреплены первичные арабские срезы, reading-варианты внутри линий не универсализированы, а расхождения выводятся на одинаковых фактах дела как line-, reading- либо position-scoped результаты с anti-leak guards. В корпус заведены пять детерминированных CLIR и 58 сценариев; разметка §218 — 231/0 словарных объявлений и 106/0 норм. Все пять source-sync --check впаяны в verify/ci/run_all.sh; targeted metadata, labels, scenario manifest и KZ-differential зелёные.

  • Пять самостоятельных предметных срезов фикха: fiqh.adhan, fiqh.buyu, fiqh.riba, fiqh.hadana, fiqh.zihar (01.09.2026). Добавлены закреплённые арабские источники, пять CLIR и точечная регистрация metadata/labels/сценариев; 63/63 KZ-сценария, разметка §218 — 296/0 словарных объявлений и 105/0 норм. Сравнительные ответы остаются line-, reading- либо position-scoped с обоими anti-leak guards; пять source-sync --check добавлены в общий прогон. fiqh.buyu направляет вопрос риба к уже имеющемуся fiqh.riba, не дублируя его правила.

  • Третья форма барьера страт §110/§111 в check_stratum_barrier — дефитер против рангов производителей своей цели (31.08.2026). К рёбрам priority через страту и полярностям одного предиката добавлена пара «ранг дефитера ↔ ранги производителей его цели»: §107.3 снимает КАНДИДАТА своей страты, поэтому дефитер над строгой головой не поражает ничего ни при каком ранге, а разошедшийся ранг проносит его мимо всех оснований либо мимо части. Ранги — та же lawref.evaluator.defeasible.rule_ranks, что у двух прежних форм; долг — тем же реестром corpus/slices/priority-strata.json третьим видом ключа. Форма дала пять живых дефектов 31.08.2026 (Конституционный Суд — ст. 8 п. 4 и ст. 11 п. 4, anticorruption — промах по одному из трёх оснований, МЧП — инертная оговорка ст. 1108 п. 1, myco.opredelitel — обе формы сразу); четыре закрыла errata E-0080, пятую — правка акта, и до этих ворот сторожа у формы не было. Замер: сегодняшнее дерево — ноль находок за 1,3 с (262 CLIR, 257 дефитеров), оракул до E-0080 на корпусе до правок — все семь находок пяти пакетов. Канарейка --canary держит шесть ступеней на подопытном verify/ci/canaries/bad_defeater_strata.py, включая отрицательный контроль.

  • Барьер полноты §111 снят там, где он давал неверное право (sa.personal_status, 31.08.2026). Барьер не абсолютен, и дверь документирована самим кодом: перечисление выводимого предиката отвергается только при status != "monotone" — monotone(P) признан завершённым, потому что строгое замыкание добавляет положительную опору, а поздняя отрицательная опора этот тест ложным не делает; живой прецедент был в ст. 27 Устава ООН. Связывал при этом не §111, а LDC-E2114: условие «не отстранён» есть отрицание, установленное отрицание даёт только замыкание §70, а оно в v1 УНАРНО, тогда как отстранение двуместно. Принято каноническое лечение, названное самим сообщением LDC-E2114, — предметом замыкания сделана СУЩНОСТЬ: заведён Heirship (притязание лица на конкретную тереку), унарным закрывается свойство притязания. Дешёвая замена (унарное person_barred(p)) измерена, работает и ОТВЕРГНУТА: она молча вносит допущение «одна терека на дело» и соврала бы там, где делятся два наследства. Цепь: строгое heirship_barred → унарное замыкание с явным негативом → строгое inheriting(e, p) → 77 счётов по классам формой count(collect x where <родство>(e, x) and monotone(inheriting(e, x))). Починилось больше ожидаемого: барьер портил не только делитель, но и КАРДИНАЛЬНОСТЬ — две дочери, одна отстранённая, давали живой треть вместо половины (ст. 215(1)). Цена названа: три замыкания сняты (их продюсеры стали зависеть от предиката за другим замыканием, ответ стал BOTH), отрицание у потребителей эпистемическое, явного негатива у трёх признаков больше нет; храповик разметки ослаблен руками на единицу с обоснованием — исчезли не метки, а три правила-сторожа вместе со снятой границей. Ошибку правки (снесённый заодно блок ст. 207) поймал храповик глубины: UNEXPLAINED 0 → 1.

  • fiqh.salat — полная реализация заявленного среза молитвы с нейтральным ядром и двумя школьными прочтениями рядом (31.08.2026). Закреплены три публикации, 54 фрагмента и 16 выравниваний; глубина §33.1 — EXECUTABLE 15/15, SOURCE_ONLY 0. Пакет содержит 97 правил, две процедуры §160, A3-профили всех пяти молитв, 47 сценариев и 24 .lawtest; differential дал 49/49 байтово идентичных ответов. Ханафитская и альтернативная линии Фатихи за имамом, совмещения, кунута, витра, прикосновения, кворума джума, порядка када и классификации элемента не получают искусственного приоритета. Полный аудит: стаб-цепей 0, мёртвых символов 0, все 35 неиспользованных конструкций разобраны; отчёт — corpus/laws/fiqh/salat/audit.ru.md.

  • kz.corpus.mchp закрыт целиком: раздел 7 ГК РК «Международное частное право», EXECUTABLE 41 из 41 статьи, SOURCE_ONLY 0, differential байтовый 111/111 (31.08.2026). Пятая очередь — внедоговорные обязательства (1116–1119), интеллектуальная собственность (1120), наследование (1121–1123), опека (1124), реторсии (1093). 111 сценариев, 20 .lawtest, 177 правил, учёт статей полный. Три моста внутри пакета (исковая давность, договоры об интеллектуальной собственности, опека) читают собственный вывод раздела, поэтому поражения главы 61 доходят до дальних норм. Ст. 1093 выражена институциональным отношением, а не властью §127 — довод записан при норме.

  • sa.civil_transactions — пилотный срез Закона о гражданских сделках Саудовской Аравии (М/191, 1444/2023): EXECUTABLE 22 из 23 статей охвата, 21 сценарий, differential байтовый 39/39 (31.08.2026). Первый акт корпуса, где ДЕЙСТВУЮЩИЙ кодекс объявляет лестницу применения САМ (ст. 1: текст акта по букве и по смыслу → 41 общее правило заключительных положений → шариат, наиболее совместимый с законом), и первый, где вытеснение общих правил наступает по ФАКТУ урегулированности вопроса, а не по противоположности вывода. Форма измерена пробой, а не выбрана: у формы «поражается сам вывод» вытесненная каваида выходит FALSE_ONLY, то есть пакет утверждает ложность её заключения, тогда как акт говорит лишь о неприменении; у формы «поражается ПРИМЕНИМОСТЬ» заключение честно молчит (NEITHER). Генеалогия с Маджаллой измерена по закреплённым байтам обоих актов: 28 каваид из 41 присутствуют в Маджалле дословно, ещё 9 — той же максимой в иной редакции, 4 собственные. Закреплены ДВА документа одной страницы издателя: акт и королевский указ М/191, чей بند (خامساً) несёт ретроактивность, которой в самом акте нет.

  • Хиджра ст. 2 названа границей ЯЗЫКА и измерена, а не обойдена (31.08.2026). Шкала типа Date не названа ни в одном § prose (во всём spec/SPEC.ru нет ни «ISO 8601», ни «григорианский»), а обе реализации считают по пролептическому григорианскому календарю. Цена молчания измерена на ст. 693: иск, поданный 30.08.2023 при последнем пользовании 17.12.2013, по хиджре не слышится, а правило со 10 calendar_year становится TRUE_ONLY лишь 17.12.2023 — расхождение 109 дней без единого issue. Запись хиджры тройкой Г-М-Д тоже не спасает: 30 сафара — законная дата, потому что месяцы хиджры бывают тридцатидневными, — даёт TYPE_ERROR. Errata о шкале принята решением человека и ещё не проведена; до неё срок ст. 693 и второе исключение указа приходят фактами дела предикатами, несущими величину в ИМЕНИ, и это названо в шапках модулей как признак недоделки.

  • kz.corpus.mchp, третья очередь: сделки, исковая давность и вещные права (ст. 1104–1111) — EXECUTABLE 31 из 41, differential байтовый 79/79 (31.08.2026). Пакет впервые читает собственный ответ: исковая давность (ст. 1106 п. 1) привязана к primenimoe_pravo, и публичный порядок меняет срок давности, не упоминаясь в норме о ней. Заведена вторая сущностная ось — имущество (параграф 4 привязывает к месту вещи), с двумя фактами о ПРОШЛОМ положении вещи. Измерена новая грань класса «ранг дефитера — максимум по голове»: поражать вывод, у которого есть глубоко выводимый производитель, нельзя вовсе; п. 3 ст. 1108 разведён собственным выводом по прочтению источника, а невыразимое вытеснение п. 1 пунктом 2 названо границей языка и застережено падающей парой сценариев.

  • kz.corpus.mchp, вторая очередь: лица и личные неимущественные права (ст. 1094–1103) — обратная отсылка впервые выражена правилом (31.08.2026). EXECUTABLE 23 из 41 статьи (было 13), 51 сценарий, 12 .lawtest, differential байтовый 51/51. Ст. 1087 п. 2 принимает обратную отсылку ровно для ст. 1094, пп. 2, 3, 5 ст. 1095 и ст. 1097 — все три пришли этой очередью; правило приёмки написано, посылка осталась фактом дела, и граница «пакет не исполняет пакет» названа тестом, а не подразумевается. Новый измеренный класс: unless поражает ГОЛОВУ, а не своё правило, — два состава п. 1 ст. 1094 убивали друг друга, пока не были разведены счётом гражданств (count(collect all …), с обязательным связывающим конъюнктом §190).

  • Первый акт Саудовской Аравии и первое ГОСУДАРСТВЕННОЕ право на предмете доктринального фараида: sa.personal_status (Закон о личном статусе, королевский указ М/73 от 6/8/1443 = 09.03.2022, наследственный блок — 31.08.2026). Баб 6 «الوصية» (ст. 169-196) и Баб 7 «التركة والإرث» (ст. 197-245) целиком, Баб 8 (ст. 246-252) контекстом; новая группа sa и новый правопорядок SA. Где доктрина спорит, закон ВЫБИРАЕТ, и три выбора выражены правилами: дед наследует «как отец» и хаджбит братьев (ст. 212(3), против мукасамы); муштарака решена ПРОТИВ полнородного брата — ст. 227 называет состав поимённо и роняет عاصب بالنفس; возврат достаётся супругу при полном отсутствии прочих (ст. 231(2)). Отчёт report_sa_vs_faraid.py гоняет семь общих масаил через ОБА пакета их собственными запросами (пакеты не связаны — LDC-E2101): исходы совпали на пяти, разошлись на двух, а на муштарака совпали ДОЛИ при разошедшихся ПОЗИЦИЯХ — excluded(brother) даёт TRUE_ONLY у закона и NEITHER у доктрины, чей спор живёт прочтением §152. Источник — официальные байты через архивный канал, и недоступность издателя измерена, а не предположена: laws.boe.gov.sa разрешается, но TCP 443 молча фильтруется, независимый второй путь даёт ECONNREFUSED, а соседние узлы (включая саудовский qadha.org.sa) отвечают; закреплён сырой ответ издателя из Web Archive (id_), PINNED_OFFICIAL_BYTES. Два воспроизводимых свидетеля: захват той же страницы 15.02.2026 (252 статьи и 29 заголовков посимвольно — акт не правился) и печатное издание قضاء (84 статьи блока сплошным отрезком в порядке следования). Сверка с печатью построена ПОД дефект её текстового слоя: лигатуры с «لام» переставляют буквы (المحامين → املحام ين), а буквы вдобавок ТЕРЯЮТСЯ (у ст. 169 пропала «ص» в «تصرف»), поэтому сравнение идёт по мультимножеству букв в окне, предел объявлен числом (6,9 %), и отчёт прямо говорит, что дословности это не доказывает. Пять молчаливых отказов, найденных пробой при зелёных check, lower и пустых issues: (1) замыкание §70 над предикатом БЕЗ строгих производителей выводит явный негатив ВСЕГДА — descendant_heir отвечал FALSE_ONLY при живом призванном сыне, и жена получала четверть вместо восьмой; поймано ДВУСТОРОННЕЙ пробой, односторонняя показывала ожидаемое и молчала; лечение — эпистемическое not_known, потому что строгими эти правила быть не могут (LDC-E4103 портит ОТНОШЕНИЕ ЦЕЛИКОМ); (2) not_known в СТРОГОМ теле проходит check и не исполняется — ст. 231(2) была мертва при NEITHER без диагностик; (3) перечисление по эмпирическому домену с ВЫВОДИМЫМ гардом внутри даёт NON_EXECUTABLE_RULE и ПУСТОЙ ответ (§111) — сперва объявленная граница деления общей доли класса, СНЯТАЯ в тот же день (см. отдельную запись); (4) счёт по эмпирическим фактам родства не знает ст. 222(1) — сын, умерший одновременно с отцом, счётом виден, и дочь не получала половины по ст. 215; заведены 14 предикатов присутствия ПРИЗВАННОГО родственника, а счёт оставлен там, где норма считает ЧИСЛО, включая ст. 213(1)(б), которая считает братьев «وارثين أو محجوبين», то есть вместе с махджубом; (5) фрагменты на все 252 статьи превратили невзятое в долг — мера записала UNEXPLAINED = 167, и фрагменты сужены до блока плюс один внешний якорь (ст. 161), UNEXPLAINED 167 → 0. Носители: поражаемая цепь призвания (ст. 199 презюмирует, ст. 200-203 поражают одним дефитером по строгому barred), из чего ст. 222(1) получилась бесплатно — структурные признаки ст. 205-206 выводятся правилами существования из ПРИЗВАННЫХ; канал суждения §47.3 на двух отношениях, названных самим текстом («تجهيز الميت بالمعروف» ст. 198(1) и пробельная формула ст. 251); три обязанности с ОТКРЫТЫМ окном (ст. 243(2), 246, 250), где VIOLATED не наступит никогда и это сказано словами; две массы ст. 200(3) выражены отдельным отстранением от дийи, а не пересчётом долей. Хиджра не обещана: ст. 247 велит считать сроки по хиджре, календаря §85 для неё нет, и единственный срок блока (тридцать дней ст. 183(2)) выражен фактом наступления, а не вычисленной датой. Измерено: §33.1 — охват 85 из 252, EXECUTABLE 70, ANCHORED 13, SOURCE_ONLY 2 (ст. 230 и 252, обе с причиной, проверенной по тексту), UNEXPLAINED 0; закрепление — 85 фрагментов, text coverage 31,7 % (30 243 из 95 354 байт), неучтённых 0; 45 казусов (часть парами, различающимися одним фактом; двенадцать заведены по отчёту достижимости правил — дефитеры читают выводимую посылку, и синтезатор дела до них не доходит), differential байтовый на каждом запросе распределения, .lawtest 18/18, разметка §218 202/0 и 190/0, оверлеи ru и en по 202 метки, doctor чист, аудит — посылок в никуда нет, мёртвых символов нет, стаб-цепей 4 из 187 правил (2 %).

  • Старшинство авторитетов заработало В ВЫВОДЕ на двух живых актах Казахстана (31.08.2026). Обе нормы стояли в корпусе половиной — выводили факт о паре актов и ничего не делали с выводами, которые из этих актов следуют. Ст. 4 п. 3 Конституции (ред. 1995): пара поражаемых норм противоположной полярности плюс политика §118 RatifiedTreatyOverStatuteInInference1995, спрашивающая уже выведенный treaty_prevails_over_statute — числовой шкалы старшинства рядом нет намеренно, приоритет стоит на самой статье со всеми её условиями. Шесть проверок KZ-CON-TREATY: при объявленном расхождении — TRUE_ONLY при НУЛЕ конфликтов, без расхождения — BOTH при одном; байтовое согласие реализаций измерено отдельно (раннер Конституции в check_kz_differential не входит), 8402 байта совпали. Находка из закреплённых байтов: в редакции 2026 года этой доктрины НЕТ — слово «приоритет» встречается там ровно один раз и про очерёдность законопроектов, а ст. 5 п. 3 сохранила лишь вторую фразу прежней нормы. Ст. 5 п. 1 Закона «О правовых актах» — прецедент как источник, работающий в выводе: политика ConstitutionalCourtResolutionPrevailsPolicy спрашивает выведенный may_not_contradict, и вывод из нормативного постановления Конституционного Суда побеждает вывод из акта, который не вправе ему противоречить; числовой ступени тут быть не может — п. 5 ст. 10 выводит постановления высших судов ЗА иерархию. Парная находка LEG-35: на постановления ВЕРХОВНОГО Суда защита НЕ распространяется (п. 1 называет только Конституционный Суд, а п. 3 говорит о ВС иначе — «содержатся разъяснения»), и ответ остаётся BOTH при сообщённом конфликте. Измерено: конституционная регрессия 154/154, differential legal_acts 63 вызова байтово, разметка 433/0 и 241/0, глубина не сдвинулась, снимок границ Конституции тот же. Попутно починены ворота check_constitution_review.py, падавшие ModuleNotFoundError до первой проверки (генераторы переехали в corpus/tools/gen/) — после починки они назвали прежнее расхождение пина BOUNDARY_SNAPSHOT_SHA256 (шапка говорит 85/11, машина мерит 86/10); пин не двигался, эта ступень — юридическая.

  • Первый акт корпуса, чей предмет — КАНОНЫ ТОЛКОВАНИЯ: intl.vienna.vclt (Венская конвенция о праве международных договоров, 23.05.1969, срез из пяти статей — 30, 31, 32, 33, 53; 31.08.2026). Пять статей выбраны не по теме, а по роду: они не регулируют поведение государств, а говорят, как читать и как соотносить сами договорные нормы. До него правила обращения с правилами жили в корпусе позитивным правом одной юрисдикции (kz.corpus.legal_acts — иерархия, коллизии, аналогия), максимами (osm.mejelle) и порядком норм вымышленного акта (us.asimov.three_laws); здесь — единственная действующая многосторонняя КОДИФИКАЦИЯ канонов. Оценочное отделено от предъявляемого ПО ПРАВИЛУ, а не по вкусу: признак, который стороны спора предъявляют или не предъявляют (есть ли последующее соглашение, расходятся ли аутентичные тексты), — факт дела; признак, о котором спор и есть спор (обычное значение, объект и цели, абсурдность результата, императивность нормы), — канал суждения §47.3, и орган назван самой Конвенцией (ст. 66 «a» — Международный Суд), а не выбран формализатором. Отсюда главная пара сцен: одни и те же факты дают TRUE_ONLY с ответом органа и REQUIRES_JUDGMENT без него — статья 31 не вычисляет значение, она связывает того, кто его устанавливает. ЗАКРЕПЛЁННАЯ ПУБЛИКАЦИЯ ООН ПОВРЕЖДЕНА В СТАТЬЕ 30, и повреждение меняет НОРМУ, а не написание: русская страница un.org переставила условия пунктов 3 и 4 местами («Если НЕ ВСЕ участники предыдущего договора…» там, где подлинник говорит «When ALL the parties») и сослалась на статью 50 вместо 59. Найдено сверкой с английским подлинником при заведении; остальные четыре статьи среза сверены с ним же и совпали дословно. Байты закреплены КАК ЕСТЬ, вместе с дефектом, а статья 30 взята из ВТОРОЙ редакции — английского аутентичного текста (legal.un.org, en_article_plain), право на что даёт статья 85 (пять равно аутентичных текстов). Первый пакет корпуса, где выбор редакции продиктован не языком автора, а измеренным дефектом публикации. Измерена граница видимости канала суждения: вопрос «императивна ли норма» при молчании суда даёт REQUIRES_JUDGMENT и один запрос, а вопрос «ничтожен ли договор» на том же деле — NEITHER при COMPUTED и ноль запросов: цель не называет норму, та остаётся экзистенциальной переменной, и разбор блокеров §185 до канала не доходит («переменные не связаны целью: v1» — дословный ответ lawc why-not). Это граница АНАЛИЗА, а не дефект нормы; обе стороны стережёт пара сцен, обход через второй аргумент головы отвергнут как правка нормы под инструмент. Носители: презумпция §133 (п. 3 ст. 33 — опровержение расхождением даёт FALSE_ONLY, а не NEITHER), объявленный priority с reason explicit_exception (изъятие п. 4 ст. 33 — единственное место среза, где Конвенция сама упорядочивает два своих положения), дефитеры (п. 4 ст. 31, изъятие п. 3 ст. 30, затвор ст. 103 Устава), канал §47.3 на девяти отношениях. Расщепление §206 доведено до оценочных оснований: «двусмысленным или неясным» и «абсурдными или неразумными» — четыре канала и четыре правила, иначе why-not назвал бы один блокер вместо названного. Измерено: §33.1 — 5 EXECUTABLE из 5 статей охвата, 0 UNEXPLAINED, 80 статей вне охвата объявлены scope; закрепление — 2 публикации, 0 нарушений, учёт статей 4 из 85 и 1 из 85 по двум документам; регрессия 30/30, differential 30 вызовов байтово, .lawtest 30/30 эмитированных, разметка §218 75/0 и 35/0, doctor чист.

  • Акт, чей предмет — КЛАССИФИКАЦИЯ, и точка усмотрения, названная самим источником: iau.planet_definition (резолюции МАС B5/B6, 26-я ГА, Прага, 24.08.2006 — 31.08.2026). Определение планеты в Солнечной системе и статус Плутона: две страницы, покрытые целиком (38 фрагментов, 99 % байтов, 14 сценариев, 10 .lawtest, differential байтовый 36/36). Новая группа корпуса iau. Второй носитель classification §148 после kz.legal-acts и первый, где эта форма несёт весь предмет: деонтики нет ни одной головы, правила strict×9, поражаемых нет. Канал §47.3 из текста, а не от формализатора: сноска 2 отдаёт пограничные объекты процессу МАС, и любой NEITHER на category_of несёт REQUIRES_JUDGMENT — голова правила покрывает всё отношение; отказ органа (adjudicated negative §73) канал закрывает. Акт дважды называет собственный экстенсионал (восемь планет сноской 1, Плутон резолюцией B6) без единого признака, которого требует определение, — и пакет держит два основания порознь, так что расхождение перечня и определения видно сценарием. Замеры: дословное «все прочие» через отрицание выводимых предикатов не исполняется (NEITHER против TRUE_ONLY через отрицание эмпирического критерия) — пункт (3) записан прочтением с доводом; спутник выведен из деления вовсе, и вывод об этом свой, а не молчание; мера §33.1 неприменима (три несводимые нумерации в одном документе), записи в базе глубины нет. Две официальные редакции расходятся по существу — французская не несёт ни одной оговорки «except satellites» и не имеет сноски B6 об имени новой категории ТНО; расхождение зафиксировано составом фрагментов и отсутствием одной пары align.

  • Первый акт корпуса, чей ответ — УКАЗАТЕЛЬ НА ДРУГОЙ ПРАВОПОРЯДОК: kz.corpus.mchp (раздел 7 ГК РК «Международное частное право», ст. 1084–1124, срез первой очереди — 31.08.2026). Глава 61 (ст. 1084–1092) и параграф 5 главы 62 (ст. 1112–1115): 13 EXECUTABLE из 41 статьи, 24 сценария, 8 .lawtest, differential байтовый 24/24. Акт отвечает на вопрос, стоящий ПЕРЕД обычным вопросом корпуса: право какой страны применяется. Диспетчеризации в нём нет и быть не может — выход есть ЗНАЧЕНИЕ (primenimoe_pravo), потому что правила соседнего пакета не исполняются никогда; на статье 1087 (обратная отсылка) эта граница названа прямо. Два класса, воспроизведённые на живом акте: приоритет §116 не разделяет две привязки к разным правопорядкам (разные атомы, не атом и его отрицание) — порядок пунктов выражен гардами; ранг дефитера §110 берётся максимумом по голове, и поражаемо производимый барьер молча отключил все три дефитера передаточной нормы. Носители: map §46.1 (пятнадцать видов договора ст. 1113 п. 1, тотальность доказывает компилятор) и таблица A3 ст. 1115 — единственная в корпусе с доменными ОБЕИМИ колонками. Названо, но не проведено: record_literal объявлен грамматикой и не разбирается ни одной реализацией — канонический пример §54 (const KZ: Jurisdiction = Jurisdiction { code: "KZ" };) не компилируется; девятая форма того же класса, что вымела E-0070.

  • Первый акт ОАЭ и первая юрисдикция Залива в корпусе: ae.corpus.gratuity (выходное пособие — федеральный декрет-закон 33/2021 ст. 1, 3, 33, 51, 52, 53; Постановление Кабинета 1/2022 ст. 1, 29, 30; Постановление Кабинета 96/2023 ст. 1, 3, 5, 9, 10; 31.08.2026). Предмет собран из ТРЁХ актов, у каждого закреплены ДВЕ редакции — арабский подлинник (преобладает при расхождении по оговорке издателя) и официальный английский перевод, — и соответствие статей объявлено align … with … §29 поштучно, а не выведено из совпадения номеров. Байты добыты с портала издателя, отдающего текст машинно, но стоящего за WAF: закреплены сами ответы, sha256 сверены с digest’ом на стороне страницы. PDF издателя для подлинника непригоден — в текстовом слое арабского PDF лигатуры распадаются в визуальном порядке («المادة» → «املادة»), и дефект принадлежит публикации: pdftotext 25.06.0 и pymupdf 1.28.0 дают одно и то же, а подстановкой это не чинится («امل» законна сама по себе). Что портал и PDF несут один текст, проверено мультимножеством символов ст. 51; английская ст. 51 портала совпала с официальным PDF слово в слово. Заведены единицы деления en_article_paren и ar_article_paren в оба реестра меры §33.1. Пять границ языка измерены и изменили запись: (1) у A3-таблицы mode: rules моста в .law нет — полосы 21/30 дней молчали при зелёном check, и переписаны правилами, а ставки остались A3-параметрами с временной осью, открывающейся 02.02.2022 (запрос на более ранний день даёт MISSING_PARAMETER_VALUE, а не сегодняшнюю ставку); (2) строгое правило не читает поражаемый вывод (LDC-E4103) — изъятия ст. 3(2) записаны отрицательными посылками, иначе whyNot §185 перестал бы называть невыполненную посылку на деле без права; (3) include в прочтении ВЫКЛЮЧАЕТ правило из базовой теории — счёт по тридцатидневному месяцу пришлось оставить базой, а прочтение MOHRE именует конвенцию, не меняя суммы; (4) selection exactly_one заменён на any_of: тотальность группы глобальна по документу и обнулила бы всю батарею сцен §267; (5) add_business_days требует снимок календаря §85 даже для календарных дней — отсюда модельный календарь пакета и ДВЕ формы срока ст. 53 (дата термом §86 и сравнение с A3-параметром), чьё согласие сторожит отдельная сцена. Ответ пакета на молчание акта: дневная ставка не определена ни законом, ни регламентом, и две живые конвенции дают 60 013,70 против 59 191,59 AED на одном деле — расхождение ровно 365 ÷ 360 = 1,3889 %. Измерено: §33.1 — 6/6, 3/3 и 5/5 EXECUTABLE по трём срезам, 0 UNEXPLAINED; регрессия 14/14, differential 27 evaluate-вызовов байтово, .lawtest 18/18, разметка §218 72/0 и 40/0, английский оверлей §218 (68 + 40) в i18n-храповике.

  • Первый акт корпуса, чей ПРЕДМЕТ — старшинство авторитетов, и первый живой свидетель политики §118 в исполнении: de.bverfgg.bindungswirkung (BVerfGG, срез из восьми параграфов — 2, 15a, 16, 31, 93a—93d; 31.08.2026). Формализуется не исход конституционной жалобы, а то, ЧЕЙ вывод старше: связывающая сила решений (§ 31 абз. 1 — конституционные органы Федерации и земель, все суды и ведомства), сила закона (§ 31 абз. 2) и внутрисудебная иерархия — пленум над сенатом (§ 16 абз. 1), сенат над палатой (§ 93c абз. 1). Нумерованной иерархии закон не печатает: ступени rang суть ПРОЧТЕНИЕ двух этих норм, и каждая заякорена в свою. Политика §118 впервые проверена исполнением на живом акте (прежние свидетели — объявленная и никем не исполняемая политика kz.corpus.legal_acts, демо lilliput и вектор LAY-L1-PRIORITY-POLICY): BVG-14 — палата объявила закон несовместимым, сенат тем же вопросом совместимым, ответ FALSE_ONLY при нуле сообщённых конфликтов; пара BVG-15 (сенат молчит) даёт TRUE_ONLY, и различие «перебито» / «перебивать нечем» видно числом конфликтов. Мост от применения к спрушкёрперу идёт через rule_of §180: имя правила в аргументе факта понижается в const_ref на его StableId, и старшинство объявляется фактом о НОРМЕ, а не о деле; контрфакт без факта старшинства — BOTH и один неснятый конфликт. Второй свидетель четырёх свежих поверхностей: map §46.1 («der andere Senat» — тотальное отображение двухчленного словаря на себя, тотальность доказывает компилятор), экспорт членов pub enum (E-0065), член перечисления значением (E-0067) и наблюдение position(Шаблон, Статус) §267.4. Три находки из закреплённых байтов: перечень адресатов § 31 абз. 1 исчерпывающ и САМ СУД в него не входит; § 16 абз. 1 знает только отступление от позиции ДРУГОГО сената (BVG-08 стережёт NEITHER для собственной прежней позиции); обязанность опубликовать резолютивную часть срока не имеет — окно открыто сверху, позиция остаётся ACTIVE и VIOLATED не станет никогда. Кворум и порог взяты из текста (восемь судей § 2 абз. 2 → «две трети» § 16 абз. 2 целочисленно, пара 6/5; принятие сенатом — пара 3/2). Заведена единица деления de_paragraph («§ N» с буквенным суффиксом) в четыре места обеих мер §33.1 плюс ветвь paragraph/N в LOCATOR_RE, и срез --gii-body извлекателя, снимающий ссылку-метку портала из шапки каждого параграфа. Измерено: §33.1 — параграфов 139, EXECUTABLE 6, ANCHORED 2, вне охвата 131; регрессия 17/17, differential 25 вызовов байтово, .lawtest 24 эмитированных и 2 рукописных, разметка §218 54/0 и 26/0, check_lower байтово, doctor чист.

  • Первый акт корпуса, чей ПРЕДМЕТ — бремя доказывания: eu.equality.burden_of_proof (Директива 2006/54/ЕС, ст. 19, срез из семи статей; 31.08.2026). Формализуется не истина факта, а НОСИТЕЛЬ обязанности его установить: бремя записано нормативной позицией §134 над эпистемической целью (duty { bearer; goal achievement { condition issue_established(pr, i) } }), и переход виден запросом positions — до prima facie обязанность у истца, после ответа органа у ответчика, первая при этом исчезает (BOP-01/BOP-16). У соседей бремя встречалось клаузой внутри чужого предмета (ст. 5 п. 4 Регламента 261/2004, максима Меджеллы, состав четырёх свидетелей quran.nur); здесь распределение и есть норма. Четыре вещи измерены, а не предположены. (1) «Facts from which it may be presumed» — канал суждения §47.3: без ответа органа burden_shifted есть NEITHER при REQUIRES_JUDGMENT и типизированном запросе, а не «нет» (BOP-03); ответ приходит adjudicated assertion §73 и закрывает вопрос в обе стороны (BOP-02/04). (2) Изъятия п. 3 и п. 5 записаны ГАРДОМ, а не дефитером с приоритетом: первая, каноническая запись давала burden_shifted BOTH при НУЛЕ сообщённых конфликтов — посылка переноса приходит поражаемой цепью (ст. 2 п. 1 (b) → ст. 4/14 → мост prima facie), и приоритет §116 её не упорядочивает; лечение — прописанное для класса defeater-over-defeasible-chain, и оно вернее по тексту («need not apply», «shall not apply» ограничивают сферу, а не опровергают вывод). (3) Оговорка п. 5 («unless otherwise provided by the Member States») — установленное ОТРИЦАНИЕ §67 в строгом теле, а не not_known: умолчание дела о чужом правопорядке не читается как «государство не предусмотрело». (4) Канал суждения §47.3 виден сквозь тело поражаемого ПРАВИЛА (E-0066), но НЕ сквозь тело дефитера, порождённого unless: косвенная дискриминация при незаданном вопросе об оправданности выводится TRUE_ONLY/COMPUTED без единого запроса, а ответ органа её переворачивает (BOP-09/10) — замер записан сценарием, поведение не менялось, вопрос владельцу. Границы объявлены: недоказанное не становится проигранным (§136 п. 3 — мост «молчание → правовой исход» в источнике отсутствует, BOP-17 стережёт его отсутствие); окна обязанностей доказывания открыты сверху, и VIOLATED у них не бывает; шкалы стандартов доказывания нет вовсе — Директива отсылает к национальным системам. Измерено: §33.1 — 7 EXECUTABLE из 7 статей охвата, 0 UNEXPLAINED, 29 статей вне охвата объявлены scope; регрессия 17/17, differential 23 вызова байтово, .lawtest 21/21, разметка §218 31/0 и 28/0, doctor «пробелов нет».

  • Ось «суннизм — шиизм»: fiqh.madhahib, два классических сочинения по одному на сторону (31.08.2026). Вторая ось разногласия в корпусе (первая, мазхабов внутри суннитской линии, живёт в fiqh.taqlid) и первая, чьи стороны приходят из ДВУХ разных закреплённых источников: شرائع الإسلام аль-Мухаккика аль-Хилли (ar.lib.eshia.ir/71613) и بداية المجتهد Ибн Рушда (арабская Викитека). До него ось присутствовала ровно одним ОТРИЦАНИЕМ — fiqh.taqlid ст. 8 описывает джафаритский счёт талака, не называя его, и отказывает в нём лицу; производящего правила не было ни одного. Ось называет сам источник: «و لو كان المطلق مخالفا يعتقد الثلاث لزمته» (Шараи’ ج3 ص9) — ответ зависит от того, к какой линии принадлежит лицо. Три вопроса (счёт объявления, талак в хайде, временный союз), 25 правил, 17 фрагментов, две РАЗНЫЕ конвенции нарезки в одном генераторе (печатная страница у Шараи’, баб у Бидаи — у первого в разметке нет бабов, у второго нет страниц). Суннитский счёт трёх стоит на якоре ДЖАФАРИТСКОГО источника, потому что Бидая его не говорит: её الباب الثاني спорит о суннности произнесения, не о счёте, — и якорь называет тот текст, который утверждение несёт. Меньшинство внутри линии (Ибн Аббас о мут’е, «فرقة» о хайде) записано отдельной головой, которую не читает ни одно правило ответа. Пять вопросов, 37 строгих правил, 22 фрагмента пяти срезов, две РАЗНЫЕ конвенции нарезки в одном генераторе (печатная страница у Шараи’, баб у Бидаи). Пакет умеет три вещи, которых в корпусе не было. (1) Ответ ЛИЦУ по принадлежности к линии: на байтово одном объявлении двое получают разный счёт. (2) ground_of_divergence — ПОЧЕМУ линии расходятся, а не только что: жанр Бидаи устроен вокруг «و سبب اختلافهم», и три основания названы дословно (условия действительности против условий совершенства, обычай выражения против намерения, расхождение преданий о дате запрета); о счёте объявления основание не названо никем, и это выведено головой ground_not_stated, а не молчанием. (3) Вопрос, на котором граница ОТВЕТОВ идёт ПОПЕРЁК границы линий: три курʼ иддата суть очищения у джафаритов, у Малика и у аш-Шафи’и — и месячные у Абу Ханифы. Отсюда первое выведение lines_agree_on и парная answer_splits_within_line. Джафаритский счёт талака стоит ДВУМЯ прочтениями §152, а не базой: источник даёт две ривая и называет одну более распространённой, не выбирая; гейт содержателен — база отвечает о суннитском счёте и молчит о джафаритском. Две находки инструментария: граница баба у Викитеки обязана знать уровень разметки (иначе 192 байта вместо главы — срез непуст, фрагмент валиден, check зелен, нормы нет), и правило расхождения обязано читать ПРИЧИНУ, а не только исходы (иначе одна пара исходов, возникшая по двум разным причинам, объявляется расхождением не о том вопросе). Измерено: 41/41 сценарий, differential 86 evaluate-вызовов байтово идентичны, 85/85 .lawtest, разметка 83/0 и 39/0, ворота закрепления 0 нарушений. Мера §33.1 неприменима (у обоих сочинений нет единицы «Статья N»), в базу глубины пакет не вписан осознанно.

  • Первый акт корпуса, чей ПРЕДМЕТ — агрегат: kz.corpus.srednyaya_zarplata (Единые правила исчисления средней заработной платы, приказ МЗСР РК от 30.11.2015 № 908; 31.08.2026). Инвентарь конструкций по всему корпусу (221 пакет, 222 CLIR) дал ноль употреблений у average, min и max и два у sum при 241 у count; акт заведён свидетелем этого дна — здесь свод начисленного за расчётный период есть сама норма пункта 8, а не приём записи. Пять вещей измерены, а не предположены. (1) Money / Decimal — единственная денежная пара таблицы §58: Money / Integer, Money / Money, Decimal / Integer, Decimal / Rational отвергаются статически (LDC-E2108), и потому счёт дней и часов объявлен Decimal, а КОЭФФИЦИЕНТ ПОВЫШЕНИЯ пункта 13 (отношение двух окладов) в языке невыразим — он входит делом, и это записано в модуле, а не умолчано (третий свидетель границы после us.fnma-income и kz.tarify). (2) Неточное деление даёт INEXACT_DIVISION и вывода не даёт вовсе: Правила об округлении молчат, и молчание сохранено — политика вынесена в прочтение §152 OkruglenieDoTiyna (div_round(…, 2, "HALF_UP"), которое включается делом. Пара SZP-02/03: акт молчит, прочтение отвечает 28 571,43. (3) Comprehension, читающий выводимое (monotone) либо отрицание (not), заставляет ОБЕ реализации приложить к документу ошибку EMPTY_AGGREGATE при ВЕРНОМ итоге — в раннем проходе неподвижной точки коллекция ещё пуста, а политику пустой коллекции §59 поверхность .law выразить не может (арность агрегата 1 либо 3, тройка несёт precision/mode для average). Свод поэтому считается двумя агрегатами по БАЗОВЫМ фактам и вычитанием, а роль empty-политики играет расщепление §206 «исключаемое есть / исключаемого нет». (4) priority §116 НЕ развёл четыре производителя одной величины: на деле, подпадающем под пункты 8 и 12 сразу, оба ответа остались TRUE_ONLY (20 000 и 30 000) при зелёных check/lower/differential — §107 поражает противоречащие выводы, а два значения одного отношения суть два разных атома (второй свидетель класса после su.decree.semidnevka_1940). Рабочая форма — барьер плюс ЯВНЫЙ дефитер §95.3: unless здесь роняет оракула KeyError, потому что наследует голову с вычисляемым третьим аргументом. (5) Выбор прочтения кладётся В ОБА МЕСТА (case.options и четвёртый аргумент evaluate): без этого differential молча пропускал две сцены из восьми (6 сверенных вызовов вместо 8). Заведена конвенция единицы point_amended — пункт, включая добавленный поправкой («7-1», «7-2»), — в ОБА реестра меры §33.1, в таблицу имён boundaries.py и профилем kz-adilet-point шаблона pinning: голая point отдала бы оба добавленных пункта соседу, и локатор article/7 адресовал бы ещё две нормы при верных байтах. Измерено: §33.1 — 14 EXECUTABLE, 3 SOURCE_ONLY (все три объявлены границей с причиной), 0 UNEXPLAINED; закрепление 99,9 % (24 887 из 24 908 байт), учёт пунктов 17 из 17, неучтённых 0; регрессия 8/8, differential 8 вызовов байтово, .lawtest 11/11, разметка §218 55/0 и 34/0.

  • Акт-таран №4 unit-package — СОСТАВНОЙ ТЕГ: ru.esbe.mekhanika, пять статей Энциклопедического словаря Брокгауза и Ефрона (DECISION-0068 §5, 31.08.2026). Пункт 3 очереди («умножение размерных пар и канон составного тега») был закрыт тем же днём тараном №3 с условием переоткрытия: акт с нормой о РАЗЛОЖЕНИИ составной единицы либо с произведением размерных пар, чей результат остаётся величиной. Условие выполнено — «эрг, т. е. работа, совершаемая силой равной одному дин на пути в один сантиметр» и «работа выразится просто произведением силы на пройденную длину» стоят в одной статье, и результат произведения — работа, а не деньги. Пакет заведён на закреплённых байтах викитеки (пять oldid, fetch_esbe_mekhanika_text.py, 24 021 байт), единица деления — статья словаря (ru_named_section, обе меры §33.1). 42 пробы обеими реализациями байтово (probe_esbe_mekhanika_units.py), 33 сценария семейства esbe, 20 .lawtest, differential 52 вызова, Lean 52/52 обеими ногами. Найдено четыре вещи, которых прошлые тараны дать не могли: молчаливый вывод работы с тегом ДЛИНЫ при ПОЛОВИННОМ де-юните ((p / DinEtalon) * s → 1962 cm, TRUE_ONLY, ноль диагностик); асимметрия громкости (умножение размерных пар — статический LDC-E2108, кросс-юнитное деление — тишина до исполнения; попутно уточнена запись тарана №2 о «статически зелёном» v * t); расщеплённый алфавит тега (у литерала идентификатор §18, у with_unit/convert любая строка — "m/s", "s/m", "m·s⁻¹" суть три разные размерности, а const A: Quantity = 20 m/s; понижается в деление на необъявленное имя при зелёном check); опровергнутые пункты списка выразимого (pow E-0075 неприменим к де-юниченному Decimal; convert слеп к исходному тегу и на составных именах). Черновик формы составного тега приложен к audit и НЕ проведён — три варианта с последствиями для §208/§209, довод о входе, три строки таблицы видов, семь векторных обязательств; решение за владельцем. Замер вписан строкой в DECISION-0068 §5, рамки 1–4 не тронуты, семантика не менялась ни строчкой.

  • reanchor --fuzzy: рычаг перевешивания заработал на переписке с перенумерацией (DECISION-0040 §6, 31.08.2026). Замер опроверг диагноз, записанный при заведении задачи. Считалось, что побайтовое сравнение текстов «слишком строгое» (§1: «4 статьи из 96»); на деле на Конституции 2026↔1995 совпало 0 локаторов из 104, у одноимённых статей медиана сходства 0,075 при максимуме 0,49, а номер сохранила ровно одна статья из 98 — остальные 97 переехали систематическим сдвигом на 1–3. То есть потеря была не в строгости сравнения ТЕКСТА, а в отсутствии сопоставления НОМЕРОВ: compare_editions сверяет article/5 с article/5 и на перенумерации слеп по построению, никакой порог этого не лечит. Заведён locator_matches — кандидат ищется среди ВСЕХ локаторов цели, счёт целый в долях 10000 (арифметика целая: двоичный float в lawref запрещён §18, а счёт едет в отчёт, который сравнивают байтами; тождество cos·S = √(S²·dot²/(‖a‖²‖b‖²)) даёт точный math.isqrt). Спорные (отрыв от второго кандидата меньше запаса) и оспариваемые (одна цель выбрана несколькими статьями) в кандидаты не идут. Мера — мешок триграмм (вес 1) и слов (вес 2); триграммы здесь условие работы на казахском: целые слова дают 84/50 (ru/kk), триграммы 85/81 — агглютинативный язык приносит понятие разными словоформами, и для мешка слов это разные ключи. Формула совпала с эмбеддером law_search, но найдена независимым замером — разделяемого кода быть не может, lawref не вправе зависеть от apps/mcp. Итог на живом акте: сквозных кандидатов было 0, стало 17, причём обе языковые пары независимо дали одно отображение номеров. Режим включается явно, у fuzzy-кандидата в moves стоит score (побайтовое совпадение — факт, счёт — оценка, в одном списке без признака не смешиваются); ворота получили ВТОРУЮ фикстуру-перенумерацию и держат обе стороны — что строгий режим на ней даёт ноль и что fuzzy находит двойника, слушается порога и детерминирован. Нейронная модель этот класс не открывает и в §5 остаётся отложенной: переписка сохраняет словарь почти целиком.

  • Публичный MCP на mcp.arxo.io (DECISION-0078, 31.08.2026). Решение владельца «пусть каждый сможет установить»: транспорт 0065 получает явный публичный режим LAW_MCP_PUBLIC=1 — единственный способ снять требование LAW_MCP_TOKEN с не-loopback бинда (гвардия и была написана как требование явного решения, а не запрет; отказ теперь называет DECISION-0078, тест рубильника — в test_http_server.py). OAuth 2.1 закрыт без исполнения: идентификация не нужна для «пусть ставит любой». Развёртывание — apps/mcp/deploy/ (nginx-edge с rate-limit 3 r/s и лимитом тела 1 МБ за существующим Traefik, два systemd-экземпляра law-mcp@8722/8723 на 172.17.0.1, недостижимых мимо edge) и джоба deploy-mcp.yml (DECISION-0064: ворота доставки = оба контракт-теста, rsync чекаута раннера того же сервера, последовательный перезапуск с прогревом, смок настоящим edge-маршрутом через --resolve до всякого DNS). Лэндинг /mcp/ (en/ru) переписан: вместо «доступ по запросу» — claude mcp add --transport http law-dsl https://mcp.arxo.io/mcp.

  • Акт-таран для pow: новый пакет la.gauss.theorema_fermatianum (31.08.2026). «Disquisitiones arithmeticae» Гаусса, sectio tertia, артикулы 45—50 («Fermatii Theorema») — свидетель, которого требовала errata E-0062, оставившая pow смежным пробелом. Замер тарана: три записи степени дают три разных отказа, ни один не называет §58 (LDC-E2105 / LDC-E0101 / LDC-E0201); продукции в grammar.ebnf у pow нет вовсе. Черновик errata приложен к audit.ru.md, не проведён — решение владельца: закрытая таблица Integer pow Integer -> Integer, отрицательный показатель — отказ, 0 pow 0 = 1 по конвенции пустого произведения, переполнение путём mod, носитель — терм std §259, четыре векторных обязательства. Степень выражена ЦЕПЬЮ проверяемых звеньев (артикул 46 источника и есть правило шага; рекурсия §110 через supported), поражаемый слой несёт презумпцию простоты с дефитером-делителем, псевдопростое 341 и число Кармайкла 561 показаны делами. Заведена конвенция единицы articulus в оба реестра §33.1. Измерено: §33.1 6/6, закрепление 96,2 %, регрессия 26/26, differential 26 вызовов байтово, Lean 26/0, .lawtest 15/15 + 26/26, разметка 19/0 и 24/0.

  • smt_witness.py научился остатку: mod в BINARY_OPS (31.08.2026). Первая проба атаки на инварианты пакета Ферма ответила «binary-операция ‘mod’ вне среза»; расширение заведено вместе с воротами verify/ci/gates/layers/check_smt_mod.py (шаг 38/47). Евклидов остаток SMT-LIB совпадает с §58/E-0062 не случайно, но и не самоочевидно — ворота спрашивают о совпадении сам решатель; нулевой делитель кодировщик запрещает явным assert-ом (проверяется перехватом скриптов, а не чтением кода). Результат: три экземпляра малой теоремы Ферма (p = 3, 5, 7) — UNSAT на 3 из 3 комбинаций. Граница названа: без ограничения основания наименьшим положительным вычетом z3 не отвечает вовсе, то есть доказан экземпляр НА ВЫЧЕТАХ, а сведе́ние к вычету — работа права (артикул 46), не решателя.

  • kz.grammar.punktuacia_qurmalas_soilem — реестровый №39, source-ready срез волны 6 казахской грамматики (31.08.2026). Source-first закреплены пять следующих абзацев раздела 3 вводного очерка Сыздық: публикация скопирована байт-в-байт (SHA-256 4f86533e…c72b64c5), пять фрагментов — 7 387 / 71 030 байт. Семь strict-норм выражают две клетки опущенного противительного союза (запятая сохраняется, тире ставится), двоеточие при опущенных өйткені/сондықтан/себебі, две клетки общего субъекта, отсутствие тире в названной казахской конструкции и запятую вместо тире в условном придаточном. Конструкция и буквальные примеры приходят фактами дела; parser, enum, map, phon/lexicon и закрытый словарь не добавлены. Общая фраза о синтаксическом строе оставлена границей: она не задаёт отдельного результата или органа суждения. Добавлены CLIR, раннер 6/6, manifest и одна точечная строка scenario-ratchet, разметка и аудит; KZ-differential 14/14 байтово, 7/7 норм достижимы, doctor.py без пробелов. §33.1 по единицам неприменима, потому что у очерка нет их серии; запись глубины не создаётся и UNEXPLAINED не возникает.

  • kz.grammar.punktuacia_ongashalangan_aiqyndauysh — реестровый №38, следующий source-ready срез волны 6 казахской грамматики (31.08.2026). Повторная source-first сверка нашла уже закреплённый раздел 3 вводного очерка Сыздық; публикация скопирована байт-в-байт (SHA-256 4f86533e…c72b64c5), три фрагмента — 3 660 / 71 030 байт. Три strict-нормы выражают отсутствие знака между қосалқы айқындауыш и айқындалушы и два прямо названных способа выделить ряд запятыми с обеих сторон. Роль ряда и буквальные примеры приходят фактами дела; строковый парсер, enum, map, phon/lexicon и закрытый словарь не добавлены. Открытое «бірқатары» оставлено границей. Добавлены CLIR, раннер 4/4, manifest и одна точечная строка scenario-ratchet, разметка и аудит; KZ-differential 8/8 байтово, 3/3 нормы достижимы, doctor.py без пробелов. §33.1 по единицам неприменима, потому что у очерка нет их серии; запись глубины не создаётся и UNEXPLAINED не возникает. №39 о сложных предложениях остаётся следующим отдельным source-first пакетом.

  • kz.grammar.emle_erezheler_common — реестровый №40, следующий source-ready срез волны 6 казахской грамматики (31.08.2026). Source-first закреплены приказ Министра науки и высшего образования РК №468 п. 1, Положение п. 2 и пп. 7.1 из извлечения Adilet (838 байт в 3 фрагментах; SHA-256 публикации e6d0b074…ce9ace02). Три strict-нормы выражают создание Республиканской орфографической комиссии, её консультативно-совещательный статус и подготовку предложения либо рекомендации по прямо предъявленному вопросу орфографии, произношения или пунктуации. Содержание рекомендации не домысливается: external judgment требует adjudicated assertion §73, а без него ответ остаётся REQUIRES_JUDGMENT. Добавлены CLIR, раннер 3/3, manifest и одна точечная строка scenario-ratchet, разметка и аудит; KZ-differential 5/5 байтово, 3/3 нормы достижимы, doctor.py без пробелов. §33.1 по единицам неприменима из-за повторной нумерации НПА, поэтому запись глубины не создаётся; UNEXPLAINED не возникает. Административная процедура Комиссии, phon/lexicon и новая пунктуационная парадигма вне scope; №38–39 остаются source-first до самостоятельного источника.

  • kz.grammar.punktuacia_zholda_qaldyru — реестровый №37, следующий source-ready срез волны 6 казахской грамматики (31.08.2026). Source-first закреплён §127 «Орфография ережелері» Сыздық (106 байтов; SHA-256 публикации 79042dc…f3753): знак препинания остаётся в текущей записываемой строке. Источник не называет графему и не показывает пример, поэтому общая категория и положение приходят фактами дела, а список символов, строковый распознаватель, phon/lexicon, enum и map не добавлены. Добавлены CLIR, раннер 2/2, храповики сценариев/разметки/глубины и аудит; KZ-differential 3/3 байтово, UNEXPLAINED 0, doctor.py без пробелов. Следующие разделы пунктуации №38–39 оставлены source-first: самостоятельных нормативных фрагментов в закреплённом корпусе нет.

  • kz.grammar.tasymal — реестровый №36, следующий source-ready срез волны 6 казахской грамматики (31.08.2026). Source-first закреплены §§118–126, 128–129 «Орфография ережелері» Сыздық (4 602 байта в 11 фрагментах; SHA-256 публикации 79042dc…f3753): 21 strict-норма задаёт буквально названные границы переноса, положение у/й, запреты разрыва и две границы сокращений. Все 73 вхождения форм приходят фактами дела; раннер делает 79 проб, потому что §122 испытывает обе прямо разрешённые границы каждой из шести форм. Добавлены CLIR, раннер 2/2, храповики сценариев/разметки/глубины и аудит; KZ-differential 81/81 байтово, UNEXPLAINED 0, doctor.py без пробелов. Примечание §118 с открытыми «кейде»/«мүмкіндігінше» и §127 о пунктуации оставлены source-first границами: первое не даёт клетки либо органа решения, второе передано следующему punktuacia-*.

  • kz.grammar.sheteldik_ataular — реестровый №35, следующий source-ready срез волны 6 казахской грамматики (31.08.2026). Source-first закреплён §107 «Орфография ережелері» Сыздық (512 байтов; SHA-256 публикации 79042dc…f3753): первое слово названий международных и зарубежных центральных организаций пишется с прописной буквы. Одна strict-норма охватывает все 3 дословных названия, которые приходят фактами дела; строки, phon/lexicon, enum и map не добавлены. Добавлены CLIR, раннер 2/2, храповики сценариев/разметки/глубины и аудит; KZ-differential 5/5 байтово, UNEXPLAINED 0, doctor.py без пробелов. §§94, 99, 100 и 104 оставлены source-first подочередью: §107 не даёт их отдельных носителей, условий или результатов.

  • kz.grammar.kirme_sozder — реестровый №34, следующий source-ready срез волны 6 казахской грамматики (31.08.2026). Source-first закреплён §21 «Орфография ережелері» Сыздық (644 байта; SHA-256 публикации 79042dc…f3753): большинство русских и пришедших через русский, преимущественно терминов, пишется по русской орфографии. Одна strict-норма охватывает все 22 дословные формы, которые приходят фактами дела; строки, phon/lexicon, enum и map не добавлены. Добавлены CLIR, раннер 2/2, храповики сценариев/разметки/глубины и аудит; KZ-differential 24/24 байтово, UNEXPLAINED 0, doctor.py без пробелов. §§15–16 и §§22–23 оставлены source-first подочередью: §21 не даёт их отдельных условий и клеток.

  • kz.grammar.qysqartu — реестровый №33, следующий source-ready срез волны 6 казахской грамматики (31.08.2026). Source-first закреплены §§79–82 «Орфография ережелері» Сыздық (1 512 байтов; SHA-256 публикации 79042dc…f3753): четыре strict-нормы задают написание инициального сокращения прописными без знаков, смешанного регистра, слитного строчного сокращения и точек после каждой буквы сокращённого имени. Все 11 дословных форм приходят фактами дела; строки, phon/lexicon, enum и map не добавлены. Добавлены CLIR, раннер 5/5, храповики сценариев/разметки/глубины и аудит; KZ-differential 16/16 байтово, UNEXPLAINED 0, doctor.py без пробелов. §§34–37 уже заведены в defis, §117 повторяет §79, §§128–129 оставлены source-first для tasymal.

  • kz.grammar.birge_bolek — реестровый №32, следующий source-ready срез волны 6 казахской грамматики (31.08.2026). Source-first закреплён §49 «Орфография ережелері» Сыздық (343 байта; SHA-256 публикации 79042dc…f3753): сочетания прилагательного с төбел, қасқа, шолақ и подобными словами при описании животного пишутся раздельно. Одна strict-норма охватывает все 4 дословные формы, которые приходят фактами дела; строки, phon/lexicon, enum и map не добавлены. Добавлены CLIR, раннер 2/2, храповики сценариев/разметки/глубины и аудит; KZ-differential 6/6 байтово, UNEXPLAINED 0, doctor.py без пробелов. Примечания §49 и §§50–67 оставлены source-first подочередью: их отдельные условия и клетки не содержатся в главной фразе §49.

  • kz.grammar.bas_arip — реестровый №31, первый source-ready срез волны 6 казахской грамматики (31.08.2026). Source-first закреплён §91 «Орфография ережелері» Сыздық (1 005 байтов; SHA-256 публикации 79042dc…f3753): первое слово следующего предложения после точки, многоточия, вопросительного или восклицательного знака начинается с прописной буквы. Четыре strict-нормы охватывают все 8 дословных первых слов, которые приходят фактами дела; строки, phon/lexicon, enum и map не добавлены. Добавлены CLIR, раннер 5/5, храповики сценариев/разметки/глубины и аудит; KZ-differential 10/10 байтово, UNEXPLAINED 0, doctor.py без пробелов. §92–117 оставлены source-first подочередью: их отдельные условия и клетки не содержатся в §91.

  • kz.grammar.shylau — реестровый №30, следующий source-ready срез волны 5 казахской грамматики (31.08.2026). Source-first закреплён §86 «Орфография ережелері» Сыздық (523 байта; SHA-256 публикации 79042dc…f3753): семь названных частиц с предшествующим словом пишутся через дефис, а ай/ау внутри пяти прямо названных одағай — слитно. Две strict-нормы охватывают все 12 дословных форм, которые приходят фактами дела; строки, phon/lexicon, enum и map не добавлены. Добавлены CLIR, раннер 3/3, храповики сценариев/разметки/глубины и аудит; KZ-differential 16/16 байтово, UNEXPLAINED 0, doctor.py без пробелов. §§83–85 и §§87–88 оставлены source-first подочередью: их отдельные условия и клетки не содержатся в §86.

  • kz.grammar.eliktew — реестровый №29, следующий source-ready срез волны 5 казахской грамматики (31.08.2026). Source-first закреплены два фрагмента §68 «Орфография ережелері» Сыздық (1 009 байтов; SHA-256 публикации 79042dc…f3753): общее дефисное правило для қос сөз и совместно названные повторные одағайлар/еліктеуіш/бейнелеуіш слова. Одна strict-норма охватывает все 10 дословных форм, которые приходят фактами дела; совместное основание не делится на угаданные классы, phon/lexicon, строковый разбор, enum и map не добавлены. Добавлены CLIR, раннер 2/2, храповики сценариев/разметки/глубины и аудит; KZ-differential 12/12 байтово, UNEXPLAINED 0, doctor.py без пробелов. №28 ustau отложен: источники дают лишь уже использованную координацию §66 и диагностическую ссылку §88, не самостоятельную клетку; порядок не менялся.

  • kz.grammar.esimdik — реестровый №27, следующий source-ready срез волны 5 казахской грамматики (31.08.2026). Source-first закреплён §66 «Орфография ережелері» Сыздық (1 610 байтов; SHA-256 публикации 79042dc…f3753): три strict-нормы выражают три буквальные клетки — слитное написание с есімдіктермен/үстеулермен, раздельное с существительными и раздельное неопределительного бір в пяти прямо названных сочетаниях. Все 55 дословных форм — факты дела; координация первой клетки, phon/lexicon, строковый разбор, enum и map не добавлены. Добавлены CLIR, раннер 4/4, храповики сценариев/разметки/глубины и аудит; KZ-differential 58/58 байтово, UNEXPLAINED 0, doctor.py без пробелов. №25 syn-esim-shyrai отложен: источники не содержат клетки «шырай»; №26 san-esim не дублируется, потому что прямые клетки §§35 и 47 уже заведены в defis и kurdeli-san-esim-bolek; порядок не менялся.

  • kz.grammar.kosemshe — реестровый №24, следующий source-ready срез волны 4 казахской грамматики (31.08.2026). Source-first закреплены §§10–11 «Орфография ережелері» Сыздық (1 463 байта; SHA-256 публикации 79042dc…f3753): три strict-нормы выражают буквально названные клетки көсемше — -й после ы/і даёт один и, -а после и пишется -я, -й после йы/йі даёт один и. Все 20 дословных форм — факты дела; строки §10 о тұйық рай -у/-ю, phon/lexicon, строковый разбор, enum и map не добавлены. Добавлены CLIR, раннер 4/4, храповики сценариев/разметки/глубины и аудит; KZ-differential 25/25 байтово, UNEXPLAINED 0, doctor.py без пробелов. №18 shaq-osy, №19 shaq-otken, №20 shaq-keler и №23 esimshe остаются отложены source-first: нет закреплённого фрагмента с их клетками; порядок не менялся.

  • kz.grammar.etis — реестровый №22, следующий заведённый срез волны 4 казахской грамматики (31.08.2026). Source-first закреплено примечание 1 §5 «Орфография ережелері» Сыздық (441 байт; SHA-256 публикации 79042dc…f3753): одна strict-норма сохраняет ы/і после й при етіс жұрнақтары. Все шесть дословных форм — факты дела; открытые «сияқты» и «т.б.» не превращены в phon/lexicon, строковый разбор, enum или map. Добавлены CLIR, раннер 3/3, храповики сценариев/разметки/глубины и аудит; KZ-differential 8/8 байтово, UNEXPLAINED 0, doctor.py без пробелов. №18 shaq-osy, №19 shaq-otken, №20 shaq-keler остаются отложены source-first: нет закреплённого фрагмента с их клетками и нужными осями; порядок не менялся.

  • kz.grammar.rai — реестровый №21, первый заведённый срез волны 4 казахской грамматики (31.08.2026). Source-first закреплён §41 «Орфография ережелері» Сыздық (419 байтов; SHA-256 публикации 79042dc…f3753): вторая часть абзаца даёт две strict-нормы III лица повелительного наклонения -сын и -сін. Все четыре дословные формы — факты дела; первая часть §41 о II лице остаётся у zhiktik с отдельным основанием §31. phon/lexicon, строковый разбор, закрытая ось и map не добавлены. Добавлены CLIR, раннер 3/3, храповики сценариев/разметки/глубины и аудит; KZ-differential 10/10 байтово, UNEXPLAINED 0, doctor.py без пробелов. №18 shaq-osy, №19 shaq-otken, №20 shaq-keler отложены source-first: нет закреплённого фрагмента с их клетками и нужными осями; порядок не менялся.

  • kz.grammar.tus_atauy_bolek — №17, следующий заведённый срез волны 3 казахской грамматики (31.08.2026). Source-first закреплён §48 «Орфография ережелері» Сыздық (860 байтов; SHA-256 публикации 79042dc…f3753): две strict-нормы дают раздельное написание двух, иногда трёх прилагательных, называющих третий цвет, и цветовых сочетаний с ал, құба, кер, құла, шабдар. Все 21 дословная форма — факты дела; phon/lexicon, строковый разбор, закрытая ось цветов и map не добавлены. §49 о признаках масти скота не смешан с пакетом и остаётся отдельным source-кандидатом вне реестра. Добавлены CLIR, раннер 3/3, храповики сценариев/разметки/глубины и аудит; KZ-differential 22/22 байтово, UNEXPLAINED 0, doctor.py без пробелов.

  • kz.grammar.kurdeli_san_esim_bolek — №16, следующий заведённый срез волны 3 казахской грамматики (31.08.2026). Source-first закреплены §47 «Орфография ережелері» Сыздық (1 017 байтов; SHA-256 публикации 79042dc…f3753) и п. 7 приказа №468 Adilet о мандате Республиканской орфографической комиссии (1 624 байта; e6d0b0…ce02). Шесть strict-норм дают раздельность всех 20 непротиворечивых буквальных форм сложного и приблизительного числительного. Две слитно напечатанные формы екірет/бесрет названы той же строкой раздельными: пакет не изобретает дефитер или исключение, а оставляет оба результата NEITHER / REQUIRES_JUDGMENT до adjudicated решения §73; отдельные строгие мосты поддерживают каждый из двух возможных ответов Комиссии. Все 22 примера — факты дела; phon/lexicon и строковый разбор не добавлены. Добавлены CLIR, раннер 10/10, храповики сценариев/разметки/глубины и аудит; KZ-differential 28/28 байтово, UNEXPLAINED 0, doctor.py без пробелов.

  • kz.grammar.jurnaq_zhalganda_bolek — №15, следующий заведённый срез волны 3 казахской грамматики (31.08.2026). Source-first закреплён §46 «Орфография ережелері» Сыздық (2 578 байтов; SHA-256 публикации 79042dc…f3753): две defeasible-нормы сохраняют раздельность после глагольного и именного суффикса, а конкретный defeater гасит ровно раздельный вывод на трёх терминологических примерах; отдельная strict-норма даёт их слитность. Ещё три strict-нормы удерживают два традиционно слитных слова и два производных от раздельного и дефисного собственного имени. Все 19 дословных примеров проверяются фактами дела; строки не разбираются, а неназванные «бес-алты сөз» не превращены в lexicon, enum или map. Добавлены CLIR, раннер 8/8, храповики сценариев/разметки/глубины и аудит; KZ-differential 25/25 байтово, UNEXPLAINED 0, doctor.py без пробелов.

  • kz.grammar.ush_zat_esim_bolek — №14, следующий заведённый срез волны 3 казахской грамматики (31.08.2026). Source-first закреплён §45 «Орфография ережелері» Сыздық (349 байтов; SHA-256 публикации 79042dc…f3753): одна strict-норма пишет отдельно три идущих подряд существительных, когда первые два различают вид предмета, выраженного последним словом. Все 4 дословных примера проверяются фактами дела; строки не разбираются, а примеры не превращены в lexicon, enum или map. Добавлены CLIR, раннер 5/5, храповики сценариев/разметки/глубины и аудит; KZ-differential 5/5 байтово, UNEXPLAINED 0, doctor.py без пробелов.

  • kz.grammar.dene_mushe_bolek — №13, следующий заведённый срез волны 3 казахской грамматики (31.08.2026). Source-first закреплён §44 «Орфография ережелері» Сыздық (1 130 байтов; SHA-256 публикации 79042dc…f3753): одна strict-норма пишет отдельно оба компонента названия органа из двух существительных. Все 30 дословных примеров проверяются фактами дела; «көбінесе … т.б.» в перечне вторых компонентов не превращено в ложные enum/map и не даёт правил для непоказанных пар. Добавлены CLIR, раннер 10/10, храповики сценариев/разметки/глубины и аудит; KZ-differential 31/31 байтово, UNEXPLAINED 0, doctor.py без пробелов.

  • kz.grammar.kurdeli_soz_bolek — №12, следующий заведённый срез волны 3 казахской грамматики (31.08.2026). Source-first закреплён §43 «Орфография ережелері» Сыздық (4 765 байтов; SHA-256 публикации 79042dc…f3753): общее defeasible-правило даёт раздельность на 30 буквальных сложных словах, отдельная strict-норма — слитность прямо описанных сросшихся шашбау/белбеу. қарақағаз только исключён из общей нормы: конкретный defeater гасит раздельный вывод и не угадывает взамен слитный. Добавлены CLIR, раннер 8/8, храповики сценариев/разметки/глубины и аудит; KZ-differential 38/38 байтово, UNEXPLAINED 0, doctor.py без пробелов. Заведением измерена неверная strict-сила общего правила: она не давала исключению сработать; исправленная defeasible-норма даёт NEITHER в обоих движках.

  • kz.grammar.jurnaq_symaq_dagy — №11, следующий заведённый срез волны 3 казахской грамматики (31.08.2026). Source-first закреплён §42 «Орфография ережелері» Сыздық (1 090 байтов; SHA-256 публикации 79042dc…f3753); три самостоятельные клетки пишут -сымақ и показанный глагольный -тағы слитно, а частицу дағы отдельно. Шесть дословных примеров стоят фактами дела; названные §42, но не показанные примером суффикс -дағы и частица тағы намеренно не угаданы и остаются NEITHER-границами. Добавлены CLIR, раннер 10/10, храповики сценариев/разметки/глубины и аудит; KZ-differential 12/12 байтово, UNEXPLAINED 0, doctor.py без пробелов. Прямое одно-посылочное правило -сымақ проверено аудитом как законченное следствие, не стаб.

  • kz.grammar.jurnaq_sha_la — №10, первый заведённый срез волны 3 казахской грамматики (31.08.2026). Source-first закреплён §39 «Орфография ережелері» Сыздық (392 байта; SHA-256 публикации 79042dc…f3753); две самостоятельные клетки -ша+-ла → -шы-ла и -ше+-ле → -ші-ле не угадывают класс основы, cross-пары или дополнительные суффиксы. Добавлены CLIR, раннер 7/7, храповики сценариев/разметки/глубины и аудит; KZ-differential 9/9 байтово, UNEXPLAINED 0, doctor.py без пробелов.

  • kz.grammar.defis — №9, следующий заведённый срез волны 2 казахской грамматики (31.08.2026). Source-first закреплены §§34–38 «Орфография ережелері» Сыздық: пять strict-правил дают одно узкое следствие — аффикс пишется через дефис после буквенной аббревиатуры, цифрой написанного числа, процентного/градусного знака, сокращённого условного обозначения и буквы либо слова как объекта. Форма аффикса не угадывается по строке и остаётся фактом дела. В закреплённом §37 прямое правило о дефисе соседствует с буквальной строкой «20 кмден» без видимого дефиса; строка сохранена в источнике и отдельном сценарии как измеренная аномалия, не превращённая в выдуманное исключение. Приёмка: 9/9 сценариев, 19 evaluate-вызовов KZ-differential байтово, разметка 8/0 и 5/0, §33.1 EXECUTABLE 5 / UNEXPLAINED 0, doctor.py — «пробелов нет», все 5 правил достижимы, orphan/stub/мёртвых символов пакета 0. CLIR, manifest и точечный ratchet зарегистрированы. §9 «Сөз сазы» об оглушении финалей заимствований не подменён и оставлен отдельным source-кандидатом; следующий реестровый №10 — первый раздел словообразовательных аффиксов.

  • kz.grammar.k_g_alternation — №8, следующий заведённый срез волны 2 казахской грамматики (31.08.2026). Реестровое имя сохранено, но source-first §8 «Сөз сазы» формализован ровно по тексту: в одном ырғақтық блоке начальный б второго компонента после с/т/қ/к/п/ш произносится приближённо как п. Перечень шести букв не переобъявляет phon: S/T/SH не принадлежат честному закрытому enum §31, а §8 не даёт разного результата внутри перечня, поэтому он подаётся одним эмпирическим фактом дела и не обобщается на всякий глухой. Все пять примеров §8, включая дословное «айтын берді», стоят отдельными сценариями без исправления исходника парсером строк. Приёмка: 8/8 сценариев, 8 evaluate-вызовов KZ-differential байтово, разметка 5/0 и 1/0, §33.1 EXECUTABLE 1 / UNEXPLAINED 0, doctor.py — «пробелов нет», единственное правило достижимо; CLIR, manifest и точечный ratchet зарегистрированы. Граница §9 об оглушении заимствований не смешана с пакетом; следующий реестровый №9 — defis.

  • kz.grammar.assimilation_regressive — № 7, следующий заведённый срез волны 2 казахской грамматики (31.08.2026). Источник-первым байтово закреплены §6–7 «Сөз сазы» из той же публикации (SHA-256 9a5c6abb…da4248f3; scope ровно 2 из 36 единиц). Два строгих правила выражают закрытые клетки одного ырғақтық блока: н → ң перед қ/к/ғ/г и н → м перед б/п. Условия не переобъявляют ось phon: отсутствие отдельного члена ғ в закрытом enum заменять новой ложной классификацией нельзя, поэтому состав §6 подаётся одним эмпирическим фактом дела. Сценарии включают написанное зиянкес, Боранғали → Бораңғали, Құрманбек → Құрмамбек, Жанпейіс → Жампейіс и буквальную границу қызын / күң; лексикон намеренно не подключён, поскольку этих слов в v0 нет. Приёмка: 8/8 сценариев, 10 evaluate-вызовов KZ-differential байтово, разметка 7/0 и 2/0, §33.1 EXECUTABLE 2 / UNEXPLAINED 0, doctor.py — «пробелов нет», orphan/stub/мёртвых символов пакета 0; CLIR, manifest и точечный ratchet зарегистрированы. Следующий № 8 — k-g-alternation (§8 b→p и оставшиеся чередования).

  • kz.grammar.assimilation_progressive — № 6, первый заведённый срез волны 2 казахской грамматики (31.08.2026). Источник-первым: байтово закреплены §6 «Ілгерінді ықпал» «Сөз сазы» и мандат комиссии из приказа № 468. Дословные клетки Аман+келді → Амаңгелді и написанное зиянкес (зиян+кес) противоречат общему выбору формы следующего к: первая объяснена переходом в г, вторая оставляет к. Норма не выдумывает общий фонетический закон: два строгих правила требуют adjudicated-решения Республиканской орфографической комиссии §47.3 (G либо K), без него ответ REQUIRES_JUDGMENT. Переход н → ң, чередования и дефис оставлены № 7–9 с причинами в шапке. Приёмка: 5/5 сценариев, 6 вызовов KZ-differential байтово, разметка 7/0 и 2/0, §33.1 EXECUTABLE 1 / UNEXPLAINED 0, doctor.py — «пробелов нет»; CLIR, manifest и точечный ratchet зарегистрированы.

  • Лицензия проекта решена, ядро упаковано в npm (DECISION-0076, 31.08.2026). Плейсхолдер WP-01 закрыт решением владельца: Apache-2.0 на код, CC-BY-4.0 на spec/ — корневой LICENSE, spec/LICENSE, NOTICE, license = "Apache-2.0" в Cargo workspace и pyproject.toml оракула; publish = false крейтов сохранён (crates.io не в объёме), LICENSE-PLACEHOLDER.md удалён. Первая внешняя публикация — пакет @arxo/law-engine (apps/npm/law-engine/): wasm-сборка ядра, палитра операций §225, типы из нормативных схем. «Закрытое ядро» уточнено владельцем как «только без исходников»: в tarball ни одного .rs/.py (25 файлов, 1,2 МБ), при этом сам пакет под Apache-2.0 — закрытость есть свойство СОСТАВА, а не прав использования. dist/ порождается tools/build.mjs и не коммитится: wasm собирается из engines/lawc/ (пин тулчейна действует по cwd), типы схем — переименование чистых protocol/src/generated/*.ts в .d.ts с проверкой, что рантайм-кода в них нет. Состав держат ворота check_npm_package (шаг 26/47, канарейка на подложном экспорте): список экспортов загрузчика против #[no_mangle] крейта law-wasm, союз LawOp типов против арм match op в ops.rs, LICENSE/NOTICE пакета байтово против корневых — три копии, каждая сверяется с первоисточником. Публикация — только джобой publish-npm.yml (ворота → сборка пин-тулчейном → смок → npm publish --provenance), принцип DECISION-0064: паблиш есть доставка коммита master через ворота, publish с рабочей машины запрещён. Смок собранного пакета нашёл первое расхождение сразу: конверт features НЕ несёт поля ok (ответ и есть реестр §266.3), хотя рукописный протокол рабочего стола объявляет ok обязательным — в типах пакета поле опционально.

  • Ось deadline_policy §168.2 — политика сроков §86 записью инлайн-контекста (DECISION-0077, 31.08.2026). Пятая ось закрытого словаря, единственная блочная: deadline_policy { start_count same_day; include_end true; roll no_roll; month_end last_day_of_month; }. Понижается в поле deadlinePolicy транспортного контекста — то же, которое несёт профиль §89.1, — и сливается по §89.1 с победой уровня дела. Семантики не добавлено ни строки: замер показал, что JSON-дело с инлайновой политикой исполнялось идентично делу с профилем ЕЩЁ ДО правки, менялась только запись; вся работа — парсер (блок живёт в грамматике контекста, а не в языке выражений) и понижение. Закрывает класс, который был написан, исполняем и не подтверждён ни одним юрист-читаемым тестом: 48 пакетов корпуса содержат add_business_days/add_calendar_period, 31 раннер подавал политику профилем, и дела таких пакетов эмиттер пропускал целиком. Запись проверяется СТАТИЧЕСКИ по шести ветвям (значение вне перечня, значение не того вида — include_end "true", неполная политика, чужое поле, поле дважды, блок под скалярной осью), потому что на исполнении часть из них неотличима от ОТСУТСТВИЯ политики: движки отвечают MISSING_POLICY — «политики нет», хотя она есть, — и автор идёт добавлять уже написанное. Рукописный словарь неизбежен (нормативной схемы дела в 0.1 нет и быть не может, E-0046) и потому сторожится: check_case_shape сверяет перечни понижения с _START_COUNT/_ROLL/_MONTH_END оракула, канарейка на мутации проверена. Вектор LAY-L0-DEADLINE-INLINE-POLICY — та же норма и срок, что у ERR-E0029 (равносильность транспортов), плюс круг «поверхность → JSON» байтово через case.lawcase, которого у близнеца с профилем нет и быть не может. Живой акт: npt-1968 переведён на ось — эмиссия даёт 13 тестов из 13 сценариев против прежних 0, два сторожа молчания (ст. X — три месяца, ст. III — восемнадцать месяцев) стали проверками самой даты, добавлен точный сторож отсутствующей политики expect issue(MISSING_POLICY) §267.4. Расхождение с типизацией §13 (DeadlinePolicyRef) названо в решении и оставлено 0.2: объявления именованной политики язык не имеет, ссылаться не на что. Замеры: law-hir 183 теста, вектора 375/375, check_test_run 121/121 с совпавшими вердиктами, KZ-регрессия и differential по семейству npt 13/13 байтово.

  • kz.tarify — акт-таран №3 unit-package, и его вердикт: пункт 3 очереди DECISION-0068 §5 ЗАКРЫТЬ (31.08.2026). Правила дифференциации энергоснабжающими организациями тарифов на электрическую энергию по зонам суток и (или) в зависимости от объёмов её потребления физическими лицами (Казахстан, редакция приказа № 394 от 02.09.2016; действующая редакция НЕ материализуема — все двенадцать её формул растровые, и портал отдаёт одну из двенадцати, остальные 404). Пятьдесят пунктов: EXECUTABLE 46, SOURCE_ONLY 4 объявленными границами, UNEXPLAINED 0; байтовое покрытие 99,9 % (61 фрагмент); 55 сценариев, 18 рукописных .lawtest, differential 71 вызов байтово; три полосные таблицы A3 (часы зон суток двух систем учёта и коэффициенты уровней 1,2/1,5). Замер тарана — 45 проб обеими реализациями, расхождений ноль (corpus/tools/checks/probe_tarify_units.py); разбор и вердикт — corpus/laws/kz/tarify/audit.ru.md §3. Направленный поиск свидетеля умножения размерных пар СВИДЕТЕЛЯ НЕ НАШЁЛ: произведений двух размерных величин в акте-максимуме ровно ОДНО на 102 правила (среднесуточный расход × число дней, пункт 3 подпункты 19 и 4), и оно исполняется четырьмя операциями существующих форм E-0068 + E-0074. Главный результат, которого DECISION-0068 предсказать не мог: самый сильный кандидат предметом пункта 3 не является — формула платы П = Wо*Tо умножает киловатт-часы на тенге за киловатт-час и даёт ДЕНЬГИ, то есть требует моста Quantity §49 → Money §50, а не операции внутри алгебры величин, и рамка 1 называет прецедент §50 нормативным. Побочный замер, обязательством не оформленный: граница Money/Quantity молчалива в обе стороны («плата минус тариф» вычисляется без диагностики; объявленный Money-слот принимает величину чужого тега со статусом TRUE_ONLY). Черновик записи в DECISION-0068 §5 приложен к audit текстом и в решение НЕ внесён — за владельцем.

  • Наблюдение position(Шаблон, Статус) §267.4 — адресный статус конкретной нормы в .lawtest (DECISION-0075, 31.08.2026). Третий предикат словаря наблюдений DECISION-0036 над evaluation-документом: истинен, когда positions[] несёт позицию названного норм-шаблона в названном статусе §134; отрицается not. Закрывает замер 30.08: агрегатный normative_status §174 при второй норме на деле отвечает UNDETERMINED, и конкретную обязанность поверхность §267 проверить не могла — умел только Python-раннер фильтром по template, а соблазн «подогнать дело под одну позицию» превращал дело об акте в дело об одном правиле. Оба имени проверяются по роду: статус — статически по перечню нормативной схемы (LDC-E1319), шаблон — раннером с причиной «такого норм-шаблона в программе нет» (симметрия applied, программа при lowering не предъявлена §169). Сопоставление — независимые половины обеих реализаций, формулировки причин байтово совпадают; ворота check_expectations выросли с 5 до 9 ветвей (зелёная ветвь position — две нормы одного носителя в статусах VIOLATED/ACTIVE, различимые только адресно; фикстура act.law получила пару норм maintenance/achievement). Prose-долг DECISION-0036 закрыт тем же изменением: новый §267.4 описывает все три наблюдения и объявляет словарь закрытым с аддитивным расширением. Замеры: law-hir 181 тест, check_test_run 125/125 с совпавшими вердиктами, вектора 374/374.

  • Новый пакет la.newton.principia — «Principia» Ньютона (первое издание, 1687): Definitiones + Axiomata как исполняемая система (31.08.2026). ПЕРВЫЙ АКТ ИСТОРИИ НАУКИ. Закреплён аксиоматический каркас первоиздания целиком — 19 единиц (Def. I–VIII, схолия, Lex. I–III, Corol. I–VI, схолия к законам) из постраничной транскрипции факсимиле по приколоченным ревизиям каждой страницы; сквозная нумерация единиц приложена закрепляющим скриптом (прецедент Велльхаузена), подлинные заголовки — в байтах, включая «Corol. IIII.» первоиздания. Закон I записан презумпцией с барьером («nisi quatenus … cogitur» — буквально unless), поражаемой цепью строгих правил определений (тяжесть → центростремительная → приложенная); закон II — арифметика «частей» по букве текста (additur / subducitur / «fiet motus … in plagam contrariam» при f > p); закон III — правило реакции с громким сторожем неравных взаимных действий. Фикция относительного покоя на корабле НЕСУЩАЯ (deem истинной скорости читается мостом к Def. II), рекурсия участия — через monotone(...); знаковое сохранение Corol. III без энумов и без != над сущностями. Величины — в «частях» самого текста (СИ в первоиздании нет), эталонная запись E-0068 + with_unit E-0074, ноль де-юнита; тегов силы нет намеренно — Def. VII–VIII меряют силу порождаемыми частями скорости/движения. Дела — числа самого текста: 2×2=4 (Def. I), 10010−10+1=10001 (схолия), 6+10=9+7 и 12−6=−2+8 (Corol. III), 16→15 (стекло 15/16; шерсть 5/9 не 10-гладка и названа невзятой), рычаг «pondera reciproce ut radii», Галилей крест-накрест без деления. Контрфактуал «sublata aeris resistentia» на снаряде из примера самого закона. Мера §33.1: EXECUTABLE 16/19, UNEXPLAINED 0 (Corol. I/V/VI — объявленные границы с despite: геометрия направлений; сравнение двух исполнений); закрепление 99,2 %; 37 сценариев с порогами парами и падающим сторожем границы единиц (TYPE_ERROR), differential 63 вызова байтово, .lawtest 5/5, разметка 83/1 (остаток — измеренный пробел шаблона §218 у function_decl, причина в $comment храповика), doctor чист. Границы: книги I–III (непрерывная динамика) и векторная композиция — вне поверхности по построению. Полный отчёт — corpus/laws/la/principia-1687/audit.ru.md.

  • Новый пакет kz.corpus.ogpovts — ОГПО ВТС, Закон РК от 01.07.2003 № 446-II (31.08.2026). ПЕРВЫЙ АКТ КОРПУСА, ГДЕ СУММА ПОЛУЧАЕТСЯ ПРОИЗВЕДЕНИЕМ КОЭФФИЦИЕНТОВ: базовая страховая премия в 1,9 МРП (ст. 19 п. 2) умножается на пять множителей — территорию регистрации, тип транспортного средства, возраст со стажем, срок эксплуатации и бонус-малус, — и годовая премия выводится end-to-end на деле с посчитанным руками ответом (OGPO-01: 4325 × 1,9 × 2,96 × 2,09 = 50 836,742 ₸; МРП читается из kz.corpus.budget, а не вшит константой). ДВЕ ОСИ ИЗ ПЯТИ — A3-ТАБЛИЦЫ, И РОВНО ТЕ, ЧЬИ ВХОДЫ ЧИСЛОВЫЕ: возраст/стаж (п. 7) и срок эксплуатации (п. 9); территория, тип ТС и вид страхователя остались правилами, потому что схема A3 знает в ячейке только литерал, а доменная константа в текстовой колонке перенесла бы тождество значения со символа на строку. ДЫРА САМОГО ЗАКОНА ВЫРАЖЕНА КАК ОТСУТСТВИЕ ОТВЕТА: пункт 7 знает «стаж менее 2 лет» и «стаж более 2 лет», стажа ровно в два года нет ни в одной строке — таблица объявлена total: false, премия на таком деле не выводится вовсе, и сценарий OGPO-08 покраснеет, если дыру закроют догадкой. ПРОЦЕДУРЫ §160 В ПАКЕТЕ НЕТ, И ЭТО НАХОДКА, А НЕ ПРОПУСК: приложения с классами бонус-малус у закона не существует — статья 19 пункт 10 целиком поручает расчёт подзаконному акту уполномоченного органа, поэтому коэффициент (как и поправочный коэффициент пункта 3-1) входит ФАКТОМ ДЕЛА, а границу стерегут OGPO-19 и OGPO-20: дело без делегированного множителя не даёт премии НИКАКОЙ. Льгота статьи 20 записана двумя предикатами подряд (annual_premium_calculated → premium_payable) с дефитером §95.3, потому что часть первая считает пятьдесят процентов «от премии, рассчитанной в соответствии со статьей 19» — величина статьи 19 обязана оставаться выводимой и на льготном деле; priority §116 здесь неприменим по построению (он не разделяет два РАЗНЫХ ЗНАЧЕНИЯ одного отношения), а часть вторая выражена строгим встречным барьером с замыканием §70. Шесть льготных категорий — шесть правил (§206). Срез первой очереди: EXECUTABLE 2 из 46 статей, фрагменты §194 на все 46, покрытие текста 98,9 %, 9 исключённых статей объявлены границей с номерами отменяющих законов; 21 сценарий регрессии, 3 .lawtest, differential байтовый на 34 evaluate-вызовах. Границы, очередь и вердикты по 37 неиспользованным конструкциям — corpus/laws/kz/ogpo-vts/README.ru.md.

  • Новый пакет us.cfr.vin — контрольный знак VIN, 49 CFR Part 565 (31.08.2026). ЧЕТВЁРТЫЙ ЧЛЕН ЛИНИИ ИДЕНТИФИКАТОРОВ И ЕДИНСТВЕННЫЙ, ЧЬЯ АРИФМЕТИКА ПРЕДПИСАНА НОРМАТИВНЫМ АКТОМ, А НЕ ПЛАТНЫМ СТАНДАРТОМ: у iso.check_characters подлинник ISO/IEC 7064 заперт и закреплён через свидетелей (ORCID, Swift), здесь же таблицы значений знаков (III), весов позиций (IV) и остатков (V) напечатаны в тексте самих правил, а § 565.15(c)(5) приводит ЭТАЛОННЫЙ РАСЧЁТ с числами (Табл. VI: сумма 411, остаток 4, знак «4»). Норма и её проверочный вектор закреплены ОДНИМИ байтами, и сцены VIN-01…VIN-03 сверяют реализацию с самим актом, а не с сочинённым вектором. Три замыкания §70: набор знаков § 565.13(g) закрыт перечнем, а отсутствие I, O и Q ВЫВОДИТСЯ (утверждать их списком значило бы добавить к акту знание об алфавите, которого он не выражает); неоднозначность кода года выводится из самой Табл. VII; область примечания исчерпана тремя классами машин. НЕОПРЕДЕЛЁННОСТЬ, ОСТАВЛЕННАЯ АКТОМ, ВЫРАЖЕНА КАК РЕЗУЛЬТАТ: код года «5» — это и 2005, и 2035, примечание снимает неоднозначность позицией 7 лишь для легковых, лёгких многоцелевых и лёгких грузовиков, а для автобуса, прицепа и тяжёлого грузовика различителя НЕТ — пакет выводит model_year_undetermined и называет причину вместо молчаливого выбора (VIN-24…VIN-26, включая лёгкий автобус: оговорка о массе ему не помогает). Побочное свойство: у буквы I нет строки в Табл. III, поэтому контрольный знак номера с ней не вычисляется вовсе, но нарушение § 565.13(g) при этом не молчит. Таблицы положены assert-фактами, НЕ A3, и решение измерено: mode: rules требует факта <id таблицы>/input, не адресуемого с поверхности .lawtest, а значение нужно КАЖДОЙ из семнадцати позиций — таблицей всякий тест пакета стал бы невыразим. Меры §33.1: охват 16 из 16 секций, EXECUTABLE 2 (§ 565.13, § 565.15), четырнадцать границ объявлены с причиной и с despite там, где в тексте есть «shall» (UNEXPLAINED 0, text coverage 14,7 %). Заголовок «полная формализация» НЕ заявлен: подчасть C (арифметика тождественна, расхождения ровно два — Табл. XIII и § 565.25(b)) и отчётность перед NHTSA названы ДОЛГОМ, а физические требования и отсылки к незакреплённым актам — невычислимой границей. 25 правил, 13 .lawtest, 27 сцен регрессии, differential 26/26 байтово.

  • Новый пакет w3c.css_cascade — каскад и умолчания CSS, W3C CSS Cascading and Inheritance Level 5 (31.08.2026). ПЕРВЫЙ АКТ КОРПУСА, ЧЕЙ ПРЕДМЕТ ЕСТЬ РАЗРЕШЕНИЕ КОЛЛИЗИЙ КАК ТАКОВОЕ: всюду ещё приоритет норм — механизм, применяемый к предмету, здесь он и есть предмет. Шесть критериев раздела 6.1 (происхождение и важность, контекст инкапсуляции, element-attached, слои, специфичность, порядок появления) записаны ЦЕПЬЮ «решает / равно» — по два правила на критерий, очередь несёт собственное tied_after_…, — а не механизмом priority §116: тот упорядочивает ПРАВИЛА внутри страты, здесь же упорядочиваются ДАННЫЕ дела, и порядок обязан быть выводом, доступным why-not и карте спора. Восемь ступеней перечня 6.1 закодированы рангом «позиция × 10» — множитель нужен ровно затем, чтобы ступень подсказок разметки раздела 6.5 («between the regular user origin and the author origin») встала на 65, не перенумеровывая список, которого в документе нет в числах. «Обычное» объявление выводится ЗАМЫКАНИЕМ §70 («All other declarations are normal» есть утверждение о закрытости перечня): заявленное фактом, оно у забывчивого дела не получило бы НИ ОДНОЙ ступени и молча выпало бы из каскада при зелёном check и зелёном differential. Ни одного != над сущностями — каждый критерий решает СТРОГИМ сравнением, поэтому объявление не побеждает само себя, и молчаливый класс «посылки TRUE_ONLY, голова NEITHER» к пакету не подступает по построению (сторож CSS-CASCADE-35). Глубина §33.1: EXECUTABLE 22 из 56 разделов, остальные 34 — объявленные границы с причиной ПО ТЕКСТУ статьи, 21 из них с полем despite; главная граница названа документом дословно — раздел 4.4 требует «values with relative units … must be made absolute by multiplying», то есть умножения величин длины, которого замкнутая поверхность вычислимого не содержит. Куда попадает ВАЖНАЯ подсказка разметки, документ не говорит нигде: правила нет, ответ NEITHER, молчание сторожится ПАДАЮЩИМ ожиданием CSS-CASCADE-34. 36 сценариев (ступени 6.1 проверяются СОСЕДНИМИ парами — порядок, проверенный на далёких, не проверен), differential 70 вызовов байтово, 3 теста §267 через Rust-движок, метки §218 103/0 и 69/0.

  • Конвенция единицы spec_section и правопорядок W3C (31.08.2026). Раздел спецификации («6.4.3. Layer Ordering») заведён отдельным именем, а не алиасом rfc_subsection, и развёл их ТЕРМИНАТОР — то самое, чем конвенции различаются: у RFC после последнего раздела нет ничего, у спецификации W3C идут ненумерованные приложения, и раздел 9.8 забирал их себе вместе с 16 % байтов документа и чужим «MUST» из формулы RFC 2119 в разделе Conformance — объявленная граница отвергалась ссылкой на деонтику, которой в самом разделе нет ни одной. W3C вписан в перечень §27.1 отдельно от IETF по признаку, которым та запись себя от прочих и отличает: у IETF нет ни членства, ни учредительного акта, а у Консорциума есть уставный Процесс — и именно он объявляет неизменяемость датированной публикации, на которой стоит закрепление источника.

  • Трихотомия Евклида: последний долг grc.eukleides.pythagoras закрыт — два новых закреплённых документа, доктринальный шаг с машинным основанием и режим smt_witness --totality (31.08.2026). Закреплены II.12 и II.13 («Στοιχεία/β», oldid=92614) и определение I.21 (Ὅρος κα΄) — пакет несёт теперь ТРИ документа и ДВА источника (книги I и II — разные единицы издания §26; определения — третья edition при источнике книги I, документ свой, сочинение то же). Байты книги I не тронуты: sha256:6a3addea… тот же. Сверка с Гейбергом пофразная по всем трём — девять опорных фраз, длины 0,97—1,03; найден второй квирк сверочного издания: в perseus-grc2 пропущено предложение n=7 книги II (13 див на 14), того же рода, что известный пропуск n=30 книги I. Спорный выбор по определению I.21 разрешён третьим путём и записан в журнал: ни расширение среза grc.txt, ни ссылка локатором, а СВОЙ документ со своей единицей — довод измеренный, articles.json несёт одну единицу на документ, а «Ὅρος» не есть «Πρότασις», и влитое определение пришлось бы либо назвать предложением (ложь о структуре сочинения), либо оставить вне всякой единицы, уронив закрепление с 96,2 %. Оснастка: конвенция единицы horos в ОБА реестра §33.1 плюс имя единицы в таблицы boundaries.py, articles.json в форме {"editions": [...]} (DECISION-0026), многодокументные fetch и sync. Формализация — четыре правила и названный вслух доктринальный шаг. II.12/II.13 суть РАВЕНСТВА с членом-прямоугольником («μεῖζόν ἐστι … τῷ δὶς ὑπὸ τῶν ΓΑ, ΑΔ περιεχομένῳ ὀρθογωνίῳ»), исполнимо из них НАПРАВЛЕНИЕ неравенства — проекция делом не дана и в целых невыразима, остаток объявлен остатком единицы рядом с доказательствами. Обратных к II.12/II.13 у Евклида НЕТ (в отличие от пары I.47→I.48), и правила распознавания родов стоят на ПОЛНОТЕ трихотомии; шаг записан в шапке модуля 04 и — гвоздь работы — получил машинное основание. Асимметрия голов (три правила по позиции у тупоугольности против ОДНОГО с тремя гардами у остроугольности) — буква определения I.21, ради которой оно и закреплено; каждое правило несёт ДВА @source (гард из предложения, голова из определения), без чего определение числилось бы «адресуемым, но ничего не выводящим» при четырёх правилах, чьи головы им и определены. Инварианты: четыре попарных UNSAT и один о полноте. --invariant даёт UNSAT по всем комбинациям продюсеров §206 у всех четырёх пар (3, 3, 3 и 9 — последняя после починки капа). Попутно закрыт молчаливый кап: у пары «прямоугольный ⊥ тупоугольный» комбинаций 3×3=9, а перебор обрывался на MAX_BRANCH_COMBOS=6 и печатал «UNSAT на 6 из 6», читаясь как исчерпывающий; заведён ATTACK_BRANCH_COMBOS=64 (у свидетеля комбинации взаимозаменимы, у атаки конъюнктивны), усечение теперь ОТМЕНЯЕТ вердикт и печатается словами. Заведён режим smt_witness.py --totality — третья цель того же кодировщика: требование-дизъюнкция («всякий треугольник одного из трёх родов»), отрицаются гарды ВСЕХ продюсеров каждого рода сразу, а гарды домена I.20 внутри тех же продюсеров остаются утверждёнными (иначе решатель уходит от противоречия, перестав быть треугольником); доля гардов остаётся СВОБОДНОЙ — отрицание конъюнкции есть дизъюнкция отрицаний. Ответ — UNSAT на 3 из 3 комбинаций отрицания: вне трёх родов треугольника не бывает, без перебора троек и без капа на стороны. Граница среза --invariant при этом не задевается, и это ПРОВЕРЕНО: отрицание сравнения снова сравнение (¬(x == y) есть x != y), негации выводимых предикатов в скрипте нет ни одной. Канарейки в обе стороны у каждого инварианта: снятый гард контрапозиции I.47 → SAT ровно на своей ветви, контрпример 4-3-5, движок подтвердил; снятый продюсер тупоугольности → SAT, контрпример pleurai(t, 2, 3, 2), движок подтвердил (антецедент TRUE_ONLY, ни один род не TRUE_ONLY); мета-канарейка обезвреженной кодировки (mul → +) — ОБЕ стороны отвечают UNSAT; мета-канарейка опущенного капа — вердикт отменяется. Все четыре заморожены воротами check_smt_invariant.py. Измерено: мера §33.1 — EXECUTABLE 6 из 6 по трём документам (3+2+1) при UNEXPLAINED 0; учёт единиц 3/3, 2/2, 1/1, неучтённых 0; lawc check чист; регрессия семейства 27/27 (было 17); KZ-differential 35 вызовов байтово идентичны; Lean-зонд 35 сертификатов приняты, 0 отвергнуто; .lawtest 18/18 (8 рукописных + 10 перенесённых из моделей z3); свидетели покрытия 13 из 13, контроль чист у 13 — z3 вышел на края существования сам (тупоугольные 2-6-7, 5-4-2, 4-7-4 — два последних треугольники с запасом в единицу — и остроугольный 3-3-1); разметка §218 словарь 10/0, нормы 13/0; doctor.py — «пробелов нет»; fetch и sync --check идемпотентны. A/B по байтам ДОсессионных сцен: results идентичны 20/20, issues идентичны 20/20, proof-граф вырос ровно на один узел у семи вызовов — на делах 2-3-4, 4-5-6, 3-4-6 и 1-1-1, где новые правила рода действительно применяются; движение шире трёх хэш-путей и названо этим, ни один ответ не сдвинулся. Обратные II.12/II.13 нигде не выдаются за предложения Евклида.

  • Новый пакет grc.euclid.angles — «Начала» Евклида, десять предложений об углах (31.08.2026). ПЕРВЫЙ АКТ КОРПУСА, ГДЕ ДВИЖОК ВЫВОДИТ ЧИСЛА ЦЕПОЧКОЙ ПРАВИЛ, а не проверяет статусы: школьная задача есть дело, теоремы I.13/I.15/I.27—I.29/I.32 и III.20—III.22/III.31 — strict-правила с вычисляемым аргументом головы, ответ — вывод, а proof-граф и есть решение с именем предложения на каждом шаге (сцена цепи глубины четыре: I.13 → I.29 → I.32 → I.15, ни одного промежуточного числа в условии). Рекурсия по ЗНАЧЕНИЮ через supported(...) §65/§103 — голое чтение выводимого предиката отвергается стратификацией §110 (LDC-E4102). Мера угла Decimal, а не Integer: III.20 делит пополам, а Integer / Integer даёт Rational, не смешиваемый с целым ничем (§48/§58), — при Integer обратное направление III.20 невыразимо вовсе, а не «выразимо только для чётных». key(a) §45.1 на мере делает противоречивое условие громким KEY_CONFLICT §196, а переопределённое согласованное — не роняет вовсе. why-not §185 на недоопределённой задаче называет НЕДОСТАЮЩУЮ ПОСЫЛКУ — «почему не решается» как подсказка ученику. Два закреплённых документа по числу книг (номер предложения принадлежит книге: «Πρότασις 20.» книги I и книги III — разные предложения), греческие байты Викитеки по приколоченным ревизиям, сверка с Гейбергом (Perseus) по двадцати опорным фразам. Глубина 6/6 и 4/4 EXECUTABLE при UNEXPLAINED 0, стабовых мостов 0, покрытие правил ПРОГОНОМ 25/25 (синтез дела бессилен: фаззер не порождает скаляров, единственный числовой гард вне среза SMT), 23 сценария + 14 рукописных .lawtest-задач с разбором, differential 22 вызова байтово, Lean 22/0, разметка 23/0 и 25/0, doctor чист.

  • Расходящееся замыкание при противоречивом числовом условии — измерено и закрыто сценой (31.08.2026). Школьное «в треугольнике 40°, 60° и 90°» НЕ даёт KEY_CONFLICT: три правила суммы I.32 кормят друг друга, каждая новая пара мер даёт новую третью, множество значений растёт без границы (1978 фактов и 350 тыс. приложений за две минуты), а check_keys §45.1 исполняется ПОСЛЕ замыкания и не наступает никогда — прогон не краснеет, а виснет. Класс шире пакета: он возникает всюду, где числовые правила взаимно выводимы и условие противоречиво. Ловится только семантическим лимитом §238; grc.euclid.angles держит пару сцен — противоречие на смежных углах (замыкание сходится, KEY_CONFLICT громкий) и то самое «40/60/90» с maxGroundedApplications (фатальный RESOURCE_LIMIT без частичного результата). Разбор — corpus/laws/grc/euclid-angles/audit.ru.md, раздел «Расходящееся замыкание».

  • Конвенция единицы protasis доведена до всех ЧЕТЫРЁХ реестров (31.08.2026). Предложение «Начал» стояло в DECLARED_CONVENTIONS ворот закрепления и act_split.py, но не в двух таблицах имён boundaries.py, и мера печатала «статей: 6» о книге Евклида — верное число при неверном слове. Вписаны «предложение» и «предложений»; проба после правки — boundaries.py <grc-i.txt> <clir> называет единицу своим словом.

  • Новый пакет us.cfr.maritime_distress — процедуры бедствия морского радиообмена, 47 CFR §§ 80.311–80.335 (31.08.2026). Первый акт о протоколе речевого радиообмена: замкнутый словарь сигналов (MAYDAY, PAN PAN, SECURITE, SEELONCE MAYDAY/FEENEE), деонтика услышавших станций, составы передач строгими классификациями, ретрансляция MAYDAY RELAY тремя основаниями §206, радиомолчание § 80.326(b) тремя носителями (maintenance-duty с VIOLATED от отрицательного факта §67, институциональная голова нарушения, автомат §160 с ветвью ложного оповещения и сторожем §164). Заведена конвенция единицы cfr_section в обе меры §33.1 — глубина 21/21 EXECUTABLE при UNEXPLAINED 0. Сценарии 105/105 со стражем покрытия правил (107/107 по двум видам proof-узлов), differential 104 вызова байтово, .lawtest 3/3, разметка 214/6 (E-0044) и 120/0, doctor чист.

  • Новый пакет iczn.code.priority — ICZN, статья 23 «Принцип приоритета» (31.08.2026). Первый пакет номенклатурного кодекса: прецеденция имён ПАРНАЯ (has_precedence), не тотальный valid_name — презумпция валидности с unless по поражаемому has_precedence измерена пробой мёртвой (unless уезжает стратой выше presume, §116), и сам Кодекс говорит парами («the younger name has precedence over the older», 23.9.2). Ядро: старшинство по дате (23.1), презумпция прецеденции старшего с четырьмя поражениями из текста (невалидность, реверс 23.9, решение Комиссии, отвергнутость по бывшей ст. 23b — 23.12), реверс 23.9 с порогами-константами 25 работ / 10 авторов, границей 1899 года и окном 50/10 лет календарным шагом §84.2, nomen protectum / nomen oblitum, обязанности передачи дела Комиссии (23.9.3, 23.11 — duty §134) и интерим ст. 82. Канал Комиссии — external judgment §47.3: открытая клетка несёт REQUIRES_JUDGMENT, отказ судьи закрывает канал (сторож KZ-ICZN-18), строгое решение пробивает поражённую презумпцию — ровно оговорка 23.12 «unless the Commission rules» (KZ-ICZN-20). Источник — официальное онлайн-издание code.iczn.org (CC BY), извлечение extract_iczn_text.py детерминировано, фрагменты 23.1–23.12 нарезает sync_iczn_priority_fragments.py (строка в run_all.sh). Сценарии: 27, каждый порог парой по обе стороны границы; KZ-differential 42 вызова байтово; .lawtest 3/3 (третий — сторож молчания политики §86 по образцу id.halal); разметка §218 44/0 и 31/0; doctor чист.

  • Порядок rule_item свободен, как и обещала грамматика (E-0073, 31.08.2026). Заведение kz.id-number-2007 вскрыло: grammar.ebnf держит тело правила неупорядоченным множеством, а парсер принимал биндеры for только ПРЕФИКСОМ — effective …; for …; падал с двумя ложными LDC-E0201, при том что presumption/fiction/constraint ту же перестановку принимали всегда. Квалификация — дефект lawc (три соседних парсера семьи уже исполняли грамматику как написано); правка аддитивна — цикл items rule_decl получил ветвь for, биндер законен в любом месте тела, включая позицию после читающего его when; канонический порядок разбирается прежним путём, ни один CLIR не сдвинулся. Пины: вектор ERR-E0073-RULE-ITEM-ORDER (hash-compare: канон против перестановки — равный semantic hash §209; IR порождает lawc, хэш считает lawref) и unit-тест law-hir (документы равны как значения). Прогон: векторы 377 (368 runnable зелёные), cargo workspace зелёный, clippy чист.

  • kz.id-number-2007 — исторический срез пост. № 406 с окном действия [13.08.2007, 01.09.2023): право, которое отвечает по legal_time (31.08.2026). Заведён corpus/laws/kz/id-number-2007 — третий пакет линии идентификаторов: УТРАТИВШИЙ СИЛУ акт, закреплённый последней консолидированной редакцией, где КАЖДОЕ правило несёт effective-окно. Левая граница — В ЗАКРЕПЛЁННЫХ БАЙТАХ («вводится в действие с 13 августа 2007 года», п. 2); правая — дата акта отмены (№ 758) с ЗАПИСАННОЙ погрешностью до ~двух недель (день опубликования № 758 в байтах отсутствует); внутренние даты редакций пунктов не моделируются осознанно — срез отвечает «что говорила последняя редакция и когда акт действовал». Обе стороны окна пинуются: до ввода в действие акт принят-но-молчит, после отмены — те же цифры дают NEITHER. Ключевая находка уточнила соседний пакет: даже № 406 даёт алгоритм словами «в составе ИИН» (п. 3), а контрольную цифру БИН называет «определяемой автоматически» (п. 5 ч. 5) — алгоритм для БИН не был установлен буквой НИ В ОДНОЙ редакции; формулировки kz.bin поправлены тем же днём (CLIR не сдвинулся — правка комментариев). Исторические отличия от 2023 выражены правилами и пинами: КФХ(С) в а6 — значение 3 (в 2023 — 4), исключений 0-3 и резерва 7-9 НЕТ (молчание пинуется), порог серии МФЦА 90001-99999 — парой сценариев по обе стороны нижней границы. Попутно измерено: rule_item в реализации порядко-чувствителен — effective ПОСЛЕ биндеров for разбирается, ДО них — LDC-E0201 (грамматика объявляет items неупорядоченными; кандидат в errata). Измерено: lawc check чист; 6/6 .lawtest; регрессия семейства id_number_2007 8/8; differential 8/8 байтово; разметка 27/0 + 23/0; doctor — «пробелов нет»; стаб-цепь 1/23 (4 %) — объявленный в шапке п. 4. Границы: «Правила обращения» и формы — вне среза (закреплены, не фрагментированы); их процедурные сроки — кандидат отдельного захода.

  • Инструменты корпуса впервые АТАКУЮТ математическую теорему: z3 переоткрыл пифагорову тройку 3-4-5, взаимоисключение I.47/I.48 доказано UNSAT, а слепое покрытие и SMT-ветвь измеримо отвечают на РАЗНЫЕ вопросы (31.08.2026, grc.eukleides.pythagoras). Закрыт долг §4 аудита пакета; разбор — раздел 6 corpus/laws/grc/euclid-pythagoras/audit.ru.md. Носитель инварианта выбран пробой, а не вкусом: property §270 мёртв обеими дорогами (expect not ouk_orthogonion(t) → LDC-E1316; обход count(collect … where <выводимое>) == 0 → барьер §111, вердикт «НЕ ПРОВЕРЕНО» при непустом домене), а constraint §93.1 выразим и — главное — ЧИТАЕМ: он узел программы, его называет отчёт фаззера, по его гардам работает атака. Третий кандидат отвергнут по месту: definition … necessary даёт единственную форму с голым литералом в антецеденте (ту, что охота §93.1 действительно берёт), но definition ОБЪЯВЛЯЕТ имя, а orthogonion уже объявлено (LDC-E1201), и заводить ради инструмента третий предикат значило бы вписать в право мёртвый символ. Байты после заведения инварианта разобраны, а не приняты: регрессия 17/17, differential 20/20 байтово, а A/B до/после показал расхождение РОВНО трёх путей — manifest.programHash, manifest.semanticHash и производный от них resultHash; со снятыми тремя хэшами 20 из 20 документов байтово идентичны (результаты, proof-графы, issues не тронуты), потребителей у сдвига нет — импортирующих пакет ноль. Замер фаззера — точка отсчёта, а не провал: 0 из 9 правил и у слепого, и у --targeted 30/60, и при --max-assertions 200; причина названа манифестом, а не догадкой — пула Integer НЕТ ВООБЩЕ (scalarPools = {Text: 1}, constPools пуст), потому что чисел в документе нет ни одного: они приходят делом. Ни одна из трёх известных ловушек фаззера (MAX_GROUNDINGS, WORLD_CAP, interpretation) здесь не при чём — случай четвёртый и чистый. SMT-ветвь пути 3 закрыла 9 из 9 за 0,3 с, и расширять smt_witness под нелинейный гард НЕ ПОНАДОБИЛОСЬ (находка сессии: mul стоит в BINARY_OPS с заведения инструмента, (set-logic …) скрипт не объявляет, z3 выбирает NIA сам; unknown не возвращён ни разу, кап на стороны не потребовался). Модели поимённо: OrthogonionProsTritei — 4, 3, 5; OrthogonionProsProtei — 5, 4, 3; OrthogonionProsDeuterai — 3, 5, 4 (одна и та же египетская тройка во всех трёх перестановках — решатель вышел на неё, не зная ни о Пифагоре, ни о том, что конвенции «гипотенуза последняя» у пакета нет); OukOrthogonionKataPythagoran — 7, 1, 7; TrigononEstin — 1, 1, 1; три правила OudeTrigonon — 0, 0, 0. Покрытие засчитано только по rule_application §180 в proof-графе исполненного дела, контроль чист у 9 из 9, а девять выгруженных сценариев О-1 реплеены НЕЗАВИСИМЫМ путём (lawc eval вместо liblaw_ffi) — 9/9 TRUE_ONLY с тем же применением. Заведён режим smt_witness.py --invariant — вторая цель того же кодировщика: конъюнкция гардов антецедента и НАРУШЕНИЯ требования по всем комбинациям продюсеров §206 (тождество сторон обеспечено key(t) §196, а не допущением). Инвариант «не бывает треугольника и прямоугольного, и не прямоугольного» — UNSAT на 3 из 3 ветвей, 10 гардов каждая: взаимоисключение доказано без перебора троек и без ограничения на величину сторон. Канарейка обязательна и не декоративна: из контрапозиции I.47 снят ОДИН гард (a*a + b*b != c*c) — красной стала РОВНО та ветвь, чей продюсер ему противоречит (OrthogonionProsTritei), две другие остались UNSAT, контрпример — снова 4, 3, 5, и он подтверждён ДВИЖКОМ (TRUE_ONLY на обоих предикатах сразу), exit 0/1. Мета-канарейка измерена тут же: при обезвреженной кодировке произведения (mul → +) обе стороны отвечают UNSAT — разучившийся кодировщик выглядит доказателем, и без второй стороны это UNSAT не значит ничего. Обе стороны плюс граница среза (требование-позитив отвергается поимённо: его нарушение есть ОТСУТСТВИЕ вывода, а не гард) заморожены воротами verify/ci/gates/layers/check_smt_invariant.py, шаг 38/47 run_all.sh — 91 → 92 проверки в конвейере. Атака нашла и в самом пакете: свидетелем сторожа заявленного угла z3 выдал стороны 5, −1, −5 — отрицательные длины, треугольника не составляющие; вердикт «это область нормы, а не дефект» (сторож говорит о противоречии ВХОДА, и гейт существования заставил бы его молчать ровно о делах, невозможных дважды), граница закреплена тестом, а не спрятана. Порождённые тесты: --emit даёт сценарии О-1, а не .lawtest (генератора О-1 → .lawtest в репозитории нет), поэтому шесть моделей z3 перенесены в .lawtest §267 рядом с пятью рукописными, не заменяя их, — lawc test 5/5 → 11/11; машинные тесты добавили две оставшиеся позиции прямого угла, не-тройку 7-1-7, полное вырождение 0-0-0, минимальный равносторонний 1-1-1 и границу с отрицательными сторонами, которых рукописная батарея не держала. Итог, ради которого замер и делался: фаззер спрашивает «встретится ли такое дело, если брать значения ИЗ ДОКУМЕНТА» (0 из 9 — в документе чисел нет), SMT-свидетели — «СУЩЕСТВУЕТ ли значение, при котором правило применяется» (9 из 9), атака — «существует ли значение, при котором ДВА правила применяются вместе» (UNSAT 3 из 3). Все три меряются «в правилах» и оттого выглядят одной шкалой; пакет без единого числа в документе разводит их до предела на одном и том же CLIR. Практическое следствие: «фаззер ничего не нашёл» никогда не является утверждением о праве — ни о покрытии, ни об инварианте (написанные руками констрейнты охота §93.1 пропускает по построению, и её молчание означает «не смотрел»).

  • kz.bin — Правила формирования БИН (приказ Минюста РК от 27.06.2023 № 423): пять фасетов структуры выражены правилами, а алгоритм контрольного разряда ОСИРОТЕЛ — записанная граница (31.08.2026). Заведён corpus/laws/kz/bin — второй пакет линии идентификаторов KZ (первый — kz.iin тем же днём). Содержательное ядро — п. 3: проекции первого и четвёртого фасетов (год/месяц регистрации, порядковый номер — арифметика цифр в голове), семантика а5 (типы 4/5/6 — по правилу на значение §206; исключённые 0-3 — одно основание одной строкой текста, с названной актом целью «исключение возможности совпадения БИН с ИИН»; резерв 7-9) и а6 (признаки 0/1/2/4). Главная находка — про действующее право: алгоритм контрольного разряда для БИН не установлен НИ ОДНИМ живым закреплённым актом — пп. 5) п. 3 называет только назначение разряда, предшественник (пост. № 406, утратил силу 01.09.2023) давал алгоритм словами «в составе ИИН», называя контрольную цифру БИН «определяемой автоматически» — без алгоритма (уточнено закреплённым срезом kz.id-number-2007 тем же днём), а живой приказ МВД № 521 писан для ИИН; поиск по ИПС другого носителя не дал. Валидация а12 поэтому не формализована, и отношения bin_check_digit_valid в пакете НЕТ ВОВСЕ (объявленное-но-невыводимое было бы мёртвым символом) — выражена только проекция «а12 является контрольным разрядом»; закрыть границу прочтением «алгоритм тот же, что у ИИН» нельзя — у прочтения нет несущего текста (§152). Вторая граница — молчание перечня а6 о значениях 3 и 5-9 — пинуется NEITHER-тестом, обязанным упасть при дописывании перечня за акт. Измерено: lawc check чист; 6/6 .lawtest (пары а5 = 3/4, резерв 7, молчание а6 = 3, проекция месяца); регрессия семейства bin 8/8 (пара а5 = 6/7, нерезидент, признаки, проекции, «назначение без расчёта» у а12); KZ-differential — 9 evaluate-вызовов байтово идентичны; разметка §218 — словарь 15/0, нормы 13/0; doctor.py kz/bin — «пробелов нет»; аудит чист; мера §33.1 по статьям неприменима. Очередь в README: валидация а12 — только вместе с актом, который её установит, либо исторический срез № 406 с окном до 01.09.2023.

  • kz.iin — Правила формирования ИИН (приказ МВД РК от 29.06.2023 № 521): контрольный разряд в два цикла mod 11, два подлинных умолчания текста записаны границами (31.08.2026). Заведён corpus/laws/kz/iin — первый пакет линии идентификаторов в правопорядке KZ (механика — по образцу iso.check_characters: рекурсивная свёртка через monotone(...) §110, арифметика в голове §190). Разведка источника дала два подлинных умолчания, и оба старше 2023 года (пункт 3 прежних Правил — пост. № 406 в ред. 2013 г. — формулирует теми же словами, сверено без закрепления): (1) ПЕРВАЯ последовательность весов нигде не выписана — только «bi - вес і-го разряда», явной таблицей дан лишь второй цикл; прочтение «вес = номер разряда» записано в шапке и выражено арифметикой позиции, а не выдуманной таблицей — чисел 1..11 в закреплённом тексте нет; (2) исход «во втором цикле снова 10» текстом не описан — expected_check_digit у такого префикса не выводится ни для одного значения, правила нет НАМЕРЕННО, и молчание пинуют четыре сценария (обе витрины valid/invalid — tests/04-05, промежуточное отношение — IIN-04/05), обязанные упасть, если кто-то допишет исход за акт. Единственная явная таблица акта (веса второго цикла) — 11 ассертов с якорями на свой фрагмент; вся синтетика дел вычислена при подготовке и сверена обеими реализациями (990101500006 — первый цикл, 990101500708 — ровно 10 и второй цикл, 99010150071 — оба цикла 10). Измерено: lawc check чист; 6/6 рукописных .lawtest §267 (пороговая пара «остаток ≤9 / ровно 10», обе половины границы, соседняя транспозиция); регрессия семейства iin 6/6 (одиночная ошибка ввода, молчание границы, невалидность второго цикла); KZ-differential — 6 evaluate-вызовов байтово идентичны (liblaw_ffi == lawref); разметка §218 — словарь 10/0, нормы 10/0, вписана --register; doctor.py kz/iin — «пробелов нет»; аудит — посылок в никуда 0, стаб-цепей 0, мёртвых символов 0; мера §33.1 по статьям неприменима (единиц «Статья N» у акта нет). Вердикты по всем 38 неиспользованным видам деклараций — группами в README.ru.md пакета. Очередь записана там же: БИН (соседний приказ V2300032918), семантика разрядов — только вместе с источником, который её устанавливает.

  • phys.zadachnik — акт-таран №2 unit-package: школьная физика опровергла гипотезу «нужен полный пакет» и упорядочила решения DECISION-0068 §5 (31.08.2026). Заведён corpus/laws/phys/zadachnik — авторское изложение школьной традиции решения задач (14 статей, 28 задач, все числа 10-гладкие сознательно — задача 10.2 выходит из гладкости нарочно и пинует Rational-половину E-0068). Устройство пакета и есть замер: энергия и КПД (ст. 9–10) — РАЗМЕРНО без эталонов (сложение/сравнение/деление Quantity[J], первый физический потребитель строки E-0068 после парацетамола), вычислительные формулы (ст. 4–8, 11) — эталонной записью ст. 2 («численно равен»: входы-Quantity де-юничатся делением на эталон громко, ответ пришивается умножением), таблицы плотностей и теплоёмкостей — шесть A3-параметров со скалярными ячейками, округление — только div_round(..., "HALF_UP"). Замер (25 проб обеими реализациями, probe_zadachnik_units.py): 28/28 задач исполнены сегодняшним ядром, де-юниченных ФАКТОВ — ноль (де-юнит выжил в именах ставок, ячейках A3 и именах отношений дела — правило не может спросить единицу, диспетчеризация систем ложится на имена); эталонный налог — 15 эталонов, 29 делений и 16 пришивок на 46 правил. Две молчаливые дыры класса «масштабирование читается как пересчёт»: школьное «переведи делением на 3,6» — 72 km_per_h / 3.6 законно по §58 и возвращает 20 km_per_h МОЛЧА (число верное, тег прежний, следующее сложение глотает бессмыслицу); пришивка эталоном НЕ ТОЙ единицы — правило с опечаткой выводит путь 300 s со статусом TRUE_ONLY без единой диагностики (эталонная запись громка на входе и слепа на выходе — новая, тараном №1 не замеренная). Differential-находка: пара Decimal * Rational отвергается обеими реализациями РАЗНЫМИ формулировками TYPE_ERROR (оракул — §48, lawc — §49) при дословном контракте на issue-тексты; вектора нет — черновик обязательства в заявке. Вывод тарана: полный пакет школе не нужен; порядок решений §5 по цене отказа — (1) конверсионный терм с точным фактором парой целых (гипотеза «конверсия раньше умножения» подтверждена с уточнением «раньше — да, чаще — нет»; фактор 18/5 сегодня неисполним ни Rational-формой, ни парой целых — только * 5 / 18.0), (2) проверяемая пришивка, (3) умножение размерных пар и канон составного тега — без свидетеля; черновик-заявка в audit §3 НЕ проведена, решение за владельцем. Приёмка: сценарии 38/38 (пары по обе стороны каждого порога; границы — падающими сторожами с кодом issue), KZ-differential 47 вызовов байтово, решебник .lawtest 20/20 (задача/ответ той же единицей), Lean-зонд 47/0, мера §33.1 — EXECUTABLE 12/12 при UNEXPLAINED 0 (ст. 1 и 14 — границы с причиной, у ст. 14 despite), разметка §218 — 80/0 + 46/0, doctor — «пробелов нет»; строка замера — DECISION-0068 §5.

  • Однопроходный канонический эмиттер §208/§209 — semantic_hash дешевеет 2,3–2,9×, байты и тексты ошибок тождественны (DECISION-0074, 31.08.2026). Конвейер хэша строил четыре промежуточных дерева на вызов (клон + strip-пересборка + decimal-пересборка + пересортировка узлов с двойным клоном), а emit собирал строку пути format!-ом на каждый элемент, нужную только в ошибках. Новый Walk делает всё одним проходом по исходному дереву: semantic-фильтр §209, нормализация Decimal E-0052 и сортировка top-level nodes перестановкой индексов — на лету, пути диагностик — лениво (сегменты ссылками, строка — только в момент отказа), пред-скан id узлов до первого байта сохраняет ПОРЯДОК ошибок старого конвейера. Старый конвейер сохранён дословно в тестовом модуле reference; тождество держат тест-батарея (успехи и отказы, включая тексты путей), свип 205/205 корпусных CLIR (новый хэш == записанному старым кодом, 2,2 с на весь корпус), cross_canon --n 100000 против lawref и вся дифференциальная батарея (ffi 157/157 обоими путями, differential 157/157, векторы, wasm 24/24, kz 187 вызовов). Тихий A/B (release): semhash 97 КБ 3,2 → 1,1 мс, 632 КБ 17,3 → 7,2 мс, 5,6 МБ 168 → 74 мс; law_load хэндла на кодексе 173 → 80 мс. В сложении с DECISION-0071: хэш на 5,6-МБ пакете — с ~168 мс на каждый вызов до 74 мс один раз при загрузке. Смежно установлено: красный check_lower (4 LAY-L0 + 2 демо) воспроизводится ДО правки и байтово от неё не зависит — квалификация за линией E-0068, заведена отдельной задачей. Дополнение той же датой: оба названных хвоста закрыты — semantic_hash/node_semantic_hash стримят канон прямо в SHA-256 через обобщённый приёмник (без промежуточной строки размером с документ; по скорости нейтрально — 0,95–1,03× чередующимся парным замером, выигрыш — память, 5–8 МБ на кодексах, что существенно wasm-хосту и параллельным хэндлам), hex — таблица нибблов с тестом на все 256 байтов; подтверждение — law-canon 11/11, свип 208/208 CLIR, cross_canon --n 100000, ffi 157/157 обоими путями. Отдельно: красный cargo test -p law-hir (strata, вектор ERR-E0070-REMOVED-FORMS, LDC-E4101 против пусто) воспроизведён на чистом HEAD в worktree — сломан в истории после чистки поверхности, заведён второй задачей.

  • kz.paracetamol мигрирован на размерную запись — первый акт, снявший де-юнит с норм дозирования (E-0068, 31.08.2026). Errata, которую этот акт мотивировал, снята с него же: единица переехала из ИМЕНИ предиката в ТИП. Десять отношений и константа порога перетипизированы (massa_kg: Decimal → massa: Quantity[kg], объём приёма → ml, доза и все пределы → mg), затронуто четырнадцать правил, добавлены три эталона (MilligrammEdinitsa, KilogrammEdinitsa, MillilitrEdinitsa), и ставка читается как в источнике: (w / KilogrammEdinitsa) * SutochnyyPredelMgNaKg * MilligrammEdinitsa. Замер того, что это купило: дело «масса 20,0», где число означает фунты, до миграции давало TRUE_ONLY с пределом 1200 мг и НИ ОДНОЙ диагностики (действительный предел ≈ 544 мг), после — NEITHER плюс три TYPE_ERROR на делении разных тегов и DIMENSION_MISMATCH на сравнении с порогом. Сторожит это сценарий KZ-PARA-47 парой «фунты роняют ставку с названным правилом / килограммы считают», а не утверждение в аудите. Ответы на дела не изменились ни на одном сценарии: регрессия 46/46, differential 60 вызовов байтово, рукописные .lawtest 15/15. Осталось де-юниченным с названной причиной: сами ставки (…MgNaKg, MgVMillilitre — производная величина в Core 0.1 не типизируется, её место в unit-package), ячейка A3 (razovaya_doza_ml — поле unit схема допускает, но ни один из 22 .lawtable.json корпуса им не пользуется; долг общекорпусный) и абсолютные пороги раздела 7-3 (prinyato_vsego_g — ставки в них нет, следующий кандидат). Разбор — corpus/laws/kz/paracetamol/audit.ru.md §4а.

  • Чистка поверхности грамматики: восемь мёртвых форм сняты, пять синонимов депрекированы, задел 0.2 назван явно (E-0070/E-0071, DECISION-0072, 31.08.2026). Инвентарь всего корпуса (200 CLIR-пакетов, 12 906 файлов .law/.lawtest) против полной таблицы grammar.ebnf разделил неиспользуемое на три класса с тремя судьбами. Снято (E-0070, поведение реализаций не меняется ни на байт): дубль &&/||, унарный !, оператор in в сравнении, хвост in expression биндера, условное заключение p(x) if F, quoted identifier и list_literal — последний был хуже, чем мёртв: [1, 2] молча разбирался ИНТЕРВАЛОМ, и снятие закрывает коллизию документально; текст LDC-E0203 перестал рекомендовать несуществующую форму. Депрекировано (E-0071, фаза W — предупреждение LDC-E1328 из парсера, первый Diagnostic::warning синтаксического слоя; ошибкой станет в 0.2): concept ≡ relation kind institutional, except_when ≡ unless (дефитер при обеих записях носит имя <rule>/unless/N), claim ≡ duty со сторонами крест-накрест §129, definition … sufficient ≡ strict-правило модуло id; rule … default остаётся под прежним LDC-E1308. Эквивалентности доказаны равенством semantic hash §209 и закреплены исполняемым вектором. Рассмотрены и ОСТАВЛЕНЫ с записанной причиной: established(P) (§56 в data conditional делает явный статус-тест единственной законной записью) и prohibition (сахар, совпавший со словарём акта, — 238 употреблений против одного claim). Зарезервировано под 0.2 блоками RESERVED в grammar.ebnf: темпоральные предикаты, opposed/conflicted/no_evidence, Option (none/some/?), recurring every, селекция/алиас импорта. Prose амендирована синхронно (§15, §38-карта, §44, §129.1, §150, §151). Векторы: ERR-E0070-REMOVED-CHARS (LDC-E0101 ×5), ERR-E0070-REMOVED-FORMS (LDC-E0201 ×10), ERR-E0071-DEPRECATED-SYNONYMS (LDC-E1328 ×4, файл принят, LDC-E1308 в отсутствующих), ERR-E0071-SYNONYM-HASH (пара «синонимы против канона» — равный semantic hash; IR порождает lawc, хэш считает lawref — сверка кросс-реализационная). Прогон: векторы 371 (362 runnable исполнено), cargo test workspace зелёный, clippy чист, check_grammar_capabilities 47/47.

  • Кэш programHash в хэндле liblaw_ffi и eval-serve — вызов на пинованном пакете дешевеет ~2×, байты не шевелятся (DECISION-0071, 31.08.2026). Стек-сэмпл горячего вызова показал: каждая оценка на хэндле DECISION-0057 пересчитывала semanticHash ВСЕГО IR в build_manifest §170 — Rust-близнец класса DECISION-0054, налог линеен по пакету и на крупных превышает саму оценку. Хэш теперь считается ОДИН раз в law_load/загрузке eval-serve и едет полем EvaluationResources.program_hash (заполняется только хостом — из конверта запроса недостижим; ошибка хэша при загрузке кэш не заводит, отказ остаётся за evaluate-путём с тем же кодом). Тихий A/B (release, worktree-родитель против рабочего дерева, документы байт в байт на трёх пакетах): truth-вызов 97 КБ 4,4 → 2,6 мс, 632 КБ 21,6 → 10,4 мс, 5,6 МБ 249,9 → 140,3 мс; load дорожает ровно на один хэш. Ворота: check_ffi_differential 157/157 обоими eval-путями (реестр вырос со 133 на E-0068 тем же днём), wasm 24/24, differential 157/157, check_kz_differential --only criminal_code 187 вызовов байтово — 210,5 с wall / 254 с CPU → 139,8 / 121,9 (~2× по CPU; остаток пола — оракул Python). Попутно вскрыт артефакт замера этапа 2 BINDINGS-PLAN («тривиальный вызов ~0 мс» мерил error-конверт, минующий манифест) — приписка в плане; следствие для встраивания: точечный запрос на пакете агрегатного размера — миллисекунды, «секунды за eval» были ценой спавна+парса+хэша+debug на монолитных кодексах. Вне объёма названы: внутренние три прохода semantic_hash, demand-driven оценка, кэш решений потребителя, wasm-хэндлы.

  • kz.grammar.singarmonizm — пятый срез: слой эффективного ряда, волна 1 каркаса закрыта; форма дефитера исправлена против emle (31.08.2026). Заведён corpus/laws/kz/grammar/singarmonizm — продолжение миграции kz.corpus.emle: общий закон § 31 поражаемым правилом (аффикс по ряду последнего слога) и два отступления, действующие на ВХОД, а не на ответ: § 20 «Сөз сазы» (к/г среди двух-трёх конечных согласных → «тек қана жіңішке»: парктер, киоскілер, митингілер; граница названа самим § 20 — без к/г действует собственный ряд: лифтілер, штампылар) и § 30 (ю/ё/э в последнем слоге заимствования → жіңішке: полюс-ке, парашют-ке). Третий закреплённый документ каркаса — «Сөз сазы» (байты — копия закрепления emle). Найден и замерен латентный дефект emle: его дефитеры гасят вывод общего правила ПО СОБСТВЕННОМУ РЯДУ основы, и на слове, чей ряд уже жіңішке и есть к/г, гасят заодно перевыведенное отступлением жіңішке — та же голова-литерал; живая база emle на деле киоска отвечает qoldanylatyn_undestik(Kiosk, Zhinishke) = NEITHER при аттестованных § 20 киоскілер/киоскінің, и ни один сценарий emle угол не запрашивает (парк и пункт — оба жуан). Здесь дефитеры гасят РОВНО ЖУАН-ВЫВОД (defeat qoldanylatyn_undestik(w, Zhuan)): § 20 предписывает жіңішке — значит, снять надо именно жуан, а жіңішке-вывод общего правила отступлению не противоречит; попутно из головы дефитера уходит переменная ряда (исчезает unless-класс несвязанной головной переменной, разобранный emle). На починку самого emle поставлен чип задачи. Слой карантинирован от phon сознательно (записанное решение, не забывчивость): он поражаемый, а правила всех пяти срезов — СТРОГИЕ читатели осей phon, и поражаемая ось в phon отравила бы их разом (LDC-E4103 LATE_STATUS_PRODUCER); очередь записана — переезд потребителей (парадигмы становятся поражаемыми читателями эффективного ряда, как у emle) и вместе с ним перенос отношения в phon по правилу «общий предикат — в phon». Аудит честно называет слой стаб-цепью — вердикт «слой очереди, объявлен в шапке с перечнем невзятого». Приёмка: сценарии 6/6 (пасс-тру всех одиннадцати словарных слов; парк и полюс — жуан ПОРАЖЁН, ответ от правила отступления; свидетель исправления — киоск сохраняет жіңішке; § 20 отвечает и без собственного ряда основы; граница § 20 его же примерами), KZ-differential 21 вызов байтово (включая поражение §107 в обоих движках), doctor — «пробелов нет», мера §33.1 — EXECUTABLE 2 (§ 30, § 31; § 20 — вне первого юнит-носителя, тот же учёт у самого emle), UNEXPLAINED 0, разметка §218 — 3/0 словарь + 5/0 нормы. Волна 1 закрыта: два корня (phon — 3 оси, 2 тотальные map; lexicon — факт-группы §23.1) и пять срезов (taueldik, septik, zhiktik, koptik, singarmonizm), 48 сценариев, все differential байтово.

  • kz.grammar.koptik — четвёртый срез волны 1: миграция kz.corpus.emle на оси phon, с двумя содержательными исправлениями (31.08.2026). Заведён corpus/laws/kz/grammar/koptik — көптік жалғау, обещанный KAZAKH-GRAMMAR §1 переезд первого жильца корпуса в каркас. Шесть клеток шестиклеточной строки очерка («қала+лар, көше+лер, ат+тар, ит+тер, қаз+дар, із+дер») выражены строгими правилами на осях phon: л-серия по классу «гласный» × ряд (группой её взять нельзя — группа дауысты-үнді включает сонорные, а у них көптік не аттестован), д-серия по ГРУППЕ ж-з, т-серия по группе қатаң+вбгд (§ 31 ә): кітап+тар, педагог+тер, араб+тар). Седьмая клетка — сонорная основа — унаследованным от emle каналом суждения §47.3: Республиканская орфографическая комиссия, мандат — подпункт 1 пункта 7 Положения (приказ № 468 закреплён третьим документом пакета, байты — копия закрепления emle). Разницы миграции, обе — оси, не клетки: (1) д-серия сужена с класса ұяң до группы ж-з: § 31 а) сам квалифицирует ұяң скобкой «(ж, з)», а в/б/г/д того же класса идут по т-серии — на честном деле «конец б, класс ұяң» шестиклеточная форма emle отвечала -дар, где справочник пишет араб+тар; свидетель — KZ-KOP-02 с минимальной парой ВНУТРИ класса ұяң (қаз→дар против араб→тар); (2) правило судьи читает ВЫВЕДЕННЫЙ класс (anyqtalgan_dybys_turi): мосты phon строгие, и запрет LATE_STATUS_PRODUCER, вынудивший emle читать эмпирический факт дела, здесь не действует — слово, чей класс выведен из буквы (шам ← М тотальной классификацией § 31), доходит до Комиссии при ПУСТОМ деле (KZ-KOP-03), а ответ кодификатора замыкает вывод adjudicated assertion §73 (KZ-KOP-04: шам+дар). Попутно ЗАМЕРЕНА семантика §47.3, которую emle не запрашивал ни разу: любой NEITHER на отношении, чью голову покрывает правило судьи, несёт evaluationStatus REQUIRES_JUDGMENT — blocker-разбор §185 считает судью блокером и при NEITHER-классе, потому что key(w) — детектор конфликта, не замыкание мира (замер тем же запросом на базе emle: қала→Dar при классе Dauysty — NEITHER REQUIRES_JUDGMENT; поведение давнее, не эффект поправки радиуса E-0066); разница «сонорный спрашивает» против «чужая серия» живёт в whynot.judgment_blockers — два вопроса E-0066. Сам kz.corpus.emle ОСТАЁТСЯ работать (19/19 после правки): его цепочка кірме § 32 → көптік интегрирована через qoldanylatyn_klas, и резать её до переезда слоёв эффективного ряда (§ 20/§ 30) и эффективной основы (§ 32 дәнекер) нельзя — запись о миграции добавлена в шапку его 04-koptik.law комментарием, CLIR перегенерирован и байтово не изменился. Приёмка: сценарии 6/6 (все три серии на словаре при пустом деле; свидетель вбгд; Комиссия и §73; дословные ат+тар/ит+тер фактами дела; граница ұяң-без-буквы — ни одной серии), KZ-differential 22 вызова байтово (включая REQUIRES_JUDGMENT и adjudicated-путь), doctor — «пробелов нет», мера §33.1 — EXECUTABLE 1/1 в объявленном охвате (§ 31; приказ № 468 — whole без единицы, довод emle), UNEXPLAINED 0, разметка §218 — 3/0 словарь + 7/0 нормы, аудит — ноль посылок в никуда и в один конец.

  • kz.grammar.zhiktik — третий срез волны 1: две семьи с разными осями и первое изъятие из закона согласных (31.08.2026). Заведён corpus/laws/kz/grammar/zhiktik — жіктік жалғау, срез 1-жақ (-мын/-мін) и 2-жақ анайы (-сың/-сің). Содержание среза — в асимметрии осей: 1-жақ выводится по классу «гласный» × ряд (очерк аттестует клетки внутри перечня «жіктік жалғаулары … жалғанады»: әнші+мін, оқушы+мын — обе основы гласные, и объём правила ровно таков), а 2-жақ — по ОДНОМУ ряду, потому что ескерту § 31 ИЗЫМАЕТ с/ш-начальные аффиксы из закона согласных («… -сың, -сің … бағынбайды. Мысалы: бала+сың»; примеры того же изъятого списка стоят после гласной, қатаң, ұяң з и үнді р основ) — в телах правил 2-жақ нет ни класса, ни группы намеренно. Границы записаны, не обойдены: 3-жақ аффикса не имеет — пуст по построению, как атау у септіка; 1-жақ согласных основ (мал+мын, қазақ+пын) закреплённые фрагменты примером не дают — правила нет, дело о согласной основе честно NEITHER, сценарий-сторож обязан упасть при дописывании без источника; пара -сыз/-сіз стоит в том же ескерту ПЕРВЫМ примером (бала+сыз), но закреплённый текст не различает жіктік сыпайы и приватив — моделировать её значило бы выбрать прочтение без основания. Словарь — включением обеих факт-групп §23.1 (22 узла материализованы в CLIR среза); фрагменты — копии закрепления байт в байт. Приёмка: сценарии 6/6 — 2-жақ на всех одиннадцати словарных словах при пустом деле (включая Kitap, чей ілік идёт по т-серии: инвариантность начала -сың к группе видна прямо в паре с септіком), граница 1-жақ на четырёх согласных основах, дословные оқушы+мын/әнші+мін/бала+сың фактами дела, и ОСТРИЕ изъятия: слову с одним фактом ряда (ни класса, ни буквы) 2-жақ выводится, а 1-жақ нет, и слову ұяң-без-буквы — у септіка не имеющему ни одной клетки (KZ-SEP-05) — 2-жақ тоже выводится: изъятый аффикс границы группы § 31 не видит. KZ-differential 31 вызов байтово, doctor — «пробелов нет», мера §33.1 — EXECUTABLE 1/1 в объявленном охвате (§ 31), UNEXPLAINED 0, разметка §218 — 3/0 словарь + 4/0 нормы, аудит — ноль посылок в никуда и в один конец. Очередь записана в шапке пакета: множественное число (-мыз/-міз, -сыңдар/-сіңдер) и сыпайы-парадигма — своими заходами.

  • kz.grammar.septik — второй срез волны 1; kz.grammar.phon получил третью ось — группу § 31 (31.08.2026). Заведён corpus/laws/kz/grammar/septik — ілік и барыс септіктер. Ілік замкнут закреплённым текстом целиком: все шесть клеток ОДНОЙ строкой вводного очерка («қала+ның, көше+нің, ат+тың, ит+тің, қаз+дың, із+дің» — тот же шестиклеточный приём, которым очерк демонстрирует көптік), плюс шам+ның и терезе+нің из § 31 а); барыс — четырьмя клетками § 31 (шам+ға, қаз+ға, терезе+ге, кітап+қа, клуб+қа) и § 30 (полюс-ке, парашют-ке). Парадигмам понадобилась ось, которой в phon не было: § 31 выбирает НАЧАЛЬНЫЙ согласный аффикса не по фонетическому классу, а по СВОИМ трём группам — дауысты-үнді (н-серия), ж-з (д-серия), қатаң+в/б/г/д (т/қ-серия), — и деление НЕ совпадает с классами (ұяң ж/з и ұяң в/б/г/д расходятся по группам). По правилу каркаса «общий предикат — в phon» базовый пакет расширен третьей осью: enum ZhalgauToby, ВТОРАЯ тотальная классификация map atalgan_dauyssyz_toby (§46.1 — компилятор доказывает, что ни один из шестнадцати названных согласных не остался без группы), мосты из буквы и провода из прямого класса — с записанной границей: класс ұяң БЕЗ буквы группе не относится, правила нет сознательно (KZ-PHON-12 сторожит отказ от догадки; KZ-SEP-05 — потребительскую сторону той же границы). Десять правил среза: шесть ілік по (группа × ряд) с членами в аргах и четыре барыс, где гард обеих а)-групп записан неравенством g != QatanVBGD по основанию самого подпункта а) («қосымша үнді не ұяң дауыссыздан басталады» — одно основание, одно правило §206). Словарь — включением обеих факт-групп §23.1; дело о словарном слове не несёт ни одного факта. Приёмка: phon расширен до 12/12 сценариев и перерегистрирован (разметка затянута 12/0 + 10/0), lexicon и taueldik перегенерены под новый пин phon и зелены (5/5, 7/7); septik — сценарии 6/6 (обе парадигмы на всех одиннадцати словарных словах при пустом деле; минимальные пары серий — қаз+дың против ат+тың, шам→дың обязан молчать; дословные ат+тың, ит+тің, полюс-ке фактами дела), KZ-differential 36 вызовов байтово, doctor — «пробелов нет», мера §33.1 — EXECUTABLE 2/2 в объявленном охвате (§ 30, § 31), UNEXPLAINED 0, аудит — ноль посылок в никуда и в один конец. Очередь записана в шапке пакета: табыс/жатыс/шығыс/көмектес — своими заходами с полными клетками; атау аффикса не имеет по построению; дәнекер-слой § 32 — после появления фактов об эффективной основе.

  • kz.grammar.taueldik — первый пакет-срез каркаса грамматики: волна 1 начата (31.08.2026). Заведён corpus/laws/kz/grammar/taueldik — тәуелдік жалғау, срез I/III лица единственного числа, живой образец анатомии среза (docs/KAZAKH-GRAMMAR.ru.md §4). Первая боевая связка всей волны 0: дело о словарном слове НЕ НЕСЁТ НИ ОДНОГО ФАКТА — классификацию поставляют материализованные факт-группы kz.grammar.lexicon (обе включены явными строками §23.1, их 22 узла — в CLIR среза с провенансом словаря), класс конечного звука выводят мосты kz.grammar.phon (map §46.1 + значения-идентичности E-0067), алломорф — шесть правил парадигмы, где гард «конец — согласный» записан неравенством t != Dauysty по основанию самого источника (§ 13 «жалпы заңдылық»). Каждая клетка выраженного стоит в пяти закреплённых фрагментах примером с аффиксом: қалам+ым и дәптер+ім (очерк), ойын+ым/ойын+ы и көрік+і (§ 5), блок+ы (§ 31 г), фонд+ы+сы и факт+і+сі (§ 32 — гласные клетки III лица), халқы/халқым/бөркі/көркі (Сөз сазы § 13); у правил множественные @source-якоря, и мера §33.1 отвечает EXECUTABLE 3/3 главы «Емле» + § 13 «Сөз сазы» в объявленном охвате, UNEXPLAINED 0. Границы записаны, не обойдены: I лицо гласных основ (бала+м) закреплённые фрагменты примером не дают — правила нет, NEITHER, и сценарий-сторож KZ-TAU-04 обязан упасть, если правило допишут без источника; II лицо, множественное число и сусыпание ы/і — очередь; дәнекер-слой § 32 — очередь с ТРИПВАЙРОМ KZ-TAU-07 (дело о фонде пиннит нынешний общий закон и упадёт при появлении слоя — приём FIA-SC-15/KZ-JS-07). Отступление от эскиза каркаса записано в §4: парадигма правилами, а не таблицей A3 — enum-колонки таблиц берут состав перечислений из type_decl своего пакета, межпакетный состав в контексте импорта — записанная очередь DECISION-0069 §5а. Приёмка: сценарии семейства grammar_taueldik 7/7 (все 11 словарных слов III лица при пустом деле; клетки парами через границы; слово из дела — «дәптер+ім» дословно), KZ-differential 29 вызовов байтово, doctor — «пробелов нет»; строка оси ряда снята из dead-symbols по записанному в ней обещанию — первый срез её читает.

  • kz.grammar.lexicon — словарь каркаса грамматики и ПЕРВЫЙ носитель факт-групп §23.1 в корпусе (волна 0 закрыта; 31.08.2026). Заведён corpus/laws/kz/grammar/lexicon: 11 слов-примеров закреплённых фрагментов справочника двумя pub facts-группами по фрагменту-источнику (KirispeMysaldary — 8 assertion-узлов, Emle31Mysaldary — 14), классификация — фактами по ЧУЖИМ осям kz.grammar.phon (решение каркаса № 3: словарь своих осей не заводит), и каждое слово стоит в тексте фрагмента с аффиксом, из которого его оси читаются (қаз+дар, терезе+ге, педагог+тер, …). Полный конвейер §23.1 прошёл боевым: gen_kz_clir вывел порядок сборки из import-декларации и предъявил контекст с factGroups сам; узлы групп несут группо-локальные id, якоря @source на свой фрагмент, метки и visibility в provenance. Приёмка: сценарии семейства grammar_lexicon 5/5 — состав групп глазами резолвера (тот самый канал предъявления resolver.fact_groups), каждое слово парами по обеим осям (чужая ось — NEITHER), линкованный мир словарь+phon выводит установленный класс мостами со сверкой закреплённого contentHash §11, честное молчание об отсутствующем слове; KZ-differential 34 вызова байтово; doctor — «пробелов нет»; мера §33.1 — ANCHORED 1/1 в объявленном охвате. Границы записаны, не обойдены: ат/ит вне словаря (их конечный т § 31 буквой не называет — придут со словарём-источником своей группой), .lawtest у пакета нет — lowering тестов не получает --imports, и чужой предикат в тесте не лоуверится (граница конвейера, записана в шапке; кандидат в будущую правку lawc test).

  • kz.grammar.phon — первый пакет каркаса казахской грамматики (волна 0, docs/KAZAKH-GRAMMAR.ru.md; 31.08.2026). Заведён corpus/laws/kz/grammar/phon — базовый словарь ОСЕЙ, который читают будущие ~40 пакетов-срезов: pub entity Soz, оси-перечисления BuynUndestigi (жуан/жіңішке) и DybysTuri (дауысты/үнді/ұяң/қатаң), перечень AtalganDauyssyz — ровно шестнадцать согласных, которые § 31 справочника Сыздық называет буквой, — и тотальная классификация map atalgan_dauyssyz_turi (§46.1): компилятор ДОКАЗЫВАЕТ, что ни один названный согласный не оставлен без класса (LDC-E1326). Пакет — первый штатный потребитель всех трёх правок DECISION-0069 разом: члены перечислений экспортируются с типом (E-0065), гарды мостов atalgan_dauyssyz_turi(d) == Undi исполняются значением-идентичностью (E-0067), map — сахар над pure function без единого нового вида узла (§46.1). Правил письма пакет не содержит сознательно — выбор аффиксов остаётся срезам; выведенная ось anyqtalgan_dybys_turi (institutional, key(w)) устанавливается мостами из названного звука либо проводом из прямого факта, и противоречащие пути сталкиваются громко (KEY_CONFLICT §45.1, сценарий KZ-PHON-07). Байты источника закреплены байт в байт как у kz.corpus.emle (content_hash публикаций совпадают — источник один), фрагменты § 31 и очерка скопированы вместе с хэшами; мера §33.1 объявляет охват честно: articles.json scope ["31"] — EXECUTABLE 1/1, остальные 126 § главы вне охвата пакета осей (их берут срезы под своим закреплением), долг UNEXPLAINED — ноль. Приёмка: 9 сценариев семейства grammar_phon (все шестнадцать ветвей классификации исполнены; KZ-differential 41 вызов байтово), 3 теста §267, doctor — «пробелов нет», разметка §218 — 9/0 словарь и 4/0 нормы, ось ряда задокументирована в dead-symbols как вход волны 1 (первый срез, читающий её, снимает строку).

  • mdn.sahifa — Сахифа, «Конституция Медины» (~622): акт, дошедший ДВУМЯ расходящимися рецензиями, и молчание о трёх непоименованных племенах как проверяемый результат (31.08.2026). Заведён corpus/laws/mdn/sahifa — новая группа mdn и новый правопорядок §27.1 MedinanCommunity (ISO-кода нет и быть не может: сахифа учреждает не государство, а договорное сообщество «أهل هذه الصحيفة»). Подлинника не существует; закреплены байты ОБЕИХ линий передачи: Ибн Исхак в редакции Ибн Хишама (изд. ас-Сакка, т. 1, с. 501-504, БЕЗ иснада) — публикация редакции, и Абу Убайд, «Китаб аль-амваль» (изд. Харраса, с. 260-264, иснад через Зухри) — свидетель, объявленный СВОИМ источником AMWAL со своей редакцией: у редакции §27 ровно одна публикация, а без закреплённого фрагмента второе прочтение §152 висело бы в пустоте молча. sourceFidelity = reconstruction (PINNED_EDITORIAL_RECONSTRUCTION, довод Ясы), verifiedAgainstSource = false — сверять не с чем и не с чем будет.

    Единица деления §33.1 — статья по нумерации Велльхаузена, и она НАУЧНАЯ КОНВЕНЦИЯ, а не свойство источника. Своего деления у грамоты нет вовсе: это сплошная цепь оговорок «وإن…». Конвенция wellhausen_article вписана в ОБА реестра меры (check_source_pinning.py и corpus/tools/lib/act_split.py) с маркером U+202F — тем же приёмом, что у Кодекса Хаммурапи, где номера законов тоже принадлежат новым издателям. Разрез задан 47 якорями и ДОКАЗЫВАЕТ себя: каждый якорь обязан найтись ровно один раз, порядок строго возрастать, а склейка сорока семи срезов — совпасть с очищенным документом побайтово. Оговорка нумерации записана в articles.json: в издании ас-Сакка бану Саида стоят пятыми, а бану аль-Харис шестыми (у Абу Убайда наоборот), и наши ст. 5-6 меняются местами с классической росписью; остальные сорок пять совпадают.

    РАЗВИЛКА, РАДИ КОТОРОЙ ПАКЕТ ЗАВЕДЁН, — ОДИН ПРЕДЛОГ. Ибн Хишам: «وَإِنَّ يَهُودَ بَنِي عَوْفٍ أُمَّةٌ مَعَ الْمُؤْمِنِينَ» — умма ПОДЛЕ верующих, федерация общин. Абу Убайд: «أُمَّةٌ مِنَ الْمُؤْمِنِينَ» — умма ИЗ верующих, единая умма. Это не дефект оцифровки: Абу Убайд приводит своё чтение дважды — в тексте и в собственном комментарии, где тут же его ограничивает («имеется в виду только помощь на войне, а в вере они ни при чём»), то есть свидетель знает, что его предлог читается сильно, и заранее спорит с сильным чтением. Оба прочтения оформлены interpretation §152 (any_of) и МЕНЯЮТ ОТВЕТ НА ДЕЛЕ: по Ибн Хишаму иудейская община распоряжается своим миром сама, по Абу Убайду связана единым миром верующих ст. 17 (SHF-45/46). Гейт содержательный, а не тотальный: «иудеям их вера» (ст. 25), положение прочих общин по бану Ауф (ст. 26-31, 33) и единая умма сторон (ст. 2) выводятся БЕЗ всякого выбора — SHF-47 и тесты 12/13 сторожат обе стороны этого.

    МОЛЧАНИЕ О НЕПОИМЕНОВАННЫХ ПЛЕМЕНАХ — ЦЕНТРАЛЬНЫЙ РЕЗУЛЬТАТ, А НЕ ПРОБЕЛ. Кайнука, Надир и Курайза в грамоте не названы ни разу, ни в одной рецензии. Молчание двухсоставно и проверяется с обеих сторон: «названа ли группа» даёт громкое FALSE_ONLY (замыкание §70 — NEITHER здесь был бы неотличим от недоделки), «есть ли у неё права иудеев бану Ауф» — NEITHER (замыкание вниз по правилу не наследуется, и это здесь работает на нас). Сценарии SHF-40…SHF-42 и тесты 02/03 обязаны покраснеть, если кто-нибудь впишет эти имена в перечни (приём HAJJ-50…52).

    Власть §127 нижайшего и её единственный предел. «ذِمَّةَ اللَّهِ وَاحِدَةٌ، يُجِيرُ عَلَيْهِمْ أَدْنَاهُمْ» (ст. 15) — односторонний акт любого члена связывает коллектив; Курайш и его пособники изъяты (ст. 43) иммунитетом §128 с ЯВНЫМ приоритетом §116, потому что при равной силе иммунитет молчит. Ловушка доставки эффекта обойдена сознательно: строгого правила, выводящего protection_binds_all рядом с властью, НЕТ — оно обошло бы §128 напрямую без единого issue. Сторож — КОД issue EFFECT_BLOCKED_BY_IMMUNITY (SHF-31), потому что у заблокированного эффекта и у ненаступившего ответ одинаков.

    Грамота противоречит себе об издержках войны, и пакет этого не чинит (SHF-21): ст. 24/38 велят нести издержки ВМЕСТЕ, ст. 37 — каждому СВОИ, и на военном деле выводится и то, и другое. Согласование даёт только комментарий Абу Убайда, вырезанный из закреплённых байтов правилом отсева, — внести его в норму значило бы выдать толкование IX века за слово VII-го.

    Правило отсева с ДОКАЗАТЕЛЬСТВОМ (приём Маджаллы): комментарий Абу Убайда идёт за текстом грамоты без разрыва, и граница проведена не маркером, а падающей проверкой — каждая из восьми цитат «قوله: X» отброшенного хвоста обязана найтись в удержанном тексте (с объявленными поблажками на переставленный союз и на местоимение «فلان»). Расхождения рецензий тоже не пересказаны, а ПРОВЕРЯЮТСЯ: режим --witness требует, чтобы каждая из ДВЕНАДЦАТИ оговорок таблицы ABSENT_IN_WITNESS нашлась в публикации и не нашлась у свидетеля.

    Измерено: §33.1 — EXECUTABLE 47 из 47, SOURCE_ONLY 0, UNEXPLAINED 0; байты источника 12 690 из 13 010 (97,5 %; остаток — маркеры конвенции и переводы строк); 27/27 сценариев семейства sahifa + 16/16 рукописных .lawtest §267; differential --only sahifa — 87 из 87 evaluate-вызовов байтово идентичны (liblaw_ffi == lawref); Lean-зонд по акту — 75 сертификатов принято, 0 отвергнуто; разметка §218 — словарь 141/0, нормы 92/0; посылок в никуда 0, стаб-цепь 1 из 79 правил (1 %) с записанным вердиктом, мёртвых правил 0, мёртвых символов 0 сверх 21 константы закрытых перечней (вписаны в dead-symbols.json разделом documented), doctor.py — «пробелов нет». Инвентарь: 17 видов деклараций из 44, вердикты по всем 27 неиспользованным — в audit.ru.md пакета.

    Найдено воротами по ходу и исправлено правкой нормы, а не реестра: (1) отношение ally_of объявлялось, ассертилось делом и не читалось ни одним правилом — мёртвый символ указывал на ПОТЕРЯННУЮ норму: ст. 37 «لَمْ يَأْثَمْ امْرُؤٌ بِحَلِيفِهِ» была записана без союзника, которого она называет (переписано положительной головой not_answerable_for_his_ally); (2) отсылка ст. 26-31, 33 стояла ПЕРЕСКАЗОМ, а не проводом — вера всех общин выводилась разом из «названа иудейской общиной», и внутренняя цепь акта была разрезана на острова (четыре правила по основаниям текста, сторож SHF-52).

  • iso.check_characters — системы контрольных знаков ISO/IEC 7064 (MOD 11-2, MOD 97-10): первый акт линии стандартов идентификаторов, две находки инструментария (31.08.2026). Заведён corpus/laws/iso/7064-check-characters — новая группа iso (jurisdiction "none", instrument "standard", первое новое значение legalStatus = "in_force" для не-законодательного источника). Подлинник ISO платный, UNAVAILABLE; формализация — по свободным официальным свидетелям применения (§27.3): ORCID («Structure of the ORCID Identifier», PINNED_OFFICIAL_BYTES) и Swift (IBAN Registry Release 87/май-2020, PINNED_OFFICIAL_BYTES, §2.40 — официальный пример реестра KZ86125KZT5004100100, Организация: Национальный Банк Республики Казахстан). Обе свёртки — положительная рекурсия по позициям через monotone(...) (§110), арифметика в ГОЛОВЕ правила (§190); A3-таблица A=10..Z=35 (letter-values.lawtable.json, mode: rules, total: false — total: true отвергнут статикой LDC-E8302). Найдено и задокументировано в памяти: (1) вычисляемое выражение (n - 1) аргументом атома в теле правила молча читает несвязанную переменную, если компилятор переставляет тело правила, — ноль диагностик; лечится односвязным промежуточным отношением (last_position), вычисление переносится в ГОЛОВУ; (2) буква занимает ДВЕ позиции числового представления (A=10..Z=35 — двузначное число) — свёртка обязана сдвигать накопленный остаток на ×100, а не ×10, иначе официальный пример реестра давал бы остаток 40 вместо 1 (расщепление §206 по гарду d < 10 / d >= 10). Измерено: 12/12 сценариев .lawtest пакета + 4/4 сценариев corpus/kz/acts/iso_check_characters.py (буквенные IBAN-сценарии — внутреннее отношение <id>/input A3 mode: rules не адресуемо ни .law, ни .lawtest, память a3-rules-table-input-unreachable), 2/2 свойства §270 (срез v1), differential 4 evaluate-вызова байтово идентичны (liblaw_ffi == lawref), Lean-зонд — 4 сертификата приняты, 0 отвергнуто, smt_witness.py — 3 скалярных гарда диапазона 02-98 закрыты свидетелями без контрпримера. Разметка §218: словарь 27/0, нормы 50/0. Мера §33.1 неприменима (источник без заголовков «Статья N»). Границы честно названы в package.law: гибридные MOD 11,10 системы вне среза, институты ORCID/ISNI/IBAN вне предмета.

  • kz.paracetamol — инструкция по медицинскому применению парацетамола: акт-ТАРАН для unit-package, и молчаливая дыра, которую он нашёл (31.08.2026). Заведён corpus/laws/kz/paracetamol (namespace urn:kz:clir:paracetamol) как мотивирующий свидетель п. 4 DECISION-0068 — утверждённая приказом Комитета медицинского и фармацевтического контроля МЗ РК от 25.06.2024 № N076102 инструкция к детской суспензии 120 мг/5 мл, PINNED_UNOFFICIAL_COPY (госреестр www.ndda.kz закрывает выдачу hCaptcha, закреплён PDF держателя регистрационного удостоверения; текстовый слой проверен pdffonts/pdfimages, извлечение layout — нормативное ядро документа есть ДВЕ многоколоночные таблицы). Из unit-package не реализовано ничего, семантика не тронута (инвариант 5). Новая единица деления §33.1 в ОБОИХ реестрах меры — ru_named_section, алиас named_section под русским языком (от языка зависят признаки, которыми ворота проверяют объявленные границы; под английским набором любая граница по русскому документу штамповалась бы молча). Измерено: 45/45 сценариев семейства paracetamol, differential --only paracetamol — 58 из 58 evaluate-вызовов байтово идентичны (liblaw_ffi == lawref), 15 рукописных .lawtest (15/15), Lean-зонд по акту — 58 сертификатов принято, 0 отвергнуто, разметка §218 119/0 словаря и 97/0 норм, мёртвых символов 0, мёртвых правил 0, стаб-цепей 1 из 53 (сам дефитер), doctor.py — «пробелов нет». §33.1: разделов 26, EXECUTABLE 16, SOURCE_ONLY 10, UNEXPLAINED 0 — все десять объявлены границей с причиной, проверенной по тексту раздела.

    ЗАМЕР ТАРАНА (главный выход; corpus/tools/checks/probe_paracetamol_units.py, 14 проб живыми вызовами ОБЕИХ реализаций, байты §208 сверены на каждой). Вывод 3 разведки DECISION-0068 §3 («молчаливых дыр на границе нет») требует уточнения: Quantity[u] * Integer возвращает Quantity[u] — умножение сохраняет тег и никогда его не меняет, а ставка «мг на кг» требует ровно обратного. Громкость, принятая разведкой за свойство границы (DIMENSION_MISMATCH пробы C), есть следствие того, что теги ОКАЗАЛИСЬ разными. Запиши формализатор обе величины одним тегом — 120 g <= 8 g * 15 отвечает TRUE_ONLY молча, означая порог, отличающийся от установленного в тысячу раз; ни статика, ни исполнение не говорят ничего. Второй результат: кросс-юнитный компаратор НЕ нужен — сравнение внутри одной единицы работает уже сегодня (норма акта «хранить при температуре не выше 25 °С» исполняется Quantity[celsius] прямо), а между разными обязано отказывать по рамке 1. Третий: достаточное подмножество — одна строка таблицы делимых §58 (Quantity[u] / Quantity[u] → Decimal при тождественном теге), то есть errata размером с E-0062, а не алгебра; черновик приложен текстом к audit.ru.md и НЕ проведён. Строка-ссылка на замер вписана в DECISION-0068 §5, рамки 1–4 не тронуты.

    Одна норма в ДВУХ записях, расходящихся на живом деле. Раздел 7-1 задаёт разовую дозу полосой возраста («8-10 лет — 15 мл») и ставкой от массы («по 10-15 мг/кг»); обе стоят в одной таблице, и источник нигде не говорит, какая уступает. Ребёнок восьми лет весом 20 кг получает по таблице 360 мг при верхней границе ставки 300 мг, ребёнок 23 месяцев весом 13 кг — 120 мг при нижней границе 130 мг. Расхождение ВЫВОДИТСЯ (KZ-PARA-19/21), обе стороны проверены парой дел, где его нет (26 кг и 11 кг); приоритет между записями сознательно НЕ установлен — это решило бы за нормодателя, какая из его формулировок сильнее.

    Спрос на ставку оказался НЕ ТАМ, где ожидался. Раздел 7-3 задаёт пороги повреждения печени абсолютной массой («10 г и более» — и это у ВЗРОСЛЫХ пациентов, в инструкции к детской суспензии); порога, отнесённого к массе тела ребёнка, документ не устанавливает вовсе. Молчание выведено правилом porog_povrezhdeniya_dlya_rebenka_ne_ustanovlen, а не оставлено пустым NEITHER. Токсикологии алгебра не нужна — весь спрос в дозировании.

    Три границы среза, найденные и засторожённые. (1) Запрет §130 не получает VIOLATED никогда (forbearance даёт только ACTIVE/EXPIRED), и позиция одинакова на деле с превышением суточного предела и без него — KZ-PARA-38/39 покраснеют, когда граница отступит. (2) Дефитер поражает ВЫВОД, а не своё правило: две поражаемые ветки с одной головой не сосуществуют — дефитер первой побеждал вторую (два узла defeat, оба с premise RazresheniyeBezKonsultatsii/unless/1); ветки разведены по головам, общий вывод собран строгими мостами. (3) not P требует установленного отрицания — три правила переписаны положительно либо на дефитеры.

    Попутно: выражение перекрёстных ссылок в scripts/lint.py (проверка 4) требовало у слова «раздел» суффикса (раздел\w+) и потому видело «Разделы 9-4» и «раздела 7-1», но не «Раздел 6-1» — то есть ровно ту форму, которой ссылается акт, делённый на именованные разделы: 14 ложных находок «порог в метке» из 14. Починено.

  • quran.nur — сура ан-Нур целиком: первый акт корпуса, где закреплён весь источник, а не срез по предмету (31.08.2026). Заведён corpus/laws/quran/nur: 11 .law, 64 аята в двух редакциях (мединский мусхаф в передаче Хафса и перевод Саблукова 1894), 128 фрагментов, 66 деклараций align §29, 90 правил (47 строгих, 40 поражаемых, 3 дефитера), 29 шаблонов норм, 12 замыканий §70, 2 прочтения §152 (any_of), 1 приоритет §116, 2 канала суждения §47.3 с органами, названными текстом, 1 процедура §160 (лиан). 45/45 сценариев семейства quran-nur, differential --only quran-nur — 62 из 62 evaluate-вызовов байтово идентичны (liblaw_ffi == lawref), 8 рукописных .lawtest (8/8); разметка §218 132/6 словаря (шесть — пол профиля процедур §159/§160) и 119/0 норм, мёртвых символов 0, посылок в никуда 0, цепь в один конец 1 из 90 с записанным вердиктом, doctor.py — «пробелов нет». §33.1 по ОБЕИМ редакциям: EXECUTABLE 34, SOURCE_ONLY 30, UNEXPLAINED 0 из 64 — все тридцать объявлены границей с причиной, прочитанной по тексту аята. Выравнивание §29 с равными итогами — самая опасная пара редакций корпуса. У обеих по 64 стиха, и совпадение обманчиво: Саблуков СЛИВАЕТ 24:14 с 24:15 и 24:44 с 24:45, а 24:19 и 24:61 РАСЩЕПЛЯЕТ; слияние отняло стих, расщепление вернуло. Сдвиг, выведенный из равенства 64 и 64, дал бы неверный адрес восемнадцати аятам подряд, включая весь блок испрашивания позволения (три поры дня 24:58 стоят у переводчика стихом 57). Там же закрыты два молчаливых дефекта страницы Викитеки: тринадцатый якорь размечен чужим номером id="24:18", и словарь «номер → текст» терял норму о четырёх свидетелях; а блок сносок переводчика без обрезки дописывался прямо в 24:64, и content_hash заверял бы искажённый аят. Статус, выведенный одной нормой и читаемый другой через границу дела: лишение клеветника права свидетельствовать (24:4) разваливает состав четырёх (24:13) в ЧУЖОМ обвинении. Агрегат считает эмпирический предикат, а дисквалификация приходит дефитером — обход барьера §111. Замерена ловушка страт: при поражаемой цепи дефитер состава уходит стратой выше §110 и не поражает ничего МОЛЧА (check и lower зелены, посылка истинна, состав остаётся собранным); починено правовым разбором — 24:6 открывается оборотом, грамматически параллельным началу 24:4, и сура сама разводит супружеский случай в отдельный состав, — а не подгонкой. База молчит там, где молчит сура: ни раджма, ни различения мухсан / не-мухсан (24:2 даёт сто ударов всем — сторож NUR-05/06 по приёму HAJJ-50), ни вечного запрета брака после лиана. Спор о границе изъятия 24:5 разложен на бесспорную часть в базе (приоритет §116 снимает клеймо нечестивца, ответ без options — FALSE_ONLY, а не молчание) и два прочтения §152 о том, достаёт ли изъятие до «أَبَدٗا». Задание уступило закреплённому тексту: в блоках, отнесённых брифом к повествованию, притчам и эсхатологии, прочтение нашло семь прямых повелений (24:21, 24:22, 24:53, 24:54, три в 24:56, 24:63) и две санкции с определимым составом (24:19, 24:23) — заведён модуль 10-amr.law. Нарратив ифка (24:11-20) остался границей с причиной и приложен к пакету делом: сцена NUR-45 прогоняет его факты против нормы кадхфа этого же пакета.

  • he.noahide — семь законов сынов Ноя: акт без единого текста, шесть закреплённых сочинений, и пять молчаливых отказов, найденных им (31.08.2026). Заведён corpus/laws/he/noahide (namespace urn:he:noahide:clir:noahide) — перечень объявлен барайтой (Санхедрин 56a:24, Тосефта Авода Зара 9:4), выведен ПОСЛОВНО из Быт. 2:16 (Санхедрин 56b:5–56b:7), кодифицирован Мишне Тора Мелахим 8–10, оспорен Рамбаном на Быт. 34:13 и датирован по эпохам Раши на Быт. 1:29. Закреплены только свободно распространяемые редакции (Браунер CC-BY, Sefaria Community Translation CC0, Хавель CC-BY, KJV — общественное достояние); перевод Штейнзальца/Корен под условием NC не закрепляется, и отсюда граница среза Талмуда — свободного английского перевода Санхедрин 57a–60a не существует. Измерено: 32/32 сценария семейства noahide, differential --only noahide — 58 из 58 evaluate-вызовов байтово идентичны, 20 рукописных .lawtest (20/20), разметка §218 91/6 (шесть — пол профиля процедур §159/§160), мёртвых символов 0, мёртвых правил 0, стаб-цепей 0, doctor.py — «пробелов нет». §33.1 по первичному документу (Мелахим 8–10): EXECUTABLE 19, SOURCE_ONLY 18, UNEXPLAINED 0 — все восемнадцать объявлены границей с причиной, проверенной по тексту статьи.

    Поправка Ноя — ось ЭПОХ фактом дела, а не машина редакций §31/D1. Решение человека (§47.3): проекция по редакциям требует дат и источника, чьи байты несут редакцию, а Мелахим 9:1 («шесть заповедей Адаму, седьмая добавлена Ною») даты не называет. Поправка делает два действия разом — снимает широкий запрет мясоедения (Раши на Быт. 1:29) и вводит узкий (Быт. 9:4) — и обе половины заякорены в разные тексты. Запрет Адаму взят из Раши, а НЕ выведен из умолчания Быт. 1:29: стих есть дарование трав, и запрет из умолчания был бы выводом формализатора.

    Один плохо стратифицированный дефитер утащил за собой ОСТАЛЬНЫЕ ТРИ. Ранг правила растёт от каждого поражаемого производителя, которого читает его тело, а вычисляется по МАКСИМУМУ среди всех правил с той же головой. Пока acted_accidentally производился поражаемым правилом, вместе с дефитером неумышленности молча перестали работать дефитеры принуждения, недееспособности и птицы: пять сценариев из тридцати двух отвечали TRUE_ONLY вместо NEITHER при зелёных check, lower и differential. Канон подтверждён: производители барьера, который читает дефитер, — только строгие правила.

    Эффект власти §127.2 нельзя класть на предикат, который снимает дефитер. Эффект попадает в базу установленным фактом, и пока power AcceptSevenLaws создавал сам ger_toshav, оговорка Мелахим 8:11 не работала вовсе. Разведено на acceptance_effected (правовой акт состоялся) и ger_toshav (лицо считается пришельцем) — 8:11 отрицает второе, не отрицая первого.

    Пара порогов нашла ПОГЛОЩЁННОЕ правило. Двенадцать месяцев уговоров пленницы (Мелахим 8:7) взяты термом add_calendar_period; пара сцен по обе стороны срока показала, что накануне ответ всё равно TRUE_ONLY — условия статьи уже достаточны по общему 8:10. Собственное действие 8:7 есть ОТПУЩЕНИЕ на волю, и срок гейтит его.

    Редакция без in_force для проекции §31/D1 стоит not_yet НА ЛЮБОЙ ДАТЕ — и нашёл это ЖУРНАЛ ДЕЛА. lawref process-run на первом же деле снял 89 правил из 96 и отвечал «переход недоступен» по пустому пакету. Обычное исполнение проекции не делает вовсе, поэтому 32 сценария, 20 тестов §267 и байтовый differential оставались зелёными; единственный вход, задействующий проекцию, — процессный слой О-5. Лечится окном применимости in_force [@0001-01-01, infinity) у редакций (тот же технический пол, что у окон норм); adopted не объявляется ни у одной — перевод Браунера 2012 года никем не принимался.

    Висячий якорь @source молчит у всех ворот, кроме меры §33.1. Семь правил были заякорены в несуществующий TOS_AZ_9_4 при фрагменте TOS_9_4: check чист, differential сходится байтово, а барайта Тосефты стояла SOURCE_ONLY при семи выведенных из неё правилах.

    Новая единица деления §33.1 в обоих реестрах: talmud_segment — сегмент стороны листа («56a:24» → номер учёта 56a-24, буква стороны остаётся: 56a и 56b суть два разных места), с ветвью daf/ в LOCATOR_RE и русским именем единицы в обеих таблицах boundaries.py. Второй ветвью добавлен word/2-16-N — семь подфрагментов Быт. 2:16 по слову на заповедь: локатор мельче стиха, а знаменателем мера оставляет СТИХ, потому что слово есть единица экзегезы, а не книги Берешит. Классическая ссылка «Тосефта, Авода Зара 8:4» соответствует 9:4 закреплённого текста — сверено по содержанию, как и требовал бриф.

    Попутно: выражение перекрёстных ссылок в scripts/lint.py (проверка 4) не знало двух форм — сокращения с точкой («Быт. 34:13») и листа Талмуда с буквой стороны («Санхедрин 56b:20»), — и штамповало ложный «порог в метке» на каждой метке акта, цитирующего Талмуд. Починено; настоящую находку той же проверки (двенадцать месяцев прозой) видно в пункте выше.

  • su.decree.semidnevka_1940 — Указ ПВС СССР от 26.06.1940 о семидневной неделе: акт, чей предмет — сама неделя, и два молчаливых отказа приоритета §116, найденных им (31.08.2026). Заведён corpus/laws/su/semidnevka-1940 (namespace urn:su:decree:clir:semidnevka-1940) — все семь статей указа плюс вводная формула, единица §33.1 — существующая конвенция point, закреплённая ревизия Викитеки oldid 3538591 (PINNED_UNOFFICIAL_COPY, legalStatus = repealed). Измерено: 34/34 сценария семейства semidnevka, differential --only semidnevka — 58 из 58 evaluate-вызовов байтово идентичны, 3 рукописных .lawtest (3/3), разметка §218 67/0 словаря и 42/0 норм, мёртвых символов 0, посылок в никуда 0, стаб-цепей 0, doctor.py — «пробелов нет». §33.1: EXECUTABLE 7 из 7, ANCHORED 0, SOURCE_ONLY 0, UNEXPLAINED 0; учёт статей 7 из 7 при нуле неучтённых, байтовое покрытие 99,8 %; объявленных границ нет ни одной.

    priority §116 не разрешает наложение двух ЗНАЧЕНИЙ одного отношения — и не сообщает об этом. Три из четырёх строк статьи 1 начинаются с шести часов, и служащий учреждения семнадцати лет на шестичасовом дне подпадает под все три. Выбор «специальная норма по субъекту побеждает общую по виду работ» — решение человека, доведённое теневым протоколом до REQUIRES_JUDGMENT. Дословная форма решения (prefer … over … между головами prodolzhitelnost(r, 7) и prodolzhitelnost(r, 8)) дала на спорном деле ОБА ответа TRUE_ONLY: §107 поражает противоречащие выводы, а два разных значения одного отношения противоречащими не являются. Рабочая форма — барьер плюс unless; сторожа — SEM-01/SEM-02.

    Второй случай того же класса стоил власти §127 места в модели. Изъятие «по спискам, утверждаемым СНК СССР» через эффект власти молча не срабатывало: эффект — поздний производитель статуса, барьер уезжает рангом выше поражаемого правила, ребро §116 между рангами не применяется. Со строгим правилом вместо власти ответ верный. Потеря названа в шапке модуля; власть §127 осталась у директора предприятия (статьи 3 и 4), где акт её действительно создаёт. Сторож — SEM-06.

    Запрет с VIOLATED — две измеренные ловушки. Позиция prohibition §130 в срезе 0.1 не получает VIOLATED никогда, поэтому статья 3 записана duty с целью maintenance. Замерено: (1) VIOLATED даёт только ЯВНЫЙ отрицательный факт условия — молчание открытого мира оставляет ACTIVE; (2) замыкание §70 уважает факты дела, но НЕ выводы правил — поставленное на выводимый предикат, оно даёт BOTH и позицию CONFLICTED. Отсюда: условие цели — not ushel_samovolno(r), замыкание на ЭМПИРИЧЕСКОМ предикате. Пары SEM-11/SEM-12 и SEM-08P/SEM-09P.

    Воскресенье не вычисляется, а называется. Терма «день недели по дате» в поверхности Core 0.1 нет; соответствие «дата → день недели» входит фактом дела, утверждение указа — отдельным assert sedmoy_den_nedeli(Voskresene) с якорем §194. Библейский корень недели, планетарная арифметика mod-7 и ISO-нумерация недель объявлены записанными ожиданиями сессии — предмет отдельных пакетов. Приговор народного суда — канал суждения §47.3 (SEM-15, REQUIRES_JUDGMENT). Прогул указ не запрещает, а наказывает, и обязанности воздержания от него в пакете нет.

  • Оверлеи меток §218 — дополнительные языки отображения вне CLIR (DECISION-0070, 31.08.2026). Файл i18n/<lang>.json при корне пакета (формат law.i18n/0.1: один язык на файл, ключи — локальные имена узлов) вливается в копию документа только презентационным слоем: lawref verbalize --labels …, MCP-ресурс law://<пакет>/verbalized[/<язык>], операция verbalize моста рабочего стола (поле labels, отказ ORACLE_LABELS). Реализация — engines/lawref/lawref/i18n.py (apply_overlays идемпотентен, вход не мутирует, висячий ключ и чужой пакет — громкие отказы). Ссылки и невозвратность перевода держат ворота verify/ci/gates/coverage/check_i18n_overlays.py (шаг 41, канарейка) с храповиком corpus/ratchets/i18n-ratchet.json; discover_resources пинует оверлеи в law.lock 0.2 (label-overlay/presentation, аддитивное расширение lockfile.schema.json, TS-типы перегенерированы). Пилот — de-vor-dem-gesetz/en (12 объявлений, 9 норм); ru-выдача вербализатора с en-оверлеем и без него байтово равна. Конвенция раскладки — docs/PACKAGE-LAYOUT.ru.md («Граница inline-меток и i18n/»).

  • grc.aristoteles.laws_of_thought — три закона мысли Аристотеля, акт, чьё главное утверждение ядро нарушает по построению (31.08.2026). Заведён corpus/laws/grc/laws-of-thought (namespace urn:grc:aristoteles:clir:laws-of-thought) — «Метафизика», книга IV (Γ) целиком, все восемь глав, русский перевод А. В. Кубицкого, закреплённая ревизия Викитеки (oldid 5642950). Единица §33.1 — глава; конвенция существующая (named_section, локатор section/N), новой заводить не понадобилось. Измерено: 18/18 сценариев семейства laws_of_thought, differential --only laws_of_thought — 40 из 40 evaluate-вызовов байтово идентичны, 5 рукописных .lawtest (5/5), разметка §218 47/0 словаря и 32/0 норм, мёртвых символов 0, мёртвых правил 0, стаб-цепей 2 из 30 правил (обе — терминальные выводы главы 8, вердикт в шапке модуля), doctor.py — «пробелов нет». §33.1: EXECUTABLE 6, INTERPRETED 1, ANCHORED 1, SOURCE_ONLY 0, UNEXPLAINED 0 из восьми глав; объявленных границ нет ни одной.

    Исключённое третье — задокументированное расхождение акта с трёхзначной семантикой ядра. Глава 7 (1011b23—24) объявляет промежуточное невозможным и первой из следующих отсюда нелепостей называет «было бы возможно и то, что кто-то не будет говорить ни правду, ни неправду». На деле, где предикация не установлена, движок отвечает ровно так: alethes_legei = NEITHER и pseudes_legei = NEITHER (§62, §65—§67 — объявленная семантика открытого мира). Вторая половина того же расхождения — ограничение §93.1 OudenAnaMeson: объявлено, понижено в CLIR, на деле не исполняется, issue ноль. Семантика под акт НЕ подгонялась (инвариант 5): замыкание §70 над hyparchei сделало бы закон исполнимым и стёрло бы факт, ради которого акт заведён — отказ от него записанное решение человека. Зеркало — лазейка Гёделя в us.constitution.

    Тождество якорено прочтением, а не выдумано нормой. Прямого фрагмента у закона тождества в книге Γ нет; пакет якорит его interpretation LectioSemantike к эленктическому доводу главы 4 (1006a28—b13, «не означать что-то одно — значит ничего не означать») с @source внутри прочтения. Прочтение единственное поставляет посылку semainei_hen — отсюда тройка сцен на одних фактах: без прочтения обязанность воздержания ACTIVE, с прочтением VIOLATED, с прочтением и объявленной многозначностью слова снова ACTIVE («разве лишь при многозначности слова» — оговорка самой главы, отрицательный тест).

    Довод против Протагора вычислен. Учение «вещи будут для них такими, за какие они их примут» заведено прочтением LectioProtagorae (база его отвергает): на показаниях двоих оно даёт BOTH с unresolvedReason: INCOMPARABLE, пустыми defeatedCandidates и priorityEdges — коллизия §115. Базовая теория на тех же фактах не порождает ни одной записи conflicts: глава 6 выводит «представляется ЭТОМУ», и показания перестают быть членами одного противоречия.

    Ограничение движка, найденное этим актом и НЕ являющееся расхождением differential. Строгое правило, читающее предикат, производимый только правилом внутри interpretation, молча ломает свои ПОРАЖАЕМЫЕ потребители: при строгом посреднике потребитель даёт NEITHER, при поражаемом — FALSE_ONLY, при том что сам вывод в обоих случаях TRUE_ONLY и issue нет ни одного (минимальная пара probe.p6/p7). Причина — состав, запрещённый в базе LDC-E4103 (LATE_STATUS_PRODUCER §111): у отношения нет строгих производителей, а статический сторож не видит производителей внутри interpretation. Обе реализации отвечают одинаково; правило пакета переписано поражаемым, семантика не менялась, находка записана в шапке 04-elenchos.law и в STATUS.md.

    Провенанс объявлен вместе с неопределённостью. Викитека называет переводчиком Кубицкого и издание «Соцэкгиз, 1934», источником байтов — lib.ru, чьё печатное издание не назвал никто; греческие слова в байтах стоят латинской транслитерацией («(dianoeton)», «(logos)»), а перевод Кубицкого переиздавался в переработке 1976 года. Отсюда PINNED_UNOFFICIAL_COPY, unofficial, verifiedAgainstSource = false и записанная оговорка о правах. Закон достаточного основания (Лейбниц) вне скоупа: другой источник, другой акт.

  • vat.computus — пасхалия: юлианское и григорианское вычисление дня Пасхи, первый потребитель остатка mod в корпусе (31.08.2026). Заведён corpus/laws/vat/computus (namespace urn:vat:clir:computus): булла «Inter gravissimas» Григория XIII (срез из пяти пунктов), авторское изложение арифметики обеих пасхалий в форме Гаусса и свидетельство Беды (HE III.25—26, подлинник и перевод). Весь счёт целочислен — четыре деления с остатком в одной цепи (mod 19, mod 4, mod 7, mod 30) плюс пятое в гарде второго исключения; Date-значений пакет не строит ни разу, календарь §85 и единицы срока §86 не нужны, потому что воскресность сидит внутри воскресной поправки. Заведена новая объявляемая единица §33.1 unit: "la_paragraph" (латинский нумерованный пункт) в обоих реестрах: выражение то же, что у point и en_point, объект отдельный — признаки исполнимого содержания берутся ПО ЯЗЫКУ конвенции, и объявив буллу английской, ворота искали бы в латыни «must» и штамповали бы любую границу молча.

    Поражаемый слой у самого вычисления, измеренный мутантом. Два исключения Гаусса — дефитеры над арифметической базой. Мутант со снятой оговоркой и без правил исключений даёт на 1981 годе 57 марта (26 апреля) и громкое easter_outside_window, на 1954-м — 56 марта (25 апреля), которое окно НЕ ловит: 25 апреля есть законный предел статьи 12. То есть правило окна стережёт отсутствие первого исключения и не стережёт отсутствие второго — сторожем второго остаётся только пара сцен VAT-COMP-14/15. LDC-E4103 учтён разом: у easter_march_day есть поражаемый производитель, поэтому вся цепь ниже объявлена defeasible.

    Две действующие пасхалии без приоритета §116. Юлианская не закрыта 1582 годом ни окном редакции, ни правилом: пункт 14 буллы обязывает перечисленный в нём круг лиц и о счёте тех, кто булле не подчинён, не говорит. Расхождение и совпадение выводятся на деле после приведения к общей оси (2025 — совпадение, 2026 — расхождение 5 против 12 апреля); данные несимметричны намеренно. Следствие расхождения — двор, празднующий Пасху дважды, — выводится правилом и подтверждается закреплённой главой Беды; дней 664 года пакет не называет и говорит об этом громко.

    Найдено: у A3-таблицы нет моста в норму НИ В ОДНОМ режиме. mode: rules не даёт назвать <id таблицы>/input (известно с 29.08.2026), mode: function отвергает вызов по голому имени статически — LDC-E2105 «функция не объявлена», даже когда id таблицы задан как urn:<ns>#<Имя> (новое измерение). У A3 параметра мост есть, у таблицы нет ни одного; вход подаётся делом (приём fiqh.hajj), и .lawtest до таблицы не дотягивается — григорианские рукописные тесты подают вековые постоянные фактами дела, называя причину в шапке.

    Измерено: 38/38 сценариев семейства computus, differential --only computus — 38 из 38 evaluate-вызовов байтово идентичны (liblaw_ffi == lawref), зонд Lean по акту 38 принято / 0 отвергнуто, 4/4 рукописных .lawtest; §33.1 EXECUTABLE 5 из 5 по булле и 13 из 14 по изложению при UNEXPLAINED 0 у обоих (к Беде мера по единицам объявлена неприменимой); §218 — 41/0 словаря и 40/0 норм; стаб-цепей 0, мёртвых символов 1 (WhitbyYear, в documented с причиной); doctor.py vat/computus — «пробелов нет». Разбор — corpus/laws/vat/computus/audit.ru.md и README.ru.md.

  • un.charter — Устав ООН, срез гл. I/V(голосование)/VII + ст. 4, 18, 92, 103, 108, 111 (31.08.2026). Новая группа un дополнена пакетом corpus/laws/un/charter (urn:un:corpus:clir:charter), правопорядок International. Две закреплённые равно аутентичные редакции (ru/en, ст. 111), фрагменты по статье — генератор corpus/tools/sources/sync/sync_un_charter_fragments.py. 26 из 111 статей в объявленном срезе; остальные закреплены байтами без фрагментов.

    Три несущие находки. (1) Статьи 43-47 формализованы буквально и мертвы по тексту: обязанность предоставить войска (ст. 43) обусловлена особым соглашением, которого не заключено НИ ОДНОГО за историю Устава, — обязанность недостижима на любом сценарии (не дефект пакета). (2) Буква против практики ДВАЖДЫ: континуитет России и передача места КНР (ст. 23) — interpretation добавляет permanent_member_seat_held_by преемникам поверх неотменённой буквы (пять постоянных членов названы поимённо статьёй 23 без поправки по статье 108); воздержание постоянного члена (ст. 27, п. 3) — буква блокирует решение, практика с 1946 года (Намибия, 1971) — нет, и ОБА предиката держатся одновременно на одних фактах. (3) Статья 103 (приоритет обязательств по Уставу) выражена обычным выводом, а не priority_decl: приоритет между обязательствами по разным договорам не умещается в стратификацию одного пакета.

    Три оси статьи 51 (порог «вооружённого нападения», превентивная самооборона по стандарту Кэролайн, самооборона против негосударственных акторов после резолюций СБ 1368/1373) — каждая своя interpretation, добавляющая путь к выводу поверх бесспорного ядра (тяжкая форма применения силы государством, Никарагуа п. 191).

    Ограничение движка, найденное этим актом. unless-условие презумпции, читающее напрямую ДРУГУЮ презумпцию, резолвится в BOTH вместо FALSE_ONLY (нет чистого закрытия дефизибл-слоя внутри дефизибл-слоя); interpretation … { include PresumptionName; } не гейтит presumption — она срабатывает независимо от выбора прочтения. Оба обойдены на месте (строгий мост; строгое правило вместо презумпции) и задокументированы в коде.

    Измерено: §33.1 EXECUTABLE 20, SOURCE_ONLY 6 (границы с причиной: ст. 1, 24, 26, 46, 92, 111), UNEXPLAINED 0, INTERPRETED 0 из 26 статей — доля буквы/прочтения точнее видна на уровне правил (6 из ~59 норм только под выбранной interpretation). §218: 91/6 словаря (шесть неразмеченных — пол профиля процедур procedure ChapterVIISequence, тот же остаток, что у fiqh-hajj/fiqh-sawm/kz-tuystyq), 65/0 норм. 30/30 сценариев семейства un_charter (corpus/kz/acts/un_charter.py) под differential --only un_charter (36 evaluate-вызовов, liblaw_ffi == lawref байтово) и под зондом Lean (36/36 сертификатов принято, 0 отвергнуто, 196 шагов правил доказано, граф движка замкнут §179).

  • gb.declaration.balfour_1917 — Декларация Бальфура (1917), новая единица §33.1 «оборот» без якоря строки (31.08.2026). Новая группа gb, пакет corpus/laws/gb/balfour-1917 (urn:gb:declaration:clir:balfour-1917), три закреплённых источника: письмо Бальфура (Викитека, Page:-ревизия), срез Мандата на Палестину 1922 года (преамбула, ст. 2, ст. 25 + резолюция о Трансиордании) и срез Белой книги Черчилля 1922 года (ООН, unispal). Письмо — одно 67-словное предложение без заголовков-статей, и для его четырёх ступеней и пяти рамочных оборотов заведена новая объявляемая конвенция §33.1 unit: "turn" (turn_convention в verify/ci/gates/sources/check_source_pinning.py, turn_heads в corpus/tools/lib/act_split.py, новая ветка LOCATOR_RE) — первая в корпусе единица деления, чей маркер не занимает строку целиком.

    Измерено: 98 узлов CLIR (18 правил, 5 interpretation, 2 interpretation_group, 1 external_decl); 7/7 рукописных .lawtest; 6/6 сцен семейства balfour (corpus/kz/acts/balfour.py) под differential --only balfour (11 evaluate-вызовов, liblaw_ffi == lawref байтово) и под зондом Lean (11/11 сертификатов принято, 0 отвергнуто). §33.1 по primarySource (письму): EXECUTABLE 3, ANCHORED 6, SOURCE_ONLY 0, UNEXPLAINED 0 из 9 оборотов. §218: 34/0 словаря, 22/0 норм. Новый правопорядок MandateForPalestine (verify/ci/gates/repo/check_jurisdiction_vocabulary.py) — Мандат как инструмент Лиги Наций, отдельно от United Kingdom (письмо и Белая книга).

    Находка, расходящаяся с брифом. Преамбула Мандата пересказывает письмо БЛИЗКО к тексту, но ОПУСКАЕТ дословно «and will use their best endeavours to facilitate the achievement of this object», перенося этот вес на ст. 2 другими словами («shall be responsible for placing the country under such … conditions as will secure the establishment»). Бриф утверждал дословное цитирование; закреплённый текст говорит другое, и решает он.

    Деонтический градиент и асимметрия. «View with favour» — не норма, а идентификация бенефициара (ANCHORED, не SOURCE_ONLY); «best endeavours» — duty с каналом суждения §47.3 (Постоянная мандатная комиссия отвечает на достаточность усилий, REQUIRES_JUDGMENT без её ответа); обе оговорки — prohibition, не гасящие обязанность (две позиции стоят на одном деле рядом), а асимметрия защищаемых интересов — два непересекающихся закрытых списка (civil+religious для нееврейских общин Палестины, rights+political status для евреев диаспоры), проверенные парами .lawtest в обе стороны. Две развилки §152 (selection any_of, не exactly_one — измерено, что последняя без выбора метит ВЕСЬ кейс INTERPRETATION_REQUIRED, а не только предикат развилки): охват «Palestine» ст. 2 против изъятия Трансиордании (флип на ОДНОМ факте дела, BAL-08/09) и смысл «national home» (три прочтения, две — из ОДНОГО отрывка Белой книги 1922 года разными акцентами).

  • btc.consensus — ограниченная реконструкция правил консенсуса Биткойна по расходящимся свидетелям (31.08.2026). Заведены новая группа btc и пакет corpus/laws/btc/consensus (urn:btc:clir:consensus). Пакет закрепляет байты Bitcoin Core v27.2, BIP-30/34/9/68/113/141, дефектной страницы Bitcoin Wiki и whitepaper как свидетеля намерения; восстанавливает срез заголовков, UTXO-транзакций, A3-субсидии, chainwork и BIP-9. Измерено: 10/10 сценариев btc, differential --only btc зелёный, 7 рукописных .lawtest, включая исполнимое свойство §270 для выводимого предела 21 млн, и Lean-сертификат расписания субсидии. Разметка §218 — 91/6 словаря (шесть служебных узлов lowering BIP-9) и 71/0 норм; §33.1 — EXECUTABLE 7, SOURCE_ONLY 2, UNEXPLAINED 0 из девяти статей.

    Границы — часть результата. Криптография и 256-битное сравнение PoW остаются эмпирическими фактами дела: зонд показал предел i64, что записано как errata-кандидат BTC-256-I64, а не подменено ложной арифметикой. Whitepaper-формула «самая длинная цепь» не сглажена с кодовой «наибольшая работа»; пара сценариев выводит расхождение. Аудит полноты — corpus/laws/btc/consensus/audit.ru.md.

    Финальный прогон намеренно сужен до btc; статические общекорпусные проверки не заменяют проверку 10 исторических сценариев и 15 differential-вызовов этого пакета.

  • chem.rules расширен вторым заходом: одиннадцать разделов, 162 правила, профиль §274 запросом, английский оверлей §218 (31.08.2026, вечер). Четыре новых раздела: ряд активности металлов (ст. 19-21: линейный порядок двенадцатью позициями и одним правилом сравнения; исключение щелочных металлов — дефитер по группе со strict-правилом «что происходит вместо»; пассивация свинца — дефитер по паре, чьи анионы — те же Chloride/Sulfate из перечней раздела II), закон смещений Содди — Фаянса (ст. 22-23: первая арифметика в ГОЛОВЕ правила — daughter_numbers(d, z - 2, a - 4); сверка заявленного дочернего ядра расщеплена §206 на заряд и массу), перициклические правила отбора (ст. 24-25: циклоприсоединение и сигматропный сдвиг тем же mod 4 — граница, которую ст. пределов раньше объявляла, СНЯТА), геометрия валентных пар (ст. 26: закрытая таблица восемью строгими правилами — A3 отвергнут LDC-E8306, выход строки — доменная константа; стерическое число вычисляет норма). Новое семейство chem_argumentation спрашивает профиль §274 запросом kind: "argumentation" и сторожит классы §274.6 — REJECTED/SKEPTICALLY_ACCEPTED на трёх спорах пакета. Английский оверлей — 347 переводов, i18n-ratchet (словарь 185, нормы 162), состав держит генератор строкой в run_all.sh. Итог: 114/114 сценариев в 12 семействах, differential 210 вызовов байтово (шесть вызовов с прочтениями вшиты в case.options — до этого они законно пропускались сверкой, и замечено это по числу, не выросшему после добора сценариев), Lean 210/0, покрытие правил прогоном 162/162 (обход proof-графов снова нашёл мёртвые — десять при зелёных сценариях, все закрыты), мера EXECUTABLE 24 / INTERPRETED 1 / UNEXPLAINED 0, байты 90,1 %. STATUS.md и corpus/laws/chem/rules/audit.ru.md обновлены тем же коммитом.

  • **chem.rules — правила общей химии- chem.rules — правила общей химии с исключениями: первый акт группы chem и поражаемый слой в чистом виде (31.08.2026). Заведён corpus/laws/chem/rules: новая группа chem, восемь .law по семи разделам изложения, 108 правил (strict 57, defeasible 39, defeater 12), 4 объявленных приоритета §116, 6 замыканий §70, 3 прочтения §152 в одной группе, 1 фикция §147, 2 constraint §93.1, 68 сценариев в семи семействах, differential 153 вызова байтово идентичны (liblaw_ffi == lawref), Lean — 159 сертификатов приняты, 0 отвергнуто, батарея §267 — 14 рукописных .lawtest, разметка §218 127/0 словаря и 108/0 норм, стаб-цепей 0 из 108 правил, покрытие правил прогоном 108 из 108, мёртвых символов 0, посылок в никуда 0, doctor.py — «пробелов нет». Мера §33.1: EXECUTABLE 16, INTERPRETED 1, ANCHORED 0, SOURCE_ONLY 0, UNEXPLAINED 0 из 19 статей; учёт единиц 19 из 19, объявленных границ 2 (ст. 1 и ст. 19, обе прошли проверку по тексту БЕЗ поля despite), байтовое покрытие 88,6 % (26 579 из 29 985). Полный аудит конструкций — corpus/laws/chem/rules/audit.ru.md (16 видов деклараций из 44; двадцать восемь неиспользованных разобраны поимённо, вердикта «работа» не получил ни один).

    Заголовочный результат — правило Хюккеля гардом pi mod 4 == 2, и остаток здесь РАЗЛИЧАЕТ классы вычетов. Errata E-0062 (31.08.2026, тот же день) закрыла разрыв «объявлен и неконструируем» и назвала правило Хюккеля внешним заказчиком операции; здесь оно им становится дважды — в правиле ароматичности (остаток 2 против 0) и в правилах отбора Вудворда — Хоффмана, где тот же остаток при ДВУХ независимых признаках даёт четыре исхода. Оговорка к брифу: ПЕРВЫМ употреблением mod в корпусе пакет не является — bio.codon заводился параллельно и проверяет рамку считывания гардом (p - origin) mod 3 == 0. Различие содержательное: там остаток сравнивается с нулём (делимость), здесь — с двумя значениями.

    Источник — авторское изложение (19 статей, 29 985 байт, PINNED_OFFICIAL_BYTES), и все его числа сверены ДО написания статей. Прецедент faraid.shares и kz.tuystyq: у учебного правила нет ни издателя, ни официального текста, и файл изложения сам есть публикация. Сверено с общепринятой учебной формулировкой: перечни исключений растворимости, +2 у кислорода во фториде кислорода, 8/3 у железа в Fe3O4, степени +7 в перманганате, +6 в дихромате и −3 в аммонии, пара исключений Ауфбау (Cr 3d5 4s1, Cu 3d10 4s1) при следующих правилу V и Zn, восемь элементов расширенного перечня, три рода исключений из октета (BF3 — секстет, PCl5 и SF6 — расширенная оболочка, NO — одиннадцать валентных электронов), ограничение пероксидного эффекта одним бромоводородом, четыре клетки Вудворда — Хоффмана и числа пи-электронов бензола, пиридина, циклопропенильного катиона, циклобутадиена, циклооктатетраена и его дианиона.

    «ПОБЕЖДАЕТ» — НЕ ФИГУРА РЕЧИ, И ЭТО ИЗМЕРЕНО МУТАНТАМИ. Исключение записано правилом с ОТРИЦАТЕЛЬНОЙ головой над тем же атомом, что и общее правило, а порядок — отдельной декларацией §116. На OF2 запрос об общем правиле кислорода даёт FALSE_ONLY, а не NEITHER. Вырезанная декларация приоритета даёт BOTH — не молчание, а неразрешённое противоречие на каждом фториде кислорода; вырезанный конъюнкт planar(m) делает циклооктатетраен антиароматическим по одному счёту электронов; снятая строка выбора прочтения роняет тест 14 в NEITHER. Все три мутанта прогнаны, остальные тесты у каждого зелены.

    ТРИ ТВЁРДОСТИ НА ОДНОЙ СИСТЕМЕ, И МЕХАНИЗМ ПОВТОРЁН НА ВТОРОМ ПРЕДМЕТЕ. Паули — constraint §93.1 ПЛЮС громкое правило (§93.1 на деле не исполняется); Ауфбау — defeasible с поимёнными дефитерами и замыканием перечня; Хунд — предпочтение, при котором непредпочтённое размещение остаётся ДОПУСТИМЫМ. Правило октета повторяет устройство Ауфбау на другом предмете намеренно: один механизм на двух нормах доказывает, что он принадлежит языку, а не одной удачной статье. Дублет при этом — НЕ исключение, а отдельное правило: у водорода октет неприменим вовсе (octet_rule_applies даёт FALSE_ONLY), а не «нарушен и объяснён»; запиши дублет исключением — и пакет утверждал бы, что октет к водороду применим и нарушен.

    НАПРАВЛЕНИЕ ПРЕЗУМПЦИИ У РАЗНЫХ КЛАССОВ РАЗНОЕ, А СВЕРХ НЕГО ЕСТЬ ЧИСЛОВАЯ ШКАЛА. Хлориды и сульфаты предполагаются растворимыми, карбонаты — нерастворимыми, нитраты не предполагаются вовсе. Ст. 10 добавляет шкалу в граммах на сто миллилитров с двумя порогами, и качественное отнесение с количественным независимы и могут разойтись — расхождение объявляется громким правилом, а не устраняется предпочтением. Свидетелей расхождения два, и оба настоящие: хлорид свинца (0,99 г — нерастворим по перечню, малорастворим по шкале) и карбонат таллия(I) (5,2 г — нерастворим по презумпции ст. 9, растворим по шкале, потому что таллий(I) ведёт себя как щелочной металл, не будучи им).

    A3 ОТВЕРГНУТ ДИАГНОСТИКОЙ, А НЕ ДОГАДКОЙ. Шкала растворимости просится строками «катион × анион → граммы», но колонка такой таблицы обязана быть доменной константой: LDC-E8306 отвергает колонку типа EntityRef словами «у него нет universe §A3.3.1, и значение такого типа не строится термом среза 0.1» — проверено пробой на живой таблице с law.lock 0.2. Закодировать катион целым числом значило бы выдать доменную константу за величину.

    ТРЕК О НАШЁЛ ДВЕ НАСТОЯЩИЕ ВЕЩИ И ОДИН ПРОБЕЛ В СЕБЕ. (1) lawref loophole обнаружил, что у редакции не было окна действия: проекция §31/D1 снимала все 108 правил с причиной CHEM_RU: not_yet, то есть право пакета было ПУСТЫМ для всякого потребителя, идущего через проекцию, — при 68 зелёных сценариях, которые зовут оракула напрямую. Починено объявлением in_force [@0001-01-01, infinity) при по-прежнему отсутствующем adopted; тот же класс уже стоил окна пакету usus.corpus.ochered. (2) Обход proof-графов нашёл три правила, не срабатывавшие ни разу при 65 зелёных сценариях — закрыты, итог 108 из 108. (3) smt_witness.py закрыл 2 скалярные цели из 11 и на двух ответил «binary-операция mod вне среза»: errata E-0062 перечислила пять мест, обязанных знать остаток, и SMT-ветвь пути 3 в перечень не попала — заголовочная операция этого пакета для неё невидима.

    ГРАНИЦЫ НАЗВАНЫ ПОИМЁННО (ст. 19). Равновесия, кинетика и энергетика — непрерывная математика, вне поверхности §35. Формула вещества не разбирается. Правило n + l не ВЫВОДИТ конфигурацию, а проверяет заявленную. Учебное объяснение расширенной валентной оболочки участием d-орбиталей современной квантовой химией не принимается, и изложение прямо отказывается его приводить, оставив в правиле проверяемый отбор по номеру периода. Сигматропные и циклоприсоединительные правила отбора объявлены границей, а не умолчаны.

  • eo.corpus.fundamento — Fundamento de Esperanto: конституция языка, у которого нет государства (31.08.2026). Заведён corpus/laws/eo/fundamento: новая группа eo и новый правопорядок Esperantismo, семь .law, 28 правил, 22 сценария семейства fundamento, differential 35 вызовов байтово идентичны (liblaw_ffi == lawref), Lean — 35 сертификатов принято, 0 отвергнуто, разметка §218 78/0 словаря и 37/0 норм, стаб-цепей 0 из 28 правил, мёртвых символов 0, посылок в никуда 0, doctor.py — «пробелов нет». Шесть закреплённых документов официальной публикации Akademio de Esperanto, 28 фрагментов. Мера §33.1 по единицам деления НЕПРИМЕНИМА и записи в базе глубины не имеет: заголовков «Статья N» нет ни в одном документе (Antaŭparolo — сплошная проза), а заводить конвенцию под голый «N.» хуже молчания — он встречается в перечислениях внутри абзацев. Байтовое покрытие двух учредительных документов — 99,3 % (Antaŭparolo) и 88,1 % (Булонская декларация); итоговые 8,0 % по шести документам отражают намеренно невзятые слои (грамматика, словарные дополнения), а не пробел.

    Предмет — не грамматика, а механизм, который её удерживает. Формализована конституционная механика: чем основание обязательно, кто и что вправе с ним сделать, и почему старая форма не перестаёт быть правильной оттого, что появилась новая. Учредительная норма закреплена формой entrenchment §D4 по прецеденту последней оговорки статьи V Конституции США.

    Ядро — власть ДОБАВЛЯТЬ при отсутствии власти МЕНЯТЬ, и обе половины проверены ОТДЕЛЬНО (EO-FUND-01 против 02): пакет, умеющий сказать только «изменение не прошло», от сломанного правила официализации неотличим. Три ступени статуса взяты не из головы, а из введения к Девятому официальному дополнению 2007 года, где Академия говорит это сама: официализация «ne signifas, ke la radiko fariĝas Fundamenta», ибо фундаментально лишь то, что стоит в «origina netuŝebla Fundamento», а сама официализация имеет характер «forta rekomendo» — «devige gvidi la lingvouzon la Akademio nek povas, nek volas».

    АРХАИЗМ — УСТАРЕВШЕЕ, НО ДЕЙСТВИТЕЛЬНОЕ: ВЫРАЗИМО, и не конструкцией, а разделением двух отношений. Это главный замер пакета. valida выводится из fundamenta и НЕ читает ни rekomendata, ни arhaisma; слей их — и вытеснение формы стало бы неотличимо от её отмены, ради различения которых написан весь акт. Пара EO-FUND-04/05 держит обе половины: новая форма официализована, старая одновременно arhaisma И valida; попытка объявить её недействительной не проходит. Отсутствие власти отмены выражено ПОЛОЖИТЕЛЬНО — власть §127 с valid_when на отсутствующее право плюс иммунитет §128 с приоритетом §116, — иначе оно было бы невидимо: без узла §127 попытка не находила бы адресата, и дело отвечало бы молчанием вместо недействительности.

    Запрет менять основание УСЛОВЕН, а не определён, и это проверяемо делом. Первый абзац Antaŭparolo даёт единственный путь: правительства главнейших государств принимают язык особым законом → избранный ими комитет получает право «fari … ĉiujn deziritajn ŝanĝojn». Условие не наступило с 1905 года ни разу, но EO-FUND-02A обязан давать действительное полномочие в мире, где оно выполнено, — иначе формализация утверждала бы о запрете больше, чем текст; 02B держит вторую сторону (двух условий из трёх мало). Соотношение этой оговорки с безусловным «neniu havas la rajton fari ŝanĝon» декларации — правовой выбор, а не технический: он вынесен человеку и решён прочтением A (совместимость), альтернатива записана в README пакета как отвергнутая, а не умолчана.

    Число из брифа разошлось с числом из акта, и в акт пошло число из акта. Бриф называл девять Oficialaj Aldonoj (1909–2007); закреплённый источник называет ДЕСЯТЬ — Десятое утверждено 24 сентября 2023 года. Ось редакций построена по закреплённым датам двух крайних дополнений: algoritm/o официален с 10 марта 2007, kazaĥ/o — с 24 сентября 2023, и пара EO-FUND-06A/06B проверяет флип с точностью ДО СУТОК (23-е против 24-го), а 06C/06D доказывает, что первая пара говорит о дате, а не о пустоте словарного слоя.

    Пять языковых версий грамматики — редакции БЕЗ главного текста. Версии на эсперанто не существует вовсе (заголовок источника — «FUNDAMENTA GRAMATIKO … EN KVIN LINGVOJ»), поэтому пять редакций одного источника равноправны по построению, а не по объявлению: все несут officiality official и не связаны отношением вытеснения. Правило сверки при неясности легло ПРАВИЛОМ, а не каналом §47.3: сверка даёт результат механически, а канал обязывал бы ждать орган, которого текст здесь не называет. Расхождение версий в пакете не гипотетическое — примечание о суррогатной орфографии четыре версии дают перечнем (ch, gh, hh, jh, sh, u), английская правилом, и Antaŭparolo называет виновника поимённо: ошибки оставлены неисправленными «precipe en la angla parto».

    Уточнён записанный класс молчаливого отказа. Неравенство над сущностями в теле правила известно как ТИХОЕ: у entity-переменных голова молча остаётся NEITHER, правило даже не попадает в NON_EXECUTABLE_RULE. Над аргументами-КОНСТАНТАМИ тот же класс оказался ГРОМКИМ — issue TYPE_ERROR на обеих сторонах сверки (EO-FUND-07/07A). Починка не в другой регулярке: нужное различие не в том, что версии разные, а в том, что одна версия не бывает ясной и неясной разом, и место ему — ограничение §93.1 о связности дела.

    Снято подозрение на молчаливый отказ в чужом пакете. Форма protected_effect_terminate встречается в корпусе один раз (us/constitution/equal-suffrage.law) и не перечислена ни в spec/grammar.ebnf, ни в prose, ни в парсере поиском по имени — то есть могла разбираться как metadata_item, оставляя иммунитет без защищаемого эффекта. Проба сняла подозрение: обе формы понижаются в байтово тот же payload {kind: terminate}. Недокументированный алиас, а не отказ.

    Одна честная граница языка названа, а не обойдена. «Ĉio alia … estas nur verkoj privataj» есть дополнение замкнутого множества: посылкой было бы not fundamenta(e), а not требует УСТАНОВЛЕННОГО отрицания, которого на обычном деле нет — правило молчало бы, выглядя работающим. Честная форма — замыкание §70, вне среза v1; предикат-пустышка, ничего не выводящий, снят вместе с двумя другими неупотреблёнными объявлениями после ворот check_dead_symbols.

  • quran.atima — пищевые запреты Корана и оговорка о вынужденном: первый акт корпуса, где нормой является само писание и больше ничто (31.08.2026). Заведён corpus/laws/quran/atima: новая группа quran, восемь .law, 43 правила (25 строгих, 12 поражаемых, 6 дефитеров), 5 шаблонов норм, 8 замыканий §70, 3 толкования §152, 42 сценария семейства atima, differential 75 вызовов байтово идентичны (liblaw_ffi == lawref), батарея §267 — 10 рукописных .lawtest + 69 порождённых, все зелёные; разметка §218 60/0 словаря и 47/0 норм, мёртвых символов 0, стаб-цепей 0. Мера §33.1 по подлиннику: EXECUTABLE 18, SOURCE_ONLY 4, UNEXPLAINED 0 из 22 аятов; по переводу — 19, 4, 0 из 23 стихов.

    Почему собственная группа, а не fiqh. У fiqh.hajj и fiqh.sawm рядом с Кораном стоит авторское изложение доктрины, и правила держатся в основном на нём; у fiqh.zakat, fiqh.wasiyya, fiqh.nikah и fiqh.taqlid аяты названы локаторами внутри статей изложения и источниками не являются вовсе. Здесь изложения нет — ни хадиса, ни мазхаба, ни ханафитской базы, — и каждое правило стоит на аяте. Группа кодирует происхождение акта, и fiqh назвал бы доктриной то, в чём доктрины нет. Решение человека, точка §47.3 фазы 0; прецедент fiqh.hajj с primarySource = QURAN_HAJJ был предъявлен и отклонён.

    ВЕСЬ ПОРАЖАЕМЫЙ СЛОЙ ВЫВЕДЕН ИЗ ЗАКРЕПЛЁННЫХ БАЙТОВ ПИСАНИЯ. Пермиссивная презумпция, перечень запретного, два дефитера ограниченной области и оговорка о вынужденном — ни одно из этих звеньев не заимствовано у доктрины. Замыкание перечня объявлено САМИМ текстом ЧЕТЫРЕЖДЫ независимо: ограничительное «إِنَّمَا حَرَّمَ» в 2:173 и 16:115, «لَّآ أَجِدُ … إِلَّآ» в 6:145 и прямое утверждение о подробном изложении запретного «وَقَدۡ فَصَّلَ لَكُم مَّا حَرَّمَ عَلَيۡكُمۡ» в 6:119. Задание называло опорой один 6:145 — три остальных найдены чтением.

    ЗАПРЕЩАТЬ ЗАПРЕЩЕНО — ВТОРОЙ ДЕОНТИЧЕСКИЙ СЛОЙ, КОТОРОГО НЕ БЫЛО В ЗАМЫСЛЕ. 5:87 («لَا تُحَرِّمُواْ طَيِّبَٰتِ مَآ أَحَلَّ ٱللَّهُ لَكُمۡ») и 16:116 («وَلَا تَقُولُواْ … هَٰذَا حَلَٰلٞ وَهَٰذَا حَرَامٞ») делают пермиссивную презумпцию не техническим умолчанием вывода, а ОБЯЗАННОСТЬЮ: расширить перечень значит нарушить её, и нарушение это позиция, видимая на деле (ATIMA-31).

    АКТ ОСПАРИВАЕТ СОБСТВЕННОЕ ЗАМЫКАНИЕ, И ЭТО ВЫВЕДЕНО ГОЛОВОЙ. 6:121 запрещает «مَّا لَمۡ يُذۡكَرِ ٱسۡمُ ٱللَّهِ عَلَيۡهِ» — основание, которого нет в перечне четырёх ни у одного свидетеля. ground_outside_the_enumeration выводится правилом, то есть оспоренность есть факт дела, а не оговорка в шапке файла (приём fiqh.hajj с расхождением мазхабов).

    ДВА ДЕФИТЕРА ОГРАНИЧЕННОЙ ОБЛАСТИ, ПРОВЕРЕННЫЕ ПАРАМИ ПО ОБЕ СТОРОНЫ ГРАНИЦЫ. «إِلَّا مَا ذَكَّيۡتُمۡ» (5:3) достаёт до пяти способов гибели и не достаёт до мертвечины, крови, свинины, посвящённого иному и заколотого на жертвеннике; «إِلَّا مَا حَمَلَتۡ ظُهُورُهُمَآ» (6:146) достаёт до тука и не достаёт до нераздвоенного копыта. Проверяется не тем, что изъятие сработало, а тем, что на соседнем деле с ТЕМ ЖЕ фактом оно НЕ сработало (ATIMA-05 против 06/07/08; ATIMA-36 против 37).

    ИЗЪЯТИЯ ЗАПИСАНЫ ПРЕМИССАМИ С ЗАМЫКАНИЕМ §70, А НЕ КЛАУЗАМИ unless, И ЭТО МЕХАНИКА. Проба 31.08.2026: unless делает правило поражаемым, поражаемый производитель поднимает барьер prohibited_food рангом выше презумпции, и на деле о МЕРТВЕЧИНЕ — не имеющем к изъятию отношения — одновременно выводятся «дозволено» и «запрещено». lawc check чист, CLIR валиден, differential сходится байтово; неверен только ответ. Третье измерение канона «производители барьера — только строгие правила», и первое на форме «производитель барьера поражаем по ЧУЖОЙ причине».

    НЕОГОВОРЁННОЕ ИЗЪЯТИЕ 6:119 ПОГЛОЩАЕТ ГАРДЫ ОСТАЛЬНЫХ ТРЁХ СВИДЕТЕЛЕЙ — найдено исполнением. 2:173, 6:145 и 16:115 требуют «غَيۡرَ بَاغٖ وَلَا عَادٖ», 5:3 — «فِي مَخۡمَصَةٍ غَيۡرَ مُتَجَانِفٖ لِّإِثۡمٖ», а 6:119 гардов не ставит вовсе. При §206-расщеплении «правило на свидетеля» всякий вынужденный освобождается независимо от того, желал он или преступал. Пакет не сглаживает: дописать 6:119 чужие гарды значило бы вписать в аят слова, которых в нём нет. Поглощение объявлено фактом — exemption_rests_on_the_unguarded_clause выводится ровно там, где освобождение держится на одном 6:119 (ATIMA-23/24), и не выводится, где гарды выполнены (ATIMA-25).

    ОСЬ «АЯТ → МАКСИМА» ЗАКРЫЛА ГРАНИЦУ, КОТОРУЮ СОСЕД САМ О СЕБЕ ОБЪЯВИЛ. Ст. 21 и 22 Маджаллы («الضَّرُورَاتُ تُبِيحُ الْمَحْظُورَاتِ», «مَا أُبِيحَ لِلضَّرُورَةِ يَتَقَدَّرُ بِقَدْرِهَا») в osm.mejelle формализованы не были: они стояли границей с причиной «текстового крючка у неё в книге III нет». Причина верна и остаётся верной — недоставало не прочтения, а ПОТРЕБИТЕЛЯ. Настоящий пакет им стал, обе максимы заведены в 00-maxims.law и объявлены pub (первые pub-декларации Маджаллы), границы сняты с записанной причиной. Зазор выводим: ст. 21 говорит то же, что аяты (ATIMA-41), а ст. 22 добавляет соразмерность, которой базовое прочтение не знает (ATIMA-42) — при том, что мера выразима и из самого аята прочтением «وَلَا عَادٖ» как «не преступая МЕРЫ», объявленным толкованием MeasureOfNecessity.

    ГРАНИЦА СУННЫ НАЗВАНА, А НЕ ОБОЙДЕНА. «Две мертвечины и две крови» — рыба, саранча, печень, селезёнка — в закреплённых байтах не названы ни разу. Печень есть кровь несцеженная: базовым прочтением 6:145 («دَمٗا مَّسۡفُوحًا», кровь ВЫПУЩЕННАЯ) она дозволена презумпцией, широким прочтением трёх остальных свидетелей — запретна; развилка объявлена толкованием BloodWithoutTheQualification, а не решена молча. Мёртвая рыба удовлетворяет и дозволению 5:96, и запрету мертвечины — приоритета §116 нет ни в одну сторону, и not_resolved_by_this_act стоит рядом с запретом выводом, а не молчанием.

    ВЫРАВНИВАНИЕ §29 ОДИН-КО-ДВУМ У ЦЕНТРАЛЬНОГО АЯТА. Саблуков делит 5:3 на два стиха: 5:4 несёт перечень вместе с изъятием «кроме той, которую очистите», 5:5 — оговорку о вынужденном. Без второй пары оговорка не имела бы в переводе адреса вовсе. Смещения нумераций меняются и между сурами, и ВНУТРИ суры (во второй −5, в пятой 0 → +2 → +1, в шестой 0 → +1, в шестнадцатой +1) — 23 декларации набраны сверкой текста. Попутно исправлен дефект извлекателя, известный по fiqh.hajj: шапка страницы Викитеки (навигация, название мусхафа, число аятов суры) больше не попадает в закреплённые байты первого аята суры — границей служит басмала.

    ТРИ СЕРТИФИКАТА LEAN ИЗ 75 ОТВЕРГНУТЫ, И ЭТО КВАЛИФИЦИРОВАНО КАК ДЕФЕКТ ОРАКУЛА. Класс §181.1 («сертификат перечисляет только победителя») открыт в репозитории до этого акта; пакет к нему ПРИСОЕДИНЯЕТСЯ. Под-сигнатура НОВАЯ: одна голова eating_is_open, одна подстановка, производители в РАЗНЫХ СТРАТАХ — InvokedSlaughterIsOpenToEating в страте 0 (читает только эмпирическое), EatingOpenToMankind/EatingOpenToBelievers в страте 1 (читают поражаемый permitted_food); оракул кладёт candidate_closure по страте, и Lean, проверяя узел страты 1, находит применимым кандидата страты 0. Детектор: 9 пропущенных кандидатов, 3 документа с дублем conflictKey. Подгонять акт запрещено — слить три правила значило бы стереть, что 2:168 обращено ко всем людям, 2:172 к уверовавшим, а 6:118 к убитому с поминанием имени.

  • usus.corpus.ochered — живая очередь: первый акт корпуса, у которого нет даже носителя-сообщества (31.08.2026). Заведён corpus/laws/usus/ochered: новая группа usus для безгосударственного эмерджентного обычая, десять .law, 63 правила, 29 сценариев семейства ochered, differential 81 вызов байтово идентичен (liblaw_ffi == lawref), Lean — 81 сертификат принят, 0 отвергнуто, батарея §267 — 8 рукописных .lawtest, два журнала process-run, разметка §218 81/6 словаря (шесть — пол профиля процедур §160) и 67/0 норм, стаб-цепей 0 из 63 правил, мёртвых символов 0, посылок в никуда 0, doctor.py — «пробелов нет». Мера §33.1: EXECUTABLE 16, ANCHORED 0, SOURCE_ONLY 0, UNEXPLAINED 0 из 18 статей; учёт единиц 18 из 18, байтовое покрытие 78,9 %. Полный аудит конструкций — corpus/laws/usus/ochered/audit.ru.md (14 видов деклараций из 44, шесть неиспользованных отнесены в группу «ложное усиление — добавлять НЕЛЬЗЯ»).

    Почему группа новая. Прецедент vory называет группу по СООБЩЕСТВУ-носителю. У очереди носителем является всякий присутствующий, и назвать группу именем сообщества значило бы утверждать существование сообщества, которого нет. usus — длительное фактическое пользование, из которого право вырастает без акта установителя; группа заведена под класс, а не под один акт.

    Три расхождения с заданием, все в пользу источника. (1) Числа Манна в пакете нет: статья 1969 года закрыта платным доступом, открытый реферат величин не сообщает, и предел отлучки остался без числа — спор ст. 6 принял форму «событие против суждения» вместо «число против суждения». (2) Позиционная санкция принадлежит Манну (1970, с. 392), а не Милгрэму: у Милгрэма она процитирована как гипотеза Манна и подтверждена экспериментом. (3) Писаных островков два, и второй важнее: Правила системы электронной очереди на Госгранице (приказ № 707, рег. № 32911) очередь не изымают, а КОДИФИЦИРУЮТ — повторяют порядок прибытия (п. 31), гасят место за неявку (п. 35), легализуют покупку очерёдности (п. 6-1) и запрещают продажу брони соседу (п. 36).

    Новый класс молчаливого отказа, найденный обходом лазеек: половина нормы, выраженная одним лишь поражением. У serves_first был единственный производитель — правило порядка прибытия, — и статутное изъятие лишь ГАСИЛО его вывод, не устанавливая обратного: ответ у ветерана оставался NEITHER при живом правиле, EXECUTABLE-статье, нулевой стаб-доле и байтовом differential. Ни один счётчик корпуса этого не видит. Уликой стало то, что lawref loophole не нашёл пути к цели «пройти раньше честно стоящего» там, где путь заведомо есть. Добавлено StatutoryPrecedenceGoverns.

    Недатированная редакция даёт не осторожный ответ, а пустое право. adopted у изложения не объявлен (обычай не принимался), но in_force [@0001-01-01, infinity) объявлен: без него проекция §31/D1 снимала 57 правил из 62, и process-run с loophole работали бы по пустому праву при зелёных воротах. Окно понадобилось и семи редакциям свидетелей — @source правил называет их фрагменты, и снятая редакция снимает правило.

  • id.halal — Закон Индонезии № 33/2014 о гарантиях халал-продукции: первый индонезийский акт корпуса и первый акт, где халал-сертификация есть СТАТУТНАЯ ОБЯЗАННОСТЬ (31.08.2026). Заведён corpus/laws/id/halal: новая страновая группа id, девять .law, 141 правило, 45 сценариев семейства halal, differential 68 вызовов байтово идентичны (liblaw_ffi == lawref), Lean — 68 сертификатов приняты, 0 отвергнуто, батарея §267 — 8 рукописных .lawtest, разметка §218 214/6 словаря (шесть — пол профиля процедур §160) и 163/0 норм, стаб-цепей 5 из 141 правила (3 %), мёртвых символов 0, doctor.py — «пробелов нет». Мера §33.1: EXECUTABLE 57, ANCHORED 6, SOURCE_ONLY 5, UNEXPLAINED 0 из 68 статей; учёт единиц 68 из 68, байтовое покрытие 90,2 %.

    Почему это важнее одного акта. Халал-сертификация почти везде есть добровольный знак соответствия: стандарт частный, право молчит. Ст. 4 этого закона делает её обязанностью — «Produk … wajib bersertifikat halal», — и потому вопрос «обязан ли продукт иметь сертификат» получает правовой ответ. Из этого растёт всё: государственный орган BPJPH, процедура §160 из девяти стадий с тремя сроками в рабочих днях, четыре набора административных взысканий и ДВА уголовных состава (бриф ожидал только административные — расхождение записано).

    ДВА РАЗНЫХ КАНАЛА СУЖДЕНИЯ §47.3 В ОДНОМ АКТЕ, И НИ ОДИН НЕ ВЕДЁТ В СУД. Запрещённость МАТЕРИАЛА сверх законного перечня устанавливает Министр по фетве MUI (ст. 18 п. 2, 20 п. 3); халальность ПРОДУКТА — заседание халал-фетвы MUI (ст. 33). Слить их в один authority значило бы утверждать, что акт различия не делает, — а он делает: у первого решение есть «penetapan Menteri berdasarkan fatwa MUI», у второго «Keputusan Penetapan Halal Produk», подписанное MUI.

    ЗАКОН САМ ПЕРЕЧИСЛЯЕТ ХАРАМ — И САМ ЖЕ ОТКРЫВАЕТ ПЕРЕЧЕНЬ. Ст. 18 п. 1 закрывает четыре источника («meliputi»: падаль, кровь, свинья, забой не по шариату), ст. 18 п. 2 тут же отдаёт остальное Министру. Формализовано ЧЕТЫРЬМЯ замыканиями §70 над законным перечнем (замыкание унарно — LDC-E2114) плюс канал суждения на расширение: молчание дела о запрещённости даёт халяльность по презумпции ст. 17 п. 3, а молчание о ПРОИСХОЖДЕНИИ не даёт статуса вовсе.

    ТРИ НАХОДКИ ДАЛ САМ ИСТОЧНИК. (1) Ст. 4 называет три способа присутствия на рынке («masuk, beredar, dan diperdagangkan»), а ст. 67 п. 1, переносящая начало обязанности на пять лет, — только два, без ввоза; развилка взята прочтением §152 ImportOutsideDelay со статусом disputed (база — узкое прочтение) и различима ТОЛЬКО выбором прочтения (HALAL-03/04). (2) ОБА английских перевода — регулятора BPJPH и FAOLEX — искажают ст. 61: подлинник отсчитывает два года «sejak BPJPH dibentuk», переводы — «from the legislation of this Law»; переводы согласны между собой и расходятся с подлинником оба, то есть у них общий предок. Формализован подлинник, сторожит HALAL-25. Там же ст. 62 подлинника отсылает к «Pasal 14 dan Pasal 15», переводы — только к 15. (3) Заверенная копия регулятора несёт опечатку в заголовке — «Pasal 59`», U+0060 в текстовом слое PDF; закреплена как есть, обе конвенции деления §33.1 допускают один хвостовой посторонний знак.

    РЕДАКЦИЯ 2023 ГОДА НЕ ОБЪЯВЛЕНА, И ЭТО ИЗМЕРЕННОЕ РЕШЕНИЕ. Закон № 6/2023 (омнибус, утверждение Perppu № 2/2022) статьёй 48 меняет двадцать восемь положений, включая вставку ст. 4A о самодекларации микро- и малого бизнеса. Единственная доступная копия омнибуса — OCR-слой поверх скана (pdffonts: невстроенные Type 1, emb no sub no uni no), и порча бьёт в НОМЕРА: «Tahun 2Ol4», «Pasal 1 1», «Pasal 3 1», «Pasal 52El» и — решающее — «Pasal 338» вместо «Pasal 33B», то есть номер испорчен в ДРУГОЙ действительный номер. Акт, целиком состоящий из фразы «Ketentuan Pasal N diubah», из таких байтов формализовать значит выдумать те самые идентификаторы, которыми он и является. Класс тот же, что у сканированных правил «Монополии» ($900 вместо $200), но порча попадает не в ставку, а в адресацию. Ось impact-editions для этого акта объявлена невзятой с этой причиной.

    СРОКИ В РАБОЧИХ ДНЯХ НЕ ВЫЧИСЛЯЮТСЯ — И ЭТО НАЗВАНО. Три срока главы V (5, 30, 7 «hari kerja») требуют снимка календаря §85, а рабочий календарь Индонезии задаётся ежегодным решением трёх министров, пакетом не закреплённым; снимок «только выходные» дал бы срок РАНЬШЕ настоящего. Счёт рабочих дней приходит фактом, ПОРОГ стоит литералом в правиле и проверен парой дел по обе стороны каждой границы. Шесть остальных сроков акта (пять лет ст. 67, четыре года ст. 42, три месяца продления, два года ст. 62-63 и 65, три года ст. 64, два года ст. 61) ВЫЧИСЛЯЮТСЯ add_calendar_period.

    ДЕЛЕГАЦИЯ ОБЪЯВЛЕНА, ДЕЛЕГИРОВАННЫЙ АКТ В СРЕЗ НЕ ВХОДИТ. Двадцать предметов отданы подзаконному акту (восемь Правительству, один Президенту, одиннадцать Министру) и выражены властью §127 с окном от дня вступления закона в силу. Постановление Правительства № 42/2024 стоит на первой из этих отсылок (ст. 67 п. 3); его байты не закреплены, и обещать за него нечего.

    МОСТ «СТАТУТ ↔ ДОКТРИНА» НЕ ПОСТРОЕН, И ПРИЧИНА НЕ В СИЛАХ: в корпусе нет доктринального пакета о халальности материала. Семь пакетов fiqh/ — пост, брак, хадж, закят, долг, завещание, таклид, — и ни один о пище. Единственное вхождение слова haram в них (family_resident_at_haram, fiqh.zakat) означает Заповедный предел Мекки: омоним, на который поиск по слову ловится первым.

    Реестры, тронутые вместе с актом. Новая единица деления pasal вписана в ОБА реестра меры §33.1 (check_source_pinning.py и corpus/tools/lib/act_split.py) — измерено, что без второго мера отвечает «неприменима» при верном учёте; новый набор признаков исполнимого содержания для языка id (пять классов, включая ДВА, которых нет у соседей: «распределение» — обязанность органа прямым изъявительным, и «перечень» — закрытое перечисление как норма) откалиброван на главах V и IX и молчит на 11 статьях из 68, шесть из которых чистая делегация; профиль id-uu-pasal в шаблоне закрепления; правопорядок ID в словаре. Попутно починена проверка 4 scripts/lint.py: её набор перекрёстных ссылок знал только русские «статья/пункт» и принимал номер индонезийской статьи за порог — девять ложных находок из десяти на этом пакете (тот же класс, что KeyError у OPERATIONAL_MARKERS на новом языке).

  • he.gospel.sermon — Нагорная проповедь как поправки к Торе: первый акт корпуса, чьё утверждение О СЕБЕ проверяется машиной (31.08.2026). Заведён corpus/laws/he/gospel-sermon: девять .law, 54 правила, 51 сценарий семейства sermon, differential 100 вызовов байтово, Lean — 100 сертификатов приняты, 0 отвергнуто (7 побеждений сверено), разметка §218 89/0 словаря и 76/0 норм, стаб-мостов 0, мёртвых символов 0, покрытие правил прогоном 54 из 54, doctor.py — «пробелов нет». Мера §33.1 по стихам: EXECUTABLE 28, SOURCE_ONLY 20, UNEXPLAINED 0 (все двадцать — границы с причиной, проверенной по тексту); три базы Торы — 4/4, 3/3, 3/3 EXECUTABLE; учёт единиц 48 из 48, необъяснённых 0, байтовое покрытие 99,2 %. Рукописных .lawtest 6, порождённых 88.

    5:17 — формальное утверждение, и оно проверено, а не пересказано. «Не нарушить пришёл Я, но исполнить» есть заявление о КОНСЕРВАТИВНОСТИ поправки. Каждое дело батареи исполняется ДВАЖДЫ — в мире «сказанного древним» (одна Тора) и в мире «а Я говорю вам», — и оба имени дал сам текст, который строит каждую антитезу как «Ye have heard… But I say unto you». Миры различает один факт дела. На каждой паре запрещены ДВА направления: нарушение мира Торы не вправе исчезнуть и норма мира Торы не вправе исчезнуть. Итог прогона (сценарий-счётчик SERMON-42): 50 пар, запрещённых флипов 0, дерогация 1.

    Второе направление добавлено по измерению, а не для полноты. Обязанность-ДОСТИЖЕНИЕ с открытым окном [@0001-01-01, infinity) не истекает и VIOLATED не становится НИКОГДА — семь сценариев были написаны на VIOLATED и разошлись с ОБОИМИ движками одинаково. Считай проверка только исчезнувшие нарушения — исчезновение ЦЕЛОЙ нормы Торы прошло бы молча, а это и есть «нарушить закон» в прямом смысле 5:17.

    Вид поправки читается СТРУКТУРОЙ CLIR, а не прозой комментария. Расширение состава есть ВТОРОЙ ПРОИЗВОДИТЕЛЬ предиката (гнев → in_danger_of_the_judgment, взгляд → guilty_of_adultery, круг любви → within_love_circle); дерогация есть defeater. Их в пакете ровно один — талион, гашение правомочия потерпевшего, — и утверждение «пять аддитивны, одна дерогационна» держится счётом узлов. Незаявленная дерогация роняет прогон: сценарий, гасящий вывод базы без явного флага, есть отказ.

    Проверка 5:17 там, где она всего опаснее. Втор 24:1 обращён к отпускающему жену, 5:32 привешивает к тому же деянию новое последствие — дозволение базы ПЕРЕЖИВАЕТ поправку (SERMON-14). Исх 21:23 обращён к ПРИЧИНИТЕЛЮ, 5:39 — к ПОТЕРПЕВШЕМУ: гашение правомочия не трогает обязанности отдать равное (SERMON-26/27). Не будь в пакете второй стороны талиона, дерогация выглядела бы превращением нарушения в дозволенное, то есть опровержением 5:17.

    ОБЯЗАТЕЛЬНАЯ НАХОДКА: три цитаты баз разошлись с Торой, и одна базы не имеет вовсе. Проповедь вводит антитезы формулой «Ye have heard that it was said». Половина цитаты 5:43 — «и ненавидь врага твоего» — в Торе ОТСУТСТВУЕТ: ни в закреплённых Втор 24, Исх 21, Лев 19, ни в обеих рецензиях декалога её нет, а Лев 19:17–18 говорит прямо обратное. 5:21 пересказывает «не убий» ВМЕСТЕ с санкцией, которой Исх 20:13 не назначает. 5:33 цитирует составную базу, вторая половина которой — Числ 30:2 и Втор 23:21, в пакете не закреплённые. Висячий якорь молчалив, поэтому находка держится тремя способами: структурно (у пяти баз цепь анкерована во фрагмент ТОРЫ, у шестой — только в MT_5_43), байтово (sync_sermon_fragments.py --check ищет строки в двух пакетах разом и падает, если находка опровергнута; канарейка проверена правкой Лев 19:18) и ответом права (в мире Торы круг любви для врага даёт NEITHER, а не FALSE_ONLY: Тора о враге не говорит ничего — ни любить, ни ненавидеть).

    ДЕВЯТЬ ПРАВИЛ ИЗ 54 НЕ ИСПОЛНЯЛИСЬ НИ РАЗУ ПРИ 42 ЗЕЛЁНЫХ СЦЕНАРИЯХ — и ни одни ворота этого не видели. Ни check_dead_rules (его отказы СТАТИЧЕСКИЕ, а эти правила исполнимы), ни мера §33.1 (стих, на который ссылается хоть одно правило, уже EXECUTABLE), ни differential (обе реализации молчали одинаково). Найдено обходом proof-графов прогона, закрыто сценариями SERMON-43…51, итог — 54 из 54. Переносимая ловушка самого обхода: «правило сработало» отмечается в графе ДВУМЯ видами узла — rule_application у литеральной головы (идентификатор в поле rule, у ветви презумпции с суффиксом /R1, /R2) и norm_creation у деонтической (идентификатора правила в узле НЕТ, имя достаётся из id вида urn:proof:norm:<Правило>:0). Счёт по одному виду даёт ложное «правило мертво» у ВСЕХ обязанностей разом (19 из 54 вместо 45), срезание суффикса — у всех презумпций (39 вместо 45); оба ответа выглядят правдоподобно и оба неверны.

    Расхождение свидетелей выведено, а не выбрано. Клаузула 5:32 «saving for the cause of fornication» есть только у Матфея; Мк 10:11 и Лк 16:18 её не знают. Байтов Марка и Луки пакет не закрепляет, поэтому расхождение предъявлено СТРУКТУРОЙ: вырез — unless презумпции, и разница между свидетелями есть разница в одном узле CLIR.

  • Первый pub у he.torah.decalogue — экспорт трёх символов по запросу потребителя. До 31.08.2026 декалог не экспортировал ничего, и lawc lower отвечал на межпакетную ссылку LDC-E1105: экспортировано: ничего. Открыты addressee, kills, commits_adultery — ровно те, о которых проповедь говорит прямо (5:19 «these least commandments», 5:21, 5:27); причина записана в шапке каждого. Цена названа: CLIR декалога пересобран, semanticHash изменился, и сужение --only sermon больше не изолирует пакет — замыкание импортов тянет декалог.

    Побочно измерено: чистый lawc check НЕ доказывает разрешимости межпакетной ссылки. check — и без --imports, и с правильным контекстом — отвечает ok=true с пустым списком диагностик на правиле, читающем неэкспортированный чужой предикат; отказ приходит только от lower. Класс тот же, что «зелёный lowering, мёртвое право», но с обратным знаком, и он не документирован.

    И вторая молчаливая ловушка сборки: import pkg; без version. Компилятор такую форму принимает, check чист, но генератор CLIR корпуса выводит порядок сборки регулярным выражением, требующим слова version, — зависимость становится для него НЕВИДИМОЙ, и сборка падает на LDC-E1104 «объявлена import-ом, но не предъявлена resolve-контекстом», то есть жалуется на отсутствие того, о чём сама же не спросила.

  • logic.zebra — зебра-паззл: первый акт корпуса, содержание которого есть ОСТАТОК замыкания §70, и первая группа каталога logic (31.08.2026). Заведён corpus/laws/logic/zebra: четыре .law, 45 правил, 21 сценарий семейства zebra, differential 352 вызовов байтово, Lean — 352 сертификата приняты, 0 отвергнуто, разметка §218 44/0 словаря и 45/0 норм, стаб-мостов 0 из 45 правил, мёртвых символов 0, doctor.py — «пробелов нет». Мера §33.1: EXECUTABLE 16, SOURCE_ONLY 2, UNEXPLAINED 0; учёт единиц 18 из 18, байтовое покрытие 99,4 %.

    Пятнадцать посылок ничего не выводят — они ПРОВЕРЯЮТ расстановку, предъявленную делом. Выводится ровно то, чего дело не говорит: вода и зебра не названы ни одной посылкой, и оба ответа приходят остатком замыкания §70 по условию 16. Сломай замыкание — оба станут NEITHER при пятнадцати зелёных посылках и зелёных статических воротах; видят это ZEBRA-17 и ZEBRA-18, ломающие по ОДНОМУ замыканию каждый (симметричная поломка спрятала бы половину).

    Режим «проверка, а не поиск» объявлен границей в самом изложении. Движок деривирует по фикспойнту и ветвиться не умеет; о единственности решения акт не утверждает ничего. Мост к SMT в объём не заведён осознанно: «второй модели нет» было бы утверждением о кодировке, а не о CLIR.

    Различность признаков написана СЧЁТОМ, а не отрицанием. not <повторён> над выводимым предикатом молчит на всяком деле (установленного отрицания не даёт ни §70, ни открытый мир), а != над сущностями молчит при зелёных check и lower. Различность выражена count(collect …) == 1 по ЭМПИРИЧЕСКОМУ отношению дела — барьер §111 запрещает агрегат над ВЫВОДИМЫМ и сюда не достаёт; различность домов — целочисленными позициями.

    Три измеренных факта, каждый стоил бы времени следующему. (1) Константа перечисления внутри generator-а comprehension §52.1 отвергается громко — LDC-E1317; значение обязано связываться биндером правила. (2) reference … resolve_at legal_time на редакцию без дат жизненного цикла даёт SOURCE_RESOLUTION_FAILED уровня fatal на КАЖДОМ деле пакета, а не на одной ссылке: провенанс Life International записан фрагментами-локаторами в редакции ABSTRACT_ONLY, а не выдуманным in_force журнальному номеру. (3) У посылки 15 ветвь «правее» НЕДОСТИЖИМА, пока соблюдена посылка 10 (норвежец в первом доме — синему пришлось бы стоять в нулевой позиции); исполняется только на зеркальной расстановке ZEBRA-19, которая ломает ровно посылки 6 и 10 — единственные две, у которых есть направление.

    Источник: свои байты закреплены, чужие названы без закрепления. Авторское изложение написано для репозитория и закреплено собственными байтами (PINNED_OFFICIAL_BYTES, authored_exposition — прецедент faraid.shares); байты Life International (17.12.1962, решение — 25.03.1963) не закрепляются вовсе: копирайт, живого пина нет. Приписывание задачи Эйнштейну и Кэрроллу названо ЛЕГЕНДОЙ в самом тексте изложения. Новая единица деления «посылка» вписана в ОБА реестра меры §33.1 и в две таблицы имён boundaries.py: пятнадцать посылок, условие и два вопроса нумерованы сквозной последовательностью 1—18, и три слова заголовка дают ОДНУ единицу — иначе номера при локаторе article/N перестали бы быть уникальными.

    Границей объявлены оба ВОПРОСА, и это не молчание пакета. Вопрос нормы не содержит, из него ничего не выводится, — а ответ на него выводится правилом остатка условия 16. Анкерить это правило ещё и на вопрос значило бы поднять меру §33.1 разметкой, а не формализацией.

  • bab.hammurabi — Кодекс Хаммурапи, первая сессия (§§1–5, 195–223, 229–233, 250–252; 31.08.2026). Новая группа bab, правопорядок BabylonianKingdom (без искусственного ISO-кода), CLIR bab-hammurabi.lawir.json и 42 фрагмента современной издательской единицы hammurabi_law. Закреплены перевод И. М. Волкова 1914 года и транслитерация CDLI P464358; §§66–99 стелы помечены как лакуна, требующая вторичного свидетеля при будущем расширении. Строгая казуистика покрывает суд, сословные телесные повреждения, шкалу врача, обрушение дома и бодливого вола. Первый в корпусе проверенный карательный викарный талион: §230 выводит казнь сына строителя и на том же деле исключает казнь строителя. §2 оставляет ордалию внешнему суждению Реки; §5 меняет статус судьи навсегда. Одна сравнительная сцена прогоняет быка без уведомления в двух пакетах: у Хаммурапи денежная санкция не выводится, в leges_xii возникает noxae_deditio. Полный разбор, границы A3, будущие эпилог и Исход 21:28–32: corpus/laws/bab/hammurabi/audit.ru.md.

  • «Начала» Евклида I.20/I.47/I.48 — теорема Пифагора как первый математический акт корпуса (31.08.2026, grc.eukleides.pythagoras). Подлинник по пиннованной ревизии el.wikisource + пофразная сверка с Гейбергом (Perseus, фиксированный commit); единица — предложение (конвенция protasis заведена в check_source_pinning и act_split). Мера §33.1 EXECUTABLE 3/3, закрепление 96,2 %. Девять strict-правил: гейт существования I.20 (строже «не меньше» — вырождение отвергается), признак I.48 тремя правилами по позиции угла, контрапозиция I.47 и сторож противоречия заявленного угла. Сцена (0,3,3): пифагорова арифметика без треугольника признака не даёт — гейт материален. 17/17 сцен, differential 20/20 байтово, Lean-зонд 20/0, 5 .lawtest, разметка без остатка, sync-ворота фрагментов вписаны в run_all.sh.

  • kz.paracetamol мигрирован на with_unit — обе миграции E-0074 закрыты в один день (31.08.2026). Семь пришивок выхода (… * MilligrammEdinitsa: пересчёты по концентрации, пределы по ставкам, полосная таблица, сорбитол) переписаны на with_unit(…, "mg") — тег литералом на месте пришивки. Побочная находка: MilligrammEdinitsa жил ТОЛЬКО пришивкой — сравнения ставок идут размерно (mg против mg, E-0068), и сирота снята вместе с меткой (пол разметки 122 → 121 осознанной правкой с $comment); эталоны входа KilogrammEdinitsa/MillilitrEdinitsa остались громкой половиной. Приёмка: 46/46 сценариев, differential 60 вызовов байтово. Оба тарана DECISION-0068 теперь живут на обеих формах, которые сами породили: класс опечатки «эталон не той единицы» невоспроизводим ни в одном акте корпуса.

  • Сторож реестров векторов не разбирал реестр — и два дня отменял хвост локального конвейера (31.08.2026). new_vector.py --check опознаёт запись SUPPORTED по ФОРМЕ пути. До переноса корня записи писались как vectors/errata/ID, и разбор считал слэши — двух хватало; DECISION-0059 дописал всем путям префикс verify/, сверку префикса поправил, а условие арности оставил прежним (m.count("/") == 2 при трёх слэшах). Множество записей стало ПУСТЫМ: инструмент отвечал «вне SUPPORTED» про КАЖДЫЙ evaluate-вектор — 168 строк, в которых настоящий пробел покрытия был бы неразличим, — и был объявлен «предсуществующе красным». Цена оказалась выше шума: шаг стоит в verify/ci/run_all.sh под set -eu, поэтому с 29.08 не исполнялись ДЕСЯТЬ идущих ниже вызовов, включая ворота раскладки корня, которые тот же перенос и завёл (check_root_layout), туториалы, воспроизведение примеров, типизацию исходников векторов, процессный слой, формы отчётов трека О и поверхности демо. Правка: форма записи проверяется числом сегментов пути, а не слэшей; «реестр не разобран» отличён от «реестр пуст» — ноль записей при непустом файле ворот теперь отдельный отказ ОДНОЙ строкой, и членство в SUPPORTED в таком прогоне не проверяется вовсе, чтобы поломка разбора не маскировалась под массовую непокрытость. Канарейка — scripts/test_new_vector.py (в run_all.sh строкой ПЕРЕД --check и в плане verify.py): на возврате старого предиката краснеет, проверено мутацией. После починки --check зелен без единой правки реестров — они были согласованы всё это время; все десять отменённых вызовов прогнаны поимённо и зелены, включая обе канарейки раскладки и демо.

  • Вектор на границу конверсии: ERR-E0072-CONVERT-SOURCE-UNIT-UNCHECKED (31.08.2026). Пятый вектор E-0072 предъявляет исполнимо названную прозой границу — тег ИСТОЧНИКА не сверяется ни с фактором, ни с тегом цели: convert(18 m_per_s, 5, 18, "m_per_s") = 5 m_per_s, COMPUTED, ноль issues, хотя источник и цель суть один тег (вырожденность дела и есть свидетельство: фактор применяется безотносительно тегов). Вектор пинует не способность, а границу — её отступление до сих пор прошло бы молча, теперь это отказ с квалификацией по инварианту 8. Живой замер, из которого граница добыта, — миграция ст. 3 phys.zadachnik на терм (audit §2.6): голая замена эталонной записи теряла громкую проверку входа. Три реестра синхронно (digitize + artifacts/kinds + SUPPORTED), обязательство E-0072 дописано пятым пунктом, §259-абзац о unit — оговоркой об источнике. Векторы 383 (374 runnable), differential 168/168 байтово, capability-matrix перегенерирована; попутно закоммичены пять case.lawtest векторов E-0074, порождённых тем же прогоном генератора.

  • phys.zadachnik мигрирован на convert — и замер миграции нашёл слепоту терма к ИСХОДНОМУ тегу (31.08.2026, E-0072). Переводные нормы ст. 3 переписаны с эталонной записи ((v / KmVChasEtalon) * 5 / 18.0 * MetrVSekunduEtalon) на явную форму convert(v, 5, 18, "m_per_s") по образцу миграции kz.paracetamol на E-0068. Куплено: обе переводные пришивки ушли (тег цели — аргумент, опечатка «пришил эталон исходной единицы» в переводах невыразима) и снята граница 10-гладкости — convert(1 km_per_h, 5, 18, "m_per_s") возвращает точную дробь 5/18 там, где эталонная запись отвечала TYPE_ERROR (новый сценарий KZ-PHYS-39). Замер миграции (audit §2.6, четыре дела на четырёх записях одной нормы, обе реализации байтово) назвал и цену: convert сверяет вид значения, но не единицу источника (реестра факторов нет намеренно — сверить 5/18 с km_per_h не с чем, сказано самой erratой), и голая замена записи термом отвечала бы на скорость, поданную уже в м/с, МОЛЧА — на гладком частном 18 m_per_s → 5 m_per_s TRUE_ONLY, то есть внесла бы в акт третью дыру класса «масштабирование читается как пересчёт». Поэтому эталонная гвардия оставлена ОТДЕЛЬНОЙ НОРМОЙ: числовое значение поданной скорости (ст. 3 называет его прямо) считается делением на эталон, перевод требует его посылкой, чужая единица роняет посылку громким TYPE_ERROR с обоими тегами. Сторожа падающие: KZ-PHYS-07 и новый KZ-PHYS-40 с гладким частным — снятие посылки красит второй первым. Приёмка: сценарии 40/40, differential 49 вызовов байтово, .lawtest 20/20, Lean 49/0 обеими ногами, разметка 80/0 + 48/0, мера §33.1 EXECUTABLE 12/12 при UNEXPLAINED 0, пробы замера 25/25 без единой правки ответов (они меряют язык, а не акт — датированная оговорка в шапке скрипта). Эталонная запись ФОРМУЛ этой правкой не тронута: convert покрывает перевод, а не «численно равен» источника.

  • phys.zadachnik мигрирован на with_unit — у эталонной записи не осталось слепого выхода (31.08.2026, E-0074). Все 15 пришивок выхода в шести модулях переписаны с … * XEtalon на with_unit(…, "тег"): тег теперь литерал на месте пришивки, и класс опечатки Н4 («эталон секунды на месте эталона метра → путь 300 s TRUE_ONLY молча») в акте невоспроизводим. Эталоны ВХОДА (v / Etalon — громкая половина, E-0068) остались как были; осиротевшие эталоны выхода KilometrEtalon и VattEtalon сняты, пол разметки ослаблен 82 → 80 осознанной правкой храповика с $comment. Приёмка: сценарии 40/40, differential 49 вызовов байтово, пробы замера 25/25 (они мерят идиом языка и сохранены историей с датированной оговоркой). Обе молчаливые дыры замера тарана №2 закрыты для акта существованием явных форм: перевод — convert (E-0072), пришивка — with_unit (E-0074).

  • ERRATA E-0077: выведенный атом не проходил сверку сигнатуры, которую проходит дело (31.08.2026). Третий и последний слой класса «объявленный тип не сверяется»: E-0053 закрыла константы, E-0046 — утверждения дела, E-0077 — головы правил. Найдена замером тарана №3 (kz.tarify Н5: Money-слот принял Quantity[tenge_per_kWh] молча, TRUE_ONLY; phys.zadachnik: Decimal-слот принял Rational 1/3) — два входных пути одного support жили под РАЗНОЙ дисциплиной, и differential молчал по построению (реализации соглашались). Правка: материализованная голова strict- и defeasible-ветвей проходит ту же сверку §189 (check_derived_types, тот же индекс, что E-0046) ДО укладки в support; отказ per-подстановка (вид §58 значение-зависим — соседняя 10-гладкая подстановка того же правила проходит), сообщение зеркалит E-0046, арность и entity_ref — по её границам; closure/эффекты власти/позиции названы безымянным остатком (свидетеля нет). Векторы ERR-E0077-DERIVED-ARG-TYPE/-KEPT — приём и отказ в ОДНОМ документе, вход исходником, оба в SUPPORTED; векторы 385, differential OK, Lean-ворота, clippy/tests 35/0, бандл оракула пересобран. Радиус полной регрессией (10136 сценариев): затронуты ровно 3 — все phys.zadachnik, все запинены ЗАРАНЕЕ как швы и перевёрнуты осознанно: KZ-PHYS-27 и тест 15 (Rational в Decimal-слот КПД), KZ-PHYS-33 (терпимый поимённо коллатеральный код — _truth научился tolerated), KZ-PHYS-39 — граница 10-гладкости, снятая E-0072 утром (convert-Rational входил в Quantity-слот МОЛЧА, класс E-0053), вернулась вечером дверью дисциплины слота; семейство 40/40, differential zadachnik и tarify OK. Пробы Н4/Н5 тарифов теперь громкие байтово (45/45), audit §3.5 аннотирован: Quantity-ветвь находки закрыта, «плата минус тариф» в Money-ветви — цена выбора, не дефект типов. Остальные 16 провалов прогона — ПРЕДСУЩЕСТВУЮЩИЙ чужой красный (MISSING_CALENDAR в linked-прогонах business_day: anti_corruption + subsoil; воспроизведён на коммите ДО errata, worktree 134e6d17) — заведён отдельной задачей, 3 FAIL покрытия — регистрационные долги чужих семейств (myco/ofac/semidnevka).

  • ERRATA E-0074: пришивка «число → величина» получила явную форму — with_unit закрывает вторую молчаливую дыру замера phys.zadachnik (31.08.2026). Обратный ход эталонной записи был скалярным умножением §49 на эталон-константу, и эталон НЕ ТОЙ единицы пришивался молча: правило выводило путь «300 секунд» TRUE_ONLY без единой диагностики (Н4) — эталонная запись громка на входе и слепа на выходе. Заявка задачника проекта не оставила («сверять не с чем без реестра»); errata отвечает: проверяемость — не реестром, а СТРУКТУРОЙ. Правка: with_unit(value, unit) в law.std.units §259 — три отказа, которых у идиома не было: величина с единицей отвергается поимённо (перетег — только convert E-0072, повторная пришивка невыразима по построению), Money — к §50, неточная дробь — RUNTIME_ERROR по канону INEXACT_DIVISION; тег выхода — ЛИТЕРАЛ на месте пришивки, эталоны выхода не нужны вовсе, класс опечатки «не тот эталон» исчезает (опечатка в самом литерале остаётся авторской — граница названа). Побочно снята вторая половина «Rational не пришивается»: 10-гладкая дробь становится Quantity (with_unit(1/4, "m") = 0.25 m). Вид результата всегда Quantity — известен статически, в отличие от convert. Скалярный идиом §49 не запрещён. Пять векторов в SUPPORTED; check_std_registry 12 термов синхронно, векторы 373, differential OK, cargo test 363/0, бандл оракула пересобран, wasm/ffi зелены. Заявка DECISION-0068 §5 закрыта в двух пунктах из трёх; третий (умножение размерных пар + канон составного тега) честно ждёт свидетеля.

  • ERRATA E-0072: конверсионный терм convert — явная форма рамки 1 DECISION-0068, проведённая по проекту акта-тарана (31.08.2026). Рамка объявляла «конверсия — только явной формой», а формы не было: перевод «72 км/ч → м/с» записывался лишь масштабированием /3.6, возвращающим 20 km_per_h МОЛЧА (вторая дыра класса «масштабирование читается как пересчёт»), а перевод с не-10-гладким частным был невыразим вовсе (Decimal * Rational — TYPE_ERROR, T163). Правка: convert(value, num, den, unit) в law.std.units §259 — только Quantity (Money отвергается поимённо: §50), точный фактор парой строго положительных Integer аргументами при норме-владельце (реестра факторов НЕТ — 18/5 есть определение, не курс), вид результата по значению как у Decimal/Decimal (10-гладкое — Quantity целевого тега, иначе точный Rational). Оператор / не тронут ни на одной паре. Проект терма целиком — из заявки phys.zadachnik (audit §3.2, каждое решение с задачей-свидетелем); проведён без отклонений. Три реестра std и статика синхронно (check_std_registry: 11 исполнимых термов, оракул == движок), Lean — .opaque сознательно. Четыре вектора в SUPPORTED; векторы 367, differential OK, selftest, clippy/cargo test (362), бандл оракула пересобран, wasm/ffi зелены. Из заявки остаётся проверяемая пришивка «число → величина» — за владельцем.

  • T163: формулировка отказа Decimal * Rational выровнена на оракульную — закрыта differential-находка тарана №2 (31.08.2026). Пара отвергалась обеими реализациями TYPE_ERROR, но РАЗНЫМИ байтами: оракул — «mul: Rational не смешивается с Decimal-видами (§48)», lawc — «§49-алгебра — с unit-package» (обещание пакета там, где его не будет: смешение видов чисел не станет законным и с ним). Ни один вектор пару не пиновал — differential молчал (найдено живой пробой phys.zadachnik, audit §2.3). Владелец выбрал оракульную формулировку; lawc получил арм (Rational, _) | (_, Rational) дословно, пин — вектор T163 (T-семейство по прецеденту T132: формулировка под контрактом §211; errata не потребовалась — prose §48/§58 верна, врали только байты lawc). T163 в SUPPORTED и матрице CORE-TESTS; KNOWN_DIVERGENT probe-скрипта опустошён — 25/25 проб задачника байтово, векторы 363, differential OK, clippy/cargo test (362) зелены.

  • ERRATA E-0068: ставка «X мг/кг» получила размерно честную запись — одна строка таблицы делимых §58, проведённая актом-тараном (31.08.2026). Таран kz.paracetamol (DECISION-0068 п. 4) нашёл то, чего разведка не увидела: рядом с невыразимостью ставки жила МОЛЧАЛИВАЯ дыра — Quantity[u] * Integer масштабирует, и запись d <= w * 15 со случайно совпавшими тегами исполнялась без единой диагностики с порогом, съехавшим в тысячу раз. Правка: Quantity / Quantity при байтово ТОЖДЕСТВЕННОЙ единице — безразмерное частное по правилу пары Decimal/Decimal (15 mg / 1 mg = 15; 1 mg / 3 mg = Rational 1/3); разные единицы — TYPE_ERROR, называющий оба тега (неявной конверсии нет — рамка 1 DECISION-0068); умножение не тронуто. Две развилки решены владельцем multi-choice: вход безусловно в ядро (рамка 3 уточнена: feature-флаг — вход ПАКЕТА, не строки таблицы), вид частного зеркалит Decimal/Decimal, а не «плоский Decimal» черновика. Дыра закрыта ПО ПОСТРОЕНИЮ: в записи (d / MilligrammEdinitsa) <= (w / KilogrammEdinitsa) * 15 чужая единица — громкий отказ; единица переезжает из имени предиката в тип. Пять векторов + точечная перезаморозка ERR-E0064-QUANTITY-PAIR (граница сузилась до кросс-юнита осознанно); differential 157/157 байтово, векторы 358/358, clippy чист, 360 тестов, бандл оракула пересобран, wasm/ffi зелены. kz.paracetamol назван первым кандидатом на миграцию к размерной записи.

  • ERRATA E-0075 + E-0076: pow — последнее имя перечня §58 обрело семантику; перечень §58 впервые стал правдой целиком (31.08.2026). Седьмое и последнее «объявлен и неконструируем» перечня операций: pow не имел ни продукции, ни лексемы, ни таблицы видов, а три записи степени давали три разных отказа, ни один из которых не называл §58 (самый тихий носитель класса — LDC-E2105 читается как опечатка). Свидетель — акт-таран la.gauss.theorema_fermatianum (малая теорема Ферма цепью проверяемых звеньев). Решения владельца (multi-choice): носитель — std-ТЕРМ (как min/max/abs из той же половины перечня; грамматика не тронута), единственная пара Integer pow Integer -> Integer, показатель < 0 — TYPE_ERROR, 0^0 = 1 (пустое произведение, засвидетельствовано источником: «praeter primum 1», Гаусс DA art. 45). Два предела RESOURCE_LIMIT с обеими сторонами в векторах: показатель > 4096 — до вычисления; результат — 64-битный диапазон ЗНАЧЕНИЯ Integer (2^62 точен, 2^63 — отказ; уточнение против черновика: у mod/div i128 был промежуточным, у pow предел встаёт на самом значении). Шесть реестров синхронно (check_std_registry 13==13), семь векторов E-0075 (INT-POW — исходником, гард pow(v,3) mod 7 == 1 — экземпляр самой теоремы). E-0076 закрыла попутную находку тарана: перечень термов в сообщении «std-функция вне v1-среза» печатался в РАЗНОМ порядке двумя реализациями — байтовое расхождение §170, недостижимое через lawc check и достижимое чужим CLIR; теперь отсортирован у обеих, байты пиннит вектор ERR-E0076-STD-SLICE-ORDER. Векторы 383, differential байтовый, clippy/cargo test (368) зелены, бандл оракула пересобран. Снята языковая половина долга Кармайкла (остаток — кодировка показателя-переменной у решателя, audit §5.4); переписка правил Гаусса на pow-гард — работа акта.

  • Следствия E-0075 в акте Гаусса: предсказание черновика опровергнуто замером, обе половины долга Кармайкла сняты (31.08.2026). Черновик errata обещал свести ProbatioFermatianaTransacta к одному гарду pow(basis, modulus - 1) mod modulus == 1 и сделать след иллюстрацией. Обещание неисполнимо, и опровергает его тот самый пункт, которым проведение отклонилось от черновика (предел на ЗНАЧЕНИИ, а не на промежуточной разрядности): гард даёт TRUE_ONLY при модулях 7 и 13 и RESOURCE_LIMIT при 341 (2^340) и 561 (2^560) — ровно на псевдопростом и числе Кармайкла, ради которых пакет заведён. Рамкой малости это не чинится, и это находка шире pow: порядок конъюнктов тела — sha256 канонических байтов (§207.1/E-0002), solve берёт первый полностью связанный в ЭТОМ порядке, а ошибка терма гасит правило ЦЕЛИКОМ; две записи одной мысли, отличающиеся одной цифрой в рамке (modulus <= 11 против <= 12), ведут себя по-разному — первая чиста, вторая падает. Гардом нельзя защитить частично определённый терм; долг записан §9.4 (шире pow — деление, convert, календарь у краёв §85). Сделано: степень взята туда, где тотальна на объявленном домене — три экземпляра инварианта (pow(basis, 2|4|6), показатель ЛИТЕРАЛ, максимум по всем сценам 7^6) плюс новый свидетель эквивалентности двух записей PotestasVestigioDiscordat (второе звено следа против прямой степени; избыточен по замыслу — сработает только на дефекте самого терма); ProbatioFermatianaTransacta осталась на цепи, потому что за 64 битами альтернативы нет. Регрессия 26/26, differential 26 вызовов байтово, Lean 26+26/0, порождённые .lawtest байтово те же, разметка затянута до 25/0.

  • Кодировка степени у решателя + ворота check_smt_pow (шаг 38/47, 31.08.2026). Вторая половина долга Кармайкла (audit §5.4) снята ЗАМЕРОМ. pow в smt_witness.py разворачивается произведениями (литеральный показатель — n сомножителей, переменный — цепочка ite по 0…POW_EXP_CAP), кап объявлен числом (64) и ПЕЧАТАЕТСЯ отчётом всякий раз, когда степень кодировалась; границы §58/E-0075 стоят assert-ами в самих скриптах (показатель в [0, кап], результат в 64-битном диапазоне — модель вне него была бы свидетелем дела, которого движок не исполнит). Охота дала три ответа, и верен не тот, что похож на успех: решатель ПЕРЕОТКРЫЛ наименьшее псевдопростое (n = 9, основание 8, движок подтвердил реплеем) на капах 8 и 16; на 32 и выше молчит (потолок развёртки между 16 и 32, а 341 требует 340); а мгновенный UNSAT при n > 100 — ЛОВУШКА: он держится не арифметикой и не капом, а запретом 64-битного диапазона (снятие assert-а меняет ответ на unknown), то есть утверждает «нет ИСПОЛНИМОГО дела», а не «нет чисел Кармайкла». Побочно починен молчаливый дефект инструмента: solve возвращал модель либо None, и None означало «unsat ЛИБО unknown» — а атака печатает по нему «доказано решателем», режим свидетеля — «кандидат в мёртвые нормы». Развёртка степени — первый класс скриптов, на которых z3 молчит (измерено: один и тот же скрипт дал свидетеля за 5,7 с и промолчал 60 с в повторе), то есть дефект стал достижим и объявлял бы теорему тем охотнее доказанной, чем труднее задача. Теперь вердиктов три, таймаут — тоже unknown (первый прогон охоты уронил инструмент трейсбеком), и молчащая ветвь отменяет утверждение так же, как усечённый перебор §206.

  • ERRATA E-0064 + DECISION-0068: пример §49 обещал Quantity<Velocity> — обещание снято, границы unit-package застолблены ДО реализации (31.08.2026). Третья строка примера §49 (5 m / 1 s // Quantity<Velocity>) обещала вид, которого v1 не определяет: таблица делимых E-0020 пары Quantity/Quantity не называет, обе реализации отвечают TYPE_ERROR. Квалификация — дефект prose-ИЛЛЮСТРАЦИИ (класс E-0060), реализации верны; в отличие от E-0062 обещание не реализовано, а снято: спрос замерен (597 употреблений Quantity в CLIR корпуса, 580 — календарные единицы §84–§86, физических семь, ни одна не умножалась). Разведка выразимого четырьмя пробами: пороговая норма «15 м² на человека» ВЫРАЗИМА уже в v1 умножением насквозь (a >= n * 15 sq_m; граница 45/44 м² на троих различается делом), истинно заблокированы кросс-юнитная ставка (mg/kg — DIMENSION_MISMATCH на исполнении), произведение двух размерных величин и производная величина как значение (оба — статический LDC-E2108); молчаливых дыр на границе НЕТ. DECISION-0068 фиксирует четыре рамки будущего unit-package: конверсия только явной формой (прецедент Money §50), канонизация существующих единиц-тегов не меняется (МРП и «щелчок» — постоянные непрозрачные жители, вход аддитивен по построению), въезд feature-флагом law.units/0.1 по образцу A3, реализация — только с мотивирующего акта (лучший кандидат — дозировка mg/kg). Вектор ERR-E0064-QUANTITY-PAIR (терм из самого примера §49) в SUPPORTED держит отрицательную половину §49 байтово: differential 144/144. Попутно добит третий случай unlink-класса E0052: T071/source.law (FunctionDecl вне среза рендерера) удалялся тем же прогоном gen_artifacts, который его создал, — теперь lawc_lower регистрирует ВСЯКИЙ скомпилированный исходник в AUTHORED_SOURCES сам, и защита распространяется на билдерные и будущие вызовы по построению; шесть исходников errata и три ver/ перестали перезаписываться канонрендером (авторитет — файл, поданный компилятору).

  • ERRATA E-0062: остаток от деления — mod был объявлен перечнем §58 и грамматикой и не существовал нигде ниже (31.08.2026). Шестое повторение класса «объявлен и неконструируем», впервые об операции самого перечня §58: лексер слова mod не знал (n mod 2 == 0 — LDC-E0201), а чётность деления не заменялась в принципе — §58/E-0020 делит целые точно. Правка: единственная пара Integer mod Integer -> Integer, остаток ЕВКЛИДОВ (0 <= r < |b| при любых знаках; родные % Rust и Python расходятся — усечённый против флорного, — поэтому конвенция стоит в prose, а вектор ERR-E0062-MOD-SIGN роняет любую реализацию на родном операторе: правило v mod 3 == 2 and v mod -3 == 2 на факте −7). mod на ноль — evaluation error, как деление на ноль; пары вне списка — TYPE_ERROR под байтовым контрактом. Ключевое слово в лексере (без него 5 mod 3 разбирался бы Quantity-литералом 5 mod), арм множительного уровня, строка таблицы видов law-hir, евклидов остаток в обеих реализациях (% abs над произвольной точностью / rem_euclid над i128), рендер векторов. Схемы не тронуты (BinaryTerm.op — свободная строка), Lean — сознательно (.opaque, граница деления). Четыре вектора, все в SUPPORTED; differential 143/143 байтово, байты корпуса не двинулись. pow из того же перечня назван смежным пробелом и не закрыт — свидетеля в корпусе нет. Попутно закрыт дефект конвейера векторов: emit_sources удалял рукописный source.law вектора, чей ir рендеру невыразим (программный assert вне среза рендерера), — ERR-E0052-DECIMAL-CANON терял исходник на каждом полном прогоне gen_artifacts; заведён реестр common.AUTHORED_SOURCES, петля рендера авторские исходники больше не трогает ни перезаписью, ни unlink-ом. Комментарии двух актов-свидетелей (togyzqumalak, calendar-act-1750) обновлены: разрыв закрыт, их решения оставлены сознательно.

  • fiqh.dayn — аят о долге (Коран 2:282-283): ВТОРОЙ пакет корпуса, где Коран есть источник с закреплёнными байтами, и первый взвешенный счёт §59 (31.08.2026). Закреплены две редакции одного work — мусхаф Медины в передаче Хафса и перевод Г. С. Саблукова 1894 года, — 21 фрагмент и 2 декларации align §29. Восемь .law, 39 правил, 10 норм-шаблонов, 52 сценария раннера dayn, differential 52 вызова байтово, Lean — 52 сертификата оракула и 52 движка приняты, 0 отвергнуто, батарея §267 — 14 рукописных + 52 порождённых .lawtest. Покрытие §33.1: EXECUTABLE 2 из 2, байтово 99,9 %, UNEXPLAINED — ноль, разметка §218 — 58/0 словаря и 49/0 норм, стабовых мостов 0 из 39 правил.

    Взвешенный счёт составов — первый в корпусе агрегат с НЕРАВНЫМ весом. Двое мужчин ЛИБО мужчина и две женщины; иерархия составов взята из условия самого аята («فَإِن لَّمۡ يَكُونَا رَجُلَيۡنِ») положительным сравнением < 2 над тем же счётом, а не отрицанием, которое на молчащем деле дало бы NEITHER. Обе стороны условия стоят ВНУТРИ одного comprehension: разнеси их — и норма держалась бы на совпадении чисел, а не на тождестве лиц. Состав из одних женщин аят не называет, и правила о нём нет ни положительного, ни отрицательного — молчание сторожит сцена DAYN-10.

    Вырез, антивырез и граница выреза — на одном деле. Наличная торговля из рук в руки снимает запись (unless §149), размер долга её не снимает («мал он или велик» выведено ПОЛОЖИТЕЛЬНО, а не оставлено отсутствием условия), а свидетелей вырез не касается вовсе — следующее предложение аята велит брать их при купле-продаже. Сцена DAYN-05 показывает все три факта разом.

    Два канала суждения §47.3 с органами, названными самим текстом, и оба держатся отдельно от того, с чем их естественно слить: ризаа сторон («مِمَّن تَرۡضَوۡنَ») — от арифметики состава, потому что через агрегат канал не проходит; малоумие должника — от немощи и неспособности диктовать, которые органа не требуют.

    Развилка о силе повеления (ваджиб у захиритов и ат-Табари, мандуб у джумхура) выражена прочтениями §152 БЕЗ приоритета и БЕЗ группы §155: база молчит о силе и отвечает без options обо всём, о чём иджма есть. Оба прочтения заякорены в закреплённые предложения — довод джумхура лежит в 2:283 («если один доверился другому»), а не в пересказе. Группа selection exactly_one не заведена намеренно: её гейт тотален по документу и вернул бы INTERPRETATION_REQUIRED на вопрос о залоге, к спору не относящийся.

    Три расхождения с заданием, все в пользу закреплённых байтов. (1) 2:283 несёт ТРЕТЬЕ распоряжение, которого бриф не называл, — запрет скрывать свидетельство с собственным последствием («ءَاثِمٞ قَلۡبُهُۥ»); формализовано. (2) Смещение нумерации Саблукова в этом участке суры равно НУЛЮ, тогда как в участке о хадже той же суры оно −5 и −4; проверено сверкой текста и примечанием самого издания. (3) Состав свидетелей для купли-продажи аят не называет — объявлено границей, а не перенесено из долговой записи.

    Найдено этим пакетом слепое пятно меры §33.1: совпавшая нумерация редакций. boundaries.py опознаёт единицу НОМЕРОМ, и когда номера двух редакций одного work совпадают, правила подлинника засчитываются переводу — по редакции Саблукова мера даёт EXECUTABLE 2 из 2 при нуле заякоренных правил. У fiqh.hajj того же отказа нет случайно: там счёт переводчика смещён. Разбор — corpus/laws/fiqh/dayn/audit.ru.md.

  • faraid.shares расширен главой «дед и братья» (аль-джадд ва-ль-ихва): первое в корпусе прочтение §152, меняющее ЗНАМЕНАТЕЛЬ (31.08.2026). Изложение sources/faraid/ru.txt дописано статьями 14-17 (дед по отцовской линии, ’умарийятан, расхождение о деде, муштарака), публикация и фрагменты §194 перепинены — 15 фрагментов вместо 11, покрытие §33.1 выросло с 73,3 % до 82,9 % (12417 из 14986 байт), учёт статей 17 из 17 без неучтённых, глубина — EXECUTABLE 13, INTERPRETED 1, SOURCE_ONLY 1 (ст. 12, объявленная граница). Новые модули 04-grandfather.law (база: иджма всех четырёх школ), 05-jadd-readings.law и 06-tashrik-readings.law (две группы прочтений). Раннер corpus/run_faraid_cases.py вырос с 7 казусов до 19, differential — 27 evaluate-вызовов байтово, Lean-сертификаты 306 принято, 0 отвергнуто, батарея §267 — 13 рукописных .lawtest (три пары на байтово одних фактах различаются одной строкой interpretation оси §168.2; мутант с вырезанной строкой роняет четыре теста), разметка §218 затянута до 31/0 словаря и 57/3 норм.

    Прочтение меняет число, а не квалификацию. На байтово одних фактах акдарии (муж, мать, дед, единственная полнородная сестра) ханафитское прочтение отстраняет сестру и сводит доли на базе 6 — 3/2/1 при нуле сестре; прочтение Зайда возвращает сестре фард 1/2, ведёт сумму аулом 6→9, складывает доли деда и сестры и делит их заново 2:1 — знаменатель 27, итог 9/6/8/4. Оба ответа известны классической литературе задолго до этого движка и потому физически не могли быть подогнаны под поведение реализации.

    База обязана быть УЗКИМ прочтением, иначе расхождение исчезает молча. interpretation только ДОБАВЛЯЕТ: присуди база сестре её фард ст. 8 при живом деде — ханафитское прочтение не смогло бы его отнять. Поэтому FullSisterAloneHalf, FullSistersTwoThirds, UterineOneSixth, UterineThirdShared и FullBrotherTakesResidue получили гард «и деда нет» по образцу их же гарда об отце (semanticHash изменился, семейство перепинено). Молчание базы держат казус k-akdariyya-base-silent и тесты §267 05/06; обе стороны проверены мутацией — вписанное в базу ханафитское отстранение роняет первый, снятый гард роняет второй.

    Две группы независимы, и это выводит тальфик. Разрез школ в ст. 16 (Малик, аш-Шафи’и, Ахмад против Абу Ханифы) не совпадает с разрезом ст. 17 (Абу Ханифа и Ахмад против Малика и аш-Шафи’и). Казус s-talfiq-across-groups выбирает ханафитское прочтение о деде вместе с маликитско-шафиитским о муштарака — механически проходит, оба выбора доезжают до движка (сверяется manifest.interpretations). Зазор с доктринальной дозволенностью (fiqh.taqlid ст. 10) зафиксирован комментарием; межпакетный мост НЕ строился.

    Арифметика осталась в запросах (§111), новизна — их исполнение ПОД прочтением. Наибольшее из трёх, передележ акдарии и деление фонда единоутробных считаются запросами; выбор дублируется в case.options, иначе differential сверил бы базовую теорию, напечатав «байты идентичны». Три соседних состава (n, o, p) держат исключение акдарии в его границах.

    Пробел базы, найденный по дороге: отец при ПОЛНОМ отсутствии потомков к остатку не призывался вовсе — FatherTakesResidue покрывал лишь случай потомков женского пола, и ни один из семи прежних казусов не ставил отца в такой состав. Заведено FatherTakesResidueWithoutDescendant (ст. 15 абз. 2).

  • kz.corpus.emle — көптік жалғау: первая грамматическая система корпуса, и первый акт, у которого нормодателя НЕТ (31.08.2026). Заведён corpus/laws/kz/emle — kz.corpus.emle → kz-emle.lawir.json. Предмет — выбор аффикса множественного числа казахского языка (-лар/-лер/-дар/-дер/-тар/-тер) как норма ПИСЬМА. Разведка разошлась с брифом решающим образом: акта «Об утверждении правил правописания казахского языка» в ИПС «Әділет» НЕТ — проверено полнотекстовым поиском портала на обоих языках и перебором буквенных форм id постановления 1993 года; сам действующий приказ это подтверждает изнутри — подпункт 2) пункта 7 Положения ставит Республиканской орфографической комиссии задачу «емле ережесінің жобасын … бекітуге ұсыну», то есть ПРЕДСТАВИТЬ проект на утверждение. Отсюда два закреплённых Work’а с разными ролями: приказ Министра науки и высшего образования РК от 30.09.2024 № 468 (НПА: п. 4 Положения объявляет принципом «қазақ тілінің үндестік заңын сақтау», п. 7, 14 и 18 делают Комиссию кодификатором) и справочник Р. Сыздық «Қазақ тілінің анықтағышы» (Астана: Елорда, 2000) — свидетель материальной нормы, officiality unofficial, единственный из проверенных текстов, называющий все шесть алломорфов дословно и по обеим осям сразу: «қала+лар, көше+лер, ат+тар, ит+тер, қаз+дар, із+дер». ГЛАВНЫЙ РЕЗУЛЬТАТ ПАКЕТА — МОЛЧАНИЕ ИСТОЧНИКА, СДЕЛАННОЕ ГРОМКИМ. § 31«а» справочника делит конечные звуки НАДВОЕ, а не натрое: «дауысты немесе үнді (м, н, р, л, ң, у, й) я ұяң (ж, з)… қосымша ҮНДІ НЕ ҰЯҢ дауыссыздан басталады» — то есть после сонорной основы аффикс начинается либо с сонорного (-лар), либо со звонкого (-дар), и выбора текст не делает; примеры преамбулы закрывают только гласный, звонкий и глухой. Дело о слове «тау» поэтому даёт NEITHER с evaluationStatus REQUIRES_JUDGMENT и типизированным запросом к Республиканской орфографической комиссии (канал §47.3, authority взят из закреплённого приказа, а не выдуман), а adjudicated assertion §73 замыкает вывод обычным путём. Сам справочник при этом употребляет «таулар» 109 раз и «адамдар» 23 — но словоупотребление есть данные, а не норма, и выводить из него правило пакет отказывается. Фонологические свойства основы — ТИПИЗИРОВАННЫЕ ФАКТЫ ДЕЛА, а не разбор строки (решение человека). Довод не только в том, что строковых операций в замкнутой поверхности вычислимого нет: § 31 не говорит «возьми последнюю букву», он ОТНОСИТ звук к названному классу, и отнесение есть юридический факт. Следствие названо прямо: слово без объявленных ряда и класса даёт NEITHER — ответ пакета, а не пробел формализации. Два отступления выражены поражением, и оба действуют НА ВХОД, а не на ответ. Правило раздела «Сөз сазы» о к, г снимает ряд основы («түбірдегі дауысты мейлі жуан болсын, мейлі жіңішке болсын» — «парктер» при заднем «а»); дәнекер ы, і § 32 подменяет класс конечного звука, потому что вставная гласная и есть новый конец слова («қосымшалар ұяңдап кетеді … митинг+тер — митинг+і+лер»). Закрытый перечень § 32 (нд, нз, нк, нг, мп, мб, мт, кт, ск, вт, фт, пт) живёт В ЯЗЫКЕ — двенадцатью вариантами enum и двенадцатью assert, — а не прозой в метке. 19 сценариев семейства emle, differential 19 evaluate-вызовов байтово идентичны (liblaw_ffi == lawref), 14 рукописных .lawtest §267 и 19 порождённых, разметка §218 18/0 словаря и 17/0 норм, мёртвых правил и стаб-цепей ноль, doctor.py — «пробелов нет». МЕРА §33.1 ПОТРЕБОВАЛА ЗАКРЕПИТЬ СПРАВОЧНИК ЧАСТЯМИ, И ЭТО ГЛАВНАЯ ПРАВКА ФАЗЫ 5. Книга нумерует § ЧЕТЫРЬМЯ независимыми сериями (§1…§129 правил орфографии, §1…§126 и §1…§87 о знаках препинания, §1…§36 о звучании слова) — 376 маркеров при 129 уникальных номерах. Целиком она неизмерима, но молчала об этом НЕВЕРНО: автоопределение ловило 28 маркеров из 376 — ровно те, что издание набрало без пробела («§47.» против «§ 47.»), — объявляло книгу измеримой по случайной типографской выборке и требовало фрагментов на «статьи» 10…36 и 47, которых у документа нет. Закреплены три части, у каждой свой счётчик: вводный очерк «КIРIСПЕ» (§ не нумерует вовсе — unmeasured честно, но именно там перечень фонетического принципа называет все шесть алломорфов), раздел орфографии § 1 — § 129 и раздел о звучании слова § 1 — § 36; разделы о знаках препинания не закреплены вовсе — из них не выводится ничего. Заведена конвенция деления kk_paragraph_sign В ОБЕИХ мерах §33.1 (check_source_pinning.py и act_split.py), в автоопределение не входит. Фрагменты нарезаны по ней на ВСЕ 127 + 36 единиц. § 63 и § 64 в разделе орфографии отсутствуют — между § 62 и § 65 текст течёт непрерывно, ни в какой форме набора этих номеров в текстовом слое издания нет; отсюда 127 единиц при номерах, доходящих до 129, и число объявлено в генераторе, а его расхождение роняет прогон. Глубина по разделу орфографии: EXECUTABLE 3, SOURCE_ONLY 124; у приказа и у вводного очерка мера честно неприменима. Границей v1 с причиной объявлен § 33 (сс, лл, тт, пп, ст…): он предписывает написание ОСНОВЫ, а не выбор аффикса. Байтовая доля покрытия §33.1: раздел орфографии 99,9 % (127 фрагментов), раздел о звучании 96,7 % (36), приказ 18,9 % (5), вводный очерк 1,0 % (1). Точечный package_report ворот закрепления по пакету — проблем нет.

  • Покаянные дни латинской Церкви: одна власть, употреблённая в две стороны (31.08.2026). Новый пакет vat.canon.paenitentia — cann. 1249-1253, 1245 и 97 §1 Кодекса канонического права 1983 года, определения поста и воздержания из нормы III апостольской конституции «Paenitemini» (Павел VI, 1966) и два декрета конференций епископов, употребивших одну и ту же делегированную власть в ПРОТИВОПОЛОЖНЫЕ стороны: конференция США (18.11.1966) сняла обязательность мясного воздержания вне Великого поста, конференция Англии и Уэльса (13.05.2011) восстановила её. Один и тот же верный в одну и ту же пятницу связан или не связан воздержанием от мяса — в зависимости от того, на какой территории он живёт, и оба ответа законны. Развилка выражена толкованием §152 поверх УЗКОЙ базы: базовая теория выводит для пятницы только «воздержание связывает, материя оставлена конференции», а мясную материю добавляет то прочтение, которое её предписывает, — сделай базой мясное воздержание, и прочтение США, которое его СНИМАЕТ, выразить было бы нечем. Четыре работы трёх уровней в одном пакете, и делегация у двух декретов стоит на РАЗНЫХ основаниях. Декрет США издан за семнадцать лет до Кодекса, и c. 1253 его основанием быть не может — им является норма VI §1 b) конституции, которую сам декрет и называет («In keeping with the letter and spirit of Pope Paul’s Constitution Poenitemini»); резолюция 2011 года стоит уже на c. 1253. Оба основания объявлены §27.1 (basis, regulates, authority) и ездят вместе с пакетом. Асимметрия возрастов c. 1252 — с парой дел по обе стороны каждой границы. Воздержание — [14, ∞) без верхней границы вовсе, пост — [18, 59), причём верхняя снимается в день ПЯТИДЕСЯТИДЕВЯТИЛЕТИЯ: «usque ad annum inceptum sexagesimum» есть «до НАЧАВШЕГОСЯ шестидесятого года жизни», а он начинается именно в этот день. Прочтение «до шестидесяти» дало бы человеку лишний год обязанности, и ни одна проверка типов этого не поймала бы. Числа 18 в c. 1252 нет — он говорит «aetate maiores», и число даёт c. 97 §1, ради которого канон и взят в срез. Подвижные даты — параметрами A3, а не вычислением. Computus в объём v1 не входит: Пепельная среда, Страстная пятница и торжество Пресвятого Сердца Иисуса лежат тремя *.lawparam.json типа Date первые Date-параметры корпуса: прежде все девятнадцать его *.lawparam.json несли Decimal либо Integer, и то, что ось legal_time умеет выбирать ДАТУ, а не только величину, до этого пакета не было проверено ни одним живым актом, покрытие 2024-2027, вне покрытия MISSING_PARAMETER_VALUE, а не молчаливый ноль. Порождаются sync_paenitentia_calendar.py по названному алгоритму: это единственное место пакета, где величина не сверяема с закреплёнными байтами, и потому она сверяема хотя бы алгоритмом. 43 сценария регрессии, differential 43 evaluate-вызова байтово (liblaw_ffi == lawref), Lean-сертификаты 43 принято, 0 отвергнуто, 4 .lawtest §267, глубина §33.1 — 7 из 7 канонов EXECUTABLE, у конституции 2 из 10 при восьми объявленных границах, у декрета США 3 INTERPRETED при двух объявленных; стаб-цепей ноль, мёртвых символов и правил ноль.

  • Демо «Судебная карточка ↔ ГПК»: ход гражданского дела, восстановленный из журнала событий и прогнанный процессным слоем через формализованный ГПК РК (30.08.2026). Пакет kz.corpus.civil_procedure расширен двумя модулями — 08-procedural-terms.law (сроки статей 150, 164, 173, 183 и 403 как НОРМЫ: предельная дата выводится термом §86 из даты дела и становится окном §124 деонтической позиции) и 09-first-instance-process.law (автомат §160 искового производства: 15 стадий, 18 переходов, два цикла — приостановление ↔ возобновление и оставление жалобы без движения ↔ устранение недостатков). До этого lawref process corpus/clir/kz-gpk.lawir.json отвечал «процедур 0, состояний 0, переходов 0», а весь пакет из 738 правил не содержал НИ ОДНОЙ деонтической позиции — кодекс о сроках не мог назвать ни одного срока датой. Три журнала дел при пакете (journals/) и демо-инструмент corpus/tools/gpk_case_card.py — чистая оркестрация поверх канонических байтов отчёта О-5. Семейство gpk 174 → 190 сценариев, 5 рукописных .lawtest §267, lawc check чист, стаб-цепей среди 31 нового правила ноль.

  • Приостановление течения сроков (статья 125) — сделано ТОЧНО там, где язык это позволяет, и названо границей там, где нет. Часть 1 («течение всех не истекших процессуальных сроков приостанавливается») выражена через день начала течения: срок, начавший течь ДО определения о приостановлении, предельной даты не получает вовсе, — и демо поэтому не обвиняет суд в просрочке остановленного срока; срок, начавший течь со дня возобновления или позже, считается как обычно (расщепление §206 на две ветви, пара сценариев GPK-TERM-04 и пара .lawtest). Часть 2 требует ОСТАТКА срока, а замкнутая поверхность §84/§86 не содержит ни счёта рабочих дней между двумя датами, ни шага на переменное число дней; вместо молчания выводится term_recomputation_required_after_suspension со ссылкой на часть 2. Отдельным правилом выражено различие «отложение ≠ приостановление» (статьи 198 против 125): отложенное заседание срок рассмотрения не продлевает, и вывод об этом сделан явным, а не оставлен читателю карточки.

  • Календарь сроков процессного слоя видел только ВПИСАННЫЕ пределы и молча терял ВЫВЕДЕННЫЕ (lawref.process, 30.08.2026). _window_end читал окно §124 из norm_template, а у нормы с вычисляемым сроком там стоит переменная — строка отбрасывалась, и раздел deadlines отчёта О-5 был пуст ровно у тех норм, ради которых он существует. Правая граница теперь берётся из МАТЕРИАЛИЗОВАННОЙ позиции (шаблон остался запасным путём); канарейка в check_process.py строит обязанность с пределом из даты дела и обязана падать без починки — проверено. Тем же прогоном закрыт второй разрыв: журнал не мог передать БАЙТЫ календарного набора §85 (в JSON их не записать, а case.options канонизируется в caseHash §170 и падал бы CanonError на каждом вызове) — добавлен проброс resources через impact.run_scenario мимо дела и флаг lawref process-run --calendar-resource.

  • Две границы §86 предъявлены сценариями, а не обойдены. (1) Политика §86 у дела ОДНА, а семейства единиц §84 требуют несовместимых: add_business_days отвергает policy с month_end, add_calendar_period требует его и требует roll = no_roll (errata E-0029) — пересечение пусто, а ГПК считает рабочими днями и месяцами в одном производстве. GPK-TERM-10 требует, чтобы соседнее семейство отказывало КОДОМ, а не молчало; демо делает по два прогона на журнал и говорит это в шапке карточки. (2) Статья 123 часть 4 переносит окончание срока, исчисляемого месяцами, на следующий рабочий день, а add_calendar_period перенос запрещает — месячный предел, выпавший на выходной, пакет вернёт нерабочей датой. Расхождение найдено ИЗМЕРЕНИЕМ: первая редакция журнала стояла на пределе 2026-08-15 — субботе; даты сдвинуты на рабочие пределы, а класс закреплён сценарием GPK-TERM-11, который упадёт в день, когда errata к §86 разрешит перенос.

  • Контрапункт строгого письма: обязанности позициями §123 и ось стиля прочтениями §152 (30.08.2026). gradus.counterpoint расширен тремя модулями (09-styles.law, 10-deontic.law, 11-judgment.law) и первым в своей истории прогоном регрессии — семейство gradus, 13 сценариев, corpus/kz/acts/gradus.py. Найдено: вся обязывающая половина пакета не исполнялась на деле — двенадцать constraint … require при полностью зелёной батарее из 15 .lawtest, потому что evaluation-документ 0.1 констрейнты не считает вовсе, а тесты спрашивали положительный предикат, чьё NEITHER от молчания неотличимо. Шесть обязанностей (ст. 4, 5, 6, 10) записаны приёмом bcp14 — goal maintenance + презумпция + поражающие правила + приоритет; констрейнты оставлены как декларации инвариантов для фаззера. Ось стиля даёт четыре различимых ответа на одном баховском обороте: молчание базы, запрет строгого модального прочтения, дозволение барочного и BOTH при выборе обоих. Починен разъезд страт, пойманный сценой: поражающее правило, читавшее предикат состава, производимый под прочтением ПОРАЖАЕМЫМ правилом, уезжало рангом выше презумпции — приоритет §116 молчал, позиция выходила CONFLICTED вместо VIOLATED при зелёных check, lower и воротах мёртвых правил; вылечено сменой посылки на строгие предикаты состава. Ст. 1 получила фрагмент (прежнее решение отменено явно) — на ней стоит канал суждения §47.3 с органом CounterpointTeacher, отводящий музыкальное достоинство упражнения за границу изложения с REQUIRES_JUDGMENT. Латинский оригинал 1725 объявлен вторым источником с редакцией UNAVAILABLE: IMSLP отдаёт только сканы без текстового слоя, OCR-выгрузка Internet Archive недостижима, и закрепление OCR печати 1725 года испортило бы ровно те числа, из которых выводятся разряды интервала. Отвергнуты с измерением: closure §70 (LDC-E2114 — унарность), interpretation_group … exactly_one (INTERPRETATION_REQUIRED на любой запрос, все 15 тестов краснеют), A3-таблица (разряд интервала — определение в прозе, а не матрица, и по legal_time не меняется). Глубина §33.1 — EXECUTABLE 12/12 (было 11/12), differential 13 вызовов байтово, разметка §218 47→55 словаря и 109→150 норм при нуле неразмеченного.

  • anthropic.constitution — конституция Claude: первый акт корпуса, чей адресат — модель (30.08.2026). Заведён corpus/laws/anthropic/constitution — anthropic.constitution → anthropic-constitution.lawir.json; правопорядок Anthropic (новая строка реестра §27.1: частный трансграничный нормодатель, ближайшая родня — IETF, отличие в адресате). Закреплена январская редакция 2026 года из EPUB издателя (sha256 в коде получателя, адрес на CDN неизменяем), 40 фрагментов на всех сорока именованных разделах, CC0 1.0. Единица деления заведена этим пакетом: named_section — раздел с ИМЕНЕМ и без номера, обе меры §33.1 узнают его по таблице заголовков из articles.json самого акта; составной номер учёта выведен из разметки издателя (уровни chapter-header/subheader/H3/H4), а не назначен. Три артефакта издателя расходятся — страница anthropic.com/constitution против PDF и EPUB даёт 147 несовпадающих блоков по предложениям, и расхождение решающее: перечень базовых ценностей на странице теряет нумерацию, которую сам документ называет носителем приоритета («prioritize these properties in the order in which they are listed»). Страница в v1 не закрепляется — её состояние издателем не датировано, а редакция §31 без даты машине D1 не предъявима; цена выбора названа: в закреплённом артефакте нет веб-фразы об охвате предисловия. Объём v1 — объявленный срез из четырёх разделов: закрытый перечень семи жёстких ограничений, названный порядок четырёх ценностей, умолчания поведения с властью оператора и пользователя, корригируемость как пара §127/§128. 28 сценариев семейства anthropic-constitution, differential 45 evaluate-вызовов байтово идентичны (liblaw_ffi == lawref), разметка §218 53/0 словаря и 68/0 норм, мёртвых правил и символов ноль, doctor.py — «пробелов нет», фаззер: 58 правил применились, мёртвых нет ни одного. байтовое покрытие 98,0 % при 40 фрагментах и 40 учтённых единицах из 40. Lean-сертификаты: принято 44, отвергнуто 1 — отказ квалифицирован как дефект ОРАКУЛА (§181.1 кладёт узел candidate_closure на кандидата, а не на конфликтную группу; детектор: пропущенных кандидатов 0, дублей conflictKey 1 из 45), и класс в репозитории уже открыт — тем же классом красен repka — 26 принято, 8 отвергнуто, замерено этой же сессией тем же зондом, что и делает квалификацию проверенной, а не припомненной; ранее тот же класс записан у zhirenshe, leonard-v-pepsico и f1_sporting. Акт к классу присоединяется, а не вводит его, и под ядро не подгоняется. Мера §33.1: EXECUTABLE 5, SOURCE_ONLY 35, UNEXPLAINED 34 — и это заголовочный результат, а не недоделка: пять разделов из сорока дают правила, остальное говорит о характере, и пропорция измерена, а не назначена.

  • Исчерпанность перечня выражается презумпцией, а не замыканием §70, если основания выводятся правилами (30.08.2026). Найдено на жёстких ограничениях конституции Claude: closure над hard_constraint_engaged объявлял ложным вывод собственных продюсеров — замыкание закрывает основания, которые поставляет ДЕЛО, и выводы правил в его снимок не попадают. Дело с прямо заявленной категорией давало FALSE_ONLY при полностью зелёном lawc check, а обязанность не рождалась вовсе. Заменено презумпцией непричастности с приоритетом на каждое основание перечня; сторож — ACON-02.

  • osm.mejelle — Маджалла: первый исламский пакет с настоящим кодифицированным актом и поражаемым слоем из него (30.08.2026). Заведён corpus/laws/osm/mejelle — osm.mejelle → osm-mejelle.lawir.json. Мажалла аль-ахкам аль-адлия (مجلة الأحكام العدلية, 1869–1876), гражданская кодификация ханафитского фикха Османской империи; закреплён срез из 161 статьи: введение (ст. 1–100 — определение фикха и 99 правовых максим) и книга III о поручительстве (كتاب الكفالة, ст. 612–672). Отличие от всей линии fiqh несущее: закят, васыйя, никах, хадж и саум — доктрина либо авторское изложение без юрисдикции, а здесь есть правопорядок (OttomanEmpire, новая строка реестра §27.1), издатель (комиссия Ахмеда Джевдет-паши), официальная публикация и редакция in_force [@1876-01-01, infinity), объявленная по закреплённому байту источника («ساري النفاذ في الضفة الغربية وغزة» — действует на Западном берегу и в Газе), а не по знанию формализатора; ни поэтапное введение книг, ни отмена ГК Турции 1926 года закреплёнными байтами не подтверждаются и потому отсутствуют. 60 сценариев семейства mejelle, differential 109 evaluate-вызовов байтово идентичны (liblaw_ffi == lawref), Lean-сертификаты 109 принято, 0 отвергнуто, 10 рукописных .lawtest §267, разметка §218 217/0 словаря и 138/0 норм, мёртвых правил, символов и висячих якорей ноль, doctor.py — «пробелов нет». Мера §33.1: EXECUTABLE 75, SOURCE_ONLY 86, UNEXPLAINED 0; байтовая доля 94,2 % при 161 фрагменте.

  • Викитеки у Маджаллы НЕТ, и это измерено; закреплены два свидетеля, исправляющие друг друга. Бриф называл источником ar.wikisource; такой страницы не существует, а элемент Wikidata Q1435600 не имеет ни одной ссылки на wikisource (проверены все 17 sitelink-ов) — прецедент fiqh.hajj неприменим целиком. Публикацией объявлена страница «موسوعة مقام» (maqam.najah.edu/legislation/158), база законодательства юрфака Национального университета ан-Наджах; вторым свидетелем служит печатное издание Наджиба Хававини (Карачи) через «المكتبة الشاملة». У обоих дефекты нумерации, и ни один не находится одним свидетелем: у базы три записи в срезе кафалы помечены статьями 613–615, а несут текст статей 1613–1615 (потеряна ведущая единица), у издания статья 641 помечена «٤٦١» (перестановка цифр). Правило отсева требует ДОКАЗАТЕЛЬСТВА — текст выброшенной записи обязан совпасть с текстом статьи N+1000 — и падает без него; сверка свидетелей воспроизводима (fetch_mejelle_text.py --witness: 148 из 161 посимвольно после снятия огласовок). Свидетель публикацией НЕ объявлен: у редакции §27 ровно одна публикация, а двух редакций здесь нет — текст один, расходятся оцифровки.

  • Субсидиарный ранг ст. 1 измерен пробой фазы 1, а не заявлен. priority §116 «статья над максимой» при обеих нормах в страте 0 даёт TRUE_ONLY; без priority — BOTH; с priority, но когда статья читает выведенный поражаемый предикат, — снова BOTH при чистом check. Форма ВЫРАЗИМА, но молчалива за пределами страты; пакет берёт вторую (решение человека): максима есть презумпция, конкретная норма книги III — строгое правило, поставляющее основание её снятия, а приоритет не объявляется нигде. Восемнадцать максим исполнимы, 82 объявлены границей с причиной, прочитанной по тексту статьи (81 с полем despite, называющим найденный воротами признак поимённо). Расхождение ст. 24 и ст. 51 пакет НЕ разрешает и выводит третьим предикатом not_resolved_by_this_package (приём hasbro.rules.monopoly); ст. 21–22 о необходимости оказались без текстового крючка в книге III и объявлены честной границей.

  • Первый арабский текст под мерой §33.1: конвенция ar_article и свой набор признаков исполнимого содержания. Единица المادة N. заведена В ОБЕИХ мерах (verify/ci/gates/sources/check_source_pinning.py и corpus/tools/lib/act_split.py) — расхождение здесь молчаливо: одна мера показала бы 161 статью, другая «мера неприменима». В автоопределение конвенция НЕ входит: слово «المادة» стоит внутри перекрёстных отсылок самого акта. Арабский набор признаков строится из основ БЕЗ огласовки одним правилом (arabic_stem) — в закреплённом тексте стоит يَجُوزُ, и голое يجوز не совпадает с ним ни одним символом подряд; набор двухпластовый (язык книги договора плюс язык книги максим, где норма не имеет модального слова вовсе) и откалиброван на книге о кафале: 58 статей из 61, молчит на трёх голых определениях термина. В SOURCE_DOCUMENTS меры глубины добавлен ar.txt.

  • Две границы движка, встреченные на власти §127 ст. 640 и обойдённые предписанным приёмом. effect terminate(...) вне v1-подмножества исполнителя §127.2 (берётся только create с литералом-последствием) — власть видна, действие её нет, NON_EXECUTABLE_RULE; и факт из материализации эффекта §127.2 НЕВИДЕН поражаемому слою (DECISION-0021 §4.3), поэтому презумпция ст. 5 состоявшегося выхода поручителя не увидела бы. Обе квалифицированы как ограничения v1, обе обойдены: власть создаёт положительный факт, рядом стоит строгое правило, выводящее то же следствие из тех же условий, что в valid_when, и парность закреплена сценарием, где без условия тот же выход обязан остаться без последствия.

  • fiqh.sawm — саум: пост Рамадана, третий столп и седьмой акт исламской линии; ДВЕ ДЕОНТИЧЕСКИЕ ФОРМЫ, РАЗЛИЧЁННЫЕ НА ОДНИХ ФАКТАХ (30.08.2026). Заведён corpus/laws/fiqh/sawm — fiqh.sawm → fiqh-sawm.lawir.json. Двухэтажный источник по образцу fiqh.hajj: авторское изложение из семнадцати статей (authored_exposition, PINNED_OFFICIAL_BYTES, охват фрагментами 87,5 %, учёт статей 17 из 17) плюс восемь аятов байтами в двух редакциях — подлинник (мусхаф Медины, передача Хафса) и перевод Г. С. Саблукова 1894 года, обе PINNED_UNOFFICIAL_COPY, охват 99,8 % и 99,8 %, — совмещённых восемью декларациями align §29. НЕСУЩИМ ИСТОЧНИКОМ ОБЪЯВЛЕНО ИЗЛОЖЕНИЕ, А НЕ КОРАН, и этим пакет расходится с хаджем: аяты дают обязанность, границы дня, освобождения, возмещение, выкуп, счёт по луне и лестницу каффары, но не дают ни порогов свидетелей, ни запретных дней, ни меры мудда, ни срока нията — большая часть норм стоит на учении, и объявить несущим Коран значило бы обещать вывод из него. 51 сценарий семейства sawm, differential 76 evaluate-вызовов байтово идентичны (liblaw_ffi == lawref), Lean-сертификаты 76 принято, 0 отвергнуто, 7 рукописных .lawtest §267 и 3 свойства §270 (домены 1/1/2, обе канарейки называют контрпримеры поимённо), разметка §218 108/0 словаря и 89/0 норм, мёртвых правил, символов и висячих якорей ноль, стаб-цепей 0 из 79 правил, каждый из 44 эмпирических предикатов подаётся хотя бы одним делом (сверка нашла семь неподанных — четыре закрыты сценариями SAWM-48…51, три подаются журналами процесса), doctor.py — «пробелов нет». Мера §33.1 по подлиннику: EXECUTABLE 7, SOURCE_ONLY 1, UNEXPLAINED 0; по изложению: EXECUTABLE 14, ANCHORED 1, вне пакета 2. Состав аятов разошёлся с заданием ТРИЖДЫ, и все три расхождения меняют, на чём стоит акт. (1) Добавлены 58:3-4: задание относило лестницу каффары к сунне целиком, тогда как в аяте о зихаре стоят дословно все три ступени («فَتَحۡرِيرُ رَقَبَةٖ», «فَصِيَامُ شَهۡرَيۡنِ مُتَتَابِعَيۡنِ», «فَإِطۡعَامُ سِتِّينَ مِسۡكِينٗا»), их порядок (маркеры «فَمَن لَّمۡ يَجِدۡ» и «فَمَن لَّمۡ يَسۡتَطِعۡ») и оба числа; учением установлено лишь ОТОЖДЕСТВЛЕНИЕ каффары поста с каффарой зихара. Без этих двух аятов число шестьдесят было бы величиной, которой нет в закреплённом тексте. (2) Добавлен 2:189 — единственная кораническая опора счёта времени по луне. (3) 2:186 взят блоком ради непрерывности пассажа и объявлен границей с причиной, а 2:188 не взят: он начинает другой предмет. Смещение нумераций получено сверкой ТЕКСТА: во второй суре −4, тогда как у fiqh.hajj на аяте 2:158 то же смещение −5 — оно меняется ВНУТРИ суры, и арифметика дала бы уверенно неверный ответ; в пятьдесят восьмой суре +1, потому что Саблуков разбил аят 58:2 на два стиха. Предмет акта — удержание состояния, и деонтика это выражает двумя разными формами. Дневной пост есть maintenance §137 с ОТРИЦАТЕЛЬНЫМ условием цели (condition not fast_broken(f)): выведенное нарушение делает условие FALSE_ONLY, и позиция VIOLATED в тот же день — «один нарушитель её нарушает, и последующее воздержание нарушения не отменяет» (ст. 4). Возмещение есть achievement §136 со СРОКОМ, чья верхняя граница окна берётся ПЕРЕМЕННОЙ из факта дела next_ramadan_starts(f, d): литеральная дата у доктрины была бы подделкой, а открытое окно значило бы, что срок не исполняется ничем (достижительная цель с окном до бесконечности не нарушается никогда). На ОДНОМ деле «нарушил и не возместил» первая позиция VIOLATED, вторая ACTIVE (SAWM-20/21); после срока при молчании дела UNDETERMINED, при явном отрицании исполнения VIOLATED (SAWM-23/24). АСИММЕТРИЯ УМЫСЛА — центральный факт, и она держится ПАРОЙ ПОЛЯРНОСТЕЙ одного эмпирического предиката (приём двух ставок ушра fiqh.zakat): съеденное по забывчивости даёт ПОЛОЖИТЕЛЬНЫЙ вывод «день цел», съеденное умышленно — fast_broken, а дело, смолчавшее об умысле, не получает НИ ОДНОГО из двух ответов (SAWM-10/11/12) — открытый мир §70 отрицания из молчания не даёт, и это проверяется, а не подразумевается. Найдено три вещи, ни одна из которых не была записана прежде. (1) Канал суждения §47.3 через АГРЕГАТ не проходит: правило со счётом читает just_witness внутри comprehension, счёт исполняется и ответ даёт верный, а запрос без ответа судьи приходит как NEITHER с ПУСТЫМ judgmentRequests — канал теряется молча. Обратный ход измерен тоже: перенести счёт на выводимое нельзя вовсе (барьер §111 → NON_EXECUTABLE_RULE, месяц не начинается никогда). Отсюда форма ст. 13: асимметричный порог свидетелей (Рамадан — один справедливый при облачном небе, Шавваль — два) считает агрегат, а требование справедливости несёт СТРОГОЕ правило с литеральной головой, на котором запрос виден. (2) A3-параметр разворачивается внутри операнда СРАВНЕНИЯ: известно было, что голое имя работает в терме и не работает аргументом головы; здесь измерено, что операнд сравнения — тоже терм (60 даёт TRUE_ONLY, 59 — NEITHER при KaffaraConsecutiveDays = 60). (3) not над ВЫВОДИМЫМ предикатом молчит и в правиле власти §127: первая редакция читала not capable_of_vow(p) и отвечала NEITHER и способному, и неспособному при полностью чистой статике; поймал сценарий SAWM-39, починка — §206-расщепление на два правила над эмпирическими основаниями под замыканием §70. Шестьдесят дней подряд — процесс §160 с ЦИКЛОМ. procedure KaffaraSixtyDays: четыре стадии, четыре перехода, ребро RestartStreak из Interrupted назад в Counting — прямое утверждение ст. 12 («перерыв счёта возвращает лицо в начало»), выраженное графом; без него сорвавшийся застревал бы навсегда, то есть автомат утверждал бы о праве неправду. Два журнала: чистый прогон, где заявленное на сороковом дне завершение даёт ATTEMPT_WITHOUT_EFFECT §164 (переход доступен, гард NEITHER, потому что 40 < 60 — различает шаги не действие, а A3-параметр), и срыв на сорок первом дне со сбросом, после которого порог берётся лишь спустя сто дней от начала. Назр — власть §127 у ЧАСТНОГО ЛИЦА, редкий случай: носитель и предмет власти одно лицо, обет создаёт обязанность у самого обещавшего. Обет на день Ида даёт на одном дне три позиции сразу — duty FastByVow, prohibition FastOnForbiddenDay и power MakeVow, все ACTIVE: ст. 14 абз. 3 отношения между запретом и обязанностью не устанавливает, и приоритет §116 здесь не объявлен нигде. Тот же сценарий сторожит ГРАНИЦУ СРЕЗА: запрет §130 не получает VIOLATED никогда (нужна событийная модель §79), и он покраснеет, когда она появится, — граница устареет громко. Мазхаб выбран, расхождения не сглажены. База — ханафитское прочтение, записанное в law.toml с причиной (довод fiqh.nikah); четыре точки ст. 16 — беременная и кормящая, срок нията, порядок каффары (тартиб против тахйира), просрочка возмещения — выводятся как ФАКТ дела divergent_case, приоритета §116 между прочтениями нет. Свойство §270 EveryBarredStepIsOpenUnderTakhyir ломается, называя контрпримером каждую закрытую ступень, если расхождение о порядке схлопнуть в один ответ. ГРАНИЦЫ: заря, ночь и лунный календарь не вычисляются (ст. 4 — день месяца Integer плюс название перечислением, наступление следующего Рамадана факт дела); числа пропущенных дней, дней подряд и накормленных бедных приходят фактами, а не агрегатами (барьер §111 — считать пришлось бы по выводимому); добровольный пост, итикаф, молитва и порядок разрешения дел органом объявлены ст. 17 не охватываемыми. У границы ст. 1 ворота закрепления потребовали поля despite и получили его: слово «подлежат» стоит там в обороте о самом документе, а не в норме.

  • fiqh.taqlid — таклид: первое применение interpretation §152 в исламской линии корпуса и ВТОРАЯ МОДЕЛЬ спора, уже смоделированного fiqh.nikah (30.08.2026). Заведён corpus/laws/fiqh/taqlid — fiqh.taqlid → fiqh-taqlid.lawir.json, шестой акт исламской традиции. Авторское изложение из одиннадцати статей, написанное для репозитория и закреплённое байтами (authored_exposition, PINNED_OFFICIAL_BYTES, 13754 Б, охват фрагментами 83,9 %, учёт статей 11 из 11). 32 сценария семейства taqlid, differential 103 evaluate-вызова байтово идентичны (liblaw_ffi == lawref), Lean-сертификаты 103 принято, 0 отвергнуто, 9 рукописных .lawtest §267 плюс 93 порождённых и 2 свойства §270, разметка §218 54/0 словаря и 47/0 норм, мёртвых правил, символов и посылок в никуда ноль, стаб-цепей 0 из 46 правил, doctor.py — «пробелов нет». Мера §33.1: EXECUTABLE 8, SOURCE_ONLY 2, UNEXPLAINED 0 (три единицы объявлены границами с причиной, проверенной по тексту). Предмет — не содержание норм, а порядок, в котором право отвечает лицу, когда школы отвечают по-разному. Два вопроса взяты потому, что расхождение по ним засвидетельствовано и уже выведено divergence-фактами у соседа: участие вали при никахе совершеннолетней женщины и тройное объявление талака одним произнесением. Четыре мазхаба дают по первому вопросу три различимых ответа (ханафитское — действителен; маликитское — фасид, расторгается кадием; шафиитское — не заключён, отсутствует рукн; ханбалитское — батиль), и каждый закреплён своей головой: свести их к одной значило бы стереть различие между «расторгается» и «не заключён». Архитектура выведена из механики, а не выбрана. Базой записано ОБЩЕЕ МЕСТО школ, потому что interpretation §152 умеет только ДОБАВЛЯТЬ; прочтение поставляет базе строгую посылку, а не побеждающее правило (priority внутри толкования видит только своих — LDC-E1318 на lower при зелёном check), поэтому оба соперника и приоритет §116 живут в базе. Правила прочтений strict обязательно: поражаемая посылка увела бы потребителя стратой выше §110, конфликтная группа §111 не собралась бы, и ответ стал бы BOTH вместо TRUE_ONLY при всех зелёных статических воротах. Каждая развилка сторожится парой сцен на одном факте (без выбора FALSE_ONLY, с выбором TRUE_ONLY): TAQ-05/06 о вали, TAQ-16/17 о греховности произнесения. Группа §155 — any_of, а не exactly_one: тальфик обязан остаться выразимым, потому что ст. 10 изложения прямо оставляет вопрос усуля открытым. Гейт предъявлен СОДЕРЖАТЕЛЬНЫМ. Ст. 7 отвечает лицу об окончательности связи на пустых options (о счёте у четырёх мазхабов иджма) и молчит о греховности (о ней иджмы нет) — обе головы на одних и тех же фактах. Расхождение мазхабов тоже выводится в базе: ст. 9 абз. 3 объявляет его свойством ВОПРОСА, а не таклида лица, и потому две постановки спора сосуществуют — относительная (..._under(предмет, мазхаб)) и абсолютная (..._for(предмет, лицо)). Сверка с fiqh.nikah через границу пакета НАШЛА расхождение моделей. По вопросу о вали модели сходятся; по тройному произнесению сосед объявляет расхождение, а четыре мазхаба о счёте сходятся, потому что прочтение «одно отзывное объявление» ни одному из четырёх не принадлежит (ст. 8). Разная ГРАНИЦА множества прочтений записана головой models_differ_on_the_triple_utterance, а не комментарием. Ради сверки у fiqh.nikah помечены pub четыре вывода ст. 14 (readings_diverge_on_validity, readings_agree_on_validity, readings_diverge_on_triple, divergent_case) и два типа — без экспорта символы через границу не видны вовсе (E-0059), и сверка выглядела бы зелёной, отвечая NEITHER на всё. Три границы, найденные инструментами и закрытые тем же заходом. (1) Линт скилла нашёл деонтику «вправе» в метке при нуле деонтических голов — обязанность, сплющенную в признание; заведено дозволение §125 SeekFaskhForWantOfKafaa, и пара TAQ-12/13 спрашивает теперь позицию, а не только признание; невзятая парная деонтика записана в шапке с доводом (§190 требует связанного носителя, а изложение его не называет). (2) emit_lawtests пропускал ВСЕ 103 сцены, потому что link_deps стоял на весь прогон: связка сужена до четырёх сцен сверки, порождённых тестов стало 93 вместо нуля. (3) Остаток фаззера квалифицирован тремя прогонами с растущим бюджетом (--targeted 30/90/200 → 34/35/35), а не словом «недостижимо»: восемь правил прочтений (фаззер прочтений не выбирает) и два межпакетных (чужих узлов у него нет). Отчёт — corpus/laws/fiqh/taqlid/audit.ru.md.

  • Постановление № 326 «О переносе дня отдыха в 2023 году» — первая двухосновная цепочка делегации с доказанной применимостью власти на дату издания (30.08.2026). Заведена пара пакетов: kz.corpus.perenos_2023 (ребёнок) и kz.corpus.tk_art85_2023 (партиал-родитель: одна статья ТК в редакции снимка Архива Интернета 20230317174500 — v1-цепочка требует у родителя ровно один source_work, измерено LDC-E5305 при первой сборке всего в одном пакете). Разведка дважды разошлась с ожиданием, и оба раза решили байты: основание постановления — п. 3 ст. 85 ТК (преамбула дословно), а не ст. 4 закона о праздниках; и власть п. 3 мигрировала — снимок 17.03.2023 называет Правительство, текущая редакция — уполномоченный орган по труду (изменитель — закон 223-VII от 19.04.2023, он же правил ст. 4 закона о праздниках; отсюда смена формы переносов на приказы Минтруда с 2024 года). Оснований у акта ДВА (DECISION-0046), и это синтез двух сессий: специальное — власть ТК-партиала (basis на power §127 с holder-константой, valid_when, effect-материализацией), формы акта — п. 1 ст. 10 Конституционного закона «О Правительстве» (суждение снятого пакета-дубля унаследовано вместе с доводом — его комментарий сам просил добавить ТК-основание, «когда Трудовой кодекс будет заведён»). В воротах check_delegation — четвёртая живая пара (84/84): применимость власти на дату акта впервые ДОКАЗАНА закреплённой редакцией — W5303 отсутствует по построению; третья пара (ветвь формы, живой holder-var W5301) переоснащена на новый пакет и ждёт теперь три предупреждения. Семейство perenos_2023 — 6 сценариев с мостом фактов уровня прогона (эффект власти исполняется у родителя, вывод переливается ребёнку делом с разыменованием const_ref; PER-05 стережёт саму границу пакета — без переливки дни не выводятся), differential 10 evaluate-вызовов байтово, сценарная ось к prazdniki (PER-06: День Столицы и перенесённый день отдыха двумя выводами двух пакетов). Дубль-инцидент разрешён снятием с синтезом: параллельная сессия завела kz/holidays и kz/rest-day-transfer-2023 по тем же актам; по решению человека канонической осталась пара prazdniki/perenos-2023, дубли сняты со всех реестров, а их лучшие ходы пересажены — календарный ресурс §85 на 2026 год (kz-official-2026.calendar.json) теперь порождается исполнением kz.corpus.prazdniki (нерабочесть каждой пары дат — прогоном nerabochiy_den, не предположением), материализация переносов-2026 добавлена в prazdniki данными при модуле (03-calendar-2026.law, шесть переносов вместо двух у дубля, состав — полное применение абз. 3 ст. 5), семейство holidays переоснащено (HOL-06 — сторож переходного года: выбор «весь 2026 по действующей редакции» запиннен против строгого почленного применения редакций, при котором ни 15.03, ни 30.08 не были бы праздничными), якорный LAB-01 жив на пересобранном календаре. Обе сессии шли под теневым протоколом formalize-act: четыре судейские точки §47.3 записаны с одобрениями человека, обе дошли до терминала без нарушений §140.

  • Публично обещанная награда: kz.corpus.public_reward, микропакет на срез главы 46 ГК РК (Особенная часть) — и измеренная граница or в цели §124 (30.08.2026). Третий пакет той же работы о «Простоквашино»: Общая часть ГК РК о конкурсных обязательствах молчит, они живут в Особенной части отдельным актом (409-I), и вопрос «связывает ли объявленная награда того, кто её объявил» не выразим ни одним из двух прежних пакетов. Срез — ст. 910—912; семейство prostokvashino_reward 20/20 сценариев, 4 авторских .lawtest 4/4, глубина §33.1 EXECUTABLE 3 из 3 статей охвата, байтов под фрагментами 0,5 %, неучтённых 0, разметка §218 38/0 и 23/0, мёртвых символов 0, doctor.py — «пробелов нет». Пакет отдельный от kz.corpus.civilcode намеренно: Общая и Особенная части — разные source work, и склейка сделала бы номер статьи неоднозначным (ст. 240 есть в обеих). Три препятствия отказу ст. 912 п. 1 стоят тремя правилами (расщепление §206), а не одной дизъюнкцией: в одном факте они неразличимы для whynot и argmap, а третье — исполнение до отказа — единственное связывает обещавшего задним числом. Потолок возмещения ст. 912 п. 2 проверен ТРЕМЯ точками: «не может превышать» равенства не запрещает, поэтому к паре «ниже/выше» добавлено дело равенства; суммы приходят делом термами Money §50. ГРАНИЦА ЯЗЫКА ИЗМЕРЕНА И НАЗВАНА: or внутри goal achievement проходит lawc check и лоуверинг МОЛЧА, а обязанность не разряжается никогда. Улика — одно дело: обязанность ст. 911 с однолитеральной целью reward_paid_to_winner перешла в SATISFIED, а обязанность ст. 910 п. 2, содержащая тот же литерал внутри or, осталась ACTIVE, и ни одного issue выдано не было. Класс тот же, что у or в теле правила, но тише — там исполнитель предупреждает NON_EXECUTABLE_RULE. Вылечено расщеплением §206 (две ветви альтернативы «и (или)» ведут к одной голове winner_claim_satisfied, она стоит целью), сценарии PRW-19/20 сторожат обе ветви порознь; громкий отказ на стороне компилятора или исполнителя заведён задачей. Ворота мёртвых символов указали на ПОТЕРЯННУЮ норму: contest_initiator и contest_offer_made объявлялись и никем не читались — ст. 910 п. 2, центральная конструкция главы, не была выражена вовсе. Общий итог трёх семейств работы: 67 сценариев и 70 evaluate-вызовов, байтово идентичных у обеих реализаций.

  • Отмена отменяющего акта: одно дело, два добросовестных прочтения, противоположные ответы (30.08.2026). Заведены три пакета и расширен четвёртый. fiction.blefuscu (corpus/laws/eng/blefuscu-revival, 19 сценариев семейства blefuscu, 5 тестов §267) — центральный экспонат: пять вымышленных указов Блефуску, где акт A отменён актом B, а B отменён актом C. Базовая теория МОЛЧИТ ровно там, где расходятся две конструкции отмены, а сами конструкции живут прочтениями §152 под группой §155 selection exactly_one. На ОДНОМ деле, одном CLIR и одних фактах — различается одна строка контекста — «модель окна» даёт silenced TRUE и ни одной позиции, «модель препятствия» — in_operation TRUE, обязанность ACTIVE и штраф четыре спруга. Без выбранного прочтения движок отвечает INTERPRETATION_REQUIRED (§156), с обоими сразу — тем же самым: доктрину обязан выбрать контекст, и это исполняется, а не написано в комментарии. Арбитры закреплены отдельно: us.code.repeal_of_repealing_act (1 U.S.C. §108, байты GPO с govinfo.gov, 5 сценариев) и gb.statute.interpretation_act_1978 (ss. 15–16, байты legislation.gov.uk по объявленной издателем дате действия, 8 сценариев). Сценарии BLEF-15…19 показывают ВЫБОР явно: арбитра спрашивают на той же тройке A/B/C, затем прогоняют дело Блефуску под предписанным прочтением, и обе половины обязаны сойтись. Контрольный опыт: тот же ход на ПОПРАВКЕ (указ E отменяет изменяющий указ D) не откатывает ничего — штраф остаётся четыре под обоими прочтениями, а lawref impact-editions показывает то же на оси редакций: проекция изменилась (D applicable → closed, E not_yet → applicable), исход — нет. Три находки, каждая измерена инструментом. (1) LATE_STATUS_PRODUCER метит ВСЁ отношение: одного defeasible-продюсера с not_known хватило, чтобы in_operation перестали читать три строгих правила разом (LDC-E4103); починено замыканием §70, а не обходом. (2) Якорь обязан называть все редакции, где текст стоит: правила, заякоренные на статью закрывшейся редакции, ЖИВЫ при исполнении и МЁРТВЫ в проекции D1 — lawref impact-editions печатал «без доказанного применения», при полностью зелёной батарее ворот. (3) Машина редакций §31 сама есть «модель окна»: in_force [a, b) возрождения не выражает вовсе, а suspended [x, y); restored @y выражает — язык предлагает обе формы, но выбор делается в момент объявления редакции, до всякого дела; спор поэтому вынесен целиком в правила. У gb.statute.interpretation_act_1978 структурный аудит (one_way_premises.py) нашёл, что s. 16(2) была УКРАШЕНИЕМ — выводила голову, которую не читал никто, при зелёном check и собирающемся CLIR; починено fiction §… с общим входом treated_as_repealed_by, и область фикции ограничена своей секцией (IA1978-06/07).

  • Статья 46 Закона «О правовых актах»: молчание о возрождении объявлено, а срок приостановления взят (30.08.2026). Пакет kz.corpus.legal_acts расширен модулем 19-revival.law (отдельный файл — чтобы ни один анонимный assert не перенумеровался; проверено: 315 asserts до и после, 0 удалённых узлов, 8 добавленных) и пятью сценариями LEG-27…31. Взято три вещи, каждая из текста: двухместный акт о прекращении (пункт 3 называет ИНСТРУМЕНТ там, где подпункт 4 пункта 2 называл только орган, — без пары цепочка «B прекратил A, C прекратил B» была невыразима), срок приостановления (пункт 1 говорит «на определенный срок», и из срока следует ВОЗОБНОВЛЕНИЕ — законное, вычислимое возрождение, прямо противоположное молчанию подпункта 4) и само молчание: предикат revived_after_cessation_of_the_cessation_act объявлен и НЕ ВЫВОДИТСЯ ничем, вписан в documented реестра мёртвых символов с этой причиной. Находка, ради которой модуль написан: пакет отвечал «акт A прекращён» и ответ ВЫГЛЯДЕЛ выводом из статьи 46, не будучи им — ceased монотонен и снять его нечем, то есть формализация по умолчанию отвечала по «модели окна», не имея основания в тексте. Канал суждения §47.3 РАЗОБРАН И ОТВЕРГНУТ: единственный кандидат на орган — статья 60, но она даёт разъяснение нормы, а не решение о действии акта, назначает орган по ФОРМЕ акта, и её пункт 1 исключён Законом от 11.07.2017 № 91-VI, то есть для законов разъяснения не предусмотрено вовсе.

  • Черновиковый контур О-1 на статье 46: молчание становится определённым ответом (30.08.2026). corpus/drafts/kz-legal-acts-art46-revival/ — черновик пункта 2-1 («признание утратившим силу акта, которым другой акт был признан утратившим силу, не влечёт восстановления действия последнего, если иное не установлено»), написанный руками, потому что law_amend норм НЕ ДОБАВЛЯЕТ (измеренная граница L8.3). Отчёт lawref impact: added=4, два сценария из пяти изменили исход — NEITHER → FALSE_ONLY (поправка отвечает) и NEITHER → TRUE_ONLY (оговорка «если иное не установлено» открывает обратный путь), а три соседних (приостановление пункта 1, прекращение пункта 2, введение в действие статьи 42) дали БАЙТОВО равные исходы. Каталог лежит вне corpus/laws/, в CLIR не собирается; размещение нормы пунктом 2-1, а не подпунктом 5 пункта 2, — с записанным доводом: пункт 2 есть закрытый перечень ОСНОВАНИЙ прекращения, а норма говорит о ПОСЛЕДСТВИИ.

  • «Трое из Простоквашино» как ДЕЛО: одно дело, два противоположных ответа по двум кодификациям (30.08.2026). Ни мультфильм, ни повесть Успенского НЕ формализованы и НЕ закреплены — оба произведения охраняются авторским правом, и корпус их не вендорит (та же правовая причина, что у ru.marshak.twelve_months); формализованы только реальные акты, фабула живёт делами, обстоятельства пересказаны своими словами. Первая половина не заводит ни одного пакета: семейство prostokvashino — первый прогон регрессии над Общей частью ГК РК (kz.corpus.civilcode не тронут ни строкой; до него у пакета были только .lawtest §267), 25 сценариев к пяти делам. Вторая — новый пакет ru.rsfsr.gk_1964: срез из двенадцати статей Гражданского кодекса РСФСР 1964 года (плоды и приплод ст. 140, клад ст. 148, имущественный наём и бытовой прокат ст. 275—277, 281, 283, 285—286, 291, 293—294), 25 сценариев семейства prostokvashino_rsfsr. Пара вычислена, а не пересказана: телёнок нанятой коровы по ст. 123 ГК РК — нанимателю, по ст. 140 ГК РСФСР — собственнику, а нанимателю не достаётся ничего; клад по ст. 247 ГК РК — поровну нашедшему и собственнику недвижимости, по ст. 148 ГК РСФСР — целиком государству, с четвертью стоимости нашедшему и только за перечисленные виды ценностей (клад вне перечня не даёт ни рубля при той же собственности государства). Машины редакций §31 между кодексами нет: разные source work разных правопорядков, прецедент — два Налоговых кодекса в kz-income-tax. Три находки дел к действующему ГК РК: у малолетнего, живущего отдельно от родителей, ДВА места жительства разом (ст. 16 п. 1 и п. 2 — два независимых strict-правила с одной головой, единственности ГК не объявляет); договорная оговорка ст. 123 («если иное не предусмотрено… договором») пакетом НЕВЫРАЗИМА — правило записано strict без unless, и сценарий PRO-04 упадёт в день, когда оговорку выразят; границу «люди/вещи» проводит НОРМА, а не типы — ст. 13 п. 2 выводит правоспособность из одного факта рождения и выведет её коту, тогда как физическим лицом кот не признан ответом NEITHER, а не FALSE_ONLY (ст. 12 перечисляет положительно, отрицание в открытом мире §3 из перечня не следует). Дело о посылке честно ограничено правосубъектностью получателя: почтовые правила не формализованы, отношения о вручении отправления в Общей части нет, граница объявлена словами. Источник ГК РСФСР потребовал трёх проб, две из них — измерения: Викитеки у акта НЕТ (prefixsearch отдаёт только редакцию 1922 года, три точных заголовка — missing), КонсультантПлюс отдаёт ту же редакцию 2001 года со СВЁРНУТЫМИ разделами I—III, где текста нужных статей нет вовсе; закреплён «Банк документов» kremlin.ru, сохраняющий текст отменённых разделов. Закреплена НЕ редакция 1978 года, и вместо обещания сделана проверка: ст. 140, 148 и 275 стоят в байтах без пометы «в ред.», это сторожит --audit в конвейере. Группа ru, а не su, — записанное решение по территориальному правопреемству (акт СОЮЗНОЙ РЕСПУБЛИКИ; довод тот же, что у декрета КирАССР в группе kz). Измерено: глубина §33.1 EXECUTABLE 12 из 12 статей охвата, байтов под фрагментами 1,4 % (срез, а не пробел), неучтённых 0; 50/50 сценариев обоих семейств, differential 50 evaluate-вызовов байтово идентичны, 4 авторских .lawtest 4/4, разметка §218 55/0 и 42/0, мёртвых символов 0, недостижимых правил 0 (24 из 24). Аудит формализации починил две молчаливые потери, вторая — в воротах: пакет ВЫПАДАЛ из check_source_pinning целиком (166 пакетов в отчёте при 181 источнике), потому что заголовок §22 стоял только в package.law, а ворота берут namespace из алфавитно первого .law; на стороне пакета починено повторением заголовка во всех модулях, громкий отказ на стороне ворот заведён задачей. Разбор — corpus/laws/ru/gk-rsfsr-1964/audit.ru.md.

  • Закон о праздниках — первый акт, заведённый ПОД теневым протоколом formalize-act с фазы 0 (30.08.2026). Заведён kz.corpus.prazdniki — Закон РК от 13.12.2001 № 267 «О праздниках в Республике Казахстан», консолидированная редакция ИПС «Әділет» (in_force с 01.07.2026 — окно из закреплённых сносок портала). Микро-акт: 6 статей, 10 правил, 23 установления; мера §33.1 — EXECUTABLE 5 из 6, ст. 6 объявлена границей с причиной и despite (UNEXPLAINED 0). Семейство prazdniki 8 сценариев 8/8, KZ-differential байтово, разметка §218 24/0 словаря и 10/0 норм, 10 констант перечней вписаны в documented с причиной, doctor.py kz/prazdniki — «пробелов нет». Байты старше памяти (приём kun-1920): в действующей редакции НЕТ ни Курбан-айта, ни 7 января (0 вхождений в сыром html), национальный праздник один — День Республики (25 октября), а День Конституции стоит государственным с датой 15 МАРТА (правка ст. 2 — закон от 11.06.2026 № 306-VIII). Три решения формы прошли канал §47.3 теневого протокола и записаны в журнал с одобрением человека: (1) ст. 5 «нерабочие дни» — статус без деонтики (носителя §190 в тексте нет, запрет живёт в ТК; VIOLATED в пакете невозможен — названо прямо); (2) определения категорий ст. 1 оценочные — ANCHORED, категории только из прямых установлений ст. 2–3 и событий ст. 4, перечень §70 НЕ замкнут (PRAZ-04 стережёт NEITHER); (3) календарная привязка — пары Integer (месяц, день) как данные акта: термов извлечения из Date в замкнутой поверхности нет, попадание даты заявляет дело (граница языка, подтверждена пробой join по паре Integer). Расхождение объёмов ст. 4/ст. 5 выводится делом PRAZ-08: утверждённый органом по труду профессиональный праздник отмечается и его день — праздничная ДАТА, но не праздничный ДЕНЬ и не нерабочий (ст. 5 говорит только о национальных и государственных) — тот же класс, что «запрет шире санкции» у kun-1920. Вся сессия шла под теневым протоколом: машинные факты фаз (закрепление, check, регрессия, differential, манифест, доктор, глубина, разметка, метадата) записаны в журнал только по exit 0 реальных ворот — включая три новых точечных режима --only у ворот метадаты/глубины/разметки, заведённых по итогам ретро-аудита kun-1920, — а перескок фазы и судейские точки протокол показывал по ходу (§164 / REQUIRES_JUDGMENT).

  • Институт службы джинна: свод расходящихся свидетельств без единого байта свидетеля (30.08.2026). Заведён ru.lagin.hottabych — не пересказ «Старика Хоттабыча», а ИНСТИТУТ: основание службы, форма акта власти, пределы и дары. Второй акт корпуса, у которого нет ни одного закреплённого байта свидетеля, и по той же ПРАВОВОЙ причине, что у ru.marshak.twelve_months: Лагин умер в 1979 году, охрана длится до 2050-го, а фильм 1956 года и радиоспектакль 1958 года охраняются как самостоятельные произведения. Закреплены байты ЧЕТЫРЁХ ЗАПИСЕЙ о свидетелях — статей русской Википедии под CC BY-SA (54 строки, 54 фрагмента, покрытие исчерпывающее), и различие «свидетель / запись о нём» выражено ДВУМЯ ТИПАМИ, а не оговоркой: показание принадлежит произведению, байты — записи. Цитаты из охраняемой повести сняты вместе с шаблонами при извлечении, и потеря для свода нулевая — предмет пакета в том, КАКОЙ свидетель какую форму акта власти несёт, а не в словах формулы. Семейство hottabych: 23 сценария 23/23, differential 80 evaluate-вызовов байтово идентичны (liblaw_ffi == lawref), Lean 80 принято / 0 отвергнуто, 6 авторских .lawtest §267 6/6 и 2 свойства §270 (домены 4 и 6 элементов, обе канарейки падают), разметка §218 123/0 словаря и 48/0 норм, мёртвых символов неучтённых ноль, doctor.py — «пробелов нет». Два главных вывода даются делами, а не комментарием. Первый — форма УЧРЕЖДАЮЩЕГО АКТА расходится: книга сообщает односторонее решение («Принял решение служить своему спасителю»), фильм — обещание с названным объёмом («обещает мальчику выполнять любое его приказание»); это два разных юридических акта, и свод отвечает founding_form_diverges, не выбирая между ними. Второй — ИНВЕРСИЯ НАПРАВЛЕНИЯ НА ОДНОМ ЮРИДИЧЕСКОМ ФАКТЕ: одно освобождение из сосуда, один освободитель — и Хоттабыч служит, а Омар Юсуф решает убить; носителя обратного направления называет закреплённая запись прямо, а признака, который отличал бы одного брата от другого, не называет НИКТО, и свод честно отвечает «что», не отвечая «почему». Приоритета §116 между свидетелями в пакете нет ни одного: никто не уполномочивал выбирать между книгой, фильмом и грампластинкой. «Трах-тибидох» выведен АПОКРИФОМ, а не внесён нормой. Присказку несёт РОВНО ОДИН свидетель — радиоспектакль 1958 года, — и того не называет перечень радиопостановок, единственный перечень своего класса во всём своде (он знает 1953 и 1979 годы). Класс тот же, что transmitter_without_attribution в «Ясе», но острее: там передатчик назван и показаний не оставил, здесь показание есть, а свидетеля перечень его класса не знает. Пара HB-06 стережёт основание вывода: заклинание редакции 1938 года несёт тоже один свидетель и апокрифом НЕ является. Отдельной головой выведено расхождение ВНУТРИ одного произведения — заклинание есть в редакции 1938 года и изъято в последующих, обе вышли под одним именем автора. ТРИ ПРОБЕЛА СВОДА ОБЪЯВЛЕНЫ И ВЫВОДЯТСЯ: исчерпание бороды («волосок за акт»), сухость бороды как условие колдовства и двадцать два мяча на футбольном матче не подтверждает ни одна из четырёх записей. Из первых двух выведен результат, а не умолчание: power_unbounded_in_the_pinned_slice — у института, каким его знают ЗАПИСИ, власть джинна не ограничена ничем, и это ровно та точка, где расходятся народная память и то, что можно предъявить (контраст — исчерпаемый иммунитет Кощея, где ресурс сосчитан правилами, потому что запись называет его словами). Футбол получил свою голову: эпизод засвидетельствован, содержание — нет, и разница между «эпизода не было» и «эпизод есть, а нормы к нему нет» юридическая. Дар, недопустимый для одаряемого, разложен на две стороны РАЗОМ: на одном деле одновременно истинны gift_validly_offered (полномочие дарителя цело, предела по содержанию не называет никто) и gift_cannot_be_accepted, и потому выводится acceptance_deadlock — обе попытки одаряемого устранить дар («сделать невидимыми либо передать в Роно») отклонены категорическим отказом. Состав дара при этом сам расходится и расхождение СЧИТАЕТСЯ: рабов называет только книга, караван верблюдов и слонов — только фильм, дворец называют оба и он не расходится. Сравнительная ось с ru.pushkin.zolotaya_rybka ВЫЧИСЛЯЕТСЯ: предел откупа и обе головы ретроактивного отката выводятся правилами соседа, здесь только читаются, — у рыбки предел проведён по содержанию требования и снабжён откатом, у службы джинна нет ни того, ни другого, а препятствие лежит на стороне ПРИНЯТИЯ. Ради этого у ru.pushkin.zolotaya_rybka заведена публичная поверхность §24 (13 объявлений; до того pub у него не было ни одного). Барьер полноты §111 задал форму двух слоёв, и это измерено, а не угадано: выведи «свидетель несёт форму» и «дар включает составляющую» правилом из положений свода — оба считающих правила становятся NON_EXECUTABLE_RULE при зелёном check; поэтому они ПОКАЗАНИЯ, заякоренные на строку записи, что и вернее по существу. Мера §33.1 по статьям неприменима и говорит это словами: у энциклопедических записей единицы деления нет, в verify/ci/data/formalization-depth.json пакет не вписан вовсе.

  • Тоғызқұмалақ: правила игры как регламент федерации, и две действующие редакции, спорящие друг с другом (30.08.2026). Заведён kz.corpus.togyzqumalaq — «Тоғызқұмалақ қағидасы мен ережесі» Федерации тоғызқұмалақ Казахстана (утверждён Агентством РК по делам спорта и физической культуры). Выражены раздел 1 целиком (доска и инвентарь 1.1, ход 1.3, захват по чётности 1.3 п. 2, тұздық 1.4, атсырау и исход 1.5 с целью 1.2, бланк партии 1.6) и подраздел 2.6 (счёт результатов): EXECUTABLE 7 из 18 подразделов, семейство togyzqumalak 26 сценариев, differential 26 evaluate-вызовов байтово, Lean 26 принято / 0 отвергнуто, 26 рукописных .lawtest §267, разметка §218 111/0 словаря и 75/0 норм, doctor.py — «пробелов нет». Расхождение двух ДЕЙСТВУЮЩИХ редакций выводится, а не примиряется: из пяти найденных различий раздела 1 два названы не операционными поимённо, три выражены правилами; тяжелейшее — 1.3 п. 4, где на одном деле (поправил рукой, не сказав «түзеймін», в классической партии) редакция 2013 обязывает ходить с тронутого отау, а поздняя прямо говорит «міндетті емес». Приоритета §116 между ними не поставлено: ни один документ не объявляет себя новой редакцией другого, и пакет выводит sheshilmegen. Три предела тұздық (девятый отау, зеркало чужого тұздық, «тек бір рет алынады») выражены поражением §107, а не отрицанием в гарде — измерено, что not P требует УСТАНОВЛЕННОГО отрицания и на отсутствии факта молча даёт NEITHER, а замыкание §70 над выводимым предикатом даёт BOTH. Измеренная граница языка названа громко: mod стоит в spec/grammar.ebnf (строка 833), но лексером и парсером не поддержан (LDC-E0201), а деление целых §58 точное (E-0020) — поэтому чётность внесена определениями САМОГО акта из его словаря, а не спрятана в метке; все числа регламента стоят константами в гардах.

  • Единица учёта unit: kk_subsection — казахский подраздел двухуровневого номера (30.08.2026). Заведена в ОБОИХ реестрах сразу (verify/ci/gates/sources/check_source_pinning.py и corpus/tools/lib/act_split.py): две меры §33.1 обязаны видеть одно множество единиц. Точка после номера НЕОБЯЗАТЕЛЬНА — свойство издания, а не структуры: две редакции регламента тоғызқұмалақ набирают её по-разному, и запрети конвенция одну форму, знаменатели редакций стали бы несравнимы. Два отсева измерены на этих же документах: требование заглавной кириллицы (или кавычки) отсекает запись хода «1.76 (10)», запрет двоеточия — подпункты «10.1.»/«10.2.» внутри пункта; без них 19 и 21 единица вместо 18.

  • Срез --joomla-item-page у extract_source_text.py (30.08.2026). Тело статьи Joomla-портала по парному тегу с громким отказом на незакрытый блок; обвязка шаблона (иконки «Печать»/«E-mail», навигация «Назад/Вперёд») снимается по наличию. Нужен потому, что у сайта федерации тоғызқұмалақ служебная обвязка больше самого документа, и закрепление страницы целиком свело бы байтовую долю §33.1 к разговору о вёрстке.

  • Ст. 91 Конституции РК: ось самоприменимости — дверь оживлена, ядро держит, развилка локализована (30.08.2026). Казахстанская пара к лазейке Гёделя в kz.constitution.amendment. Затвор ст. 91 п. 3 (AmendmentMayBeSubmitted1995) был МЁРТВОЙ нормой — strict + not над выводимым, установленного отрицания взять неоткуда, ни одного сценария; оживлён канонической defeasible+unless-формой. Три прогона L8.2: дверь открывается поиском с нуля (пара «заключение + подтверждение п. 2», 733 вызова); при посягательстве на унитарность — структурный ноль (монотонность); для поправки, сужающей перечень п. 2, путь существует ⟺ выбрано прочтение А «перечень не защищает сам себя» — обе стороны спора заведены прочтениями §152 (exactly_one, молчание громкое INTERPRETATION_REQUIRED), выбор оставлен Конституционному Суду. Ворота check_kz_entrenchment_loophole.py; AMD 2 → 10 сценариев (включая пару порога 4/5 парламентского пути, прежде тоже не покрытого), конституционная регрессия 148/148, разметка §218 затянута.

  • Лазейка Гёделя: ось самоприменимости статьи V в us.constitution, находка bounded-поиском и граница §110 (30.08.2026). Модуль self-amendment.law — по ведущей реконструкции заявления Гёделя 05.12.1947: содержание гипотетической поправки («власть поправок переходит к одному Конгрессу») — факт дела, оба следствия выведены из валидационной клаузулы статьи V. Двухходовку «передача власти + унилатеральное введение» нашёл САМ lawref loophole при фоне одной парадной процедуры — минимальная находка длины 2 без единой позиции VIOLATED; без фона на depth 3 находок ноль (порог статьи V структурно длиннее), а полное открытие с нуля (depth 5, 174 321 вызов) восстановило весь пятишаговый путь конвентным маршрутом статьи V, которого нет ни в одном авторском сценарии. Вечная оговорка о равном представительстве в Сенате стоит и в мире двухходовки (§128, пара USC-06/07 на факте согласия штата). Измерена граница ядра: возврат унилатерального пути в amendment_is_part_of_constitution замыкает цикл предикатов — LDC-E4102, стратификация §110 останавливается ровно на гёделевской самоссылке; один круг самоприменимости выразим, неподвижная точка — нет. Ворота check_godel_loophole.py (шаг 38/47): поиск обязан сам находить пару, детерминизм x2, контроль глубины, lawtest против свежесобранного IR. Семейство us_constitution 7/7 (было 2), differential 8 вызовов байтово, lawtest 3/3, разметка §218 затянута (11/10 словаря, 13/0 норм), цель закреплена analysis/godel-goal.json.

  • Треугольник экзогамии: he.torah.arayot, vat.canon.consanguinitas и kz.corpus.zhetiata — одна пара, четыре системы, один граф предков (30.08.2026). Три пакета одной работой. Лев 18:6–18 — ЗАКРЫТЫЙ ПЕРЕЧЕНЬ имён (замыкание §70, ни степени, ни порога); два Кодекса канонического права — АРИФМЕТИКА степеней над графом предков, причём Кодекс 1917 года считает боковую линию по ДЛИННОЙ ветви (c. 96 §3), а Кодекс 1983-го — по ОБЕИМ вместе (c. 108 §3), и пределы у них третья против четвёртой степени; свод свидетельств жеті ата — счёт ПОКОЛЕНИЙ, читающий kz-tuystyq импортом. На одной паре троюродных обычай запрещает, действующий канон препятствия не находит, перечень отношения не называет; Кодекс 1917 года на той же паре запрещает — ответ переворачивается ДАТОЙ (effective §87, граница проверена парой дел 26 и 27 ноября 1983 года). Семейство exogamy: 27 сценариев, differential 107 evaluate-вызовов байтово, Lean 107 принято / 0 отвергнуто, 7 рукописных .lawtest, doctor.py — «пробелов нет» у всех трёх.

  • Конвенция учёта unit: canon — единица деления кодексов канонического права (30.08.2026). Заведена в ОБОИХ реестрах сразу — verify/ci/gates/sources/check_source_pinning.py и corpus/tools/lib/act_split.py, — потому что две меры §33.1 обязаны видеть одно множество единиц; копия в одном месте дала бы «мера по статьям неприменима» у второй. Единица — канон, а не параграф: § 1…§ 4 нумеруются заново внутри каждого канона. Форма маркера принимается двоякой (Can 96 §1. без точки у издания 1917 года, Can. 1091 — § 1. с тире у издания 1983-го): выровнять их в закреплённых байтах значило бы править текст, а не нормализовать разметку.

  • Публичная поверхность у kz.corpus.tuystyq и kz.corpus.marriage (30.08.2026). У первого — NekeZhuby и три вывода ст. 7 (препятствие, его отсутствие, общий предок вне круга); у второго — Person и вывод ст. 9. Заведена ради kz.corpus.zhetiata, который обязан выводить сторону каждой системы из ЕЁ предикатов, а не описывать её от себя. Внутренние ступени счёта наружу НЕ выставлены: потребителю нужен исход, а не ход счёта.

  • Фаззер L8.1 увидел процедуры §160: константы документа в направленном режиме (30.08.2026). Правила профиля перехода требуют в аргументе const_ref на объявленное состояние (entered_state(v, AmTor)) и на объявленный переход, а пул сущностей фаззера был синтетичен (urn:fuzz:<Тип>:N) и объявленных констант не содержал никогда: покрывалось только <P>/initial, а весь автомат числился непокрытым. Теперь направленный режим добывает константы из обратного замыкания САМОЙ ЦЕЛИ (_const_pools) — тем же приёмом, каким это давно делает lawref loophole (typed_seeds), — и называет добытое в манифесте (constPools), чтобы пул не менял отчёт молча. Замерено на одиннадцати пакетах корпуса с процедурой: профиль вырос у всех, ни один пакет не потерял покрытия — kz.corpus.bata 1/11 → 11/11, kz.corpus.procurement 1/5 → 5/5, kz.corpus.qantar 1/15 → 13/15, kz.judicial_system 1/23 → 15/23, de.kafka.vor_dem_gesetz 1/13 → 13/13, la.gellius.protagoras_euathlus 8 непокрытых → 0. Слепой режим не тронут намеренно: глобальные пулы отняли бы 2423 существующих подстановки у 84 пакетов, вытеснив их капом MAX_GROUNDINGS; проверено, что после починки слепые подстановки байтово те же по всем 157 CLIR корпуса. Найдено формализацией de.kafka.vor_dem_gesetz; попутно фаззер нашёл собственную находку вида error — на IR с нарушенным range restriction §190 оракул падает голым KeyError в solver.substitute вместо диагностики (корпусу не грозит: lawc check такое правило отвергает, LDC-E4101; собрать можно только рукописным IR мимо компилятора).

  • Три вектора §270 и первое применение свойств в корпусе (30.08.2026). LAY-L1-PROPERTY-DERIVED-DOMAIN — домен квантора свойства по ВЫВОДИМОМУ предикату перечисляется (барьер §111 к нему не применяется: домен есть отдельный запрос collect, а не перечисление внутри тела правила); LAY-L1-PROPERTY-BARRIER-SKIPPED — тот же выводимый предикат в ОЖИДАНИИ барьер ловит, и свойство обязано сказать это списком skipped, а не выдать пустой список контрпримеров за проверку; LAY-L0-PROPERTY-VACUOUS-DOMAIN — свойство над НЕОБЪЯВЛЕННЫМ предикатом домена держится вакуумно без единой диагностики, и единственный признак беды есть названная мощность домена (0). Первым пакетом корпуса свойства §270 применил fiqh.hajj: два сторожат, что перечни бесспорных обрядов ст. 9 и 10 не растут (то есть что мазхаб не выбран), третье — что оставление фарда прекращает хадж независимо от совершения остальных обрядов.

Исправлено

  • lawref loophole на актах с редакциями и большим замыканием цели (03.09.2026, найдено переносом госпошлины в kz-income-tax): кап дат усекал и дату права самого дела (у акта с редакциями 2018 и 2025 первые шесть дат лежали до 2026, проекция §31 снимала 1090 правил из 2124, и цель, достижимая на дате дела, числилась недостижимой); нулевой шаг «достижима уже фоном» спрашивался на самой ранней дате документа; атомы алфавита шли в каноническом порядке, и трёхфактная цель ст. 669 не достигалась за бюджет. Теперь названные вызывающим даты кап не режет, дата дела — точка отсчёта обхода (порядок дат в пути — прежний, хронологический), атомы упорядочены по расстоянию до цели по графу голов/тел. Семантики нет, ворота check_loophole зелены байт в байт.

  • lawref amend: кап пространства правок (64) резал по каноническим байтам — на 2124 правилах нужная операция в кап не попадала, перебор сжигал бюджет на чужих правилах и отвечал «не найдена». Операции над правилами, применёнными в proof-графах целевых сценариев, идут первыми (витрина движка, editSpaceRelevant в манифесте); ворота check_amend зелены.

  • Контракт MCP (test_server.py): фикстура мёртвого правила — конструкция вне v1-подмножества (прежняя стратифицируется с DECISION-0088); проверки loophole/amend на kz-income-tax получили явные капы алфавита и бюджета вместо ожиданий, унаследованных от снятого kz-state-duty.

  • Типизированный IR, Ф5 — правила Ф3 в виде программы, eval-serve на кэше (02.09.2026). Поверх порта prepare_program/ViewCache с оракула: CompiledStrict публикуется в PreparedView первым вызовом strict_closure и переиспользуется следующими вызовами evaluate с воспроизведением предупреждений NON_EXECUTABLE_RULE на прежнем месте; eval-serve держит один кэш на процесс. Байты: три вызова на хэндле и one-shot равны на 18 делах, ворота 28, KZ --only osms/criminal_code, сертификаты. Тёплый вызов на хэндле: УК 0,058 → 0,025 с, НК 0,272 → 0,190.

  • Типизированный IR, Ф2 откачена (02.09.2026). Форма конъюнктов один раз на solve и рекурсия по флагам прошли приёмку байтово, но парный замер против Ф3 выигрыша не дал (−5…+8 %, шум ±10 %): подпрофиль переоценил formula_vars из-за цены самих меток. solver.rs возвращён к Ф1+Ф3.

  • Типизированный IR, Ф3 — скомпилированное строгое правило (02.09.2026). Тела правил, governs, действие на дату права, планы semi-naive и ранги страт компилируются при первом вызове strict_closure и живут в SupportStore::strict_cache до конца вычисления вместо повторного разбора в каждом вызове замыкания; issue нестратифицируемости повторяется на каждом вызове, как её печатал strict_ranks. Байты те же (22 дела, векторы, differential, ворота 28, KZ --only ×3, сертификаты). Парный замер до Ф0 ↔ после Ф3: КоАП с делом 1,35 → 0,88 с, НК 0,97 → 0,65 с.

  • Типизированный IR, Ф1 — интернер значений и ключ атома без канонизации (02.09.2026). SupportStore интернирует значения аргументов и предикаты, атом — (pred_id, [ValueId]), корзины по id; solve_rec связывает переменные слотами (атом, позиция) и материализует BTreeMap<String, Value> только для гардов и готовых решений. Байты те же (22 дела, векторы, differential, ворота 28, KZ --only ×3, сертификаты); КоАП с делом 1301 → 1004 мс на инструментированной паре, solve 167 → 96. План — docs/plans/engine/TYPED-IR-PLAN.ru.md.

  • Стратификация §110 без кубической сложности (02.09.2026). reach_path сканировал все рёбра на каждом шаге и запускался на каждое немонотонное ребро — на kz-administrative-code 251 мс из 818 на вызов eval. Индекс смежности в исходном порядке рёбер плюс SCC-предфильтр (Тарьян): первый найденный путь тот же, байты те же (22 дела, векторы, differential, ворота 28, KZ --only ×3, сертификаты). КоАП 818 → 535 мс, НК 677 → 552 мс. CPU-профиль по фазам и план типизированного IR — docs/plans/engine/TYPED-IR-PLAN.ru.md.

  • Канонизация ради programHash: сток SHA-256 буферизован, NFC-проверка с ASCII-путём (02.09.2026). Байты canon/semhash не изменились (400 CLIR, cross_canon 100k, векторы, check_lower, 22 дела eval); выигрыш 0–10 % user-времени — обход JSON и есть пол. Замена канонизации полем semanticHash документа отвергнута как изменение §170 (нули у склеенных миров, ложь на правленном IR, оракул считает сам) — решение за владельцем.

  • Errata E-0099 · §190/§149: range restriction не доходила до правила, порождённого клаузой unless (02.09.2026). Поражаемое правило, у которого условие изъятия связывает не все переменные головы, проходило lawc check и lawc lower молча, а на исполнении реализации отвечали по-разному: lawref падал KeyError: 'v0' в substitute_head, lawc eval МОЛЧА отбрасывал дефитер и выводил голову — правовой ответ, противоположный написанному изъятию, без единого issue. Найдено на ст. 56 п. 3 подп. 3 ТК ЕАЭС. Квалификация решена замером: то же правило, записанное отдельным rule … defeater, отвергается LDC-E4101 — проверка §190 работает, молчала она на ПОРОЖДЁННОМ узле, при том что §150 говорит дословно обратное («форма записи на нормализацию не влияет»). Правка: проза §149.1 (тело порождённого узла есть одно условие клаузы, when общего правила в него не переносится); lawc check проверяет каждую клаузу отдельно под именем <Правило>/unless/N — тем же, что даёт lowering; на исполнении вторая линия в ОБОИХ движках (lawref — класс RangeRestrictionError вместо KeyError, law-eval — поиск неподставленной переменной в заготовленной голове), код, адрес и формулировка дословно одни, поэтому класс впервые покрыт differential-ом. Векторы T168 (три формы клаузы, LDC-E4101 ровно трижды), T169 (граница) и ERR-E0099-UNLESS-HEAD-UNBOUND (evaluate, error-outcome, в SUPPORTED; check_differential 257/257). Радиус по корпусу измерен lawc check по всем 393 пакетам до и после: одна новая диагностика, kz.corpus.constitutional_court — UnconstitutionalActCeasesOnDecisionDay связывал act, но не taken; норма исправлена, CLIR перегенерирован.

  • eval без копий IR (02.09.2026). Подготовка вычисления делала пять полных копий программы на вызов (клон узлов из IR, отбор интерпретаций, проекция редакций, пересборка при свёртке констант, склейка с утверждениями дела) и клонировала декларации в TermEnv; осталась одна — отбор интерпретаций. Свёртка констант — на месте (substitute), project_editions перемещает узлы, ingest берёт два среза, TermEnv держит ссылки. Байты: 22 живых дела, векторы, differential, ворота 28, KZ --only ×3, сертификаты — без единого расхождения. CPU пустого дела: УК 0,74 → 0,22 с, КоАП 5,1 → 2,4 с; RSS КоАП 643 → 327 МБ. Код — в 608b47883 (унесён чужим коммитом), запись — отдельно.

  • liblaw_ffi ворот — профиль gate (02.09.2026). fresh_library() и dylib_candidates() брали библиотеку только из target/*/debug, и хэндловый транспорт differential, сертификатов, раннеров корпуса и MCP-сервера исполнял debug-оценщик: 2,4 с на дело kz-income-tax против 1,1 с у gate-сборки. Пара «cdylib ↔ живой lawc» переведена синхронно (law_ffi.PROFILE, BIN = target/gate/law-cli у ворот 27/28, шаг 1 run_all.sh), отката на debug нет; реестр DECISION-0072 дополнен.

  • lower отказывает необъявленному типу и internal-типу соседа (02.09.2026). LDC-E2101 у голого имени без декларации и LDC-E1105 у pkg::Type вне exports — на lowering-е, а не только у check; check разрешает request_schema канала суждения §47.3. Векторы T165–T167; корпус: шесть pub, запись MitigationQuestion в Уставе МВТ, CLIR перегенерированы; вектор LAY-L2-JUDGMENT-SCHEMA объявил свою схему, голден переморожен точечно.

  • lawc check на закреплённых кодексах (02.09.2026). check_pinned_sources §194 искал каждый фрагмент наивным окном по всей публикации — O(|публикация| × Σ|фрагментов|), 59 % времени check на kz-income-tax; теперь один проход Рабина–Карпа по префиксам игл (contains_each), семантика и порядок диагностик прежние (эталон в тесте). Терминальный check лоуверил пакет дважды — приведён к check_diagnostics_lowered, как --json. Выходы на шести пакетах и трёх негативных фикстурах байт в байт прежние. CPU gate: НК 9,99 → 0,81 с, КоАП 5,77 → 1,91 с; debug: НК 82 → 4,5 с.

  • lawc: цикл присутствия закреплённых ресурсов сужен до capability: "compile_time" (02.09.2026). lower_a3_package (crates/law-cli/src/pkg.rs) читал resources лока ЦЕЛИКОМ, а «фактические» ключи собирал ТОЛЬКО из A3-sidecar-ов пакета — и требовал, чтобы каждая закреплённая строка нашлась среди них. Лок §11 при этом пинует ВСЕ ресурсы пакета: с DECISION-0070 туда же попадают оверлеи меток §218 строкой {"kind": "label-overlay", "capability": "presentation"}. Presentation-строка среди A3-файлов не находится никогда, поэтому пакет, у которого есть И A3-параметры, И i18n/<lang>.json, падал LDC-E8704 locked resource i18n:kk (i18n/kk.json) отсутствует при существующем файле. Квалификация: дефект lawc; проза и схема верны, оракул стороны не имеет — resolver.check_locked_resources сверяет лок с discover_resources, который перечисляет и A3, и оверлеи, то есть у него обе стороны сравнения полны, и его же докстринг называет оверлеи ресурсами пакета дословно. Правка сузила цикл до той самой способности, которую соседний цикл уже требовал от проверяемых строк, и вынесла его в чистую missing_compile_time_pin — теперь он тестируем без Input и без ввода-вывода. Комбинация не исполнялась до 02.09.2026: у всех прочих пакетов корпуса с оверлеями (de/vor-dem-gesetz, chem/rules, sa/personal-status, sa/civil-transactions) law.lock нет вовсе, а первыми «A3 и оверлей сразу» получили четыре пакета волны aba/. Защита, ради которой цикл заведён, не ослаблена: отсутствующий A3-ресурс по-прежнему громкий (вектор PAR-007 «semantic source edit без lock update» зелен), и это закреплено тремя модульными тестами pkg::tests, из которых два падают при снятии сужения (проверено мутацией). Локи четырёх пакетов aba/ перегенерированы и пинуют оверлей, как и задумано DECISION-0070; check_lower 217/217, векторы 463 исполнено, cargo test и clippy чисты, полная KZ-регрессия по 328 семействам зелена кроме двух, красных ЧУЖОЙ незавершённой работой и воспроизводящихся БЕЗ этой правки (проверено снятием правки и пересборкой).

  • Лендинг apps/landing: тексты сверены с живым сайтом и репозиторием (01.09.2026). Четыре страницы в обеих версиях (продукт, о проекте, Calculemus, MCP) строили ссылки на документацию и атлас от BASE_URL, и на www.arxo.io они отдавали 404 — сайт, чей главный аргумент «проверьте сами», вёл в никуда из «Изучить язык и метод», «N актов в реестре», «Контракт инструментов». Адреса теперь берутся из src/sites.ts, как у главной и шапки. Снимок журнала решений (governance.snapshot.json) обновлялся только руками: сайт показывал 68 решений при 90 в дереве под подписью «не могут устареть молча»; скрипт включён в prebuild рядом со снимком корпуса (без полного дерева оставляет снимок как есть — иначе роняла бы изолированную сборку Vercel), оба снимка пересняты (291 акт, 4 439 тестов, 90 решений, 82 errata, 399 векторов, 116 ворот), подпись переписана правдиво. Страница MCP называла 18 инструментов при 21 у сервера — добавлены law_query, law_editions, law_draft_impact; гарантия «Локальность» разведена с публичной точкой (та по README сервера хранит тела вызовов 30 суток), финальный CTA «Запросить доступ» противоречил «без ключа и регистрации» и ведёт теперь на подключение. Демо «Фараид» несло хэш, не встречающийся в корпусе, ссылалось на Коран, тогда как источник пакета — закреплённое изложение доктрины, и на вопрос «кому сколько» показывало только коранические доли ⅛ · ⅓ · ⅓ без остатка 5⁄24 — записан живой прогон оракула машинерией corpus/run_faraid_cases.py: ⅛ · 7⁄16 · 7⁄16 с возвратом по ст. 13, хэш публикации изложения, вариант «минбария» (аул 24 → 27) из казуса c-minbariyya. Hero подписывал Регламент 261/2004 как «ред. 2026» (не менялся с 2005; закреплён снимок 08.2026); демо звалось «живым прогоном» при записанных прогонах; «Core 0.1» снят с первого экрана; «Оракул/Движок» на схеме проверяемости заменены на «эталонная/независимая реализация»; терминология сведена (атлас, рабочий стол, КОЛЛИЗИЯ, «опровержимые выводы» вместо «дефитеров»); «честный» оставлен в двух заголовках из двенадцати мест; ссылка «три честных нет» получила собственный якорь #limits. Карточка «Гражданам» и раздел «Корень» страницы «О проекте» ведут на zan.arxo.io.

  • E-0080 (§110/§111): правила одной головы теперь стоят в одной страте — поражение перестало молча теряться. У головы с производителями на разных стратах дефитер выравнивался по максимуму цели и не доходил до нижней страты, где статус уже зафиксирован шагом 7 §111. Замер по всем 262 CLIR: четыре живых пакета, у myco.opredelitel — неверный ответ на исполнении (образец с вердиктом «съедобен» оставался запрещённым). Квалификация — дефект SPEC; правка аддитивна (§110 требование 5), обе реализации выравнивают ранги внутри фикспойнта. Векторы ERR-E0080-*, differential 180/180 байтово.

  • myco.opredelitel: дефитер над СТРОГОЙ головой не поражал ничего — вторая половина того же места, которую E-0080 не чинит (31.08.2026). DeadlyBlocksEdibleVerdict объявлял defeat edible_verdict(s), а edible_verdict производился ОДНИМ строгим правилом. Дефитер §107.3 снимает КАНДИДАТА своей страты, строгий вывод кандидатом не становится — поражать было некого ни при каком выравнивании рангов. Замер на движке УЖЕ С E-0080: дело, приписавшее бледной поганке класс «съедобен», давало edible_verdict = TRUE_ONLY одновременно с deadly_verdict = TRUE_ONLY — ровно то, что запрещает соседний constraint, который на runtime не вычисляется (§93.1). Молчали все: lawc check, lower, check_dead_rules (правило исполняется — оно просто никого не побеждает), check_stratum_barrier и differential. Он же был ПРИЧИНОЙ дефекта, найденного E-0080 в этом пакете: мёртвый дефитер делал edible_verdict поражаемой головой, чтение поражаемой головы поднимало ранг §110, и FullIdentificationDefeatsBar уезжал на страту выше PresumeInedible. Две находки — одно место, и лечится оно с обеих сторон независимо. Лечение — по канону «производители барьера ТОЛЬКО строгие». Дефитер снят, его содержание переехало в ГАРД: статья 10 изложения объявляет перечень смертельно ядовитых ЗАКРЫТЫМ, поэтому заведено замыкание §70 DeadlyListIsClosed над deadly_listed по новому домену taxon_in_slice (десятивидовой срез ст. 1/14, 10 ассертов), и строгое EdibleOnlyAfterIdentification читает установленный негатив not deadly_listed(t) — приём blefuscu-revival, где перечень тоже закрыт по существу. Оговорка той же статьи («невхождение в перечень не есть вывод съедобности») сохранена тем, что негатив стоит гардом ПРИ классе Edible, а не посылкой; вид вне среза по-прежнему не получает вердикта (ст. 14). Покрытие: у презумпции ДВЕ стороны, и проверялась одна. Заведены MYCO-EDIBLE-VERDICT-LIFTS-THE-BAR (вердикт снимает запрет — краснел до E-0080) и MYCO-DEADLY-TAXON-NEVER-EDIBLE (закрытость перечня на противоречивом деле — краснел и после E-0080). Семейство myco 22/22, KZ-differential по нему 28 вызовов байтово, все 26 .lawtest пакета проходят; заодно эмитировано 25 отсутствовавших corpus/tests/myco-*. После обеих правок обход всех 262 CLIR по паре «ранг дефитера ↔ ранги производителей его цели» даёт НОЛЬ — обе формы класса закрыты. Ворота на саму пару при этом нет: check_stratum_barrier держит рёбра priority через страту и полярности одного предиката, а третья форма в нём не выражена.

  • Деплой демо kz-gov был мёртв сутки, и репозиторий об этом молчал; заведены ворота 49/49 (31.08.2026). ЧЕТВЁРТЫЙ за сутки экземпляр класса «инструмент громкий, тихо то, что его никто не зовёт» (первые три — образец рабочего стола, осиротевшие .lawtest и обе embed-пробы, записи ниже) и пятый адрес одного и того же снятого файла. apps/demos/kz-gov/tools/gen_terms.py:168 читал corpus/clir/kz-holidays.lawir.json — пакет-дубль, снятый коммитом 7fa3bc97, — и падал FileNotFoundError. Цена оказалась НЕ «один калькулятор без данных», и это выяснилось только чтением вызывающего: tools/gen_data.py — единственный вход tools/vercel-build.sh — зовёт девять генераторов цепочкой через subprocess.run(..., check=True) под set -euo pipefail, а gen_terms стоит ТРЕТЬИМ. Отказ обрывал цепь целиком: шесть генераторов после него не исполнялись ни разу, npm run build не начинался, и деплой поверхности не собирался вовсе. Ворот, которые бы его звали, не было: grep -rn "gen_terms\|kz-gov" verify/ci/run_all.sh verify/ci/gates/ давал ноль. Подмена оказалась механической, и это редкость на фоне соседей по классу: здесь берётся только semanticHash, а не задаётся вопрос, поэтому расхождение словарей (non_working_holiday(RepublicDay) у дубля против пары Integer nerabochiy_den(10, 25) у живого акта), стоившее embed-пробам и демо праздников отдельной работы, не проявилось ничем. Преемник ОДИН, и это замер, а не сходство имён: official_calendar_2026 (corpus/gen_kz_clir.py) выводит календарь из kz-prazdniki целиком, включая переносы абз. 3 ст. 5 (perenos_vykhodnogo_dnya, 03-calendar-2026.law), — второй акт kz-perenos-2023 формализует постановление № 326 и в 2026 году не участвует, так что провенанс страницы остаётся парой хэшей. Попутно вскрылось, что лежавший на диске terms.json пиннил и УСТАРЕВШИЙ хэш календаря (ad1e66dd… против 1ddd2bec… в корпусе): страница показывала провенанс позавчерашнего дерева. Вторая сторона согласована, но механизм у неё оказался другой, чем читалось: apps/mcp/law_mcp/ask_positions.py:183 фильтрует не bridge.json, а каталог _packages() (ключ — имя CLIR без суффикса), поэтому снятое имя не давало отказа — k in {…} просто не совпадало, и law_ask kind=deadline уезжал с провенансом из ДВУХ актов при собственном обещании контракта «цепочка трёх актов». Теперь три (kz-civil-terms, kz-official-calendar-2026, kz-prazdniki), apps/mcp/test_server.py зелен. Тут же снята мёртвая acts_used — вторая, расходившаяся вычислялка того же перечня (она собирала ХВОСТЫ пространств имён, которые ключами каталога не являются и не совпали бы никогда). Новые ворота утверждают ТРИ вещи, и ни одна раньше не проверялась: генераторы данных исполняются (тот самый класс); каждое имя корпусного артефакта, названное генератором, разрешается в corpus/clir/ (статически — это покрывает и то, что шаг не гоняет); цепь gen_data.py учтена целиком в обе стороны — gen_*.py на диске вне цепи и член цепи, не исполняемый и не объявленный дорогим, роняют шаг. Второе утверждение важно тем, что соседние ворота check_demo_surfaces.py сверяют ДРУГОЙ перечень: манифест kz-gov называет 6 пакетов, а генераторы читают их и ещё восемь — второй реестр, который не сверял никто. DECISION-0064 §1 не нарушен: сборок поверхностей (npm run build, astro) шаг не делает — он исполняет питоновских потребителей движков против живого корпуса; закрывается ровно дыра решения — «красная проверка означает несобранный деплой по построению» держалось, но узнать об этом можно было только глядя на Vercel. Что НЕ исполняется — названо строкой с ценой, а не выброшено молча: gen_salary_grid (~2,5 мин, замер шапки генератора) и gen_fines (58,6 с и Rust — CLIR КоАП в корпусе нет, он собирается lawc lower на каждый прогон), а с ними неотделимый от них вход kz-gov/gen_data.py. Исполнено 9 генераторов трёх поверхностей за 30,7 с под нагрузкой фермы (load 13,6 на 14 ядрах); канарейка — 5 мутаций, каждая роняет свою сверку, и первая из них есть исторический дефект дословно. Канарейка же поймала дефект В САМИХ ВОРОТАХ до первого прогона: разбор цепи искал "tools", "gen_x.py" через запятую, тогда как Path складывается оператором /, — «фон грязный» вместо ложно-зелёного шага.

  • Обе embed-пробы не запускались, и одна — с самого переноса под packs/; заведены ворота 29/48 (31.08.2026). Третий за сутки экземпляр класса «инструмент громкий, тихо то, что его никто не зовёт» (первые два — образец рабочего стола и осиротевшие .lawtest, записи выше). packs/examples/embed-python/ask_law.py и packs/examples/embed-node/ask_law.mjs читали corpus/clir/kz-holidays.lawir.json, снятый коммитом 7fa3bc97 как пакет-дубль, — FileNotFoundError/ENOENT с первой строки. Под этим лежал ВТОРОЙ, независимый дефект: node-проба считала корень репозитория двумя уровнями вверх ('..', '..') вместо трёх и потому не запускалась ВООБЩЕ с переноса примеров под packs/ (DECISION-0059) — починка одного дефекта ничего бы не дала, а признака второго не было ни одного. Ворот, которые бы их звали, не существовало: grep -rn "embed-python\|embed-node\|ask_law" verify/ci/ давал ноль. Пересадка — не подмена пути: у живого преемника kz-prazdniki другой словарь, и это граница языка, а не переименование. Снятый дубль спрашивался константой-праздником (non_working_holiday(RepublicDay)), живой акт — ПАРОЙ Integer (nerabochiy_den(10, 25)): термов извлечения месяца и дня из Date в замкнутой вычислимой поверхности нет, поэтому дату заявляет спрашивающий осями, а константу DenRespubliki с парой 10/25 связывает сам акт (решение формы 3 шапки 02-prazdniki.law). Ответ от этого стал содержательнее: вместо одного правила §206-альтернативы proof-граф даёт ЦЕПЬ DniNatsionalnykhPrazdnichny → PrazdnichnyyDenNerabochiy — в живом пакете национальная и государственная ветви ст. 5 разведены отдельными правилами, и видно, каким из двух оснований день стал праздничным. Обе пробы исполнены: TRUE_ONLY, минбария 1/9, 8/27, 8/27, 4/27, 4/27, Σ = 1 точным равенством, semanticHash пакета совпадает между хостами. Новые ворота утверждают ДВА, и оба раньше не проверялись ничем: пробы запускаются (тот самый класс) и два хоста печатают одно и то же — README node-пробы обещал «тот же semanticHash, что печатает питоновская проба» СЛОВАМИ, и расхождение сделало бы обещание ложью при зелёном конвейере. Сверяются четыре величины из stdout (semanticHash, статус, цепь правил, пять долей); своей семантики ворота не считают (инвариант 5), а Σ = 1 роняет пробу её собственным ненулевым выходом. Канарейка — 5 мутаций, каждая роняет свою сверку; шаг 1,7 с, graceful skip по половинам. Попутно: node-проба научилась уважать CARGO_TARGET_DIR (уступка, которую питоновская получала даром от verify/ci/lib/law_ffi.py), а обещания о номерах ворот в шапках и README догнаны (26/44 → 27/48, 27/44 → 28/48). Третий адрес того же снятого файла — демо праздников apps/site-prototype — пересобран, и drop-in-преемника у него не было: у снятого дубля вопрос non_working_holiday(holiday) давал матрицу из ОДНОЙ комбинации (0 тумблеров), а у живого акта каждый вопрос либо несёт два свободных параметра и collect его не поддерживает (nerabochiy_den, prazdnichnyy_den, vykhodnoy_den, prazdnichnaya_data), либо тянет 10 тумблеров = 1024 прогона оракула. Из двух кандидатов на 1024 прогона первый оказался ВЫРОЖДЕН, и увидеть это можно было только собрав: otmechaetsya даёт 1024 комбинации и ОДИН различный ответ (1,4 МБ) — все 10 констант уже отмечаемы по перечням ст. 2–3, поэтому тумблеры ст. 4 не могут добавить ни одного члена; демо с десятью ничего не делающими тумблерами хуже честного нуля, который оно заменяло. Впаян сосед professionalnyy_ili_inoy_prazdnik (1024 комбинации → 1024 различных ответа, биномиальное 1-10-45-120-210-252-…, 1,1 МБ): у него нет ни одного продуцента в перечнях закона — состав целиком задаёт делегация ст. 4, и каждый тумблер двигает ответ ровно на одного члена. Число тумблеров было измеримо заранее, а вот двигают ли они ответ — нет. forms-*.json порождён своим генератором с путями от корня (generatedFrom — репо-относительный, как у остальных одиннадцати); generated/data.js генератора не имеет вовсе (README объявляет его однострочником json.dumps), поэтому запись 7 заменена кодом со сторожем round-trip — сверка байтов ДО правки, иначе замена одной записи переформатировала бы остальные одиннадцать; проверено после: расходится ровно demos[7]. forms-holidays.json и answers-holidays.json сняты.

  • Образец рабочего стола пережил свой пакет на сутки — поймало это только свойство 15 индекса реестра (31.08.2026). apps/constructor/tools/build-samples.mjs первым образцом называл corpus/laws/kz/rest-day-transfer-2023, снятый из корпуса днём раньше как ДУБЛЬ параллельной сессии (7fa3bc97; канонической по решению человека осталась пара prazdniki/perenos-2023). Манифест samples/index.json при этом не пересобирался, и playable() индекса, соединяющий образец с пакетом через law.toml, молча терял запись: вложено 6, связано 5 — образец, не нашедший свой пакет, теряет кнопку «испытать», не уронив в UI ничего. Сам генератор был громким (build-samples: нет каталога …, exit 1) — тихим оказалось не падение, а то, что его никто не звал. Уцелевший близнец на это место не встал, и это замер, а не вкус: kz/perenos-2023 формализует то же постановление № 326, но импортирует kz.corpus.tk_art85_2023 (партиал-носитель власти §127), а рабочий стол открывает ОДИН каталог — lawc lower на нём одном даёт LDC-E1104/LDC-E1105, то есть образец открывался бы и не компилировался. Строка снята с доводом в комментарии; шестой образец объявлен вопросом кураторским, а не ремонтным. Попутно перезаливка синхронизировала вложенные байты, протухшие независимо: faraid/shares ехал в браузер семью файлами против 23 в корпусе (шесть модулей и 13 .lawtest появились после последней сборки), у tuystyq при том же счёте разошлись байты. check_registry_index — 222 пакета, канарейка 20/20; check_constructor — зелено. Тем же снятием осиротели .lawtest, и это отдельный долг, здесь не тронутый: corpus/tests/kz-corpus-holidays и corpus/tests/kz-corpus-restdaytransfer ссылаются в corpus/tests/index.json на kz-holidays.lawir.json и kz-rest-day-transfer-2023.lawir.json, которых нет, — check_corpus_tests на них красен.

  • Осиротевшие .lawtest снятых пакетов-дублей сняты, живые пакеты дособраны эмиссией (31.08.2026). Долг, названный хвостом записи выше, закрыт: corpus/tests/kz-corpus-holidays (HOL-04) и corpus/tests/kz-corpus-restdaytransfer (RDT-01, RDT-02) ссылались в corpus/tests/index.json на CLIR, удалённые вместе с пакетами-дублями (7fa3bc97, канонической по решению человека осталась пара prazdniki/perenos-2023), и check_corpus_tests на них падал. Сообщение ворот уводило от причины: ветка «ноль строк при непустом каталоге» одинаково описывает битый JSON параллельной сессии и отсутствующий файл, и предлагала первой гипотезу транзиторного отказа — тогда как файла не было вовсе. Пересаживать пробы не понадобилось, и это замер, а не вкус: пересадка уже произошла на уровне РАННЕРА тем же коммитом — HOL-04 жив в official_calendar.py и спрашивает у prazdniki nerabochiy_den(10, 25) вместо non_working_holiday(RepublicDay) снятого дубля; предмет RDT-01 покрыт PER-03 двумя унарными выводами (den_otdykha(@2023-07-07) и rabochiy_den(@2023-07-01)) вместе с цепью власти, которой у плоского бинарного предиката не было, а RDT-02 (сторож порядка аргументов) стал НЕВЫРАЗИМ — бинарного предиката больше нет, и роль сторожа молчания взяли PER-04 (соседний день) и PER-05 (граница пакета). Осиротевшие файлы были СТАРОЙ ЭМИССИЕЙ: генератор не звали с 30.08.2026, и живые пакеты не имели тестов вовсе. Проход emit_lawtests.py --only holidays --only perenos_2023 --only prazdniki завёл 22 теста трёх пакетов (kz-corpus-prazdniki 18, kz-corpus-tk-art85-2023 3, kz-corpus-perenos-2023 1), а снятие осиротевших повторило сметание полного прохода — файлы по прежнему индексу, затем опустевшие каталоги. Полный проход не звался намеренно: он перезаписывает ВСЕ записи индекса, то есть внёс бы в коммит несвязанную работу параллельных сессий; индекс 6423 → 6442. Попутно corpus/README.md приведён к факту — три мёртвых пути (laws/holidays/, laws/kz/holidays/, laws/rest-day-transfer-2023/), семейство rest_day_transfer (RDT-01, RDT-02) → perenos_2023 (PER-01…PER-06) и два числа, разошедшихся с корпусом: assert-узлов 23 → 29, override-дней календаря 13 → 19 (13 праздничных по абз. 2 ст. 5 и 6 перенесённых по абз. 3, а не снапшоты постановлений). Ворота при этом НЕ зелены, и остаток чужой: класс «схлопнувшийся прогон» из вывода исчез, 22 новых теста проходят (18/18, 3/3, 1/1), но полная форма красна по двум несвязанным отказам — ie/code-duello duello-t02 (5/6) и fia-corpus-f1-sporting fia-sc-15-judgment-invisible-through-a-defeasible-rule (27/28); ни CLIR, ни .lawtest, ни записи индекса этих двух пакетов настоящей правкой не тронуты, оба отказа воспроизводятся на закоммиченных байтах.

  • Компиляционный отказ пакета не краснеет НИГДЕ, и три акта корпуса прожили так неизвестно сколько (31.08.2026). Принцип 6 verify/ci/README.md отдаёт lawc check «контракту check_lower и раннера векторов», но раннер проверяет verify/vectors/, а check_lower зовёт ТОЛЬКО lawc lower. Пакет, который lower собирает, а check отвергает, поэтому зелен у всех: единственный инструмент, зовущий check по корпусу, — check_source_pinning.py, и он превращает отказ в ПРОПУСК. Найдено тремя пакетами разом, и все три диагноза разные. (1) kz.constitution.rights — три LDC-E4101 §190: норм-голова с несвязанным носителем. TreatyExtraditionPower, CitizenshipDeprivationPower и AccessToAffectingDocumentsDuty объявляли for authority: StateAuthority и не читали state_authority(authority) в теле. Право при этом не молчало — оно было ХУЖЕ мёртвого: на деле с органом и всеми фактами позиция создавалась с ВЫДУМАННЫМ носителем (urn:position:AccessToAffectingDocumentsDuty:0/holder вместо органа дела); измерено positions() до и после правки, 18 позиций в обоих прогонах, у трёх сменился носитель. Различающая проба — собственные близнецы редакции 1995 (TreatyExtraditionPower1995, CitizenAccessToAffectingDocumentsDuty1995): те связыватель читают и на том же деле дают реальный орган, то есть акт сам себе контрпример. Пять сценариев KZ-CON-RIGHTS-* ни одной из трёх норм не касаются. (2) kz.corpus.criminal_procedure_code — пятнадцать LDC-E2102: восемь предикатов без объявления, из них семь сроковых констант (10 суток ст. 483, 3 суток ст. 483, 30 и 7 и 30 суток ст. 486, 3 суток ст. 489, 10 суток ст. 492) и входной факт ст. 262 ч. 1. Неизвестное имя понижается в URI того же пространства имён, assert и правило сходятся, и все 1 384 рукописных .lawtest зелены — терялись метка §218 (нет symbol_decl — метке негде жить, и храповик разметки такой предикат не видит вовсе: он не «без метки», его нет среди объявлений) и типовой контракт аргументов. (3) packs/demo/lilliput — дефект самих ворот. Строка перечисления демо звала актом КАЖДЫЙ .law, тогда как у lilliput девять файлов под одним laws/law.toml; пофайловый check на пакете отказывает по построению, восемь файлов уходили в «ПРОПУЩЕН», а два разбиравшихся поодиночке печатали один и тот же fiction.lilliput ДВАЖДЫ — покрытие было неполным и задвоенным разом. Правило манифеста распространено на packs/demo/; правило доманифестного каталога — НЕТ, и это измерено: у middle-earth/laws/ четыре .law суть четыре разных пакета, слитый каталог lawc check отверг бы как склейку LDC-E1108. Заведён громкий сторож reject_shadowed_files (файл внутри каталога с манифестом — отказ перечня, а не пропуск акта) и девятнадцатая ступень канарейки, испытывающая его различающую силу. Измерено после правок: check чист у всех трёх; компиляционных пропусков в воротах закрепления ноль (было 10 строк); УПК считается впервые — 687 фрагментов, text coverage 100,0 % (2 254 752 из 2 255 438 байт), учёт статей 686 из 686, неучтённых 0; lilliput одной строкой вместо двух (24 фрагмента, 2 публикации). Регрессии: конституционная 148/148, KZ --only marriage/osms/peaceful_assembly/personal_data 61/61 при differential 111 вызовов байтово, .lawtest УПК 1 384/1 384. CLIR пересобран у kz-constitution-rights, kz-constitution-linked и четырёх зависимых пакетов, пиннящих байты rights в envelope.imports (kz-marriage, kz-osms, kz-pd, kz-peaceful-assembly). Сторожа у нуля компиляционных пропусков НЕТ — владение отказом есть вопрос раскладки ворот, вынесен принципом 6в в verify/ci/README.md отдельным решением.

  • kz.corpus.emle гасил собственное отступление: дефитер § 20 снимал вывод ПО РЯДУ ОСНОВЫ, а не жуан-вывод (31.08.2026). Латентный дефект, найденный не воротами, а разбором соседнего пакета: kz.grammar.singarmonizm формализует те же § 20 и § 30 и записал расхождение форм замером. UndestikKGZhengedi и UndestikYuYoEZhengedi читались when … and buyn_undestigi(w, u); defeat qoldanylatyn_undestik(w, u) — то есть снимали вывод общего правила § 31 КАКИМ БЫ ТОТ НИ БЫЛ. На основе, чей собственный ряд уже жіңішке и в конце есть к, г (киоск), это гасило заодно то, что отступление только что вывело: голова-литерал у общего правила и у отступления одна. Замер на живой базе ДО правки: дело {buyn_undestigi(Kiosk, Zhinishke), songy_dybys_klasy(Kiosk, Qatan), songy_dauyssyzdarda_k_g_bar(Kiosk)} давало qoldanylatyn_undestik(Kiosk, Zhinishke) = NEITHER и koptik_zhalgau(Kiosk, Ter) = NEITHER/REQUIRES_JUDGMENT — при том, что § 20 аттестует «киоскінің, киоскілер» прямым перечнем. Молчало потому, что этого угла не спрашивал никто: оба слова, которыми пакет проверял отступление, — парк и пункт — жуан, а на жуан-основе обе формы дефитера дают одно и то же. Правка направлена источником, а не симметрией: § 20 говорит «қазақ қосымшалары ТЕК ҚАНА ЖІҢІШКЕ жалғанып», значит снять надо именно ЖУАН — for w: Soz; when songy_dauyssyzdarda_k_g_bar(w); defeat qoldanylatyn_undestik(w, Zhuan);, и жіңішке-вывод общего правила отступлению не противоречит. Попутно из тела ушёл buyn_undestigi(w, u), а из головы — переменная ряда: класс несвязанной головной переменной, из-за которого форма unless роняла оракула (KeyError: 'v1' в substitute_head), здесь больше невозможен; явная клауза defeat оставлена, потому что показывает, ЧТО снимается. Измерено после правки: киоск — Zhinishke TRUE_ONLY через QoldanylatynUndestikKG, Zhuan NEITHER, koptik_zhalgau(Kiosk, Ter) TRUE_ONLY, чужая форма Tar NEITHER; парк не сдвинулся (Ter TRUE_ONLY, жуан по-прежнему поражён, и why_not называет UndestikKGZhengedi среди блокеров — обещание шапки «жуан проиграл, а не не выводился» держится). Покрытие: три сценария-свидетеля вместо одного, потому что классы регресса разные — KZ-EMLE-20 (отступление доживает до ответа на жіңішке-основе), 21 (это доходит до главного предиката, «киоскілер»), 22 (у парка спрашивается ЧУЖАЯ форма -тар и требуется NEITHER — единственный сторож того, что дефитер вообще ЖИВ: положительный «парктер» остаётся зелёным и с выключенным дефитером). Приёмка: регрессия --only emle 22/22, KZ-differential 22 вызова байтово идентичны, рукописные .lawtest пакета 14/14, три порождённых .lawtest зелены обоими путями, пол храповика 19 → 22, манифест и индекс реестра пакета перегенерированы владельцами.

  • Красный check_demo_differential закрыт: расходились ВХОДЫ, а не движки — 74/74 байтово (31.08.2026). Квалификация по инварианту 8 — дефект вызывающего, не реализаций и не SPEC: гипотеза «lawc выбирает толкование, а оракул считает вопрос открытым» опровергнута решающим замером (равные options — байт в байт на всех 24 вызовах демо). Политики вычисления §170, среди них выбор прочтения §152 (§168.2), доезжают разными путями: lawc eval — только из case.options, оракул — только из четвёртого аргумента evaluate. Пять прямых вызовов сценариев 2, 3 и 5 демо «Лилипутия» отдавали прочтение только делом, и оракул считал их по базовой теории с issue INTERPRETATION_REQUIRED, а демо печатало OK: status() смотрит truthStatus, разошлась вторая ось §170. Проведено: помощник options_for() в packs/demo/lilliput/run_demo.py; в verify/ci/gates/differential/check_demo_differential.py — симметричный сторож по прецеденту KZ-гейта, изъятие внеполосных calendar_resource_bytes из сверки конвенции и запись calendar.resource.json в директорию (два календарных вызова §85 прежде отвергались как «вне конвенции» и стояли вне байтового контракта). Канарейка 6/6, снятие любого из четырёх сторожей ловится мутацией. Сверенных вызовов 74 против прежних 69.

  • Красный check_lower закрыт — голдены §52.1 проведены через генераторы (31.08.2026). Квалификация по инварианту 8 — дефект голденов: с auxiliary binders §52.1 lawc lower несёт binders у comprehension и пустым, байты узла сменились, §207.1 пересортировал конъюнкты по sha256 поддерева; корпус был перегенерирован, а 4 вектора lay (BODY-AGGREGATE, QUANTIFIER-FORALL/EXISTS/BARRIER) и 2 демо-CLIR (lilliput, shire) отстали. Проведение владельцами байтов: binders: [] в comprehension-словари aggregates.py (authoring-conj §207.1 пересортировал сам, рендер отразил порядок в source.law EXISTS/BARRIER), точечная перезаморозка expected.json (rm + --bootstrap-expected, прецедент E-0064; разошлись только хэши, у EXISTS — ещё порядок premises при тождественном составе), демо — их gen_clir.sh. Итог: check_lower 142/142 + демо 8/8, векторы 371 OK, differential 141/141, check_demo зелен, Lean 157 сертификатов. Попутно названы предсуществующие красные: check_demo_differential (lil:fee/lil:inst — движки расходятся выбором толкования, воспроизведено на старом CLIR; заведено задачей) и new_vector.py --check (красен на чистом HEAD).

  • kz.paracetamol не компилировался, и из-за этого ворота закрепления МОЛЧА не проверяли акт вовсе (31.08.2026). Два строгих моста раздела 6-2 — RazreshenieObschee и RazreshenieCherezOtvet — читали razresheno_bez_konsultatsii и razresheno_otvetom_vracha голыми, а единственные производители обоих поражаемы: lawc check отвергал пакет парой LDC-E4103 LATE_STATUS_PRODUCER (§111, статус потребляется до завершения продюсеров обеих полярностей). Дефект ПРЕДСУЩЕСТВУЮЩИЙ — воспроизведён на HEAD, к миграции E-0068 отношения не имеет. Дорого в нём не отсутствие компиляции, а её последствие: verify/ci/gates/sources/check_source_pinning.py из-за ненулевого кода возврата ПРОПУСКАЛ пакет строкой «lawc check exit 1 — пакет не проверен на закрепление», то есть закрепление источника у акта, который сам объявляет его закреплённым (sources.law + sources/paracetamol/, sha256 06052cc7…) и отчитывается мерой §33.1 в audit.ru.md §2, не сверял с текстом НИКТО — а в общем итоге ворот пропуск выглядел строкой, а не отказом. Починка — приём корпуса из разбора vat/computus: раз у отношения есть поражаемый производитель, вся цепь ниже объявляется defeasible, и LDC-E4103 учитывается разом, а не по ошибке за ошибкой. Структура веток не тронута: они разведены по головам сознательно (дефитер поражает ВЫВОД, а не своё правило), менялась сила ПОТРЕБИТЕЛЕЙ; оговорок у самих мостов нет, поражение живёт этажом выше. Правовой ответ не сдвинулся: канал суждения §47.3 сквозь поражаемый мост не теряется (это errata E-0066 — путь запроса судьи разбирает поражаемые правила, в отличие от отчёта §185), KZ-PARA-23 остался REQUIRES_JUDGMENT с органом Vrach, KZ-PARA-24/25 — TRUE_ONLY, рукописные тесты 08/09 зелены. Измерено: check чист, регрессия 46/46, differential --only paracetamol — 60 evaluate-вызовов байтово идентичны, .lawtest 15/15, check_lower для пакета чист (красные там прежние — 4 LAY-L0 и 2 демо линии E-0068). Ворота закрепления теперь СЧИТАЮТ акт: 26 фрагментов, одна публикация, text coverage PARA_RU_TEXT 94,6 % (19 067 из 20 164 байт), учёт статей 26 из 26, неучтённых 0. Находка записана в шапке 03-primenimost.law и в audit.ru.md §2 и §7 п. 5.

  • assert { observed @ДАТА; } порождал CLIR, который нормативная схема отвергает, — и об этом молчали все трое (errata E-0069, 31.08.2026). grammar.ebnf даёт observed/recorded категорию temporal_literal (date | time | datetime), legal-ir.schema.json держал у observedAt/recordedAt один InstantString, понижение писало литерал как есть: lawc check — 0, lawc lower — 0, документ невалиден. Расходились НОРМАТИВНЫЕ документы между собой, а не реализации: обе стороны согласны байтово. Направление правки задали §196 и замороженные векторы — проверка порядка §196 грубость РАЗЛИЧАЕТ (сравнивает литералы одной грубости и молчит на разных: их порядок решает политика §82), а T097 прямо содержит observed @2026-08-25; и требует ПРИНЯТЬ файл; сузить поверхность значило бы переписать голден под новое поведение. Правка: §72 объявляет грубость авторской и говорит, почему это не запрещённое §48 неявное Date -> Instant (значение здесь никем не сравнивается), схема принимает DateString | InstantString — ровно как концы интервала §20. complete_as_of §70 и evidence §74 не тронуты и названы в prose соседями с ДРУГОЙ строгостью: там дата отвергается громко (LDC-E1307). Молчало потому, что этого пути не было ни у кого: корпус полей не употребляет вовсе (0 из 64 376 assert), а два вектора, которые их употребляют (T097/T098), заведены в режиме static — понижение там не зовётся. Поэтому вместе с векторным обязательством ERR-E0069-ASSERT-DATE-GRANULARITY (обе половины: дата остаётся датой, мгновение — мгновением) заведена сама способность его провалить — режим lower-shape сверяет выход lawc lower с legal-ir.schema ПРЕЖДЕ своих утверждений о полях (режим evaluate свой рукописный ir.json валидирует давно). Прочие 15 lower-shape-векторов проверку прошли без правок; обратной правкой схемы проверено, что вектор краснеет именно сообщением о невалидности документа. Радиус: расширение аддитивно, значение поля не читает никто (во всём дереве observedAt встречается только в понижении и в порождённом типе протокола рабочего стола) — ни один CLIR не пересчитан, ни один semanticHash §209 не сдвинут.

  • corpus/run_faraid_cases.py не стоял в verify/ci/run_all.sh вовсе (31.08.2026). Раннер — настоящие ворота: ненулевой код возврата, встроенный differential lawc eval против живого lawref, — но конвейер его не звал, и знали о нём только два отчётных инструмента (report_norm_graph.py, report_edition_impact.py). Тот же класс, из-за которого 27.08 впаивались четыре молча краснеющие проверки, и та же цена: девятнадцать классических казусов фараид, включая обе стороны двух развилок §152, были негарантированы. Впаян строкой в существующий корпусный шаг — перенумерации сорока семи заголовков не потребовалось. Он же единственный проверяет АРИФМЕТИКУ развилок §152 главы о деде: сам выбор прочтения .lawtest §267 несёт (ось §168.2), а аул 6→9 и знаменатель 27 — нет, они живут запросами-термами.

  • Связка в УСЛОВИИ ЦЕЛИ §124 молчала у обеих реализаций — семь норм корпуса были написаны и мертвы (30.08.2026). Схема AchievementGoal объявляет condition как Formula, то есть §124 связки РАЗРЕШАЕТ, а оба исполнителя разбирают у цели только атом либо established-атом (condition_literal). Всё прочее читалось как «не установлено», и обязанность не разряжалась НИКОГДА — ни SATISFIED по §136/§137, ни VIOLATED, — при чистом lawc check, собравшемся CLIR и ПУСТОМ issues. Квалификация по инварианту 8: дефект ОБЕИХ реализаций, не SPEC и не компилятора. Проба на минимальном пакете сверена байтово: lawc eval и живой lawref давали один и тот же документ, то есть молчание было СОГЛАСОВАННЫМ — differential оставался зелёным при мёртвом праве, а ворота мёртвых правил не видели ничего по построению (правило-то срабатывает, мертва только цель). Класс тот же, что у or в теле правила, но тише: там исполнитель хотя бы печатает NON_EXECUTABLE_RULE. Отказ сделан громким в обеих реализациях синхронно. Общая классификация — rules.norm_goal_status (порт norms.rs), один список v1-форм на трёх потребителей: оба движка и ворота молчания. Обе печатают NON_EXECUTABLE_GOAL (severity warning, дедуп между итерациями цепочки §143 через store.warned_rules), сообщение под байтовым контрактом §208 совпадает дословно. Позиция при этом СОЗДАЁТСЯ и остаётся адресуемой — §134/§135 требуют, чтобы написанная норма была видна. Вектор — различающая пара в одной программе (LAY-L2-NORM-GOAL-DISJUNCTION, из prose §124, зарегистрирован в SUPPORTED): на одном деле с утверждённым paid атомарная обязанность переходит в SATISFIED, а дизъюнктивная paid or contracted остаётся ACTIVE и выносит issue. Одиночная обязанность прошла бы и у реализации, которая молчит; улика — именно РАЗНИЦА исходов при одном факте. check_differential 139/139 байтово. Ворота молчания получили вторую половину меры. check_dead_rules спрашивал только «исполнит ли движок ПРАВИЛО»; теперь он отдельно проходит по 1209 шаблонам норм корпуса и требует, чтобы неразряжаемая цель стояла в реестре с причиной (corpus/slices/dead-rules.json, раздел deadGoals, храповик в обе стороны — ожившая запись тоже отказ). Цена измерена исполнением: семь мёртвых целей в четырёх пакетах, все вылечены тем же коммитом — клятва Гиппократа абз. 5, Конвенция о геноциде ст. V, De legibus §19 lex 1, §20 lex 9 и §22 lex 14, Грамота 1731 года п. 1 и диспозиция п. 28. Все семь — конъюнкция в условии; у клятвы автор ЗАЩИЩАЛ её комментарием («голова одна, обещано одно длящееся состояние, описанное двумя признаками»), и довод верен — поэтому обязанность НЕ расщеплена на две, а расщеплён §206 ВЫВОД: состояние получило имя институциональным предикатом, конъюнкция уехала в тело строгого правила, где and исполняется, а целью встал один литерал. Позиции, их число и стороны при этом не сдвинулись. Регрессии: genocide_convention 10/10, hippocratic_oath 20/20, gramota_1731 18/18, de_legibus 4/4; check_kz_differential по трём семействам — 55 evaluate-вызовов байтово идентичны. Раздел deadGoals реестра остался ПУСТЫМ намеренно: он сторож, а не долг. Что осталось за границей и названо словами: §124 по схеме допускает у цели ЛЮБУЮ формулу, и v1 её по-прежнему не исполняет — теперь громко. Восстановлена только положительная сторона конъюнкции: чтобы конъюнктивная maintenance-цель дала VIOLATED, контрпример утверждается на имени состояния, а не на отдельном признаке (строгое правило положительной опоры не снимает).

  • Ворота закрепления теряли пакеты молча — по алфавиту имён файлов (30.08.2026). check_source_pinning брал namespace §22 из АЛФАВИТНО ПЕРВОГО .law пакета; не найдя заголовка, он получал index.get(""), то есть None, и уходил голым continue. Комментарий оправдывал это §22 («заголовок одинаков во всех файлах, LDC-E1108»), но требование говорит о предъявленных заголовках и ничего не обещает об их наличии: господствующая конвенция корпуса ставит namespace в один заголовочный файл (00-package.law у kz/civil-code, package.law у ru/twelve-months-1943), и работало это лишь потому, что заголовочный файл оказывался первым СЛУЧАЙНО. Назови модули по главам источника — и первым становится файл без заголовка: у corpus/laws/ru/gk-rsfsr-1964 (13-…, 27-…, 99-sources, package.law) пакет выпал из ворот целиком — ни строки в --report, ни отказа, ни записи в «ПРОПУЩЕН», при чистом lawc check. Под тем же дефектом прятался второй, хуже первого: поиск шёл rglob-ом, то есть СКВОЗЬ границу вложенного пакета §10, и у corpus/laws/kz/constitution алфавитно первым файлом оказывался amendment/amendment.law — родитель проверялся против CLIR РЕБЁНКА, с local_path §27.3, разрешаемым от чужого корня. Не пропуск, а подмена предмета: urn:kz:constitution:amendment проверялся дважды, urn:kz:constitution:sources — ни разу, и в отчёте строка kz.constitution.sources не появлялась вовсе. Починка тройная, по трём разным осям. (1) package_namespace читает ВСЕ собственные файлы пакета — own_law_files останавливается на подкаталоге с собственным law.toml (DECISION-0033), — и называет расхождение заголовков вместо молчаливого выбора первого. (2) Заголовок, не найденный ни в одном файле, — ОТКАЗ, а не пропуск: пакет прошёл lawc check, значит молчание здесь означает «ворота его не видели», а не «проверять нечего». (3) Баланс reconcile: у каждого источника law_sources() обязан быть назван исход из закрытого списка VERDICTS, и новый continue без исхода роняет ворота. Это сторож КЛАССА, а не починенного случая — прежде «166 пакетов проверено» при 181 источнике читалось как норма, потому что знаменателя в сводке не было и разницу никто не перечислял. Сводка теперь печатает «N проверено из M источников», а законный пропуск «CLIR не закоммичен» — назван поимённо (три пакета: eng/poor-settlement-1691-1697, eng/statutes-of-apparel-1574, kz/administrative-code). Замер до/после на корпусе: было 168 + 10 = 178 при 181 источнике, стало 168 + 13 = 181, баланс сходится; в отчёте впервые появилась kz.constitution.sources, а kz.constitution.amendment перестала дублироваться. Канарейка (--canary, 10 → 16 ступеней) испытывает РАЗЛИЧАЮЩУЮ СИЛУ, а не зелёность: рядом с новым поиском считается прежний, и ступень держит, только если прежний терял пакет там же, где новый находит. Проверено откатом обеих защит по отдельности — поиск по первому файлу роняет 3 ступени из 16, снятый баланс — 2.

  • lawc писал пропущенное наблюдающее правило §270 дважды (30.08.2026). Дедупликация списка skipped сравнивала строку «{id}: {сообщение}» с голым id и не совпадала никогда; у свойства ДВА запроса (домен и нарушения), и пропущенное правило приходило в вердикт по разу на каждый. Оракул (lawref.lawtest.run_property) ту же проверку делает через startswith и давал один раз — то есть расхождение было дефектом ДВИЖКА, а не оракула и не SPEC. Заморожено вектором LAY-L1-PROPERTY-BARRIER-SKIPPED.

Добавлено

  • ie.clonmel.code_duello — ирландский дуэльный свод (Клонмел): ПЕРВАЯ СРАВНИТЕЛЬНАЯ ОСЬ КОРПУСА, КОТОРАЯ ВЫЧИСЛЯЕТСЯ, А НЕ ОПИСЫВАЕТСЯ (30.08.2026). Двадцать пять правил свода и две «Additional Galway Articles», принятые делегатами пяти графств на ассизах и предписанные «for general adoption throughout Ireland». Пакет заведён РАДИ соседства с ru.durasov.duel_code_1912: модуль 06-comparison.law выводит сторону Дурасова из ЕГО СОБСТВЕННЫХ посылок через мост §24 — сломайся норма там, здесь погаснет, а не останется зелёным описанием (приём kz.corpus.amengerlik против he.torah.levirate).

    Четыре оси, и две из них — совпадения. Расходятся: кто выбирает оружие (правило 16 — ВЫЗВАННЫЙ, §§ 49—50 — ОСКОРБЛЁННЫЙ) и выстрел в воздух (правило 13 запрещает «in any case», § 486 даёт его стреляющему вторым). Совпадают: ранг секунданта (правило 14 против § 142) и обязанность секундантов мирить (правило 21 против § 187). Сравнение, показывающее одни расхождения, доказывает вкус сравнивающего, а не сходство сводов, поэтому совпадения выводятся тем же механизмом.

    Расхождение по оружию имеет предел, и он проверен парой дел: своды вручают оружие разным людям только когда вызванный — не оскорблённый; при встречном вызове оба называют одно лицо, и пакет выводит согласие (DUELLO-16A/16B). Сторож DUELLO-19 держит третье состояние: пока ответил только один свод, о двух не утверждается ничего.

    Год в имени пакета отсутствует намеренно. Свод известен как «Code Duello 1777»; единственный источник с провенансом — транскрипт Sir Jonah Barrington, «Personal Sketches of His Own Times», vol. II (1827—1832) — печатает «settled at Clonmell summer assizes, 1775». Числа расходятся так же: в Голуэе их звали «the thirty-six commandments», расхожее имя — двадцать шесть, в транскрипте — двадцать пять. Пакет закрепляет то, у чего есть байты, а спор называет вслух. Свидетель сам говорит, что копия неполна, и его сноска закреплена ОТДЕЛЬНЫМ источником (BARRINGTON_NOTE), а не пересказана.

    Заведена двенадцатая объявляемая единица деления §33.1 — duello_rule (^RULE N. прописными, на отдельной строке): yar_rule берёт букву либо римскую цифру и регистронезависим, point — голый номер, en_article* — слово Article. Без своей конвенции свод был бы для обеих мер невидим молча. Тем же заходом закрыт латентный пробел LOCATOR_RE: ветвь rule/ принимала только НЕчисловые номера (Йорк-Антверпен: rule/A, rule/XVII), и числовой rule/1 не разрешался — полностью выведенный акт показывал EXECUTABLE 0 при 71 неразрешённом якоре. Радиус правки измерен воротами глубины: ни у одного акта корпуса числа не снизились.

    Измерено: lawc check чист, 73 правила (37 поражаемых, 36 строгих), 2 замыкания § 70, канал суждения § 47.3 с органом Seconds (тот же вопрос Дурасов отдаёт суду чести — §§ 147, 185), 2 duty, 31 фрагмент §194 (генератор sync_code_duello_fragments.py, шаг в run_all.sh); меры §33.1 — EXECUTABLE 25 из 25, SOURCE_ONLY 0, учёт статей 25/25 и 2/2 при нуле неучтённых, байтовая доля 99,6 / 99,5 / 99,7 % по трём закреплённым документам; 32 сценария регрессии 32/32, KZ-differential 80 вызовов байтово идентичны, 6 авторских .lawtest 6/6, doctor.py ie/code-duello — «пробелов нет». Правопорядок KingdomOfIreland вписан в словарь ОТДЕЛЬНО от GreatBritain и United Kingdom: до Акта об унии 1800 года у Ирландии свой парламент и свои суды, и ассизы, на которых свод принят, — ирландские.

  • ru.durasov.duel_code_1912 дополнен § 486 и открыт соседу (30.08.2026). Право стреляющего вторым выстрелить в воздух в пакете ОТСУТСТВОВАЛО: были записаны только последствия выстрела в воздух ПЕРВЫМ (§§ 487—488). Пробел нашёлся ровно там, где два свода расходятся, — сравнивать было не с чем. Восемь объявлений помечены pub §24 (два типа и шесть отношений, которые наполняет дело); differential после правки — 81 вызов байтово идентичен. Числа в STATUS пересняты: прежняя запись «222 правила (150 поражаемых)» расходилась с закоммиченным CLIR, где их было 215/143.

  • ru.durasov.duel_code_1912 — «Дуэльный кодексъ» В. Дурасова (4-е изд., СПб., 1912): первый акт корпуса, у которого ПРОЦЕДУРА есть предмет, а не приложение (30.08.2026). Кодекс целиком о порядке, и порядок у него нормативен: § 197 — условия объявляются «только тогда, а не раньше», когда примирение не вышло; § 199 — два протокола необходимы «для законности» дуэли. Автомат § 160 на 10 состояний и 9 переходов с четырьмя законными исходами, без недостижимых стадий и мёртвых переходов.

    Демо-дело — журнал дуэли Пушкина с Дантесом 27 января 1837 года, каждое событие которого опирается на закреплённый байт рассказа секунданта К. К. Данзаса (Аммосов, СПб., 1863), а не на пересказ. Выход: 26 строк находок § 140, за которыми стоят пять статей, шесть шаблонов норм и десять позиций — § 158 адресован обоим противникам и потому дал два шаблона, обязанность секунданта рождает позицию на каждого носителя, а отчёт печатает находку на каждом кадре. Статьи: § 158 — личные сношения с противной стороной; § 183 п. 1 — об авторе кодекса не условились; § 187 — усилий к примирению нет; §§ 381/429 — двадцать шагов при барьере в десять против предписанных 35—45 и 15—25 без требуемого двойного согласия; §§ 209—212 — протокола поединка не составляли. Плюс три попытки без правового эффекта § 164 (секундант у каждой стороны один, а § 170 велит указать двух) и STUCK. Список доказан вторым журналом: вымышленное образцовое дело проходит ту же процедуру до примирения с вердиктом CLEAN и кодом 0.

    Анахронизм назван свойством постановки, а не скрыт. Кодекс 1912 года в 1837-м не действовал; окно in_force открывается 1912 годом, и проекция as-of §31 на 1837 год сняла бы все правила пакета (NORMS_NOT_IN_PROJECTION). Журнал идёт по оси действия кодекса со сдвигом ровно на 76 лет, сохраняющим подлинные интервалы день в день — а только интервалы и читают нормы о сроках. Вопрос демо — «как ход дела 1837 года соотносится с позднейшей кодификацией дуэльного обычая», и спрашивать так разрешает сам § 183 п. 1.

    Механика, без которой список нарушений был бы пуст на любом деле: maintenance § 137 даёт VIOLATED только по контрпримеру, а невыведенный предикат лежит на NEITHER; запрет § 130 VIOLATED не получает вовсе. Восемь замыканий § 70 переводят «в материалах дела этого нет» в «этого не было», и основание даёт сам кодекс — §§ 201, 203, 211—212 о конститутивной силе и полноте протоколов.

    Три сторожевых расхождения с расхожим представлением: поспешность нарушением НЕ является (§ 198 требует срока «возможно краткого»), срок вызова соблюдён (§§ 156—157), § 159 не нарушен — друг к другу противники не являлись. Три канала суждения § 47.3 по трём РАЗНЫМ вопросам кодекса (§§ 147/183 п. 3, § 88 п. 1, § 129); туда же отнесён спорный вопрос о свойстве (свояки с 10.01.1837: § 123 говорит о родстве, § 64 включает «зятя тестя»).

    Четырёх статей в закреплённой копии нет (нумерация идёт 41 → 46), и знаменатель обеих мер §33.1 равен 496, а не 500; § 183 п. 5 на пропавшие статьи ссылается. Меры: EXECUTABLE 229 / SOURCE_ONLY 267 из 496, байтовая доля 99,6 %, учёт статей 496 из 496 при нуле неучтённых. Заголовок «полная формализация» пакет не носит: части третья и пятая (техника поединка на шпагах и саблях) и техника снаряжения пистолетов объявлены границей.

    Измерено: 222 правила (150 поражаемых, 72 строгих), 8 замыканий, 15 duty / 1 liberty / 1 power, 607 фрагментов §194 (генератор sync_duel_code_1912_fragments.py, шаг в run_all.sh); 27 сценариев регрессии, KZ-differential 81 вызов байтово идентичен, Lean принял 81 сертификат при нуле отвергнутых, 6 авторских .lawtest, doctor.py ru/duel-code-1912 — «пробелов нет». Аудит полноты записан в corpus/laws/ru/duel-code-1912/audit.ru.md: пять мёртвых символов оказались потерянными нормами (§§ 61 п. 1, 114, 125, 211, 216) и закрыты правилами, шесть недостижимых синтезом правил закрыты сценариями, две жирные статьи без норм (§§ 77, 167) формализованы.

  • de.kafka.vor_dem_gesetz — «Vor dem Gesetz» Кафки: достижимость входа ВЫЧИСЛЕНА, а не объявлена (30.08.2026). Притча о привратнике по первопечатному тексту («Selbstwehr», Прага, 7 сентября 1915) плюс экзегеза из главы «Im Dom» романа «Der Prozeß» (1925). Заведён ради одного вопроса — был ли вход достижим хоть при каком-нибудь ходе просителя, — и аксиомы «вход невозможен» в пакете НЕТ: она противоречила бы тексту дословно («Es ist möglich», говорит сам привратник) и подменила бы вывод разметкой. Три инструмента отвечают сами. Канал суждения §47.3 отдаёт REQUIRES_JUDGMENT с органом Tuerhueter — «это решает привратник», — и ответ не двигается ни от просьб, ни от даров, ни от блох (VG-14). Разбор автомата §160 находит ДВА пути за врата РАЗНОЙ ПРИРОДЫ: один читает суждение привратника, другой — простой факт прохода, потому что врата открыты «wie immer» и привратник сам предлагает попробовать; проситель выбрал первый и на второй не ступил ни разу. Журнальный прогон даёт три попытки без правового эффекта §164 — и класс этот назван самим источником: «Ich nehme es nur an, damit du nicht glaubst, etwas versäumt zu haben». Запрет есть, санкции нет: предикат последствия объявлен БЕЗ правила, ответ NEITHER сторожится сценарием и тестом. Предназначенность врат одному лицу невыводима до последней реплики — проверено парой дел, различающихся одним фактом. Экзегеза записана профилем §274 одиннадцатью доводами: 38 аргументов, 10 опровержений, 7 подрывов и ни одного приоритета — четвёртое прочтение («судить его не вправе никто») бьёт в ДОПУЩЕНИЕ остальных, а не в их выводы, и отсутствие приоритетов сторожится структурно. Измерено: регрессия 29/29 в трёх семействах, differential 26 evaluate-вызовов байтово, Lean-сертификаты 26 принято / 0 отвергнуто, 11 рукописных .lawtest §267 и 16 порождённых, мёртвых правил и посылок в никуда ноль, стаб-цепей ноль, doctor.py — «пробелов нет». Мера §33.1 неприменима (притча набрана одним абзацем) и говорит это словами. Найдено формализацией: lawref fuzz не покрывает ни одного перехода procedure §160 — пул сущностей фаззера синтетичен и объявленных констант состояний не содержит; измерено на двух пакетах (12 правил из 19 здесь, 8 из 22 у Протагора). И пробел SPEC: §274.2 разрешает рекурсию дословно, но §110 проверяется у всей программы, поэтому рекурсивный довод невыразим с поверхности (LDC-E4102).

  • hasbro.rules.monopoly — правила «Монополии»: расхождение официального свода и народной редакции как ВЫВОДИМЫЙ факт (30.08.2026). Первый акт корпуса, предмет которого — не право, а РАЗРЫВ между писаным правилом и всеобщей практикой. Три закреплённых документа Hasbro: классический текст правил (00009, © 2004, 2007), действующий листок (G0009, © 2025) и пресс-релиз 04.04.2014 об опросе игроков. Оба свидетеля народной редакции — байты САМОГО издателя: в пресс-релизе он называет пять популярных домашних правил по итогам опроса, а панель действующего листка называет три из них и ЗАПРЕЩАЕТ («HOUSE RULES COULD BE MAKING YOUR MONOPOLY GAME LONGER!»), чем и признаёт их существование. Ни одного домашнего правила «из головы» нет, и это проверяется: положение без показания выводится как unattested_in_this_corpus. Своды НЕ смешиваются ни в одном предикате (приставка folk_ у всех голов народной редакции), приоритета §116 между ними НЕТ намеренно — выбирать между текстом Hasbro и практикой не уполномочен никто, и на деле с расхождением оба ответа остаются выведенными одновременно (divergent_on + not_resolved_by_this_package). Шесть вопросов расхождения, у каждого — пара дел на ОДНОМ положении партии: невыкупленное поле (аукцион против «остаётся у банка»), Free Parking (ноль против всей казны), точное попадание на GO (200 против 400), рента ИЗ тюрьмы (собирается против «Frozen Assets»), покупка на первом круге, заём между игроками. Перечень выходов из тюрьмы замкнут §70 — «просто отсидеть» даёт FALSE_ONLY, а не NEITHER. Утрата права требовать ренту выражена поражаемым слоем с приоритетом explicit_exception, а не строгим гардом: отрицание шло бы по выводимому предикату. Две гипотезы замысла источник УБИЛ: таблицы ренты A3 невозможны — официальный текст ставок не содержит вовсе («in accordance with the list printed on its Title Deed card»), таблица живёт на карточках, то есть в инвентаре коробки; подоходный налог не формализован — закреплённые байты суть OCR-слой скана, и распознавание испортило ЧИСЛО ($900 вместо $200), а формализовать число, которого закреплённый текст не несёт верно, запрещает первое правило фазы 0. Free Parking проверен по байтам: это НЕ молчание источника — обе редакции говорят прямо («does not receive any money, property or reward of any kind»; «Relax! Nothing happens»), поэтому «ничего не происходит» выражено нормой, а не фактом о молчании. Мера §33.1 неприменима ко всем трём документам, и довод записан по каждому (articles.json): у классического текста заголовки разделов стоят не отдельной строкой И испорчены OCR в пяти случаях из девятнадцати, у листка вёрстка журнальная (единицей была бы панель — то есть авторская разметка), у пресс-релиза единицы деления нет вовсе. В базу глубины пакет поэтому не вписан. 63 сценария, differential 63 вызова байтово, 5 рукописных .lawtest, разметка §218 — 118/0 и 48 норм/0, мёртвых символов и односторонних цепей ноль, doctor.py без пробелов.

  • fiqh.hajj — порядок обрядов хаджа: аят как единица меры §33.1, выравнивание §29 и невыбранный мазхаб (30.08.2026). Пятый акт исламской традиции в корпусе и первый в ней ПРОЦЕДУРНЫЙ. Два источника: 28 аятов о хадже закреплены байтами в подлиннике (мусхаф Медины) и в переводе Саблукова 1894 года, 18 статей авторского изложения — третьей редакцией. Нумерация коранических редакций расходится по-разному в разных сурах, и соответствие объявлено 29 декларациями align §29 — первое применение этой формы в корпусе. Три уровня последствий пропуска обряда выражены тремя предикатами, а не стратами §116; мазхабное расхождение о са’йе, бритье и Муздалифе выводится ФАКТОМ дела при молчащей базе, приоритета между прочтениями нет нигде. Процессный автомат из 12 стадий читает гардами выводимое rite_performed, и обряд вне своего времени даёт §164 «попытка без правового эффекта». Канал суждения §47.3 с органом, названным самим источником (TwoJustPersons — «двое справедливых из вас», Коран 5:95). 52 сценария, differential 55 вызовов байтово, Lean 55/0, 6 рукописных .lawtest, мера §33.1: EXECUTABLE 16, SOURCE_ONLY 12, UNEXPLAINED 0.

Исправлено

  • Проверка 4 lint.py считала порогом ссылку на статью (30.08.2026). XREF_RE снимала слова целиком («статья», «пункт», «глава»), но не их общепринятые СОКРАЩЕНИЯ и не локатор Писания: метка «…прекращает хадж (ст. 9)» читалась как «порог 9 прозой». Замер на fiqh.hajj — 10 срабатываний из 10 ложные, все на «(ст. N)» и «Коран N:M». Ложная тревога здесь дороже пропуска: она приходит на КАЖДУЮ метку акта, который ссылается на себя, и приучает не читать вывод целиком.

Исправлено

  • Заведение ворот вскрыло ещё две мёртвые панели рабочего стола (30.08.2026). ImpactReport («что изменит правка», «что изменилось между датами») читал report.diff?.changes ?? report.changes и report.uncovered — ни одного такого ключа отчёт lawref.impact не отдаёт: изменения смысла §215 живут в semdiff.entries, непокрытые нормы в coverage.uncovered (ОБЪЕКТ с rules/normTemplates). Обе меры печатали ноль на любом черновике, включая тот, где снято правило; третья цепочка (report.outcomes ?? report.scenarios) работала ВТОРЫМ звеном — то есть угадала, и это признак семьи, а не исключение. ArgMap (карта спора §274) читал edge.from ?? edge.source при отдаваемых attacker/target — ни одно ребро не находило начала, и фокусный подграф не раскрывался дальше одного узла; n.status ?? n.grounded при том, что метка grounded живёт в ОТДЕЛЬНОЙ карте labelling, — все узлы серые с подписью «—»; и n.label ?? n.conclusion, печатавшее [object Object], потому что вывод аргумента есть литерал, а не строка. Обе панели переписаны на объявленную форму (workbench/src/engine/track-o-reports.ts, туда же переехала запись фаззера из fuzz-report.ts и форма лазейки из перспективы), any снят с состояний всех четырёх перспектив, а метка grounded объявлена закрытым множеством 'in' | 'out' | 'undec' — теперь и компилятор, и ворота. Найдено не чтением, а заведением ворот: обе панели выглядели правдоподобно, пока производителя и потребителя не свели в одном прогоне.
  • Карта спора получала не тот вход — вкладка не спрашивала дела (30.08.2026). AnalysisPerspective слал в argmap snapshot.document, то есть CLIR, а lawref.argmap.project проецирует ИСПОЛНЕННОЕ дело — читает proofGraph и conflicts §170, которых у CLIR нет. Отчёт выходил пустой, но формы верной, поэтому ни типизация, ни сверка имён его не ловили (оси «форма» и «вход» разные — граница ворот названа в них же), а панель подписывала пустоту словами «аргументов нет: спорить не о чем — ни одного побеждаемого вывода в пакете»: утверждение о ПРАВЕ, сделанное без единого исполнения, и ложное о любом пакете. Починка тремя частями. Мост исполняет сценарий сам, в том же порядке, что lawref argmap <ir> --scenario (исполнить → проецировать), а отсутствие дела стало ОТКАЗОМ ARGMAP_WITHOUT_CASE, а не пустой картой — инструмент, которому нечего проецировать, обязан это сказать (довод projectionVoid из L8.2: «искать было НЕГДЕ» ≠ «не найдено»). Дело берётся то, что исполнено в «Проверке»: оно вынесено в стор четвёртым глобальным входом (lastCase — дело, запрос, имя вопроса и ключ входа, сбрасывается вместе с пакетом), потому что СВОЙ сборщик дела в «Анализе» стал бы вторым источником одной формы. Пока дела нет, вкладка не строит ничего и говорит почему, с кнопкой перехода в «Проверку». Заодно разведены два разных «пусто», бывшие одним: ноль аргументов значит «в этом деле не применилось ни одного правила» (карта строится из применений §180), ноль атак — «применились, но ни один вывод не побеждается», и второе теперь перечисляет применения с их метками grounded. Проверено в браузере на kz-tuystyq: дело из «Проверки» даёт 7 применений с читаемыми выводами (entered_state(urn:entity:e0, QudaTusi)) и метками in — до правки на этом же месте было «спорить не о чем».
  • Второй prefer в одном теле priority молча затирал первый (30.08.2026, вектор T157). priority_decl в spec/grammar.ebnf допускает ровно одно ребро prefer … over …, но парсер lawc разбирал тело циклом с голым присваиванием: каждый следующий prefer перезаписывал предыдущий, побеждал последний по тексту, и первое написанное ребро не доезжало до CLIR при полностью чистых check и lower — снаружи неотличимо от «норма не применима». Differential этот класс не видит по построению: поверхность .law разбирает только lawc, и оба движка сверялись на CLIR, порождённом уже после потери. Теперь второй prefer — ошибка LDC-E0201 на своём спане («одно ребро на декларацию, второе пишется отдельным priority»), выживает ПЕРВОЕ ребро (прецедент — повторный capability §47.4). Вектор T157 пиннит все три стороны утверждения: ровно одно вхождение кода, отказ синтаксический (LDC-E4108/LDC-E4107 в отсутствующих), направление выживания — второе ребро файла нарочно повторяет соседнюю одиночную декларацию, и «дубликат priority-ребра» LDC-E4106 звучит ровно у реализации, оставившей последний prefer (измерено на доправочном парсере). Корпус проверен срезом комментариев: живых носителей двух prefer в одном теле нет — osms/10-contributions.law и yasa/09-readings.law уже расщеплены и документируют ловушку словами.
  • Обе панели фаззера рабочего стола показывали нули на любом пакете (30.08.2026). «Мёртвые нормы и конфликты» и «Право молчит» читали ключи, которых отчёт lawref fuzz не отдаёт НИ ОДНОГО: report.deadRules ?? report.dead (таких ключей нет — норма без доказанного применения живёт в coverage.uncovered.rules), report.conflicts на верхнем уровне (конфликты §115 лежат в findings с kind === "conflict"), report.skippedPredicates (лежит в manifest) и report.uncovered КАК МАССИВ — на деле coverage.uncovered есть объект с rules/normTemplates, и .length у него undefined. Все четыре чтения давали [], поэтому панель печатала «мёртвых норм: 0, конфликтов §115: 0, непокрыто: 0», а раздел «Нормы без доказанного применения» — ноль с подписью «все нормы применялись хотя бы раз»: утверждение, противоположное истине, и неотличимое от чистого пакета. Измерено на вложенном tuystyq теми же параметрами, что стоят в панели по умолчанию (--seed 0 --worlds 24 --max-assertions 40 --targeted 30): 8 правил из 105 не применились ни в одном мире (весь Qudalyq — Uzatu, QalynMalBeru, Buzylu, BuzyluQalynMalDanKeyin, у каждого enters и valid), 2 контрпримера инварианту §93.1 (aga/necessary, epke/necessary) и 8 констрейнтов, по которым охоту не вели вовсе (кап CONSTRAINTS_CAP=8) — последнее особенно дорого молчало: «контрпримеров 0» там означало бы «не смотрели», а не «их нет». Форма отчёта записана типами в apps/constructor/apps/workbench/src/engine/fuzz-report.ts и импортируется обеими панелями: цепочка ?? из синонимов и report: any — след угадывания имён, и она снята вместе с ними, как 30.08.2026 у LoopholeReportShape. Тот же класс, что вид узла 'edition' в перспективе «Редакции», но с важной разницей, названной вслух: у отчёта фаззера нормативной схемы нет (трек О — оркестрация поверх ядра), поэтому тип ПОРОДИТЬ не из чего и запись сделана руками — расхождение с fuzz.py эта запись ловит только компилятором на стороне потребителя, а не воротами. Панель заодно перестала врать составом: непокрытые правила и шаблоны норм выводятся списком, пропущенные предикаты и констрейнты — с ПРИЧИНОЙ из отчёта, а покрытие названо парой «покрыто N, из них наведением M» (числа панели сверены с python3 -m lawref fuzz … --json на том же пакете и совпали все восемь).
  • Поиск лазеек L8.2 молча возвращал ноль на пакетах без дат вступления (30.08.2026). Право каждого шага — проекция §31/D1 на дату шага, и это же движение создаёт слепую зону: у пакета, чьи редакции lifecycle не несут (обычай, доктрина, реставрация текста — их не вводили в действие датой, и это ВЕРНО про них), проекция снимает ВСЕ заякоренные правила на ЛЮБУЮ дату. Обход честно исполнял пустое право и честно не находил путей, а отчёт печатал «путей к цели не найдено» — утверждение, неотличимое от «лазеек нет». Измерено на vory.corpus.ponyatiya: цель gnutyi достигается одним шагом при обычном evaluate (TRUE_ONLY), а loophole давал findings: 0 и alreadyReachable: false при любом бюджете — все 30 правил сняты на каждой из дат-кандидатов, семь редакций в состоянии not_yet. Тот же класс дефекта, что у process-run на kz-tuystyq (88 правил из 93), закрытый там находкой NORMS_NOT_IN_PROJECTION (DECISION-0052 §8) — у L8.2 такого маркера не было. Теперь манифест отчёта несёт projectionLosses тем же именем маркера (сколько правил снято из скольких, сколько из них датируемых, на каких датах, в каких состояниях редакции, три примера снятых), а снятые на ВСЕХ датах все ЗАЯКОРЕННЫЕ правила поднимают projectionVoid: текстовый вид и витрина MCP говорят «искать было НЕГДЕ», CLI отдаёт код 3 — недостоверный отчёт отличается от чистого кодом, а не только текстом (как impact-editions отделяет «датировать было нечем»). Счёт вынесен в impact.projection_rule_loss — один код на оба инструмента вместо двух копий одного утверждения. Оркестрация, не семантика (инвариант 5): сравнивается число правил в проекции с числом правил документа, состояния редакций берутся из меты как есть. Канарейка гейта — пара фикстур, различающихся ТОЛЬКО lifecycle редакции: без дат обязаны быть маркер, projectionVoid и код 3; с датами — ни одного маркера и прежняя находка pay→use (проверено: без маркера канарейка падает).
  • Перспектива «Редакции» рабочего стола не работала никогда (30.08.2026). Фильтр узлов стоял по виду 'edition', которого в CLIR нет вовсе (нормативный — source_edition, legal-ir.schema.json), и не совпадал НИ РАЗУ с появления конструктора: таймлайн §31 показывал «редакций: 0» на КАЖДОМ пакете (у пяти из шести вложенных образцов редакции есть — от одной до четырёх), объявлял неразрешённым КАЖДЫЙ якорь пакета, а кнопка «что изменилось между датами» брала границы из пустого списка и сравнивала дату саму с собой. Опечатка была невидима, потому что литерал сравнивался с any; теперь вид берётся из порождённого по схеме типа (LegalIrSourceEdition['kind']), и такая правка — ошибка компиляции (проверено канарейкой). Применимость и разрешение якорей перенесены в оракул (инвариант 5): состояние редакции определяет последовательность событий lifecycle §31, а якорь нормы ведёт во фрагмент и датируется его редакцией §28 — обе машины живут в lawref.applicability и lawref.impact.edition_projection, и вторая их реализация в TSX не покрывалась бы differential. Заведена операция моста edition-projection (as-of одной даты, только мета); до подъёма оракула на месте счётчика стоит «считает оракул», а не посчитанное в браузере число. Таймлайн показывает окно силы ЦЕЛИКОМ: редакция 2009 года Нахичеванского соглашения в силе с 27.09.2010 по 23.05.2025, и «в силе с» без конца говорило о ней обратное правде. Бейдж состояния отделён от materializationStatus §27.2 — степень закрепления байтов стояла на месте ответа на вопрос «действует ли». Дефект держал e2e-тест: все три проверки Ф6 открывали faraid и утверждали «В пакете нет объявленных редакций», хотя фараид объявляет FARAID_RU, — сломанный вывод был закреплён как обещание фазы. Тесты переписаны: пустое состояние проверяется на social-assistance (там ноль настоящий), таймлайн и состояния — на Нахичевани (3 из 4 действуют на 30.08.2026, редакция 2009 года погашена), применимость до оракула — парной проверкой «имя, а не число». Найдено открытием вложенного образца с редакциями: пять лет данных лежали в корпусе, но ни один вложенный пакет не показывал их в этой перспективе.
  • Презумпция теряла все unless, кроме последнего (lawc, 30.08.2026). PresumptionDecl.unless был Option, и второй unless молча затирал первый прямо в парсере: файл принимался, check и lower были чисты, а в CLIR приезжала одна норма из двух. У rule то же поле всегда было Vec, и расхождение двух поверхностей одного слова ничем не объяснялось. Квалификация по инварианту 8 — дефект lawc, не SPEC (прецедент E-0008): §146 десугаризацию для одного unless описывает, но нигде их не ограничивает, а §149/§150 прямо предполагают цепочку. Поле стало Vec<ExceptionClause>, цепочка исключений вынесена в общий lower_exception_chain — теперь у правила и презумпции ОДИН носитель логики вместо двух копий. Попутно заработала форма unless C без then (§149: defeater по презумируемой голове): парсер требовал then вопреки grammar.ebnf. Имена узлов первого исключения сохранены (/R2, /priority) — id входит в semanticHash §209, и переименование перезаморозило бы CLIR всех 18 пакетов корпуса с презумпциями; проверено — все 18 регенерируются байт в байт. Найдено пробой при формализации fiqh.wasiyya.
  • Сила defeater с then-частью молчала (lawc, 30.08.2026). §95.3 и нормативный вектор T006 дают каноническую форму defeat <атом>: голова defeater-а называет АТАКУЕМЫЙ вывод. Форма then принималась без единого слова, а полярность бралась буквально — then not q атакует кандидатов на not q, то есть противоположную сторону той, которую автор гасит словом «не». Ответ на деле переворачивался при зелёных check, lower и differential (замер: маукуф fiqh.wasiyya отвечал TRUE_ONLY вместо NEITHER). Теперь — предупреждение LDC-E1308, называющее каноническую форму; поведение не менялось, байты CLIR у обеих форм одинаковы.

Добавлено

  • us.asimov.three_laws — «Три закона робототехники» Азимова, первый акт корпуса категории «вымышленная этика машин» и первый, чьим ПРЕДМЕТОМ является сам порядок норм (30.08.2026). «Lower-numbered laws supersede the higher-numbered laws» — три упорядоченные поражаемые нормы, четыре приоритета §116 и выровненные ранги, названные в каждом модуле (приоритет между стратами §110/§111 не применяется никогда и молчит при чистом check). Правопорядок PositronicRobotics вписан в перечень §27.1: вымышлен, как Скотный двор, но обязателен иначе — нормы вшиты в позитронный мозг, органа принуждения нет вовсе, ближайший родственник по механизму — IETF. Закреплены байты свидетеля, а не акта: «Handbook of Robotics, 56th Edition, 2058 A.D.» не существует ПО ПОСТРОЕНИЮ (датирован будущим внутри вымысла), его редакция — UNAVAILABLE без публикации и фрагментов, а 12 099 байт принадлежат отдельному произведению-свидетелю (приём «Жеті жарғы»); полные тексты «Runaround» и «I, Robot» охраняются и не вендорены. Первый закон — две нормы врозь, и наблюдаемо нарушается только положительная: maintenance даёт VIOLATED от контрпримера, forbearance не даёт никогда (сцена-сторож на §79). Роботы NS-2 — класс адресата с гардом, а не вторая редакция (у Азимова оба текста действуют одновременно — на том и держится сюжет «Little Lost Robot»). Нулевой закон — толкованием §152 поверх узкой базы, со старшинством через дефитер §107.3 (вложенный priority правила базы упорядочить не вправе — LDC-E1318 при чистом check); пара дел различается ровно options.selectedInterpretations, выбор дублирован в case.options, и все 22 вызова вошли в differential. «Вред» — канал суждения §47.3 с органом не судом, разрезанный на два предиката: запрос доходит до решающего только через строгое правило. Дилемма Херби отвечает честным BOTH, и причина предъявлена машинно — отношением unattested_in_this_corpus. Замыкание §70 по унарному human служит и определением, и солярианской лазейкой; обе стороны различимы парой сцен. 22/22 сценария, 22/22 вызова байтово идентичны, 11 рукописных .lawtest, мёртвых правил и символов ноль, фаззер — ноль находок. Учёт §33.1 — unmeasured (единицы деления у свидетеля нет), покрытие байтов 20,8 %. Разбор границ — analysis/README.ru.md, вердикты по 30 неиспользованным видам деклараций — audit.ru.md.

  • kz.corpus.tabaq_tartu — свод восьми расходящихся свидетельств об обычае табақ тарту (01.09.2026). Кому какая часть туши: роль гостя → вид табақ → обязательные и запрещённые мүше; голова — кто держит, кто не вправе («әкесі тірі адам бас ұстамайды», Ә. Диваев), зубы и правое ухо по краям; долг зятя резать төс, игра с құйымшақ и киіт. Все восемь свидетелей пиннит сам — статьи казахской Википедии по закреплённым ревизиям (fetch_tabaq_tartu_texts.py, 33 140 байт, 56 фрагментов от sync_tabaq_tartu_fragments.py); девятый («Қонақ», жалоба бию) назван фактом без импорта. Четыре расхождения выводятся, приоритета §116 между записями нет: в нормативном слое тоқпан жілік в қос табақ и невыбитые зубы в Жетісу отвечают BOTH §115. Две измеренные границы: замыкание над бинарным предикатом (LDC-E2114) и равенство сущностей в агрегате (TYPE_ERROR на исполнении при чистом check) — недостача выводится сравнением двух счётов по показанию одного свидетеля; канал суждения §47.3 проходит один шаг, и вид табақ почётного гостя читает honoured_guest напрямую. 24 сценария (corpus/kz/acts/tabaq_tartu.py), differential 24 вызова байтово, 21 .lawtest, разметка 230/0 и 61/0, 113 констант закрытых перечней в dead-symbols.json, doctor.py без пробелов, мера §33.1 неприменима. Аудит — corpus/laws/kz/tabaq-tartu/audit.ru.md.

  • kz.corpus.ant_zhan_beru — свод пяти свидетельств о присяге и соприсяжничестве казахского обычного права (30.08.2026). Второй пакет приёма «свод свидетельств» после kz-amengerlik и первый с ПЯТЬЮ свидетелями. Байты пиннит один — статья «Жан беру» казахской Википедии (ревизия 2793599, 2275 байт, пять блоков, режет их генератор fetch_zhan_beru_text.py по дословным зачинам: в разметке абзац ОДИН). Троих свод читает импортом — kz-valikhanov (черта шестая суда биев: «присяга честных родовичей, когда нет явных улик»), kz-karamola (ст. 14 присяга ОТВЕТЧИКА перед волостным муллой, ст. 18—19 недопуск подозрения, ст. 10 несостоятельный свидетель) и kz-aldar-kose (поражаемая презумпция присяги по статье «Ант», байты которой закреплены ТАМ — вторая копия одной ревизии дала бы два расходящихся хэша одного текста). Пятого, «Жеті жарғы», называет фактом без импорта: читать у него нечего кроме ассерта, и мост был бы стабом. Ради этого у трёх соседей заведена публичная поверхность: kz-karamola 5 → 17 объявлений, kz-valikhanov и kz-aldar-kose — с нуля (у обоих pub не было ни одного). Расхождение доказуемо лишь тогда, когда обе стороны исполняются своим кодом. Пять расхождений выводятся, ни одно не примиряется, и приоритета §116 между записями в пакете нет ни одного: обычай никого не уполномочивал выбирать между записями. О числе присягающих, о направлении присяги, о её силе, о столкновении назначения обряда с запретом ереже вменять подозрение и о двух выходах из одной доказательственной развилки. Главный ответ пакета — молчание, а не обвинение: при отказе соприсяжника обряд прерван и подозрение осталось, но aqtaldy и zhazadan_bosatylady дают NEITHER — отказ лишает возможности УСТАНОВИТЬ невиновность, а не устанавливает виновность; последствие отказа объявлено пробелом свода и ВЫВОДИТСЯ счётом §59, а не записано константой. Ни одной позиции §127: ни один свидетель не облекает обряд в обязанность. Канал суждения §47.3 с authority Bi — орган назван текстом дважды. 18 сценариев (corpus/kz/acts/ant_zhan_beru.py), 3 .lawtest, differential 77 вызовов байтово, разметка 92/0 и 33/0, мёртвых символов неучтённых 0, doctor.py без пробелов. Мера §33.1 неприменима (единицы деления у документа нет) и говорит это словами; в formalization-depth.json пакет не вписан. Полный аудит — corpus/laws/kz/ant-zhan-beru/audit.ru.md.

  • Ворота на расхождение формы отчётов трека О — шаг 46/47 (verify/ci/gates/hosts/check_track_o_shapes.py, 30.08.2026). У узла CLIR есть нормативная схема, поэтому точный тип порождается кодогенератором и опечатка в литерале вида — ошибка компиляции. У отчётов трека О схемы нет вовсе: это оркестрация поверх замороженного ядра, spec/ их формы не описывает, порождать не из чего. Форма жила в двух местах — lawref/<инструмент>.py и рабочий стол — и расходилась молча: TypeScript сверял ПОТРЕБИТЕЛЯ с записью, а запись с ПРОИЗВОДИТЕЛЕМ не сверял никто. Ворота закрывают вторую половину контракта и утверждают: каждое имя, которым рабочий стол читает отчёт, отчёт действительно отдаёт — на ЖИВОМ вызове моста, а не на закоммиченной фикстуре ответа. Три проверки. (1) Реестр полон: операции добываются из ИСХОДНИКОВ рабочего стола (op: 'x' и помощник('x', …)), а не объявляются списком — объявленный список и есть тот реестр, который расходится молча; операция без объявленной формы и файл-вызыватель без импорта записи роняют ворота, потому что и то и другое значит any. (2) Объявленное отдаётся: из TS-записи добываются пути ключей, и каждый обязательный ищется ходьбой по пути ([] — любой элемент списка, * — любой ключ словаря); дополнительно сверяются строковые ЛИТЕРАЛЫ — значение, которое производитель кладёт, а запись не разбирает (undec при объявленных 'in' | 'out'), есть мёртвая ветвь потребителя. (3) Ненаблюдённое названо поимённо: путь, которого фикстура не порождает, обязан стоять в UNOBSERVED с ПРИЧИНОЙ (сегодня 28 строк — скалярные термы, ветвь отказа движка, отказ на кадре), рост списка — отказ. Обратная сторона НЕ утверждается намеренно: ключ отчёта, которого нет в записи, — не дефект; переименование же на стороне производителя делает объявленный путь ненаходимым, и это ловит проверка 2. Отдельно пиннится schemaVersion каждого отчёта. Фикстуры не заводятся заново — берутся у ворот класса layers (дыра и конфликт §115 у фаззера, найденный путь у лазейки, каскад §116 у поправки, сломанная процедура у процесса), поэтому ветви отчёта непусты и список ненаблюдаемого короток; запросов на операцию бывает несколько, наблюдённое объединяется. Разборщик TS узок намеренно и отказывает на всём, чего не знает, включая any в самой записи: молчаливое «конструкцию не понял, путей ноль» дало бы зелёные ворота на пустом множестве. Канарейка встроена и гоняется каждый раз: машинерия сверки прогоняется на записи, какой она была у панели фаззера до починки, и обязана отвергнуть все четыре исторических имени. Проверено подложенным расхождением: attacker → from роняет ворота с указанием наблюдаемых соседей, Record<string, 'in' | 'out'> — с указанием непонятого значения. Стоимость шага 1,6 с. 9 отчётов, 443 пути под сверкой.

  • kz.corpus.kun_1920 — декрет СНК КирАССР от 09.12.1920 «Об отмене куна» (30.08.2026). Второй советский акт корпуса, гасящий институт обычая, и пара к kz-kalym-1920; замыкает ось «институт вычислим → институт погашен», которую с другого конца держат kz-zheti-zhargy (01-kun.law) и kz-karamola (04-kun.law). 5 статей из 5 (EXECUTABLE 4 + ANCHORED 1), 8 сценариев KUN-01…KUN-08, differential байтово 25/25, Lean 25/25, разметка 23/0 и 13/0. Байты — воспроизводимо из ревизии 4886355 Русской Викитеки (копия по сборнику «Образование Казахской ССР», 1957, с. 309—310), unit: point (статья с точкой; выбор подтверждён внутренней отсылкой самого акта — «указанного в ст. 3»). Три расхождения разведки с заданием, приоритет у закреплённых байтов: акт датирован 1920, а не 1921 годом (и старше калымного на 19 дней); издан ТОЛЬКО СНК, а не ЦИК и СНК; литература называет ещё и третью дату (2 декабря). Отдельного акта о барымте не существует — ближайший реальный, декрет КазЦИК «О борьбе со скотокрадством» от 10.11.1921, не имеет машиночитаемых байтов в открытом доступе и не формализован; сам декрет барымту не упоминает. Первый акт корпуса, у которого запрет ШИРЕ санкции: статья 2 воспрещает всякую уплату куна, статья 4 конфискует только уплаченное «во исполнение соглашения» — расхождение объёмов рождается на деле (KUN-05), статически обе нормы живы. Деонтика §130 здесь есть, а у калымного соседа её нет, и различие текстуальное («воспрещаются» против «— отменить»). Слова «отменить» в срезе нет вовсе — оно в заголовке карточки, — поэтому факта kun_abolished() у пакета нет. Ось дат меряется СОСЕДНИМИ ДНЯМИ: окно [@1920-12-09, infinity) даёт PENDING на 8 декабря и ACTIVE на 9-е — первый акт, где эффект errata E-0050 виден на пáре суток. Число акта — единица (множителя нет), и KUN-03 сторожит это NEITHER на удвоенной величине, чтобы двойка соседнего декрета не приехала незамеченной.

  • kz.corpus.incometax: расщепление §206 по всему пакету — 554 находки «либо/или» в эмпирических посылках закрыты, 0 осталось (31.08.2026). Аудит формализации (по запросу) нашёл, что первый отчёт занизил находку на два порядка: полный lint.py по всем 145 файлам дал 554 находки в 100 файлах, включая более ранние Очереди 1–2, не только шесть файлов этой сессии. 13 правил расщеплены генуинно, с чтением источника (ИП против частнопрактикующего лица ст. 79–81, зачёт при задолженности против возврата без неё ст. 101/113, отмена штрафа против переплаты ст. 106, недропользователь против перевозчика ст. 255) — новые сущности, отношения, правила, обновлённые сценарии. Остальные 541 — координатные перечни однородных оснований (виды вычитаемых расходов, виды оборота НДС), перелексованы автоматизированным скриптом без семантики (замена связки на запятую), каждый результат проверен диффом и lint.py. lawc check чист, CLIR пересобран, KZ-регрессия 150/150 PASS (под экстремальной нагрузкой — load average до 127 — шаги заняли до 50 минут вместо секунд). Реестр меток затянут точечно (4826→4866, нормы 1681→1695), манифест не менялся для income_tax (состав сценариев тот же).

  • kz.corpus.incometax: СТАРЫЙ КОДЕКС № 120-VI ФОРМАЛИЗОВАН ЦЕЛИКОМ — Раздел 23 закрыт, Очередь 3 закрыта, 799 EXECUTABLE / 10 SOURCE_ONLY по всем 809 статьям (30.08.2026). Пятый и последний пакет Очереди 3. Семь новых модулей (133–139) для Раздела 23 «Налогообложение недропользователей» (ст. 720–773, главы 82–88, 56 правил): общие положения и раздельный налоговый учёт по контрактам (ст. 720–723-1), подписной бонус (ст. 724–730), платёж по возмещению исторических затрат (ст. 731–735), НДПИ на углеводороды/ минеральное сырьё/общераспространённые ПИ (ст. 736–751), налог на сверхприбыль по скользящей семиуровневой шкале (ст. 752–765), альтернативный налог на недропользование по шкале от мировой цены нефти (ст. 766–771), исполнение обязательств в натуральной форме — последняя глава Кодекса (ст. 772–773) — тот же Layer-A стаб-приём, применённый к самому формулоёмкому разделу корпуса (мировые цены, коэффициенты баррелизации, скользящие шкалы — числа в label, не исполняются). Семь сценариев IPN-143…IPN-149 (дата дела 31.12.2025), KZ-регрессия 150/150 PASS, реестр меток затянут точечно (4658→4826, нормы 1625→1681; сверено по всем 160 пакетам, регрессий ноль), манифест дописан слиянием без потерь. Глубина §33.1 Кодекса 2017 года — 799 EXECUTABLE / 10 SOURCE_ONLY (было 743/66) — 99% EXECUTABLE; остаток — десять честно задокументированных границ (390/427/428/433/514/539/540 без текста между заголовками, 612/618/639 исключены сноской), ни одна не пропущена молча. Differential не запускался (риск, общий для всей Очереди 3). Этим закрыты Раздел 23, Очередь 3 целиком (пять пакетов) и вся формализация старого Кодекса № 120-VI — симметрия с Кодексом 2025 года достигнута по всему документу.

  • kz.corpus.incometax: очередь 3 старого Кодекса, четвёртый пакет — Раздел 18 «Платежи в бюджет» закрыт целиком, крупнейший раздел Кодекса (30.08.2026). Пять новых модулей (128–132) для всего Раздела 18 (ст. 550–643-1, главы 68–71, 95 правил): сборы (ст. 550–554), платы за лицензии/землю/воду/ окружающую среду/животный мир (ст. 555–583), платы за лес/радиочастоты/ связь/рекламу/цифровой майнинг (ст. 584–606-5; параграф 7 пуст, ст. 589–592 отсутствуют в нумерации), государственная пошлина и консульский сбор (ст. 607–629; ст. 612, 618 исключены сноской), всеобщее декларирование доходов и имущества (ст. 630–643-1; ст. 639 исключена сноской) — тот же Layer-A стаб-приём. Обширные тарифные таблицы и перечни освобождений (десятки статей) — стаб признаёт факт применения ставки/освобождения на уровне статьи. Пять сценариев IPN-138…IPN-142 (дата дела 31.12.2025), KZ-регрессия 143/143 PASS, реестр меток затянут точечно (4373→4658, нормы 1530→1625; реестр в этом цикле пришёл переформатированным параллельной сессией — сверено программно по всем 157 пакетам, регрессий ноль). Глубина §33.1 Кодекса 2017 года — 743 EXECUTABLE / 66 SOURCE_ONLY (было 648/161) — 92 процента EXECUTABLE. Differential не запускался. Остаток всей формализации старого Кодекса: только раздел 23 (недропользование — ст. 720–773+, ~56 статей).

  • kz.corpus.incometax: очередь 3 старого Кодекса, третий пакет — Раздел 3 «Налоговый контроль» закрыт целиком (30.08.2026). Шесть новых модулей (122–127) для всего Раздела 3 (ст. 68–176-1, главы 8–20, 111 правил): администрирование и регистрация налогоплательщика (ст. 68–93), камеральный контроль и учёт обязательства (ст. 94–115), принудительное взыскание, мониторинг и управление рисками (ст. 116–137 вкл. 120-1), формы и порядок проверок (ст. 138–152), права и результаты проверок (ст. 153–164), ККМ и прочие формы контроля (ст. 165–176-1) — тот же Layer-A стаб-приём. Параграф 4 главы 9 (электронный налогоплательщик) в источнике без статей — заголовок сразу сменяется параграфом 5, ст. 86–87 в нумерации отсутствуют — не измеряется, как Разделы 17 и 24. Шесть сценариев IPN-132…IPN-137 (дата дела 31.12.2025), KZ-регрессия 138/138 PASS, реестр меток затянут точечно (4040→4373, нормы 1419→1530). Манифест дописан слиянием без потерь (диф чист). Глубина §33.1 Кодекса 2017 года — 648 EXECUTABLE / 161 SOURCE_ONLY (было 537/272) — 80 процентов Кодекса 2017 года EXECUTABLE. Differential не запускался. Остаток очереди 3: раздел 18 (сборы, госпошлина, декларации — ст. 550–643-1, крупнейший оставшийся), раздел 23 (недропользование — ст. 720–773+).

  • kz.corpus.incometax: очередь 3 старого Кодекса, второй пакет доведён до EXECUTABLE (30.08.2026). Восемь новых модулей (114–121) для Раздела 11 (ст. 460–481, акцизы), Раздела 2 (ст. 31–67 вкл. 49-1, 51-1, 51-2, налоговое обязательство — общие положения, исполнение, изменение сроков, ликвидация и реорганизация), Раздела 20 (ст. 678–707 вкл. 686-1…686-3 и 696-3…696-4, спецрежимы — патент, упрощённая декларация, мобильное приложение, фиксированный вычет, розничный налог, сельхозпроизводители, крестьянские хозяйства), Раздела 19 (ст. 644–677, нерезиденты — юрлица без и с ПУ, физлица, международные договоры) — тот же Layer-A стаб-приём. Восемь сценариев IPN-124…IPN-131 (дата дела 31.12.2025), KZ-регрессия 132/132 PASS, реестр меток затянут точечно (3647→4040, нормы 1288→1419). Глубина §33.1 Кодекса 2017 года — 537 EXECUTABLE / 272 SOURCE_ONLY (было 406/403) — 66 процентов Кодекса 2017 года EXECUTABLE. Манифест и реестр меток при записи словили параллельные добавления других сессий (code_duello, prostokvashino, environmental-code, exodus-genealogy, us_constitution) в тот же файл — сверено построчно, все чужие изменения аддитивны. Differential не запускался. Остаток очереди 3: разделы 3 (~1940 строк), 18 (крупнейший, ~3150 строк), 23 (~990 строк).

  • kz.corpus.incometax: очередь 3 старого Кодекса начата, первый пакет из восьми разделов доведён до EXECUTABLE (30.08.2026). Восемь новых модулей (106–113) для Раздела 1 (ст. 1–30 вкл. 24-1, основные понятия и полномочия), Раздела 4 (ст. 177–188, обжалование), Раздела 5 (ст. 189–215, налоговый учёт и отчётность), Разделов 12–13 (ст. 482–496, социальный и транспортный налог), Раздела 14 (ст. 497–516, земельный налог), Разделов 15–16 (ст. 517–542, налог на имущество и на игорный бизнес), Разделов 21–22 (ст. 708–719, СЭЗ/инвестиционные режимы и рентный налог на экспорт), Разделов 24-1/25/26 (ст. 776-1–784, единый платёж, электронная торговля, переходные положения) — тот же Layer-A стаб-приём. Раздел 6 (ст. 216–223) уже покрыт файлом 92 очереди 2; Разделы 17 и 24 в источнике пусты (заголовок без глав и статей), статьи 514, 539, 540 — без текста между заголовками. Восемь сценариев IPN-116…IPN-123 (дата дела 31.12.2025), KZ-регрессия 124/124 PASS, реестр меток затянут точечно (3170→3647, нормы 1129→1288). Глубина §33.1 Кодекса 2017 года — 406 EXECUTABLE / 403 SOURCE_ONLY (было 247/562) — формализованная часть впервые превысила неформализованную. Differential не запускался. Остаток очереди 3: разделы 2, 3, 11, 18 (крупнейший, ~3150 строк), 19, 20, 23.

  • kz.corpus.incometax: раздел НДС Кодекса № 120-VI доведён до EXECUTABLE — симметрия с Кодексом 2025 года, очередь 2 ЗАКРЫТА ЦЕЛИКОМ (30.08.2026). Семь новых модулей (99–105) для ст. 367–459 (91 статья, главы 41–50: обороты и место реализации, размер оборота и нулевая ставка, необлагаемый оборот/импорт и зачёт, счёт-фактура, исчисление и уплата, бюджетные отношения, самостоятельный контур ЕАЭС гл. 50 с приставкой Eaeu) — тот же Layer-A стаб-приём, что и у очередей 1 (ИПН) и 2 (КПН). Четыре статьи без текста между заголовками (390, 427, 428, 433 — переномерованы либо прямо исключены поправками) объявлены явно, не пропущены молча. Семь сценариев IPN-109…IPN-115 (дата дела 31.12.2025), KZ-регрессия 116/116 PASS, реестр меток затянут точечно (2897→3170, нормы 1038→1129). Глубина §33.1 Кодекса 2017 года — 247 EXECUTABLE / 562 SOURCE_ONLY (было 156/653). KZ-differential --only income_tax не досчитан байтово — под тяжёлой конкуренцией параллельных сессий прогон превысил час без завершения и остановлен явным решением пользователя (честная граница, не пропуск); check, регрессия и реестры зелёные независимо. Очередь 3 (~24 раздела, 562 статьи) не начата.

  • kz.corpus.incometax: раздел КПН Кодекса № 120-VI доведён до EXECUTABLE — симметрия с Кодексом 2025 года, очередь 2 (30.08.2026). Продолжение очереди 1 (ИПН). Семь новых модулей (92–98) для ст. 216–315 (100 статей, главы 26–34: резидентство и постоянное учреждение, налогооблагаемый доход, вычеты, фиксированные активы, преференции, производные инструменты, долгосрочные контракты, льготные режимы, КИК, убытки, исчисление и удержание у источника, ставки) — тот же стаб-слой, что уже несут модули 20–33 Кодекса 2025 года для тех же статей. Ст. 223 и 313 приостановлены статьёй 783 именно на декабрьское окно 2025–2026 годов; стаб не расходится ни с одной из двух редакций. Семь сценариев IPN-102…IPN-108 (дата дела 31.12.2025), KZ-регрессия 109/109, differential байтовый. Глубина §33.1 Кодекса 2017 года — 156 EXECUTABLE / 653 SOURCE_ONLY (было 55/754). Раздел НДС (~95 статей) — остаток очереди 2.

  • Демо-поверхность apps/demos/us-sentencing — «Rangefinder» (30.08.2026). Третий жилец семейства DECISION-0066: живая Sentencing Table 43×6 (числа — из закоммиченной A3-таблицы, зоны и диагональ life — от оракула на сборке, клетка за клеткой, ~10 с на 258 клеток), ведомость §4A1.1 → диапазон «штампом» с цепью вывода и следствиями §5B1.1/§5C1.1; исполнение — lawc в wasm в браузере, двухфазная схема входа сетки (полный домен в двадцать раз дороже на вызов — замер в шапке gen_table.py). Страница /findings/ — четыре измеренных находки формализации, три с исполняемым контрпримером. Контракт формы (29 предикатов, 6 шаблонов позиций) сверяется с CLIR на каждой сборке; живая поездка держит пример источника (15×III → 24–30) и кап §4A1.1(c) (5 приговоров → 4 очка).

  • us.ussc.sentencing_guidelines: Sentencing Table США — самая большая A3-таблица корпуса, порождаемая из закреплённых байтов (30.08.2026). Guidelines Manual ред. 01.11.2025, срез §4A1.1 + §5A + §5B1.1 + §5C1.1; сетка 43×6 → sentencing-grid.lawtable.json на 231 строку, разбираемую генератором sync_ussg_fragments.py из закреплённого текстового блока (сверено до собственного примера источника: 15×III → 24–30); 27 клеток «360–life»/«life» — правилами с диагональю «категория ≥ 43 − уровень», сверяемой клетка в клетку. Водопад очков §4A1.1 с капами через min и надбавкой (e) от собственного промежуточного итога; зоны A–D по словесным определениям примечаний с измеренной дырой разбиения (минимумы 11/13/14 не покрыты никем — и таких клеток нет); пороги (a)/(b) в несоизмеримых единицах (13 месяцев против 60 дней) — срок подаётся в обеих, конверсия не выдумывается. Новая конвенция деления ussg_guideline в обеих мерах §33.1 и ветка guideline/ в LOCATOR_RE. 38 сценариев регрессии, differential 65 вызовов байтово; 5 авторских .lawtest; разметка 47/0 и 281/0.

  • vory.corpus.ponyatiya: воровские понятия в трёх редакциях — первый пакет, где свидетели расходятся о существовании самой редакции (30.08.2026). Неписаный свод реконструирован по трём научным свидетелям (CC BY): классический закон, «новый закон» отошедших (ось сучьей войны: труд — нарушение против дозволения на одних фактах), молодёжная редакция АУЕ, существование которой один свидетель описывает нормами, а другой отрицает — спор выведен предикатом, пакет его не решает. Коронация и развенчание — полномочия §127 сходки; трюмление по классике без правового эффекта (§164); «поступок против понятий» — канал §47.3 с органом-сходкой; ценз стажа — календарной парой по обе стороны границы (E-0026). Новая группа vory/ и правопорядок VorovskoeSoobshchestvo; 21 сценарий, differential 28/28 байтово, Lean 28/28, 11 авторских + 25 эмитированных тестов §267, doctor без пробелов; обе меры §33.1 неприменимы и говорят это словами. Рамка аналитическая: провенанс только научный и судебный, госзапрет АУЕ закреплён фактом внешнего правопорядка. Дополнено тем же днём: предмет спора выведен поражаемой парой без приоритета (poryadok_deystvuet, 05-sushchestvovanie.law, приём Даля/Антигоны) — по АУЕ честный BOTH и CREDULOUSLY_ACCEPTED в §274, классика и «новый закон» без отрицателя TRUE_ONLY; сценарии 21 → 23, differential 31/31, Lean 31/31, тесты 11 → 13 (пол 1265 → 1267). И процедура §159–§164 PriyomVSoobshchestvo (приём многостадиен по источнику: стаж → вынесение → присяга → обсуждение) с журналами ПАРОЙ по обе стороны развилки: journals/priyom-kandidata.json (самовольная присяга мимо сходки — §164 без эффекта, правомерный путь до терминала «Принят») и journals/priyom-otklonyon.json (возражение уводит в «Отклонён», попытка продавить приём после возражения — снова §164 с поимённым незакрытым гардом). Замерено: @source на процедуре разъезжается по порождённым правилам и убивает их в проекции (37/37) — якорь снят, провенанс на словаре переходов; шесть служебных предикатов профиля без меток — принятое состояние, как у kz-tuystyq (72/6, нормы 45/0).

  • kz.corpus.incometax: раздел ИПН Кодекса № 120-VI доведён до EXECUTABLE — симметрия с Кодексом 2025 года, очередь 1 (30.08.2026). Фрагменты всех 809 статей Кодекса 2017 года (было 9), scope в sources/tax-code-2017/articles.json расширен явным списком. Раздел ИПН (ст. 316–366, 55 статей) — целиком EXECUTABLE: 9 уже формализованы глубоко (зарплатная цепочка), 46 добавлены восемью новыми модулями (84–91, зеркалящими главы 35–40 источника) в том же стаб-слое, что уже несут модули 33–42 Кодекса 2025 года для тех же статей — entity + _conditions + строгое правило + институциональный вывод, без арифметики. Восемь сценариев IPN-94…IPN-101 (дата дела 31.12.2025) в corpus/kz/acts/income_tax.py, KZ-регрессия 102/102, differential 125 вызовов байтово идентичны. Глубина §33.1 Кодекса 2017 года — 55 EXECUTABLE / 754 SOURCE_ONLY, измерена явной парой аргументов boundaries.py (у пакета два документа, автоматический храповик глубины ключует один документ на акт — Кодекс 2025 года не тронут). Остальные 25 разделов Кодекса (754 статьи) — честно SOURCE_ONLY, невзятая работа очередей 2–3.

  • Леджер предложений: детектор молчания ВНУТРИ статьи (30.08.2026, DECISION-0067). Мера §33.1 считает покрытие по статьям и слепа внутри статьи: одна формализованная обязанность из пяти — и статья EXECUTABLE. Заведён детерминированный леджер (corpus/tools/lib/sentence_ledger.py): закреплённый источник режется на предложения и подпункты («1) …;» — отдельные единицы, маркер шапки распространяется на подпункты), словарь деонтических маркеров ru/kk (deontic_markers.py, неизвестный язык — громкий отказ) даёт кандидатов в нормы, и пара статья×класс без единого гасящего узла — непогашенное молчание. Критерий бинарный по классу: deontic и constitutive («считается/признаётся» — определение, честная модель строгая) гасятся любым выводящим узлом, presumption («предполагается, пока не доказано иное») — только поражаемым слоем; ради этого depth() получил аддитивную колонку defeasible (рендер меры не изменился). Разделение классов измерено пилотом: до — 134 непогашенных пары с десятками определительных «признаются», после — 122/151. Ложные маркеры гасятся диспозициями с причиной (sources/<акт>/ledger.json), протухшая и бескаузальная записи — отказ. Ворота verify/ci/gates/coverage/check_sentence_ledger.py (шаг 41/46, канарейка шести ступеней, 15 регрессий test_sentence_ledger.py) держат храповик corpus/ratchets/sentence-ledger.json: unquenched не растёт, covered не убывает; заведение поэтапное через --register с честными числами, незаведённые акты называются счётом каждым прогоном. Попутно срез текста на единицы деления вынесен из boundaries.py в corpus/tools/lib/act_split.py (+ article_spans с позициями заголовков); перенос сверен байтово (--all до/после идентичен), потребители не правились — boundaries.py реэкспортирует все имена.

  • Жатва оси редакций сужается по семейству (--only, 30.08.2026). verify/ci/gates/layers/report_edition_impact.py пробрасывает повторяемый --only <семейство> в argv раннера: точечная жатва одного акта стоит минуты вместо десятков минут полного kz-прохода (замеры: income_tax — 125 перехваченных вызовов за ~4 мин, repka — 34 за 5 с; цена вызова линейна по размеру IR, а жатва платит её трижды — подлинный вызов и две проекции). Своего разбора имён нет намеренно: словарь семейств принадлежит раннеру (corpus/kz/run.py), и неизвестное имя называет он. Право на сужение даёт СИГНАТУРА main раннера (main(argv) против main()), а не список исключений, — раннер, обзаведшийся argv, становится сужаемым сам. Развилка молчания разведена по тому, просил ли пользователь раннера ИМЕНЕМ: названный в --runners несужаемый есть ОТКАЗ (молча вернуть полный прогон значило бы вернуть ровно ту цену, от которой флаг спасает), а попавший в набор по умолчанию исключается и называется — в stderr и в поле skippedRunners отчёта. Инварианты жатвы целы: ноль перехваченных вызовов остаётся отказом (под сужением названы обе его причины — оборванный шов либо ничего не исполнившие семейства), красная регрессия под жатвой — отказ, отчёт полного прогона не изменился (ключи only/skippedRunners появляются только у суженного), а SystemExit раннера глотается только под сужением — без него сторож осиротевшего evaluate донёс бы своё сообщение как раньше. Само сужение прижато смоком --check: суженная жатва обязана дать СТРОГО МЕНЬШЕ вызовов, чем полный kz того же прогона, — потерянный проброс argv не падает, а молча гонит раннер целиком, и «зелёное» сужение стоило бы двадцать минут вместо секунд. Красная регрессия под жатвой перестала быть немой: stdout раннера перехвачен, и отказ сообщал ОДИН код возврата — теперь строки FAIL раннера идут эхом в stderr перед отказом жатвы (при красном без них — хвост буфера как есть). Побочно закрыт клоббер --emit, который сужение и породило: имя edition-<индекс>.json несло порядковый номер В ОТЧЁТЕ, а две суженные жатвы нумеруются с нуля обе и в общем каталоге молча затирали сценарии друг друга; индекс остался префиксом (один queryId в отчёте встречается дважды — запрос к разным пакетам), queryId добавлен различителем. Проверено: --only antigone и --only antigone_editions в один каталог дают 12 + 6 файлов, а не 12 затёртых.

  • fiqh.nikah — никах и талак: третья сторона спора о браке, пара §127/§128 и расхождение мазхабов без приоритета (30.08.2026). Четвёртый акт группы fiqh и первый в исламской линии СЕМЕЙНЫЙ (до него линия была имущественной целиком). Авторское изложение по прецеденту закята и васыйи, база — ханафитское прочтение, записанное в law.toml с причиной (15 статей, закрепление 87,7 %, глубина EXECUTABLE 13 / SOURCE_ONLY 1 / UNEXPLAINED 0). Пакет сравнивается с соседями выводом, а не комментарием: мир сценариев склеен из трёх документов, и одна вдова на один день до истечения иддата даёт orders_diverge_on_the_widow (адат зовёт деверя — kz.corpus.tuystyq ст. 10, фикх не допускает союза), на следующий день — расхождения нет; вторая ось — махр жене против калыма роду, где половина вывода берётся из заключения самого декрета 1920 года. Мост построен через tuystyq, а не через amengerlik: тот не помечает pub ничего, и его символы через границу не видны (§24, E-0059). Расхождение мазхабов — выводимый факт: приоритет §116 между прочтениями запрещён, база отступает к общему ядру, и никах без вали даёт три разных ответа на одно дело (база NEITHER, ханафитское «действителен», большинства «недействителен»); тройной талак одним произнесением молчит в базе ДЕФИТЕРОМ — без него презумпция отзывности выбрала бы прочтение меньшинства молча. Отсюда три различимых ответа головы talaq_revocable: TRUE_ONLY / FALSE_ONLY / NEITHER. Талак — власть §127 с двумя разными пределами, раджа — вторая власть с правовым окном, иммунитет жены §128 после окончательного талака блокирует превращение nikah_restored (сценарий стережёт EFFECT_BLOCKED_BY_IMMUNITY поимённо). Попутно измерена ОБРАТНАЯ сторона приёма he.mark-of-cain: строгое правило рядом с power — там условие работы §128, здесь прямой его обход (с ним союз восстанавливался при стоящей в том же документе issue блокировки). Пять замыканий §70 на ЭМПИРИЧЕСКИХ основаниях ст. 5 плюс шестое, выводимое сравнением с A3-параметром и потому не замыкаемое. Четыре A3-датасета по оси legal_time читаются обеими сторонами своих порогов; месячный шаг остаётся литералом (единица §86 стоит только у литерала). Хул’ и фасх — канал суждения §47.3 с органом Qadi и типизированными request_schema. Семейство nikah: 40 сценариев, differential 154 вызова байтово, Lean 157/157 сертификатов, 9 рукописных .lawtest §267, разметка §218 — 131/0 и 91/0. Измерено попутно: метки A3-датасетов (E-0056) доезжают до порождённых symbol_decl — $comment строки kz-conscription в храповике разметки, утверждающий обратное, устарел.

  • fiqh.wasiyya — васыйя: порядок удовлетворения требований как предмет права, презумпция в вычислительном водопаде и маукуф третьим ответом (30.08.2026). Третий акт группы fiqh; авторское изложение по прецеденту закята (10 статей, закрепление 69,8 %, глубина EXECUTABLE 4 / SOURCE_ONLY 4 с объявленными по тексту причинами / UNEXPLAINED 0). Водопад четырёх очередей ст. 3 (погребение → долги → отказы → доли) выводится правилом Precedes и спрашивается; правовая максима «основа в сделках — действительность» стоит презумпцией §. в середине арифметики: суммы третьей очереди считаются по ПОРАЖАЕМО-установленным operative_claim, отозванный (FALSE_ONLY) и приостановленный (NEITHER) в них не входят. Маукуф ст. 8 — дефитер по not_known(consent): три различимых ответа одной головы. Арифметика распределения (соразмерность долгов ст. 4, треть и сокращение ст. 6, остаток ст. 9) — запросами по архитектуре аула фараида (§111 + LDC-E1317, обе границы измерены пробой). Семейство wasiyya: 22 сценария, differential 34 вызова байтово, Lean 34/34 сертификата, 4 рукописных .lawtest §267, разметка §218 — 24/0 и 9/0. Три канона поражаемого слоя, измеренных пробами по пути: (1) из нескольких unless презумпции lower МОЛЧА оставляет последний; (2) unless и presume обязаны жить в одной страте — производители барьера только строгие, иначе конфликт разных рангов даёт BOTH; (3) голова defeater-а — блокируемый вывод (полярность совпадает), then not q блокировал бы противоположную сторону.

  • fiqh.zakat — закят: первые натуральные шкалы A3 и граница среза, исполняемая по слову источника (30.08.2026). Новая группа fiqh; авторское изложение по прецеденту фараида (16 статей, закрепление 81,1 %, глубина EXECUTABLE 13 / SOURCE_ONLY 1 / UNEXPLAINED 0). Три таблицы A3, у которых и вход, и выход — поголовье (у шкалы верблюдов пять выходных колонок; unique держит полосы письма Абу Бакра, total: false честен — непокрытые полосы закрыты правилами herd_below_nisab и beyond_restatement). Хвосты шкал (ст. 9, 11, 13) не молчат: сам источник говорит «дела … настоящим изложением не разрешаются», и ровно это выводится — у верблюдов и КРС причина правовая (неоднозначное разложение, расхождение школ), у овец техническая (floor-деление к Integer вне замкнутой поверхности — кандидат в errata по шаблону E-0015). Три вида арифметики ставок: div_round Money с политикой, проверенной в единственной различимой точке (25 000.025 → 25 000.03), точные дроби Rational у металлов, десятина/двадцатина урожая. Восемь замыканий §70 закрытого перечня получателей + правило с восемью отрицательными посылками; развязка «размер — обязанность» (duty §122 ACTIVE→SATISFIED, у урожая — без хауля по ст. 14). Семейство zakat: 52 сценария (полная лестница строк обеих шкал — до входа A3 синтезатор достижимости не властен, покрытие сценариями единственная мера), differential 64 вызова байтово, 5 .lawtest §267. Попутно измерено: constraint §93.1 evaluation-документ 0.1 не исполняет (статика и цели фаззера) — «громкая» граница констрейнтом была бы молчаливой на деле.

  • Нить замкнута: право HTTP стало исполнимым от закреплённого байта до вердикта (30.08.2026). К словарю ietf.bcp14 добавлены два ОБЪЕКТНЫХ акта, берущих модальности ИМПОРТОМ §23, а не объявляющих их у себя: ietf.http_semantics (RFC 9110, срез из шести подразделов, 15 сценариев) и ietf.http_framing (RFC 2616 → RFC 7230 → RFC 9112, 11 сценариев). Так устроен и сам источник: раздел 2.2 RFC 9110 не изобретает модальностей, а ПРИНИМАЕТ чужой словарь дословной формулой RFC 8174, и import есть формализация этой фразы. Ответ 405 без заголовка Allow от сервера, заявившего соответствие, даёт позицию SatisfyAbsoluteRequirement со статусом VIOLATED: ни одна из двух половин такого ответа сама не даёт — словарь не знает про 405, протокол не знает, что значит MUST.

  • Ходячая версия происхождения request smuggling опровергнута закреплённым текстом, а настоящий зазор локализован. Говорят, будто RFC 2616 допускал Content-Length и Transfer-Encoding вместе, не задав приоритета. Приоритет задан («the latter MUST be ignored»), и отправителю оба поля запрещены прямо («Messages MUST NOT include both…»). Зазор был уже: ПОСРЕДНИК, получивший такое сообщение, отправителем его не является, и обязанности снять Content-Length перед пересылкой у него не было ни одной — её добавил RFC 7230 §3.3.3 одним предложением, RFC 9112 §6.3 адресовал посреднику прямо. Норма была; адресат был не тот. Пакет держит это ИСПОЛНЕНИЕМ: один и тот же след пересылки даёт ноль нарушений при притязании на RFC 2616 и нарушенную обязанность при притязании на RFC 7230 либо RFC 9112 (FRAME-01…03).

  • Словарь поймал ошибку в обиходном чтении спецификации. Раздел 15.3.5 RFC 9110 («тело у ответа 204») не содержит НИ ОДНОГО ключевого слова BCP 14: «it cannot contain content or trailers» — обычный английский, а раздел 2.2 принимает словарь в редакции RFC 8174 («when, and only when, they appear in all capitals»). Обязанности и запрета из раздела не возникает, и линтер, штампующий там нарушение MUST NOT, ошибается о праве. Первая редакция сценариев ietf.bcp14 иллюстрировала этим примером MUST NOT — пример заменён настоящим запретом (§5.3), а сам случай стал сценарием HTTP-01: сообщение классифицируется неправильно построенным (утверждение о ПРОТОКОЛЕ), а деонтической позиции не возникает ни одной.

  • Соответствие считается по определению самого источника. Раздел 1.2 RFC 2616 определяет его трёхчленно, и все три члена достижимы: нарушен MUST — не соответствует (FRAME-08); чистый обмен — соответствует безусловно (FRAME-09); нарушен только SHOULD — соответствует, но условно (FRAME-10). Записано презумпцией с опровержением, а не подсчётом: текст формулирует несоответствие экзистенциально («fails to satisfy one or more»), а универсальное «satisfies all» потребовало бы агрегата и сделало бы вывод невидимым для профиля §274.

  • Толкование §152 в BCP 14 получило материал, на котором меняет ответ. RFC 2616 §1.2 и RFC 7230 §1.1 принимают словарь в ДООСЬМИТЫСЯЧНОЙ форме («as described in [RFC2119]», без оговорки о заглавных), RFC 9112 §1.1 — уже с ней. Для первых двух вопрос «связывает ли строчный must» остаётся открытым по их собственному тексту.

  • Границы механизма, найденные и объявленные. (1) Члены enum НЕ экспортируются pub: visibility §24 — префикс верхнеуровневой декларации, и словарь, чьи СЛОВА не пересекают границу пакета, не словарь; ключевые слова BCP 14 переведены в pub const (ссылки лоуверятся тем же const_ref с тем же StableId, пакет не изменился ни на байт). (2) Поверхность §267 не несёт квалифицированной ссылки на чужой пакет — у lawc test … --program нет ключа --imports, файл отвергается целиком; авторские тесты обоих пакетов держат протокольную половину, деонтическую держат сценарии и байтовый differential. (3) Эмитированных тестов у обоих пакетов нет: раннер собирает МИР из двух документов, и программа сцены не тождественна CLIR пакета.

  • Две меры §33.1 научились глубине больше двух уровней. Единица деления протокольного RFC — подраздел вида 15.5.6, а LOCATOR_RE брал \d+[-_]\d+ ОДНОЙ группой: section/5_3 разбирался, section/15_5_6 — нет, и три единицы из шести объявленного охвата выходили «без единой нормы» при живых правилах с якорями на них. Заведены две конвенции (rfc_subsection для RFC новой школы, rfc_2616_section — для издания 1999 года, где после номера точки нет: одна конвенция на оба находила в RFC 2616 РОВНО ОДИН заголовок из 255). Срез единицы теперь обрывается ТОЛЬКО следующим заголовком: стоп по постраничному аппарату был безвреден на BCP 14 по совпадению и на первом же протокольном RFC съедал из раздела 3.3.3 четыре пункта из семи молча; фрагменты BCP 14 после правки не изменились ни на байт.

  • Расчёт заработной платы стал вопросом к корпусу: kz.corpus.incometax — глава об индивидуальном подоходном налоге в ДВУХ Налоговых кодексах сразу (30.08.2026). Корпус год держал четыре пятых ответа на вопрос «сколько на руки»: ставку обязательных пенсионных взносов (kz.corpus.socialcode, ст. 249), взносы на медицинское страхование с пределами по датам (kz.corpus.osms, ст. 28), параметры года (kz.corpus.budget). Не хватало подоходного налога — и без него цепочка обрывалась на предпоследнем шаге. Закреплены байты обоих Кодексов: № 120-VI (утратил силу с 01.01.2026) и № 214-VIII (введён с 01.01.2026). Это ДВА РАЗНЫХ АКТА, а не две редакции одного, поэтому переключение по дате несут окна effective §87 и ось legal_time A3-параметров, а не машина редакций (diff-editions сравнивает редакции одного work).

  • Пакет НЕ СЧИТАЕТ взносы сам — он их читает, и это буквальное чтение. Ст. 402 и 438 Кодекса 2025 года (ст. 342 и 345-1 Кодекса 2017 года) вычитают из облагаемого дохода взносы, «исчисленные в соответствии с» законодательством о социальной защите и Законом об ОСМС. Мост воспроизводит именно ссылку: суммы приходят исполнением чужих пакетов, и в доказательстве видно, какая статья какого акта дала каждое слагаемое. Четыре импорта — больше, чем у любого другого акта KZ-корпуса. Ради моста в kz.corpus.socialcode и kz.corpus.osms заведены pub-границы экспорта (§24, E-0059): до этого ни один из двух пакетов не экспортировал НИЧЕГО.

  • Предел объекта обязательных пенсионных взносов (ст. 249 п. 1 пп. 1) — закрытый молчаливый пробел kz.corpus.socialcode. Пятидесятикратный минимальный размер заработной платы «от одного агента» не был формализован вовсе: ставка 10 % честно применялась к любой поданной базе, и на окладе в 4 500 000 ₸ пакет возвращал взнос 450 000 ₸ вместо 425 000 ₸ — без единого issue, потому что усечение делал бы автор дела, а не право. Отношение mandatory_pension_contribution_base стало institutional и выводится правилом; вход — новое article249_monthly_income_from_agent. «От одного агента» — не оговорка: у лица с двумя работодателями предел считается у каждого свой, и носитель предела поэтому расчёт, а не лицо.

  • kz.corpus.budget2025 — закон о республиканском бюджете на 2025–2027 годы № 141-VIII. Заведён ради одного: сторона «декабрь 2025» упиралась не в Кодекс, а в месячный расчётный показатель, которого в корпусе не было (3 932 ₸ против 4 325 ₸ в 2026 году). Без него та сторона считалась бы по показателю 2026 года — молча и неверно. Сверка с закреплённым текстом поправила и номер закона: 141-VIII, а не 143-VIII (последний вносит в него изменения), и параметры стоят в СТАТЬЕ 9, а не в статье 7, как в законе на 2026–2028 годы.

  • Что показала пара дат на одном деле. Оклад 400 000 ₸: декабрь 2025 — 322 305 ₸ на руки, январь 2026 — 329 775 ₸, и машина называет причину (стандартный вычет 14 МРП вырос до базового 30 МРП). Но на минимальной заработной плате знак разницы ОБРАТНЫЙ по составу причин: Кодекс 2017 года давал льготу п. 1-1 ст. 356 (минус 90 процентов облагаемого дохода при начисленном доходе до 25 МРП), которой в Кодексе 2025 года НЕТ ВОВСЕ. Рост вычета и отмена льготы тянут в разные стороны, и пересказ по памяти, знающий только про «вычет вырос вдвое», ответил бы неверно.

  • Прогрессивная шкала ст. 363 достижима только вместе с машиной ст. 441. Порог второй ступени — 8500-кратный месячный расчётный показатель ГОДОВОГО облагаемого дохода (36 762 500 ₸ в 2026 году); помесячно он не достигается ни на каком окладе. Без «нарастающего итога с 1 января» строка 2 таблицы была бы мертва. Пара сценариев по обе стороны порога разнесена на 100 000 ₸ ОСОЗНАННО: соседние тенге дают одинаковый ответ, потому что 15 процентов от одного тенге стираются округлением, и такая «пара» не стерегла бы ничего.

  • Округление объявлено политикой пакета, а не выдано за норму. Ни один из двух Кодексов правила округления подоходного налога не называет — во всём тексте Кодекса 2025 года слово «округление» встречается один раз, и то про количество транспортных средств. Объявлено HALF_UP до тенге на каждом шаге, тем же способом и по той же причине, что в kz.corpus.osms. Округление стоит на НАКОПЛЕННОМ налоге, а не на разности ст. 441: иначе сумма помесячных удержаний за год разошлась бы с годовым итогом на копейки.

  • «На руки» названо тем, что оно есть. Такой нормы нет ни в одном из трёх актов: каждый устанавливает СВОЁ удержание. Правило указывает на ст. 426 пп. 2 (единственное место, где Кодекс различает «подлежащую получению работником сумму» и «суммы, подлежащие удержанию») и ст. 440 п. 3, и в комментарии сказано вслух, что разность собрана из трёх обязанностей, а не выведена из одной нормы.

  • Три исторические пары «дыра → заплатка» и спор ZFS как argmap §274 (30.08.2026). Пакет foss.licenses дополнен шестой лицензией LGPL-2.1 и двумя категориями словаря: installation-information (тивоизация, GPLv3 §6) и same-license--library. Все три пары выражены ТОЧЕЧНЫМ различием множеств условий, а не пересказом: AGPLv3 отличается от GPLv3 ровно на network-use-disclose, GPLv3 от GPLv2 — ровно на installation-information, а линковка получила третью форму — LGPL §6 «under terms of your choice».

  • LGPL §5 — единственный текст пакета, высказывающийся о вопросе, который остальные оставляют суду. «Such a work, in isolation, is not a derivative work of the Library» — и тут же оговорка, что слинкованный исполняемый файл производным всё-таки является. Раздел получил фрагмент и НАМЕРЕННО не читается ни одним правилом: формализовать его значило бы дать пакету ответ на вопрос, который канал суждения §47.3 честно оставляет судье.

  • Замена лицензии отличена от соединения, и различие текстуальное. LGPL §3 («instead of this License») заменяет лицензию целиком — её условия замены не переживают; GPLv3 §13 разрешает соединение, а условие AGPL его ПЕРЕЖИВАЕТ («will apply to the combination»). Механизм назван самим GPLv3 §7: «provided that the further restriction does not survive such relicensing». Границу замены проводит одно слово — «the ORDINARY GNU General Public License»: LGPL-2.1 → GPLv2 и GPLv3 «можно», → AGPLv3 «нельзя».

  • Дело ZFS как два ПРОЧТЕНИЯ §152, а не два правила. Заключения SFLC и Software Freedom Conservancy оформлены interpretation … include со status disputed и дают четырёхклеточную таблицу: ни одного прочтения → NEITHER (GPLv2 §0 молчит), только SFLC → TRUE_ONLY, только Conservancy → FALSE_ONLY, оба → BOTH. Базой обязано быть молчание: выбери позицию базой — и пакет решил бы спор экспертов сменой служебного слова. Проверено мутантом: снятая строка interpretation SflcReading; возвращает ответ к NEITHER.

  • argmap показывает, что эксперты расходятся НЕ В ЛИЦЕНЗИЯХ. На деле ZFS профиль §274 даёт 164 аргумента и ровно ДВЕ атаки (rebut-unresolved=2): 162 аргумента о лицензиях стоят in, а undec помечены только две позиции — о модуле и ядре. Утверждение брифа «расходятся в одном предикате» стало измеренным, а не заявленным.

  • Лицензионные условия React 2013–2017 — новый пакет foss.react_licensing (foss-react-licensing.lawir.json), ось ВРЕМЕНИ. Три редакции двух источников, закреплённые БАЙТАМИ ИЗДАТЕЛЯ по неизменяемым тегам facebook/react: BSD 3-Clause и «Additional Grant of Patent Rights Version 2» (v15.6.1), MIT (v16.0.0). PINNED_OFFICIAL_BYTES — репозиторий и есть место публикации условий, не перепечатка.

  • impact-editions переворачивает ответ на дате перелицензирования. Запрос «прекращён ли патентный грант у компании, судящейся с Facebook» на 2016-06-01 против 2018-06-01: REACT_BSD_2013 и REACT_PATENTS_2015 applicable → closed, REACT_MIT_2017 not_yet → applicable, семантический diff §215 added=1 removed=5, оба сценария меняют исход TRUE_ONLY → NEITHER, вердикт SEMANTIC-CHANGE. Ответ даёт ПРОЕКЦИЯ §31, а не даты в гардах правил.

  • Три основания прекращения записаны ТРЕМЯ правилами, и это несёт весь смысл. Патентная месть есть и у Apache 2.0 §3, и скандала не вызвала; React прекращал грант в том числе по основанию (ii) — иск К КОМУ УГОДНО, возникший «in whole or in part from any software, technology, product or service of Facebook», то есть о рекламе или видеокодеке, без единого упоминания React. Оговорка-исключение (встречный иск при первом иске Facebook) снимает ТОЛЬКО основание (i) — проверено парой тестов, дающих на одних и тех же фактах разные ответы.

  • Сторож исторического факта. fetch_react_licensing_text.py --audit проверяет, что PATENTS в текущей ветке отдаёт 404, а LICENSE — MIT: удаление файла и есть событие сентября 2017 года. Вернись файл в ветку — утверждение пакета об отзыве гранта перестанет опираться на наблюдаемый факт, и ворота скажут это громко.

Найдено

  • Красные ворота, отказывающие ДО исполнения, неотличимы от отсутствия покрытия (30.08.2026). verify/ci/gates/compiler/check_corpus_tests.py возвращал 1 на ПЕРВОЙ проверке (индекс corpus/tests/index.json разошёлся с каталогом) и до вызова lawc test не доходил, поэтому вся поверхность §267 не проверяла ничего, а её молчание читалось как согласие. Индекс починен коммитом a5ba7dfa — и ворота сразу назвали три теста «Жеті жарғы» (ZH-51, ZH-52, ZH-58), замороженных на поведении ДО errata E-0050: написаны 27.08, нижняя граница окна нормы вернулась 28.08. Квалификация — ни модель акта, ни временнáя машинерия: окна приходят делом и объявлены верно, а legal_time во всех трёх взят из умолчания пакета (1 января 1700 года), то есть ВНЕ предъявленного этим же делом окна; до правки дата не влияла ни на что, поэтому её никто не выбирал. Починено прецедентом HP-10 — оба конца окна: ZH-51/52/58 спрашивают внутри и сохраняют ACTIVE, нижнюю границу держат новые ZH-101 (PENDING), ZH-102 (PENDING на обеих головах) и ZH-103. Последний читает распад сводки §134 в UNDETERMINED: свобода голоса до окна получает CREATED (§134 даёт семейству power/immunity/liberty свою таблицу status kinds), а налоговая обязанность с техническим окном [@0001-01-01, infinity) остаётся ACTIVE; изолировать свободу делом нельзя — liberties(actor, context) §172 срезом 0.1 не исполняется, а посылки ArmedVotingLiberty и AnnualTaxShare совпадают. Радиус правки ядра измеряется по прогонам, которые ДОШЛИ до исполнения, а не по числу зелёных шагов: заявленный E-0050 радиус «одно падение из 4427» был честен для регрессии и слеп ко второй поверхности тех же ответов.
  • У редакции может быть ровно ОДНА публикация. Первая раскладка React объявляла один источник «условия проекта» с редакцией 2013 года и двумя публикациями (LICENSE и PATENTS лежали двумя файлами). Компилятор отверг это громко: LDC-E5202: fragment "RBSD_P5": официальный текст (en) не найден в закреплённых байтах публикации "REACT_PATENTS_TEXT" — §194 сверяет фрагмент с публикацией ЕГО редакции, и при двух публикациях фрагменты одного файла проверяются против байтов другого. Отказ полезен и по существу: он заставил назвать лицензию на код и патентный грант ДВУМЯ инструментами, чем они и были, — первый заменён, второй отозван.
  • Текст LGPL-3.0 в редакции SPDX нумерует разделы ДВАЖДЫ (0…6 надстройки, затем 0…17 приложенного GPLv3). Генератор фрагментов отказывает на повторе номера, и он прав: локатор section/5 адресовал бы два разных текста. Пакет закрепил LGPL-2.1 с записанной причиной, а не срез надстройки — решения о такой границе источник не даёт.
  • ПДД РК: народная формула «знак главнее разметки» скрывает ЧЕТЫРЕ разных механизма, и proof-граф их разводит (30.08.2026). Заведён corpus/laws/kz/traffic-rules (kz.corpus.traffic_rules → kz-traffic-rules.lawir.json), семейство регрессии traffic_rules, 34 сценария, differential байтовый (34 вызова), 15 из 15 пунктов объявленного среза EXECUTABLE, неучтённых нет. Каскад средств регулирования записан ТРЕМЯ разными конструкциями языка, потому что источник связывает его ступени тремя разными отношениями: поражение §128 (пункт 38 — регулировщик против светофора; приложение 1 — временный знак против стационарного; приложение 2 — знак против разметки) даёт узел defeat; гард (пункт 94 — знаки приоритета действуют лишь на нерегулируемом перекрёстке) не даёт НИЧЕГО, правило просто не применяется; раздельные области (пункты 101 и 103 — «неравнозначных» против «равнозначных») не дают и конфликта. Пара KZ-PDD-06/07 держит различение измерением: тот же знак «Главная дорога» при неработающем светофоре порождает обязанность уступить, при работающем — не порождает, и в графе видно, что он не побеждён, а не активирован. Четвёртый механизм, которого формула не знает вовсе, — презумпция пункта 105 («считать себя на второстепенной»), дающая ВСТРЕЧНЫЕ обязанности уступить обоим.
  • Акт из брифа оказался отменённым — закреплён действующий. Правила дорожного движения утверждает ПРИКАЗ Министра внутренних дел от 30.06.2023 № 534 (регистрация в МЮ 01.07.2023 № 33003), а не постановление Правительства от 13.11.2014 № 1196: оно утратило силу постановлением от 01.09.2023 № 758 вместе с одиннадцатью изменявшими его постановлениями. Полномочие перешло от Правительства к министерству, и основанием приказ называет подпункт 5) статьи 10 Закона «О дорожном движении» вместо подпункта 7) статьи 9. Второй случай этого класса после постановления о переносе дня отдыха.
  • Оранжевой (временной) разметки в казахстанских Правилах нет. Приложение 2 говорит «Горизонтальная разметка имеет белый, жёлтый цвет»; ступень «оранжевая побеждает белую» — конструкция российских Правил, и в пакет она не перенесена. Ту же работу в Казахстане делает временный знак на переносной стойке против стационарного (приложение 1 глава 7), и ступень записана им.
  • Канал суждения §47.3 не проходит через ПОРАЖАЕМОЕ правило. Изолировано перекрёстной матрицей «сила правила × полярность головы» на минимальной паре: у строгих правил REQUIRES_JUDGMENT доезжает до потребителя и полярность соблюдает, у поражаемых молчит в обеих полярностях — ответ приходит NEITHER со статусом COMPUTED и нулём judgmentRequests, неотличимо от «право молчит». Обе реализации согласны байтово, то есть это общая граница, а не расхождение. В пакете обойдено разрезом на два шага: «линия разметки действует» выведено СТРОГИМ правилом (на нём граница наблюдаема — KZ-PDD-15), «значит манёвр запрещён» осталось поражаемым, потому что его побеждает знак.
  • Направленный фаззер НЕ проверяет ни одного написанного руками констрейнта. _hunt_invariants требует голого литерала в antecedent, а when p(a, b); понижается в established(p(a, b)) — узел вида status; констрейнт уходит в manifest.skippedConstraints, и сводка CLI об этом не печатает ни строки. Замер по корпусу: из 34 констрейнтов голый литерал в antecedent у пяти, и все пять — автоматические /necessary из concept-деклараций. Вторая половина той же проверки, _requirement_conjuncts, established разворачивает — асимметрия внутри одной функции. Не чинилось: это правка семантики фаззера, требующая своей квалификации и вектора.
  • Спортивный регламент «Формулы-1» ФИА: два пункта одной статьи, между которыми нет приоритета (30.08.2026). Заведён corpus/laws/fia/f1-sporting (fia.corpus.f1_sporting → fia-f1-sporting.lawir.json), семейство регрессии fia_safety_car, 30 сценариев, differential байтовый (30 вызовов), четыре авторских теста §267, журнал process-run и правопорядок FIA в перечне §27.1. Закреплены байты ДВУХ выпусков с fia.com: 2021 год, выпуск 13 от 8 декабря (единственный текст, по которому проводилась гонка в Яс-Марине) и 2022 год, выпуск 6 от 29 апреля (текст после поправки). Охват §33.1 — статьи 15 и 48, обе EXECUTABLE.
  • Главный результат: база отвечает BOTH о 57-м круге. Пункт 48.12 велит сейфти-кару уйти в конце СЛЕДУЮЩЕГО круга после прохода последнего кругового, пункт 48.13 — в конце ЭТОГО; оба применимы к одному состоянию, приоритета между ними в регламенте нет ни строчки. Постулат стюардов «48.13 перекрывает 48.12» (документ 58 от 12.12.2021) стоит отдельным толкованием, и его выбор меняет ответ на TRUE_ONLY — разница между двумя прогонами и есть цена ненаписанной строки prefer. lawref fuzz находит ту же коллизию §115 сценарием ИЗ ДВУХ УТВЕРЖДЕНИЙ, без всякой гонки.
  • Спор о слове «any» коллизию не решает — он её убирает, и не в пользу «Мерседес». Измерено, а не выведено рассуждением: прочтение «any = все» делает обязанными всех восьмерых круговых, трое лидера не проехали, условие пункта 48.12 не выполнено, отсрочки нет — и остаётся один пункт 48.13 (TRUE_ONLY о 57-м круге, NEITHER о 58-м). Чтобы 57-й круг снова стал спорным, к нему нужно ВТОРОЕ прочтение — широкое изъятие «Except under Article 48.12» пункта 48.10; только вместе они дают FALSE_ONLY о 58-м, то есть «гонка обязана финишировать за сейфти-каром».
  • Граница поправки 2022 года измерена тремя выпусками подряд. Выпуск 4 (18.02.2022) — «any cars»; выпуск 5 (15.03.2022) — «any all cars», ФИА опубликовала текст С ВИДИМОЙ ПРАВКОЙ, и плоское извлечение выкладывает зачёркнутое и вставленное в один поток; выпуск 6 (29.04.2022) — «all cars». Байты выпуска 5 не закрепляются (это артефакт отрисовки, а не нормативный текст), но утверждение проверяемо командой из sources.law. Отдельная находка: поправка сняла двузначность «any» и НЕ ТРОНУЛА коллизию сроков — в редакции 2022 года пункты 55.13 и 55.14 расходятся ровно так же.
  • Третья нога контура: 17 сертификатов из 28 отвергнуты известным дефектом ядра (§181.1), иного класса ноль. Отвергнутые и принятые делятся ровно по коллизии: ядро называет поимённо две стороны пары §115, а все одиннадцать принятых — сценарии, где коллизия разрешена прочтением либо не возникает. Класс уже квалифицирован сегодня на us-leonard-v-pepsico, repka и zhirenshe; обе реализации согласны байтово, починка идёт через errata, а не через правку акта. Детектор класса из разбора Leonard (дубли conflictKey) на этой форме даёт честный ноль — подстановка у соперников одна, полярность разная.
  • Аудит полноты нашёл структурно мёртвое правило при зелёных check, lower и check_dead_rules. Нижняя граница пункта 48.10 читала в посылке понятие пункта 48.12 (required_car_outstanding), а её оговорка снимала правило ровно при том условии, при котором посылка только и возникает: правило не могло сработать ни на каком деле. Признак — сверка двух списков: из 21 правила, недостижимого синтезом дел, 20 срабатывают в сценариях и одно не срабатывало нигде. Починка вернула пункту его собственный признак фактом протокола под закрытием §70; добавлены сцены FIA-SC-29/30 на круги 53–56. Отчёт аудита — corpus/laws/fia/f1-sporting/audit.ru.md; вердикт по priority_decl — «ложное усиление»: приоритет в базе был бы документом 58, вписанным в регламент.
  • KHM 5 «Волк и семеро козлят»: ось редакций проходит по СУЩЕСТВОВАНИЮ НОРМЫ (30.08.2026). Заведён corpus/laws/de/sieben-geisslein (de.grimm.geisslein → de-sieben-geisslein.lawir.json), семейство регрессии geisslein, 10 сценариев, differential байтовый (12 вызовов), десять авторских тестов §267. Закреплены ДВА прижизненных издания — Erstausgabe 1812 и Ausgabe letzter Hand 1857, — потому что они расходятся о праве: наставление матери в 1812 содержит прямой запрет впускать («laßt ihn nicht herein»), в 1857 запрета нет вовсе, осталось предостережение с описанием последствия. Отсюда результат, которого в корпусе ещё не было: на ОДНИХ И ТЕХ ЖЕ фактах (волк впущен) состав нарушения выводится по одной редакции и МОЛЧИТ по другой, и молчание — верный ответ, а не пробел формализации. Правопорядок Geissenhaus — диегетический, оба акта дома козы (наставление, угроза волка мельнику) ABSTRACT_ONLY на условной шкале @1000-01-01; сама сказка — свидетель с jurisdiction "none".
  • Презумпция, которой норма не устанавливала, отделена от факта. Наставление называет достаточные признаки ВОЛКА (грубый голос, чёрные лапы); козлята употребили их обратным ходом и из необнаружения вывели «это мать». Пакет держит выводы порознь: на третьей попытке presumed_mother даёт TRUE_ONLY, а mother_of — NEITHER. Разрыв между тем, чем руководствовался адресат нормы, и тем, что было, виден ПАРОЙ ОТВЕТОВ, а не комментарием; слейся два предиката, пакет утверждал бы, что волк был матерью.
  • Соучастие, различённое знанием, и принуждение как его вырез. Один вопрос даёт три верных ответа: мельник по изданию 1857 года оправдан принуждением (FALSE_ONLY — знал «der Wolf will einen betrügen», но уступил угрозе быть съеденным), тот же мельник по изданию 1812-го молчит (NEITHER: знания издание не сообщает), пекарь молчит по обоим (обманут ложью «я ушиб ногу»). Вырез требует знания наравне с базой намеренно: иначе пакет вывел бы «не соучастник» и по редакции, которая промолчала.
  • Приёмка мутантами. Пять мутаций, каждая убивает ровно свой тест: снятый ассерт запрета 1812, снятый priority принуждения, запрет, приписанный изданию 1857, знание, приписанное мельнику по изданию 1812, и знание, приписанное пекарю. Четыре теста пакета ожидают NEITHER и без такой проверки зеленели бы при полностью мёртвом праве.
  • Қонақ құқығы — право гостя, и Алдар Көсе как дело о лазейке (30.08.2026). Заведён corpus/laws/kz/aldar-kose (kz.corpus.aldar_kose → kz-aldar-kose.lawir.json): пять энциклопедических записей закреплены байтами, 46 фрагментов, 22 правила, 14 сценариев §267 плюс 12 сценариев регрессии. Предмет пакета — ОБЫЧАЙ, а не сказка (приём «Вершков и корешков»): единственная строка корпуса, называющая право гостя правом («қазақ жерінде қонақ құқығы заңмен қорғалады»), даёт полную цепь «обязанность — состав нарушения — инстанция — санкция», какой не даёт ни один другой пакет обычного права.
  • Единица права — ПОСЕЩЕНИЕ, и это следствие измеренной границы v1. Обычай различает три вида гостя через ОТСУТСТВИЕ признаков («ешбір таныстығы, туыстығы, жекжаттығы жоқ»); отрицание требует замыкания §70, а замыкание закрывает только унарный предикат — closure над acquainted(guest, host) отвергается с LDC-E2114, и та же диагностика называет каноническую форму. Проба сделана ДО первой строки акта; выигрыш не только технический — обязанность возникает из посещения, как и говорят байты.
  • Две лазейки, обе вычислены, и вторая не работает. Переквалификация гостя в қыдырма снимает почести приоритетом lex specialis, названным самим источником (AK-04, FALSE_ONLY — при расхождении страт §111 ответ стал бы BOTH при чистых check и lower). Сокрытие снеди даёт NEITHER, а не FALSE_ONLY: скупой не лжёт, он молчит. Главный результат отрицательный — AK-11 вычисляет, что сокрытие НЕ спасает хозяина: основанием обычай называет отсутствие исполнения, а не отсутствие припасов.
  • Граница закреплённых байтов сторожится сценарием. Ни одна из пяти записей не говорит, что Алдар жаловался бию: его средство — клятва и позор, то есть самопомощь. Основание у него было, инстанция существовала — айыпа нет (AK-12, NEITHER). Обычай дал гостю средство, а герой предания им не воспользовался, и это ВЫЧИСЛЕНО, а не заявлено.
  • Клятва как способ доказывания. Ант объявлен презумпцией: названное присягой считается наличным, пока осмотр не опроверг («куәлік етуі» записи Ант; клятва хлебом названа обычаем прямо). Ворота check_dead_symbols нашли, что сам акт присяги не читался ни одним правилом, — гард исправлен, три мёртвых объявления сняты, храповик разметки опущен 44 → 41 осознанно при unlabelled 0.
  • «Золушка» Перро 1697 года: объём отката как ЗАКРЫТОЕ ПЕРЕЧИСЛЕНИЕ (30.08.2026). Заведён corpus/laws/fr/cendrillon-1697 (fr.perrault.cendrillon → fr-cendrillon-1697.lawir.json), семейство регрессии cendrillon, 23 сценария, differential байтовый 23/23, шесть авторских тестов §267. Крёстная обусловила дар полуночью и назвала последствия поимённо — карета, кони, лакеи, платье; туфелек в перечислении нет. Пакет закрытость не объявляет, а берёт из исхода, который сказка сообщает сама: после второго бала не осталось «rien […] qu’une de ſes petites pantoufles» — отпало ровно названное. Поэтому survived_midnight выводится НЕ правилом о туфельках (такого нет и быть не может: источник произносит список, а не основание), а закрытием §70 на subject_to_reversion. На этом пробеле держится вся развязка: попади туфельки в перечень, доказывать тождество было бы нечем.
  • Измеренное расхождение объявленного условия со сработавшим. Крёстная обусловила откат тем, что Золушка пробудет «un moment davantage» — дольше полуночи (>); сказка откатывает дар при уходе РОВНО на первом ударе (>=). Взято сработавшее, расхождение предъявлено парой дел по обе стороны границы в одну секунду (CE-05 против CE-06), а не спрятано в выборе оператора.
  • Два независимых канала испытания. Объявление принца («celle dont le pied ſeroit bien juſte à la pentoufle») связывает его ПРИЛАЖИВАНИЕМ, а не тождеством: право на брак не требует опознания, и третья девица, которой туфелька пришлась впору, получает его, не будучи опознанной (CE-17A/CE-17B). Опознание — отдельный канал через вторую туфельку; ни одно правило пакета их не связывает, потому что не связывает их и Перро.
  • Восстановлено слово, которое теряет опубликованная Викитека. На границе страниц 127/128 сканa перенос размечен половиной пары ({{tiret|nop|ces}} без парного {{tiret2}}), и отрендеренная страница читается «épouſa en ſecondes une femme» — nopces пропадает молча. Закреплённые байты его восстанавливают; любая НЕ названная в скрипте непарность роняет закрепление, а не проходит тихо. Байты приколочены к ревизиям 32 страниц сканa, а не к заглавной странице: та текста не содержит вовсе (221 байт директивы транслюзии), и её oldid ничего не фиксирует.
  • Пять открытых лицензий и ВЫВОДИМАЯ совместимость между ними (30.08.2026). Заведён corpus/laws/foss/licenses (foss.licenses → foss-licenses.lawir.json): MIT, Apache 2.0, GPLv2, GPLv3, AGPLv3 плюс словарь условий choosealicense.com — шесть закреплённых документов, 64 фрагмента. Матрица совместимости 5×5 не записана, а ВЫВОДИТСЯ: ни одно правило 07-compatibility.law не называет ни одной лицензии (проверяется грепом), лицензии объявляют о себе типизированные условия, каждое с якорем @source на свой раздел. Все клетки сошлись с опубликованными вердиктами Фонда свободного программного обеспечения, включая одностороннюю Apache 2.0 → GPLv3 и обе асимметрии копилефта.
  • Провенанс словаря условий, а не выдуманный список. Категории имеют ТРИ объявленных источника: rules.yml choosealicense.com (закреплён байтами), закрытый перечень GPLv3 §7 (a)–(f) и — ровно одна категория, патентная месть, — разделы, которые её вводят (Apache §3, GPLv3 §10). Измеренная находка: в словаре choosealicense НЕТ тегов ни для патентной мести, ни для индемнификации, то есть ровно для тех двух условий, на которых стоит конфликт Apache 2.0 × GPLv2, — на нём одном знаменитая пара вышла бы СОВМЕСТИМОЙ.
  • Ключевое правило вывода — общее, а не подогнанное. «Условие, которое лицензия налагает САМА, не является для её получателя further restriction»: им же объясняется, почему патентная месть Apache допущена GPLv3 (§10 налагает патентный мир сама) и не допущена GPLv2. Проверено мутантом: снятие одного утверждения о GPLv3 §10 переворачивает пару Apache 2.0 → GPLv3 в «нельзя», и proof-граф называет блокирующим условием патентную месть.
  • Вердикт называет ПУНКТ. Отказ Apache 2.0 → GPLv2 приходит с proof-графом, перечисляющим три блокирующих раздела Apache — §3 (патентная месть), §6 (товарные знаки) и §9 (индемнификация). Заключение FSF называет два; §6 найден выводом, и его основание — существование GPLv3 §7 (e), который специально разрешает отказ в правах на товарный знак, то есть без §7 такой отказ был бы дальнейшим ограничением.
  • Канал суждения §47.3 вместо конфигурационного тумблера. «Производное произведение» невыводимо из текстов лицензий (GPLv2 §0 прямо отсылает к авторскому праву) и объявлено external judgment relation с органом Court и типизированным запросом. Дело ZFS (2016), где SFLC и Conservancy разошлись на одних текстах, отвечает REQUIRES_JUDGMENT; обе ветви вычисляются adjudicated assertion §73. Это и есть отличие от сканеров (Black Duck, FOSSA, ScanCode), где на том же месте стоит тумблер «считать ли линковку производной».
  • Новая единица деления license_section в ОБЕИХ мерах §33.1 и профиль spdx-license-section шаблона pinning. Выражение совпадает с point дословно, но конвенция своя: признаки исполнимого содержания берутся по ЯЗЫКУ конвенции, и английская лицензия под русским набором молчала бы на каждом разделе, штампуя любую объявленную границу.

Найдено

  • ФАКТЫ НЕ ПЕРЕСЕКАЮТ ГРАНИЦУ ПАКЕТА, и это молчаливо. --imports §11 несёт только интерфейс зависимости (имя, contentHash, features, exports) — ни одного узла. Правило, читающее импортированное отношение, дало NEITHER на утверждении из импортированного пакета и TRUE_ONLY на том же утверждении, сделанном у себя, — при ЧИСТЫХ check, lower и НУЛЕ issue. Следствие для раскладки: единица компиляции есть единица ВЫВОДА. Разложи пять лицензий по пяти пакетам — пакет вывода увидел бы ноль условий и отвечал бы «совместимо» на КАЖДОЙ паре, не уронив ни одних ворот.
  • Канал суждения §47.3 теряется на defeasible-правиле — тоже молча. Изолировано минимальной парой: два правила с ОДНИМ телом, ОДНОЙ головой и одной арностью, отличающиеся только видом, дают strict — один judgmentRequest, defeasible — ноль. Ни issue, ни диагностики; NEITHER без запроса читается как «нет». Согласуется с тем, что разбор блокеров §185 объявлен строгим (CLAUDE.md), то есть это граница v1, а не дефект, — но граница НЕМАЯ. Практическое следствие: цепь, обязанная донести вопрос судье, не может проходить через defeasible, а цепь с not_known не может быть strict (LDC-E4103) — два требования несовместимы, и композицию приходится разрывать на два предиката.
  • BCP 14 (RFC 2119 + RFC 8174): деонтический словарь IETF и первый акт корпуса, закреплённый БАЙТАМИ ИЗДАТЕЛЯ без единого преобразования (30.08.2026). Заведён corpus/laws/ietf/bcp14 (ietf.bcp14 → ietf-bcp14.lawir.json). Канонический формат RFC — плоский US-ASCII текст, и https://www.rfc-editor.org/rfc/rfc2119.txt отдаёт САМУ публикацию, а не её отрисовку: materialization_status PINNED_OFFICIAL_BYTES там, где у Конвенции о геноциде, ДНЯО и Римского статута стоит PINNED_UNOFFICIAL_COPY. Ни одного re.sub при получении не выполняется; sha256 обоих документов закреплён в коде получателя, и --check отказывает громко, если издатель отдаст другой файл под тем же URL. Постраничный аппарат («Bradner … [Page 1]», U+000C) остаётся в байтах и лежит в непокрытом остатке — обрывается только СРЕЗ единицы. Новый правопорядок IETF вписан в перечень §27.1 (родня — UEFA, частный трансграничный регулятор); новая единица деления rfc_section заведена в ОБЕИХ мерах §33.1.
  • Предмет — норма о нормах. Акт не регулирует ни одного протокола: он определяет значение слов, которыми требования выражают ДРУГИЕ RFC, а раздел 6 предписывает самим авторам, когда императив употреблять можно («they MUST only be used where it is actually required for interoperation») — прямой родственник закона «О правовых актах» РК. Обязанность автора нарушается (VIOLATED), когда рабочая группа отказала по ОБОИМ основаниям; путь к нарушению проверен сценарием BCP14-15, потому что обязанность без такого пути есть украшение, а не норма.
  • MUST NOT записан обязанностью ВОЗДЕРЖАНИЯ, а не prohibition. Позиция forbearance §130 в срезе 0.1 не получает VIOLATED никогда — только ACTIVE либо EXPIRED (нужна событийная модель §79), — а для этого акта «нарушен ли запрет» есть главный ожидаемый ответ. Запрет выражен целью maintenance над презумпцией воздержания, которую совершение действия опровергает отрицательной головой: §137 даёт VIOLATED от контрпримера. Сторож — BCP14-04 и tests/02-must-not-breached-is-violated.lawtest.
  • SHOULD: размытость стала типизированной. Раздел 3 даёт отступлению два условия разной природы, соединённые союзом «but»: вескость причины (не вычислима — канал суждения §47.3, authority Implementor) и взвешенность последствий (эмпирический факт). Три сценария держат все три исхода, включая BCP14-09 «причина есть, последствия не взвешены — обязанность нарушена», который и доказывает, что второе условие записано конъюнктом.
  • Толкование ПОСТАВЛЯЕТ ПОСЫЛКУ, а не побеждающее правило, — и это вынужденно дважды. Естественная запись (правило внутри толкования + priority над правилом базы) не компилируется: LDC-E1318 на lawc lower при зелёном lawc check — правила толкования получают scoped StableId, и объявленный там приоритет видит только своих. Обе стороны конфликта поэтому живут в базе, а толкование выводит предикат-посылку — причём правилом strict: объяви его defeasible, и соперники разъехались бы по стратам §111, приоритет не применился бы вовсе, а ответом было бы BOTH при зелёных check, lower и нуле issue. Пара BCP14-05/06 ловит оба отказа сразу.
  • Фаззер нашёл конфликт §115, которого не нашло чтение. lawref fuzz --targeted 40 сообщил конфликт на requirement_satisfied: дело вправе заявить и соответствующее, и отступающее поведение (реальный трейс так и выглядит), и без приоритета обе головы выводились бы разом. Разрешение по тексту: раздел 1 называет требование АБСОЛЮТНЫМ, значит побеждает контрпример (DeviationBeatsConformance).
  • Мера §33.1 — обе стороны, ноль необъяснённого. RFC 2119: 9 разделов, 6 EXECUTABLE, 1 INTERPRETED (раздел 7 — его should строчное, и по действующему прочтению ключевым словом не является), 2 границы с причиной. RFC 8174: 5 разделов, 2 EXECUTABLE, 3 границы с причиной. Байтовое покрытие 79,0 % и 51,8 %; непокрытый остаток ИЗМЕРЕН и состоит только из преамбулы издания и постраничного аппарата — нормативного текста в нём нет ни байта.
  • Граница объявлена заранее и в самом пакете: формализован свод BCP 14 целиком и НЕ формализован ни один другой RFC. Требования RFC 9110 (тело у 204, Allow у 405) приходят В ДЕЛЕ как факты — BCP 14 ровно так и устроен, он придаёт силу чужим словам, не зная, о чём они. 22 сценария семейства bcp14, differential байтовый (30 вызовов), пять авторских тестов §267.
  • «Двенадцать месяцев»: норма, невыполнимая по природе, и первый акт корпуса без единого закреплённого байта (30.08.2026). Заведён corpus/laws/ru/twelve-months-1943 (ru.marshak.twelve_months) — указ о подснежниках из драматической сказки С. Я. Маршака (1942—43): публичное обещание награды тому, кто доставит к Новому году во дворец полную корзину цветов. Байтов у пакета нет ни одного, и причина ПРАВОВАЯ, а не источниковедческая. У прежних актов текст либо закреплён, либо утрачен и потому не может быть закреплён (UNAVAILABLE — «Қасқа жолы», устный договор Балды); здесь третий случай: текст цел, доступен и машиночитаем, но охраняется — автор ум. в 1964, срок истекает в 2035. Корпус до сих пор закреплял исключительно тексты в общественном достоянии, и это свойство держалось только чтением: ни одни ворота его не проверяют. Пьеса поэтому не вендорится вовсе, обе редакции — ABSTRACT_ONLY, фрагменты несут только locator и label (приём устного договора «Балды»), а всё, что пакет говорит о содержании указа, изложено СВОИМИ СЛОВАМИ: охраняется форма изложения, а не сведения о том, что норма требует и что обещает.
  • Следствие, найденное этим актом и общее для всего корпуса: закрытие §70 недоступно пакету без закреплённого источника. closure обязан нести snapshot (LDC-E1307), snapshot ссылается на публикацию, а публикация по схеме обязана нести contentHash и documentHash — то есть закреплённые байты. Ловится это ПОЗДНО: lawc check на закрытии без snapshot ЧИСТ, отказ приходит только на lower. Роль закрытия здесь играют прямые assert not tsvetenie_v_prirode(December) — ответ тот же FALSE_ONLY.
  • Невыполнимость СЧИТАЕТСЯ, а не заявляется. Декабрьский поход за подснежниками выводится тщетным (TRUE_ONLY), цветение в декабре — FALSE_ONLY («в декабре их нет» есть утверждение О ПРЕДМЕТЕ, тогда как NEITHER было бы утверждением О СЕБЕ), а июль честно остаётся NEITHER: свидетель говорит только, что раньше апреля цветов не бывает, и о лете пакет молчит объявленной границей. Дар двенадцати месяцев — единственное основание собрать цветы вне сезона, и он СТРОГО ЛИЧЕН: декабрь не открывается для всех оттого, что одарили одну (проверено парой дел).
  • Два дефекта юридической техники записаны нормами, а не примечаниями. Золото мерится корзиной САМОГО соискателя — величина приходит из дела, верхней границы указ не ставит вовсе (приём «Балды», где цена законна в щелчках при неопределённой величине щелчка). «Тот, кто исполнит волю» не различает собравшего и доставившего: база читает ДОСТАВКУ (буквальный текст указа), interpretation добавляет СБОР, и на одном и том же деле — собрал один, доставил другой — они расходятся: без толкования награда причитается доставившему, с толкованием исполнителей оказывается двое на одну корзину. Базой стало буквальное прочтение сознательно: правило внутри интерпретации активно только при её выборе (§152/§157), и обратный порядок гасил бы буквальный смысл акта на каждом деле молча.
  • Измерено: lawc check чист, 72 узла CLIR, 9 норм, рукописных тестов §267 — 11/11 (включая пары по границе сезона и по личности дара), doctor.py «пробелов нет», разметка §218 полная (30/0 словарь, 10/0 нормы), вербализация без пробелов, 13 мёртвых символов (двенадцать месяцев и королева — константы закрытого перечня, читаемые только assert) вписаны в documented с причиной на каждый, CLIR байтово стабилен при повторной генерации. Обе меры §33.1 неприменимы — байтов нет, деления на статьи у пьесы нет тоже, — поэтому записи в formalization-depth.json нет и быть не должно (приём ru/repka). Граница объявлена: акт покрыт .lawtest, но вне KZ-регрессии, и differential по обеим реализациям его не видит.
  • Leonard v. PepsiCo: первое судебное решение корпуса как акт (30.08.2026). Заведён corpus/laws/us/leonard-v-pepsico (us.sdny.leonard_v_pepsico) — мнение судьи Кимбы Вуд, 88 F. Supp. 2d 116 (S.D.N.Y. 1999): телеролик «Pepsi Stuff» с подписью «HARRIER FIGHTER 7,000,000 PEPSI POINTS» офертой не был. Байты — распознанный том репортёра из Caselaw Access Project (officiality unofficial, PINNED_UNOFFICIAL_COPY; артефакты OCR не правятся: фрагмент §194 обязан оставаться точной подстрокой публикации). Первая в корпусе единица деления «раздел мнения» (opinion_section) — её называет сам суд («See supra Section II.A.2», сноска 16). Составной номер «II.B.1» плоским выражением не собрать, а плоская метка «1.» стоит в мнении трижды, поэтому конвенция берёт выражением римские части, а буквенные и арабские разделы приходят объявлением акта (irregular_headings). Обе меры §33.1 научены этому одинаково; ради второй boundaries.py перестал отказывать на паре «объявленная единица + нестандартный заголовок» — отказ сужен до единиц, чьи заголовки собираются без позиции в документе. Три самостоятельных основания одного отказа, разложенные так, что каждое валит требование в одиночку (LP-33A/B/C): общее правило Corbin «реклама — не оферта» как пара §115 с приоритетом §116 против двух исключений (Lefkowitz и Carbolic Smoke Ball); объективный тест разумного лица как канал §47.3 с органом Court, замыкаемый ОТРИЦАТЕЛЬНЫМ ответом судьи Вуд через adjudicated assertion §73; и статут об обманах N.Y.U.C.C. § 2-201(1) презумпцией с изъятием, срабатывающей независимо от первых двух. Форма норм выбрана измерением, а не вкусом. Презумпция с изъятием на общем правиле дала бы BOTH (дефитер презумпции обязан выводиться строго по всей цепи), промежуточный предикат «исключение сработало» — тоже BOTH (соперники разъезжаются по стратам §110/§111, и приоритет §116 молчит); обе формы проверены исполнением и заменены парой правил противоположной полярности в одной страте. Карта спора §274 показывает это как четыре ребра rebut: посылка определённости REJECTED, вывод SKEPTICALLY_ACCEPTED. Зеркальная пара к ru-zolotaya-rybka — безразмерная оферта, принятая правом всерьёз, против конкретного предложения за 7 000 000 баллов, которое офертой не было. Третья нога контура отвергает 16 сертификатов из 28 ИЗВЕСТНЫМ дефектом §181.1 (candidate_closure — узел на кандидата, а не на конфликтную группу): тот же класс открыт на ru/repka 8 из 26 и kz/zhirenshe 3 из 30, починка — errata оракула, а не правка акта. 44 сценария, differential 44/44 байтово, шесть рукописных тестов §267, разметка 76/0, охват текста 99,2 %, учёт разделов 19 из 19 при нуле неучтённых, §33.1 — EXECUTABLE 13, ANCHORED 3, SOURCE_ONLY 3 (три рубрики без собственного текста), UNEXPLAINED 0, doctor.py без пробелов.
  • Мнимое посредничество: конституционный контроль, не изменивший ни одного исхода (30.08.2026). Заведён corpus/laws/kz/sham-intermediary (kz.corpus.shamintermediary) — три инструмента и четыре закреплённых публикации: пункт 20 НП ВС от 27.11.2015 № 8 «О практике рассмотрения некоторых коррупционных преступлений» в ДВУХ редакциях (до и после поправки), проверившее его НП КС от 16.11.2023 № 35-НП и поправка НП ВС от 29.11.2024 № 6, эту проверку исполнившая. Первый пакет корпуса, где предмет конституционного контроля — не закон, а разъяснение высшего судебного органа: акт действующего права (ст. 4 Конституции), которому запрещено ограничивать права, потому что ограничения устанавливаются только законами (п. 1 ст. 39). Пара SHAM-11/12 переворачивает ответ одним фактом дела. Механизм противоположен peaceful-assembly и это ИЗМЕРЕНО. Там постановление признало норму конституционной В ИСТОЛКОВАНИИ и переменило исход в день вступления в силу; здесь пункт 1 признал её конституционной БЕЗ ОГОВОРОК, а пункт 2 лишь РЕКОМЕНДОВАЛ поправку — снимок исходов по обе стороны от 16.11.2023 совпадает целиком (SHAM-06/07), а расходится на дате 29.11.2024 (SHAM-08/09), когда Верховный Суд сузил антецедент. Пять объявлений мертвы по построению и названы в dead-symbols.json с причинами: правило вида «рекомендация → поправка» было бы ложью об устройстве права. Редакция до поправки взята снимком Архива Интернета (приём qantar-2022); расходящиеся отношения разведены структурно (inducement_2020 против inducement_2024), общими оставлены те, о которых редакции соглашаются. 14 сценариев, differential 31/31 байтово, Lean-ядро приняло 31/31 сертификат (зонд третьей ноги по одному акту), мёртвых правил 0 из 25, разметка 45/0, §33.1 — EXECUTABLE 2 из 2 в объявленном охвате, doctor.py без пробелов. Четвёртая находка, самая дорогая: приоритет, которому нечего разрешать, молчалив. Дефитер статьи 4 УК стоял против вывода самого Конституционного Суда, где конфликт невозможен по построению (полноту признаков Суд сделал условием своей нормы) — исход оставался верным, и ни одни ворота не краснели. Показал профиль §274: ноль атак при живом объявленном приоритете. Перенацелен на вывод РАЗЪЯСНЕНИЯ, где конфликт настоящий; поражаемое правило стало defeasible (LDC-E4105), а посылками дефитера — посылки побеждаемого правила (LDC-E4102 на цикл через отрицаемый предикат). Сценарий KZ-SHAM-NP35-05A проверяет теперь саму АТАКУ, а не только исход. Пятая: priority без @source переживает своё правило — на дате, где побеждаемое правило снято вместе с редакцией, приоритет остаётся повисшей ссылкой (§116); назвал только impact-editions. Якорь обязан быть ровно один: проекция оставляет узел при любом применимом якоре. Три отказа, найденные исполнением: локатор единицы у конвенции пункта остаётся article/ (написанный по смыслу point/20 даёт «статьи не учтены» при живых нормах); мера §33.1 ищет «свою» карту статей по имени каталога и при четырёх документах молча берёт алфавитно первую — каталог действующей редакции переименован в sources/sham-intermediary/; текст фрагмента не может кончаться кавычкой (заголовок страницы портала склеивался с закрывающим """ и давал LDC-E0102 на следующей строке) — генератор теперь отказывает сам, называя фрагмент и правило.

Изменено

  • Постановление о переносе дней отдыха: замена заместителя настоящим актом и ТРЕТЬЯ живая пара делегационных ворот (30.08.2026). corpus/laws/kz/rest-day-transfer-2026 (учебный заместитель, ABSTRACT_ONLY, выдуманный номер REST-DAYS-2026) заменён на corpus/laws/kz/rest-day-transfer-2023 — постановление Правительства РК от 25.04.2023 № 326 «О переносе дня отдыха в 2023 году» (adilet P2300000326) с побайтово закреплённой публикацией (PINNED_UNOFFICIAL_COPY, преамбула и оба пункта фрагментами §194, извлечение воспроизводимо двумя прогонами extract_source_text.py на одном html). Замена, а не закрепление того же: постановления о переносе дней отдыха на 2026 год не существует. Проверено по adilet двумя независимыми способами — перечислением ВСЕХ актов Министерства труда за 2025 и 2026 годы через фасет издателя (168 документов, ни одного о переносе; фасет валидирован тем, что за 2024 год находит приказ № 436) и полнотекстовым поиском по операционным формулам серии. Серия жива, но сменила издателя: постановления Правительства шли с 1996 по 2023, с 2024 это приказы Министра труда — поправка к ТК от 19.04.2023 № 223-VII отдала перенос выходных «уполномоченному органу по труду» (п. 3 ст. 85). № 326 — последнее постановление серии, и потому единственный настоящий акт, на котором звено «закон → постановление Правительства» проверяемо вообще. Заместитель к тому же приписывал постановлению чужое правило: его два факта (21–22.03.2026 → 24–25.03) есть действие абз. 3 ст. 5 Закона 267-II («при совпадении выходного и праздничного дней выходным днем является следующий после праздничного рабочий день»), а настоящая серия занята переносами-мостиками. Факты переехали в kz.corpus.holidays под свой абзац с записанной подстановкой 2026 года; official_calendar_2026 берёт их оттуда и больше не принимает второй пакет. Ни одна дата календаря не двинулась — изменился не результат, а его обоснование: провенанс каждого override ведёт к holidays#LAW_267_ART5, CIV-04 из цепочки трёх актов стала цепочкой двух, контракт MCP пиннит один акт вместо двух. Третья живая пара check_delegation.py: № 326 против власти §127 п. 1 ст. 10 Конституционного закона «О Правительстве» — 81/81 (было 71/71), из них 7 новых проверок и 3 сценария differential кодов. Пара закрывает две дыры разом: СТУПЕНЬ (обе прежние пары одноступенчаты — приказ органа против власти закона) и первый живой случай holder-переменной (LDC-W5301 до неё подтверждался только синтетической фикстурой). Диагностик две, обе предупреждения и обе верны: W5303 (закреплена редакция закона с 01.07.2026, постановление издано 25.04.2023) и W5301. Границы объявлены в самом пакете: преамбула № 326 называет основанием п. 3 ст. 85 ТК РК, которого в корпусе нет, поэтому в basis объявлена ФОРМА акта (п. 1 ст. 10) — записанное суждение, а не цитата; издатель — глобальный URN §27.1 (urn:kz:gov:government), а не имя из пакета родителя, потому что holder — переменная и компромисс health-procurement не нужен. Собственный прогон акта — семейство rest_day_transfer (RDT-01 утверждённый перенос, RDT-02 обратное направление обязано быть NEITHER, а не FALSE_ONLY); differential 2/2 байтово. Реестры: LOWERED_ACTS, PACKAGES/FAMILIES нового модуля corpus/kz/acts/rest_day_transfer.py, scenario-ratchet (+2), scenario-manifest, label-ratchet, metadata-ratchet, dead-symbols (новый holidays#rest_day_transfer — в documented с причиной, почему нормы у него быть не может), образец рабочего стола, индекс реестра. doctor.py — «пробелов нет».

  • DECISION-0060: раскладка corpus/ — корень по роду, tools/ по назначению. Условие DECISION-0059 («перенос corpus/ — вторым этапом в полное тихое окно») выполнено: symlink-и сняты, git status --porcelain corpus/ пуст. 155 чистых git mv: lib/ (ratchet.py, clir_lock.py — импортируемые, без __main__), ratchets/ (5 порогов и состав), slices/ (5 порождаемых срезов), tools/{sources/fetch,sources/sync,checks,gen,lib} вместо 139 файлов в одном каталоге; два прозаических отчёта уехали в свои пакеты. В корне осталась публичная поверхность — 6 раннеров, gen_kz_clir.py, emit_lawtests.py. laws/ не тронут. Ссылки — отдельным коммитом: климбы parents[N] в 132 файлах пересчитаны по фактической глубине пути, а не сдвигом на константу (глубина разная: +1, +2, +3); 6 разъехавшихся импортов соседа по каталогу; 342 путевых литерала в 107 файлах по карте из самих переименований git. Плоскими намеренно остались clir/ (три *.calendar.json входят в resourceUri узла CLIR — перенос меняет байты §208) и tests/ (недомигрированный остаток конвенции «тесты в пакете»); разбор обоих — в решении.

  • law.verb.kk@0.2.3: три фразы казахского пака говорили по-русски; заведена ступень 5 ворот — «текст на объявленном языке». assertion.head («Факт: {atom}.»), doc.anchor («Анкер: {anchors}») и doc.node_id («Идентификатор: {id}») совпадали с law.verb.ru@0.6.2 байт в байт и несли русские СЛОВА в документе, который подписывает казахоязычный юрист. Класс — ровно тот, что DECISION-0032 §3 закрыл для gapWhat (18 русских литералов в вызовах ctx.gap): язык рендерера протекает в текст. Остальные четырнадцать совпадающих строк законны — структурные шаблоны без букв («({left} {op} {right})», «{predicate} ({args})»). Стало: «Анықталған факт», «Дереккөз бекітпесі», «Сәйкестендіргіш». Тотальность §3.3 этого не видит по построению — она считает маркеры LDC-E8201, а чужой язык маркера не даёт: документ остаётся связным, подписываемым и неверным. Поэтому вместе с паком заведена ступень 5 check_verbalization_totality.py: значение, совпадающее у паков РАЗНЫХ языков и несущее буквы вне слотов, объявляется утечкой; исключения — реестр SHARED_LITERALS с обязательной причиной, проверяемый в обе стороны (сегодня в нём один Jurisdiction → «юрисдикция»: интернационализм, чью казахскую природу доказывает собственная форма барыс септіка «юрисдикцияға» в stdTypeForms). Проба алфавитом отвергнута замером: «обязана быть литера из әғқңөұүһі» даёт на ВЕРНОМ паке около двадцати ложных срабатываний («саны», «кем емес», «шама»), проба совпадением на том же паке — ровно три утечки и один законный интернационализм. Граница объявлена: ловится КОПИЯ, а не чужой язык вообще. Подъём — новый файл (packs/verb/README.md): одна строка law.verb.kk@0.2.2 не должна означать два текста, иначе stale_verbalization §3.6 перестаёт срабатывать. Четыре пина консьюмеров переведены (ворота, VERB_PACK_PATH_KK, verb-packs.ts вместе с подписью, _kk2 в selftest-е), бандл оракула пересобран (87 файлов), замер после — 113 документов, 54 946 подписываемых блоков, пробелов 0 у всех девяти консьюмеров, пять канареек красные.

  • Векторы VER-KK-* переехали поимённо — и показали, что правило миграции работает на длинной дистанции. Все три стояли на 0.1.0 четыре подъёма подряд, и это было ВЕРНО, а не запущено: 0.2.0/0.2.2 только ДОБАВЛЯЛИ фразы, 0.2.1 правил текст §186, которого эти голдены не рендерят, — их байты под 0.1.0 и под 0.2.2 различались одной строкой (версией в шапке; замерено). 0.2.3 — первый подъём казахского пака, меняющий их байты: doc.node_id печатается в КАЖДОМ блоке. Переехали VER-KK-L0-CALC и VER-KK-L1-DEFAULTS; VER-KK-GAP-FUNCTION остался на 0.1.0 по правилу, которое держит и VER-RU-GAP-*, — он закрепляет отказ пака от function_decl, закрытый в 0.2.0, и перевод на текущий пак стёр бы закреплённый отказ, а не обновил голден (инвариант 3). Долг объявлен: assertion.head и doc.anchor не встречаются ни в одном из трёх казахских голденов (у их CLIR нет ни assertion, ни @source-анкеров), то есть две фразы из трёх сегодня держит только ступень 5, а не conformance.

  • DECISION-0059 этап 2 закрыт: совместимые symlink-и сняты, раскладка под воротами. Миграция путевых литералов завершена (репо-широкий свип + дочистка), эхо-пути 24 CLI-голденов §208 переморожены на verify/vectors/… синхронно с аргументами трёх гейтов (корректность доказана сверкой с живым lawc), все 18 symlink-ов удалены из корня. Новые ворота verify/ci/gates/repo/check_root_layout.py (шаг 46/46, с канарейкой): старое имя, воскресшее в корне, — громкий отказ с именем виновника. Первый пойманный отказ этого класса — сам check_gate_wiring: его git ls-files -- ci после снятия symlink-а молча обнулился и ворота отчитались «0 проверок, OK»; pathspec исправлен на verify/ci. Откачены ложные срабатывания свипа внутри неизменяемых контекстов (release/0.1-kz-audit/examples, spec/conformance).

  • Корень репозитория иерархизирован (DECISION-0059, 29.08.2026). 18 каталогов сгруппированы: engines/{lawref,lawc,checker} — три ноги контура, verify/{vectors,ci,conformance} — доказательство эквивалентности, packs/{verb,demo,examples} — данные-пакеты, apps/{constructor,mcp,site, registry,registry-app,landing,site-prototype,editors,pilot} — потребители. spec/, release/ и corpus/ остались в корне; corpus — намеренно (живая рабочая зона параллельных сессий: его перенос давал бы молчаливые отказы, тогда как перенос остального — громкие; local_path закрепления пакетно-относителен, байтовый контракт не тронут). На старых путях — временные совместимые symlink-и: старые команды работают, а запись пиров по старым абсолютным путям проходит сквозь них в новые места. Подняты на +1 все ROOT-вычисления от __file__ в перенесённых деревьях (resolve() разыменовывает symlink), include_str!-пути lawc до spec/ и release/, climb-пути shell-скриптов; workflows, .mcp.json и исполняемые пути скилла переведены на реальные пути. Пути-аргументы, эхом попадающие в конверты §208 (голдены), намеренно НЕ мигрированы — этап 2 с квалификацией, до него symlink-и не снимаются.

Добавлено

  • Протагор против Еватла (Авл Геллий, Noctes Atticae V.10) — первый пакет, предмет которого ПОРОК ДОВОДА, а не норма и не спор о факте (30.08.2026). corpus/laws/la/protagoras-euathlus, пакет la.gellius.protagoras_euathlus; 16 параграфов главы закреплены байтово из ревизии 269232 латинской Викитеки, обе меры §33.1 сходятся (EXECUTABLE 10 + INTERPRETED 1 + ANCHORED 5, SOURCE_ONLY 0). Глава называется «De argumentis quae Graece ἀντιστρέφοντα appellantur», и тяжба софиста с учеником приведена в ней ПРИМЕРОМ; пакет поэтому не решает дело, а показывает оборачиваемость машиной. Главное утверждение — один вопрос, четыре ответа по выбору прочтения §152: NEITHER у базы, TRUE_ONLY при одной captio Протагора, FALSE_ONLY при одной captio Еватла, BOTH при обеих; и таблица СИММЕТРИЧНА по обеим ветвям приговора, то есть «utrimque pariter valet» (V.10.3) стало измеримым. Соперники в двух ветвях при этом разные — сценарий сторожит пару поимённо. Профиль §274 на том же деле даёт чётный цикл: ровно две атаки, grounded оставляет обе позиции невыведенными, preferred — ровно два расширения. Лейбницевское разрешение (De casibus perplexis in jure, 1666) воспроизведено без единой добавленной нормы: второй иск после первого приговора даёт TRUE_ONLY у базы и остаётся TRUE_ONLY даже при обеих выбранных captiones — их посылка (приговор по рассматриваемому делу) ещё не существует. ТРИ НАХОДКИ, КАЖДАЯ ИЗМЕРЕНА, А НЕ ПРЕДПОЛОЖЕНА. (1) Строгое правило с негативной головой не исполняется (NON_EXECUTABLE_RULE), а СМЕШАННАЯ форма (строгий позитив + поражаемый негатив) даёт TRUE_ONLY молча, без единого issue: формализатор решил бы дело за судей сменой служебного слова. Обе captiones поэтому defeasible и без приоритета. (2) Асимметрия ответа в ветви «в пользу Еватла» оказалась артефактом СТРАТЫ — мутант с MercesExPacto defeasible вернул в той же клетке BOTH. Починена содержательно: договорное правило обязано читать победу в тяжбе, ПРЕДШЕСТВУЮЩЕЙ той, по которой требуют плату, — то есть довод Лейбница записан посылкой нормы, а не выбором фактов сценария. (3) Редакция без единого события lifecycle получает состояние not_yet на любую дату, и машина D1 §31 снимает ВСЕ 22 правила из 22 при зелёном check и без единой диагностики; обнаружено процессным слоем, который проецирует всегда. Тяжба записана автоматом §160 (5 стадий, 4 перехода, структурных дефектов нет): две ветви приговора — разные стадии, как их разводит «sive … sive» обеих речей, и потому гард перехода связывает оба аргумента судейского предиката — канал §47.3 виден сквозь переход (вердикт JUDGMENT). Первый иск оканчивается приговором в пользу ученика и ОДНОЙ попыткой без правового эффекта §164 (требование Протагора), второй проходит тот же автомат другой ветвью без единой находки. 10 сценариев регрессии в двух семействах, 31 evaluate-вызов байтово идентичен у обеих реализаций (включая четыре запроса вида argumentation), 31 сертификат оракула и 31 сертификат движка приняты ядром Lean, пять рукописных тестов §267, doctor.py — «пробелов нет». Сценарии процессного слоя вынесены в отдельное семейство: lawref.process зовёт оракула мимо шва corpus/kz/engine.py, и слейся они с делами — половина прогона молча вышла бы из-под байтового контракта.

  • Глава 8 «Определение итогов голосования» (ст. 43–46) в kz.corpus.elections — EXECUTABLE 17 → 21, сценариев 55 → 78 (30.08.2026). Пакет замкнул кампанию: подсчёт на участке, установление и опубликование итогов, регистрация избранных, удостоверения. Все четыре статьи главы стали исполнимыми. Первая ДЛИТЕЛЬНОСТЬ пакета — и она считается в МИНУТАХ. Ст. 43 п. 1: «Время подсчёта голосов … не должно превышать двенадцать часов с начала подсчёта». Измерено 30.08.2026: часовой терм отбрасывает дробную часть и даёт 12 и на 12 ч 00 мин, и на 12 ч 30 мин, и на 12 ч 1 с — подсчёт, шедший двенадцать часов с половиной, он объявил бы уложившимся в срок. Это класс erratы E-0058, увиденный на втором акте. Порог сравнивается в минутах, число двенадцать остаётся числом АКТА (шестьдесят — определение часа, а не юридическая величина); идиома взята из пакета Регламента (ЕС) 261/2004. Пара KZ-ELECT-56/KZ-ELECT-57 стоит на ОДНОЙ МИНУТЕ и часовым термом была бы неразличима — то есть проверка не декоративна. Две власти §127 с ОДНИМ эффектом. Ст. 44 п. 1-1 и п. 2-1 дают признать проведение выборов на участке недействительным: Центральной комиссии — на выборах Президента и Курултая, территориальной — на выборах маслихатов, акима и иных органов местного самоуправления. Пробой подтверждено, что две власти с общим эффектом сосуществуют: каждая материализует свой узел, конфликта §127 нет. Контрольное дело KZ-ELECT-70 показывает, что КРУГ ВЫБОРОВ — часть нормы: на президентских выборах у территориальной комиссии этой власти нет вовсе, и эффект не наступает даже при полном основании. valid_when берёт РОВНО ОДНО предложение — конъюнкция в нём есть ошибка разбора (LDC-E0201, измерено пробой), а не молчаливая потеря. Поэтому двусоставное основание («нарушения И представление нижестоящей комиссии») сведено в промежуточный выводимый предикат, и он же сделал основание адресуемым отдельно от власти. Прочтение записано, а не сделано молча: «повторный подсчёт должен быть произведён до официального опубликования итогов» (ст. 43 п. 9) — условие ДЕЙСТВИТЕЛЬНОСТИ, а не иммунитет. Иммунитет §128 защищает держателя и текст его называет (как «не допускается» в ст. 89 п. 6 подпункт 4); здесь защищаемого нет, и назвать его иммунитетом значило бы выдумать держателя. Пара KZ-ELECT-66/KZ-ELECT-67 сторожит это ПО КОДУ issue (POWER_INVALID_EXERCISE §127 против EFFECT_BLOCKED_BY_IMMUNITY §128): истинностное значение у обоих прочтений одинаковое, и по нему они неразличимы. Новые границы объявлены вслух: время суток не выражается ни на 18:00, ни на 20:00 начала подсчёта (ст. 43 п. 1) — извлечения часа из мгновения в замкнутом списке §58 нет; перечни учитываемых чисел (ст. 43 п. 4 и 4-1, ст. 44 п. 5) не заведены как символы без потребителя, но то, у чего исход ЕСТЬ, выведено (превышение извлечённых бюллетеней над выданными требует поимённой разбивки); ст. 46 п. 1 привязан к вступлению в должность — событию Конституции, а не этого акта. Обязанность §124.1 опубликовать заведена у ОБОИХ носителей, которых акт называет раздельно (Центральная комиссия — выборы Президента, территориальная — выборы маслихатов): позиция SATISFIED при опубликовании в срок и ACTIVE при опубликовании позже, потому что условием достижения стоит выводимая СВОЕВРЕМЕННОСТЬ, а не сам факт публикации — опубликование на одиннадцатый день обязанности не снимает. 25 новых сценариев, все парами; differential — 124 evaluate-вызова байтово идентичны (было 74), Lean-ядро приняло все 124. Второй сторож §130 без VIOLATED (KZ-ELECT-73, вскрытие урн) поставлен рядом с первым.

  • Конституционный закон «О выборах в Республике Казахстан» (2464) — kz.corpus.elections, 157 статей закреплённой редакции от 01.07.2026 (30.08.2026). Закрыта самая крупная бланкетная дыра корпуса: Конституция говорит о выборах отсылочно («в порядке и сроки, установленные конституционным законом» — ст. 41, 51, 54), конституционные пакеты president, kurultai и court выводят ценз кандидата и правило большинства, а сроков, взносов, барьера и допуска к распределению мандатов под ними не было вовсе. Обе меры §33.1 названы РАЗДЕЛЬНО и говорят разное: EXECUTABLE 17 статей (10, 20, 27, 32, 49, 53–56, 59, 65, 66, 85, 87–89, 97-1) при 157 фрагментах §194 на 157 статей и 98,5 % байтов публикации. То есть адресуем акт целиком, выводится из семнадцати статей; остальные 140 — не объявленные границы и не долг разметки, а честное «вне исполнимого среза». Закреплённый текст поправил три числа брифинга разведки. Барьер — ПЯТЬ процентов (ст. 97-1 п. 1 «пять и более», п. 2–3 «пятипроцентный барьер»), а не семь; избирательный взнос — в минимальных заработных платах (ст. 54 п. 2 — пятидесятикратный, ст. 88 п. 1 — пятнадцатикратный за каждое лицо списка), а не в МРП; квота тридцати процентов — по совокупности ТРЁХ категорий (женщины, молодёжь, лица с инвалидностью), а не одной. Акт САМ называет политику §86 — единственный такой случай в корпусе. Ст. 85 п. 3 договаривает оба поля, которых календарному шагу не хватает: «Моментом начала срока … является день введения в действие акта Президента» (start_count = same_day) и «срок истекает в последний день этого месяца» (month_end = last_day_of_month). Соседние акты берут то же из ГК РК (ст. 173, ст. 174 п. 3) как общий порядок; здесь умолчания не нужно, и KZ-ELECT-51 стоит ровно на этом: роспуск 31.12.2026 плюс два месяца даёт 28.02.2027. Пара §127 ↔ §128 из ОДНОГО подпункта. Ст. 89 п. 6 подпункт 4) даёт комиссии власть отменить регистрацию партийного списка и тут же, последним абзацем, запрещает пользоваться ею за два дня до голосования — иммунитет, а не отрицание условия власти. Пара KZ-ELECT-52/KZ-ELECT-53 различается ОДНИМ днём и сторожит по КОДУ issue: без приоритета §116 обе позиции несравнимы, ответ тот же NEITHER, и случаи различает только EFFECT_BLOCKED_BY_IMMUNITY против UNRESOLVED_NORMATIVE_CONFLICT. Мост в закон о бюджете несущий: кратность МЗП — норма этого акта, тенге приходят из kz.corpus.budget::minimum_wage, год берётся из дела. На год без закона о бюджете правило не срабатывает, вместо того чтобы посчитать по вчерашней величине; убери импорт — три сценария перестанут иметь ответ. Границы объявлены вслух, а не оставлены пробелом: счёт преодолевших барьер (ст. 97-1 п. 2) — барьер полноты §111, и единственность приходит протоколом комиссии, которой п. 1 подсчёт и поручает; «в равной мере представляющих» (ст. 56 п. 2) не раскрыто самим актом; часы («восемнадцать часов по местному времени») срезаны до дней; деление на избирательное частное с остатками не выведено. 55 сценариев семейства elections, все парами по обе стороны порога — кворум 5 из 7 против 4 из 7, срок комиссии от 29.02.2024 (28.02.2029, а не 01.03), агитация за два дня против агитации за один день, 51 из 100 против 50 из 100, пять процентов против четырёх, четыре полосы шкалы взноса на своих границах, список 130 при 100 мандатах против 131. Differential — 74 evaluate-вызова байтово идентичны; Lean-ядро приняло все сертификаты.

  • Конституционный закон «О судебной системе и статусе судей Республики Казахстан» (132-II) — kz.corpus.judicial_system, 77 статей закреплённой редакции от 01.07.2026 (29.08.2026). Пара к соседнему пакету о Конституционном Суде: вместе они закрывают судебную власть целиком. Закрыты ДВЕ бланкетные отсылки Конституции, о содержании которых она сама молчит: пункт 3 статьи 80 («требования, предъявляемые к судьям, определяются конституционным законом») и пункт 3 статьи 83 (судебные коллегии). Обе записаны в kz.constitution.court полномочиями §127 с предметом (DetermineJudgeRequirements, EstablishJudicialCollegia), а адресат объявляет их своим basis/regulates §27.1 — до этого обе отсылки вели в текст, которого в корпусе не было. Обе меры §33.1 сходятся: EXECUTABLE 65 из 77 статей, 2 адресуемы фактами-утверждениями о самом акте (5 и 58), 77 фрагментов §194 на 77 статей при 96,6 % байтов публикации. Десять статей объявлены границей в articles.json с проверяемой причиной: девять исключены изменяющими актами и нормативного текста не имеют, одна (36) — отсылка к Закону «О Высшем Судебном Совете», которого в корпусе нет. Три L3-механизма: полномочия §127 (образование судов Президентом, избрание судей Верховного Суда Курултаем, назначение судей местных судов, отмена возложения обязанностей), иммунитет §128 статьи 27 в паре §127/§128 и канал суждения §47.3 на оценочных основаниях дисциплинарной ответственности статьи 39. Дисциплинарное производство — автомат §159–§164 (10 стадий, 11 переходов, структурных дефектов нет) с возвратом дела на повторное рассмотрение по пункту 4 статьи 44-1. Таблица решений A3 — шкала компенсаций статьи 54 пункта 3 (law.decision/0.1, law.lock 0.2, канарейка E8704 проверена правкой sidecar без lock). Двенадцать сценариев регрессии, 45 evaluate-вызовов байтово идентичны у обеих реализаций, 45 proof-графов приняты ядром Lean (183 шага правил, safety §190 у всех 183), четыре рукописных теста §267. Подтверждён на новом акте известный класс (записан 28.08.2026 на Принципах Нюрнберга): канал суждения §47.3 не поднимается через ПОРАЖАЕМОЕ правило — одно и то же тело под strict даёт REQUIRES_JUDGMENT с типизированным запросом органу, под defeasible — COMPUTED/NEITHER и ни одного запроса, без единого issue. Здесь он встретился ровно там, ради чего §47.3 заведён: оценочные основания стоят в норме с изъятием. Обход — документированный мост: ступень, несущая канал, вынесена в отдельное строгое правило (вернее и по тексту — часть третья подпункта 1) говорит об УСТАНОВЛЕНИИ факта вышестоящей инстанцией), поражаемая ответственность стоит над ней, обе стороны границы закреплены сценарием. Делегационная цепочка на конституционном уровне НЕ замкнута и это названо: основание, предмет и издатель разрешаются, темпоральное звено отказывает LDC-E5305 — у пакета источников Конституции ДВА source_work (редакции 1995 и 2026), а v1-цепочка требует ровно один.

  • Конституционный закон «О Конституционном Суде Республики Казахстан» (153-VII) — kz.corpus.constitutional_court, 67 статей закреплённой редакции от 01.07.2026 (29.08.2026). Пакет закрывает БЛАНКЕТНУЮ ОТСЫЛКУ Конституции: ст. 72–75 пакета kz.constitution.court говорят «организация и деятельность Конституционного Суда устанавливаются конституционным законом», и до этого пакета отсылка вела в текст, которого в корпусе не было. Заведён ОТДЕЛЬНЫМ актом, а не подпакетом Конституции: мера §33.1 не спускается в подкаталог со своим law.toml, и восемь существующих подпакетов Конституции ровно поэтому не мерит ни одни ворота глубины. Обе меры §33.1 сходятся: EXECUTABLE 66 из 67 статей и 67 фрагментов §194 на 67 статей при 95,0 % байтов публикации. Единственная неисполнимая статья — ст. 40 «Государственная пошлина», у которой в закреплённой редакции остался один заголовок; она объявлена исключённой в articles.json с командой проверки. Заявленная ДО НАЧАЛА глубина (40–45 статей) оказалась заниженной: главы 3–4, объявлявшиеся «ничего не выводящими», несут иммунитет §128, обязанность органов внутренних дел, шкалу компенсаций и семь величин со сроками — проверено чтением текста. Три L3-механизма разом: полномочие §127 (итоговое решение создаёт правовой эффект — акт прекращает действие, срок подписания возобновляется), иммунитет §128 в двух местах (неприкосновенность судьи ст. 11 и необоримость решения повторным принятием акта ст. 62 п. 2, где пара §127/§128 записана целиком) и канал суждения §47.3 на усмотрении ст. 45: «непосредственно затрагивает права» и «признаки нарушения» решает Суд, и до его решения ответ — REQUIRES_JUDGMENT с типизированным запросом, а не «нет». Конституционное производство глав 8–10 записано автоматом §159–§164 (10 стадий, 12 переходов, структурных дефектов нет) с журналом дела, где §164 предъявлен парой шагов: одно и то же действие даёт ATTEMPT_WITHOUT_EFFECT и эффект, различает их гард. Шкала компенсаций ст. 15 п. 3 — таблица решений A3 (law.decision/0.1, law.lock 0.2; канарейка E8704 проверена правкой sidecar без обновления lock). Проверено: 8 сценариев регрессии, 19 evaluate-вызовов байтово идентичны у обеих реализаций, 19 proof-графов приняты ядром Lean, 3 рукописных теста §267, doctor — «пробелов нет».

  • Разведение склеенных заголовков в extract_source_text.py (29.08.2026). Adilet положил «Глава 6. ОБЩИЕ УСЛОВИЯ … Статья 29. …» в один <h3>, и статья 29 исчезала разом из нарезки фрагментов и из учёта §33.1 при зелёном lawc check. Извлечение разводит такую склейку само и ГРОМКО (разведённые печатаются), и только когда конвенция документа этого требует: у этого акта 66 из 67 заголовков открывают свой блок, склеен ровно один. Аддитивность ИЗМЕРЕНА: все 28 закреплённых документов корпуса, воспроизводимых из хранимого HTML, дают те же байты.

  • doctor видит экземпляр шаблона pinning вторым родом генератора (29.08.2026). До правки пакет на шаблоне объявлялся пробелом «в пакете есть GENERATED-блок, но генератора нет», а совет («завести sync_<акт>_fragments.py») уводил бы его С шаблона обратно на рукописный скрипт — против DECISION-0060. Блок такого пакета пересобирается и сверяется шагом lawgen.py pinning --all --check в конвейере; канарейка на различающую силу добавлена в самотест.

  • Конституционный закон «О Правительстве Республики Казахстан» (2688) — kz.corpus.government, 29 статей закреплённой редакции от 01.07.2026 (29.08.2026). Пакет заведён РАЗДЕЛЕНИЕМ ТРУДА с kz.constitution.government, а не копией: конституционный пакет уже выводит статус, подотчётность, перечень ст. 65, несовместимости и два десятидневных срока, поэтому здесь стоит механика, которой в Конституции нет вовсе — большинство и две трети ОТ ОБЩЕГО ЧИСЛА членов (ст. 10 п. 2), кворум заседания (ст. 18 п. 4), периодичность (ст. 18 п. 1), формы актов и их отмена, звено делегации к министерствам и ведомствам. Повторяющие Конституцию статьи 8 и 9 заведены ЯКОРЯМИ, и перечень компетенции ст. 9 — закрытием §70, а не восемнадцатью strict-правилами: из закрытия выводится ст. 22 п. 2-1 (самостоятельность министерства вне компетенции Правительства), чего ни один набор правил-перечислителей не дал бы. Мера §33.1: EXECUTABLE 22, ANCHORED 2, EXCLUDED 5 из 29; регрессия 8/8, differential 24 вызова байтово, разметка §218 полная, мёртвых правил и мёртвых символов ноль. Самая интересная норма — временное постановление, имеющее силу закона (ст. 10 п. 1–2): полномочие §127 возникает из внесения законопроектов, а порог в две трети стоит в valid_when, поэтому недостача голосов даёт POWER_INVALID_EXERCISE, а не молчание.

  • DECISION-0062, фазы Ф0–Ф3: инверсия реестров корпуса — обязанность по свёртке, исключение строкой (29.08.2026). Защита реестров была несимметрична: выпавшая строка — громкий отказ, невписанная — молчаливый ноль. Два новых ворот делают молчание невозможным по построению: check_corpus_enrollment.py (шаг 32/46) перечисляет corpus/laws/**/law.toml и corpus/kz/acts/*.py С ДИСКА и требует, чтобы каждый улежавшийся пакет был лоуверен либо исключён с причиной, каждая run_*-функция — вписана в таблицы раннеров, а ключ реестра без предмета был отказом (неулежавшееся дерево — NOTE, механика settled_acts); check_sync_wiring.py (шаг 3/46) вменяет каждому sync_*_fragments.py обязанность --check + строку в конвейере (SYNC_OUT — 15 генераторов без режима сверки, список точный: отрастил --check — обязан впаяться). Найденный при заведении долг погашен, а не перенесён в baseline: сняты мёртвые записи CLIR_PACKAGES (labor_calendar, incoterms_group_c), два ключа PACKAGE_TITLES переехали на пост-миграционные имена (eng-locke-second-treatise, su-molotov-ribbentrop), четыре генератора с --check впаяны в шаг 6 — трое были КРАСНЫ (шапки .law несли пути до DECISION-0059; фрагменты перегенерированы, CLIR байтово цел). Храповики затягиваются сами: tighten_ratchet в corpus/lib/ratchet.py поднимает пол scenario-ratchet.json на полном прогоне (floor := max, новые семейства вписываются, понижение не пишется никогда, на неулежавшемся дереве — пропуск строкой; подключены все четыре раннера), check_label_coverage.py --register вписывает/затягивает один пакет по образцу ворот глубины (новый — только с нулём неразмеченного, ослабление — отказ), --write ворот глубины отказывает при грязных corpus/laws или corpus/clir (полная перезапись фиксировала чужой mid-edit). Канарейки — 6 мутаций у enrollment, 3 у sync-wiring, каждая роняет свою сверку. Тем же днём — Ф4-переходная и Ф5. Таблица ACT_RUNNERS заменена агрегацией деклараций FAMILIES из модулей corpus/kz/acts/*.py (registry.py 786 → 365 строк): семейство объявляется рядом со своим раннером, новый акт центральных таблиц не правит; 95 семейств перенесены вместе с построчными комментариями, сверка «агрегат == литерал HEAD» — точное совпадение по семействам, функциям и порядку пакетов. Свои пары «имя → CLIR» модуль объявляет в PACKAGES; CLIR_PACKAGES (общие) и ANCHOR_RUNNERS (уровень дела) остались литералами. Громкость удаления переехала из import-а в ворота полноты: семейство храповика без декларации и двойная декларация — отказ (канарейка — 9 мутаций); AST-читатели (doctor, ворота полноты) переведены на декларации, живые импорты не тронуты. Ф4-переходная: выводимость имени CLIR из пути — на каждой записи LOWERED_ACTS; снятие литерала — после зелёного периода. Проверено: частичная регрессия, check_kz_differential --only (байтово), check_scenario_manifest, test_doctor, check_evaluate_seam. Вечером — Ф7 и Ф6 (MCP-трек). Обзор law_packages РАВНОМЕРЕН: каждый акт — заголовок, строка метадаты и одна счётчик-строка с адресом детали; пороги 10/6/12 и CATALOG_BUDGET 79 600 сняты вместе со свёрточной механикой (ватерлиния была функцией СОСТАВА корпуса: новый акт сворачивал чужие блоки и ронял пины контракта у нетронутых пакетов при запасе 430 Б; теперь 70,8 КБ при 120 актах, добавление акта не меняет чужих строк). Шесть пинов развёрнутости контракта переехали в деталь/query; проба свёрнутых констант — заголовком перечня, не значением (первым свёрнутым стал de-surrender-1945 с константой «DE», совпавшей подстрокой в «DECISION-0062»). Титул акта — композитный (core.package_title): название/юрисдикция/статус из [metadata] манифеста (соединение по имени акта, выводимому из пути — опора на Ф4), EXECUTABLE N — рендером из базы глубины §33.1; девять консьюмеров переведены, 2,6-КБ эссе перестали уезжать в каждый ответ law_ask и остались аннотацией детали каталога и фолбэком (без источника титула — один порождённый пакет против тринадцати «без титула»). Попутно закрыт пробел: calc-путь law_ask молча ронял документированный аргумент package (факты и агрегаты over); подсказка теперь мягкая, как у фактов, — рост корпуса (family_member во втором пакете) как раз сделал это видимым. Бандл рабочего стола пересобран, check_engine_bundle зелен; контракт MCP — 182 проверки OK.

  • Сайд-канал спанов вербализации: тултипы витрины адресуются структурой рендерера, а не регулярками (29.08.2026). verbalize() теперь отдаёт в каждом блоке spans — офсеты (в кодовых точках) переменных, имён параметров, меток отношений и перекрёстных ссылок с типизированными нагрузками: рендерер знает, куда поставил каждый слот, и говорит это сам. Маркеры снимаются до хэширования — подписанный текст и contentHash байтово не зависят от канала ни при каком паке (замер по всем документам корпуса под семью паками до/после); офсеты запинованы голденами VER-RU-L0-PARAM-ALIAS / VER-KK-L0-PARAM-ALIAS, сверку ведёт run_vectors.py. Первый потребитель — витрина: build_readme.py пишет .spans.json рядом с каждым изложением, страница apps/registry-app оборачивает фрагменты в спаны до markdown-рендера (с проверкой каждого фрагмента и молчаливым пропуском при рассинхроне) — «Л» получает тултип «Л — Лицо, переменная v0», непереведённое имя параметра называется именем источника, наведение подсвечивает все вхождения переменной в пределах блока (v0 соседнего правила — другая переменная, области не склеиваются).

  • law.verb.ru@0.7.0 / law.verb.kk@0.3.0: словарь имён параметров и краткие обозначения переменных — вербализация перестаёт мешать языки (29.08.2026). Скобка аргументов читалась протоколом на двух языках разом: «(person: Пользователь v0, day: дата v1)» — имена параметров ехали в текст идентификаторами автора пакета (меток §218 у ParameterDecl нет), а переменные — компиляторскими vN с повторением типа при каждом вхождении. Оба пробела закрыты ДАННЫМИ пака, не семантикой рендерера: словарь paramNames (38 общих имён по частотному замеру корпуса: person → «лицо» / «тұлға»; имя вне словаря честно остаётся идентификатором) и флаг variableAliases — биндер вводит инициал метки типа и называет канонический id ровно один раз («Для Лица Л (v0); даты Д (v1)»), дальше вхождения не повторяют тип («лицо: Л»); занятость инициала даёт нумерацию («Л2»), связь с блоками norm_template, говорящими каноническими vN, держится скобкой биндера. Рендерер под младшими паками байтов не меняет — замер по всем 119 документам corpus/clir под пятью старыми паками до и после правки. Закреплено голденами VER-RU-L0-PARAM-ALIAS / VER-KK-L0-PARAM-ALIAS (в т.ч. деградация имени вне словаря — «basis» — рядом с переведёнными). Переведены все восемь подвижных пинов консьюмеров (ворота ×2, MCP ×2, витрина, CLI оракула, argmap, рабочий стол ×2 + пересборка бандла); паспорт Конституции (0.4.0) и пилот (0.1.1) отстают законно, по записанным причинам. Ступень 5 ворот расширена на раздел paramNames; семь совпадающих заимствований («орган», «акт», «лицензия», «депутат», «президент», «субъект») вписаны в SHARED_LITERALS с опорой на узус kk-редакций. Попутно сняты два молчаливых отказа ворот, вскрытых прогоном: реестр CONSUMERS импортировал паспорт Конституции по домиграционному пути (corpus/tools вместо corpus/tools/gen, DECISION-0060), а кодоген протокола рабочего стола считал корень четырьмя .. вместо пяти (DECISION-0059 перенёс constructor в apps/) и падал «нет каталога схем» на каждом прогоне ворот 29/45 — с регенерацией одного дрейфанувшего типа (package-manifest.ts) и галереи шаблонов.

  • Тарханный ярлык Сахиб-Гирея (1523): первый пакет группы kazan — и измеренное сужение иммунитета за 125 лет жанра (пакет kazan.corpus.sahib_girey_1523, 9 сценариев, 6 .lawtest, differential байтово 33/33). Единственный сохранившийся документ канцелярии Казанского ханства: подтвердительный тарханный ярлык семерым во главе с Шеих-Ахмедом. Та же пара «иммунитет §128 против полномочия взимать §127 под явным приоритетом §116», что у ярлыков Орды, но перечень одиннадцати изъятий закрыт БЕЗ residual-оговорки Тимур-Кутлуга — и тамга, названная адресной формулой самой грамоты («сборщикам тамги»), с тархана ВЗЫСКИВАЕТСЯ: SG-04 против GHY-01 на одном взимании. Санкция — эвфемизм без названного последствия («им самим будет хуже»), записана правилом; прежнее тарханство и челобитье — фактами-пересказом, не правилом: хан жалует словом, а не автоматом. Закрепление — новый для корпуса случай: у фотокопии публикации Мухамедьярова (1967) нет текстового слоя, байты ru.txt дал свой OCR с запиненными версиями tesseract/pymupdf; квирки распознавания ОБЪЯВЛЕНЫ (--audit роняет «тихую починку» буквы), нумерация 1—23 признана издательской разметкой физических строк свитка — единицы деления нет, акт честно unmeasured, мерой остаются байтовая доля (99,8 %) и сценарии. Дата — по источнику (13 сафара 929 г.х. = 2 января 1523), а не по ходячему «1 января / 919 г.х.»; подлинник объявлен редакцией UNAVAILABLE. Новая юрисдикция KazanKhanate вписана в словарь ворот.

  • Әмеңгерлік: свод расходящихся свидетельств об одном обычае (пакеты kz.corpus.amengerlik, kz.corpus.kalym_1920, he.torah.levirate; 21 сценарий, differential байтово 57/57). Казахский левират не кодифицирован — текста, который можно было бы назвать его редакцией, не существует, — и пакет не формализует «обычай», а строит СВОД СВИДЕТЕЛЬСТВ (приём mng/yasa). Свидетелей три, и байты пиннятся только у одного: энциклопедическая статья (ревизия 3319943 казахской Википедии, 5 строк); двух других свод читает ИМПОРТОМ — очерёдность призыва у kz-tuystyq (ст. 10), имущественные доли вдовы у kz-karamola (ст. 51). Ради этого в обоих заведена публичная поверхность (девять и пять объявлений; до того pub у них не было ни одного), и это не экономия: свод существует ради РАСХОЖДЕНИЯ, а расхождение доказуемо только когда обе стороны исполняются своим кодом — перепиши он доли к себе, сравнивал бы себя с собой. Расхождение выводится, а не примиряется: статья не даёт ушедшей вдове ничего, ереже 1885 года даёт восьмую часть скота при детях, и сценарий AMENG-05 требует ответа «свидетели расходятся», а не выбора одного из них; приоритет §116 здесь был бы дописанной коллизионной нормой, которой обычай не знает. Решение рода — канал суждения §47.3 с органом НЕ-судом (ру ақсақалдары), названным закреплённым текстом. Первый в корпусе межпакетный мост, переносящий СУЩНОСТЬ: до него все такие мосты были нульарными (kz-pd → kz-constitution-rights, leges-xii → de-legibus), а здесь одна переменная связывает предикаты двух чужих пакетов с РАЗНЫМИ типами лица и на исполнении унифицируется. Мир сценариев склеен из пяти документов — тоже впервые. Пара к нему по сравнительной оси — he.torah.levirate (Втор 25:5–10, KJV из того же Гутенберга #10, что и декалог; разбор книг и стихов ИМПОРТИРУЕТСЯ у fetch_decalogue_text.py, а не копируется): 6 стихов из 6 EXECUTABLE, обязанность деверя и запрет вдове двумя позициями §127 разом, фикция о первенце, цепь отказа с халицей. Один институт, две несовместимые деонтики: Тора ЗАПРЕЩАЕТ вдове уйти, адат назначает уходу ЦЕНУ, и incompatible_deontics это выводит. Сходятся они ровно в одном месте — оба числят ребёнка за умершим, — и оба выразили это ФИКЦИЕЙ. Третий пакет — kz.corpus.kalym_1920, декрет ЦИК и СНК Киргизской (Казахской) АССР от 28.12.1920 «Об отмене калыма» (закреплённая ревизия 4912418 Русской Викитеки; 5 пунктов из 5, глубина EXECUTABLE 4 + ANCHORED 1): первый советский акт корпуса на казахской территории и первый, отменяющий институт обычая, а не правящий его. Единственное число акта — двойной размер конфискации — считается головой правила §58; граница обратной силы ВЫЧИСЛЯЕТСЯ (та же уплата до и после 28.12.1920 даёт разные ответы); «не свыше одного года» записано ПОТОЛКОМ, а не сроком — органа, определяющего меру, декрет не называет, и канала суждения там поэтому нет. Әмеңгерлік он по имени не называет ни разу, и связь институтов утверждает свод под своим именем, а не подсовывает декрету. Три пробела свода объявлены и ВЫВОДЯТСЯ, а не умолчаны: ни один из трёх закреплённых свидетелей не сообщает, что первым призывается МЛАДШИЙ брат; об условиях, гасящих обязанность (старость вдовы, малолетство аменгера, беременность); о возврате калыма при уходе за пределы рода. Всё это знает литература, и формализовать это значило бы выдать пересказ за запись — то самое, ради чего свод и построен. Два молчаливых отказа найдены исполнением и записаны в местах, где стояли: definition §151 не имеет биндера, и экзистенциальная переменная в её теле даёт LDC-E1322 у lawc lower при ЧИСТОМ lawc check (ноль диагностик); pub §24 проверяется на понижении, а не на check — ссылка на невыставленный символ проходит check молча и падает LDC-E1105 у lower.

  • Пословицы как нормы: юридический пласт сборника Даля (пакет ru.dal.poslovitsy 0.2.0, 44 сценария + 18 рукописных и 44 порождённых теста §267, differential байтово 44/44). Первый пакет, где НОРМАМИ записаны сами пословицы — взгляд kz.corpus.qara-soz (Абай судит пословицы как нормы) доведён до исполнения. Закреплены четыре раздела второго издания (1879) по фиксированным ревизиям Викитеки (fetch_poslovitsy_texts.py, извлечение воспроизводимо, пометы самого Даля «(зак.)»/«(стар.)» сохранены в байтах); 33 фрагмента-строки. Механика по классам: «Без суда не казнят» — пара запрет/разрешение с приоритетом lex specialis, неосуждённому казнь FALSE_ONLY (право запрещает, а не молчит); «Не пойман — не вор» — презумпция конструкцией presumption, дефитер — строгий факт поимки; «Уговор дороже денег» / «деньги лучше уговора» — встречная пара, записанная САМИМ Далем в одну строку: честный BOTH при установленной неуплате, но не при одной неизвестности оплаты; «Повинную голову и меч не сечет» и «По дважды за одну вину не карают» — вырезы lex specialis из общей кары; «Холоп на боярина не послух» — Даль сам даёт провенанс («Прав.» Яросл.) — народная память Русской Правды рядом с её формализацией kz.corpus.russkaya-pravda; «Кто в деле, тот и в ответе» рядом с «Брат брату головой в уплату (стар.)» — третий ответ корпуса на «кто платит за чужой вред» после дикой виры и кругов туыстық, напряжение несут далевские пометы, а не выдуманный приоритет. В 0.2 добавлены надзор за судьёй, право быть выслушанным, суд по закону, третейское соглашение, пары иерархии доказательств, ошибка и условие сделки, прощение кары и верховная компетенция миловать. Пометы «(стар.)» и «в крестьянстве» стали условиями применимости, а исполнение обещания привязано к обещавшему: чужое исполнение его обязанность не закрывает. Молчание — тоже предмет: ответственность постороннего и дочь без братьев — NEITHER; peregovory мёртв намеренно («Переговор — не уговор») и записан в documented реестра мёртвых символов. Дескриптивная лирика разделов правилами не записана сознательно — выжать из неё норму значило бы выдумать то, чего в тексте нет.

  • «Бата и теріс бата»: перформатив, закрепляющий чужие акты, и проклятие-отлучение (пакет kz.corpus.bata, 42 сценария, differential байтово). Второй акт корпуса без памятника-текста после tuystyq и первый, чей предмет — УСЛОВИЕ ДЕЙСТВИТЕЛЬНОСТИ ЧУЖОГО АКТА. Бата закрепляет құдалық: power §127, у которого over — сама СДЕЛКА, а не лицо (форма проверена пробой; §127 условия «over — лицо» не ставит). Закрепление гасит презумпцию возможности отступить и открывает подсудность — «онсыз құдалық заңды болып саналмай, дау қаралмаған». Теріс бата поражает презумпцию принадлежности к жұрт составом из четырёх членов, выписанным одним предложением записи. Оба полномочия несут строгих ДВОЙНИКОВ: эффект §127.2 невидим поражаемому слою (DECISION-0021 §4.3), а поражаются здесь именно презумпции, и без двойников закрепление сделки не погасило бы возможность из неё выйти при полностью зелёном check. Источники — девять энциклопедических записей (jurisdiction "none", PINNED_UNOFFICIAL_COPY, закреплённые ревизии) против ТРЁХ обычаев (jurisdiction KZ, ABSTRACT_ONLY, условная шкала @1000-01-01 с in_force). 57 фрагментов порождаются sync_bata_fragments.py, из них 23 — вторым срезом тех же байтов с локаторами обычаев: без второго рода якорей проекция as-of §31 сняла бы каждое нормативное правило (цена измерена на Кощее). Срез мельче строки — по предложениям: семь записей из девяти суть один абзац на весь акт. Записи РАСХОДЯТСЯ, и расхождение выведено, а не сглажено. «Теріс бата» знает одного держателя — отца над своим ребёнком; «Бәддұға» говорит о старших вообще. Пакет их не примиряет: состав выводится только для круга, подкреплённого обеими записями, а для дяди остаётся NEITHER — и называет причину предикатом holder_outside_corroborated_circle. Развилка прочтений решает исход на одних и тех же фактах. Спорно слово «мұндай» в «Мұндай қарғыс алған адамдарды жұрт өз қатарына алмайды»: узкое прочтение относит отлучение к материнскому акту (соседство фраз), широкое — к обеим тяжким формам («Бұл — АТА-АНАСЫНЫҢ … жазасы»). Базой стало узкое, потому что interpretation §114 умеет только ДОБАВЛЯТЬ правила; широкое вынесено в BroadCurseScopeReading с двумя записями в interpretation-gated.json. Сцены OTL-05 и OTL-06 обязаны расходиться. Три ходячих следствия отлучения НЕ выводятся, и это проверено рабочим механизмом. Ни одна из девяти записей не связывает проклятие ни с наследственной долей, ни с кругом кун, ни с әмеңгерлік. Доля переживает проклятие (OTL-08), хотя ТА ЖЕ презумпция снимается полученным при жизни енші (ENS-06) — то есть отрицательный ответ получен работающей осью, а не её отсутствием. Ходячее «до бата сделку можно бросить без последствий» тоже опровергнуто самим источником: до бәтуа платят ат-тон айып (BAT-06). Отзыва нет, и это сказано, а не выведено из молчания. «Бұл жаза, қарғыс алынбайды» — единственное место девяти записей, где об отмене говорится вообще. Предиката прощения в пакете нет, у автомата QargysZholy (6 состояний, 5 переходов, ДВА терминала) нет обратных рёбер, и lawref loophole на цели «вернуться в жұрт» отвечает пусто за 400 вызовов — содержательный ответ, а не вырождение: нормы в проекции стоят, автомат на журнале bir-otbasy.json исполняется (§164 на попытке дяди и на попытке отлучения из отцовского терминала). 11 рукописных .lawtest; boundaries.py мера по статьям неприменима (энциклопедическая запись единицы деления не имеет) — в базе глубины пакета намеренно нет.

  • «Туыстық жүйе»: ст. 13 «Құдалықтың бұзылуы» — ветви срыва сговора и судьба қалың мал (пакет kz.corpus.tuystyq). Авторское изложение дописано (новая ст. 13, прежние «Границы» стали ст. 14; байты перезакреплены, фрагменты перегенерированы идемпотентно), процедура Qudalyq выросла до 4 состояний / 4 переходов — второй терминал SogovorBuzyldySaty и переход с каждой нетерминальной ступени. Четыре причины прекращения (отказ каждой из сторон, смерть каждой из сторон до проводов) — расщеплением §206; «до проводов» несёт САМ ФАКТ (uzatuga_deyin_qaytys_boldy), а не отрицание — not над незаявленным empirical в строгом теле давал бы NEITHER на каждом деле; судьба қалың мал — пара положительных квалификаций под гардом ступени sogovor_qalyn_mal: до передачи оба вывода честно NEITHER, о кит и жасау источник объявляет молчание сам. Сценарии TUYS-40…44 на отдельном мире; регрессия 44/44, KZ-differential 140 вызовов байтово; глубина §33.1 EXECUTABLE 11→12; полы разметки 100→109 / 93→105; журнал «Айман–Шолпан» пересчитан (96/105, девять уцелевающих правил). Попутно corpus/tools/checks/doctor.py переведён на rglob при поиске sync-генераторов: после DECISION-0060 нерекурсивный глоб видел ноль скриптов и объявлял «фрагменты рукописные» всем пакетам.

  • Печать Каина: §127 ↔ §128 целиком, и три способа сломать пару МОЛЧА — corpus/laws/he/mark-of-cain/, пакет he.torah.cain. Быт 4:8–24 и 9:5–6 (KJV, тот же Гутенберг #10, что Декалог и Суд Соломона; нарезка на стихи заимствована у закрепления Декалога, а не повторена). Фоновое полномочие кровной мести против иммунитета знамения — акт, целиком помещающийся в одну пару норм, и потому пригодный как испытательный стенд самой пары. Три вещи, которых в корпусе не было. (1) Иммунитет против НЕОГРАНИЧЕННОГО круга. «lest ANY finding him» — against связанной переменной по тому же конечному домену, что держатель полномочия; двое встречных в одном деле дают ДВЕ блокировки. Замерено, что поле не декоративно: движок сверяет against с holder-ом власти, и мутант, сузивший круг до самого держателя, блокировку теряет (CAIN-11). До этого against стоял у 2 иммунитетов корпуса из 82 и ни одним сценарием не проверялся. (2) §128 блокирует ПРЕВРАЩЕНИЕ, не деяние — видно на одном деле: убившему Каина blood_shed_by_man даёт NEITHER, а vengeance_owed(·, 7) — TRUE_ONLY. Санкция 4:15а сторожит физическое slew именно потому, что правовое последствие заблокировано; множитель считается в голове правила (SevenfoldMultiplier * OrdinaryVengeance), где единица шкалы — возмездие 9:6, иначе «семикратно» повисло бы без операнда. (3) Похвальба Ламеха — попытка без правового эффекта §164: POWER_INVALID_EXERCISE, позиция не возникает; контрдело показывает, что дело в полномочии, а не в имени. Множитель Ламеха — 77 («seventy and sevenfold» закреплённых байтов), НЕ 490: чтение «семьдесят раз всемеро» идёт от Мф 18:22 и в Быт 4:24 KJV отсутствует. Найдено заведением и закоммичено исполнением: иммунитет, посылка которого есть эффект ДРУГОГО полномочия, опаздывает на круг. Порядок круга — norm_lifecycle → materialize_effects → strict_closure: строгие правила эффект видят, а создание позиций идёт ДО материализации, и знамение приходит после того, как месть уже материализовалась. Отказ абсолютно молчалив — check/lower чисты, обе позиции ACTIVE, приоритет на месте, и НЕТ ни EFFECT_BLOCKED_BY_IMMUNITY, ни UNRESOLVED_NORMATIVE_CONFLICT. Обе реализации согласны БАЙТОВО, поэтому differential слеп по построению. Квалификация по инварианту 8: не дефект lawc и не дефект lawref — обе следуют одной модели круга; вопрос к §127 («evaluator проверяет отсутствие применимого immunity» — молчит о том, какого круга) вынесен как кандидат в errata, ядро 0.1 не тронуто. В акте применён записанный обход (строгое правило рядом с power, гард дословно повторяет valid_when), парность закреплена сценарием CAIN-10, а сам дефектный режим — мутантом CAIN-06. Тем же способом закоммичен второй молчаливый режим — иммунитет без priority §116 (CAIN-07, UNRESOLVED_NORMATIVE_CONFLICT). Приёмка: 11/11 регрессии, KZ-differential 16/16 байтово, третья нога (Lean) 16 сертификатов оракула + 16 движка, 84 листа, 38 шагов правил, safety §190 на 40 применениях; 4 авторских .lawtest §267 и 13 эмитированных; глубина §33.1 — Быт 4: EXECUTABLE 4 / ANCHORED 2 / SOURCE_ONLY 11 из 17 стихов (девять границ с причиной), Быт 9: EXECUTABLE 1 / ANCHORED 1 из 2. Проклятие 4:11–12 СОЗНАТЕЛЬНО оставлено видимым пробелом, а не объявлено границей: ворота закрепления отвергли бы 4:12 («shall not», «When»), но пропустили бы 4:11 — архаичное «art thou cursed» английский набор признаков не знает, и зелень по слепоте набора хуже честного пробела.

  • corpus/emit_lawtests.py: тождество программы сверяется по СОДЕРЖАНИЮ узлов, а не по множеству их идентификаторов. Прежняя проверка (node_ids(ir) != node_ids(clir)) отсеивала СОСТАВЛЕННЫЕ раннером программы (шире пакета) и была слепа к правке payload НА МЕСТЕ: сценарий, исполняющий мутанта с тем же составом узлов, проходил её и давал эмитированный тест, который спрашивает право у ЗАКОММИЧЕННОЙ программы, а ожидание несёт от МУТАНТА, — заведомо красный тест, порождённый молча. Найдено первым мутантом такого рода (CAIN-11): тест эмитировался и падал «truth_status == TRUE_ONLY: в документе NEITHER». Отпечаток берётся из contentHash §202, при его отсутствии — из канонических байтов узла (ветка «хэша нет» не схлопывается в None == None, чем и был отвергнут semanticHash). Замер на соседнем семействе: zheti_zhargy 79/79 без потерь. Заодно мутанты mark_of_cain.py приведены к дисциплине check_zheti_mutations.py — пересчёт contentHash правленых узлов и semanticHash документа плюс preflight по схеме: мутант со старым хэшем есть документ, противоречащий сам себе, и обе реализации исполняют его не поморщившись.

  • §168.2 + хвосты §168.1: оси политик в контексте дела и полный числовой литерал — эмиссия zheti_zhargy дошла до 79/79, ноль вне выразимого подмножества (DECISION-0058 П2/П3 + хвосты П1; T153…T156, LDC-E1325). Три работы одним заходом. (1) Оси политик: interpretation <Reading>; (повторяемо → отсортированный options.selectedInterpretations; существование прочтения проверяет исполнение — обе реализации уже отвечали issue, довод DECISION-0036 §4) и on_accepted_conflict halt; (единственное значение E-0001; опечатка — ошибка LDC-E1307, не молчаливо инертная политика). Блок options из черновика решения отменён измерением: пример §168 сам пишет interpretation в контексте, E-0001 называет контекст носителем, грамматика форму уже парсила — менялось только понижение; раннеры не тронуты вовсе. Приёмка — zh-100 «Жеті жарғы»: первый авторский тест, выбирающий прочтение на языке нормы (base NEITHER ↔ TRUE_ONLY под GeneralLivestockValuationReading), оба раннера зелёные. (2) Знак — часть числового литерала: парсер принимает -60, -26.0, -100.00 KZT, (-3 / 2) (знак в числителе, канон E-0005); операции -x над не-литералом в срезе по-прежнему нет — граница названа в §168.1. До правки отрицательных числовых литералов у поверхности не было ВООБЩЕ. (3) Обманка закрыта целиком: прочие вычислимые термы в ground-позициях (1 + 1, 1.0 / 8.0, вызов, if, агрегат) отвергаются LDC-E1325 — перепись корпуса и векторов дала ноль живых носителей (6332 const_ref + 1056 value), радиус пуст; Instant §19 печатается рендерером (понижение уже работало). Векторы T153 (evaluate + петля дела) / T154 (static) / T155 (evaluate: -3/2, -60, мгновение) / T156 (static: E1325 дважды); T153/T155 в SUPPORTED — differential 136/136; юнит-тесты lowering; Lezer-грамматика редактора приняла все новые формы без правки (1567 файлов). deadline_policy (П2а) отложен с измеренными блокерами: политика — словарь, DeadlinePolicy не разрешается компилятором (разрыв std-паритета §257), record-литерал в case-const не парсится; записано в решении.

  • Жиренше шешен: довод как единица права — corpus/laws/kz/zhirenshe/, пакет kz.corpus.zhirenshe. Третий слой линии казахского права: «Жеті жарғы» даёт нормы, «Қарамола ережесі» — решения, здесь предметом стал сам ДОВОД, потому что суд биев не имел ни кодекса под рукой, ни протокола. Источника-акта нет: предание бытовало устно, редакция ZHIRENSHE_ORAL объявлена UNAVAILABLE, закреплены байты четырёх записей о нём (казахская, русская и две кыргызские статьи вики — каждая отдельной source-работой), и записи расходятся о державе, веке и родстве Карашаш. Расхождение выводится правилами, а не описывается: обе стороны спора подкреплены (две записи против двух), внешней проверки нет, и оба факта — заключения (unresolved_by_corroboration, no_external_arbiter). Профиль §274 даёт ЧЕТЫРЕ класса ответа §274.6 и впервые на живом акте — last-link §274.4 через приоритет, процитированный из источника: на одном деле attested SKEPTICALLY_ACCEPTED, not attested REJECTED. Регрессия 10/10, differential 33/33 байтово, вербализация без пробелов; учёт статей §33.1 честно unmeasured (единицы деления у источника нет). Инструменты: corpus/tools/fetch_zhirenshe_texts.py (закреплённые ревизии вики, контракт среза по числу строк и дословным краям) и corpus/tools/sync_zhirenshe_fragments.py (18 фрагментов, локатор кодирует свидетеля и строку). Три сертификата отвергнуты доверенным ядром — известный класс §181.1, новой разновидности (головы противоположной полярности дают два candidate_closure с одним conflictKey); квалификация — дефект обеих реализаций, разбор в шапке 04-performance.law.

  • Сюжет о смерти Кощея (СУС 302) в пяти записях Афанасьева — corpus/laws/ru/koschei/, пакет ru.afanasyev.koschei. Первый акт корпуса, где предметом регулирования является само условие ПРЕКРАЩЕНИЯ субъекта: «бессмертие» есть презумпция, поражаемая составом «носитель назван — достигнут по цепи вместилищ — уничтожен». Первый ИСЧЕРПАЕМЫЙ иммунитет («первый раз тебя прощаю… а в третий берегись»), выраженный агрегатом по предшествующим погоням. Первый свидетель, который ЛЖЁТ и от лжи отрекается. Пять записей — № 156, 157, 158 «Кощей Бессмертный», № 159 «Марья Моревна», № 269 «Царевна-лягушка» — расходятся о цепи (4, 5, 6 и 7 звеньев) и сходятся о носителе 3:1; ходячей сводной цепи нет ни в одной. Добыча носителя выражена процессом §160 (9 стадий, 10 переходов, один дословный откат). Регрессия 32/32, differential 32/32 байтово, 32 сертификата приняты ядром Lean, 8 .lawtest. Инструменты: corpus/tools/fetch_koschei_texts.py (срез записей по разделам закреплённых ревизий Викитеки), corpus/tools/sync_koschei_fragments.py (29 фрагментов из закреплённых байтов, --check в воротах). Правопорядок Tridesyatoe вписан в JURISDICTIONS рядом с диегетическими Thebes и OkiyanMore.

Добавлено

  • «Айман–Шолпан» как ПАРА сценариев к двум памятникам одного правопорядка: молчание одного акта измерено речью другого (15 сценариев, ZH-AYMAN-01…06 + KAR-AYMAN-01…09). Лиро-эпическая поэма XIX века — сюжет про исполнение права: набег Котибара на аул Мамана с угоном скота и увозом просватанной Айман есть эксцесс барымты, степной самопомощи во исполнение притязания. Своего пакета у поэмы нет и не заводилось: она не нормативна, и её место — дело, задаваемое чужим сводам (приём Алдар-Косе, ZH-ALDAR-*). Барымты в «Жеті жарғы» нет ни словом — ни отношения, ни состава OffenceKind, ни признака открытости или заявленного основания; при этом свод САМ объявляет тонаушылық предметом своего ведения (regulated_here(Robbery) = TRUE_ONLY, ZH-AYMAN-01), и цена этого заявления — ноль выводов (ZH-AYMAN-02). Граница «правомерная барымта / кража» целиком в руках составителя дела: theft_of — kind empirical, её не выводит ни одно правило, и тот же угон, названный кражей, даёт полную меру (ZH-AYMAN-03). Самое дорогое из найденного — захват ЧЕЛОВЕКА свод разбирает как кражу вещи, и отказать ему нечем: identity §8 есть пара (nominal type, stable_id), тип приходит от СЛОТА, а не от строки, поэтому entity_ref("urn:zh:person:ayman") в слоте Asset contextually И ЕСТЬ имущество — за просватанную дочь Маману причитается двадцать семь голов возврата, как за шубу, при нуле issue (ZH-AYMAN-04/05). URN — проза, не право; провести границу «скот / люди» можно только НОРМОЙ, и её в своде нет. Та же фабула, заданная «Қарамола ережесі» (1885), получает ответ по каждой оси: ст. 41 знает барымту, но уже как запрещённую — угонщик назван «ұры», выше двадцати лошадей свой режим (потолок три тоғыз, пол в доброго коня, KAR-AYMAN-01/02), ниже отсылка к ст. 37, то есть кража; крупный угон кражей НЕ становится (KAR-AYMAN-03) — различие идёт по числу голов, а не по открытости или притязанию, и той самой границы, на которой держится поэма, акт не проводит. Ст. 31 разбирает случай Айман почти дословно («Біреу айттырылған жесірді алып қашса…»): 50 жыртыс, возврат отцом ранее полученного калыма, защита женщины от принуждения (KAR-AYMAN-04…06), причём признак просватанности несёт всю тяжесть — без него ни один платёж не выводится (KAR-AYMAN-07). Ст. 7 знает бітім условием действительности, а не пожеланием: примирение без засвидетельствования силы не имеет (KAR-AYMAN-08/09). Измерено: 177 evaluate-вызовов двух семейств байтово идентичны lawref ↔ liblaw_ffi, 15 новых .lawtest §267 зелены, полы храповика подняты (zheti_zhargy 73→79, karamola 89→98).

  • Процессный журнал «Айман–Шолпан» к процедуре Qudalyq — и найденный им разрыв: единственная процедура адата в корпусе процессным слоем НЕ ИСПОЛНЯЕТСЯ (corpus/laws/kz/tuystyq/journals/ayman-sholpan.json). Поэма устроена как ход дела по ступеням сговора ст. 11 абз. 6, и юридическое содержание набега выражается попыткой без правового эффекта §164: увозя просватанную, Котибар совершает ВНЕШНЕ то же, что ұзату, — невеста покидает аул отца, — а обычай различает их не по видимому действию, а по ступени, потому что переход Uzatu выходит только из QalynMalBerildi. Прогон на закоммиченном пакете красный, и краснота есть результат: проекция §31/D1 снимает с ЛЮБОЙ даты 88 правил из 93 — все заякоренные, — потому что редакция TUYSTYQ_RU не объявляет ни adopted, ни in_force; уцелевают ровно пять, которые компилятор породил из самой procedure и потому не заякорил. Что журнал при этом ВЕРЕН, доказано контрольной пробой (в дерево не коммитится): тому же журналу против того же CLIR с дописанным in_force процедура проходит как поэма — две попытки §164 на набеге и на условиях Айман, эффект на бітім и на ұзату, NekeZhasaldy достигнуто, находок ровно две. Регрессия этого не видела и не могла: сценарии TUYS-34…38 зовут evaluate напрямую, минуя проекцию.

  • lawref process-run: снятое проекцией называется вслух (NORMS_NOT_IN_PROJECTION, DECISION-0052 §8). Инструмент забирал у edition_projection только проекцию и выбрасывал второе возвращаемое значение — состояния редакций и список снятых узлов. Следствие было молчаливым и ровно того класса, против которого стоит весь слой: разбор блокеров §185 честно печатал «не закрыто: X», и это неизбежно читалось как пробел ДЕЛА, тогда как нормы, способной закрыть X, на дату кадра не существовало вовсе. Находка называет дату кадра, число снятых ПРАВИЛ из общего (фрагменты и symbol_decl не считаются — на вывод не влияют, в одном числе с правилами были бы шумом) и состояние каждой неприменимой редакции; кадры с одинаковой потерей сливаются в одну строку. Оркестрация, не семантика (инвариант 5): читается уже возвращаемое значение, ни одного нового вычисления. Проверяется ОБЕИМИ половинами канареечного принципа в check_time_axes: на дате, где проекция ничего не снимала, находки быть не должно. Сразу же дала результат на закоммиченных журналах: qantar-2022 различает кадры 05–11 января (4 снятых правила) и 19 января (13 — указы 725/726 closed, SOVBEZ_ED2022 not_yet); istanbul-draft-2022 теряет 136 правил из 149, то есть заявленная в его $comment причина неэффективности подписания (неустановленный treaty_signed_by_required_majority) — не операптивная; minsk-package-2015 не теряет ничего (контроль).

  • «Сказка о попе и о работнике его Балде» (Болдино, 1830) формализована — первый акт корпуса, чьи РЕДАКЦИИ расходятся в самом носителе обязанностей, и первый договор найма с неденежной отсроченной ценой (29.08.2026, пакет ru.pushkin.balda, corpus/laws/ru/balda-1830/). Три источника и три их рода: свидетель — сама сказка (байты по СС в 10 т., ГИХЛ 1959—1962, т. 3 на РВБ, 188 стихов, воспроизводимое извлечение corpus/tools/fetch_balda_text.py); ПРЕДМЕТ — сам устный договор найма, заключённый на базаре (ст. 13—24), у которого нет ни текста, ни правопорядка; свидетель ЗАМЕНЫ — примечания С. М. Бонди (закреплённая ревизия Викитеки). Правопорядка нет ни у одного из трёх (jurisdiction "none"), и в отличие от «Сказки о рыбаке и рыбке» здесь нет даже диегетического порядка: суда сюжет не знает вовсе, спор кончается самопомощью — поэтому орган канала суждения §47.3 назван условно, и это сказано словами, а не подразумевается. Редакции расходятся в НОСИТЕЛЕ обязанностей, и это заводится впервые: авторский текст (напечатан по рукописи лишь в 1882 году под ред. П. А. Ефремова) даёт нанимателем попа, подцензурная переработка В. А. Жуковского 1840 года — купца Кузьму Остолопа. Сословие поэтому вынесено в ДВА РАЗДЕЛЬНЫХ отношения, а не в одно общее: записанный шрам корпуса — общее отношение под двумя edition-специфичными правилами молча доставляет факт одной редакции в правило другой. Ось проверена ИСПОЛНЕНИЕМ, а не заявлена: проекция §31 на 1850 год оставляет ТОЛЬКО купца (BALDA-20/21/22 — договора с попом на эту дату НЕТ, а срок расплаты купца течёт), на 1900-й поп возвращается (BALDA-23). Байтов редакции 1840 года у корпуса НЕТ, и это названо: машиночитаемой копии «Сына Отечества» на устойчивом адресе нет, воспроизведения в сети издания-источника не называют вовсе, поэтому редакция объявлена UNAVAILABLE, её единственный фрагмент несёт только locator и label без строки text (приём «Қасқа жолы»), а дословная формула замены цитируется из закреплённых байтов примечаний. Цена неденежная и отсроченная: год службы поваром, конюхом и плотником за три щелчка по лбу — Quantity с единицей shchelchok, не Money; срок — шаг календарного семейства add_calendar_period, и политика §86 (start_count = same_day) записана как ВЫБОР, которого в сказке нет. Предмет найма закрыт §70 тремя ремёслами, поэтому «сбор оброка с чертей в предмет не входит» — вывод FALSE_ONLY, а не молчание (BALDA-08); из него выводятся выход за предмет и свобода работника не исполнять §125. Добросовестность поручения решает НЕ АКТ: оценочная гарда отдана каналу суждения §47.3 с типизированным BadFaithPetition (BALDA-11), и показание попадьи о намерении («И Балду-то без расплаты отправишь», ст. 52) канал НЕ закрывает — ответ остаётся REQUIRES_JUDGMENT (BALDA-12); bad_faith_purpose_alleged объявлен и не читается ни одним правилом — вписан в corpus/dead-symbols.json С ЭТОЙ причиной, а не связан мостом. Фикция наступления срока названа единственным местом пакета, где норма ПОСТРОЕНА, а не прочитана: сказка излагает теорию уклонения устами попадьи и ОПРОВЕРГАЕТ её исходом, но случая неисполненного поручения не испытывает вовсе (Балда исполнил); общая доктрина п. 3 ст. 157 ГК РФ НЕ ввозится — это норма другого акта. Форма — fiction … strict, потому что обе дороги к payment_term_reached обязаны остаться строгими: презумпция на общем предикате пометила бы LATE_STATUS_PRODUCER’ом всё отношение и сломала бы strict-читателей. Расчёт — автомат §160 из четырёх состояний: третий щелчок до первых двух есть попытка без правового эффекта §164 (журнал journals/third-flick-first.json, вердикт FINDINGS, обязанность платить остаётся ACTIVE), три по счёту дают CLEAN и SATISFIED. Измерено: 13 фрагментов авторской редакции, байтовое покрытие 62,7 %; мера глубины по статьям НЕПРИМЕНИМА и говорит это словами (деления на статьи у сказки нет, записи в базе глубины нет — как у «Рыбки» и «Репки»); 30 правил и 4 деонтические позиции (одна достижительная обязанность, две поддерживающие, одна свобода §125 — считано по goal.kind, а не по модальности), мёртвых правил 0, разметка §218 полная (unlabelled: 6 — ровно шесть узлов десугаризации §160, тот же пол, что у всех пакетов с процедурой); 24/24 сценария, все 24 evaluate-вызова байтово идентичны (liblaw_ffi == lawref); 8 авторских .lawtest; doctor.py без пробелов.

  • «Вершки и корешки» (ATU/СУС 1030) — первый акт корпуса, чьим ПРЕДМЕТОМ является неэффективность поправки (пакет ru.afanasyev.vershki_koreshki, corpus/laws/ru/vershki-koreshki/). Три источника и два их рода: свидетели — Афанасьев № 23—26 (ревизия Викитеки по изданию Наука, 1984, Лит. памятники, т. 1, с. 34—38) и Гримм KHM 189 «Der Bauer und der Teufel» (7-е издание 1857 года, две страничные ревизии); предмет — сам устный договор о разделе урожая, чьи ДВЕ редакции закреплены срезами свидетеля (приём «Скотного двора»), связаны ребром revision … amends и датированы условной шкалой @1000/@1001. Правопорядка нет ни у одного из трёх (jurisdiction "none"): суда сюжет не знает, санкция — самопомощь, и диегетический правопорядок вроде Окияна-моря приписал бы сказке институт, которого в ней нет. Главное утверждение вычислено решёткой 2×2, а не заявлено: две редакции × две культуры дают ЧЕТЫРЕ разных исхода, и «медведь проигрывает при любом раскладе» ЛОЖНО — при КАЖДОЙ редакции есть культура, при которой ценность достаётся ему (VK-02, VK-04). Проигрывает он потому, что поправил переменную РАЗДЕЛА, тогда как лазейка L8.2 сидит в переменной ВЫБОРА КУЛЬТУРЫ, которой договор не связывает ничем; chose_crop объявлен и не читается ни одним правилом — вписан в corpus/dead-symbols.json С ЭТОЙ причиной, а не удалён. Ноль VIOLATED при дважды сорванной цели: обязанность передать отведённую часть в обоих исторических годах SATISFIED (VK-05/VK-06), буква соблюдена дословно. Санкция подвешена к суждению, а не к нарушению: обман — канал §47.3 с authority AggrievedParty (потерпевший сам себе судья — формальная запись самопомощи), без суждения REQUIRES_JUDGMENT с типизированным DeceitPetition, с суждением §73 санкция выводится целиком ПРИ НУЛЕ нарушенных норм. Измерено: 16 сценариев регрессии и 16 evaluate-вызовов байтово идентичны lawref ↔ lawc, 6 рукописных .lawtest, мёртвых правил 0 (фаззер: 8 правил из 8 доказанно применились), разметка §218 — 30 объявлений и 10 норм, неразмеченных ноль, покрытие байтов свидетеля 22,5 % (10 фрагментов из 16), doctor.py без пробелов. Глубина §33.1 по статьям неприменима (сказка без деления) — записи в базе нет, и это решение.

  • Три отчёта аналитического слоя L8 на этом же пакете, и ДВА из трёх отрицательны содержательно. impact-editions даёт SEMANTIC-CHANGE, added=5, removed=4, «исход изменился: 2» — и изменились ровно КОНТРФАКТИЧЕСКИЕ сценарии (year-one-wheat: TRUE_ONLY → NEITHER, year-two-turnip: NEITHER → TRUE_ONLY), тогда как оба исторических не изменились вовсе: текст поправлен, право изменилось, исход тот же. amend поправки НЕ находит при ИСЧЕРПАННОМ пространстве (exhausted: true, editSpaceTruncated: false, 8 операций): механический перебор L8.3 умеет только снимать и переупорядочивать (remove_rule, drop_effective, add_priority, remove_priority), а нужное медведю есть ДОБАВЛЕНИЕ нормы — то есть отсутствующую норму нельзя починить перестановкой присутствующих. loophole путей не находит по ГРАНИЦЕ ИНСТРУМЕНТА, и отчёт называет её сам (alphabetTruncated: true): кап алфавита в 24 атома расходуется атомами арности 1—2 над пулами типов, и до трёхместного took_own_part, которым и совершается раздел, перебор не доходит ни разу — обобщение: акт, чьё оперативное действие имеет арность ≥ 3, поиску L8.2 v1 при нынешнем капе недоступен.

  • Найдено исполнением и изолировано отдельной пробой: канал суждения §47.3 обрывается на НЕсудейском конъюнкте со свободной переменной. Цепочка «суждение → мост → потребитель» даёт REQUIRES_JUDGMENT, когда у потребителя все переменные блокируемого литерала связаны его головой, и COMPUTED/NEITHER — когда одна из них существует только в теле. Это НАЗВАННАЯ граница v1, а не дефект: whynot.judgment_blockers (DECISION-0036 (б)) перечисляет по активному домену ТОЛЬКО судейский конъюнкт, всякий иной со свободной переменной остаётся вне разбора, и код говорит это прямо. Практическое следствие для формализации: предикат-мост обязан нести в голове потребителя все свои аргументы, иначе запрос отвечает обычным молчанием открытого мира — ровно тем, что §47.3 заведён отличать.

  • Найдено и починено на том же пакете: норма, заякоренная ТОЛЬКО во фрагментах свидетеля, снимается проекцией as-of §31 на любую дату, и impact-editions печатает верный отчёт о пустоте. У сказки нет и не может быть in_force; до расширения срезов редакций проекция оставляла ОДНО правило из семи и четыре утверждения из десяти, а «исход изменился: 0» читалось как «поправка ничего не изменила». Починка — редакция договора пиннит и уговор года, и его исполнение, а нормы заякорены в редакциях, свидетель идёт дополнением. Смежный класс уже был записан на Стамбульском проекте («акт без in_force опустошает проекцию as-of»); здесь он проявился у акта, который в силу ВСТУПИЛ, но чьи нормы висели на ненормативном источнике.

  • «Репка» (СУС 2044) в трёх закреплённых записях — первый акт корпуса о коллективной каузальности (пакет ru.narod.repka, corpus/laws/ru/repka/). Афанасьев № 89 (1863), Ушинский (1864), Гатцук (1894) — три свидетельства одного обычая без установителя и без дат: устная редакция UNAVAILABLE рядом с тремя PINNED_UNOFFICIAL_COPY, окон действия нет сознательно (проекция as-of неприменима, и это названо, а не умолчано). Записи расходятся в СОСТАВЕ (9 мест с пятью но́гами и без мышки у Афанасьева; 6 у Ушинского; 9 у Гатцука, где последнее место — у ВАНИ, «имени того, кому сказывается сказка») и в ПРИВЛЕЧЕНИИ (у Афанасьева участники приходят сами, и незва́ный состав правомерен; у двух других непривлечённый — изъян состава). Связность цепи «внучка за бабку, бабка за дедку, дедка за репку» — транзитивное замыкание через monotone-ребро supported §110, второе в корпусе и первое, проверенное отрицательными сценариями: разрыв одного звена оставляет всех за ним тянуть воздух. Полнота состава — двойное отрицание (агрегат по выводимому уперся бы в барьер §111), оба правила not_known объявлены defeasible (со strict они молчали бы на каждом деле — проверено исполнением). Обратный пересчёт Афанасьева, закрывающий его эллипсис «(и так далее до пятой но́ги)», записан одним comprehension с конъюнкцией внутри: сценарий RP-09 предъявляет шестерых посторонних при шести неподвижных перечисленных — числа сходятся, две независимые count объявили бы состав удостоверённым, и тест обязан молчать. Обязанность «призванный становится за призвавшим» — достижение с открытым окном (неисполненная стои́т ACTIVE, не VIOLATED). Спор «кто вытянул репку» — профиль §274 тремя ярусами подрыва без единого priority. Измерено: 25 фрагментов, покрытие байтов 99,3—99,7 %, глубина по статьям неприменима (объявлено в articles.json), 21 норма, мёртвых 0, разметка §218 полная; 34/34 сценария, 34/34 evaluate-вызова байтово идентичны, 5/5 авторских .lawtest, doctor.py без пробелов. Байты источников закрепляет corpus/tools/fetch_repka_texts.py (ревизии Викитеки по oldid), фрагменты порождает corpus/tools/sync_repka_fragments.py (шаг в ci/run_all.sh) — у Афанасьева ударения набраны комбинирующим U+0301 и стои́т его собственный знак сомнения «(?)», которые набранный руками фрагмент потерял бы молча.

  • Дефект §181.1 предъявлен девятикратно и квалифицирован: candidate_closure перечисляет не всех применимых кандидатов. Lean-ядро отвергает 8 сертификатов «Репки» из 34 (все — запросы argumentation) с одной причиной: allApplicableCandidateIds содержит только тот кандидат, что поддержал вывод, тогда как §181.1 требует всех. Срабатывает, когда одну голову с одной подстановкой выводят ДВА правила. Квалификация (инвариант 8): дефект оракула, не расхождение реализаций — differential байтовый, law-eval ведёт себя так же, починка меняет байты обеих и потому требует errata. Класс заведён НЕ этим актом: прямой обход графов даёт valikhanov 2 узла, repka 18, leviathan/us-declaration/animal-farm/qantar-amnesty/criminal-code — ноль. Акт под ядро не переписан: три позиции, отвечающие на один вопрос одним литералом, и есть карта спора §274.

  • corpus/tools/doctor.py перестал объявлять вложенные пакеты «без генератора». Связь «sync-скрипт → пакет» бралась захватом ОДНОГО сегмента пути (corpus/laws/([A-Za-z0-9._-]+)), верным, пока корпус был плоским; после группировки по правопорядкам ключом становился «ru» вместо «ru/repka», и каждый вложенный пакет с генератором получал строку «фрагменты рукописные — кандидат в шаблон pinning». Утверждение ложное и молчаливое: «·», а не «✗». Теперь кладутся все префиксы пути; проверено на kz/alash-orda, intl/general-average, kz/procurement (генератор виден) и ru/zolotaya-rybka (генератора действительно нет).

  • boundaries.py перестал печатать «фаза 0 не выполнена» пакету с закреплёнными байтами под неканоническими именами. У «Репки» три документа (af-1863.txt, ush-1864.txt, gat-1894.txt), и поиск по списку ru.txt/kk.txt/en.txt/fr.txt их не находил — мера сообщала об отсутствии закрепления вместо «мера неприменима». Лечится картой articles.json в форме editions (DECISION-0026), которая называет документы поимённо; отсутствие единицы деления объявлено в ней явно, с причиной.

  • §168.1: деление целочисленных литералов в ground-позиции — запись Rational-значения, а не мёртвый терм (DECISION-0058 П1, LDC-E1324, T151/T152). Разведка исполнением показала форму-обманку: assert share(2/1) парсился и понижался в binary-терм, который обе реализации хранили синтаксически — он совпадал сам с собой и никогда со значением из правила или дела (матрица перекрёстных форм: NEITHER в обе стороны при полностью чистой статике; живой носитель — молча мёртвый assert sheep_value(Qoi, 1 / 1) «Жеті жарғы»). Теперь lowering сворачивает форму в каноническое Rational-значение §35 в аргументах assertion §71 (пакет, дело, given теста §267) и literal-аргументах запросов §172; канон E-0005 требуется ОТ АВТОРА — неканоническая пара отвергается LDC-E1324 с показом канонической формы (вычисляющая свёртка отвергнута решением: второй вычислитель, инвариант 5); rule-позиции не тронуты, там / — операция §58. Prose — §168.1; векторы T151 (evaluate + петля .lawcase → lower-case, до свёртки красен измеренно) и T152 (static, код дважды: 10 / 4 и 3 / 0); юнит-тест ground_rational_fold_168_1; T151 в SUPPORTED, differential 134/134. Рендерер эмиссии научен печатать Rational формой (n / d) и заодно перестал печатать отрицательные числовые литералы всех видов — у поверхности их нет (унарный минус только в -infinity §20), и тест с -60 не разобрался бы; причина пропуска называет границу поимённо. Эмиссия zheti_zhargy: 56/73 → 71/73, каталог 72/72 lawc test; CLIR «Жеті жарғы» перегенерирован — прежде мёртвый assert ожил. Остаток П1 (Instant/Duration в терм-позиции, унарный минус, громкий отказ прочим вычислимым термам) записан в DECISION-0058 §2.1.

  • Ворота свежести вложенных движков рабочего стола: браузер обязан исполнять ТОТ ЖЕ оракул, что лежит в дереве (шаг 26/45, ci/gates/hosts/check_engine_bundle.py). constructor/apps/workbench/public/engine/oracle-bundle.json — сгенерированный артефакт, который никто не пересобирает при правке lawref/, и до 29.08.2026 на него не ссылался ни один шаг конвейера (ноль упоминаний во всём ci/). Замер до правки: 23 из 99 вложенных файлов разошлись с рабочим деревом — включая вычисляющее ядро (evaluator/{document,rules,strict,defeasible,norms}.py), resolver.py, verbalize.py, нормативную package-manifest.schema.json и сам мост воркера, — а mcp/law_mcp/engine_ffi.py в бандле отсутствовал вовсе: разошлись и байты, и СОСТАВ. Признака в ответе нет ни одного (документ канонический, bundleHash сходится сам с собой, полоса зелёная) — класс «протухшего процесса MCP», но без громкого отказа. Артефакт пересобран генератором, инвариант 2 соблюдён; первая пересборка дала law_wasm.wasm байт в байт прежним — протухал ровно оракул (последующая втянула правки параллельных сессий: артефакты порождаются из РАБОЧЕЙ КОПИИ, и пересборка — часть коммита). Ворота — четыре ступени, три из них не требуют ничего, кроме Python: (1) вложенные байты против рабочего дерева; (2) целостность — bundleHash пересчитан по составу (питоновский эквивалент JSON.stringify(files, sorted) сверен на живом артефакте), manifest.json против обоих артефактов; (3) состав mcp/law_mcp против транзитивного замыкания импортов от моста по AST (импорты моста лежат внутри функций — греп их не видит), краснеющий в обе стороны; (4) состав против САМОГО генератора в новом режиме --bundle-only — второй список того, что едет в браузер, разошёлся бы с первым молча (довод SUPPORTED из check_differential.py), и только эта ступень видит НОВЫЙ файл дерева, не попавший в бандл. Канарейка держит 11 мутаций; на историческом артефакте ворота краснеют предъявлением 23 расхождений. Объявленная граница: свежесть law_wasm.wasm ОТНОСИТЕЛЬНО lawc/ не утверждается (доказуема только повторной release-сборкой) — сверяется его согласие с манифестом.

  • SMT-свидетели скалярных гардов: закрыто слепое пятно фаззера — вторая ветвь пути 3 записки docs/notes/COMPILATION-TARGETS.ru.md (ci/tools/smt_witness.py). Пул скаляров фаззер строит только из значений, УЖЕ встречающихся в документе, поэтому норма с гардом по сумме или сроку, чей порог делом не представлен, оставалась непокрытой честно. Порог теперь спрашивается у z3 (z3 -in, SMT-LIB2 текстом; новых зависимостей ноль, без решателя — печатный пропуск, не тихий). Паттерн — тот же, что у law_screen.py и fuzz --emit: решатель — недоверенный генератор кандидатов, арбитр — движок. Гарды strict-правила кодируются конъюнкцией, z3 даёт модель и контрмодель, обе материализуются в дела typed value-термами ({"kind":"value"}, НЕ entity_ref) с origin: "case_input" §73 и реплеятся через liblaw_ffi хэндлом на пакет; покрытие правила подтверждает только rule_application §180 в proof-графе, а контрмодель обязана применения не дать — ложь кодировки видна в обе стороны. Замеры: kz-pd (126 strict-правил) — слепой fuzz 8, --targeted 84, из 42 непокрытых 13 несут скалярный comparison, и SMT закрыл 13/13 (25 реплеев, 1,9 с), покрытие 84 → 97 из 126; kz-entrepreneurial-code (1729 правил) — фаззер оставил 17 непокрытых, и 14 из них были ровно скалярными: закрыты все 14 (цели с comparison — 32/32, 63 реплея, 51 с), покрытие 1712 → 1726 из 1729; там работают развёртка выводимых предикатов и целочисленная арифметика, без которых денежный порог «МРП × 3 000 000» из чужого пакета недостижим вовсе; корпусный прогон по девяти пакетам с гардами — 233 из 233 целей в срезе закрыты за 211 с и 470 реплеев, ноль ложных кандидатов и ноль лжи контроля (крупнейший — kz-social-code: 119 из 119, включая 16 норм о пенсиях по годам); черновик верстака (WB_DRAFT) — fuzz берёт 2 правила из 3, SMT даёт обе стороны границы d <= 7 свидетелями d=7 и d=8. Выгрузка --emit — обычный тест формата О-1: реплей независимым путём (lawc eval) даёт TRUE_ONLY с тем же применением. Кодировка недоверенная не на словах — пять её дефектов нашёл реплей, а не рассуждение, каждый на очередном живом пакете: ось политики §86 взята «дневная/календарная» вместо нормативной month_end (§84.2, E-0029) и даты за окном valid снимка §85 (kz-pd); развёртка связывала голову продюсера ПОСЛЕ впитывания тела, и факты ложились на другое лицо (kz-entrepreneurial-code, пять правил из пяти); интервал срока не содержал истину — месяц от 30 ноября выходит 32 дня против грани 31, и это врало в ОБЕ стороны сразу, гася свидетеля и объявляя ложь контроля там, где её нет (kz-customs-code); дело датировалось мимо окна effective §90, из-за чего 16 норм о пенсиях по годам давали NEITHER без единого issue (kz-social-code, 103 → 119 из 119). Способность контроля кричать проверена канарейкой: с обезвреженным отрицанием гарда он ловит ложь на 5 правилах из 5. Отдельно назван случай, где контроль бессилен по построению: при ветвлении §206 отрицание гарда одной альтернативы не гасит остальные, и вывод другой ветвью — законный ответ движка, а не дефект («контроль односторонен», 1 из 233). Вне среза v1 — громкий поимённый отказ (не-strict, deontic-головы, отрицания, агрегаты, call вне таблицы аппроксимаций, div E-0036, рекурсия развёртки, Money без выводимой валюты); побочно решатель называет unsat-гарды — кандидатов в мёртвые нормы, которых сэмплирующий фаззер от «не нашёл» отличить не может.

  • Суд Соломона: 3 Цар 3:16–28 (KJV) — первый акт, где канал суждения §47.3 есть предмет источника. Пакет he.solomon.judgment, corpus/laws/he/solomon-judgment/. Спор о материнстве при нулевой доказательной базе (3:18 называет её сам), протокол проверки притязаний (испытание мечом) и замыкание вывода суждением. mother_of — external judgment relation с органом KingSolomon и первым в корпусе request_schema (типизированный запрос судьи MaternityPetition доезжает до JudgmentRequest.requestSchema, DECISION-0036 (в)); мост — строгое правило с литеральной головой. Испытание мечом ЗАЯКОРЕНО, не понижено: вывод «пощадившая — мать» текст приписывает мудрости царя (3:28), не норме, — граница «правило / канал §47.3» проведена источником, как в Гортине. Вердикт 3:27 — duty отдать ребёнка установленной матери и prohibition умерщвлять; носитель — держатель ребёнка (custodian_of приходит делом). Источник — тот же Гутенберг #10, что у Декалога (PINNED_UNOFFICIAL_COPY); якорь книги — уникальный подзаголовок «The Third Book of the Kings» (основное имя двусмысленно — оно же альтернативное имя 1 Царств); конвенция unit: "verse", 13 фрагментов. Меры §33.1: 13 из 13 — EXECUTABLE 2, ANCHORED 11, SOURCE_ONLY 0 (честная глубина нарратива; 10 записей dead-symbols documented с причинами). Сценариев 6/6, 7 evaluate-вызовов байтово идентичны (liblaw_ffi == lawref), Lean-зонд — 7/7 сертификатов принято, включая узел запроса судьи (DECISION-0037). Сцены держат невидимое мерам: открытие канала с типизированным запросом; посуждённое «не мать» (adjudicated NEGATIVE §73) — COMPUTED-молчание по кандидату, а не новый запрос, второе притязание остаётся REQUIRES_JUDGMENT; суждение без держателя не порождает позиций.

  • Формализована «Сказка о рыбаке и рыбке» Пушкина (1833/1835) — первый акт корпуса, где предел полномочия обращён на самого грантора, а санкция за его превышение — ретроактивный откат всех эффектов (пакет ru.pushkin.zolotaya_rybka, corpus/laws/ru/zolotaya-rybka/; приём «Антигоны»: сама сказка — свидетель с jurisdiction "none", оферта рыбки — второй source диегетического правопорядка OkiyanMore, ABSTRACT_ONLY на условной шкале @1000-01-01). Оферта «Откуплюсь чем только пожелаешь» записана presumption’ом с поражением по exceeds_grant_limit: четыре дара выводятся (в том числе на ЧУЖИЕ желания — агентская ось «желает старуха, передаёт отпустивший»), а молчание рыбки на пятом требовании ПОЛУЧАЕТ содержание — отказ ВЫВЕДЕН (FALSE_ONLY), не промолчан, и why-not называет поражающее условие; strict-форма с «and not exceeds…» молчала бы на всех четырёх дарах. Предел взят ЭКСТЕНЗИОНАЛЬНО — конъюнкцией засвидетельствованного состава (владычество над морем + служба самой рыбки): ratio отказа рыбка не произнесла, и о владычестве без службы пакет молчит вместе со сказкой (NEITHER по пределу, оферта СТОИТ — сценарий ZR-09). Откат ретроактивен и требует ПЕРЕДАЧИ: донесённое запредельное требование отзывает каждый предоставленный дар и возвращает обоих к землянке (ZR-07/08), непереданное не отзывает ничего (ZR-11) — море чернеет после слов старика, а не старухи. Закреплены 205 стихов академического издания (СС в 10 т., ГИХЛ 1959—1962, воспроизведение РВБ; извлечение воспроизводимо corpus/tools/fetch_zolotaya_rybka_text.py, сетка lines/N-M — счёт стихов самого издания), 8 фрагментов, 57,9 % байтов; мера §33.1 по статьям неприменима (стих без деления). Регрессия 15/15, KZ-differential 15/15 байтово (liblaw_ffi == lawref), 5/5 рукописных тестов §267, doctor.py — «пробелов нет»; правопорядок OkiyanMore вписан в словарь юрисдикций (группа диегетических, рядом с Thebes).

  • Set-at-a-time скрининг: норма по ста тысячам дел — первый артефакт пути 3 записки docs/notes/COMPILATION-TARGETS.ru.md (ci/tools/law_screen.py). Движок отвечает про одно дело; регулятор спрашивает «кто из всех» — класс задач, которого не было вовсе. Закрыт санкционированным паттерном fuzz --emit: SQL — генератор кандидатов, движок — арбитр. Строгий срез CLIR (конъюнкции established-литералов, alt-правила §206 → UNION ALL, выводимые предикаты → вложенные подзапросы, циклы/отрицания/термы/defeasible — громкий поимённый отказ, не приближение) компилируется в SELECT по базе фактов на SQLite ИЗ STDLIB — новых зависимостей ноль; кандидаты реплеятся через liblaw_ffi хэндлом на пакет (DECISION-0057), и только proof движка делает кандидата ответом; контрольная выборка НЕ-кандидатов реплеится тоже — ложь кодировки видна в обе стороны (ложный кандидат — «кодировка шире права», ложное молчание — «уже права»), инвариант 5 соблюдён не запретом семантики в SQL, а недоверием к ней. Замер на живом акте — ст. 669 Налогового кодекса (освобождение от пошлины за приобретение гражданства: репрессированные-возвращенцы и кандасы × неиспользованность, два alt-основания): 100 000 синтетических дел (сеяный ГСЧ) → скрининг 21 мс → 3981 кандидат → арбитраж 3981/3981 TRUE_ONLY, 0 ложных кандидатов, 0 ложных молчаний на контроле из 200; 36 с против ~15 мин полного перебора (25×, ~9 мс/дело на хэндле) — каждый подтверждённый ответ несёт proof со ссылкой на основание (basis печатается из UNION-ветки). v1 честно ограничен: только --demo-мир (внешняя база — следующий срез), арность 1 в синтезе. Ветвь SMT пути 3 (скалярное слепое пятно фаззера — гарды по суммам и срокам; z3 на машине есть) — следующий кандидат тем же паттерном.

  • Алдар-Көсе как дела против «Жеті жарғы»: семь сценариев ZH-ALDAR-01…07, семейство zheti_zhargy 66 → 73. Сказки цикла — народная коллекция контрпримеров к имущественному праву: завладение без захвата, согласием владельца под наведённым заблуждением. Сценарии закрепляют три факта, измеренных исполнением. (1) Молчание на обмане начинается на уровне словаря: закреплённые байты свода перечисляют составы поимённо («кісі өлтіру, мертіктіру, әйелді зорлау, соққыға жығу, қорлау, ұрлық істеу») — обмана среди них нет, отношений для обмена/согласия/заблуждения в пакете нет, и дело «шуба отдана добровольно» не может даже сформулировать порок воли: обе меры (десятикратное ст. 7 и «үш тоғыз») — NEITHER, тогда как та же шуба УКРАДЕННАЯ даёт 27 голов и оценённое взыскание 20 овец (контрастная пара ZH-ALDAR-01/02 ↔ 03/04). Квалификация обманного завладения как кражи была бы правовым решением, которого источник не принимал, — граница зафиксирована, не закрыта выдумкой. (2) Спор о самом факте кражи свод не решает: положительное и отрицательное theft_of дают BOTH, и обе меры молчат — строгие правила читают только установленный факт; установление — работа бия (ZH-ALDAR-05/06). (3) Кража в пакете — kind empirical, и ни одно правило её не выводит из обстоятельств — котёл, который «родил и умер», не квалифицируем изнутри свода; сценарий ZH-ALDAR-07 покраснеет, если выводящее правило появится молча. Пакет, CLIR и голдены не тронуты — ни строчки новой семантики. Регрессия 73/73, KZ-differential 73/73 байтово (liblaw_ffi == lawref), манифест дописан частичной записью, пол храповика поднят 66 → 73, check_scenario_manifest зелёный.

  • MCP-сервер пересажен на движок in-process — потребитель № 2 по DECISION-0057 (mcp/law_mcp/engine_ffi.py). tool_law_check: вместо cargo run … check на КАЖДЫЙ вызов — конверт §225 через law_op из liblaw_ffi; строки диагностик восстановлены из конверта в точном формате stderr-рендера CLI (path:line:col: severity code: message), медиана 306 → 11 мс (~27× на тёплом cargo; после любой правки дерева старый путь стоил секунды), пути в ответах стали репо-относительными (абсолютные пути машины утекали). tool_law_draft_differential: вместо бинаря с временной директорией — one-shot evaluate той же библиотекой; инструмент oracle-bound (медиана ~стабильна), выигрыш — устойчивость (без cargo/temp-io на пробу, первая проба 1,4 с → одноразовый прогрев) и транзитивность через ворота 27/44 (сверка остаётся lawref ↔ lawc). Дисциплины: сборка/арка — тем же fresh_library() ворот (второй политики нет), stdout на время сборки уведён в stderr (stdout сервера — канал JSON-RPC), экземпляр на поток; subprocess-пути сохранены fallback-ом. Свежесть в обе стороны: отпечаток процесса (freshness.py) расширен пятью точечными ci-файлами, которые сервер теперь исполняет, а байты .dylib пинуются при загрузке и сверяются на каждом обращении — порча под живым сервером даёт отказ голосом STALE_PROCESS с рецептом перезапуска (проверено негативом), молчаливого даунгрейда нет. Контракт-тест красен пре-существующе (law_ask/state_duty, та же строка до и после — вне объёма); слепки ответов обоих инструментов до/после идентичны, кроме относительных путей.

  • Рабочий стол вписан консьюмером вербализации; его пин стоял на 0.1.0 под подписью «текущий» (29.08.2026). Класс, ради которого 27.08 заведена ступень 2 ворот 39/44, повторился там, где реестр CONSUMERS его не искал: панель вербализации constructor держала собственный список паков — verb/law.verb.ru/pack.json с подписью «ru — текущий» (это 0.1.0, ступень (1) LS §3.8) и verb/law.verb.kk/pack.json, файла которого нет ни на диске, ни в бандле оракула, то есть казахская опция падала вызовом. Мост oracle_bridge._op_verbalize умолчания не имеет и требует явного packPath ровно ради этого, но назвать свой пин — половина дела: мерить его было некому. Цена измерена: под 0.1.0 корпус даёт 2316 маркеров LDC-E8201 в 73 документах из 105, и даже на вложенных в приложение образцах — kz-tuystyq 5 («статус monotone»), kz-pinning-example 1 («revision»); документ с маркером по LS §3.3 не допускается к утверждению статусом выше draft. Пины вынесены в constructor/apps/workbench/src/engine/verb-packs.ts и подняты до ru 0.6.2 / kk 0.2.2; ворота читают их разбором этого файла (пин у консьюмера на TypeScript, импортом не берётся), MIN_CONSUMERS 7 → 9, замер после — 105 документов, 54 064 подписываемых блока, пробелов 0 обеими строками.

    Ступень 4 — подпись пака, и она ловит то, чего тотальность не видит по построению. Панель печатает выбранный пак рядом с отпечатком вербализации, поэтому «ru — текущий» над 0.1.0 было ложью, оставаясь честным пином: на конкретном документе младший пак может дать ноль маркеров, и ступень 2 промолчит. Теперь заявленное pack: 'law.verb.ru@0.6.2' сверяется с name@version самого файла. Канареек стало четыре: снятая фраза, откат пина, снятое описание gapWhat и разошедшаяся подпись — все проверены красными. Отдельно проверен путь «константа переехала»: разбор, поймавший ноль пинов, объявлен отказом с диагностикой, иначе ворота зеленели бы оттого, что читать стало нечего.

  • Право как библиотека: нативный FFI-хост палитры law-ffi и хэндл-транспорт KZ-differential — 819 → 210,5 с wall на семействе (DECISION-0057; план и замеры — docs/plans/products/BINDINGS-PLAN.ru.md, этапы 0–6). Путь 1 записки docs/notes/COMPILATION-TARGETS.ru.md исполнен: ретаргетинг ОДНОЙ реализации, ноль новых реализаций семантики. Состав: (0) разведочный транспорт lawc eval-serve <ir.json> — IR парсится один раз, JSONL {"case","query"[,"calendarResource"]} на строку, flush на каждую (запрос-ответ, не конвейер; тривиальный вызов ~2 с per-call → 0,001 с steady-state); (1) крейт lawc/crates/law-ffi (cdylib+rlib) — базовый ABI приезжает ЛИНКОВКОЙ law-wasm (#[no_mangle]-экспорты зависимостей у cdylib сохраняются), крейт — манифест + doc-comment + use law_wasm as _;, второй копии диспетча негде быть; (2) хэндл-API law_load → {"handle": N} / law_evaluate_loaded(N, len) / law_unload(N) → 1|0 — симметрия DECISION-0054 на стороне Rust, через ОБЩИЙ law_wasm::dispatch (в law-wasm открыты pub три вещи: dispatch, evaluate_request_with, error; wasm-ворота перегнаны — байтово нейтрально), таблица thread_local BTreeMap, оценка под заимствованием без клона IR; (3) обёртка ci/law_ffi.py — транспорт без семантики: ctypes из stdlib, выбор .dylib по арке ИНТЕРПРЕТАТОРА, привязка экземпляра к потоку создания (thread_local делает чужой поток не гонкой, а ДРУГИМ миром — отказ раньше молчания), самотест против замороженных голденов; (4) ворота 27/44 ci/check_ffi_differential.py — «хост не меняет ответ» для четвёртого хоста: 24 операции палитры через law_op и 133/133 SUPPORTED-векторов ОБОИМИ eval-путями против ЖИВОГО lawc, реквизит и реестры импортированы (вторых списков нет), сборка внутри ворот, канарейка испорченного пакета, §211 двойным вызовом; шаг вписан в ci/run_all.sh с перенумерацией 43 → 44, check_gate_wiring зелёный; (5) ci/check_kz_differential.py пересажен на хэндл на пакет — отказные ветки options-симметрии дословно, шов set_evaluate не тронут, subprocess остался ПЕЧАТНЫМ fallback-ом (транспорт опционален, контракт нет), итоговая печать называет фактического продюсера. Довод транзитивности: ворота 27/44 держат «библиотека == живой lawc» байтово, значит сверка lawref ↔ библиотека остаётся сверкой lawref ↔ lawc. Замер на --only criminal_code (165 сценариев, те же 187 вызовов, машина сопоставимо занята в обоих прогонах): 819 с wall / 663 с CPU → 210,5 с wall / 254 с CPU (3,9×); полный корпус мерился фоном на момент записи, число — в плане. Попутные находки: кросс-архитектурный детерминизм подтверждён байтами (arm64-библиотека == x86_64-CLI на 133 векторах), и вскрыт ~2× налог Rosetta (разложение 4,64 → 2,20 → 1,13 с) — локальный тулчейн переведён на aarch64 отдельной работой. Векторы не тронуты — новой семантики нет; lawref/law-eval не менялись. (пакет kz.corpus.qantar_amnesty, corpus/laws/qantar-amnesty-2022/). Фаза 3 январской работы и пара к kz.corpus.qantar: тот пакет о РЕЖИМАХ января 2022 года, этот — о последствиях.

    Заголовок акта о январе молчит; привязка живёт в статье 1 и состоит из двух признаков-посылок: деяние совершено «на территории Республики Казахстан с 4 по 7 января 2022 года» и «связано с массовыми беспорядками ЛИБО [совершено] при их пресечении». Связь симметрична, и это содержание, а не оборот речи: в одном перечне из 53 составов стоят хулиганство (ст. 293) и заведомо незаконное задержание (ст. 414), вандализм (ст. 294) и принуждение к даче показаний (ст. 415). Акт амнистирует и участников, и пресекавших, и сцена AMN-02 требует у второго того же ответа, что у первого.

    Три закрытых перечня §70, и все три дают проверяемое «НЕТ»: 53 состава статьи 1, восемь изъятий статьи 2 (терроризм, экстремизм, ПЫТКИ, половая неприкосновенность несовершеннолетних, государственная измена, коррупция, организация массовых беспорядков, рецидив) и пять категорий тяжести статьи 3. Состав вне перечня отвечает FALSE_ONLY, а не NEITHER: без замыкания «состав не назван» было бы неотличимо от «о составе ничего не сказано». Все замыкания над УТВЕРЖДАЕМЫМ фактом — замыкание над выводимым дало бы BOTH.

    Две оговорки об ОДНОМ признаке, направленные в РАЗНЫЕ стороны. Статья 1: «частью первой статьи 272 (Массовые беспорядки), ЕСЛИ ЭТО ДЕЯНИЕ СОВЕРШЕНО НЕСОВЕРШЕННОЛЕТНИМ» — несовершеннолетие ОТКРЫВАЕТ позицию перечня (части вторая и третья стоят отдельной строкой и безусловны). Статья 2 подпункт 7: «совершивших организацию массовых беспорядков, ЗА ИСКЛЮЧЕНИЕМ случая совершения этого преступления несовершеннолетним» — несовершеннолетие СНИМАЕТ изъятие. AMN-04 и AMN-08 подают одно лицо совершеннолетним и несовершеннолетним и получают зеркальные ответы. Оговорка подпункта 4 при этом ДВУСОСТАВНА («несовершеннолетним в отношении несовершеннолетнего в возрасте от четырнадцати до восемнадцати лет»), и одного признака мало: AMN-10 проходит три состояния, изъятие снимается только на третьем.

    Изъятие побеждает охват приоритетом §116, а не порядком правил. Статья 2 говорит «действие настоящего Закона НЕ РАСПРОСТРАНЯЕТСЯ» — это отмена, а не сужение, значит дефитер с отрицательной головой и поражаемое правило. ОБА соперничающих правила читают предикаты, ВЫВЕДЕННЫЕ строгими правилами: иначе они уехали бы в разные страты, §116 не применился бы вовсе, и ответ был бы BOTH при полностью чистой статике. AMN-06 требует ровно FALSE_ONLY.

    Компилятор отверг первую редакцию модуля последствий, и был прав. Строгие правила читали amnesty_applies голым — пять диагностик LDC-E4103 LATE_STATUS_PRODUCER: статус поражаемого вывода потреблялся бы до завершения продюсеров обеих полярностей (§111). Молчаливое чтение дало бы последствия амнистии лицу, которое статья 2 из неё изъяла. Правила последствий стали defeasible; правила с ДЕОНТИЧЕСКОЙ головой под запрет не подпали и остались строгими — различие провёл компилятор, а не автор. AMN-13 закрепляет результат: изъятому не полагается ни освобождения от наказания, ни снятия судимости, ни обязанности прекратить дело.

    Арифметики сокращения срока нет, и это объявленная граница. Пункт 3 статьи 3 сокращает основное наказание «на три четверти» при тяжких, «наполовину» при особо тяжких и на весь неотбытый срок при остатке до года. Пакет выводит, КАКОЕ сокращение полагается, и не вычисляет новый срок: величина приговора в законе не названа, и умножать её здесь значило бы формализовать калькулятор. Абзац второй пункта 3 работает ПОВЕРХ, а не вместо — AMN-12 требует, чтобы оба вывода стояли на одном деле.

    Провенанс. ИПС «Әділет», живая страница (corpus/tools/fetch_amnesty_2022_text.py, 18 428 байт): акт с момента принятия не изменялся ни разу, поэтому снимок Архива здесь, в отличие от трёх законов пакета qantar-2022, не нужен. sourceFidelity = pinned_unofficial_copy, verifiedAgainstSource = false.

    Измерено: lawc check чист, lint.py — 0 замечаний, учёт статей 4 из 4, глубина §33.1 — EXECUTABLE 3, ANCHORED 1 (статья 4 адресуема и ничего не выводит: называет способ вступления в силу, а не дату); 21 норма при нуле мёртвых; разметка §218 полная (42 объявления, 21 норма, без остатка); 16/16 сценариев, 4/4 теста §267, 37 evaluate-вызовов байтово идентичны lawref ↔ lawc; check_stratum_barrier, check_dead_rules, check_dead_symbols, check_label_coverage, check_formalization_depth, check_package_metadata, check_lower, check_registry_index зелены; индекс реестра пересобран (105 пакетов); doctor.py qantar-amnesty-2022 — «пробелов нет».

  • Общая авария формализована по всей родословной: Lex Rhodia de iactu → Йорк-Антверпенские правила 2016 (ga.corpus.general_average, corpus/laws/general-average/). Одна норма — «груз, выброшенный за борт ради спасения судна, возмещается всеми спасёнными интересами пропорционально их стоимости» — прослежена от латыни VI века до действующей рекомендации Международного морского комитета. ЧЕТЫРЕ АКТА, ДЕСЯТЬ РЕДАКЦИЙ, ДЕВЯТЬ РЁБЕР revision … derived_from В ОДНУ ЛИНИЮ. Утверждение «самая длинная родословная корпуса» ИЗМЕРЕНО, а не заявлено, и мерилом взята ДЛИНА ЦЕПИ, а не число рёбер: у us-constitution рёбер 27, но все они выходят из одной редакции 1787 года к поправкам — самый длинный путь там равен ЕДИНИЦЕ, это веер, а не цепь; у animal-farm цепь равна четырём. Здесь путь DIGESTA_14_2_LA → ORDONNANCE_1681_FR → CODE_1807_FR → YAR_1890_EN → 1924 → 1950 → 1974 → 1994 → 2004 → 2016 даёт девять, и это максимум корпуса.

    Состав. Дигесты Юстиниана 14.2 «De lege Rhodia de iactu» (латинский подлинник Моммзена и Крюгера, 10 лексов); Ordonnance de la marine, кн. III, тит. VIII (август 1681); Code de commerce 1807, кн. II, тит. XI–XII (французский подлинник «Bulletin des lois», статьи 397–429); Йорк-Антверпенские правила 1890, 1924, 1950, 1974, 1994, 2004 и 2016 годов. Шесть документов закреплены байтово (186 фрагментов §194, покрытие 99,2–99,9 %), три редакции объявлены ABSTRACT_ONLY.

    ТРИ РЕДАКЦИИ ЦЕПИ НЕ ПОДДЕЛАНЫ АВТОРСКИМ ИЗЛОЖЕНИЕМ, И ЭТО ГЛАВНОЕ РЕШЕНИЕ ПАКЕТА. Ордонанса 1681 года машинным текстом достать не удалось (Gallica отвечает 403 на texteBrut, Викитека транскрибировала пять страниц комментария Валена, archive.org недоступен), издания Правил 1924 и 1950 годов ММК не выкладывает. Приём faraid/incoterms — написать своё изложение и закрепить его собственные байты — здесь ЗАПРЕЩЁН: он годится доктрине, у которой канонического текста не существует вовсе, а у Ордонанса текст есть, он просто не достался. Дело под такой редакцией отвечает ПОЛОЖИТЕЛЬНО (regime_text_not_pinned), а не молчанием: NEITHER читалось бы как «право не решает», хотя решает оно прекрасно — это корпус не закрепил байты.

    ОДНО ДЕЛО — ДЕСЯТЬ ПРАВОВЫХ РЕЖИМОВ, И РЕЖИМ ЕСТЬ ФАКТ ДЕЛА, А НЕ ВЫВОД ИЗ ДАТЫ. Правила не законодательство: они применяются потому, что их назвал коносамент, и редакции 1974, 1994 и 2016 годов «действуют» сегодня одновременно. under_yar_1974(voyage) и есть оговорка коносамента. Три расхождения дают на ОДНОМ составе разные ответы и проверены сценариями: палубный груз (абсолютный запрет правила I 1890 года против «recognised custom of the trade» с 1974-го), Rule Paramount (введён в 1994-м; до него неразумная жертва, подпадавшая под нумерованное правило, возмещалась вопреки правилу A) и преднамеренная посадка на мель (правило V перевёрнуто: «whether or not she might have been driven on shore»).

    ДОЛЕВАЯ АРИФМЕТИКА КЛАССА faraid: ТРИ РАЗНЫЕ ТОЧНЫЕ СТАВКИ НА ОДНОМ ДЕЛЕ. Стоимости объявлены Integer, а не Money, потому что деление Money требует политики округления (errata E-0036), а диспашер округляет ОДИН РАЗ в конце. Классический состав даёт 1/13 по Правилам, 10/119 по Дигестам и 20/179 по Кодексу 1807 года; сумма взносов сходится с возмещаемым РОВНО, точным равенством Fraction, во всех трёх. Различия не вкусовые, а текстовые: римский титул фрахт среди участвующих НЕ НАЗЫВАЕТ (D.14.2.2.2 перечисляет груз, судовладельца «pro portione», одежду и перстни), а ст. 401 Кодекса вводит участие судна и фрахта ПОЛОВИНОЙ стоимости, которую Правила 1890 года отменили. Половина считается приведением к общему знаменателю 2 × Σ(полные) + Σ(половинные) — целочисленно до последнего деления, ровно тем приёмом, которым диспаша считается на бумаге.

    Две находки об инструментах, сделанные исполнением. (1) constraint … require §93.1 не исполняется evaluate() вовсе — узлы constraint читают fuzz, impact, layers и вербализация, а оракул на запрос по делу их не смотрит (issues пуст, truthStatus NEITHER). Полагаться на констрейнт как на «громкий отказ на деле» нельзя; отказ здесь объявлен ДВАЖДЫ — выводимым предикатом для дела и констрейнтом для фаззера. (2) lawref impact-editions на этом пакете показывает semanticChange=true, added=7, removed=1 (появление Rule Paramount и правила XXIII), но исходы сценариев не меняет — и это следствие решения «режим есть факт дела», а не дефект; отчёт вдобавок называет повисшие ссылки priority, связывающие правила разных редакций.

    Меры. Глубина §33.1 по каждому документу отдельно: Дигесты 9/10 EXECUTABLE (лекс 10 — граница с причиной: три казуса Лабеона о найме судна и фрахте, не о раскладке), Кодекс 1807 — 32/33 (ст. 408, франшиза в один процент, требует суммы по всем интересам — comprehension 0.1 даёт один связыватель), ЙАП 1890 — 18/18, ЙАП 1994 — 31/31, ЙАП 2004 и 2016 — по 32/32. Учёт статей редакции 1974 года объявлен НЕИЗМЕРИМЫМ: ММК выкладывает скан, OCR калечит шесть заголовков из тридцати («RULE L» вместо «RULE I»), и конвенция насчитала бы двадцать четыре правила вместо тридцати — знаменатель врал бы молча. Подгонять конвенцию под опечатки сканера значило бы спрятать авторское чтение в инструмент; таблица искалеченных заголовков лежит ОДНИМ ВИДИМЫМ СПИСКОМ в генераторе фрагментов.

    202 правила, ни одного пропускаемого исполнителем; 27 сценариев .lawtest и 9 сценариев регрессии; check_kz_differential --only general_average — 36 evaluate-вызовов байтово идентичны. Три новые конвенции деления §33.1 (digest_lex, fr_code_article, yar_rule) заведены ПАРАМИ в обеих мерах.

  • Формализован правовой каркас январских событий 2022 года (Қаңтар) — СЕМЬ инструментов в одном пакете (kz.corpus.qantar, corpus/laws/qantar-2022/). Фаза 2 работы, начатой Договором о коллективной безопасности. Состав: срез Закона РК «О чрезвычайном положении» № 387-II (12 статей из 31), указы Президента № 725 (город Алматы) и № 726 (Мангистауская область) от 05.01.2022, срез Закона «О противодействии терроризму» (ст. 12, 15, 15-1 — правовой режим антитеррористической операции), срез Закона «О правоохранительной службе» (ст. 59, 61, 62 — применение оружия) и Закон «О Совете Безопасности» № 178-VI в ДВУХ редакциях. Предмет пакета — ПРАВО, а не события: спорные факты января (организаторы насилия, статус лиц как террористов, законность конкретных применений силы) приходят фактом дела, а не утверждением пакета.

    ЧЕТЫРЕ ДОКУМЕНТА ЗАКРЕПЛЕНЫ СНИМКАМИ АРХИВА ИНТЕРНЕТА, и это условие правильности, а не удобство. ИПС «Әділет» отдаёт ДЕЙСТВУЮЩУЮ редакцию, а у Закона о ЧП после января 2022 года изменены статьи 4, 15 и 16 — основания введения и ОБА перечня мер, — и добавлены статьи 2-1, 3-5, 14-2, 18-1, которых в январе не было. Разбирать январские дела сегодняшним текстом значило бы применить к событию норму, которой на дату события не существовало, и ни одна из двух мер §33.1 этого бы не показала: обе меряют против закреплённых байтов, а байты были бы «правильные», только не те. Снимки в форме id_ приколочены каждый своей меткой: Закон о ЧП — 2022-01-04 21:05:15 (канун введения режима), Закон о противодействии терроризму — 2022-01-19 07:37:40, Закон о правоохранительной службе — 2022-01-08 04:15:25.

    Семь расхождений с ходячим изложением, найденных сверкой по байтам. (1) Указов о введении ЧП было СЕМНАДЦАТЬ, а не два и не один: № 725, № 726, № 727 и № 732–745 — по числу областей и городов республиканского значения (14 + 3); общенационального указа не существует. (2) Номера, названные в задании, оказались чужими: № 745 — Северо-Казахстанская область, № 746 не существует вовсе. (3) Режим — с 01:30 5 января до 00:00 19 января, а не до 19:00 и не с 4 января. (4) В пятнадцати единицах ЧП отменено досрочно указами от 12–15 января; в Алматы и Мангистауской области отменяющего указа нет — режим прекратился истечением срока (п. 2 ст. 7), и потому закреплены именно эти два. (5) Режим второго рода называется АНТИтеррористической операцией: «КТО» — термин соседнего правопорядка, и его правовой режим живёт в ст. 15 и 15-1, а не в ст. 13 (та об оперативных штабах). (6) Условия применения оружия стоят в ст. 61 и 62, а не в одной ст. 61. (7) Закон о Совбезе — № 178-VI от 05.07.2018, поправки — Законом от 07.02.2022 № 106-VII.

    ГЛАВНАЯ НАХОДКА: ТРИ РЕЖИМА НЕ СОВПАДАЮТ, И РАЗЛИЧИЕ ИСПОЛНЯЕТСЯ. Чрезвычайное положение обязанности предупредить перед применением оружия НЕ снимает — ст. 19 Закона о ЧП говорит прямо, что условия и пределы применения оружия «изменению в условиях чрезвычайного положения не подлежат». Снимает её режим антитеррористической операции, и только при ТРЁХ посылках сразу: зона операции, участие лица в операции, установленный статус террориста (подп. 7) п. 1 ст. 15-1). Отдельно п. 4 ст. 12 разрешает ликвидацию «без переговоров и предупреждения» при явной угрозе охраняемому лицу И невозможности устранить её иными законными средствами И по распоряжению руководителя операции. QAN-14…QAN-17 подают ОДНО применение оружия в четырёх мирах и получают четыре ответа.

    Приказ «огонь на поражение без предупреждения» от 07.01.2022 нормой пакета НЕ является. Предикат объявлен, чтобы ДЕЛО могло о приказе сказать, и не читается ни одним правилом: приказ не есть нормативный правовой акт, и вывести из него правомерность применения оружия значило бы приписать ему силу, которой закон ему не даёт. QAN-17 подаёт его вместе со всеми фактами QAN-16 и требует, чтобы ответ НЕ ИЗМЕНИЛСЯ — то есть «приказ ничего не меняет» стало проверяемым, а не заявленным.

    Найдено этой формализацией: проекция §31 снимала весь срез законов МОЛЧА. Первый прогон процессного слоя дал «переход недоступен» на каждом шаге при полностью верных фактах. Причина — машина D1 читает только ОТКРЫВАЮЩЕЕ событие lifecycle, а adopted/published применимости не дают: редакция без in_force считается not_yet на любую дату, и проекция снимала 126 узлов из 432 — весь срез трёх законов. lawc check, lower, регрессия и differential при этом были зелены, потому что обычный evaluate() не проецирует вовсе. Починено объявлением окон; верхняя граница окна НЕ объявлена и названа границей: дату, когда январская редакция перестала быть действующей, закрепить нечем — редакционный аппарат портала в закреплённые байты не входит по построению. Вторая находка того же прогона: экземпляр процедуры инструмент утверждает entity_ref-ом, поэтому журнал, называющий тот же предмет const_ref-ом пакета, не унифицируется, и все переходы остаются недоступными без единого сообщения.

    Процессный слой О-5 и ось редакций. lawref process — одна процедура, 7 состояний, 7 переходов, структурных дефектов нет; process-run по журналу января в Алматы (введение ЧП → режим АТО → обращение к ОДКБ → прибытие сил → объявление о выводе → истечение срока 19.01) даёт вердикт CLEAN с достигнутым терминальным состоянием, а единственный недоступный шаг на последнем кадре — досрочная отмена по ст. 9, чьё условие не наступило. lawref impact-editions на 2022-01-10 → 2022-03-01: редакция 2018 года applicable → closed, редакция 2022 года not_yet → applicable, оба указа applicable → closed; из четырёх сценариев исход меняют три, включая пожизненное председательство Елбасы.

    Ось редакций держится СТРУКТУРНО, а не датировкой. Обычный evaluate() редакции не разделяет (фильтрует только явная проекция §31), поэтому каждое расходящееся отношение объявлено дважды с суффиксом редакции — приём, вынесенный из russkaya-pravda. Одно и то же дело без согласования Председателя даёт NEITHER по редакции 2018 года и TRUE_ONLY по редакции 2022-го на ПОЛНОМ документе. Совпадающие статьи (2, 3, 5, 6, 8 — сверено срезами побайтно) в охват не входят: формализовать их значило бы удвоить одно и то же без единого различия на делах.

    Мост в Договор — типизированная межпакетная ссылка, и у мостового правила НЕТ @source-якоря сознательно. Перечень статьи 14 Закона о ЧП состоит из органов Республики Казахстан (ОВД, национальной безопасности, гражданской защиты, «другие государственные органы», Вооружённые Силы по указу для пяти названных задач, Пограничная служба только для охраны границы); иностранных либо союзных контингентов он не знает вовсе. Основание пребывания коллективных сил лежит в статье 4 Договора, и правило читает ВЫВОД чужого пакета (intl.csto.tashkent_treaty::aggression_established). Якорь на CHP_ART14 приписал бы статье 14 то, чего в ней нет, и обе меры §33.1 этого бы не заметили.

    Измерено: lawc check чист, lint.py — 0 замечаний; глубина §33.1 подокументно — Закон о ЧП EXECUTABLE 12 из 12 статей охвата, каждый указ 6 выводимых пунктов и 2 адресуемых из 8, остальные документы по 3 из 3 (в храповике стоит число ПЕРВОГО документа — ограничение меры, названное в титуле); 91 норма, мёртвых 0; разметка §218 полная (160 объявлений, 91 норма, ноль без метки; остаток 6 — профиль процедуры §160); 25/25 сценариев, 4/4 теста §267, 58 evaluate-вызовов байтово идентичны lawref ↔ lawc; check_lower, check_dead_rules, check_dead_symbols, check_label_coverage, check_stratum_barrier, check_interpretation_gate, check_verbalization_totality, check_package_metadata, check_process, check_registry_index зелены; индекс реестра пересобран (103 пакета); doctor.py qantar-2022 — «пробелов нет».

  • Стамбульский проект договора (15.04.2022) формализован целиком — 18 статей из 18, и это ПЕРВЫЙ АКТ КОРПУСА, НИКОГДА НЕ ВСТУПАВШИЙ В СИЛУ ПО СОБСТВЕННОЙ ПРОЦЕДУРЕ (пакет intl.draft.istanbul_2022). Соседи по статусу never_enacted — de-legibus и valikhanov-note — не вступали в силу потому, что не были актами; этот БЫЛ бы актом: у него есть стороны, ратификация, депозитарий, регистрация по статье 102 Устава ООН и собственная лестница вступления в силу (ст. 17). Пакет устроен так, чтобы невступление было ВЫЧИСЛЕНО: ни одна оперативная норма не применяется без bound_by_treaty, выводимого только статьёй 17, и дело без контрфактических фактов подписания не даёт ни одной позиции (сцена IST-01). Разметка спора ИЗМЕРЕНА ПО ФАКСИМИЛЕ, а не прочитана автором. Легенда первой страницы объявляет три класса — красный курсив (позиция РФ, не согласованная украинской стороной), красный прямой (позиция УС), чёрный курсив (вопросы, которые УС отказывается обсуждать); corpus/tools/fetch_istanbul_draft_2022_text.py --check считает долю красных пикселей в рамке каждого слова и сдвиг, максимизирующий вертикальные штрихи (прямое начертание даёт максимум на 0.00, курсив — на 0.24…0.28), и падает, если объявленный разбор разойдётся с измеренным. Найдено так: десять спорных мест в теле договора и состав третьего класса — статьи 6, 7, 12 и 13, набранные курсивом целиком (соседние 11 и 14 на тех же страницах — прямым). Ядро — вето агрессора. В статью 5 красным курсивом вписаны семь слов: «на основе согласованного всеми Государствами-гарантами решения», а Россия — Государство-гарант по той же статье. Пакет не утверждает этого прозой: одно и то же дело (нападение, консультации в трёхдневный срок, официальное обращение Украины) при двух прочтениях даёт обязанность гаранта ACTIVE либо не даёт позиции ВОВСЕ (IST-05/IST-06), а на том же деле с установленным отказом помочь — VIOLATED против пустого множества (IST-08/IST-09). Тем же курсивом помечено «(включая Россию)» в условии вступления в силу (ст. 17 п. 3), тогда как в п. 1 те же слова ЧЁРНЫЕ: спор шёл не об участии России во временном применении, а о её праве заблокировать само вступление договора в силу — второе вето, измеренное типографикой (IST-23/IST-24). Прочтения выражены парами правил с выбором в деле, а не interpretation §152, и различие содержательное: у соседа minsk-package-2015 документ МОЛЧИТ о порядке пунктов, и два прочтения — доктринальные конструкции над одним текстом; здесь в документе стоят ДВА ТЕКСТА, каждый со своим автором, и ни один не является толкованием другого. Приложение 6 (карта) в факсимиле отсутствует, а ссылаются на него четыре нормы (ст. 2 п. 1 «j», ст. 5, ст. 9, п. 3 Приложения 5): объявлено редакцией UNAVAILABLE, принадлежность территории к карте выражена каналом суждения §47.3 с authority — комиссией статьи 14 (орган назван договором, а не выбран формализацией), и запрос даёт REQUIRES_JUDGMENT, а не молчание. Измерено: глубина §33.1 — EXECUTABLE 18, ANCHORED 0, SOURCE_ONLY 0; 24/24 сценария, все 24 evaluate-вызова байтово идентичны lawref ↔ lawc; мёртвых правил 0, мёртвых символов 0 (ворота нашли три объявленных и не читаемых предиката — все три оказались НЕ написанными нормами ст. 1 «а», ст. 1 «b» и ст. 16 п. 1 абз. 2, и написаны); разметка §218 — 160 объявлений и 192 нормы, неразмеченными остаются шесть узлов профиля процедур; одна A3-таблица Приложения 1 (42 строки, unique, без total — у семи классов позиции Украины нет вовсе); doctor.py без пробелов. Источник — самая тонкая часть. Официального опубликования у неподписанного проекта нет и быть не может; закреплены байты, извлечённые СВОИМ OCR (tesseract 5.5.1, 300 dpi) из факсимиле русского подлинника, опубликованного The New York Times 15.06.2024. Текстового слоя у русских файлов нет — в потоке страницы стоит буквально <3F3F3F3F>, то есть OCR газеты кириллицу потерял. Адреса всех пяти опубликованных документов переговоров названы ТРЕТЬЕЙ стороной (комментарий NIDS № 370 от 15.04.2025) и пиннятся хэшами, поэтому ссылка проверяема независимо от газеты. Квирки OCR сохранены дословно и не правятся ни в одном месте: «Статья12» слитно — свойство ДОКУМЕНТА (воспроизводится всеми режимами tesseract и видно глазом на стр. 8), и ради него в обе меры §33.1 добавлена объявляемая единица ru_article_standalone, требующая заголовка на строке ОДНОГО и без точки: автоконвенция считала бы статьями ЦИТАТЫ чужих законов в Приложениях 2 и 3 («Статья 7. Язык образования») и дала бы знаменатель 25 вместо 18.

  • Стамбульское коммюнике 29.03.2022 формализовано целиком — 11 пунктов из 11 — и служит МЕРИЛОМ для проекта договора (пакет intl.draft.istanbul_communique_2022). Само по себе оно обязательств не создаёт и говорит о себе «Договором предполагается», поэтому почти вся его формализация — институциональные предикаты, а не деонтика; единственная обязанность взята из пункта 10, где сказано о самих сторонах в настоящем времени («Стороны продолжат консультации»). Ценность пакета в ДЕЛЬТЕ, и она измерена дважды. В байтах — ворота corpus/tools/check_istanbul_negotiation_delta.py (шаг в ci/run_all.sh) держат пять правок и пять дословных совпадений: оговорка «на основе согласованного всеми Государствами-гарантами решения» и «(включая Россию)» в условии вступления в силу ПОЯВИЛИСЬ после коммюнике, а переговорное окно по Крыму в 10 (вариант — 15) лет, отказ решать вопрос Крыма военным путём и встреча президентов по оставшимся вопросам ИСЧЕЗЛИ; совпадения (трёхдневный срок консультаций, формула обращения Украины, перечень мер) проверяются наравне с расхождениями — если разойдутся и они, сравнение исходов мерило бы разницу формализаций, а не разницу текстов. В исходах — сцены ICOM-13…ICOM-15 прогоняют ОДНИ И ТЕ ЖЕ факты через ОБА пакета (раннер объявлен на двух CLIR): по коммюнике обязанность гаранта возникает, по проекту при прочтении РФ — нет. То есть вето агрессора не «осталось несогласованным»: его не было 29 марта и оно появилось к 15 апреля, а поимённые меры (закрытие воздушного пространства, предоставление вооружения), стоявшие в СОГЛАСОВАННОМ перечне коммюнике, в проекте помечены как позиция одной стороны — правка в обратную сторону, отзыв согласия. Ещё одна пара, которую видно только рядом: порог срабатывания сузился с трёх оснований (агрессия, любое вооружённое нападение, любая военная операция) до одного. lawref impact здесь неприменим, и это свойство инструмента, а не пробел работы: отчёт О-1 сравнивает два IR ОДНОГО инструмента — сценарий адресует предикаты полным URN, то есть живёт внутри одного namespace, — а коммюнике и проект суть разные документы с разным составом и разными единицами деления; свести их в один namespace значило бы объявить редакциями одного акта два разных документа и получить diff, в котором «удалено всё, добавлено всё». Измерено: глубина §33.1 — EXECUTABLE 11, ANCHORED 0, SOURCE_ONLY 0; 15/15 сценариев; разметка §218 — 56 объявлений и 32 нормы, неразмеченных НОЛЬ; мёртвых правил 0, двенадцать мёртвых констант закрытого перечня §70 вписаны в dead-symbols.json с причиной на каждую; doctor.py без пробелов. Локатор пункта — article/N при unit: point: конвенция корпуса (так устроен martial-law-1941), и point/N не свёлся бы ни у одной из двух мер §33.1 — пакет показал бы «вне пакета 11» при полностью выведенных пунктах.

  • Найдено и измерено на нём же: у акта, никогда не вступавшего в силу, проекция as-of §31 пуста на ЛЮБУЮ дату. impact.edition_projection снимает нормативный узел, все якоря которого ведут в неприменимые на момент редакции; у этого пакета из 401 узла остаётся 216, снимая ВСЕ 185 заякоренных, и на 2022-04-18, и на 2026-08-29. Это верно о предмете, а не дефект инструмента, но у него есть неочевидная цена, названная теперь прямо: всё, что построено поверх проекции, на таком акте вырождается. lawref process-run продвигает автомат только по тем гардам переходов, которые дело утверждает ФАКТОМ (выводимое правилами для проекции не существует), а lawref loophole отвечает «путей к цели без единого VIOLATED не найдено» за два вызова evaluate — не потому, что лазейки нет, а потому, что ищет в мире без норм, где нечего нарушать. Обе находки записаны там, где на них наткнутся: в journals/counterfactual-ratified.json и analysis/loophole-goal.json (файл сохранён ВМЕСТЕ с отрицательным результатом, а не выброшен). Сама лазейка показана исполнением — сценами IST-08/IST-09, где право берётся не проекцией.

  • Учёт статей §33.1 стал зелёным целиком: починены два давно красных пакета (107 пакетов, 167 закреплённых публикаций, нарушений 0). health-code — официальный API zan публикует статью 270-2 Кодекса о здоровье с заголовком «270-2.», без слова «Статья»; байты не правятся (свойство ПУБЛИКАЦИИ, фрагмент обязан остаться её точной подстрокой, LDC-E5202), а факт этот знали двое из троих: генератор фрагментов и мера глубины (вшитая HEALTH_CODE_UNNAMED_ARTICLE_RE, применявшаяся к каждому русскому акту), тогда как учёт статей — нет. Две меры §33.1 расходились на единицу (299 против 298), и фрагмент article/270-2 попадал в «фрагменты вне объявленного охвата». Введено поле irregular_headings в articles.json акта (номер учёта → заголовок, как он набран в публикации) по образцу таблиц ordinals/headings; читают его ОБЕ меры, вшитая копия удалена, объявление живёт в генераторе (articles.json этого акта — порождаемый файл). Заголовок дописывается и в ОБРЫВ среза — иначе статья 270-1 проглатывала бы 270-2 и получала её признаки. locke-treatise — семнадцать секций объявлены вне охвата при признаках исполнимого содержания в тексте; каждой написан despite, называющий свой признак и его роль: авторское будущее («we shall find»), логическая и контрфактическая необходимость («there must of necessity be a means to appropriate»), условие довода («as if those who had the greatest privileges…»), чужая речь и риторический вопрос (оговорки Барклая §235, «Must the people then always lay themselves open…?» §233). Где признак указывает на уже формализованную норму, despite называет правило (§§214–217, ForceAgainstLawMakesTheRebel §226, ForceWithoutRightMayBeResisted §232, WhereAuthorityCeasesTheKingCeases §239). Канарейка ворот выросла с 7 ступеней до 10.

  • Формализован «Комплекс мер по выполнению Минских соглашений» (Минск, 12 февраля 2015 года) — первый акт корпуса, чья главная структура есть ПРОЦЕСС, а не перечень норм (пакет intl.minsk.package_2015, corpus/laws/minsk-package-2015/; юрисдикция International, НЕ Республика Казахстан). Формализованы все 13 пунктов и примечание к пункту 11; глубина §33.1 — EXECUTABLE 13, ANCHORED 0, SOURCE_ONLY 0; байтовое покрытие 99,9 % (11 856 из 11 872); differential 53/53 байтово.

    Порядок задан САМИМ документом, и потому восстановим механически. Три фразы внутри его текста — «с первого дня отвода» (п. 3), «в первый день после отвода» (п. 4) и «в первый день после местных выборов» (п. 9) — образуют каркас, и procedure §160 в 08-process.law его записывает: lawref process восстанавливает из CLIR семь стадий, шесть переходов и начальную стадию Signed без единой структурной находки. Терминальность НЕ объявлена ни у одной стадии: документ конца не называет (пункты 5, 7, 8, 10 и 13 срока не имеют вовсе и «после» границы не встают никуда), и BorderControlRestored приходит заметкой SINK_STATE — что верно, потому что маркер terminal §160 в узлы CLIR не эмитируется и законность терминала по ним не видна.

    Спор о последовательности записан ДВУМЯ прочтениями, а не выбором автора, и расхождение ИЗМЕРЕНО тремя инструментами. Пункт 9 ставит восстановление контроля над государственной границей под три условия; пункт 10 (вывод иностранных вооружённых формирований, разоружение незаконных групп) не поставлен ни под какое условие и срока не имеет. Отсюда весь спор — предшествует ли пункт 10 выборам, — и текст не отвечает. SecurityFirstReading и LiteralOrderReading (обе status disputed, группа с selection any_of) дают ЕДИНСТВЕННЫЙ различающий их предикат elections_precondition_met, которого базовая теория не выводит вовсе. На ОДНОМ И ТОМ ЖЕ деле: local_elections_valid — TRUE_ONLY против NEITHER (сцены KZ-MINSK-33/34), full_border_control_due — TRUE_ONLY против NEITHER (37/38), позиция RestoreFullBorderControl — ACTIVE против ОТСУТСТВИЯ (39/40). На ОДНОМ И ТОМ ЖЕ журнале дела lawref process-run расходится траекторией: BorderControlRestored против остановки на DialogueOnElections. Профиль аргументации §274 даёт SKEPTICALLY_ACCEPTED против NO_ARGUMENT. Всё это сторожит corpus/tools/check_minsk_readings.py, который вдобавок сверяет, что входы двух прогонов различаются РОВНО опциями: иначе расхождение прочтений можно было бы объяснить разницей фактов. Без выбора прочтения документ молчит — и это его ответ, а не пробел формализации (KZ-MINSK-35).

    Граница спора измерена, а не объявлена. Второй журнал отличается от первого двумя фактами о пункте 10 — и на нём прочтения СХОДЯТСЯ, оба доводят дело до конца. Спор существует ровно в той области, где пункт 10 не выполнен.

    Граница профиля §274 названа прямо. Спросить его о самом пункте 9 нельзя: цепочка до full_border_control_due идёт через правила с арифметическими гардами (days_between в пунктах 2, 3, 4, 6, 9) и через отрицание по умолчанию (not_known в примечании к пункту 11), а §274.1 берёт только конъюнкции литералов — 42 правила акта уезжают в skippedRules, и ответ становится NO_ARGUMENT при ЛЮБОМ прочтении. Измерено, а не предположено: спор виден профилю на уровне local_elections_valid, где цепочка чисто конъюнктивна.

    A3-таблица зоны безопасности, unique + total: true. Пункт 2 различает три класса тяжёлого вооружения и три ширины зоны (50, 70, 140 км); строки попарно непересекаемы и покрывают область ДОКАЗУЕМО. ПОРОГ КАЛИБРА 100 мм СТОИТ В ГАРДЕ, А НЕ КОЛОНКОЙ, и это решение, а не удобство: колонка Integer при total: true потребовала бы выдать ствольной артиллерии калибром меньше 100 мм какое-то число, а пункт 2 не устанавливает ей зоны НИКАКОЙ, и ноль был бы выдумкой. Отказ приходит отсутствием вывода (KZ-MINSK-10), а таблица остаётся полной по двум признакам, которые различает сам документ.

    Три срока из одного пункта считаются ТРЕМЯ разными способами, и смешать их нельзя. «Не позднее второго дня после прекращения огня» отсчитывается от даты, которую называет сам документ, и потому записан ЗАКРЫТЫМ ОКНОМ [@2015-02-15, @2015-02-18); «завершиться в течение 14 дней» отсчитывается от факта дела и потому записан термом days_between; «00 ч. 00 м. (киевское время) 15 февраля 2015 года» — МОМЕНТ, литерал §19 @2015-02-15T00:00:00+02:00 в терм-позиции (второй такой случай в корпусе после часа капитуляции Германии). Смещение +02:00 — не догадка: летнее время в Украине в 2015 году началось 29 марта. Дневные сроки считаются days_between, а не add_business_days: дневной шаг §86 требует снимок календаря §85 ВСЕГДА (errata E-0029), а календаря нерабочих дней ни для одной стороны Комплекса не устанавливает ни один закреплённый источник. Границы проверены ЗНАЧЕНИЕМ — 14-й день против 15-го, 30-й против 31-го, пятый против шестого.

    Прекращение огня VIOLATED не бывает, и это сказано прямо, а не обойдено. Воздержание §130 в срезе 0.1 знает только ACTIVE и EXPIRED: обнаружение контрдействия требует событийной модели §79. Сцена KZ-MINSK-05 подаёт применение силы внутри режима, требует ACTIVE и УПАДЁТ, если однажды придёт VIOLATED. Нарушаемость показана там, где она честна, — на достижительных пунктах со сроком: пара KZ-MINSK-30/31 стоит по обе стороны §136 (дело 2 января 2016 года без факта об исполнении даёт UNDETERMINED, то же дело с ОТРИЦАТЕЛЬНЫМ фактом — VIOLATED; EXPIRED у достижительной цели не бывает вовсе).

    У большинства пунктов адресат НЕ НАЗВАН, и пакет его не придумывает. Документ написан безличными оборотами («Обеспечить эффективный мониторинг», «Определение модальностей», «Вывод всех иностранных вооруженных формирований»): кто обязан — не сказано ни разу. Носителем таких обязанностей выступает переменная, связанная ЭМПИРИЧЕСКИМ предикатом implementing_party — фактом ДЕЛА, а не фактом пакета; где адресат назван (ОБСЕ, Верховная Рада Украины, Украина, правительство Украины, Трёхсторонняя контактная группа), там стоит константа. То же и в подписях: трое подписантов названы с должностями, двое — без, и пакет эту неоднозначность документа НЕ ЧИНИТ.

    Закреплён русский текст документа ООН под символом S/RES/2202 (2015) в формате .doc, а не .pdf, и причина названа в шапке corpus/tools/fetch_minsk_package_text.py: в PDF текст выключен по ширине разрядкой, и pdftotext 25.06.0 ставит пробел ВНУТРИ слова более чем в сорока местах («в отдельных ра йонах», «Луга нской областей»). Это дефект извлечения, а не свойство публикации — в отличие от квирков npt-1968 и rome-statute-1998, где другой копии не существует. Оба шага (загрузка и конвертация LibreOffice 26.2.3.2) измерены на повторе и байтово стабильны. Закрепление объявлено срезом: резолюция 2202 (2015) и приложение II (декларация «нормандской четвёрки») в него не входят — это акты других органов с другим кругом авторов.

    Метки §218 сверяются с источником подпоследовательностью (corpus/tools/check_minsk_labels.py, шаг 18/43). На первом прогоне — 19 расхождений: четыре оказались настоящими искажениями цитаты (изменённый падеж, переставленные слова), остальные — метками-ОПИСАНИЯМИ, которые теперь отличаются от цитат формой локатора: Пункт N. объявляет цитату и сверяется, Пункт N — объявляет описание и не сверяется. Сверка здесь надёжнее глаза по отдельной причине: в пункте 8 слово «социально-экономических» несёт МЯГКИЙ ПЕРЕНОС U+00AD, который §13 запрещает вычищать и который не отображается ничем, — перепечатанная руками цитата разошлась бы с источником НЕВИДИМО.

    53 сценария (corpus/kz/acts/minsk_package.py), 2 рукописных .lawtest, шесть прогонов журнала и пять вопросов §274 под воротами. Темпоральный статус — in_force с 12.02.2015 БЕЗ даты конца: акта, прекращающего действие, не существует, и события 2022 года закреплённых байтов не касаются (прецедент осознанного открытого in_force — victory-day-1945).

  • Сторож «заголовок единицы деления не с начала строки» обобщён с одного акта на весь корпус (embedded_headings() в ci/check_source_pinning.py, обещание 4 ворот; канарейка --canary из 7 ступеней и строка в ci/run_all.sh перед шагом 18/43). Обе меры §33.1 узнают единицу ОДНИМ И ТЕМ ЖЕ якорем начала строки, поэтому склейка в закреплённом извлечении («Глава 4. Сделки Статья 147. Понятие сделки» в ГК РК) отнимает единицу у обеих разом: генератор фрагментов не видит границы и отдаёт текст статьи соседке, а учёт не знает о статье вовсе — при зелёном lawc check, покрытии 99,1 % и нулевом missing. Выражение «якорь снят» ВЫВОДИТСЯ из scan конвенции, а не пишется парой рядом: разойдись копии — сторож искал бы не тот заголовок, который считает учёт, и молчал бы, выглядя работающим. Прогон по корпусу — 168 закреплённых документов, 109 с опознанной единицей, 0 находок; воронка сит 120 → 66 → 23 → 0 (перекрёстные ссылки, цитаты чужих статей в законах о поправках, голые номера). Одиннадцать конвенций объявили отказ ПРИЧИНОЙ в поле no_embedded_probe (маркер — голый номер: «© 2012. РГП…», «the 8. day of May», «Cardiac index less than 1.8 L/min/m2»), а convention_probe_registry() требует от каждой из 30 конвенций либо якоря ^, либо названной причины и сверяется ДО корпуса. Умолчание поля намеренно громкое: новая конвенция получает сторож сама.

  • Формализована «Антигона» Софокла (ок. 441 до н. э.) — первый акт корпуса, где ДВА нормативных порядка спорят об одном предикате и ни один не побеждает (пакет grc.sophocles.antigone, corpus/laws/antigone/; правопорядок самой трагедии — none, указа Креонта — Thebes, диегетический). Формализованы указ Креонта (ст. 21–36, 194–206), его санкция и её замена (35–36, 770–776), отмена (1100–1112) и неписаные законы богов ἄγραπτα κἀσφαλῆ θεῶν νόμιμα (450–460).

    Коллизия — это ОТВЕТ ДВИЖКА, а не дефект модели, и она сторожится по структуре. Без выбора прочтения вопрос «должно ли Антигоне погрести Полиника» получает truthStatus: BOTH при evaluationStatus: COMPUTED, а в evaluation-документе стоит запись conflicts с unresolvedReason: INCOMPARABLE, поимённо названными соперниками (OfficiumSepeliendi против KerygmaVetatSepelire) и ПУСТЫМИ defeatedCandidates/priorityEdges. Сценарий ANT-02 проверяет все пять условий: ослабь любое — и он зазеленеет на модели, которая коллизию просто не собрала. Контроль ANT-01 держит обратное: на Этеокле оба порядка велят одно, TRUE_ONLY, коллизии нет ни одной.

    UNRESOLVED_NORMATIVE_CONFLICT здесь НЕ ВОЗНИКАЕТ, и это не пробел. Статус §175 Core возвращает на пути эффектов §127 (несравнимая пара power/immunity), а не на обычном запросе истинности; несравнимость правил сообщается записью conflicts. Ожидание кода §127 сторожило бы не тот механизм, и это сказано прозой пакета, а не оставлено на догадку.

    Спор Креонта и Антигоны — спор о МЕХАНИЗМЕ разрешения, и различие измерено. Три прочтения (interpretation со status disputed, все три вне базовой теории): KreontisRatio — приоритет §116 на основании ст. 666–667 («кого поставит город, того должно слушать и в справедливом, и в противоположном»); AntigonesRatio — НЕДЕЙСТВИТЕЛЬНОСТЬ на основании ст. 453–455 («не думала я, что твои провозглашения имеют такую силу, чтобы смертный мог ими превзойти неписаные законы богов») — правило бьёт по ПОСЫЛКЕ указа, а не по его выводу; HaimonisRatio — та же недействительность с другим основанием (ст. 737: «не город тот, который принадлежит одному»). Различить их по знаку ответа НЕЛЬЗЯ (у Антигоны и Гемона он один), и по записи conflicts тоже нельзя — решённая коллизия из списка уходит совсем, список ведёт только нерешённые (измерено). Различает их посылка kerygma_obligat: TRUE_ONLY у Креонта против FALSE_ONLY у двух других.

    Доводы Антигоны и Гемона — ДВА довода, а не один, и это доказано делом. Креонт — гражданин Фив, но Полинику не родич; довод Гемона его указ не связывает, довод Антигоны на нём не применим вовсе. Слейся они — эта пара ответов стала бы одинаковой (ANT-05).

    Агон как карта спора §274. Профиль structured argumentation даёт четыре РАЗНЫХ класса ответа §274.6 на один вопрос: базовая теория — CREDULOUSLY_ACCEPTED (16 допустимых позиций, 8 спорных аргументов: обязанность лишь защитима); прочтение Креонта — REJECTED; прочтения Антигоны и Гемона — SKEPTICALLY_ACCEPTED при одной допустимой позиции и пустом grounded.undec. Класса ответа в baseline-документе нет вовсе: BOTH говорит «оба», класс говорит, ПОЧЕМУ оба.

    Отмена указа меняет право, но не исход трагедии. Указ заведён ОТДЕЛЬНЫМ source_work с тремя редакциями на условной шкале (@1000-01-01 провозглашение, @1000-01-02 замена санкции, @1000-01-03 отмена и обратный приказ), неписаные законы — третьим источником с in_force (-infinity, infinity) — прямой записью ст. 456–457 («не ныне и не вчера, а всегда живут они»). Проекция as-of §31 по трём датам (ANT-08): санкция меняется с побиения камнями на замуровывание, запрет живёт, после отмены — TRUE_ONLY без единой коллизии и новая обязанность освободить замурованную. ANT-08B держит вторую половину утверждения: сняты ИМЕННО нормы указа, а шесть норм двух других порядков остались, — иначе «после отмены запрета нет» доказывалось бы и пустым миром.

    Условная шкала объявлена условной. Дат до нашей эры язык не выражает (§19 — пролептический григорианский календарь от года 1), и год 1000 выбран как заведомо ни с чем не спутываемый; конвенция записана в 01-sources.law, в law.toml и в титуле PACKAGE_TITLES.

    Три источника в одном пакете, и у двух из них байтов не существует. Трагедия закреплена ДВУМЯ изданиями (греческий текст Storr, Loeb 1912, и английский перевод Джебба 1891 — оба PINNED_UNOFFICIAL_COPY, оба по КОММИТУ Perseus, а не по ветке); указ Креонта и неписаные законы богов — ABSTRACT_ONLY: провозглашены устно и дошли только пересказом внутри трагедии. Каждое правило заякорено ДВАЖДЫ — в стих (провенанс и мера §33.1) и во фрагмент редакции своего порядка (датировка): у редакций трагедии lifecycle нет вовсе, поэтому проекция §31 удерживает норму только якорем её собственного порядка.

    Единица деления — СТИХ, и конвенция заведена под неё (unit: "line" в обеих мерах §33.1). Охват §33.1 объявлен СПИСКОМ из 83 стихов, а не словом whole: из 1252 пронумерованных стихов норму говорят 64, ещё 19 называют обстоятельства, к которым нормы применяются. Объявить охватом всю трагедию значило бы обещать формализацию хора и плача. Глубина: EXECUTABLE 61, INTERPRETED 3, ANCHORED 19, SOURCE_ONLY 0, ноль объявленных границ; байтовая доля 6,1 % и обязана быть низкой — она говорит, сколько трагедии есть право.

    Греческий набор признаков исполнимого содержания заведён в ci/check_source_pinning.py (OPERATIONAL_MARKERS/DELEGATION_MARKERS, язык grc): деонтика греческой нормы есть ЛЕКСИКА права и культа (κήρυγμα, νόμος/νόμιμα, χρή/δεῖ/ἀνάγκη, отглагольное на -τέον, θέμις/ὅσιος/ἄγος/μίασμα, κτερίζειν/ἄταφος), а не модальное слово. Императив взят только в неспутываемых формах третьего лица: голое -τω пробовалось и отвергнуто замером — оно ловит дательный двойственного «κασιγνήτω» (ст. 21), то есть объявляло бы признаком деонтики слово «брат». Контроль — десять нормативных отрывков, из которых пакет выводит правила: набор находит признаки во всех десяти и молчит на 90 % стихов.

    Пропущенную посылку нашли ворота, а не чтение. ci/check_dead_symbols.py назвал мёртвым предикат kerygma_novit — и это оказалось не мусором: Креонт спрашивает о знании запрета ОТДЕЛЬНЫМ вопросом перед приговором (ст. 447), значит от ответа что-то зависит. Знание вписано элементом состава обеих санкций, охват расширен на ст. 441–443 и 446–448, добавлена пара дел «знала / не знала» (ANT-06B).

    Различие МОЛЧАНИЯ и ОТКАЗА на Исмене (ANT-07): позиция у неё та же, что у Антигоны (обязанность перед богами и связанность указом), деяния нет. Побиение камнями даёт NEITHER — право о ней молчит (первая редакция изъятия не знала); замуровывание даёт FALSE_ONLY — Креонт сказал «οὐ τήν γε μὴ θιγοῦσαν», не ту, что не коснулась. Слить эти два ответа значило бы потерять ст. 770–771 целиком.

    Лазейка Креонта и канал суждения §47.3. Замуровывание с ритуальной пищей «чтобы город избежал скверны» (ст. 775–776, 889) записано НОРМОЙ, а не упрёком: до ответа прорицателя urbs_pura_est = TRUE_ONLY — лазейка работает. Чистота города объявлена external judgment relation с органом Mantis: прямой вопрос даёт REQUIRES_JUDGMENT с типизированным запросом, ответ прорицателя (ст. 1064–1071) закрывает лазейку по существу — FALSE_ONLY. Тот же результат независимо нашёл lawref loophole: путь к «чистоте» в один шаг с пометкой «существенно окно дат».

    Известная граница названа и осторожена, а не спрятана (ANT-10): канал §47.3 пробрасывается сквозь тело правила ТОЛЬКО у строгого правила с литеральной головой. PoenaAntidosis сделан strict вынужденно; MiasmaNonVitatum (defeasible, отрицательная голова) канал теряет, и сценарий сторожит обе половины — заработай канал через defeasible, тест обязан упасть, чтобы оговорка не осталась устаревшей.

    Дефект ворот, найденный этим актом и закрытый. boundaries.py читал объявленный scope только с верхнего уровня articles.json — у акта в форме {"editions": [...]} охват молча оказывался НЕ ОБЪЯВЛЕННЫМ, и все единицы вне него печатались «кандидатами на формализацию». Цена измерена здесь: 1169 стихов хора и плача выдавались за недоделку при полностью покрытом охвате. Починка попутно вернула leges-xii-tabularum пять честно объявленных границ, которые тем же образом показывались недоделкой.

    Ловушка чтения differential, стоившая времени и записанная поимённо. Обёртка ci/check_kz_differential.py отказывается сверять вызов, у которого options переданы аргументом evaluate, но отсутствуют в case.options (оракул читает их аргументом, lawc eval — только из case.options). Ворота честны: пишут FAIL: и возвращают 1. Обманывает последняя строка — «N evaluate-вызовов байтово идентичны» печатается ВСЕГДА, до проверки списка отказов, и на хвосте вывода красный прогон неотличим от зелёного. Здесь так прошли незамеченными 14 вызовов из 38 — все с выбором прочтения и капами §274, то есть ровно те, ради которых пакет заведён. Признак без чтения всего вывода: число сверенных вызовов НЕ РАСТЁТ при добавлении сценариев. Починка на стороне акта — options кладутся в обе стороны, как у japan_constitution_art9.

    Проверки: lawc check и lawc lower чисты, CLIR байтово совпал с закоммиченным, регрессия 13/13, differential 38 вызовов байтово (lawc eval == lawref), .lawtest 4/4, закрепление — 0 проблем, check_dead_rules и check_verbalization_totality чисты, doctor.py antigone: пробелов нет.

  • Формализовано Нахичеванское соглашение о создании Совета сотрудничества тюркоязычных государств (Нахичевань, 3 октября 2009 года) — учредительный договор Организации тюркских государств — в ОБЕИХ закреплённых редакциях (23 статьи из 23 в каждой) вместе с Протоколом от 11 ноября 2022 года (13 статей из 13) (пакет intl.turkic.nakhchivan_2009, corpus/laws/nakhchivan-2009/, юрисдикция International). Ратифицировано РК Законом от 27.09.2010 № 341-IV, Протокол — Законом от 23.05.2025 № 191-VIII с заявлением о толковании его статьи 10.

    Первый пакет корпуса с ДВУМЯ ЖИВЫМИ редакциями одного действующего текста. Один source, два edition со смежными непересекающимися окнами, обе редакции — с официального портала «Әділет». Непересечение окон несущее: boundaries.py разводит «свои»/«чужие» фрагменты редакций одного work именно пересечением периодов, и общее окно завысило бы глубину §33.1 у обеих молча.

    Восемь статей расходятся НА ДЕЛЕ, и каждое расхождение проверяется парой сцен на ОДНОМ наборе фактов. Порядок прохождения проекта документа через СМИД и СГГ перевёрнут (ст. 7) и зеркально для Правил процедуры (ст. 18); к статусу наблюдателя добавлен статус партнёра, замкнутый круг «международных форумов» заменён открытым «другие образования» (ст. 16); порог вступления в силу изменён с «третьего» уведомления на «последнее» (ст. 22) — при четырёх подписантах это разные даты; появились неформальные заседания (ст. 5, 6); ст. 1 переписана целиком — «механизм сотрудничества в виде объединения» стал «международной организацией». Различие держится РАЗДЕЛЬНЫМИ отношениями, а не датой дела: @source анкерует узел только для edition_projection, обычный evaluate() держит обе редакции разом.

    Осуществлённое полномочие §127.2 с материализованным эффектом. Ст. 21 даёт Сторонам власть изменять Соглашение протоколами, Протокол 2022 года — её применение, вторая редакция — эффект; revision соединяет их через caused_by, urn:proof:effect:GrantAmendmentPower присутствует в proof-графе. Дефект модели найден ИСПОЛНЕНИЕМ: пункт 1 ст. 13 Протокола («является неотъемлемой частью») сперва выводил тот же предикат, что и эффект ст. 21, и условие «по взаимному согласию Сторон» становилось невидимым — протокол без согласия всё равно оказывался частью Соглашения. Разведено двумя предикатами: самопровозглашение изменяющего акта не создаёт его действительности.

    Договор БЕЗ СУДЬИ — и канал суждения §47.3 сознательно НЕ применён. Ст. 20 отдаёт разногласия консультациям и переговорам; органа, разрешающего спор, акт не создаёт ни в одной из двадцати трёх статей. external judgment relation утверждал бы «отвечает НАЗВАННЫЙ орган», а адресата нет, и REQUIRES_JUDGMENT был бы вымыслом — осознанная противоположность Гортинским законам и Конвенции о геноциде. Вместо судьи — обязанность ПРОЦЕССА: Сторона, добросовестно исчерпавшая переговоры и не договорившаяся, ст. 20 не нарушает. Отсутствие инстанции утверждено фактом, иначе молчание пакета было бы неотличимо от недоделки формализатора.

    Закрыт дефект ворот, найденный этим актом. Разметка заголовков у двух редакций разная: «Статья 1» отдельной строкой в архивной против «Статья 1 Организация тюркских государств» одной строкой в действующей. Вторую форму ci/check_source_pinning.py не видел вовсе и находил в действующей редакции НОЛЬ статей, тогда как boundaries.py находил двадцать три, — две меры §33.1 читали один документ разными единицами. Добавлена конвенция под тем же именем языка «ru» (признаки исполнимого содержания берутся по имени, новое уронило бы ворота KeyError-ом), СТОИТ ПОСЛЕ основной формы, поэтому ни одно существующее число корпуса не сдвинулось — проверено сканом всех закреплённых документов корпуса.

    Четыре закреплённых документа в одном пакете. На странице Протокола опубликованы два акта — сам Протокол (International) и закон РК о его ратификации с заявлением о толковании (KZ). Общий local_path не прошёл: учёт статей сканирует весь документ, и у закона все тринадцать статей Протокола оказались бы без фрагмента — ворота назвали коллизию ключа. Закон закреплён отдельным документом, вырезаемым из тех же байтов тем же генератором.

    Две меры §33.1, по документу на каждую. Редакция 2009 года — EXECUTABLE 19, ANCHORED 4, SOURCE_ONLY 0, покрытие 78,4 %; действующая — EXECUTABLE 20, ANCHORED 3, покрытие 78,7 %; Протокол — EXECUTABLE 10, ANCHORED 3, покрытие 51,5 %. Ноль объявленных границ и ноль необъяснённых SOURCE_ONLY во всех четырёх документах.

    Два прочтения ст. 22 части четвёртой. Одна статья называет срок двумя оборотами — «на тридцатый день ПОСЛЕ получения» и «по ИСТЕЧЕНИИ тридцати дней с даты получения», — и прочтений у второго два, с разницей ровно в сутки. Оба записаны interpretation со status disputed; базовая теория на вопрос НЕ ОТВЕЧАЕТ, потому что акт его не решил.

    Три оговорки «как правило» (ст. 5, 6, 7) записаны defeasible с явным поражающим фактом: без него такое правило ведёт себя как strict на каждом деле. Правило ст. 8 (председательство) пришлось сделать defeasible не по выбору — strict не вправе читать предикат, производимый defeasible (LDC-E4103), а обход через supported(...) был бы семантически неверен: он игнорирует поражение.

    Измерение, поправившее корпусное правило. MISSING_POLICY считался issue уровня ДОКУМЕНТА (вывод, снятый с Договора о космосе). Проба показала иное: без политики §86 запрос, не достигающий календарного терма, чист, а достигающий даёт MISSING_POLICY severity error — различие в ДОСТИЖИМОСТИ терма, а не в движке. Цена не косметическая: дело с contextProfiles не выразимо поверхностью §267, и подача политики во все дела оставила бы пакет вовсе без .lawtest.

    Третья мера снята отдельно, и первый её прогон нашёл пробел. Обе меры §33.1 были полны уже при 57 сценариях, но замер по proof-графам показал: из 89 правил применилось хотя бы раз только 55 — полнота покрытия статей говорит о фрагментах и правилах, а не об их срабатывании. Остаток закрыт делами, после чего 86 из 89; три оставшихся — ветви unless трёх оговорок «как правило», которые в proof-графе не появляются по построению (их действие есть отсутствие вывода) и доказываются парами сцен.

    Проверки: lawc check чист, lawc lower байтово совпал с закоммиченным CLIR, регрессия 91/91, differential 91/91 байтово (lawc eval == lawref), учёт закрепления — 0 проблем, check_dead_rules чист. Гейт мёртвых символов нашёл настоящее упущение — двухместное notification_received_from, не читавшееся ничем (удалено), и две обещанных комментарием, но не проведённых посылки (связаны). doctor.py nakhchivan-2009: пробелов нет.

  • Формализован Договор о коллективной безопасности (Ташкент, 15.05.1992, в редакции Протокола от 10.12.2010) — статьи 1–6 из одиннадцати (пакет intl.csto.tashkent_treaty, corpus/laws/csto-treaty-1992/). Фаза 1 правового каркаса январских событий 2022 года: международно-правовая сторона. Первый акт корпуса, у которого орган суждения §47.3 назван самим текстом, а не выбран формализатором: статья 3 образует Совет коллективной безопасности в составе глав государств-участников, статья 6 отдаёт им решение об использовании сил и средств системы, — отсюда authority CollectiveSecurityCouncil, а не общий Court (genocide-convention) и не «суды государства» (japan-constitution-art9).

    Решение СКБ от 06.01.2022 фактом пакета НЕ является, и разрыв записан двумя редакциями одного источника. Текст Решения о направлении Коллективных миротворческих сил в Казахстан не опубликован нигде — ни на сайте Организации, ни в реестре международных договоров РК; публично доступно только ЗАЯВЛЕНИЕ Председателя СКБ того же дня, которое о решении сообщает. Приём Указа № 409 (semipalatinsk-1991): CSTO_SCB_STATEMENT_TEXT — PINNED_UNOFFICIAL_COPY с закреплёнными байтами заявления; CSTO_SCB_DECISION_TEXT — UNAVAILABLE, фрагмент с локатором и ярлыком, но без текста и без content_hash (под PINNED_* тот же фрагмент был бы LDC-E5205). Следствие структурное: ни одно правило пакета на решение не анкерено — в сценарий оно приходит adjudicated assertion §73, то есть утверждением ДЕЛА о том, что орган высказался, а не утверждением пакета о том, что́ в решении написано.

    Два прочтения «агрессии» меняют исход на ОДНИХ И ТЕХ ЖЕ фактах января. Скобочная вставка статьи 4 — «(вооруженному нападению, угрожающему безопасности, стабильности, территориальной целостности и суверенитету)» — допускает две несовместимые линии чтения: ограничивает ли она СУБЪЕКТА нападения (ArmedAttackByStateReading, довод — отсылка самой статьи 4 к статье 51 Устава ООН) или описывает его ХАРАКТЕР (ExternallyOrganisedAttackReading, допускающее организованное извне нападение негосударственных формирований). Официальная квалификация января 2022 года возможна при втором прочтении, и приписана ему с атрибуцией на закреплённый фрагмент заявления Председателя СКБ, а не на мнение формализатора. Соперничающие interpretation над одним якорем БЕЗ interpretation_group … selection exactly_one (идиома japan-constitution-art9: группа блокировала бы весь запрос, включая вопросы по статьям 1, 2, 6). Разница исполняется: armed_attack_on даёт NEITHER под первым прочтением и TRUE_ONLY под вторым на одном деле, а профиль §274 даёт разные классы прочности (CSTO-03/04/11).

    Шесть сценариев из одиннадцати невыразимы на поверхности §267, и это измеренная причина, а не предпочтение. Выбор прочтения §152 из .lawtest не передаётся вовсе: ось принимается парсером, отбрасывается лоуверингом (LDC-E1307, warning) и раннером .lawtest не показывается ни текстом, ни в --json — тест зеленел бы, исполнив базовую теорию. Поэтому каждый сценарий на прочтение проверяет доезд выбора по manifest.interpretations, а не по ответу.

    CSTO-05 держит слепое пятно канала §47.3 на одном деле двумя запросами. truth к мостовому литералу aggression_established даёт REQUIRES_JUDGMENT с типизированным запросом к СКБ; positions на том же деле отдаёт пустой список при evaluationStatus: COMPUTED — ответ, неотличимый от «право молчит». Мост — СТРОГОЕ правило с литеральной головой: через голову-норму и через defeasible канал невидим обоими способами сразу (измерено на Декларации независимости и Принципах Нюрнберга).

    Две находки о тексте, которых бриф не содержал. (1) Помощь по статье 4 предоставляется ТОЛЬКО ПО ПРОСЬБЕ пострадавшего — просьба записана посылкой обоих правил абзаца 2, и .lawtest 04 плюс CSTO-08 держат границу: при установленной агрессии и двух участниках позиций помощи нет, пока просьбы нет. (2) Полномочие статьи 6 имеет ДВА основания: «в соответствии со статьями 2 и 4» означает, что решения довольно и при одной УГРОЗЕ, без установленной агрессии, — то есть январское решение можно было обосновать и статьёй 2, тогда как заявление назвало статью 4 (CSTO-09 подаёт нарочно бедное дело: угроза, ни нападения, ни суждения).

    Границы объявлены, а не обойдены. Расширение среза с названных в задании статей 1–4 до 1–6 записано в трёх местах (package.law, scope, articles.json): без статьи 6 у решения СКБ нет в пакете основания вовсе — статья 4 говорит, ЧТО государства делают, статья 6 — КТО решает. Состав участников Договора пакетом не утверждается (закреплённый текст подписей не содержит; state_party — факт дела, констант §54 у пакета нет). Окна позиций — [moment, infinity) без вписанной даты: дата вступления в силу в байтах отсутствует. Различие сторон («все остальные государства-участники») — фактом дела party_other_than, а не !=: сравнение над entity_ref даёт TYPE_ERROR при чистом lawc check.

    Провенанс. Оба документа — с официального сайта ОДКБ (odkb-csto.org), закреплены corpus/tools/fetch_csto_texts.py (12 760 и 1 072 байта; --check сверяет байты с сетью, в CI не входит — DECISION-0005 п. 6). materialization_status — PINNED_UNOFFICIAL_COPY: закреплено извлечение со страницы Организации, а не байты депозитарного экземпляра (депозитарий — Генеральный секретарь ОДКБ, ст. 11), поэтому verifiedAgainstSource = false.

    Измерено: lawc check чист, lint.py — 0 замечаний, учёт статей 6 из 6 в объявленном охвате, глубина §33.1 — EXECUTABLE 6 (ANCHORED 0, SOURCE_ONLY 0, вне пакета 5), 34 нормы при нуле мёртвых, разметка §218 полная (35 объявлений, 34 нормы, unlabelled: 0), 11/11 сценариев, 4/4 теста §267, 16 evaluate-вызовов байтово идентичны lawref ↔ lawc, check_source_pinning по пакету чист, индекс реестра пересобран (100 пакетов), doctor.py csto-treaty-1992 — «пробелов нет».

  • Формализовано высочайшее повеление от 25 июня 1916 года «О привлечении мужского инородческого населения империи для работ по устройству оборонительных сооружений и военных сообщений в районе действующей армии, а равно для всяких иных необходимых для государственной обороны работ» — оба пункта из двух (пакет ru.empire.requisition_1916, corpus/laws/requisition-1916/). Первый акт Российской ИМПЕРИИ в корпусе. Акт репрессивный и стал непосредственной правовой причиной восстания 1916 года в Средней Азии и Казахстане; формализован ТЕКСТ как он есть, историческая оценка — в комментарии пакета со ссылкой на источник (Котюкова Т. В. (отв. ред.), «Восстания 1916 г. в азиатской России: неизвестное об известном», М.: ИВИ РАН, 2017), тот же принцип, что у martial-law-1941, molotov-ribbentrop и us-emancipation.

    Три содержательных ответа на один вопрос, и различие между ними правовое, а не техническое. Названное лицо даёт TRUE_ONLY; прямо изъятое — FALSE_ONLY (оговорка «за исключением» выражена unless … then not …, то есть акт о нём ГОВОРИТ, а не молчит); лицо, чей сословный разряд «инородец» делом не утверждён, — NEITHER. Третий ответ — не пробел формализации: разряд определён ВНЕ повеления (Свод законов о состояниях, Устав об управлении инородцев 1822 года), предикат объявлен эмпирическим сознательно, и граница проверяется делом REQ-09.

    Оговорки скоплены по своим подпунктам, и это наблюдаемо на паре дел. Один и тот же бродячий инородец изъят в Тобольской губернии (подпункт «а») и привлекается в Ферганской области (подпункт «б») — подпункт «б» состоит из одного перечня и оговорок не знает вовсе (REQ-06/REQ-07). Признак подпункта стоит в ПОСЫЛКЕ каждого правила-изъятия; убери его — и оба дела дадут одинаковый ответ при чистом lawc check.

    Расхождение с обзорами, стоившее второго свидетеля. Езиды, ингилойцы-христиане и абхазцы-христиане Сухумского округа обычно перечисляются среди ИЗЪЯТЫХ; закрывающая скобка подпункта «в» стоит ДО них, и по закреплённым байтам они ПРИЗЫВАЮТСЯ наравне с мусульманским населением Терской и Кубанской областей и Закавказья. Прочтение сверено с независимым изданием (Котюкова 2017, с. 114, со ссылкой на РГВИА ф. 1300 оп. 1 д. 1031 л. 3), а не выведено из пунктуации одной публикации; держат его три дела REQ-11.

    Возраст 19—43 работает пределом полномочия, а не призывным возрастом. Пункт 2 передаёт «определение возрастов» соглашению министров внутренних дел и военного, и рамка пункта 1 («согласно предыдущему (1) пункту») — условие действительности §127 у power-нормы: 31 год эффект производит, 50 лет нет, а само полномочие в обоих случаях ACTIVE (REQ-17). Исторические 19—31 назначила циркулярная телеграмма МВД от 27.06.1916 — ОТДЕЛЬНЫЙ акт во исполнение пункта 2, в пакет сознательно не включённый: взяв его, мы получили бы пункт 2, который перестал бы быть делегацией и стал описанием.

    Три замыкания §70, и все три над утверждаемым, а не выводимым — иначе положительный вывод пришёл бы от правила, отрицательный от замыкания, и предикат стал бы BOTH. Замкнуты одиннадцать изъятых местностей, девять областей подпункта «б» и запись о подлежании воинской повинности натурою. Третье понадобилось потому, что оговорка требует ОБЕИХ полярностей одного факта (осетины-мусульмане изъяты, когда подлежат; турки и курды — когда не подлежат), а and not над эмпирическим предикатом без замыкания даёт NEITHER, и правило молча не срабатывало бы никогда. В том же пункте рядом стоит ОТКРЫТЫЙ остаток — «и прочих подобных им инородцев Ставропольской губернии» перечня не образует, и замкнуть его значило бы сузить акт.

    Заведена двенадцатая объявляемая единица деления §33.1 — point_paren. Акт нумерует пункты СКОБКОЙ («1)», «2)»), и прежняя конвенция point (ищет «1. ») не увидела бы его вовсе — тот же молчаливый отказ, что уже случался с «26-бап», с топиком Fannie Mae и с римской статьёй договора. Вписана в ОБЕ меры разом (ci/check_source_pinning.py и .claude/skills/formalize-act/scripts/boundaries.py), выражения обязаны совпадать: буквенные подпункты «а)», «б)», «в)» стоят в тех же байтах и отличаются от единицы одной цифрой, поэтому группа захвата требует ЦИФР. Как одиннадцать прежних объявляемых единиц, в автоопределение НЕ входит.

    Третья мера снята отдельно, и первый её прогон нашёл пробел. Обе меры §33.1 полны (глубина EXECUTABLE 2 из 2, байтовое покрытие 99,8 %, учёт пунктов 2 из 2 при нуле неучтённых), но полнота их не значит «нормы исполняются»: замер по proof-графам показал 26 применившихся норм из 29, и три §206-расщепления (курды, трухмены, ногайцы) были закрыты ДЕЛАМИ, а не объявлены покрытыми. После — 29 из 29. Фаззер --targeted 40 покрыл 21 правило из 27; шесть непокрытых — ровно те, что требуют скаляров и пакетных констант, и все шесть закрыты сценариями.

    Источник и его честная граница. Официальная публикация («Собрание узаконений и распоряжений правительства», отд. 1, № 182 от 6 июля 1916 г., стр. 1747) машиночитаемых байтов в открытом доступе не имеет; закреплена вычитанная копия сборника «Восстание 1916 года в Средней Азии и Казахстане» (М.: Изд-во АН СССР, 1960, с. 25—26) по НЕИЗМЕНЯЕМОЙ ревизии Русской Викитеки oldid 5684628 (corpus/tools/fetch_requisition_1916_text.py) — materialization_status PINNED_UNOFFICIAL_COPY, verifiedAgainstSource = false. Нормализаций нет ни одной, и это ПРОВЕРЯЕТСЯ, а не декларируется: assert_clean роняет прогон, появись в источнике мягкий перенос или неразрывный пробел. Странности издания сохранены дословно («Вилюйской—Якутской области», «Енисейской губернии и уезда», «трухмен»).

    Форма акта названа по нему самому. Это высочайшее ПОВЕЛЕНИЕ («Государю императору благоугодно было… высочайше соизволить повелеть»), а не «царский указ», как его зовут литература и хрестоматии; различие не терминологическое — именно потому, что повеление объявляет министр, пункт 2 передаёт определение возрастов соглашению министров. legalStatus = historical_monument по прецеденту martial-law-1941: отменяющего акта источник не даёт, а издавший правопорядок прекратил существование. Связь с alash-orda/alash исторически несомненна («Памятная записка о киргизах» Букейханова, Дулатова и Алмасова цитирует именно это повеление), но в пакет НЕ вписана: инструментом её не доказать, а source-узел был бы утверждением о праве, которого закреплённые байты не дают.

    Измерено: lawc check чист (0 диагностик, 0 × LDC-E5201/E5202), lint.py — 0 замечаний, регрессия 27/27, check_kz_differential --only requisition_1916 — 81 вызов байтово идентичен, третья нога контура (Lean) — 81 сертификат оракула и 81 сертификат движка приняты, ни одного отвергнутого, check_lower OK, check_dead_rules/check_dead_symbols/check_label_coverage/check_verbalization_totality зелены, doctor.py requisition-1916 — «пробелов нет».

  • Ф0 галереи (DECISION-0055): индекс реестра догнал корпус с 58 до 95 пакетов, а его ворота перестали верить генератору на слово. Отставание в 37 пакетов из 95 копилось молча, и молчали оба контура сразу — по разным причинам, каждая из которых чинится отдельно.

    Локально регенерация была привязана только к полному прогону. registry/build_index.py стоит в шаге 4 ci/run_all.sh, а run_all.sh при акт-локальной работе никто не гоняет: check_kz_differential на полном корпусе — около трёх часов. Скилл formalize-act перестраивал CLIR (gen_kz_clir.py) и не перестраивал индекс, то есть каждая формализация нового акта увеличивала разрыв на единицу. Шаг вписан в verify.py в обе секции — corpus/ (строго ПОСЛЕ gen CLIR: индекс производен от него) и registry/. Сужать до семейства нельзя и не нужно: обратный индекс §194 ходит между пакетами, а весь проход стоит 6,7 с — на фоне суженной KZ-регрессии (6 с) и differential (29 с) это ничто.

    В GitHub CI проверка идемпотентности была слепа ровно к тому случаю, ради которого стоит. Job registry в .github/workflows/docs.yml сверял пересборку через git diff --exit-code, а новый пакет добавляет в индекс НОВЫЕ каталоги registry/index/p/<имя>/ — untracked, которых git diff не видит. Асимметрия porcelain/diff записана в CLAUDE.md как намеренная в пользу локального гейта, но здесь она обнуляла ворота: 37 новых каталогов не покраснели бы никогда. Заменено на git status --porcelain.

    Ворота брали вердикт об анкерах §194 из health.json — то есть у того самого генератора, который проверяют. Пропуск анкера в обходе build_index.py был бы невидим с обеих сторон: класс «обе стороны ошибаются одинаково», только сторона здесь одна. Свойство 9 считает анкеры само, обходом корпуса; свойство 10 (новое) сверяет собственный счёт со сводкой — витрина печатает её как «N URN-анкеров разрешены», и расхождение означало бы обещание проверенности, которой не было. Корпус стал АРГУМЕНТОМ check(), а не чтением внутри: пока он читался внутри, канарейка могла портить только индекс, и проверка анкеров была непроверяемой в принципе. Класс канарейки «анкер» теперь портит КОРПУС — убирает узел-адресат живого анкера.

    Выход A3-таблицы красил 36 не-дефектов. Таблица десугаризуется в правила-строки, и в CLIR появляется symbol_decl только для её ВХОДА (…:table:<имя>/input); выходной предикат назван единственный раз — в emit.predicate sidecar-файла, а объявления в CLIR не имеет вовсе. Ворота требовали узел для каждой цели produced/uses и потому краснели на всех 36 правилах-строках Табели о рангах (civil_rank_title, court_rank_title, land_rank_title) — та же ошибка, что мерить кодовые анкеры меркой URN-формы (DECISION-0022 §4). Законная цель — узел ЛИБО объявленный emit; список ТОЧНЫЙ (читается из corpus/laws/**/*.lawtable.json), а не «всё, что похоже на таблицу», и канарейка «выход A3» опустошает его, требуя покраснения.

    Регенерация вскрыла настоящий дефект, который прятался за 472 строками шума. После пересборки 476 проблем свелись к четырём, три из которых — ложные (A3 выше), а четвёртая реальна: правило CivilRightsAndDutyActionIsTransaction ГК РК ссылается @source на фрагмент GK_ART147, которого не существует. Причина — в закреплённом источнике Adilet строка 1147 выглядит как «Глава 4. Сделки Статья 147. Понятие сделки»: заголовок главы склеен с заголовком статьи, нарезка не увидела границу, и текст статьи 147 целиком поглощён фрагментом GK_ART146. Новая словоформа известного класса (аппарат Adilet внутри статей); учёт статей §33.1 занижен на одну единицу. Закрыто 29.08.2026 нормализацией ИЗВЛЕЧЕНИЯ, а не разрезом фрагмента. Обход склейки внутри генератора был отвергнут доводом, который проверяется, а не взвешивается: фрагмент обязан остаться непрерывной подстрокой публикации (LDC-E5202), поэтому текст статьи 147 пришлось бы завести вместе с «Глава 4. Сделки » — а тогда статья 147 так и не стала бы единицей учёта, потому что check_source_pinning.py опознаёт статью тем же якорем ^Статья N., что и нарезка. Хуже: при scope: "whole" охват выводится ИЗ СКАНА, и фрагмент с локатором article/147 упал бы в «фрагменты вне объявленного охвата» — то есть обход менял один красный гейт на другой. Восстановлен перенос строки в sources/civil-code/ru.txt (и в байтово идентичной копии civil-code-terms, чтобы одна и та же выемка Adilet не разошлась в двух пакетах), content_hash §27.3 обеих публикаций перезакреплён. Решение НЕ редакторское: остальные 23 заголовка главы стоят в этом же документе на отдельной строке — нормализована одна строка к конвенции самого документа. Итог: анкер GK_ART147 разрешается, статей под учётом §33.1 стало 425 вместо 424, глубина civil-code EXECUTABLE 413 → 414 (вписана точечно --register, а не --write: база глубины на живом дереве заморозила бы чужие промежуточные значения). Против повторения словоформы — сторож в corpus/tools/sync_civil_code_fragments.py: генератор отказывает, увидев ЛЮБОЙ заголовок статьи не с начала строки, и называет строку и номер.

    Канарейка — 10/10 классов (было 8/8). Замеры 29.08.2026: генератор 6,7 с на 94 пакета и 8,1 с на 95, ворота 3,8 с, индекс 45 МБ.

  • Ф1 галереи: лента времени и фасеты как производные артефакты (registry/index/timeline.json, facets.json). Опорная точка каждого акта берётся из машины редакций §31/D1 — lifecycle узлов источника (adopted/published/in_force/repealed), а не из часов: 73 пакета из 95 датируются, самый ранний — Русская Правда, 1072-05-02.

    Отсутствие даты — не одно состояние, а два различимых, и различие наблюдаемо, а не додумано. У 13 пакетов узлов источника нет вовсе (конституционные подпакеты: источники вынесены в kz.constitution.sources) — это АДРЕС, где дата есть. У 9 источник есть, но датировать его нечем (Гортинские законы, Декалог, Яса, XII таблиц, De legibus, Клятва Гиппократа, «Қасым ханның қасқа жолы», «Есім ханның ескі жолы», «Жеті жарғы») — это предмет кураторской датировки Ф3, потому что «около 450 г. до н. э.» есть историография, а не дата в силе. Свалить их в общее «без даты» значило бы назвать пробелом то, что пробелом не является; каждая запись раздела undated обязана нести причину, и ворота этого требуют.

    Лента вскрыла дефект данных, который иначе не виден ничем. У четырёх пакетов в lifecycle стоит дата ФОРМАЛИЗАЦИИ, а не дата акта: incoterms.group_c (редакция 2020 года) и gradus.counterpoint (Gradus ad Parnassum, 1725) датированы 28–29 августа 2026 года, у faraid.shares и kz.corpus.tuystyq даты принятия нет по природе — это доктринальный расчёт и обычай, — и подставленная «сегодняшняя» хуже отсутствия, потому что утверждает то, чего нет. Дата в lifecycle есть вход проекции as-of и diff-editions, поэтому цена шире витрины. Заведено отдельной задачей; попутно стоит проверить, не бралась ли она из часов машины — тогда это класс, запрещённый determinism-линтами, только в данных, а не в коде.

    Два новых свойства ворот и четыре класса канарейки (14/14). Лента полна (каждый пакет каталога ровно один раз), упорядочена (витрина не сортирует — инвариант 5, значит порядок обязан быть свойством артефакта) и объясняет пробелы; фасеты полны. Членство в unfaceted определяется ПО ФАКТУ непопадания, а не по отсутствию секции [metadata], и разница не теоретическая: у kz.corpus.clir.labor_calendar секция есть, но фасетных полей в ней нет, и первая редакция генератора роняла его мимо обоих разделов разом — пакет исчезал из навигации, не будучи нигде назван. Поймали это собственные ворота на первом же прогоне.

    Страницы витрины: /timeline/ и /facets/ (registry-app/src/pages/, ссылки в шапке Base.astro). Лента разложена по векам — XI, XIV, XVII, XVIII, XIX, XX, XXI, и пропуск XII–XIII веков есть правда о корпусе, а не дыра вёрстки; у каждого акта год, число редакций, пометка отмены и полоса действия с явным различением «окно открыто» и «закрыто по такую-то дату». Раздел «Вне оси» подписан по РОДУ пробела, а не списком недостающего: у одних адрес, где дата есть, у других её нет и быть не может. Фасеты — четыре оси карточками с полным перечнем пакетов и разделом «Вне срезов». Обе страницы читают готовые артефакты и не вычисляют ничего (инвариант 5); группировка по векам — раскладка полок, а не суждение о датах, и отрицательные годы учтены сразу, хотя в корпусе пока не встречаются. Сборка витрины — 1045 страниц за 14 с.

    Фасеты корпуса: 20 юрисдикций (включая исторические политии собственными именами — GoldenHorde, MongolEmpire, KievanRus, RomanRepublic, Gortyn, HolySee, и none у восьми норм без суверена), 19 родов инструмента (law, code, regulation, treaty, doctrine, treatise, custom_law, constitution, oath, proclamation…), 9 правовых статусов, 6 степеней верности источнику. В unfaceted — ровно пять служебных пакетов (три календаря, консолидированный audit-world, учебный срез), то есть именно те, что экспонатами не являются.

  • Ф5 галереи: акт как процесс запечён в индекс. p/<name>/process.json порождает функция оракула build_static_report (О-5 плана LAYERS-NEXT) — стадии, переходы, их условия и заметки статического взгляда. Процедуры §159–§164 есть у шести пакетов из 105: правила ФИДЕ, Стамбульский проект договора, Минский пакет 2015, госзакупки, Кантар и туыстық. Вся стоимость — 0,3 с на весь корпус, потому что дела не исполняются: это устройство процедуры, а не ход дела. Вкладка «Процесс» появляется только у этих шести — у остальных она вела бы на страницу, объясняющую своё отсутствие, а акт без процедуры не обязан оправдываться.

    Заметки статического взгляда переносятся как есть, включая признание предела. SINK_STATE говорит «из состояния переходов нет, а законный ли это терминал §160 — по CLIR не видно: маркера терминальности в узлах нет». Достроить его догадкой значило бы объявить процесс завершённым там, где он, возможно, оборван. Ворота 16 держат замкнутость графа: переход в необъявленное состояние обещал бы витрине ход дела, которого в акте нет, а связь «каталог объявляет процедуру» ↔ «файл записан» рвётся молча — пакет просто теряет вкладку.

    Два дефекта поймано глазами, и текстовая проверка не дала бы ни одного. Заголовок процедуры выходил ПУСТЫМ на kz.corpus.qantar: qualifier там — пустая строка, а ?? пропускает её как значение (нужен ||); та же ловушка сидела в двух местах с displayName. И подзаголовок ленты печатал «от — года до наших дней», потому что первой записью стала курируемая дата, у которой anchor нет вовсе. Оба — класс «данные другого рода, чем ждёт шаблон», и оба видны только на отрисованной странице.

    Argmap отложен с названной причиной. argmap.project проецирует ГОТОВЫЙ proof-граф, то есть требует исполненного evaluation-документа: запекание карт спора означало бы прогон сценариев внутри генератора, который сегодня укладывается в 7 с целиком. Отдельная работа с собственным бюджетом — честнее назвать, чем встроить втихую. Диахрония отдельного слайдера не потребовала: вкладка «Редакции» закрывает её с DECISION-0022.

    Канарейка — 20/20 классов (было 18/18).

  • Ф4 галереи: живые экспонаты — «испытать» ведёт в рабочий стол. Конструктор научился открывать вложенный пакет по адресу (?sample=<id>), витрина показывает кнопку у пяти вложенных пакетов из 103 и объясняет остальным, почему её нет, приводя список вложенных. Витрина по-прежнему не исполняет ничего (инвариант 5): оба движка живут в конструкторе, где обещание «хост не меняет ответ» держат ворота 26–28/43.

    Мост держится воротами, потому что рвётся молча. Пакет вложен в рабочий стол оттого, что назван в constructor/tools/build-samples.mjs, а связь с каталогом идёт через namespace law.toml — соединять по имени каталога нельзя, они расходятся втроём (kz-pd ↔ personal-data ↔ urn:kz:corpus:clir:personal-data). Переименуй каталог образца — и кнопка «испытать» исчезнет со страницы, не уронив ничего; свойство 15 пересчитывает связь независимо и требует, чтобы число вложенных образцов совпадало с числом связанных пакетов.

    Публичной ссылки нет, и это сказано словами. Конструктор в артефакт GitHub Pages не собирается — там документация и витрина, — поэтому без переменной сборки WORKBENCH_URL страница печатает команду запуска вместо кнопки. Мёртвая ссылка обещала бы работу, которой нет.

    Параметр снимается с адреса сразу при открытии, и это не косметика. Ссылка одноразовая: оставь её в адресе — и перезагрузка страницы затрёт работу человека повторным открытием пакета, чего он не просил. Тем же снятием вход делается идемпотентным без ref-флага, а тот в StrictMode не спасает — React монтирует компонент дважды, у каждого экземпляра свой ref, и пакет открывался два раза подряд (поймано глазами на живом сервере: два уведомления вместо одного).

  • Ф3 галереи: кураторский слой — второй авторский вход реестра (registry/collections.toml). Отличается от секции [metadata] не формой, а РОДОМ утверждения, и всё устройство файла из этого следует: метадата говорит об акте («издатель такой-то») и проверяема против источника, зал говорит о МЕСТЕ акта в истории («эти двенадцать актов об одном») и проверяем только согласием читателя. Поэтому файл правится руками, ни один генератор в него не пишет, а автогенерация кураторских текстов запрещена прямо (DECISION-0055, п. 7).

    У каждой кураторской даты обязательное основание. Поле basis требуется воротами непустым и печатается на странице рядом с датой, а не в сноске: «около 450 года до н. э.» без указания происхождения неотличимо от даты, вычисленной из источника, и витрина выдавала бы суждение за факт реестра. Датировано 12 актов, и у восьми из них основание — САМО НАЗВАНИЕ, данное автором пакета: датировка уже заявлена в [metadata].title и здесь лишь переносится в машинное поле, то есть не сочиняется. Курируемая дата набрана на ленте иначе, чем вычисленная, — различие происхождения видно до чтения пояснения.

    Вскрылся третий род датировки, которого план не предвидел: условная шкала. У «Антигоны» lifecycle ЕСТЬ, но календарного смысла не имеет: три эдикта Креонта датированы 1000-01-01, -02 и -03, чтобы второй отменял первый, а третий — второй, и неписаный закон объявлен окном без начала и конца. Формализация верна, а лента ставила акт в XI век между Ясой и Русской Правдой. Введён флаг conventional_scale: поверх вычисленной даты кураторская ложится ТОЛЬКО с ним и с основанием, объясняющим, почему машинная шкала условна; по умолчанию ворота отвергают — кураторская датировка не поправка к машинной, а замена там, где машинной нет. Два акта сознательно оставлены вне оси: у системы родства и у наследственного расчёта нет ни момента принятия, ни издания, и любая точка на ленте утверждала бы событие, которого не было.

    Шесть залов, храповик и четыре класса канарейки (18/18). «Право степи», «Право войны и мира», «Право распределения», «Норма без суверена», «Учредительные акты», «Право состояний» — 57 актов из 102; зал может пересекаться с другим («Жеті жарғы» — и степное право, и обычай без суверена), и это свойство, а не дефект. Ссылка на пакет, которого нет в каталоге, роняет ворота, но генератор её ПЕРЕНОСИТ в поле missing, а не выбрасывает: молча выброшенная ссылка показала бы зал полным, лишившись экспоната от одной опечатки. Состав держит registry/collections-ratchet.json — новый зал обязан быть вписан туда осознанным действием, потому что незаписанный зал не защищён вовсе. Порядок ленты сравнивается теперь по ЧИСЛУ года, а не по строке: «-0450» и «1072» лексикографически сравнимы, а хронологически нет, и до н. э. выстроилось бы задом наперёд — свою же проверку порядка пришлось чинить сразу после того, как она это поймала.

    Статус содержимого — черновик. Инфраструктура (формат, генератор, ворота, храповик, канарейка, страница /halls/) от содержимого не зависит и работает на любом наборе; тексты залов и обоснования датировок подготовлены к проверке владельцем и не являются утверждённым кураторским суждением, пока не подписаны коммитом человека.

  • Ф2 галереи: страница пакета перестроена из карточки зависимости в экспонат. Новых данных не понадобилось — вся перекомпоновка идёт из уже запечённого (packages.json, sources.json, coverage.json, дескриптор), и ни одно число на странице по-прежнему не вычисляется в шаблоне (инвариант 5).

    Этикетка (PackageLabel.astro). Издатель, юрисдикция, род инструмента, правовое состояние, что именно закреплено под хэшем, и заявлял ли автор ручную сверку текста с источником. Значения — из секции [metadata] (DECISION-0051), словари перевода ЯВНЫЕ и неполные по построению: незнакомое значение печатается как есть, потому что молчаливая нормализация чужого словаря была бы догадкой о смысле. Юрисдикция none печатается словами «без суверена — норма не издана властью»: у клятвы, доктрины и обычая суверена нет, и пустая ячейка на этом месте читалась бы как пробел данных. Пакет без секции получает не пустую этикетку, а объяснение, почему её нет.

    Состояние сохранности. materializationStatus §194 объявляет, ЧТО лежит под хэшем редакции, и различия содержательные: закреплённые официальные байты (6 редакций корпуса), неофициальная копия (142), реконструкция по расходящимся свидетельствам (8), только изложение содержания (8) и UNAVAILABLE (6). Последний получает отдельную строку с ПОИМЕННЫМ перечислением утраченного — у Семипалатинского указа это «Русский текст указа, закрытая часть: пункты 3—4 (свободной копии не существует)». Формулировка нарочно прямая: норма, которой нет текста, не может быть ни выведена, ни опровергнута, и сказать это честнее, чем показать пробел.

    Блок «Сослаться» вместо npm-блока «install». Название акта, работа-источник, name@version и contentHash: адрес указывает не на «последнюю версию», а на конкретные байты — то, чего требует цитирование и чего номер версии не даёт. Проверено на трёх несовпадающих судьбах — утраченный текст, реконструкция, норма без суверена.

  • Два новых ворот молчания: приоритет §116 через страту и include в толковании (ci/check_priority_strata.py, ci/check_interpretation_gate.py). Оба класса — «правило написано, исполнимо, читается и всё равно ничего не делает», оба до 29.08.2026 молчали при полностью зелёных check, lower, check_dead_rules и differential.

    ВСЕ ВОСЕМЬ РЁБЕР ПОЧИНЕНЫ ТЕМ ЖЕ ДНЁМ, реестр долга пуст. ОСМС — три: освобождение от взносов и отчислений не снимало обязанность платить, и это доказано опытом ДО/ПОСЛЕ на одних фактах (сотрудник органов внутренних дел давал BOTH, стал давать FALSE_ONLY); двум парам дописан конъюнкт not_known(released_from_*), третьей — приём обратный, потому что у own_payment_due второй дефитер стоял в страте 0 верно и поднимать общую норму значило бы сломать работающую пару ради сломанной. «О правовых актах» — два: акт, подлежащий государственной регистрации, вступал в силу и со дня подписания; особый срок структурного элемента не вытеснял срок акта, причём там было ДВА дефекта сразу — разные страты И спор двух ПОЛОЖИТЕЛЬНЫХ голов, который приоритет не разрешает в принципе, а правило вдобавок не исполняло собственной метки («при отсутствии особого срока»). XII таблиц — одно: вещь, переданная с согласия опекуна, давала BOTH; изъятию дописан in_tutela, и это верное чтение — у весталки, освобождённой V.1, нет ни опекуна, ни запрета. Регламент 261/2004 — два, в том же коммите, что и акт.

    ВОРОТА ОКУПИЛИСЬ В ТОТ ЖЕ ДЕНЬ, и не на старом долге. Через полчаса после разводки в конвейер приехал новый пакет параллельной сессии (intl-general-average, Йорк-Антверпенские правила) — и ворота назвали в нём девятое ребро через страту прежде, чем его заметил автор. Случай поучительнее шести прежних: Rule Paramount вытесняет ТРИ правила сразу, два в ранге 0, нумерованный путь в ранге 1. Первая попытка починки подняла дефитер в ранг 1 и разорвала две работающие пары вместо одной сломанной — ворота показали это немедленно. Верным оказалось обратное направление: пятнадцать нумерованных правил были defeasible БЕЗ ПРИЧИНЫ, и их строгость опустила мост в ранг 0. Проверено значением: неразумная жертва даёт FALSE_ONLY при одном узле defeat. И тут же сработали соседние ворота: сплошной перевод в strict задел правило XXIII с ОТРИЦАТЕЛЬНОЙ головой, которая в строгом замыкании не исполняется вовсе, — check_dead_rules назвал его поимённо в том же прогоне.

    ВТОРАЯ ПОЛОВИНА ТЕХ ЖЕ ВОРОТ — то, что §111 запрещает дословно: продюсеры одного предиката РАЗНЫХ ПОЛЯРНОСТЕЙ в разных стратах. Страта фиксирует TruthStatus (§111 шаг 7), и продюсер противоположной полярности стратой выше отозвать фиксацию не может. Один такой предикат на 95 документов (kz-alash-orda, pay_rate_valid) — и тоже дефект чтения: отрицательное правило не требовало приёма на службу, хотя весь пункт III о жаловании ПРИНЯТОГО милиционера. Починено, сцена достроена до полного дела. В lawc check это сознательно НЕ вынесено: law-hir/src/strata.rs работает по AST и рангов §110 не считает, а считают их два места по CLIR (lawref и law-eval); третья копия ранжирования на третьем представлении разошлась бы с обеими молча — ровно тот класс отказа, ради которого весь куст ворот заведён.

    Приоритет через страту встречался ПЯТЬ раз, и каждый раз его находили заново, делом (fnma-income, incoterms-2020, locke-treatise, alash-orda, air-passenger-rights). §111 собирает конфликтные группы для КАЖДОЙ СТРАТЫ ОТДЕЛЬНО, а ранг §110 растёт от чтения поражаемого предиката в теле: норма и её дефитер, разойдясь по стратам, в одну группу не попадают, и объявленное ребро не применяется вообще. Узел priority_rule при этом в CLIR на месте и виден grep-ом. Ворота обошли ВСЕ приоритеты корпуса разом — 326 рёбер, 318 работают, 8 нет: два были в air-passenger-rights и починены тем же коммитом, шесть внесены в corpus/priority-strata.json как ДОЛГ с диагнозом на каждое (какие продюсеры, какие ранги, куда двигать). Чинит владелец пакета: выравнивание страт МЕНЯЕТ ОТВЕТЫ НА ДЕЛА. Ранги считает функция самого вывода — rule_ranks поверх stratify, извлечённой из тела defeasible_closure без изменения поведения (селфтест, 312 векторов и differential байтово прежние).

    Проза §111 половину обязанности уже несёт, а компилятор — нет, и это отдельная находка. Барьер завершения предиката требует, чтобы «все потенциальные producers ОБЕИХ ПОЛЯРНОСТЕЙ P/not P завершились до первого status-sensitive consumer»; law-hir/src/strata.rs реализует только сторону ПОТРЕБИТЕЛЯ (LDC-E4103) и молчит о расхождении самих продюсеров. В четырёх случаях из шести продюсеры разъехались ещё и по полярностям — ровно в конфигурацию, запрещённую дословно. Достройка барьера до lawc check есть КОМПИЛЯТОРНЫЙ ДЕФЕКТ, а не errata; она покраснит три пакета корпуса до починки их владельцами и потому вынесена отдельным решением.

    include в толковании гасит норму молча. §152/§157: правило с непустой интерпретационной принадлежностью активно ТОЛЬКО при выбранном прочтении, и без выбора вычёркивается ДО исполнения. Четыре обязанности Регламента 261/2004 были помечены include-ом как открытые оценочные стандарты («разумное соотношение с временем ожидания», «подходящие альтернативные средства», «эффективные санкции») и перестали существовать на каждом деле. Критерий, ради которого заведены ворота: include уместен там, где толкование ВЫБИРАЕТ между прочтениями, дающими разные нормы, и неуместен там, где стандарт качествует СОДЕРЖАНИЕ обязанности, а не её существование. corpus/interpretation-gated.json требует причину на каждое включённое правило; 37 правил, стоявших под гейтом раньше, вынесены в замороженный baseline — их прочтения автор ворот не проверял и выдавать чужое решение за проверенное не стал.

    У меры глубины §33.1 появился шестой уровень INTERPRETED. До него boundaries.py о гейте толкования не знал вовсе и считал статью EXECUTABLE по наличию правила с якорем на неё — четыре статьи Регламента стояли EXECUTABLE, пока их норм не существовало ни на одном деле, и лгала мера ГРОМЧЕ прочих чисел отчёта, потому что EXECUTABLE есть высший уровень §33.1. Направление храповика 0, как у ANCHORED и EXCLUDED: рост неотличим от тихого бегства из-под EXECUTABLE, падение — от снятия чужого прочтения без проверки. Числа корпуса не сдвинулись ни у одного акта — в каждом пакете с гейтом у гейтованной статьи нашлось и негейтованное правило; уровень заведён СТОРОЖЕМ ровно того случая, на котором попался Регламент, когда под гейт уходят все правила статьи разом. Канарейка: гейт на единственное правило ст. 18 роняет меру с 19 EXECUTABLE на 18 + 1 INTERPRETED.

  • «Семь заповедей» из «Скотного двора» Оруэлла (пакет eng.orwell.animal_farm) — первый вымышленный правопорядок корпуса под каталожной метадатой (legalStatus = literary, jurisdiction AnimalFarm) и витрина машины редакций §31/D1: пять редакций одного source_work, больше, чем у любого другого акта. Пять состояний стены с полным lifecycle (датировка — конвенция «глава N → 1945-N-01», записана в sources.law), три тайные поправки и переписывание целиком; четыре revision-узла без caused_by — правящего акта не существует, анонимность перекраски и есть предмет. Все редакции PINNED_EDITORIAL_RECONSTRUCTION (E-0057): закреплены только надписи стены (~120 слов), собранные из показаний романа-свидетеля и сверенные с ним дословно; сам роман не вендорен (в США охраняется до 2041). Каждая из четырёх границ редакций переворачивает РОВНО ОДИН сценарий impact-editions: легализация кроватей без простыней, амнистия казней «с причиной», умеренное пьянство, одежда на переписанной стене. Раздельные головы …_original/…_amended (приём Русской Правды) делают поправку видимой парой вопросов к одному делу без проекции; «WITHOUT CAUSE» — презумпция, чьё поражение ВЫВОДИТ «не нарушение» (FALSE_ONLY, сцена гл. VIII дословно); «некоторые равнее» — канал суждения §47.3 (authority Pigs, REQUIRES_JUDGMENT); равенство переживает все пять редакций. Покрытие байтов 91,9–100 % по пяти редакциям, 12 норм (мёртвых 0), разметка §218 полная, 17/17 сценариев, 17 evaluate-вызовов байтово идентичны lawref ↔ lawc, doctor.py без пробелов. Попутно найден молчаливый отказ: impact-editions принимает непарсящуюся дату (лексикографическое сравнение, класс E-0048) и выдаёт уверенный вердикт — заведена задача на валидацию.

  • Регламент (ЕС) № 261/2004 о правах авиапассажиров формализован целиком (11.02.2004, в силе с 17.02.2005; пакет eu.transport.air_passenger_rights, юрисдикция EU, in_force) — первый акт вторичного права Европейского союза в корпусе и первый, чьё вычислительное ядро целиком лежит в A3-таблицах решений. 19 статей из 19, глубина §33.1 EXECUTABLE 19 / ANCHORED 0 / SOURCE_ONLY 0, покрытие байтов 99,9 %, 120 правил (мёртвых 0), 4 таблицы A3, 3 замыкания §70, один канал суждения §47.3, одна презумпция §113, шесть точек истолкования; 37 сценариев и 5 тестов §267 зелёные, все 37 evaluate-вызовов байтово идентичны lawref ↔ lawc, 37/37 сертификатов приняты ядром Lean (и документ оракула, и документ движка), разметка §218 полная, doctor.py без пробелов.

    ЧЕТЫРЕ СЕТКИ — ЧЕТЫРЕ ТАБЛИЦЫ, И ВСЕ unique + total: true. Суммы 250/400/600 EUR по дальности (ст. 7 п. 1), пороги задержки 2/3/4 часа (ст. 6 п. 1), предел опоздания при маршрутизации (ст. 7 п. 2) и доли возврата 30/50/75 % при понижении класса (ст. 10 п. 2). Разница с тремя правилами, написанными от руки, не в форме записи, а в том, ЧТО доказано: unique требует попарной непересекаемости строк (перекрытие — LDC-E8301), total: true — доказанного покрытия всей области входов (пропуск — LDC-E8302). Пропущенная полоса дальности у правил дала бы NEITHER, неотличимый от «компенсация не полагается»; здесь она не соберётся. Границы полос взяты из текста и проверены ЗНАЧЕНИЕМ: рейс ровно 1500 км даёт 250 EUR, ровно 3500 км — 400 EUR. У четвёртой таблицы ТРИ входа: без колонки о французских заморских департаментах рейс туда получил бы 50 % вместо 75 %, которые прямо даёт пункт (c).

    ЗАДЕРЖКА КОМПЕНСАЦИИ НЕ ДАЁТ, И СЦЕНА СТОРОЖИТ ЭТУ ГРАНИЦУ. Текст связывает ст. 7 только с отказом в посадке (ст. 4 п. 3) и отменой (ст. 5 п. 1 (c)); ст. 6 даёт при задержке лишь содействие и обслуживание. Расширение Суда ЕС по объединённым делам C-402/07 и C-432/07 (Sturgeon, 19.11.2009), приравнявшее задержку от трёх часов к отмене, в закреплённых байтах ОТСУТСТВУЕТ, и дописать его значило бы формализовать судебную практику вместо акта. APR-14 подаёт задержку в четыре часа на рейсе 5000 км и требует NEITHER — ответ самого Регламента. Тот же приём измерения расхождения акта с его позднейшим прочтением, что у locke-treatise и us-declaration.

    ERRATA E-0058: §84.1 ИЗМЕРЯЛСЯ ТОЛЬКО ЧАСАМИ, И ВСЯКИЙ ПОРОГ КОРОЧЕ ЧАСА БЫЛ НЕОТЛИЧИМ ОТ НУЛЯ. hours_between (E-0028) отбрасывает дробную часть к нулю, поэтому ст. 3 п. 2 (a) — «не позднее чем за 45 минут до опубликованного времени вылета», УСЛОВИЕ ПРИМЕНИМОСТИ ВСЕГО АКТА — давала ноль и при 45 минутах, и при одной, и при нуле. Величину пришлось бы объявить фактом дела с числом В ИМЕНИ предиката: тот самый признак недоделки, который E-0015, E-0026 и E-0028 закрывали для дней, месяцев и часов, только на четвёртом витке речь не о типе без конструктора, а о РАЗРЕШЕНИИ. Добавлен терм minutes_between(from, to) -> Integer; разбор, отказы и знак — ОДНА процедура с часовым (две процедуры чтения одного вида уже стоили erratы E-0048). Ниже минуты язык не пошёл: акта с секундным порогом в корпусе нет, а поверхность без свидетеля — это то, за что E-0037 упрекала перечень §258. Байты корпуса не сдвинулись, differential 130/130.

    ДОЛГ E-0028 ЗАКРЫТ ТЕМ ЖЕ КОММИТОМ. Обязательство errata E-0028 стояло НЕ исполненным с 27.08.2026: hours_between жил в обеих реализациях, во всех трёх реестрах std и в пяти пакетах корпуса, а conformance-вектора у него не было НИ ОДНОГО — differential молчал не потому, что путь верен, а потому, что по нему никто не ходил (тот же класс молчания, что E-0029 нашла у календарных единиц). Заведён ERR-E0028-HOURS-BETWEEN по букве обязательства (ст. 60.7 Конституции РК, обе стороны границы одним collect: ровно 48 часов — можно, 47 часов 59 минут — нельзя) и парный ERR-E0058-MINUTES-BETWEEN, обе величины которого лежат ВНУТРИ одного часа и потому часовым термом неразличимы. Оба в SUPPORTED.

    ЕДИНИЦА ИЗМЕРЕНИЯ ВЫБИРАЕТСЯ ПО ПОРОГУ, И ОШИБКА ЗДЕСЬ ИДЁТ В ПОЛЬЗУ ПЕРЕВОЗЧИКА. Окна «две недели» и «семь дней» ст. 5 п. 1 (c) меряются часами (336 и 168 — пороги кратны суткам, отбрасывание работает в верную сторону); допуски маршрутизации «не более чем на два часа раньше» — МИНУТАМИ: в часах вылет на 2 часа 1 минуту раньше даёт 2 и проходит порог, которого текст не даёт. Сцена APR-22 стоит ровно на этой минуте.

    ПРИОРИТЕТ §116 ПРИМЕНЯЕТСЯ ТОЛЬКО ВНУТРИ ОДНОЙ СТРАТЫ — пятое подтверждение, и оно стоило пяти красных сцен. Изъятия ст. 3 п. 3, п. 6 и ст. 1 п. 3 читали одни эмпирические факты, а общий вывод о сфере действия — поражаемые scope_ground и presented_for_boarding, и уехал стратой выше: объявленный приоритет не применился вовсе, ответ BOTH при полностью зелёных check, lower и воротах мёртвых правил. Починка — промежуточный предикат within_scope_but_for_exclusions, который читают И вывод, И каждое изъятие; приём совпал с верным прочтением (изъятия действуют на того, кто иначе БЫЛ БЫ в сфере действия). То же выравнивание понадобилось ст. 2 (j) и трём изъятиям ст. 5 п. 1 (c).

    include В ИНТЕРПРЕТАЦИИ ВЫВОДИТ ПРАВИЛО ИЗ БАЗОВОЙ ТЕОРИИ — четыре нормы погасли молча. Правило с непустой интерпретационной принадлежностью §152 активно ТОЛЬКО при выборе прочтения. Четыре точки истолкования были заведены с include, и четыре обязанности (питание ст. 9, альтернативные средства ст. 14 п. 3, санкции ст. 16 п. 3, семидневное возмещение ст. 8) перестали существовать на каждом деле — при зелёных check, lower и check_dead_rules. Поймал сценарий. Отсюда правило: include ставится ТОЛЬКО там, где интерпретация выбирает между прочтениями, дающими разные нормы; для стандарта, качествующего содержание обязанности, а не её существование, точка истолкования остаётся без include. Осталась одна — начало семидневного срока ст. 8 п. 1 (a), которого текст не называет; три сцены подряд показывают, что без выбора прочтения нормы нет вовсе, а с выбором семь дней укладываются, а восемь нет.

    ВНУТРЕННЕЕ ОТНОШЕНИЕ mode: rules-ТАБЛИЦЫ НЕ АДРЕСУЕМО С ПОВЕРХНОСТИ, И ЭТО ИЗМЕРЕНО. A3 §A3.3.4 говорит, что положительный факт <id таблицы>/input приходит «из case input ЛИБО ОБЫЧНОГО ПРАВИЛА», но вторая половина недостижима: StableId кончается на /input, идентификатор со слэшем лексер не берёт, а объявленный грамматикой (spec/grammar.ebnf:936) идентификатор в обратных кавычках лексер не реализует вовсе (LDC-E0101). Следствие: таблица mode: rules исполняется ТОЛЬКО из JSON-дела, и .lawtest до неё не дотягивается. Поэтому суммы проверяются сценами Python, а .lawtest пакета покрывают то, что выразимо. Побочно измерено: три таблицы tabel-o-rangakh-1722 — единственные другие в корпусе — не исполнялись НИ РАЗУ (его тесты гоняют только правила nobility.law), то есть исполняемый путь mode: rules до этого коммита не был покрыт ни одним вектором и ни одним сценарием.

    ВОРОТА check_dead_symbols.py НАШЛИ ПРОПУЩЕННУЮ ПОСЫЛКУ И ОШИБКУ ТИПИЗАЦИИ. certified_service_dog был объявлен и никем не читаем — а ст. 11 п. 1 называет собаку-проводника ПРЯМО и наравне с сопровождающими людьми; заведено правило. tour_operator был типизирован AirCarrier, тогда как ст. 2 (d) определяет туроператора «with the exception of an air carrier», то есть прямо исключает совпадение; заведён свой тип, и ст. 13 стала квантифицировать по нему.

    ТРЕТЬЯ НОГА КОНТУРА НАШЛА ДЕФЕКТ, КОТОРОГО НЕ ВИДЕЛИ НИ СТАТИКА, НИ DIFFERENTIAL, НИ ТРИДЦАТЬ ПЯТЬ ЗЕЛЁНЫХ СЦЕН. Ядро Lean отвергло сертификат APR-24: «кандидат побеждён по модели §107, но документ его не побеждает». Причина — те же страты, но ВНУТРИ понижения презумпции §113: presumption даёт пару правил с общей головой разной полярности и приоритет между ними, однако тело второго составляет ТОЛЬКО условие unless, то есть один эмпирический факт. Пока when первого читал поражаемый regulation_applies, правила стояли в разных стратах, приоритет не применялся, и презюмируемый факт отвечал BOTH там, где перевозчик извещение ДОКАЗАЛ. Обе реализации были согласны между собой, поэтому differential молчал по построению; сцены спрашивали право на компенсацию, а не сам презюмируемый факт, и потому тоже молчали. Починка — when читает confirmed_reservation (строго выведенный) вместо regulation_applies; прочтение от этого стало точнее, а не беднее. Заведены сцены APR-36/37, спрашивающие презумпцию напрямую.

    ЗАКРЕПЛЁН АНГЛИЙСКИЙ АУТЕНТИЧНЫЙ ТЕКСТ страницы EUR-Lex (CELEX 32004R0261, исходная редакция — операционная часть не менялась ни разу), PINNED_UNOFFICIAL_COPY: байты официального опубликования (OJ L 46, 17.02.2004, с. 1–8) в руках не держали. Заявление Комиссии, напечатанное на той же странице после текста, в закрепление НЕ вошло — оно не принято Регламентом и нормой не является. Заведена двенадцатая объявляемая единица деления en_article_plain («Article 7» на строке одна, название на следующей) в обеих мерах §33.1: en_article требует двоеточия, en_article_roman — римского номера, а fr_article совпадает формой, но объявлен конвенцией ЯЗЫКА «fr» и дал бы английскому тексту французский набор признаков исполнимого содержания.

  • de-legibus починен: двадцать одна норма стояла с несвязанным носителем. Пакет не компилировался в HEAD, а его закоммиченный CLIR был собран до ужесточения §190 («head variables bound», распространено на переменные в норм-голове) — корпус исполнял свод Цицерона по артефакту, который компилятор уже не воспроизводит. Исходник при этом не менялся ни разу. Диагноз однороден: лекс называет носителя КЛАССОМ («publici sacerdotes expianto», «pontifices sanciunto», «Virgines Vestales custodiunto»), а в модели класс был только ТИПОМ переменной — не конечным положительным источником. Носитель связан членством в том же классе; четыре предиката у пакета уже были и не использовались, семь дописаны в том же роде. Содержание норм не изменилось. Три нормы починены по грамматике лекса: унарный предикат у lex 20 (donis — средство, а не предмет), институциональный факт у lex 25 (manento обращено к самим священнодействиям — единственная утраченная деонтическая позиция, храповик перезаморожен 108 → 107 при росте объявлений 157 → 165), сохранённая обязанность у lex 26 (minuunto — действие живых, в отличие от двух соседних императивов о состоянии). Дело дополнено в одном месте: у власти авгура предмет был свободной переменной, то есть позиция выводилась без действия. 4/4 сценария зелены, каждый вызов байтово сверен с lawc eval; пин импорта у leges_xii_tabularum обновлён, римская пара 8/8 и 8/8 байтово.

  • pub стал настоящей границей: §24 не проверялся в двух случаях из трёх (errata E-0059). Механизм существовал (LDC-E1105, вектор T057, DECISION-0011) и включался только при предъявленном составе экспорта зависимости; состав хранился Vec<String>, и пустой список был неотличим от непредъявленного. Отсюда две дыры: контекст без exports разрешал ссылку на internal-символ, а зависимость без единой pub-декларации разрешала ссылаться на что угодно (ровно так вёл себя rom.corpus.de_legibus). Цена лежала в фикстурах репозитория: examples.consumer ссылается на examples.params::mrp без пометки pub, а единственные ворота межпакетной ссылки от исходника строили контекст без exports и §24 не проверяли ни разу. Правка: exports стал Option<Vec<String>> — None (не предъявлен) → ссылка принимается с новым предупреждением LDC-W1105 «§24 НЕ ПРОВЕРЕН»; Some → строгая проверка, и пустой список означает «pub-деклараций нет вовсе», то есть отказ LDC-E1105. Предупреждение, а не отказ, потому что контекст из одного LockedImport состава знать не может (§11 несёт хэши), — но непроведённая проверка обязана называться. Байты корпуса не сдвинулись (gen_kz_clir.py предъявлял exports всегда); сдвинулась одна фикстура. Ворота дополнены четырьмя шагами, два вектора, обе половины проверены подменой.

  • Римская пара замкнута ИМПОРТОМ: de-legibus открыл первое в своей жизни публичное объявление. До сих пор связь двух римских пакетов держалась измерением (семь из восьми пунктов Tabula X не имеют свидетеля, кроме Цицерона) и держаться иначе не могла — pub у соседа не было ни одного. Теперь есть ровно одно, iura_manium_sancta (lex 26 «Deorum Manium iura sancta sunto»), и модуль 12-receptio.law выводит от него, что X.3 и X.4 приняты Цицероном в собственный свод, а сквозное правило даёт цепь Афины → Рим 450 года → Цицерон. Основание — слова самого Цицерона в закреплённых байтах СОСЕДА («in XII minuendi sumptus sunt lamentationisque funebris, translata de Solonis fere legibus»). Поверхность §267 этого выразить не может (раннер лоуверит без resolve-контекста, LDC-E1105), поэтому заведён прогон leges_xii: 8/8 сценариев, 8/8 evaluate-вызовов байтово идентичны, три отрицательных случая держат границу рецепции; тесты §267 целы (ворота гоняют их через --program против закоммиченного CLIR) — 36/36.

  • «А если бы» посчитано lawref impact, а не оценено: без Цицерона исчезли бы 20 пунктов свода из 101 (без Геллия 14, без Феста 13, без Гая 10). Мир «после» отличается от «до» ТОЛЬКО снятыми фактами testis(<пункт>, <автор>); ради ответа заведён предикат traditus с замыканием §70, иначе «пункт исчез бы» было бы молчанием, а не FALSE_ONLY. Числа «передал» и «исчезло бы» расходятся (23 против 20) — три пункта Цицерона несёт кто-то ещё, и наивный счёт цитат этого не видит. Прогон воспроизводим: corpus/tools/report_leges_xii_witnesses.py.

  • zheti-zhargy: байты статьи перестали быть редакцией свода. Энциклопедическая статья висела edition-ом самого акта, то есть утверждала, что это издание «Жеті жарғы». Разделено по образцу qasqa-zholy: у акта редакция ZHARGY_LOST (UNAVAILABLE, без фрагментов), у статьи — свой source. sourceFidelity стал unavailable, и расхождение поймали ворота метадаты сами. Регрессия 66/66, differential 66/66 байтово.

  • Четвёртый читатель articles.json, слепой к объявленной единице, — черновиковый верстак MCP. law_measure звал article_convention(document) без unit и не применял convention.number(): у конвенции с приведением номера сырое совпадение (VIII.2) и локатор фрагмента (8-2) не пересекаются вовсе, то есть верстак объявил бы неучтёнными ВСЕ статьи такого акта, а у латинского черновика возвращал пустой учёт. Починено втроём (единица из декларации; articles.json во временном каталоге для boundaries.depth; приведение номера), незнакомая единица теперь громкий отказ.

  • Разрешён незавершённый конфликт слияния в HEAD — маркеры в шести CLIR Конституции и двух исходниках роняли JSONDecodeError всему, что читает корпус. Сторона «Stashed changes» пуста во всех четырёх местах, выбор механический; исходники компилируются, CLIR пересобраны генератором, потребитель Конституции 12/12 и 15/15 байтово.

  • Назван, но не закрыт: pub не проверяется на межпакетной ссылке. § часть VI требует, чтобы межпакетные references обращались только к pub declarations; lawc lower --imports разрешает ссылку на internal-символ молча (проверено пробой на kz.constitution.court::justice_by_court_only_1995). Дефект ОБЕИХ реализаций против уже написанного prose, не errata. Радиус измерен: 29 настоящих межпакетных ссылок в корпусе, все до одной ведут к pub, — починка сегодня безопасна.

  • Законы XII таблиц формализованы целиком (451–450 до н. э.; пакет rom.corpus.leges_xii_tabularum, RomanRepublic, historical_monument) — и ради них §27.2 получил ШЕСТОЕ ЗНАЧЕНИЕ. У этого акта нет аутентичного текста: бронза форума погибла в 390 г. до н. э., рукописной традиции нет, свод известен ЦИТАТАМИ у Цицерона, Геллия, Феста, Гая, Ульпиана, Плиния. Закреплено то, что есть, — реконструкция редактора (Fontes iuris Romani antiqui I, edd. G. Bruns et O. Gradenwitz, Tübingen 1909, через Bibliotheca Augustana). Прежде такому пакету оставался PINNED_UNOFFICIAL_COPY, а это неправда не о качестве закрепления, а об ОТНОШЕНИИ байтов к акту: «копия» утверждает существование оригинала, копией которого она является. Errata E-0057 вводит PINNED_EDITORIAL_RECONSTRUCTION и ГРУППУ ЗАКРЕПЛЁННЫХ (профили §8.6 читаются по группе, а не по месту в перечне — реализации и раньше считали членство, а не порядок); обязанности §194/§28 действуют полностью. Два вектора, обе половины проверены подменой; байты корпуса не сдвинулись. Побочно: sourceFidelity = "reconstruction" (DECISION-0051) впервые получил опору в источнике.

  • Великая Яса переведена на PINNED_EDITORIAL_RECONSTRUCTION — единственный пакет корпуса, которому новый статус понадобился задним числом. Корпус пересмотрен под E-0057 целиком. Критерий узок и различает: статус говорит об отношении байтов К АКТУ, а не к книге, поэтому реконструкция — это документ, выдающий себя за восстановленный текст акта. У mng.corpus.yasa закреплён очерк Г. В. Вернадского, собранный из показаний четверых свидетелей, и шапка пакета сама звала его реконструкцией; прежняя оговорка «статус не может быть ВЫШЕ PINNED_UNOFFICIAL_COPY» опиралась на ось, которой у этого различия нет. Сдвинулся один узел из 291 (YASA_VERNADSKY) и semanticHash пакета; регрессия 16/16, differential 59/59 байтово идентичны, 10/10 тестов §267, выводимость sourceFidelity = "reconstruction" подтверждена подменой манифеста. НЕ переведены: zheti-zhargy, qasqa-zholy, eski-zholy закрепляют документ ОБ АКТЕ, а не его текст; russkaya-pravda, gortyn-code, golden-horde-yarliks, karamola, valikhanov-note, decalogue имеют рукописную либо эпиграфическую традицию, и «копия» у них правдива. Замечено, но не исправлено (структурная правка чужих пакетов): zheti-zhargy и yasa вешают байты вторичного текста прямо на редакцию акта, тогда как qasqa-zholy уже показал чистую форму — вторичный текст объявлен своим source, а редакция акта UNAVAILABLE. Ярус доказательства — обычный факт пакета: различие «слова закона / слова свидетеля» снято МАШИННО, со шрифта издания, и даёт 39 дословных, 9 словарных, 53 пересказа; замыкания §70 обращают «слов не сохранилось» в FALSE_ONLY, а не в молчание. 83 пункта из 101 держатся на одном свидетеле (solo_auctore_traditus называет его поимённо), а семь из восьми пунктов Tabula X — только на Цицероне, на тех самых de leg. II §§58–64, которые пакет de-legibus закрепил и сознательно вывел из своего охвата: римская пара замыкается измерением, синтаксической связи быть не может (у de-legibus нет ни одного pub). Состав таблиц — гипотеза, и это измерено: закреплены ДВЕ реконструкции, и на 13 из 26 сверяемых пунктов они расходятся о том, на какой доске стояла норма. Заведена конвенция tabula_item в обеих мерах §33.1. Найдено при заведении, всё молчаливое: латинского набора признаков исполнимого содержания не было вовсе (OPERATIONAL_MARKERS[language] уронил бы ворота KeyError у первой же границы латинского акта — de-legibus был от этого в одной границе); boundaries.py не читал unit из формы {"editions": […]}, и у alash-orda объявленный section не читался ни разу — две меры §33.1 читали разные единицы одного акта; латинские метки правил ни с чем не сверялись, и заведённая проверка нашла шесть расхождений, включая исправленную по памяти опечатку издания и две нормы, приписанные не своему пункту. 101 пункт из 101 при пяти объявленных границах, глубина §33.1 EXECUTABLE 96 / ANCHORED 0 / SOURCE_ONLY 5, покрытие байтов 72,4 %, 156 правил (мёртвых 0), разметка §218 полная, 36 тестов §267 зелёные, 131 латинская метка сверена с изданием; differential и Lean вне KZ-machinery, как у statutes-of-apparel-1574.

  • Указ Президента Казахской ССР от 29.08.1991 № 409 «О закрытии Семипалатинского испытательного ядерного полигона» — ВТОРАЯ несущая межпакетная ось корпуса после peaceful-assembly и первая, ведущая не в Конституцию, а в международный договор (пакет kz.decree.semipalatinsk1991, юрисдикция KZ, in_force). Заведён 29 августа 2026 года — ровно тридцать пять лет спустя; резолюцией 64/35 ГА ООН (02.12.2009, по инициативе Казахстана) эта дата объявлена Международным днём действий против ядерных испытаний. Формализованы преамбула и пункты 1—2, глубина §33.1 EXECUTABLE 2 из 2 доступных пунктов, покрытие байтов 100 %; 9 сценариев и 3 теста §267 зелёные, все 14 evaluate-вызовов байтово идентичны lawref ↔ lawc; мёртвых правил 0, разметка §218 полная, doctor.py без пробелов.

    ПЕРВЫЙ ПАКЕТ КОРПУСА, ЗАКРЕПЛЯЮЩИЙ ЗАВЕДОМО НЕПОЛНЫЙ ДОКУМЕНТ, И ЭТО СКАЗАНО МЕХАНИЗМУ, А НЕ ЧИТАТЕЛЮ. У указа ЧЕТЫРЕ пункта; свободной копии пунктов 3 и 4 не существует. Указа нет в ИПС «Әділет» (404 на U910000409_, полнотекстовый поиск даёт ноль, перебор всех восемнадцати буквенных префиксов находит только постановление Кабмина № 409 от 5.07.1991 — другой документ), нет в изданиях Национального ядерного центра РК, в Викитеке, в Google Books, на e-history.kz и kazneb.kz. Единственная база с текстом — ИС «Параграф», и она отдаёт его в демонстрационном режиме: страница САМА объявляет состав документа в g_VPsInfo — восемнадцать абзацных блоков, в разметке присутствует шесть. Закреплён не живая страница, а id_-форма снимка Архива Интернета от 02.02.2019: живая страница prg.kz сегодня обрывается ПОСЛЕ ПУНКТА 1, снимок отдаёт ещё и пункт 2, — закрепление живой страницы потеряло бы норму молча.

    РАЗРЫВ ВЫРАЖЕН ВТОРОЙ РЕДАКЦИЕЙ UNAVAILABLE, А НЕ ОГОВОРКОЙ. У источника две редакции: D409_RU_PINNED (PINNED_UNOFFICIAL_COPY, пять фрагментов с текстом, собирающие закреплённый файл байт в байт) и D409_RU_WITHHELD (UNAVAILABLE, фрагменты article/3 и article/4 с локатором и меткой, но без text и без content_hash). Приём взят у kz.corpus.qasqazholy, где так записан утраченный свод целиком; под PINNED_UNOFFICIAL_COPY такой фрагмент был бы LDC-E5205. Пункт 3 дословно процитирован в прессе, пункт 4 известен только пересказом — ни то, ни другое в text не перенесено: цитата в газете не есть воспроизведение акта.

    ОБЕ МЕРЫ §33.1 К ЭТОМУ РАЗРЫВУ СЛЕПЫ ПО ПОСТРОЕНИЮ, И ЭТО ИЗМЕРЕНО, А НЕ ПРЕДПОЛОЖЕНО. Учёт статей меряется ПРОТИВ ЗАКРЕПЛЁННЫХ БАЙТОВ, а недостающих пунктов там нет вовсе: check_source_pinning.py честно печатает «охват 2 из 2», boundaries.py — EXECUTABLE 2, и оба числа верны и оба обещают больше сделанного. Отсюда новый сторож: corpus/tools/fetch_semipalatinsk_1991_text.py --audit (в сеть не ходит, ворота в ci/run_all.sh) сверяет РАЗБИЕНИЕ, а не вхождение — падает, если текст недостающего пункта допишут в закреплённый файл, не переселив фрагмент; если снимут редакцию UNAVAILABLE; если впишут газетную цитату текстом недоступного пункта; или если фрагменты перестанут собирать файл байт в байт (§194 сдвига границы среза не видит — цитата остаётся подстрокой). Все четыре канарейки проверены правкой и падают.

    СВЯЗЬ С intl.disarmament.npt НЕСУЩАЯ, И ЭТО ДОКАЗАНО ПАРОЙ ДЕЛ, А НЕ ЗАЯВЛЕНО. Ст. IX п. 3 ДНЯО замыкает перечень государств, обладающих ядерным оружием, датой 1 января 1967 года; указ своей преамбулой говорит, чего Договору не хватает: испытания шли «на территории Казахской ССР», а обеспечивали они «стратегический военный паритет между СССР и США». Правило ClosureByNonWeaponStateHost читает ДВЕ ссылки в договорный пакет РАЗНОЙ ПОЛЯРНОСТИ — положительную о союзном операторе и отрицательную о принимающем государстве, — и вторая работает только потому, что перечень замкнут closure §70 с derive_explicit_negative true. Сценарии SEMEY-04 и SEMEY-05 отличаются ОДНИМ фактом дела (кому приписан взрыв 29.08.1949 — Союзу или самой республике), и квалификация закрытия переворачивается с TRUE_ONLY на NEITHER, притом что ни один из двух пакетов не меняется ни строкой. nuclear_weapon_state помечен pub в npt-1968 осознанным действием — первый национальный потребитель осевого вывода Договора. Ни один акт не выводится из другого: Договор не знает про Семипалатинск, указ не упоминает ДНЯО, и участником Договора Казахстан на 29.08.1991 не был (присоединение — 14.02.1994).

    АСИММЕТРИЯ ПУНКТОВ 1 И 2 ВИДНА ИСПОЛНЕНИЕМ. Закрыть полигон республика постановляет ОДНА — SEMEY-01 отвечает без единого союзного факта. Распорядиться им — только «по согласованию» с Министерством обороны СССР и Министерством атомной энергетики и промышленности СССР: пока молчит хотя бы одно, обязанности преобразования нет (SEMEY-07 против SEMEY-08). Перечень согласующих закрыт указом, поэтому правило перечисляет их КОНЪЮНКЦИЕЙ ПО КОНСТАНТАМ: «согласовали все» есть агрегат по предикату (барьер полноты §111), «не осталось несогласовавшего» есть отрицание по ВЫВОДИМОМУ предикату и без замыкания даёт NEITHER — правило прошло бы check и lower и не сработало бы никогда. Вторая форма была написана и переписана до первого исполнения; запись оставлена в файле, чтобы её не написали снова.

    У ДОСТИЖИТЕЛЬНОЙ ЦЕЛИ СТАТУСА EXPIRED НЕТ ВОВСЕ, И ЭТО НАШЛОСЬ ИСПОЛНЕНИЕМ. «В 1991 году разработать и утвердить статус центра» — единственная деонтика пакета с закрытым окном [@1991-08-29, @1992-01-01). Ожидание EXPIRED на деле 1992 года было написано и упало: EXPIRED существует у семейства полномочий (§127/§128/§125) и у запрета (§130), а достижительная цель после окна отвечает по §136/§138. Пара SEMEY-06/09 показывает обе стороны: без установленного неисполнения — UNDETERMINED (истёкший срок сам по себе нарушения не доказывает), с установленным отрицательным фактом — VIOLATED. Соседняя обязанность преобразовать имеет открытое окно и не может быть нарушена никогда.

    const_ref АДРЕСУЕТСЯ ИМЕНЕМ ОБЪЯВЛЕНИЯ, А НЕ ЦЕЛЬЮ entity_ref. const SemipalatinskSite: TestSite = entity_ref("…#SemipalatinskTestSite") понижается в const_ref с id …#SemipalatinskSite; запрос по цели даёт NEITHER без единой диагностики. Первая редакция раннера спрашивала по цели у всех четырёх констант, и три сценария из девяти краснели по этой причине.

    ВОРОТА check_dead_symbols.py НАШЛИ ДУБЛИРУЮЩЕЕ ОБЪЯВЛЕНИЕ. consent_required_from с двумя assert-ами выражал то же, что уже выражено правилом согласования, и снят: два способа сказать одно расходятся при первой правке, и расходятся молча. Оставшиеся два мёртвых символа (SemipalatinskSite — константа закрытого перечня; testing_conducted_since_year — год из преамбулы, которая излагает основание, а не условие) записаны в corpus/dead-symbols.json с причинами.

  • Гортинские законы формализованы целиком (Крит, ок. 450 г. до н. э.; пакет grc.gortyn.code) — первый акт корпуса, который сам называет границу вычислимого. § 16 («Duty of judge») делит все вопросы тяжбы на два класса: те, для которых закон назвал связывающее судью средство — свидетелей либо клятву отрицания (δικάδδεν), — и «прочие», решаемые судьёй под собственной присягой (κρίνεν ἀπομνύντα). Первый класс ложится на обычные правила, второй — на external judgment relation с органом Dikastas; во всех прочих пакетах эту границу проводит формализатор, здесь — источник. 20 секций из 20, покрытие байтов 99,6 %, глубина §33.1 EXECUTABLE 20/20, 171 правило, 10 шаблонов норм, 27 замыканий §70, один канал суждения §47.3, 26 сценариев и 3 теста §267 зелёные, все 26 evaluate-вызовов байтово идентичны lawref ↔ lawc, мёртвых правил 0, разметка §218 полная, doctor.py без пробелов.

    ОДИН ПРЕДИКАТ, ДВА КЛАССА ОТВЕТА, И ВЫБИРАЕТ ИСТОЧНИК. § 1: спор о том, чей раб. При одностороннем свидетельстве slave_adjudged_to даёт TRUE_ONLY при COMPUTED; при свидетельствах «за обоих» либо «ни за кого» — NEITHER при REQUIRES_JUDGMENT с органом Dikastas. Обе ветви стоят в тексте § 1 подряд, § 16 объявляет их общим правилом, и модель не выбирает ничего. Проверено с обеих поверхностей — сценами Python и тремя .lawtest.

    ЗАВЕДЕНА ОДИННАДЦАТАЯ ОБЪЯВЛЯЕМАЯ ЕДИНИЦА ДЕЛЕНИЯ paragraph_sign («§ 1.» … «§ 20») — в ci/check_source_pinning.py и в boundaries.py, одним выражением на обе меры §33.1; генератор фрагментов ИМПОРТИРУЕТ его из ворот, а не повторяет. Единица принадлежит публикации, а не камню, и articles.json говорит это прямо, цитируя самого переводчика.

    ЗАМЫКАНИЕ §70 НАД ВЫВОДИМЫМ ПРЕДИКАТОМ ДАЁТ BOTH. Измерено на первой редакции § 16, где замыкался выводимый mode_written: decided_by_witnesses = TRUE_ONLY, mode_written = BOTH, вся цепь молча останавливалась на NEITHER. Отсюда правило раскладки пакета: замыкаемые предикаты утверждаются (пакетом либо делом) и никогда не выводятся, а вывод стоит уровнем ниже — на связи «вопрос → вид вопроса».

    != НАД ССЫЛКАМИ НА СУЩНОСТИ НЕ РАБОТАЕТ, И ОТКАЗ ВИДЕН НЕ ВЕЗДЕ. lawc check/lawc lower чисты; evaluation-документ §170 несёт issue TYPE_ERROR severity error («терм ‘entity_ref’ вне v1-подмножества»); раннер .lawtest §267 диагностик не показывает ВОВСЕ — поля issues в его выводе нет, и NEITHER неотличим от «условия дела не подошли». Проверено пробой на минимальном пакете. Практическое следствие для корпуса: пакет, проверяемый только .lawtest-ами, такой отказ не увидит.

  • Великая Яса Чингисхана формализована — первый акт корпуса, у которого источник НЕ ТЕКСТ, А ПОКАЗАНИЯ НЕСКОЛЬКИХ СВИДЕТЕЛЕЙ (пакет mng.corpus.yasa, юрисдикция MongolEmpire, historical_monument). Аутентичной Ясы не существует, и закреплённый источник говорит это сам первой же строкой. Соседи по этому свойству — «Қасқа жол», «Ескі жол» и «Жеті жарғы» — известны по ОДНОМУ рассказу об акте; здесь свидетелей ЧЕТВЕРО, они названы поимённо у каждого фрагмента (Аб-уль-Фарадж, Григор из Акнера, Джувейни, Макризи), и их показания РАСХОДЯТСЯ. Закреплена реконструкция Г. В. Вернадского («Монголы и Русь», текст 1947 г.; сетевая публикация «Библиотеки сайта XIII век»), PINNED_UNOFFICIAL_COPY, verifiedAgainstSource = false. 26 фрагментов, покрытие байтов 41,3 %, 47 правил (мёртвых 0), 2 закрытия §70, 4 приоритета, 6 толкований в 3 группах; 16 сценариев и 10 тестов §267 зелёные, все 59 evaluate-вызовов байтово идентичны lawref ↔ lawc, разметка §218 полная, doctor.py без пробелов.

    ЛОКАТОР ФРАГМЕНТА — ЗАПИСЬ ПОКАЗАНИЯ, А НЕ НОМЕР СТАТЬИ. Нумерация в закреплённом тексте есть, но принадлежит СВИДЕТЕЛЯМ, и у каждого своя: witness/maqrizi/20, witness/abulfaraj/5-7, witness/abulfaraj-9-juvayni-10 (одна норма у двоих), vernadsky/… (сводка реконструктора, а не цитата). Единой шкалы статей акта не существует даже в принципе, поэтому unit в articles.json сознательно отсутствует и учёт §33.1 возвращает unmeasured — как у Декларации независимости США.

    РАСХОЖДЕНИЕ СВИДЕТЕЛЬСТВ СТАЛО ВЫВОДИМЫМ ФАКТОМ, А НЕ ЗАМЕЧАНИЕМ В КОММЕНТАРИИ. Подкреплённость нормы считается §59 по числу свидетелей (corroborated / rests_on_single_witness), а divergent_on_normative_force выводится там, где один свидетель передаёт ПРИКАЗ, а другой описывает СВОЙСТВО ГОСУДАРЯ. Отдельно выводится transmitter_without_attribution: Рашид ад-Дин назван передатчиком Ясы, но ни один фрагмент среза на него не возведён — его ордонансы реконструктор относит к «биликам». Слабость опоры Макризи (знает о списке с чужих слов, «очертил лишь часть кодекса») ассертится как утверждение источника, а не как оценка формализатора.

    ТРИ РАЗВИЛКИ, И БАЗА НЕ РЕШАЕТ НИ ОДНОЙ. (1) Веротерпимость: Макризи — «приказал уважать все религии», Джувейни — «не предпочитал одну веру другой»; из приказа следует нарушение, из описания нельзя нарушить чужую биографию. (2) Объём связанной службы: Джувейни — «нет различия», Макризи — изъятие священников, врачей и учёных; реконструктор сводит их сам («Однако существовали и исключения»), и этот шаг анкерован ОТДЕЛЬНЫМ фрагментом, потому что примирение принадлежит историку, а не свидетелю. (3) Конокрадство: два абзаца ОДНОЙ реконструкции дают каскад «штраф, иначе смерть» и перечень трёх исходов подряд. Каждая развилка проверена в обе стороны на одном деле: чиновник, выказавший предпочтение (NEITHER / TRUE_ONLY / FALSE_ONLY); священник против простолюдина (расходятся только классы изъятия); вор, который штраф УПЛАТИЛ. Правило всеобщности службы ПОВТОРЕНО в обоих прочтениях, а не вынесено в базу: вынести его значило бы сделать базой чтение Джувейни и решить спор молча.

    ВЫБОР ТОЛКОВАНИЯ НЕДОСТУПЕН С ПОВЕРХНОСТИ ТЕСТОВ §267, И ЭТО ОПРЕДЕЛИЛО РАСКЛАДКУ ПАКЕТА. context { interpretation X; } в .lawtest принимается, молча отбрасывается и не сообщается: lower_case_body (law-hir/src/lower/case.rs) кладёт warning LDC-E1307 («ось контекста … вне v1-среза case-документа»), но раннер тестов диагностик лоуверинга не показывает ни текстом, ни в --json, и тест исполняет базовую теорию. Differential слеп по построению: .lawtest разбирает только lawc, раннера у lawref нет. Поэтому tests/*.lawtest держат базовую теорию, а все развилки — JSON-дело в corpus/kz/acts/yasa.py; по той же причине группы объявлены any_of, а не exactly_one (замерено, что exactly_one работает и даёт INTERPRETATION_REQUIRED на весь документ — но тогда ни один авторский тест не выражал бы ничего).

    ДВА КЛАССА МОЛЧАЛИВОГО ОТКАЗА НАЙДЕНЫ ИСПОЛНЕНИЕМ ПРИ ЗЕЛЁНОМ check. (1) priority_decl в spec/grammar.ebnf допускает РОВНО ОДНУ пару «prefer … over …», парсер принимает несколько, а lowering сохраняет ТОЛЬКО ПОСЛЕДНЮЮ — без диагностики; пока три изъятия стояли в одном блоке, священник получал BOTH, и верно вёл себя лишь последний по тексту класс. В корпусе таких блоков больше нет ни одного, но грамматику парсер шире. (2) Негативная голова в СТРОГОМ правиле не исполняется вовсе (негативный head в strict closure), и прочтение Джувейни давало NEITHER там, где обязано давать FALSE; чинится defeasible, как UnarmedMayNotVote в «Жеті жарғы».

    ЧТО НЕ ФОРМАЛИЗОВАНО И ПОЧЕМУ. Почтовые станции, подати и смотрины источник только НАЗЫВАЕТ, без слов показания, — они существуют как Provision с атрибуцией, но правил не дают. Неприкосновенность послов не выражена вовсе, потому что источник прямо говорит: «Не существует… прямого выражения такового в существующих фрагментах Ясы» (вместо нормы — факт known_but_not_attested). Обобщение «смертная казнь почти за все виды преступлений» осталось ФАКТОМ, а не правилом: слово «почти» стирать нельзя, и самое тяжкое деяние как раз в исключении («Убийство каралось штрафом»). Глубина §33.1 неприменима: boundaries.py опознаёт три римских заголовка Вернадского как единицы и печатает 0 из 3 при 25 исполняемых правилах базы — артефакт соглашения об именовании якорей, названный в articles.json и README пакета.

  • Постановления II Всеказахского съезда (Оренбург, 5—13 декабря 1917) формализованы целиком — учредительный акт «Алаш» с ЧИСЛАМИ (пакет kz.corpus.alash_orda, юрисдикция RussianRepublic, historical_monument). Пара к kz.corpus.alash: там ПРОЕКТ ПРОГРАММЫ партии (октябрь 1917) — намерение, здесь решение съезда — совет из 25 членов с квотой 10 мест неказахским народам, милиция в 13 500 человек с разверсткой по шести областям и смета шестью статьями расхода. ДВА постановления в одном пакете: об образовании автономии (римские I—X) и правила о народной милиции (римские I—XIII), у каждого своя нумерация. Обе меры §33.1 полны и считаются раздельно по каждому документу: учёт единиц 10 из 10 и 13 из 13, глубина EXECUTABLE 10 из 10 (автономия) и 13 из 13 (милиция, по явной паре аргументов boundaries.py); покрытие байтов 99,6 % и 99,5 %; 92 узла-правила CLIR, 8 norm_template, 25 фрагментов, 3 замыкания §70, 1 приоритет §116; 92 сценария, все зелёные, все 92 evaluate-вызова байтово идентичны lawref ↔ lawc; в proof-графах появляются 84 узла-правила из 92, остальные восемь (пять обязанностей §123 и три власти §127) проверены запросом positions и материализацией эффекта — непроверенных норм не осталось; 6 тестов §267 tests/*.lawtest; разметка §218 полная; doctor.py без пробелов.

    ЧИСЛОВАЯ КВОТА ПРЕДСТАВИТЕЛЬСТВА — АГРЕГАТ ПО ЭМПИРИЧЕСКИМ ОТНОШЕНИЯМ, И ИНАЧЕ НЕЛЬЗЯ. «25 членов, 10 мест из которых предоставить русским и другим народам» считается count(collect seat: Seat where …); и место в совете, и признак «место отдано неказахскому народу» строго эмпиричны, потому что агрегат по ВЫВОДИМОМУ предикату даёт барьер §111 на весь пакет, а проекция в одноместное не спасает. Квота прочтена как РОВНО десять (распределение мест, а не нижняя граница) — выбор с правовым последствием, названный в шапке пакета; недобор мест, недобор квоты и перебор квоты разведены тремя нормами (§206), чтобы отчёт называл, ЧТО именно нарушено.

    РАЗВЕРСТКА МИЛИЦИИ ОСТАЛАСЬ НОРМАМИ, А НЕ СТАЛА A3-ТАБЛИЦЕЙ. Матрица «область → численность» просилась в *.lawtable.json, но LiteralTerm схемы decision-table — только typed value literal: ни const_ref, ни entity_ref она не знает, а ключ разверстки есть доменная константа. Text-колонка с именами областей перенесла бы идентичность значения со символа на строку, и опечатка перестала бы быть ошибкой. Шесть чисел — обычные assert, закрытость шестёрки — closure §70. Внутренняя сверка акта при этом сходится: 1000 + 2000 + 3000 + 4000 + 1500 + 2000 = 13 500.

    АКТ ПРОТИВОРЕЧИТ САМ СЕБЕ ДВАЖДЫ, И ОБА РАСХОЖДЕНИЯ ИЗМЕРЕНЫ, А НЕ СГЛАЖЕНЫ. (1) Пункт I правил о милиции в закреплённых байтах требует возраста «от 30 до 35 лет», пункт VI того же документа допускает заместителя «в возрасте 20—35 лет»: двадцатипятилетний прямо в милиционеры не принимается, но заместителем взятого по жребию быть может. Вся историческая литература (Қазақ ұлттық энциклопедиясы; Мизимбаев по сборнику Мартыненко) называет возраст призыва 20—35, то есть читает «30» опечаткой издания, — здесь формализованы БАЙТЫ, а расхождение оставлено открытым вопросом к типографскому экземпляру ЦГА РК. (2) Сыр-Дарьинская область входит в автономию по пункту I постановления и НЕ входит в разверстку милиции по пункту XII правил; замыкание §70 отвечает установленным FALSE, а не молчанием открытого мира §69.

    ПРИОРИТЕТ §116 ДЕЙСТВУЕТ ТОЛЬКО ВНУТРИ ОДНОЙ СТРАТЫ И МОЛЧИТ ЗА ЕЁ ПРЕДЕЛАМИ. Пункт VII («принимается на службу лишь один член семейства») есть изъятие из пункта II (приём по жребию); без приоритета пара давала BOTH. Записанный priority эффекта не дал: правило-изъятие читало меньше выводимых предикатов и попадало в страту НИЖЕ соперника — priority_rule в CLIR стоял, узла defeat в proof-графе не было, статус оставался BOTH, и ни одной issue при этом не приходило. Починка — выравнивание тел (изъятие действует на ЗАКОННЫЙ жребий), а не другая форма приоритета.

    ДВА ДОКУМЕНТА С ОДИНАКОВЫМ ИМЕНЕМ ФАЙЛА ТЕРЯЮТ ОДИН УЧЁТ МОЛЧА. Первая раскладка пакета держала оба текста в разных каталогах под именем ru.txt; ci/check_source_pinning.py ключует accounting_by_edition по Path(rel).name, ключ совпал, и отчёт напечатал «учёт статей: охват 13 из 13» (милиция) рядом со строкой «глубина §33.1 — EXECUTABLE 10» (автономия): две меры §33.1 говорили о РАЗНЫХ документах под одним заголовком, и это читалось как три неформализованные единицы. Починено в пакете — разные имена файлов включают штатную форму {"editions": […]}; остаток (глубина у check_source_pinning считается одна на пакет) назван в articles.json и в шапке пакета вместе с точной командой.

  • Ярлыки Золотой Орды формализованы — первый акт корпуса, закреплённый НА ЯЗЫКЕ ПОДЛИННИКА, а не в переводе (пакет horde.corpus.yarliks, юрисдикция GoldenHorde — историческое государство собственным именем, historical_monument). Два акта Улуса Джучи: тарханная грамота Тимур-Кутлуга Мухаммеду (6 шаабана 800 г.х. = 24.04.1398) и сборник ханских ярлыков русским митрополитам краткой редакции — шесть грамот 1267–1379 гг. и заключение составителя. Тюркский текст уйгурского письма (chg, чагатайский) закреплён ОТДЕЛЬНОЙ редакцией §27 наравне с построчным русским переводом, и нормы анкерованы на обе; тюркских подлинников шести ярлыков митрополитам не сохранилось ни одного, поэтому сборник объявлен officiality translation. 55 фрагментов, 3 публикации, 58 норм; покрытие байтов 100,0 % / 99,2 % / 99,7 %; глубина §33.1 по сборнику — EXECUTABLE 6 из 7; 16 тестов .lawtest и 14 сценариев регрессии зелёные, все 82 evaluate-вызова байтово идентичны lawref ↔ lawc, Lean-сертификаты 82/82 по обеим ногам, разметка §218 полная, doctor.py без пробелов.

    ИММУНИТЕТ §128 НЕ БЛОКИРУЕТ САМ СОБОЙ. Замерено пробой: при равной силе правил Power и Immunity остаются непобеждёнными и несравнимыми, документ получает UNRESOLVED_NORMATIVE_CONFLICT, и запрет грамоты «пусть не берут» не срабатывает; блокировка появляется только от явного priority §116 иммунитета над полномочием взимать. Сценарий GHY-03 сторожит это по КОДУ issue — снятие приоритета иначе прошло бы молча, потому что check, lower и ворота мёртвых правил остаются чистыми.

    ГЛАВНЫЙ РЕЗУЛЬТАТ — РАСХОЖДЕНИЕ ШЕСТИ ГРАМОТ ЗА 112 ЛЕТ, ИЗМЕРЕННОЕ. Перечни освобождаемых платежей разные (1267 — семь, 1347 — два, 1351 — шесть, 1357 — семь, 1379 — восемь), «запрос» есть в трёх поздних и отсутствует в перечне 1267 года. Один и тот же поп, одно и то же должностное лицо, один и тот же платёж: по грамоте 1267 года взыскание состоится, по грамоте 1379 года — блокировано. Отдельно измерено различие перечня и общей оговорки у Тимур-Кутлуга: непоимённое взимание освобождается только после доказательства, что оно есть «забота, побор или чрезвычайный налог», — перечень переносит бремя, а не дублирует оговорку.

    ДАТА ПО ИСТОЧНИКУ, А НЕ ПО ПРИВЫЧКЕ: закреплённая публикация датирует ярлык Тимур-Кутлуга 24 апреля 1398 года; историографическое «1397» идёт от чтения Радлова (1888) и в закреплённых байтах отсутствует. Аппарат издания ПРП 1955 (надстрочные номера комментария, приклеенные к слову, номера страниц внутри предложений, дублирующий номер грамоты перед инципитом) снят на фазе 0 с записанными причинами. Обе страницы-источника невоспроизводимы без нормализации: narod.ru подмешивает рекламный <script> со случайным идентификатором, vostlit.info — пустой контейнер слота, чей префикс меняется ОТ СЕССИИ К СЕССИИ, а не от запроса к запросу (парная проверка «скачать дважды подряд» этот класс не ловит).

  • «Қасым ханның қасқа жолы» (1510-е) и «Есім ханның ескі жолы» (нач. XVII в.) формализованы — первые два акта корпуса, у которых НЕ СОХРАНИЛОСЬ НИ СТРОКИ СОБСТВЕННОГО ТЕКСТА (пакеты kz.corpus.qasqazholy и kz.corpus.eskizholy, юрисдикция KZ территориально, historical_monument). С ними линия ханского права стоит в корпусе целиком: «Қасқа жол» → «Ескі жол» → «Жеті жарғы» (kz-zheti-zhargy) → «Қарамола ережесі» 1885 года (kz-karamola). Закреплены байты не акта, а РАССКАЗА об акте — по две энциклопедические статьи на свод (kk и ru Википедия, с oldid, извлечение воспроизводимо extract_source_text.py, фрагменты — sync_khan_codes_fragments.py, шаг 1 конвейера); редакция самого акта объявлена materialization_status UNAVAILABLE, откуда sourceFidelity = "unavailable" — значение §27.2, которого не было ни у одного пакета корпуса. 27 и 10 фрагментов; покрытие байтов kk 56,2 % от файла и 95,2 % от тела статьи (ru 33,6 % / 45,2 %) и kk 33,1 % / 79,2 % (ru 38,4 % / 72,5 %); 15 и 4 правила, 5 и 3 закрытия, 94 и 37 фактов; сценариев 15/15 и 11/11, все 26 evaluate-вызовов байтово идентичны lawref ↔ lawc; разметка §218 полная.

    «ТЕКСТ НЕ СОХРАНИЛСЯ» — ВЫВОД FALSE, А НЕ МОЛЧАНИЕ. NEITHER означал бы «формализация не знает» — сообщение о себе; FALSE означает «источники говорят, что не сохранился» — сообщение о предмете. Держит разницу закрытие §70 над ПУСТЫМ множеством положительных фактов. Два свода утрачены на разную глубину, и это читается из CLIR: у «Қасқа жолы» редакция акта несёт пять узлов fragment (section/1…section/5 — имена разделов известны, текста нет ни у одного), у «Ескі жолы» — ни одного, потому что ни один источник не называет его структурных единиц.

    ОДНО «Т.Б.» ИСТОЧНИКА ДАЁТ ДВА РАЗНЫХ ОТВЕТА. Скобки после четырёх разделов «Қасқа жолы» кончаются, после военного — сокращением «и другие». О предмете, не названном в закрытой скобке, свод отвечает «не мой» (TRUE), о таком же применительно к открытой — молчит (NEITHER). Зеркально в «Ескі жолы»: перечень предметов открыт, перечень субъектов власти закрыт, и пятый субъект получает FALSE. Расхождение закреплённых источников о природе «Ескі жолы» («дошёл без изменений, лишь переименован» против «формально это было дополнением») тоже ВЫВОДИТСЯ; каждое чтение — отдельный interpretation, группа any_of, выбор не сделан.

    НАЙДЕНО ИСПОЛНЕНИЕМ. Агрегат по ВЫВОДИМОМУ отношению молча даёт NEITHER (§111): правило «пять плюс два есть семь» третьим слагаемым считало союз разделов, где предикат выводится правилами, — check чист, lower чист, мёртвых правил нет, диагностики нет. Счёт по заявленным множествам работает; непересечение держат закрытия. Транзитивное замыкание линии пишется ТОЛЬКО через supported(...): голый рекурсивный атом даёт LDC-E4102 (§110), monotone-ребро §65/§103 проходит.

  • Мера §33.1 объявляла статьёй сноску Википедии (.claude/skills/formalize-act/scripts/boundaries.py). Последняя конвенция ARTICLE_CONVENTIONS — [N], единица деления De legibus, — намеренно не якорится на начало строки (14 маркеров из 69 стоят посреди абзаца) и потому ловила «…деп аталды.[1]»: акт без всякого деления входил в меру глубины строкой {'—': 1} вместо честного «мера неприменима», ни ворота, ни отчёт об этом не говорили. Теперь перед скобкой обязан стоять пробел либо начало строки. Радиус измерен, а не оценён: число измеряемых единиц не изменилось ни у одного из 68 остальных актов под мерой, включая все 69 маркеров De legibus.

  • Валиханов, «Записка о судебной реформе» (28.02.1864) формализована целиком — первый документ корпуса, который НИЧЕГО НЕ УСТАНАВЛИВАЕТ, а доказывает (пакет kz.corpus.valikhanov, юрисдикция KZ территориально — как у «Қарамола ережесі», never_enacted). Служебная записка генерал-губернатору Западной Сибири за сохранение суда биев против введения мирового суда; предложение принято не было — Временное положение 1868 года ввело ровно то, против чего она возражает. 133 фрагмента, покрытие текста 98,2 %, 29 норм, сценариев 17/17, все 70 evaluate-вызовов байтово идентичны lawref ↔ lawc, разметка §218 полная, doctor.py без пробелов. Учёт статей §33.1 — unmeasured (нумерация «1)…7)» покрывает один раздел из десяти), глубина по единицам неприменима: заголовок «полная формализация» в смысле обеих мер для пакета недостижим по построению — как у Декларации независимости США и Клятвы Гиппократа.

    ТРИ РАЗНЫХ КЛАССА ОТВЕТА §274.6 НА ОДНОМ ВЫВОДЕ. Собственный довод записки лежит в профиле law.argumentation/0.2 (05-argument.law) и доступен только видом запроса argumentation. Полный довод — SKEPTICALLY_ACCEPTED, 4 аргумента за, 149 всего, 26 атак (10 подрывов, 16 опровержений). Изъять четыре факта о ходе опроса — шестнадцать абзацев разбора того, кто в действительности давал показания, — и вывод падает до REJECTED. Изъять вместо них два ответа о выборах — взаимное побеждение, два расширения, CREDULOUSLY_ACCEPTED. Пустое дело — NO_ARGUMENT, а не REJECTED. Приоритета в главном доводе нет ни одного: все ответы записки суть подрывы §274.3, она бьёт по посылке, а не по выводу («всю фальшивость и ложность знаменитых народных мнений»). Единственный priority пакета — уступка об уголовных делах, и она узка: убийство даёт REJECTED, баранта — SKEPTICALLY_ACCEPTED.

    ПРОТИВОРЕЧИЕ ЗАПИСКИ ПРЕДЪЯВЛЕНО, А НЕ СПРЯТАНО. Выборность судьи она считает вредной (родовая интрига и подкуп), выборность административной власти — правом, которым нельзя не дорожить, «хотя пользуемся им теперь и дурно, и нечестно». Оба вывода выводятся и предъявляются в одном ответе (VAL-10); разрешать пришлось бы правовым суждением о том, чего в тексте нет. То же со вторым мнением того же опроса: просьбу о браках записка поддерживает, мнения о судебной реформе объявляет фальшивыми — видно лишь потому, что это разные константы (VAL-08).

    НАЙДЕНО ИСПОЛНЕНИЕМ. strict-правило с отрицательной головой не исполняется вовсе: lawc check чист, evaluation-документ несёт warning NON_EXECUTABLE_RULE («негативный head в strict closure — v1-ограничение, барьеры §111 не реализованы»), и правило молча не даёт ничего. Тот же класс, что «зелёный lowering, мёртвое право».

    НОВЫЙ СРЕЗ ИСТОЧНИКА. extract_source_text.py --shoqan-work-body режет тело произведения по однозначным маркерам и снимает аппарат портала: номера сносок и переводы иноязычных выражений размечены <button> ПОСРЕДИ предложения, и обычное извлечение рвёт абзац на три строки — текст фрагмента перестаёт быть подстрокой публикации ещё до §194. Срез останавливается, если в теле встретится кнопка иного рода. Генератор фрагментов требует разбиения БЕЗ ОСТАТКА: всякая строка закреплённого среза обязана попасть либо во фрагмент, либо в поимённый список аппарата — иначе выпавший абзац снизил бы единственную работающую меру §33.1 молча.

  • Грамоты имп. Анны Иоанновны хану Абулхаиру от 19.02.1731 формализованы целиком — первый СИНАЛЛАГМАТИЧЕСКИЙ акт подданства в корпусе: две из четырёх обязанностей лежат на СЮЗЕРЕНЕ, а санкции нет ни одной (пакет ru.empire.gramota_1731, юрисдикция RU, historical_monument). Два документа одного дня, не редакции друг друга (довод Реймса и Карлсхорста): № 28 «о принятии их в российское подданство» (ПСЗ I, т. VIII, № 5704) и № 29 об отправлении посольства М. Тевкелева. Закреплены байты академического сборника «Казахско-русские отношения в XVI—XVIII веках» (Алма-Ата, АН КазССР, 1961, док. № 28 и № 29) — PINNED_UNOFFICIAL_COPY, verifiedAgainstSource = false: отпуски в АВПР и сканы ПСЗ машиночитаемыми байтами не располагают. Извлечение — fetch_gramota_1731_texts.py, фрагменты порождает sync_gramota_1731_fragments.py (15 абзацев, ворота шага 1). Text coverage 99,8 % и 99,9 %.

    ЧТО ЭТОТ АКТ ДАЁТ КОРПУСУ, ЧЕГО В НЁМ НЕ БЫЛО. Грамота принимает в подданство «на вышеизображенных ТРЕБУЕМЫХ ВАМИ пунктах», то есть делает условия просителя содержанием пожалования. Из четырёх пунктов два обязывают ИМПЕРИЮ (не допускать обид и разорения от своих подданных; защищать от неприятелей — обязанность, рождающаяся нападением), один обязывает кайсацкую сторону (верная служба и ясак), четвёртый взаимен внутри себя (ясыри возвращаются в обе стороны). До сих пор ни один акт корпуса не выражал отношение подданства как двустороннее: сценарии GR1731-05…07 и GR1731-13 падают ровно тогда, когда его записывают односторонней жалованной грамотой.

    ЯСАК БЕЗ СТАВКИ — ФОРМА ПУНКТА, А НЕ ПРОБЕЛ. «платить ясак так, как служат башкирцы»: мерило задано отсылкой к режиму другого разряда подданных, числа в грамоте нет ни одного. Пакет выводит yasak_measured_as(who, Bashkirs) и НЕ заводит ни ставки, ни A3-параметра.

    ПОДДАНСТВО НЕ ОБУСЛОВЛЕНО ИСПОЛНЕНИЕМ — ИЗМЕРЕНО ПО ТЕКСТУ. Ни резолютивного условия, ни санкции, ни оговорки о лишении в закреплённых байтах нет: за «принять вас в подданство» идёт «и потому надлежит вам». Правило принятия поэтому strict, а вывод обрывается на констатации acted_contrary_to_charter («учинил запрещённое»), которая выводится ОБЫЧНЫМ правилом от факта деяния, потому что prohibition в срезе 0.1 не становится VIOLATED никогда (§79/§130). GR1731-12 — сторож против дописывания санкции: набег учинён, констатация выведена, подданство ЦЕЛО.

    ГРОМКАЯ ГРАНИЦА, НАЙДЕННАЯ СБОРКОЙ: activation НЕ ПОНИЖАЕТСЯ. Поле есть в грамматике §123 (duty_item), lawc check о нём молчит, а lawc lower опускает его с предупреждением LDC-E1305 «вне DutyPayload-среза». Четыре условные обязанности пакета были записаны через него и не доехали бы до CLIR ни в одной реализации; условность перенесена в when правила, где она настоящая.

    18/18 сценариев регрессии, 20 evaluate-вызовов байтово идентичны (lawc eval == lawref), 10 рукописных .lawtest §267, check_dead_rules чист. Глубина §33.1 по статьям неприменима (заголовков «Статья N» нет; четыре пункта «Первое…Четвертое» делят одно перечисление, а не документ) — как у Декларации независимости США, указа от 8.05.1945 и Клятвы Гиппократа; articles.json сознательно не заводится, учёт статей отчитывается маркером unmeasured.

  • Контрапункт строгого письма по Фуксу (Gradus ad Parnassum, 1725) формализован целиком — авторское изложение установившейся педагогической доктрины (не перевод трактата, не воспроизведение чьего-либо перевода), пакет gradus.counterpoint, kind doctrine, jurisdiction "none", sourceFidelity = "authored_exposition" — как у faraid. Запрет параллельных и скрытых совершенных консонансов (ст. 4) выражен ОДНИМ общим правилом — «совершенный консонанс не приближается прямым движением»; параллельные квинты и октавы лишь именованный частный случай этого правила, не отдельная норма. Разрешение диссонанса — проходящим/вспомогательным тоном (ст. 7) либо задержанием с приготовлением и обязательным нисходящим разрешением (ст. 10), оба оформлены constraint … require над положительными институциональными отношениями, без отрицания невыведенного предиката. Пять видов (ст. 6, 8, 9, 11, 12) — нота против ноты, две/четыре ноты против одной, синкопа, украшенный контрапункт — на общей инфраструктуре консонанса, вида движения и ступени/скачка. 12 статей, 11 EXECUTABLE (ст. 1 — предмет и метод, вне меры сознательно), покрытие байтов 80,2 %. Найдено: унарный минус над Integer-литералом (iv == -24) не парсится — LDC-E0201, хотя грамматика объявляет unary_expression с префиксом - (§58); обход — (0 - N). Разряд интервала классифицируется явным перечислением знаков в пределах двух октав, а не остатком mod (не реализован — тот же дефект, что у calendar-act-1750) и не через abs (у law-eval Integer не назван в сопоставлении типов терма). Границы: только двухголосие (расширение на 3+ голоса вне среза), nota cambiata третьего вида названа в тексте и не формализована. Измерено: lawc check/lower чисты (182 узла CLIR), lint.py 0 замечаний, 15/15 .lawtest через lawc test (позитивные и отрицательные контроли на параллели/скрытые консонансы, диссонанс первого вида, проходящий/вспомогательный тон, приготовление и разрешение задержания в обе стороны, начало/окончание упражнения), разметка §218 полная (47 объявлений/109 норм, ноль без метки). LOWERED_ACTS/label-ratchet/formalization-depth/PACKAGE_TITLES вписаны, doctor.py без пробелов; дифференциал с lawref и Lean-сертификаты не прогонялись — пакет вне KZ-machinery, тем же путём, что statutes-of-apparel-1574 и poor-settlement-1691-1697.

  • Договор о космосе (1967) формализован целиком — первый акт корпуса, различающий «all States» и «States Parties to the Treaty» одним и тем же гейтом связанности, и первый с проверяемым порогом «пять правительств, включая всех трёх депозитарных» (пакет intl.space.outer_space_treaty, jurisdiction International, legalStatus = "in_force"). Преамбула и 17 статей из 17; глубина §33.1 — EXECUTABLE 16, ANCHORED 1 (ст. II — безусловный assert not, не правило), SOURCE_ONLY 0; байтовое покрытие 57,9 % (24 фрагмента страницы UNOOSA — текста резолюции ГА ООН 2222 (XXI), а не PDF официальной регистрации UNTS vol. 610, No. I-8843: в последнем между абзацами преамбулы линеаризуется постраничная сноска-реестр дат ратификации, добавленная составителями Treaty Series ПОСЛЕ вступления в силу, — дефект линеаризации конкретного PDF, не текста Договора). 22 сценария (corpus/kz/acts/outer_space_treaty.py), 22 evaluate-вызова байтово идентичны lawc eval == lawref. Три отказа нашлись ИСПОЛНЕНИЕМ, не check: (1) эффект immunity/power невидим прямому truth-выводу (DECISION-0021 §4.3) — свобода доступа ст. I и спасительные исключения ст. IV проверяются запросом positions, не голым предикатом; (2) агрегат count кворума большинства ст. XV не проходит барьер §111 даже через 1-местную ПРОЕКЦИЮ выводимого bound_from (NON_EXECUTABLE_RULE на каждом запросе пакета) — починка: общее число государств-участников дело подаёт фактом, а не агрегатом; (3) add_calendar_period ст. XVI без deadlinePolicy даёт MISSING_POLICY уровня ДОКУМЕНТА (errata E-0029) на любом запросе пакета, не только считающих срок выхода. Ст. IV — два устройства перечня в одном абзаце: запрет ОМУ сам закрывает список («in any other manner»), список военной деятельности закрыт closure §70 буквально. Ст. IX — duty/power пара на одном понятии «potentially harmful interference», развёрнутом в две стороны убеждённого государства.

  • «Русская Правда» формализована ПОЛНОСТЬЮ — 158 из 158 статей обеих редакций (Краткая 43/43, Пространная 115/115), машина редакций §31 доказана на настоящей исторической границе (пакет rus.corpus.russkaya_pravda, jurisdiction KievanRus). Третья обычноправовая система корпуса после zheti-zhargy/karamola, первая с НАСТОЯЩЕЙ осью редакций: один source_work, два edition с реальным lifecycle — Правда Ярославичей (май 1072, перенесение мощей Бориса и Глеба) и Устав Владимира Мономаха (4.05.1113, «по Святополце, созва дружину на Берестовемь» — датировка самим текстом). lawref impact-editions на реальном IR и датах 1100→1150: semdiff added=21/removed=23, 5/5 сценариев меняют исход, вердикт SEMANTIC-CHANGE, --json байтово детерминирован между прогонами. Институциональная (не только числовая) ось: ст. 2 Пространной отменяет кровную месть прямым текстом, и правило QualifyingKinMayAvenge (заякорено только на Краткую) снимается проекцией §31 целиком на дату Пространной.

    НАЙДЕНА И ИСПРАВЛЕНА УТЕЧКА СКВОЗЬ РЕДАКЦИИ (методологическая находка дня, [[multi-edition-package-shared-relation-leak]]): общее отношение status_tariff на обе редакции позволяло Пространная-правилу без гарда по обстоятельству убийства читать факт, заведённый Краткой, и подтверждать виру там, где Краткая прямо говорит о правомерном убийстве без виры (ст. 20) — @source анкерует узел для проекции §31, но не ограничивает круг фактов при обычном (непроецированном) исполнении. Исправлено структурным разделением отношений во всех восемнадцати модулях пакета.

    Модули: вира по статусу (ст. 1, 18–24К/1–3, 9–14П), увечья и поклёпная/дикая вира (ст. 2–9К/15–25, 60–61П — та же рука: 40 гривен единой суммой против 20+10 расщеплённых; 7 послухов, вервь платит либо не платит по обстоятельству), уроки скоту (ст. 25–26К/40–41П — кобыла оценена РАЗНО, 60 резан/7 кун, курса акт не даёт), Устав о резах и множественность кредиторов (ст. 47–51П — предел «два взимания гасят долг, три лишают его целиком»; князь первым, гость прежде местных), татьба и групповое хищение (ст. 10–17, 27–40К/26–40, 62, 74–78П), задница целиком (ст. 85–98П — статус решает САМ ПОРЯДОК наследования, завещание, опекунство, доля матери), закуп и холопство целиком (ст. 52–59, 102–115П — сердце Устава Мономаха: закрытый перечень «холопьство обельное трое», защищённые основания бегства закупа, ответственность господина, розыск чужого холопа), свод (ст. 12–15К/29, 31–33, 35П — цепочка владельцев до звена, не назвавшего источник, и свод челядина «по языку»), судебные пошлины и железный урок (ст. 41–43К/82, 99–101П), пытка без слова княжа (ст. 31–32К/71–72П), испытание по цене иска и свидетельство холопа (ст. 17К/17, 81–82П), Покон вирный и урок мостникам/городникам (ст. 42–43К/7–8, 90–91П — расхождение вирника, 60 против 8 гривен, названо, не сглажено), особые случаи убийства — поджог, порча скота, убийство жены, холоп без вины (ст. 79–84П).

    169/169 сценариев, 169 evaluate-вызовов байтово идентичны lawc eval/lawref. Найден и заведён отдельной задачей дефект boundaries.py (не этого пакета, [[boundaries-cross-edition-depth-leak]]): группировка фрагментов «своя редакция/чужая» по source_work вместо edition даёт наведённый шум для акта с двумя ВРЕМЕННЫ́МИ редакциями одного work — при полном 100 %-охвате последствие мало, фикс не сделан. Сознательно оставленные границы (не пробелы): повторное поручение закупа (ст. 53–54, 57 — вменение сформулировано как ответственность, не как процедура маршрута); тончайшие развилки вдовьей доли (ст. 88, 95) и отчимьей задницы по вине (ст. 97) сведены к заголовочной норме без исчерпывающего перебора под-случаев.

  • Конвенция о предупреждении преступления геноцида и наказании за него (09.12.1948, ООН) формализована целиком (пакет intl.humanrights.genocide_convention, юрисдикция International, 19 статей из 19). Закрывает пробел, названный самим rome-statute-1998 (тот сознательно не формализует состав геноцида). Закреплён русский аутентичный текст (ст. X, пять равно аутентичных языков) со страницы un.org, PINNED_UNOFFICIAL_COPY, независимо сверен с сертифицированной копией UN Treaty Series (том 78, № 1021). Ст. II — ДВОЙНОЕ closure §70 (виды группы × виды деяния): политическая группа и уничтожение имущества группы дают проверяемое FALSE_ONLY, а не молчание. Специальный умысел «уничтожить как таковую» — канал суждения §47.3 с общим authority Court. Ст. IV — второе closure по трём категориям должностного положения. Ст. XIV (срок/денонсация/продление по умолчанию) — арифметика §86, проверенная сценами corpus/kz/acts/genocide_convention.py (поверхность .lawtest передать deadlinePolicy не умеет). Глубина EXECUTABLE 18/ANCHORED 1 (ст. XIII — 90-дневный срок объявлен границей, тот же выбор, что у npt-1968), покрытие байтов 99,8 %, 10/10 evaluate-вызовов байтово идентичны lawc eval/lawref.

  • Указ Президиума ВС СССР от 8.05.1945 № 121/57 «Об объявлении 9 мая праздником Победы» формализован целиком (пакет su.decree.victory_day_1945, юрисдикция SU). Два предложения, ни единицы деления — мера глубины §33.1 по статьям неприменима (как у Декларации независимости США), покрытие байтов 99,9 %. Единственный акт из недавнего списка с живым потомком в корпусе: kz.corpus.holidays (2001, Закон РК № 267-II) независимо утверждает тот же день государственным праздником — историческое совпадение, а не формальная source-связь (её нет и не заведено, тот же принцип, что у Реймса/Карлсхорста в de.surrender.act1945). Вместо прозы — lawref impact-editions на паре дат 1945-05-07 → 1945-05-08 даёт SEMANTIC-CHANGE (редакция not_yet → applicable, сценарий NEITHER → TRUE_ONLY): собственное вступление указа в силу доказано инструментом дат-проекции §31, а не рассуждением. Нерабочий статус 9 мая снят Указом от 23.12.1947 № 111/53 (не формализован здесь, назван сноской источника) — отсюда legalStatus = historical_monument, не in_force. Найден и воспроизведён на holidays.law тот же зазор: bare-const идентификатор без явной entity_ref-декларации не создаёт адресуемый узел CLIR, и .lawtest-запрос к нему молча получает NEITHER; починка — явный const.

  • Прокламация об освобождении рабов (01.01.1863) формализована целиком — пакет us.emancipation, 14 сценариев, differential байтовый. Источник — Национальный архив США, PINNED_UNOFFICIAL_COPY; единицы деления нет (учёт §33.1 — unmeasured, покрытие байтов 99,7 %), как у us-declaration. ГЛАВНЫЙ ЮРИДИЧЕСКИЙ ФАКТ: акт освобождает не всеобщим образом, а закрытым географическим перечнем с вырезами — десять штатов «в состоянии мятежа», у двух из которых (Луизиана, Вирджиния) перечень несёт изъятия до 24 поимённых приходов и графств (включая одну коллективную константу на «сорок восемь графств, называемых Западной Вирджинией» — акт не называет их поимённо ни разу). Два независимых closure §70 (штаты / изъятые части). Сценарии EP-03/EP-04 исполнимо показывают, чего акт НЕ сделал: лицо в изъятом приходе и лицо в никогда не обозначенном пограничном штате дают одинаковый ответ на освобождение (правило не сработало) и разный — на замкнутый перечень изъятий, видимый на уровне МЕСТА (excepted), а не производной позиции лица (первая версия пакета ошибочно ждала третьей статусной оси на лице — найдено исполнением, поправлено). Обязанность воздержания от насилия (кроме необходимой обороны) держит известную границу v1: forbearance-позиции никогда не получают VIOLATED (только ACTIVE/EXPIRED), и сценарий-сторож это проверяет явно. Обязанность приёма годных лиц на военную службу — за каналом суждения §47.3 (орган MilitaryAuthority), поскольку его исход определяет самоё существование позиции. НАЙДЕНО ИСПОЛНЕНИЕМ: text block §17 не переживает фрагмент, кончающийся кавычкой источника (цитата предварительной прокламации от 22.09.1862) — генератор фрагментов переключает форму литерала на экранированную строку именно для этого случая (sync_emancipation_fragments.py, по образцу sync_leviathan_fragments.py, с добавленным экранированием переноса строки).

  • Договор об Антарктике формализован срезом «заморозки притязаний» — статья IV из 14 (пакет intl.antarctic.treaty, юрисдикция International). Технически самое трудное место среди международных актов корпуса: статья почти целиком — норма о том, ЧЕМ ФАКТЫ НЕ МОГУТ СТАТЬ. П. 1 (a)/(b)/(c) — толковательная оговорка (immunity §128, БЕЗ конкурирующего правила: текст исключает одно прочтение самого себя, не постулирует то, что исключает); п. 2 — заморозка легального эффекта деятельности (заявить/поддержать/отрицать притязание, создать право суверенитета — все четыре блокированы) плюс запрет новых и расширенных притязаний (prohibition). Объявленный срез — приём rome-statute-1998: закреплены байты всех 14 статей, формализована одна ("scope": ["4"]). ЗАВЕДЕНА КОНВЕНЦИЯ unit: "en_article_roman" в ОБЕИХ мерах §33.1 (ci/check_source_pinning.py и boundaries.py скилла formalize-act — правлены обе копии соглашения): заголовок «Article IV» (римский номер по-английски) не опознавала ни одна прежняя конвенция — договор был бы невидим молча, тот же класс отказа, что «26-бап» и римская статья Пакта Молотова–Риббентропа. НАЙДЕНЫ И ПОЧИНЕНЫ ДВА ДЕФЕКТА lawref, НЕ ОБОЙДЕНЫ. (1) NON_EXECUTABLE_RULE на strict-правилах с отрицательной головой (then not …): v1 строгого замыкания принимает голову только позитивной полярности (strict_rule_status, lawref/lawref/evaluator/strict.py); исправлено сменой силы на defeasible — конкурента нет, статус не отличим от строгого. (2) KeyError: 'args' в norm_lifecycle (lawref/lawref/evaluator/norms.py): сбор посылок нормы-позиции звал substitute_literal на КАЖДОМ конъюнкте тела, включая guard (терм-сравнение без "args" литерала) — первый норм-шаблон корпуса со сравнением в теле. Исправлено: guard/quantified-конъюнкты собирают посылки через guard_value/quantified_value, как уже делает solve(). lawc eval не падал изначально; differential после починки байтовый. vectors/run_vectors.py (317, 308 runnable) и lawref/selftest.py прогнаны целиком после правки — регрессий нет. Источник — English Wikisource (oldid 15600468, закреплена ревизия, не страница; PINNED_UNOFFICIAL_COPY). Измерено: 6 фрагментов, покрытие текста 7,3 % (знаменатель — весь договор), учёт 1 из 14, глубина §33.1 — EXECUTABLE 1, разметка §218 полная (22/16, ноль без метки), 12/12 сценариев регрессии, 12 evaluate-вызовов байтово идентичны между lawref и lawc, doctor.py без пробелов.

  • Публикация OPTN переведена на извлечение с сохранённой раскладкой — и таблица 8-7 стала читаемой целиком. Заведён corpus/tools/extract_pdf_layout_text.py с ОБЪЯВЛЕННЫМ контрактом нормализации, отличным от плоского: горизонтальные пробелы сохраняются (в них и живёт связь «строка ↔ колонка»), хвостовые снимаются, серия пустых строк схлопывается в одну, колонтитулы отсекаются тем же структурным признаком. Два прогона на одних байтах дают идентичный результат. Все 43 классификации таблицы 8-7 восстановились без пропусков против одиннадцати в плоском тексте. ПУБЛИКАЦИЯ ОДНА, А НЕ ДВЕ, И ЭТО СКАЗАЛ КОМПИЛЯТОР. Первая попытка завела layout ВТОРОЙ публикацией той же редакции рядом с плоской. Отвергнуто громко: §194 сверяет фрагмент со ВСЕМИ публикациями его редакции, а не с одной названной, — фрагмент принадлежит РЕДАКЦИИ, и две разные раскладки одной редакции сосуществовать не могут по построению (LDC-E5202 на четырёх фрагментах разом). Layout ЗАМЕНИЛ плоскую: он несёт ту же информацию плюс структуру колонок, и терять на нём нечего. СВЕРКА ПОЛОС CPRA СТАЛА СТРОЖЕ ПОБОЧНЫМ ЭФФЕКТОМ. В плоском тексте полоса и очки стояли на разных строках, и проверить можно было только их наличие ПОРОЗНЬ — таблица с переставленными очками прошла бы. В layout они стоят в одной строке, и генератор проверяет теперь именно СВЯЗЬ полоса ↔ очки. КОНВЕНЦИЯ policy_section НАУЧЕНА ОТСТУПУ — ВСЕМИ ТРЕМЯ РЕГУЛЯРКАМИ. Заголовки разделов в layout поехали вправо вместе со всем текстом, и якорь ^ нашёл бы ноль заголовков, молча отключив учёт разделов. Первая правка расширила только сканер, и ворота упали громко и правильно: «заголовок распознан учётом, но срез пуст — scan и article_text конвенции разошлись». Сканер, головной шаблон среза и терминатор следующего заголовка обязаны понимать один маркер; исправлено согласованно в обеих копиях соглашения (ci/check_source_pinning.py и boundaries.py). Корпусных FAIL в закреплении осталось 17 — ровно столько же, сколько было. Классификации таблицы 8-7: 1–16 из 43. 67 норм в пакете, покрытие текста 2,5 %, учёт разделов 2 из 149, глубина EXECUTABLE 2, восемь .lawtest — 8/8, differential байтовый, doctor.py без пробелов. С двенадцатой таблица требует ТОЖДЕСТВА групп крови, а не допустимости, — различие выражено отдельным предикатом и держится тестом KA-07: донор A и кандидат AB допустимы по таблице 8-6, но классификации 12 не получают. ГРАНИЦА ПЕРЕЕХАЛА ИЗ ИСТОЧНИКА В ОНТОЛОГИЮ. Классификации 17–43 различают конкретные группы крови в ОБЕИХ ролях («кандидат группы B при доноре группы O», «донор A2 или A2B») — это отдельный словарь, которого в пакете нет; подменить его имеющейся допустимостью значило бы сказать не то, что говорит таблица. Отдельно названо: сырой балл EPTS считается формулой с логарифмом, которого нет в замкнутой поверхности §58, поэтому принадлежность к верхним 20 % приходит фактом — тем же приёмом, что день недели в us-federal-holidays и MELD в us-liver-status.

  • Таблица 8-7 почечного распределения: классификации 1–11 из 43, и граница ИЗМЕРЕНА, а не выбрана. В us.optn.kidney_allocation добавлен 05-classifications.law — 61 норма против прежних 50, покрытие текста 1,0 %, шесть .lawtest — 6/6, differential байтовый, doctor.py без пробелов. ГДЕ ЗАКАНЧИВАЕТСЯ ВОССТАНОВИМОСТЬ ИЗ ЗАКРЕПЛЁННЫХ БАЙТОВ. Плоское извлечение (extract_pdf_text.py) схлопывает горизонтальные пробелы — этого требует общий контракт нормализации §13, — и вместе с ними исчезает СВЯЗЬ КОЛОНОК многоколоночной таблицы. Классификации 1–11 выходят цельными блоками «номер → критерии → расстояние → группа крови» и читаются однозначно. С двенадцатой связь разрушена: байты дают номер 12, его критерии, затем ПОДРЯД шесть пар расстояние/группа, принадлежащих строкам 12–17, затем голые номера 13–17 и лишь потом их критерии одним блоком. Сказать, какое расстояние у какой строки, можно только позиционным сопоставлением — догадкой о поведении извлекателя, а не чтением байтов (§249). Проверено, что это НЕ свойство источника: pdftotext -layout на том же PDF восстанавливает таблицу полностью. Но layout-текст обязан сохранять пробелы, чего нормализация §13 не допускает, — значит это ДРУГАЯ публикация той же редакции, со своим закреплением. Работа названа и не сделана, а не забыта. ТАБЛИЦА ЕСТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ ПРИОРИТЕТОВ, А НЕ РАЗБИЕНИЕ. Один кандидат отвечает условиям классификаций 1, 2, 3 и 4 сразу — каждая следующая мягче предыдущей; ответом служит наименьшая. Но минимум по ВЫВОДИМОМУ предикату есть агрегат, который отвергает барьер полноты §111, поэтому нормы выражают «каким классификациям кандидат отвечает», а выбор наименьшей живёт запросом — приём corpus/laws/faraid/03-residue.law. Держит это тест KA-06: сузь любое из четырёх правил лишним условием, и вложенность множеств пропадёт. КЛАССИФИКАЦИИ 1–7 ЗАМКНУЛИ КОНТУР С 8.4.C. Это в точности полоса, которую 04-ranking.law сортирует срочностью вперёд. До этого файла номер классификации приходил голым фактом дела; теперь для доноров с KDPI ≤ 20 % его можно проверить выводом. Пятая классификация читает ВЫВЕДЕННУЮ 8.4.E («прежний прижизненный донор»), а не факт, — цепочка «условия → классификация → место в листе» замкнулась целиком. ЧЕГО НЕ ДОПИСАНО. Классификация 7 («Medically Urgent») условия по группе крови в таблице не несёт — и правило его не добавляет: дописать «и группа крови допустима» было бы правдоподобно и неверно, таблица в этой строке молчит.

  • Статья 9 Конституции Японии заведена узким срезом — глава II «Отказ от войны» целиком (промульгация 03.11.1946, в силе с 03.05.1947), jp.constitution.article9: первый японский акт корпуса. Источник — e-Gov (elaws.e-gov.go.jp, API XML, не HTML-скрейп), PINNED_UNOFFICIAL_COPY. Единица деления НЕ ОБЪЯВЛЕНА (маркер «第N条» вне конвенций boundaries.py) — честная «мера неприменима»; покрытие байтов 99,1 %. Две соперничающие interpretation БЕЗ interpretation_group над запретом «戦力» (идиома organ-allocation): NecessaryMinimumSelfDefenseReading (правительство, с 1954) против LiteralPacifistReading (большинство конституционалистов) — в отличие от organ-allocation, ОБЕ ИСПОЛНЕНЫ 13 сценариями, не только structurally-checked; ключ — options явным 4-м аргументом evaluate(), не поле case["options"] само по себе. Канал суждения §47.3 внутри первого прочтения (exceeds_necessary_minimum_for_self_defense, authority CourtsOfJapan) отражает реальную историю: суды уклонялись от ответа по существу доктриной «государственного акта» (Сунагава 1959, Наганума 1973/1976). Реинтерпретация 2014–2015 (коллективная самооборона) названа границей, не выражена — пороги живут в другом источнике. Найден и задокументирован приём тестирования: ссылка дела на пакетную константу через entity_ref вместо au.const даёт тихий пустой solve() без issue на правиле со второй сущностью ([[case-const-ref-must-match-package-const]] в памяти проекта). Измерено: 13/13 сценариев, differential — 13 evaluate-вызовов байтово идентичны (lawc eval == lawref), check/lower чисты, doctor.py — пробелов нет.

  • Statutes of Apparel 1574 формализован целиком — прокламация “Enforcing of Statutes of Apparel” (Гринвич, 15 июня 1574), eng.corpus.statutes_of_apparel_1574: матрица “ранг × предмет” английского закона против роскоши, все 14 клауз мужского гардероба и все 13 женского (три чисто интерпретирующие клаузы пинованы, не нормированы), плюс операционная часть преамбулы. Decision table A3 отклонена осознанно (доменные константы запрещены в ячейках .lawtable.json — references/a3-surfaces.md); матрица выражена обычными правилами по прецеденту zheti-zhargy (estate_multiplier → здесь rank_precedence), генерализация по ярусу предмета — квантификацией for i: ApparelItem по институциональной реляции членства. Пять независимых каналов допуска: рождение (пятипороговая лестница, мужская и женская параллельно), богатство (£100/год, £40/год, 300 марок земли наследника), должность (клауза 11 — четыре офицера; клауза 12 — пространный судейско-городской список), родство (дети/сыновья/дочери/наследники пэров) и придворная служба. Два нюанса «исключение уже яруса, не вровень с ним»: гартеровский (клауза 1 — только пурпур) и придворный (клауза 9 — общий ярус, но не позолоченные шпоры). Текстовый курьёз сохранён, не исправлен: женская клауза 9 не несёт независимого пути по рангу пэрессы, клауза 11 для того же яруса его добавляет. Найден дефект исполнения: rule … strict { … not_known(exempt(p)) …} проходит check/lower/check_dead_rules.py чисто, но на исполнении не даёт вывода вовсе (truth_status — NEITHER независимо от факта); strict → defeasible чинит все правила (см. [[strict-rule-not-known-silently-inert]] в памяти проекта). Измерено: 28/28 сценариев (lawc test), check/lower чисты (98 правил, 33 фрагмента), lint.py 0 замечаний, 0 мёртвых правил; дифференциал и Lean-сертификаты не прогонялись — пакет вне KZ-machinery, как poor-settlement-1691-1697. Источник — веб-транскрипция elizabethan.org (PINNED_UNOFFICIAL_COPY), сверенная пофразово с Folger/Shakespeare’s Globe, не с изданием Hughes & Larkin. Три обязанности приведения в исполнение заведены, но не доведены до VIOLATED — нужен closure §70, не построенный. Полный разбор границ — README.md пакета.

  • Calendar (New Style) Act 1750 (24 Geo. 2 c. 23) формализован целиком — первый акт корпуса о самом календаре, а не о людях: gb.corpus.calendar_act_1750, преамбула и 6 статей из 6, покрытие байтов 67,1 %, legalStatus = in_force (правило високоса ст. 2 — действующее британское право, не памятник, проверено на всех семи годах, названных самим Актом). НЕСУЩАЯ НАХОДКА: Date в этой системе — proleptic-григорианская ось без разрывов; ст. 1 объявляет 2 и 14 сентября 1752 года юридически соседними («the natural day next immediately following»), а движок между ними вычисляет 12 дней, не 0, — ровно на одиннадцать больше единицы, той самой цифрой Акта. Величина утверждена не прозой, а правилом EngineCountsAcrossTheGap и проверена сценарием CAL1750-01; сам разрыв (несуществование 3–13.09.1752) нигде не выражен — названная, не молчаливая граница поверхности §58/§86. Попутно найден и задокументирован (не починен — errata-класс) дефект: mod объявлен в §58/grammar.ebnf, но не реализован в lexer’е lawc ни разу (прямая проба: LDC-E0201 на y mod 400 внутри when); обход через /→Rational закрыт тоже (round отвергает Rational) — классификация «кратен ли год четыремстам» подана фактом, не вычислена правилом. Измерено: 7/7 сценариев, differential — 7 evaluate-вызовов байтово идентичны, Lean-ядро (lawcheck) — 7/7 сертификатов на обеих ногах контура (оракул и движок), doctor.py без пробелов.

  • civil-procedure: покрытие регрессии поднято с 21/670 до 594/670 правил (3 % → 88,7 %). Обе меры §33.1 у ГПК РК (kz.corpus.civil_procedure, 490 статей, 670 правил в 46 файлах) были чисты и раньше (boundaries.py 488 EXECUTABLE/2 SOURCE_ONLY, check_source_pinning.py 97,9 %), но не видят, что правило СРАБАТЫВАЕТ — третья мера (ci/report_norm_graph.py) показала, что регрессия исполняла только 21 правило из корневых файлов, а все 58 chapters/*.law не исполнялись НИ РАЗУ. Девятью параллельными агентами дописаны сценарии по всем 46 правило-несущим файлам, каждый интегрирован и перепроверен по отдельности — corpus/kz/acts/gpk.py 9 → 174 сценария, 0 отказов, 597 evaluate-вызовов байтово идентичны lawc eval == lawref. Манифест и scenario-ratchet.json.kz.gpk (9 → 174) обновлены точечно. Попутно закрыт латентный дефект тестового хелпера fact() (id ассерции не зависел от содержимого аргументов — двусмысленность в proof-графе, truth status не затронут: SupportStore индексирует по содержимому литерала, не по id). Остаток 76/670 — поимённо дублирующие альтернативные ветви к уже покрытым выводам (в основном исключения из судебного иммунитета иностранного государства, ст. 477–494). Отдельно найдено и НЕ тронуто: 44 отношения (пятая часть всех 217 в корпусе) кодируют процессуальный срок величиной в имени вместо календарного терма — пакет не несёт ни одного Instant-поля ни для одной процессуальной сущности, закрытие требует нового временного слоя, а не починки констант.

  • Почечное распределение OPTN отвечает теперь «кто выше в листе», а не только «сколько очков». В us.optn.kidney_allocation добавлены Policy 8.4.C (сортировка внутри классификации), 8.4.D с таблицей 8-6 (группы крови) и 8.4.E (прежние прижизненные доноры) — 50 норм против прежних 22, охват разделов 2 из 150, глубина §33.1 EXECUTABLE 2, покрытие текста 0,8 %, пять .lawtest — 5/5, differential байтовый. ЛЕКСИКОГРАФИЧЕСКИЙ ПОРЯДОК ВЫРАЖЕН ЯРУСАМИ НИЧЬЕЙ (приём corpus/laws/uefa): срочность → время в срочном статусе → очки → дата регистрации, а для прочих классификаций — очки → дата. Какой из двух порядков применяется, выводится из полосы KDPI донора (≤ 20 % — таблица 8-7, > 20 % и < 35 % — 8-8, ≥ 35 % и ≤ 85 % — 8-9, > 85 % — 8-10) и номера классификации. Instant в сравнении дат регистрации работает; тест KA-03 проходит цепь насквозь — разорвись она на любом ярусе, ответ стал бы NEITHER. НАЙДЕНА ОШИБКА МОДЕЛИРОВАНИЯ, КОТОРУЮ DIFFERENTIAL НЕ ЛОВИТ ПО ПОСТРОЕНИЮ. Источник говорит о МНОЖЕСТВЕ («for candidates within classifications 1 through 7 … candidates are sorted»), а факт дела — упорядоченная пара. Пока нормы читали эмпирический same_classification напрямую, запрос ranks_above(B, A) при поданном same_classification(A, B) давал NEITHER: срочный кандидат не поднимался над несрочным, check был зелёным, а обе реализации молчали ОДИНАКОВО. Симметрия принадлежности выражена явно — двумя правилами замыкания в институциональный in_same_classification, — и держится тестом KA-04. ТАБЛИЦА 8-6 ПРОТИВ КАЗАХСТАНСКОЙ — ИЗМЕРЕННОЕ СРАВНЕНИЕ, А НЕ РИТОРИКА. Один предмет, два нормативных порядка: приложение 3 к приказу № ҚР ДСМ-120/2020 даёт четыре строгих правила без единого исключения, OPTN — восемь, из которых три суть исключения. Базовая совместимость у OPTN УЖЕ (O идёт только в O, B только в B), зато есть дефитер, которого у казахстанского акта нет вовсе: для предложений в категориях нулевого несовпадения ABDR почки O и B идут кандидатам иных групп (тест KA-05). И условная ветвь A non-A1 / AB non-A1B → B при трёх требованиях к программе. 8.4.E ПРЕВРАТИЛ ФАКТ В ВЫВОД. prior_living_donor был чистым фактом дела — балл начислялся по значению, которое кто-то подал; теперь классификация выводится из четырёх условий (пожертвование одного из пяти органов на территории США плюс три сообщённых врачом сведения), и подать её мимо них нельзя. ЕДИНИЦА ДЕЛЕНИЯ ПОТРЕБОВАЛА СВЕСТИ ТРИ ФРАГМЕНТА В ОДИН. Соглашение якорей §33 читает номер регуляркой ART-N[-_N] и буквенного суффикса не берёт: KA_ART8_4C не разрешается в единицу вовсе, и три отдельных фрагмента остались бы вне ОБЕИХ мер §33.1 молча. Подразделы C, D и E в закреплённых байтах смежны, поэтому один фрагмент 8347–8424 покрывает их без разрывов; 8.4.A (EPTS) и 8.4.B (KDPI) в него не входят — их формулы содержат логарифм, которого нет в замкнутой поверхности §58, и оба балла приходят фактом.

  • Табель о рангах 24 января 1722 года (ст. ст.) и пороги потомственного дворянства 1845/1856. Пакет ru.empire.tabel_o_rangakh: сетка чинов — A3-таблица 14×3 (сухопутные, статские, придворные; гвардия, артиллерия и флот вне среза), порог дворянства — три поколения правил (воинские 14→8→6, статские и придворные 8→5→4). Манифест 11.06.1845 (ПСЗ II № 19086) и указ 09.12.1856 (ПСЗ II № 31236) — отдельные source_work, не revision Табели. Юрисдикция RU, historical_monument. evaluate читает окна effective; impact-editions — lifecycle редакции (TOR-22/23: состояния и снятые узлы, не переворот исхода на замороженном legalTime). Даты юлианские. Измерено: 23/23 сценария, 21 evaluate-вызов байтово, три .lawtest — 3/3. Глубина по умолчанию EXECUTABLE 2 (манифест 1845); пункты 11/15 Табели — 2; указ 1856 — 1; сетка unmeasured. Найдено: effective без интервала — LDC-E1305 на lower; wiki-парсер сдвигал колонки класса 11 и клеил |} к чину XIV; вход A3 — полный StableId.

  • Кэш programHash §170 с плановой сверкой (DECISION-0054): 77 % вызова оракула считало не право, а хэш. build_manifest пересчитывал semantic_hash(ir) на каждом evaluate, хотя это чистая функция от неизменного за прогон IR: профиль kz-criminal-code — 2,12 с хэша из 2,83 с вызова при 0,25 с самого вывода права. Тихо закэшировать было нельзя: пересчёт работал детектором мутации входного IR (докстринг check_kz_differential.py; прецедент _conjuncts результатов не менял и ловился ТОЛЬКО этим путём). Кэш по id(ir) с сильной ссылкой (довод _IR_DIRS) и LRU-64; детектор заменён сверкой по расписанию степеней двойки — мутация между первым и вторым вызовом ловится всегда, цена O(log N), расписание детерминировано и на байты не влияет; новый детектор работает и в прогонах без differential, где у старого не было второй стороны сравнения. Канарейка в селфтесте обязана падать на подложенной мутации (первая версия проверки сама же упала — мутированный вызов пришёлся вне расписания, что подтвердило точность окна). Замерено до/после на одном семействе: --only entrepreneurial_code — 1778 с → 371 с, 4,8×; differential --only personal_data — 31 вызов байтово идентичен, determinism-линт зелёный.

  • Декалог: Исход 20:2–17 и Второзаконие 5:6–21 (KJV) — две рецензии десяти слов в одном пакете. Пакет he.torah.decalogue. Два source, не две edition одного work: Исход и Второзаконие — два места Торы, сравнение слотов (remember/keep, творение/исход, порядок вожделения) живёт соседством в CLIR. Знаменатель §33.1 — стих, не заповедь: три традиции нумерации — факты commandment_number, и объявить единицу commandment одной традиции сделало бы её мерой полноты. Заведена конвенция unit: "verse" в обеих мерах §33.1, не угадываемая: маркер N:M есть в цитатах Писания внутри любого акта. Номер учёта — 20-2 (двоеточие якорь §33 не берёт). Источник — транскрипция KJV (Gutenberg #10), PINNED_UNOFFICIAL_COPY; kind doctrine, юрисдикции нет, in_force нет. Исх 34 назван вне охвата. Вожделение и имя всуе — ANCHORED, не притворно-исполнимый запрет. Меры (Исход): EXECUTABLE 12, ANCHORED 4 из 16, SOURCE_ONLY 0; Второзаконие той же глубиной 12/4. Сценариев 25/25, differential 25/25 байтово, шесть .lawtest — 6/6, doctor.py без пробелов. Найдено исполнением: LDC-E4101 на бинарном действии запрета (унарная форма); шесть тестов в одном файле не лоуверятся (LDC-E1315); result_kind POSITIONS не из словаря §174.1 (NORM_POSITION).

  • Печёночные статусы OPTN формализованы в ДВУХ редакциях сразу — первый пакет корпуса, заведённый ради оси редакций. Пакет us.optn.liver_status: Policy 9.1.B (педиатрический статус 1A) и 9.1.C (статус 1B) в редакциях 16.03.2023 и 13.11.2025. Обе публикации закреплены и обе нормативны — у всех прежних пакетов публикация одна, а прошлая редакция была самое большее упоминанием в комментарии. ЧЕТЫРЕ ИЗМЕНЕНИЯ, И ВСЕ ЧЕТЫРЕ СВЕРЯЮТСЯ С БАЙТАМИ ВОРОТАМИ (check_criteria генератора отказывается писать, если формулировка нашлась не в той редакции): порог INR стал нестрогим («greater than 2.0» → «greater than or equal to 2.0»); появилась полоса INR 1.5–2.0 при энцефалопатии в течение 56 дней; из статуса 1B убраны ворота «calculated MELD or PELD greater than 25»; окно кровотечения расширено с 30 мл/кг за 24 часа до 30 за 96 или 20 за 24, а критерий Glasgow coma score снят. impact-editions ОТВЕЧАЕТ ИЗМЕРЕНИЕМ: редакция 2023 applicable → closed, редакция 2025 not_yet → applicable, семантический diff added=5/removed=4, и из девяти сценариев шесть меняют исход — включая ОБРАТНЫЙ переворот (glasgow-only-loses-status: TRUE_ONLY → NEITHER: снятый критерий лишает статуса). Три сценария исход не меняют — это контрольная группа, критерии которой в обеих редакциях дословно совпадают. Покрытие полное: каждая норма поздней редакции доказанно применилась хотя бы в одном сценарии. ДВА МЕХАНИЗМА ДАТИРОВКИ НЕ СКЛАДЫВАЮТСЯ — измерено, а не предположено. effective на правиле читает ТОЛЬКО исполнитель; проекция impact-editions его не видит вовсе, она снимает узел по жизненному циклу редакции, в которую ведут его якоря. Жизненный цикл читает ТОЛЬКО проекция: evaluate() §31 не применяет, и при полном CLIR нормы обеих редакций применимы разом. Пока effective стоял на правилах, НИ ОДНА дата legalTime в сценарии не делала отчёт верным — инструмент двигает проекцию, но не дело; первый прогон девяти сценариев показал это прямо, перевернув ventilator-dependent и requires-dialysis, критерии которых дословно одинаковы, и НЕ показав настоящих изменений. Датировка переведена на якоря: правило, текст которого совпадает в обеих редакциях, якорится в оба фрагмента и переживает обе проекции. Цена названа в шапках модулей: прямой запрос к полному CLIR датировки не имеет вовсе, и спрашивать пакет следует у проекции. ЗАВЕДЕНЫ ОТДЕЛЬНЫЕ ВОРОТА ci/check_liver_edition_impact.py (шаг конвейера + канарейка, которая снимает жизненный цикл ранней редакции и ОБЯЗАНА упасть). Причина: у этого пакета обычные меры почти ничего не проверяют — единица деления политики OPTN («9.1.B») не опознаётся ни одной из десяти конвенций §33, поэтому учёт разделов честно печатает «НЕ ИЗМЕРЕН», а глубина §33.1 неприменима. Всё содержательное утверждение пакета живёт в отчёте, и ворота проверяют его ПОИМЁННО: состояния редакций, состав перевёрнутых сценариев в обе стороны, контрольную группу и полноту покрытия. Меры и прогоны: 4 фрагмента из двух публикаций, покрытие 0,7 % и 0,6 % (закреплены обе политики целиком, формализован срез из двух разделов), разметка §218 — 35/35 и 14/14 норм, два .lawtest — 2/2, differential байтовый, doctor.py без пробелов. Попутно подтверждено на живом акте: not над ЭМПИРИЧЕСКИМ предикатом требует установленного отрицательного факта — отсутствие утверждения ложью не является, и без него правило молчит при зелёном check (тест LS-02 держит это).

  • Laws of Chess ФИДЕ (в силе с 01.01.2023) формализованы срезом процедурного оверлея — 6 статей из 12. Пакет fide.laws.chess: первый акт корпуса, который есть регламент международной спортивной федерации и не шахматный движок. Доска, очередь хода, геометрическая легальность, флаг взятия на проходе, счётчик 50 ходов и число повторений позиции приходят фактами протокола (как match_won_by у УЕФА). Право решает рокировку (3.8.2), окно en passant (3.7.3), заявки ничьей (9.2/9.3/9.6), два невозможных хода (7.5.5), «тронул — ходи» (4.3) и канал арбитра (предисловие 0.2, ст. 12). Объявленный срез: статьи 3, 4, 5, 7, 9, 12. Юрисдикция International, не FIDE — FIDE издатель, не правопорядок. Заведена единица деления en_article («Article 3: Title») в обеих мерах §33.1. Автомат NotStarted → Playing → Ended; цвет хода не в состояниях (DECISION-0013 §2.2); ход — self-loop PlayMove. Полуход ≠ календарный день: флаг EP — факт кадра. Измерено: 7 фрагментов, покрытие текста 55,6 % (19 282 из 34 673 байт), учёт 6 из 12 при нуле неучтённых, глубина §33.1 — EXECUTABLE 6, ANCHORED 0, SOURCE_ONLY 0, разметка 68 объявлений / 47 норм (без метки 6 — профиль процедуры, E-0044), сценариев 16/16, differential байтовый (16 evaluate-вызовов), три .lawtest — 3/3, doctor.py без пробелов. Найдено исполнением: authority Arbiter столкнулся бы с entity Arbiter; not legal_move без биндера — LDC-E4101; «король не ходил» в открытом мире — NEITHER (closure §70, не not_known); канал §47.3 снова только на строгом мосте (FIDE-15). Геометрия 3.1–3.6 и приложения A–G вне среза; счётчики не выводятся из журнала (барьер §111).

  • Клятва Гиппократа формализована целиком — 9 абзацев из 9. Первое в корпусе самообязательство БЕЗ СУВЕРЕНА. Пакет grc.hippocrates.oath, вид источника oath заведён этим актом, jurisdiction "none". Отсутствие суверена — не оговорка о древности, а свойство каждого узла: держатель полномочия §127 и его предмет — одно лицо (holder who; over who; ни у одной другой нормы корпуса они не совпадают), мерило исполнения дважды отдано суждению самого клявшегося (канал §47.3 с органом OwnAbilityAndJudgement вместо Court — внешнего носителя власти у акта не существует), а санкция девятого абзаца остаётся институциональным фактом: кто воздаёт и как, Клятва не определяет (прецедент «deus ipse vindex erit» у Цицерона). Меры: 15 фрагментов (по ОГОВОРКАМ, не по абзацам — абзац 2 несёт шесть обязанностей, абзац 9 две противоположные судьбы), 51 правило, 22 шаблона норм (12 duty, 9 prohibition, 1 power), 2 канала суждения, 1 замыкание §70, 1 приоритет §116; покрытие текста 97,0 % (1916 из 1975 байт — непокрытое посчитано поимённо: 42 байта разделителей оговорок, 16 разрывов абзацев, 1 хвостовой перевод строки); сценариев 20/20, все 25 evaluate-вызовов байтово идентичны; мёртвых правил ноль, мёртвых символов ноль; разметка §218 полная (63 объявления, 73 нормы, en и ru совпадают числом); три рукописных .lawtest §267 — 3/3, плюс 25 эмитированных; третья нога контура зелёная (25 сертификатов оракула и 25 сертификатов движка проверены Lean-ядром, отказов ноль, висячих посылок ноль); doctor.py без пробелов. Вместо неприменимой меры измерено по фрагментам: правил 51, у каждого стоит @source, и на каждый из 15 фрагментов приходится хотя бы одно правило — фрагментов, из которых ничего не выводится, ноль. Это сопоставление якорей со списком фрагментов, а не уровни §33.1: их выставляет только измерение, и оно здесь возвращает unmeasured. Учёт §33.1 — unmeasured, и это верный ответ, а не пробел: единицы деления нет вовсе (девять абзацев без номеров), глубина по единицам неприменима, ci/formalization-depth.json держит null. Заголовок «полная формализация» в смысле ОБЕИХ мер для пакета недостижим по построению; сценарии здесь не регрессия поверх меры, а её единственный носитель — тот же класс, что Декларация независимости США. Найдено исполнением и квалифицировано: эффект power §127.2 невидим поражаемому слою. Факт, порождённый материализацией эффекта, виден строгим правилам и не виден поражаемым — вместе со всем, что из него выведено. Замер прямой: один и тот же вопрос при bound_by_oath из эффекта даёт NEITHER, фактом дела — FALSE_ONLY (три правила с отрицательной головой); замыкание §70 при этом успевало вывести отрицание раньше положительного вывода и давало BOTH. Обе реализации согласны байтово (25 вызовов lawc eval == lawref), то есть differential здесь слеп по построению. Это не дефект и не граница языка, а ограничение v1, записанное DECISION-0021 §4.3 («круг заканчивает L1-стадию целиком до публикации»; эффекты §127 названы там же вне модели круга); в коде видно прямо — после materialize_effects движок зовёт только strict_closure. Обойдено строгим правилом рядом с полномочием: узел power остаётся утверждением о самообязательстве, а правило доставляет вывод туда, куда эффект в v1 не доходит; парность их условий закреплена сценой HO-02. Измерено на этом акте: из трёх видов цели нарушение наблюдается ровно у ОДНОГО, и причины у двух других разные. (1) maintenance §124.2 видит контрпример: разглашение тайны даёт VIOLATED (HO-15) — ради этого тайна записана обязанностью, а не запретом. (2) forbearance не даёт VIOLATED НИКОГДА: HO-09 требует ACTIVE при деле, содержащем применение ножа, и обязан упасть, когда появится событийная модель §79; нарушение выводится девятью обычными правилами от факта деяния (приём Локка). (3) achievement §136.3 требует неисполнения ПОСЛЕ окна, а Клятва не назначает срока ни одному своему обещанию — «to fulfill his needs when required» говорит, ОТ ЧЕГО возникает обязанность, и молчит о том, к какому дню она исполняется. Окна открыты справа, просрочка не наступает: дело с ЯВНЫМ отрицательным фактом («нужда не восполнена») оставляет позицию ACTIVE и на нижней выразимой дате, и на 2026 год (HO-20). Обещание без срока просрочить нельзя — свойство ТЕКСТА, а не среза языка, и причина, по которой Клятва обходится санкцией девятого абзаца вместо сроков. Отсюда третья граница: неисполнение положительной обязанности в преступление клятвы НЕ выводится (текст об этом молчит), и врач, не восполнивший нужду учителя без единого запрещённого деяния, сохраняет награду (HO-16) — граница формализации, а не утверждение Клятвы о таком враче. Замыкание и открытый перечень стоят рядом и оба читаются из текста: «but to no others» абзаца 2 закрывающие слова несёт — closure §70 отвечает FALSE_ONLY (HO-06); «including the seduction of women or men» абзаца 7 вводит пример, а не исчерпание — ответ NEITHER (HO-14). Различия «женщина или мужчина», «свободный или раб» в правиле НЕТ намеренно: перечисляя их, Клятва говорит, что они не имеют значения, и HO-13 задаёт один вопрос о свободном и о рабе, требуя одного ответа. Источник — ПЕРЕВОД, и статус это говорит. Michael North, NLM, 2002 (17 U.S.C. §105, общественное достояние); аутентичного текста у Клятвы не существует, поэтому materialization_status — PINNED_UNOFFICIAL_COPY неснимаемо, officiality unofficial, verifiedAgainstSource = false (сверять не с чем). adopted не объявлен: дат до нашей эры язык не выражает, окна позиций идут от @0001-01-01 — нижней выразимой границы, а не даты Клятвы (HO-19 требует того же ответа на 2026 год). Где перевод сужает греческое чтение, это названо: «I will not give a lethal drug to anyone if I am asked» ставит просьбу условием, и безусловный запрет из этих байтов не следует. Старый адрес NLM (hmd/greek/greek_oath.html), на который ссылается литература, отдаёт заглушку с редиректом — закреплён живой раздел «Ancient Greek Medicine». legalStatus = "historical_monument" относится к закреплённым байтам: классический текст сегодня не приносится (это говорит сама страница NLM), а живущие переработки в пакете не закреплены. НЕ ПРИГОДЕН ДЛЯ КЛИНИЧЕСКОГО ПРИМЕНЕНИЯ.

  • Universi Dominici Gregis (22.02.1996) — первый акт Святого Престола в корпусе, срез: порог избрания Римского понтифика. Пакет vat.canon.universi_dominici_gregis: юрисдикция HolySee, вид constitution. Слоган «одни бюллетени — разный папа»: 60 из 115 при исчерпанных сериях n. 74 избирают абсолютным большинством на 19.04.2005 и молчат после motu 26.06.2007. Две трети — votes * 3 >= present * 2 без формулы «плюс один»; порог не в A3 (сменилось правило, не ставка). n. 75 с текущей vatican.va в срез не входит (консолидация Normas nonnullas 2013) — рецитация 1996 и замена 2007 живут в motu proprio Бенедикта XVI (Sala Stampa 26.06.2007). Правило 1996 несёт effective [@1996-02-22, @2007-06-26), потому что evaluate не проецирует редакции. Closure на pope_elected не ставится. Заведена единица point в обеих мерах §33.1. Измерено: 7 фрагментов, покрытие конституции 4,2 % (3006 из 70850) и motu 51,2 % (1308 из 2554), учёт 5 из 92, глубина EXECUTABLE 2 / SOURCE_ONLY 3, разметка 6/6 и 2/2, сценариев 6/6, differential байтовый (6 evaluate-вызовов), шесть .lawtest — 6/6. Найдено источником: две трети стоят в безымянном продолжении n. 62; HTML <sup> снимать до тегов, иначе конвенция point теряет номер.

  • Римский статут МУС (17.07.1998, в силе с 01.07.2002) формализован срезом юрисдикции и допустимости — 6 статей из 128. Пакет intl.icc.rome_statute: первый акт корпуса о комплементарности двух порядков. Сосед un.ilc.nuremberg_principles описывает международное уголовное право без остаточной роли национального суда; здесь Суд действует по делу, только если национальное преследование отсутствует либо не является подлинным. Это не выключатель Статута: составы ст. 5–8 bis в срез не входят, ст. 17 — затвор на полномочие ст. 13 (§127). Объявленный срез Части 2: статьи 11, 12, 13, 17, 19 и 20. Закреплён русский подлинник (ст. 128); officiality official о тексте стоит рядом с PINNED_UNOFFICIAL_COPY о байтах портала ООН (A/CONF.183/9) — та же пара, что у ДНЯО. Конвенцию unit: "article" объявлять нельзя: это умолчание автоопределения обеих мер §33.1, не ключ DECLARED_CONVENTIONS. Меры: 6 фрагментов, покрытие текста 99,97 % (17 348 из 17 354 байт), учёт 6 из 6 при нуле объявленных границ, глубина §33.1 — EXECUTABLE 6, ANCHORED 0, SOURCE_ONLY 0, разметка §218 полная (57 объявлений, 49 норм), мёртвых правил ноль, восемь .lawtest §267 — 8/8, сценариев 16/16, все 16 evaluate-вызовов байтово идентичны между lawref и lawc. Канал суждения §47.3 с органом из текста («Суд определяет»). Except-clause ст. 17 нельзя записать поражаемым правилом с суждением в дефитере: DECISION-0025 оставляет defeasible вне judgment_blockers, и это молча объявило бы дело недопустимым. Мост строгий, голова литеральная. Открытый мир не выводит допустимость из молчания о национальном производстве (RS-04). Ст. 12 п. 2 не применяется к передаче СБ (ст. 13(b)). Полномочие спрашивают positions, не слабым разрешением §126 (RS-15 / SAM-21). Найдено исполнением: defeasible-отрицание юрисдикции ratione temporis закрывало путь строгому полномочию (LDC-E4103); not gravity_justifies… без положительного связующего — LDC-E4101. Параметр дела — matter, никогда case (hard keyword). Квирк извлечения закреплён: у ст. 19 пункт 1 потерял номер «1.». Границы названы: ст. 5–8 bis, ст. 14–16 и 18, пункты 4–11 ст. 19.

  • Déclaration des droits de l’homme et du citoyen (26.08.1789) формализована целиком — 17 статей из 17. Пакет fr.declaration.rights_1789: первый французский акт корпуса и первый, у которого замыкание §70 ставит САМ ИСТОЧНИК, а не формализатор. Статья 5 — три нормы, не один closure: (1) закон вправе воспрещать только вредное обществу — канал суждения §47.3; (2) незапрещённое нельзя остановить — closure на forbidden_by_law; (3) к неповеленному нельзя принудить — отдельный closure на commanded_by_law. Чтение «Loi» — изолированный пакет (запреты этого акта, не всего французского права). legalStatus = "in_force": bloc de constitutionnalité (преамбула 1958, 71-44 DC 1971). Заведена единица деления fr_article («Article 1er» → 1) в обеих мерах §33.1. Измерено: 18 фрагментов, покрытие текста 99,6 % (5005 из 5023), глубина §33.1 — EXECUTABLE 17 / ANCHORED 0 / SOURCE_ONLY 0, учёт 17 из 17, разметка §218 полная (99 объявлений, 51 норма), сценариев 19/19, differential байтовый (19 evaluate-вызовов), семь .lawtest — 7/7. Найдено исполнением: exact не строит контрапозицию (§151) — отрицание ст. 16 записано отдельными правилами; канал §47.3 снова проходит только через строгий мост.

  • Гоббс, «Левиафан» (1651), главы XIV–XV: девятнадцать естественных законов — формализация ЦЕЛИКОМ, обе меры §33.1 полны. 58 из 58 единиц деления EXECUTABLE, покрытие байтов 99,5 % (53 264 из 53 533; непокрытые 269 — РОВНО 134 разделителя \n\n между блоками плюс завершающий перевод строки, посчитано, а не сказано на глаз), 15/15 сценариев регрессии, 6/6 рукописных тестов §267, differential байтовый (33 evaluate-вызова, lawc eval == lawref). Восьмая объявляемая единица деления §33.1 — marginal, заметка автора на полях: номера у неё в тексте нет вовсе, есть фраза, и таблица заголовков принадлежит АКТУ (articles.json), как у word «Қара сөз» и ordinal Атлантической хартии; без неё обе главы были бы для мер невидимы молча. Несущее в акте — учение о двух forum’ах (единица 55): binds_in_foro_externo стоит посылкой в каждом из девятнадцати законов, поэтому снятие безопасности гасит шестнадцать обязанностей ДЕЙСТВИЯ разом и оставляет обязанности СТРЕМЛЕНИЯ; обе меры §33.1 этой потери не увидели бы, её держат LEV-11 и LEV-12. Довод против Дурака (§274) — первый в корпусе БЕЗ единого узла priority: первая редакция ставила три, компилятор отверг все три (LDC-E4107, головы о разных предикатах), и диагностика указала на устройство самого довода — Гоббс не опровергает вывод Дурака, а ПОДРЫВАЕТ его посылку (§274.3), поэтому приоритет не нужен вовсе. Замкнутое и открытое в одном предложении: перечень девятнадцати замкнут §70 по ОТКРЫТОМУ предикату законов природы (двадцатый закон получает FALSE_ONLY с сертификатом), а закон против невоздержности, который Гоббс тут же допускает, — честное NEITHER. Расхождение глав XIV и XV не сглажено: несправедливость главы XIV выводится без государства, «несправедливость на самом деле» главы XV требует принуждающей власти; сгладить было бы легче всего и было бы неправдой (LEV-06). Три дефекта закреплённой копии задевают единицу деления и названы поимённо: две маргиналии вклеены публикацией в абзац (единицы 15 и 31), третья разорвана пополам (единица 55); знаменатель поэтому 58, а не 60, и восстанавливать перенос строки, которого в публикации нет, запрещено тем же правилом, что и исправление байта ë в De legibus.

  • Дефект lawc, найденный формализацией: protected_effect terminate(…) отвергался, и уже закоммиченная Декларация независимости перестала понижаться. Признаком суффикса имени поля служил contains('_'), а protected_effect — каноническое имя из grammar.ebnf (immunity_item), никакого вида эффекта оно не называет; подразумеваемым выходил create, и самая частая форма иммунитета падала LDC-E1305. lawc check при этом чист — отказ приходит только на lower. Квалификация: дефект lawc, не SPEC и не lawref. Вектор T147 этого не ловил и поймать не мог: у иммунитета он проверяет только protected_effect create(…) — единственный вид, при котором подразумеваемый create СЛУЧАЙНО совпадает с конструктором. Правка: сравнивать суффикс с конструктором только там, где суффикс действительно назван (_terminate | _modify | _create).

  • Errata E-0052: Decimal не канонизировался — дефект ОБЕИХ реализаций, невидимый для двух гейтов сразу. §208 задаёт каноническую форму дословно («без leading zeros, trailing fractional zeros и negative zero») и даёт пример («source 12.50, 1.25e3 normalizes в 12.5, 1250) — не делала этого ни одна реализация. Цена на деле: факт assert price(t, 110000.00 USD) НЕ совпадал с гардом when price(t, 110000 USD) — NEITHER при полностью зелёном check. Механизм найден, а не предположен: факты индексируются каноническими байтами (lawref/evaluator/solver.py:520), поэтому нереализованная канонизация ломала равенство напрямую, а semanticHash §209 зависел от того, как автор набрал число. Квалификация: дефект обеих реализаций, не SPEC; именно из-за одинаковости ошибки молчали и cross_canon (G-M1a), и differential. Правка в трёх местах, и все три обязательны: law_canon::canonical_decimal + проход по документу в canonical_bytes; зеркало lawref.canon.canonical_decimal; канонизация литерала при понижении в law-hir (Decimal, Money, Quantity, percent) — без последнего .lawir.json продолжал бы нести 110000.00, и равенство при исполнении осталось бы ложным. Радиус измерен до и после: 74 значения в трёх пакетах корпуса (us-fnma-income, kz-social-code, kz-internal-affairs) и демо «Лилипутия»; состав узлов не сдвинулся, прочих расхождений ноль. Голдены сдвинуты ТОЧЕЧНО, с предохранителем: запись разрешалась, только если множество разошедшихся путей ⊆ {resultHash, proofGraph.proofHash, manifest.programHash, manifest.semanticHash, manifest.caseHash, manifest.queryHash} — 13 голденов прошли, ни один не отказал, ни одного расхождения в results, proofGraph-структуре или issues. Инвариант 3 не нарушен: поведение неподвижно, сдвинулись хэши исправленного ВХОДА. Векторы ERR-E0052-DECIMAL-CANON (evaluate, в SUPPORTED) и ERR-E0052-DECIMAL-CANON-HASH (hash-compare). Найдено при заведении incoterms.group_c.

  • Errata E-0053: проверяющий обход не заходил в константу вовсе. DeclKind::Const не встречался в law-hir/src/types.rs НИ РАЗУ, и молчали обе половины декларации: const R: Date = 110 percent; проходил check чисто и понижался в узел с returnType: Date и value.type: Decimal одновременно (проверено на семи типах подряд), а const B: Decimal = 1 + "текст"; проходил тоже — хотя тот же терм в теле правила даёт LDC-E2108. Квалификация: дефект lawc. Правка добавляет обход: check_type_ref на объявленном типе, check_term на инициализаторе и сверка вида новым кодом LDC-E2111; послабление §49 (Integer как безразмерный скаляр при объявленном Money/Decimal/Rational/Quantity) остаётся законным, Unknown не отвергается. Радиус латентный, измерен дважды: 0 расхождений в 222 константах корпуса и ни одного нового отказа при lawc check по всем 55 пакетам. Вектор ERR-E0053-CONST-TYPE (static) требует ОБА кода в одном файле: вектор с одной половиной прошёл бы при реализации, которая сверила бы тип и по-прежнему не заглядывала внутрь значения.

  • OPTN Policy 8 (почечное распределение США) заведена срезом рядом с казахстанской — и сравнение закрывает вопрос, оставшийся открытым в ней. Пакет us.optn.kidney_allocation: Policy 8.2 «Kidney Allocation Score» и три таблицы очков (8-1 составляющие, 8-2 CPRA, 8-3 близость к больнице донора), редакция 13.11.2025. ГЛАВНОЕ — КОНТРАСТ. В kz.corpus.organ_allocation пришлось выразить два соперничающих прочтения именно потому, что приложение 3 публикует веса и молчит о композиции. Policy 8.2 ту же самую фразу пишет: «Candidates receive an allocation score according to the TOTAL of all points assigned in Table 8-1». Казахстанский пробел перестал быть догадкой формализатора и стал измеренным фактом: соседний правопорядок это предложение произносит. ПРОВЕНАНС НОВОГО РОДА. Прямой адрес OPTN отвечает 403 вне браузера, поэтому закреплён НЕИЗМЕНЯЕМЫЙ снимок Internet Archive (web/20251124175225, PDF sha256 460cb4ba…) — тот же приём и по той же причине, что три oldid Викитеки у martial-law-1941. Извлечение штатным extract_pdf_text.py, два прогона байтово идентичны; публикация 682 337 байт, sha256 bebb21b9… ЗАВЕДЕНА ЕДИНИЦА ДЕЛЕНИЯ policy_section — «8.2 Kidney Allocation Score»; ни одна из девяти прежних конвенций такого заголовка не опознаёт. Точка заменяется подчёркиванием (article/8_2): соглашение якорей §33 читает номер как ART-N[-_N] и точки не допускает. Конвенция вписана в ОБЕ меры — ci/check_source_pinning.py и boundaries.py (вторая делегируется первой, и одной копии мало). ИСПОЛНЕНИЕ, а не только сборка: CPRA 98 → 24.4 очка; 730 дней ожидания → ровно 2 (точная дробь days * (1/365), Rational: записать коэффициент как 0.00274 значило бы дать 2.0002); двоичные строки таблицы 8-1 → 6. Все три байтово идентичны между lawc eval и живым lawref. A3-ТАБЛИЦА НЕ ЧИТАЕТСЯ ИЗ РУКОПИСНОГО ПАКЕТА НИ В ОДНОМ ИЗ ДВУХ РЕЖИМОВ — измерено. Таблица 8-2 была написана как .lawtable.json (19 полос, hitPolicy unique), закреплена в law.lock 0.2, и обе реализации согласились на её semantic hash (sha256:a0f3f728…) — машинерия A3 согласована. Но mode: function даёт LDC-E2105 при вызове порождённой функции из правила, а mode: rules понижает строки в 19 правил, телом которых стоит порождённое входное отношение с id urn:…:table:CpraPoints/input, тогда как голое имя в .law понижается в urn:…#CpraPoints_input — ДРУГОЙ символ. Оба существуют в одном CLIR, check и lower зелёные, 19 правил на месте, и ни одно не может сработать никогда: запрос вернул пустой результат в обеих реализациях при нуле issues. Второй отказ МОЛЧАЛИВ — класс, ради которого заведены ворота check_dead_rules. До errata таблица развёрнута в правила генератором, который сверяет каждую полосу и каждое значение очков с закреплёнными байтами. НАБЛЮДЕНИЕ, НЕ КВАЛИФИЦИРОВАННОЕ И ПОТОМУ НЕ ОБЪЯВЛЕННОЕ ДЕФЕКТОМ (инвариант 8). Таблица 8-3 задаёт очки за расстояние двумя линейными формулами: внутри 250 морских миль — от 2 очков в нуле до 0 на границе; за 250 милями — от 4 на границе до 0 на 2500. На 249 милях кандидат получает 0,008 очка, на 251 — 3,998: функция немонотонна, и скачок в пользу более ДАЛЁКОГО кандидата больше, чем даёт прижизненное донорство. Живо ли это, зависит от классификационных таблиц 8.4.A–8.4.L (у классов 1, 2, 5–9 в колонке расстояния «250NM», у 3 и 4 — «Nation»), а они в срез не входят. ЧЕГО НЕТ, И ЭТО НАЗВАНО: классификационные таблицы вне среза, поэтому пакет отвечает «сколько очков у кандидата» и НЕ отвечает «кто выше в листе»; глубина §33.1 показывает EXECUTABLE 0 при верном учёте (охват 1 из 150, с фрагментом 1, неучтённых 0) — причина не найдена; тестов §267 нет: написанные два вернули NEITHER и были СНЯТЫ, а не оставлены красными в общем дереве. Попутно известный дефект канонизации Decimal проявился на живом акте — правило несёт из таблицы 24.40, на сравнение приходит 24.4.

  • «Второй трактат о правлении» Локка формализован (главы V и XIX) — первый текст корпуса, который НИКОГДА И НИГДЕ НЕ БЫЛ ПРАВОМ. Пакет locke.second_treatise: глава V «О собственности» (§§25–51) и глава XIX «О распаде правления» (§§211–243) — 60 секций из 243, 51 правило, 5 норм, 2 канала суждения §47.3, 5 узлов приоритета. У Цицерона и Абая силы закона тоже нет, но «О законах» ОПИСЫВАЕТ право римской общины, а «Қара сөз» — назидание; здесь чистый ДОВОД о том, откуда власть берётся и когда кончается, правовой лишь по предмету. Отсюда две особенности, которых у прочих пакетов нет: окна всех позиций открыты от даты ИЗДАНИЯ (1690), потому что вступления в силу у трактата не бывает; и закреплены байты ВСЕГО трактата (243 секции) при объявленном охвате в 60 — знаменатель обеих мер §33.1 берётся из articles.json, а не из документа.

    Канал суждения §47.3 с органом «народ», и рядом — его отказ. §240 задаёт вопрос дословно («Who shall be judge, whether the prince or legislative act contrary to their trust?») и отвечает: «The people shall be judge». Записано external judgment relation с authority ThePeople, двумя каналами по числу подлежащих; запрос без решения даёт REQUIRES_JUDGMENT с типизированным запросом (LOCKE-12). Отдельно записан ОТКАЗ канала: §242 — если князь уклоняется от суда народа, «the appeal then lies no where but to heaven», а §241 — «every man is judge for himself». Это выведенный предикат, а не отсутствие вывода (LOCKE-14): назвать небо authority значило бы сказать, что решение придёт.

    Три истолкования, меняющие ответ на дела и не меняющие ни одного числа в мерах. Каждое названо в 00-package.law и проверяется сценарием. (1) Оговорка «enough, and as good» §27 — ГАРД, а не дефитер: §27 ставит её условным оборотом, а §33 доказывает её выполненность отдельно. Дело без неё даёт молчание открытого мира, а не «нет» (LOCKE-03); дефитер дал бы FALSE_ONLY, и ни один другой гейт этого не заметил бы. (2) Предел порчи §31 — ЗАПРЕТ, а не второй гард приобретения: §37 называет испортившего нарушителем («he offended against the common law of nature, and was liable to be punished»), а нарушить можно лишь то, что имеешь. (3) «Длинный ряд злоупотреблений» §225 — ОПИСАНИЕ, а не условие права.

    Измеренная разница между Локком и Декларацией независимости. У Локка право возобновить власть возникает из ОДНОГО нарушения доверия (§222), без порога; §225 отвечает на возражение («this hypothesis lays a ferment for frequent rebellion») и говорит, когда народ ФАКТИЧЕСКИ поднимается. Декларация делает из той же фразы условие права («But when a long train of abuses and usurpations… it is their right, it is their duty»), то есть СТРОЖЕ Локка. Сценарий LOCKE-17 подаёт дело с установленным нарушением доверия и без длинного ряда: власть народа возникает, а «народ поднимается» не выводится. Прочтение §225 условием сломало бы именно этот сценарий.

    Запрет §31 нарушенным не становится — и это граница языка, названная вслух. forbearance в 0.1 не знает статуса VIOLATED никогда: обнаружение совершённого действия требует событийной модели §79, которой в срезе нет (lawref/evaluator/norms.py, ветка forbearance даёт ACTIVE либо EXPIRED). Нарушение при этом ВЫРАЖЕНО — потому что его выразил сам Локк отдельным предложением §37, и записано оно обычными правилами. Текст XVII века дал то, чего деонтический аппарат среза дать не может; LOCKE-06 держит и запрет, и оба вывода о нарушении, и падёт, если VIOLATED когда-нибудь появится.

    Два дефекта поиска, найденные исполнением. Первый: правило §47 было записано стрелкой ЗАДОМ НАПЕРЁД — «деньги ⇒ вещь не портится». Движок отверг его как мёртвое (негативный head в strict closure — ограничение v1), и отказ оказался удачей: правило было неверно и по существу. Локк выводит не долговечность из денег, а ДЕНЬГИ из долговечности («came in the use of money, some lasting thing that men might keep without spoiling»). Второй: приоритет §38 МОЛЧА не срабатывал — property_of выходил BOTH при чистом check, без единого issue и без записи в conflicts. Причина — §116: приоритет действует только ВНУТРИ страты, а правило, тело которого зависит от ПОРАЖАЕМО выведенного предиката, стоит стратой выше того, кого должно побеждать. Диагноз подтверждён контрастом внутри пакета, а не догадкой: приоритет §35 работает, и его тело читает СТРОГО выведенное.

    Новая единица деления numbered_section в обеих мерах §33.1. Трактат делится на 243 сквозные секции («Sect. 25.»), и ни одна прежняя конвенция их не видела: point ищет «25. » без слова, section и article_roman — римскую цифру, principle — слово перед римским номером, word/ordinal — числительное прописью. Форма маркера в конвенции ШИРЕ очевидной, и это не небрежность: в закреплённой дигитализации два заголовка из 243 набраны с дефектом («Sect, 10.» с запятой, «Sec. 219.There» с сокращением и без пробела), байты не исправляются, и узкая форма ^Sect\. молча выбросила бы §219 — норму о брошенной исполнительной власти — из ЗНАМЕНАТЕЛЯ обеих мер. Отчёт печатал бы «покрыто 59 из 59» вместо «59 из 60».

    Обе меры §33.1 названы порознь, как требует скилл: учёт статей — охват 60 из 243, с фрагментом 60, неучтённых 0; глубина — EXECUTABLE 31, ANCHORED 0, SOURCE_ONLY 29, и у всех 29 причина объявлена в articles.json (постановка вопроса, довод в пользу правила, пример к нему либо заключение; отдельно §213 — посылка, записанная гардом шести правил, и §§236–238 — латинские цитаты Барклая, чьё содержание выведено §239). Сценариев 22, differential байтовый: 62 evaluate-вызова lawc eval == lawref. Мёртвых правил 0, разметка §218 — 90 объявлений и 56 норм, ноль без метки. Третья мера, которой не дают ни boundaries.py, ни check_source_pinning.py, снята отдельно — КАКИЕ правила задеты делами: при 17 зелёных сценариях вышло 36 из 51 (три способа §§215–217 из четырёх и канал суждения КНЯЗЯ стояли непроверенными), пять сценариев довели до 51/51. Обязательство осталось одно и не по вине пакета: семейство вписано в scenario-ratchet.json, но не в scenario-manifest.json — манифест пишется только полным прогоном, а полная KZ-регрессия на 29.08.2026 падает первой же строкой (as-of проекция, 110 неразрешённых конституционных якорей). Отказ предсуществующий: воспроизведён на чистом worktree HEAD и держится после полной цепочки генераторов ворот 4.

  • Правила распределения донорских органов формализованы — первый акт корпуса о распределении дефицитного ресурса между людьми. Пакет kz.corpus.organ_allocation: объявленный срез приказа МЗ РК от 25.11.2020 № ҚР ДСМ-207/2020 — пп. 43–47 главы 3 (подбор реципиента для органа посмертного донора) и приложение 3 (индикаторы подбора пары донор-реципиент). Акт выбран потому, что закрывает измеренный пробел: соседний health-code (ст. 203–219, 78 объявлений) говорит, КТО МОЖЕТ ОТДАТЬ орган — согласие, смерть мозга, запрет торговли, лицензирование, — и слов «очерёдность», «приоритет», «лист ожидания» не содержит ни одного; кто ПОЛУЧИТ, устанавливает подзаконный акт. Главная находка: акт публикует веса, но НЕ ГОВОРИТ, КАК ИХ СКЛАДЫВАТЬ. Приложение 3 даёт для каждого показателя приоритет, код и вес (почка — десять показателей от 160 000 000 до 1, сердце и лёгкие — три, печень — три), а о композиции во всём акте одна фраза: «набравших наибольшее количество баллов» (п. 46). Показатели при этом неоднородны: шесть двоичны по формулировке, четыре — величины со своими опубликованными шкалами (индекс совместимости 0–26 таблицей на 27 строк, группа антител 1–5 таблицей зависимости от PRA, проценты антител, число совпадений в сплите). Прочтений два, и они дают РАЗНЫЙ ПОРЯДОК КАНДИДАТОВ. При прочтении «показатель как признак» веса реализуют объявленный приоритет ТОЧНО — каждый вес строго больше суммы всех младших, во всех девяти границах. При прочтении «показатель как величина» приоритет нарушается дважды: индекс совместимости при весе 10 000 даёт до 260 000 против веса совместимости групп крови 100 000, то есть приоритет 7 перебивает приоритет 6. Расхождение показано ИСПОЛНЕНИЕМ. Два подбора по почке, различающиеся двумя фактами: X — группа крови совместима, индекс 0; Y — группа крови НЕсовместима, индекс 26. Прочтение «признак»: X = 100 000, Y = 10 000, выше совместимый. Прочтение «величина»: X = 100 000, Y = 260 000, выше НЕСОВМЕСТИМЫЙ. Порядок переворачивается. Выбирать за источник запрещено, поэтому оба прочтения выражены соперничающими interpretation над якорем приложения 3, а сама неопределённость названа ФАКТОМ (score_composition_not_determined, правило ScoreCompositionUndetermined) — идиома zheti-zhargy, где неоценённый источником калым объявлен, а не оставлен молчанием. Меры: учёт пунктов — охват 5 из 122 при нуле неучтённых и нуле объявленных границ; глубина §33.1 — EXECUTABLE 4, ANCHORED 0, SOURCE_ONLY 1 (п. 45: «проводится в соответствии с очерёдностью в МИСУДР» — содержание пункта и есть упорядочение, а упорядочение по выводимому баллу живёт запросом, барьер §111); байтовое покрытие публикации 4,8 % (5 742 из 119 857 — закреплена страница целиком, формализован срез); разметка §218 полная (48 объявлений, 13 норм, ноль без метки); три .lawtest §267 — 3/3; differential 4/4 байтово идентичен (lawc eval против живого lawref). MELD ПРИХОДИТ ВХОДОМ, и это граница языка, а не упрощение. Печёночная таблица называет MELD показателем с весом 100, но формулы не даёт; MELD есть сумма натуральных логарифмов, а арифметика замкнута списком §58 (+ - * / mod min max abs pow) — логарифма в нём нет и быть не может, семантические крейты запрещают плавающую арифметику. Акт сам MELD не вычисляет, и пакет поступает так же. Канал суждения §47.3 записан в САМОМ АКТЕ. Балл никого не выбирает: п. 46 даёт список двадцати, а решение принимает консилиум центра трансплантации по результатам осмотра и определения противопоказаний (пп. 46, 47). Тест OA-03 требует REQUIRES_JUDGMENT, а не «нет». Две вещи найдены исполнением, а не чтением. (1) interpretation_group с selection exactly_one блокирует ВЕСЬ запрос, а не только норму под группой: вопрос о заключении консилиума получал INTERPRETATION_REQUIRED вместо REQUIRES_JUDGMENT, то есть неопределённость композиции балла делала неотвечаемыми вопросы о кросс-матче и о суждении. (2) Выбрать прочтение из .lawtest НЕЛЬЗЯ — выбор живёт только в options.selectedInterpretations дела-JSON, поверхности §267 для него нет; пакет с группой exactly_one штатными тестами корпуса не покрывается вовсе. Группа снята, прочтения остались. Юридическая оговорка вынесена в шапку пакета и в PACKAGE_TITLES: пакет описывает опубликованную политику в закреплённой редакции и НЕ ПРИГОДЕН ДЛЯ КЛИНИЧЕСКОГО ПРИМЕНЕНИЯ; реальное распределение выполняет МИСУДР, алгоритм которой не опубликован, и совпадение с нею не проверялось и проверено быть не может.

  • corpus/emit_lawtests.py --only <семейство>: эмиссия тестов §267 по величине правки, а не корпуса. Полный проход перед эмиссией гонит ВСЮ регрессию — 4300+ сценариев, десятки минут, — тогда как правка одного акта затрагивает одно семейство; ради 21 нового сценария FNMA пересчитывался весь корпус. Отбор идёт по семействам ACT_RUNNERS и прокидывается в уже существующий --only KZ-прогона (corpus/kz/run.py); замер на живом пакете — 12 секунд против ~30 минут, 73 теста FNMA вместо 39. Отличия частичного прохода от полного названы в шапке модуля и печатаются им самим, а не подразумеваются: конституционный и UEFA-раннеры при --only не запускаются (отбора они не умеют, и полный прогон конституции ради одного семейства стоил бы ровно то, ради чего отбор заводится) — пропуск печатается строкой; мусор не собирается — каталог теста есть каталог ПАКЕТА, а пакеты делят семейства (official_calendar — десять, budget — семь), и снос каталога уничтожил бы чужие тесты, поэтому прежний индекс сохраняется и дополняется, а число нетронутых записей печатается; прежний файл затронутого каталога, которого проход не воспроизвёл, называется поимённо как кандидат в протухшие. Защиту покрытия --only не отключает: пропажу и переименование сценария ловит РАНЬШЕ манифест corpus/scenario-manifest.json — раннер краснеет, и до эмиссии дело не доходит; остаток, который манифест не видит, назван прямо — смена queryId оставляет старый файл до следующего полного прохода. В ci/run_all.sh допускается только полная форма. Обе ветки проверены: частичный проход по holidays не тронул 287 чужих записей и 73 теста FNMA, полный — снимает свои файлы по индексу ровно как прежде.

  • Договор о нераспространении ядерного оружия (01.07.1968) формализован целиком — 11 статей из 11. Пакет intl.disarmament.npt: первый ДЕЙСТВУЮЩИЙ международный договор корпуса — соседи по кусту (united-nations-1942, molotov-ribbentrop, surrender-1945, nuremberg-principles) описывают инструменты, действие которых кончилось, а этот 11 мая 1995 года продлён бессрочно решением конференции по ст. X п. 2, отсюда legalStatus = "in_force". Закреплён РУССКИЙ ПОДЛИННИК, а не перевод: ст. XI объявляет английский, русский, французский, испанский и китайский тексты равно аутентичными, поэтому §194 сверяет байты самого инструмента. Отсюда пара утверждений, которая у актов РК обычно совпадает по знаку, а здесь обязана разойтись: officiality official (о ТЕКСТЕ — он подлинник) при materialization_status PINNED_UNOFFICIAL_COPY (о БАЙТАХ — закреплено извлечение с портала ООН, а не том 729 UNTS). Заведена единица деления unit: "article_roman" объявлением в articles.json: статьи нумерованы римскими цифрами, русская автоконвенция берёт только арабский номер, и без объявления Договор был бы для обеих мер §33.1 невидим молча. Меры: покрытие текста 99,9 % (28 364 из 28 379 байт, 15 фрагментов), учёт 11 из 11 статей при нуле объявленных границ, глубина §33.1 — EXECUTABLE 11, ANCHORED 0, SOURCE_ONLY 0, разметка §218 полная (66 объявлений, 54 нормы, ноль без метки), мёртвых правил ноль, девять рукописных .lawtest §267 — 9/9, сценариев регрессии 13/13, и все 13 evaluate-вызовов байтово идентичны между lawref и lawc. Осевое правило стоит не в статье определений. Ст. IX п. 3 придаточным предложением посреди статьи о вступлении в силу вводит различение, на котором держится весь инструмент: обладающее ядерным оружием — государство, «которое произвело и взорвало … до 1 января 1967 года». Дата вынесена в ТЕЛО правила сравнением d < @1967-01-01, а не спрятана в имя предиката, иначе главный вывод Договора сообщало бы дело. Класс замкнут closure §70 — замыкание здесь применяет САМ ИСТОЧНИК, а не формализатор, — и потому взрыв 1974 года даёт FALSE_ONLY с сертификатом закрытия, а не молчание: статус не приобретается никем и никогда сверх пяти. Отдельной сценой проверено, что ОБЛАДАНИЕ к статусу отношения не имеет: факт о размещённом на территории оружии подан делом и статуса не меняет — признак п. 3 к нему не относится. authority канала суждения §47.3 взят ИЗ ТЕКСТА, а не назначен автором. Различить запрещённое ст. II и защищённое ст. IV вычислением нельзя — обогащение есть обогащение, различает их цель; Договор сам называет орган и предмет проверки (ст. III п. 1: гарантии МАГАТЭ «исключительно с целью … не допустить переключения ядерной энергии с мирного применения на ядерное оружие»). Оговорка ст. IV «в соответствии со статьями I и II» выражена парой побеждаемых правил с приоритетом: право, объявленное НЕОТЪЕМЛЕМЫМ, уступает запрету, и поражение приходит вычисленным. Найдено исполнением, а не чтением — три вещи. (1) Правило ст. IX п. 1 с единственным негативным литералом не range-restricted: LDC-E4101 на первой же сборке, переменная связана доменом перебора. (2) Вето ст. VIII п. 2 не срабатывало с классическим not approved_by(...): подача голоса — факт ОТКРЫТОГО мира, перечня непроголосовавших не существует, и поправка выходила утверждённой при молчащем обладателе ядерного оружия при полностью зелёном check; переписано на not_known §113, после чего вывод виден прямо — у каждого ЯОГ вето на любую поправку, и Договор практически неизменяем. (3) Канал §47.3 снова не прошёл через поражаемое правило (COMPUTED вместо REQUIRES_JUDGMENT) — тот же дефект обеих реализаций, что зафиксирован на Принципах Нюрнберга; признание деятельности мирной разведено в отдельный строгий шаг, и запрос к судье спрашивается у него. Границы названы прямо, а не обойдены. Срок в 180 дней (ст. III п. 4) НЕ вычисляется: дневной шаг живёт в add_business_days, который требует снимок календаря §85 всегда (E-0029; проба вернула MISSING_CALENDAR), календаря на 1970 год в корпусе нет, а пустой утверждал бы о нерабочих днях 1970 года то, чего не устанавливает ни один источник — предельный день объявлен нормативным фактом §71 приёмом us-federal-holidays. Восемнадцатимесячное плечо той же нормы, три месяца ст. X п. 1, пять и двадцать пять лет ст. VIII и X ВЫЧИСЛЯЮТСЯ (add_calendar_period, календаря не читает). Ст. VI — обязанность §123 БЕЗ вычислимого нарушения: канал §47.3 требует authority (LDC-E0201, проверено пробой), а Договор органа, судящего о добросовестности переговоров, не назначает нигде; обязанность ACTIVE у каждого участника, VIOLATED не наступает — и полвека спора о ст. VI ровно об этом.

  • Закон «О порядке организации и проведения мирных собраний» (333-VI) в истолковании НП КС № 61-НП — первый акт корпуса, у которого связь с Конституцией НЕСУЩАЯ. Пакет kz.corpus.peacefulassembly: срез статей 8, 10, 11 и 14 (охват объявлен полем scope в articles.json, глубина §33.1 — EXECUTABLE 4 из 4, SOURCE_ONLY 0) плюс нормативное постановление Конституционного Суда от 20.01.2025 № 61-НП — второй инструмент в том же CLIR, по тому же доводу, что у united-nations-1942: истолкование Суда меняет условия применения подпункта 10) пункта 1 статьи 14, и вывод пересекает границу документов. Чем отличается от трёх прежних мостов (брак, ОСМС, персональные данные): те устроены одинаково — нульарный assert constitutional_X_guarantee() и правило, которое его читает, — и убери мост, ни один исход не изменится. Здесь пакет читает ДВА вывода конституционных пакетов: kz.constitution.court::required_constitutional_interpretation_applied (ст. 75 — обязательность истолкования, при котором норма признана конституционной) и kz.constitution.rights::assembly_restriction_constitutionally_valid (ст. 32 — допустимость ограничения права на мирные собрания). Оба помечены pub осознанным действием; оба читаются ТИПИЗИРОВАННО, впервые в корпусе — for act: kz.constitution.court::LegalAct, а не нульарной ссылкой. Проверяется парами дел, различающимися одним фактом. KZ-PA-NP61-05 против 06: одно и то же дело (отказ по занятости специализированного места, предложения об изменении места и времени не вносилось) с решением от 10.12.2024 даёт refusal_lawful = TRUE_ONLY, с решением от 10.06.2025 — FALSE_ONLY: правило постановления с отрицательной головой побеждает основание статьи 14 по priority … reason lex_superior (нормативное постановление КС имеет силу нормы Конституции — ст. 5 п. 2 Закона «О правовых актах»). Дата берётся не из воздуха: пункт 3 постановления («вступает в силу со дня принятия») закреплён assert resolution_in_force_from(@2025-01-20), и правило читает эту константу. 06 против 07: то же дело после постановления, но предложение вносилось — основание Закона снова работает. 09 против 10: refusal_upheld требует сверх основания ещё и конституционной допустимости ограничения, и при ограничении, не установленном законом, отказ не устоял ПРИ ЖИВОМ основании статьи 14. Десять сценариев семейства peaceful_assembly, differential байтовый (14 evaluate-вызовов), два теста §267, corpus/tools/doctor.py peaceful-assembly без пробелов. Датировка редакций §31 включена, и она вскрыла пробел конституционного пакета. evaluate() применимость редакций не применяет — это отдельный шаг lawref.impact.edition_projection, и без него мир отвечает от ВСЕХ редакций сразу. В пакете прав шестнадцать задокументированных расхождений редакций и восемь голов, которые выводят обе; сильнейшее (ст. 12 п. 4 ред. 1995 против ст. 15 п. 4 ред. 2026 — иностранцы) имеет ПРОТИВОПОЛОЖНЫЕ тела при одной голове, то есть без проекции даёт тавтологию, а не просто неверную ссылку. Проекция включена в прогоне вместе с пакетом ИСТОЧНИКОВ Конституции: без его узлов якоря правил не разрешаются, и она отказывает молча — измерено, 164 неразрешённых якоря и ноль снятых узлов против нуля и 161 снятого. Включение немедленно показало, что мост «конституционен в истолковании» (ст. 75) заякорен ТОЛЬКО в редакцию 2026 и на деле 2025 года снимается вместе с ней — то есть до этой правки пакет давал верный исход по норме, которой на дату дела не существует. Заведён двойник ConstitutionConformingInterpretationRequired1995 в kz.constitution.court, заякоренный в статью 74 редакции 1995 (её пункт 2 даёт утрату силы со дня решения либо с установленной судом даты, пункт 3 — вступление решения в силу со дня принятия и общеобязательность); само постановление № 61-НП ссылается именно на эту нумерацию — «руководствуясь пунктом 3 статьи 72 и пунктом 3 статьи 74 Конституции». Правило постановления расщеплено по редакциям каноническим приёмом §206, приоритетов тоже два: priority называет ПАРУ правил, и пропуск второй пары оставил бы истолкование наравне с буквой Закона. Одиннадцатый сценарий (KZ-PA-CONST-11) утверждает саму датировку — ноль неразрешённых якорей, ноль недатированных узлов и отсутствие правила чужой редакции в proof; без него отказ проекции остался бы молчаливым. Найдено исполнением, а не чтением. Первый прогон дал два FAIL одного класса: not <выводимый предикат> в открытом мире не берётся никогда — «ответа органа нет» и «предложение не вносилось» обязаны приходить УСТАНОВЛЕННЫМ фактом дела. Обе нормы переписаны на отрицание ЭМПИРИЧЕСКОГО предиката (reply_dispatched сделан входным, правило постановления отрицает подпункт 3) части первой пункта 1 статьи 11 — тот самый, который постановление называет во взаимосвязи), и это не стилистика: до правки правило постановления не срабатывало бы НИКОГДА при зелёном check и зелёном lower.

  • Датировка редакций §31 включена у отраслевых пакетов: брак и ОСМС проецируют мир на дату дела. До этого её не применял НИ ОДИН потребитель конституционного пакета, а evaluate() применимость редакций не применяет сам — это отдельный шаг. Цена молчания измерена: в rights.law шестнадцать задокументированных расхождений редакций и восемь голов выводят обе, причём у сильнейшего (иностранцы, ст. 12 п. 4 ред. 1995 против ст. 15 п. 4 ред. 2026) тела ПРОТИВОПОЛОЖНЫ при одной голове — без датировки голова становится тавтологией, то есть это неверный ОТВЕТ, а не неверная ссылка. Заведены три конституционные гарантии в редакции 1995 (ст. 18 — частная жизнь, ст. 27 — брак и семья, ст. 29 — охрана здоровья) и двойники мостов в трёх отраслевых пакетах, расщеплённые по редакциям §206: без них ОСМС, считающий взносы на 30.06.2025 и 30.06.2026, с включённой датировкой остался бы вовсе без конституционного основания. Шов один на корпус — kz.linking.dated_world, — и он ОТКАЗЫВАЕТ, когда мир обещал датировать пространство и не разрешил в нём якоря: первая же его версия была тотальной, упёрлась в KZ-MARRIAGE-CODE-ART-11 и этим показала разницу между «якорь не разрешился» (законно у актов без закреплённой модели источника) и «обещали развести редакции и не развели». Проверено исполнением: у ОСМС на 30.06.2025 живёт мост редакции 1995 и снят мост 2026, на 31.12.2026 — наоборот; 39/39 сценариев брака, ОСМС и мирных собраний, differential 71 вызов байтово.

  • Пакет персональных данных под датировку НЕ ПОСТАВЛЕН, и это измеренное решение. Включение роняет 13 сценариев из 21: у Закона № 94-V своя ось редакций — границы поправок 326-VI, 350-VI и 311-VI проверяются сценариями PD-09, PD-13, PD-14, — и с проекцией она не совмещается без разбора. Причина записана в самом раннере, а не забыта: пакет остаётся в прежнем состоянии, где конституционное основание берётся из обеих редакций сразу (обе дают одну голову, поэтому исход не меняется — врёт только ссылка на статью).

  • Расхождение lawc check и lawc lower на одном пакете. check corpus/laws/constitution/rights даёт три LDC-E4101 (норм-голова использует несвязанные переменные, §190), а lower того же каталога проходит с кодом 0 и выдаёт 382 узла — то есть правило, которое проверка называет не range-restricted, всё равно попадает в CLIR. Найдено 29.08.2026 при попытке пересобрать конституционный пакет; не квалифицировано (дефект lawc либо намеренная разница путей — prose §190 о том, обязана ли проверка стоять на пути понижения, не читалась), поэтому и не чинилось. Записано здесь, чтобы не потеряться: пока это так, зелёный lower не доказывает, что пакет прошёл бы check.

  • Дефект измерителя глубины §33.1: part/N в локаторе давал фантомную статью. LOCATOR_RE в .claude/skills/formalize-act/scripts/boundaries.py собирает совпадения через findall и не требовала границы слова, отчего art совпадал ВНУТРИ p·art: локатор article/11/paragraph/1/part/2 давал не только статью 11, но и статью 2 — и чужая статья становилась SOURCE_ONLY при живом пакете, то есть мера показывала пробел формализации там, где акт не заявлял ничего. Дефект латентный: ни один локатор корпуса до 28.08.2026 не начинался с part/ (пятнадцать единиц в ходу, part среди них не было), и проявился он на первом же акте, где норма адресует ЧАСТЬ пункта. Правка — (?<![a-z]) перед альтернативой; радиус измерен поимённо, а не обещан: разбор изменился ровно у трёх локаторов, все три в новом пакете, счёт остальных актов не сдвинулся ни на единицу.

  • Цена проверки правки развязана с размером корпуса: акт-локальная петля, статический учёт покрытия. Правка одного акта стоила полного прохода по всему корпусу, и это росло вместе с корпусом без предела. Замеры, из-за которых сделано: lawc eval — одноразовый процесс, заново разбирающий весь IR пакета на КАЖДЫЙ вызов; цена линейна по размеру IR (22 КБ → 0,15 с; 5,7 МБ → 2,88 с; 6,7 МБ → 3,41 с), а вызов с ПУСТЫМ делом на kz-criminal-code стоит 3,1 с, из них 2,1 с — одна загрузка (lawc canon): считается не право, а JSON. При 4400 сценариях (из них entrepreneurial_code 1700 на 6,7 МБ и social_code 1148 на 4,9 МБ) полный check_kz_differential требует около трёх часов (прогон не уложился в 50 мин, exit=124), сама регрессия — более 70 минут; профиль: 80 % времени в lawc eval. Остальные корпусные ворота вместе — около пяти минут (check_label_coverage 0,8 с, check_dead_rules 1,0 с, check_formalization_depth 30 с, check_fmt 46 с, check_lower 51 с, check_source_pinning 165 с): дорогих ворот ровно два, и оба исполняют сценарии. Что мешало сузить: храповик покрытия считался ПОБОЧНЫМ ЭФФЕКТОМ прогона, поэтому частичный проход неотличим от потери покрытия, а отключать храповик на нём нельзя — --only стал бы способом обойти защиту. Развязка: учёт вынесен из прогона и сделан статическим — corpus/scenario-manifest.json (порождаемый артефакт, пиннит СОСТАВ: раннер → семейство → id) плюс ворота ci/check_scenario_manifest.py, сверяющие его с храповиком без исполнения за 0,04 с, канарейка на пять ступеней. Полный прогон дополнительно сверяет исполненное с манифестом; частичный (--only <семейство>) сверяет состав СВОЕГО семейства, поэтому снятый или переименованный сценарий затронутого акта виден и без полного прохода. Гарантия усилилась: храповик держит ЧИСЛО, и замена одного сценария другим его не двигает — такая подмена была невидима; манифест её ловит, а вместе с ней третий случай — семейство, объявленное в храповике и пропавшее из манифеста (на живом дереве ворота немедленно нашли шесть таких). Замер петли на personal_data: 6 с вместо >70 мин и 29 с вместо ~3 ч. Сужение включается само: act_scope в verify.py выводит семейства из изменённых путей и добавляет --only; правило консервативное — затронутый пакет ПЛЮС зависимые по замыканию импортов (kz.corpus.budget ← 6 семейств, kz.constitution.rights ← 4), а правка lawc/, lawref/, spec/, vectors/, общей машинерии, дел или ожиданий сужение отменяет. Правка сценариев (corpus/kz/acts/*.py) даёт только своё семейство и НЕ разворачивает замыкание по пакетам: замерено, что иначе правка acts/pd.py тянула девять семейств — всех, кто делит с ЗПД снимок календаря §85. В ci/run_all.sh --only не допускается — там всё полностью. Частичная запись манифеста — СЛИЯНИЕ, а не замена: первый заход запрещал --write-manifest при --only доводом «неполный состав запишется как полный», и довод для слияния неверен — оно не может потерять, только добавить или обновить. Запрет при этом стоил дорого: завёл акт — жди полного прогона ради одной строки, а полный проход в общем дереве может и не сойтись (две попытки не дошли: тринадцать процессов регрессии от параллельных сессий морили друг друга, и корпус менялся быстрее, чем шёл проход). Полный прогон остаётся авторитетным — только он ЗАМЕНЯЕТ раздел и потому умеет удалять; дыру слияния (семейство убрали из раннера, запись осталась и прошла бы по числу) закрывают ворота сверкой каждого семейства манифеста с реестром раннеров — шестая ступень канарейки. Проверено лечением: семь отставших семейств освежены одним суженным прогоном, ворота позеленели — 4659 сценариев в 61 семействе за 0,07 с. Попутно закрыт дефект, который эта же правка и вносила: main() без аргументов уходил бы в sys.argv ВЫЗЫВАЮЩЕГО гейта, роняя report_norm_graph.py --json <файл> на «unrecognized arguments»; None теперь означает пустой список, а sys.argv подставляет только скриптовый вход. Решение и его границы — ci/README.md, раздел «Стоимость проверки»; методика — раздел «Цена фазы 4» в скилле formalize-act.

  • Пакет incoterms.group_c: торговые термины группы C (CPT, CIP, CFR, CIF), редакция 2020 года — ПЕРВЫЙ АКТ КОРПУСА С ДВУМЯ КРИТИЧЕСКИМИ ТОЧКАМИ У ОДНОЙ ОТПРАВКИ. Место перехода риска и предел несения расходов на перевозку — разные величины, и в группе C они не совпадают никогда: риск переходит в месте отправления (передача первому перевозчику при CPT/CIP, борт судна в порту отгрузки при CFR/CIF), расходы продавец несёт до места назначения. Ни один акт корпуса до сих пор не требовал их различать; модель с одним отношением «поставка» молча дала бы неверный CIF — самую частую ошибку торговой практики. Поэтому risk_transfer_place и carriage_paid_to_place — разные отношения, а ст. 3 выводит их расхождение самостоятельным утверждением. Источник — авторское изложение СТРУКТУРЫ (kind doctrine, jurisdiction "none", PINNED_OFFICIAL_BYTES на собственный файл репозитория), по образцу faraid: текст Международной торговой палаты защищён авторским правом и в открытом доступе не издаётся, закрепить его §194 нельзя; структура терминов есть факт, а факт не охраняется. Цена выбора названа в шапке: внешнего оракула ожиданий у пакета нет, в отличие от uefa. Три замыкания §70 (состав группы, обязанность страховать, применимость по виду транспорта) плюс закрытый перечень изъятий ст. 11: снятый редакцией 2020 DAT даёт FALSE_ONLY с сертификатом, а не молчание; «CIF аэропорт назначения» — тоже. Меры: закрепление 71,2 % (5374 из 7544 байт, 10 фрагментов), учёт 12 из 12 статей при двух объявленных границах, глубина §33.1 — EXECUTABLE 8, ANCHORED 2, SOURCE_ONLY 0. Двенадцать рукописных .lawtest §267, 12/12. Две вещи найдены исполнением, а не чтением. Первая: пара «покупатель по общему правилу / продавец при отнесении договором перевозки» с приоритетом второго над первым НЕ РАБОТАЕТ — приоритету нечего побеждать, unloading_cost_borne_by(c, продавец) и …(c, покупатель) суть разные литералы, а §106/§107 разрешает конфликт литерала с его отрицанием. Изъятие переписано отрицательной головой по образцу ОСМС; до правки дело с установленным отнесением давало обоих плательщиков сразу при полностью зелёном check. Вторая: any_mode_term/sea_mode_term были объявлены, ассертированы для всех четырёх терминов и НЕ ЧИТАЛИСЬ НИ ОДНОЙ НОРМОЙ — ограничение вида транспорта статей 6 и 7 отсутствовало молча, пока его не назвали поимённо ворота ci/check_dead_symbols.py.

  • Дефект lawc: конструктор legal_effect §127 не понижался — effect create(P) давал предикат с именем create. Грамматика несёт продукцию (legal_effect = "create","(",proposition,")" | "terminate",… | "modify",…,",",… | expression), prose §127 пример пишет effect create(valid(permit));, парсер форму принимает намеренно — а law-hir знал только альтернативу expression и заворачивал атом целиком: {kind:"create", after:{predicate:"…#create", args:[<вызов P>]}}. Молчание тройное: check чист (три имени — hard keywords §15, символ не резолвится и не жалуется), lower без предупреждений, на исполнении позиция ACTIVE, valid_when истинен и следствия нет. Квалификация: дефект lawc, не SPEC и не lawref — продукция нормативна, парсер её пропускает, понижение теряет; lawref поверхность не разбирает. Вектор раньше кода (инвариант 7): T147 (lower-shape) утверждает пять вещей порознь — свой атом у create, свой вид у terminate, ОБА поля before/after у modify (§202 LegalEffect), неизменность голой формы effect P и общий код protected_effect §128; до правки красен, после зелен. Конструктор распознаётся ПО ИМЕНИ, а не по разрешению символа: relation create(...) не разбирается вовсе, поэтому условная резолюция молча меняла бы смысл файла от того, что объявлено рядом. Неверная арность и расхождение суффикса поля с ключевым словом больше не понижаются молча — LDC-E1305. Радиус измерен: ci/check_lower.py 109/109 байтово идентичны, демо 8/8 — конструкторной формой в корпусе не пользовался никто. Заодно у lower-shape-векторов появился путь ВНУТРЬ узла ("payload.effect.kind"): требование к LegalEffect есть утверждение о трёх полях вложенного объекта, и выразить его верхним уровнем можно было бы только сравнением payload целиком — вектор пинил бы заодно holder/exercise/validWhen и краснел на правках, к требованию отношения не имеющих.

  • Процессный слой О-5: акт стал спрашиваемым как процесс (lawref/process.py, DECISION-0052). Профиль procedure §159–§164 реализован с 27.08, живые пакеты процедуры несут — а входа к этому знанию не было. Инструмент трека О даёт две половины, ни одной строки семантики (инвариант 5). Статика без движка: автомат восстанавливается из УЖЕ порождённых десугаризацией узлов — <P>/initial даёт начальное состояние, <P>/<T>/valid — источник и гарды, <P>/<T>/enters — цель; разбор идёт по ПРЕДИКАТАМ профиля, поэтому несколько процедур в пакете (квалификатор P__, DECISION-0013 §2.3) разделяются. Проверка графа ловит то, что не ловилось ничем: LDC-E1311–E1313 локальны (одно initial, ссылки на объявленные состояния, выход из terminal), а достижимость — свойство ГРАФА. Динамика через движок: журнал дела {"instance", "steps": [{date, attempt?, facts?}]} исполняется кадр за шагом, право каждого кадра — его дата (окна §87 читает движок, редакции §31 снимает проекция D1); кадр называет пройденные состояния, судьбу каждой попытки §164, позиции §134 и нарушения §140; на последнем кадре — доступные шаги с разбором блокеров §185 и календарь сроков по окнам §124. Ручное измерение получило держателя. Утверждение DECISION-0013 §4 («попытка заключить договор минуя вскрытие заявок правового эффекта не порождает» — институт несостоявшихся закупок) существовало прозой и воспроизводилось только повтором трёх ручных прогонов оракула; теперь его прогоняют ворота на живом пакете. Терминальность объявлена границей, а не додумана: маркер terminal §160 в CLIR не попадает, отличить законный терминал от тупика по нему нельзя, поэтому состояние без выхода — ЗАМЕТКА, а не находка. Обратный выбор дал бы громкую ложную находку на КАЖДОМ корректном акте (Concluded у закупок, NekeZhasaldy у «Туыстық жүйе»). Найдено исполнением, до заведения ворот: первая редакция исключала из «доступных шагов» всякий переход, чья попытка уже была, — и теряла разбор блокеров ровно для того перехода, ради которого он нужен. Исправлено: выпадает переход, уже породивший ЭФФЕКТ. Перепроверка слоя нашла два дефекта в нём самом, оба закрыты воротами. (1) Отказ движка выдавался за юридический факт. При отказе на КАЖДОМ вызове отчёт печатал ATTEMPT_WITHOUT_EFFECT — то есть утверждал о праве («переход не породил эффекта» §164), не вычислив ничего; журнал без попытки в тех же условиях давал CLEAN и код 0. Введены REFUSED_STATUSES (ERROR, BUDGET_EXHAUSTED) и поле computed у попытки; находка EXECUTION_REFUSED называет отказ поимённо; ATTEMPT_WITHOUT_EFFECT эмитируется ТОЛЬКО из вычисленного ответа; STUCK не утверждается при непосчитанных шагах, усечении бюджета и любом отказе. Та же подмена нашлась и повторно — в перспективе рабочего стола и в прозе MCP, где «не посчитано» рисовалось как §164; исправлено в обоих. Штатного входа, роняющего движок на всех запросах, нет, поэтому ворота подменяют шов run_scenario прямо. (2) Две процедуры в пакете утверждались разделяемыми и не проверялись ничем. Проверено на настоящем lawc lower: разделение работает, но имена стадий несли квалификатор P__ в лицо юристу. Добавлено displayName — обратная операция к квалификации §24 (снимается только известный префикс и только своей процедуры; name остаётся тем, что в CLIR), журнал принимает переход всеми тремя именами. Оба случая заведены проверками ворот; на всём корпусе (65 пакетов) инструмент даёт НОЛЬ ложных находок. Ворота ci/check_process.py (шаг 43/43) держат канареечный принцип в обе стороны — сломанный близнец фикстуры обязан дать три находки поимённо, исправный ноль — и проверяют ДВЕ оси времени порознь. Доведено до MCP: law_process и law_process_run, инструментов на сервере 18.

  • Разрешён конфликт слияния, закоммиченный в корпус (найдено при заведении О-5). Пять CLIR-пакетов Конституции и два исходника (constitution/court/court.law, constitution/kurultai/kurultai.law) лежали в HEAD с маркерами <<<<<<< Updated upstream. Цена: MCP-сервер не поднимался вовсе — любой инструмент, читающий корпус, падал на JSONDecodeError, и контракт mcp/test_server.py был красен целиком. Сторона «Stashed changes» в обоих исходниках ПУСТА, сторона upstream несёт объявления, без которых файл не компилируется (for raised/held/wait используются телом TrustVoteTimingAndAnnualCap), — то есть разрешение механическое, а не выбор редакции. Проверено дважды: lawc check на обоих пакетах чист, и регенерация gen_constitution_semantics.py независимо воспроизвела ровно числа узлов стороны upstream (130 / 387 / 202 / 529 / 2851).

  • Дефект обеих реализаций закрыт erratой E-0050: нижняя граница окна нормы вычислялась и выбрасывалась. Окно гасило позицию только СВЕРХУ (legal_time > end → EXPIRED), а снизу не гасило вовсе — норма, вступающая в силу завтра, отвечала ACTIVE вчера, без единой issue. Причина не в прозе: start вычислялся и не использовался ни разу, а в Rust-порте был назван _start/_p_start — подчёркивание глушило предупреждение компилятора. §134 при этом перечисляет pending ровно между created и active, схема несёт PENDING в enum NormativeStatus, и ни одна реализация его не порождала: значение было объявлено и мертво. Найдено предметом, а не тестом. Обе меры §33.1 и differential были зелёными — differential молчит по построению, когда обе реализации ошибаются одинаково. Поймала гипотеза от акта: Турция присоединилась к Декларации ОН 24 февраля 1945 года, значит на 1 января 1943-го обязанности у неё быть не должно; positions отдавал 47 связанных вместо 26 на любую дату. Правка симметрична в двух реализациях: обязанность и запрет до окна — PENDING, полномочие, иммунитет и свобода — CREATED (§134 даёт им свою таблицу kinds без pending), startInclusive читается из интервала, позиция по-прежнему создаётся — норма, вступающая в силу позже, обязана быть видна и называть свой срок. Проверка стоит ПЕРЕД разбором condition: §136 и §137 говорят об исполнении и контрпримере «в window», и без этого порядка контрпример до вступления нормы в силу объявлял бы её нарушенной. Вектора T146 (обязанность до окна → PENDING) и LAY-L3-LIBERTY-NOT-YET (свобода до окна → CREATED) написаны ИЗ ПРОЗЫ и до правки падали; их голдены СОЗДАНЫ с предохранителем — запись разрешалась только при совпадении статуса с прозой. Радиус для замороженных голденов нулевой: ни один существующий вектор поведения не сменил, инвариант 3 не затронут. Вектора три, а не два: к T146 и LAY-L3-LIBERTY-NOT-YET добавлен LAY-L2-WEAK-PERMISSION-NOT-YET — следствие правки в ДРУГОМ виде запроса: универсум слабого разрешения §126 уже отбрасывал истёкшие запреты («истёкшие/снятые не применимы»), а симметрии снизу у него не было, и полёт объявлялся запрещённым за четыре месяца до появления запрета. Правка нашла один настоящий дефект ожидания в чужом акте: HP-10-VIOLATION-TRIGGERS-SANCTION спрашивал санкционную обязанность п. 25 закупа (окно [@2027-02-01, @2027-12-31]) на 2026-06-01 — за восемь месяцев до вступления — и закреплял ACTIVE. Сценарий переписан и держит теперь оба конца окна. Регрессия корпуса: одно падение из 4427, и оно было именно этим.

  • Lean-ядро научено считать A3-параметры: checker/LawCore/A3.lean. Объявить границу («терм головы вне ядра») было лечением симптома — допущение и есть непроверенное место ровно там, где считаются деньги. Новый предпроход по образцу LawCore.Const (§54): const_ref на A3-символ раскрывается в значение НА ДАТУ ПРАВА дела (case.context.legalTime) — дерево if по датам, вызов функции строки расписания, раскрутка Result/Ok; MissingParameterValue значения не даёт, и ссылка остаётся ссылкой. Подставляются ТОЛЬКО узлы с маркером происхождения a3Kind (parameter-dataset/parameter-row) — произвольные функции §47.1 ядро не вычисляет; программа без A3-узлов возвращается побайтово той же. Поддержаны обе формы интервала: открытый (одно сравнение) и закрытый (конъюнкция). ОСМС: доказанных шагов правил 156 → 303, допущений 336 → 189, отказов 0. Проверка, а не доверие: подделка суммы ContributionBase (450 000 → 450 001) отвергается ядром; выбор строки по дате держит сам корпус (OSMS-02 — одно дело на 2025 и 2026 годах). Селфтест ядра дополнен §A3.2 (пять проб) и краснеет при подмене ветви else на then; в ci/check_proof_certificates.py заведена проверка обратной ошибки — непрозрачный операнд головы обязан быть принят, НЕ засчитан доказанным и назван.

  • Lean-ядро называло ложной ошибкой то, чего не умеет считать: частично непрозрачный терм головы (A3-параметр). Точечная сверка сертификатов ОСМС дала 24 отказа из 27 — ОШИБКА: … заключение не совпадает с головой правила ContributionBase под предъявленной σ, и то же у DeductionBase. Квалификация (инвариант 8): не дефект lawc и не дефект lawref — обе реализации согласны байтово и дают одинаковый сертификат; не дефект SPEC — §205/§208 не требуют, чтобы const_ref на A3-символ был ground-константой. Дефект третьей ноги: decodeAExpr отдаёт .opaque на const_ref A3-параметра (это generated-функция на legalTime, symbolKind: "function"), и голова min(доход, МЗП × ContributionBaseCap) декодировалась как ВЫЧИСЛИМАЯ — evalA возвращал none, совпадения не было, и ядро объявляло сертификат неверным. Терм, непрозрачный ЦЕЛИКОМ, этой участи избегал (Term.computed → допущение), а частично непрозрачный — нет. Заведена AExpr.hasOpaque (checker/LawCore/Arith.lean), и проверка головы в checker/LawCore/Check.lean признаёт границей обе формы: узел становится ДОПУЩЕНИЕМ с названной причиной («терм головы вне ядра v1 (деление/агрегат §59, A3-параметр)»), а не отказом. Проверка арифметики там, где ядро СЧИТАТЬ УМЕЕТ, не ослаблена: check_proof_certificates — 2/2 подделок суммы по-прежнему отвергнуто, всего 23/23 подделок, селфтест ядра OK. ОСМС после правки: 51 сертификат оракула и 51 движка, отказов 0 (было 27 проверено / 24 отказа). Дефект пришёл с переездом ставок в A3 и существовал до этой работы — проверено прогоном на CLIR из HEAD, числа совпали.

  • Errata E-0048: Instant сравнивался как строка, а измерялся как момент — порядок и равенство мгновений приведены к §84.1. Найдено вектором T145 на фазе 1 формализации акта о капитуляции. §57 перечисляет равенство по видам и об Instant говорит одно — что он не сравнивается с Date; порядка САМИХ мгновений проза не задавала ни строкой, и обе реализации заполнили пробел одинаково: instant лежал в общем множестве упорядоченных рядом с date и text и сравнивался БАЙТАМИ записи. Дефект самопротиворечив внутри одного файла — hours_between (E-0028) разбирает те же строки в моменты, потому что §84.1 объявляет разность двух мгновений физической длительностью, «а не разностью настенных показаний». Одна пара значений давала два несовместимых ответа о том, что раньше: hours_between(23:00+03:00, 22:00Z) = 2 при 23:00+03:00 > 22:00Z = True, а 2301+01:00 и 22:01Z — один момент при == False. Расхождением реализаций это не было (differential молчал по построению: неправы обе), границей среза — тоже. Три ноги контура молчали каждая по своей причине: позитивного вектора на Instant в терм-позиции не существовало (T024 закрывает только отрицательную сторону), в корпусе все литералы мгновений стоят в провенансе, Lean сравнения термов не пересчитывает. Радиус измерен ПЕРЕД правкой: во всём корпусе и всех векторах ровно ОДИН узел сравнения с операндом Instant — узел самого T145; ни один замороженный голден не сдвинулся, check_differential 123/123 байтово.

  • Акт о военной капитуляции Германии формализован ЦЕЛИКОМ — оба инструмента (corpus/laws/surrender-1945, пакет de.surrender.act1945). Реймс 07.05.1945 (пять статей) и Карлсхорст 08.05.1945 (шесть) закреплены как ДВА source в одном пакете, по образцу пакта Молотова–Риббентропа: редакцией друг друга они себя не объявляют, и previous/next сказали бы от имени источников то, чего те о себе не говорят. Обе меры §33.1 полны и ПРИМЕНИМЫ (в отличие от Декларации независимости, у которой единицы деления нет вовсе): учёт — 5 из 5 и 6 из 6, неучтённых ноль; глубина — EXECUTABLE 5 и EXECUTABLE 6, то есть из КАЖДОЙ статьи обоих актов что-то выводится; байтовая доля 99,0 % и 99,3 % (непокрытое — переводы строк между абзацами). 24 правила, 16 норм-шаблонов, 18 фрагментов, разметка §218 полная (38 объявлений, 40 норм, без метки ноль). Сценарии SUR-01…SUR-08 — 8/8, differential 23 вызова байтово. Предмет пакета — расхождение двух текстов, и оно ИСПОЛНЯЕТСЯ, а не описано. Час прекращения огня в обоих один и тот же (2301 Central European time 8 мая), но обязанность разоружиться и сдать оружие есть только у Карлсхорста, а запрет порчи у Реймса ограничен имуществом судов и самолётов против «всякой технической техники ведения войны» у Карлсхорста. Первая редакция пакета ставила оба запрета на один предикат — расхождение оставалось в МЕТКЕ и не проверялось ничем; исправлено предикатом узкого класса (vessel_or_aircraft_material), и SUR-05 теперь ломается, если два запрета уравнять. Час капитуляции — первое в корпусе мгновение §19 в терм-позиции. Все прежние 132 литерала Instant стоят в complete_as_of и retrieved_at, то есть в провенансе, где их никто не сравнивает. Выразим он потому, что пояс называет САМ АКТ («Central European time»): E-0028 отказала шагу по часам ровно из-за невозможности назначить пояс за норму, а здесь назначать нечего. Отсюда проверяемое машиной следствие (SUR-02): 2301 CET 8 мая есть 9 мая по московскому времени, и сила, доложившая «01:05 9 мая», опоздала на четыре минуты, а не на сутки. Статья 6 Карлсхорста («The English and Russian are the only authentic texts») — тот редкий случай, когда closure §70 назван замкнутым в самом тексте, а не выбран формализатором. Предикат пришлось сделать УНАРНЫМ: двухместный проходит check и lower чисто, а на исполнении даёт NON_EXECUTABLE_CLOSURE, то есть статья молчит при зелёных воротах. Источник — вычитанные транскрипции фотографий подписанных экземпляров (en.wikisource, пространство Page:, пять закреплённых ревизий по oldid); нумерация статей восстанавливается из разметки и СВЕРЯЕТСЯ с объявленными <ol start="N"> (corpus/tools/fetch_surrender_text.py), фрагменты режутся из закреплённых байтов (corpus/tools/sync_surrender_fragments.py).

  • Каталожная метадата пакета: секция [metadata] в law.toml (DECISION-0051), первый носитель — «Туыстық жүйе». До неё пакет не сообщал о себе НИЧЕГО сверх четырёх обязательных полей §10: юрисдикция, правовая природа, статус действия и качество источника жили в единственном месте — словаре PACKAGE_TITLES в mcp/law_mcp/core.py, то есть в Python чужого инструмента. Цена измерена на живом ответе: law_packages печатал «юрисдикция: Республика Казахстан. Нормы других стран здесь отсутствуют» над сводом, чей источник объявляет jurisdiction "none", в двух строках от его же титула «Памятник обычая, а не действующее право РК» — заголовок противоречил титулу под собой, а второе его предложение было ложным о девяти пакетах сразу (США, Рим, Англия, СССР, УЕФА, РФ, международные договоры, фараид, FNMA). Собственный контракт mcp/test_server.py эту ложь ЗАКРЕПЛЯЛ проверкой на подстроку. Восемь полей: title, primarySource, jurisdiction, issuer, instrument, legalStatus, sourceFidelity, verifiedAgainstSource. Три решения приняты отдельно: юрисдикция, издатель и применимое право — РАЗНЫЕ поля (одно заставляло писать jurisdiction UEFA, что в корпусе уже случилось: УЕФА — издатель, а не правопорядок; none законно и означает отсутствие правопорядка, а не «неизвестно»); чисел в метадате нет (глубина и сценарии живут в генерируемых JSON под храповиками, а замороженное в строке число протухает — наблюдалось на одиннадцати титулах, носящих «EXECUTABLE N» в Python при мере в JSON); legalStatus — об акте ЦЕЛИКОМ, постатейные различия выражает мера глубины. Метадата проверяема, а не декларативна: jurisdiction, instrument, sourceFidelity и primarySource выводимы из source-деклараций, и ворота ci/check_package_metadata.py (шаг 29/41) читают CLIR и отвергают расхождение — канарейка на подделанной юрисдикции краснеет; руками объявляется только невыводимое, и каждое такое поле у первого пакета снабжено записанной причиной выбора. sourceFidelity шире §27.2 на два значения — reconstruction и authored_exposition говорят о ПРОИСХОЖДЕНИИ текста, а не о закреплении байтов («Жеті жарғы» закрепляет реконструкцию, tuystyq — авторское изложение, оба при этом честно PINNED_OFFICIAL_BYTES), и ворота требуют под ними статус не ниже PINNED_UNOFFICIAL_COPY. Секция включена в валидацию, а не оставлена незнакомой: lawc пропускает незнакомые секции намеренно, а lawref.parse_manifest отбрасывал неперечисленные имена ДО схемы — то есть по умолчанию новая секция невидима обеим реализациям, ровно тот молчаливый класс, против которого устроен репозиторий; имя добавлено в список, поля описаны в package-manifest.schema.json аддитивно (release/ не тронут), опечатка в поле и значение вне словаря отвергаются обе. Байтовый контракт цел: semanticHash пакета не изменился, git diff CLIR пуст, lawc check чист, law.lock секцию не пинует по построению. Храповик corpus/metadata-ratchet.json держит множество пакетов с метадатой от убывания — требовать её сразу у всех пятидесяти значило бы завести ворота, красные с первого дня. Потребитель перестроен: law_packages печатает правовую природу ИЗ пакета («вне юрисдикции государства; обычай; издатель: казахский обычай; с официальным текстом НЕ сверен») и отдаёт секцию полем metadata; пакет без секции строки не получает — «не объявлено» обязано отличаться от объявленного. Заголовок каталога приведён к правде, назначение барьера против подмены нормами другой страны сохранено; пин теста снят с квалификацией «дефект утверждения» — он закреплял ложное предложение и тем защищал его от исправления, взамен проверяются четыре вещи. Индекс реестра — второй потребитель: registry/build_index.py переносит секцию в запись каталога packages.json и берёт из неё ЗАПАСНОЙ заголовок. Прежнее правило «название = official-метка первой работы-источника» не ошибочно, оно неприменимо к целому классу: официальной метки нет у доктрины, обычая, авторского изложения и частного документа, потому что официального названия у них не существует, — и такой пакет приезжал в витрину с title: null, попадая в health.packagesWithoutTitle как недоделка, которой не было (список сократился с 15 до 14). Рядом печатается titleSource (source-label | manifest): чьё это имя — вопрос провенанса. health.packagesWithoutMetadata считает пробел поимённо (57 из 58). В дескриптор p/<name>/<version>.json метадата НЕ идёт — он держит форму LockedPackage с additionalProperties: false. Долг назван явно: law_ask по-прежнему помечает каждый ответ глобальной константой — у ответа бывает несколько пакетов, и правило соединения их юрисдикций решается отдельно.

  • Закон «О защите прав потребителей» № 274-IV: третья мера полноты, вычисляемые сроки, бремя доказывания и полная разметка (28.08). Пакет проходил обе меры §33.1 (96,7 % байтов, 59 статей из 59) при том, что 31 правило из 78 стояло в proof-графе, а 38 поверхностных норм из 69 не срабатывали ни одной веткой — включая выводы, которые протокол сверки уже обещал (возврат при отсутствии товара для обмена, тридцатидневный возврат несоответствующего и контрафактного товара, окна по сроку годности и двухлетнее, сроки замены, экспертизы и ремонта, двухмесячное обращение в орган). Обе меры §33.1 этого не видят по построению: они считают НАЛИЧИЕ правила у статьи, а не то, что правило срабатывает. Заведено 26 сценариев (CP-11…CP-36), закрывших все 38 норм и все пятнадцать §206-расщеплений or; 85 правил CLIR из 85 живы, мёртвых ноль, differential 77 вызовов байтово. Вместе с ними закрыты три класса: (1) бремя доказывания — ст. 30 п. 5 (продавец не снял бремя по гарантийному товару) и зеркальный п. 4 (потребитель доказал допередаточный недостаток, отсутствие гарантии — КЛАССИЧЕСКОЕ not §66, а не not_known: при умолчании распределение бремени определялось бы записью дела); (2) три постулируемых окна стали вычисляемыми — два года ст. 17 п. 2, два месяца ст. 42-5 п. 2 и десять дней ст. 42-4 п. 2 (по СДАЧЕ ответа на почту, как велит часть третья пункта), плюс просрочка новых сроков свыше десяти дней ст. 34 п. 5, у которой нормы не было вовсе; каждое окно проверяется сценарием ДВАЖДЫ — внутри и снаружи, иначе вывод нормы неотличим от повторения входа; (3) разметка §218 доведена до 190/190 объявлений и 85/85 норм (было 45/188 и 25/78 — пятое место с конца по корпусу). Долг corpus/dead-symbols.json по пакету обнулён: warranty_set ожил нормой п. 4, остальные 39 объявлений разобраны поимённо — девятнадцать из них каталоги главы 4 и обзорных статей, то есть машинно видимая мера того же пробела, который §33.1 показывает как «ANCHORED 47». Закон «О защите прав потребителей» доформализован до предела текста (29.08): 48 статей из 59 в EXECUTABLE, 11 в ANCHORED — глубина §33.1 по пакету прошла путь 12/47 → 48/11 за одну работу. Заведены ст. 6-2 (государственный контроль: три способа вручения рекомендации §206, сроки десять и пять рабочих дней, интервал полгода), 6-3 (Единая информационная система), 42-8 (досудебное урегулирование), 2 п. 3 (приоритет международного договора), 7, 9, 10, 11, 12, 13, 16, 18, 20, 21, 42-2. Приём квантора по каталогу повторился четырежды — 26 сведений ст. 25, 36 правомочий объединений ст. 41, 14 прав потребителя ст. 7 и 12 видов условий ст. 8-1: одно правило вместо N копий, позиция на каждый пункт, и мёртвые словари required_item_information, association_power, consumer_right, prohibited_contract_term получили потребителя. Проверяются они только счётом СЫРЫХ позиций: _positions возвращает множество пар и одинаковые по статусу экземпляры схлопывает — первая версия проверки показывала «одну позицию» и выглядела верной. Остаток из одиннадцати статей — не долг, и это измерено: детектор ворот находит признаки исполнимого содержания только у двух, и оба ложные (ст. 22 исключена, «деонтика» пришла от заголовка главы 4; ст. 44 вводит Закон через три месяца после первого опубликования, даты которого в закреплённом тексте нет). Остальные девять — определения, принципы, компетенции органов и исключённые статьи. Итог: 49 сценариев, 241 правило CLIR из 241 в proof-графе, differential 146 вызовов байтово, ядро Lean 146/146 при нуле висячих узлов, разметка 393/393 и 366/366, долг мёртвого словаря нулевой. Глава 5 «Выполнение работы (оказание услуги)» закрыта (29.08): ст. 36–39 — смета, материалы и оплата, шестнадцать норм. Носитель — исполнитель, предмет — договор, окно от начального срока работы; связывание по work_contract/contract_start оживило двух сирот. Две позиции носит ПОТРЕБИТЕЛЬ — оплата материала исполнителя (ст. 37 п. 2) и правомочие отказа при превышении сметы (ст. 36 п. 2); деонтическая форма это различает, плоское отношение нет. Три случая умолчания §113 подряд, все из текста: запрет сверхсметных требований действует, пока исполнитель не показал согласие потребителя (ст. 36 п. 2); ответственность за утрату материала — правило, предупреждение об особых свойствах — исключение (ст. 38 пп. 3–4); форма оплаты диспозитивна и вытесняется установленным законом порядком (ст. 39). Глубина §33.1 25/34 → 29/30, то есть половина статей акта теперь выводит. Итог: 45 сценариев, 187 правил CLIR из 187, differential 105 вызовов байтово, ядро Lean 105/105 при нуле висячих узлов, разметка 329/329 и 278/278. Глава 4 «Права и обязанности продавца» закрыта целиком (29.08): все одиннадцать статей (23–33-2) перешли в EXECUTABLE, глубина §33.1 12/47 → 25/34. Форма — нормативные позиции §127, и решение это техническое: обязанности главы БЕЗУСЛОВНЫ, «продавец обязан обеспечить безопасность товара» не имеет when, и плоское правило потребовало бы выдумать условие, которого в тексте нет. Прецедент формы — internal-affairs (одна обязанность на одну единицу текста). Существующие seller_must_* не переписаны: они последствия КОНКРЕТНОГО требования, а не стоящие обязанности, и слои разделены явно. Окно позиции — [purchased, infinity), а не дата вступления Закона в силу: ст. 44 п. 1 вводит его «по истечении трёх месяцев после первого официального опубликования», а даты публикации в закреплённом тексте нет. Форма окупилась немедленно: запрос positions даёт СТАТУС каждой позиции, то есть ответ «какая именно обязанность не исполнена», которого плоский предикат дать не может. Двадцать шесть сведений ст. 25 записаны ОДНИМ правилом с квантором по каталогу required_item_information — по позиции на сведение, и каталог перестал быть мёртвым словарём. Три исключения потребовали трёх разных форм, и выбор менял ответ: отсылка к другим актам — положительным сертификатом; факт внутри дела (ст. 29 п. 2 «если не исключено характером товара») — умолчанием §113, потому что классическое not дало бы обязанность почти нигде; освобождение от ответственности за вред (ст. 31 п. 6) — формой несённого бремени. Клауза except_when §149 для этого не годится: она парсится и типизируется, lawc check чист, но ПОНИЖЕНИЕ её теряет — в узле CLIR не остаётся ни следа, и правило ведёт себя так, будто исключения нет; в корпусе её не использует ни один пакет. Итог по пакету: 43 сценария, 169 правил CLIR из 169 в proof-графе, differential 96 вызовов байтово, ядро Lean приняло 96 сертификатов оракула и 96 движка при нуле висячих узлов, разметка 301/301 и 245/245. Отдельно формализована ст. 8-1 — двенадцать видов условий, нарушающих права потребителя, стояли фактами и не читались ничем: заведены пять норм (пп. 1–4), включая единственный подпункт с величиной — «несоразмерно большая сумма (свыше тридцати процентов стоимости)», долю считает норма, а исключение (туристское обслуживание, невозвратный авиабилет) предъявляется положительным сертификатом. Статья перешла из ANCHORED в EXECUTABLE — единственное движение глубины §33.1 за работу (12/47 → 13/46), остальные нормы ложились на уже исполнимые статьи. Итог по пакету: 37 сценариев, 90 правил CLIR из 90 в proof-графе, differential 83 вызова байтово, ядро Lean приняло 83 сертификата оракула и 83 движка при нуле висячих узлов, разметка 201/201 и 90/90, долг мёртвого словаря нулевой (38 разобрано поимённо). Фаззер --targeted 40 конфликтов §115 и контрпримеров §93.1 не нашёл. Стоило времени: add_calendar_period требует политику срока §86 (include_end=true, roll=no_roll) и без неё отвергает вычисление MISSING_POLICY при чистом check и корректном lowering — политика подаётся профилем контекста дела, а не декларацией акта.

  • Указ ПВС СССР от 22.06.1941 № 8/160 «О военном положении» — пакет su.decree.martial_law_1941, десять пунктов из десяти. Второй советский пакет корпуса и первый ОПЕРАЦИОНАЛЬНЫЙ акт этой юрисдикции: 19 power-норм §127, две обязанности §136, иммунитет §128, семь замыканий §70, один канал суждения §47.3; правил 76, узлов CLIR 294. Три конструкции, которых в корпусе не было. (1) Держатель полномочия ВЫВОДИТСЯ. Пункт 2 отдаёт все функции органов власти в трёх названных областях военным советам, «а там, где нет военных советов, — высшему командованию войсковых соединений»: у семнадцати норм из девятнадцати держатель один и тот же, и кто он в данной местности — вывод, а не факт дела. Оговорка «где нет советов» записана ЗАМЫКАНИЕМ §70, а не not_known: первая редакция через умолчание уронила lawc lower кодом LDC-E4103 LATE_STATUS_PRODUCER (defeasible-продюсер роняет всякого строгого потребителя, §111), а лечить это цепью defeasible значило бы объявить безусловные нормы указа поражаемыми ради ограничения v1 — обе ветви остались strict, и это ещё и вернее по праву: указ говорит о ФАКТЕ отсутствия совета. (2) Замкнутый перечень и открытый остаток в одном тексте. Пункт 3 (восемь предметов) и пункт 7 (восемь категорий дел, оборот «а именно») замкнуты; последний абзац пункта 7 границы не имеет — «и иных преступлениях, предусмотренных уголовными кодексами союзных республик, если КОМАНДОВАНИЕ признает это необходимым», — и ответ отдан суждению самого командования (authority MilitaryCommand). Одно дело о спекуляции даёт FALSE_ONLY по перечню и REQUIRES_JUDGMENT по остатку. (3) Потолок, ограничивающий не деяние, а нормотворчество: «до 6 месяцев» и «до 3000 рублей» пункта 4 «а» стоят при ПОЛНОМОЧИИ устанавливать наказания, записаны величинами с единицей (6 calendar_month, 3000 SUR) и проверяются вычислением. Измерено: 9659 закреплённых байт по трём неизменяемым ревизиям страниц сканированного свода 1956 года, 10 фрагментов, учёт единиц 10 из 10, глубина §33.1 EXECUTABLE 10, разметка §218 полная (161 объявление, 98 норм), сценариев 49/49, KZ-differential 114 вызовов байтово идентичны. Все 76 правил акта ДОКАЗАННО применились на деле — 22 норм-правила создали свою позицию, 54 обычных сработали: третья мера (не «сколько статей покрыто», а «сколько норм сработало») закрыта целиком, чего у большинства пакетов корпуса нет. Секция [metadata] §10 заведена сразу (второй пакет после tuystyq); legalStatus = "historical_monument", а не repealed, — отменяющего акта закреплённый источник не называет.

  • Дефект ОБЕИХ реализаций: два эффекта полномочия в одном деле роняли документ (lawref/lawref/evaluator/effects.py, lawc/crates/law-eval/src/effects.rs). urn:proof:effect:<хвост позиции>:<seq> брал от позиции только номер приложения, а seq считался локально вызова материализации — тогда как цепочка норм §143 зовёт её на КАЖДОЙ итерации. Два эффекта разных полномочий с разных итераций получали один urn:proof:effect:0:0, и документ не собирался вовсе: CanonError: nodes: дубликаты stable ID (§208). Не неверный ответ — отказ. Квалификация: дефект обеих реализаций, не SPEC и не расхождение; law-eval здесь дословный порт, обе падали одинаково, и differential был зелен ровно потому, что обе были неправы одинаково. Достаточно пары полномочий, где эффект первого включает второе. Правка: идентификатор стал функцией ПОЗИЦИИ (urn:proof:effect:<rule>:<n>, тем же видом, что urn:proof:norm:), а не порядка материализации; уникальность гарантирована стражем _effect_done — эффект у позиции ровно один. Оракул правлен первым (инвариант 6), порт дословен, differential байтовый. Радиус нулевой: urn:proof:effect: не встречался ни в одном замороженном голдене — и это вторая находка, а не удача: материализация эффекта §127.2 не была покрыта ни одним conformance-вектором вовсе (T018/T019/T031 проверяют случаи, когда эффекта НЕТ). Дыра закрыта вектором LAY-L2-POWER-EFFECT-CHAIN (§127/§143/§208): два полномочия, эффект первого — условие возникновения второго, поэтому вторая итерация цепочки возникает по построению. Вектор красен ДО правки (CanonError) и зелен после; вписан в три реестра, differential байтовый.

  • Errata E-0049 и ворота ci/check_schema_refs.py (шаг 4/41): нормативные схемы проверены сами. Схемами проверялось всё дерево, а их самих не проверял никто. Цена молчания: evaluation.schema.json с ПЕРВОГО своего коммита (a773237) держала три $ref на два несуществующих определения — NormativeStatusSupport.valid → #/$defs/TemporalInterval, ExecutionReceipt.resourceUsage и .signature → #/$defs/JsonObject. Висячая ссылка при этом проверку не ослабляет, а ОТМЕНЯЕТ вместе с ответом: Draft202012Validator на такой ветви поднимает PointerToNowhere — ни «валидно», ни «невалидно». Три нормативных поля не проверялись ничем. Почему было нем: ветвей не достигает ни один документ — во всех 289 expected.json векторов 122 суть evaluation-документы, записей normativeStatusSupports в них 24, с полем valid ноль, объектов receipt ноль. Квалифицировано как дефект СХЕМЫ: проза полна и правки не требует (§134 называет «valid interval», §170 печатает resource_usage { ... }, §2.18 части I относит signature к ExecutionReceipt), реализации ни при чём — ни одна из трёх полей не излучает, differential не двигается. Правка аддитивная: оба определения добавлены ЛОКАЛЬНО, а не межсхемными ссылками, — evaluation.schema.json самодостаточна по построению (свои Date, Instant, Digest, StableId, JsonValue) и не содержит ни одной ссылки вовне; висячие суть остаток этого дублирования. Ворота разрешают каждый $ref каждой нормативной схемы тем же механизмом, что оракул (referencing Registry), реестра файлов не ведут (глоб + нижняя граница + сверка с NORMATIVE_SCHEMAS в обе стороны) и краснеют на доправочном дереве ровно тремя строками с полными JSON-указателями — проверено прогоном git show HEAD:, а не рассуждением. Канарейка сверяет ОТПЕЧАТОК сообщения: её первая редакция писала ссылки кириллицей, и все четыре пробы ловила мета-валидация (is not a 'uri-reference'), а разрешение ссылок не исполнялось ни разу; мутаций десять, каждая роняет свою сверку. KNOWN_DANGLING шага 27/41 опустошён и оставлен как счётчик: безусловный запрет не может стоять за pnpm. Кодогенератор выпускал для трёх полей unknown и теперь выпускает типы. Смежное названо и НЕ закрыто: блок execution_receipt §170 перечисляет шесть полей, и signature среди них нет, — правка прозы требует своей квалификации.

  • Ворота молчания словаря: ci/check_dead_symbols.py (шаг 6, вторая пара). Объявление, которого не читает ни одна норма, было невидимо тройне, и каждый слой слеп по своей причине: lawc check чист — объявление корректно; обе меры §33.1 считают СТАТЬИ и ФРАГМЕНТЫ, а не словарь (у независимости стояло «EXECUTABLE 18/18, неучтённых 0» при мёртвом capital_city); check_dead_rules.py смотрит ПРАВИЛА и мёртвого объявления не видит по определению — правила там нет вовсе; вербализация молчит, потому что метка §218 у объявления есть и тотальность §3.3 удовлетворена. Находка, ради которой ворота заведены, показывает цену класса: в independence единственный мёртвый символ capital_city оказался пропущенным closure §70 по ст. 17 — «столица - город Алма-Ата» есть определённое описание, и без закрытия вопрос о другом городе давал NEITHER вместо «нет». То есть мёртвое объявление указало на потерянную НОРМУ, а не на мусор в словаре. Первый прогон по корпусу: 587 мёртвых объявлений из 16 902 в 38 пакетах, 280 из них ассертятся — акт утверждает факт, который не потребляет ни одна норма. Три решения: множества берутся глобально, а не пофайлово (audit-world повторяет узлы дословно — тот же урок, на котором спотыкались первые ворота dead-rules, переиспользован, а не воспроизведён); assertion потребителем НЕ считается, потому что «ассертится и не читается» и есть искомый признак, и его число печатается отдельно; реестр corpus/dead-symbols.json разделён на documented (разобрано, id → причина) и baseline (долг, замороженный как есть) — слитые, они выдавали бы реестр за перечень осознанных решений, каким он не является. Мёртвое объявление НЕ обязано быть дефектом (бывает законный входной предикат), поэтому ворота требуют не отсутствия таких символов, а того, чтобы каждый был назван. Оба пути отказа проверены прогоном: незнакомый мёртвый символ и ожившая запись роняют ворота. Вписаны в ci/run_all.sh — проверка в ci/ считается заведённой только строкой в нём — и в ci/README.md.

  • Принципы Нюрнберга формализованы целиком — 7 из 7, 18 сценариев, differential байтовый. Новый пакет un.ilc.nuremberg_principles (КМП ООН, 1950): второй международный акт корпуса и первый акт международного уголовного права. Измерено: 28 правил, 10 фрагментов, сценариев 18/18, все 18 evaluate-вызовов байтово идентичны между реализациями, глубина §33.1 — EXECUTABLE 7 / ANCHORED 0 / SOURCE_ONLY 0, учёт 7 из 7, покрытие текста 78,3 %, разметка §218 полная. Заведена единица деления principle в обеих мерах §33.1. Четыре сцены проверяют границы, а не выводы: незамкнутость перечня преступлений, отсутствие соучастия в соучастии, молчание при приказе без суждения, несущность условия связи в (c). Найден и квалифицирован общий дефект обеих реализаций: канал суждения §47.3 не проходит через поражаемое правило (изолировано тремя прогонами; переменная — режим правила, не полярность головы).

  • Конструктор законов реализован: оба движка исполняются в браузере, differential сошёлся байтово. Новый монорепозиторий constructor/ — рабочий стол формализации по плану spec/CONSTRUCTOR.ru.md (решение DECISION-0050). Пять перспектив одного пакета (Текст · Логика · Проверка · Анализ · Редакции), ось юридического времени в шапке, полоса ворот. Измерено: палитра операций §225 из WASM-сборки совпала с нативным lawc … --json на 24/24 случаях байтово; e2e Playwright — 32/32, включая тест, в котором ядро на Rust под wasm32 и оракул на Python под Pyodide отвечают в ОДНОМ браузере одними каноническими байтами §208. Тело операции одно, хостов трое. Палитра parse | check | layer | features | lower | expand | test | explain | why-not | graph вынесена из армов main в библиотеку law-cli (pkg.rs + ops.rs) и оттуда отвечает терминалу, раннеру векторов §267 и браузеру через новый экспорт law_op в law-wasm. До этого третий хост мог только ПОВТОРИТЬ тела — то есть завести второе описание того, что печатает компилятор. Голдены check_cli_json при переносе не сдвинулись ни на байт. Новый крейт law-vfs — файловый ввод за швом. Под wasm32-unknown-unknown файловой системы нет вовсе, а компилятору она нужна: пакет §22 — это каталог, §194 закрепляет байты публикации по local_path, A3-ресурсы лежат рядом, law.lock держит их хэши. Выключить эти проверки в браузере значило бы получить ДРУГОЕ право («hash mismatch» и «файл не прочитался» — разные ответы, E-0013). Вызовы std::fs на пути компилятора заменены свободными функциями law_vfs; без подложенного контекста они идут в std::fs байт в байт как раньше. Одно отличие намеренное: read_dir сортирует записи — порядок обхода каталога наблюдаем (он задаёт порядок диагностик) и обязан не зависеть от ФС (§211). Ворота 26/43 check_wasm_differential. Сверка идёт с ЖИВЫМ CLI, а не с голденом: голдены пинует шаг 25/43, и вторая сверка с ними краснела бы за чужую работу. Внутри канарейка, которая обязана срабатывать: тот же запрос с ИСПОРЧЕННЫМ пакетом даёт другой ответ — иначе ворота проходили бы и на реализации, которая присланные файлы не читает вовсе. Четыре случая, не переносимые в браузер, объявлены с причинами. Ворота 27/43 check_constructor. TS-типы протокола порождаются из spec/schema/*.json кодогенератором (14 схем → 202 типа), и прогон обязан не менять дерево; сверка идёт САМИМ прогоном, а не сравнением с HEAD. e2e в PR-гейт не входит и объявлен отдельной командой: браузер на 94 МБ не помещается в бюджет 15 минут. Найдено попутно: в spec/schema/evaluation.schema.json три висячих $ref (#/$defs/TemporalInterval, #/$defs/JsonObject ×2). При достижении этих ветвей Draft202012Validator не валидирует, а падает (PointerToNowhere), — то есть поля NormativeStatusSupport.valid, ExecutionReceipt.resourceUsage и .signature схемой фактически не проверяются. Закрыто тем же днём: определения восполнены в схеме, KNOWN_DANGLING пуст, безусловный запрет вынесен в ci/check_schema_refs.py (шаг 4/41) — свойство нормативных схем не может зависеть от наличия pnpm. Перепроверка нашла пять дефектов, переживших зелёный билд и зелёный e2e. Все на пути ВВОДА — там, где UI строит документ для движка, — и все невидимы для браузерного сценария, потому что он гоняет faraid, где параметры доменных типов и целые ветви кода не исполняются. (1) Тип значения выбирался ВИДЖЕТОМ, а не декларацией: виджет number обслуживает Integer, Natural и Decimal, и сборщик звал целым любое число; type писался строкой вместо объекта {name}, Decimal/Money/Quantity теряли строковое значение, валюту и единицу. (2) «3.5» в позиции целого приводилось молча — теперь неразбираемый ввод отвергается поимённо. (3) Момент §35 шёл БЕЗ смещения при том, что InstantString его требует, а движок принимал такой вход молча; смещение берётся у базы IANA на выбранную дату, зона показана в шапке. (4) why_not спрашивался путём к ПАКЕТУ, тогда как ops::why_not принимает каталог вектора — панель молча показывала «разбор не запрашивался»; why_not есть ВИД запроса §172, и теперь идёт второй прогон движка с различением NOT_SATISFIED (опора против) и UNDETERMINED (опоры нет). (5) Тест §267 писался ВЫДУМАННЫМ форматом и не прогонялся — файл не разобрался бы ни одним компилятором; теперь эмиттер пишет поверхностный вид, снятый с корпуса, и результат обязан пройти контрольный прогон в wasm, а непроходящий файл в рабочую копию не едет. Побочно: роли дела ключевались ТИПОМ, из-за чего два параметра одного типа склеивались в одну сущность — limited_by(general: Instrument, act: Instrument) задавался только как отношение акта к себе; таких предикатов в корпусе 201 из 5067. Ключ теперь — позиция параметра. Заведены 31 модульных тестов формы значения (pnpm test, шаг 27/41) — именно потому, что e2e этот класс не ловит; e2e расширен до 32. Добавлены виды запросов collect (§52.1 — «какие значения», свободная позиция не вводится) и why_not; остальные семь из десяти ОБЪЯВЛЕНЫ в QUERY_KINDS.deferred, а не умолчаны. План закрыт целиком — Ф0…Ф8, и каждая позиция названа тем, чего стоила. Разметка спанов сделана на tiptap: выделение → content_hash §194 по СЫРЫМ байтам → заготовка фрагмента И заготовка нормы с якорем на него; приведения текста нет ни одного, потому что любое (сжатие пробелов, кавычки-ёлочки) сломало бы вхождение §194 молча. A3-поверхности показывают параметры и таблицы решений со значением на выбранной дате — у параметра своя ось времени, и «взнос 5 %» есть функция от legal_time; ПРАВКИ у них нет намеренно: ресурс закреплён в law.lock по contentHash, и правка из браузера рассогласовала бы их молча (LDC-E8704). Ассистент §9 собирает черновики из словаря САМОГО пакета и прогоняет check в wasm ДО показа, как требует план; не прошедший показывается вместе с кодом отказа, а ошибки, бывшие в пакете и до предложения, ему не приписываются. Передача в реестр выгружает канонические байты §208 под именем, которое ищет registry/build_index.py, и НАЗЫВАЕТ команды: индекс строит Python, запустить его из браузера нечем, а кнопка, обещающая публикацию, которой не произошло, хуже её отсутствия. Дописаны: официальные тексты пакета (и фрагмент без единой нормы назван), Spotlight по декларациям и файлам, go-to-definition по дереву (F12), quick-fix «окно к goal» и valid_when, кнопка impact-editions, Lean и покрытие в полосе ворот, .docx НАСТОЯЩИМ OOXML (прежняя выгрузка была HTML-документом с расширением .doc — на экране то же, но это файл, который читатель принимает за формат), TanStack Query с ключом «операция × отпечаток входа × дата × отпечаток сборки движка», двуязычие ru/kk с проверкой полноты словаря в воротах. Подсветка переведена на Lezer-грамматику, и это потребовало отдельных ворот. Полный порт 964 строк EBNF дал бы второе описание языка, расходящееся с компилятором молча, поэтому грамматика описывает ровно нужное редактору — лексику, заголовок декларации и баланс скобок, — а расхождение ловит новый шаг 28/43: она гоняется по ВСЕМ .law корпуса, векторов, примеров, демо и релиза (на 29.08 — 1266 файлов, 42043 декларации), и отвергнуть вправе только то, что отвергает и lawc parse --json (T085, T086). Спрашивается компилятор, а не список исключений. Что нашла разработка грамматики: токен текстового блока, записанный рекурсивно, из-за longest-match Lezer проглатывал ЧЕТЫРЕ ТЫСЯЧИ символов до последнего ограничителя в файле вместе с чужими фрагментами, а ошибка всплывала на закрывающей скобке объемлющей декларации — за сотню строк от причины; та же ловушка была у блочного комментария. Две границы оставлены и сказаны словами: Lean в браузере не исполняется (полоса ворот показывает третье состояние — «проверяется воротами репозитория», — а не зелёную галочку: отметка означала бы проверку, которой не было), и покрытие в полосе — то, что видно из CLIR, тогда как полная мера §33.1 считается по ОБЪЯВЛЕННОЙ границе воротами репозитория. Разбор — DECISION-0050 §5б. Восьмая находка — уже в самом приложении, и её дала не сюита, а расследование её красноты (29.08). Полный прогон валил тест, который в одиночку проходил всегда: панель отвечала «дело не собрано — не назван идентификатор сущности» про поля, где идентификатор стоял НА ЭКРАНЕ. useSnapshot отдавал document: null на один кадр при всякой смене ключа входа (правка, сдвиг даты, дебаунс), а из документа собраны роли и факты: поля дела исчезали и возвращались пустыми, унося набранное молча — и отказ обвинял автора в том, чего он не делал. Починка — placeholderData: keepPreviousData: прежний снимок держится на экране, пока считается новый; свежесть носит ОТВЕТ (обнуляется по ключу, полоса ворот говорит «идёт проверка»), а не форма. Вывод общий: краснота сюиты, которую не удалось объяснить, есть находка, а не помеха — соблазн поставить waitForTimeout и получить зелёный прогон закрыл бы дефект, который на человеке выглядит как «я это ввёл, а оно пропало». Побочное обязательство починки уплачено явно: раз прежний снимок держится на экране, ворота обязаны сказать, что показанное посчитано по ДРУГОМУ входу — на время пересчёта они говорят «CLIR пересчитывается» (состояние running), а покрытие добавляет «вход изменился: число относится к прежнему снимку». «CLIR собран» во время пересчёта было бы выдачей устаревшего за текущее. Вторая перепроверка (29.08) спросила уже не о пути данных, а о том, держат ли ворота то, что о себе говорят, — и нашла семь дефектов, все переживавшие зелёный прогон. Ворота грамматики обещали в заголовке сверку числа деклараций с компилятором (parse --ast --json) — такого флага нет, AST наружу не выходит, а в коде стояла одна проверка declarations === 0: грамматика, нашедшая ОДНУ декларацию на весь корпус, прошла бы. Заменено на нижнюю границу по свидетелям (строки с ключевым словом декларации в колонке 0 вне комментариев и текстовых блоков — гашение обязательно, у Локка официальный текст начинается со слов property и support); правило держится на всём корпусе с единственным исключением T078, снятым спросом у компилятора. Комментарий check_constructor приписывал регулярному выражению проверку паритета словарей — на деле её держит типизация (KK: typeof RU, удаление ключа даёт TS2741), а выражение печатало «N × 2 языка», сложив ключи обоих словарей в одно множество. У галереи возможностей не было сверки на дрейф: правка руками уехала бы в сборку, потому что приложение импортирует JSON с диска. Разбор матрицы ломался на экранированной черте (calendar_month\|calendar_year) — две возможности теряли пометку «подтверждено байтово»; заголовок матрицы называет числа сам (305 и 128), и теперь разбор обязан с ними сойтись — до починки давал 126. В перспективе «Проверка» стояло stale: snapshot.key !== snapshot.key — тождественно ложное сравнение, из-за которого «устарело» не загоралось НИКОГДА, а рядом эффект обнулял ответ вместо пометки; принцип 3 говорит «правка МЕТИТ ответ», и теперь ответ остаётся помеченным. Ещё два жёстких stale: false привязаны к настоящему признаку. И главное: ассистент не давал ни одного компилирующегося черновика — 0 из 9. У правила не было силы §100 (LDC-E0201 первым отказом) и связывателей for; обязанность выписывалась декларацией norm, которой в языке нет (LDC-E1321), вместо деонтической головы правила; у закрытия стояла дата вместо Instant; посылка выбиралась по АРНОСТИ и ловила LDC-E2104 «неявных конверсий нет» (§48). Формы сняты с корпуса и проверены компилятором, посылка ищется по подписи — стало 6 из 9, остальные отказывают по существу (стратификация §110). Там же закрыт разрыв с планом, требующим «check И differential до показа»: прошедший check черновик лоуверится, и его байты §208 сверяются с оракулом; состояний четыре, включая отдельное «CLIR не собрался» — отказ lower на чистом check не есть расхождение движков, которых даже не спрашивали. Общий вывод: все семь — один класс, текст рядом с кодом обещает больше, чем код делает; он не ловится ни типами, ни differential, ни e2e, и у каждой починки здесь есть канарейка, проверенная падением. Границы соблюдены буквально. Семантики в приложении нет ни строчки (инвариант 5): формы из CLIR — структурная проекция объявлений, не вычисление; вербализация §218 и аналитика трека О зовутся ТОЛЬКО у оракула (инвариант 6), и без него панель говорит об этом, а не пересказывает нормы своими силами; расхождение движков открывает форму квалификации (инвариант 8), а кнопки «принять ответ такого-то движка» в интерфейсе нет. Prose, схемы и голдены не тронуты — семантика 0.1 заморожена (инвариант 9).

  • Атлантическая хартия и Декларация Объединённых Наций формализованы одним пакетом: первый международный акт корпуса и первый вывод, пересекающий границу двух инструментов. Новый пакет intl.wwii.united_nations — два закреплённых документа (Хартия 14.08.1941, 2 350 байт; Декларация ОН 01.01.1942 с перечнем 21 присоединившегося, 2 197 байт), 17 фрагментов, 23 правила, 8 норм-шаблонов, 1 приоритет, 84 факта. Сценариев 15/15, авторских тестов §267 6/6, глубина Хартии EXECUTABLE 7, ANCHORED 1 из восьми пунктов, покрытие 96,4 % и 99,6 %, разметка §218 полная (56 объявлений, 31 норма, ноль без метки). Почему один пакет, а не два. Декларация начинается словами «Having subscribed to a common program … known as the Atlantic Charter» — то есть включает Хартию отсылкой. В разных пакетах на этом месте стояла бы external-граница; здесь ребро ИСПОЛНЯЕТСЯ правилом, и сценарий UN-09 проводит вывод от пункта 1 Хартии («their countries seek no aggrandizement») к заключению преамбулы Декларации. Другого вывода через границу инструмента в корпусе нет. Три механизма, которых в корпусе не было. (1) Гард по ПАРЕ, а не по держателю: обязательство (1) действует «against those members of the Tripartite Pact and its adherents with which such government is at war», и обязанность существует у пары (правительство, противник). Ради этих шести слов документ и подписуем: СССР воевал с Германией и не воевал с Японией. UN-03/04/05 подают одну и ту же норму трём мирам — 1942 год с одной войной, 1942-й с вопросом о Японии, 9 августа 1945-го с двумя, — и текст нормы между ними не меняется ни на букву. (2) Ось редакций из РАСТУЩЕГО множества адресатов при неизменном тексте: запрет сепаратного мира связывает 26 → 47 правительств за 38 месяцев, и окно каждой нормы открывается датой, когда связан ИМЕННО ЭТОТ адресат (Турция — 24.02.1945, СССР — 01.01.1942). Все прежние оси редакций приходили от поправок к тексту. (3) Полномочие с условием, для которого текст не называет решающего органа: «rendering material assistance» не поручено никому, канал суждения §47.3 требует authority, и выдумать его значило бы приписать документу орган, которого в нём нет. Условие оставлено эмпирическим: при недоказанном условии ответ NEITHER, а не «нет» (UN-07/08). Заведена конвенция unit: "ordinal" в обеих мерах §33.1 (ci/check_source_pinning.py, boundaries.py): Хартия делится на восемь пунктов «First,» … «Eighth,», нумерации цифрами в ней нет, и ни одна из шести прежних единиц её не видела. Как point, section, clause, word, principle и article_roman, конвенция НЕ угадывается и включается только объявлением акта; таблица числительных принадлежит акту. Проверено, что ни у одного другого акта корпуса мера от этого не изменилась. Единица деления у Декларации объявлена ОТСУТСТВУЮЩЕЙ, и это решение, а не пробел. Нумерованных пунктов в ней два, а нормы несут четыре места — оба пункта, оговорка о присоединении и посылка о подписке на Хартию. Мера по двум пунктам напечатала бы «2 из 2» и умолчала, что полномочие присоединения в знаменатель не входит вовсе: ровно тот отказ, ради которого boundaries.py переписан с «затронуто/нет». Находка, квалифицированная и НЕ закрытая: окно нормы несёт дату, но не запирает статус позиции. Подстановка работает — у Турции окно начинается 24.02.1945, — а positions на 01.01.1942 отдаёт 47 связанных вместо 26. Обе реализации на этом входе дают БАЙТОВО один документ (сличение lawc eval против lawref.evaluate), значит дефекта lawc или lawref здесь нет; §135 п. 3 требует «context/time scope удовлетворены», но нигде не сказано, что window шаблона нормы и есть этот time scope, а §137 трактует окно как период оценки цели. Решение — errata или уточнение прозы — за человеком; пакет делает пробел громким канарейкой UN-14, которая краснеет в день изменения поведения. Мёртвая норма при чистом check, пойманная сверкой CLIR. Полномочие присоединения было сначала написано формой effect create(un_adherent(n)) — грамматика её несёт (legal_effect = "create","(",proposition,")"), lawc check и lawc lower молчат, а в CLIR приезжает литерал с предикатом …#create, которого в пакете не объявлено, и ВЫЗОВОМ un_adherent вместо аргумента. На исполнении: позиция ACTIVE, valid_when истинен, эффекта нет, ни одной issue. Наличие позиции этого не ловит — поймано прямым чтением payload.effect в CLIR. Переписано голой формой (effect un_adherent(n)), которой пользуется весь корпус, и закреплено сценарием UN-15, спрашивающим САМ эффект и его каскад в un_participant: осуществлённое полномочие делает государство участником, при недоказанном условии — NEITHER. Квирк публикации закреплён, а не исправлен: Avalon печатает «Tripartite Pact :and its adherents» с лишним двоеточием, которого нет в «Pillars of Peace» (1946), и «Mr. Churchill ,» с пробелом перед запятой. Правка сделала бы hash-стабильную копию недостижимой из настоящей страницы — тот же случай, что латинская p у independence и «Brittish» у us-declaration.

  • Пакт Молотова–Риббентропа формализован целиком: ничтожность ab initio впервые отличается от прекращения исполнением, а не комментарием. Новый пакет su.pact.molotov_ribbentrop — четыре закреплённых инструмента (договор о ненападении 23.08.1939, секретный дополнительный протокол, разъяснение 28.08.1939, постановление СНД СССР № 979-1 от 24.12.1989), 15 917 байт, 32 фрагмента, 40 правил, 6 норм-шаблонов, 4 приоритета, closure §70, канал суждения §47.3. Сценариев 16/16, тестов §267 9/9, глубина договора EXECUTABLE 7 из 7, покрытие 99,4–99,8 % по каждому из четырёх документов. Ради чего пакет существует. Два инструмента, подписанные в одну ночь одними людьми, имеют РАЗНЫЕ истории существования, и разводит их третий акт полвека спустя: п. 4 постановления прекращает договор 22 июня 1941 года, п. 7 отнимает у протоколов действие с момента подписания. Выражено не фактом, а поражением презумпции InstrumentInForceFromSignature двумя правилами с объявленным приоритетом §106/§107: in_force_on(Treaty1939, @1940-06-01) → TRUE_ONLY, in_force_on(Protocol1939, @1940-06-01) → FALSE_ONLY, in_force_on(Treaty1939, @1941-07-01) → FALSE_ONLY. Второй и третий ответы одинаковы по виду и получены разными путями — путь виден в proof-графе. Коллизия пп. 4 и 7 внутри одного акта (п. 4 относит «другие советско-германские договорённости» к утратившим силу, то есть до 1941 года действовавшим) разрешается специальностью, и приоритет объявлен явно. П. 7 выводится из пп. 5–6, а не объявлен фактом; MR-05 показывает избирательность вывода — у договора ничтожности нет. Заведена конвенция unit: "article_roman" в обеих мерах §33.1 (ci/check_source_pinning.py, boundaries.py): русская автоконвенция берёт только арабский номер статьи, и договор со статьями I…VII был бы невидим молча — класс отказа «26-бап до конвенции kk». Как и пять прежних объявляемых единиц, не угадывается: русские акты цитируют римские статьи чужих договоров внутри своего текста. Четыре находки об инструментах, полученные сборкой: (1) отчёт учёта единиц ключуется по BASENAME документа — четыре файла ru.txt схлопывали четыре измерения в одно молча; (2) ворота глубины берут первую по алфавиту карту статей, и пакет, у которого первой оказалась карта без единицы деления, выпадал из ci/check_formalization_depth.py целиком (depth → пустые строки → continue); (3) MISSING_POLICY — issue уровня документа, а не запроса: один терм add_calendar_period красит каждый запрос пакета, и без политики §86 краснели 10 сценариев из 13, ни один из них срока не спрашивая; (4) поверхность §267 политику §86 передать не умеет (deadline_policy в context не разбирается), поэтому срок статьи VI в .lawtest МОЛЧИТ при COMPUTED — заведены два сценария-сторожа на NEITHER. Правовое решение не принято и названо: статья VI о начале течения срока молчит, а ответ от политики зависит — same_day даёт 1949-08-23 / 1954-08-23, next_day — 1949-08-24 / 1954-08-25. Обе формы прогоняются (MR-09/MR-10), чтобы разница осталась записанной. Байты закрепляются из НЕИЗМЕНЯЕМЫХ ревизий Викитеки по oldid (corpus/tools/fetch_molotov_ribbentrop_text.py), фрагменты режутся генератором (sync_molotov_ribbentrop_fragments.py); редакционные сноски участников Викитеки в срез не входят, неразрывные пробелы постановления (125 штук) перенесены как есть.

  • Довод Декларации независимости разобран профилем §274: вывод неуязвим, и держится он на ОДНОМ абзаце эпилога. Новый файл corpus/laws/us-declaration/05-argument.law — 5 поражаемых правил и один узел priority; сценарии USD-13…USD-16 (прогон вырос 12 → 16, differential 56 вызовов байтово, включая все четыре запроса argumentation, — значит lawc считает 212-аргументный граф так же, как lawref). Файл отделён от 02–04 не по вкусу: те записывают, что акт УСТАНАВЛИВАЕТ, этот — что он ДОКАЗЫВАЕТ, и доказательство живёт не в baseline, а в отдельном виде запроса. Baseline не тронут, и это проверено не рассуждением: восемь прежних сценариев прошли без единой правки ожидания. Структура спора — собственная структура акта. Большая посылка «a long train of abuses … evinces a design to reduce them under absolute Despotism» записана поражаемым правилом с допущением not_known(light_and_transient_causes); возражение, которое акт называет сам («Prudence, indeed, will dictate…»), — вторым поражаемым правилом; ответ на возражение («Our repeated Petitions have been answered only by repeated injury») — третьим, с отрицательной головой. На полном тексте: 212 аргументов, 83 атаки (2 rebut + 81 undermine), 82 из них побеждения, grounded out — РОВНО ОДИН аргумент (довод о благоразумии), одно preferred extension, класс ответа SKEPTICALLY_ACCEPTED при 27 аргументах за цель — по одному на каждый представленный факт: множественность и есть «a long train». Находка, которой не даёт чтение текста. USD-14 изымает ровно один факт — petitioned_for_redress, читаемый только правилом ответа на возражение, — и вывод падает SKEPTICALLY_ACCEPTED → REJECTED, 81 аргумент уходит в out: рушится вся цепь «умысел → непригодность правителя → необходимость отделения». Двадцать семь обвинений сами по себе довода не держат; его держит один абзац эпилога. Класс при этом именно REJECTED, а не NO_ARGUMENT — аргументы за цель существуют и остаются 27, они перестают быть защитимыми, и различие проверяется отдельно. USD-15 отделяет «открытая точка подрыва» от «подрыв состоялся»: без заявленного возражения атак ноль, а допущение остаётся допущением. Границы названы, а не обойдены. Профиль не видит НИ ОДНОЙ нормы пакета — у власти, иммунитета, свободы и обязанности голова не Literal (§274.1), и все семь стоят в skippedRules поимённо с причиной. Довод кончается там же, где кончает его акт: на необходимости отделения; дальше начинается провозглашение. Умолчание maxArguments = 64 этим актом превышается, и USD-16 закрепляет, что отказ ГРОМКИЙ: fatal RESOURCE_LIMIT, ни одного результата, никакого частичного вывода (§238); капы подняты осознанно, потому что занижение спрятало бы ровно ту множественность, ради которой акт и представил список. Единственное истолкование пакета — узел priority PetitionsAnswerPrudence — названо прямо в шапке файла и проверяемо: снимите его, и оба довода побеждают друг друга взаимно. Две карты спора не совпадают, и это про инструменты, а не про акт. О-трековый lawref argmap (L4-lite, проекция §107/§185 из proof-графа) на том же деле показывает 1 атаку — только rebut, снятый приоритетом; профиль §274 показывает 83. Причина: подрыв допущения not_known §113 defeat-узла в baseline не порождает, и проекции его взять неоткуда. Исход обе карты дают один (довод о благоразумии — out), но 81 из 83 атак видна только профилю.

  • Ядро Lean отвергает сертификаты у пакетов с ОБЪЯВЛЕННОЙ константой §54 — дифференциал этого не видит. Найдено на прогоне сертификатов нового пакета: CHECKED 0, все вызовы отвергнуты сообщением «литерал листа не совпадает с assertion байт-в-байт (§208)». Узел assertion хранит литерал как написано (const_ref), лист proof-графа — после разрешения константы (entity_ref), и §208-совпадение недостижимо по построению. Дискриминатор проверен исполнением, а не рассуждением: ломает именно ОБЪЯВЛЕННАЯ const X: T = …; karamola с 2 430 листами const_ref от НЕОБЪЯВЛЕННЫХ имён зелена (89/89), пакеты без констант тоже (independence 47/47). Затронуты ровно четыре: criminal-code (117 констант / 120 утверждений), us-declaration (38/35), zheti-zhargy (34/33), state-duty (7/7). Сломалось коммитом f12168b (E-0032 п. 2) того же дня — до лоуверинга констант объявленная константа в assertion-узел не попадала. ci/check_kz_differential.py при этом зелёный: обе реализации разрешают константу в листе одинаково, байты сходятся — расхождение видно ТОЛЬКО третьей ноге контура, ровно тот случай, ради которого она заведена. Не чинится здесь: требуется квалификация (дефект движков / дефект ядра / дефект SPEC), подгонка сторон друг под друга запрещена инвариантом 8.

  • ОСМС: третья мера полноты закрыта — шестнадцать норм, не стоявших ни в одном proof-графе, оживлены сценариями. Обе меры §33.1 у пакета были полны (42 статьи из 42, байтовая доля 97,3 %, границ ноль) и слепы к тому, что 30 правил из 46 под делом: молчали вся сфера действия (ст. 2), конфликт источников (ст. 3) вместе с приоритетом TreatyOverThisLaw, просрочка и пеня (ст. 30, 31), полномочие §127 о порядке закупа (ст. 34) и ответственность (ст. 39) — шесть «исполнимых» статей из четырнадцати. Статических отказов при этом не было (check_dead_rules молчал верно), дыра была в сценариях. Заведены OSMS-17…OSMS-23 (16 → 23): приравнивание к гражданам по трём основаниям, обе ветви §206 в определении члена семьи иностранца, победа международного договора над Законом (FALSE_ONLY, а не молчание), два подпункта местного бюджета ст. 26-1 с изъятием §113, пеня 9 000 × 0,0004 × 1,25 × 13 = 58,5 → 59 ₸ (HALF_UP §50), полномочие ст. 34 с POWER_INVALID_EXERCISE при неустановленном valid_when, бланкетная связка ст. 39. Прогон 23/23, differential пакета байтовый, мёртвых правил 0 из 46, узлов defeat 5 → 8. Попутно исправлена висячая аннотация @source(LAW_405_ART12), привязывавшая понятие ст. 3 regulated_matter к статье 12; метка §218 добавлена мосту ConstitutionalHealthProtectionBridge и его предикату (неразмеченных норм 0); раскладка приведена к docs/PACKAGE-LAYOUT.ru.md (00-package.law → package.law, 13-sources.law → sources.law), у пакета впервые заведена поверхность §267 — corpus/laws/osms/tests/ (приравнивание ст. 2, ответственность ст. 39, пеня ст. 31; оба тулчейна дают PASS).

  • Храповики, разошедшиеся с CLIR при переезде ОСМС на A3, пересняты точечно. Свёртка четырёх правил-редакций предельной величины в два уменьшила число норм (48 → 46), и это уронило числа в трёх реестрах, а перезаморожен был только label-ratchet: corpus/dataset/norm-coverage.json держал 32 при факте 30 (check_dataset читал бы это как «покрытие усохло — сценарий выпал из прогона»), ci/formalization-depth.json держал EXECUTABLE 13 / ANCHORED 29 при факте 14/28 и печатал «РЕГРЕСС ГЛУБИНЫ» на РОСТЕ глубины. Сняты текущие значения: norm-coverage osms 32 → 46, formalization-depth 13/29 → 14/28, scenario-ratchet osms 16 → 23, label-ratchet 111/46 → 112/47.

  • Декларация независимости США (1776) формализована; первый в корпусе акт БЕЗ ЕДИНИЦЫ ДЕЛЕНИЯ, и одна из двух мер §33.1 у него неприменима — сказано прямо, а не спрятано. Новый пакет us.organic.declaration (corpus/laws/us-declaration/, 34 фрагмента, 21 правило, 7 шаблонов норм, 3 канала суждения, 2 замыкания). Байты закреплены со страницы Национального архива США процедурой corpus/tools/fetch_declaration_text.py (9 151 байт, sha256:49966…, извлечение идемпотентно, повторный --check против живой страницы сходится); фрагменты порождаются corpus/tools/sync_declaration_fragments.py, структура среза проверяется генератором (33 абзаца акта, 18 претензий «He …» и 9 подпунктов «For …», 71 строка подписей), а не глазами. Байтовое покрытие 99,6 % — непокрытые 34 байта РОВНО переводы строк между абзацами, текста акта вне фрагментов ноль. materialization_status — PINNED_UNOFFICIAL_COPY, и выше он не поднимется: NARA публикует транскрипцию ГРАВЮРЫ СТОУНА, то есть третий шаг от пергамента. Публикация Управления по пересмотру законодательства (Organic Laws) из этой сети недостижима, на govinfo Декларации в пакетах USCODE нет — обе проверки записаны в докстринге, чтобы их не повторяли. Что выведено. Право этого акта живёт в 158 словах постановляющего абзаца и в части абзаца оснований; сценарии USD-01…USD-12 (12/12, differential 52 вызова байтово) держат: статус свободных и независимых государств и два его следствия; четыре ПОЛНОМОЧИЯ §127 по названному перечню, ЗАМКНУТОМУ closure §70; ОТКРЫТЫЙ остаток «all other Acts and Things which Independent States may of right do» — каналом суждения §47.3 с органом LawOfNations, потому что закрывать его значило бы объявить от имени Декларации то, чего она о себе не говорит; иммунитет §128 на неотчуждаемые права (protected_effect terminate(…) — неотчуждаемость И ЕСТЬ защита от прекращения); правомерность власти из согласия управляемых; власть изменить или упразднить правление и СВОБОДУ §126 в выборе формы нового; право И долг сбросить правление, где долг переходит ACTIVE → SATISFIED от факта. Оба суждения о правлении отданы органу ThePeople — акт сам называет того, кто оценивает, и вычислимым предикатом эта оценка не притворяется. Чего не выведено, и это половина текста. 27 обвинений королю — 655 слов из 1 334 — констативны: обвинения в прошлых фактах против одного поимённо названного лица, из которых норма не следует ни для кого. Они закреплены нормативными фактами §71 (каждое своим фрагментом) и замкнуты closure §70 по собственным словам акта «To prove this, let Facts be submitted to a candid world»; выводится из них ровно то, что акт о них сам говорит, — что каждое имеет прямой целью установление тирании. Правила «N обвинений ⇒ длинный ряд злоупотреблений» НЕТ: такого порога в тексте нет, а выдуманный порог заставил бы меру покрытия врать. Мера, которой нет, названа по имени. У Декларации нет единицы деления — ни статей, ни пунктов, ни разделов, ни одного маркера, за который могла бы взяться конвенция. check_source_pinning.py возвращает unmeasured, boundaries.py — «мера по статьям неприменима», и обе строки ВЕРНЫ (тот же класс, что английский акт 1691 года). Объявлять unit нельзя, придумывать позиционную нумерацию абзацев §33.1 запрещает прямо. Следствие записано в шапке пакета: заголовок «полная формализация» для него недостижим по построению, и утверждение «из акта что-то выводится» обеспечено ТОЛЬКО сценариями — они здесь не регрессия поверх меры, а единственная мера.

  • Канал суждения §47.3 не проходит через голову-НОРМУ и через запрос positions — найдено исполнением, закрыто мостовым предикатом. Строгое правило читает external judgment relation, голова — power: ожидался REQUIRES_JUDGMENT, получен COMPUTED с пустым judgmentRequests, и позиция просто не появилась — то есть различие «право молчит» против «это решает орган», ради которого §47.3 существует, исчезает без единого признака. Причина: whynot.judgment_blockers разбирает недостижимость ЛИТЕРАЛА, а у нормы литерала нет. Рядом: effect create(P) полномочия в базу фактов не попадает, и truth на P даёт NEITHER всегда. Приём, который работает и применён во всех трёх суждениях пакета: между суждением и нормой ставится обычный литерал-МОСТ, truth-запрос к нему даёт REQUIRES_JUDGMENT с типизированным запросом и органом, а норма читает уже мост. Расширяет п. 8 списка «зелёный check, мёртвое право»: там условие было «правило должно быть строгим», здесь строгости мало. Побочно: запрет метки §218 у external judgment relation, записанный 28.08.2026, устарел — метка проходит check и lower (живой прецедент corpus/laws/fnma-income/02-ontology.law:444), и разметка нового пакета от этого полная: 83 объявления, 28 норм, без метки ноль.

  • Госпошлина перецелена на действующий Кодекс: закрепление нашло не расхождение чисел, а расхождение ПРЕДМЕТА. Пакет kz.corpus.stateduty год моделировал государственную пошлину за регистрацию актов гражданского состояния — ставки 1 / 2 / 2 МРП с якорем KZ-TAX-CODE-ART-537. Фаза 0 закрепила байты Налогового кодекса № 214-VIII от 18.07.2025 (sources/tax-code/ru.txt, 4 520 904 байта, извлечение идемпотентно) и показала, что такой пошлины в законе нет: перечень объектов взимания ст. 664 состоит из шестнадцати позиций, и регистрации актов гражданского состояния среди них не значится. Во всём Кодексе это словосочетание встречается дважды, и оба раза в консульском канале — ст. 675 п. 7 (объект консульского сбора) и ст. 671 (освобождение при обращении через загранучреждения). Ставки восходили к Кодексу 2008 года, пережившему две отмены. Молчание держалось на двух дырах сразу: закрепления не было вовсе, а якорь @source("KZ-TAX-CODE-ART-537") не разрешался никуда — в файле не было ни одного узла source, и ссылка в пустоту не роняла ни check, ни lower, ни один прогон. Прогноз по прецеденту budget-2026 (там закрепление исправило три числа из четырёх и номер статьи) подтвердился в худшем виде: там разошлись величины, здесь — предмет регулирования.

    Пакет перецелен на ст. 664, 666 и 669 главы 71: объекты взимания, семь ставок при выдаче виз, выезде на ПМЖ, оформлении гражданства и виде на жительство (0,5 / 7 / 30 / 1 / 0,5 / 1 / 4 МРП) и однократное освобождение кандасов и потомков вынужденно покинувших страну в периоды массовых репрессий. Срез узкий и покрыт целиком: boundaries.py даёт 3 EXECUTABLE, 0 ANCHORED, 0 SOURCE_ONLY; ст. 665, 667, 668, 670 и 671 в scope не вписаны и границами НЕ объявлены — там прямое исполнимое содержание, и назвать его «нечего исполнять» было бы неправдой. Виды действий стали const с entity_ref вместо голых имён: голое имя понижается в const_ref по имени и не требует существования символа — той же формой пользовалась прежняя редакция пакета. Сценариев 6 вместо 3 (храповик поднят), все зелёные; из них три новых: SD-04 держит под делом умножение Quantity на Integer в ставке «0,5 МРП за каждого приглашаемого» (§49, безразмерный скаляр — форма проходит check и lower независимо от исполнимости и молчала бы до первого дела), SD-05 — ограничение ст. 669 п. 2 «предоставляется один раз», записанное положительным фактом реестра, а не отрицанием: not_known в строгом теле барьер §111, а default negation §113 подняла бы пакет на L1, которым он не был; SD-06 — граница самого освобождения. Ст. 666 пп. 4 назначает приобретению, восстановлению и выходу из гражданства одну ставку, и склеить их одной константой было соблазнительно, но ст. 669 освобождает ТОЛЬКО от пошлины за приобретение — склеенная константа дала бы кандасу нулевую ставку и при выходе из гражданства, вывод, которого в законе нет. Константа расщеплена, ставка осталась общей. Потребители поправлены вместе с актом: комментарий kz.corpus.marriage о пошлине за регистрацию брака снят, сценарий BGT-02 перецелен со ставки за развод (её в Кодексе нет) на визу въезда-выезда, 7 МРП.

  • «О государственной независимости»: деонтика и закрытый перечень ст. 6 — 33 нормы из 33 под доказанным применением. Продолжение разбора, начатого мерой применения: после того как все 18 статей получили дела, осталось измерить, что именно ИЗ статей выражено. Внутри статей нашлись положения без единого символа, и они разделились надвое. Выражены три правомочия и обязанность, у которых есть вывод: ст. 12 абз. 1 «ВПРАВЕ создать» финансово-кредитную и денежную системы — power §123 (налоговая и таможенная сюда не вошли: их Республика «организует», иная модальность); ст. 16 предл. 1 «имеет ПРАВО на создание собственных вооружённых сил» — power, где названная в статье цель стоит valid_when, а не рядом с правомочием; ст. 15 абз. 1 «принимает меры по охране независимости» — duty с goal maintenance того же строения, что ст. 8. Отдельно ст. 6 абз. 1: «народ… является ЕДИНСТВЕННЫМ носителем суверенитета» закрыт closure §70 — тем же приёмом, что перечень ст. 9. Без closure слово «единственный» пропадает: остался бы факт о народе, из которого не следует отрицание ни для кого другого; теперь проверенный претендент вне перечня получает FALSE_ONLY с сертификатом закрытия, непроверенный — честный открытый мир. НЕ выражены осознанно конститутивные утверждения («независимое, демократическое и правовое государство», «является субъектом международного права», «имеет своё гражданство»): правило без посылок придало бы статье вид формализованной при пустом содержании — тот же отказ, что у нормы о недискриминации B3-3.1-01. Правил 30 → 33, norm_template 1 → 4, closure 1 → 2, мёртвых 0; сценариев 34 → 41, differential 41 из 41 байтово, вербализация 0 пробелов (модальность power в пакете появилась впервые). Помощник expect_positions переведён со словаря «шаблон → статус» на мультимножество «шаблон:статус → сколько»: правомочие ст. 12 создаёт по позиции НА СИСТЕМУ, и две такие позиции в словаре схлопывались бы в одну — пропажа любой прошла бы молча. Заявление в шапке акта «непокрытое целиком рамка портала» снято как не подтверждаемое замером: рамки 6 056 байт из 6 876, а 809 — текст самого акта (заголовки семи глав и подпись), против его байтов покрытие 93,6 %. Тем же кругом закрыты ОБА перечня ст. 17 — «герб, флаг, гимн» и «столица… - город Алма-Ата»: перечисление и определённое описание стояли открытыми, вопрос о символе или городе вне перечня получал NEITHER вместо «нет». Закрывается предикат, который СПРАШИВАЮТ (symbol_of_republic), а не тот, который ассертят: строгое правило отрицания не переносит, и closure на state_symbol оставил бы вопрос по-прежнему без ответа. Столица закрыла заодно последнее объявление пакета, которое не читало ни одно правило, — мёртвых символов 0 из 76. Наконец, 809 байт текста акта, не лежавшие ни под одним фрагментом, закреплены восемью kind section (семь заголовков глав и подпись) — генератор sync_independence_fragments.py расширен, фрагментов 19 → 27, покрытие 63,6 % → 67,8 %, и непокрытое теперь ПО ЗАМЕРУ рамка портала: 1 770 шапка + 4 287 подвал + 26 разделителей строк, ни байта акта. Глубина §33.1 не сдвинулась (18/0/0): главы не статьи, и мера их не считает — ровно поэтому пробел и был невидим. Итог: правил 33, closure 1 → 4, фрагментов 27, сценариев 34 → 47, differential 47 из 47 байтово. scenario-ratchet 34 → 47, norm-coverage 30 → 33, label-ratchet 74/31 → 88/37.

  • §90 исполняется: scope объединяется с when, а не отменяет правило. §90 говорит дословно, что scope семантически объединяется с when и хранится отдельно в IR ради indexing, analysis и объяснений. Слово «объединяется» не исполняла НИ ОДНА реализация: нетривиальный scope давал NON_EXECUTABLE_RULE «за пределами v1» — у оракула (strict_rule_status, defeasible_rule_status, whynot._skip_reason) и у движка (strict.rs, defeasible.rs, whynot.rs) одинаково. Квалификация по инварианту 8 — дефект обеих реализаций, не SPEC: прозе они не противоречили, а честно ОТКАЗЫВАЛИ, поэтому errata не заводится (прецедент — порт Decimal-деления). Цена измерена исполнением: в корпусе молчали 14 норм Закона «О правовых актах» — статьи 3, 55 и 57 целиком, плюс по норме статей 4, 5, 11, 34, 45 и 65, — среди них пункт 1 статьи 5 о том, что никакой акт не может противоречить нормативному постановлению Конституционного Суда. Молчание уже роняло регрессию (LEG-03-OUTSIDE-HIERARCHY-SILENT), а ci/check_dead_rules.py был красным: 14 из 15 непрописанных правил всего корпуса приходились на этот пакет. Правка сделана в реализациях, а не в акте, и это принципиально: scope там поставлен осознанно (§91 и §91.1 — два независимых статуса, присутствие акта в деле есть условие применимости, а не срабатывания), и перенос конъюнкта в when был бы подгонкой права под реализацию. Общий scope_conjuncts (lawref/evaluator/rules.py, law-eval/src/solver.rs) разбирает scope ТЕМ ЖЕ flatten_body и ставит его конъюнкты ПЕРЕД телом — порядок значим связыванием, а не семантикой. Закрыт заодно норм-путь §135, где scope не читался вообще, то есть условие применимости молча отбрасывалось и норма создавалась шире написанной (латентно: таких правил в корпусе нет). Вектор T144 держит обе стороны границы одним документом: в scope и с телом — выводится, вне scope — нет, в scope без тела — нет; реализация, отбросившая scope, вернёт второго, потерявшая тело — третьего. До порта вектор падал на lawc eval, после — resultHash и proofHash совпали байтово. check_differential 122/122, оракульный selftest OK, 285 runnable-векторов зелены, замороженные голдены неподвижны, cargo clippy/test чисты. По пакету: применённых правил 64 → 77, статей без единого доказанного применения 50 → 43, LEG-03 зелёный.

  • Девять статей «О правовых актах» перестали выглядеть недоделкой: SOURCE_ONLY 9 → EXCLUDED 9. Две обязательные меры полноты читают РАЗНЫЕ поля одного понятия: учёт статей (ci/check_source_pinning.py) — declared с проверяемой по тексту причиной, глубина (boundaries.py, ci/check_formalization_depth.py) — список excluded. У пакета стояло только первое, и статьи 21, 33, 33-1, 33-2, 38, 39, 41, 44 и 63 — те, чьё содержание исключено изменяющими законами и от которых в закреплённых байтах остался ОДИН ЗАГОЛОВОК, — попадали в глубину как «текст сохранён, но не формализован». Добавлено поле excluded (прецедент — health-code); declared сохранён, потому что именно он несёт причину и держит границу честной.

  • ЗПД (kz.corpus.personal_data) введён под обе меры §33.1 и размечен §218 целиком. Проверка полноты нашла не пробел в акте, а пробел в измерении, и притом двойной. (1) boundaries.py::known_acts ищет sources/**/articles.json, а у ЗПД рядом лежал target-articles.json — имя, которого инструмент не знает; акт выпадал из --all и, как следствие, из базы ci/formalization-depth.json (20 актов, ЗПД среди них не было), то есть храповик глубины его не защищал вовсе: снятие правила или переезд якоря не уронили бы ничего. (2) check_source_pinning печатал «учёт статей: НЕ ОБЪЯВЛЕН (статей 38, фрагментов 38) — полнота не измеряется». Обе слепоты были ЗАПИСАНЫ в STATUS.md как остаточные и с 27.08 не закрывались. Заведён articles.json — форма плоская, а не многоредакционная, и это не косметика: ворота глубины читают declared с верхнего уровня payload, тогда как accounting_declaration умеет обе формы, поэтому в записи {"editions": [...]} границы были бы видны учёту статей и невидимы храповику — статья ушла бы из UNEXPLAINED в одной мере и осталась бы в другой (проверено: declared вышел пустым). Пять остальных закреплённых документов оставлены без учёта СОЗНАТЕЛЬНО: 326/311/350-VIII — омнибусные законы «о внесении изменений в некоторые акты», их собственная нумерация к ЗПД отношения не имеет, а фрагменты пакета адресуют статьи ИЗМЕНЯЕМОГО закона; у Правил № 395 и приказа № 190 в одном файле ДВЕ последовательности «N.», и unit: "point" слил бы их в одно множество при локаторах rules/ и order/. Измерено после правки: охват 38 из 38, с фрагментом 38, границ с причиной 2, неучтённых 0; глубина EXECUTABLE 27, ANCHORED 9, SOURCE_ONLY 2 при нуле необъяснённых. Разметка §218 доведена с 23/278 словаря и 0/108 норм до 278/278 и 108/108: до этого пакет стоял в нижнем ярусе корпуса рядом с ГПК, и вербализация звала нормы идентификаторами («активируется … Article9CitizenBankruptcy»). Храповик corpus/label-ratchet.json поднят на достигнутое. Цена измерена, а не предположена: метки семантический хэш НЕ двигают (E-0010 подтверждена опытом), сдвиг semanticHash пакета целиком объясняется одним добавленным якорем §194.

  • Сроки и пороги ЗПД стали ВЫЧИСЛЯЕМЫМИ; приоритет международного договора выражен — форма выбрана тремя замерами. Во всём пакете было ноль сравнений: тринадцать сроков и порогов стояли булевыми предикатами с величиной В ИМЕНИ, а шесть закреплённых величин не читало ни одно правило — дело сообщало вывод, ради которого норма существует. Теперь величины закреплены Quantity с единицей §86 и читаются нормами переменной, дело сообщает ДАТЫ и ЧИСЛА. Правил 108 → 125, сценариев 20 → 21, байтовый differential по пакету 29 вызовов, 0 расхождений (включая читающие снимок календаря §85), доказанное применение 26/108 → 33/125. Политика §86 — вход дела, а не норма ЗПД: Закон сроки называет, порядка исчисления не устанавливает; взят общий порядок ГК ст. 173/176. Перевод нашёл содержательную ошибку модели: подпункт 9-4 ст. 9 отсчитывает три года НАЗАД («за период до трех лет, ПРЕДШЕСТВУЮЩИХ применению процедуры банкротства»), а модель говорила «со дня ЗАВЕРШЕНИЯ процедуры» — другая точка отсчёта и другое направление, то есть другая норма; булев предикат с величиной в имени это скрывал. Ст. 4 п. 2 (приоритет договора): дефитер оказался невозможен, и это свойство языка стоит записи. (1) Дефитер над processing_permitted дал defeat … "reason": "strict-opposition" — голова закрыта derive_explicit_negative, замыкание выводит отрицание СТРОГО, defeasible против строгого не стоит; перевод правила в defeasible МОЛЧА ИНВЕРТИРОВАЛ ответ на положительном пути при чистом check. На голове, закрытой derive_explicit_negative, дефитер невозможен в обе стороны. (2) Полнота проверки, сделанная выводимой, отняла у пакета отрицательные ответы ЦЕЛИКОМ (PD-06: NEITHER вместо FALSE_ONLY): домен такого замыкания обязан быть АССЕРТИРОВАННЫМ — sandwich-порядок v1. (3) Негативная посылка внутри нормы дала BOTH: зависимость от закрытого предиката ставит норму позже замыкания. Итоговая форма — идиома самого пакета (scope_inclusion_established): дело сообщает положительный факт statutory_rules_operative, а вытеснение пакет высказывает отдельной нормой TreatyRulesApply. Договор действует → NEITHER плюс treaty_rules_apply (PD-21); FALSE был бы прямой ошибкой — «Законом не разрешено» там, где разрешить может договор.

  • Единственное правило корпуса без анкера §194 закрыто — и это подняло глубину. kz.corpus.personal_data#ConstitutionalPersonalDataProtectionBridge был один из 1920 правил корпуса без @source: страница символа §194 показывала пустой раздел «Анкеры», то есть на вопрос «откуда это в праве» пакет не отвечал. Анкер — ст. 4 п. 1 («законодательство ОСНОВЫВАЕТСЯ на Конституции»), то самое положение, которое вводит конституционную гарантию в мир пакета. Следствие оказалось не косметическим: ст. 4 перешла из ANCHORED в EXECUTABLE (27/9 вместо 26/10) — до анкера из неё не выводилось ничего, хотя правило про неё существовало. Анкер, в отличие от метки, ВХОДИТ в преобраз §209: semanticHash пакета сдвинулся, и это единственная причина сдвига. Консьюмеров сдвиг не задел — kz.corpus.personal_data не импортирует ни один пакет корпуса.

  • law.verb.ru@0.6.1 / law.verb.kk@0.2.1 — правка формулировок §186. Цель контрфактического разбора и его ограничения суть статус-формулы §67 и САМИ начинаются словом «установлено», отчего фразы 0.6.0 давали «…дало бы установлено, что…» и «…только если сверх цели установлено: установлено, что…». Смысл был верен, чтение — нет, а подписывает юрист текст. Стало: «какое наименьшее изменение дела привело бы к тому, что …» и «Кроме цели, изменение обязано сохранить: …»; по-казахски исправлена та же стыковка («анықталса ғана … екені анықталған» → «Мақсаттан бөлек, өзгеріс мынаны сақтауға тиіс: …»). Правка текста — новый файл, а не правка существующего: иначе строка law.verb.ru@0.6.0 означала бы два разных текста и stale_verbalization §3.6 перестал бы срабатывать там, ради чего заведён. Состав ключей не менялся — это проверяет selftest отдельным утверждением. Семь консьюмеров переведены, вектор VER-RU-L0-COUNTERFACTUAL перезаморожен на 0.6.1; mcp/test_server.py держал версию пака строкой (law.verb.kk@0.1.0) и падал на подъёме по причине, к контракту отношения не имеющей — теперь версия читается из пина сервера, как реестр CONSUMERS читает пин у владельца; три остальных вектора остались на 0.6.0 по прецеденту 0.4.0 → 0.5.0 — вектор доказывает, что рендерит ЕГО пак, а не что пак самый свежий.

  • Оферта «Самоката» доведена: 32 правила → 53, 14 сценариев → 49, и обе меры §33.1 на ней ЗАГОВОРИЛИ. Проверка полноты пакета нашла не пробел в акте, а пробел в измерении: у оферты нет статей — она делится ПУНКТАМИ («5.3.2.», глубина номера до четырёх уровней), и ни одна из шести конвенций деления такой единицы не знала. Обе меры молчали по-разному и обе выглядели благополучно: check_source_pinning печатал «учёт статей НЕ ИЗМЕРЕН — конвенция деления не опознана», boundaries.py — «заголовков „Статья N“ нет: мера по статьям неприменима». Заведена конвенция unit: "clause" — по образцу point и section, то есть НЕ угадываемая: маркер «N.M.» в начале строки есть в любом кодексе, где это нумерация пункта ВНУТРИ статьи, и автоопределение подменило бы чужому акту знаменатель молча. Попутно закрыт зазор, который не проявлялся, пока такой единицы не было: подсчёт формализованных единиц брал префикс article/ КОНСТАНТОЙ, поэтому акт с локаторами clause/… получил бы formalized = 0 при 36 фрагментах — отказ громкий, но ложный. Префикс переехал в саму конвенцию (ArticleConvention.locator). Измерено после правки: охват 57 пунктов из 110, с фрагментом 34, границ с причиной 24, неучтённых 0; глубина EXECUTABLE 33, ANCHORED 0, SOURCE_ONLY 1; байтовая доля 23,6 % → 33,4 %. Единственный SOURCE_ONLY — п. 7.5.1, и он объявлен с причиной: норма там не написана НАМЕРЕННО, её отсутствие и есть weak permission §126.

  • Перечень запретов п. 5.3 дописан целиком: 4 подпункта из 12 → 12 из 12. Восемь недостающих (5.3.1, 5.3.3, 5.3.5, 5.3.6, 5.3.8, 5.3.10, 5.3.11, 5.3.12) не были ни формализованы, ни объявлены границей — они просто отсутствовали, и не видел этого никто: учёт пунктов не измерялся, а check_dead_rules ловит статический отказ исполнителя, а не ненаписанную норму. Оговорки записаны структурно: «кроме случаев, когда размещение было письменно одобрено» (5.3.5) и «без их личного согласия» (5.3.6) — тем же not_known §67, что и 5.3.4, и по той же причине (§105.1). Полнота перечня открытости его НЕ отменяет: она идёт от содержания 5.3.9, и на 5.3.11 («Вау-поиск» — ни оценки, ни открытой формулы) это видно яснее всего.

  • Двенадцать норм, которые в акте были, а в пакете отсутствовали. Кроме перечня 5.3: право на лицензию Сервиса (2.1), право менять соглашение односторонне (2.2, 2.4), запрет и обязанность при несогласии (2.6), две обязанности о достоверности сведений (3.3 — цели достижения и поддержания, §124), права и обязанность Пользователя (5.1.1, 5.1.2, 5.2.1), заверение о ненарушении прав (7.3.4.2) и обязательство не размещать запрещённый контент (7.4.1). У пакета впервые появились деонтические позиции, не являющиеся запретом: три duty с целью поддержания, одна с целью достижения и одна с целью воздержания. Попутно исправлен якорь: BreachOfWarrantyMakesUserLiable был заякорен на п. 7.3.4.1 при заголовке «Пункт 7.3.4.3» — подпункт с нормой фрагмента не имел вовсе, а чужой фрагмент нёс чужую норму. И user_warrants_authorship перестал быть эмпирическим фактом дела: заверение ВЫВОДИТСЯ размещением, как и говорит шапка п. 7.3.4 («размещая … заявляет, гарантирует и подтверждает»), — прежде предикат стоял в словаре и не читался ни одним правилом.

  • Покрытие норм доказанным применением: 21 из 32 → 53 из 53. Одиннадцать правил компилировались, проходили lawc check, не числились мёртвыми — и не стояли ни в одном proof-графе, то есть не отвечали никогда и ни на что. Мера в corpus/dataset/norm-coverage.json печатала это одним числом без имён, и «21 из 32» читалось как достижение, а не как список из одиннадцати молчащих норм. Заведено 35 сценариев; каждый несёт утверждение, а не отметку о покрытии, — контрастные пары (SAM-18/19 — изъятие владельца снимает запрет; SAM-33/34 — письменное одобрение; SAM-39/40 — запрет наступает последствием, а не действием; SAM-15/16 — один факт даёт два самостоятельных вывода). Итог прогона: 49/49 PASS с байтовым differential внутри.

  • run_samokat_scenarios.py вписан в храповик сценариев — шестой раннер был вне него. Прогон печатал «N/N PASS» по тому, что до него дошло: выпади сценарий, уменьшились бы и числитель, и знаменатель, и потеря покрытия осталась бы невидимой. Раздел runners.samokat в corpus/scenario-ratchet.json, сверка — общей копией соглашения corpus/ratchet.py, проверена мутацией в обе стороны (48 против 49 и исчезнувшее семейство). Вне храповика остаются ещё три раннера: faraid, de-legibus, uefa.

  • ru-samokat-eula назван в каталоге MCP. Строки в PACKAGE_TITLES не было, и пакет отвечал на запросы своим ключом. Без титула остаются ещё семь пакетов корпуса.

  • Найдено сценарием, не чтением: молчание судьи §47.3 читается запросом §126 как отсутствие запрета. SAM-21 спрашивает слабое разрешение на размещение контента, который владелец НЕ признавал нежелательным (п. 5.3.9), и получает true со статусом COMPUTED. На том же молчании запрос об истинности (SAM-05, SAM-06) даёт REQUIRES_JUDGMENT, а не «нет оснований». Обе реализации отвечают байтово одинаково, поэтому это не расхождение и не дефект реализации: §126 говорит про rule universe, snapshot, interpretation и closure policy — и ничего не говорит про неотвеченный канал суждения. Квалификация (дефект SPEC либо намеренное поведение) не выносится: она за человеком. Сценарий заведён, чтобы поведение не могло измениться молча.

  • Ст. 46 Конституции 2026 заформализована целиком: правил на статью 9 → 32. Четырнадцать подпунктов (1, 5, 6, 7, 9, 12–16, 19–22) не имели НИ ОДНОГО узла, при том что мера §33.1 показывала статью EXECUTABLE — якорь стоит на статью, и семь правил из двадцати двух подпунктов от двадцати двух неотличимы. Записаны 22 нормы-компетенции §127 (power), одна норма-статус (Верховный Главнокомандующий — та же форма, что у статусов ст. 42) и два закрытых перечня. По пакету: правил 91 → 114, норм-шаблонов 17 → 39, нормативных фактов 26 → 43, объявлений словаря 209 → 293. Двадцать пять сценариев нового семейства KZ-CON-POW-01…25; регрессия 115/115 → 140/140, corpus/scenario-ratchet.json пополнен строкой POW: 25 — семейство обязано быть вписано осознанно, и храповик это потребовал сам. Разметка §218 не просела: unlabelled 159 → 159 при labelled 66 → 168 и нормах 84 → 129.

  • Закрытый перечень нельзя выразить перечислением: enum в 0.1 — чистый словарь. Первая редакция ст. 46 п. 5 объявляла десять должностей через enum и полагалась на типизацию. Проверено исполнением — не работает ни на йоту: на месте должности из перечня одинаково проходят должность вне перечня, Integer, Date и произвольная сущность, и ни одного issue при этом не звучит. Причина названа в DECISION-0047: у перечисления нет потребителя в семантике 0.1 («в lawref/…/evaluator/ слова enum нет»), а утверждения дела не типизируются вовсе. Перечни подпунктов 5 (десять должностей) и 14 (семь видов отличий) переведены на константы §54 плюс нормативный факт принадлежности, который правило обязано прочитать: MinisterOfSport теперь даёт NEITHER, а ProsecutorGeneral — TRUE_ONLY. Перечисления оставлены только там, где перечень открыт (вид органа п. 21) либо не меняет последствия (действие п. 6), и в коде прямо сказано, что они несут словарь, а не ограничение. Побочно: это второй за сессию случай, когда конструкция принимается компилятором и ничего не делает на исполнении — первым было отрицание §118.

  • valid_when у полномочия — не формальность. Двадцать две новые нормы power написаны с непустым valid_when по прямой причине: power без него даёт чистый lawc check и LDC-E1305 на lower. Там, где Конституция условия осуществления не ставит (помилование, гражданство, приём грамот), условием стоит должность носителя — как это уже сделано у ReferendumPower; там, где ставит, стоит условие статьи (подчинённость органа Президенту п. 6, принадлежность должности перечню п. 5, статус Верховного Главнокомандующего п. 9).

  • Подсказка расширения при наведении показывает норму, а не только её вид. Карточка декларации вынесена в editors/vscode/lib/hovercard.js и печатает то, что компилятор уже клал в узел AST, а подсказка выбрасывала: метки §218 (что норма значит по-человечески; официальные раньше переводов), вид отношения §45 и key(…) §51, effective/governs §31, поля §35, варианты enum, тип результата функции, severity ограничения, аннотации §15, комментарий автора над объявлением и срез исходника самого объявления — а главное, официальный текст статьи §28: @source(X) разрешается в фрагмент того же пакета §22, и закреплённый текст читается прямо в подсказке, не открывая файл источников. Объявление из соседнего файла показывается вместе с именем файла и числом вхождений — переход ради одной строки больше не нужен. Своей семантики в карточке нет (инвариант 5): печатается либо поле AST как есть, либо срез авторского текста; выражения (when/then) в текст НЕ пересобираются — их печатает lawc fmt, и второй принтер разошёлся бы с ним молча. Прежняя короткая карточка осталась под law.hover.detail: "compact", длина среза — law.hover.maxLines. Комментарий берётся консервативно: рамка раздела (// --- Жарғы 7 … ---) и комментарий, оторванный двумя пустыми строками, к объявлению не прилипают, одна пустая строка (блок аннотаций между) — прилипает.

  • Вербализация снова тотальна: law.verb.ru@0.6.0 и law.verb.kk@0.2.0; шаг 35/39 стоял красным. Замер на HEAD в чистом worktree — 36 маркеров LDC-E8201 в пяти пакетах корпуса, красных пять консьюмеров из шести (зелен был только паспорт Конституции: его семь пакетов новых видов узла не несут). Все три вида узла стояли в реестре ОСОЗНАННЫХ исключений lawref/selftest.py с причинами вида «объявление границы, тела не несёт» — и реестр перестал быть верным ровно тогда, когда корпус ими воспользовался: канал суждения §47.3 привёл external_decl (8 в пяти пакетах), мост параметров A3 — function_decl (21), «Жеті жарғы» — counterfactual_decl §186. Закрыто фразами четырёх узлов, трёх термов (условный §56, variant_value со словарём stdVariants, нульарный вызов — у него в тексте стояли пустые скобки) и булевой формулы §90. Замер после: 52 документа, 38 357 подписываемых блоков, ноль пробелов на обоих языках. Differential не затронут: вербализация живёт только в оракуле, её контракт — VER-голдены.

  • Найдено попутно и хуже исходного: область применения §90 пропадала из ревью-документа МОЛЧА. Слова scope в verbalize.py не было вовсе, поэтому у 14 правил kz.corpus.legal_acts текст утверждал норму ШИРЕ, чем она есть: «Всегда „акт является нормативным“» вместо «Правило применяется к случаям, когда акт рассматривается в деле». Тотальность §3.3 такого не видит по построению — она считает маркеры, а у пропущенного ПОЛЯ маркера нет. Квалификация опирается на prose: §90 хранит scope отдельно «для indexing, analysis и объяснений», а вербализация и есть канал объяснений (тот же довод, что закрыл цель воздержания §124.3 в 0.4.0); §91 против §91.1 держит различие применимости и срабатывания, ради которого поле отделено. Теперь область применения — отдельное предложение, а младший пак получает ВИДИМЫЙ маркер: VER-RU-GAP-SCOPE замораживает маркер, которого раньше не было, — то есть 0.5.0 стал честнее, а не беднее.

  • Пустое условие правила больше не читается «если условие выполняется всегда». body и scope обязательны в схеме узла, поэтому ненаписанное автором условие приезжает константой true; 11 правил kz.corpus.legal_acts из-за этого несли маркер «формула boolean». Рендерер отличает константу компилятора от написанного условия и берёт фразу «Всегда X», которая лежала в паках с 0.1.0 и не срабатывала ни разу.

  • Два консьюмера вербализации стояли на паке 0.1.0, и обоих не мерил никто. (1) Умолчание CLI оракула — python3 -m lawref verbalize|diff|approve без --pack: команда из документации отдавала юристу самый слабый текст, который проект умеет, а approve привязывает утверждение §3.6 ровно к нему. (2) ci/check_argmap.py вербализовал карту спора §274 тем же pack.json. Оба подняты до текущего пака, умолчание вынесено в DEFAULT_VERB_PACK, CLI вписан седьмым консьюмером ворот (MIN_CONSUMERS 6 → 7) — пин читается из его собственной константы, поэтому откат краснеет.

  • Пять векторов VER (14 → 19 в семействе): VER-RU-L1-SCOPE (область применения §90 отдельным предложением, различие §91/§91.1), VER-RU-GAP-SCOPE (тот же CLIR под 0.5.0 — маркер вместо прежней тишины), VER-RU-L0-JUDGMENT (§47.3: назван орган, названо полномочие §242, сказано, что до решения ответ «не решено», а не «нет»), VER-RU-L0-FUNCTION (§47.1/§56 с телом; форма моста A3 — цепочка по дате с Result/Ok и MissingParameterValue — приходит от генератора параметров, поэтому узел кладётся поверх выхода компилятора, как толкования §152 в VER-RU-L3-INTERPRETATION), VER-RU-L0-COUNTERFACTUAL (§186: текст первым словом называет разбор ненормативным). Одиннадцать прежних голденов не сдвинулись ни на байт — новые ветки рендерера закрыты ctx.has, поэтому младшие паки отдают ровно прежние байты.

  • Реестр непокрытого мерится текущим паком, а не паком дня заведения. lawref/selftest.py сверял виды деклараций схемы с покрытием 0.4.0; теперь с текущим, а сам реестр сжался с семи видов до четырёх (anchor, evidence_item, query, support_edge — входы дела и вопрос к праву, а не текст акта). Тем же движением паритет казахского пака мерится парой «текущий ru — текущий kk»: пара, зафиксированная в день заведения, зелена ровно оттого, что смотрит не туда.

  • Ст. 43.3, 43.4, 44.3, 50.2–50.4 Конституции 2026 формализованы: правил 67 → 91, величин 21 → 26. По статьям: ст. 43 — 4 → 11 правил, ст. 44 — 4 → 12, ст. 50 — 5 → 14. Мера §33.1 при этом не сдвинулась ни на единицу (11 EXECUTABLE / 1 ANCHORED и до, и после) — и это её честное свойство, а не сбой: якоря корпуса стоят на СТАТЬЮ, поэтому ст. 46 с семью правилами из двадцати двух подпунктов и ст. 46 с двадцатью двумя выглядят одинаково. Прирост виден только счётом правил на статью. Образцы взяты у пакета редакции 1995, где аналоги ст. 41.3, 41.5, 42 и 47 уже стояли; две вещи сделаны иначе, и обе не вкус: срок ст. 43.3 ВЫЧИСЛЯЕТСЯ шагом §86 (у 1995 дата приходила фактом — до E-0026 календарных месяцев не было), а стадия «решение по вопросу» ст. 50.3 заведена отдельно (пакет сливал два разных большинства в одно: текст даёт ЧЕТЫРЕ порога — 1/3, большинство, большинство, 3/4 — а правил было три). Двадцать сценариев KZ-CON-PRES-09…28, каждая норма проверена парой по обе стороны условия; конституционная регрессия 95/95 → 115/115, corpus/scenario-ratchet.json PRES 8 → 28, реестр величин 73 → 78 читаемых. Разметка §218 не просела: unlabelled 159 → 159 при labelled 22 → 66 и нормах 60 → 84.

  • Дыра иммунитета ст. 48.3 закрыта выводом ст. 44.3. PresidentialOfficialImmunityFormer читал ЭМПИРИЧЕСКИЙ former_president, поэтому иммунитет экс-Президента доставался любому, о ком дело так заявит, — включая отрешённого от должности, которому ст. 44.3 звания экс-Президента прямо не даёт. Теперь иммунитет читает выводимый ex_president, а тот выводится по ОСНОВАНИЮ прекращения полномочий. Проверено запросом positions: у ушедшего в отставку позиция FormerPresidentImmunityForActsInOffice создаётся, у отрешённого — нет.

  • Отрицание §118 названо по имени и обойдено пять раз. not p(x) в этом языке требует УСТАНОВЛЕННОГО отрицательного факта: умолчания замкнутого мира нет (§5.1), и правило с отрицанием при отсутствии факта не срабатывает вовсе — при чистом lawc check и нулевых пропусках в check_dead_rules. Обнаружено вызовом: четыре первых редакции новых норм давали NEITHER там, где ждался вывод. Четыре из пяти переписаны ПОЛОЖИТЕЛЬНО — недопустимость даты ст. 43.3 выводится из двух оснований вместо «в срок и без совпадения»; звание экс-Президента ст. 44.3 — из перечня оснований вместо «кроме отрешённых»; отклонение обвинения ст. 50.3 — сравнением дат и фактом непринятия решения. Пятое (гард ст. 50.4) отрицание сохранило осознанно: цена — дело об отрешении обязано заявить, что вопрос о роспуске Курултая не рассматривается, зато барьер РАБОТАЕТ, а отказ безопасен в правильную сторону. Альтернатива названа в коде: смоделировать инициативу полномочием и вернуть иммунитет §128. Побочно измерено: пакет редакции 1995 использует not в четырёх местах, и ни одно не покрыто сценарием — тот же класс латентного молчания.

  • Ст. 50.4 не ложится на иммунитет, и компилятор это говорит. Первая редакция барьера повторяла форму ст. 62.3 — иммунитет плюс приоритет — и получила LDC-E4105: приоритет над strict-правилом запрещён (§114, приоритеты живут между defeasible). Причина глубже кода: иммунитет блокирует ЭФФЕКТ ПОЛНОМОЧИЯ (§128), а impeachment_initiative_valid — обычный литерал, блокировать нечего. Барьер выражен собственной нормой плюс гардом.

  • «О государственной независимости» (1991): 30 норм из 30 под доказанным применением (было 12). Обе меры §33.1 у пакета полны с первого дня — boundaries.py 18/18 EXECUTABLE, check_source_pinning.py учёт 18 статей из 18 при нуле объявленных границ, — и при этом восемнадцать правил из тридцати не стояли в proof-графе ни одного дела, а спрашивались сценариями шесть статей из восемнадцати (6, 7, 9, 11, 15, 18). Обе меры не видят этого по построению: EXECUTABLE говорит, что на статью ССЫЛАЕТСЯ правило, а не что правило СРАБАТЫВАЕТ. Видит третья — corpus/dataset/norm-coverage.json; её число (12) стояло в репозитории верным и непрочитанным. Причина в отборе, и она та же, что у «Қара сөз»: круг IND-01…10 писался станциями верстака под самые злые запросы — презумпция↔дефитер ст. 18 и ст. 6, closure-отрицание ст. 9, default negation ст. 7, — а такой отбор оставляет без дела всё, что находкой не является. Дописано 24 сценария (IND-11…34), прогон 34/34, differential 34 из 34 вызовов байтово, пропускаемых правил 0 из 30. Отдельно закрыта ЕДИНСТВЕННАЯ деонтика акта: обязанность ст. 8 (§123, duty / goal maintenance) головы-предиката не имеет, поэтому запросом truth недостижима — она существовала в CLIR, проходила lawc check и не проверялась ничем. Добавлен вид запроса positions: факт национальности даёт ACTIVE, УСТАНОВЛЕННЫЙ контрпример условия — VIOLATED (§136/§137), без факта позиция не возникает вовсе; сверка идёт равенством словаря позиций, а не вхождением, иначе лишняя позиция прошла бы молча. В покрытие норм CultureDuty попадает через norm_creation §127, а не rule_application — fired_rules её не видит, и «29/30» без этого выглядело бы недоделкой. Четыре контрастные пары держат прочтения, которые иначе ослабли бы молча: непризнанная норма международного права по ст. 4 не действует (NEITHER — ради этого признание стоит в теле правила, а не в голове); интересы диаспоры по ст. 8 без договора с государством гражданства не защищаются; охрана имущества иностранных лиц по ст. 11 без законности деятельности не следует; конституционный надзор ветвью власти в ст. 9 НЕ назван, хотя ст. 10 сопоставляет ему орган, — и это свойство закреплённого текста, а не пробел формализации. corpus/scenario-ratchet.json 10 → 34, norm-coverage.json 12 → 30.

  • Selling Guide B3-3: 15 топиков из 15 выводятся нормами (было 9). Пакет us.fnma.selling_income — 148 правил против 57, 243 объявления словаря против 72, 40 сценариев против 19, 65 фрагментов против 20; доля закреплённого текста под фрагментами 19,0 % → 59,5 %. Расширение начато не с плана, а с меры, которой не было: топиковая глубина §33.1 не видит, что происходит ВНУТРИ топика, и «EXECUTABLE 9» уживалось с тем, что нормами покрыта треть текста тех девяти (11 404 из 34 967 байт; дно — B3-3.2-01, шесть килобайт топика на одно правило). Шесть объявленных границ сняты сменой вопроса, а не смягчением критерия: прежняя формулировка спрашивала, лежит ли величина в выгрузке VOIE, — а руководство само велит кредитору задокументировать 200-дневную среднюю цену акции, доступные ликвидные резервы и дату подписания формы 4506-C, то есть все они в досье наравне с paystub. Прибавились нормами: семь способов проверки занятости с тремя единицами срока (10 и 15 рабочих дней, 35 и 120 календарных) под одной головой расщеплением §206; стандарты документирования и четыре условия приемлемости стороннего провайдера; занятость у родственника с порогом < 25 percent; доход из-за рубежа; оферта будущей занятости с несимметричным окном (30 дней до ноты / 90 после) и обеими опциями; военный доход с обеими сторонами оговорки о понижении надбавок; акции с ограничением целиком, включая делитель 12–24 месяцев; временный отпуск с восполнением из резервов и потолком через min; форма 4506-C и Income Calculator. Остаток назван на месте каждой такой нормы: величины разделов B3-4, B3-3.5–B3-3.7, B3-3.4-17 и B1-1-03 не выводятся — их текста в закреплённом документе нет вовсе, поэтому нормы требуют факта документирования, а сумму не считают. Норма о недискриминации по гражданству (B3-3.1-01) осталась невыраженной осознанно: её предмет — ДРУГИЕ НОРМЫ, а не факты дела, и правило non_citizen_same_requirements дало бы топику вид формализованного при пустом содержании; соблюдена она построением — гражданства не читает ни одно правило. Пропускаемых исполнителем правил 0 из 148, differential пакета 92/92 байтово, scenario-ratchet fnma 19 → 40, label-ratchet 72/57 → 243/148.

  • PACKAGE_TITLES: вписаны us-fnma-income и us-federal-holidays. Оба пакета отвечали на запросы и стояли в каталоге MCP безымянными — своим ключом, потому что титула у них не было. Пробел общий: без титула остаются ещё восемь пакетов корпуса.

  • «Қара сөз»: 120 норм из 120 под доказанным применением (было 60). Обе меры §33.1 у пакета были полными с первого дня — boundaries.py 45/45 EXECUTABLE, check_source_pinning.py 100 % байтов и учёт 45 статей из 45, — и при этом ровно половина правил не стояла в proof-графе ни одного дела, а 14 слов из 45 не были показаны ни разу. Пробел не в охвате, а в применении, и обе меры не видят его по построению: они мерят адресуемость и НАЛИЧИЕ правила у единицы, а не то, что правило работает. Видит третья — corpus/dataset/norm-coverage.json; её число (60) стояло в репозитории верным и непрочитанным. Причина в отборе: первый круг QS-01…QS-29 писался под находки — цепь слова 3, расхождение счёта слова 38, неразрешимая ссылка слова 32, — и такой отбор оставляет без дела всё, что находкой не является. Дописано 55 сценариев (QS-30…QS-79), по одному-двум на слово, каждый с посылками из закреплённого текста; прогон 85/85, differential 85 из 85 вызовов байтово, deadRules пусто. Ожили все четыре приоритета §119 — было два: QojganNormaOverEkiShart (слово 12 бьёт само себя при тех же двух соблюдённых условиях) и UjatOverImanTuri, которому нужен состав с ozin_andydy, иначе первым срабатывает SalgyrttynImanyZhoq по своему приоритету — исход дела FALSE_ONLY и названное правило те же, и подмена приоритета осталась бы невидимой. Три контрастные пары держат прочтения, которые иначе ослабли бы молча: шесть условий слова 32 против пяти (NEITHER), смех при уместном действии против смеха без него (not_known в теле), тәклиди со стойкостью против тәклиди без неё. corpus/scenario-ratchet.json 30 → 85, norm-coverage.json 60 → 120.

  • ci/formalization-depth.json: вписан qara-soz. До этого ворота печатали «новый акт под мерой» и 45/45 EXECUTABLE были измеримы, но ничем не защищены от просадки. Запись сделана точечно, значения взяты из самого measure(), а не набраны руками; --write не запускался сознательно — он перезаморозил бы заодно чужой регресс constitution (EXECUTABLE 86 → 5) и шесть актов, пропавших из меры.

  • Декларация о суверенитете: 68 правил из 68 наблюдаемы сценариями (было 58). Замер по proof-графам живого прогона, а не по именам правил в раннере. Среди десяти непокрытых были единственная обязанность акта (StatehoodProtectionDuty, п. 2) и оба безусловных запрета §130 (NuclearTestProhibited, WmdRangeProhibited, п. 11) — то есть все три нормы, ради которых у пакета есть головы §122–§130 и которые не покрывает ни одна другая проверка: check_rule_executability девять норм-голов называет «вне меры», check_dead_rules видит только статические пропуски, фаззер --targeted 40 дал 65/68. Два правила п. 3 абз. 2 не демонстрировало ничто — ни сценарий, ни фаззер: тело требует согласованной тройки «деяние — субъект — категория», которую генератор миров подбирает независимо. Дописано 14 сценариев (SOV-36…SOV-49) и помощник expect_position: головы-НОРМЫ спрашиваются запросом positions, потому что у них нет выводимого факта-эффекта, а statehood_measures_taken и nuclear_test — входы дела. Пять сценариев отрицательные и каждый называет цену прочтения: окно §124.2 без периода обязанности не создаёт; безличное «на территории Республики запрещаются…» носителя не отменяет; перечень источников ущерба п. 11 закрыт шестью; надзор п. 7 привязан к должности, а не к высоте органа. Прогон 49/49, differential 49 вызовов байтово — включая четыре positions-запроса, вид которых пакет под байтовый контракт до этого не отдавал. corpus/scenario-ratchet.json 35 → 49. Обе меры §33.1 были полными и до правки (учёт 17 из 17, глубина EXECUTABLE 17): пробел был не в охвате, а в наблюдаемости, и ни одна мера покрытия его не показывала.

  • Три пропуска содержания Декларации о суверенитете закрыты; правил 68 → 70, сценариев 49 → 57. (1) П. 10: «национальный банк, ПОДЧИНЁННЫЙ Верховному Совету Республики» — причастный оборот стоит при банке и ни при одном из остальных четырёх институтов перечня, поэтому правило именует банк, а не перебирает named_financial_institution; подчинение привязано к существующему банку, а не к оговорке, и возникает вместе с эффектом полномочия §127 (SOV-50/51/52). (2) П. 9 абз. 2: «…и гарантируется ИХ защита» — «их» указывает на формы собственности, а не на имущественные права Союза и иностранцев из абзаца третьего; заведено отдельное ownership_forms_protected (SOV-53). (3) П. 4: «на основе Конституции Казахской ССР» записано конъюнктом обоих правил осуществления власти — ПРОЧТЕНИЕ, меняющее ответы, и выбрано оно по согласованности акта с самим собой: тот же оборот Декларация ставит ещё дважды (п. 5 «в рамках Конституции», п. 6 «в рамках Союзного договора») и оба раза уже прочтён ограничительно. Цена выписана парой SOV-56/57: без действующей Конституции ни один канал осуществления не выводится, но народ ОСТАЁТСЯ источником государственной власти — различие «быть источником» и «осуществлять» до этой пары не наблюдалось. Альтернативное описательное прочтение записано в комментарии правила. Прогон 57/57, differential 57 вызовов байтово, Lean 57 сертификатов при нуле отказов, check_lower воспроизводит CLIR байтово; храповики 49 → 57 и разметка §218 140/77 → 142/79.

  • Проект программы «Алаш» (1917) формализован целиком: 10 из 10 разделов EXECUTABLE. Было — раздел I и девять разделов SOURCE_ONLY, все девять UNEXPLAINED. Стало 140 правил поверхности (109 strict, 31 defeasible) → 143 узла-правила CLIR и 35 norm_template (12 power, 10 immunity, 9 liberty, 4 duty), 34 фрагмента вместо 17 — по абзацу, как в разделе I. Байтовое покрытие не изменилось (99,8 %): фрагменты режут те же байты мельче. KZ-регрессия 42 сценария вместо 14, мёртвых правил ноль. Первое живое применение E-0028 и E-0038 в корпусе: часовой срок раздела III считается hours_between, недельный — add_calendar_period(day, 1 calendar_week), и различие семейств видно исполнением, а не на словах — календарная неделя снимка §85 не спрашивает, дневная форма того же срока ответила бы MISSING_CALENDAR на том же деле (E-0029). Правило счёта акт не даёт, поэтому политика §86 приходит из контекста дела: при start_count: next_day срок от 02.03.2026 истекает 10.03.2026 (ALASH-20/21).

  • Три находки о продукциях, каждая из исполнения. (1) constraint_decl принимается check, понижается в узел constraint — и не читается ни одной реализацией при вычислении (lawref/lawref/evaluator/ и семантическая часть law-eval слова constraint не содержат; только counterfactual.rs). Дело, нарушающее ограничение, проходит без issue, а ci/check_dead_rules.py этого не видит: он классифицирует правила, не ограничения. (2) classification_decl даёт предикат по имени классификации и берёт одно условие, поэтому не выражает «два вида → один класс»; в «Алаш» это превратило бы два класса раздела X в четыре предиката. (3) role_decl в грамматике 0.1 не имеет тела и потому не принимает метку §218 — любое его применение уменьшает разметку пакета, тогда как соседние event_decl/action_decl тело имеют, а enum_decl метку получил erratой E-0042. Кандидат в errata того же образца; квалификация дефекта не делалась.

  • Обе меры §33.1 научились видеть акт, который делится разделами, а не статьями. ci/check_source_pinning.py: опт-ин конвенция unit: "section" для римских разделов (I. Мемлекет қалпы) с арабским номером учёта — тем же, каким считает boundaries.py, иначе две меры называли бы одну единицу по-разному. Автоопределением конвенция не включается сознательно: строка вида «V. …» стоит в библиографии и внутри цитат. До этого article_convention возвращал для «Алаш» None, срез любой единицы выходил ПУСТЫМ, а пустой срез в этом коде — «молчаливое согласие с любой причиной»: любая объявленная граница по акту прошла бы ворота не глядя.

  • Набор признаков исполнимого содержания kk дополнен оптативом. Прежний набор собран под настоящее страдательное «Жеті жарғы» (салынады, төленеді); «Алаш» ставит норму формой на «-у болу» / «-лу» (республика болу, қаралу, таратылу) и отрицательной на «-маушылық» / «-мау» (аттамаушылық, келмеу). Набор не находил признаков ни в одном из десяти разделов — включая раздел I, из которого уже было выведено 29 правил. Контроль на заведомо исполнимом тексте и есть проверка самой проверки: набор, молчащий на нём, не измеряет ничего. Теперь признаки находятся во всех десяти.

  • alash-program вернулся под ворота глубины. boundaries.act_source() находит текст внутри пакета только ЧЕРЕЗ articles.json, и без него акт стоял в ci/check_formalization_depth.py строкой «акт пропал из меры»: храповик девяти UNEXPLAINED разделов не держал ничего. Акт объявил единицу деления в articles.json; база глубины поднята точечно (1/9/9 → 10/0/0), без --write, чтобы не заморозить чужие регрессы.

  • LDC-E0207: одиночное _ больше не имя и не терм; errata E-0041 и два вектора. identifier §14 требует XID_Start, а подчёркивание в него не входит — grammar.ebnf ставит _ ТОЛЬКО в pattern §55.1. Лексер lawc тем не менее принимал его началом обычного идентификатора, и в позиции аргумента _ проходил весь конвейер как имя: резолвер объявления не находил, но и не жаловался (необъявленная константа в аргументе законна — так в корпусе названы TheftDispute, BasTogyz и ещё 839 индивидов, E-0032), и _ понижался в const_ref на #_. Отказ был ДВУСТОРОННИМ и полностью беззвучным, обе половины измерены прогоном на kz-karamola: в положительном гарде литерал не выполняется никогда (обязанность доставить вызов по ст. 68 «Қарамола» не возникала ни в одном деле — при check ok:true и при том, что ворота глубины §33.1 числили статью EXECUTABLE, потому что мера структурная), а под not_known §113 выполняется всегда («ни за кем не замужем» означало «неизвестно о браке с константой _», и санкция ст. 30 применялась к замужней потерпевшей наравне с незамужней). Проверка стоит в Parser::name и в ветви идентификатора primary; путь образца match разбирает _ раньше обеих и не задет — T067/T068/T105/T106 остаются приняты. Анонимной переменной _ НЕ становится: это была бы новая поверхность, а семантика 0.1 заморожена.

    Второй половиной той же errata закрыто обратное расхождение: formula_primary допускал comparison только по пяти операторам, тогда как ComparisonFormula в legal-ir.schema.json допускает семь, обе реализации eq/ne исполняют, а в закоммиченном CLIR корпуса стоят 28 таких узлов в шести пакетах. Введён comparison_operator = relational_operator | "==" | "!=" — в формулу и НЕ в relational_expression, где равенство уже разбирает equality_expression. Обязательство держат ERR-E0041-EQUALITY-IN-FORMULA (исполняемый; оба оператора несущи — выпади любой, вывод исчезает целиком, а поверхность закрывает ci/check_lower байтовым совпадением lower(source.law) с ir.json) и ERR-E0041-UNDERSCORE-NOT-A-NAME (LDC-E0207 ровно дважды; третьим вхождением был бы законный образец match, и счётчик держит именно это).

  • A3-поверхности впервые применены в корпусе — ставки и пределы ОСМС стали данными (corpus/laws/osms, 6 × *.lawparam.json + law.lock 0.2). Графики из закреплённого текста перенесены в parameter datasets со строками, якорёнными в фрагменты статей: ставка отчислений ст. 27 п. 1 (1 % → 1,5 % → 2 % → 3 % по датам), ставка взносов работников/ГПХ ст. 28 п. 1 (1 % → 2 %), ставки ИП и самостоятельных плательщиков ст. 28 пп. 3–4 (5 %), кратности предельной величины объекта (10 МЗП до 01.01.2026 с якорем в ст. 29 п. 3; 40 и 20 МЗП с 01.01.2026 с якорями в ст. 27 п. 2-2 и ст. 28 п. 5-2). Мост «правило читает параметр» оказался уже построенным, отдельной поправки компилятора не потребовал: голое имя в терме правила лоуверится в const_ref, а оба движка разрешают const_ref на A3-символ вызовом generated-функции на context.legalTime с раскруткой Result/Ok (lawref/values.py, law-eval/values.rs) — вне покрытия громкий MISSING_PARAMETER_VALUE, не ноль. Обратная сторона того же механизма: опечатка в имени параметра остаётся const_ref-ом в никуда при чистом check (класс LDC-E1322, известный по definition) и всплывёт только на исполнении как TYPE_ERROR. Четыре правила-редакции пределов свёрнуты в два (DeductionBase, ContributionBase) с двойным @source: редакционный разрез 2026 года уехал из пары effective-правил в строки параметров, и proofGraph называет выбранную строку и её якорь на каждой дате (2025-06-30 → r-until-2026/ст. 29; 2026-06-30 → r-from-2026/ст. 27–28). Выбор строки идёт по context.legalTime — продолжение принятой пакетом семантики «как было тогда»; альтернативное прочтение «ставка следует расчётному месяцу, а не дате взгляда» — открытая точка истолкования, в сценариях корпуса они неразличимы (legalTime = расчётный момент). Канарейка LDC-E8704 проверена вживую (правка sidecar без lock останавливает сборку), lawc check пакета чист, сценарии OSMS-01…16 зелёные без единой правки, differential 35/35 вызовов байтово (lawc eval == lawref), генератор идемпотентен. Не переведены и названы границами: ставка взносов государства ст. 26 п. 2 (нет потребителя-вычисления — остаётся нормативным фактом OSMS-14), взносы с единого платежа ст. 27 п. 1-1 / ст. 28 п. 1-1 (режим не формализован), minimum_wage(2026, …) — жёсткий год МЗП как был. label-ratchet для osms правлен осознанно: +18 generated-символов без носителя метки §218, нормы 48 → 46 сворачиванием. Таблицам решений в ОСМС честного носителя не нашлось: естественное конечное измерение (вид плательщика) — entity-константы, а условия ячеек A3 принимают только typed value literals; это граница схемы, не повод для таблицы с фиктивным входом.

  • Восемь недоделок компилятора, найденных формализацией обычая, закрыты — ярусы 1 и 2 разбора corpus/laws/tuystyq. Разбор пакета против матрицы деклараций (docs/GRAMMAR-CAPABILITIES.ru.md) дал не список пожеланий, а перечень мест, где lawc check чист, а право не работает. Шесть из восьми были МОЛЧАЛИВЫ. Каждая правка проверена различающей пробой: форма до и после, а не чтение кода.

    Ярус 1 — снятие молчания (диагностики и резолвер, семантику не трогают).

    • LDC-E1322 (новый): голое имя в теле definition §151, не являющееся её параметром и не объявленное символом пакета. У определения НЕТ биндера (грамматика §529), поэтому такое имя — свободная переменная, а лоуверинг молча делал из неё const_ref на несуществующую константу: check чист, правило мертво навсегда. Приём и пост-проход те же, что у LDC-E1317 (comprehension), — второе место, где голое имя различимо.
    • LDC-E1323 (новый): имя события в on §160 до CLIR не доезжает. Найдено различающей пробой — две процедуры, отличающиеся ТОЛЬКО именем события, лоуверятся в байтово одинаковый CLIR. Отложено это было сознательно (событийная модель §79 вне среза, о чём говорит комментарий в ast::ProcedureTransition::on), но автору не сообщалось ничем, а §210.1 требует именованной диагностики вместо молчания. Предупреждение, а не ошибка: форма законна и остаётся объявлением намерения.
    • LDC-E2114 (новый): арность закрытого предиката §70 проверяется на check. Оба движка отвергают неунарное замыкание на ИСПОЛНЕНИИ (NON_EXECUTABLE_CLOSURE), а lawc check давал rc=0 — и запрос отвечал NEITHER вместо FALSE, что неотличимо от честного открытого мира. Бинарное препятствие («между этими двумя») — естественная форма для права, поэтому в ловушку попадал типовой замысел.
    • definition стал виден другим файлам пакета. SymbolTable::build собирал предикаты из relation и classification, но не из definition, хотя §151 объявляет предикат так же. Следствие было не косметическим: правило соседнего файла получало LDC-E2102, и definition оставался пригоден только для терминов, не покидающих свой файл, — то есть практически непригоден в многофайловом акте §22.

    Ярус 2 — выразимость.

    • §206-развёртка or внутри definition. Условие клалось в тело КАК ЕСТЬ, и определение с дизъюнкцией давало правило, которое оба движка отвергают NON_EXECUTABLE_RULE (flatten_body знает только and). Перечисление альтернатив — самая частая форма легального определения («признаётся A, B либо C»), поэтому молчаливо мёртвым оказывался типовой случай. necessary-ограничение сохраняет исходную формулу целиком: требование §93.1 — произвольная формула, дизъюнкция в нём законна.
    • Профиль процедуры объявляет свои состояния и переходы сам. Он порождал const_ref на каждое имя, но узла-объявления не создавал: у tuystyq это давало 11 вхождений на 5 имён, ни одно из которых не разрешалось. Ручной обход из пакета снят; сборщик A3 ловит столкновение имён громко (A3 StableId collision), что и подтвердило правку.
    • errata E-0044: носитель метки у константы §54 и членов процедуры §160. Тот же класс, что E-0042, с другой стороны перечня §218: у enum тело было и метку отвергала грамматика, у const и состояния тела не было вовсе. Цена была мала, пока таких узлов были единицы; lowering const §54 (E-0032 п. 2) дал законную форму 3025 именам, и безымянными оказались бы они все. Носитель у членов процедуры СВОЙ, а не конверт §202: метка процедуры, разлитая на все порождённые узлы, назвала бы каждое состояние её именем. Метка перехода доезжает до обоих его правил (/valid и /enters), правило /initial берёт метку начального состояния. Векторы ERR-E0044-CONST-LABEL и ERR-E0044-PROCEDURE-LABEL — исполнено; плюс два крейт-теста law-syntax.

    Петля G-M1b поймала пробел, которого не было в плане. Первый прогон ci/check_lower дал байтовое расхождение на ERR-E0044-CONST-LABEL: lawc lower размеченной константы давал метку в CLIR, а рендерер ir→law терял её обратно. Рендерер дополнен — ровно тот же сторож, что снимала E-0042 у перечисления.

    Проверено на живых пакетах. tuystyq — 38/38 сценариев, висячих const_ref ноль (было 11), разметка 100 из 106 объявлений и 93 из 93 норм (было 88 из 93), мёртвых правил 0; procurement и procurement_l2 — 10/10 и 3/3. KZ-differential: 134 вызова, расхождений 0 — обе реализации байтово согласны после правки лоуверинга.

    Обходы, которых больше нет, из пакета сняты тем же заходом. Держать правку компилятора и её причину порознь значило бы оставить в исходнике комментарий, объясняющий несуществующее ограничение. aga и epke вернулись из пары relation + rule в definition … exact — их удерживала снятая кросс-файловая граница; перечень ст. 12 стал ОДНИМ определением с or вместо трёх рукописных правил с общей головой. Второе не косметика: рукописная развёртка несла только достаточную сторону, а определение несёт и необходимую — старшим родственником нельзя оказаться помимо перечня.

  • E-0045: пять partial-областей Core 0.1 закрыты до исполнимых контрактов. role понижается в LegalRole constant; bare/explicit functions проходят общий транзитивный purity graph; external ограничен snapshot/judgment/opaque и работает только с pinned datasets; decisions поддерживают шесть hit policies с общей A3-статикой; counterfactual получил CounterfactualDecl, две нормативные схемы, одинаковый конечный solver в lawc/lawref и replay certificate. Итоговая карта: CLIR=37, input=6, partial=0, opaque=0. Runtime I/O и молчаливое понижение не вводились.

  • E-0042 и DECISION-0047: перечисление научилось нести метку §218, а значение варианта — говорить, что оно вне среза. Обе находки — одна декларация, но разной природы, и потому закрыты разными инструментами.

    Метка — дефект SPEC (errata E-0042). §218 перечисляет носители от противного: «декларации, не имеющие тела в грамматике (function, enum, const, concept, role, алиасы типов), меток не несут», — и тут же даёт критерий: «телом здесь называется тело из items, а не из операторов». enum_decl §38 несёт скобки, а в них items (enum_variant), ровно как entity_decl несёт field_decl: перечисление стояло в перечне ошибочно. Остальные четыре имени проверены по грамматике и стоят там верно — у concept, role, const и алиаса скобок нет вовсе. Правка аддитивна: enum_decl = "{", { label_item }, enum_variant, { enum_variant | label_item }, "}", парсер зовёт общий label_item, метка уезжает в конверт декларации и снимается attach_decl_envelope — лоуверинг не тронут. Цена измерена: по корпусу 4 объявления в 2 пакетах (CoreRight, CoreRight1995 в kz-constitution-linked и kz-constitution-rights, 16 вариантов каждое); они входят в словарь §218 храповика, то есть числились неразмеченными, и разметить их автор не мог ни при какой дисциплине — перечисление конституционных прав предъявлялось юристу идентификатором. Петля G-M1b закрыта тем же заходом: рендерер ir→law размеченный enum писать ОТКАЗЫВАЛСЯ (сторож if labels), однострочная форма без меток сохранена дословно — иначе сдвинулись бы байты всех уже порождённых source.law. Векторов два: ERR-E0042-ENUM-LABEL (static: файл принимается И LDC-E0201 не звучит — второе из первого не следует) и ERR-E0042-ENUM-LABEL-HASH (hash-compare: равный semantic hash §209 при различных content hash §202). Проверено на демо: добавление метки к Cord сдвинуло ровно один узел из 174 и не тронуло semantic hash пакета.

    Значение варианта — не дефект, а граница среза (DECISION-0047). grammar.ebnf стр. 226 даёт enum_variant = identifier, [ "=", string_literal ], ";", а prose §38 значению смысла не даёт вовсе («Enum variant имеет stable qualified identity»), носителя в CLIR нет (TypeDecl.variants — массив строк), потребителя в семантике 0.1 нет ни одного (в lawref/…/evaluator/ слова enum нет). Значит расходятся не реализации и не prose с грамматикой, а грамматика и срез — тот же случай, что import … as. Отказ переведён на свой LDC-E0206 «значение варианта enum §38 вне среза 0.1»: до этого приходили два общих LDC-E0201 на вариант — на = и на строку, — то есть форма читалась как опечатка автора. Имя варианта сохраняется: развались перечисление на невыразимом хвосте, за ним посыпался бы каждый match §55.1 по этому типу. Векторы T141 (код звучит ровно дважды, LDC-E0201 не звучит) и T142 (граница: голый перечень принят, ни одного из двух кодов).

  • E-0032 п. 2: const §54 получил lowering — у 3663 висячих const_ref корпуса появилась законная форма. Package-level константа понижается в symbol_decl вида constant; правки схемы не потребовалось — symbolKind: "constant" с returnType/value и запретом параметров модель описывала уже, и RefTerm.const_ref существует, чтобы на такой узел ссылаться.

    Пересчёт долга (цифры E-0032 устарели втрое, и методика там смешивала два вида ссылок). const_ref в CLIR перегружен: им адресуются и доменные имена, и УЗЛЫ пакета — стороны рёбер priority_rule, шаблоны норм. Замер по всем 37 файлам corpus/clir/: 4133 вхождения / 3378 имён всего, из них 470/353 разрешаются в узел (не дефект) и 3663/3025 висячих доменных имён против 1188/844 сутки назад. Растёт не поломка, а конвенция: её ничто не останавливает. Миграция при этом механизируема на 98,5 % — тип имени выводится из типа параметра предиката, в позиции которого оно стоит: 2981 имя из 3025 однозначно, 4 конфликтуют (_, Aqyl, Maqtanshaqtyq, Theft — настоящие неоднозначности моделирования), 40 не выводятся, потому что стоят вне позиции аргумента (почти все — KZ).

    Форма разыменования — один предпроход перед исполнением, зеркальный в обеих реализациях (lawref/…/evaluator/constants.py, law-eval/src/constants.rs), а не разыменование по месту. Ссылка стоит в двух ролях сразу — операнд терма (гард r <= MAX_RATE) и аргумент литерала (chamber(StateDuma)), — и первую разрешает вычислитель термов, вторую ключ атома literal_key. Разыменуй реализация только первую, правило и факт об одном индивиде получили бы разные ключи и молча перестали совпадать. Третьим входом идёт запрос: первый прогон дал NEITHER при сработавшем правиле именно потому, что запрос остался со ссылкой. Следствие названо прямо — в evaluation-документе стоит значение, а не имя; имя остаётся в CLIR.

    Вектор ERR-E0032-CONST-DECL (evaluate, L0, в SUPPORTED) держит обе позиции одним прогоном: MAX_RATE операндом гарда, StateDuma аргументом в факте, в правиле и в запросе. Область: ни один пакет корпуса константу не объявляет, таблица предпрохода пуста, быстрый выход возвращает те же объекты без копии — differential 116/116 байтово, vectors: OK (279), cargo test 0 провалов, KZ-регрессия неподвижна.

    Найдено исполнением и починено здесь же: source.law у evaluate-вектора РЕНДЕРИТСЯ из ir.json, и вектор, чей узел рендерер не умеет, молча выпадает из эмиссии, а с ней — из байтовой петли G-M1b (ci/check_lower сверяет ровно те, у кого источник есть). Так и вышло при первом заведении вектора: каталог остался с ir.json без source.law, счётчик ворот показал прежние «97». Добавлена ветка symbolKind == "constant" в render.py; петля покрывает 98.

    Пункты 1 (prose §53/§54 + отказ неразрешённому имени) и 3 (миграция) E-0032 остаются открытыми в прежнем порядке: требование без миграции отвергает корпус. Форма, которой миграция будет удовлетворяться, теперь есть.

  • Делегационная цепочка портирована в lawc; контракт двух реализаций — КОДЫ (DECISION-0044, инкремент 4 — последний из четырёх границ DECISION-0010). Инвариант 6 соблюдён буквально: цепочка жила в lawref с 26.08, за это время получила живую пару корпуса, декларацию основания в CLIR и предметную компетенцию, и только отстоявшись поехала в Rust. Порт не изобрёл ни одного правила — те же семь кодов и та же последовательность звеньев. Вторая интервальная логика не заведена, как требовал DECISION-0010: edition_state в Rust уже был (дословный порт D1 для §30.2), не хватало надстройки — lifecycle_diagnostics (LDC-E5302) и applicable_editions добавлены ТУДА ЖЕ, в refs.rs, так что порядок зависимостей повторяет оракул. Поверхность: lawc check-delegation <sub.json> <parent.json> [--basis] [--organ] [--require-basis] [--json]; основание и издатель берутся из пакета, параметры переопределяют, код выхода — по ошибкам. WP-35 не блокер: пути обоих CLIR называет вызывающий, lawc lock понадобился бы только чтобы компилятор нашёл родителя сам. Сверка — по составу и порядку кодов, а не по байтам: у статических диагностик байтового контракта нет по построению, и формулировки правятся порознь. Встроена в те же ворота, что проверяют оракула, и покрывает одиннадцать сценариев — живую пару в трёх видах и восемь синтетических, включая оба предупреждения и проброс дефекта lifecycle. Ворота ci/check_delegation.py — 26/26 → 37/37.

  • Предметная компетенция: power.subject §127 и source.regulates §27.1 (DECISION-0043, инкремент 3 из четырёх границ DECISION-0010). «Полномочие охватывает эту норму» — ∀-утверждение, и §105.1 запрещает выводить его из текста; поэтому сравниваются два авторских перечисления, а не смыслы: уполномочивший акт объявляет предмет полномочия, подзаконный — свой предмет, цепочка проверяет включение. Излишек — LDC-E5307 с названным излишком; необъявленный предмет полномочия — LDC-W5302, потому что молчание означало бы, что делегация БЕЗ объявленного предмета проходит предметную проверку легче, чем объявившая его: отсутствие поля есть «не объявлено», а не «предмет любой». Оба поля повторяемые (как label) — списка грамматика 0.1 не несёт, и расширять её не понадобилось; идентификаторы принадлежат словарю уполномочившего акта по необходимости, потому что подзаконного акта в момент принятия закона ещё нет. Что показала живая пара: приказ V2000021744 регулирует закуп и для ГОБМП, и для ОСМС, а пункт 1 статьи 34 делегирует только вторую половину — первая стоит на подпункте 62) статьи 7 Кодекса о здоровье, не заведённого в конвейер. Предмет объявлен ЧАСТИЧНО и сказано почему; соблазн объявить обе половины ради громкого LDC-E5307 отвергнут осознанно — диагностика читалась бы как «приказ вышел за пределы полномочия», тогда как неполна МОДЕЛЬ, а не акт. Векторы T138 (пара различается только предметом полномочия — semantic hash расходится) и T139 (повторяемое поле копится в список в порядке записи; реализация, оставляющая последнее вхождение — как §206 оставляет последний then, — была бы схемно валидна и теряла предметы молча). Ворота ci/check_delegation.py — 23/23 → 26/26.

  • Основание издания переехало из параметра CLI внутрь пакета: аддитивное поле §27.1 basis (DECISION-0042, инкремент 2 из четырёх границ DECISION-0010). Пока основание подавалось параметром, знание о том, на чём акт стоит, жило вне пакета: один и тот же CLIR давал целую цепочку или пустоту в зависимости от того, что подставил вызывающий, и никакая проверка не могла сказать, что акт своё основание вообще заявляет. Теперь заявляет: basis "urn:kz:corpus:clir:osms#DetermineProcurementProcedure";. Издатель отдельного поля не потребовал — authority §27.1 существовал с начала и в корпусе употреблялся, не хватало только чтения его цепочкой. Главное решение — СТРОКА, а не ссылка pkg::name: квалифицированная ссылка разрешалась бы механизмом §23, то есть требовала бы ИМПОРТА уполномочившего акта, а импорт втягивает его программу в мир вычисления целиком. Но подзаконный акт закон не исполняет — он на него ссылается; делегация есть провенанс, а не зависимость вычисления. Отсюда граница, объявленная вслух: компилятор разрешимость основания не доказывает и не притворяется — родителя у него на входе нет; опечатка ловится цепочкой (LDC-E5304), читающей CLIR родителя отдельно. basis входит в semantic hash §209 наравне с number/jurisdiction/authority и правки §209 не потребовал: основание — утверждение пакета о праве, а не оформление, в отличие от меток §218 (errata E-0010). Аддитивно: до правки поле выпадало предупреждением LDC-E1302, поэтому ни один существующий пакет не менялся; параметры --basis/--organ сохранены как ПЕРЕОПРЕДЕЛЕНИЕ. Векторы T136 (пара, различающаяся ровно основанием, semantic hash расходится) и T137 (основание доезжает ДОСЛОВНО, а не переписывается в локальный id — переписанный был бы схемно валиден и разошёлся бы с узлом родителя молча). Ворота ci/check_delegation.py — 18/18 → 23/23. Попутно исправлен отчёт CLI: цепочка проверялась по объявленному основанию, а печатала «основание не заявлено и не требуется» — проверено одно, сказано другое.

  • Errata E-0040: декларация, которую реализация не понижает, теряется молча; заведён LDC-E1321, введён §210.1 «Тотальность конвейера по декларациям». Найдено той же сверкой grammar.ebnf с корпусом, что и векторы §147/§148 ниже: из ~40 альтернатив продукции declaration парсер lawc разбирает структурно 27, остальные уходят в Opaque и узла CLIR не порождают. Что при этом обязано произойти, спецификация не говорила: §210 доводит конвейер до lower to CLIR, а про вход, который эта стадия понизить не может, молчит.

    Измерено прямым опытом на пакете с record/role/event/const: lawc check печатает check OK и возвращает 0 — check_diagnostics собирает девять резолверных проверок и lowering не зовёт вовсе; lawc lower печатает LDC-E1302 по декларации и возвращает 0, потому что код заведён предупреждением, а ci/check_lower.py проверяет exit code; check --layer L0 ловит только слоевые конструкции (evidence/interpretation/decision → LDC-E8101), а record/role/event/const слоя не превышают. Три независимых источника молчания на один дефект. CLIR при этом продолжает порождаться, и semanticHash §209 считается по усечённой программе: 4 узла вместо 11, документ schema-валиден, пакет получает идентичность не того, что написано.

    Квалификация — дефект SPEC (восполнение умолчания). Реализация вправе понижать подмножество — объём среза §210 не фиксирует, — но не вправе решать, слышно ли это автору. §210.1: каждая грамматически допустимая декларация обязана быть названа результатом компиляции; ограничение реализации — error LDC-E1321, одинаковая на каждом входе, принимающем исходный текст; свойство конструкции (тест §267, свойство §270 — вход и ожидание, а не норма) — информационная диагностика с закрытым перечнем.

    Код отделён от LDC-E1302 намеренно: у того контракт «конструкция в срезе, но форма не поддержана», и его ждут предупреждением три вектора (LAY-L2-NORM-EXCEPTION-DROPPED, LAY-L2-PROHIBITION, T073) — промоция общего кода сменила бы контракт трём утверждениям, к находке отношения не имеющим. Проверка живёт среди резолверных (law_hir::check_file), а не в lowering-е: вопрос решается по AST. Плюмбинг диагностик lowering-а в check рассмотрен и отвергнут — без --imports они несут LDC-E1104/LDC-E1105 и уронили бы check на 30 пакетах корпуса по чужой причине. Оракула правка не касается: lawref поверхностного языка не читает, контракт статических диагностик — код.

    Векторное обязательство исполнено парой ERR-E0040-OPAQUE-DECL-CHECK / ERR-E0040-OPAQUE-DECL-LOWER (static, L0): один источник, два входа, отказ обеих команд, LDC-E1321 ровно четыре раза, LDC-E1302 отсутствует. Пара несущая — предмет обязательства есть совпадение ответов, а не факт отказа. Проверено бинарём до правки: оба вектора красные (check — rc=0 и ноль диагностик, lower — rc=0 и четыре LDC-E1302). Область: LDC-E1302 не звучит ни разу при lawc lower по всем 39 пакетам corpus/laws, ветку Opaque не ждёт ни один вектор, cargo test — 0 провалов, голдены неподвижны. Ошибка делает границу слышимой и не понижает ни одной конструкции; первым по цене за ней стоит const §54 (E-0032, 1188 вхождений висячего const_ref), который до сих пор прятало это же молчание.

  • Векторы §147/§148: фикция и классификация получили conformance — шесть векторов семейства lay, до этого у обеих конструкций не было ни одного вектора при полностью живом lowering-е (lawc/crates/law-hir/src/lower/sugar.rs) и нуле употреблений в корпусе. Пробел найден сверкой spec/grammar.ebnf с AST 1076 файлов corpus/: из ~40 альтернатив продукции declaration корпус использует 17, и fiction/classification оказались единственными разбираемыми конструкциями, не покрытыми ни корпусом, ни векторами. Держал их один крейт-тест — то есть реализация проверяла сама себя.

    Форма выхода lowering-а (lower-shape, довод тот же, что у LAY-L2-PROHIBITION: режим evaluate берёт готовый ir.json и обходит ровно тот участок, о котором утверждение) — LAY-L0-FICTION-STRICT (§147: фикция даёт ОДНО правило своей силы с головой-deem-атомом, собственного узла у неё нет) и LAY-L1-CLASSIFICATION (§148: классификация объявляет свой предикат symbol_decl вида institutional и даёт правило той же силы; default нормализуется в defeasible по §149). Статика — LAY-L0-FICTION-EMPIRICAL-HEAD (§147: голова над empirical-отношением даёт LDC-E1309, файл принимается — §198), LAY-L1-CLASSIFICATION-DEFEATER (§148: defeater силой классификации быть не может) и пара нарушителей слоя ниже.

    Раннер lower-shape дополнен утверждением fields о скалярных полях узла: нормализация default → defeasible не видна ни по числу узлов, ни по их видам, и без такого утверждения вектор подтверждал бы и реализацию, переносящую default в CLIR как есть. Заметки LAY-векторов вынесены в таблицу LAY_NOTES: они писались, когда у каждого режима был ровно один вектор, и второй lower-shape немедленно получил чужой текст про §130.

    Все шесть проверены канареечным прогоном — подменённое ожидание обязано ронять набор, и роняет: поле strength, число вхождений LDC-E1309 и «файл принимается» дают три разных отказа с точными сообщениями.

  • Корпус: «Туыстық жүйе» — казахская система родства формализована целиком, 13 статей из 13. Первый акт корпуса на НЕКОДИФИЦИРОВАННОМ обычае: у «Жеті жарғы» и «Қарамола ережесі» закреплённый текст памятника есть, здесь его нет ни у кого. Закреплённое изложение (sources/tuystyq/ru.txt, 14 614 байт, PINNED_OFFICIAL_BYTES) написано ДЛЯ репозитория и само есть публикация — основание то же, что у faraid и pinning-example. Пакет corpus/laws/tuystyq/ (7 файлов, 6 сущностей, 95 предикатов, 93 правила, 3 замыкания §70, 8 ограничений §93.1, 5 констант §54), фрагменты режет corpus/tools/sync_tuystyq_fragments.py, 38 сценариев в corpus/kz/acts/tuystyq.py и три свойства §270 в corpus/laws/tuystyq/tests/.

    Обе меры §33.1: учёт — 13 из 13, объявленных границ 2, неучтённых 0; глубина — EXECUTABLE 11, ANCHORED 0, SOURCE_ONLY 0. Байтовая доля публикации 80,3 % (11 732 из 14 614, 11 фрагментов); непокрытые 2 882 байта — ровно две объявленные границы (ст. 1 о природе изложения и ст. 13 о его пределах) с заголовком документа и переводами строк. Разметка §218 — 95 объявлений из 101 и 88 норм из 93: АВТОРСКИЕ объявления размечены полностью в ДВУХ языках (kk-KZ official — казахский термин, ru-KZ translation), а непокрыт ровно слой, порождённый procedure. Разметить его нечем: грамматика §640 допускает в procedure_item и transition_item только metadata_item, label_item — нет. Числа вписаны в corpus/label-ratchet.json осознанным действием, а не подогнаны под «100 %».

    ПАМЯТНИК, А НЕ ДЕЙСТВУЮЩЕЕ ПРАВО. У редакции нет in_force, у правил нет effective (прецеденты — de-legibus, zheti-zhargy): обычай не вводился в действие и не отменялся датой, и объявить окно значило бы утверждать факт, которого не было. Пакет ничего не говорит о праве Республики Казахстан; современный слой родства остаётся в corpus/laws/marriage-conditions.

    Норма названа тем, чем она является, а не «просто правилом». Сверка пакета с матрицей деклараций (docs/GRAMMAR-CAPABILITIES.ru.md) дала 8 из 24 деклараций CLIR-уровня и привела к пяти конструктам, которых в первой редакции пакета не было — каждый по пробе ДО правки, как требует скилл:

    • definition … exact §151 у трёх терминов ст. 4: «именуется» есть определение, а не односторонний вывод. Лоуверинг даёт достаточное правило И необходимое ограничение, то есть термин нельзя приписать лицу мимо его определения;
    • fiction … deem §147 у ст. 10 абз. 5: причисление ребёнка әмеңгерлік к роду умершего идёт ВОПРЕКИ общему правилу рода по отцу (ст. 2). Обычным правилом это выразимо и было выражено, но тогда в CLIR не оставалось следа, что вывод идёт вопреки, — а в норме это главное;
    • procedure (DECISION-0013) у ст. 11 абз. 6 — первое исполнение процедуры в корпусе: procurement объявляет её с 26.08, но ни один сценарий её не спрашивал;
    • пять constraint §93.1 на связность состава дела (не на нормы обычая);
    • три property §270 в corpus/laws/tuystyq/tests/ под воротами ci/check_corpus_tests.py.

    Процедура заведена ради того, чего конъюнкция не умеет. «Брак признавался состоявшимся, когда қалың мал передан И невеста провожена» порядка не знает, и дело, где невесту проводили ДО передачи қалың мал, для конъюнкции неотличимо от правильного. Абзац 6 ст. 11 (дописан в изложение вместе с правилом, а не подогнан под него) называет порядок неизменным; переход Uzatu выходит только из состояния QalynMalBerildi. Сценарий TUYS-35 предъявляет ровно такое дело: факт проводов в нём есть и выводится (sogovor_uzatyldy = TRUE_ONLY), а сговор остаётся на первой ступени.

    Три ловушки новых конструктов, все найдены пробой; первые две молчаливы. (1) У definition НЕТ биндера: свободная переменная в when не становится экзистенциальной — лоуверинг делает из неё const_ref на несуществующую константу, lawc check чист, правило мертво навсегда. (2) or внутри definition НЕ расщепляется §206 (внутри rule — расщепляется, проверено исполнением): тело остаётся дизъюнкцией, и оба движка отвергают его NON_EXECUTABLE_RULE. (3) Предикат, объявленный definition, не виден другим файлам пакета (LDC-E2102), тогда как relation виден, — эта граница громкая, но именно она решила состав: из ~40 терминов определением стали три, потому что аға и әпке потребляют ст. 6 и ст. 12.

    Висячих const_ref в пакете ноль. procedure порождает ссылки на имена своих состояний и переходов, но узлов-объявлений для них не создаёт: до правки в CLIR было 11 вхождений const_ref на 5 имён, ни одно из которых ничему не соответствовало. Закрыто пятью const §54 — и названо обходом: объявлять порождённые ею имена обязана сама procedure. Цена прямая: у const_decl §249 нет label_item, поэтому обмен — пять неразмеченных объявлений против одиннадцати ссылок в никуда, и он вписан в corpus/label-ratchet.json осознанным действием (итог разметки — 95 из 106 объявлений и 88 из 93 норм; авторские размечены полностью в двух языках). Общекорпусный размер долга назван в E-0032 п. 2: 3663 вхождения на 3025 имён.

    Имя события в on до CLIR не доезжает — дефект SPEC. Различающая проба: две процедуры, отличающиеся ТОЛЬКО именем события, лоуверятся в байтово одинаковый CLIR при check OK; поля события в схеме нет вовсе. Проза §160 ставит on ApplicationSubmitted; в свой канонический пример, §161 говорит о событии входа в состояние, §164 называет три предиката профиля — и нигде не сказано, во что понижается имя в on. Молчаливая потеря запрещена §210.1, но дефектом компилятора это не назвать: ему не с чем сверяться. Закрытие требует решения о семантике, то есть errata, а не правки пакета; здесь пробел сделан громким там, где проявился.

    Ограничения §93.1 названы честно. evaluate их НЕ применяет — в оракуле нет пути, читающего constraint во время вывода. Значит, это не «громкий отказ на несвязном деле», а машинно-проверяемый инвариант, к которому ищет контрпример lawref fuzz. Написать в пакете «дело будет отвергнуто» значило бы обещать поведение, которого нет.

    Свойства §270 проверены мутацией, а не чтением. Утверждённое напрямую лицо, лишённое доли в қара шаңырақ и не имеющее младшего брата, роняет NoShareImpliesYoungerBrother с поимённым контрпримером; два других свойства при этом держатся. Граница поверхности названа: v1 исполняет ОДИН связыватель, поэтому взаимность бір туған («для любых a и b») свойством не выражается — её держат сценарии TUYS-10 и TUYS-13.

    Термин зависит от пола ТОГО, ДЛЯ КОГО он произносится. Нагрузка, которой в корпусе не было: младшая сестра мужчины — қарындас, младшая сестра женщины — сіңлі. Оба правила работают на ОДНИХ фактах об одной и той же Күлян и различаются ровно последним конъюнктом о поле эго (TUYS-08/TUYS-09, проверяется в обе стороны — где термин выведен и где НЕ выведен).

    Рекурсии в счёте поколений нет, и это не упрощение. Обычай сам стратифицировал счёт: семь именованных ступеней нисхождения (бала, немере, шөбере, шөпшек, немене, туажат, жүрежат) и семь восхождения. Транзитивное замыкание через monotone §65 выразило бы «предок любой глубины» — не то, что говорит текст, — и граница жеті ата перестала бы быть границей. Восьмая ступень выражена ОТДЕЛЬНЫМ выводом: без неё «начиная с восьмой препятствия нет» было бы молчанием правила, неотличимым от ненайденного предка.

    Экзогамия — препятствие, а не запрет (модальности prohibition в CLIR 0.1 нет). Форма — closure §70 с explicit negative по образцу marriage-conditions: обычай сам объявляет перечень препятствий исчерпывающим (ст. 7 абз. 3). Обе границы проверены ЧИСЛОМ ступеней: общий предок в шестом колене даёт TRUE_ONLY, в восьмом — FALSE_ONLY от замыкания плюс положительный вывод «общий предок вне жеті ата» (TUYS-22/TUYS-23).

    Витрина правового плюрализма — два сценария, где своды расходятся, и расхождение ВЫВОДИТСЯ, а не разрешается. TUYS-34: одни факты о смерти отца дают по обычаю қара шаңырақ младшему сыну целиком, а по фараиду — равный вес 2 обоим сыновьям и 1 дочери, без всякого значения порядка рождения. TUYS-35: у пары с общим предком в шестом колене брак допущен Кодексом о браке и семье и встречает препятствие по адату. Выбирать между двумя счётами формализация не уполномочена — она обязана показать оба.

  • Корпус: Закон РК «Об органах внутренних дел» № 199-V ЗРК — формализован целиком, 26 статей из 26. Пакет corpus/laws/internal-affairs/ (12 файлов, 22 сущности, 167 предикатов, 103 правила — 72 strict, 29 defeasible, 2 defeater, — 225 нормативных фактов, 13 duty, 7 liberty, 4 prohibition, 3 power), фрагменты режет corpus/tools/sync_internal_affairs_fragments.py, 17 сценариев в corpus/kz/acts/internal_affairs.py.

    Обе меры §33.1: учёт — 26 из 26, объявленных границ 1, неучтённых 0; глубина — EXECUTABLE 25, ANCHORED 0, SOURCE_ONLY 1. Байтовая доля публикации 93,6 % (98 598 из 105 316, 240 фрагментов), разметка §218 — 100 %. Единственная граница — ст. 9-1, ИСКЛЮЧЁННАЯ Законом РК от 30.06.2025 № 203-VIII: в закреплённых байтах от неё остался один заголовок.

    Фрагмент на подпункт, а не метка на подпункт. Перечни статей 4–6, 9–12 и 19 — нормы, а не перечисление: ст. 6 п. 1 говорит «обязаны» (53 действующих подпункта), п. 2 — «имеют право» (41). Дословность подпункта положена во фрагмент, а не в метку §218, потому что метку не сверяет ничто, а текст фрагмента сверяется с закреплёнными байтами на каждой сборке (LDC-E5202). Отсюда 240 фрагментов вместо 70.

    Три вычислимые нормы. Подъёмное пособие ст. 21 п. 2 — 2 * amount + div_round(number * amount, 2.0, 2, "HALF_UP"), где number считается агрегатом §59 в голове правила; зачёт срока службы «один день за три» и содержание «в трёхкратном размере» ст. 17 п. 2 — умножение на 3; десять календарных дней ст. 25 п. 1 — add_business_days с calendar_day (единственное место пакета, читающее снимок §85).

    Три молчаливых отказа, найденных на акте, и все три lawc check пропускает. Агрегат по выводимому предикату (барьер полноты §111) даёт NON_EXECUTABLE_RULE у ОБОИХ движков при чистом check; goal без window (§124) и power без valid_when (§125/§127) дают LDC-E1305 только на lawc lower — одиннадцать целей и три полномочия прошли check зелёными. Транзитивное замыкание ст. 7 потребовало monotone (§65/§103, E-0018): по голому атому цикл не стратифицируем (LDC-E4102).

  • Errata E-0038: недельный срок §84.2/§86. Единица счёта calendar_week введена на существующем терме add_calendar_period. До неё недели не было в перечне §86 вовсе, а естественный обход через 7 calendar_day давал дату на сутки раньше установленной: дневное семейство отвечает на вопрос «N-й считающийся день от начала», календарное — «соответствующая единица N периодов спустя», и на одной дате при одной политике они расходятся (09.03 против 08.03 от 02.03.2026). То есть дефект был в ОТВЕТЕ, а не в записи, — норма «в течение одной недели» получала неверный срок при полностью зелёной статике.

    Неделя поставлена в КАЛЕНДАРНОЕ семейство, а не в дневное, по семантике: ст. 14 п. 2 Закона «О правовых актах» определяет её истечение как «соответствующий день последней недели», ровно как месячный срок истекает в соответствующее число последнего месяца. Шаг — 7 × count суток от начала, приведённого start_count; календарь §85 не спрашивается ни разу; month_end при недельной единице запрещён (прибавление целых суток несуществующего числа не порождает), roll обязан быть no_roll, include_end — true; приостановление §84.3 отвергается, как у месяца.

    Квартал сознательно НЕ введён. Ст. 14 п. 1 называет его среди единиц, но п. 2 правила исчисления для него не даёт ни в одном прочтении — ни как три месяца от даты, ни как календарный квартал с фиксированными границами, — и прочтения дают разные даты. Ввести единицу значило бы ответить за законодателя.

    Вектор ERR-E0038-CALENDAR-WEEKS (evaluate, без объявленного календаря — его отсутствие и доказывает, что недельный шаг снимка не берёт), в SUPPORTED; differential 115/115 байтово. Сверка двух семейств на одной дате и отказы — в селфтесте оракула, где календарь доступен. Реестров у новой ЕДИНИЦЫ два, а не три, как у нового терма (E-0029): проверка типов и резолвер имён не трогаются, единица известна только исполнению. Акт «О правовых актах» получил правило абзаца третьего п. 2 ст. 14 и сценарий LEG-26.

  • Первая ЖИВАЯ делегационная пара корпуса и код LDC-W5301: сверка издателя проверяла форму, которой в корпусе нет ни одной (DECISION-0041, инкремент 1 из четырёх границ DECISION-0010). Пара нашлась в уже закреплённых текстах: Закон об ОСМС № 405-V, ст. 34 п. 1 — «закуп… осуществляется фондом в порядке, определяемом уполномоченным органом», и приказ V2000021744, преамбула — «В соответствии с… пунктом 1 статьи 34 Закона… ПРИКАЗЫВАЮ». Не хватало трёх вещей, и каждая была молчаливой. (1) Оговорка ст. 34 была формализована фактом competence наравне со статьями 10–12, то есть у подзаконного акта не было узла, чтобы назвать основание, — заведена power §127 DetermineProcurementProcedure. (2) У редакции родителя стояла одна дата adopted, а §31 относит её к НЕЙТРАЛЬНЫМ событиям: машина применимости D1 честно отвечала «ни одна редакция не применима» на любую дату, и темпоральное звено не подтверждалось никогда — добавлено in_force @2016-03-01, которое вводит сам закон статьёй 41 п. 1. (3) Преамбула приказа закреплена фрагментом §194. Найденный зазор: check_delegation сверял holder ровно формы entity_ref, которая встречается в рукописных ir.json векторов и не встречается в CLIR корпуса ни разу — константа .law лоуверится в const_ref, и на единственной форме, которую порождает компилятор, звено «издатель» проходило ВСЕГДА; синтетическая фикстура этого показать не могла, потому что была написана в той же форме, что и проверка. Теперь поимённые формы сверяются обе, а несверяемая (var) даёт предупреждение LDC-W5301 вместо молчания. Ворота ci/check_delegation.py — 12/12 → 18/18: три ветки на формы holder-а (включая канарейку, зелёную до правки по неверной причине) и три на живой паре.

  • Errata E-0039: тип Jurisdiction употреблён нормативно и не объявлен ни одним словарём; ворота check_std_registry расширены на ось ТИПОВ. Закрыт остаток, названный E-0037. STD_TYPES (law-hir/src/lower/helpers.rs) — имена, которые компилятор разрешает в urn:law:std#N, — нёс Jurisdiction, а спецификация его не называла ни §35, ни одним из §257–§266; LAW_STD оракула не нёс вовсе. Употреблён он при этом нормативно трижды: §54 печатает const KZ: Jurisdiction = Jurisdiction { code: "KZ" }; каноническим примером const, §89 объявляет им первое поле EvaluationContext, а вендоренный пример spec/examples/kz/social-code-art175.law пишет им параметры двух relation. Измерено сверкой всех 26 имён: Jurisdiction — единственное без словаря и единственное вне LAW_STD, то есть у двух реализаций были разные представления о том, какие типы существуют.

    Квалификация — дефект SPEC; реестр компилятора прав. Удалить имя нельзя: LDC-E2101 получили бы §54 и вендоренный пример, а с ним check_lower. Направление правки обратное обычному — prose догоняет реализацию, как у E-0037. Семантика 0.1 неподвижна: differential остаётся байтовым 115/115. Package выбран, а не подразумевается — law.std.data §257 рядом с CountryCode (§54 строит Jurisdiction { code: "KZ" }, то есть код, называющий правопорядок); §35, law.std.actors §261 и новый package отвергнуты с разбором.

    Соседи по §89 в std НЕ внесены — главное решение. Напрашивался перечень для Territory, LegalTime, SnapshotRef, CalendarRef и прочих полей контекста; он неверен, и цена измерена. Имя в STD_TYPES перекрывает одноимённую entity пакета: объявление остаётся в namespace пакета, употребления адресуют urn:law:std#N, диагностики нет. Опыт в отдельном worktree: Territory, добавленный в список, отцепил шесть употреблений в kz.corpus.legal_acts и kz.corpus.healthcode от их объявлений при зелёном lawc check. Критерий членства поэтому — «автор пишет это имя, не объявив», прямо из формулировки §257–§266 после E-0037; ему отвечает один Jurisdiction.

    Правка: §257 + Jurisdiction; §35 называет его библиотечным типом, а свой перечень — закрытым; Часть XXXIII получает абзац о второй нагрузке закрытости на типах; §89 получает §89.2 «Статус типов полей контекста». Исполняемого кода — одна строка в LAW_STD.

    Обязательство отрицательное, исполнено воротами: четыре новые сверки (STD_TYPES ⊆ §35 ∪ §257–§266; минус §35 ⊆ LAW_STD; отсортирован; реестр типов у компилятора один). Канарейка ужесточена — 13 мутаций против 7, и каждая обязана ронять СВОЮ сверку по отпечатку сообщения, а не непустоте списка. Ужесточение сразу поймало собственную мутацию ворот: «package пропал из перечней prose» роняла живучесть разбора, а не сверку 1, и ветка «package есть в LAW_STD, но не назван §257–§266» не исполнялась ни разу с заведения ворот.

  • Errata E-0035: канал суждения §47.3 имеет тело и не мог нести метку §218 — десять живых объявлений в пяти пакетах корпуса звали себя идентификаторами. §218 после E-0011 читается однозначно: метки несёт любая декларация с телом, а перечень исключений закрыт и перечислен поимённо (function, enum, const, concept, role, алиасы типов). external judgment relation тело имеет, в перечне не стоит — и метку не принимал: external_item грамматики допускал только capability, snapshot_from, authority, request_schema и metadata_item. label в теле давал LDC-E0201, причём по диагностике на каждый токен метки — семь на одну строку.

    Квалификация — дефект SPEC. Расхождения между реализациями нет и быть не может: поверхность одна, живёт в lawc, и грамматике она не противоречит — противоречат друг другу §218 и grammar.ebnf. Прежняя запись в этом журнале называла случай «границей поверхности, а не пробелом разметки»; квалификация была неверной, и проверяется она за одну минуту — границы §218 перечисляет поимённо, канала суждения в перечне нет.

    Цена пробела была двойной, и вторая половина не видна из храповика. Канал суждения предъявляется читателю ДВАЖДЫ: в вербализованной норме, которая на него ссылается, и в самом JudgmentRequest §47.3, где вопрос адресован органу. Обход, применённый в anti-corruption (назвать суждение соседним институциональным предикатом с меткой), закрывал только первое место: соседнего предиката в вопросе к суду нет, и суд получал illegal_gain_recovered. Измерено: 10 объявлений в 5 пакетах, и в каждом из пяти каналы суждения составляли весь неразмеченный остаток словаря — kz-anti-corruption 2, ru-samokat-eula 3, us-fnma-income 3, kz-criminal-code 1, kz-legal-acts 1. Пять пакетов не могли достичь полной разметки ни при какой дисциплине автора, а храповик держал остаток как норму.

    Правка аддитивная. Тело external_relation_decl переведено с external_item на новую продукцию external_relation_item = external_item | label_item; §47.3 показывает метку в примере, §218 уточняет, что телом здесь называется тело из items, а не из операторов. Парсер разбирает метку общим label_item, откуда она уезжает в конверт декларации и снимается attach_decl_envelope — то есть лоуверинг менять не пришлось вовсе.

    external function в правку не вошёл, и причина глубже поверхности. Метку там некуда положить: такая декларация в 0.1 не понижается в узел вовсе (LDC-E1305), а её тело парсер не разбирает, а пропускает балансировкой скобок — любое содержимое принимается молча. Допусти грамматика метку в общем external_item, она была бы принята и потеряна без единой диагностики; ради этого продукции и разделены, а не ради аккуратности.

    Петля G-M1b закрыта тем же коммитом. Рендерер ir→law такой узел писать ОТКАЗЫВАЛСЯ (сторож or labels в ветке judgment vectors/tools/artifacts/render.py), то есть до errata метка канала не выражалась и на обратном ходе. Сторож снят, метка печатается внутри external-формы, и ci/check_lower держит байты.

    Векторы — два, потому что утверждений два. ERR-E0035-JUDGMENT-LABEL (static): файл ПРИНИМАЕТСЯ и LDC-E0201 НЕ звучит — второе не следует из первого, потому что парсер восстановления после ошибки продолжает разбор и мог бы принять файл, отругав метку. ERR-E0035-JUDGMENT-LABEL-HASH (hash-compare): пара, различающаяся только меткой канала, даёт равный semantic hash §209 и различные content hash узлов §202.

    Корпус размечен, и безопасность правки измерена, а не обещана. Десять каналов названы по-человечески на языке своего акта; после пересборки CLIR semanticHash всех пяти пакетов совпал байтово с прежним, а content hash сдвинулся ровно у десяти размеченных узлов и ни у одного другого — то есть approvals не переходят в stale, semantic diff §215 не показывает изменения семантики, differential остаётся байтовым (E-0010). Все 44 сценария пяти пакетов зелены. Пять пакетов впервые размечены целиком: неразмеченных объявлений словаря 0.

  • Храповик разметки получил третий язык: RATCHET_LANGUAGES — ("kk", "ru", "en"). Пара ("kk", "ru") объявляла английские метки «не обязательством разметки», и это было верно ровно до тех пор, пока английских пакетов в корпусе не было. Их три — uefa-ucl, us-fnma-income, us-federal-holidays, — они размечены по-английски целиком, и до этой строки их разметку не удерживал ни один храповик: плоские числа держат факт наличия метки, а не её язык, поэтому подмена английской метки любой другой прошла бы молча, а англоязычный документ звал бы объявления идентификаторами. То же слепое пятно, ради которого разрез заведён (DECISION-0032 §4), — только на третьем языке. Раздел languages.en дописан в каждую строку corpus/label-ratchet.json полом по снятому значению; чужие числа не понижены — понизить чужой пол значило бы молча снять чужую защиту. Template pack английского при этом не существует, и это не препятствие: храповик мерит МЕТКУ — человеческое имя объявления, которое читают и вне вербализации (витрина, law_rules, JudgmentRequest §47.3).

  • Errata E-0037: §258 не называл четыре терма, которые исполняют обе реализации, — и проверки «prose против реестра» для std-имён не было ни одной. Перечень law.std.time §258 стоял на шестнадцати именах (типы + предикаты интервалов), а реестр LAW_STD, оба списка исполнимых термов и оба ручных реестра компилятора несли сверх него add_business_days (§86), add_calendar_period (§84.2, E-0029), days_between (§84.4, E-0015) и hours_between (§84.1, E-0028).

    Квалификация — дефект SPEC, восполнение перечня, а не изменение семантики (форма E-0030: «словарь не называет то, что реализовано»). Не дефект реализаций: они согласны друг с другом и с prose §84/§86, где семантика каждого терма определена нормативно. Не изменение семантики 0.1: §84/§86 не тронуты, поведение неподвижно, голдены не двигаются, differential остаётся байтовым; правится словарь, а не язык.

    Почему накопилось. Перечень вошёл в чек-лист errata только с E-0036 («плюс нормативный перечень law.std.money §260») — и ровно этот перечень сегодня сходится. E-0015 объявила состав law.std.time изменившимся и не изменила ни одного перечня (заодно сославшись на §257 вместо §258); E-0028 реестров не назвала вовсе; E-0029 назвала ТРИ места у каждой реализации и остановилась. add_business_days §86 старше всех трёх и не был назван никогда. Измерено сверкой всех десяти перечней: §258 — единственный разошедшийся.

    Молчали все три ноги контура. Differential сравнивает БАЙТЫ двух реализаций — согласное отклонение обеих от prose он не видит по построению. Схемы состав std не выражают: CallTerm описан для любого имени (проверено grep-ом по spec/schema/ и conformance/ — ни одного std-имени). Lean читает proof-графы.

    Правка (аддитивная): §258 получает пятую строку с четырьмя термами и абзац, отделяющий их от Boolean-предикатов интервалов; Часть XXXIII получает закрытость перечней §257–§266 прямым предложением (по образцу §179) и НЕСИММЕТРИЧНОЕ направление: «реализуемое ⊆ словарь» жёстко, обратное включение не требуется — имя, названное перечнем и не реализованное (currency_convert §260), есть объявленная поверхность 0.1, и сужать словарь под реализуемый срез значило бы дать реализации право определять язык.

  • Порт / над Decimal-семейством в law-eval: differential перестал молчать о трети живых вызовов. Ветка "div" движка считала только Integer / Integer и Rational / Rational; три пары §58 с делителем Decimal (Decimal, Money, Quantity) отвечали UNSUPPORTED_IN_SLICE — ПРЕЖНИЙ пробел среза, оставленный при выводе видов арифметики и не следствие E-0020/E-0036. Оракул их считал: 10-гладкий знаменатель частного → точный Decimal, иначе Decimal / Decimal → точный Rational, а Money/Quantity → INEXACT_DIVISION (§18/§90).

    Цена измерена исполнением, а не оценена: на живом пакете fnma-income (семь правил делят Money) это 33 расхождения из 43 перехваченных вызовов ci/check_kz_differential.py. KZ-регрессия при этом была зелёной 19/19 — она спрашивает оракула, движка не спрашивает вовсе, и пробел жил ровно в зазоре между этими двумя фактами.

    Квалификация по инварианту 8 — дефект lawc (порт), не SPEC и не lawref. Прозе §58 обе реализации не противоречили: движок честно ОТКАЗЫВАЛ кодом «вне среза», а не считал иначе. Errata поэтому не заводится; закрытие вписано побочными записями к E-0020 и E-0036.

    Правка. exact_quotient в law-eval/src/values.rs — порт хвоста values.binary("div") вместе с _exact_decimal оракула: частное сводится к несократимой дроби на i128, знаменатель проверяется на 10-гладкость, и по её итогу выбирается вид ответа. Переполнение i128 отвечает Unsupported — как у add/mul/div_round: у оракула целые неограниченные, и честный отказ среза лучше неверного числа. Формулировки INEXACT_DIVISION и DIVISION_BY_ZERO совпадают с оракулом дословно — байтовый контракт §211 покрывает текст issue, и слово вида в нём своё у money и у quantity.

    Векторы T127…T133 — по вектору на прочтение §58: точный Decimal (8 = 2³ и 5 в одном терме — обе стороны k = max(двоек, пятёрок)), точный Rational (1,0/3,0 + литерал 1/6 = 1/2, канон E-0005), Money и Quantity с сохранением валюты и единицы, оба отказа порознь и делитель 0.00 — предложение §58 «division by zero не превращается в UNKNOWN» до сих пор не имело вектора ни одного. Все семь в SUPPORTED; измерено: 0/7 против движка ДО правки, 114/114 после (было 107 — ровно +7). В ci/check_kz_differential.py байтовый контракт 2706/2706, расхождений ноль; сам гейт красен по другой причине — храповик покрытия корпуса, — и она к порту не относится: KZ-регрессия зовёт оракула, а правка в law-eval. Замороженные голдены неподвижны.

  • Errata E-0036: деление под явной политикой округления — терм div_round (§58/§50). §58 обещал у Money / Decimal и Quantity / Decimal, что при неточном делении округление законно «только явной policy §50/§18», — а применить её было НЕ К ЧЕМУ: round §50 берёт уже вычисленное значение, а вычислить частное / не даёт (INEXACT_DIVISION). У пары Decimal / Decimal дыра зеркальна: / возвращает Rational (E-0005/E-0020), который round не берёт. Обе закрывает один терм — деление и округление в нём ОДНА операция над точным частным, потому что композиция двух невыразима с обеих сторон.

    Делимые — те же три пары §58 с делителем Decimal; вид результата — вид делимого. Integer / Integer и Rational / Rational исключены осознанно: их частное точно всегда, а округление сменило бы вид Rational → Decimal (§48 конверсий не знает). Границу задал контрпример корпуса — фараид несёт норму «Округление не допускается ни на одном шаге расчёта», и исполняет её система типов, а не правило пакета. Округление применяется ВСЕГДА, а не только при неточном частном: иначе точность результата зависела бы от значения, а не от нормы. precision ограничен 0…34 явно и одинаково в обеих реализациях — иначе они разошлись бы на переполнении i128, то есть не на семантике. / не изменён ни на одной паре: норма без политики по-прежнему получает INEXACT_DIVISION, тихого HALF_UP не появилось.

    Цена измерена корпусом: семь правил fnma-income; Социальный кодекс ст. 123/127 (разрыв дохода за КВАРТАЛ вместо месячного назначения); ст. 78 — income * (days / 30.0) исполнимо ровно при числе дней, кратном трём (66 значений из 200), а оба сценария регрессии выбрали 126 и 30, и пробел был воротам невидим.

    Полный круг: prose §58/§50/§260 + пять реестров (values.py, values.rs, std_registry.py, law-hir/types.rs, law-hir/lower/helpers.rs) + векторы ERR-E0036-DIV-ROUND и ERR-E0036-DECIMAL-QUOTIENT в SUPPORTED, differential 107/107 байтово; 13 проверок селфтеста оракула и два юнит-теста движка на тех же входах. Схемы не менялись, schemaVersion не бампается.

  • «Қара сөз» Абая Құнанбайұлы: пакет kz.corpus.qarasoz — первый источник корпуса, который НЕ ПРИТЯЗАЕТ БЫТЬ ПРАВОМ. Сорок пять прозаических слов, написанных между 1890 и 1898 годами; ни съезд, ни собрание, ни автор не придавали им силы. Проверяется не право, а применимость аппарата к нормативному тексту без органа, без санкции и без срока. В корпусе это диптих с «Қарамола ережесі» (1885): у обоих текстов один автор — ереже готовила комиссия во главе с Абаем, — и обе формализации мерятся одними воротами.

    Закреплено тело публикации портала abai.kz (PINNED_UNOFFICIAL_COPY, 214 103 байта) — новым срезом extract_source_text.py --abai-post-body, с проверкой обеих границ: страница несёт ленту новостей и комментарии читателей, и закрепить её целиком значило бы внести в репозиторий высказывания третьих лиц и свести долю §33.1 к величине о вёрстке портала.

    Новая единица деления §33.1 — «слово». Заголовок стоит числительным прописью («ЖИЫРМА ЖЕТІНШІ СӨЗ»), номера в тексте нет вовсе, и шести автоматических конвенций не хватало: произведение было бы для обеих мер невидимо МОЛЧА (тот же отказ, что у «26-бап» и топика Fannie Mae). Единица объявляется "unit": "word", таблица числительных живёт в articles.json самого акта, и оттуда её читают обе меры (ci/check_source_pinning.py, boundaries.py) и генератор фрагментов.

    Меры: покрытие текста 100,0 % (214 059 из 214 103 байт; непокрытые 44 — переводы строк между словами), учёт 45 из 45 слов при нуле объявленных границ, глубина EXECUTABLE 45 / ANCHORED 0 / SOURCE_ONLY 0. 120 правил, 9 closure, 4 приоритета; 30 проверок QS-01…QS-29 (у слова 31 их две — QS-12 и QS-12B: перечень читается конъюнкцией, и пара доказывает это) в KZ-регрессии, 30 из 30 вызовов байтово совпали у обеих реализаций.

    Ни одной позиции §122: текст дважды говорит словом обязанности («иман парыз», «құлшылық қылмаққа қарыздар»), но у этого парыза нет ни срока, ни органа, ни последствия нарушения, и вывод доходит до квалификации и останавливается — как у «De legibus».

    Что нашлось исполнением: слово 38 объявляет два вида самопревознесения и перечисляет три (выводятся оба числа и факт расхождения); слово 32 ссылается на «он тоғызыншы бап», а перечень стоит в слове 31 (неразрешимость выводится, а не чинится правкой источника); разные слова сходятся на одном предикате, и §111 переносит поражаемость слова 30 на цепь слова 3.

    Дефект lawc, найденный исполнением (квалификация по плану §2.4): гард (a == OrysGylymy) — сравнение переменной с константой-сущностью — lawc check принял молча и выдал чистый CLIR, а оракул отверг правило TYPE_ERROR и вместе с ним весь пакет. Ворота лоуэринга были зелёными при неисполняемом праве.

  • Таможенный кодекс Республики Казахстан № 123-VI: пакет kz.corpus.customs_code, Разделы 1–7 (Главы 1–63, ст. 1–543) закрыты — все 65 глав кодекса рассмотрены. Закреплён весь консолидированный текст (26.12.2017, редакция портала «Әділет» на 28.08.2026, PINNED_UNOFFICIAL_COPY) — 590 заголовков статей (1–571 с учётом 18-1, 392-1..392-10, 416-1, 528-1..528-7), крупнейший акт корпуса на сегодня (4,26 МБ). Все статьи адресуемы фрагментами (code_article_addressed, corpus/tools/sync_customs_code_fragments.py по образцу Предпринимательского кодекса). Раздел 1 (Гл. 1–6): приоритет международного договора и Кодекса над иными законами (§4), исчисление сроков через add_calendar_period (§6 пп. 3–6, 8), применимая дата регулирования (§7); возмещение убытков от (не)правомерных решений (§15 пп. 2–3), лимит контроля при остановке ТС (§18 п. 1), право на обжалование (§21); срок уведомления о запрете (§32 п. 3), режим повреждённых товаров (§35), статус товара ЕАЭС у конфискованных товаров (§36), условия разрешения на отбор проб (§37 п. 2); сроки решения о классификации товара, первый срез с add_business_days (§44 п. 5, §45 п. 3, §46 пп. 1–2, календарный снимок §85 подключён — run_customs_code принимает второй CLIR, official_calendar); тот же каркас для решения о происхождении, срок действия — производный от сертификата (§60 п. 5, §61 п. 4, §62 пп. 1–2); статьи, где таможенная стоимость не определяется (§65 п. 3), условия применимости метода 1 (§66 п. 1). Раздел 2 (Гл. 7–13): своевременность уплаты сбора за декларирование и освобождения от сборов (§77 п. 2, §80 п. 1); применимая дата ставки, срок уплаты при незаконном перемещении, срок исковой давности 3/5 лет (§84 п. 1, §88 п. 4, §89 п. 2); месячный лимит процентной отсрочки, пятидневный срок решения об отсрочке (§92 пп. 1, 6); срок заключения договора залога, непригодное для залога имущество (§101 пп. 2, 4); срок сведений об отсутствии задолженности (§107 п. 1); основания признания задолженности безнадёжной (§121 п. 1); срок уплаты и срок давности для антидемпинговых/компенсационных пошлин — текстовый близнец §89 в отдельном фактовом пространстве (§138 п. 3, §143 п. 2). Раздел 3 (Гл. 14–20): освобождение декларанта от ответственности при своевременной доплате, срок подтверждения сбоя цифровой системы (§150 п. 3 пп. 7, п. 3 ч. 2 пп. 8); срок уведомления об аварийных грузовых операциях, срок уплаты при недоставке (§156 п. 3, §157 п. 4 пп. 1); срок уплаты при утрате товаров при убытии (§163 п. 3); срок временного хранения 4/6 месяцев, срок рассмотрения заявления об операциях (§172 пп. 1–2, §173 п. 2); срок подачи декларации, связанный с Главой 17 через TemporaryStorage (§181); срок выпуска товаров — 4 часа по общему правилу и 1 рабочий день при продлении, независимые правила без приоритета (§193 пп. 1, 3); день обращения в собственность государства по процедуре отказа — §205 (по решению суда) не продублирован, содержа- тельно уже покрыт §36 Главы 3 (§206). Раздел 4 (Гл. 21–38, таможенные процедуры): семнадцать видов процедур (§207 п. 2), у каждой — один-два чистых числовых срока поверх многоветвевой государственной машины возникновения/прекращения обязанности по уплате платежей, оставшейся входом (тот же выбор среза, что у Глав 7–9). Пятнадцать календарных дней на завершение процедуры при привлечении к ответственности, первое использование add_business_days с unit calendar_day (§213 п. 5); трёх- и пятилетний сроки при выпуске для внутреннего потребления (§215 п. 2 пп. 1, §216 п. 4 пп. 1); годичный срок вывоза при завершении СЭЗ экспортом (§219 п. 5); крупнейшая глава раздела — день на решение об изменении места доставки и три часовых срока автомобильного транзита, сроки по воде/воздуху/железной дороге остались входом (§225 п. 7, §231 пп. 3, 7, §232 п. 1 пп. 1); шестидесятидневный срок при прекращении функционирования таможенного склада, пятидневные сроки размещения и вывоза (§237 п. 4, §239 п. 1, §241 п. 4); три процедуры переработки (на территории / вне территории / для внутреннего потребления) — текстовые близнецы в отдельных фактовых пространствах, тот же приём, что у §89/§143 (§245 п. 3, §253 п. 6; §258 п. 3, §264 п. 9; §270 п. 3, §277 п. 5); четырёхмесячный и два шестимесячных срока свободной таможенной зоны — отдельные отношения sez_procedure_end_due_by/_status_loss, чтобы не повторить коллизию Главы 14 (§285 п. 11, §287 п. 1 пп. 1–2); шестимесячный срок свободного склада (§296 п. 1 пп. 1); десятидневные сроки рассмотрения заявлений о продлении временного ввоза/вывоза, пятнадцатидневный перенос при отказе (§302 пп. 4–5, §310 п. 4); шесть/девять месяцев на зачёт пошлин при реимпорте — четвёртый приоритет пакета, тот же паттерн defeater’а атома, что §7/§46/§172 (§318 пп. 1–2); четырёхмесячный срок вывоза и трёхдневный перенос на временное хранение при реэкспорте (§321 пп. 2–3); пятидневный срок декларации при отказе в выпуске и трёхмесячный срок при закрытии магазина беспошлинной торговли, срок «не позднее 10 числа следующего месяца» не формализован — день- число-месяца вне add_calendar_period/add_business_days (§327 пп. 3, 6). Главы 36–38 (уничтожение, отказ в пользу государства, специальная процедура) без собственного числового условия сверх уже покрытого — не заведены отдельными правилами. Раздел 5 (Гл. 39–45-1, особенности перемещения отдельных категорий товаров): двухмесячный срок уведомления переселяющегося иностранца (§342 п. 5); тридцатидневные сроки помещения транспортного средства международной перевозки под процедуру после передачи права собственности и подачи заявления о нестандартных операциях (§359 п. 8, §360 п. 4); трёхчасовой срок доведения запрета ввоза почтовых отправлений, двухдневный срок помещения на хранение (§369 пп. 6, 11); десятидневный срок декларирования внеплановых перетоков электроэнергии, пятнадцатидневный срок ответа на запрос об учёте (§374 п. 5, §375 п. 9); шесть сроков электронной торговли — 30/60 дней выпуска и завершения процедуры при исключении оператора из реестра (разные последствия одного триггера, отдельные отношения, тот же приём, что у Главы 29), 3 и 5 рабочих дней на размещение и уведомление о возврате товаров, 5 рабочих дней на декларацию при отказе в выпуске, 10 рабочих дней на уведомление о неуплате пошлины (§392-3 п. 4, §392-6 пп. 7, 11, 13, §392-8 п. 20). Первое использование иерархических номеров статей в анкорах — имя фрагмента несёт подчёркивание (CC_ART392_3), locator несёт дефис отдельно ("article/392-3"); сверено с 99-sources.law до компиляции. Главы 41 (припасы) и 44 (дипломатические и консульские лица) на этом срезе прочитаны по шаблону срока и помечены без условия; при отзыве (см. отдельную запись ниже) сплошное повторное чтение нашло в обеих условные правила без единиц времени. Глава 45 (перемещение через территории третьих государств) при том же повторном чтении подтверждена без собственного числового условия — не заведена отдельными правилами. Раздел 6 (Гл. 46–55, проведение таможенного контроля): тридцатидневный срок завершения проверки происхождения товаров (§397 п. 3); шестидесяти- и десятидневный сроки представления документов при проверке после выпуска, двухчасовой срок акта таможенного осмотра, однодневный предел осмотра помещений, трёх- и десятидневный сроки при ликвидации проверяемого лица (§410 пп. 14–15, §412 п. 5 пп. 1, §415 п. 8, §416 п. 6-1); двадцать четыре часа на организацию таможенного и электронного сопровождения (§429 п. 6, §437 п. 5); месяц/два месяца на исполнение запроса и поручения о контроле (§445 п. 6, §447 п. 7); тридцать календарных дней хранения задержанных товаров по умолчанию, вытесняемых двадцатичетырёхчасовым сроком для скоропортящихся товаров (пятый приоритет пакета), три дня для случая статьи 32, три года на возврат сумм от реализации (§454 пп. 1–2, §457 п. 2); двадцати- и пятнадцатидневный сроки реестра объектов интеллектуальной собственности, первое правило пакета, считающее срок в обратном направлении — сложением, а не вычитанием, — для проверки, что заявление о продлении защиты подано вовремя, трёх- и однодневный сроки исключения из реестра, двухлетний предел срока защиты (§461 пп. 7–8, §462 п. 1, §463 п. 2, §464 п. 1); трёх- и двадцатидневный сроки таможенной экспертизы, пятнадцать рабочих дней на невостребованные пробы (§466 п. 8, §468 п. 1, §471 п. 9); тридцатидневный срок подачи жалобы, тридцати- и сорокапятидневный сроки решения по ней — шестой приоритет пакета, срок для крупных налогоплательщиков вытесняет общий (§476 п. 1, §479 п. 1). Найдена коллизия по совпадению слов, не по имени: черновик §410 п. 14 предполагал переиспользовать declaration_registered_on с сигнатурой (declaration: CustomsDeclaration, day: Date), но существующее одноимённое отношение (Глава 1, §7) типизировано на RegulatedMovement — lawc check поймал несовпадение типа аргумента (LDC-E2104) при первой сборке; заведено отдельное имя. Главы 49 (цифровые системы) и 51 (система управления рисками) — институциональные, без собственного числового условия — не заведены отдельными правилами. Раздел 7 (Гл. 56–63, лица в сфере таможенного дела и уполномоченный экономический оператор): семь реестров с текстово тождественной структурой жизненного цикла (заявление → включение → приостановление → исключение → сообщение об изменениях); Глава 57 (таможенный представитель) формализована полностью, семь сроков — образец (§490 пп. 4–5, §491 п. 3, §492 п. 2, §494 п. 1 пп. 5); Главы 58–62 и 62-1 (перевозчик, владелец СВХ, владелец таможенного склада, владелец свободного склада, владелец магазина беспошлинной торговли, оператор электронной торговли) на этом срезе формализованы двумя первыми сроками образца — рассмотрение заявления и уведомление о включении, — остальные пять сознательно не продублированы семь раз подряд (реестры юридически самостоятельны, тот же приём, что у §89/§143 и Глав 26–28); при отзыве (см. отдельную запись ниже) решение пересмотрено, все шесть глав доведены до полного образца — семь правил каждая. Глава 63 (уполномоченный экономический оператор) структурно самостоятельна: восемь своих сроков от девяноста календарных дней на решение о свидетельстве до ста двадцати календарных дней на подтверждение устранения причин приостановления (§533 пп. 2, 7, 10, 15–16, §534 пп. 2, 4, 8). Глава 56 — пять рабочих дней на требование к поручителю и пять рабочих дней на его исполнение (§486 п. 15). Итого на этом срезе 183 правила, 6 приоритетов; 170 сценариев CC-01…CC-169 (CC-110B делит случай с CC-110) в семействе customs_code KZ-регрессии, точечный дифференциал байтовый (171/171 перехваченных вызовов). boundaries.py: 104 EXECUTABLE / 486 ANCHORED / 0 SOURCE_ONLY из 590 — заголовок «полная формализация» здесь про полноту адресуемости текста, не вывода; все 65 глав кодекса рассмотрены. Эти числа обновлены отзывом ниже.

    Раздел 8 («Заключительные и переходные положения», §544–571, 28 статей) прочитан целиком и сознательно не даёт исполнимых правил — по итогу чтения, а не по недосмотру. Каждая статья — одна из трёх форм: (1) триггер уже прошёл (исторические даты 2018–2021: §544 п. 1, §555, §558 п. 3, §559 п. 1, §570 п. 1, §571); (2) условие ссылается на решение Комиссии, которого нет в этом корпусе и которое нельзя подтвердить, не сфабриковав факт (§546 п. 1, §552, §553 пп. 5–7, §558 п. 1, §560 п. 3, §566, §568 — большинство раздела); (3) содержание — временная РЕДАКЦИЯ уже формализованной статьи текстом внутри переходного положения (§550 переопределяет §89, §551 — §143, §564 — абзац §125), требующая второго временного слоя через rule temporal qualifiers (§87), ни разу не понадобившегося на этом срезе. Ни одна форма не формализуется без фабрикации факта о решении Комиссии либо ввоза в корпус второго нормативного текста (Таможенного кодекса Таможенного союза, Кодекса РК от 30.06.2010), которых здесь нет. Раздел остаётся ANCHORED — 28 фрагментов уже адресуемы через 99-sources.law. Итог по всему акту на этом срезе: 104 EXECUTABLE / 486 ANCHORED / 0 SOURCE_ONLY из 590 — измерено, не предположено; заголовок «полная формализация» был обещанием полноты адресуемости и честного учёта глубины, а не полноты вывода из каждой статьи. Эти числа обновлены отзывом ниже — Раздел 8 сам по себе отзыв не оспорил.

    Найдена коллизия имён: Глава 14 объявила violation_detected_on с другой сигнатурой, чем уже существующее отношение из Главы 1 — lawc check поймал её при компиляции (LDC-E1201, LDC-E2104), без последствий для уже принятых глав. С этого момента новое имя проверяется на коллизию (grep -rn "^relation \|^entity " corpus/laws/customs-code/*.law | sort | uniq -d) до попытки компиляции, а не после.

    Четыре находки о существующей семантике, не специфичные для этого акта: (1) add_calendar_period действительно читает policy.start_count next_day как сдвиг АНКОРА перед счётом периода, а не как косметический маркер рядом с вычислением — семилетний срок от 15 марта истекает 16-го; (2) приоритет между defeasible-правилами гасит буквальные P/not P одного ground-атома, а не выбирает между правилами, выводящими РАЗНЫЕ значения одного отношения — конкурирующие даты §7 и сроки §46 потребовали defeater’а, явно отрицающего тот же атом, а не приоритета между производящими правилами напрямую; заход со strict-правилом поверх defeasible-предиката режима отклонён компилятором как LDC-E4103 LATE_STATUS_PRODUCER (§111) — status-sensitive потребление defeasible-вывода из strict в 0.1 недоступно, это L3; (3) strict-правило с отрицательной головой (then not P) не даёт FALSE_ONLY даже при выполненной посылке — обнаружено на §15 п. 3, лечится тем же приёмом, что и остальные отрицательные головы пакета: правило становится defeasible; (4) policy.month_end запрещён у дневных единиц add_business_days (unit ∈ {business_day, calendar_day}) — DEADLINE_POLICY_INVALID, поле относится только к calendar_month/calendar_year (§86); первый срез пакета со счётом calendar_day (§213 п. 5) заводит отдельную PLAIN_DAY_POLICY (roll: no_roll, без month_end) вместо переиспользо- вания CALENDAR_POLICY.

  • Таможенный кодекс: отзыв по условию «полная формализация» и его закрытие (28.08.2026). Контур самопроверки сессии отверг промежуточный итог 104 EXECUTABLE / 486 ANCHORED (запись выше) как не отвечающий заявленному условию, указав на Раздел 8 целиком, пять глав без правил (41, 44, 45, 49, 51) и семь реестровых глав Раздела 7 с двумя правилами из семи образца. Раздел 8 подтверждён отзывом без возражений (обоснование выше не оспорено). Остальное закрыто по существу:

    Главы 41, 44, 45, 49, 51 перечитаны СПЛОШНЫМ текстом, а не повторным поиском по шаблону срока — прежняя разметка «без условия» опиралась на регекс по единицам времени и не отличала отсутствие дедлайна от отсутствия любого условного правила. §364 п. 4 Главы 41 (статус товара ЕАЭС у припасов по факту опознания таможней при обратном ввозе) и §381 пп. 1–3 Главы 44 (льгота по пошлине дипломатическому/консульскому лицу с вытеснением для почётного консула, приём defeasible+priority, новый приоритет пакета) — обычные условные правила без единиц времени, заведены новыми файлами 41-supplies.law и 44-diplomatic-persons.law. Найдено при этом: not над kind empirical в strict-теле в этом движке не есть closed-world negation-as-failure — правило с посылкой and not p(x) при отсутствии факта p(x) даёт NEITHER, не срабатывает как при его логическом отрицании; лечится собственным положительным фактом «невозможности» вместо отрицания (customs_unable_to_identify_returning_supplies, тот же приём, что debt_collection_impossible Главы 12). Главы 45, 49, 51 при том же сплошном чтении подтверждены без правила: Глава 45 — государственная машина условий транзита и передач Комиссии, Главы 49 и 51 — институцио- нальные полномочия и определения (у Главы 51 критерии степени риска прямо объявлены конфиденциальными и не выражены в тексте акта).

    Главы 58–62 и 62-1 доведены с двух правил до полного образца Главы 57 — семь правил каждая (заявление, решение и уведомление о приостановлении, решение и уведомление об исключении, изменение сведений), отдельными сущностями на главу. Прежнее обоснование «семикратное повторение не даёт нового знания» верно для юридического СОДЕРЖАНИЯ (структура тождественна Главе 57), но не снимало того, что реестр без правил о приостановлении и исключении оставляет свои решающие пункты ANCHORED без причины сверх экономии печатных правил — решение пересмотрено.

    Итог: 104→124 EXECUTABLE, 486→466 ANCHORED (boundaries.py); 218 правил и 12 приоритетов на весь пакет (было 183/6 на момент закрытия Раздела 7 в записи выше — цифра приоритетов там сама уже отставала от факта: девять штук стояли в более ранних главах, не только шесть; пересчитано прямым grep -c "^priority " corpus/laws/customs-code/*.law, а не по памяти); 205 сценариев customs_code (было 170) — CC-200…CC-204 довязаны вне последовательной нумерации тем же приёмом, что CC-110B. Точечный дифференциал (diff_customs.py) — 206/206 байтовых; полная KZ-регрессия и lawc check пакета чисты; scenario-ratchet.json и label-ratchet.json подняты точечной правкой (584/218 размеченных объявлений/норм).

  • Доход от занятости по Fannie Mae Selling Guide: пакеты us.fnma.selling_income и us.code.federal_holidays. Формализованы разделы B3-3.1, B3-3.2 и B3-3.3 руководства (редакция 04.03.2026, Announcement SEL-2026-02) — от документов дохода до qualifying monthly income; девятнадцать сценариев FNMA-01…FNMA-16 в семействе fnma регрессии, под KZ-differential. Шестой неказахстанский акт корпуса и второй частный: нормодатель — корпорация, принуждение договорное. Закреплено 60 048 байт (пятнадцать топиков, воспроизводимое извлечение corpus/tools/fetch_fnma_b3_texts.py, повторный --check по сети даёт те же байты); фрагментов 20, единица — раздел ВНУТРИ топика; учёт §33.1 — 9 формализовано, 6 объявлено границей с полем despite, неучтённых 0. Задание называло срез «B3-3.1 (Employment and Other Sources of Income)» — так глава делилась в прежних редакциях; расхождение решено в пользу закреплённого текста и записано в README пакета.

    Первый акт корпуса, чей срок считается в РАБОЧИХ днях по календарю чужого акта: 5 U.S.C. §6103 закреплён отдельным пакетом (публикация GPO, corpus/tools/fetch_usc_6103_text.py), а календарь 2026 года ВЫВОДИТСЯ его исполнением (gen_kz_clir.us_federal_calendar_2026) — подстановка §6103(b)(1) за субботу 4 июля даёт нерабочим 3 июля, и десятый рабочий день после проверки занятости сдвигается на день. Подстановка выражена отрицательной головой с приоритетом §116: одной положительной нормы не хватает — key(h) двух разных дат конфликтом не считает.

    Найдено этой формализацией и записано в STATUS.md: деление Money под явной политикой в v1 НЕВЫРАЗИМО (все четыре обхода проверены исполнением; §58 обещает policy, применить её не к чему); приоритет §116 применяется только ВНУТРИ страты §110 и через страту молчит при чистом lawc check; external judgment relation не принимает метку §218, отчего каждый канал суждения §47.3 числится неразмеченным.

    Реестры: ACT_RUNNERS/CLIR_PACKAGES (corpus/kz/registry.py), LOWERED_ACTS (corpus/gen_kz_clir.py), scenario-ratchet.json (fnma: 19), label-ratchet.json, две строки --check в шаге 6/39 ci/run_all.sh. Конвенции учёта §33.1 расширены единицами деления «топик руководства» и «секция Кодекса США» с английским набором признаков исполнимого содержания (ci/check_source_pinning.py, .claude/skills/formalize-act/scripts/boundaries.py); ключ сортировки объявленных границ перестал требовать числовой номер статьи.

  • law_search — поиск по формализованному праву своими словами (DECISION-0040, черновик). Слой обнаружения над MCP-сервером: запрос (ru/kk) → кандидаты с адресами и следующим шагом; детерминированный лексический эмбеддер без внешних зависимостей (crc32-триграммы, 512 корзин, косинус), индекс в памяти с кэшем по отпечатку байтов corpus/clir, подстрочный фолбэк. Границы решения: эмбеддинги никогда не участвуют в вычислении ответа, ворота CI от индекса не зависят, law_ask не изменён. Генератор mcp/gen_embedding_index.py (файл — только в --out); тесты — секция 6д mcp/test_server.py.

  • law_search v2: лексический эмбеддер до предела перед выбором нейронной модели (DECISION-0040 §3a). Модель trigram-hash-idf/2: 2^20 корзин вместо 512 (главным дефектом v1 оказались коллизии хэша — целевые предикаты голден-запросов встают с мест 3–4 на место 1 от одной этой правки), IDF из тех же байтов корпуса (ключ кэша не изменён; шум «дегазации» с места 2 на 66; на 512 корзинах IDF инвертируется — порядок правок несущий), нарезка статей по пунктам «N.» (адрес кандидата — пункт, индекс видит всю статью, а не первые 1000 знаков), схлопывание байтовых зеркал пакетов в одну строку с alsoIn (~8% единиц — копии), порог 0.15 вместо мёртвого 0.05 — запрос по не формализованной области впервые даёт честное «похожего не найдено» (с явным package порог снят: скоуп выбран человеком). Генератор пишет разреженные векторы (law.embindex/0.2). Голден-запросы — ассерты секции 6д mcp/test_server.py; они же — измеренная планка, которую обязана перебить будущая нейронная модель (слот MODEL, §5 решения).

  • Аналитика в MCP-сервере: law_argue, law_loophole, law_amend + вопросы судье в ответах. Три инструмента поверх движков DECISION-0035/0039 (mcp/law_mcp/analysis.py): прочность вывода по профилю §274 (классы «неуязвим / лишь защитим / отвергнут / аргументов нет», правила — метками §218), bounded-поиск лазеек L8.2 (алфавит шагов сеется сущностями вопроса; цель, достижимая уже фоном, честно помечается alreadyReachable вместо вырожденных «лазеек») и синтез минимальной поправки L8.3 (keep-вопросы пиннят регресс, правки описываются словами юриста). law_ask и law_draft_eval при REQUIRES_JUDGMENT показывают вопросы судье — орган, предмет, заявленную форму ответа (§47.3, DECISION-0024/0036) — и несут их в structuredContent.judgmentRequests. Контракт закреплён десятью проверками в mcp/test_server.py (позитив, детерминизм x2, NO_ARGUMENT, alreadyReachable, судья в черновике).

  • Закон РК «О правовых актах» № 480-V ЗРК формализован целиком — 71 статья из 80 выводится правилами, девять оставшихся текста не имеют. Пакет corpus/laws/legal-acts/ (19 файлов, namespace urn:kz:corpus:clir:legal-acts). Особый в корпусе предметом: это не отраслевой акт, а метамодель самого законодательства — те же понятия, которыми Law DSL описывает любой другой акт (source, edition, вступление в силу, приоритеты §115), здесь становятся предметом вывода.

    Обе меры §33.1 названы обе, потому что порознь каждая обманывает: учёт — 80 из 80, объявленных границ 9, неучтённых 0; глубина — EXECUTABLE 71, ANCHORED 0, SOURCE_ONLY 9; байтовая доля закреплённой публикации 97,1 % (258 673 из 266 369, 80 фрагментов; непокрытое — меню и подвал страницы портала). Девять статей без нормы — не выбор автора, а состояние источника: ст. 21, 33, 33-1, 33-2, 38, 39, 41, 44 и 63 исключены изменяющими законами, на портале от них остался только заголовок; каждая объявлена в sources/legal-acts/articles.json с проверяемой причиной. Байты закреплены воспроизводимо (extract_source_text.py дважды даёт идентичный выход, PINNED_UNOFFICIAL_COPY), фрагменты режет corpus/tools/sync_legal_acts_fragments.py. 25 сценариев (ACT_RUNNERS["legal_acts"]), differential байтовый.

    Что этот акт дал корпусу впервые:

    • иерархия как ВЫВОДИМОЕ отношение, а не таблица. Уровень акта вычисляется из формы (п. 2 ст. 10), для производных — из формы основного акта (п. 4), а для форм «имеющих силу конституционного закона или закона», которых в перечне п. 2 нет вовсе, — из равенства юридической силы (пп. 28 ст. 1). Промежуточный шаг объявлен отдельным отношением equal_force_form, чтобы истолкование было видно и проверяемо, а не спрятано в константе;
    • молчание как проверяемое содержание нормы. П. 5 ст. 10 выводит из иерархии постановления высших судов и акты Председателя Совета Безопасности; уровня у них нет, и правило п. 1 ст. 12 по ним обязано НЕ ОТВЕТИТЬ. Сценарий LEG-03 проверяет именно NEITHER — появление ответа там будет отказом, а не улучшением;
    • различение вступления в силу и введения в действие. П. 1 ст. 42 (акт существует юридически) и п. 3 (акт начинает применяться) — разные события с разными датами; п. 3 ст. 12 разрешает коллизию по второму, а ст. 43 отсчитывает от него же обратную силу. Слитые в одно поле, они потеряли бы обе нормы;
    • шестидесятидневные нижние границы п. 4-1, 5 и 6 ст. 42 через календарь. Сценарий LEG-09: шестьдесят календарных дней от 2 марта истекают 1 мая — нерабочий день, и абз. 2 п. 3 ст. 14 переносит окончание на 4 мая. Ожидание записано по календарю §85, а не арифметикой по датам;
    • канал суждения §47.3 на КОЛЛИЗИИ актов. Предложение второе п. 4 ст. 64 отдаёт приоритет одного индивидуального акта над другим вышестоящему органу либо суду. external judgment relation с authority Court; LEG-18 проверяет REQUIRES_JUDGMENT и имя органа — сверка одного truthStatus приняла бы за успех обычное молчание §69.

    Метки §218: словарь 421 из 422, нормы 234 из 234. Единственное неразмеченное объявление — priority_decided: грамматика §47.3 принимает в теле external judgment relation только authority и request_schema, метка там синтаксически невозможна (LDC-E0201). Это граница поверхности, а не пробел разметки, и храповик держит ровно единицу.

  • Закон РК «О противодействии коррупции» № 410-V формализован целиком — 35 статей из 35. Пакет corpus/laws/anti-corruption/ (16 файлов, namespace urn:kz:corpus:clir:anti-corruption). Обе меры §33.1 названы обе, потому что порознь каждая обманывает: учёт — 35 из 35, объявленных границ 0, неучтённых 0; глубина — EXECUTABLE 33, ANCHORED 2 (ст. 5 и 6 — перечни цели, задач и мер), SOURCE_ONLY 0; байтовая доля закреплённой публикации 95,5 % (167 846 из 175 666, 53 фрагмента; непокрытое — меню и подвал страницы портала). Байты закреплены воспроизводимо (extract_source_text.py дважды даёт идентичный выход, PINNED_UNOFFICIAL_COPY), фрагменты режет corpus/tools/sync_anti_corruption_fragments.py. 16 сценариев (ACT_RUNNERS["anti_corruption"]), все зелёные, differential байтовый.

    Нагрузки, которых не давал ни один прежний акт корпуса: восемь сроков в трёх единицах §86 одновременно (двухнедельный и семидневный ст. 12 п. 6, тридцатидневный ст. 13 пп. 4/5/7, трёхмесячный ст. 14, шестимесячный ст. 14-1 и 26-1, трёхлетний ст. 24-1/24-4, три и два РАБОЧИХ дня ст. 24-2, пятнадцать и тридцать календарных ст. 24-4) — и деление политики §86 надвое по errata E-0029 стало видно на деле: дело, которому нужны и рабочие дни, и годы, не собирается в одно (у дневных единиц month_end запрещён, у календарных обязателен). Четыре круга адресатов, которые пересекаются и ни разу не совпадают: ст. 12 адресована всем четырём категориям ст. 1 с изъятием кандидатов, ст. 13 — трём плюс пять поимённых групп служащих, ст. 14-1 — трём без депутатов маслихатов вовсе. Изъятие, снимающее одни пункты и оставляющее другие (ст. 12 п. 7 снимает пп. 1, 3, 4 и оставляет пп. 5, 6) — два defeater-а на разные головы вместо одного «не распространяется». Ось редакций внутри одного акта: ст. 27 п. 3 сам предписывает, что до 1 января 2021 года ст. 11 действует в другой редакции, и обе живут в пакете под effective §87.

  • Три молчаливых отказа v1, найденных этим актом и названных в его шапке. (1) Домен closure §70 обязан быть фактом ДЕЛА: замыкание материализуется ДО применения правил (materialize_closures читает store.established_positive), поэтому по выводимому домену членов у него ноль, not в теле не даёт ни TRUE, ни FALSE, и снаружи это неотличимо от «правило молчит». Восемь замыканий пакета переведены на именованные audit-факты. (2) Закрытый предикат и его домен в v1 унарны — NON_EXECUTABLE_CLOSURE предупреждением, при чистом lawc check. (3) Транзитивный разбор §185, которым живёт канал суждения §47.3, идёт только по строгим правилам (_skip_reason): defeasible-правило, читающее judgment-relation, даёт COMPUTED/NEITHER вместо REQUIRES_JUDGMENT, то есть «право молчит» вместо «право назвало того, кто скажет». Правила ст. 25 и 26, обращающие судебный акт в вывод, поэтому строгие — и это совпадает с правом: вступившее в силу решение суда не поражается ничем в этом Законе.

  • Ограничение реализации сработало как читатель нормы. Первая редакция ставила обязательное приглашение представителя уполномоченного органа (ст. 24-2 п. 1) в зависимость от трёхлетнего окна защиты ст. 24-1 — и проверить её делом было нельзя: окно считается годами, сроки той же статьи — рабочими днями, политики §86 у этих единиц несовместимы, и одно дело не может нести обе. Перечитывание текста показало, что зависимость и не нормативна: пункт 1 говорит о споре, «стороной которого выступает лицо, оказывающее (оказавшее) содействие», и об окне не упоминает. Условие исправлено на то, что написано в законе, и норма стала проверяемой (AC-11 держит обе стороны требования «не менее чем за три рабочих дня до заседания» — единственного срока акта, отсчитываемого НАЗАД, и потому выраженного сравнением, а не вычисленным предельным днём).

  • Профиль structured argumentation §274 — С-2 плана LAYERS-NEXT (DECISION-0039). Аддитивные prose-подсекции §274.1–§274.7 задают law.argumentation/0.2: рекурсивные структурные аргументы (стратификация не требуется; терминируемость — запрет повторов ground-заключений на пути), атаки rebut/undermine, побеждения last-link по §106, grounded/preferred и классы ответа §274.6 («вывод неуязвим» против «лишь защитим»). Профиль — отдельный вид запроса argumentation, baseline 0.1 байтово не тронут. Механизация §280 в DoD: LawCore.Argumentation пересчитывает grounded (топливо |args|+1) и admissibility каждого preferred; ворота сертификатов отвергают подделанную разметку и не-admissible extension. Пять векторов LAY-L3-ARG-*, порт в law-eval, SUPPORTED +5, differential байтовый. Хвост О-3 закрыт той же работой: lawref argmap --pack называет правила карты метками §218 (вербализация B1). Названные границы v1 — атака на атаку, specialized-прецедент §276, перепроверка максимальности preferred.

  • Judgment-узел в proof-графе и его Lean-сертификат (DECISION-0037). Мёртвый с заведения канала вид judgment (§179 называл его всегда) ожил: на каждый JudgmentRequest движки эмитируют узел {literal, authority}, запрос несёт proof → id узла, узлы — посылки корневого query_evaluation (обоснование REQUIRES_JUDGMENT). Ядро checker/ сверяет узел с ПРОГРАММОЙ: предикат объявлен judgment-relation, орган — из декларации (узел не назначает себе судью); отсутствие опоры — named-вне-ядра, как у NEITHER-запросов. Шесть голденов пересмотрены точечно (сначала красные векторы — инвариант 3), differential байтовый, ворота сертификатов получили положительную сверку и две отвергаемые подделки (орган, необъявленный предикат). Снята последняя вычислительная граница DECISION-0024; остаток С-1 — только типизация payload ответа судьи (нет prose).

  • Добор словаря judgment-канала §47.3 (DECISION-0036). Сняты две границы DECISION-0025 и одна DECISION-0024: refuted-тест над judgment-relation при паре NEITHER порождает запрос судьи (adjudicated может быть отрицательным §73); judgment-конъюнкт с несвязанными переменными перечисляется по активному домену (кап JUDGMENT_ENUM_CAP=8, порядок §208; не-judgment конъюнкты — по-прежнему вне разбора); request_schema декларации доезжает до JudgmentRequest.requestSchema (аддитивное поле схемы evaluation). Словарь §185 самих why_not-отчётов не тронут. Пять векторов LAY-L2-JUDGMENT-{REFUTED-OPEN,REFUTED-ANSWERED,ENUM,ENUM-ANSWERED,SCHEMA} (runnable, голдены заморожены при заведении), порт в law-eval тем же изменением, SUPPORTED +5, differential 100/100 байтово, KZ-differential 333 вызова.

  • Хвосты трека О LAYERS-NEXT добраны. Фаззер О-4: скалярные пулы из value-термов самого документа (гарды по порогам становятся достижимыми) и контрпримеры к constraint-инвариантам §93.1 (цель «в» эскиза; статусы — только truth-запросами движка, канарейки в обе стороны). Ось редакций О-2: повисшие ссылки проекции (priority_rule §116 на снятое правило) диагностируются поимённо (danglingReferences), жатва report_edition_impact расширена реестром RUNNERS на конституционную, de-legibus и faraid регрессии (смок: kz+constitution целиком, 363 вызова; прочие — живость шва).

  • Горизонт L8 введён в исполнение: bounded-поиск лазеек (L8.2) и синтез минимальной поправки (L8.3) — DECISION-0035. Обе работы — трек О, чистая оркестрация над замороженным ядром 0.1. lawref loophole — детерминированный BFS без PRNG по последовательностям (дата, утверждение): цель достигнута, ни на одном шаге нет позиции VIOLATED/CONFLICTED; право шага — проекция D1 на его дату, находки минимизируются ddmin и классифицируются контрольными прогонами (orderSensitive/timingSensitive), --emit даёт цепочку сценариев О-1. lawref amend — полный перебор механических правок (remove_rule с каскадом §116, remove_priority, drop_effective, add_priority из §115-конфликтов) по возрастанию числа операций: первая находка минимальна, кандидат принимается исполнением (цели дают expect.truthStatus, регресс байтово нетронут), к находке прикладываются semantic diff §215 и impact-отчёт О-1 («поправка как PR»). Ворота ci/check_loophole.py (шаг 33) и ci/check_amend.py (шаг 31) держат canary в обе стороны: заложенная лазейка/поправка обязана находиться, закрытый пакет и недостижимая цель — давать честное «пусто».

  • Второй язык вербализации — law.verb.kk (DECISION-0032). Проверка перед заведением показала три разные вещи, и они не смешиваются. (1) Рендерер языково-нейтрален по-настоящему: язык, фразы, падежный слот биндера и формы §257 берутся из пака — тот же CLIR kz-karamola под паком, объявившим kk-KZ, дал 709 блоков, ноль пробелов и другие байты (подхватились казахские метки). (2) Восемнадцать русских строк протекали мимо пака: описания пробелов §3.3 стояли литералами в ctx.gap(...) — «статус monotone», «квантор forall», «операция поправки replace», — и казахский документ печатал бы русское слово внутри казахской рамки ⟦…⟧. (3) Ворота второго языка не увидели бы вовсе: check_label_coverage язык метки не судит, а check_verbalization_totality считает маркеры, которые про node kind, не про имена. Замер по corpus/clir: из 8644 объявлений, которые рендерер называет, ru-метка есть у 3230 (37,4 %), kk-метка — у 594 (6,9 %), причём казахские метки есть у 6 пакетов из 37. Казахский пак прошёл бы тотальность на 37/37 с нулём пробелов, называя идентификаторами 93 % объявлений — тот самый молчаливый класс из CLAUDE.md. Сделано: (а) ctx.gap принимает структурный ключ, текст берётся из gapWhat пака; умолчание GAP_WHAT_RU применяется ТОЛЬКО к русским пакам, поэтому law.verb.ru@0.1.0…0.5.0 править не пришлось и одиннадцать VER-голденов остались байт в байт; (б) verb/law.verb.kk/pack-0.1.0.json — 132 фразы (паритет с ru@0.5.0), 17 coveredNodeKinds, ноль пробелов на всех 37 документах корпуса; (в) слот формы выбран по языку: binderFormSlot: "barys" — казахскому «…ға қатысты» отвечает барыс септік, а ілік был бы формой по догадке (DECISION-0004 §4); (г) векторы VER-KK-L0-CALC / VER-KK-L1-DEFAULTS / VER-KK-GAP-FUNCTION — различающие формулы §67 («анықталған» / «емес екені анықталған» / «анықталмаған»), деградация формы в одной строке (метка Тұлға несёт barys → «Тұлғаға», метка Дау не несёт → «Дау») и казахская рамка маркера; векторов 217; (д) ворота 34/34 мерят корпус на каждый язык (PACK_PATHS, MIN_LANGUAGES) и требуют gapWhat от всякого нерусского пака — третья канарейка; CONSUMERS вырос до шести; (е) MCP отдаёт law://<пакет>/verbalized/kk под своим пином VERB_PACK_PATH_KK, неизвестный язык — ошибка с перечнем, а не молчаливый русский текст; (ж) храповик corpus/label-ratchet.json получил разрез languages по обоим измерениям (33 пакета), с канарейкой на потерянную казахскую метку при сохранённой русской. Пак объявлен reviewStatus: draft, и это отказ, а не пометка: формулировки §3.4 написаны формализатором по языку KZ-корпуса, а не заверены юристом-казаховедом, и ошибка в них не диагностируется ничем — текст остаётся связным. approvals.make_approval отказывается выдать статус выше draft против чернового пака — та же форма отказа, что у блока с маркером §3.3. Названная граница: разметка меток не трогалась; 6,9 % kk-покрытия зафиксированы храповиком как достигнутое, а не как цель.

  • law.toml — маркер корня пакета; весь корпус, кроме конституционной семьи, переведён в каталоги пакетов (DECISION-0033). Исходная задача — редактор врал на многофайловых пакетах: lawc check <файл> файла пакета давал лавину ложных LDC-E2101/E2102 про объявления из соседних файлов (53% .law дерева). Обратная задача «файл → пакет» по содержимому нерешаема — vectors/t/T042 держит два файла ОДНОГО пакета, которые нельзя склеивать, — поэтому маркер внешний и он уже определён §10. Сделано: (1) lawc package-root <файл|каталог> [--json] — локатор корня по ближайшему law.toml, без разбора .law; (2) lawc check <каталог> сверяет манифест с заголовками §22 — расхождение или нечитаемость = LDC-E1109 (E1101–E1108 заняты); ненулевой выход check фатален в check_source_pinning, отдельных ворот не потребовалось; (3) векторы T095/T096 (отклонение и приём с absentDiagnosticCodes — приём T059); голден package-root.json в check_cli_json (полнота usage-строки); (4) миграция: 13 плоских актов → каталоги с манифестом и источниками под корнем (local_path не менялся — slug-каталоги переехали целиком, включая исключение budget-2026 → sources/budget), 11 существующих каталогов получили манифест; (5) расширение VS Code проверяет пакетные файлы ПАКЕТОМ: цель = ответ package-root (кэш, сброс watcher-ом law.toml), диагностики раскладываются по своим файлам по primarySpan.uri и чистятся по всему пакету, N открытых файлов делят один прогон, release-бинарь раньше debug (3.2 с против 15.2 с на civil-procedure), несохранённый пакетный буфер ждёт сохранения; (6) скрипты скилла formalize-act научены каталожной раскладке — до этого не видели ни одного многофайлового пакета. Проверка обратимости: A/B 15/15 актов — lawc lower старой раскладки (worktree@HEAD) и новой на одном import-контексте байтово идентичны; синк-генераторы — нулевой дифф; gen_kz_clir идемпотентен; pinning 34/0; consolidation 7/7; KZ-регрессия 236/236; свип манифестов — ноль E1109. Манифест не попадает в CLIR ни байтом и не заменяет заголовки §22 — нормативны они. Конституционная семья отложена осознанно (под активной параллельной правкой; миграция складывается с постатейным разрезом — DECISION-0033 §6).

  • Иерархия пакетов: конституционная семья перенесена ВЛОЖЕННЫМ ДЕРЕВОМ (DECISION-0033 §6.1–6.2). Отсрочка снята той же ночью по решению владельца. Обратная сторона маркера корня: подкаталог с СОБСТВЕННЫМ law.toml — корень другого пакета, и collect_law_files/collect_a3_files на нём останавливаются — иначе lawc check родителя склеивал бы чужие пакеты в один текст и падал LDC-E1108. Вектор T102 (родитель с вложенным чужим пакетом принимается без E1108/E1109); ворота (check_source_pinning, check_consolidation_differential) и скрипты скилла перечисляют акт по манифесту на любой глубине (имя вложенного — путь с /→-, как у его CLIR). Раскладка: corpus/laws/constitution/{constitution.law, sources/, rights/, court/, president/, government/, kurultai/, amendment/, parliament-1995/, president-1995/} — физическое дерево зеркалит kz.constitution.*. Проверено: lower одних байтов плоско и вложенно байтово идентичен; lower родителя == старый монолит (903 841 б); генераторы семьи идемпотентны; конституционная регрессия 85/85; KZ 236/236; pinning 0 нарушений; corpus/laws/sources/ исчез — критерий завершения миграции корпуса выполнен буквально. Попутно разобрана авария чужого git stash pop дорефакторного стеша (5 CLIR с маркерами конфликта, 2 неразрешённых входа индекса) — по правилу «сгенерированное правится генератором», без ручного разбора маркеров (DECISION-0033 §6.3). Три компиляционных отказа LDC-E4101 (constitution/president, constitution/rights, de-legibus) — чужая незакрытая формализация §190, к раскладке отношения не имеет (те же байты плоской копией дают те же коды).

Изменено

  • В браузер перестали ехать мёртвые модули law_mcp: 16 → 3 (constructor/tools/build-engine.mjs). Мост oracle_bridge зовёт ровно law_mcp.search, тот — catalog и core; остальные тринадцать (query, tools, analysis, workbench, whynot, schemas, …) вкладывались в статику приложения целиком и только копили рассинхрон — 228 КБ Python, которого никто не исполнял и никто не сверял. BUNDLE сужен до достижимого; протухнуть молча список не может — ступень 3 ворот 26/45 пересчитывает замыкание по AST и краснеет и на недостающем модуле, и на лишнем. Достаточность проверена исполнением суженного состава в изоляции: индекс на 276 единиц по kz-alash-orda, выдача содержательна. Там же заведён режим --bundle-only [--out DIR] — сборка одного JSON-бандла без cargo и без записи в дерево, вход ворот.

  • lawc test <каталог>/tests --lawtest больше не требует --program: раскладка §9/§10 сама называет программу. lawtest::program_for знал только явный флаг и соседний ir.json/program.law; теперь, не найдя соседа, он поднимается до ближайшего вверх law.toml — того же маркера корня пакета, что у lawc package-root (DECISION-0033), — и собирает найденный каталог целиком. Сборка идёт тем же входом, что печатает lawc lower <каталог пакета> (lower_package вынесен из арма команды и зовётся обоими): второй копии нет, поэтому байты равны закоммиченному CLIR по построению, а не по совпадению. Проверено на «Жеті жарғы»: 59 тестов и 4 свойства §270, отчёт --json обеих форм команды совпадает побайтово (10 267 байт), как и текст со stderr; то же на tuystyq, civil-code, health-code, subsoil-code. Приоритет явного сохранён и остаётся несущим — им подставляют другое право, на чём стоят мутационные ворота (check_zheti_mutations: baseline 8/8, 7/7 мутантов убиты). Заодно lawc why-not <тест> и lawc explain <тест> перестали требовать флаг. Цена посчитана, а не обойдена. Программу теста читают ДВА независимых прохода (run_properties и run), поэтому наивный подъём собирал бы пакет 2×N раз: на «Жеті жарғы» — 118 сборок девяти .law, прогон 27 с вместо 12. Программы теперь читаются по одной на путь (lawtest::Programs), и прогон БЕЗ флага стал даже быстрее прежнего с флагом (11,2 с против 11,9 с) — исчез и повторный разбор CLIR. Ворота, не помещающиеся в бюджет §6, выключают (DECISION-0028, фаза цены). DX-долг, записанный в corpus/laws/zheti-zhargy/tests/README.md, закрыт; оговорка про временный флаг убрана оттуда и из corpus/laws/tuystyq/tests/README.md.

  • Конвенция раскладки пакета (docs/PACKAGE-LAYOUT.ru.md) и alash-program как первый пакет по ней. Конвенция описывает скелет (law.toml, package.law с разделяемым словарём, нормативные модули, A3-sidecars, sources.law, sources/, tests/*.lawtest), правило выбора разреза («источник структурирован → зеркалить его единицы; фрагментарен → функциональный разрез») и три несущих правила: объявления при модуле-владельце, interpretation рядом со своей base-семантикой, номер в имени файла — только источниковый. Семантики в ней нет: единственные нормативные якоря — §9/§10 и §267. Область действия — новые пакеты и миграция при касании; залповой перекладки корпуса НЕ проводится. В alash-program 29 типов из 34 переехали к своим разделам (в package.law остались шесть, которыми пользуется больше одного раздела), файл 11-institutions.law расформирован — «молла» и «сот» стоят при разделе IV, «земство» при X, автономия и партия при II, вместе со своими фактами; 00-package.law → package.law, 12-sources.law → sources.law, номера 01–10 сохранены, потому что это номера разделов источника. Опровергнуто измерением, а не рассуждением: перекладка байтово нейтральна только для ИМЕНОВАННЫХ объявлений. Анонимный assert получает id assert-N позиционно, по порядку чтения, поэтому пять переехавших фактов перенумеровали узлы assert-4…assert-8 и сдвинули contentHash каждого плюс semanticHash пакета при полностью совпадающем содержании. CLIR пересобран gen_kz_clir.py --only; регрессия alash 42/42, differential 42/42 байтово, lawc check чист, глубина EXECUTABLE 10/10 и учёт единиц 10 из 10 не двинулись. Утверждение о нейтральности исправлено во всех трёх местах, где было записано (docs/PACKAGE-LAYOUT.ru.md, CLAUDE.md, reference скилла formalize-act).

  • de-legibus приведён к конвенции раскладки, получил каталожную метадату и вписан в храповик сценариев — а заодно оказался единственным красным пакетом корпуса. Структура: 00-package.law → package.law, 01-sources.law → sources.law, модули потеряли сквозной счётчик (cultus.law, sacerdotes-augures.law, sacrum-poena.law), 26 типов из 34 переехали к своим модулям, в разделяемом словаре остались семь. Разрез оставлен ФУНКЦИОНАЛЬНЫМ по измеренной причине: единица, к которой привязана норма, — lex (26 законов, locator "article/N/lex/M"), а параграфы §19–§22 принадлежат издательской нумерации и режут leges пополам (lex 7 — в §19 и §20, lex 9 — в §20 и §21), поэтому файл на параграф разорвал бы норму ради типографской границы; зеркалирование выдержано ВНУТРИ файлов — секция на каждый lex. Перекладка байтово нейтральна (lawc lower до и после совпадает): анонимных assert в пакете нет, а именованное от файла не зависит. Метадата: в law.toml заведён description — единственное каталожное поле, легальное сегодня (схема §10 его знает, обе реализации принимают, в CLIR не едет), и он называет то, чего инструменты сказать не могут: Древний Рим вместо глобального штампа «Республика Казахстан», латынь, статус «lex rogata, никогда не внесённая в собрание». Титул в PACKAGE_TITLES расширен тем же. Сценарии вписаны в corpus/scenario-ratchet.json (de_legibus: 4) со сверкой в самом раннере; храповик проверен мутацией в обе стороны — вне него оставались faraid и uefa. Найдено попутно и НЕ закрыто: de-legibus — единственный из 46 пакетов корпуса, который не проходит lawc check (25 × LDC-E4101, §190 range restriction: у норм вроде SacraPrivataManento носитель обязанности homo не связан ни одним конъюнктом тела). Молчание двойное: lawc check по корпусу не гоняет НИ ОДИН гейт (в конвейере он есть только для исходников векторов), а ci/check_source_pinning.py из-за красного check пакет ПРОПУСКАЕТ со ссылкой на «контракт других ворот» — то есть закрепление источника у него не измеряется вовсе. Цена видна в голденах: шаблоны SacraPrivataServare и SumptumMinuere не встречаются в замороженных ожиданиях ни разу — нормы объявлены и позиций не создают. Связывание носителя обязанности есть правовой выбор (кому адресована «Sacra privata perpetua manento»), поэтому оставлено человеку, а не выправлено попутно.

  • Каталожная метадата §10 [metadata] заведена всему корпусу: 2 пакета → 54. DECISION-0051 дал носитель, но несли его tuystyq и martial-law-1941; остальные полсотни продолжали отвечать под глобальным штампом «Республика Казахстан». Заполнено по группам: действующие акты РК (in_force, издатель — Парламент), исторические памятники (historical_monument: Жеті жарғы, Қарамола, «Алаш», Декларация 1990, пакт 1939, капитуляция 1945, Декларация ООН 1942, Poor Laws), доктрина и литература (doctrine у фараида, literary у «Қара сөз»), частные документы (private у оферты «Самоката» и Selling Guide FNMA), учебные (educational_stub у pinning-example и social-assistance), superseded у регламента УЕФА (групповой этап заменён с сезона 2024/25) и Конституции 1995, never_enacted у свода Цицерона. Выводимые поля (jurisdiction, instrument, sourceFidelity) взяты из source-деклараций и сверены воротами; храповик присутствия перезаморожен на достигнутом, канарейка проверена. Три вещи найдены заполнением. (1) Восемь пакетов РК закрепляют УЧЕБНЫЕ ЗАМЕСТИТЕЛИ текста, и знала об этом только проза в шапках: civil-code-terms, marriage-conditions, health-procurement, appc-restoration, rest-day-transfer-2026 — теперь это структурный verifiedAgainstSource = false, отличимый от сверенного текста машиной, а не чтением. (2) Сверка jurisdiction МОЛЧИТ у почти всех пакетов: ворота читают jurisdiction.value, а в CLIR у большинства стоит const_ref (#KZ, #US, #RomanRepublic), и поле сверяется только у tuystyq и faraid, где значение — строка "none". Заявить «Франция» у любого другого пакета сегодня можно, и ворота промолчат. (3) Десять пакетов (девять конституционных подпакетов и poor-settlement-1691-1697) не названы в реестре LOWERED_ACTS, поэтому их CLIR воротам не виден и выводимые поля у них объявлять нечестно — метадата заведена без них, с причиной на месте. Три статуса намеренно оставлены пустыми, потому что выбор правовой, а не механический: конституционный закон «О государственной независимости» (1991, не отменён, но принят до Конституции 1995), Декларация независимости США (Organic Law и одновременно не источник субъективных прав) и Нюрнбергские принципы (кодификация против обычного международного права).

  • Ворота ci/check_std_registry.py (шаг 4/39, рядом с check_proof_kinds.py) — отрицательное обязательство E-0037. У восполнения словаря исполнимого следствия нет: программа, вызывающая days_between, вела себя одинаково до и после правки, и вектор не отличил бы одно от другого (класс E-0030/E-0031). Обязательство держится сверкой текстов — пять проверок: prose == LAW_STD в обе стороны по каждому package; исполнимые термы оракула == порт в движке; STD_FUNCTIONS (types.rs) == STD_FUNCTIONS (lower/helpers.rs); исполнимое ⊆ объявленного; реализуемое ⊆ prose — каждое имя реализаций названо перечнем §257–§266, оператором §58 или агрегатом §59.

    Списка исключений нет: min/max/abs (§58) и sum/count/average (§59) разбираются из СВОИХ fenced-блоков prose, поэтому «исключение» есть ссылка на нормативный текст, а не строка в воротах. Канарейка роняет сверку на семи мутациях, включая «разбор prose пуст» (пустое против пустого есть совпадение). Сверх канарейки проверено главное: ворота, наведённые на копию §258 в состоянии ДО E-0037, называют все четыре терма поимённо и по обеим сверкам.

    Названная и НЕ закрытая ось — типы. STD_TYPES (law-hir/src/lower/helpers.rs) несёт Jurisdiction, которого нет ни в §35, ни в §257–§266, при том что §54 печатает его каноническим примером const, а §89 объявляет им поле контекста. Квалификация требует решить, какому package принадлежит тип, — а у типов контекстной записи §89 закрытого словаря в prose нет вовсе. Ось оставлена открытой вслух, а не прикрыта строкой исключения.

  • Докстринг lawref/lawref/std_registry.py приведён к факту. Обещание «состав дословно следует §257–§266 SPEC с правками E-0005» было неверным с 26.08.2026; теперь названы все errata состава (E-0005/E-0015/E-0028/E-0029/ E-0036/E-0037) и сказано, что совпадение держат ворота, а не строка. Заодно снята неточность о читателях: LAW_STD читают lawref/selftest.py и ворота, а lawref/lawref/resolver.py — нет.

Исправлено

  • Госзакупки, ст. 15: допуск считался НЕЗАВИСИМО от подачи заявки, и допущенный посторонний давал «закупки состоялись» (corpus/laws/procurement/procurement.law). Три счётных основания п. 1 и норма п. 2 брали два агрегата §52.1, связанные только числами: count(collect s: Supplier where bid(lot, s)) и count(collect s: Supplier where admitted(lot, s)). Тождества подавшего с допущенным между ними не было, и исход держался на совпадении двух чисел, а не на лице. Проверено исполнением: заявка bid(urn:kz:lot:1, alfa) при допуске admitted(urn:kz:lot:1, beta), заявки НЕ подававшего, давала procurement_held → TRUE_ONLY, и при этом ни одно из трёх оснований несостоятельности не выводилось — дело оставалось вовсе без основания. Починка одна на весь класс: конъюнкция ВНУТРИ одного comprehension — count(collect s: Supplier where bid(lot, s) and admitted(lot, s)) — в ProcurementHeld (п. 2), FailedSingleAdmitted (пп. 3) и FailedNoneAdmitted (пп. 2); у последнего допуск постороннего СКРЫВАЛ основание, и без его починки закрытая лазейка оставила бы состав хуже прежнего. Отдельным выводимым отношением «допущенная заявка» это не выражается вовсе — агрегат по ВЫВОДИМОМУ предикату упирается в барьер §111 и молча даёт NEITHER. Текстовое основание: п. 2 говорит «одна заявка, СООТВЕТСТВУЮЩАЯ квалификационным требованиям», пп. 3) — «допущен один потенциальный поставщик В СЛУЧАЕ ПРЕДСТАВЛЕНИЯ двух и более заявок»; допускают ЗАЯВКУ, а не лицо. Найдено bounded-поиском лазеек L8.2 (lawref loophole выдал шагом admitted(urn:kz:lot:1, посторонний) путь к цели «закупка состоялась»), A/B тем же инструментом на одной цели и одном фоне: ДО — 5 путей, четыре через постороннего; ПОСЛЕ — 3 пути, все через единственного подавшего заявку. Канарейка PROC-23-ADMITTED-MUST-HAVE-BID спрашивает ВСЕ четыре головы ст. 15 на двух составах и требует, чтобы закрытая лазейка не просто отняла «состоялись», но и вернула основание пп. 2): молчание всех четырёх было бы дырой хуже прежней. CLIR пересобран (gen_kz_clir.py --only kz-procurement.lawir.json), пересборка идемпотентна; KZ-регрессия --only procurement 21/21 PASS, --only procurement_l2 4/4; check_kz_differential --only procurement — 44 evaluate-вызова байтово идентичны (счётчик вырос на четыре новых, а не встал); Lean принял 44 сертификата оракула и 44 движка, отказов 0. Храповик procurement поднят 19 → 20, состав дописан --write-manifest. Тот же класс, что записан у независимых агрегатов вообще: два count(collect …) связаны ТОЛЬКО числами, и связывает их конъюнкция внутри comprehension, а не второй агрегат.

  • Обе реализации принимали любую строку как время правопорядка, и мусор молча становился датой (DECISION-0056). Ось legal_time сравнивается с границами lifecycle §31 и окнами effective §87 лексикографически — законно ровно потому, что обе стороны суть ISO-записи. Обеспечена была одна сторона: границы приходят из CLIR и проверены схемой (legal-ir.schema.json, DateString/InstantString), ось приходила из дела и не проверялась ничем. Строка вне ISO не отвергалась, а занимала место в порядке: кириллица сортируется выше всех цифр, дефис и пустая строка — ниже. lawref impact-editions <ir> "не-дата" "1945-07-01" печатал «Вердикт: SEMANTIC-CHANGE», а с пустой строкой вместо второй даты — «Вердикт: NO-CHANGE» с кодом 0, то есть утверждал, что право не менялось между датами, которых нет.

  • Три остатка того же класса, названные DECISION-0056, закрыты тем же днём — и разбор изменил квалификацию двух из них (errata E-0060, E-0061; ci/check_case_shape.py).

    E-0061 — Timezone объявлен типом, и формы значения у него не было. Прежний довод «проверка требует пина timezoneDbSnapshot» оказался неверен: пин нужен, чтобы спросить о СУЩЕСТВОВАНИИ зоны, а форма её имени проверяется без всякой базы. Настоящее препятствие обнаружилось при чтении прозы: §89 объявляет timezone: Timezone обязательным полем (не Option), §35 держит Timezone во встроенных типах — и о ЗНАЧЕНИЯХ не говорит ничего, тогда как соседний по перечню LanguageTag профиль имеет, явный и с регулярным выражением. Реализация, принимавшая "не-зона", прозе 0.1 не противоречила: это пробел SPEC, а не дефект реализаций. §35 дополнен профилем имени IANA ([A-Za-z][A-Za-z0-9_+-]*(/[A-Za-z0-9_+-]+){0,2}), и граница названа в самой прозе: профиль отвечает «это запись имени зоны», не «такая зона есть», — спросить о существовании можно только у базы, а база ХОСТА внесла бы недетерминизм §211, то есть починила бы молчание способом, который сам запрещён. Обе реализации проверяют профиль на границе context.expand тем же кодом, что оси времени; расхождение поймано ДО differential (первая редакция в lawref пропускала JSON-null, а serde_json отдаёт Some(Value::Null) и отвергает). Вектор T150 (до правки давал NEITHER при issues: []), ворота выросли с 40 проб времени до 40 + 17 проб зоны — среди них Asia/Qyzylordа с кириллической буквой внутри латинского имени, неотличимой глазом. Радиус нулевой: 12 различных имён зон во всём репозитории (JSON и питоновский корпус вместе), профилю удовлетворяют все.

    E-0060 — объявленный format нормативных схем не проверялся ничем, и дефект оказался шире одного поля. В Draft 2020-12 format при словарях по умолчанию есть аннотация, а не утверждение, и ни одна схема каталога не объявляет $vocabulary. Полная запись утверждения §3.6 с at: "не-момент" проходила review-approval.schema.json без единой ошибки — отвергалась только не-строка. Зазор был двойным, и вторая половина хуже первой: lawref.approvals.make_approval, единственное место, где запись порождается, свою схему не звал ВООБЩЕ, так что исправный format ничего бы не изменил. Всего таких полей нашлось шесть в трёх схемах: at у утверждения, namespace пакета (URN, идущий в идентификаторы узлов CLIR) в двух местах lockfile и в манифесте, resolverUri, url реестра. Каждому придан pattern; make_approval сверяется со схемой и вдобавок требует от at календарной состоятельности той же процедурой, что оси контекста (паттерна мало: 2026-13-45T99:99:99Z ему удовлетворяет и моментом не является). Квалификация — дефект СХЕМ, как у E-0049: схема не ошиблась в обещании, она не сумела его записать. ci/check_schema_refs.py получил свойство «format без pattern запрещён» и две пробы канарейки — прямую (снять pattern у at) и отрицательную (pattern без format нарушением НЕ является, иначе ворота краснели бы на здоровых схемах, где форму держит один pattern). Радиус измерен: все 112 значений namespace и 3 значения URI-полей новым паттернам удовлетворяют.

    Схема входного дела — НЕ заводится, и это решение, а не отсрочка. Проза формы транспортного JSON не определяет и прямо это признаёт (E-0046: «непроверяемым оказался ровно транспортный JSON-канал, которым пользуются оба движка и весь корпус»); §168 объявляет делом ИСХОДНЫЙ файл .lawcase с грамматикой case_decl; LS §8.5 ставит case-схемы вне артефактов языка отдельным предложением. Завести файл в spec/schema/ нельзя и технически: ci/check_schema_refs.py сверяет каталог с NORMATIVE_SCHEMAS в обе стороны, и новая схема стала бы нормативной ПО ПОСТРОЕНИЮ — новой нормативной сущностью мимо errata. Вместо неё — ворота данных ci/check_case_shape.py (шаг 4/43, 152 файла): ключи верхнего уровня и опции только известные, утверждения против НОРМАТИВНОГО legal-ir.schema.json#/$defs/Assertion (второго определения формы утверждения не заводится — тот же урок, что у E-0048), профили §89.1, согласие литерала со своим типом. Класс молчалив вдвойне: неизвестный ключ дела не отвергается ничем и при этом входит в caseHash, поэтому опечатка contextProfile вместо contextProfiles или limit вместо limits даёт ДРУГОЕ дело с тем же ответом — политика не применилась, профиль не наследован, документ выглядит законным. Значения осей контекста ворота НЕ проверяют намеренно: их проверяют движки, а T148/T149/T150 несут негодные значения специально, и ворота на значениях убили бы ровно те векторы, что стерегут отказ. В ядро проверка тоже не ставится: case — открытый транспорт, прозой не описанный, и ужесточать его в обеих реализациях значило бы вводить контракт, которого нет в SPEC.

    Побочно закрыт corpus/kz/harness.date_term, лепивший Date-терм из любой строки. Схема CLIR такой литерал не проверяет и проверить не может: LiteralTerm.value объявлен как JsonValue и с type.name не связан — {"type": "urn:law:std#Date", "value": "не-дата"} схему ПРОХОДИТ (измерено). Дела корпуса строятся кодом и в JSON не сохраняются, поэтому ворота формы дела их не видят; проверка стоит в самом хелпере. Замер до правки: 4452 литерала в CLIR корпуса и векторов и 139 литеральных аргументов date_term — несогласованных ноль.

    Опаснее абсурдной строки правдоподобная. 1945-7-1 — обычная человеческая запись первого июля, и она сортируется выше 1945-12-31, поэтому акт читался на своей ПОСЛЕДНЕЙ редакции: тот же вопрос давал два уверенных ответа (ISO-запись — 2 редакции сменили состояние, added=8, исход изменился у 3 сценариев из 4; человеческая — 5 редакций, added=1, ни одного изменившегося исхода). Третий вход — разбор argv: обе даты в одних кавычках сдвигают позиции, и «датой после» становится сам флаг --scenarios.

    Квалификация — дефект ОБЕИХ реализаций, не пробел SPEC (инвариант 8). Проза называет тип в трёх местах (§2.15, §82, §89: LegalTime = Date | Instant), нормативная схема записывает форму паттернами, и проверка исполнима — schemas.validate отвергает все пробы, включая 2026-06-01T00:00:00 (мгновение без смещения, E-0048). Реализации типа не спрашивали: проверялось присутствие ключа (CONTEXT_FIELD_MISSING), а не значение. Общее с E-0048 — только причина немоты: lawc есть дословный порт lawref вплоть до определения granularity по наличию буквы T, поэтому differential молчал по построению. Проверено живым прогоном до правки: lawc eval с legalTime: "не-дата" отдавал документ с issues: [], truthStatus: TRUE_ONLY и мусором в manifest.legalTime — то есть строка входила в semanticHash и в proofGraph как законное время правопорядка.

    Правка двухслойная, потому что двухслоен дефект. Ядро — зеркально в обеих реализациях (lawref/context.py, law-eval/src/context.rs): три оси §89 типизированы (legalTime — Date | Instant, decisionTime/knowledgeTime — Instant), негодное значение даёт CONTEXT_FIELD_INVALID с байтово одинаковым сообщением; проверка стоит ПОСЛЕ дозаполнения v1-дефолтами, чтобы опечатка в самой константе тоже ловилась. Проверяется тип, а не написание: 2026-13-45 паттерну схемы удовлетворяет и датой не является, 20260101 разбирается date.fromisoformat и записью ISO 8601 не является. Надстройка трека О — только в оракуле (зеркального входа у lawc нет: ни одна команда law-cli не принимает дату аргументом): отказ поднимается из impact.edition_projection, а не только из разбора argv (проекцию зовут corpus/kz/linking.dated_world и трое ворот напрямую), CLI отвечает кодом 2 — «вход не годен» отделено от вердиктов 0/1/3, — и на съеденный кавычками флаг сообщение прямо называет вероятную причину. Закрыты также loophole --date (падал трейсбеком), approve --at, даты шагов process-run и общая сборка контекста MCP (query.py::_context, где дата конкатенацией размножалась на три оси сразу и отказ приезжал клиенту под видом «внутренней ошибки инструмента»). Путь eval кода возврата не меняет: там отказ — байты {"error": {code, message}}, существующий контракт run_vector, и differential немедленно стал его проверять.

    Держится тремя вещами. Векторы T148/T149 (программа с окном effective, закрывшимся в 2025 году, — единственное место, где негодная ось выглядит законным ответом: до правки оба давали NEITHER при issues: [], проверено прогоном на копии оракула со снятой правкой). Ворота ci/check_context_time_format.py (шаг 4/43): копии паттернов против схемы, 40 проб на обеих реализациях с ЖИВЫМ ответом lawc (eval-batch, а не голден), согласие context.time_value_kind с values._instant_moment — прямая мера против урока E-0048 о двух процедурах чтения одного вида; канарейка мутирует каждую сверку. Плюс 16 проверок в селфтесте и тесты law-eval. Радиус нулевой и замерен ДО правки: все 288 вхождений legalTime в JSON репозитория и все даты питоновского корпуса — валидные ISO-записи; differential 132/132 байтово, векторы 314/314, ни один голден не сдвинулся.

  • doctor.py звал вписывать в базу глубины акты, которых мера не отдаёт НИКОГДА, и совет уронил бы ворота навсегда. Проверка 6 отвечала собственным счётом («ключа в ci/formalization-depth.json нет — пробел») и печатала → вписать раздел "<пакет>" одиннадцати актам без единицы деления (hippocratic-oath, us-declaration, us-emancipation, valikhanov-note, victory-day-1945, qasqa-zholy, eski-zholy, gramota-1731, calendar-act-1750, japan-constitution-art9, health-procurement) и шести, чей источник мера не видит. Совет неисполним ПО ПОСТРОЕНИЮ: measure() акт с пустым rows в измерение не кладёт никогда, а main() объявляет регрессом всякую запись базы, которой в измерении нет, — то есть и null (он в базе и стоял до перезаморозки --write), и объект с нулями держали бы ворота красными вечно. Замерено прямым прогоном настоящих ворот с суженным списком актов: "hippocratic-oath": null даёт «акт пропал из меры (был None)» и выход 1. Починка — не второй разбор границ, а ОБЩИЙ вход: в ci/check_formalization_depth.py выделен measure_act(boundaries, act), отдающий либо глубину одного акта, либо причину пропуска СТРОКОЙ (причина — часть ответа, а не комментарий: её печатает doctor); measure() стал циклом по нему, а doctor.py спрашивает его же и отвечает · глубина по единицам неприменима (единицы деления у акта нет) — записи в базе быть не должно. Настоящий пробел при этом уцелел: leges-xii-tabularum мерится (12 разделов) и остаётся ✗ с прежним рецептом. 17 находок из 83 пакетов сменили gap на n/a, ни одна находка другого реестра не изменилась; --all подорожал с 0,21 с до 0,86 с — мера зовётся только там, где акта в базе нет, а clir_by_namespace (56 МБ CLIR на каждый вызов) запоминается на прогон. В самотесте подопытный для порчи базы теперь выбирается ПО ПРИЧИНЕ, а не по «нет пробелов» (на акте вне меры опыт «обязан найти» стал бы пустым молча), и добавлен опыт 3б, который проверяет падение ворот САМИМИ воротами. Попутно исправлено утверждение STATUS.md о Клятве Гиппократа: «ci/formalization-depth.json держит null» — записи там нет вовсе, и это единственное состояние базы, которое ворота терпят.

  • E-0049: доверенное ядро отвергало ВСЕ сертификаты пакета с объявленной константой, а запрос читало раньше его собственной опоры. Два независимых дефекта checker/, общая у них только жертва — третья нога контура; оба найдены 28.08.2026 при заведении us.organic.declaration, и ни один к этому пакету не относится. п. 1 (§54): утверждение с аргументом-константой (assert dutiable(ExitVisa) при объявленной const ExitVisa) роняло пакет целиком — движки разыменовывают константу одним предпроходом ДО вывода, поэтому узел assertion в CLIR несёт литерал как написано (const_ref), а лист proofGraph — после разыменования (entity_ref), и байтовая сверка §208 недостижима по построению; basePos §61 ядро строило по тем же неразыменованным литералам, так что и accepted-опора §73 не нашлась бы, сними мы сверку. Дискриминатор проверен ИСПОЛНЕНИЕМ, а не рассуждением: ломает ровно ОБЪЯВЛЕННАЯ константа — пакет, где const_ref получился из необъявленного имени, зелен (karamola 89/89 при 2430 листах с const_ref), пакет без констант зелен тоже (independence 47/47). п. 2 (§179/§274.7): узел query_evaluation graph-образных видов запроса несёт premises: [] — не по упущению эмиттера, а по прежнему требованию самого ядра (§180 требует от rule_application пары rule/substitution, которой у несработавшего правила нет; пустой корень признан честнее выдуманного шага). Ядро читало узлы в топологическом порядке, а узел без посылок этот порядок поднимает НАВЕРХ — выше применений, которые атом выводят: на Декларации separation_necessary выводится на 165-й позиции, запрос о нём стоял на 38-й. Почему молчал differential: обе реализации согласны БАЙТОВО, расхождения нет по построению — ровно тот случай, ради которого заведена третья нога (§3(в) DECISION-0014). Квалификация (инвариант 8): дефект ЯДРА в обоих пунктах; движки правы — §54 объявляет const значением, а публикация ссылки в атоме поставила бы форму опубликованного атома в зависимость от того, какая сторона попала в хранилище первой, чего §211 не допускает. Сопутствующий дефект SPEC — декларативный: порядок разыменования и его следствие для документа нигде записаны не были, и у ядра не было нормативного основания их знать. Правка прозы — новый подраздел §54.1 (аддитивно; семантика 0.1 не меняется ни на одном входе): порядок, его причина, граница (разыменовывается ссылка на объявленную константу, и только она — const_ref §116/§122 и корпусные имена не трогаются) и следствие для документа, названное ради проверяющего §197. Правка ядра — модуль LawCore.Const (предпроход над ir/case, таблица и обход те же, что у движков; пустая таблица возвращает вход без единого изменения, поэтому все ранее проверенные сертификаты остаются побайтово теми же) и чтение узлов query_evaluation последними. Проверка §65/§66 не ослабла — она читает полные множества вместо частичных, подделка статуса отвергается по-прежнему. Векторное обязательство исполнено тремя УЖЕ СУЩЕСТВОВАВШИМИ векторами, и каждый до правки падал — новых заводить не потребовалось, и это факт о находке, а не экономия: ERR-E0032-CONST-DECL (п. 1; было два отказа «литерал листа не совпадает», доказано листьев 0 → стало принято, листьев 2), LAY-L3-ARG-GROUNDED и LAY-L3-ARG-STRICT (п. 2; было «TRUE_ONLY заявлен без предъявленной опоры», код 1 у обоих → стало принято, у STRICT доказанных запросов 0 → 1). Отсюда следует и то, что ворота ci/check_proof_certificates.py были КРАСНЫ до правки на трёх векторах. Живые акты под ядром: criminal_code 187/187, zheti_zhargy 0/66 → 66/66, us_declaration 0/56 → 56/56, state_duty 1/6 → 6/6; контроль без объявленных констант не сдвинулся. Векторные ворота зелёные: 126 сертификатов на прогоне 28.08 (число живое — соседние сессии заводят векторы в тот же час), все 21 подделка отвергнута.

  • Три шага ci/run_all.sh не могли покраснеть никогда — двое из трёх были красны. Шаги 13 (check_conservativity), 21 (check_layer_inference) и 22 (build_conformance) стояли за трубой | tail: статус конвейера в POSIX sh есть статус ПОСЛЕДНЕЙ команды, то есть tail. Заголовок файла описывает этот дефект дословно (errata E-0013) и заводит функцию gate ровно против него — три шага её не использовали. Квалификация проведена ДО правки трубы. Шаг 13: разошёлся пин _SCAN_DECL_L1_CONSTRUCTS после расширения scan_decl (классификация, поражаемая фикция, коммит 4241e7b) — правка ворот корректна (LS A1.2/A1.3 называют classification в составе L1 без оговорки о силе, fiction defeasible — тоже L1; до неё синонимичная запись обходила LDC-E8101), а предикат IsL0 теоремы WP-20 пересмотра не требует: §147/§148 — сахар, разворачивающийся в правило своей силы (измерено lawc lower), поэтому поражаемая форма уже исключена P.defeasible = [], а строгая лежит внутри IsL0. Исход пересмотра записан у пина и в заголовке Conservativity.lean. Шаг 21: три отказа — дефект lawref (таблица _STATUS_LAYER не знала статус-теста monotone, который layers.rs::status_layer держит как L0 по errata E-0018, а LS A1.2 называет поимённо; комментарий таблицы при этом утверждал «дословно та же»), четвёртый — дефект вектора (VER-RU-L2-LIBERTY-FORBEARANCE объявлял L2, неся power §127; обе реализации требовали L3 независимо). Все три шага переведены на gate и печатают теперь больше прежнего: tail скрывал содержательные строки сводок.

  • Новые ворота 3/41 ci/check_gate_wiring.py — разводка самих ворот. Три утверждения с канарейкой: ни один шаг не стоит за трубой; у каждой ci/check_*.py есть строка в run_all.sh/workflow либо запись в DECLARED_OUT с причиной; файл, объявленный ИНСТРУМЕНТОМ, обязан не иметь пути ненулевого выхода — отрастил условие отказа, значит стал воротами, и декларация краснеет сама. Единственная запись DECLARED_OUT — check_rule_executability.py, не звавшийся ниоткуда: его main() возвращает 0 при любом исходе, и впаять его как есть значило бы завести шаг, который не может покраснеть. Untracked не роняет, но называется строкой NOTE:.

  • Прогон «Туыстық жүйе» через скилл formalize-act: четыре молчаливых пробела при полностью зелёном пакете. Пакет проходил lawc check чисто, ворота закрепления давали 13 статей из 13 и 80,3 % байтов, обе меры §33.1 были полны (EXECUTABLE 11, ANCHORED 0, SOURCE_ONLY 0), регрессия печатала 38/38 PASS. Найдено и закрыто: (1) акта не было в ci/formalization-depth.json — храповик перечисляет акты с ДИСКА, а базу читает из JSON, и незаписанный акт попадает в ветку «новый акт под мерой», то есть печатается как прогресс и не защищён ничем; в том же положении оставались ещё 13 актов, в их числе civil-code (413 EXECUTABLE) и criminal-code (490). Раздел вписан руками, а не через --write: тот перезаморозил бы заодно чужой незакоммиченный регресс constitution (EXECUTABLE 86 → 5). (2) Ст. 10 (әмеңгерлік) была исполнима по мере и НЕ доказана делом: правило AmengerlikBrotherFirst не срабатывало ни разу из 38 сценариев — единственное дело, касавшееся его головы (TUYS-29), ждёт NEITHER, то есть проверяло отсутствие вывода. Первая очередь призыва — то, ради чего статья написана, — при зелёном прогоне оставалась недоказанной. Мера снята перехватом proof-графов через шов set_evaluate: сработали 92 правила из 93. Заведён TUYS-39 отдельным миром (в общий брата вносить нельзя: там ст. 10 проверяется ровно его отсутствием), и второй вопрос дела не дубль первого — он предъявляет РАЗМЫКАНИЕ ветви ағайын: при живом брате not er_bauyry_bar ложно, и призванный в TUYS-29 Темір здесь не призван. Сценариев 39/39, differential 119 вызовов байтово, храповик 38 → 39. (3) У sync_tuystyq_fragments.py не было режима --check (есть у 10 генераторов из 33). Зазор УЖЕ, чем кажется, и это измерено опытом, а не предположено: дрейф самих байтов роняет LDC-E5204 (проверено правкой копии), исчезнувший срез — LDC-E5202; непокрытой оставалась правка ВНУТРИ статьи, внесённая вместе с обновлением content_hash публикации, — прежний фрагмент остаётся подпоследовательностью, число статей не меняется. Канарейка обязана падать и падает: чистая копия 0, копия с абзацем, вставленным в ст. 2, — 1. (4) Тот же генератор не стоял в ci/run_all.sh — «проверка существует вне конвейера и краснеет молча»; впаян шагом рядом с соседними sync_*.py --check. Заодно измерено, что ворота закрепления роняет ТОЛЬКО lawc check по кодам §194: строки «неучтённых N» и «SOURCE_ONLY без объявленной причины» печатаются, но отказом не становятся — учёт статей держит не этот гейт, а храповик глубины, отчего пункт (1) и был несущим, а не косметическим. (5) Пятый пробел найден вопросом «а метадату почему не обновил» и оказался в самом скилле. Конвенция «титул обязан называть юрисдикцию, правовую природу и статус действия» была вписана в references/*.md прозой — без строки в таблице фаз и без единых ворот, и первый же прогон её не исполнил: doctor печатает «✓ PACKAGE_TITLES», а проверяет НАЛИЧИЕ ключа, не содержание. Проверяемая часть конвенции теперь машинная — doctor сверяет число, вшитое в титул («глубина §33.1 — EXECUTABLE N»), с базой храповика: одиннадцать титулов носят такое число в строке Python, пока мера живёт в JSON, и разойтись они обязаны при первом расширении пакета. Сегодня расхождений ноль (8 сверено, 3 — fnma-income, legal-acts, samokat-eula — не с чем сверять, их актов нет в базе глубины, то есть пробелы (1) и (5) складываются), канарейка на подделанном числе краснеет. Непроверяемая часть — юрисдикция, природа, статус — вынесена отдельным шагом 5м таблицы фаз со сверкой титула против source-деклараций глазами, потому что автоматика тут дала бы ложную уверенность. Почему это важнее, чем кажется: law_packages печатает над ЛЮБЫМ ответом «юрисдикция: Республика Казахстан» глобальной константой JURISDICTION, и над «Туыстық жүйе» — пакетом, чей источник объявляет jurisdiction "none", — эта строка стоит в двух строках от собственного титула пакета «Памятник обычая, а не действующее право РК», прямо ему противореча. Титул tuystyq сверен по всем четырём осям и правки не потребовал; сам заголовок остаётся невыводимым до [metadata] (docs/PACKAGE-METADATA.ru.md).

  • E-0046: аргумент чужого типа в утверждении ДЕЛА принимался молча обеими реализациями. §189 требует проверять arity и parameter/return types, и на пути ИСХОДНИКА это работает: assert born_on(42, 7) при параметрах (person: Person, day: Date) отвергается двумя LDC-E2104 («§48: неявных конверсий нет» — та же формулировка уже стояла в errata про quranic_share(e, "1/4") со словами «и это верно»). Через транспортный JSON-канал дела то же утверждение принималось БЕЗ ЕДИНОГО issue. Измерено на живом пакете: impeachment_target(imp, 42) при объявленном (impeachment: Impeachment, president: President) давал president_removed_from_office(42) со статусом TRUE_ONLY — правовой вывод об отрешении от должности ЧИСЛА 42; так же проходили Date и Text на месте сущности и утверждение с одним либо тремя аргументами там, где предикат объявлен на два. Почему молчал differential: обе реализации соглашались байтово, то есть расхождения не было по построению. Почему это не граница среза: §168 объявляет case-файл обычным исходником law.core с const и assert — нормативная форма дела компилируется, и §189 к ней применяется; непроверяемым оказался ровно транспортный канал, которым пользуются оба движка и весь корпус. Приём §71–§73 теперь сверяет утверждение с сигнатурой ДО помещения в support — в том же месте и тем же приёмом, что соседняя проверка ключей §45.1: реализация ничего не выбирает и не чинит, несогласованное утверждение не принимается, причина названа issue TYPE_ERROR с позицией аргумента, именем параметра, объявленным и поданным типом. Проверка утверждает только то, что может доказать: тип известен у value и у const_ref (из объявления константы §54), а транспортный entity_ref носителя типа не имеет и пропускается; наследование entity A : B учитывается обходом цепочки base. Статус остаётся COMPUTED — так же ведёт себя уже существующий путь TYPE_ERROR от термов §9, и второго порядка errata не вводила. Три вектора ERR-E0046-CASE-ARG-TYPE/-ARITY/-KEPT, все в SUPPORTED; differential 121/121 байтово. Канарейка проверена снятием проверки: обе отрицательные половины краснеют, положительный контроль остаётся зелёным — без него вектор прошёл бы при реализации, отвергающей любой вход. Радиус замерен ДО правки (конституционная регрессия — 6381 аргумент, 0 расхождений) и подтверждён после: KZ-регрессия 0 провалов из 4266 сценариев, конституционная 140/140. Тот же замер по KZ-корпусу до правки не дошёл до конца — обёртка упала RecursionError в deepcopy; пакет, на котором она упала, отдельно отработал чисто и с правкой, и без неё, а прогон регрессии RecursionError не воспроизвёл, то есть падение принадлежало обёртке.

  • 32 подсказки из 248 показывали код вместо нормы. site/tools/build-hover-docs.mjs брал первый абзац ТЕЛА секции, а не её прозы: внутри -блока бывает пустая строка (§45), разбиение тела по пустым строкам разрывало такой блок, и хвост примера уезжал в словарь вместе с осиротевшей закрывающей оградой — при живой проверке `startsWith('’), которая ловит только начало блока. Отсюда relationиkeyобъяснялись примеромmeasured_distance, fragment— строкойtext ru-KZ official “”“…”“”, judgment— полями структуры. Теперь абзац берётся из прозы; подводка к примеру («Пример:», «Relation kinds:») берётся, только если другого абзаца в секции нет — жёсткий отказ от подводок обнулял подсказку у десяти слов, что хуже. Ручных закреплений 18 → 22:rule→ §94 «Общая форма» вместо §66,when→ §98 «Body»,then→ §99 «Head» вместо §76 «Evidence admissibility»,assert→ §71 «Assertion» вместо перечня ключевых слов §15. Кода вdoc` после правки — ноль записей из 248.

  • Словарь подсказок был просрочен, и шаг 394 run_all.sh краснел на HEAD. Семь терминалов агрегатов (aggregate, any, count, max, min, order, sum) появились в spec/grammar.ebnf без перегенерации hover.json; замер сделан в чистом worktree на HEAD — hover:check отвечал «словарь устарел». Пересобрано: 248 слов из 250, без подсказки остаются _ и list — прозой в SPEC не описаны.

  • Смок расширения не доходил до провайдеров: шаг 397 падал исключением. В подставном редакторе site/tools/check-extension.mjs не было createFileSystemWatcher — наблюдателя за law.toml (§10/DECISION-0033), который расширение заводит при активации; ext:test умирал на activate() до единой проверки, и красным был весь гейт, а не одна строка. Подставной дополнен. После этого стало видно, что две проверки красны по ДРУГОЙ причине, к подсказке отношения не имеющей: event в spec/examples/bvr.law теперь разбирается объявлением, а не opaque-конструкцией, и ожидания «неподдержанная конструкция тоже видна» и «event как имя перестал быть keyword (LDC-E0203)» описывают прежний парсер. Не тронуты — правка за тем, кто вводит event_decl.

  • «РАСХОЖДЕНИЕ 4» в пакете редакции 1995 было неверным утверждением о тексте 2026. Комментарий гласил, что санкции за неудавшийся импичмент — прекращения полномочий депутатов-инициаторов — в редакции 2026 нет. Ст. 50.3 несёт её дословно. Утверждение держалось не на тексте, а на том, что норма не была заформализована, и продержалось до формализации ст. 50.3. Расхождение настоящее и остаётся, но оно в ПАЛАТЕ: 1995 прекращает полномочия депутатов Мажилиса, которого в 2026 нет вовсе, 2026 — депутатов однопалатного Курултая.

  • min/max над Money возвращали неканонический масштаб операнда (lawc). min(2000.00 USD, 6000.00 USD) давал 2000 у оракула и 2000.00 у движка — байтовое расхождение differential, найденное живым пакетом, а не conformance-набором: ни один вектор не ставил min над операндом с хвостовыми нулями, и первой это сделала норма B3-3.3-09 руководства Fannie Mae (потолок квалифицирующего дохода при временном отпуске). Квалификация по инварианту 8 — дефект lawc, не SPEC и не оракула: §18/§208 требуют канонического вида от ВСЯКОГО производимого значения, abs и вся арифметика движка рендерят через Dec::render, и только выбирающие термы клонировали операнд дословно, тогда как оракул канонизирует всякий результат в to_literal_term. Правка — ветка "min" | "max" в law-eval/src/values.rs: выбранный операнд денежного, количественного и десятичного вида пересобирается через общий путь рендера. Обязательство закрыто вектором T143 (vectors/tools/digitize.py, spec/conformance/CORE-TESTS.md, SUPPORTED), differential векторов 118/118, cargo test -p law-eval 31/31.

  • Ст. 46 пп. 11, 17, 18 Конституции ожили: три нормы были записаны и молчали. ConstitutionalReviewPetitionPower, EmergencyPower, MartialPower объявляли petition и measure в for, но связывали их только в exercise/effect — §190 этого не признаёт, lawc check давал три LDC-E4101. Отказ был виден и не пойман: lower эти правила пропускал, CLIR содержал все три, конституционная регрессия шла 85/85, а на исполнении обращение в Конституционный Суд, чрезвычайное положение и военное положение отвечали NEITHER при ПОЛНОМ наборе посылок (проверено вызовом оракула до правки и после: NEITHER → TRUE_ONLY, контроль без консультаций остаётся NEITHER). Связыватели заведены тем же приёмом, что уже применён в этом файле к Курултаю, — эмпирическими предикатами существования constitutional_petition и emergency_measure. Побочно снят «ПРОПУЩЕН» в ci/check_source_pinning.py: пакет с красным check выпадал из ворот закрепления молча, при их собственном нулевом коде возврата. Остаток класса, названный в STATUS.md, не тронут: de-legibus — 25 правил, constitution-rights — 3.

  • Пять сроков Конституции перестали приходить в дело готовым ответом. signature_within_one_month (ст. 46 п. 3), final_decision_within_two_months (ст. 50 п. 3), elections_conducted_within_two_months (ст. 51 п. 2), last_six_months_of_presidential_term и within_one_year_after_prior_dissolution (ст. 62 п. 3) были ЭМПИРИЧЕСКИМИ предикатами с величиной в имени: дело сообщало вывод, ради которого норма существует, а закреплённая величина не читалась ни одним правилом. Комментарий у ст. 51.2 объявлял календарные месяцы невыразимыми в 0.1 — и это опровергалось строкой 231 того же файла (assert regular_oath_period(1 calendar_month)) и зелёным KZ-CON-TERM-04: errata E-0026 закрыла зазор ещё 27.08. Все пять переведены на add_calendar_period парой правил _due_on / _timely — тем же образцом, что RegularOathDue/RegularOathTimely; пять величин закреплены Quantity с якорем на свою статью и вписаны в consumed реестра corpus/constitution-constants.json (68 → 73 читаемых). Направление шага у ст. 62 выбрано вперёд: add_calendar_period умеет только прибавлять, и «последние шесть месяцев» выражены проверкой, что истечение наступает не позже, чем через шесть месяцев от рассматриваемого дня. Десять сценариев KZ-CON-TERM-07…16 стоят по обе стороны граничного дня и спрашивают САМУ норму (подписан ли закон, распущен ли Курултай), а не промежуточный предикат; конституционная регрессия 85/85 → 95/95, corpus/scenario-ratchet.json TERM 6 → 16. Попутно 22 новых объявления словаря размечены метками §218: unlabelled у пакета 164 → 159 при labelled 0 → 22.

  • gen_constitution_semantics.py снова строит audit-world. С 95e1c62 (28.08, 14:58) au.interpretation сам приводит of к списку — schema v0.2 объявляет обе связи массивами, — а генератор оборачивал результат второй раз и получал [[…]]. linked падал валидацией legal-ir на шести узлах толкований rights, то есть любая регенерация конституционных CLIR была невозможна; закоммиченный linked пережил это только потому, что старше правки. Шесть устаревших обёрток сняты, сборка воспроизводится байтово.

  • Учёт статей молчал у одиннадцати закреплённых текстов семи пакетов — теперь называет себя неизмеренным. article_accounting возвращала пустой словарь, когда конвенция деления не опознана, а пустой словарь исчезал из отчёта бесследно: ветка «учёт статей: НЕ ОБЪЯВЛЕН» требует ненулевого числа НАЙДЕННЫХ статей, поэтому документ без опознанной конвенции не печатал о полноте ни строки. Отсутствие меры снова читалось как её благополучие — тот же отказ, о котором предупреждает докстринг ArticleConvention, только этажом выше. Найдено проверкой обещания пакета УЕФА («отчёт честно говорит НЕ ОБЪЯВЛЕН — отсутствие меры видно, а не молчит»): обещание было неверным, ^Article \d+ не берёт ни одна из шести конвенций. Пробел оказался общим: вместе с тремя редакциями регламента молчали health-procurement, два текста personal-data, три текста poor-settlement, samokat-eula и казахская редакция Конституции — в ней 103 вхождения «N-бап», но ни одного с начала строки, тогда как русская редакция ТОГО ЖЕ акта измеряется и печаталась как учёт акта. Маркер unmeasured несёт причину по каждой публикации, печатается строкой «учёт статей [<файл>]: НЕ ИЗМЕРЕН — …» и считается в сводке, которую ворота печатают под --quiet. В accounting маркер не попадает: иначе неизмеренная редакция затёрла бы учёт измеренной у того же акта — правка ради видимости отняла бы меру у соседа. Причины неопознания сознательно не различаются: «документ делится, конвенция не видит» и «документ не делится вовсе» (английский акт 1691 года — одна секция целиком) по виду текста неотличимы, а придуманное различие было бы авторской разметкой внутри инструмента.

  • uefa-ucl назван в каталоге MCP. Строки в PACKAGE_TITLES не было, и law_packages отдавал регламент голым ключом через фолбэк — без обеих границ, которые пакет объявляет о себе сам: ничья ровно двух команд и отсутствие правовой силы (обе закреплённые редакции сменились, групповой этап с сезона 2024/25 заменён этапом лиги). Пакет с внешним оракулом предъявлялся спрашивающему как действующее право.

  • «Қарамола ережесі»: десять дефектов, каждый при зелёном lawc check и байтовом differential. Пакет пройден целиком — семь файлов, сверка правил с закреплёнными текстами плюс механический аудит связей. Регрессия выросла с 31 сценария до 89, тесты §267 — с 22 до 77; 338 релаций и 257 правил, ни одной мёртвой релации, ни одного мёртвого гарда, ни одного эмпирического предиката, выводимого правилом. Повторяющиеся классы:

    • мёртвый груз — объявление без единого потребителя (mal_unit, summoned_on, counter_matchmaking_dispute) и факт акта, не доходящий до ответа: mal_cap держал потолки ст. 58 («Құлын — 2 қойға дейін»), которых не читало ни одно правило. Потолок теперь выводится и делает оценку бия по ст. 60 проверяемой, оценкой при этом НЕ становясь — нижнюю границу акт не называет. Последняя релация оживлена не удалением: за counter_matchmaking_dispute стояло невыраженное первое предложение ст. 49 («Қарсы құда дауларын билер реттейді»), и подсудность — такое же содержание нормы, как санкция;
    • должное, выданное за сущее — ст. 8, 12, 25, 65 и 23 говорят «тиіс» и «керек», а выводили САМО исполнение из факта суда: «решение объявлено» ⇒ «надпись на обороте сделана». Вывод не мог оказаться ложным, и нарушение было неотличимо от соблюдения. Форма разделена на требование (из акта), исполнение (факт дела) и упущение (default negation §113). Ст. 16 получила ТРЕТЬЮ форму: «жазып қойғаны артық болмайды» — не должное, а пожелание, и правила об упущении у неё нет и быть не может;
    • ключ, отвергающий работу самого акта — key(dispute, offender) на offence_of объявлял «одна квалификация на лицо в деле», тогда как ст. 41 сама переквалифицирует барымту ниже порога в кражу: нормальная работа статьи давала KEY_CONFLICT §196 вместо ответа. Тот же класс у togyz_awarded, где ключ на пару «дело, лицо» заставлял ОДНО присуждённое число сверяться с двумя вилками ст. 32 — две девятки объявлялись и лежащими в пределах, и вышедшими за них; сорт девятки вошёл в ключ и в оба вывода;
    • придуманная граница — «бір жақсы аттан бастап» (ст. 41) и «ат-шапаннан бастап» (ст. 33) задают отрезок, чей пол назван не в девятках вовсе, а записывались как togyz_penalty(…, 1, 3): присуждение доброго коня без девяток объявлялось вышедшим за пределы, то есть модель отвергала разрешённое актом. Введена форма «потолок без пола» — та же, что mal_cap;
    • разошедшиеся оси — dispute_kind_of объявлена с key(dispute), а константы образовывали ТРИ непересекающихся набора: спор MaleKunDispute не получал ни салауата ст. 26, ни запрета ст. 62, а KunDispute — ни числа подозреваемых ст. 13, ни отпадения долей ст. 15. Воротам это было невидимо, потому что сценарии писались по статьям и каждый подставлял тот вид спора, который нужен его собственной статье;
    • альтернатива, неотличимая от накопления — «15 теңге НЕМЕСЕ атшапан» (ст. 36) и «бір ай … немесе алпыс рет дүре» (ст. 38) давали в CLIR ровно то же, что ДВЕ санкции вместе по ст. 30. Различие жило в комментариях к правилам. Введён признак sanction_permitted; заодно ст. 33 достроена до всех трёх названных санкций — меры двух из них акт не называет, но РОД называет, и он выразим (граница corporal_punishment);
    • ошибки связывания — ст. 9 требовала, чтобы виновным оказался сам допущенный свидетель (в обычном деле норма молчала); ст. 48 не различала сторон у трёх ступеней из четырёх, и сторона жениха получала И удержание из калыма, И взыскание сверх него; ст. 13 проверяла порог «не свыше одной лошади» по СТРОКЕ пересчёта, а не по всему құн; ст. 14 и 21 принимали любого муллу вместо волостного, которого называет акт.

    Отдельно названы, а не выражены, две вещи, которых акт не даёт ни при каком прочтении: пятое предложение ст. 26 (двадцатилетнее дело «делится на три», но частей роздано три и «қалғаны» распределять нечего, а периоды дают не двадцать лет) и молчание ст. 48 между ступенями 47/37/27/17. Обе записаны тем же приёмом, что испорченные строки ст. 9 и 10, и вторая проверяется сценарием.

  • gen_artifacts.py падал целиком из-за абсолютного импорта в vectors/tools/artifacts/test_render.py. artifacts/build.py импортирует каждый модуль каталога, чтобы найти в нём build, и делает это с vectors/tools в sys.path — форма vectors.tools.artifacts.render там не разрешается, и ворота 4 не работали вовсе. Импорт сделан относительным: работает и при обнаружении билдеров, и под pytest из корня.

  • Предметная компетенция акта на двух основаниях не устанавливалась НИ ОДНИМ вызовом (DECISION-0048). Граница была объявлена в DECISION-0047 §5 и закрыта: цепочка принимает НЕСКОЛЬКО родителей. Пока родитель был один, приказ V2000021744 против Закона об ОСМС давал LDC-W5304 на половину предмета из словаря Кодекса, а против Кодекса — на половину из словаря Закона; каждый вызов был честен, и ни один не отвечал на вопрос целиком. С обоими родителями объединение предметов покрывает предмет акта, и предупреждение о предмете ИСЧЕЗАЕТ — остаются ровно две честные границы: W5303 (редакция Кодекса 2020 года не закреплена) и W5304 (тождество органа через границу пакета). Ноль ошибок. Основания маршрутизируются по пространству имён, а два разных пробела названы порознь: осиротевшее основание («проверить нечем») и неиспользованный родитель («здесь не проверено ничего»); второй звучит только когда основания достались другим, иначе он удваивал бы первый. Побочно вскрылось: вызов с ОДНИМ родителем теперь называет непроверенное основание вслух — раньше оно молча выпадало, и вызов выглядел проверкой акта, будучи проверкой его половины. Три звена вынесены в отдельные функции и считаются каждое там, где ему место; поведение при одном родителе прежнее, что держат 65 ранее существовавших проверок. CLI обеих реализаций принимает список родителей. Ворота — 65/65 → 70/70.

  • Цепочка объявляла нарушением то, чего не могла сравнить — в трёх звеньях (DECISION-0047). Кодекс о здоровье заведён в CLIR-конвейер (2461 узел, 596 правил, ноль статически мёртвых) и получил первый в своём пакете норм-шаблон — power §127 на подпункт 62) статьи 7. Второе основание приказа V2000021744 стало проверяемым, и цепочка выдала на нём три диагностики, две из которых ложны: LDC-E5307 «предмет вне полномочия» и LDC-E5306 «издатель не holder». На деле «уполномоченный орган» есть и у Кодекса (health-code#AuthorizedHealthBody), и у Закона (osms#AuthorisedBodyOfHealth) — один орган под двумя именами, и различие ИМЁН о компетенции не говорит ничего. Тот же дефект, что закрыт DECISION-0045, в двух новых звеньях. Введено правило сравнимости: сравнивать осмысленно, когда оба идентификатора из одного пространства имён (пакетно-квалифицированный ns#Local называет узел пакета, голый URN — сущность глобально, смешанная пара общей наименовательной власти не имеет). Не сумев сравнить, цепочка даёт LDC-W5304 с указанием звена (organ | subject | parent). Третье звено: основание, адресованное ДРУГОМУ родителю, в вызове не проверяется — назвать его неразрешимым значило бы объявить дефектом то, что проверка смотрит не туда; если родителю не адресовано ни одного основания, W5304 говорит «не проверено НИЧЕГО», иначе молчание читалось бы как успех. Существующие сценарии не ослаблены и это проверено: фикстура именует органы голыми URN, и «тот же пакет, другой орган» по-прежнему LDC-E5306. Приказ теперь объявляет ОБА основания преамбулы и обе половины предмета: против Закона — ноль ошибок и одно W5304, против Кодекса — ноль ошибок, W5303 (редакция 2020 года не закреплена — первое срабатывание DECISION-0045 на живых данных) и два W5304. Ворота — 51/51 → 65/65.

  • Оснований у акта бывает несколько, а поле несло одно (DECISION-0046). Приказ V2000021744 издан «в соответствии с подпунктом 62) статьи 7 Кодекса … И пунктом 1 статьи 34 Закона …» — оснований два, и это обычная форма подзаконного акта, а не редкость. Пока basis §27.1 был одиночным, одно из двух приходилось выбрасывать, и потеря была молчаливой ровно того рода, что §206 совершает с предпоследним then: объявление принято, документ схемно валиден, половины делегации нет. Поле стало ПОВТОРЯЕМЫМ, значение — всегда массив, даже при одном основании (форма, зависящая от их числа, заставила бы потребителя разбирать два вида одного поля). Цепочка: каждое основание разрешается отдельно и неразрешимость одного НЕ гасит проверку остальных — раньше первое же неразрешимое завершало проверку return-ом, и при двух основаниях опечатка в одном прятала нарушение в другом; издатель обязан быть holder-ом КАЖДОГО; предмет сверяется против ОБЪЕДИНЕНИЯ предметов — акт на двух нормах вправе регулировать то, что дают обе, и требовать покрытия каждой порознь значило бы запретить обычную составную делегацию. Пять сценариев, все под differential кодов: оба целы; одно не разрешилось (LDC-E5304 ровно на него); предмет покрыт объединением, которого не даёт ни одно порознь; сверх объединения (LDC-E5307 называет только непокрытое); издатель не holder второго (LDC-E5306 на него, своё молчит). Схема, оба lowering, оба CLI, вектор T140 (два основания — массив из двух в порядке записи, одно — массив из одного). Ворота — 41/41 → 51/51.

  • LDC-E5305 утверждал «издание вне компетенции» там, где сказать было нечего (DECISION-0045). Найдено при подготовке хвоста «множественное основание»: приказ V2000021744 называет вторым основанием подпункт 62) статьи 7 Кодекса о здоровье, Кодекс понижается чисто, но его редакция закреплена как ДЕЙСТВУЮЩАЯ — adopted @2020-07-07 при in_force с 2026 года, — а приказ принят 08.12.2020. Цепочка отвечала «power не действовала, издание вне компетенции». Последние три слова — ложь: Кодекс тогда действовал, не закреплена редакция, действовавшая тогда; утверждение о неправомерности выведено из неполноты собственных данных. Починить данными нельзя: статья 276 даёт лишь относительную дату («по истечении десяти календарных дней после дня первого официального опубликования»), а дня публикации в закреплённых байтах нет. Поэтому починен ВЫВОД: акт, принятый после принятия родителя, но раньше самого раннего открывающего события §31 всех закреплённых редакций, даёт LDC-W5303 — пробел ДОКАЗАТЕЛЬСТВА, а не вывод о компетенции. Форма не экзотическая: так выглядит любой корпус, пиннящий действующую консолидацию, и до сих пор это молча превращалось в обвинение. Существующие сценарии не задеты, и это проверено: акт до вступления родителя в силу и акт после прекращения родителя остаются LDC-E5305 — оба стоят в воротах рядом с новым. Правка в оракуле, порт в law-eval, обе ветки под differential кодов; ворота — 37/37 → 41/41.

  • lawc check не видел ни одного обязательного поля norm payload §123–§128: двенадцать расхождений со стадией lower и три схемно-невалидных CLIR при двух зелёных стадиях (lawc/crates/law-hir/src/norms.rs — новый модуль, lower/norms.rs, law-cli/src/main.rs).

    Находка пришла из DECISION-0041 одним случаем — power §127 без valid_when: lawc check печатает «check OK» и возвращает 0, lawc lower того же пакета отказывает LDC-E1305. Измерение матрицей из 14 проб показало, что случай не один. Расходились двенадцать: bearer §123 и window §124 у duty, action/window §130 у запрета, holder/action/window §125 у liberty, holder/exercise/effect/validWhen §127 у power, holder/protectedEffect §128 у immunity. Причина у всех одна и она шире списка полей: стадия check не излучала ни одного кода диапазона E13xx — проверено грепом по эмиттерам, вне lower/ их нет.

    Две пробы оказались хуже расхождения — молчали ОБЕ стадии. duty без goal и achievement-цель без condition дают exit 0 у обеих команд и CLIR, который не проходит собственную схему (DutyPayload.required называет goal, AchievementGoal.required — condition); тем же свойством обладал вид цели вне §124 (Goal.oneOf его не знает). Показано валидацией порождённого документа, а не чтением кода.

    Квалификация — дефект lawc; errata не заводится. §127 требование объявляет, схема держит его в required, а §199 отдаёт диапазон LDC-E1xxx теме («names/packages»), не стадии, — тот же код со статики есть применение словаря по назначению, а не его расширение. §210.1 (E-0040, тем же днём) требует того же прямо: диагностика звучит «одинаково на каждом входе, принимающем исходный текст». Прежний довод STATUS («расширение check нормализатором — проектное решение по прецеденту LDC-E1314/DECISION-0028») исправлен там же: у дела §168 узла в программе нет, поэтому его диагностика привязана к стадии; у обязательного поля payload узел есть, а его отсутствие решается по AST.

    Правка — один состав на две стадии, а не копия проверки. law-hir/norms.rs держит таблицу обязательных полей (required у *Payload), отображение поверхностных имён в ячейки payload (effect/effect_terminate/effect_modify → одна ячейка §127; valid_when → validWhen) и norm_payload_diagnostics, которую зовут обе стадии: check_norms среди резолверных проверок и lowering на тех же местах, где стояли его собственные. Две копии таблицы разошлись бы молча — добавленное в схему поле вписали бы в ту, что на глазах. Плюмбинг диагностик lowering-а в check не делается по тому же доводу, что в E-0040: без --imports они несут LDC-E1104/LDC-E1105 и уронили бы check на корпусе по чужой причине.

    Векторное обязательство исполнено парой T134/T135 (static, L3, команда check). T134 — восемь норм, у каждой отсутствует ровно одно поле required, восемь вхождений LDC-E1305; вектор об одном поле был бы зелёным при четырёх незакрытых модальностях. T135 — граница: полные нормы всех пяти модальностей приняты, кода нет ни разу, и отдельным утверждением effect_terminate заполняет ту же ячейку, что effect (проверка по буквальному имени сломала бы терминирующую власть). Пара несущая: без T135 «отвергать всякую норму» прошло бы T134. Крейт-тест check_and_lower_agree_on_required_norm_fields сравнивает множества сообщений двух стадий, а не «обе непусты».

    Область. До правки: 12 проб check=0 / lower=1, 2 пробы 0/0 со schema-невалидным CLIR; после — 14/14 согласованы. LDC-E1305 не звучит ни разу на 39 пакетах corpus/laws; в 705 закоммиченных norm_template нарушений required ноль, поэтому три новых отказа корпус не трогают. T094 остаётся вектором лоуверинга и не переписан — его утверждение о наборе проверок в силе; поправлен только комментарий источника, говоривший, что «на check кода нет», — это и был дефект, а не свойство payload-а. Голдены неподвижны, differential 115/115, демо 50/50 байтово, check_norm_statics 14/14, cargo test без провалов.

    Расхождение стадий шире этой правки и остаток назван. Тем же свойством обладают процедуры §160 — LDC-E1311 (не ровно одно initial), LDC-E1312 (конец перехода не объявлен), LDC-E1313 (переход из терминального состояния): все три check=0 / lower=1, воспроизведение готово. Туда же ранее записанный шов E-0013 (LDC-E1317/LDC-E1318) и проверки ФОРМЫ значения внутри payload (completeness_policy обязан быть StableId, effect обязан быть атомом) — им нужен разбор выражения, и общая таблица их намеренно не покрывает: её граница ровно «обязательное поле отсутствует».

  • Слой не видел сахар: fiction defeasible и classification при --layer L0 принимались молча (lawc/crates/law-hir/src/layers.rs). scan_decl не имел ветвей для DeclKind::Fiction и DeclKind::Classification вовсе, а таблица opaque_layer держала строку "classification" => L1, которая читается как покрытие и им не является: у классификации давно есть собственный вариант DeclKind, и Opaque до неё не доходит. Ветка умерла, когда классификации написали разбор.

    Цена — не разница в числе: LAYERS-SURFACES §2.3 называет fiction strict в составе L0, а fiction defeasible и любую classification — в составе L1, и rule R defeasible при --layer L0 честно отвергалось LDC-E8101, тогда как дословно эквивалентная fiction F defeasible проходила. Синонимичная запись обходила диагностику, то есть заявка слоя в conformance descriptor переставала что-либо значить для программ с сахаром.

    Слой считается по СИЛЕ (§147 разворачивается в правило той же силы), а у классификации — самой конструкцией, без оговорки о силе, как и написано в §2.3. Строгая классификация даёт поверхностный слой L1 при семантическом L0 — асимметрия законная и предусмотренная ci/check_layer_inference.py («семантический ≤ поверхностного»). Закреплено векторами LAY-L0-VIOLATOR-FICTION-DEFEASIBLE и LAY-L0-VIOLATOR-CLASSIFICATION (пара к LAY-L0-VIOLATOR-DEFEASIBLE) и крейт-тестом law-hir::fiction_and_classification_carry_their_layer. Мёртвая строка из opaque_layer удалена с записью причины — иначе тот же класс отказа вернётся со следующей конструкцией, получившей собственный разбор.

  • Диагностика §147 печаталась с провалом в тридцать пробелов (lawc/crates/law-hir/src/lower/sugar.rs): в многострочном литерале LDC-E1309 не было \, и текст предупреждения расползался посреди фразы. Контракт статических диагностик — код, а не текст (CLAUDE.md), поэтому ворота молчали; читал это человек.

  • Мера покрытия ворот WP-39 была УЖЕ меры отчёта — ложный отказ и храповик, отставший от корпуса в восемь раз (ci/check_dataset.py, ci/report_norm_graph.py, corpus/dataset/norm-coverage.json, corpus/dataset/holdout.json). measure_coverage звала только run_regressions, тогда как report_norm_graph.main() считает граф ещё и по тестам §267 (run_lawtests, 408 файлов в дереве). Норма, оживлённая только .lawtest, для ворот оставалась непокрытой — то есть храповик требовал покрытия, которого его собственный инструмент не видел. Это не разница в числе: пакет urn:kz:corpus:clir:social ушёл из регрессии переназначением CLIR_PACKAGES["soc"], и ворота печатали настоящий отказ «покрытие упало 1 → 0» при живых двух тестах пакета. Оба рода сценариев теперь идут в один накопитель, неполная мера отказывается замораживать (run_lawtests != 0 — SystemExit), а граница меры проведена по документам CLIR: программы conformance-векторов (urn:law:vectors:*, 62 пространства имён, приезжают с тестами из vectors/) в храповик датасета не попадают, но пакет корпуса без единого rule остаётся в файле со своим нулём — иначе «не измерялся» и «измерен, ничего не сработало» неразличимы. Реестр RUNNERS дополнен шестым раннером: run_samokat_scenarios.py исполнялся воротами и имел оба требуемых шва, но в мере не значился (тот же класс, что найденный 27.08 faraid). Порог пересобран: 3 056 правил в 42 пакетах против прежних 381 в 28, ни один пакет покрытия не потерял. Срез перезаморожен 75 → 286 пар / 740 норм — за сутки корпус вырос вчетверо, и две нормы среза обзавелись двойником по semanticHash §209 в train (linked-audit, ст. 43/44); перезаморозка проведена до какого-либо обучения, поэтому свойство held-out не потрачено, и срез впервые попал в ориентир фазы B4 (200–500 пар).

  • Молчаливая ссылка в пустоту: имя, которое ничего не называет, лоуверилось в const_ref на несуществующий символ (errata E-0032, векторы T079/T080/T081). Класс отказа, снаружи неотличимый от исправной нормы: lawc check чист, lowering «полный», CLIR schema-валиден — референциальной целостности RefTerm.id схема не выражает, там StableId, то есть строка. Правило после этого не может сработать никогда. Ни одни ворота этого не ловили: ci/check_dead_rules.py классифицирует правила, которые ИСПОЛНИТЕЛЬ пропускает, а такое правило исполняется и просто не находит фактов (rule_execution_status → ('executable', None), проверено вызовом); ci/check_rule_executability.py синтезирует дело ПО ТЕЛУ и сочиняет факт в том числе для висячей константы. Закрыты три подкласса, у которых законного употребления нет ни одного:

    • LDC-E1317 — имя в generator-е comprehension §52.1, не введённое ни биндером правила, ни let, ни самой comprehension: это свободная переменная §188, а не константа. Во всём дереве таких позиций ноль, поэтому отказ введён сразу;
    • LDC-E1318 — сторона priority, не назвавшая после lowering-а ни одного узла; страховка стадии, а не находка: имя, НЕ объявленное правилом, уже отвергается статикой — LDC-E4108 (§192) на check. Молчаливым остаётся ровно случай ниже, где правило объявлено;
    • §206 против §116 — дизъюнктивное тело разворачивается в <Name>/alt/N, а lower_priority продолжал собирать sid(<Name>), то есть имя, которому после развёртки не отвечает ни один узел. Сторона теперь разрешается таблицей ПОРОЖДЁННЫХ id (Ctx.rule_ids, ведётся по факту, а не пересчётом DNF — вторая копия правила расщепления разошлась бы с первой молча), и приоритет разворачивается веером по альтернативам. Нерасщеплённый случай даёт узел с прежним id и прежними байтами. В Конституции так висели четыре ребра: три от компилятора (ст. 79/80 — исключения к неприкосновенности судьи, депутата, омбудсмена) и одно от corpus/tools/gen_constitution_semantics.py, который изымал PresumptionOfInnocence/R1 и оставлял ссылающийся на него приоритет; там же добавлен общий проход, изымающий приоритет вместе с потерянной стороной. Граница названа прямо: все четыре были мертвы латентно — голова правила иммунитета есть норм-шаблон, а голова исключения литерал, и в v1 эта пара не конфликтует вовсе, приоритету нечего было разрешать даже будучи связанным. Поэтому регрессии байтово прежние (KZ 236/236, конституционная 85/85), и «правка изменила ответ права» было бы неправдой; изменение поведения показано на минимальном воспроизведении той же формы, где обе стороны литералы: BOTH + неразрешённый конфликт → TRUE_ONLY + пустой список. T080 закрепляет действующий LDC-E4108 (§192): до сих пор его держали только тесты крейта, то есть поведение ЭТОЙ реализации, — и он же граница для T081. Тем же заходом закрыты два зазора, названные при разборе:
    • LDC-E4111 (§192, warning) — приоритет, стороны которого играют в разных механизмах: одна выводит НОРМУ, другая литерал. LDC-E4107 существовал и ловил половину требования (пара литеральных голов о разных предикатах), но норм-голову не видел вовсе: collect_rules её не собирает, rule_head даёт None, и условие замыкалось молча — ровно на рёбрах Конституции. Соображение проверено по коду оракула: pair_gt спрашивают только внутри группы одного literal_key (§111), rule_gt — только на паре power/immunity (§128); литерал с нормой не встречается нигде. По всему дереву ровно 3 срабатывания, все — известные мёртвые рёбра, ложных нет. Вектор T099 держит и отрицательную половину: приоритет между противоположными полярностями одного атома нем;
    • байтовый гейт корпуса. ci/check_lower.py покрывает vectors/ и demo/, а corpus/clir/ держится идемпотентностью шага 4 — и в его списке не было corpus/tools/gen_constitution_semantics.py: у 8 конституционных пакетов и audit-world гейта против компилятора не было вовсе, отчего висячий PresumptionOfInnocence/priority и пролежал незамеченным. Генератор впаян между sync_constitution_sources.py и gen_kz_clir.py; проверено пересчётом — все 37 файлов corpus/clir/ порождаются генератором из шага 4, сирот нет.

    Новый режим утверждения у раннера векторов — resolvedReferences в lower-shape: const_ref собственного namespace обязан называть узел документа. Байтовое сравнение с ir.json подтвердило бы висячую ссылку наравне с любой другой, если она была там вчера.

Изменено

  • Навигация расширения VS Code стала пакетной — переход к определению, ссылки, hover и автодополнение видят соседние файлы пакета §22 (DECISION-0033). До правки все четыре провайдера сопоставляли имя только внутри открытого файла — комментарий в extension.js это фиксировал дословно, — и после перевода диагностик на пакетную проверку стало видно главное следствие: Order, объявленный в 00-package.law, не находился переходом из 03-age.law. Границу пакета даёт lawc package-root (ни строчки семантики в JS — инвариант 5); объявления соседей читаются lawc parse --ast по пути с диска и кэшируются по mtime, поиск последовательный с ранним выходом (имена в пакете уникальны — §24, LDC-E1201 — а объявления по конвенции живут в первых файлах). Ссылки собираются по всем файлам пакета с ограничением параллелизма; hover отвечает там же, где отвечает переход; автодополнение помечает чужой файл-владелец. МЕЖпакетная резолюция (pkg::symbol) по-прежнему вне объёма. Установленная копия расширения — отдельный артефакт: правка editors/vscode/ не доезжает до Cursor сама, копию в ~/.cursor/extensions/law-dsl.law-dsl-0.0.1 надо синхронизировать (или переустановить VSIX) и перезагрузить окно.

  • Нормы rom.corpus.de_legibus размечены метками §218 — витрина перестала называть право идентификаторами. До правки в пакете были размечены только type_decl (34/34) и symbol_decl (123/123), а rule (67) и norm_template (41) — ноль из; читатель видел «активируется нормативный шаблон «VotaReddere»» рядом с русскими «Человек», «Обет», «принял обет». Механика ровно та, что описана в label-ratchet.json: verbalize._ref сваливается на quoted_label(node, local_name(id)), а переименовать идентификатор по-русски нельзя (§14, DECISION-0002 → LDC-E0103), — то есть единственный канал имени это метка. Метка ставится на декларацию правила и разливается на каждый порождённый ею узел (attach_decl_envelope, lawc/crates/law-hir/src/lower/mod.rs), поэтому 62 правки исходника закрыли 67 узлов rule (пять из них — альтернативы §206-развёртки X/alt/N) и все 41 norm_template, включая ту, ради которой всё началось. Конвенция взята у актов на чужом языке (karamola, zheti-zhargy), а не у KZ-актов: язык оригинала la official — слова самого lex, русское имя ru-KZ translation, номер параграфа и закона в обеих («§22, lex 21. Caute vota reddunto» / «§22, закон 21. Обеты исполняют осмотрительно»). Цена измерена, а не обещана: semantic hash пакета не сдвинулся ни на бит (errata E-0010), content hash сдвинулся ровно у 108 узлов — тех самых, кому метка добавлена (§202, §212). Ворота: run_de_legibus_scenarios.py 4/4 с байтовой сверкой lawc eval, check_kz_differential 290 вызовов, check_lower 81/81, тотальность вербализации — 0 пробелов на всех 37 документах под law.verb.ru@0.5.0. Что осталось идентификаторами и почему: 28 фрагментов §28 (собственного имени у фрагмента нет — его тождество локатор, и тело блока называет его «Фрагмент article/22/lex/26 издания …») и одна publication.

  • Храповик меток расширен на нормы — слепое пятно, в котором стояло 1135 узлов, закрыто воротами, а не обещанием. ci/check_label_coverage.py мерил только DICTIONARY_KINDS = ("type_decl", "symbol_decl"), поэтому rom-de-legibus при нуле размеченных норм числился 157/0 — «100 %», — и то же самое верно для всего корпуса: 1135 rule/norm_template без метки при 1730 размеченных (kz-gpk 670, kz-constitution-linked 145, kz-pd 108, kz-consumer-protection 53). Пакет приезжал с непрочитываемой вербализацией, не уронив ни одних ворот. Заведено ВТОРОЕ измерение (NORM_KINDS = ("rule", "norm_template")) отдельным разделом norms у каждой строки corpus/label-ratchet.json: пробелы разной природы и чинятся в разных местах — словарный говорит идентификатором внутри фразы, норменный делает идентификатором само имя нормы и заголовок её блока. Плоские числа словаря намеренно оставлены на месте, а не переехали внутрь dictionary: они поставлены осознанным действием и не должны сдвинуться от расширения ворот. Строка без раздела norms — тоже отказ, иначе расширение держалось бы на дисциплине автора строки: канарейка --canary бьёт три ступени (снятая метка словаря, снятая метка нормы, забытый раздел). Проверено живой мутацией, а не чтением: снятая метка у одного norm_template даёт «размеченных норм 107, храповик держит 108» и «норм без метки 1 … метка ставится на декларацию правила»; незамутированное дерево про пакет молчит. Границу сняли с текущего состояния — размечать хвост ворота не требуют, они лишь не дают ему расти. Что осталось красным и почему это не про нормы: три конституционных пакета (court 249/241, linked 1264/1225, president 164/131) и невписанный ru-samokat-eula краснеют по СЛОВАРЮ — те же четыре отказа стояли и до расширения; раздел norms не добавил ни одного нового.

  • personal-data разрезан на многофайловый пакет §22 — второй акт корпуса после ОСМС (DECISION-0011 §5.1). corpus/laws/personal-data.law (2616 строк, второй по величине .law репозитория) заменён каталогом corpus/laws/personal-data/ из 11 файлов по уже размеченным швам // --- Ст. N: … ---. Разрез чистый: порядок исходника сохранён, relation остались там, где стояли, наверх не поднято ничего. Закреплённые тексты переехали под корень пакета (§27.3), поэтому local_path не изменился. Обратимость проверена парой на ОДНОМ import-контексте: lawc lower файла и каталога дают побайтово один документ (504 694 б, равен закоммиченному kz-pd.lawir.json); sync_personal_data_fragments.py после разреза даёт нулевой дифф. Правки путей — corpus/gen_kz_clir.py, corpus/tools/sync_personal_data_fragments.py, corpus/README.md; ворота правок не потребовали (они уже знают «акт — файл ИЛИ каталог»). Ловушка, которой не было у ОСМС: секции разделены пустой строкой, и разрез «от комментария до комментария» оставляет ХВОСТОВУЮ пустую строку — форматтер §214 её срезает, и 10 файлов из 11 приезжают «не отформатирован» при том, что монолит lawc fmt --check проходил. Диапазон обязан кончаться на начало_следующей_секции − 2. Осталось вне ворот: .claude/skills/formalize-act/scripts/lint.py глобит corpus/laws/*.law плоско и не видит ни одного многофайлового пакета — дыра существовала до разреза, но каждый перенос акта её расширяет.

  • Индекс по позициям аргументов §230 портирован в law-eval. Корзины здесь не ленивы, в отличие от оракула, и это следствие устройства, а не вкуса: §208-байты аргументов уже посчитаны при интернировании (arg_bytes_by_id), поэтому вставка не платит канонизацией — тем, из-за чего ленивость понадобилась в Python. Замер на той же цепи (60 рёбер, транзитивное замыкание): 4,06 → 2,02 с пользовательского времени debug-сборки. Выигрыш меньше оракульного (×6,8) закономерно: движок уже несёт semi-naive (DECISION-0014), и часть повторной работы индексу оставлять нечего. Байты: документ цепи из lawc eval совпал с оракульным посимвольно — sha256 63c26be677a4dbd0 у обеих реализаций и в обеих формах движка (с индексом и без). Свойство закреплено тестом argument_index_keeps_completeness_and_order — порт свойства оракула: полнота и порядок, а не равенство.

  • Индекс по позициям аргументов §230 в оракуле — вторая половина семейства «predicate + argument positions». Связанная позиция конъюнкта (константа или уже связанная переменная) сужает перечисление до корзины _by_arg вместо всего отношения; корзины ленивы — пока позицию-значение никто не спрашивал, вставка за неё не платит (безусловная поддержка стоила +11 % на декартовой нагрузке ворот 28/37, которой индекс не нужен по построению). Замерено до правки, а не после: на живом KZ-корпусе связанная позиция есть у 71 % перечислений (26 249 из 37 121), на конституции и своде Цицерона — ×1,0 (крупнейший список предиката 2 атома), на декартовой нагрузке ноль по построению, а на рекурсивной форме (транзитивное замыкание, цепь 60 рёбер, 1891 узел proof) — 4 538 400 кандидатов против 73 750, ×61,5. Замер после: та же цепь 24,65 → 3,62 с CPU при байтово том же документе (sha256 совпал), корпус — 314 981 → 71 787 пройденных атомов (×4,4). Эквивалентность доказана, а не предположена: контракт не равенство, а два свойства — полнота (ни один подходящий атом не потерян) и порядок (корзина есть подпоследовательность прежнего полного перечисления), поэтому ВЫБОР корзины из связанных позиций на результат не влияет и планировщик берёт самую короткую. Теневая сверка на живом корпусе — 191 896 вызовов, 0 потерь, 0 нарушений порядка; свойства в lawref/selftest.py. Ранняя канонизация связанной позиции не поднимает свой отказ: CanonError роняет форму обратно в полное перечисление, чтобы ошибка прозвучала там же, где звучала до индекса. Движок пока без этого индекса (инвариант 6 — оракул раньше); differential от этого не страдает: индекс не меняет ни выводов, ни порядка.

  • check_keys §45.1 переведён на индекс предиката — второе семейство §230 закрыто без нового индекса. sorted(store.positive) сортировал ВСЮ базу фактов на каждую keyed-релацию и отбрасывал почти всё; _by_predicate уже давал ровно нужное подмножество в ровно нужном порядке, не хватало отбора по входной стороне (§45.1/§196 смотрят на positive, defeasible не в счёт). Заведены SupportStore.accepted_positive_keys (оракул) и accepted_positive_entries (движок, инвариант 6 — оракул раньше). Замер на живом корпусе: прежняя форма просматривала 826 860 ключей за 7322 вызова, новая — 4 730 (×174,8); крупнейшая база 431 атом, поэтому выигрыш сегодня не в секундах, а в том, что цена перестала расти с базой. Эквивалентность доказана, а не предположена: аргумент о порядке (порядок ключей тотален, фильтрация отсортированной последовательности = сортировка отфильтрованного подмножества), теневая сверка с прежним сканом на живом корпусе — 7322 вызова, 4630 ключей, 0 расхождений, свойство с эталоном-сканом в lawref/selftest.py и тест accepted_index_matches_full_scan в law-eval. Байты не сдвинулись: KZ-регрессия 236/236, конституционная 85/85. Индексы §230 выведены из-под обязательства эквивалентности решением DECISION-0014, поэтому errata не требуется.

  • T080 вписан в таблицу намеренных нарушителей strata.rs. Вектор «priority, называющий несуществующее правило» заведён, а в таблицу теста corpus_and_vector_sources_static_clean_except_designed_violators не попал — cargo test -p law-hir краснел на LDC-E4108 против пустого ожидания. Тот самый класс, о котором предупреждает CLAUDE.md: реестр ведётся руками, и незаписанный нарушитель роняет тест.

  • mcp/law_mcp/server.py разрезан: 2388 строк → фасад 151 строка + десять модулей пакета (core, catalog, query, provenance, whynot, ask_calc, ask_positions, tools, resources, schemas). Снят обходной шов workbench.SERVER: верстак читал через него семнадцать имён, теперь импортирует их из листовых модулей. Оба режима запуска (скрипт из .mcp.json, модуль из site-prototype/ и ci/) сохранены блоком PEP 366; восемь имён внешнего API реэкспортированы из server. Поведение не менялось: парный опыт байтов 131/131 в изолированном worktree, ворота 10/12 136/136.

Вехи M2 «Оракул L0», M3 «lawc: синтаксис и статика» и M4 «Differential L0» — в работе. Статус по рабочим пакетам: STATUS.md.

Added

  • M3 «lawc: синтаксис и статика» закрыта в L0-объёме; §44 concept sugar (вектор T126). concept не значился в диспетчере деклараций и уезжал в Opaque: объявленный предикат не существовал, а правило получало «предикат не объявлен» с указанием на место использования. Реализован по букве §44 — отношение с kind institutional по умолчанию и с явным видом, когда он написан. Из перечня lowering’ов WP-12 остались role §43 и event §79: их десугаризация ссылается на LegalRole/Event из пакетов стандартной библиотеки §261/§263, которых нет в STD_TYPES компилятора, — нужен межпакетный резолвер WP-31/WP-35, и это граница по зависимостям, а не пробел вехи. Сверка каждого DoD — в STATUS.

  • Доступ к полю §40 исполним; петля G-M1b на нём сомкнулась байтово (векторы T124/T125). Барьер LDC-E1305 снят вместе с причиной: у типов появились поля, FieldTerm держит схема и вычисляют обе реализации. Каждый шаг цепочки проверяется по объявлению типа с учётом наследования §42 (LDC-E2111), вид последнего поля идёт наружу и доходит до §48. Рендерер ir→law научен полям и терму field. Собственный дефект, пойманный собственной петлёй: первая редакция писала в FieldTerm имя переменной из исходника, тогда как §205 переименовывает биндеры канонически — check и схема этого не видели, поймало байтовое расхождение ir → law → ir. T100 переформулирован (код сменился с LDC-E1305 на LDC-E2111, утверждение то же).

  • Поля §40 и refinement §41 дошли до канонического документа (векторы T121–T123). entity Person { age: Integer; } лоуверился без fields и без диагностики: EntityDecl нёс только имя и родителя, тело разбиралось лишь на метки. Схема TypeDecl при этом держит fields (и constraint для §41), а оба движка умеют термы record/field — не хватало только поверхности. Правка в три слоя: AST, парсер (where разбирается формулой), lowering. Разбор полей создал бы новое молчание — неизвестный тип поля, — и оно закрыто той же правкой (LDC-E2101, T123). Утверждение «поля доходят» выражено парами hash-compare: до правки обе пары давали один документ. Файлов с полями в дереве было ноль. Остаток §40: доступ x.field и литерал-запись по-прежнему вне среза.

  • Режим property у раннера векторов — свойства §270 стали conformance-
    векторами.
    Три вектора (LAY-L1-PROPERTY-HELD, -VIOLATED, LAY-L0-PROPERTY-COMPARISON); вход — исходники, как у T042/T043: понижение компилятором, исполнение и подсчёт оракулом. Голден несёт вердикт свойства вместе с мощностью домена; раннер повторяет прогон и сверяет байты §211. Обязательство DECISION-0035 §8 исполнено полностью.

  • §169 получил первую исполняемую проверку: дело не может импортировать unpinned packages (LDC-E1320, векторы T119/T120). Обязательство DECISION-0028 §7 — «проверка приходит тем же изменением, что и форма, которую она запрещает» — наступило вместе с необязательным version §23 и закрыто в тот же час. До правки .lawcase с import kz.sources; лоуверился молча. Правило различает дело и программу нормативно: §23 разрешает исходнику опускать версию (пиннинг — в lockfile §11), а у дела lockfile_hash §170 обязан описывать мир исполнения, поэтому код звучит на lower-case и молчит на check. Rust-раннер научен команде lower-case — иначе вектор про дело исполнял бы только питоновский. Остаток §169: клауза про live external capabilities ждёт формы external opaque.

  • Ожидания §267 о пути и об отказе (DECISION-0036). expect applied(Правило) и expect issue(КОД) с отрицанием — предикаты над уже построенным evaluation-документом (узел rule_application §180 и запись в issues[]), ни одного нового семантического правила. Существующая форма ожидания не тронута: раннер различает формы по наличию ключа, голдены не двигаются. Опечатка в имени правила даёт отказ с причиной; опечатка в коде диагностики непроверяема — нормативного перечня кодов исполнения нет, и это названо границей. Ворота ci/check_expectations.py — пять ветвей, четыре из них отказные.

  • §23 import: из трёх форм примера самой секции разбиралась одна (векторы T117/T118). §23 говорит «Source code МОЖЕТ указывать version range, но canonical build использует exact version из lockfile», и её третий пример написан без версии — а парсер version требовал; алиас as и селекция ::{…} давали LDC-E0201. Дефект lawc: prose и грамматика согласны. version стал необязательным, двум формам вне среза дан свой код LDC-E0206 (прецедент DECISION-0002). Пиннинг не ослаблен — проверено: lower на импорте без версии по-прежнему даёт LDC-E1104/LDC-E1105, требование §11 живёт там, где §23 его помещает. Сверка на 420 файлах — ноль различий. Побочно: рассуждение DECISION-0028 §6 п. 3 опиралось на грамматику и не сверялось с парсером, поэтому его вывод был верен по случайной причине; обязательство по §169 теперь исполнимо и остаётся открытым.

  • Ветвь сравнения §270 починена — она не работала вообще. Фикстуры первой волны были на атомах; первый прогон сравнения (форма примера §270) дал оператор "ge" не сравнение: таблица инверсии стояла на символах поверхности, а парсер и CLIR несут имена. Правка — имена; тесты пришпиливают их и проверяют инволютивность таблицы. Ворота выросли с трёх ветвей до пяти, вердикты движка и оракула совпали на всех. Названа граница: терм над связанной переменной доступен только агрегатом §59 — тела функций вне среза, поэтому пример §270 буквально не пишется.

  • §217: координаты literate-диагностики стали утверждением вектора (T116). В словаре static-режима не было строки, поэтому «спан меряется в строках документа, а не извлечённого блока» вектором не выражалось — ни код, ни число вхождений этого не различают. Заведено поле diagnosticLines в обоих раннерах (питоновском и lawc test): поле, понятое одним, игнорировалось бы вторым молча. Вектор различает с запасом — между отсчётами пятнадцать строк, — а ожидание считается генератором по тексту файла, не списывается с вывода компилятора. Поле сразу поймало ошибку на единицу в собственной Rust-половине раннера: check_diagnostics уже отдаёт печатные координаты, и добавленный второй remap сдвигал строку.

  • Вердикт свойства §270 под differential, конверт §225 понёс свойства. Составленная программа свойства (закон + наблюдающие правила) ни в один differential не входит по построению, поэтому вердикт приходил бы от одной реализации: lawref/lawtest.py получил run_property, ворота сверяют вердикты движка и оракула на трёх ветвях (канарейка называет расхождение поимённо). lawc test --json понёс propertiesTotal/propertiesFailed/ properties[]; ok считается по обоим родам проверок — прежде свойство, павшее при зелёных тестах, уезжало с ok: true. Голден на ветви «нарушено»: failed: 0 при ok: false.

  • Ворота 39/39: исходники векторов проходят полный lawc check. Дефект T043 был виден компилятору и не виден никому — полный check по vectors/**/source*.law не гонял ни один гейт: check_lower зовёт lower, glob-тест strata зовёт только check_strata, static-режим проверяет вектор про себя. 162 файла оставались вне типовой проверки. Ворота пропускают static-векторы (у них утверждение своё, сверяемое обоими раннерами — второй источник истины не заводится) и требуют чистоты от остальных; девять намеренных нарушителей записаны с причинами, а нарушитель, переставший нарушать, роняет ворота отдельным сообщением. Замер: 28 static, 124 чистых, 9 нарушителей.

  • VER-KK-L0-CALC приведён к §190 — правкой генератора, а не записью в реестр. Правило DisputeHeard объявляло for dispute: Dispute; при теле, связывающем только person: голова брала свободную переменную (LDC-E4101), и один дефект роняли два независимых пути — ворота 39/39 и glob-тест strata. Квалификация по инварианту 8 — дефект ВЕКТОРА: его requirement называет §218.1, §190 нет ни в одном specRef, а все девять записанных нарушителей — вектора, у которых диагностика И ЕСТЬ предмет. Прецедент T043: типовой дефект вектора чинится в генераторе (инвариант 2). В ver.py заведено отношение dispute_filed с меткой kk-KZ, тело связывает биндер позитивным конъюнктом; метка формы §218.1 не несёт, поэтому деградация к атау септік видна дважды. Голден сдвинут точечно: в expected.json — ровно contentHash при неподвижных gaps: 0 / gapKinds: [], а строка, ради которой вектор заведён («Мыналарға қатысты: Дау v0; Тұлғаға v1.»), байтово не изменилась — инвариант 3 не нарушен, поведение неподвижно, сменились байты входа.

  • §270 исполнено: свойства работают (DECISION-0035). property P { forall x in collect v: T where F(v); expect E(x); } понижается в наблюдающие правила и два запроса collect — ни одного нового семантического правила. Синтетический предикат — сток, поэтому право не меняется. Первый прогон опроверг собственное решение: ожидание-атом с одним not E печатало HELD на настоящем контрпримере (в открытом мире §69 not E — «установлено обратное», а типичный провал — NEITHER); теперь две ветви, not_known §113 и not E §66. Вторая находка: not_known в strict-теле движок пропускает предупреждением — свойство «держалось» неисполнявшейся половиной; вердикт теперь несёт список неисполненных наблюдающих правил. Печатаются мощность домена и число пропущенных проверок: без них «нет контрпримеров» ничего не значит. Ворота ci/check_property.py — три ветви.

  • Errata E-0034 / DECISION-0038: §172 назвал два вида запроса, которые обе реализации исполняли годами. Замер: движки различают девять видов запроса, §172 перечислял двенадцать имён, и три вида в нём отсутствовали вовсе — weak_permission, interpretation_analysis, calendar_op. Следствие измерялось не в теории: 9 conformance-векторов несли вопрос, который движки исполняют и голдены фиксируют, а записать его на языке было нельзя. Квалификация — дефект SPEC: расходились не реализации между собой, а CLIR и нормативный перечень, то есть канонический слой оказался шире всякой поверхности, и §269-обмен по этим видам был невозможен. §172 получил weak_permission(actor, action) §126 и interpretation_analysis(group, query) §152 — второй аргумент есть сам запрос, единственное место языка, где запрос принимает запрос (глубина ровно одна). Плюс общее требование §267.2: реализация, не исполняющая вид, ОТВЕРГАЕТ его, а не подменяет соседним.

  • calendar_op в правку не вошёл, и причина измерена. Его запрос — не вызов с аргументами, а имя операции плюс мешок параметров, состав которого меняется от операции к операции ({op,date} … {op,date,days,afterTime,suspensions}). afterTime и suspensions — политика срока §85, а не аргументы; позиционным argument_list §172 они не выражаются, а именованных аргументов вызова в грамматике 0.1 нет вовсе. Поверхность для него — отдельное решение, и шесть векторов остаются в отчёте гейта поимённо, а не пропадают молча.

  • entity_ref §36 появился в рендерере термов. Форма печаталась инлайном в двух местах и отсутствовала в общем _render_term, поэтому терм, состоящий ИЗ НЕЁ, объявлялся невыразимым — хотя парсер её берёт. Вместе с двумя новыми видами запроса это подняло .lawtest с 51 до 60, и все 60 воспроизводят дело байтово и запрос помимо queryId, а check_test_run даёт 60/60 с совпадением вердиктов обоих тулчейнов.

  • Гейт снимает queryId рекурсивно. У interpretation_analysis вложенный запрос несёт свой идентификатор, и сравнение падало по причине, которую гейт сам объявил вне сравнения.

  • Причины пропуска называют настоящий адрес. Сообщение про comprehension §52.1 получали термы, в которых comprehension нет вовсе (T023 — binary, T071 — call), а вектор с политикой замыкания §70 отчитывался как «терм аргумента». Ложный адрес правки хуже отсутствия причины.

  • Вектор T115 — отрицательная половина: имя §172 вне среза исполнения по-прежнему отвергается LDC-E1316. Без неё добавление двух имён было бы неотличимо от снятия проверки вообще.

  • §48 доведён до границы аргумента для вычисленного терма (WP-10, векторы T107/T108). check_arg знал тип листа и молчал о составных термах, хотя вид §58 вычислялся соседним вызовом в том же цикле — и выбрасывался. Теперь связан: f(a + b) сверяется с параметром по виду. Молчание сохранено там, где оно осознанно: Kind::Unknown, тип параметра вне девяти видов, лист. Первый же прогон по дереву нашёл дефект в закоммиченном векторе T043 (5 mrp в параметр Money, при том что корпус объявляет МРП как Quantity и говорит об этом прямо) — исправлено в генераторе; после правки срабатываний по 379 файлам ноль. Две фикстуры §58 несли незаявленное утверждение «арифметика совместима с Text» — приёмник сделан нейтральным. Названная граница: литералы с единицей (1 mrp) не разрешаются literal_type, поэтому в позиции листа путаница Quantity/Money по-прежнему не видна — это территория §49/§50.

  • Рукописные .lawtest заведены под ворота, и мера мёртвых норм их увидела. Параллельная сессия начала писать тесты руками (corpus/laws/zheti-zhargy/tests/, 13 файлов — каждым оживляется мёртвая норма), ворот для них не было. ci/check_corpus_tests.py теперь обходит оба дерева — сгенерированное и рукописное — с отдельным храповиком у рукописных: 167/167, канарейка роняет ворота двумя строками. Отдельно: ci/report_norm_graph.py исполняет все .lawtest оракулом под тем же перехватом (224 теста, вызовов в графе 680 против 363), поэтому оживлённая тестом норма уходит из списка мёртвых — у Жеті Жарғы раздел исчез целиком, при живом механизме у 22 других пакетов.

  • §55.1: паттерны вне среза получили свой код LDC-E0205 (векторы T105/T106). Грамматика даёт четыре формы паттерна, срез разбирает две; три остальных вхождения отвергались — но сообщением «ожидалось =>» (LDC-E0201), то есть как синтаксическая ошибка там, где форма определена грамматикой, и первый такой паттерн — пример самой §55.1 (Ok { value: x } => x). Разрешение по прецеденту DECISION-0002: свой код, своё сообщение с указанием формы, разбор продолжается. T105 держит три вхождения и отсутствие старого кода, T106 — границу (вариант и _ остаются принятыми). Формы по-прежнему не реализованы: вектор закрепляет качество отказа, а не поддержку.

  • §25 namespaced-аннотации: пример самой секции не проходил компилятор (векторы T103/T104). @kz.mining::severity("critical") — пример из §25 — давал LDC-E0201: парсер читал один сегмент имени, тогда как grammar.ebnf даёт annotation_name = qualified_name | "source". Дефект lawc: prose, грамматика и пример согласны. Имя теперь собирается целиком; потребители (requires_feature, expected_computability, source, id) сравнивают с односегментными именами и с чужим пространством имён намеренно не совпадают. T103 — файл принят и код не звучит; T104 (hash-compare) — пара «с аннотацией / без» даёт один semantic hash §209, то есть неизвестная аннотация core semantics не меняет. Байтовый round-trip §25 держат ворота CST (385 файлов). Многосегментных аннотаций в дереве не было ни одной — форма была невыразима.

  • --json у файловой формы lawc test — потребитель перестаёт разбирать вердикт текстом. Флаг был объявлен только у формы test <каталог-вектора> и на .lawtest молча игнорировался; расширение VS Code из-за этого разбирало вывод регулярным выражением — и цена уже была названа в его собственном комментарии: до 27.08 провал печатался в stderr, и односторонний разбор превращал бы его в тишину. Конверт §225 общий с остальными командами: ok/total/passed/failed плюс список тестов с их провалами теми же строками, что печатает текстовый режим (два описания одного вердикта разошлись бы молча). Заодно .lawtest-форма и --program впервые названы в usage: строка помощи знала только test <vector-dir|дерево>, то есть инструмент не рассказывал о собственной команде.

  • Исправлен счёт §172: запросов двенадцать, а не тринадцать. Число «13» стояло в комментарии law-hir/lower/case.rs и дважды в DECISION-0028; фактический перечень §172 — applicable_rules, positions, duties, liberties, powers, immunities, violations, truth, explain, why_not, conflicts, source_trace.

  • Красная фаза TDD называет причину. explain/why-not/graph принимают .lawtest. Проверка опытом показала, что §185 для цикла red → green мало: после дописанной нормы тест остался красным из-за пропущенного связывателя for p: Person; (p стал доменной константой), причём lawc check печатал check OK, а why-not — «блокираторов нет» (правило не стало кандидатом, свидетельствовать нечего). Заведён explain::underivable — статический разбор невыводимости: предикат не объявлен / ни одно правило не выводит / голова без переменных и с другими аргументами. Кладётся в observations (утверждение о программе, не о ложности §185), только при пустом ответе документа. Пять тестов с обеими границами. Попутно: emit_lawtests.py больше не вытирает corpus/tests/ целиком — рукописный тест рядом со сгенерированными переживает эмиссию.

  • field.access отличён от pkg.name на любой глубине (DoD WP-09, векторы T100/T101). Барьер «member-доступ вне среза» (LDC-E1305) существовал, но его условие стояло на длине пути ровно два: v0.home отвергался, а v0.home.city становился доменной константой const_ref "v0::home::city" — со связанной переменной, поглощённой в идентификатор. lives(v0, v0.home.city) компилировался в lives(v0, <const>), второй аргумент переставал зависеть от v0, и §190 этого не видел by construction. Дефект lawc, механический: == 2 → >= 2. Ложных срабатываний нет — файлов с таким путём во всём дереве ноль. T100 держит обе глубины, T101 — границу (константа-путь лоуверится).

  • Errata E-0033: поверхность теста §267 описана требованиями, а не примером; DECISION-0028 принято. §267 состоял из одного примера на десять строк, и три вещи, которые реализация обязана исполнять и исполняла, не были записаны в нормативном тексте нигде: словарь expect, обязанность ОТКАЗАТЬ при неисполнимом запросе evaluate вместо подмены его соседним, и происхождение программы (тест несёт вход §168/§173, но не право §169). Всё это жило в черновике DECISION-0028 и в таблицах кода. §267 получил подразделы 267.1–267.3 с таблицей семи полей и адресом перечня у каждого (§62, §91, §91.1, §134, §174.1, §175). Решение переведено в ПРИНЯТО; при переносе зафиксировано расхождение его чернового перечня с реализованным — три поля добавлены (applicability_status, evaluation_status, trigger_status), два не реализованы (issues, conflict), и нормативен §267.3, а не текст решения.

  • LDC-E1319: значение ожидания сверяется с перечнем §174.1 — опечатка стала ошибкой компиляции, а не падающим тестом. Замер до правки: expect truth_status == TRUE_ONLYY лоуверился молча и уезжал в документ строкой; автор получал «truth_status == TRUE_ONLYY: в документе TRUE_ONLY» и шёл искать дефект в праве там, где дефект в букве. Ни одна проверка дерева этого не видела: словарь не был назван требованием, и сверять было не с чем. Отвергаются два разных пути — имя вне перечня (в том числе имя ЧУЖОГО перечня: truth_status == PROPOSITION) и значение, не являющееся именем вовсе; value не сверяется ни с чем, у DATA перечня нет. Вектор T089, обе половины плюс отрицательная (LDC-E1316 не звучит — поле законное, и спутанный код дал бы неверный адрес правки).

  • Перечни §174.1/§175 читаются из нормативной схемы обеими реализациями. Компилятор — через include_str! spec/schema/evaluation.schema.json (тем же приёмом, что реестр features), оракул — через свой реестр схем. Рукописная копия дала бы не независимость, а второй способ отстать от errata: перечень EvaluationStatus уже рос (RESOURCE_LIMIT), и копия отстала бы, не уронив ни одних ворот. Отображение «поверхность → ключ документа» при этом остаётся двумя независимыми копиями намеренно — там differential вердиктов держится на них.

  • Сайт: страница поверхности теста и два решения. Топик «Справочник языка» получил третью страницу — формы test_decl/test_item/case_item/ context_inline/assertion_decl срезом из нормативной грамматики со ссылкой в её раздел, таблица полей expect извлечением из §267.3 (а не пересказом) и названная граница «грамматика шире требования»: справа от expect грамматика допускает pure_expression, сужение живёт в статике. Опубликованы DECISION-0028 и DECISION-0019 — до этого из 33 решений на сайте было одно, и ссылки первого на второе уводили бы в никуда.

  • §196 п. 3 реализован: LDC-E3101 — первый код диапазона E3xxx вообще (WP-11 b, векторы T097/T098). Диапазон «time/context» §199 был объявлен, известен реестру диагностик — и пуст во всём дереве. Проверка ловит observed позже recorded на утверждении §71 и излучает предупреждение, а не ошибку: §196 называет warning, данные исполнимы, файл принимается — и это отдельное утверждение вектора. Оговорка §196 «unless ingestion policy allows» невыразима в 0.1 (словосочетание встречается во всей спецификации ровно один раз — в самом §196; ни продукции, ни поля схемы у него нет), поэтому предупреждение безусловно, а граница записана в коде. Литералы разной грубости не сравниваются — их порядок решает политика §82, которой у статики нет; правило взято у §193, и общий хелпер granularity поднят на уровень модуля, чтобы копии не разошлись.

  • Срез запросов расширен collect/term; итог измерен и оказался почти нулевым (DECISION-0028). Comprehension §52.1 в evaluate спрашивает множество (COLLECTION §174.1), любой другой терм — значение (DATA); агрегат §59 над comprehension остаётся значением. Покрытие: векторы 51 → 57, корпус 153 → 154. Причина малого прироста названа и измерена: интерим-артефакты запросов написаны в форме ШИРЕ поверхности — у 7 из 8 collect-запросов векторов и у 29 из 29 корпусных переменная comprehension без типа, тогда как §52.1 тип требует; у части element не совпадает со связанной переменной. Тот же класс, что интерим-queryId: артефакт пользуется формой, которой в языке нет. calendar_op не отображён намеренно — поверхностной продукции у него нет ни в §85/§86, ни в грамматике. Решения по §270 (домен — имя из fuzz-инфраструктуры, seed — metadata_item внутри property, expect — формула над термами) приняты и записаны в DECISION-0028 §6.

  • §195 разобран поимённо; два реализованных пункта получили векторы T092–T094 (WP-11 b). LDC-E4110 (unless на strict) и LDC-E1305 (payload нормы §123/§124, сорок мест излучения) работали без единого вектора — проверка есть, требования к ней нет. T092 отвергает unless на strict, T093 держит границу (unless на defeasible законен §149/§150), T094 требует, чтобы нормализатор дошёл до КАЖДОЙ payload-проверки — LDC-E1305 ровно дважды. Аудит десяти пунктов §195 записан в STATUS: два реализованы, четыре невыразимы поверхностным языком 0.1, два исполнительские, один не определён машинно, а «achievement без window» расходится с реализацией лишь на вид — грамматика делает window обязательным, и пункт относится к CLIR, авторённому напрямую. Названа цена: check видит E4110, lower — E1305, ни одна команда не видит обе.

  • Корпус заговорил на §267: 153 сценария регрессии стали файлами .lawtest (DECISION-0028). corpus/emit_lawtests.py снимает сценарии зелёных раннеров швом set_evaluate и переписывает их на поверхность §267 (corpus/tests/**, 12 пакетов). Регрессия и без того зелёная — ворота ci/check_corpus_tests.py проверяют другое: что те же сценарии на поверхности дают те же ответы. 153/153. Эмиссия только из зелёного прогона; список раннеров — реестр. Найдено при эмиссии: программа сцены местами шире закоммиченного CLIR (marriage — 393 узла против 23, personal-data — 865 против 495), состав живёт в питоновском раннере и не записан артефактом; 59 сценариев пропущены именно поэтому. Ошибка измерения, записанная как есть: первая сверка шла по semanticHash и дала ложное «363 из 363» — поля на верхнем уровне у части документов нет, и None == None истинно; сверка переписана на множество id узлов, честная цифра 253 из 363.

  • Лексические коды и literate получили векторы: T085–T088 (WP-08 (c)). Тройка T076–T078 закрыла парсерные коды, здесь закрыты LDC-E0101 (недопустимый символ — диагностика на каждом), LDC-E0102 (незакрытая строка §17 кончается на переносе, три нарушения → три диагностики), LDC-E0103 (Unicode-идентификатор: одна диагностика на весь идентификатор и НИКОГДА не «недопустимый символ» — DECISION-0002 п. 1 и п. 4) и literate-вход .law.md §7.1/§217: проза с relation broken( и $ программой не является, а ошибка внутри блока law звучит. Все проверены на обоих раннерах; на T088 второй раннер различает — читай он .law.md как обычный .law, проза дала бы коды. Утверждение §217 о координатах Markdown вектором не выражено (словарь static-режима строк не знает) — граница названа в STATUS.

  • §24: internal разбирается — раньше он молча удалял декларацию (WP-09, векторы T083/T084). Грамматика даёт visibility = "pub" | "internal", парсер реализовал первую половину; internal relation helper(…) уезжал в Opaque, декларация исчезала из CLIR, check OK с нулём диагностик, а правило, читающее её предикат, получало «LDC-E2102: предикат не объявлен» с указанием на место использования. §24 называет internal умолчанием — значит явная запись умолчания удаляла декларацию, а её отсутствие нет. Дефект lawc, не SPEC: prose и грамматика согласны, errata не нужна. В AST internal намеренно неотличим от опущенного модификатора — канон умолчаний не пишет, и T083 (hash-compare) держит именно это: две записи одной видимости дают один semantic hash §209. T084 держит вторую половину — §24 ограничивает экспорт, а не существование. Пробел жил незамеченным потому, что internal не использовал ни один .law-файл дерева.

  • Ворота тестов подешевели в сто раз; контрольная точка DECISION-0019 п. 2 напечатана (DECISION-0028, фаза 7 из 8). lawc test <каталог> --lawtest исполняет все тесты одним процессом, lawc lower-test <каталог> --all — JSONL по строке на тест (транспорт eval-batch). По процессу на тест ворота стоили 7 минут на полусотне и стоили бы часы на корпусе; теперь check_test_run идёт 4 секунды, check_test_lower — 2,6. Обход каталога сортируется: read_dir недетерминирован (FND §6). Отдельно печатается контрольная точка обязательства DECISION-0019 п. 2: предусловие выполнено (парсер есть), переезд меры покрытия норм с proof graph на файлы НЕ выполнен, и цена измерена — 381 норма под доказанным применением против 0 норм корпуса с файлом §267.

  • Сайт получил полную нормативную грамматику и словарь из 242 терминалов — до этого ни того, ни другого на нём не было вовсе. Замер до работы: spec/grammar.ebnf (910 строк, 42 433 байта) не публиковался, а на его месте читатель находил часть XXXVI на 51 строку, которая сама пишет «Полная draft grammar поставляется отдельным файлом grammar.ebnf»; её сокращённая карта к тому же разошлась с оригиналом — 16 альтернатив деклараций против 43, а property_decl, context_decl, counterfactual_decl и calendar_decl в ней не названы. Словарь из 241 слова существовал, но жил внутри расширения VS Code (editors/vscode/data/hover.json) и на сайт не шёл. Обе страницы поэтому выводятся, а не пишутся: site/tools/reference.mjs собирает их из spec/grammar.ebnf, spec/SPEC.ru/ и того же словаря подсказок, которым пользуется редактор, — разойтись с языком они не могут по построению. Новый топик reference («Справочник языка»): нормативный артефакт и производный указатель не делят одну подпись, а страница рядом со SPEC попала бы в меню дважды — своим пунктом и через autogenerate каталога core/.

  • Инвариант страницы грамматики — разрез без потерь, и у него есть свой нарушитель. Файл режется на 18 разделов по собственным баннерам, сумма блоков сверяется с ним на каждой сборке (assertLossless); якоря разделов считаются тем же slugger-ом, которым их пересчитает Astro, и сверяются с расчётными — иначе 242 ссылки словаря уводили бы в никуда, а links-validator поймал бы это только на полной сборке. Canary вырос с 27 до 39 проверок: усечённый разрез, файл без баннеров, файл без финального перевода строки,

  • §15 и grammar.ebnf впервые сверяются между собой. §15 объявляет перечень hard keywords, grammar.ebnf объявляет себя исчерпывающим реестром terminal tokens, и ничто не проверяло, что первое лежит внутри второго. Теперь hard keyword вне грамматики роняет сборку страницы (сегодня 113 из 242 — сходятся). Побочно: readTerminalProductions в tools/terminals.mjs — один разбор грамматики на подсветку, подсказки и справочник вместо двух; grammar:check и hover:check подтвердили байтовую неподвижность закоммиченных артефактов.

  • Найдено при переносе: «SPEC §38» в черновике страницы разрешалось в §38 «Enums» части VIII — у минимальной EBNF-карты нумерованных § нет вовсе, и ссылка молча уводила в систему типов. Заменена ссылкой на страницу части.

  • Errata E-0029: календарный шаг выделен в терм add_calendar_period. E-0026 нагрузила единицы calendar_month/calendar_year на add_business_days, и требование календарного снимка §85 стало условным — зависящим от policy.roll, то есть невидимым и в норме, и в статике. На этой условности реализации молча расходились: оракул календарь не спрашивал, движок требовал безусловно, lawc check был чист у обоих. Найдено формализацией пользовательского соглашения «Самокат» (п. 12.2, пятилетний срок неактивности). Теперь add_calendar_period берёт только календарные единицы и снимок НЕ БЕРЁТ НИКОГДА — пути к нему у терма нет; add_business_days сужен до дневных единиц и требует снимок ВСЕГДА; roll/cutoff/include_end=false на календарном шаге отвергаются. Вектор ERR-E0029-CALENDAR-PERIOD (шаг без объявленного календаря) — differential байтовый. Мигрировано девять мест вызова в конституции и «Самокате»; procurement.law остался на счёте рабочих дней осознанно.

  • minimal.law и function.law написаны; петля «исходник → CLIR» на эталонах релиза замкнута воротами 38/38 (DoD WP-12). Пакет 0.1 нёс examples/minimal.lawir.json и examples/function.lawir.json без исходников — эталоны написаны руками, и то, что CLIR получается из текста, на них не проверялось ничем. Буквальное «воспроизводятся по всем полям» неисполнимо не из-за компилятора: эталон старше принятого DECISION-0001, сменившего форму ParameterDecl и schemaVersion конверта. Ворота ci/check_examples_reproduce.py сравнивают сопоставимое ядро и разрешают ровно четыре названных класса (умолчания канона, ParameterDecl 0.2, schemaVersion, запись значения — op знаком против имени и 2 против 2.0); пятое расхождение роняет их. Проверено мутациями: сдвинутый StableId, другое тело функции и другой kind предиката дают FAIL с точным путём. release/ не редактируется — инвариант 1 соблюдён.

  • Синтаксис получил первые векторы, и они нашли молчащий класс: hard keyword §15 в слоте имени декларации (WP-08 (c), векторы T076–T078). В дереве не было ни одного вектора, ожидающего код диапазона LDC-E0xxx (§199) — лексер и парсер держались тестами крейта. §15 дословно: hard keyword зарезервирован в ordinary identifier positions, единственное grammar-defined исключение — @source(...); grammar.ebnf ставит в слот имени identifier у каждого вида декларации. У парсера же было два входа для имени, и слоты имён деклараций шли в тот, что §15 не проверяет: source action { kind law; } — check OK, exit 0, при том что relation action(...) рядом отвергался. Резче всего в деле §168: const power: Person = … объявлялся, а каждое использование имени давало LDC-E0201 — имя, которым нельзя воспользоваться. Квалификация по инварианту 8 — дефект lawc, не SPEC: prose внутренне согласован, errata не нужна. Правка — разрез двух ролей: 16 слотов имени переведены на проверяющий вход, перечислимые keyword-значения (goal achievement §124, kind official §13) остались на прежнем. T076 — семь позиций из шести видов деклараций (до правки звучало ноль из семи), T077 — граница (те же слова в позициях- терминалах §124 обязаны быть приняты), T078 — recovery (три декларации → три диагностики, DECISION-0002 п. 3). Ложных срабатываний ноль: репо-широкая сверка lawc check до/после на 333 .law-файлах изменила набор кодов ровно у одного файла — у самого T076. Обязательство errata E-0008 исполнено.

  • Тест §267 исполняется, и вердикты двух тулчейнов совпадают (DECISION-0028, фазы 5–6 из 8). lawc test <файл>.lawtest --program <…> лоуверит тест, зовёт движок и сверяет поля результата §174 с ожиданиями — ровно то, что QUICKSTART обещал строкой «lawc test — выполнить .lawtest и conformance vectors». Программа предъявляется отдельным аргументом: тест несёт вход вычисления, а не право (§169). Отказ движка оформлен вердиктом, а не сбоем инструмента. Оракул исполняет тот же понижённый тест-документ своим кодом (lawref/lawref/lawtest.py): байты документа вычисления держит check_differential, здесь под контракт ставится вердикт — сопоставление ожидания §267 с полем §174, короткое, но своё у каждой стороны. Ворота ci/check_test_run.py — 51/51 прошли, вердикты совпали; канарейка мутирует ожидание и требует красноты у ОБОИХ раннеров.

  • Расширение VS Code/Cursor: тест §267 как источник диагностик для .lawtest. Линза «▶ прогнать тест» на любом .lawtest, рядом с которым нашлась программа; провалы ожиданий приезжают в Problems подчёркнутыми по строке ожидания, с источником lawc test. Это закрывает дыру, оставленную сознательно: проверки компилятором у теста нет и быть не может, но у теста есть свой источник правды — раннер, закрытый той же ночью фазой раннера DECISION-0028. Диагностика приходит от ИСПОЛНЕНИЯ, а не от проверки файла, и source это называет. Подчёркивание ставится вхождением текста ожидания: раннер печатает его ровно в том виде, в каком автор написал после expect. Вердикт живёт до первой правки файла и снимается ею — устаревший вердикт хуже отсутствующего, и это отдельная проверка с канарейкой.

    Расхождение с умолчанием компилятора названо, а не допущено молча. lawtest::program_for без --program берёт ir.json по соседству; расширение предпочитает source.law, затем единственный *.law, и только затем ir.json, передавая выбор штатным переопределением --program §169. В редакторе тестируется то, что автор ПРАВИТ: в дереве обе формы равны байтово (G-M1b), а разойтись могут ровно тогда, когда исходник отредактирован. Два *.law без source.law — отказ, а не выбор за автора.

    Находка первого же прогона: формат вердикта переехал под руками. До 27.08 провалы печатались в stderr, теперь — в stdout со сводкой lawc test: N/M тестов прошли. Разбор одного потока превратил провал в тишину; читаются оба, и смок держит обе формы. Машинного режима у файловой формы test нет вовсе — --json объявлен только у формы test <vector-dir> и на .lawtest игнорируется; появится — текстовый разбор станет запасным путём, как разбор диагностик после §225. ext:test — 240 проверок против 223.

  • Расширение VS Code/Cursor: слой файла в строке состояния и панель «почему нет» §185. Слой §1.3 считает lawc layer --json: в строке — $(check) lawc · L0, в подсказке — девиз слоя и конструкции, которые файл подняли, со строкой каждой (1-базной, DECISION-0002). Подъём по башне есть расширение семантики, и до сих пор он не был виден нигде: первая же находка чекера — расчётный акт о браке, молча уехавший в L3 правкой соседней сессии. Цена названа, а не умолчана: второй запуск компилятора на то же событие, потому что check --json слоя не несёт, а брать его позже значит отставать на правку.

    «⊘ почему нет» — пятая линза вектора: lawc why-not --json раскладывается по второй панели рядом с доказательством. Разделы, их названия и оговорка §185 («не определено» блокиратором не называется — отсутствие опор не есть ложность) взяты у render_why_not дословно: своя формулировка была бы второй семантикой объяснения. Клик ведёт к правилу только там, где subject имеет форму StableId §14 — у missing judgment это идентификатор запроса, у source-блокираторов редакция, и навигация не предлагается, а не ведёт в никуда. Отказ команды (ok: false) тоже приезжает в панель: пустое дерево на вопрос «почему нет» неотличимо от «причин не нашлось». Панель одна на два вопроса — класс дерева обобщён, каталог-источник идёт аргументом команды.

    ext:test — 223 проверки против 204, включая сквозную: настоящий check на L3-исходнике доводит слой до строки состояния. Заодно проверка «команд зарегистрировано 9» заменена сверкой с манифестом в обе стороны — число старело при каждой новой команде и ловило только само себя.

  • Расширение VS Code/Cursor: форматирование через lawc fmt, поверхности дела и теста. Format Document и editor.formatOnSave зовут lawc fmt и подставляют его вывод одной правкой на весь документ; своей раскладки у расширения нет — правила остаются в DECISION-0027, вторая их копия разошлась бы с первой молча. .lawtest §267 и .lawcase §168 зарегистрированы как язык law: подсветка, подсказки, структура, переходы, дополнение и сниппеты приходят от parse --ast, которому программа не нужна.

    Границы названы не расширением. Форматируется только .law: literate вне объёма форматтера v1 (DECISION-0027 п. 8а — провайдер на Markdown не регистрируется вовсе, иначе пункт меню обещал бы работу, которой нет), дело и тест вне выборки ворот ci/check_fmt.py (*.law), а vectors/** принадлежит генератору (инвариант 2, DECISION-0027 п. 10) — format on save отменял бы регенерацию молча и ронял ворота 4. Отказ пишется в канал вывода; при ненулевом выходе компилятора или пустом stdout документ не трогается.

    lawc check на деле и тесте не зовётся, и это замер, а не осторожность. Проверка разрешает имена в пределах одного файла (§22), сами они программой пакета не являются (LDC-E1314), и standalone-прогон по дереву даёт 308 диагностик на 118 файлов из 132 — все до единой LDC-E2102. Утверждение о компиляторе перепроверяется смоком: научится check видеть программу — строка покраснеет. Предикаты поверхностей вынесены в lib/files.js (чистые, без vscode API), ext:test вырос со 180 проверок до 204.

    Находка регистрации. Тест выпадал из структуры файла целиком и молча: symbols пропускает безымянные декларации, а узел теста именуется заголовком-строкой (title + title_span) вместо пары {text, span}. Ветка в lib/ast.js — четыре строки; семантические токены не задеты, они читают kind.name напрямую.

  • Тест §267 компилируется: lawc lower-test, 51 .lawtest в дереве (DECISION-0028, фаза 4 из 8). Один документ — title + case + query + expectations; дело внутри теста лоуверится тем же кодом, что декларация case (продукция case_item одна). Отображение evaluate → вид запроса взято из §172 целиком: исполняются truth/why_not/positions, запрос §172 вне среза отвергается (LDC-E1316), а не подменяется соседним. Словарь expect закрыт полями результата §174, только ==/!=; тест без единого expect диагностируется отдельно — он зелёный всегда. queryId выводится из заголовка percent-кодом §14. Файлы собираются рендерером из вектора и его ЗАМОРОЖЕННОГО голдена, поэтому ожидания не выдуманы под текущее поведение. Ворота ci/check_test_lower.py держат три утверждения из трёх источников — дело байтово равно case.json, запрос равен query.json, ожидания сверяются с голденом независимым чтением: 51/51. Названная граница: запрос сверяется помимо queryId — идентификаторы голденов (urn:query:<vid>) не являются StableId §14 ни одного пакета и никакой поверхностью не порождаются; воспроизвести их можно только переписав results[].query в 86 голденах. Расхождение измеряется и печатается, а не замазывается. Вектор T075 держит закрытость словаря ожиданий.

  • Внешний оракул у корпуса: статья 17 Регламента Лиги чемпионов УЕФА (uefa.corpus.ucl), 9 сценариев с байтовым differential. До сих пор ожидание каждого сценария писал тот же человек, что и формализацию, — то есть корпус проверял внутреннюю связность модели. Здесь исход применения нормы ОПУБЛИКОВАН нормодателем: итоговая таблица группы и названный критерий, которым решено равенство. Три сценария сверяются с ним (cases/oracle.json), включая совпадение по ОСНОВАНИЮ, а не только по исходу; два помечены контрфактическими — те же матчи под чужой редакцией, опубликованного исхода у них нет.

    Ось редакций из ТРЁХ закреплённых текстов (2020/21, 2021/22, 2022/23): различие — ровно один исключённый критерий (выездные голы в личных встречах), и весь редакционный шов пакета — три правила с effective. Третья редакция закреплена не для полноты: без неё дата шва была бы ПРЕДПОЛОЖЕНИЕМ автора, а с ней она установлена текстом. На реальных данных различие даёт разный ИСХОД («Маккаби» выше «Ювентуса» по прежней редакции, «Ювентус» выше по действующей) и отдельным сценарием — тот же исход при другом основании: редакция меняет не всё.

    Проверка собственных границ нашла дефект пакета и закрыла его: шапка объявляла ничью трёх и более команд «ненаписанной», а пакет отвечал на неё попарным сравнением — и перебор раскладов нашёл структуру, где попарный порядок ПРОТИВОПОЛОЖЕН мини-таблице регламента. Вывод теперь поражается (NEITHER — отказ, а не FALSE, §95.3); поражение стоит на ranks_above, которого никто не читает, поэтому каскад §111 не пошёл. Регрессия — UCL-06.

    Инструменты: corpus/tools/extract_pdf_text.py (PDF официальной публикации → закреплённые байты; версия poppler входит в описание входа, колонтитулы отсекаются структурно — край страницы плюс повторяемость, а не сигнатура), corpus/tools/sync_uefa_fragments.py (40 фрагментов по критериям; сверяет и ЗАЯВЛЕНИЯ пакета о соотношении редакций, обе канарейки падают).

  • Первый частный акт корпуса: пользовательское соглашение «Самокат» (ru.private.samokat_eula), 13 сценариев с байтовым differential. Все прочие акты корпуса устанавливает суверен либо доктрина; этот — односторонняя воля частного лица (оферта ст. 435 ГК РФ, присоединение ст. 428). Юрисдикция российская, вид источника contract. Держит три нагрузки, которых не дал ни один акт РК: открытый перечень запретов (п. 5.3.9 «любую другую … по мнению Владельца» — closure §70 объявлять нельзя, и вне перечня честный NEITHER, в отличие от исчерпывающего перечня ст. 11 брачного кодекса); канал суждения §47.3 с authority ServiceOwner вместо Court — судьёй назначен тот, кто написал норму, и это видно в поле JudgmentRequest, а не в прозе; weak permission §126 отдельным пунктом («вправе, но не обязан», п. 7.5.1). Источник закреплён PINNED_UNOFFICIAL_COPY, 20 фрагментов, покрытие 23,6 %; провенанс — ручной захват (сайт под антибот-проверкой), разметка ссылок из захвата сохранена как есть. Ворота: corpus/run_samokat_scenarios.py и sync_samokat_fragments.py --check в шаге 6/37.

  • Дело §168 лоуверится: lawc lower-case, ворота байтовой петли, четыре внутренне противоречивых узла в голденах (DECISION-0028, фаза 3 из 8). У дела свой конверт (assertions/context/options) и свой вход — отдельная команда, а не флаг lower: хэши уезжают в разные поля манифеста §170 (case_hash против program_hash). const §168 инлайнится в аргументы assertion-ов, entity_ref лоуверится в RefTerm §36, оси контекста переименовываются по закрытому списку из четырёх, а всё, чему в §168 места нет, получает LDC-E1307; новый LDC-E1315 отвечает на «какое дело лоуверить». Ворота ci/check_case_lower.py замыкают петлю case.json → рендер .lawcase → парсер → lower-case → те же канонические байты §208: 80 из 80 байтово, четырнадцать дел вне выразимого подмножества печатаются поимённо с причиной, покрытие держит храповик. Побочно: рукописный .lawcase в дереве всё-таки есть — vectors/smoke/SMOKE-001/case.lawcase из WP-02, ни разу не прочитанный ни одним инструментом, — и он компилируется. Находка ворот: contentHash трёх assertions в LAY-L1-PRIORITY-* и одного в T012 не соответствовал собственному содержанию — генератор считал хэш, а затем подменял literal спредом либо дописывал ось valid. Не ловил никто: схема хэш не пересчитывает, движок принимает как дано, differential сравнивает две реализации на одном дефектном входе. Правка в генераторе; голдены перезаморожены точечно и с предохранителем — двинулись только хэши входа, results/issues/positions/conflicts неподвижны.

  • Errata E-0027: StableId assertion-а §14 теперь записывается в исходнике. Найдено при заведении лоуверинга дела: assertion_item — единственная продукция группы без stable_id_item (его несут source_item, edition_item, publication_item, fragment_item, evidence_item — пять из шести). Идентификатор assertion-а был выразим только аннотацией @id на декларации ВЕРХНЕГО уровня, а §168 кладёт assertions внутрь case, куда аннотации не достают: в одном теле дела evidence адресуемо, а соседний assert — нет. Пока assertions жили в .law-пакетах, пробел был невидим; дело-файл делает идентификатор содержанием (case_hash §170 хэширует дело целиком), premises proof graph §180 адресуют assertion по StableId, а §269 объявляет .lawcase предметом differential-обмена — два корректных компилятора дали бы разные case_hash на одном исходнике. Мера пробела: из 94 закоммиченных case.json все 190 assertions несут именованные идентификаторы — ни одно дело корпуса не воспроизводимо из .lawcase. Правка аддитивна: assertion_item получил stable_id_item, §71 показывает форму, схемы не тронуты (id у узла Assertion был обязателен всегда — дефект в том и состоял, что обязательное поле CLIR не имело входа в языке). Счётчик тикает и при явном id: иначе явный идентификатор у соседа переименовывал бы остальные. Вектор ERR-E0027-ASSERTION-ID — пара «явный/неявный»; до правки первая половина падала (LDC-E1302 «поле вне v1-среза §71», идентификатор терялся при принятом файле).

  • impact-editions больше не отвечает по существу там, где не смог посмотреть: вердикт NOT-DATED и код выхода 3. Отчёт по оси редакций печатал NO-CHANGE и код 0 на пакете, где не разрешился НИ ОДИН якорь: kz-constitution-rights якорится в kz.constitution.sources, которого в этом документе нет, — ни один узел не датировался, diff проекций выходил пустым по построению, и «право не менялось» звучало там, где между датами сменилась вся Конституция (находка DECISION-0026 §2). Отказ был не нем — строка «якоря вне датировки» в отчёте стояла, — но вердикт читается первым, и дисциплина «сверь unresolvedAnchors до вердикта» держалась на читателе. Мера теперь считается по узлам, а не по якорям: edition_projection кладёт в мету undatedNodes (заякоренные нормативные узлы, у которых не разрешился ни один якорь) и знаменатель anchoredNodeCount; build_edition_report — сводку editions.dating и summary.verdict. Политика одна на текстовый вид и на код выхода (impact.verdict / impact.exit_code) и намеренно несимметрична: найденное изменение — утверждение ПОЛОЖИТЕЛЬНОЕ и об одной норме, оно стоит и при дырах датировки (SEMANTIC-CHANGE, код 1); «изменений нет» — ОТРИЦАТЕЛЬНОЕ и обо всём корпусе, поэтому не печатается, пока хоть одна заякоренная норма осталась вне датировки (NOT-DATED, код 3 — 2 занят ошибкой употребления команды). Порога-доли нет намеренно: в отчёте стоит точный знаменатель («2 из 2» против «1 из 500»), и различает их читатель, а не магическое число в коде. Одного висячего якоря для NOT-DATED мало — узел датирует любой разрешившийся. У О-1 (impact) меты редакций нет, dating возвращает None, вердикт остаётся двузначным, коды 0/1 как были. Прогон на kz-constitution-rights даёт теперь НОРМ ВНЕ ДАТИРОВКИ: 186 из 186 и NOT-DATED; на audit-world kz-constitution-linked — прежние added=369, removed=423 и SEMANTIC-CHANGE. Закрепление — три проверки в ci/check_impact_editions.py (слепая проекция → NOT-DATED/3 при semanticChange=false, то есть ровно там, где прежняя политика говорила NO-CHANGE; полуслепая на идентичных датах → NOT-DATED; полуслепая на разных датах → SEMANTIC-CHANGE), запись — ci/README.md шаг 30.

  • Тело дела §168 проверяется статикой; entity_ref — конструктор §36, а не функция (DECISION-0028, фаза 2 из 8). Тело дела не посещалось проверками вовсе (types.rs разбирает виды деклараций с _ => {}), поэтому необъявленный предикат, разошедшаяся арность, несовместимый аргумент и неразрешимый тип внутри case/given проходили молча. Парный опыт на vectors/t/T074/source.law: компилятор из HEAD печатает check OK, exit 0, ноль диагностик — после правки exit 1 и два LDC-E2102. Теперь тело дела и блок given идут тем же check_atom/check_term и теми же кодами, что тело правила (LDC-E2101/E2102/E2103/E2104), а const — обычный ast::Param: локальное значение §168 есть тот же биндер, что переменная квантора, и вторая структура означала бы вторую копию правил §48. Отдельно признаны две формы, которые компилятор до сих пор считал необъявленными функциями: entity_ref — стандартный конструктор §36 («contextually получает ожидаемый nominal entity type» — сигнатуры у него нет по определению) и truth(…) — стандартный запрос §172 (список взят из §172 целиком). Арность запроса не проверяется намеренно: §172 показывает truth(proposition, context), §267 в собственном примере пишет truth(adult(p)), и требование двух аргументов отвергло бы пример спецификации. Вектор T074: LDC-E2102 звучит дважды — в деле и в given, — а LDC-E2105 не звучит вовсе. Ограничения §169 проверок не получили, и это свойство среза, а не пропуск: ни одна из трёх клауз сегодня не имеет выразимого нарушения — правила в теле дела запрещает грамматика, беспиновый импорт отвергает парсер (грамматика его допускает — слой строже нормы), а live-форма external opaque парсером не реализована. Обязательство записано: проверка §169 приходит тем же изменением, что и форма, которую она запрещает.

  • Дело §168 и тест §267 разбираются: фронтенд .lawcase/.lawtest (DECISION-0028, фаза 1 из 8). Формат объявлен нормативно — продукции case_decl/test_decl стоят в grammar.ebnf, §4 объявляет расширение, §269 называет .lawcase в списке differential-обмена, — и не был реализован ни одной строкой: файлов ноль, lawc test исполняет vector.json, а test-блок уезжал в Opaque с проглоченным телом. lawc check при этом печатал check OK без единого слова: LDC-E1302 живёт на стадии lowering, и автор теста по спецификации получал зелёный check и молча выброшенный узел. Заведены типизированные узлы AST и разбор всех шести форм case_item — context (с extends), const, assert, evidence, support (обе формы, отрицание пропозиции флагом, как у assert), метаданные; case_item объявлен ОДИН раз и переиспользуется блоком given, потому что test_item = "given", "{", { case_item }, "}" — тело given есть тело case буква в букву. Дело и тест в CLIR пакета не попадают (иначе programHash §209 поехал бы и тест стал бы частью права) и получают свой код LDC-E1314: LDC-E1302 сказал бы «вне L0-среза», а это неправда — они вне ДОКУМЕНТА, их вход живёт в caseHash §170. Вектор T073 держит три половины сразу: код звучит дважды, LDC-E0201 не звучит (форма разбирается) и LDC-E1302 не звучит (вид определён) — порознь ни одна не закрыта. Названные границы: пример §168 целиком по-прежнему не разбирается из-за record_literal §40 (гап лестницы выражений, не фронтенда дела), entity_ref внутри дела не проверяется вовсе — тело дела статикой не посещается, — и ограничения §169 проверок не имеют. Три решения записаны до кода: объём (§168+§169+§267 одним пакетом), домен expect (закрытый словарь полей результата — полное pure_expression было бы вторым вычислителем вне CLIR-реализаций), цель lowering (отдельный case-документ, байт в байт нынешний case.json).

  • WP-21 (срез WP-08b): CST с trivia — round-trip побайтовый на 314 файлах. Лексер выбрасывал пробелы и не-doc комментарии, парсер строил сразу AST, и форматтер §214 не мог удовлетворить свой DoD «идемпотентность на корпусе»: сохранять было нечего. Поток токенов теперь покрывает источник ЦЕЛИКОМ — Whitespace/LineComment/BlockComment плюс Error на байтах, поглощённых ошибкой лексера (три таких пути и были самыми опасными: незакрытый text block, незакрытая строка, недопустимый символ — они консумировали байты без токена, и round-trip рвался бы ровно на том входе, где форматтер нужнее всего). Привязка комментариев §227 — отдельной таблицей в ParseOutput (Leading/Trailing/Inner/Detached; пустая строка отвязывает намеренно). Разбор не сдвинулся ни на токен по построению: парсер получает отфильтрованный поток — ровно то множество, которое лексер порождал до правки, — и фильтр стоит в parse(), а не в курсоре; AST не получил ни одного поля, поэтому parse --ast печатает те же байты и расширение VS Code работы не заметило. Доказано воротами, а не рассуждением: check_lower 79/79, differential 93/93, check_cli_json 22 голдена, clippy и cargo test зелёные. Round-trip доказывается покрытием, а не сравнением текстов: инвариант «спаны идут встык от 0 до len» проверяется отдельно, и равенство байт следует из него — сравнение одних текстов было бы слабее (потерянный токен рядом с продублированным дал бы совпадение). .law.md покрыт целиком: блоки печатаются из потока, проза Markdown берётся из исходника (§217). Поверхности — lawc parse <file> --emit-source и пакетный cst-batch (образец canon-batch: один процесс на дерево). Ворота 10/36 ci/check_cst_roundtrip.py — 314 файлов (313 .law + 1 .law.md, включая release/), sha256 файла считает ГЕЙТ, а не проверяемая команда; канарейка 2/2 (расхождение байтов, усыхание обхода). Границы названы: сам форматтер §214 не сделан — это следующая строка, и теперь ей есть на чём стоять; doc-комментарии по-прежнему кончаются в AST (слота под них в NodeCommon CLIR нет, потребителя у Decl.doc — тоже).

  • Конституция РК 1995 заформализована целиком: 82 EXECUTABLE / 19 ANCHORED / 1 SOURCE_ONLY из 102 статей. Разобраны все девять разделов закреплённой консолидации, прекратившей действие 01.07.2026. Раскладка смешанная (spec/decisions/0026-constitution-1995-edition-layer.ru.md): правила 1995 живут в тех же отраслевых пакетах, что и правила 2026, кроме разделов III и IV, вынесенных в kz.constitution1995.{president,parliament} — там отличается ИНСТИТУТ, а не формулировка (преемство через Председателя Сената против Вице-Президента; двухпалатные пороги «от каждой из Палат» против одного сравнения в Курултае). Цена варианта сперва была записана неверно и исправлена прогоном: impact-editions по audit-world kz-constitution-linked (один ir.json со всеми девятью пакетами) даёт added=369, removed=423, semanticChange=true и меняет исход у всех четырёх контрольных сценариев, включая сценарий из отдельного пакета 1995. Раскладка пакетов на diff не влияет вовсе: на одиночном kz-constitution-rights не разрешается ни один из 114 якорей, ничего не датируется, и вердикт печатается NO-CHANGE — то есть «право не менялось» там, где сменилась вся Конституция. Edition-diff считается ТОЛЬКО по audit-world, unresolvedAnchors проверяется до чтения вердикта. Проверено исполнением, а не комментарием. Тринадцать сценариев семейства KZ-CON-1995 гоняют edition_projection на двух датах и сверяют, что неразрешённых якорей ноль (без якоря во фрагмент источника проекция не датирует узел вовсе, и правило осталось бы применимым всегда). Несущая демонстрация: те же факты — разный исход дела. Иностранец, о котором закон молчит, до 01.07.2026 пользуется правами гражданина (TRUE_ONLY), после — не получает их (NEITHER): ст. 12 п. 4 обещала права «если иное не предусмотрено», ст. 15 п. 4 редакции 2026 инвертировала умолчание. Четырнадцать расхождений найдены чтением обеих редакций, а не переносом по номеру (нумерация сдвинута: 1995 ст. 10 ≈ 2026 ст. 13). Несущие: предел задержания «семьдесят два часа» стоит в самой Конституции 1995, тогда как 2026 отсылает срок к закону; право на забастовку названо прямо и в 2026 убрано; бесплатное высшее на конкурсной основе сведено к «в соответствии с законом»; неограничиваемое ядро 1995 шире — девять позиций против семи, под него заведён отдельный enum CoreRight1995, иначе добавление вариантов молча расширило бы ядро 2026. Контроль: мера редакции 2026 не сдвинулась ни на единицу — 85/11/0 до и после, при девяти измеряемых пакетах вместо семи и 531 новом узле правил 1995.

  • Учёт статей научился считать акт с несколькими закреплёнными редакциями. ci/check_source_pinning.py читал articles.json по одному полю document и печатал «охват 96 из 96» по редакции 2026, тогда как рядом лежала закреплённая редакция 1995 на 102 статьи: её учёт не вёлся вообще и не был виден. Введена форма {"editions": [...]} — по записи на редакцию, со своими scope и declared, потому что границы у редакций разные. В том же файле accounting = stats затирало учёт предыдущей публикации: из четырёх публикаций в отчёт попадала последняя. Учёт теперь копится по редакциям. boundaries.py научен той же форме — на ней он отвечал «фаза 0 не выполнена» при закреплённых байтах. Единственная объявленная граница редакции 1995 — ст. 84, исключённая Законом РК от 21.05.2007 № 254-III: в закреплённой консолидации от неё остался только заголовок.

Fixed

  • §231.1: неопределённый термин, модальность против §70 и второй перечень свидетельства — errata E-0031. Три зазора в разделе из девяти строк: query key употреблён нормативно ровно один раз во всей спецификации и не раскрыт нигде; «должны планироваться» и «МОЖЕТ materialize только если» запрещали eager-материализацию, которую §70 разрешает прямо («НЕ ОБЯЗАН… СЛЕДУЕТ… для больших closed domains»); состав свидетельства назван дважды и по-разному (§70 — certificate + snapshot hash + membership proof + доказательство отсутствия ключа, §231.1 — certificate + query key). Обе реализации материализуют closure eager, то есть по §70 конформны, по §231.1 нет — вопрос был не отвечен, а не задан: масштабируемость не упоминает ни один conformance-профиль §8.1–§8.6. Правка редакционная: модальность приведена к §70, только если снято, query key удалён, состав свидетельства не дублируется и ограничен ленивым планом (у eager полнота домена доказана самим проходом по домену). Требовать полный состав от eager-узла значило бы менять поведение и перезамораживать голдены — этого здесь не делается. Обязательство отрицательное: у удаления термина нет исполнимого следствия, поэтому ci/check_proof_kinds.py держит, что снятый термин не вернётся ни в prose, ни в схемы, ни в голдены, ни в дескрипторы (241 файл), с канарейкой на возврат. Красное до правки снято прогоном на доправочном §231.1 из git show HEAD:.

  • Словарь видов узла proof-графа §179 не называл candidate_closure — errata E-0030. Вид сертификата §181.1 эмитировали ОБЕ реализации, он лежал в 11 замороженных голденах (17 узлов) и в ProofNode.kind.enum, а §179 перечислял двенадцать видов из тринадцати. Молчание тройное по построению: differential сравнивает байты двух реализаций и согласное отклонение обеих от prose не видит, схема вид разрешала, Lean-ядро читает графы, а не спецификацию. Зеркально к E-0022 (там prose был строже схемы — здесь схема шире prose). Правка: вид внесён в §179, его смысл назван абзацем ниже, и тем же абзацем закрытость перечня записана прямым предложением — она была выводима, на неё уже опирались квалификации (why-not, 27.08), но написана не была; приём тот же, что у закрытости списка делимых §58. Схемы не меняются, schemaVersion не бампается. Обязательство исполнено воротами, а не вектором (утверждение о словаре проверяется сверкой перечней, а не исполнением): ci/check_proof_kinds.py в шаге 4/37 сверяет три стороны — prose §179 == enum схемы в обе стороны, излучаемое голденами ⊆ prose, — плюс канарейка на четырёх мутациях. Красное до правки проверено прогоном на доправочном §179 из git show HEAD:, а не рассуждением: обе строки отказа.

  • Правила ст. 39 п. 1 редакции 1995 обходили §152–157 стороной. Соразмерность приходила обычным фактом, и ограничение признавалось оправданным без единого решения о трактовке, тогда как их близнецы редакции 2026 стоят под обязательной interpretation-группой. Заведена своя группа Article39Proportionality1995, заякоренная в статью СВОЕЙ редакции: общая с 2026 заставляла бы дело о 1998 годе выбирать трактовку статьи, которой тогда не существовало. Найдено регрессией KZ-CON-INT-04, которая на этом краснела.

  • Разметка словаря §218: пакет kz.constitution.sources размечен, покрытие взято под храповик. Вербализация B1 печатала предикаты и типы собственными идентификаторами — «установлено, что «religious_restriction_established_by_law» (restriction: ReligiousRestriction v0)», — и это не дефект вербализатора: рендерер берёт метку, как только она появится (verbalize.quoted_label), а меток не было. Замер показал не пробел, а провал: во ВСЕХ конституционных пакетах размечено 0 объявлений из 1219, в kz.gpk — 82 из 1414, при том что двенадцать актов корпуса размечены на 100 % (kz.karamola 328/328, rom.de-legibus 157/157). Ворота тотальности §3.3 этого класса не видят по построению: шаблон у узла есть, пробелов ноль, документ «тотален» — а юрист подписывает текст, который читается кодом. Сделано. corpus/laws/constitution.law: 63 объявления (7 entity + 56 relation) получили label ru-KZ, формулировки — из закреплённого текста статей §194 (ст. 1, 3–8, 10, 11 редакции 2026 и ст. 1, 2, 6–9 редакции 1995), у entity заполнен слот genitive §218.1 — единственный, который потребляет pack (binderFormSlot). Статус меток — unofficial осознанно: официальным является текст статьи, а имя предиката выбрал формализатор, и объявлять его официальным названием значило бы приписать акту то, чего в нём нет. Цена подтверждена измерением, а не ссылкой на errata E-0010: semantic hash пакета sha256:05ea561d… не сдвинулся ни на бит, сдвинулись ровно 63 content hash узлов — то есть разметка не может уронить differential и переводит утверждения юриста в stale_verbalization, а не в stale_semantics. Approvals сейчас ноль, поэтому цена нулевая; после первой подписи те же 63 метки вернули бы блоки в очередь ревью. Названная граница. По-английски остаются имена параметров («restriction: ReligiousRestriction v0» → «restriction: Ограничение деятельности религиозной организации v0»): atom.arg берёт имя из декларации как есть, а канала метки у параметра нет — §218 даёт метки декларациям с телом, параметр декларацией не является. Переименовать по-русски нельзя: Unicode-идентификаторы §14 вне реализованного среза (DECISION-0002, LDC-E0103). Двери две — errata по образцу E-0011/E-0025 или фраза pack без имени параметра (теряет различение при арности > 1); ни одна здесь не открывалась. Ворота 35/35 — ci/check_label_coverage.py + corpus/label-ratchet.json. Храповик двусторонний: labelled не убывает, unlabelled не растёт; одной нижней границы мало — пакет мог бы расти безымянными объявлениями при неизменном числе размеченных, и потеря доли была бы невидима. Пакет вне таблицы и пакет, исчезнувший из corpus/clir, — оба отказ. Канарейка снимает метку у синтетического объявления и требует падения; сверка проверена и на живых данных (подмена числа у kz.osms роняет ворота). Текущий снимок: 32 пакета, словарь 5512 объявлений, с меткой 1388 (25,2 %), размечены целиком 15 пакетов.

  • Храповик покрытия распространён на конституционную регрессию. corpus/run_constitution_regression.py (46 сценариев, шаг 99) держался ни на чём: assert на число кейсов в раннере не стоял, а scenario-ratchet.json перечислял только семейства KZ-регрессии. Выпади сценарий — гейт печатал бы «45/45 PASS», и потеря была бы невидима. Сверка вынесена в общий corpus/ratchet.py (одна копия соглашения на оба прогона), JSON получил раздел на прогон — runners.kz и runners.constitution; corpus/kz/registry.py свёлся к привязке к своему разделу, сигнатура check_ratchet(counts) для corpus/kz/run.py не изменилась. Семейства конституционной регрессии читаются из меток KZ-CON-<СЕМЕЙСТВО>-<номер> (11 семейств, 46 сценариев): второй таблицы внутри раннера нет намеренно — единственный реестр это JSON. Проверено пятью мутациями на чистом дереве: выпавший сценарий, выпавший блок, незаписанное семейство, удалённый раздел JSON и метка вне формата — каждая роняет гейт; KZ-ветка через общий код краснеет по-прежнему.

  • DECISION-0014 принят, semi-naive исполнен: стена рекурсии снята — ×58,8 на глубине 200. Гибридная дельта-ветвь в law-eval: журналы входа атомов в перечислимые множества, квалификация правила (дельтой идут только правила из позитивных литералов — гарды, кванторы и негация остаются наивными), наивный порядок публикаций восстанавливается сортировкой по кортежу §208-ключей перечислительных позиций. Цепь через monotone: N=100 — 31,86 → 1,55 с (×20,6), N=200 — 665,6 → 11,32 с (×58,8), N=400 (~80k выведенных) — 147,9 с (наивный за пределом). Нерекурсивные формы не просели (×1,00–1,05). Ноги обязательства: (а) differential OK + KZ 290 вызовов + демо 24 + векторы 173/173 + KZ-регрессия 236/236; (б) новые ворота 33/33 ci/fuzz_programs.py — 100 000 случайных программ, оракул == движок побайтово (транспорт law-cli eval-batch); (в) Lean зелёный на векторах, на живых актах красный по ЧУЖОЙ причине (Rational-арифметика в голове акта zheti-zhargy; оба Lean-контура исполняют оракул, semi-naive живёт в Rust — задеть их не может). Записано структурное замечание: нога (в) достаёт до движка только транзитивно через (а).

  • Третья точка baseline §4.6: весь held-out срез (n = 71), словарь скрыт, утечка маркеров закрыта. gate_clean 82 %, iso_f1 0,46. Цена подсказки маркерами измерена на общих 15 задачах: 0,45 → 0,39. Распределение бимодально — 23 задачи ровно 1,0, 29 ровно 0,0. Из 13 отказов компиляции 7 — A3 StableId collision (переобъявление существующего в пакете предиката): гигиена, а не право, и в контуре с воротами §4.3 в цикле чинится повторной попыткой.

  • Режим «словарь скрыт» (baseline.py --hidden) и вторая точка §4.6. Хирургия убирает объявления, осиротевшие после выреза статьи (до фикспойнта); утечка словаря 100 % → 23 %. Прогон живой модели на тех же 15 статьях: gate_clean 87 %, iso_f1 0,45 против 0,89 при данном словаре — это цена изобретения онтологии. hash_f1 = 0,00 на всех пятнадцати: метрика, требующая совпадения имён, при выдуманном словаре не измеряет ничего. Наружу выдаётся один маркер вместо одного на блок — прежняя раскладка отдавала модели число деклараций (модели этим пользовались).

  • Errata E-0018 исполнена (вариант Б, выбор владельца): статус-тест monotone(P) — монотонная рекурсия стала писуемой в L0. Имя supported() несло две способности: потребление конфликта (подлинная L3) и монотонное ребро рекурсии §103 (чисто L0) — слоевой вывод тарифицировал вторую по ставке первой, и транзитивное замыкание было неписуемо ниже L3. monotone(P) несёт тот же §65-тест (TRUE_ONLY|BOTH — установлено при исполнении: established-тест немонотонен при достижимом BOTH, а в L0 разница ненаблюдаема из-за halt), но слоя не поднимает; supported() остаётся L3. Правка аддитивна и сквозная: §65/§103/§110, grammar.ebnf, схема, обе реализации (лексер→парсер→strata→слои→движок→why-not), рендерер векторов. Векторы: ERR-E0018-MONOTONE-L0 (объявляет L0 — проходит) и ERR-E0018-MONOTONE-EVAL (рекурсия исполняется; в SUPPORTED, ir — выход компилятора под G-M1b); нарушитель LAY-L1-VIOLATOR-SUPPORTED остаётся зелёным. kz.corpus.marriage переведён на monotone и выводится L0 (был L3) — чисто расчётный акт вернулся под заявку дескрипторов. Differential 87/87, векторы 141/141 runnable, KZ 236/236.

  • Оркестрационный трек spec/LAYERS-NEXT.ru.md — четыре инструмента поверх замороженного ядра 0.1 (шаги 30–31 конвейера). План продолжает башню слоёв выше L3 и делит работы по цене правки: семантика идёт в 0.2 через errata-машину, оркестрация — сейчас. Трек не вводит ни одного семантического правила: инструменты вызывают существующие движки и сравнивают канонические выходы §208, поэтому инвариант «никакой семантики вне CLIR-реализаций» держится по построению.

    • impact (L8.0) — «законопроект как PR»: semantic diff §215, сценарии с изменившимся исходом с парными evaluation-документами и proof-графами, нормы без доказанного применения (rule_application §180 / norm_creation §135 — мера DECISION-0019/C, отчётная величина, не код выхода).
    • impact-editions (L6) — тот же каркас по оси времени: «до»/«после» это проекции одного документа на две даты машиной применимости D1 (§31); нормативный узел снимается, когда все его якоря ведут в неприменимые редакции. Diff проекций — семантический changelog редакции.
    • reanchor — рычаг формализации предшествующей редакции: постатейное побайтовое сравнение текстов пары одноязычных редакций и кандидаты на механическое перевешивание якорей. Разноязычная пара отвергается, а не сводится к догадке (§249); нормализация пробелов не делается.
    • argmap (L4-lite) — проекция готового proof-графа §179–§187 в граф «аргумент/атака» (§107.1–107.3, §115) с grounded-разметкой; на evaluation не влияет.
    • fuzz (L8.1) — сидированный генератор кейсов: конфликты §115 на консистентных входах, динамическое покрытие, минимизация находки до готового сценария.

    Установлено при заведении рычага: механизм миграций §32.1 формализации предшествующей редакции не помогает по трём независимым причинам — он бежит вперёд (apply(previous, operations) ≡ next), replace несёт только новый текст, repeal удаляет; к замене акта (новая конституция взамен старой) он неприменим вовсе: нет ребра revision, два разных source_work. Совпадение текста статьи при этом не доказывает совпадения нормы, поэтому выход рычага называется кандидатами и проверяется исполнением.

    Граница названа прямо: живых ответов от инструментов пока нет — impact-editions на Конституции печатает «добавлено 316», reanchor даёт ноль кандидатов, потому что у редакций 1995 года ноль фрагментов. Текста предшествующей редакции в корпусе не существует; инструменты показывают ровно то, что заформализовано.

  • Метрика iso_f1 — сравнение формализаций с точностью до переименования (corpus/dataset/isomorphism.py). Узлы одинаковы, если унифицируются при биективной подстановке свободных символов; свобода дана только тому, что модель обязана была выдумать (нет в скелете), объявленное фиксировано. Конъюнкции сравниваются как мультимножества: §207.1 сортирует тело по байтам, а байты зависят от имён. На прогоне 15 черновиков — 0,89 против строгой 0,40. Селфтест 71/71 проверяет свойства (инвариантность к переименованию, чувствительность к склейке и к подмене объявленного, iso ≥ hash_f1); каждое из них нашло по настоящему дефекту.

  • Первый прогон живой модели по baseline-стенду §4.6 (n = 15). gate_clean 100 %, hash_f1 0,40, hash_f1_modulo_id 0,75. Прогон нашёл дефект стенда: хирургия вырезает только декларации с якорем на целевой фрагмент, а словарь статьи остаётся в скелете — 57 предикатов золота из 57. Задача стенда сегодня «связать названные предикаты», а не формализация с нуля; доля vocabularyGivenShare считается и печатается с каждым отчётом вместе с прямым предупреждением, что F1 точностью формализации не является.

  • WP-39, шаг 2: реестр раннеров покрытия и baseline-стенд §4.6. Мера «норма доказанно применилась» переведена с одной KZ-регрессии на реестр RUNNERS (ci/report_norm_graph.py): kz + Конституция + faraid + de-legibus, трём раннерам добавлен шов set_evaluate (доктрина corpus/kz/engine.py), перехват по-раннерный. Покрытие 307 → 381 нормы (18 → 28 пакетов); faraid впервые заведён в конвейер. Baseline-стенд corpus/dataset/baseline.py: задачи из held-out среза хирургией по исходнику (точность хирургии проверяется байтами и CLIR на каждой паре), скоринг semantic hash строгий и modulo-id, селфтест 71/71 (identity 1.0, детерминированная порча замечена), быстрый срез — в воротах 29/29.

  • WP-20 (stretch), вариант (а): conservativity L0 ⊂ full (LS §2.4) доказана на уровне модели — checker/LawCore/Conservativity.lean (conservativity_L0 + следствие для статусов §62/§63 + строгость включения), ноль sorry; байтовая половина остаётся за воротами 12, которые получили третью часть — синхронность предиката IsL0 с составом L0 в law-hir/layers.rs (манифест + пин, три канарейки). Квалификация скоупа — DECISION-0020. Второй инкремент — L1 ⊂ full (DECISION-0021): норм-стадия §134–§143 в модели как §143-цикл с fuel §238 и стопом §139, conservativity_L1 + башня conservativity_tower + строгость включения; синхронность манифеста модальностей с modality_layer — вторая пара направлений в воротах 12 (три канарейки).

  • Дедупликация посылок §52.1 — квадрат стал линией, обе реализации. Рычаг, найденный замером шага 3 DECISION-0017: в петле посылок comprehension доминировал линейный pid not in premises / premises.contains по растущему списку — O(N²) сравнений строк на своде по N сущностям. Правка парная и представление не меняет: список остаётся единственным источником ПОРЯДКА (он документо-видим), множество — только членство; merge_premises в обеих реализациях, четыре места в каждой (накопление в materialize_comprehension, слияния домена квантора §52, гард-агрегатов и агрегатов §59). Замер (CPU, перемежённый A/B): оракул ×1,37 при N=2000 и ×2,50 при N=8000, движок ×1,09 и ×1,72 — рост выигрыша с N и есть смена асимптотики. Байты совпали всюду: differential 86/86, векторы 137/137 runnable, KZ 226/226, selftest OK.

  • §190 range restriction доведена до головы-НОРМЫ (LDC-E4101). Проверка доходила только до головы-литерала: голова-норма §99.3 лоуверится в norm_template_ref, переменные живут в полях шаблона. Теперь поля (holder/bearer/exercise/valid_when/effect/action/ protected_effect/goal.condition/goal.window) проверяются наравне с атомом литерала — одна диагностика на шаблон. Наблюдалось на живом акте: HazardousFacilityBanPower (п. 11 Декларации о суверенитете) молча не существовал. Векторы T069 (отклонение, пять модальностей §122–§130) и T070 (граница: связанные головы принимаются). Errata E-0023.

  • DECISION-0017 §9: третий шаг плетения id — comprehension §52.1. Петля посылок materialize_comprehension — последнее место перевычисления опор сматченных конъюнктов — читает их по conjunct_ids; через неё идут query_collect, агрегаты §59 и домены кванторов §52. Критерий «не хуже ×0,95» предрегистрирован §9 и выполнен: ×0,97–1,03 по пяти формам, байты совпали всюду, differential 86/86, KZ 226/226. Ожидавшийся выигрыш на агрегатной форме не материализовался — и причина записана в решение: в петле доминирует линейный premises.contains (O(N²) на сумме по N=2000), а не канонизация; следующий рычаг пути — дедупликация посылок, вне объёма решения. После шага 3 перевычисление опор сматченных конъюнктов не существует ни в одном пути law-eval.

  • WP-39 заведён: held-out срез и покрытие норм тестом (ворота 29/29). Учётная единица — пара «фрагмент официального текста §27–§33 → нормы с якорями»; индекс вычисляется из закоммиченного CLIR и не хранится (corpus/dataset/build.py): 920 пар, 2 461 норма, 420 норм вне выравнивания. Held-out — 75 пар / 219 норм, отбор детерминирован ведром по contentHash §194, заморожен списком хэшей. Непересечение train ∩ eval проверяется по ДВУМ ключам: разделения по тексту недостаточно — 20 норм из 248 имели двойника по semanticHash §209 в train, срез чистится до фикспойнта. Требование DoD «≥ 1 .lawtest на норме» прочитано по существу: файлов .lawtest нет и парсера в компиляторе нет, поэтому норма покрыта, если доказанно применилась в proof graph сценария регрессии — 307 норм в 18 пакетах. Храповик односторонний; --canary отвергает три подделки. Квалификация — DECISION-0019 (черновик).

  • lawc init / lawc context show / lawc diff — добор CLI §225 (WP-35): скаффолд пакета §10/§266.1; материализованный контекст §89.1 (effective + origin/override-цепочки, той же механикой law-eval, что и evaluate); semantic diff §215 — пять видов записей, rename при явном @id, exit 1 при семантическом изменении, сверен с оракулом на всех hash-compare парах. В law-canon добавлен node_semantic_hash (§209 на одном узле). Три новых голдена check_cli_json (22). Остаток §225 назван поимённо в STATUS: fmt ждёт WP-21, lock — решения о TOML-зависимости, build/export/import — определений в prose.

  • G-M4 закрыт — DECISION-0017: ретроспектива с пересчётом M5 и хвоста плана (обязательство §6.2). Пересчитанный остаток M5 — ноль пакетов; хвост разделён на инженерный класс (дни) и внешне-календарный (пилот, ревью — недели людей); критический путь 0.2 — второй класс.

  • E-0022, хвосты — §180 получил примечание о соответствии имён prose ↔ схема и несериализуемости body_result (восстановим из rule+substitution, ядро пересчитывает); §-цитаты доверенного ядра и его CI-обвязки выправлены («§182» → §179/§180 — сверено с релизным якорем: нумерация не менялась, цитата была ошибкой с рождения).

  • DECISION-0017 §8: второй шаг плетения id — defeasible §104 и нормы §135. Посылки кандидатов defeasible и norm_creation читаются по conjunct_ids без повторной подстановки тела и канонизации; ключ norm_seen (идемпотентность lifecycle §139/§143) переведён с canon(subst) на seen_ids — биективность и устойчивость те же, что у derived_seen (§3 решения). Критерий шага предрегистрирован §8 до замера: регресса нет (декартова ×1,04 при перемере — первый ×0,91 оказался шумом на нетронутом коде; T003/T013/T014/LAY-L2-DUTY ×0,96–1,05), байты совпали всюду; KZ 226/226; двое транзиентных красных differential — чужая перезаморозка голденов why_not, вручную подтверждены зелёными по всем трём ногам. Петля посылок comprehension §52.1 в шаг не вошла (зафиксировано §8 — возможный третий шаг).

  • Седьмая станция верстака: kind='positions' в law_draft_eval — статусы норм-позиций §122–§138 у черновика. До неё then-норма (duty ст. 8 закона о независимости) проходила check, обе меры и differential, но её СТАТУС черновиком было не спросить. Контракт ответа — тот же, что у боевого law_ask(kind='positions'): позиция, статус со значением, стороны, createdBy; пустой результат называет кандидатов — then-шаблоны черновика. Проверено на посаженном акте (ст. 8: ACTIVE при факте национальности, VIOLATED при установленном контрпримере условия) и закреплено тремя контрактными проверками (ACTIVE до срока §138, SATISFIED по выводимому условию §136, пустое дело с подсказкой).

  • Связь «Жеті жарғы» ↔ «Қарамола ережесі» записана в корпусе. Два памятника одного правопорядка стояли независимо, хотя оба источника связь документируют. Теперь каждое из двух предложений закреплено отдельным фрагментом в ОДНО предложение (не абзацем: абзацы — историография, и закрепление их целиком добирало бы покрытие текстом без норм, errata E-0013 §28) и несёт нормативный факт с провенансом. Сценарии KAR-24 и ZH-39; differential 264 → 276 вызовов байтово. Связь односторонняя и записана односторонне: «Қарамола» называет «Жеті жарғы» прямо, «Жеті жарғы» с обратной стороны называет только Абая и «законопроект, который он сам сделал», без имени акта.

  • Найдено пробой: align-декларация парсится, но не лоуверится (LDC-E1302, узел пропущен) — то есть выравнивание, записанное в исходнике, не попадает ни в один ответ. Во всём репозитории align не использован ни разу; при выборе формы для межактовой связи конструкция отвергнута по этой причине, а не по вкусу.

  • DECISION-0017: сквозное плетение id через путь публикации §103 — принят, исполнен, порог взят. solve возвращает вместе с подстановкой id сматченных атомов (Solution): ключ идемпотентности derived_seen §231.1 — id established|supported|refuted-конъюнктов в порядке позиций тела вместо canon(subst) (биективность даёт range restriction §190; not_known и unknown исключены из ключа НАМЕРЕННО — их id нестабилен между раундами при неизменной подстановке, включение публиковало бы ту же аппликацию дважды); посылки §180 читаются по id без повторной подстановки и канонизации; рекурсия solve перестала глубоко клонировать остаток конъюнктов (ссылки с исходными позициями). Только law-eval, только strict-путь; оракул сохраняет прозрачную форму. Предрегистрированный порог §6 (≥ ×1,10 на декартовой) взят: ×1,35 (CPU, перемежённый A/B, release arm64), селективная ×1,11; differential 86/86, KZ 224/224, оба теста-обязательства ключа зелёные (состав; устойчивость при появлении негативной опоры под not_known). Пути defeasible/norms — отдельным шагом по тому же решению.

  • Конституционный закон «О государственной независимости» (1991) — целый акт корпуса, 18 статей из 18, первый прошедший ЦЕЛИКОМ через верстак формализации. Все шесть станций (law_pin → law_draft_check → law_draft_eval → law_measure → law_draft_verbalize → law_draft_differential) пройдены протоколом MCP-сервера без единого прямого вызова компилятора или оракула; первая же итерация check поймала hard keyword в четырёх местах разом, eval подтвердил 10/10 executable, differential — байтовую идентичность реализаций на презумпции ст. 18, closure-отрицании ст. 9 и default negation ст. 7. Посажен в корпус: corpus/laws/independence.law + sync_independence_fragments.py, семейство IND-01…10, KZ-регрессия 224/224.

  • Декларация о государственном суверенитете Казахской ССР (1990) — целый акт корпуса, 17 пунктов из 17. Учёт пунктов 17 из 17 при нуле объявленных границ, глубина §33.1 — EXECUTABLE 17, байтовая доля 72,0 %. Пакет corpus/laws/sovereignty/, фрагменты порождает corpus/tools/sync_sovereignty_fragments.py, 35 сценариев регрессии, differential 229 → 264 вызова байтово. CLIR несёт 9 шаблонов норм §122–§130: полномочия (свободный выход из Союза, приостановление союзных актов, образование национального банка, запрет опасного объекта), иммунитеты (территория без согласия Республики, исключительность Верховного Совета выступать от имени народа) и безусловный запрет испытаний ядерного оружия и полигонов ОМП.

  • Единица деления акта объявляется, когда её нельзя опознать. ci/check_source_pinning.py и boundaries.py определяли конвенцию заголовка сами — по неспутываемому маркеру («Статья», «-бап», «-жарғы», скобки параграфа). У нумерованного пункта такого маркера нет: «1. …» — это и обычный маркер абзаца внутри статьи, и автоопределение раздало бы половине корпуса меру по единицам, которых в нём нет. Добавлено поле "unit" в articles.json: объявленная единица отключает автоопределение, а конвенция point доступна ТОЛЬКО по объявлению. Проверено замером по всем актам до и после: мера не изменилась ни у одного пакета, кроме объявившего.

Fixed

  • Каталог law_packages({}) перерос пригодность для модели-потребителя: 106 КБ при пороге 80 КБ — свёртка считала только сигнатуры. Порог в mcp/test_server.py выражает не размер, а читаемость первого ответа инструмента, который сам себя объявляет «вызывать первым»; живая сессия 27.08 грепала персистированный файл каталога вместо чтения ответа. Это не регрессия одной правки, и это замерено: удаление отдельных CLIR-пакетов оставляло каталог над лимитом — растёт число актов (их 35). Свёртка по SIGNATURE_BUDGET существовала, но два остальных перечня обзора порога не имели: нормы 44 КБ и константы 27 КБ, 67 % веса вне свёртки (429 констант одной строкой у kz-consumer-protection, 103 нормы у audit-world Конституции). Сделано. NORM_BUDGET и CONSTANT_BUDGET: свёрнутый акт печатает счётчик по каждому перечню и адрес детали, у норм — с разбивкой по модальностям §107 («норм 103» не отвечает на вопрос, ради которого спрашивают kind='positions'). Свёртка — свойство ОБЗОРА: package=… и query=… отдают перечни целиком. Свёрнутое ушло и из structuredContent: иначе тот же вес просто уезжает в другое поле результата. Итог 49 КБ, счётчики сверены с деталью пакет за пакетом. Четыре пакета (kz-consumer-protection, kz-health-procurement, faraid-shares, kz-pinning-example) вписаны в PACKAGE_TITLES — после свёртки титул несёт основную нагрузку описания акта, а они печатались собственным ключом дважды. Проверено мутациями: снять свёртку норм — 81 КБ, порог краснеет; снять свёртку констант — 75 КБ, порог зелёный, и потеря компактности невидима до следующего крупного акта. Поэтому обе свёртки закреплены предметными проверками, а ожидания в них берутся из структурного ответа, а не пинятся числом: литерал краснел бы на росте пакета, а не на пропаже свёртки. Побочно измерено: несвёрнутый каталог (107 КБ) стоял выше ориентира 64 КиБ из DECISION-0003 п. 7 — критерия входа в embeddings; свёрнутый обзор (49 КБ) вернул его под ориентир.

  • Ворота 33/33 (ci/fuzz_programs.py) сверяли 100 000 ИНЕРТНЫХ программ — дефект ВОРОТ, не реализаций. Генератор строил узлы собственными хелперами в форме {"kind": "rule", "payload": {…}}, которой в legal-ir.schema.json нет (payload там только у EvidenceItem и NormTemplate). Обе реализации читают плоскую форму, поэтому каждая программа складывалась в предупреждения — ASSERTION_NOT_ACCEPTED (§73, origin=None) на всех фактах и NON_EXECUTABLE_RULE («неизвестная сила правила None») на всех правилах — и давала NEITHER с графом из одного узла. Замер: 150/150 инертных документов на seed’ах 1, 999 и 20260827, ни одного rule_application; 12 ошибок схемы у порождённого ir против 0 у vectors/t/T012/ir.json. Побайтовое равенство таких документов про ПОРЯДОК вывода не говорит ничего: дельта-ветвь semi-naive (DECISION-0014 §3(б)) не исполнялась ни разу, и заявление «порог §3(4) по объёму взят» отозвано. Квалификация по инварианту 8: обе реализации вели себя одинаково и правильно — молчал гейт, который их предупреждения не читал. Правка: узлы строит lawref.authoring (тот же единственный источник форм CLIR, что у генераторов векторов; добавлен хелпер monotone() §65/E-0018), запрос берётся по утверждённой паре, правило с not_known объявлено defeasible (§113), треть программ получает цепное заполнение фактов ради раундов вывода; негативная голова из форм убрана — strict closure v1 её не берёт («барьеры §111 не реализованы»). Заграждения, чтобы пустота не вернулась молча: валидация порождённого CLIR схемой, запрет кодов ASSERTION_NOT_ACCEPTED/NON_EXECUTABLE_RULE, порог доли программ с выводом — все три до сверки байтов, плюс --canary на самой payload-форме в конвейере. Было 0 применений правил на 2000 программ, стало 30 653; оракул == движок побайтово.

  • Нога (в) DECISION-0014 исполнена буквально: ядро проверяет proof graph ДВИЖКА. Оба Lean-контура проверяли доказательства оракула (check_proof_certificates — замороженные expected.json, check_kz_certificates — живой lawref.evaluate), а движок был покрыт транзитивно через differential. Аргумент верен ровно пока множества покрытия совпадают — а vectors/t/T071 в SUPPORTED не значился и был единственным из 93 evaluate-векторов, где Lean проверял оракул, а differential движок не проверял вовсе (evaluate_coverage() про такие векторы только предупреждает). Вектор вписан в список — differential 93/93, байты lawc eval уже совпадали с голденом. check_proof_certificates получил второй проход: сертификат берётся из выхода lawc eval, 93 сертификата движка проверены ядром. Нового покрытия прямой контур не покупает (на зелёном differential байты те же) — он снимает зависимость ноги контура от полноты чужого реестра. Граница названа: monotone-конъюнкт ядро v1 не читает, и на рекурсии нога (в) остаётся частичной.

  • check_lower краснел на LAY-L0-WHY-NOT-REFUTED/-UNDETERMINED с самого их появления — дефект ВЕКТОРА, не lowering. lawc lower расходился с закоммиченным ir.json в одном месте: тело правила стояло одночленным and, компилятор же одноконъюнктное тело отдаёт голым конъюнктом. Квалификация по инварианту 8: не lawc (схлопывание стоит с 64ca286, WP-12, и уже присутствовало в 8a9a7bb — коммите, которым векторы созданы), не lawref, не SPEC (§207.1 об одночленных связках молчит, потому что порождать их нечему — when filed(v0); есть один конъюнкт, и одночленный and не выражается никаким .law-текстом; prose не меняется, errata не нужна). Корень — conj() с одним аргументом в vectors/tools/artifacts/whynot.py: хелпер одночленную связку намеренно не схлопывает. Форма молчала везде, кроме этого гейта: схема принимает обе, рендерер ir→law стирает разницу (source.law при регенерации неподвижен), исполнение даёт тот же документ. Из 117 правил векторов одночленный and был ровно у этих двух. Правка — в генераторе (инвариант 2); голдены сдвинулись ровно на три программно-производных хэша каждый (manifest.programHash, manifest.semanticHash, resultHash) при неподвижных results/proofGraph/issues/positions/conflicts — точечно, с предохранителем на множество разошедшихся путей, не --refreeze; инвариант 3 не нарушен (поведение оракула неподвижно, сменились байты входа). check_lower 71/71, differential 86/86 байтово, векторы 146/138 runnable.

  • §190 не проверялся у правил с головой-нормой — обнаружено, заведено задачей, в компиляторе пока не закрыто. Несвязанная переменная в exercise/valid_when/effect шаблона §122–§130 проходит lawc check чистой (у головы-литерала та же ошибка даёт LDC-E4101), и правило молча не порождает ни одной позиции. В акте о суверенитете это стоило несуществующего полномочия п. 11, найденного только сценарием.

  • Интернированный SupportStore в law-eval — представление, не скорость; замер отрицательный, и это записано. Атом при первом появлении получает плотный u32; стороны, индекс предиката и §208-байты аргументов работают на числах (ids/atoms_by_id/keys_by_id/arg_bytes_by_id); ground- сторона join-сравнений больше не канонизируется вовсе. Порядок перечисления §103 закреплён инвариантом «id в порядке возрастания ключей»; differential 86/86 (lawc == голден == живой lawref), 15 тестов эквивалентности, clippy чист. Гипотеза «кратного ускорения» опровергнута A/B-замером по CPU: release ×0,98–1,00, debug ×0,95–1,07 — нейтрально. Причина: тяжёлая канонизация в add/truth_status — это ПОИСК (литерал → ключ), и интернирование её не убирает; убрало бы только сквозное плетение id через путь публикации и посылок (solve возвращает id опор, derived_seen на id), а это перестройка формы алгоритма против оракула — уровень решения, как semi-naive (DECISION-0014). Слой оставлен как корректный фундамент под такое решение; скоростных обещаний за ним не числится.

  • «Жеті жарғы» Тәуке хана — целый акт корпуса, 7 жарғы из 7 плюс нормативная проза. Предшественник «Қарамола ережесі», прямо названный ею своим основанием. Первый акт, у которого АУТЕНТИЧНОГО ТЕКСТА НЕ СУЩЕСТВУЕТ: свод при жизни не записывался, полная версия не сохранилась, известен по записям XIX века. Вторичность источника выражена полями модели, а не примечанием — officiality unofficial, text … unofficial у каждого фрагмента, adopted/in_force не объявлены. Учёт 7 из 7, глубина §33.1 — EXECUTABLE 7, байтовая доля названа двумя числами (46,1 % от файла и 55,9 % от тела статьи, потому что закреплена веб-страница). 38 сценариев, differential 191 → 229 вызовов байтово. Найдено исполнением: шкала пересчёта скота согласована сама с собой (в отличие от ст. 58 «Қарамола ережесі»), кража описана двумя несводимыми мерами, перечень «четырёх случаев уплаты құн» противоречит тому же тексту в двух основаниях из четырёх, а третий жарғы не может быть строгим — у него есть изъятие.

  • Обе меры §33.1 научены третьему соглашению о заголовке — «N-жарғы». До правки «Жеті жарғы» был для них невидим молча: boundaries.py печатал «мера по статьям неприменима», а учёт возвращал пустой словарь. Конвенция носит то же имя языка "kk", что и «N-бап»: признаки исполнимого содержания берутся по языку акта, а не по форме его заголовка.

  • §180 в схеме: per-kind required для rule_application — errata E-0022. evaluation.schema.json требовал от ProofNode лишь общий конверт, и узел-подделка «правило не сработало» (why-not) прошёл валидацию и differential — поймало только Lean-ядро. ProofNode получил allOf/if-then: kind: rule_application обязан нести rule и substitution. Зеркально к E-0019 (там требуемое в JSON Schema невыразимо — здесь выразимо и потому обязано быть выражено). Обязательство свойством: пара негатив/позитив в selftest + масс-регрессия гейта 4 по живым ответам оракула. Prose §180 не меняется; schemaVersion не бампается.

  • law.verb.ru@0.4.0 — вербализация тотальна на всём корпусе (WP-25). Пробелов LDC-E8201 по 31 CLIR-документу — ноль на 7946 подписываемых блоках (было 32 в пяти документах). Закрыты: liberty §125, цель воздержания §124.3, эффекты terminate/modify/opaque §127, цель recurring §124.4, узлы interpretation/interpretation_group §152–§156 и revision §32.1 со всеми четырьмя операциями. Семантику не строили — она уже была под гейтами; добавлены фразы pack и ветки рендерера. Формулировки, где ошибка хуже пробела: liberty §125 назван установленным нормой, а не выводом из отсутствия запрета (§126 даёт UNDETERMINED), а группа толкований не объявляет действующей ни одну альтернативу — выбор принадлежит контексту §156. Три вектора из prose: VER-RU-L2-LIBERTY-FORBEARANCE, VER-RU-L0-REVISION, VER-RU-L3-INTERPRETATION; VER-семейство — 9. Голдены pack 0.1.0–0.3.0 не сдвинулись: VER-RU-GAP-L2-DUTY продолжает доказывать честный отказ. Покрытие внутри узла объявляется наличием фразы, и selftest сводит виды деклараций схемы с покрытием pack, требуя вписать остаток руками с причиной.

  • Запрос why_not(P) §172/§185 — восьмой вид запроса в обеих реализациях: унификация головы правила с ground-целью и разметка конъюнктов тела по паре опор §62 (NEITHER → UNDETERMINED, FALSE_ONLY → NOT_SATISFIED — §185 запрещает смешивать). Вид результата GRAPH, blocker graph в value; словарь ApplicabilityStatus/TriggerStatus §174.1 заполнен впервые. Векторы LAY-L0-WHY-NOT-REFUTED и LAY-L0-WHY-NOT-UNDETERMINED — обе половины различающей пары, обе под differential.

  • lawc why-not ЗАДАЁТ этот запрос движку, а не пересказывает чужой ответ; «не определено» выведено в отдельный раздел наблюдений.

  • Производительность горячего пути §62/§103 — вторая волна, байты неподвижны. (1) status_only/_status_of_key: фильтру конъюнктов и перечислителям §103 нужен только статус, а truth_status на каждый вызов клеил и сортировал списки опор — статус теперь считается непустотой сторон (append-only), списки опор для proof остались за truth_status; эквивалентность обоих путей — свойство 5.3 selftest и тест law-eval. (2) §208-байты элементов паттерна в цикле перечисления мемоизируются лениво — прежний код канонизировал один и тот же терм по разу на атом; порядок ошибок канонизации в точности прежний. (3) ground_args в Rust читается по ссылке вместо глубокой копии аргументов на каждой итерации. Итог: оракул ×1,22 по CPU-времени (декартов N=200, перемежённый A/B), движок в release нейтрален (×1,01 — там это съедал оптимизатор), differential 84/84, байтовая инвариантность оракула против доправочного состояния (92b4152) — 84/84.

  • LTO опровергнут замером — не вводится. Перемежённый A/B на нативном arm64: thin ×0,97, fat+cu=1 ×1,02 к обычному release — ноль, потому что время сидит в системном аллокаторе, LTO там бессилен. Цена была бы +267 с на каждую release-сборку (ворота 26/26 делают их две). Урок: непереме- жённый замер на этой машине показал было ×1,2 — артефакт дрейфа нагрузки.

  • Верстак формализации в MCP-сервере (mcp/law_mcp/workbench.py): шесть инструментов для черновиков по слоям корректности — law_pin (фаза 0, hash + publication-блок), law_draft_check (проба тремя исходами + §194 по переданным sources), law_draft_eval (исполнимость: мёртвые правила поимённо, любой issue строже info — блокер), law_measure (учёт статей и глубина §33.1 + байтовое покрытие), law_draft_verbalize (пара «текст ↔ вербализация B1» для смысловой сверки) и law_draft_differential (lawref ↔ lawc байтово на черновике). Архитектурный принцип — «модель предлагает, сервер отвергает»: черновики живут в песочнице и не попадают в каталог law_ask. Эвристики не дублируются: проба импортируется из скилла formalize-act (probe.py отрефакторен в библиотеку с прежним CLI), конвенции статей и признаки — из ci/check_source_pinning.py, глубина — из boundaries.py. Контракт: mcp/test_server.py вырос до 129 проверок; проверки нормативных ставок переведены с зашитых чисел на чтение из корпуса (зашитый МРП уже протухал при сверке акта с законом).

  • match §55.1: subject и вид узла под статикой — вид match-выражения стал унификацией видов ВСЕХ ветвей (раньше Kind::Unknown), а subject обязан быть data value: §55.1 говорит, что pattern matching — чистая операция над значениями и legal support не проверяет, поэтому голый proposition на месте subject отклоняется тем же кодом LDC-E2109, что и голое условие §56. Код один потому, что правило одно — proposition не является значением; § у него два, и сообщения по ним разные: обернуть subject в статус-тест §65 нельзя (он даёт формулу, а match требует терма), поэтому §55.1 предлагает унести proposition в тело правила. Замер до правки, а не чтение: на источнике T066 звучали 2 из 3 ожидаемых LDC-E2108 — значения ветвей обходились и раньше, не работал вид НАРУЖУ. Векторы T066 (виды сквозь узел; absentDiagnosticCodes держит, что исчерпываемость §39 и unreachable §55.1 не задеты), T067 (subject — на верхнем уровне и во вложенном match внутри ветви), T068 (граница: принят, кодов нет; source.law — выход рендерера ir→law, поэтому тот же вектор замыкает байтовую петлю MatchTerm в ci/check_lower.py; рендерер выучил enum-декларацию и оба выразимых паттерна §55.1). T042/T043 сюда не дотягивались — это утверждения о ХЭШЕ (§205 alpha, §209 порядок ветвей) и зелены при полностью отключённой статике термов; наличие «векторов на match» не означало покрытия match. Решение и оставшиеся границы — spec/decisions/0018-match-expression-slice.ru.md.

  • Условное выражение §56 разбирается и типизируется (LDC-E2109) — if перестал быть Opaque-узлом парсера: ast::Expr::If несёт условие (формула), обе ветви (термы) и лоуверится в canonical IfTerm §208 (condition через lower_formula — в CLIR это Formula, а не терм). Вывод видов §58 идёт СКВОЗЬ узел: обходит обе ветви и отдаёт наружу унификацию их видов; расхождение ветвей даёт Unknown — молчание, а не выдуманное правило, потому что §56 ветви не типизирует. Condition обязан быть Boolean data expression: голый proposition отклоняется новым кодом LDC-E2109 с code action §56; умолчание §66 «голый атом значит established» объявлено для ТЕЛА ПРАВИЛА и на data conditional не распространяется. Попутно закрыт пробел §65 — established(P) (status_function грамматики) до этого не разбирался вовсе, и предложенная §56 починка была невыразима. Векторы T063 (отклонение условия в трёх позициях), T064 (три вхождения LDC-E2108: then-ветвь, else-ветвь и терм НАД if), T065 (граница: файл принят, кодов нет; source.law — выход рендерера ir→law, поэтому тот же вектор замыкает байтовую петлю IfTerm в ci/check_lower.py). Решение и три проведённые границы — spec/decisions/0016-conditional-expression-slice.ru.md. Находка: названная граница покрытия §58 закрыта — spec/examples/kz/appc-art92.law:22–23 (known + 3 calendar_month) даёт LDC-E2108 ×2, второе вхождение дефекта корпуса класса E-0009, и appc-art92.law:21 — LDC-E2109. Настоящей причиной молчания был не Opaque, а уровень выше: тело pure function хранилось сырым спаном, и AST в этом месте не было; форма = expr; теперь разбирается в терм (блочная { … } §47.5 — по-прежнему спан). Репо-широкая сверка lawc check до/после: 279 файлов, наборы кодов совпали везде, кроме трёх копий appc-art92.law — ноль ложных срабатываний.

  • Виды арифметики §58 выводятся статикой (LDC-E2108) — lawc check отклоняет несовместимые сочетания до lowering, а не после сборки CLIR. Применяются обе таблицы §58: делимые (errata E-0020) и множимые (E-0021), плюс §57-сравнение и min/max/abs. Правило скаляра §49 записано там, где §58 его ставит, — ТОЛЬКО в умножении: Integer * Rational проходит, Integer + Rational, Rational * Decimal, Rational + Decimal и Rational / Integer отвергаются. Вид выводится через let §55, литералы §49/§50 и биндеры collect/кванторов; у чего вида нет (доменная константа §52, межпакетный символ, function §264, значение-зависимое частное Decimal / Decimal) — тот не диагностируется никогда. Векторы T058/T059: первый пиннит, что звучат ВСЕ четыре нарушения, второй — что законные формы принимаются и кода в них нет вовсе (новые поля diagnosticOccurrences и absentDiagnosticCodes режима static, в обоих раннерах). Находка: spec/examples/kz/social-code-art175.law:82 — registered - 3 calendar_month это Date - Quantity, TYPE_ERROR на исполнении; норма лоуверилась чисто и молчала. Правка неисполнима (§84.4 оставляет календарные месяцы невыразимыми) — журнал в IMPLEMENTATION-PLAN §«Дефекты корпуса».

  • Proof резолюции динамической отсылки §182 — узел source_resolution с полным составом, включая отвергнутых кандидатов с причиной отклонения. Обе реализации; differential байтовый. why-not выводит по нему вид source not in force §185 (остался один вид из восьми).

  • edition_state портирован в Rust дословно: движок читал только события in_force и не видел ни прекращения, ни приостановления — латентное расхождение с оракулом, невидимое для differential на текущих данных.

  • MCP-сервер пригоден для модели-потребителя — аудит по отказам живой сессии, каждая правка закреплена проверкой в mcp/test_server.py (итог 75 проверок). Каталог law_packages сжат с 375 КБ до ~40 КБ (большие акты счётчиками; появились package=… за полными сигнатурами и query=… для поиска по сигнатурам/меткам/константам); law_rules(package=…) большого акта — оглавление вместо 218 КБ текста. calc принимает дерево строкой (JSON), синонимы операций (divide, multiply, знаки) и листы {"op": "literal", …}. whyNot перестал молча пропускать правила с ВЫЧИСЛЯЕМОЙ головой — арифметика долей теперь объясняет, каких посылок не хватает, и ответ адресует к law_rules({"predicate": …}). derived фильтруется по предмету вопроса (скрытое называется числом), provenance.fragments — якоря применённых правил, а не все статьи акта (у ГПК было 490 фрагментов в каждом ответе).

  • Установленный ответ MCP носит оговорку поражаемости (vulnerableTo). Найдено живой сессией: «взыскивается 1/3» на споре 41-летней давности стояло без слова о салауате ст. 26 — вид спора не был подан, поражающее правило молча не сработало, и «да» читалось как безусловное (сессия заключила «в акте нет правила полного истечения», хотя оно есть). Теперь ответ называет правило, которое отменило бы вывод, и недостающие ему факты. Ложных оговорок нет: посылки довязываются по фактам дела, гарды считает оракул term-запросом по пустому документу (12 > 40 отличимо от 41 > 40 без полного fixpoint), а спорные строки whyNot (вывод и его поражение видны одновременно) уточняются точным подзапросом в малом бюджете — время контура не выросло на порядок. Посылки-сравнения в объяснениях рендерятся видом «v1 > 40» вместо «(условие вне literal-формы)». Четыре проверки контракта в mcp/test_server.py.

  • why-not выводит wrong interpretation §152–§156 в двух различаемых силах: посчитанный результат под толкованием (режим анализа §156) и объявленная, но не взятая альтернатива — про вторую не утверждается ничего о том, каким был бы ответ (§185).

  • unresolved reference вынесен из «неопределимых по документу» в отдельный список «не бывает на этом этапе по построению»: это статическая ошибка LDC-E5101/E5102, до вычисления она не доходит.

  • lawc test портирует режимы static и hash-compare (80 → 101 вектор из 127). Сбор статических диагностик вынесен в check_diagnostics / lower_diagnostics — раннер спрашивает тот же конвейер, что отвечает пользователю, а не свою копию проверок.

  • lawc graph — proof DAG §224 в DOT и JSON; остальные семь видов графов §224 перечисляются с причиной, по которой не строятся.

  • why-not читает judgmentRequests — вид missing judgment §185 стал определимым (было ошибочно записано в «неопределимые»; их осталось четыре).

  • Заключения запросов печатаются формулами, а не сырым JSON: разобраны пять форм обёрток плюс вызов функции §57–§58 и слабое дозволение §126.

  • «Қарамола ережесі» (1885) — целый акт корпуса, 70 статей из 70. Правила съезда биев пяти дуанов; первый акт корпуса не на русском языке и первый памятник обычного права. Учёт статей 70 из 70 при нуле объявленных границ, глубина §33.1 — EXECUTABLE 70, байтовая доля закреплённого текста 91,4 %. Пакет corpus/laws/karamola/, фрагменты порождает corpus/tools/sync_karamola_fragments.py, 30 сценариев регрессии, differential 142 → 172 вызова байтово. Найдено исполнением: шкала оценки скота ст. 58 не замкнута (ни одна девятка ст. 57 в овцах не считается — акт сам отправляет оценку к биям ст. 60), ст. 58 даёт для одной головы две несовпадающие оценки (27 овец против 30), а вилки санкций, выраженные двумя границами, делают решение бия проверяемым.

  • Обе меры §33.1 научены казахской нумерации статей. ci/check_source_pinning.py и boundaries.py знали одну форму заголовка — «Статья N», — и казахский акт («26-бап:») был для них невидим молча: учёт возвращал пустой словарь, а отчёт печатал раздел о полноте, ничего не измерив. Признаки исполнимого содержания и отсылки к другому нормативному порядку заведены наборами ПО ЯЗЫКАМ: перевод русского набора не годится, потому что деонтика здесь чаще стоит страдательным настоящим последствия («айып салынады»), а отсылка адресована шариату и обычаю, а не другому закону.

  • prohibition §130 доехал до CLIR. Модальность отсутствовала в списке парсера, а action у forbearance-цели терялся в lowering — при том что схема ForbearanceGoal объявляет поле обязательным. Итог: lawc не мог эмитировать ни одного валидного запрета, и во всём репозитории не было ни одного prohibition. Оракул (authoring.prohibition_template) умел это с самого начала — чинился движок, инвариант «оракул раньше движка» соблюдён. Вектор LAY-L2-PROHIBITION.

  • Корпус: Цицерон, «О законах» II §§19–22 — свод сакрального права римлян, 26 leges, 28 фрагментов, 64 правила, 39 норм-шаблонов (duty/prohibition/power). Первый неказахстанский и первый латинский акт корпуса; обе меры §33.1 научены классической нумерации параграфов [19]. Сценарии — corpus/run_de_legibus_scenarios.py, differential встроен в сам прогон.

Fixed

  • Integer / Decimal: оракул возвращал Integer со значением 3.5. Ветка div в lawref.values.binary проверяла только ПРАВЫЙ операнд (right.kind != "decimal"), поэтому всякий левый вид проваливался в десятичную ветку и получал вид ЛЕВОГО операнда при Decimal-значении: 7 / 2.0 → Typed("integer", Decimal("3.5")), Boolean / Decimal → Boolean со значением 0.5, Text|Date|Instant / Decimal → непойманный Fraction-ValueError, выходивший наружу документом с кодом ValueError — именем класса-исключения Python на месте правовой диагностики. Значение отвергают и собственный from_literal_term оракула, и его канон §208: сквозной прогон давал не документ, а CanonError. Расхождение не показывалось ничем — law-eval отвечал unsupported (Decimal-деление не портировано), differential Decimal-деление не покрывал, а lawc check пропускал Integer / Decimal по ветке-исключению в arith_result, отклоняя при этом зеркальный Decimal / Integer. Квалификация по инварианту 8 — дефект lawref и производный дефект lawc, не SPEC (разбор: побочная запись к E-0020 в spec/ERRATA-CORE.ru.md). Правка: проверка перенесена на оба операнда (таблица _DIVISIBLE названа явно), law-eval отвергает дословно тем же сообщением отдельной веткой перед unsupported, ветка-исключение снята. Закрытость списка делимых §58 записана прямым предложением — редакционно, поведение неподвижно (голдены T058/T059 не сдвинулись). Векторы T060 (статика, оба порядка), T061, T062; последние два в SUPPORTED — differential впервые покрывает отказ Decimal-деления.

  • MCP-сервер отвечал старым кодом оракула и никак этого не показывал. Процесс из .mcp.json живёт часами и держит код в памяти, а CLIR перечитывает с диска, поэтому provenance.programHash протухшего процесса СОВПАДАЛ с текущим корпусом: ответ выглядел свежим по каждому полю, ради которого провенанс и заведён. Наблюдалось 27.08.2026 при формализации «Қарамола ережесі» — сервер, поднятый до errata E-0020 (§35/§58, точное деление Integer / Integer), возвращал на kz-karamola четыре TYPE_ERROR там, где свежий процесс даёт TRUE_ONLY; сам акт был корректен (30/30 регрессии, KZ-differential 172/172 байтово). Тот же класс, что у lawc/target/debug/law-cli в CLAUDE.md, но без признака в самом ответе. Заведён mcp/law_mcp/freshness.py: отпечаток содержимого всех .py из lawref/lawref/ и mcp/law_mcp/, снятый ДО импорта lawref (обратный порядок делает протухший процесс неотличимым от свежего). Отпечаток стоит в provenance.codeHash и в каталоге law_packages — архивный ответ теперь проверяется на протухание спустя произвольное время; при расхождении кода с деревом tools/call и resources/read дают отказ STALE_PROCESS с обоими отпечатками и списком изменившихся файлов вместо ответа старой семантикой. Перезагрузка модулей на месте отвергнута: importlib.reload не переустанавливает уже связанные ссылки и заменил бы честный отказ на тихо неверный ответ. Покрыто девятью проверками mcp/test_server.py (93 в CI), включая ЖИВОЙ процесс с правкой оракула между двумя запросами — остальные проверки этот отказ не ловят по построению, поднимая процесс на каждый запрос.

  • Исключение при норм-голове отбрасывалось молча. unless/except_when у правила, порождающего норм-шаблон, никогда не читались lowering-ом: развёртка §149/§150 определена для literal-голов, а для позиции требует §105.1 (веха L2+). Депутатский иммунитет Конституции скомпилирован БЕЗУСЛОВНЫМ, без трёх своих изъятий; таких норм в корпусе семь. Отброс сделан громким — LDC-E1302 называет следствие; вектор LAY-L2-NORM-EXCEPTION-DROPPED. Сама развёртка не реализована: она вывела бы движок вперёд оракула.

  • §58: точное деление целых даёт Rational — errata E-0020. До неё Rational был объявлен встроенным типом §35 и неконструируем поверхностным синтаксисом: литерала нет, строка отвергается §48, а единственный путь Decimal / Decimal давал вид результата в зависимости от ЗНАЧЕНИЯ (10-гладкий знаменатель → Decimal, иначе → Rational), и §48 запрещал их смешивать. Следствие: 1/4 + 1/6 было TYPE_ERROR. Правка аддитивна — Integer / Integer до неё было безусловной ошибкой в обеих реализациях, грамматика не тронута. Вектор ERR-E0020-RATIONAL-DIV.

  • Пакет faraid.shares — фараид, исламский наследственный расчёт: установленные доли, хаджб, аул, остаток (асаба) и возврат остатка (радд). Второй неказахстанский акт корпуса. Держит нагрузку, которой не даёт ни один акт РК, — точную рациональную арифметику на закрытых знаменателях (2, 3, 4, 6, 8, 24, при ауле 27) при полном запрете округления §18. На нём и найдена E-0020. Источник закреплён (PINNED_OFFICIAL_BYTES — изложение написано для репозитория, его файл и есть публикация), поэтому предъявлены ОБЕ меры §33.1: покрытие 73,3 % и глубина EXECUTABLE 10 / SOURCE_ONLY 1 / вне охвата 3 при UNEXPLAINED 0. Регрессия corpus/run_faraid_cases.py: 7 классических казусов с ответами из литературы (минбария, аул 6→7, асаба с сыном, отцовский остаток, радд, хаджб), 68 проверок, differential 7/7 байтово; в каждом казусе проверяется, что распределено ровно единица.

  • §207.1 formula normalization в нормализаторе: flatten ассоциативных and/or, сортировка коммутативных операндов по semantic hash поддерева, удаление точных дубликатов. Исполняет обязательство errata E-0002, значившееся оговоркой скоупа v1. Вектор ERR-E0002-CANON.

  • §13 NFC-нормализация строкового литерала в разборе; официальный text block §17 не нормализуется (§13 запрещает менять его байты). Вектор LAY-L0-ENCODING — настоящие CRLF+NFD байты против LF+NFC.

Fixed

  • §182: proof graph term-запроса ссылался наружу себя. Корневой function_evaluation перечислял посылками id узлов реестра, а в документ реестр не попадал — висячая ссылка, неотличимая от подделки. Обе реализации вели себя одинаково, поэтому differential молчал; нашло Lean-ядро. Изъятие KNOWN_DANGLING снято вместе с дефектом.
  • NFD-строка отклонялась вместо нормализации (LDC-E1306): law-canon NFC только проверяет, а нормализатор приведения не делал. Один и тот же акт компилировался или нет в зависимости от машины автора.
  • Четыре unit-теста law-hir переведены с позиционных утверждений о порядке конъюнктов на утверждения о составе.

Changed

  • §197 в conformance descriptor записан по списку, а не оптом. Запись «блок отложен» верна и скрывала две вещи: §197 состоит из двух половин с разными заголовками, и план откладывает только solver-assisted; из первой половины три позиции выполняются попутно другими проверками (LDC-E2102/E1105/E5101/E5102, LDC-E4109, LDC-E2104/E2108), а три — нет (недостижимая декларация, пустой enum-домен, дубль нормализованного правила; каждая проверена пробным файлом, все дают check OK). Первая из трёх не сделана по измеренной причине: на пофайловой мере 335 из 4519 relation-объявлений дерева не упомянуты вне своей строки, а худший случай — словарный файл пакета, 143 из 143, читаемый соседними файлами; нужна пакетная гранулярность и правило про словарь. Заявка остаётся отложенной целиком — попутное покрытие §197-анализом не является.

  • KZ-регрессия разрезана на пакет corpus/kz/ — 2795 строк одного файла стали девятнадцатью модулями: обвязка (harness), связывание §23 (linking), реестры (registry), сборка прогона (run), шов подмены оракула (engine) и четырнадцать модулей актов в acts/ — модуль на пакет CLIR. Вход corpus/run_kz_regression.py остался тонким и по тому же пути. Тела сценариев не переписаны: перенесены срезами, что доказано парным опытом — 191 вызов evaluate, канонические байты и порядок вызовов идентичны до и после. Заодно выброшено мёртвое, которое границы сделали видимым (_hp_const, LAB_NS, OFFICIAL_CAL_NS), и слиты дословные двойники конструкторов термов §35 (_money_term/_sa_money/_proc_money → money_term, и так же по Integer/Date).

  • Подмена оракула в регрессии — теперь set_evaluate, а не присваивание атрибута. До разделения три гейта (check_kz_differential, check_kz_certificates, report_norm_graph) писали kz.evaluate = обёртка, и это работало само собой: все вызовы читали тот же глобал. В пакете свойство держится только поздним связыванием, а его обрыв не ронял бы ничего — differential сверил бы нуль вызовов при пустом списке расхождений и напечатал бы OK с кодом 0. Поставлены три независимых сторожа, каждый проверен нарушителем: линт ci/check_evaluate_seam.py с канарейкой ci/canaries/bad_evaluate_seam.py (2 класса) запрещает связывание именем внутри corpus/kz/; каждый из трёх гейтов падает на CHECKED == 0 / пустом RUNS; сам вход падает с объяснением, если ему присвоили осиротевший evaluate старой формой.

  • Причина отложения windows в заявках conformance сужена, а не снята: векторы CRLF/NFD/NFC заведены и §13 реализован, но прогона на windows-latest не выполнялось.

  • Вербализация читает конъюнкты в каноническом порядке §207.1, а не в авторском: source order живёт в HIR/source map, и канала HIR → B1 нет.

  • Отложенных позиций в заявках conformance: 11/11 → 7 (lawref) / 6 (lawc).

  • Корпус: проект программы партии «Алаш» (1917), раздел I «Форма государства» — corpus/laws/alash-program.law: 29 правил (12 из них порождают позиции power/immunity/duty/liberty), 17 фрагментов на казахском закреплённом тексте, text coverage 99,8 %; 14 сценариев KZ-регрессии под байтовым differential. Первый акт корпуса с не-русским источником.

  • Мера глубины §33.1 делит акт и по разделам: boundaries.py получил запасную единицу (римские разделы) для актов без заголовков «Статья N» и перестал требовать, чтобы закреплённый документ назывался ru.txt.

  • lawc test — раннер conformance-векторов §267–§269 (WP-35): обход дерева, режим evaluate, различение runnable/xfail/pending и отдельный исход xpass; непортированные режимы перечисляются поимённо, а не пропускаются. 2 секунды на всё дерево в одном процессе.

  • lawc explain и lawc why-not — §183–§185 (WP-35): объяснение из proof graph и меток (машинная форма §184), blocker graph §185 в объёме, который подтверждает документ; пять неопределимых видов перечисляются с указанием, чего для них не хватает — §185 запрещает утверждать, что отсутствующее условие ложно.

  • ERRATA E-0019 · §179: proof graph не обязан быть замкнут по посылкам. Квалификация — дефект SPEC: «DAG» о замкнутости не высказывается, и обе реализации, роняя узлы реестра из term-запроса, не нарушали написанного правила. §179 дополнен требованием замкнутости и её границей; проверка замкнутости добавлена в ci/check_proof_certificates.py и не зависит от Lean-тулчейна (79 графов, канарейка внутри).

  • §151 «definition» и режим вектора lower-shape: definition Name(...) sufficient|necessary|exact разбирается и лоуверится — необходимое направление даёт non-derivational constraint §93.1, а не правило с формулой в голове (AUDIT §2.17, §5.3 «No contraposition»); exact даёт оба узла. Раннер получил режим lower-shape для утверждений о ФОРМЕ выхода lowering-а, включая отрицательные: байтовое сравнение с голденом подтверждает только неизменность. T037 снят с pending — единственный признанный пробел L0 закрыт, deferred обеих заявок conformance 11 → 10.

  • Ворота 22/22 «глубина формализации §33.1» (ci/check_formalization_depth.py): односторонний храповик против тихого регресса меры EXECUTABLE / ANCHORED / SOURCE_ONLY и числа статей без объявленной причины. Реализация меры импортируется из скилла formalize-act, разбор declared — из ворот закрепления: третья копия соглашения и была бы дефектом.

  • Вид причины pending_addressee в articles.json: отсылочная статья объявляет ожидаемый акт, а не «исполнять нечего»; заявление проверяется наличием отсылки в тексте статьи, симметрично проверке признаков деонтики.

  • DECISION-0012 (ценностные нормы и объявленные границы) и DECISION-0015 (канал для оценочных понятий: интерпретация вместо judgment в 0.1).

  • Ст. 9 Конституции подключена к механике §158 двумя фактами §71 с якорями.

Fixed

  • article_text требовал точку после номера статьи, ARTICLE_RE — нет. У Конституции-2026 точки нет ни у одной из 96 статей, поэтому срез был пуст, признаки исполнимого содержания не находились, и проверка причин объявленных границ работала вхолостую. Хвост заголовка сведён в ARTICLE_TAIL; добавлен инвариант двух мер (посчитанная статья обязана иметь непустой срез).

  • Срез статьи затекал в заголовок следующего раздела — «Раздел II. Основные права, свободы и обязанности» давал ст. 11 ложный признак деонтики.

  • lower_presumption терял @source: развёртка §146 выходила без якорей, и статья оставалась SOURCE_ONLY при формализованной норме. Якоря получили общий пост-проход рядом с метками и видимостью (§33).

  • boundaries.py: многоредакционная раскладка источников (Конституция была невидима для меры целиком), все пакеты акта вместо clirs[0], разрешение через namespace вместо совпадения имён файлов, исключение ненормативного audit-world из меры полноты.

  • Отчёт закрепления больше не выдаёт учёт за глубину: «формализовано 96 из 96» → «с фрагментом 96» плюс отдельная строка глубины §33.1.

  • Машинный режим CLI §225 (срез WP-35): --json у parse, check, layer, features и expand --symbol. Диагностики — по нормативной diagnostic.schema.json, байты — канонизатор §208, отказ приходит тем же конвертом. line/character совпадают с рендером §198 (DECISION-0002), offset — байтовый §13. Ворота ci/check_cli_json.py: форма по схеме, совпадение чисел двух режимов печати, голдены с канарейкой, реестр DEFERRED сверяется с usage-строкой CLI. Расширение VS Code мигрировано на машинный режим и получило точный конец спана вместо эвристики по токену.

  • WASM-сборка ядра (WP-36 закрыт): крейт law-wasm — сырой C-ABI без wasm-bindgen и без единого блока unsafe; все пять семантических крейтов собираются под wasm32-unknown-unknown без правок (запреты clippy.toml оплатили совместимость заранее). Ворота ci/check_wasm.py прогоняют весь differential-список — 74/74 против тех же замороженных expected.json, что и lawc eval; рантайм — встроенный в Node WebAssembly.

  • Expansion view §213 (вторая половина WP-23): lawc expand <file> --symbol <Имя> — декларация, её спан и все порождённые ею узлы CLIR. До этого expand был байтовым синонимом lower. Провенанс читается из StableId §14; голдены на §146-презумпции и §206-splitting.

  • Ворота DX проведены в ci/run_all.sh (18 → 21): гейты сгенерированного расширения жили только в docs.yml, и локальный прогон их не видел — из-за чего дефект lawc parse --ast простоял при зелёном конвейере.

  • law-hir/names.rs — имя и вид top-level декларации §24 одним разбором для резолвера (LDC-E1201) и для expand --symbol.

  • Конституция Республики Казахстан 2026: закреплены аутентичные RU/KK публикации действующей Конституции (96 статей на каждом языке) и обе прекратившие действие редакции Конституции 1995 года; семантика разложена на семь пакетов kz.constitution.* и отдельный audit-world. Машинная граница доведена до 85 EXECUTABLE, 11 ANCHORED, 0 SOURCE_ONLY, без статей вне пакета и неразрешённых якорей. Конститутивные положения сохранены точными фактами; добавлены прямые правила основ строя, прав, статуса и компетенций Президента, Курултая, Правительства, судов, Омбудсмена и местных органов. Многочисленные выводы одной статьи канонически расщеплены на отдельные правила: прежняя запись с несколькими then молча сохраняла только последний head. Регрессия выросла до 46/46, B1-паспорт через law.verb.ru@0.4.0 — до 1173 блоков без LDC-E8201; человеческие approvals оставлены явно unreviewed.

  • Оракул L0 (M2): календарь §85/§85.1 и DeadlinePolicy §86; типизированные значения — точный Decimal §18, Money §50, Quantity §49, Date/Instant §57, Rational §35; движок строгих правил (naive fixpoint §103, range restriction §190, effective §87, ProofRegistry §180); closure §70, collect §52.1, keys §45.1; контексты и профили §89/§89.1; манифест §10 и покрытие lock §11, generate_lock/diff_lock (WP-06, WP-07, WP-30, WP-31).

  • lawc (M3): лексер §15–§19 и recursive-descent парсер L0-среза; literate frontend .law.md §7.1/§217 с байтовым round-trip; типизированный source model §27–§33; resolver-проверки law-hir; normalizer AST → CLIR с rule splitting §206 и презумпциями §146; первый срез type checker — разрешение имён, арность §45, совместимость типов с entity-subtyping §42; команды lawc parse|check|lower|expand (WP-08, WP-09, WP-12, WP-10).

  • law-eval (M4): дословный порт оракула на Rust, команда lawc eval; ворота differential в CI — 15/15 поддержанных векторов дают канонические байты, совпадающие с замороженным голденом lawref (WP-13).

  • Гейт G-M1b закрыт в L0-объёме: 25/25 — каждый evaluate-вектор имеет source.law, lawc lower воспроизводит его ir.json байтово; петля authoring → рендер → парсер → normalizer замкнута.

  • Расширение VS Code/Cursor: подсветка .law и literate .law.md, подсказки при наведении с § спецификации по ключевому слову; сборка .vsix скриптом.

  • Демо Средиземья: 5 сценариев, раннер, интерактивный режим (REPL).

  • site/ — сайт документации на Astro Starlight: §-резолвер связывает 926 перекрёстных ссылок, TextMate-грамматика .law выводится из grammar.ebnf, битая ссылка или неразрешённая § валит сборку (WP-37).

  • spec/examples/ — восемь исходников .law, скопированных из релизного якоря; канонична теперь рабочая копия.

  • ERRATA-CORE: записи E-0008 (bvr.law использует hard keyword event как имя, §15) и E-0009 (девять дефектов corpus-примеров: необъявленные символы, арность conclusion_of). Обе — находки инструментов, а не правки: релизный якорь не редактируется, исправления уходят в пакет 0.2 (WP-29).

  • DECISION-0002: единица колонки в диагностиках и граница ASCII-идентификаторов. Unicode-идентификаторы §14 (XID_Start/XID_Continue) объявлены вне среза 0.1 — вместо «недопустимый символ» лексер выдаёт LDC-E0103 на весь идентификатор и продолжает разбор. XID без нормализации NFC §13 отклонён сознательно: имена идут в StableId §14 и semantic hash §209, и два написания одного имени разошлись бы тихо.

  • Релизный пакет 0.2-draft (WP-29): release/0.2-draft/ (214 файлов) и сборщик ci/build_release.py — гейт 18/18. CHECKSUMS.sha256 покрывает всё, включая LS/FOUNDATION/PLAN, которых не было в инвентаре 0.1; RELEASE.json несёт метаданные §244 с явными причинами отсутствия publisher identity и подписи; метаданные векторов внутри пакета позволяют пересчитать заявки conformance, не выходя за его пределы; относительные ссылки классифицированы (битых нет, внешние перечислены).

  • Ступень (2) вербализации (LS §3.8): pack law.verb.ru@0.2.0 с форматом law.verb/0.2 потребляет морфологические формы §218.1 (биндеры в родительном падеже, stdTypeForms для встроенных типов); feature law.verb/0.2 в реестре; вектор VER-RU-L0-MORPH. Смена ступени меняет текст и verbalization hash при неизменной семантике — то есть даёт stale_verbalization, а не stale_semantics.

  • Межпакетная ссылка из исходника закона (вторая половина WP-31): law_hir::lower_with_imports + ImportContext/ResolvedImport; флаг lawc lower <файл> --imports <контекст.json> принимает готовый массив LockedImport от оракула (resolver.envelope_imports). pkg::symbol разрешается в StableId §14 чужого пакета, собственное имя пакета §23 — в свой namespace; объявленные зависимости уезжают в envelope.imports и потому входят в semantic hash §209. Ворота ci/check_cross_package_lowering.py (7 групп) сверяют список компилятора со списком резолвера; ci/check_package_resolve.py проведён в CI и run_all.sh (шаги 9–10/17). В корпусе обе денежные связки переведены: ОСМС читает МЗП, правила закупа — МРП (kz.corpus.budget::minimum_wage и ::mrp); раннер линкует мир и сверяет закрепление байтов (разрыв — LDC-E1104). Регрессия 84/84, KZ-differential — 128 вызовов байтово идентичны.

  • Транзитивная прочность закрепления в отчёте ci/check_source_pinning.py: цепочки по импортам §209, sourceArtifacts и URN-якорям §33 с рекурсивной оценкой прочности; отдельным подразделом — нормы, не прослеживаемые ни до одного акта корпуса. Ворот на «слабых звеньев нет» нет намеренно (учебные тексты-заместители нельзя объявлять закреплёнными).

  • Навигационная карта тулчейна (срез WP-37): docs/reference/overview/ARCHITECTURE.ru.md — конвейеры обеих реализаций, инварианты детерминизма, путь добавления конструкции end-to-end, семейства и режимы векторов, назначение каждого гейта CI; ссылка из README.

  • Пакет материалов пилота B1 (срез WP-37): pilot/ — инструкция участнику, опросник с блоками A/B/C, ключ оценщика, порядок сеанса и генератор pilot/build.py (документы порождаются детерминированно и в репозитории не хранятся; сборка падает при маркерах ⟦не вербализуется⟧). Протокол spec/PILOT-B1.ru.md получил две датированные записи об изменениях, внесённые до начала сбора данных.

  • Conformance descriptors обеих реализаций (срез WP-27): conformance/*.json собираются ci/build_conformance.py из реестра features и слоевой разметки векторов и проверяются против них же; схема дескриптора получила поле deferred для отложенных блоков §197, статуса Windows и частично реализованных возможностей. Ложная заявка (слой, feature, версия, спрятанный пробел, подделка descriptorHash) опровергается.

  • Diff вербализаций (WP-25 (c), срез WP-23): lawref/lawref/semdiff.py — semantic diff §215 с пятью видами изменений (added/removed/changed/ renamed/presentation) и его рендер как diff вербализаций (LS §3.6); команда python3 -m lawref diff с ненулевым кодом выхода при семантическом изменении; вектор VER-RU-DIFF-DEFEASIBLE с golden diff-ом.

  • Feature negotiation и версии языка (WP-32, errata E-0016): нормативный реестр spec/feature-registry.json с девятой схемой, каноническое имя языка law.core и версия 0.1, law-hir/features.rs в конвейере lawc check (LDC-E1401 с migration report §266.1, LDC-E1402, LDC-E1403), команда lawc features. Формат template pack и контур утверждений теперь версионируются этим механизмом, а не собственными договорённостями.

  • Пилотный материал B1 и пререгистрированный протокол: оба пилотных файла (social-code-art175.law, legal-acts-art12.law) впервые компилируются, размечены метками и вербализуются без пробелов; их слои (L0 и L1) выводятся машинно. Протокол пилота — spec/PILOT-B1.ru.md: пять различающих пар, четыре порога, критическая пара not_known / not.

  • Семантические слои L0–L3 нормативно (WP-24, DECISION-0007): новое приложение spec/LAYERS.ru.md (L0/L1 нормативно, L2/L3 информативно), law-hir/layers.rs — вывод слоя по использованным конструкциям, команда lawc layer и флаг lawc check --layer, диагностики LDC-E8101 LAYER_EXCEEDED и LDC-E8102 LAYER_DEPENDENCY_EXCEEDED, поле semanticLayer в манифесте, lockfile и conformance descriptor, эффективный слой сборки в law.lock, два LAY-вектора-нарушителя. Слой — потолок, а не метка: объявление выше выведенного допустимо, ниже — ошибка.

  • Контур утверждений вербализации (WP-26, DECISION-0006): восьмая нормативная схема review-approval.schema.json, lawref/lawref/approvals.py и команды python3 -m lawref approve / approvals-check. Юрист утверждает блок ревью-документа; подпись привязана к semantic hash УЗЛА и байтам блока, поэтому правка соседней нормы её не трогает, а наполнение меток даёт stale_verbalization, а не stale_semantics. Смена версии template pack без изменения текста устареванием не является. Коды LDC-E8201 VERBALIZATION_GAP и LDC-E8202 STALE_APPROVAL активированы из резерва E82xx; §33.1 получил необходимый машинный признак уровня VERIFIED.

  • KZ-корпус размечен метками §218: метки стоят во всех актах корпуса (понятия, отношения, правила, приоритеты, исчерпывающие перечни, издания, фрагменты). Вербализация корпуса читается юридическим языком, а не идентификаторами: Закон об ОСМС № 405-V даёт ревью-документ на 698 строк и 79 блоков без единого маркера ⟦не вербализуется⟧, каждое правило названо статьёй и пунктом. Semantic hash пакетов при этом не изменился (errata E-0010) — изменились только content hash узлов. Pack дополнен русскими именами встроенных функций §257, чтобы денежные формулы читались.

  • Вербализатор B1 (MVP, WP-25) — verb/law.verb.ru@0.1.0 (формат template pack law.verb/0.1: фразы, операторы, агрегаты, русские имена встроенных типов, дисклеймер, перечень покрытых node kinds) и lawref/lawref/verbalize.py — чистая функция CLIR → ревью-документ .lawread.md с content hash. Команда python3 -m lawref verbalize <ir.json>. Канонические формулировки LS §3.4, включая различающую пару «установлено, что не P» / «не установлено, что P». Тотальность §3.3 проверена сплошным прогоном по всем CLIR репозитория: на L0–L1 маркеров ⟦не вербализуется⟧ нет, L2-конструкции помечены явно.

  • Семейство VER-векторов и режим раннера verbalize (LS §3.9): сверяются байты golden .lawread.md, content hash, число и состав пробелов тотальности; двойной прогон подтверждает детерминизм. Три вектора, включая VER-RU-GAP-L2-DUTY — честный маркер вместо молчаливого пропуска.

  • Морфологические формы метки §218.1 (DECISION-0004): необязательный блок label ru-KZ official "…" { genitive "…"; }, закрытый словарь слотов на семейство language tag, Label.grammaticalForms в CLIR, диагностика LDC-E8203 на слот вне словаря и на повтор.

  • Метки §218 в компиляторе — первая предпосылка вербализатора B1 (WP-25): label <language-tag> <official|unofficial|translation> "текст"; разбирается в теле entity, relation, rule и constraint (grammar label_item; у rule/constraint — в том числе перед биндерами for), копится в конверте декларации рядом с annotations/doc и лоуверится в поле labels узлов CLIR (§202) в каноническом порядке (language, status, text) с пересчётом content hash узла. До этого меток в CLIR не было ни одной.

  • Вычислительное ядро норм — арифметика и агрегаты внутри правил (обе реализации, differential байтово):

    • §58 арифметика в head правила: вычисляемый аргумент вывода сворачивается в ground-значение до публикации (§190). Раньше выражение в head вообще не вычислялось — см. Fixed;
    • §57/§58 терм-гарды в теле (when … and (доход > предел)): у сравнения нет support-пары, оно отсекает подстановки, а не даёт фактов; раньше такое тело давало NON_EXECUTABLE_RULE;
    • §58 min/max над Money/Quantity/Decimal — выбор операнда без арифметики, поэтому политика округления не требуется (в отличие от div);
    • §50 round(value, precision, mode) как терм-функция: единственный законный путь к неточному денежному результату, политика приходит аргументами. Режимы HALF_UP/HALF_EVEN/HALF_DOWN/UP/DOWN/CEILING/FLOOR;
    • §50.1 процентный литерал: 3 percent → точный Decimal 0.03 с display unit percent (÷100 сдвигом запятой, без округления);
    • §52.1 collect v: T where F в поверхностном синтаксисе и §59 агрегаты над ним (count/sum/min/max/average) — в том числе в теле правила, с comprehension, параметризованной переменными правила («взносы ЭТОГО плательщика»). Источник агрегата обязан быть невыводимым: иначе нужен барьер полноты §111, и правило честно пропускается с NON_EXECUTABLE_RULE, а не считается по недособранному множеству;
    • Integer §257 стал полноценным видом значения (был непредставим): count возвращает натуральное число, целое умножается как безразмерный скаляр §49, но не складывается с Decimal-видами без конверсии §48. Векторы LAY-L0-ARITHMETIC, LAY-L0-GUARD, LAY-L0-BODY-AGGREGATE (differential 42/42).
  • Шестой акт корпуса: Закон об ОСМС № 405-V (corpus/laws/osms.law), сверенный с действующей редакцией на 01.01.2026 (протокол — corpus/osms-verification.ru.md) — первый пакет, где сумма ВЫВОДИТСЯ правом, а не считается запросом на границе. Сверка дала три содержательных расхождения, все закрыты:

    • ст. 29 п. 3 исключён Законом РК от 14.07.2025 № 206-VIII с 01.01.2026: единый предел «10 МЗП» заменён двумя разными — 40 МЗП для отчислений (ст. 27 п. 2-2) и 20 МЗП для взносов (ст. 28 п. 5-2). Пакет несёт ОБЕ редакции, разделённые effective §87: доход 2 400 000 ₸ даёт взнос 17 000 ₸ на дате права 2025 года и 34 000 ₸ на дате 2026-го;
    • «двенадцать месяцев» ст. 5 — предельный период ЗАДОЛЖЕННОСТИ (п. 3), а не условие статуса: право даёт уплата (п. 1), при прекращении сохраняется три месяца, а при шестидесяти месяцах непрерывной уплаты — шесть (п. 2);
    • перечень ст. 26 — четырнадцать действующих подпунктов: «зарегистри- рованные безработные» исключены в 2025, ветераны ВОВ внутри пп. 7, отсутствовали получатели адресной социальной помощи. Плюс расхождения адреса: взносы по договорам ГПХ — в ст. 28, а не в несуществующей ст. 28-1; ст. 14 перечисляет больше видов плательщиков. Второй проход — по дословному тексту (fragment-ы статей 5, 14, 26, 27, 28 и 29 несут официальные тексты из ИПС «Әділет», §194-хэши посчитаны от них; извлечение — corpus/fetch_osms_texts.py, повторная сверка — --check):
    • предел отчислений ст. 27 п. 2-2 стоит на СОВОКУПНОМ доходе работника, а не на выплатах каждого источника — база и сумма сведены к ключу по лицу;
    • освобождение от взносов (ст. 28 п. 7) и от отчислений (ст. 27 п. 3) — разные перечни: от взносов освобождены все категории п. 1 ст. 26, от отчислений только подпункты 1), 5), 7), 11), 12) и 13). За неработающего получателя АСП взносы не платятся, а отчисления платятся;
    • право на медицинскую помощь ст. 5 п. 1 имеют и освобождённые от уплаты по ст. 28 п. 7 (военнослужащие и служащие специальных органов), а не только те, за кого уплата производилась. Сценарии OSMS-01…OSMS-16; KZ-регрессия 27/27 → 43/43. MCP-сервер отвечает на денежный вопрос с адресом и разной суммой на разных датах права.
  • -infinity как endpoint интервала §20 в парсере и lowering: грамматика его допускала, парсер — нет, поэтому норма «действовала до такой-то даты» не выражалась без выдуманной нижней границы.

  • Агрегаты §59 в head правила (обе реализации): нормам вида «размер считается за период не более двенадцати месяцев» сумма нужна в выводе, а не в условии. Барьер полноты §111 проверяется для head так же, как для гардов; посылки агрегата входят в доказательство вывода.

  • Корпус закреплён на официальных текстах. Пять пакетов несут настоящие публикации; 23 фрагмента заменены подлинными текстами статей и байтово сверены с источником инвариантом §194. Отчёт покрытия §33.1 впервые даёт числа вместо утверждений: ОСМС 29,0 %, Правила закупа 5,3 %, закон о праздниках 5,7 %, ГК 0,4 %. Статус — PINNED_UNOFFICIAL_COPY: закреплено плоское извлечение со страницы портала, а не байты официального опубликования. Извлечение воспроизводимо — corpus/tools/extract_source_text.py. budget-2026 и rest-day-transfer-2026 намеренно остаются ABSTRACT_ONLY: у них выдуманы сами идентификаторы акта, а не только тексты.

  • Ворота закрепления источников ci/check_source_pinning.py (15-е в ci/run_all.sh): сверка закреплённых байтов §194-кодами, запрет голого заявления materialization_status PINNED_* без публикации, и отчёт покрытия §33.1, который считает text coverage против байтов публикации, а без неё честно пишет «не определён». Режим --pin <файл> считает digest и печатает готовый блок декларации, ничего не записывая. Сети нет: закрепление — ручной шаг с коммитом результата.

  • Пример механизма corpus/laws/pinning-example.law — вымышленный акт, написанный целиком для примера; его собственный файл и есть официальная публикация, поэтому PINNED_OFFICIAL_BYTES там правдиво. Две статьи из четырёх намеренно не формализованы: отчёт показывает 22,3 % покрытия. Остальные семь актов корпуса объявили ABSTRACT_ONLY — их фрагменты несут учебные тексты-заместители, а не редакции настоящих актов.

  • Уровень publication §27.3 в компиляторе (errata E-0013). source, edition и publication лоуверятся в source_work / source_edition / publication — до этого все три молча выпадали предупреждением LDC-E1302, и fragment … in EDITION ссылался на редакцию, которой в CLIR не было. Байты публикации в CLIR не входят: узел несёт канонический uri, mediaType, documentHash и retrievedAt, а локальный путь к закреплённым байтам — несемантический local_path, уезжающий в metadata документа (§209 «local source paths»). Добавлен SourceEdition.materializationStatus (PATCH-0.1.1 §9 в узкой форме).

  • Две проверки §194 на паре (publication, fragment): LDC-E5204 (байты не дают объявленный documentHash) и LDC-E5202 (текст фрагмента не найден в закреплённых байтах публикации). Вторая проверяется вхождением байтов, а не смещением — смещения плывут при каждом перезакреплении документа. Сравнение по исходным байтам UTF-8 без нормализации (§13). Это первая машинная гарантия того, что формализованный текст взят из документа: прежний §194 гарантировал лишь неизменность текста с момента, когда автор посчитал его хэш. Проверке нужна файловая система, поэтому она вызывается из CLI, а не из чистого check_file; путь обязан быть относительным внутри каталога пакета. Векторы ERR-E0013-SOURCE-PINNING, ERR-E0013-PUBLICATION-HASH.

  • §84.4 days_between (errata E-0015): длительность между двумя датами стала измеримой. §84 объявлял три типа длительности, и ни один терм ядра их не порождал — «пеня за каждый день просрочки» была невыразима, число дней приходилось вводить фактом дела. Возвращает счёт календарных дней (Integer), отрицательный при обратном порядке; календарь §85 не нужен — рабочие дни считает add_business_days §86, и подменять одно другим нельзя. Вектор ERR-E0015-DAYS-BETWEEN, порт в law-eval сверен байтово.

  • Учёт статей акта в ci/check_source_pinning.py: пакет объявляет охват (sources/<акт>/articles.json), и каждая статья в охвате обязана быть либо формализована, либо объявлена вне охвата с причиной. Доля покрытия говорит, сколько текста формализовано; учёт — не забыта ли статья. Отсутствие учёта не роняет ворота, но печатается как «НЕ ОБЪЯВЛЕН»: мера может отсутствовать, но не молча.

  • Закон об ОСМС формализован целиком: 42 статьи из 42, покрытие текста 29,0 % → 97,3 %, список объявленных границ пуст. Исчислительное ядро — новыми правилами: ст. 2 (сфера действия, каскад с оговоркой «если иное не предусмотрено»), ст. 3 (приоритет международного договора над Законом — lex superior приоритетом L1), ст. 13 (участники через closure §70), ст. 26-1 (взносы из местного бюджета с изъятиями через default negation §113), ст. 30 (нарушение срока уплаты), ст. 31 (пеня за каждый день просрочки). Институциональные статьи — нормативными фактами с официальной формулировкой в метке §218; факты сгенерированы из закреплённого текста, поэтому перечни полны по построению, а исключённые поправками подпункты норм не порождают.

  • Связи между актами — три ступени (DECISION-0010). Общая рамка: «норма A влечёт норму B вообще» неразрешимо для языка с арифметикой §57–§58 и defeasible-механикой, а §105.1 запрещает выводить отношения норм из текста. Поэтому следование материализуется доказательством, а статике оставлены вопросы, которые разрешимы.

    • Эмпирический граф следования — ci/report_norm_graph.py: каждый вызов evaluate KZ-регрессии перехватывается (приём check_kz_certificates), из proof graph извлекаются фактические рёбра правило → правило, факт → правило, правило → запрос; norm_creation §127 считается применением породившего правила. Отчёт, а не ворота: код выхода — код регрессии. Первый прогон — 103 вызова, 225 применений, 26 рёбер, и 57 из 117 правил корпуса не применились ни разу (мёртвые нормы названы поимённо, как и пакет вне регрессии и нулевое число межпакетных рёбер).
    • Делегационная цепочка — lawref/delegation.py, ворота ci/check_delegation.py (12/12): основание подзаконного акта разрешается в power-норму §127 родителя (LDC-E5304), действовавшую на дату принятия (LDC-E5305), издатель обязан быть holder-ом (LDC-E5306); отсутствие обязательного основания — LDC-E5303. Темпоральное звено переиспользует машину применимости D1 (applicability.edition_state, статусы §31), а не заводит вторую интервальную логику: сценарий с suspended-редакцией проверяет именно наследование, дефекты lifecycle приходят кодом D1 LDC-E5302. Основание — данные (--basis/--organ), как --protected у D4. CLI python -m lawref check-delegation.
    • Статика разрешимого фрагмента — lawref/normstatic.py, ворота ci/check_norm_statics.py (14/14): первые коды W-диапазона §199 — LDC-W4101 (возможный конфликт) и LDC-W4102 (поглощение/дубликат). Фрагмент: голова-литерал, тело из established-литералов и сравнений var ⋈ const над Integer/Decimal точными рациональными; всё сверх — строка отчёта с причиной, не молчание. Свидетель конфликта — сертификат: ворота подставляют значения обратно и падают, если они не удовлетворяют обоим правилам (принцип Lean-ядра WP-19). Рамка §105.1 соблюдена буквально: ни одного defeat/priority-ребра, вне байтового контракта evaluation, код выхода CLI norm-statics всегда 0.

Changed

  • ИСПРАВЛЕНИЕ: lawc не медленнее lawref — отставание было артефактом сборки. Ранее в этом журнале записано, что производственный движок в 3–4,9 раза медленнее оракула и что причина неизвестна. Профилирование её нашло, и это не движок. На одном состоянии исходников, 40 000 выведенных фактов, медиана из трёх: lawref (CPython, arm64) — 15,31 с; lawc debug x86_64 под Rosetta, которым ходят ВСЕ ворота — 73,88 с (×4,83); lawc release x86_64 под Rosetta — 21,81 с (×1,42); lawc release arm64 нативно — 11,23 с (×0,73). Отставание раскладывается нацело: debug вместо release ×3,4, x86_64 под Rosetta вместо нативного arm64 ×1,9. Собранный как положено, движок быстрее оракула в 1,4 раза. Обоснование ворот производительности и DECISION-0014 приведены в соответствие; долг «профилирование Rust» закрыт.

  • Кросс-архитектурная сверка стала воротами 26/26 (ci/check_cross_arch.py): те же differential-векторы прогоняются двумя release-сборками под разные таргеты, документы сравниваются побайтово. §211 обещает детерминизм безусловно, а закон, ответ которого зависит от процессора, — не формализация, а совпадение. Обе сборки делаются внутри ворот подряд: первый прогон сверки дал ЛОЖНОЕ расхождение, потому что бинари были собраны из разных состояний исходников — та самая ловушка протухшего бинаря, о которой предупреждает CLAUDE.md. Graceful skip при отсутствии второго таргета, с явным «проверка НЕ выполнялась».

  • Байтовый контракт проверен МЕЖДУ АРХИТЕКТУРАМИ — впервые: 80 из 80 differential-векторов дают побайтово одинаковый evaluation-документ на x86_64 и arm64. Раньше это не проверялось никогда, потому что конвейер ходит одной сборкой.

  • Два черновика решений, которых требует уровень 1 работ по производительности. spec/decisions/0014-semi-naive-as-optimization.ru.md: §103 остаётся наивным фикспойнтом и буквой семантики, lawref — его буквальным исполнением, а semi-naive в law-eval допускается как оптимизация с обязательством — то же множество support-пар в том же порядке, доказываемое тремя способами (differential, дифференциальный fuzz ПО ПРОГРАММАМ, Lean-ядро); индексы §230 под это обязательство не подпадают. spec/ERRATA-CORE.ru.md, запись E-0018 (черновик): монотонная рекурсия неписуема ниже L3 — гарантия L0 объявляет фрагмент монотонным и обещает, что semi-naive применим напрямую, но §103 пускает рекурсию строгого правила только через supported(), а тот исключён и из L0, и из L1. Разобраны четыре варианта правки с ценой каждого; выбор за автором спецификации.

  • Реестр прогонов KZ-регрессии стал таблицей, а покрытие — храповиком (corpus/run_kz_regression.py, corpus/scenario-ratchet.json). Прогоны склеивались руками написанной цепочкой + в main(), а список CLIR-пакетов — двенадцатью строками json.loads; новый run_*, не вписанный в цепочку, просто не исполнялся при зелёном гейте, а выпавший из неё уменьшал total, и гейт по-прежнему печатал «N/N PASS». Теперь есть ACT_RUNNERS (семейство → функция + нужные пакеты), ANCHOR_RUNNERS (дела из релизного якоря), CLIR_PACKAGES и храповик числа сценариев по семействам: пополнение записывается вместе с новыми сценариями, уменьшение роняет гейт. Проверено нарушителем: выпадение run_gpk из таблицы даёт exit=1 и «семейство gpk исчезло — было 9 сценариев» вместо прежнего «75/75 PASS». Тела сценариев не тронуты — что именно они утверждают, не изменилось.

  • Сборка CLIR корпуса стала декларативной (corpus/gen_kz_clir.py). Порядок сборки был закодирован последовательностью операторов в main(), а зависимости — руками выписанными аргументами import_context(...); при этом источником истины о зависимостях оставалась import-декларация §23 в самом .law, и два описания расходились молча. Теперь есть таблица LOWERED_ACTS (выходной файл → исходник), а порядок и состав --imports выводятся из деклараций: declared_package_and_imports читает package §22 и import §23 (в многофайловом пакете — по всем файлам, со снятием строчных комментариев), build_lowered укладывает акты в топологический порядок с детерминированным разрешением ничьей и явным отказом на неизвестном импорте и на цикле §23. Байты CLIR не изменились ни у одного акта, кроме kz-gpk, который был протухшим ещё до правки (647 узлов в закоммиченном CLIR против 691 в исходнике — ГПК разбит на многофайловый пакет и дописан, CLIR не пересобран). KZ-регрессия 84/84, конституционная 28/28, повторный прогон генератора идемпотентен.

  • Ворота производительности — 24-е в конвейере (ci/check_perf.py, ci/perf/). До них в конвейере не было ни одной проверки времени, и это дало ровно тот класс молчаливой потери, против которого заведены determinism-линты: перечислители сканировали весь store, а движок был втрое медленнее оракула — при полностью зелёном CI. Первичный сигнал НЕ секунды: проверяется отношение стоимости перечисления к размеру store (индекс ≈ ×1,0, полный скан — ×98…126), потому что полосы настенного времени под нагрузкой перекрываются, а отношение от машины не зависит. Бюджет процессорного времени на замороженной нагрузке (19 600 выведенных фактов) оставлен вторым, грубым сигналом. Канарейка --canary восстанавливает форму до индекса и требует, чтобы ворота упали.

  • Обе правки портированы в law-eval и law-canon (инвариант 6 — оракул раньше движка): быстрый путь escape_into (побайтовая проверка корректна для UTF-8 — продолжения многобайтовых последовательностей всегда ≥ 0x80 и под b < 0x20 не попадают), индекс by_predicate, а перечислители стали возвращать Vec<&Value> вместо Vec<Value> — глубокое копирование serde_json::Value на каждый атом при каждом вызове убрано. Эквивалентность закреплена тестами в самих крейтах (fast_escape_matches_char_by_char_reference — все код-поинты < U+0600 плюс целевые строки; predicate_index_matches_full_scan — эталон-скан). Differential 74/74 байтово, cross-canon на 100 000 fuzz-документов зелёный, голдены не пересчитывались.

  • Гипотеза о причине отставания lawc от lawref НЕ подтвердилась. Замер до правок давал 3,0–4,4×, и глубокое копирование атомов было названо главным подозреваемым. После правок медиана из трёх прогонов при 40 000 выведенных фактов: lawref 45,13 → 20,20 с (×2,23), lawc 197,56 → 99,38 с (×1,99); отношение 4,38× → 4,92×. Обе реализации ускорились примерно одинаково, разрыв не сошёлся — значит его причина в другом и остаётся неустановленной. Требуется профилирование Rust, которого до сих пор не было.

  • Индекс по предикату в SupportStore — established_positive/ supported_positive строили sorted(set(positive) | set(dpositive)), то есть ПОЛНУЮ пересортировку всего store, и лишь потом отбирали по предикату; вызов стоил O(N log N) по всей базе фактов вместо O(|атомы предиката|), а зовётся он на каждый несвязанный конъюнкт тела в каждой итерации фикспойнта §103. Заведён _by_predicate — ключи, у которых есть сторона в positive|dpositive, в возрастающем порядке ключа; ведётся при вставке (единственные мутаторы — add и add_defeasible). Порядок перечисления сохранён доказуемо: фильтрация отсортированной последовательности по предикату совпадает с сортировкой отфильтрованного подмножества, поэтому детерминизм §211 и порядок §103 не сдвигаются. Замер A/B в одном процессе: ×2,35 при 10 000 выведенных фактов, ×2,24 при 40 000, байты документа совпали. Проверено теневой сверкой на живом корпусе — 21 407 перечислений, 0 расхождений — и свойством в lawref/selftest.py (эталон = снятая форма скана).

  • Импорт убран из горячего пути решателя — from .. import values as vals стоял ВНУТРИ трёх функций lawref/evaluator/solver.py (свёртка вычислимого терма §58, терм-гард §57, свёртка агрегата §59), и машинерия импорта давала 30 077 вызовов importlib._handle_fromlist = 11 % времени одного прогона. Цикла импорта, который бы это оправдывал, нет: lawref/values.py тянет только stdlib. После правки вызовов 3. Байты не затронуты по построению: selftest, KZ 84/84, демо — зелёные.

  • Канонизация §208: быстрый путь экранирования — _escape в lawref/canon.py обходил КАЖДУЮ строку посимвольно, а §208 экранирует ровно ", \ и управляющие < U+0020. Строка без единого символа этого класса тождественно равна '"' + s + '"', поэтому условие быстрого пути точное, а не эвристическое. Профиль оракула показывал canonical_bytes = 78 % времени (из них _escape — 41 %): канонизация зовётся на каждый ключ атома (support.literal_key) и на каждое сравнение аргументов в join-е решателя. Замер A/B в одном процессе: ×1,47 при 10 000 выведенных фактов, ×1,17 при 40 000 (с ростом N доля смещается к скану store — отдельная правка). Семантика не менялась: G-M1a зелёный на 100 000 fuzz-документов, KZ-регрессия 84/84, демо байтово, голдены не пересчитывались. Эквивалентность быстрого и посимвольного путей закреплена свойством в lawref/selftest.py (эталонная реализация в тесте + сверка на 470 строках нормативных примеров).

  • §218 приведён в соответствие с грамматикой и схемой (errata E-0011): метки несёт любая декларация с телом (грамматика расширена с 12 до 19 productions — presumption, definition, fiction, closure, calendar, assert, priority), статус метки обязателен, «descriptions» квалифицированы как doc comments §16. Метки source/edition/fragment перестали быть строковыми полями source-модели и стали настоящими метками узла.

  • Semantic hash §209 больше не включает publication-узлы (errata E-0013). §27.3 определяет publication как конкретный файл, и один edition может иметь их несколько (XML, PDF, HTML). Ни повторное получение того же документа, ни смена формата, ни добавление второй публикации той же редакции не меняют ни одной нормы — значит, не должны двигать semantic hash и переводить approvals в stale. Основание то же, что у меток E-0010. Исключение НЕ распространяется на SourceEdition.documentHash: идентичность Expression — это идентичность того, что формализовано, и она остаётся в хэше полностью. Целостность самой публикации держится её content hash узла (§202) и проверками §194.

  • Semantic hash §209 больше не включает labels (errata E-0010). Метка — презентационный слой: §218 закрепляет, что смена отображаемого языка не меняет IDs и semantics, поэтому добавление перевода и переформулировка метки не должны менять semantic hash. Иначе ревью-контур LS §3.6 неисполним: утверждение юриста привязано к паре (semantic hash, verbalization hash), и правка метки переводила бы все approvals пакета в stale. Фильтр изменён синхронно в обеих реализациях; метки остаются в content hash узла (§202), а официальный текст фрагмента (texts, §13/§194) меткой не является и из хэша не выведен. Вектор ERR-E0010-LABELS; режим hash-compare векторного раннера принимает необязательное ожидание differentNodeContentHashes.

  • spec/SPEC.ru.md разрезан на 43 части в spec/SPEC.ru/; сам файл стал указателем. Разрез побайтовый — конкатенация частей воспроизводит документ.

  • spec/DECISION-0001-PARAMETERDECL.ru.md → spec/decisions/0001-parameterdecl.ru.md.

  • Колонка в человекочитаемом рендере диагностик path:line:col (§198) теперь меряется в символах (Unicode scalar values), а не в байтах UTF-8: строка с кириллицей до места ошибки больше не сдвигает колонку относительно редактора. Спаны остаются байтовыми; перевод в единицы UTF-16 для LSP — задача WP-22 (DECISION-0002).

Fixed

  • Свод числового поля по множеству сущностей был невыразим — совокупный доход занижался (errata E-0012). §51 объявлял List<T> «с дубликатами», но ни одна конструкция ядра его не порождала: §52.1 фиксировал результат collect как Set<T>, а схема пинила ComprehensionTerm.distinct в const: true. Обе реализации честно дедуплицировали по каноническим байтам, differential был зелёным — это пробел SPEC, а не дефект реализации. Последствие тихое и дорогое: sum(collect amount where начислено(лицо, amount)) схлопывал две позиции с РАВНОЙ суммой в одну. В пилоте АСП критерий права записан именно так, поэтому два члена домохозяйства с одинаковым доходом давали совокупный доход одного — право на адресную социальную помощь признавалось при доходе выше черты. На различных значениях результат верен, и сценарии SA-01…SA-03 дефект не ловили.

    Введена вторая форма — collect all v: T where F → List<T>, по элементу на каждую solution substitution. Форма без all сохраняет distinct-семантику дословно, поэтому ни одна существующая программа и ни один замороженный голден не изменились. all — контекстное слово (распознаётся только перед identifier), а не новый hard keyword: HARD_KEYWORDS не вырос, идентификатор all остался законным везде — осознанный отказ повторять класс E-0008. Критерий АСП переведён на collect all; дискриминатор — сценарий SA-04 регрессии с ДВУМЯ равными доходами. Обход ОСМС (assessed_income фактом) сохранён — у него другое основание, и комментарий приведён к нему.

  • Rust-путь collect-запроса игнорировал distinct. query_collect в law-eval нёс собственную копию цикла материализации (оракул делегировал общей функции) и разошёлся бы с lawref на первой правке семантики comprehension. Копия удалена, путь делегирован solver::materialize_comprehension.

  • Молчаливая публикация не-ground факта из вычисляемого head. Правило вида then взнос(лицо, база * 0.02) считалось сработавшим, а в store попадал литерал с НЕСВЯЗАННОЙ переменной внутри терма: подстановка §103 обрабатывала только kind == "var" верхнего уровня и не рекурсировала в binary/call, а eval_term во всём эвалюаторе вызывался ровно один раз — в ветке term-запроса. Ни диагностики, ни отказа: ground-инвариант §190 нарушался беззвучно, и «ответ» уходил дальше как факт. Статика ни при чём — §190 в law-hir проходит корректно, переменная связана телом. Подстановка сделана рекурсивной со свёрткой терма; ошибка вычисления (§58 деление на ноль, §50 неточность, §50 CURRENCY_MISMATCH) доносится как error с адресом правила и НЕ публикует факт, вместо превращения в UNKNOWN. Дефект был одинаков в lawref и law-eval — дословный порт сохранил его, поэтому differential оставался зелёным: класс ошибок, который межреализационная сверка не ловит по построению.

  • Паника лексера на не-ASCII символах в коде. Любой кириллический символ, набранный вне строки и комментария, ронял lawc с кодом возврата 101 вместо диагностики: разбор двухсимвольной пунктуации резал &str слайсом &source[i..i + 2], а i + 2 у следующего многобайтового символа не обязан быть границей символа (r(объект падал на паре (о). Пара сравнивается по байтам, чтение символа идёт через is_char_boundary, сдвиг — на длину символа в UTF-8; спан LDC-E0101 покрывает символ целиком. Регрессия закрыта классом, а не входом: тест вставляет 2-, 3-, 4-байтовые символы и комбинирующую метку в каждую позицию базового исходника.

[0.0.1-m1]

Веха M1 «Канонизация» закрыта.

Added

  • Канонические JSON-emitter-ы в двух реализациях — lawref/canon.py и крейт law-canon: NFC-проверка, ключи по code points, числа только i64, фиксированное экранирование, сортировка узлов по stable ID (WP-04).
  • Semantic hash §209 с фильтром preimage и StableId §14 — NFC плюс percent-encoding, кросс-вектор Rust = Python (WP-05).
  • Гейт G-M1a закрыт 26.08.2026: байтовая идентичность emitter-ов на семи нормативных примерах и на 100 000 seeded-fuzz-документов; полный объём стоит в PR-гейте.

Fixed

  • E-0007 — релизная пара examples/law.toml и law.lock нарушала §11; обязательство исполнено вектором ERR-E0007-LOCK.

[0.0.1-m0]

Веха M0 «Скелет и решения» закрыта.

Added

  • Монорепозиторий: spec/, vectors/, lawref/, lawc/ (11 крейтов), checker/, corpus/, ci/, release/ (WP-01).
  • CI-гейты: сборочная матрица Linux + macOS + Windows с первого дня, determinism-линты с canary-нарушителями, неизменяемый legacy-якорь релиза.
  • Векторный формат и раннер; 59 векторов со слоевой разметкой — 44 t/, 8 prop-0.1.1/, 6 errata/, SMOKE-001 (WP-02).
  • Семь нормативных схем как код с self-check и round-trip без потерь; compat-миграция ParameterDecl с конвертной дискриминацией и keys-инвариантом; реестр диагностик §198/§199 (WP-03).
  • DECISION-0001: PATCH-0.1.1 §2 принят в узкой форме, целевой CLIR reference-реализации — law.core.ir/0.2.

Fixed

Шесть bootstrap-errata ядра, каждая с векторным обязательством:

  • E-0001 — статус CONFLICTED_INPUTS и политика on_accepted_conflict §112/§175 отсутствовали в SPEC и evaluation.schema.json, из-за чего DoD WP-07 был неисполним.
  • E-0002 — §208 разрешал сортировку commutative operands, §207.1 требовал: две реализации могли разойтись байтово, оставаясь conforming.
  • E-0003 — §238: wall-clock и лимиты памяти несовместимы с детерминизмом §211; семантическими объявлены только детерминированные счётчики.
  • E-0004 — §199: зарегистрирован диапазон LDC-E8xxx.
  • E-0005 — типы, используемые SPEC, но не объявленные в §35: Rational, CountryCode, CardinalityError и другие.
  • E-0006 — AUDIT §9 п.8: квалификация скоупа L0–L1.

01.09.2026 — полный учёт АППК РК № 350-VI

  • Закреплена официальная текущая русская редакция ИПС «Әділет» и создан пакет corpus/laws/kz/appc: 195 статей (175 базовых + 20 вставных), 693 пунктовых фрагмента, воспроизводимый sync с --check.
  • Обе меры §33.1 зелёные: байты — 195/195, text coverage 99,1 %; глубина — EXECUTABLE 17 / ANCHORED 178 / SOURCE_ONLY 0 / UNEXPLAINED 0. Статус и машинная причина записаны для каждой единицы в порождённом depth-measure.json.
  • Добавлены три procedure-автомата, правила сроков и деонтики, семейство appc (10 сценариев); KZ-differential — 12/12 вызовов байтово. Полный аудит конструкций и третьей меры записан в corpus/laws/kz/appc/audit.ru.md: 3/44 стаб-моста объявлены слоем очереди, 49 крупных ANCHORED-единиц — явным планом последующего семантического расширения.
  • По решению человека «а» удалён учебный пакет appc-restoration, его CLIR, семь .lawtest и активные записи в шести реестрах. Старые упоминания ниже остаются историческими записями этого журнала.

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

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