- 07.10.2026 2 коммита
-
-
Nikitos создал
§12.16 требовал «сначала §11.1–11.2 — они активно врут». Шесть системных враний были закрыты раньше, но таблица §6.1/6.2 перечисляла места, которые страж (doc_claims_test.py) НЕ проверял — и они всё ещё врали. Нашёл четыре: 1. HIGH_LEVEL_API_PERF.md перечислял как «настоящие дыры» пользовательские шейдеры, слои коллизий, фигурный свип, Curve/Gradient, сеть, скелет и render target — ВСЁ это реализовано (проверено по коду: defineShader, layerBits, castShape, loadCurve/loadGradient, net.js, $.mesh/.zone, viewport); 2. там же: «слои коллизий — .mask()/.layerBits() — пустышки» и «фигурный свип/CastShape — в биндингах нет» — неверно; 3. VFX_PLAN.md: «viewport.js перестаёт быть заглушкой» — уже не заглушка; 4. render.md: «заглушка engine.viewport» в описании src/render.c. Список «осталось незакрытым» переписан ЧЕСТНО и проверен по коду: в нём теперь только то, чего действительно нет — IK, z_as_relative и наследование visible/modulate родителем, приоритеты и stealing голосов, seek у звука. Это удобства, а не блокеры. СТРАЖ РАСШИРЕН с 10 утверждений до 18: добавлены проверки на слои коллизий, фигурный свип, Curve/Gradient (две формулировки), мипмапы, обрезку, зоны тела и «viewport не заглушка». Именно поэтому враки и жили: страж их не знал. Заодно убрана устаревшая строка в §12.15 («Осталось из §2: формы на тело» — формы сделаны) и §12.16 отмечен сделанным. Полный qjs, агентские тесты, doc_claims (28 проверок), doc_coverage, duplicate_keys, быстрый набор — зелёные.
-
Nikitos создал
Аудит §11 показал, что доки описывают закрытые пункты как заглушки. Сверил каждое утверждение с КОДОМ (скриптом и чтением мест), поправил подтверждённое и добавил tests/doc_claims_test.py — он читает код и падает, если в доке снова написано «этого нет» про реализованное. Исправлено: * пользовательские шейдеры: «движок не поддерживает» → поддержаны ($.gfx.defineShader + .shader/.shaderParam), HIGH_LEVEL_API.md, PERF, GAP, layers.md; * render target: «не поддержан осознанно» → реализован (привязка текстуры на кадр, спрайт прошлого кадра, блит); render.md (§2, §3, §4, ограничения), PERF, GAP, VFX_PLAN и устаревший комментарий в src/render.c; * «$.gfx.push.triangle отдаёт треугольники без режима» → режим есть восьмым аргументом; * «KEY_NAMES никем не заполняется, keyNameOf — заглушка-тождество» → ИСПРАВЛЕН КОД: input.js зовёт engine.keyName и кеширует имена, поэтому $.input.on('key') отдаёт 'Space', а не число. Проверка tests/agent/highlevel_keyname_test.py (Space и A по-настоящему нажимаются); * «сетевая игра — не мультиплеер», «нет фигурного свипа» → закрыты. Новый страж ловит ровно тот класс ошибок, что был: «в доке написано, что не сделано, а в коде сделано» — 21 проверка по девяти утверждениям. Проверка: полный набор qjs, агентских тестов, bsp, doc_claims_test и keyname_test зелёный.
-
- 06.10.2026 5 коммитов
-
-
Nikitos создал
Честный bloom, шейдеры узлов, render target, DSP-эффекты и реверб-шины; закрыто 11 из 12 пунктов §28 v0.1.10
-
Nikitos создал
-
Nikitos создал
§0.4 отчёта о производительности: замеры «до/после» (селекторные сцены −40…−58 %, спрайты −35 %, churn/batch +0,25 мс на 1000 узлов и −2 % на 5000), таблица правок, цена решения и статус пункта 21 (типизированные массивы — измерен и отложен). §5 P2 помечен внедрённым, §7 поправлен под срезы индекса. tools/bench_storage.mjs — микрозамер трёх раскладок данных частицы в QuickJS (объекты / Float32Array-SoA / Array-SoA): выигрыш даёт раскладка SoA (−18 %), а не сам типизированный массив (−3 %), поэтому переписывание хранилища частиц сейчас не окупается. Проверка: tools/run_tests.py — ok 35, fail 0, skip 0; tests/js/*_test.mjs — 47 наборов, все зелёные.
-
Nikitos создал
-
Nikitos создал
-