Run the current headless spec module with the project LuaJIT wrapper:
./lua -e 'require("spec.rule_spec").run()'Runtime Lua code lives under src/lua. The ./lua wrapper adds that directory
to package.path, so existing module names such as spec.*, lib.ui.*, and
profiler.* continue to resolve from the repository root.
Smoke-check LuaUnit availability:
./lua -e 'local luaunit = require("luaunit"); print(luaunit.VERSION or "luaunit ok")'LuaUnit is installed as a project-local development dependency for new tests. Existing specs are not migrated to LuaUnit yet.
Install the system bootstrap tools:
brew install luarocks luajitInitialize the LuaRocks project files for LuaJIT/Lua 5.1:
luarocks --lua-version=5.1 init --lua-versions=5.1 lua-ui-library 0.1Use the project wrappers from the repository root:
./lua -v
./luarocks --versionInstall project-local development rocks:
./luarocks install luacheck
./luarocks install luaunitVerify installed rocks:
./luarocks listRun Luacheck:
./lua_modules/bin/luacheck .The Luacheck configuration targets LuaJIT and excludes generated, vendor, output, and ignored manual-test paths.
Run the LÖVE app:
love src/luaRun a focused demo from its src/lua app directory:
love src/lua/demos/03-drawableRoot love . is not the canonical runtime target after the TypeScriptToLua
setup refactor.
TypeScriptToLua output is validation and review output only. npm run build:ts
writes to ignored src/generated/tstl; generated Lua is not runtime source
until a later explicit promotion step reviews and moves it into src/lua.
LuaRocks packaging consumes reviewed Lua from src/lua/lib through the
rockspec module map. It must not package src/ts, src/types,
src/generated, dependency directories, or temporary output.
Check those boundaries with:
npm run check:boundariesRun the non-GUI setup validation gates with:
npm run check:setupThis includes TypeScript checks, Lua module smoke checks, stale documentation path checks, packaging boundary checks, and the current Luacheck baseline.