Symptom
Loading certain public builds and running a calculation fails with:
Scale (measured 2026-09-15 at pin ce566ea)
We ran a corpus of 1438 complete public PoE2 site builds (leagues forbiddenrites + runesofaldur) through the engine at ce566eac45ea8a86477f513c7ee65a1ebe60014e, one build per worker, with restart-and-retry-once so worker deaths do not count as build failures:
- 1338/1438 computed, 100 engine failures (7.0%), 0 conversion errors
- All 100 fail with the single error
mainOutput is nil
- 61 forbiddenrites / 39 runesofaldur; 61 distinct characters (some characters carry multiple failing snapshots)
- The failure is intrinsic to the build data against the engine, not an artifact of our JSON->XML conversion: two of the failing builds (Forbidden_VangVaa, Mi_Mo_AT) fail identically when loaded directly from cached
.pob files
Attribution
Introducing commit: da7ae16823289a68a958c65c22e708a2cda56077 — "Add individual skill weapon set handling (#2498)" (2026-09-10).
Mechanism: SkillsTabClass:ReconcileSocketGroupWeaponSets (src/Classes/SkillsTab.lua:1472 at the pin) invalidates or switches a socket group's weapon set, after which self.mainOutput = self.mainEnv.player.output (src/Classes/CalcsTab.lua:511) reads nil.
Parent/child proof (deterministic, not flaky): three of the failing builds (in the linked gist) all compute cleanly at the parent 49e93925d ("Export 0.5.5 data and update trade data (#2505)") and all fail at da7ae1682. The remaining 97 failures share the identical error signature and mechanism; per-build parent/child was not re-run for them (we hold cached .pob files only for the three).
Minimal repro
Public gist with the three .pob files — load each and run the calculation:
https://gist.github.com/alsh0083/20b259caec08bd37780b9a61661a0225
All three fail at ce566eac4 with mainOutput is nil; all three compute at 49e93925d.
The 100 failing builds
league/character <blob-sha10> (sha of the build_json payload; list for cross-checking, all fail with mainOutput is nil at ce566eac4):
forbiddenrites/BabyAvocadooo 2cc854e872
forbiddenrites/BunasLegionnaire 2b42052305
forbiddenrites/CzerBlink ef0188599d
forbiddenrites/FLAMEBUH a6d1092944
forbiddenrites/FLAMEBUH cbe7b8014c
forbiddenrites/FanDoGambalho fcf667f22f
forbiddenrites/Forbidden_VangVaa 012e1163db
forbiddenrites/Gwalala c082ebdf75
forbiddenrites/JokerBD 45ca6d4a48
forbiddenrites/JokerBD 71449b336c
forbiddenrites/JokerBD da659cb8a2
forbiddenrites/Kardemon 7647accbba
forbiddenrites/Kkp_spark 56a251155d
forbiddenrites/Kkp_spark d61c29fcb2
forbiddenrites/LetsGetDoryaniTonight ea38d444e2
forbiddenrites/LetsGetDoryaniTonightFR 30a3ea4a54
forbiddenrites/LetsGetDoryaniTonightFR 3bbba526eb
forbiddenrites/LetsGetDoryaniTonightFR d96e9a6629
forbiddenrites/NextGenAilment 1e7eb278db
forbiddenrites/NextGenAilment 221cbeb759
forbiddenrites/NextGenAilment 4572d2fdab
forbiddenrites/NextGenAilment fcf2b34d90
forbiddenrites/Nimis 919e7377f1
forbiddenrites/PoopWhisperer 19b7ffa540
forbiddenrites/PoopWhisperer ad692d2a58
forbiddenrites/Predatoล่ากระเทย ea823195c3
forbiddenrites/SSSavingnnnn 5599588ee3
forbiddenrites/Schandrina 73bbba35a6
forbiddenrites/Sorlok_master 22fcfc0fa4
forbiddenrites/Tunier_FR_Sor 408e7b4378
forbiddenrites/Tunier_FR_Sor 722c0ba1f2
forbiddenrites/Vei 1ee6c3248a
forbiddenrites/Vei 31a454b95f
forbiddenrites/WrynnONE a8b46b6fd0
forbiddenrites/Xpernia_IX 2eead29ac5
forbiddenrites/Xpernia_IX 603a022b8c
forbiddenrites/Xpernia_IX d740cb0cd9
forbiddenrites/bkdfsjjfdksdf 883592dc89
forbiddenrites/govnoglazii 3316d8b465
forbiddenrites/nckonii 1b9875f244
forbiddenrites/nrv_gll 81728cebe0
forbiddenrites/nrv_gll becd02ba03
forbiddenrites/peggalpog 144ee2be7c
forbiddenrites/peggalpog dcd38c0502
forbiddenrites/peggalpog f123e37fb8
forbiddenrites/peggalpog fc6bf7846e
forbiddenrites/sorsires 9ba90d9575
forbiddenrites/sparkiaction 1b9cb9bf6b
forbiddenrites/sparkiaction c0cbb018ba
forbiddenrites/sparkiaction c92a807ddd
forbiddenrites/sparkiaction d76a54b31b
forbiddenrites/xxTsukuyomixx f4a4310794
forbiddenrites/сорканожка 28fb937942
forbiddenrites/сорканожка 51fba36257
forbiddenrites/сорканожка f56f341d8a
forbiddenrites/不良人 05d0a57784
forbiddenrites/不良人 6c99f9e362
forbiddenrites/不良人 f51756aaf6
forbiddenrites/撒大大大奋发 784b65c946
forbiddenrites/黑鸟在天际的万蓝大法师一一一一一一一一哔哩哔哩 698b6a93fc
forbiddenrites/黑鸟在天际的万蓝大法师一一一一一一一一哔哩哔哩 98bc4c8b30
runesofaldur/Ancients_yoyo 379dad6951
runesofaldur/Ashimar_DoNotCopyBuild abd9b7e714
runesofaldur/FERNANDO_MENDOZA_GOAT a03ba89d2f
runesofaldur/GWaterrr cfbb528f19
runesofaldur/Gay_ROTA 1273dc053a
runesofaldur/Gay_ROTA c588ce4c65
runesofaldur/HemlockPH_RotA 38ff4441ca
runesofaldur/HiredHA bc4a9cc8de
runesofaldur/HiredHA f278a94c09
runesofaldur/LetsGetDoryaniTonightPH 092602e873
runesofaldur/LetsGetDoryaniTonightPH 7b05442581
runesofaldur/Lichmaiballs 25527f2207
runesofaldur/Mi_Mo_AT 00e1041eab
runesofaldur/Mi_Mo_AT 11a8f58291
runesofaldur/SkwitSorc_RotA 03c6990e9a
runesofaldur/SkwitSorc_RotA 0a8ebcc0ac
runesofaldur/eldrinoo a6bd1348f2
runesofaldur/morph_kok 7af4ec9738
runesofaldur/morph_kok e08220276d
runesofaldur/上山的虎八号 2b81b155d4
runesofaldur/二一飞行员 f5ace6030f
runesofaldur/佐德小汽車賽季五 7996b01b1e
runesofaldur/佐德小汽車賽季五 b8d2fa3cf1
runesofaldur/佐德小汽車賽季五 c91b390ea5
runesofaldur/床前明月光_疑是地上霜_举头望明月_低头思故乡 ea1867ea5a
runesofaldur/搬山道到达 f792b81266
runesofaldur/欸欸獵魔人王朝了 2074899f16
runesofaldur/王俊凯肘击马嘉祺 12129b2c21
runesofaldur/王俊凯肘击马嘉祺 46bc007efb
runesofaldur/王俊凯肘击马嘉祺 4e8982e485
runesofaldur/瓦爾克拉斯動物園園長 6781277484
runesofaldur/重生之精品旋風 53ded50bd9
runesofaldur/重生之精品旋風 a38e6aca63
runesofaldur/신문을보지보다가자지 15323b55e7
runesofaldur/야행성너리 650165cef9
runesofaldur/야행성너리 a68abfb007
runesofaldur/야행성너리 df36f6ffd7
runesofaldur/캐찹놈 e2d6b621ae
runesofaldur/퍼렁임 9fb416d6c7
Notes
Symptom
Loading certain public builds and running a calculation fails with:
Scale (measured 2026-09-15 at pin ce566ea)
We ran a corpus of 1438 complete public PoE2 site builds (leagues forbiddenrites + runesofaldur) through the engine at
ce566eac45ea8a86477f513c7ee65a1ebe60014e, one build per worker, with restart-and-retry-once so worker deaths do not count as build failures:mainOutput is nil.pobfilesAttribution
Introducing commit:
da7ae16823289a68a958c65c22e708a2cda56077— "Add individual skill weapon set handling (#2498)" (2026-09-10).Mechanism:
SkillsTabClass:ReconcileSocketGroupWeaponSets(src/Classes/SkillsTab.lua:1472at the pin) invalidates or switches a socket group's weapon set, after whichself.mainOutput = self.mainEnv.player.output(src/Classes/CalcsTab.lua:511) reads nil.Parent/child proof (deterministic, not flaky): three of the failing builds (in the linked gist) all compute cleanly at the parent
49e93925d("Export 0.5.5 data and update trade data (#2505)") and all fail atda7ae1682. The remaining 97 failures share the identical error signature and mechanism; per-build parent/child was not re-run for them (we hold cached.pobfiles only for the three).Minimal repro
Public gist with the three
.pobfiles — load each and run the calculation:https://gist.github.com/alsh0083/20b259caec08bd37780b9a61661a0225
All three fail at
ce566eac4withmainOutput is nil; all three compute at49e93925d.The 100 failing builds
league/character <blob-sha10>(sha of thebuild_jsonpayload; list for cross-checking, all fail withmainOutput is nilatce566eac4):Notes
alsh0083/poe2-mcp(private) — the full measurement record with methodology lives in that repo's issues Normalize poison/bleed/ignite configuration #143/Fix Tabination for Skill StatMap on Export #144; the gist above is the self-contained repro.