fix(meta-info,meta-compile,+5): правки по ревью — регистр, BOM, голый менеджер, порог

Семь находок ревью, все подтверждены воспроизведением:

1. Голый менеджер в источниках печатался по-английски: карта объектных видов
   применялась только к форме с точкой, а meta-compile пишет «cfg:DocumentManager»
   обычным v8:Type. Восемнадцать добавленных *Manager-записей были недостижимы.
   Суффикс «(все)» ему не ставится — это сам тип менеджера, а не класс объектов.
2. Новые регулярки прощающего ввода расходились между портами: -replace в
   PowerShell регистронезависим, re.sub — нет. «ДокументОбъект (Все)» проходил в
   ps1 и падал в py. Добавлен re.IGNORECASE — это задокументированная ловушка
   портирования, и она же снова сработала.
3. В шесть py-портов попал BOM (перекодировка при бампе версии), и перед
   «#!/usr/bin/env python3» он ломает shebang на POSIX. Снят там, где его не было
   в HEAD; в mxl-compile.py он был изначально и оставлен.
4. Правило со стрелкой из Resolve-TypeStr убрано. form-compile режет тип по [|+]
   ДО резолвера, поэтому строка глоссария «A -> B | C» молча превращалась в
   составной тип «A | C» вместо одного A. Половина строки, принятая за тип, —
   хуже громкого отказа. Остались суффикс «(все)» и счётчик «— типов: N».
5. py-порт meta-info не переиспользовал общий климб до корня конфигурации:
   правка тогда молча не применилась, и порты разошлись по структуре.
6. Found выставлялся до разбора состава определяемого типа: падение внутри
   давало «состав пуст» — ложь вместо «файл типа не разобран».
7. Порог сворачивания источников считался по сумме множеств и явных типов, а
   сворачивались только явные: пять множеств плюс один тип прятали этот тип, а
   шесть типов без множеств давали «и ещё» после пустоты. Порог теперь по числу
   явных типов, «и ещё» убрано как ложное.

Плюс формы источника подписки описаны в reference самого навыка: раньше они
были только в docs/meta-dsl-spec.md, а навык обязан быть самодостаточным.

Добавлен кейс на голого менеджера — без него находка 1 вернулась бы незамеченной.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-09-20 18:14:27 +03:00
co-authored by Claude Opus 5
parent 510c9163e3
commit e9d45984dc
27 changed files with 555 additions and 107 deletions
@@ -739,9 +739,6 @@ function Resolve-TypeStr {
$typeStr = ($typeStr -replace '\s*\((?:все|all)\)\s*$', '').Trim()
$typeStr = ($typeStr -replace '\s*[—-]\s*(?:типов|types):\s*\d+\s*$', '').Trim()
$typeStr = ($typeStr -replace '\s*\((?:типов|types):\s*\d+\)\s*$', '').Trim()
# Строка глоссария целиком: «ОпределяемыйТип.X -> Число(15,2)». Имя множества стоит слева,
# раскрытие справа — берём левую часть, она и есть тип.
if ($typeStr -match '^(.+?)\s*(?:→|->)\s*.+$') { $typeStr = $Matches[1].Trim() }
# Параметризованные типы: Number(15,2), Строка(100)
if ($typeStr -match '^([^(]+)\((.+)\)$') {