Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
595 commits
Select commit Hold shift + click to select a range
3ccd382
fix(checker): accept Lua table args for Java vararg slots
dingyi222666 Sep 3, 2026
8b3dc95
fix(completion): classify callable members as FUNCTION kind
dingyi222666 Sep 3, 2026
96c1650
fix(tools): survive LSP stdin EPIPE on client disconnect in demo bridge
dingyi222666 Sep 3, 2026
6c4c6c3
feat(completion): suggest view properties inside loadlayout tables
dingyi222666 Sep 3, 2026
6ab704c
feat(completion): extend layout-table completions to .aly files and e…
dingyi222666 Sep 3, 2026
fce0c3f
feat(completion): string-literal value and module-name completion
dingyi222666 Sep 3, 2026
a84c984
fix(tools): highlight and serve .aly layouts as Lua in the Monaco demo
dingyi222666 Sep 3, 2026
8cff10d
fix(completion): value completion inside empty layout string literals
dingyi222666 Sep 3, 2026
d1d48e8
fix(semantic): adversarial-review corrections for layout completion wave
dingyi222666 Sep 7, 2026
29411a8
fix(tools): make string-literal completions actually fire in the demo
dingyi222666 Sep 7, 2026
feae4f5
fix(lsp,parser,workspace): adversarial wave-2/3 corrections
dingyi222666 Sep 9, 2026
3f2faf7
fix(lsp,binder,types,workspace): two-fixer wave with adversarial veri…
dingyi222666 Sep 10, 2026
66bf920
feat(parser),fix(checker,lsp): wave A — compound assignment redo + di…
dingyi222666 Sep 10, 2026
17505f9
fix(types),fix(tools): wave B — overload dedup, variance refinement, …
dingyi222666 Sep 10, 2026
ff13f1c
fix(types,interop,tools),chore(workspace): wave C — strict overload s…
dingyi222666 Sep 10, 2026
2f3c855
fix(lsp),fix(tools),docs,test: wave D — didClose republish, doc sweep…
dingyi222666 Sep 10, 2026
78a5462
fix(comments),fix(binder),fix(tools): wave E — annotation attachment,…
dingyi222666 Sep 10, 2026
820fffc
fix(engine,binder,types,interop,overlays),test,docs: waves F+G — engi…
dingyi222666 Sep 10, 2026
3a88fe8
fix(printer),feat(tools),fix(binder,types): wave G — if-end printer, …
dingyi222666 Sep 10, 2026
b9e26a6
fix(engine,lsp,types),test: wave H — SCC fixpoint, config clear, unio…
dingyi222666 Sep 10, 2026
0fa2343
feat(engine),fix(binder): wave I — incremental fingerprints, graph re…
dingyi222666 Sep 11, 2026
6cc6283
fix(interop): wave J — wildcard import parity, alias precedence, dead…
dingyi222666 Sep 11, 2026
123100e
fix(interop): wave K — document-order import precedence, SDK discover…
dingyi222666 Sep 11, 2026
b967b90
feat(checker),fix(types): wave L — undefined-global diagnostics, Clas…
dingyi222666 Sep 11, 2026
3799774
fix(types,checker,lsp),fix(build): wave M — workspace symbol surface,…
dingyi222666 Sep 11, 2026
2c2c9e1
fix(engine),fix(lsp): wave N — graph-reuse range hash, loop-tail scop…
dingyi222666 Sep 11, 2026
0f15bbf
perf(checker),fix(types): wave O — single scope resolution, import-la…
dingyi222666 Sep 11, 2026
82516bc
fix(checker),fix(tools): wave P — memo resets, tokens debounce, frame…
dingyi222666 Sep 11, 2026
863e345
fix(checker),test(tools),docs: wave Q — wildcard INFO policy, smoke w…
dingyi222666 Sep 11, 2026
4b7a341
fix(completion),fix(tools): wave R — while-tail promotion, coalescing…
dingyi222666 Sep 11, 2026
52bcc9c
fix(lsp): forward default-method TextDocumentService calls through th…
dingyi222666 Sep 11, 2026
407e09a
test(lsp): make the folding forwarder regression portable
dingyi222666 Sep 11, 2026
a54764e
test(tools,lsp),refactor(completion): wave S — full-capability smoke,…
dingyi222666 Sep 11, 2026
3d9dc5f
fix(lsp),test(tools): wave T — truncation sentinel, EXITED reject, di…
dingyi222666 Sep 11, 2026
e13ce40
feat(types),test(tools): wave U — method generics, constraint toleran…
dingyi222666 Sep 11, 2026
b014af5
fix(parser),fix(types): wave V — compound-assign version gate, recove…
dingyi222666 Sep 12, 2026
d43b8c4
fix(facts): wave W — require-alias identity, luajava self-require
dingyi222666 Sep 12, 2026
82a46f6
fix(facts): wave X — retire require aliases on shadowing rebind
dingyi222666 Sep 12, 2026
a20b61f
fix(facts): wave Y — require-alias tombstone scopes per both audits
dingyi222666 Sep 12, 2026
a7faa0c
fix(lsp,parser,checker): wave Z — Error-sentinel hard-lock, goto same…
dingyi222666 Sep 12, 2026
7dac3e6
feat(api),fix(facts,checker): waves AA+BB — DiagnosticTag.Unnecessary…
dingyi222666 Sep 12, 2026
147d947
fix(types),build: wave CC — bare callable alias rename, publish workflow
dingyi222666 Sep 12, 2026
7bd90ca
fix(lexer): wave DD — block comments do not nest (real-Lua semantics)
dingyi222666 Sep 12, 2026
76b40a8
fix(facts),fix(binder): wave EE — require disjunct removal, self-requ…
dingyi222666 Sep 12, 2026
20f94c4
fix(lexer),fix(binder),test: waves DD+EE+FF — lexer nesting fix, wrap…
dingyi222666 Sep 13, 2026
e34f160
fix(semantic): complete implicit self members in colon-method bodies
dingyi222666 Sep 14, 2026
d9d9d03
fix(overlay): declare runtime LuaActivity.get(name) helper
dingyi222666 Sep 14, 2026
040429e
feat(interop): bundle Android-Lua runtime jar for real reflection
dingyi222666 Sep 14, 2026
d7509ce
fix(multiplatform): make common regexes JS-target safe
dingyi222666 Sep 14, 2026
82dc30d
fix(demo): forward DiagnosticTag.Unnecessary/Deprecated to Monaco mar…
dingyi222666 Sep 14, 2026
1a13e17
fix(types): collapse true|false literal unions to boolean
dingyi222666 Sep 14, 2026
0483181
feat(workspace): resolve AndroLua shared-environment globals across f…
dingyi222666 Sep 14, 2026
f1ee004
feat(semantic): infer loadlayout id property types from Lua adapter c…
dingyi222666 Sep 14, 2026
f043292
fix(interop): keep runtime adapters reachable under configured prefixes
dingyi222666 Sep 15, 2026
0881c03
fix(demo): don't render method completions with the text glyph
dingyi222666 Sep 15, 2026
0492e3a
fix(androlua): bind switch case bodies and parse if-cond-else shorthand
dingyi222666 Sep 15, 2026
0dfca53
feat(semantic): complete control-flow-assigned nested member paths
dingyi222666 Sep 15, 2026
0ea815a
perf(workspace): light pre-plan pass for upsert fingerprints
dingyi222666 Sep 15, 2026
584c280
perf(workspace): skip cycle re-analysis when no SCC peer is dirty
dingyi222666 Sep 15, 2026
6f0a2d8
perf(workspace): index extra-provider aliases instead of linear scans
dingyi222666 Sep 16, 2026
ca6716d
perf(checker): index member assignments by root name
dingyi222666 Sep 16, 2026
d390d42
feat(workspace): enumerate shared-environment globals in completion
dingyi222666 Sep 16, 2026
9240f01
perf(jvm): negative Class.forName cache; add keystroke perf probe
dingyi222666 Sep 16, 2026
79e96f4
fix(workspace): harden shared-global fallback resolution
dingyi222666 Sep 16, 2026
3fb5397
perf(checker): shared Android/layout surface caches; memoized member …
dingyi222666 Sep 16, 2026
f3107bc
perf(types): global flatten cache for JavaClassType hierarchy maps
dingyi222666 Sep 16, 2026
4f8c1cf
feat(checker): bind loadlayout ids across string paths, index sinks a…
dingyi222666 Sep 16, 2026
1948114
fix(overlay): keep Lua std modules from Android class name claims; ad…
dingyi222666 Sep 16, 2026
8053229
fix(jvm): extract bundled runtime jar once per process, not per provider
dingyi222666 Sep 16, 2026
ae7d7f4
fix(checker): keep ALua fluent chains alive through void returns and …
dingyi222666 Sep 16, 2026
31f2f11
refactor(parser): delete dead ASTModifier interface, consolidate near…
dingyi222666 Sep 17, 2026
c143160
refactor(checker): merge near-duplicate luajava dispatch and callable…
dingyi222666 Sep 17, 2026
9ddd19b
refactor(model): dedupe model/binder/workspace helpers, drop dead mem…
dingyi222666 Sep 17, 2026
c8472ce
refactor(parser): read-pass consolidation of statement/expression ske…
dingyi222666 Sep 17, 2026
792a5db
refactor(checker): merge dual luajava call-typing ladders and no-op h…
dingyi222666 Sep 17, 2026
9bf74b2
refactor(workspace): dedupe require-walk and local-initializer ladders
dingyi222666 Sep 17, 2026
a10351d
refactor(jvm): delete dead resolveImport ladder, merge reflected prov…
dingyi222666 Sep 17, 2026
d7f0dc2
refactor: wave-3 read-pass cleanup across parser, checker, workspace,…
dingyi222666 Sep 17, 2026
c752383
refactor(lexer): merge exponent-scan twins, inline isDigit twin, simp…
dingyi222666 Sep 17, 2026
3703e53
refactor(types,checker,binder): wave-4 read-pass dedup
dingyi222666 Sep 17, 2026
9c87c49
refactor(lsp): dedupe applyContentChanges/offsetAt/lineEnd across ser…
dingyi222666 Sep 17, 2026
9a646dc
refactor: wave-5 read-pass cleanup (checker + jvmMain)
dingyi222666 Sep 17, 2026
0f4c332
Revert "refactor: wave-5 read-pass cleanup (checker + jvmMain)"
dingyi222666 Sep 17, 2026
a227ba0
Revert "refactor(types,checker,binder): wave-4 read-pass dedup"
dingyi222666 Sep 17, 2026
c5b715a
refactor: wave-6 three-angle cleanup (tests, glue layer, dead general…
dingyi222666 Sep 17, 2026
8c00a60
fix: drop override keyword after NodePositionIndexProvider collapse (…
dingyi222666 Sep 17, 2026
c12e97a
refactor: re-land quarantined cleanups GROUP 1 (safe ring, bindClass …
dingyi222666 Sep 17, 2026
cf22611
test(commonTest): drop debug println, unused import, inline duplicate…
dingyi222666 Sep 17, 2026
9727fb5
refactor(demo): dead fallback routes, triplicated insert-text, bridge…
dingyi222666 Sep 17, 2026
c0c691c
refactor: re-land quarantined cleanups GROUP 2 (checker mid-ring)
dingyi222666 Sep 17, 2026
7117e19
refactor: re-land quarantined cleanups GROUP 3 (jvmMain surfaces)
dingyi222666 Sep 17, 2026
e2ed3df
refactor(checker): resolveBindClassCall reuses luaJavaHelperCallRetur…
dingyi222666 Sep 17, 2026
b47516d
refactor(checker): pass-N core cleanup — dead perf counters, inlines,…
dingyi222666 Sep 17, 2026
132bc01
refactor(parser,lexer): delete dead public-API surface (user-authorized)
dingyi222666 Sep 17, 2026
4bec2c6
refactor(jvm): config/engine/service dead-weight pass
dingyi222666 Sep 17, 2026
e791d6d
refactor: round-2 core cleanup across checker and jvmMain
dingyi222666 Sep 17, 2026
bfd930b
refactor: fresh-eyes pass — drifted dead duplicates, unreachable bloc…
dingyi222666 Sep 17, 2026
f03f611
refactor: fresh-eyes round 2 — resolver/engine/binder/comments dead s…
dingyi222666 Sep 17, 2026
daecb13
refactor: fresh-eyes round 3 — planners, model debris, signature mess…
dingyi222666 Sep 17, 2026
2bbfb9b
refactor: final round — nullability tightening, message consts, hover…
dingyi222666 Sep 17, 2026
0a49427
feat(dex): pure-Kotlin dex parser + JVM model adapter (D1+D2)
dingyi222666 Sep 17, 2026
7c9e5c2
feat(dex): workspace mounting + engine wiring (D3) + adapter fixes (D…
dingyi222666 Sep 18, 2026
3c7baef
fix(dex): same-dex-set hydration depth + odex test contract
dingyi222666 Sep 18, 2026
5b040a8
ci(dex): fixture check is informational — demo dex is gitignored on C…
dingyi222666 Sep 18, 2026
cb46cf3
fix(dex): hydration call pre-added the referenced class to the cycle-…
dingyi222666 Sep 18, 2026
fda2d71
ci(dex): fix shell if/else indentation breaking workflow YAML parse
dingyi222666 Sep 18, 2026
d3e3e84
ci(dex): chmod +x gradlew before test slices (checkout strips exec bit)
dingyi222666 Sep 18, 2026
095a1d6
feat(android): embeddable LSP launcher + android library module (A1+A2)
dingyi222666 Sep 18, 2026
fb2359d
feat(android): sample app + on-device hardening + lsp4j 0.24.0 alignm…
dingyi222666 Sep 18, 2026
fc20984
fix(android): AGP 8.5.2 -> 8.13.2 (KGP 2.2.0 needs BaseVariant from t…
dingyi222666 Sep 19, 2026
45e5570
fix(android): AGP 8.10.0 — top of KGP 2.2.0's supported range (7.3.1-…
dingyi222666 Sep 19, 2026
36f662a
fix(android): load AGP on the root plugin classloader (KT-57162 worka…
dingyi222666 Sep 19, 2026
03f13f0
fix(android): lazy bundleReleaseAar reference (task resolves after va…
dingyi222666 Sep 19, 2026
2297aeb
ci(android): accept SDK licenses and preinstall platform-34/build-too…
dingyi222666 Sep 19, 2026
bcef7e4
fix(android): compileSdk 35 — CI runner ships only the android-35 pla…
dingyi222666 Sep 19, 2026
9f3ebc7
ci(android): write SDK license hash files directly (runner has no sdk…
dingyi222666 Sep 19, 2026
1cd63a5
fix(lsp): stream-based workspace read — Files.readString is absent fr…
dingyi222666 Sep 19, 2026
13923fb
fix(sample): Java 17 + jvmTarget 17 — D8 Record desugaring needs a ma…
dingyi222666 Sep 19, 2026
08d9890
ci(android): upload sample APK artifact
dingyi222666 Sep 19, 2026
44fd187
feat(sample): demo-corpus workspace, M3 UI with file browser, format/…
dingyi222666 Sep 19, 2026
2c9591e
fix(sample): drop res-auto material/appcompat attrs from XML, set vis…
dingyi222666 Sep 19, 2026
337ad03
fix(sample): close nested block comment — 'layout/*.aly' inside a KDo…
dingyi222666 Sep 19, 2026
894248c
fix(sample): edge-to-edge toolbar insets, LSP cold-start warm-retry, …
dingyi222666 Sep 19, 2026
98e721c
fix(sample): missing android.view.View import for the insets listener
dingyi222666 Sep 19, 2026
11f05a1
fix(sample): drop remoteSocketAddress log — LocalSocket throws Unsupp…
dingyi222666 Sep 19, 2026
73cf676
chore(device-debug): LSP-DEVICE timing logs in initialize/rebuildFull…
dingyi222666 Sep 19, 2026
7c1bd12
fix(sample): raise sora INIT timeout to 60s; guard onDestroy dispose
dingyi222666 Sep 20, 2026
b0830e5
perf(lsp): answer initialize immediately, build workspace in background
dingyi222666 Sep 20, 2026
40c3c07
test(lsp): await background workspace build in tests observing snapsh…
dingyi222666 Sep 20, 2026
cb28480
test(lsp): flush background rebuild in tests observing snapshot state
dingyi222666 Sep 20, 2026
90db04e
fix(lsp): keep incremental updates synchronous; background build rele…
dingyi222666 Sep 20, 2026
bc5519f
test(lsp): flush background rebuild across real-project/lifecycle/fol…
dingyi222666 Sep 20, 2026
254d89d
test(lsp): repo-wide flush sweep + LuaLanguageServer.flushBackgroundR…
dingyi222666 Sep 20, 2026
73d7b89
Revert "test(lsp): repo-wide flush sweep + LuaLanguageServer.flushBac…
dingyi222666 Sep 20, 2026
4caf377
fix(lsp): generation guard — background cold build never stomps newer…
dingyi222666 Sep 20, 2026
a4c7dc9
fix(lsp): generation counts mutations, not applies
dingyi222666 Sep 20, 2026
2361cf0
fix(lsp): background build holds stateLock and reapplies once on work…
dingyi222666 Sep 20, 2026
be8d0bf
fix(lsp): background cold build holds stateLock for the whole build
dingyi222666 Sep 20, 2026
12a01ac
fix(lsp): background build reapplies when workspace moved during the …
dingyi222666 Sep 20, 2026
00ba7c6
test(lsp): await background build in the two without-open suites miss…
dingyi222666 Sep 20, 2026
d1636c3
feat(stubs): union parents for LuaActivity/LuaService — framework mem…
dingyi222666 Sep 20, 2026
9892b8c
feat(android): reflect through DexClassLoader — android.jar converted…
dingyi222666 Sep 20, 2026
847911b
fix(android): dexReflectionLoaderFor cacheKeyKind param; drop orphan …
dingyi222666 Sep 20, 2026
017b4c6
ci(android): repair workflow step name mangled by earlier sweep inser…
dingyi222666 Sep 20, 2026
fe89b29
ci(android): d8 needs java on PATH in the convert step
dingyi222666 Sep 20, 2026
c22db59
ci(android): d8 names output classes.dex — rename to android.dex
dingyi222666 Sep 20, 2026
3859cb9
feat(lsp): forward background-build progress as $/progress work-done …
dingyi222666 Sep 20, 2026
f7fea91
fix(lsp): emit $/progress only when the client advertised window.work…
dingyi222666 Sep 20, 2026
d59f696
fix(lsp): remove the leftover unconditional $/progress block that byp…
dingyi222666 Sep 20, 2026
edb02c3
feat(sample): startup timing marks + immediate text display
dingyi222666 Sep 22, 2026
25f1805
fix(sample): restore connectToLanguageServer in startup flow — openFi…
dingyi222666 Sep 22, 2026
b9b918d
chore(device-debug): completion timing + readiness log
dingyi222666 Sep 22, 2026
e552b05
fix(sample): foreground LspServerService — MIUI froze the process mid…
dingyi222666 Sep 22, 2026
6d0787a
feat(sample): runtime POST_NOTIFICATIONS request; raise COMPLETION/HO…
dingyi222666 Sep 22, 2026
2635fc3
fix(lsp): explicit return in hover (lock-free read path); completion …
dingyi222666 Sep 22, 2026
9329695
fix(sample): restore 3s COMPLETION/HOVER defaults — popup must never …
dingyi222666 Sep 22, 2026
1cd8336
feat(sample): live indexing progress in bottom bar + dex surface warmup
dingyi222666 Sep 22, 2026
b50e42f
fix(sample): buildProgress as companion StateFlow — MainActivity read…
dingyi222666 Sep 22, 2026
79c928e
perf(dex): per-class ModuleType memo — framework surfaces built once …
dingyi222666 Sep 22, 2026
95577d5
fix(dex): memoize adapter entry points; wire cachedModuleType in mounter
dingyi222666 Sep 22, 2026
13e6f78
fix(sample): official sora lua grammar + quietlight theme — replace h…
dingyi222666 Sep 22, 2026
f040a1e
perf(lsp): completion serves lock-free — never queues behind the cold…
dingyi222666 Sep 22, 2026
3f9f97b
fix(lsp): setWorkspaceMetadata stays synchronous (contract); test awa…
dingyi222666 Sep 22, 2026
fcba1a5
perf(dex): depth-bounded hydration — member types one level deep, tra…
dingyi222666 Sep 22, 2026
9279efb
refactor(model): unified lexical/member query index — shared completi…
dingyi222666 Oct 11, 2026
7fbb77f
refactor!: retire legacy analyzer/compat surface + LSP consolidation;…
dingyi222666 Oct 12, 2026
40a771a
docs(goal): round checkpoint — 7,944-line reduction, 2,924/0 JVM gree…
dingyi222666 Oct 12, 2026
33fcc9b
docs(profile): live-diagnostics cold-path profile — 6.3s expression-u…
dingyi222666 Oct 12, 2026
2a91805
perf(checker): derive declaration types in the declaration's own scop…
dingyi222666 Oct 12, 2026
0a312e3
docs(profile): round 3 — declaration-scope derivation landed; remaini…
dingyi222666 Oct 12, 2026
de7740d
perf(lsp): content-based live-diagnostics currency — reuse checker re…
dingyi222666 Oct 12, 2026
3286438
fix(lsp): pin no binder graphs in the diagnostics reuse cache — store…
dingyi222666 Oct 12, 2026
3234f1d
docs(profile): round 4 — content-based diagnostics currency lands, E2…
dingyi222666 Oct 12, 2026
bb7a12c
perf(lsp): warm up configured dex libraries at configuration time — f…
dingyi222666 Oct 12, 2026
0ec6a9f
fix(jvm): publish engine resolver-free import fallbacks as baseResolv…
dingyi222666 Oct 12, 2026
1a12647
docs(profile): round 6 — baseResolve* fix lands with JVM dynamic-dex …
dingyi222666 Oct 12, 2026
016c9c7
docs(profile): round 7 — lifecycle gate green on device (6/7); comple…
dingyi222666 Oct 12, 2026
3e04f5f
perf(engine): cancellable per-file analysis — fire the cancellation h…
dingyi222666 Oct 12, 2026
36cfaee
perf(engine): fire the cancellation hook in the per-document model-bu…
dingyi222666 Oct 12, 2026
ef2bfbc
perf(pipeline): fire the analysis checkpoint between per-document pha…
dingyi222666 Oct 12, 2026
c499578
docs(profile): round 8 — cancellable per-document analyses land; devi…
dingyi222666 Oct 12, 2026
2aa22f1
perf(lsp): bounded-parallel completion executor (2 workers) — the LSP…
dingyi222666 Oct 12, 2026
9333db0
docs(profile): round 8 addendum — bounded-parallel completion executo…
dingyi222666 Oct 12, 2026
b40a3d8
perf(facade): facts-driven builtin-require verification — replace the…
dingyi222666 Oct 12, 2026
0e96658
refactor(collectors): one shared access-path descent for document fac…
dingyi222666 Oct 12, 2026
cbfaa9e
docs(profile): round 10 — shared access-path descent + facts-driven r…
dingyi222666 Oct 12, 2026
9a47fff
refactor(workspace): single-owner .aly layout-provider recovery — sha…
dingyi222666 Oct 12, 2026
dc03bc1
docs(profile): round 11 — single-owner .aly recovery; LuaJava facade …
dingyi222666 Oct 12, 2026
ac07397
refactor(facade): one memberExpressionForNode helper — the node-or-pa…
dingyi222666 Oct 12, 2026
f3a2cfd
docs(profile): round 12 — memberExpressionForNode consolidation; call…
dingyi222666 Oct 12, 2026
b37e327
refactor(lsp): one lifecycle-policy application point — the text-docu…
dingyi222666 Oct 12, 2026
fdb9ce6
docs(profile): round 13 — one lifecycle-policy application point
dingyi222666 Oct 12, 2026
3305450
docs(goal): session handoff — resume point, verified state, exact nex…
dingyi222666 Oct 12, 2026
afefc45
perf(lsp): burst-debounce the deferred live-buffer analysis — program…
dingyi222666 Oct 12, 2026
9fa3129
docs(profile): round 9 — burst debounce landed; remaining gate = cold…
dingyi222666 Oct 12, 2026
ae7b934
docs(goal): handoff refreshed to 9fa3129
dingyi222666 Oct 12, 2026
9198ea5
refactor(model): shared isBareWeakType predicate — the hover/resolve …
dingyi222666 Oct 12, 2026
f906432
docs(profile): round 17 — shared bare-weak-type predicate
dingyi222666 Oct 12, 2026
e735d5d
diag(dex): log dynamic dex library import mount failures — a silent n…
dingyi222666 Oct 12, 2026
9ac96da
perf(lsp): bound completion publication wait + de-starve the checker …
dingyi222666 Oct 12, 2026
0fe2ab6
perf(lsp): preempt the in-flight checker when newer work pends + canc…
dingyi222666 Oct 12, 2026
98c0ac0
perf(lsp): warm dynamic dex import mounts at content-change time + li…
dingyi222666 Oct 12, 2026
1240866
perf(lsp): warm the builtin overlay at initialize + checker watchdog …
dingyi222666 Oct 12, 2026
ee17f9f
perf(checker): phase timing over 1s + dex import sub-step timing — th…
dingyi222666 Oct 12, 2026
be94a87
perf(diag): watchdog prints the checker thread stack + IMPORT-PERF pe…
dingyi222666 Oct 12, 2026
d5fedb3
perf(jvm): mounted-dex simple-alias resolution precedes classloader s…
dingyi222666 Oct 12, 2026
9e4a439
perf(jvm): checkpoint every classloader class-load candidate — a fram…
dingyi222666 Oct 12, 2026
01f470f
build(sample): keepnames for the parser/LSP package in release E2E bu…
dingyi222666 Oct 12, 2026
04e4d7e
perf(dex): surface assembly and wildcard enumeration observe the anal…
dingyi222666 Oct 12, 2026
5a5d5cf
fix(dex): surface-assembly checkpoint must not swallow its own cancel…
dingyi222666 Oct 12, 2026
1a5a8de
perf(jvm): checkpoint dex index construction and provider fingerprint…
dingyi222666 Oct 12, 2026
6b7aaf6
perf(jvm): per-target import-resolution memo (negatives included, dex…
dingyi222666 Oct 12, 2026
168e5a4
perf(lsp): pre-assemble workspace Java surfaces at initialize — the f…
dingyi222666 Oct 12, 2026
e3e4252
perf(dex): cache name-only type shells per binaryName + warm wildcard…
dingyi222666 Oct 12, 2026
80f35d4
fix(lsp): preemption aborts an in-flight check only when its file's c…
dingyi222666 Oct 12, 2026
5606dea
perf(types): memoize JavaClassType structural hashCode + cheap dirty-…
dingyi222666 Oct 12, 2026
4754501
docs(profile): rounds 25-40 addendum — five-agent convergence, per-ta…
dingyi222666 Oct 12, 2026
93a835d
perf(checker)/perf(types): round-22 five-agent fixes — Context cached…
dingyi222666 Oct 13, 2026
104c0a7
perf(std): bounded-parallel overlay module compile — the cold builtin…
dingyi222666 Oct 13, 2026
05b96a2
docs(profile): round 22 addendum — rel41 6/7 (checker-warning passes,…
dingyi222666 Oct 13, 2026
889b949
perf(lsp)/perf(std)/perf(jvm): round-23 five-agent fixes — two-lane l…
dingyi222666 Oct 13, 2026
4c47c11
perf(jvm): checkpoint implicit-class and import-expansion loops + pre…
dingyi222666 Oct 13, 2026
8762e68
ci(e2e): stop lingering Gradle daemons before instrumentation — build…
dingyi222666 Oct 13, 2026
a8d80ef
perf(lsp): serialize service warmups behind the overlay compile — at …
dingyi222666 Oct 13, 2026
93ae821
perf(lsp): unwire the parallel overlay compile on the emulator host —…
dingyi222666 Oct 13, 2026
2b04c15
docs(profile): round 23 addendum — rel50 first 7/7 E2E pass, Monaco s…
dingyi222666 Oct 13, 2026
d508757
docs(goal): acceptance-gate status — rel51 7/7 E2E, Monaco smoke gree…
dingyi222666 Oct 13, 2026
042371e
refactor: round-24 five-agent line reduction — lexer (write-only toke…
dingyi222666 Oct 13, 2026
e7efe9b
docs(goal): round 24 — five-agent reduction −238 verified lines (46,2…
dingyi222666 Oct 13, 2026
9f354e7
refactor: round-25 five-agent reduction — binder (−136: 10 factory pa…
dingyi222666 Oct 13, 2026
c2852e7
docs(goal): round 25 — five-agent reduction −394 verified lines (45,8…
dingyi222666 Oct 13, 2026
841845c
refactor: round-26 five-agent reduction — lsp second pass (−319: the …
dingyi222666 Oct 13, 2026
eb32ce8
docs(goal): round 26 — five-agent reduction −609 net verified lines (…
dingyi222666 Oct 13, 2026
8a9a37a
refactor: round-27 five-agent reduction — LuaLanguageService second p…
dingyi222666 Oct 13, 2026
e104094
docs(goal): round 27 — five-agent reduction −550 verified lines (44,7…
dingyi222666 Oct 13, 2026
8d48cc5
refactor: round-28 five-agent reduction — LuaLanguageService third pa…
dingyi222666 Oct 13, 2026
2c813b5
docs(goal): round 28 — five-agent reduction −554 verified lines (44,1…
dingyi222666 Oct 13, 2026
48471c8
refactor: round-29 five-agent reduction — LuaLanguageService fourth p…
dingyi222666 Oct 13, 2026
b3a1ef4
docs(goal): round 29 — five-agent reduction −522 verified lines (43,6…
dingyi222666 Oct 13, 2026
babcb48
refactor: round-30 partial wave (paused mid-flight) — LuaParser/AST2L…
dingyi222666 Oct 13, 2026
15f650f
docs(goal): rounds 30-31 — paused wave committed (43,047 lines, -10,5…
dingyi222666 Oct 13, 2026
4ad3bb3
refactor: round-32 five-agent reduction — LuaLanguageService sixth pa…
dingyi222666 Oct 13, 2026
df1085b
docs(goal): round 32 — five-agent reduction −1,075 cumulative to 42,6…
dingyi222666 Oct 13, 2026
4fa7f33
docs(goal): blocker resolved — E2E rel58 = OK (7 tests) on the round-…
dingyi222666 Oct 13, 2026
218bc53
refactor: round-33 five-agent reduction — LuaLanguageService seventh …
dingyi222666 Oct 13, 2026
00e140e
docs(goal): round 33 — five-agent reduction −755 verified lines (41,8…
dingyi222666 Oct 13, 2026
8ea27f0
refactor: recover the lost fifth/sixth-pass edits from the remote ver…
dingyi222666 Oct 14, 2026
f199560
docs(goal): E2E rel60 = OK (7 tests) on the final recovered tree.
dingyi222666 Oct 14, 2026
8b30711
docs(goal): Monaco smoke re-verified green on the final 41,498-line t…
dingyi222666 Oct 14, 2026
f31adc0
docs(readme): simplify — drop machine-specific paths, finished task-o…
dingyi222666 Oct 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
scripts/windows-run-gradle-capped.ps1 text eol=crlf
scripts/windows-run-slice.ps1 text eol=crlf
136 changes: 136 additions & 0 deletions .github/workflows/android-verify.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
# Android embedding verify: assembles the android/ AAR subproject on the same
# self-hosted linux runner as dex-verify.yml (dsh-jvm-1). Zero local-gradle
# policy for the feature lanes — CI is the verifier, so this workflow is the
# gate that keeps android/ compiling against AGP + the pinned deps.
# Modeled on dex-verify.yml: workflow-level toolchain env, scoped daemon
# cleanup, non-fatal artifact uploads, and the chmod +x ./gradlew lesson.
name: android-verify

on:
workflow_dispatch:
push:
branches: [windows-verify, linux-verify]

# Machine-specific toolchain locations for the self-hosted Linux runner.
# Kept at workflow level so the machine owner edits ONE place here.
# AGP 8.5.x requires the Gradle daemon to run on JDK 17 — hence temurin-17,
# while the Kotlin toolchain (jvmTarget 11) is satisfied by the compile.
env:
JAVA_HOME: /home/dingyi/.jdks/temurin-17
ANDROID_HOME: /home/dingyi/Android/Sdk

jobs:
android-assemble:
runs-on: [self-hosted, linux, x64]
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@v4

# Convert the platform android.jar (Java bytecode stubs) to dex so the
# sample app can load it through DexClassLoader on-device — the reflection
# pipeline then works unchanged, with no desktop JDK required.
- name: Convert android.jar to android.dex
run: |
set -euxo pipefail
export PATH="$JAVA_HOME/bin:$PATH"
D8=$(ls "$ANDROID_HOME"/build-tools/*/d8 | sort | tail -1)
echo "d8: $D8"
mkdir -p android/sample/src/main/assets
"$D8" --release --min-api 26 --lib "$ANDROID_HOME/platforms/android-35/android.jar" \
--output android/sample/src/main/assets \
"$ANDROID_HOME/platforms/android-35/android.jar"
# d8 names its output classes.dex regardless of input name
mv android/sample/src/main/assets/classes.dex android/sample/src/main/assets/android.dex
ls -la android/sample/src/main/assets/android.dex

- name: Show environment
run: |
export PATH="$JAVA_HOME/bin:$PATH"
echo "JAVA_HOME=$JAVA_HOME"
java -version
echo "ANDROID_HOME=$ANDROID_HOME"
git rev-parse --short HEAD

# ANDROID_HOME is pre-set on the runner; sdkmanager may or may not be on
# PATH depending on the cmdline-tools layout — warn, never fail here.
# Missing platform/build-tools are auto-installed by AGP iff
# SDK licenses are already accepted on this machine.
- name: Verify Android SDK
run: |
echo "ANDROID_HOME=$ANDROID_HOME"
# The runner has no cmdline-tools (no sdkmanager), so AGP's own
# auto-installer is the only installer. It refuses to run unless the
# license files exist — write the standard license hashes directly
# (these are the well-known SHA1s of the SDK license texts, same on
# every machine; sdkmanager itself just writes these files).
mkdir -p "$ANDROID_HOME/licenses"
printf "24333f8a63b6825ea9c5514f83c2829b004d1fee\n" > "$ANDROID_HOME/licenses/android-sdk-license"
printf "84831b9409646a918e30573bab4c9c91346d8abd\n" > "$ANDROID_HOME/licenses/android-sdk-preview-license"
echo "license files written:"
ls "$ANDROID_HOME/licenses"
if [ -d "$ANDROID_HOME/platforms" ]; then
ls "$ANDROID_HOME/platforms" | sed 's/^/platform: /'
else
echo "WARN: no platforms directory under ANDROID_HOME"
fi
if [ -d "$ANDROID_HOME/build-tools" ]; then
ls "$ANDROID_HOME/build-tools" | sed 's/^/build-tools: /'
else
echo "WARN: no build-tools directory under ANDROID_HOME"
fi

# assembleRelease needs NO signing config for a library (AARs are never
# signed). Builds only :android to keep the run scoped and fast.
- name: Assemble android AAR and fat jar
run: |
export PATH="$JAVA_HOME/bin:$PATH"
chmod +x ./gradlew
./gradlew :android:assembleRelease :android:androidReleaseJar --parallel

# Also builds the sample app (includes sample app APK, android/sample).
# Activates when the sample-app lane lands: :android:sample is not yet in
# settings.gradle.kts, so this step fails (intentionally, no always-pass
# guard) until that lane adds android/sample/build.gradle.kts + the
# settings include. Kept plain so it is a real gate, not a no-op.
- name: Assemble sample app (includes sample app)
run: |
export PATH="$JAVA_HOME/bin:$PATH"
chmod +x ./gradlew
./gradlew :android:sample:assembleDebug --parallel

- name: Stop Gradle daemons
if: always()
# Scoped cleanup: `gradlew --stop` stops only the daemons registered
# under this Gradle user home/version. Never a blanket java kill on a
# shared self-hosted runner.
run: |
export PATH="$JAVA_HOME/bin:$PATH"
./gradlew --stop || true

- name: Upload release AAR
if: always()
uses: actions/upload-artifact@v4
with:
name: android-release-aar
path: android/build/outputs/aar/*.aar
if-no-files-found: warn

# Fat classes jar for consumers running their own dex step (the
# monaco-lsp-demo classes.dex pipeline). Non-fatal: the AAR above is the
# recommended artifact.
- name: Upload fat classes jar
if: always()
uses: actions/upload-artifact@v4
with:
name: android-release-fat-jar
path: android/build/libs/*.jar
if-no-files-found: warn

- name: Upload sample APK
if: always()
uses: actions/upload-artifact@v4
with:
name: androlua-sample-apk
path: android/sample/build/outputs/apk/debug/*.apk
if-no-files-found: warn
91 changes: 91 additions & 0 deletions .github/workflows/dex-verify.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# Linux self-hosted dex-slice runner: ONLY the dex-relevant jvmTest slices,
# kept fast (the full suite stays owned by the windows-full-jvmtest workflow).
# Modeled on windows-jvmtest.yml: self-hosted runner, workflow-level toolchain
# env, scoped daemon cleanup, non-fatal artifact uploads.
name: dex-jvmtest

on:
workflow_dispatch:
push:
branches: [windows-verify, linux-verify]

# Machine-specific toolchain locations for the self-hosted Linux runner.
# Kept at workflow level so the machine owner edits ONE place here.
env:
JAVA_HOME: /home/dingyi/.jdks/temurin-17
ANDROID_HOME: /home/dingyi/Android/Sdk

jobs:
dex-jvmtest:
runs-on: [self-hosted, linux, x64]
timeout-minutes: 45
steps:
- name: Checkout
uses: actions/checkout@v4

# The dex slices include the real-fixture test against the demo corpus
# (DexRealFixtureTddTest walks up from user.dir to this exact path); the
# corpus is gitignored, so absence is informational (the fixture test
# soft-skips via JUnit Assume) — never a workflow failure.
- name: Verify dex fixture exists
run: |
if [ -f tools/monaco-lsp-demo/workspace/libs/classes.dex ]; then
echo "fixture-present"
else
echo "fixture-absent (gitignored demo corpus) — DexRealFixtureTddTest soft-skips"
fi

- name: Show environment
run: |
export PATH="$JAVA_HOME/bin:$PATH"
echo "JAVA_HOME=$JAVA_HOME"
java -version
echo "ANDROID_HOME=$ANDROID_HOME"
git rev-parse --short HEAD
echo "mode=dex-slices gradle --parallel"

# Dex-relevant slices only. Filters verified against real files:
# interop.dex.DexParserCommonTddTest
# -> src/commonTest/kotlin/interop/dex/DexParserCommonTddTest.kt
# interop.jvm.DexMountingTddTest
# -> src/jvmTest/kotlin/interop/jvm/DexMountingTddTest.kt
# interop.jvm.DexRealFixtureTddTest
# -> src/jvmTest/kotlin/interop/jvm/DexRealFixtureTddTest.kt
# io.github.dingyi222666.luaparser.interop.jvm.DexClassModelAdapterTest
# -> src/commonTest/kotlin/interop/jvm/DexClassModelAdapterTest.kt
# lsp.RuntimeJarTempLeakTddTest
# -> src/jvmTest/kotlin/lsp/RuntimeJarTempLeakTddTest.kt
- name: Run dex test slices
run: |
export PATH="$JAVA_HOME/bin:$PATH"
chmod +x ./gradlew
./gradlew jvmTest --parallel \
--tests "interop.dex.*" \
--tests "interop.jvm.Dex*" \
--tests "io.github.dingyi222666.luaparser.interop.jvm.DexClassModelAdapterTest" \
--tests "lsp.RuntimeJarTempLeakTddTest"

- name: Stop Gradle daemons
if: always()
# Scoped cleanup: `gradlew --stop` stops only the daemons registered
# under this Gradle user home/version. Never a blanket java kill on a
# shared self-hosted runner.
run: |
export PATH="$JAVA_HOME/bin:$PATH"
./gradlew --stop || true

- name: Upload JUnit XML
if: always()
uses: actions/upload-artifact@v4
with:
name: dex-junit-xml
path: build/test-results/jvmTest/**
if-no-files-found: warn

- name: Upload HTML report
if: always()
uses: actions/upload-artifact@v4
with:
name: dex-test-report-html
path: build/reports/tests/jvmTest/**
if-no-files-found: warn
51 changes: 51 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# MANUAL release publishing to Maven Central.
#
# This workflow never runs automatically: it is workflow_dispatch only
# ("Run workflow" button). Nothing publishes on push or tag.
#
# VERSION BUMP GUARD — read before every run:
# Maven Central forbids re-uploading an existing (group, artifact, version):
# a failed or partial upload permanently burns that version. Before EVERY
# publish, bump `publishVersion` in build.gradle.kts (the single source of
# truth for the published coordinates) and commit the bump. If the version
# about to be published was already uploaded — even partially — STOP and
# bump again instead of retrying.
#
# SECRETS (placeholders only — no real values live in this file). Create them
# in Repo Settings > Secrets and variables > Actions:
# MAVEN_CENTRAL_USERNAME / MAVEN_CENTRAL_PASSWORD : Central (S01) portal token
# SIGNING_KEY : ASCII-armored private signing key (keep headers/newlines)
# SIGNING_PASSWORD : passphrase of the signing key
# They are exposed to Gradle as project properties via the ORG_GRADLE_PROJECT_
# prefix, which is how the com.vanniktech.maven.publish plugin (configured in
# build.gradle.kts: SonatypeHost.S01 + in-memory signing) picks them up.
name: publish

on:
workflow_dispatch:

jobs:
publish:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17

# Caches ~/.gradle (dependencies, wrapper, build cache) between runs.
- name: Set up Gradle caching
uses: gradle/actions/setup-gradle@v4

- name: Publish to Maven Central
env:
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
ORG_GRADLE_PROJECT_signingKey: ${{ secrets.SIGNING_KEY }}
ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.SIGNING_PASSWORD }}
run: ./gradlew publishToMavenCentral --no-daemon --stacktrace
96 changes: 96 additions & 0 deletions .github/workflows/windows-full-jvmtest.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# Windows self-hosted FULL jvmTest (tip-coherent, TASK-043 evidence).
# Does NOT use slice progress bar. CPU hard-capped (affinity 0x3F, workers=5).
# Branch: windows-verify only. Never main.
name: windows-full-jvmtest

on:
workflow_dispatch:
push:
branches: [windows-verify]
paths:
- '.github/workflows/windows-full-jvmtest.yml'
- 'scripts/windows-run-full-jvmtest.ps1'
- 'scripts/windows-run-gradle-capped.ps1'
- 'scripts/windows-ensure-android-jar.ps1'

# Machine-specific toolchain locations for the self-hosted Windows runner.
# Kept at workflow level so the machine owner edits ONE place here instead of
# hunting through job/step blocks. Same values the job-level env used before.
env:
JAVA_HOME: C:\Users\dingyi\.jdks\temurin-17.0.11
ANDROID_HOME: C:\Users\dingyi\AppData\Local\Android\Sdk

jobs:
full-jvmtest:
runs-on: [self-hosted, Windows, X64]
# Full suite can exceed slice timeouts; keep headroom under CPU cap.
timeout-minutes: 360
env:
GRADLE_OPTS: -Dorg.gradle.workers.max=5
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Show environment
shell: pwsh
run: |
$env:Path = "$env:JAVA_HOME\bin;$env:Path"
Write-Host "JAVA_HOME=$env:JAVA_HOME"
& "$env:JAVA_HOME\bin\java.exe" -version
Write-Host "processor_count=$env:NUMBER_OF_PROCESSORS"
git rev-parse --short HEAD
Write-Host "mode=full-jvmtest cpu_hard_cap=affinity_0x3F workers=5"

# Arm 174 soft-skips that need reflective android.jar (SDK platforms/android-35).
# Idempotent: no-op when jar already present. Never invents G:/.
- name: Ensure android.jar (platforms/android-35)
shell: pwsh
run: |
$env:Path = "$env:JAVA_HOME\bin;$env:Path"
./scripts/windows-ensure-android-jar.ps1

- name: Full jvmTest (CPU hard-capped)
shell: pwsh
run: |
$env:Path = "$env:JAVA_HOME\bin;$env:Path"
./scripts/windows-run-full-jvmtest.ps1

- name: Stop Gradle daemons
if: always()
shell: cmd
# Cleanup is deliberately scoped: `gradlew --stop` stops only the Gradle
# daemons registered under this Gradle user home/version. Do NOT add a
# blanket `taskkill /F /IM java.exe` here — on a shared self-hosted runner
# that kills every Java process machine-wide (IDEs, other runs' daemons,
# Kotlin compile daemons of concurrent jobs). Orphaned Kotlin compile
# daemons exit with the Gradle daemon or time out on their own.
run: |
set "PATH=%JAVA_HOME%\bin;%PATH%"
call gradlew.bat --stop
exit /b 0

- name: Upload JUnit XML
if: always()
uses: actions/upload-artifact@v4
with:
name: full-junit-xml
path: build/test-results/jvmTest/**
if-no-files-found: warn

- name: Upload full-jvmtest result
if: always()
uses: actions/upload-artifact@v4
with:
name: full-jvmtest-result
path: |
full-jvmtest-result.json
tasks/agent-runs/full-jvmtest/**
if-no-files-found: warn

- name: Upload HTML report
if: always()
uses: actions/upload-artifact@v4
with:
name: full-test-report-html
path: build/reports/tests/jvmTest/**
if-no-files-found: warn
Loading
Loading