• Nikitos's avatar
    Селектор как цель работает; промах слышен вместо тишины (appendTo и весь класс)
    · b1c4c1ed
    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