From ff01102b9b9f031e11764feb2a607a1c3217d90f Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sun, 9 Aug 2026 12:30:54 +0300 Subject: [PATCH] =?UTF-8?q?docs(tests):=20=D0=B7=D0=B0=D1=84=D0=B8=D0=BA?= =?UTF-8?q?=D1=81=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B4=D1=83=20=D1=80=D0=B0=D1=81=D1=85=D0=BE?= =?UTF-8?q?=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BE=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=B2=D1=88=D0=B8=D1=85=D1=81=D1=8F=20=D1=81=D0=B5=D0=BC=D0=B5?= =?UTF-8?q?=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Храповик без пояснения читается как «когда-нибудь свести». Разбор показал, что из четырёх оставшихся семей одна вообще не является общей: import_fragment имеет разные сигнатуры и разные наборы xmlns по навыкам — одно имя на разные задачи, сводить его нельзя. Остальные три сводятся, но каждое сведение меняет вывод и требует решения, а не аккуратности. Co-Authored-By: Claude Opus 5 (1M context) --- tests/skills/check-inline-drift.mjs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/tests/skills/check-inline-drift.mjs b/tests/skills/check-inline-drift.mjs index b370a9c8..9406b09f 100644 --- a/tests/skills/check-inline-drift.mjs +++ b/tests/skills/check-inline-drift.mjs @@ -279,11 +279,17 @@ const FAMILIES = [ // Перечислять «вариант на каждую копию» бессмысленно — эталона у них сейчас нет. Держим храповик: // число групп не должно расти. Фаза 2 сводит семью к одному телу и переносит её в FAMILIES. +// Разбор каждой оставшейся семьи уже сделан — сведение упирается не в аккуратность, а в решение, +// поэтому note описывает ПРИРОДУ расхождения, а не «когда-нибудь свести». const DRIFTED = [ - { name: 'emit_mltext', py: 'emit_mltext', ps1: 'Emit-MLText', maxVariants: { py: 5, ps1: 5 } }, - { name: 'get_ml_text', py: 'get_ml_text', ps1: 'Get-MLText', maxVariants: { py: 7, ps1: 6 } }, - { name: 'import_fragment', py: 'import_fragment', ps1: 'Import-Fragment', maxVariants: { py: 5, ps1: 4 } }, - { name: 'get_child_indent', py: 'get_child_indent', ps1: 'Get-ChildIndent', maxVariants: { py: 4, ps1: 3 } }, + { name: 'emit_mltext', py: 'emit_mltext', ps1: 'Emit-MLText', maxVariants: { py: 5, ps1: 5 }, + note: 'разные сигнатуры: (lines,indent,tag,text) / +xsi_type / +no_xsi_type / meta-compile пишет через глобальный X(). Сведение = принять самую богатую сигнатуру и переписать все вызовы' }, + { name: 'get_ml_text', py: 'get_ml_text', ps1: 'Get-MLText', maxVariants: { py: 7, ps1: 6 }, + note: 'одна задача, разная полнота: cf-info берёт первый item, meta-info предпочитает ru с фолбэком, skd-info добавляет itertext. Сведение = принять самый способный вариант, меняет вывод *-info' }, + { name: 'import_fragment', py: 'import_fragment', ps1: 'Import-Fragment', maxVariants: { py: 5, ps1: 4 }, + note: 'НЕ общая семья: разные сигнатуры и разные наборы xmlns по навыкам (meta-edit добавляет cfg:, xdto-edit строит ns из схемы). Одно имя — разные задачи, сводить нельзя' }, + { name: 'get_child_indent', py: 'get_child_indent', ps1: 'Get-ChildIndent', maxVariants: { py: 4, ps1: 3 }, + note: 'одна задача, разные эвристики определения отступа (skd-edit ловит только табы). Сведение меняет форматирование вывода — нужен разбор снэпшотов' }, ]; // ─── Извлечение тел функций ─────────────────────────────────────────────────