-
Nikitos создал
Наша дока (HIGH_LEVEL_API.md:656) показывала `$('<sprite>').appendTo('#hero')`, а строковая форма МОЛЧА ничего не делала: resolveContainer принимал только узел/обёртку и для строки возвращал null. Числа: детей у #hero 0, parent().nodes.length 0; с обёрткой — 1. Худший класс дефекта: не ошибка, а тишина. ЧТО СТАЛО (src/highlevel/api.js, {parent} — core.js): - appendTo/prependTo: селектор разрешается как $(sel); промах сообщает «$.appendTo: селектор #… ни к чему не подошёл — узел не прикреплён», узел остаётся у мира (не «уезжает в мир» — иначе промах выглядел бы успехом); пустая обёртка — тоже сообщение; неоднозначный селектор (.goblin → 3 узла) берёт первый и говорит об этом; - append/prepend: принимают узел/обёртку/селектор; не-цель (append(42)) сообщает, что получено (раньше молча игнорировалось); - lookAt, moveTo, moveTowards, distanceTo, directionTo, angleTo, rayTo, sweepTo, $.pick, $.pickAll: промах селектора теперь пишет в журнал, запасная точка (0,0) сохранена для совместимости; - collidesWith/mask/layerBits: промах БОЛЬШЕ НЕ ОБНУЛЯЕТ маску (раньше mask('#нет-такого') → 0, и узел переставал сталкиваться со всем) — маска не меняется + сообщение; - атрибут {parent:'#hero'}: был TypeError (core.js звал appendTo на узле без обёртки) — теперь привязка общей дорогой после остальных атрибутов (keep-world считается по финальным x/y). - insertBefore/insertAfter/replaceWith/wrap/addTo в движке НЕ существуют (проверено grep по src/highlevel) — чинить нечего; .add(sel) намеренно оставлен «как jQuery». ПРИМЕРЫ ДОКИ ПРОГНАНЫ КОДОМ (блок run_doc_examples в тесте): строки 21, 246-247, 255, 259-263, 417-418, 437-438, 656, 1456 — каждый вызов находит узел (в журнале нет «не подошёл») и возвращает обещанное. В AGENT_API.md целей-селекторов нет. Строка 656 осталась как есть — теперь она ВЕРНА; рядом новый §13 «Цель — узел, обёртка или селектор» с примерами сообщений. ТЕСТ tests/agent/api_selector_targets_test.py: на старом коде ПРОВАЛЕНО 17, на новом всё зелёное. Сообщения проверяются перехватом $.ctx.log (детерминированно, без stderr); отдельно проверены обёртка (как раньше), промах, неоднозначный селектор, вложенность, mask без порчи маски и обе формы из доки. РЕГРЕССИИ И ГЕЙТЫ: highlevel_pool, highlevel_prefab, highlevel_collision, node_xy_accessors, attr_after_body, hits_pool — зелёные; все 105 qjs-юнит-тестов зелёные; api_docs_sync (3047 имён), api_freeze (заморозка держится, --write не нужен: новых публичных имён нет), doc_claims, doc_coverage — зелёные. ОСТАЛОСЬ (тот же класс в чужих подсистемах, заведено отдельно): alive.nodeOf, bsp.resolvePoint, camera.resolveTarget/toPoint — строку принимают, промах глушат.b1c4c1ed