test(role-edit): гард на минимальность правки

Снапшоты фиксируют итоговый файл целиком, поэтому лишняя перестановка
узлов или переписанный соседний блок уехали бы в эталон как норма.
Гард считает diff к исходному файлу: операция обязана дать ровно свои
строки и ни одной чужой.

Измерено заодно на живой роли типовой (БазовыеПраваБП, 4357 строк,
105 узлов): add-rights нового объекта — +11/-0, права в существующий
узел — +4/-0, set-rls — +3/-0, remove-rights — +0/-4, запрет на
реквизит — +11/-0. Удалённых строк нигде, кроме снятия.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGkXwoXTuafcu1SXMsauFq
This commit is contained in:
Nick Shirokov
2026-09-13 17:49:30 +03:00
co-authored by Claude Opus 5
parent 7bbacd8ef4
commit 2bd624a66f
2 changed files with 101 additions and 0 deletions
+1
View File
@@ -12,6 +12,7 @@ const GUARDS = [
['check-enum-drift.mjs', 'allowlist-и перечислений: meta-compile ↔ meta-validate ↔ meta-edit'],
['check-type-synonyms.mjs', 'словари типов: meta-edit не противоречит meta-compile'],
['check-uuid-invariant.mjs', 'сохранение uuid объекта и сущностей при правке'],
['check-minimal-diff.mjs', 'правка роли: диф только там, где просили'],
['check-inline-drift.mjs', 'общие inline-реализации: копии совпадают с эталонами'],
['check-type-maps.mjs', 'карты типов метаданных: согласованы со спецификацией'],
['check-format-versions.mjs', 'проверенный диапазон версий формата: согласован со спецификацией'],