[Types] LLM-driven type-error transform capstone#7407
Open
keithharvey wants to merge 13 commits intobeyond-all-reason:masterfrom
Open
[Types] LLM-driven type-error transform capstone#7407keithharvey wants to merge 13 commits intobeyond-all-reason:masterfrom
keithharvey wants to merge 13 commits intobeyond-all-reason:masterfrom
Conversation
f4467f5 to
cceb22b
Compare
Contributor
This was referenced Apr 12, 2026
Draft
f98a862 to
8d0beb4
Compare
Contributor
Author
|
Integration tests are passing, it's a lie because of the engine version. I could zip up the engine and run a custom workflow every time I push this to prove that, but I'm not gonna. |
e21ffa5 to
c4ea6c1
Compare
Add Utilities, I18N, Debug, Lava, and GetModOptionsCopy to the System tables in luaui/system.lua and luarules/system.lua so that widgets and gadgets can access them after detach-bar-modules moves them off the Spring table. Also add .luarc.json globals and type stubs for LSP support.
Replaces the vendored gajop/i18n fork with the upstream i18n package via lux. The mig-i18n branch applies the codemod that rewrites the wrapper and call sites to use this dependency.
Restructures the 20 files under luaui/Tests/ and luaui/TestsExamples/
from bare-global hook declarations to a return-table shape, and
updates the dbg_test_runner widget to read test hooks from the table
returned by the chunk.
Motivation: the pre-existing shape required the test files to run
under setfenv(chunk, testEnvironment) and define `function test()`,
`function setup()`, etc. as bare module-level globals that setfenv
redirected into the environment. That works at runtime but emmylua
can't model the sandboxing — it sees 20 files declaring project-wide
globals like `test`, `setup`, `widget`, `unitID`, `initialCameraState`,
etc. To analyze the test files, .emmyrc.json had to blacklist both
test directories under workspace.ignoreDir — a kludge on clearly-ours
code. Lives on its own leaf so the convention change can be discussed
in isolation.
Shape change, per file:
function skip() return ... end ─┐
function setup() ... end │ return {
function test() ... end ├─▶ skip = function() return ... end,
function cleanup() ... end ─┘ setup = function() ... end,
test = function() ... end,
cleanup = function() ... end,
}
Cross-hook shared state (e.g. `widget`, `initialCameraState`, mocks
whose .remove() gets called in cleanup) now declared as file-scope
locals above the return block, so the hook closures capture them
without leaking the names into emmylua's project globals.
Helper functions (runCritterTest, runDistanceTest, test_factory_*,
sanityChecks/failingTests/etc. in selftests) converted from bare
globals to `local function` above the return block — they're only
called from other hooks in the same file.
Runner patch — luaui/Widgets/dbg_test_runner.lua, loadTestFromFile:
- capture the return value of pcall(chunk)
- require it to be a table
- merge its keys into testEnvironment so runTestInternal still reads
bare `skip`/`setup`/`test`/`cleanup` under setfenv(testEnvironment)
Vendored LuaCATS annotations for busted/luassert to provide IntelliSense for the unit-test surface. Lives on its own leaf so the discussion around 'vendoring LuaCATS types' can happen in isolation — prior pushback on the same direction in an earlier unit-testing PR makes this the right place to litigate it rather than burying it in a broader env commit. Why vendored instead of declared as a Lux dep: Lux does not yet support pulling LuaCATS annotations from library deps, and quick attempts to wire this up in Lux failed. Upstream tracking issue: lumen-oss/lux#953 — once that lands, these directories should be deleted in favor of declaring busted as a normal Lux dev-dep. Sources (pinned SHAs): - types/busted/ https://github.com/LuaCATS/busted @ 5ed85d0e016a5eb5eca097aa52905eedf1b180f1 - types/luassert/ https://github.com/LuaCATS/luassert @ d3528bb679302cbfdedefabb37064515ab95f7b9 See types/busted/provenance.md and types/luassert/provenance.md for per-directory upstream refs + license status.
Env layer that sits between `mig` and the LLM triage pass. Creates
the emmylua config, per-class type stubs, the CI gate, source fixes
for bugs the tightened globals list unmasks, and a type stub for the
integration-test DSL.
Single commit on `fmt-llm-source`. Two concerns that used to live
here have been split off into their own leaf branches for isolated
PR discussion:
- Vendored LuaCATS busted+luassert types → mig-busted-types
(carried-commit leaf off busted-types-curated)
- Integration-test return-table restructure + runner patch →
mig-integration-tests (carried-commit leaf off
integration-tests-curated)
Both live in TRANSFORMS now, so mig composes them in, and this env
commit assumes both landed. If either leaf gets rejected, a follow-up
env commit re-adds its compensating kludge (busted globals +
`spec/` ignoreDir for rejected busted-types; `luaui/Tests`/
`luaui/TestsExamples` ignoreDir + delete `types/Test.lua` for
rejected integration-tests).
Contents:
- .emmyrc.json: scoped globals (engine sandbox, BAR module globals
from detach-bar-modules, BAR sandbox entries, handful of
BAR-defined CMD_*). Busted framework names intentionally absent —
covered by mig-busted-types. `workspace.ignoreDir` does not list
luaui/Tests or luaui/TestsExamples — mig-integration-tests makes
those files analyzable.
- types/Test.lua (new, ---@meta): integration-test DSL type
declarations. Signatures extracted from the inline `Test` table
in luaui/Widgets/dbg_test_runner.lua:662 + extras from
common/testing/test_extra_utils.lua.
- types/*.lua: BAR-defined class stubs (Widget, Gadget, Addon,
UnitDef, Callins, GL, LuaShader/Module, VBO/VAO, BarLuaShader,
Spring augments, etc.).
- .github/workflows/type_check.yml: CI gate running emmylua_check.
- Source fixes surfaced by tightening:
- luaui/system.lua: Commands = Commands → Commands = Game.Commands
(the bare Commands global was a dangling reference previously
masked by the indiscriminate globals list).
- luaui/Widgets/gui_pip.lua: forward-decl for `UpdateGuishaderBlur`
— StartMaximizeAnimation (line 4307) calls it before the
`local function UpdateGuishaderBlur` definition at line 4310.
- Small per-file type/source cleanups carried over from the prior
LLM pass.
Per PR review by Watch The Fort: globals are a code smell outside
engine-defined tables. Scope kept to declared globals that are
either (a) engine-provided sandbox members, (b) BAR module globals
intentionally hoisted off Spring.* by detach-bar-modules, or
(c) BAR-defined custom command constants with known providers.
Generated by parallel claude-sonnet-4-6 workers dispatched by scripts/codemod/llm-type-triage.sh, applying fixes per SKILL.md categories. Single pass, no iteration — categories that don't shrink the count are a signal that SKILL.md needs a new rule.
This was referenced Apr 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of BAR type-error cleanup. Final stage: deterministic transforms + env layer + LLM type-fix pass.
Commits
06c789ea46env: expose detached BAR modules to widget/gadget sandboxaf84ac4e04deps: add kikito/i18n.lua as lux dependencyf327f4e968gen(hand): integration tests return-table shape973c0aee84gen(hand): inline luassert and busted LuaCATS types5e0dc1b41egen(stylua): initial formatting of entire codebase894373988agen(bar_codemod): bracket-to-dotfc0c52e504gen(bar_codemod): rename-aliasesc64f7be008gen(bar_codemod): detach-bar-modules4cd052514cgen(bar_codemod): i18n-kikito6d08a3382bgen(bar_codemod): spring-split9db43c4a63env(llm): fmt-llm-source preparation for the LLM run76aec3f928gen(llm): type-error triage (127 → 38 errors)05f7331510git-blame-ignore-revs: add transform commitsTriage run
Branch Topology
All branches in the BAR type-error cleanup stack. Regenerated deterministically by
just bar::fmt-mig-generate. Generated 2026-04-14 18:58:04 UTC.Leaves — each targets
master, mergeable independently:masterstyluabar-lua-codemod bracket-to-dotbar-lua-codemod rename-aliasesbar-lua-codemod detach-bar-modulesbar-lua-codemod i18n-kikitobar-lua-codemod spring-splitbar-lua-codemod integration-testsbar-lua-codemod busted-typesRollups — composite branches stacking the leaves and (for
fmt-llm) the env + LLM layers:mastermig