Address the two failing CI checks:
- Module layering: document the new RPGActor::release binding in rpg.md
and bind getAttackSpeed/getAttackTimesAdd so the doc matches the bindings.
- Architecture contracts:
- ecs-system: register the 10 new RPG systems (LevelSystem, VitalsSystem,
TraitSystem, ClassSystem, QuestSystem, Tracker, Battle, BattleSystem,
EquipmentSystem, LootSystem) in scripts/architecture_contracts.json.
- api-lifetime: add @ownership/@lifetime Doxygen to raw-pointer accessors
(registry find() and Battle actor/event accessors).
- api-shape: mark script-facing bool operations as compatibility facades
in their Doxygen; rename QuestSystem::requiresMet -> hasMetRequirements
so the predicate name passes the lexical predicate check.
Pre-existing dev failure: Procgen.cpp binds addFunc('getBool'/'setBool')
without documenting them in procgen.md, which fails the script-binding
documentation check for any PR against dev. Acknowledge the gap via the
known-gaps allowlist (unrelated to the logging change).
Add 7 shaders to the stylize module, exposed through the existing
Style* runtime and Squirrel API (no new module or bindings):
- Mesh materials (reuse mesh3d_toon.vert): rim light, dissolve,
hologram, snow accumulation.
- Post passes: vignette, chromatic aberration, film grain.
Original GLSL implementations of common techniques, not verbatim
copies (see docs/dev/ported-material-shaders.md for licensing).
Adds EffectShaders.{h,cpp} with param tables + uniform binding +
shader creation, wired via delegation from StyleShaders.cpp, plus
SPIR-V embeds and per-module tests (test/stylize_effects.cpp).
scripts/check_bindings.py now treats pre-existing doc gaps as registered
debt: scripts/check_bindings_gaps.txt (module:binding, regenerated via
--write-gaps, 857 entries) turns them into warnings, while any NEW bound
name missing from its doc chapter fails the check. make check/bindings and
the CI layering job now run the full --strict check instead of the ten
newly-authored chapters, so docs cannot silently drift from bindings
anywhere in the tree.
Resolved conflicts:
- test/*: keep the shared Fixtures.h migration (drop the per-file
openGfxWindow copies that dev still had).
- vulkan/Graphics.cpp: keep dev's extName loop variable rename AND the
headless set_headless() line.
Local win32-debug build + headless/sampler/mocks/binding tests pass after
forcing a rebuild of EVProcgen (stale object from the pre-merge tree caused
a duplicate PbrTextureSet::destroy symbol).
- scripts/check_bindings.py: scans every addFunc/addVar in src/modules and
greps the matching docs/usr/modules chapter. Missing names are warnings by
default (large pre-existing doc debt); --strict + --modules turn them into
CI failures. Wired as make check/bindings and a step in the CI layering
job for the ten newly-authored chapters (avatar, buildingfx, camera,
database, dialogue, grid, housegen, sceneloader, stylize, virtualgeometry),
so those chapters cannot silently drift from the bindings.
- test/binding_selfcheck.cpp: builds a script VM with every module exposed,
constructs the light modules and asserts curated hot bindings exist
(eve.reflect itself is covered by the existing ReflectScript test).
- EVENGINE_ENABLE_STRICT_WARNINGS option: MSVC /W4 /WX, GCC/Clang
-Wall -Wextra -Werror, with documented noise suppressions and
-isystem/-external:I for third-party headers; enabled on the
Windows/Linux debug CI jobs.
- Fix warnings across engine, modules and tests exposed by the gate,
including real bugs (incomplete-type deletes, Timespan microsecond
overflow, overload hiding, enum switch gaps, dead code).
- Add Linux ASan+UBSan job, example smoke step, python-tools test
job, ruff config (scripts+tools), weekly Linux coverage job and a
CodeQL workflow.
CI hit a python socket timeout connecting to the embedded MCP server,
likely because the sed-triggered hot reload delayed frame-loop MCP pumping
on a slower runner. Bump the socket timeout to 30s, retry eve_status, and
dump the eve log tail on failure so future CI failures carry the actual
engine output.