-
Nikitos создал
Закрывает пункт §11 «z_as_relative и наследование visible/modulate родителем». ЧТО БЫЛО НЕ ТАК: дети в `$` — отдельные узлы ПЛОСКОГО реестра, поэтому скрытый контейнер НЕ скрывал содержимое, а прозрачность родителя на детей не влияла: гасишь панель — надписи остаются. Это самая частая причина «почему надпись не исчезла». ЧТО СДЕЛАНО (чистые функции в render.js, экспортированы для тестов): * inheritedVisible(node) — скрыт ЛЮБОЙ предок → не виден никто из его детей; * inheritedAlpha(node) — произведение alpha по цепочке (modulate): 0.5 × 0.5 = 0.25, ноль обнуляет всё; * effectiveDepth(node) — складывается с родителем, если узел помечен depth_relative; по умолчанию глубина АБСОЛЮТНАЯ, как была. Применение — в ОДНОЙ точке: drawWorldNode считает эффективные видимость и прозрачность, а на время отрисовки узла подменяет node.alpha эффективным значением. Так все внутренние ветки (свет, частицы, текст, контуры) видят правильное значение, и не пришлось править каждую из них. API: `.depthRelative(true)`, `.isDepthRelative()`, `.effectiveAlpha()`, `.effectivelyVisible()`, `.effectiveDepth()`, `$.gfx.effectiveAlpha/ effectiveVisible/effectiveDepth`. ПРОВЕРКА: tests/js/light_test.mjs — 6 новых чистых тестов (50 всего): скрытый родитель, скрытый дед, произведение прозрачностей, цепочка относительных глубин, абсолютный родитель как база. tests/agent/highlevel_inherit_test.py — 15 проверок ПО ПИКСЕЛЯМ: ребёнок виден сам; hide(родителя) убирает его полностью (было: не убирал); alpha 0.5 делает ТУСКЛЕЕ; alpha 0 — убирает; 0.5 × 0.5 = 0.25; depthRelative даёт 15 при родительских 10 и своих 5, а без флага — 5. МОЯ ЖЕ ОШИБКА В ТЕСТЕ: сначала мерил «тусклее» количеством зелёных точек — их столько же (порог по цвету проходят и тусклые пиксели). Теперь мерю ЯРКОСТЬ: 2668800 против 5316750. Отмечено комментарием в тесте. ДОКИ: render.md §5.2 (таблица, примеры, отладка, почему без кэша), HIGH_LEVEL_API.md (строки в списках), TASKS §11. Полный qjs, агентские тесты, doc_coverage, doc_claims, duplicate_keys, быстрый набор — зелёные.
c5b87e1a