feat(meta-compile,meta-decompile): HE-эвристика аббревиатур в авто-синониме + регистрочувствительный авто-вывод (v1.61/v0.52)

Корень: split_camel_case слепо лоуэркейзил хвост, теряя аббревиатуры (НДС/ЕГАИС/ОС/ЭП),
которые платформа сохраняет. Вскрыто py-раундтрипом на маке (АбонентыЭДО: синоним
"Абоненты ЭДО" регенерился как "эдо"). Дважды замаскировано: декомпилятор опускал синоним
регистронезависимо (ne_ci), харнес Compare-Object был без -CaseSensitive. Масштаб survey: 7706.

Фикс (правило подтверждено эмпирически по корпусу): сохранять максимальный прогон заглавных
>=2, если сразу за ним НЕ буква (пробел/цифра/спецсимвол/конец). ">=2" ловит ОС/ЭП; граница
"не буква" отсекает предлоги (РасчетыСКлиентами->склиентами) и бренды (ЮКасса).
- Компилятор Split-CamelCase -> HE (ps1+py), радиус = авто-синонимы + авто-описания предопределённых.
- Декомпилятор Split-CamelWords -> HE (зеркало) + регистрочувствительная страховка (-ne->-cne /
  ne_ci->ne_cs) в 9 точках: кастом-синонимы (ВетИС/МИР) эмитятся дословно.

Валидация 8.3.24 (1765): синонимы/описания закрыты полностью, ноль case-диффов. Декомпилятор
ps1==py 189/189. Регресс 511/511 ps+py. spec §2. Снэпшоты meta-compile — казинг аббревиатур.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-07-10 20:09:36 +03:00
parent 4ca89343ae
commit 706cc919a2
11 changed files with 153 additions and 41 deletions
+14 -4
View File
@@ -35,19 +35,29 @@ JSON DSL для описания объектов метаданных конф
## 2. Автогенерация синонима (CamelCase → слова)
Если `synonym` не указан, имя автоматически разбивается на слова:
Если `synonym` не указан, имя автоматически разбивается на слова (зеркало эвристики платформы):
| Вход | Результат |
|------|-----------|
| `АвансовыйОтчет` | `Авансовый отчет` |
| `ОсновнаяВалюта` | `Основная валюта` |
| `НДС20` | `НДС20` |
| `АбонентыЭДО` | `Абоненты ЭДО` |
| `ВыработкаОС` | `Выработка ОС` |
| `СчетУчетаНДС` | `Счет учета НДС` |
| `СтатусЭДО2` | `Статус ЭДО2` |
| `РасчетыСКлиентами` | `Расчеты склиентами` |
| `ЮКассаЛоготип` | `Юкасса логотип` |
| `IncomingDocument` | `Incoming document` |
Правила:
- Граница на переходе `[а-яё][А-ЯЁ]` и `[a-z][A-Z]`
- Первое слово сохраняет заглавную, остальные — строчные
- Явный `synonym` перекрывает автогенерацию
- Первое слово сохраняет заглавную, остальные — строчные, **кроме аббревиатур**: максимальный прогон
заглавных длиной **≥2, если сразу за ним НЕ буква** (пробел/цифра/спецсимвол/конец строки) — остаётся
заглавным (`НДС`, `ЕГАИС`, `ОС`, `ЭП`)
- Прилипшие предлоги и бренды (`СКлиентами`, `ЮКасса`) стоят перед буквой → строчные (не аббревиатура)
- То же правило — для авто-Наименования предопределённых (§7.1.2) и авто-описаний
- Явный `synonym` перекрывает автогенерацию; при расхождении с авто хотя бы в регистре синоним
сохраняется дословно (напр. брендовый `ВетИС`, `МИР`)
---