mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-19 09:40:22 +03:00
test(skills): реестр и гард общих inline-реализаций
Навыки автономны, общие утилиты копируются в каждый .ps1/.py, но нигде не было зафиксировано, какая копия эталонная и какие расхождения законны. Ревизия по #60 показала два класса семей: одни держатся побайтово (support-guard — 16 копий, db-обвязка — 12), другие разъехались без эталона (resolve_type_str — 6 копий и 6 вариантов, get_ml_text — 7 и 7). check-inline-drift.mjs держит реестр семей внутри себя: вариант → эталон → копии. Копия обязана совпадать с эталоном своего варианта; отклоняющийся вариант обязан иметь обоснование, иначе печатается как долг. Часть расхождений законна (esc_xml без " в form-* ради раундтрипа), поэтому модель хранит варианты, а не одно эталонное тело. Разъехавшиеся целиком семьи стоят на храповике maxVariants. Извлечение тел: PS1 — до строки ровно `}` (балансировка скобок даёт ложные 18 вариантов из 18 копий Assert-EditAllowed); PY — с обязательным снятием docstring-ов (иначе одинаковый код с разным описанием читается как расхождение). check-all.mjs — единая точка входа: check-enum-drift и check-uuid-invariant были рабочими, но не упоминались в README и никем не запускались. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
fc2d460b57
commit
c8144a01e5
@@ -31,6 +31,31 @@ node tests/skills/verify-snapshots.mjs --help # полный
|
||||
|
||||
Перепрогоняет навык из DSL кейса и грузит результат в 1С — отлавливает случаи, когда снапшоты обновили, но платформа уже не принимает выход.
|
||||
|
||||
## Гарды-инварианты
|
||||
|
||||
Проверяют не вывод навыков, а инварианты исходников — то, что снапшотами не ловится. Навыки
|
||||
автономны, общие словари и утилиты намеренно продублированы, поэтому нужна защита от расхождения
|
||||
копий. В `runner.mjs` не входят, запускаются одной командой:
|
||||
|
||||
```bash
|
||||
node tests/skills/check-all.mjs # все гарды сразу
|
||||
node tests/skills/check-inline-drift.mjs # только один
|
||||
node tests/skills/check-inline-drift.mjs --list # реестр: семья → эталон → потребители
|
||||
```
|
||||
|
||||
| Гард | Что держит |
|
||||
|---|---|
|
||||
| `check-enum-drift.mjs` | allowlist-ы значений перечислений: meta-compile (авторитет) ↔ meta-validate ↔ meta-edit |
|
||||
| `check-uuid-invariant.mjs` | uuid объекта и сущностей не перегенерируются при правке |
|
||||
| `check-inline-drift.mjs` | копии общих inline-утилит совпадают с эталонами своих вариантов |
|
||||
|
||||
`check-inline-drift.mjs` держит реестр семей внутри себя: у каждой семьи перечислены варианты, у
|
||||
варианта — навык-эталон и список копий. Отклоняющийся вариант обязан иметь обоснование (`why`),
|
||||
иначе попадает в список долга. Семьи, разъехавшиеся целиком, стоят на храповике `maxVariants`:
|
||||
число вариантов не должно расти. Кандидатов в реестр ищет `node debug/inline-utils/scan-dupes.mjs`.
|
||||
|
||||
Правишь общую утилиту — правишь эталон, копируешь во всех потребителей варианта, прогоняешь гард.
|
||||
|
||||
## Интеграционные тесты
|
||||
|
||||
Помимо snapshot-кейсов есть многошаговые сценарии в `integration/<имя>.test.mjs` — цепочка навыков (init → compile → build → validate…), проверяющая что навыки работают вместе. Запуск:
|
||||
|
||||
Reference in New Issue
Block a user