modwright 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (455) hide show
  1. package/LICENSE +35 -0
  2. package/README.md +212 -0
  3. package/assets/claude/agents/mw-explore.md +46 -0
  4. package/assets/claude/agents/mw-fixture.md +33 -0
  5. package/assets/claude/agents/mw-rule-author.md +51 -0
  6. package/assets/claude/agents/mw-scaffold-author.md +48 -0
  7. package/assets/claude/skills/mw-author.md +59 -0
  8. package/assets/claude/skills/mw-new-item.md +51 -0
  9. package/assets/claude/skills/mw-new-spell.md +50 -0
  10. package/assets/claude/skills/mw-scaffold.md +59 -0
  11. package/assets/claude/skills/mw-ship.md +57 -0
  12. package/assets/claude/skills/mw-validate.md +51 -0
  13. package/assets/claude/skills/mw-verify.md +59 -0
  14. package/assets/nivalisnights/extract_resources.py +177 -0
  15. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Config.json +5 -0
  16. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/BootstrapClient.lua +55 -0
  17. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/BootstrapServer.lua +81 -0
  18. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Log.lua +96 -0
  19. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Probes.lua +1038 -0
  20. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/ProbesClient.lua +74 -0
  21. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Protocol.lua +985 -0
  22. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Watch.lua +175 -0
  23. package/bridges/bg3-se/Mods/ModWrightBridge/meta.lsx +45 -0
  24. package/bridges/bg3-se/README.md +99 -0
  25. package/bridges/bg3-se/bridge.json +68 -0
  26. package/bridges/cp2077-cet/ModWrightBridge/init.lua +375 -0
  27. package/bridges/cp2077-cet/ModWrightBridge/probes.lua +1104 -0
  28. package/bridges/cp2077-cet/ModWrightBridge/protocol.lua +1306 -0
  29. package/bridges/cp2077-cet/README.md +165 -0
  30. package/bridges/cp2077-cet/bridge.json +53 -0
  31. package/dist/core/bridge/arm.js +175 -0
  32. package/dist/core/bridge/cet-console.js +26 -0
  33. package/dist/core/bridge/cet-log.js +362 -0
  34. package/dist/core/bridge/index.js +11 -0
  35. package/dist/core/bridge/locate.js +35 -0
  36. package/dist/core/bridge/paths.js +34 -0
  37. package/dist/core/bridge/pending.js +89 -0
  38. package/dist/core/bridge/poll.js +155 -0
  39. package/dist/core/bridge/stage.js +100 -0
  40. package/dist/core/bridge/status.js +97 -0
  41. package/dist/core/bridge/types.js +145 -0
  42. package/dist/core/bridge/validate.js +107 -0
  43. package/dist/core/build/index.js +6 -0
  44. package/dist/core/build/manifest.js +47 -0
  45. package/dist/core/build/paths.js +32 -0
  46. package/dist/core/build/run.js +342 -0
  47. package/dist/core/build/stage.js +265 -0
  48. package/dist/core/build/steps/bg3.js +129 -0
  49. package/dist/core/build/steps/core.js +195 -0
  50. package/dist/core/build/steps/cyberpunk.js +95 -0
  51. package/dist/core/build/steps/listing.js +35 -0
  52. package/dist/core/build/types.js +13 -0
  53. package/dist/core/build/zip.js +148 -0
  54. package/dist/core/compat/check.js +113 -0
  55. package/dist/core/compat/pe.js +220 -0
  56. package/dist/core/compat/types.js +1 -0
  57. package/dist/core/compat/version.js +70 -0
  58. package/dist/core/deploy/guards.js +292 -0
  59. package/dist/core/deploy/index.js +5 -0
  60. package/dist/core/deploy/plan.js +696 -0
  61. package/dist/core/deploy/reload-apply.js +361 -0
  62. package/dist/core/deploy/reload.js +358 -0
  63. package/dist/core/deploy/sources.js +169 -0
  64. package/dist/core/deploy/types.js +1 -0
  65. package/dist/core/epic.js +54 -0
  66. package/dist/core/fsutil.js +191 -0
  67. package/dist/core/home.js +70 -0
  68. package/dist/core/knowledge/facts.js +229 -0
  69. package/dist/core/knowledge/index.js +4 -0
  70. package/dist/core/knowledge/search.js +112 -0
  71. package/dist/core/knowledge/store.js +123 -0
  72. package/dist/core/knowledge/types.js +1 -0
  73. package/dist/core/ledger/check.js +42 -0
  74. package/dist/core/ledger/hooks.js +80 -0
  75. package/dist/core/ledger/index.js +7 -0
  76. package/dist/core/ledger/query.js +17 -0
  77. package/dist/core/ledger/record.js +84 -0
  78. package/dist/core/ledger/status.js +53 -0
  79. package/dist/core/ledger/store.js +98 -0
  80. package/dist/core/ledger/types.js +108 -0
  81. package/dist/core/logs/index.js +4 -0
  82. package/dist/core/logs/registry.js +50 -0
  83. package/dist/core/logs/scan.js +195 -0
  84. package/dist/core/logs/triage.js +160 -0
  85. package/dist/core/logs/types.js +1 -0
  86. package/dist/core/lsx.js +10 -0
  87. package/dist/core/lz4.js +66 -0
  88. package/dist/core/mods.js +229 -0
  89. package/dist/core/process.js +49 -0
  90. package/dist/core/project/build-steps.js +83 -0
  91. package/dist/core/project/describe.js +74 -0
  92. package/dist/core/project/index.js +5 -0
  93. package/dist/core/project/load.js +146 -0
  94. package/dist/core/project/schema.js +264 -0
  95. package/dist/core/project/types.js +3 -0
  96. package/dist/core/prompts.js +72 -0
  97. package/dist/core/registry.js +35 -0
  98. package/dist/core/safety/backup.js +206 -0
  99. package/dist/core/safety/execute.js +188 -0
  100. package/dist/core/safety/index.js +5 -0
  101. package/dist/core/safety/plan.js +122 -0
  102. package/dist/core/safety/restore.js +172 -0
  103. package/dist/core/safety/types.js +1 -0
  104. package/dist/core/scaffold/bootstrap.js +7 -0
  105. package/dist/core/scaffold/catalog.js +28 -0
  106. package/dist/core/scaffold/claude-assets.js +271 -0
  107. package/dist/core/scaffold/collisions.js +64 -0
  108. package/dist/core/scaffold/emit.js +356 -0
  109. package/dist/core/scaffold/engine.js +680 -0
  110. package/dist/core/scaffold/ids.js +78 -0
  111. package/dist/core/scaffold/index.js +10 -0
  112. package/dist/core/scaffold/jsonpath.js +121 -0
  113. package/dist/core/scaffold/load.js +81 -0
  114. package/dist/core/scaffold/render.js +85 -0
  115. package/dist/core/scaffold/sequence.js +396 -0
  116. package/dist/core/scaffold/types.js +309 -0
  117. package/dist/core/steam.js +63 -0
  118. package/dist/core/surfaceutil.js +36 -0
  119. package/dist/core/testplan/check.js +67 -0
  120. package/dist/core/testplan/index.js +5 -0
  121. package/dist/core/testplan/load.js +100 -0
  122. package/dist/core/testplan/registry.js +317 -0
  123. package/dist/core/testplan/run.js +389 -0
  124. package/dist/core/testplan/types.js +82 -0
  125. package/dist/core/text/converters/bg3.js +50 -0
  126. package/dist/core/text/converters/cyberpunk.js +36 -0
  127. package/dist/core/text/converters/index.js +261 -0
  128. package/dist/core/text/diff/cr2w.js +180 -0
  129. package/dist/core/text/diff/index.js +16 -0
  130. package/dist/core/text/diff/loca.js +43 -0
  131. package/dist/core/text/diff/lsx.js +126 -0
  132. package/dist/core/text/handles.js +86 -0
  133. package/dist/core/text/index.js +6 -0
  134. package/dist/core/text/json.js +46 -0
  135. package/dist/core/text/templates/cache.js +71 -0
  136. package/dist/core/text/templates/index.js +3 -0
  137. package/dist/core/text/templates/library.js +245 -0
  138. package/dist/core/text/templates/types.js +51 -0
  139. package/dist/core/text/toolchain.js +16 -0
  140. package/dist/core/text/types.js +1 -0
  141. package/dist/core/text/validate.js +149 -0
  142. package/dist/core/text/xml.js +58 -0
  143. package/dist/core/toolchain/datafetch.js +151 -0
  144. package/dist/core/toolchain/env.js +63 -0
  145. package/dist/core/toolchain/features.js +170 -0
  146. package/dist/core/toolchain/index.js +8 -0
  147. package/dist/core/toolchain/install.js +191 -0
  148. package/dist/core/toolchain/locate.js +275 -0
  149. package/dist/core/toolchain/remember.js +84 -0
  150. package/dist/core/toolchain/run.js +318 -0
  151. package/dist/core/toolchain/specs.js +351 -0
  152. package/dist/core/toolchain/types.js +1 -0
  153. package/dist/core/types.js +1 -0
  154. package/dist/core/userconfig.js +66 -0
  155. package/dist/core/validate/context.js +139 -0
  156. package/dist/core/validate/index.js +5 -0
  157. package/dist/core/validate/registry.js +58 -0
  158. package/dist/core/validate/run.js +131 -0
  159. package/dist/core/validate/suppressions.js +91 -0
  160. package/dist/core/validate/types.js +2 -0
  161. package/dist/core/yamledit.js +51 -0
  162. package/dist/index.js +389 -0
  163. package/dist/server.js +1914 -0
  164. package/dist/surfaces/baldursgate3/compat.js +164 -0
  165. package/dist/surfaces/baldursgate3/identity.js +110 -0
  166. package/dist/surfaces/baldursgate3/index/build.js +331 -0
  167. package/dist/surfaces/baldursgate3/index/index.js +17 -0
  168. package/dist/surfaces/baldursgate3/index/info.js +40 -0
  169. package/dist/surfaces/baldursgate3/index/parsers/loca.js +41 -0
  170. package/dist/surfaces/baldursgate3/index/parsers/lsx.js +137 -0
  171. package/dist/surfaces/baldursgate3/index/parsers/stats.js +45 -0
  172. package/dist/surfaces/baldursgate3/index/parsers/treasuretable.js +57 -0
  173. package/dist/surfaces/baldursgate3/index/parsers/xmlutil.js +142 -0
  174. package/dist/surfaces/baldursgate3/index/queries.js +327 -0
  175. package/dist/surfaces/baldursgate3/index/schema.js +62 -0
  176. package/dist/surfaces/baldursgate3/index.js +3 -0
  177. package/dist/surfaces/baldursgate3/logs.js +278 -0
  178. package/dist/surfaces/baldursgate3/modsettings.js +115 -0
  179. package/dist/surfaces/baldursgate3/pak.js +153 -0
  180. package/dist/surfaces/baldursgate3/settings.js +49 -0
  181. package/dist/surfaces/baldursgate3/surface.js +232 -0
  182. package/dist/surfaces/baldursgate3/validators/bridge.js +7 -0
  183. package/dist/surfaces/baldursgate3/validators/files.js +476 -0
  184. package/dist/surfaces/baldursgate3/validators/items.js +1001 -0
  185. package/dist/surfaces/baldursgate3/validators/progression.js +734 -0
  186. package/dist/surfaces/baldursgate3/validators/stats.js +1076 -0
  187. package/dist/surfaces/baldursgate3/validators/story.js +790 -0
  188. package/dist/surfaces/baldursgate3/validators/templates.js +7 -0
  189. package/dist/surfaces/cyberpunk2077/compat.js +223 -0
  190. package/dist/surfaces/cyberpunk2077/index/build.js +231 -0
  191. package/dist/surfaces/cyberpunk2077/index/index.js +17 -0
  192. package/dist/surfaces/cyberpunk2077/index/info.js +51 -0
  193. package/dist/surfaces/cyberpunk2077/index/model.js +52 -0
  194. package/dist/surfaces/cyberpunk2077/index/parsers/tweak.js +483 -0
  195. package/dist/surfaces/cyberpunk2077/index/parsers/tweakxl-yaml.js +183 -0
  196. package/dist/surfaces/cyberpunk2077/index/queries.js +504 -0
  197. package/dist/surfaces/cyberpunk2077/index/resource.js +135 -0
  198. package/dist/surfaces/cyberpunk2077/index/schema.js +90 -0
  199. package/dist/surfaces/cyberpunk2077/index.js +3 -0
  200. package/dist/surfaces/cyberpunk2077/logs.js +742 -0
  201. package/dist/surfaces/cyberpunk2077/paths.js +12 -0
  202. package/dist/surfaces/cyberpunk2077/surface.js +218 -0
  203. package/dist/surfaces/cyberpunk2077/validators/bridge.js +7 -0
  204. package/dist/surfaces/cyberpunk2077/validators/cr2w.js +349 -0
  205. package/dist/surfaces/cyberpunk2077/validators/garments.js +1181 -0
  206. package/dist/surfaces/cyberpunk2077/validators/mesh.js +338 -0
  207. package/dist/surfaces/cyberpunk2077/validators/modsettings.js +120 -0
  208. package/dist/surfaces/cyberpunk2077/validators/packaging.js +463 -0
  209. package/dist/surfaces/cyberpunk2077/validators/red4ext.js +318 -0
  210. package/dist/surfaces/cyberpunk2077/validators/redscript.js +193 -0
  211. package/dist/surfaces/cyberpunk2077/validators/templates.js +7 -0
  212. package/dist/surfaces/cyberpunk2077/validators/tweaks.js +768 -0
  213. package/dist/surfaces/cyberpunk2077/validators/vehicles.js +531 -0
  214. package/dist/surfaces/cyberpunk2077/validators/xl.js +308 -0
  215. package/dist/surfaces/eldenring/binders.js +111 -0
  216. package/dist/surfaces/eldenring/compat.js +166 -0
  217. package/dist/surfaces/eldenring/dcx.js +49 -0
  218. package/dist/surfaces/eldenring/index.js +13 -0
  219. package/dist/surfaces/eldenring/loaders.js +132 -0
  220. package/dist/surfaces/eldenring/logs.js +67 -0
  221. package/dist/surfaces/eldenring/paramdef.js +256 -0
  222. package/dist/surfaces/eldenring/params.js +129 -0
  223. package/dist/surfaces/eldenring/surface.js +121 -0
  224. package/dist/surfaces/eldenring/tools.js +52 -0
  225. package/dist/surfaces/eldenring/validators/binders.js +193 -0
  226. package/dist/surfaces/eldenring/validators/packages.js +159 -0
  227. package/dist/surfaces/eldenring/validators/params.js +334 -0
  228. package/dist/surfaces/eldenring/validators/profiles.js +287 -0
  229. package/dist/surfaces/index.js +34 -0
  230. package/dist/surfaces/nivalisnights/compat.js +229 -0
  231. package/dist/surfaces/nivalisnights/index/build.js +310 -0
  232. package/dist/surfaces/nivalisnights/index/index.js +5 -0
  233. package/dist/surfaces/nivalisnights/index/queries.js +231 -0
  234. package/dist/surfaces/nivalisnights/index.js +4 -0
  235. package/dist/surfaces/nivalisnights/logs.js +473 -0
  236. package/dist/surfaces/nivalisnights/surface.js +195 -0
  237. package/dist/surfaces/skyrimse/archives.js +229 -0
  238. package/dist/surfaces/skyrimse/compat.js +163 -0
  239. package/dist/surfaces/skyrimse/index.js +12 -0
  240. package/dist/surfaces/skyrimse/loadorder.js +174 -0
  241. package/dist/surfaces/skyrimse/logs.js +241 -0
  242. package/dist/surfaces/skyrimse/plugins.js +149 -0
  243. package/dist/surfaces/skyrimse/records.js +94 -0
  244. package/dist/surfaces/skyrimse/surface.js +240 -0
  245. package/dist/surfaces/skyrimse/validators/archive-records.js +165 -0
  246. package/dist/surfaces/skyrimse/validators/archives.js +110 -0
  247. package/dist/surfaces/skyrimse/validators/plugins.js +374 -0
  248. package/dist/surfaces/skyrimse/validators/records.js +117 -0
  249. package/dist/surfaces/stardewvalley/compat.js +190 -0
  250. package/dist/surfaces/stardewvalley/config.js +42 -0
  251. package/dist/surfaces/stardewvalley/contentpatcher.js +203 -0
  252. package/dist/surfaces/stardewvalley/index/index.js +229 -0
  253. package/dist/surfaces/stardewvalley/index/wiki.js +190 -0
  254. package/dist/surfaces/stardewvalley/index.js +12 -0
  255. package/dist/surfaces/stardewvalley/logs.js +307 -0
  256. package/dist/surfaces/stardewvalley/mods.js +182 -0
  257. package/dist/surfaces/stardewvalley/surface.js +244 -0
  258. package/dist/surfaces/stardewvalley/validators/content.js +321 -0
  259. package/dist/surfaces/stardewvalley/validators/fields.js +147 -0
  260. package/dist/surfaces/stardewvalley/validators/loadorder.js +69 -0
  261. package/dist/surfaces/stardewvalley/validators/manifest.js +221 -0
  262. package/dist/surfaces/subnautica2/compat.js +138 -0
  263. package/dist/surfaces/subnautica2/index.js +5 -0
  264. package/dist/surfaces/subnautica2/logs.js +129 -0
  265. package/dist/surfaces/subnautica2/paks.js +173 -0
  266. package/dist/surfaces/subnautica2/surface.js +151 -0
  267. package/dist/surfaces/subnautica2/validators/packaging.js +298 -0
  268. package/dist/surfaces/valheim/compat.js +171 -0
  269. package/dist/surfaces/valheim/index/index.js +301 -0
  270. package/dist/surfaces/valheim/index/tables.js +103 -0
  271. package/dist/surfaces/valheim/index.js +11 -0
  272. package/dist/surfaces/valheim/logs.js +197 -0
  273. package/dist/surfaces/valheim/packaging.js +131 -0
  274. package/dist/surfaces/valheim/plugins.js +270 -0
  275. package/dist/surfaces/valheim/references.js +121 -0
  276. package/dist/surfaces/valheim/surface.js +223 -0
  277. package/dist/surfaces/valheim/validators/packaging.js +218 -0
  278. package/dist/surfaces/valheim/validators/plugins.js +287 -0
  279. package/dist/surfaces/valheim/validators/references.js +169 -0
  280. package/knowledge/baldursgate3/animations.gr2.yaml +166 -0
  281. package/knowledge/baldursgate3/audio.voice.yaml +182 -0
  282. package/knowledge/baldursgate3/audio.wwise.yaml +104 -0
  283. package/knowledge/baldursgate3/charactercreation.heads-hair.yaml +193 -0
  284. package/knowledge/baldursgate3/communitylibrary.shared-content.yaml +129 -0
  285. package/knowledge/baldursgate3/compatibilityframework.api.yaml +176 -0
  286. package/knowledge/baldursgate3/crash.causes.yaml +90 -0
  287. package/knowledge/baldursgate3/dialogue.dialogbank.yaml +120 -0
  288. package/knowledge/baldursgate3/dialogue.files.yaml +236 -0
  289. package/knowledge/baldursgate3/dialogue.osiris-goals.yaml +386 -0
  290. package/knowledge/baldursgate3/dialogue.yaml +122 -0
  291. package/knowledge/baldursgate3/feats.classes.yaml +164 -0
  292. package/knowledge/baldursgate3/items.cloth-physics.yaml +167 -0
  293. package/knowledge/baldursgate3/items.roottemplates.yaml +320 -0
  294. package/knowledge/baldursgate3/items.visualbank.yaml +628 -0
  295. package/knowledge/baldursgate3/journal.quests.yaml +214 -0
  296. package/knowledge/baldursgate3/loadorder.modsettings.yaml +128 -0
  297. package/knowledge/baldursgate3/localization.handles.yaml +92 -0
  298. package/knowledge/baldursgate3/misc.encoding-and-practice.yaml +111 -0
  299. package/knowledge/baldursgate3/origins.companions.yaml +144 -0
  300. package/knowledge/baldursgate3/osiris.signatures.yaml +211 -0
  301. package/knowledge/baldursgate3/packaging.meta.yaml +155 -0
  302. package/knowledge/baldursgate3/packaging.paks.yaml +79 -0
  303. package/knowledge/baldursgate3/process.launch.yaml +34 -0
  304. package/knowledge/baldursgate3/progressions.yaml +92 -0
  305. package/knowledge/baldursgate3/publishing.modio-nexus.yaml +170 -0
  306. package/knowledge/baldursgate3/publishing.toolkit-modio.yaml +135 -0
  307. package/knowledge/baldursgate3/races.progression.yaml +228 -0
  308. package/knowledge/baldursgate3/scriptextender.console.yaml +257 -0
  309. package/knowledge/baldursgate3/scriptextender.yaml +252 -0
  310. package/knowledge/baldursgate3/stats.boosts.yaml +293 -0
  311. package/knowledge/baldursgate3/stats.equipment-kits.yaml +69 -0
  312. package/knowledge/baldursgate3/stats.interrupts.yaml +45 -0
  313. package/knowledge/baldursgate3/stats.itemcombos.yaml +65 -0
  314. package/knowledge/baldursgate3/stats.spells.yaml +293 -0
  315. package/knowledge/baldursgate3/stats.weapons.yaml +210 -0
  316. package/knowledge/baldursgate3/toolchain.divine.yaml +179 -0
  317. package/knowledge/baldursgate3/toolchain.lslib-formats.yaml +242 -0
  318. package/knowledge/baldursgate3/toolkit.levels.yaml +177 -0
  319. package/knowledge/baldursgate3/ui.icons-atlas.yaml +78 -0
  320. package/knowledge/baldursgate3/ui.icons.yaml +412 -0
  321. package/knowledge/baldursgate3/ui.mcm.yaml +161 -0
  322. package/knowledge/baldursgate3/vfx.materials.yaml +174 -0
  323. package/knowledge/baldursgate3/visuals.characterfix.yaml +73 -0
  324. package/knowledge/cyberpunk2077/animations.anims.yaml +118 -0
  325. package/knowledge/cyberpunk2077/anims.archivexl.yaml +163 -0
  326. package/knowledge/cyberpunk2077/anims.authoring.yaml +579 -0
  327. package/knowledge/cyberpunk2077/anims.encoder.yaml +156 -0
  328. package/knowledge/cyberpunk2077/anims.graph.yaml +629 -0
  329. package/knowledge/cyberpunk2077/anims.method.yaml +360 -0
  330. package/knowledge/cyberpunk2077/anims.pipeline.yaml +352 -0
  331. package/knowledge/cyberpunk2077/anims.roundtrip.yaml +222 -0
  332. package/knowledge/cyberpunk2077/anims.sets.yaml +176 -0
  333. package/knowledge/cyberpunk2077/archivexl.bodytypes.yaml +149 -0
  334. package/knowledge/cyberpunk2077/archivexl.dynamic-appearances.yaml +218 -0
  335. package/knowledge/cyberpunk2077/archivexl.manifest.yaml +214 -0
  336. package/knowledge/cyberpunk2077/audio.events.yaml +168 -0
  337. package/knowledge/cyberpunk2077/audio.sounds.yaml +164 -0
  338. package/knowledge/cyberpunk2077/audio.voicesets.yaml +146 -0
  339. package/knowledge/cyberpunk2077/cet.sandbox.yaml +219 -0
  340. package/knowledge/cyberpunk2077/clothing.garments.yaml +283 -0
  341. package/knowledge/cyberpunk2077/clothing.refits.yaml +215 -0
  342. package/knowledge/cyberpunk2077/codeware.overview.yaml +111 -0
  343. package/knowledge/cyberpunk2077/codeware.systems.yaml +192 -0
  344. package/knowledge/cyberpunk2077/drones.combat.yaml +416 -0
  345. package/knowledge/cyberpunk2077/drones.control.yaml +552 -0
  346. package/knowledge/cyberpunk2077/entities.appearance.yaml +166 -0
  347. package/knowledge/cyberpunk2077/equipmentex.slots.yaml +151 -0
  348. package/knowledge/cyberpunk2077/fx.effects.yaml +246 -0
  349. package/knowledge/cyberpunk2077/fx.lights.yaml +171 -0
  350. package/knowledge/cyberpunk2077/hair.modding.yaml +145 -0
  351. package/knowledge/cyberpunk2077/items.wiring.yaml +246 -0
  352. package/knowledge/cyberpunk2077/loadorder.archives.yaml +71 -0
  353. package/knowledge/cyberpunk2077/mesh.blender.yaml +209 -0
  354. package/knowledge/cyberpunk2077/nativedb.dump.yaml +98 -0
  355. package/knowledge/cyberpunk2077/npc.appearance.yaml +275 -0
  356. package/knowledge/cyberpunk2077/npc.behaviour.yaml +128 -0
  357. package/knowledge/cyberpunk2077/npc.locomotion.yaml +490 -0
  358. package/knowledge/cyberpunk2077/packaging.deploy.yaml +175 -0
  359. package/knowledge/cyberpunk2077/packaging.variants.yaml +176 -0
  360. package/knowledge/cyberpunk2077/player.control.yaml +918 -0
  361. package/knowledge/cyberpunk2077/process.assetbuild.yaml +154 -0
  362. package/knowledge/cyberpunk2077/process.lessons.yaml +276 -0
  363. package/knowledge/cyberpunk2077/quests.minor.yaml +46 -0
  364. package/knowledge/cyberpunk2077/quests.scenes.yaml +282 -0
  365. package/knowledge/cyberpunk2077/quickhacks.tiers.yaml +41 -0
  366. package/knowledge/cyberpunk2077/red4ext.api.yaml +645 -0
  367. package/knowledge/cyberpunk2077/red4ext.plugins.yaml +124 -0
  368. package/knowledge/cyberpunk2077/redhottools.hotreload.yaml +245 -0
  369. package/knowledge/cyberpunk2077/redscript.compile-log.yaml +76 -0
  370. package/knowledge/cyberpunk2077/redscript.modules.yaml +118 -0
  371. package/knowledge/cyberpunk2077/toolchain.wolvenkit.yaml +163 -0
  372. package/knowledge/cyberpunk2077/tweakdb.loot-recipes.yaml +184 -0
  373. package/knowledge/cyberpunk2077/tweakdb.melee.yaml +352 -0
  374. package/knowledge/cyberpunk2077/tweakdb.weapons.yaml +325 -0
  375. package/knowledge/cyberpunk2077/tweakxl.hotreload.yaml +151 -0
  376. package/knowledge/cyberpunk2077/tweakxl.yaml-syntax.yaml +208 -0
  377. package/knowledge/cyberpunk2077/ui.icons.yaml +259 -0
  378. package/knowledge/cyberpunk2077/ui.inkatlas.yaml +81 -0
  379. package/knowledge/cyberpunk2077/ui.modsettings.yaml +204 -0
  380. package/knowledge/cyberpunk2077/vehicles.control.yaml +475 -0
  381. package/knowledge/cyberpunk2077/vehicles.dashboard-ui.yaml +203 -0
  382. package/knowledge/cyberpunk2077/vehicles.entities.yaml +195 -0
  383. package/knowledge/cyberpunk2077/vehicles.wiring.yaml +137 -0
  384. package/knowledge/cyberpunk2077/wolvenkit.cli.yaml +167 -0
  385. package/knowledge/cyberpunk2077/workspot.system.yaml +55 -0
  386. package/knowledge/cyberpunk2077/world.interactions.yaml +41 -0
  387. package/knowledge/cyberpunk2077/world.loot-container.yaml +167 -0
  388. package/knowledge/cyberpunk2077/world.sectors.yaml +233 -0
  389. package/knowledge/eldenring/formats.binders.yaml +237 -0
  390. package/knowledge/eldenring/launcher.me3.yaml +230 -0
  391. package/knowledge/eldenring/launcher.modengine2.yaml +119 -0
  392. package/knowledge/eldenring/params.paramdef.yaml +149 -0
  393. package/knowledge/eldenring/params.regulation.yaml +142 -0
  394. package/knowledge/eldenring/saves.online.yaml +118 -0
  395. package/knowledge/eldenring/toolchain.cli.yaml +256 -0
  396. package/knowledge/nivalisnights/modding.runtime.yaml +157 -0
  397. package/knowledge/skyrimse/archives.bsa.yaml +212 -0
  398. package/knowledge/skyrimse/install.detection.yaml +41 -0
  399. package/knowledge/skyrimse/loadorder.files.yaml +242 -0
  400. package/knowledge/skyrimse/plugins.esl.yaml +189 -0
  401. package/knowledge/skyrimse/plugins.format.yaml +224 -0
  402. package/knowledge/skyrimse/skse.runtime.yaml +283 -0
  403. package/knowledge/skyrimse/toolchain.xedit-spriggit.yaml +336 -0
  404. package/knowledge/stardewvalley/contentpatcher.format.yaml +338 -0
  405. package/knowledge/stardewvalley/distribution.channels.yaml +236 -0
  406. package/knowledge/stardewvalley/game.versions.yaml +202 -0
  407. package/knowledge/stardewvalley/install.layout.yaml +277 -0
  408. package/knowledge/stardewvalley/smapi.loader.yaml +284 -0
  409. package/knowledge/stardewvalley/smapi.logs.yaml +329 -0
  410. package/knowledge/stardewvalley/smapi.manifest.yaml +293 -0
  411. package/knowledge/stardewvalley/toolchain.build.yaml +261 -0
  412. package/knowledge/stardewvalley/wiki.dataformat.yaml +130 -0
  413. package/knowledge/subnautica2/game.build.yaml +331 -0
  414. package/knowledge/subnautica2/modding.state.yaml +210 -0
  415. package/knowledge/subnautica2/ue5.containers.yaml +72 -0
  416. package/knowledge/subnautica2/ue5.paks.yaml +203 -0
  417. package/knowledge/subnautica2/ue5.tooling.yaml +175 -0
  418. package/knowledge/subnautica2/ue5.ue4ss.yaml +203 -0
  419. package/knowledge/valheim/bepinex.loader.yaml +247 -0
  420. package/knowledge/valheim/bepinex.plugins.yaml +251 -0
  421. package/knowledge/valheim/game.versions.yaml +321 -0
  422. package/knowledge/valheim/install.layout.yaml +216 -0
  423. package/knowledge/valheim/jotunn.library.yaml +334 -0
  424. package/knowledge/valheim/thunderstore.packaging.yaml +217 -0
  425. package/knowledge/valheim/toolchain.build.yaml +111 -0
  426. package/package.json +29 -0
  427. package/scaffolds/baldursgate3/new-class-injection.yaml +148 -0
  428. package/scaffolds/baldursgate3/new-item.yaml +264 -0
  429. package/scaffolds/baldursgate3/new-mod.yaml +174 -0
  430. package/scaffolds/baldursgate3/new-passive.yaml +100 -0
  431. package/scaffolds/baldursgate3/new-project.yaml +118 -0
  432. package/scaffolds/baldursgate3/new-quest-stub.yaml +159 -0
  433. package/scaffolds/baldursgate3/new-spell.yaml +102 -0
  434. package/scaffolds/baldursgate3/new-status.yaml +119 -0
  435. package/scaffolds/baldursgate3/sequences/subclass-kit.yaml +50 -0
  436. package/scaffolds/cyberpunk2077/edit-tweak.yaml +70 -0
  437. package/scaffolds/cyberpunk2077/mesh-export-preset.yaml +170 -0
  438. package/scaffolds/cyberpunk2077/new-entity-patch.yaml +255 -0
  439. package/scaffolds/cyberpunk2077/new-garment-refit.yaml +279 -0
  440. package/scaffolds/cyberpunk2077/new-item-chain.yaml +548 -0
  441. package/scaffolds/cyberpunk2077/new-localization.yaml +130 -0
  442. package/scaffolds/cyberpunk2077/new-mod-settings.yaml +133 -0
  443. package/scaffolds/cyberpunk2077/new-player-replacer.yaml +1003 -0
  444. package/scaffolds/cyberpunk2077/new-project.yaml +157 -0
  445. package/scaffolds/cyberpunk2077/new-sector-node.yaml +156 -0
  446. package/scaffolds/cyberpunk2077/new-tweak.yaml +121 -0
  447. package/scaffolds/cyberpunk2077/new-vehicle-livery.yaml +148 -0
  448. package/scaffolds/cyberpunk2077/new-workspot-entity.yaml +177 -0
  449. package/scaffolds/cyberpunk2077/sequences/iconic-weapon.yaml +72 -0
  450. package/scaffolds/cyberpunk2077/sequences/quickhack-takeover.yaml +213 -0
  451. package/scaffolds/stardewvalley/new-cp-patch.yaml +106 -0
  452. package/scaffolds/stardewvalley/new-csharp-mod.yaml +195 -0
  453. package/scaffolds/stardewvalley/new-project.yaml +184 -0
  454. package/scaffolds/stardewvalley/sequences/content-pack.yaml +31 -0
  455. package/scripts/mw-tool.mjs +184 -0
@@ -0,0 +1,210 @@
1
+ game: subnautica2
2
+ topic: modding.state
3
+ title: Subnautica 2 modding — official stance, community toolchain, distribution
4
+ facts:
5
+ - id: subnautica2.modding.no-official-mod-support-announced
6
+ claim: As of 2026-09-11, nearly four months after Early Access launch, Unknown Worlds and Krafton
7
+ have announced no official mod support, no modkit, no Steam Workshop and no mod.io integration
8
+ for Subnautica 2.
9
+ status: community
10
+ verified_on: 0.10.0 (CL 113109)
11
+ source: "Negative result across four places such a statement would appear, all read 2026-09-11: the
12
+ Steam store page (https://store.steampowered.com/app/1962700/ — no mention of Workshop, mod
13
+ support or UGC anywhere, including the Early Access box); Unknown Worlds' own EA 1.1 post
14
+ (https://unknownworlds.com/en/news/subnautica-2-adaptive-measures-update); the Update History
15
+ wiki covering all eight releases (https://wiki.subnautica.com/sn2/Update_History); and the
16
+ shipping build itself, which mounts no mod loader."
17
+ tags:
18
+ - official
19
+ - mod-support
20
+ - modkit
21
+ - workshop
22
+ - modio
23
+ - absent
24
+ - stance
25
+ detail: 'There is a reported qualifier that could NOT be read first-hand: an Unknown Worlds
26
+ help-centre article "Will there be any mod support?"
27
+ (https://support.subnautica.com/hc/en-us/articles/57020140859929-Will-there-be-any-mod-support,
28
+ reportedly last updated 2026-04-16) is said to state that official modding support will not be
29
+ available initially but that they would like to consider it for future releases. That page
30
+ returns HTTP 403 to automated fetches on every attempt, so the wording is a search-snippet
31
+ paraphrase and must not be quoted as a citation until a human opens it. Separately, no source
32
+ says mods are DISALLOWED; the EULA was not examined. Read this as "nothing announced", not as
33
+ a prohibition.'
34
+ - id: subnautica2.modding.developer-tolerates-mods-in-patch-notes
35
+ claim: Unknown Worlds acknowledges and tolerates community mods in its own patch notes. The hotfix
36
+ posts carry, verbatim, "If you play Subnautica 2 with mods, please temporarily disable,
37
+ remove, or uninstall them before launching the game following the hotfix."
38
+ status: community
39
+ verified_on: 0.10.0 (CL 113109)
40
+ source: https://unknownworlds.com/en/news/subnautica-2-buddy-system-hotfix-1 ("Subnautica 2 Early
41
+ Access Buddy System Hotfix 1", dated 09.01.26), read first-hand 2026-09-11; the advisory
42
+ appears in a dedicated section near the end of the article.
43
+ tags:
44
+ - official
45
+ - stance
46
+ - mods
47
+ - patch-notes
48
+ - compatibility
49
+ - breakage
50
+ detail: "The passage continues that community mods will not be updated for compatibility with the
51
+ hotfix and may cause crashes on launch, and that players can re-enable them once mod creators
52
+ have updated. Read it as a crash-avoidance advisory, NOT an anti-mod or anti-cheat statement:
53
+ it assumes a mod scene exists and that mod authors will ship compatibility updates. It also
54
+ confirms from the developer's own mouth that mods break on every patch, which with a roughly
55
+ six-week update cadence (subnautica2.game.release-cadence-and-current-build) is the steady
56
+ state rather than an exception — a compat rule should treat it as `warn`, not `block`. Note
57
+ the advisory is not universal: the EA 1.2 \"Buddy System\" feature post (2026-08-19) mentions
58
+ mods nowhere."
59
+ - id: subnautica2.modding.community-org-and-modkit
60
+ claim: An unofficial modding organisation, `Subnautica2Modding` (distinct from the first game's
61
+ `SubnauticaModding`), formed at launch and maintains an unofficial modkit —
62
+ `Subnautica2Modding/Subnautica2-Project`, MIT licensed, built on a custom build of Unreal
63
+ Engine 5.6 about 10 GB smaller than stock, needing roughly 60 GB on disk. Last updated
64
+ 2026-09-07.
65
+ status: community
66
+ verified_on: 0.10.0 (CL 113109)
67
+ source: https://github.com/Subnautica2Modding/Subnautica2-Project (README and repository metadata),
68
+ read first-hand 2026-09-11
69
+ tags:
70
+ - modkit
71
+ - community
72
+ - unofficial
73
+ - editor
74
+ - ue5.6
75
+ - authoring
76
+ detail: "The modkit contains NO game source: verbatim, \"All code that exists in the project are
77
+ 'stubs'—dummy code that defines the signature of game code\", and it loads the user's own
78
+ installed cooked assets read-only, so it requires the game installed. Its companion
79
+ documentation site is https://subnautica2modding.github.io/ (\"This site provides guides,
80
+ references, and tutorials for creating mods for Subnautica 2\", last updated 2026-06-08),
81
+ which documents four mod types — Lua, C++/scripting, asset replacement and blueprint script —
82
+ and names UE4SS, FModel, Visual Studio, VS Code, Git, Unreal Engine and Rust as the toolchain.
83
+ The Subnautica 2 modding Discord invite is the same as the first game's, so the two
84
+ communities share a server."
85
+ - id: subnautica2.modding.two-mod-paths-one-needs-no-loader
86
+ claim: The modkit offers two mod paths. Blueprint mods are packaged as pak chunks and REQUIRE an
87
+ external loader such as UE4SS. Plugin mods (content-only DLC plugins) are "installed to a
88
+ location in the game that the engine will load without any external/third party mod loader
89
+ required".
90
+ status: community
91
+ verified_on: 0.10.0 (CL 113109)
92
+ source: https://github.com/Subnautica2Modding/Subnautica2-Project README, read first-hand 2026-09-11
93
+ tags:
94
+ - modkit
95
+ - blueprint
96
+ - plugin
97
+ - dlc
98
+ - loader
99
+ - anticheat
100
+ - strategy
101
+ detail: "The loader-free plugin-mod path is the strategically important one: with no DLL injection
102
+ it side-steps both the unresolved anti-cheat question
103
+ (subnautica2.game.eos-anticheat-present-but-not-engaged) and UE4SS's rolling-prerelease
104
+ version problem (subnautica2.ue4ss.ue56-only-in-experimental). It covers items, crafting
105
+ recipes, biomods, scannables, buildings, databank entries and story goals — i.e. data-asset
106
+ content rather than new logic. Blueprint mods cover custom fauna, flora, biomes, items and
107
+ recipes, and are packaged with a plugin called SN2 Mod Tools; plugin mods are packaged with
108
+ Alpakit."
109
+ - id: subnautica2.modding.logicmods-is-folder-per-mod
110
+ claim: Subnautica 2's blueprint mods install as one FOLDER per mod under
111
+ `<install>\Subnautica2\Subnautica2\Content\Paks\LogicMods\`, containing the full IoStore
112
+ triplet named after the folder — `MyMod.pak`, `MyMod.utoc` and `MyMod.ucas`. Plugin mods
113
+ install to `Mods/` under the game directory.
114
+ status: community
115
+ verified_on: 0.10.0 (CL 113109)
116
+ source: https://github.com/Subnautica2Modding/Subnautica2-Project README, read first-hand 2026-09-11
117
+ — verbatim, "Navigate to `<steam install>\Subnautica2\Subnautica2\Content\Paks\LogicMods\` and
118
+ create a folder for your mod", with packaged file names required to match the mod folder name.
119
+ tags:
120
+ - logicmods
121
+ - paths
122
+ - modroot
123
+ - triplet
124
+ - iostore
125
+ - layout
126
+ - deploy
127
+ detail: "This differs from the generic UE4SS description of LogicMods, which has bare `.pak` files
128
+ sitting directly in the directory (subnautica2.ue4ss.logicmods-blueprint-path) — the
129
+ folder-per-mod shape and the full triplet are a Subnautica 2 specific, and follow from the
130
+ game being IoStore-only. Two validator rules fall straight out: the triplet must be complete
131
+ (a missing `.ucas` is a silent no-op) and the file basenames must equal the folder name. One
132
+ caveat to carry: the README writes the plugin-mod path as `<game install dir>/Subnautica
133
+ 2/Mods/` with a space, while every path observed in the game's own log spells it `Subnautica2`
134
+ with none; treat that segment as unconfirmed until checked on a real install."
135
+ - id: subnautica2.modding.ue4ss-fork-archived-upstream-covers-it
136
+ claim: A game-specific UE4SS fork, `Subnautica2Modding/Subnautica2-UE4SS`, shipped within weeks of
137
+ launch (1.0.0-pre.1 on 2026-05-09, 1.0.0 on 2026-05-27) and was then ARCHIVED on 2026-06-10,
138
+ its release note saying the fork may no longer be necessary and directing users to upstream
139
+ UE4SS.
140
+ status: community
141
+ verified_on: 0.10.0 (CL 113109)
142
+ source: https://github.com/Subnautica2Modding/Subnautica2-UE4SS and its releases, read 2026-09-11
143
+ tags:
144
+ - ue4ss
145
+ - fork
146
+ - archived
147
+ - loader
148
+ - upstream
149
+ - community
150
+ detail: "This is a positive signal, not abandonment: it means Subnautica 2 is covered by upstream
151
+ UE4SS with no game-specific fork to track. But \"upstream\" here means `experimental-latest`
152
+ specifically, since UE 5.6 support exists nowhere else
153
+ (subnautica2.ue4ss.ue56-only-in-experimental). Corroboration comes from an unrelated
154
+ direction: Nexus Mods' Vortex extension for the game routes UE4SS Lua mods to
155
+ `Binaries/Win64/ue4ss/Mods/`, which is the UE4SS EXPERIMENTAL install layout, not the stable
156
+ one (subnautica2.ue4ss.install-layout-stable-vs-experimental)."
157
+ - id: subnautica2.modding.distribution-channels
158
+ claim: Subnautica 2 mods are distributed on Nexus Mods (with a Vortex game extension) and CurseForge
159
+ (~100 projects). Thunderstore does NOT host a Subnautica 2 community, in contrast to the first
160
+ game.
161
+ status: community
162
+ verified_on: 0.10.0 (CL 113109)
163
+ source: Nexus support established WITHOUT fetching nexusmods.com, via
164
+ https://github.com/Nexus-Mods/game-subnautica2 ("Vortex 2.0+ game extension for Subnautica 2
165
+ (UE5 / UE4SS)", repo archived 2026-06-16); https://www.curseforge.com/subnautica-2 (categories
166
+ Mods, Blueprints, UE4SS Mods, Configs); https://thunderstore.io/c/subnautica-2/ returns 404
167
+ (confirmed negative). All read 2026-09-11.
168
+ tags:
169
+ - distribution
170
+ - nexus
171
+ - vortex
172
+ - curseforge
173
+ - thunderstore
174
+ - modio
175
+ detail: "The Vortex extension is also a useful source for install paths, since it must know them:
176
+ pak mods → `Content/Paks/`, LogicMods → `Content/Paks/LogicMods/`, UE4SS Lua →
177
+ `Binaries/Win64/ue4ss/Mods/`, IoStore `.utoc`/`.ucas` → `Content/Paks/`, plus root and
178
+ Content/Config folder mods. It auto-discovers Steam app 1962700, an Epic catalog item, and
179
+ Xbox/Game Pass — and records that Xbox builds use `WinGDK` in place of `Win64` in the binaries
180
+ path. No mod.io integration was found for this game, consistent with the shipping build making
181
+ no `api.mod.io` requests (subnautica2.modding.no-official-mod-support-announced)."
182
+ - id: subnautica2.modding.nothing-transfers-from-subnautica-1
183
+ claim: Nothing mechanical transfers from the first Subnautica's modding model. The original is
184
+ Unity/Mono, loaded by BepInEx 5 with Nautilus as the modding API; the sequel is Unreal Engine
185
+ 5.6.1 with UE4SS or loader-free DLC plugins. The only thing the two share is the community and
186
+ its Discord.
187
+ status: community
188
+ verified_on: 0.10.0 (CL 113109)
189
+ source: "Subnautica 1 side, all read 2026-09-11: Tobey's BepInEx Pack
190
+ (https://github.com/toebeann/BepInEx.Subnautica, latest v5.4.23-pack.3.1.1, 2025-05-26,
191
+ bundling BepInEx 5.4.23.5 — the Mono line; BepInEx 6 is the IL2CPP line); Nautilus
192
+ (https://github.com/SubnauticaModding/Nautilus, \"a continuation of SMLHelper with an improved
193
+ codebase\"); QModManager (https://github.com/SubnauticaModding/QModManager, final release
194
+ 4.4.4 on 2024-10-31, repo archived 2026-05-13, \"QModManager is no longer supported. We're
195
+ migrating to BepInEx.\")."
196
+ tags:
197
+ - subnautica1
198
+ - bepinex
199
+ - nautilus
200
+ - qmodmanager
201
+ - contrast
202
+ - unity
203
+ detail: Two premises worth correcting because they circulate widely. First,
204
+ `subnauticamodding.github.io` is NOT a wiki — its root is a 404 and the domain hosts the
205
+ Nautilus docfx API docs at `/Nautilus/` (working entry point
206
+ `/Nautilus/guides/dev-setup.html`); the Subnautica Modding wiki is at
207
+ subnauticamodding.wiki.gg. Second, `mod.json` is not a BepInEx concept — it belongs to the
208
+ archived QModManager, and a modern Subnautica 1 mod has no manifest file at all, taking its
209
+ identity from the `[BepInPlugin]` attribute on a DLL in `Subnautica\BepInEx\plugins\`. Do not
210
+ let the shared franchise name imply shared mechanics.
@@ -0,0 +1,72 @@
1
+ game: subnautica2
2
+ topic: ue5.containers
3
+ title: what a packed Unreal container reveals from its header and footer alone
4
+ facts:
5
+ - id: subnautica2.ue5.pak-footer-and-index-head
6
+ claim: A legacy `.pak` ends with a footer whose fixed core is, in order, the little-endian magic
7
+ 0x5A6F12E1, the version major (u32, 1 to 11), the index offset (u64), the index size (u64) and
8
+ a 20-byte hash; version 4 and up put an `encrypted` byte before the magic, 7 and up a 16-byte
9
+ encryption key GUID before that, 9 adds a `frozen` byte after the hash, and 8 and up append
10
+ four (8A) or five (8B and later) 32-byte compression-method names. The index the footer points
11
+ at begins with the mount point as an Unreal FString, so the mount point is readable without
12
+ unpacking anything unless the index is encrypted.
13
+ status: community
14
+ source: repak/src/footer.rs `Footer::read` (the field order and the version-gated fields);
15
+ repak/src/lib.rs `Version::size()` (the same arithmetic) and `VersionMajor` (Unknown 0 ..
16
+ Fnv64BugFix 11); repak/src/pak.rs `Index::read` — `let mount_point = index.read_string()?` as
17
+ the first read after seeking to `footer.index_offset`
18
+ tags:
19
+ - pak
20
+ - footer
21
+ - magic
22
+ - version
23
+ - index
24
+ - mount-point
25
+ - repak
26
+ - format
27
+ - validator
28
+ detail: "`src/surfaces/subnautica2/paks.ts` scans the last 256 bytes for the magic and validates the
29
+ index bounds behind it rather than trial-reading each version's footer size as repak does; the
30
+ effect is the same. `subnautica2.paks.mount-point` compares the string it finds with
31
+ `../../../` (`subnautica2.game.pak-mount-point`)."
32
+ related:
33
+ - subnautica2.game.pak-mount-point
34
+ - subnautica2.ue5.repak-is-legacy-pak-only
35
+ - id: subnautica2.ue5.fstring-encoding
36
+ claim: "An Unreal FString on disk is an i32 length followed by the characters: a positive length
37
+ means that many single-byte characters including a terminating NUL, a negative length means
38
+ that many UTF-16LE code units including the terminator."
39
+ status: community
40
+ source: repak/src/ext.rs `read_string` — `let len = self.read_i32::<LE>()?; if len < 0 { ...
41
+ read_u16 ... String::from_utf16 } else { ... }`
42
+ tags:
43
+ - fstring
44
+ - encoding
45
+ - utf16
46
+ - pak
47
+ - format
48
+ - id: subnautica2.ue5.utoc-header
49
+ claim: An IoStore `.utoc` begins with the 16-byte magic `-==--==--==--==-`, then the TOC version as
50
+ one byte (Invalid 0, Initial 1, DirectoryIndex 2, PartitionSize 3, PerfectHash 4,
51
+ PerfectHashWithOverflow 5, OnDemandMetaData 6, RemovedOnDemandMetaData 7,
52
+ ReplaceIoChunkHashWithIoHash 8), three reserved bytes, the header size (u32) and the TOC entry
53
+ count (u32), all little-endian.
54
+ status: community
55
+ source: 'retoc src/lib.rs — `struct FIoStoreTocHeader { toc_magic: [u8; 16], version:
56
+ EIoStoreTocVersion, reserved0: u8, reserved1: u16, toc_header_size: u32, toc_entry_count: u32,
57
+ ... }`, `const MAGIC: [u8; 16] = *b"-==--==--==--==-"`, and the `EIoStoreTocVersion` enum in
58
+ declaration order'
59
+ tags:
60
+ - utoc
61
+ - iostore
62
+ - toc
63
+ - magic
64
+ - version
65
+ - retoc
66
+ - format
67
+ - validator
68
+ detail: Enough for `subnautica2.utoc.header` to tell a container from a renamed file and to notice
69
+ an empty one; which TOC version the 5.6.1 launch build writes has not been read from disk (the
70
+ game is not installed here), so the rule accepts any non-zero version.
71
+ related:
72
+ - subnautica2.ue5.iostore-utoc-ucas-split
@@ -0,0 +1,203 @@
1
+ game: subnautica2
2
+ topic: ue5.paks
3
+ title: Unreal Engine 5 packaging — paks, IoStore containers, load order, signing
4
+ facts:
5
+ - id: subnautica2.ue5.iostore-utoc-ucas-split
6
+ claim: With IoStore (the Zen Loader) enabled, UE5 packages all package data, bulk data and shader
7
+ data into `.utoc` + `.ucas` container pairs. The `.utoc` describes the container — chunk size
8
+ and offset, compression format, and whether chunks are encrypted — and the `.ucas` holds the
9
+ actual data.
10
+ status: community
11
+ source: https://dev.epicgames.com/documentation/en-us/unreal-engine/zen-loader-in-unreal-engine
12
+ ("Zen Loader in Unreal Engine"), read 2026-09-11
13
+ tags:
14
+ - iostore
15
+ - zen
16
+ - utoc
17
+ - ucas
18
+ - packaging
19
+ - ue5
20
+ - generic
21
+ detail: "The same page documents that IoStore is switched off by setting the `bUseIoStore` boolean
22
+ to `False`. Practical consequence for modding: on a game shipped with IoStore, a mod that
23
+ provides only a legacy `.pak` for content the Zen Loader expects in a container will mount
24
+ without error and deliver nothing. Converting between the two forms is what `retoc` exists for
25
+ (subnautica2.ue5.retoc-to-zen-to-legacy)."
26
+ - id: subnautica2.ue5.cooked-asset-triplet
27
+ claim: A cooked UE asset is split across `.uasset` and possibly `.uexp` and `.ubulk` files, and all
28
+ of them must be copied together for the asset to work.
29
+ status: community
30
+ source: https://dev.epicgames.com/documentation/en-us/unreal-engine/working-with-cooked-content-in-the-unreal-engine
31
+ ("Working with Cooked Content in the Unreal Engine"), read 2026-09-11
32
+ tags:
33
+ - cooked
34
+ - uasset
35
+ - uexp
36
+ - ubulk
37
+ - assets
38
+ - ue5
39
+ - generic
40
+ detail: "Epic states only *that* the split happens, and notes the page \"currently only applies to
41
+ content for the Windows platform\". What each file holds is NOT Epic-documented: the usual
42
+ breakdown — `.uasset` the package header, `.uexp` the serialized export data, `.ubulk`
43
+ streamable bulk data — comes from UEViewer's FAQ
44
+ (https://github.com/gildor2/UEViewer/blob/master/Docs/FAQ.md), which says the engine \"strips
45
+ package header (which is in .uasset) from data — which is in .uexp file\", and that bulk data
46
+ is \"stored either at the end of uasset file, or in separate ubulk file\". Cite that as
47
+ community, not Epic."
48
+ - id: subnautica2.ue5.patch-pak-p-suffix
49
+ claim: 'A `_p` suffix on a pak filename gives it mount priority over other paks. Epic documents
50
+ this: "To prioritize patches, the mounting system uses a `_p` at the end of the filename to
51
+ determine that it gets priority over other PAK files", and the file "can be renamed, but you
52
+ need to include the `_p.pak` at the end of the file name".'
53
+ status: community
54
+ source: https://dev.epicgames.com/documentation/unreal-engine/how-to-create-a-patch-in-unreal-engine
55
+ ("How to Create a Patch in Unreal Engine"), read 2026-09-11
56
+ tags:
57
+ - pak
58
+ - load-order
59
+ - priority
60
+ - patch
61
+ - _p
62
+ - ue5
63
+ - generic
64
+ detail: The same page states a patch pak "will automatically be mounted when it is located on the
65
+ device in any of the PAK search directories set in `FPakPlatformFile::GetPakFolders`". This is
66
+ the one Epic-documented load priority mechanism and should be preferred in writing over the
67
+ `~mods` convention wherever both would work.
68
+ - id: subnautica2.ue5.tilde-mods-is-a-convention
69
+ claim: "`Content/Paks/~mods/` is a COMMUNITY convention, not an Epic feature. Epic documents no
70
+ `~mods` folder anywhere. It works only because `~` sorts late in the alphabetical scan of the
71
+ pak search directories, so paks there mount later and win — the same ordering mechanism the
72
+ documented `_p` suffix exploits by a different route."
73
+ status: community
74
+ source: 'Negative result: searching dev.epicgames.com for "~mods" returns nothing (checked
75
+ 2026-09-11). The mechanism is Epic-documented at
76
+ https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/PakFile/FPakPlatformFile
77
+ (`GetPakFolders`, `GetPakOrderFromPakFilePath`, `Mount`), read 2026-09-11.'
78
+ tags:
79
+ - tilde-mods
80
+ - load-order
81
+ - convention
82
+ - pak
83
+ - ue5
84
+ - generic
85
+ - caveat
86
+ detail: "Within `~mods`, ordering is by filename and later wins. Because it is a convention rather
87
+ than a feature, whether any particular game honours it must be confirmed per game rather than
88
+ assumed — for Subnautica 2 that is an open question: the game's own unofficial modkit routes
89
+ mods to `Content/Paks/LogicMods/` and `Mods/` and never mentions `~mods`."
90
+ - id: subnautica2.ue5.mount-order-and-mount-point
91
+ claim: "`FPakPlatformFile::Mount(InPakFilename, PakOrder, InPath, ...)` takes a mount priority
92
+ (`PakOrder`) and a mount point (`InPath`, \"Path to mount the pak at\"). The engine's built-in
93
+ default ordering is, per its own doc comment, \"game main pak -> game content -> engine
94
+ content -> saved dir\"."
95
+ status: community
96
+ source: https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/PakFile/FPakPlatformFile
97
+ (`Mount`, `GetPakOrderFromPakFilePath`), read 2026-09-11
98
+ tags:
99
+ - mount
100
+ - mount-point
101
+ - load-order
102
+ - pak
103
+ - ue5
104
+ - generic
105
+ detail: "The mount point is the load-bearing part for mod authoring: a pak built with the wrong
106
+ mount point mounts cleanly and resolves its files to the wrong virtual paths, so nothing in it
107
+ is ever found and nothing is logged. The engine-root-relative `../../../` is the usual correct
108
+ value for game content and is also `repak`'s default
109
+ (subnautica2.ue5.repak-is-legacy-pak-only). Epic's API doc adds that in most cases `Mount`
110
+ \"should not be called directly. Instead use the mounting delegates in `FCoreDelegates`.\""
111
+ - id: subnautica2.ue5.pak-signing-and-encryption-settings
112
+ claim: 'Pak signing and encryption are project settings, exposed by `UCryptoKeysSettings`:
113
+ `bEnablePakSigning` ("Enable signing of pak files, to prevent tampering of the data"),
114
+ `bEncryptPakIndex`, `bEncryptUAssetFiles`, `bEncryptAllAssetFiles`, `EncryptionKey`, and the
115
+ RSA `SigningModulus` / `SigningPrivateExponent` / `SigningPublicExponent`.'
116
+ status: community
117
+ source: https://dev.epicgames.com/documentation/unreal-engine/API/Plugins/CryptoKeys/UCryptoKeysSettings,
118
+ read 2026-09-11; `FPakSignatureFile` ("Structure which describes the content of the pak `.sig`
119
+ files") at
120
+ https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/PakFile/FPakSignatureFile
121
+ tags:
122
+ - signing
123
+ - encryption
124
+ - crypto
125
+ - sig
126
+ - security
127
+ - ue5
128
+ - generic
129
+ detail: When signing is on, the build emits `.sig` files holding SHA1 chunk hashes and an RSA
130
+ signature, and a mod pak that does not satisfy them is rejected — the most likely hard blocker
131
+ to pak modding on any given title. Runtime AES keys are registered through
132
+ `FPakPlatformFile::RegisterEncryptionKey`. Note that `crypto.json` and UnrealPak's
133
+ `-cryptokeys=` flag, which every tooling guide uses, are community-documented and appear
134
+ nowhere in Epic's docs. An all-zero `SignatureHash` in the log's TOC line is how an unsigned
135
+ container presents.
136
+ - id: subnautica2.ue5.log-location-and-verbosity-ladder
137
+ claim: A UE game writes its logs to `<Project>/Saved/Logs`, keeping previous sessions alongside the
138
+ current one. The verbosity ladder is Fatal, Error, Warning, Display, Log, Verbose,
139
+ VeryVerbose; Display goes to console and file, `Log` goes only to the log file, and
140
+ Verbose/VeryVerbose only when explicitly enabled.
141
+ status: community
142
+ source: https://dev.epicgames.com/documentation/en-us/unreal-engine/logging-in-unreal-engine
143
+ ("Logging in Unreal Engine"), read 2026-09-11
144
+ tags:
145
+ - logs
146
+ - saved
147
+ - verbosity
148
+ - ue5
149
+ - generic
150
+ - triage
151
+ detail: For a packaged Windows game the directory resolves under
152
+ `%LOCALAPPDATA%\<ProjectName>\Saved\Logs`. Epic documents the location and the ladder but
153
+ neither the log line format nor the backup filename pattern — see
154
+ subnautica2.ue5.log-line-format.
155
+ - id: subnautica2.ue5.log-line-format
156
+ claim: "UE log lines are `[YYYY.MM.DD-HH.MM.SS:mmm][frame]LogCategory: Verbosity: message`, with the
157
+ frame counter space-padded to three columns — but the verbosity token is OMITTED for the
158
+ default `Log` level, and the whole bracketed prefix can be absent."
159
+ status: community
160
+ source: "Format not documented by Epic. Line shape from
161
+ https://nerivec.github.io/old-ue4-wiki/pages/logs-printing-messages-to-yourself-during-runtim\
162
+ e.html and from real logs; the omitted-verbosity and absent-prefix cases were both observed
163
+ directly (a real Epic-hosted UE 5.3 Lyra log has every line bare, e.g. `LogInit: Display:
164
+ Running engine for game: LyraStarterGame`, under a `Log file open, 09/15/23 23:30:49` header).
165
+ Read 2026-09-11."
166
+ tags:
167
+ - logs
168
+ - format
169
+ - parsing
170
+ - gotcha
171
+ - ue5
172
+ - generic
173
+ - signatures
174
+ detail: "Both exceptions are traps for a signature classifier. A pattern requiring `Category:
175
+ Verbosity:` misses every default-level line, which is most of them; a pattern anchored on a
176
+ timestamp misses any unprefixed line. The prefix is suppressed by `-NoLogTimes`, and is also
177
+ simply absent from the head of a real shipping log before the timestamped logger starts — on
178
+ Subnautica 2 that is the first ~520 lines, which is exactly where the pak mounts and plugin
179
+ list are (subnautica2.game.log-head-has-no-timestamps). ModWright's existing `PRE`
180
+ construction in src/surfaces/cyberpunk2077/logs.ts — zero or more optional bracketed fields,
181
+ anchored to line start — handles both cases."
182
+ - id: subnautica2.ue5.log-backup-filename-stamp-order
183
+ claim: A UE game rotates the previous session's log to
184
+ `<ProjectName>-backup-YYYY.MM.DD-HH.MM.SS.log` in the same `Saved/Logs` directory — year, then
185
+ MONTH, then day.
186
+ status: community
187
+ verified_on: 0.10.0 (CL 113109)
188
+ source: "Not documented by Epic; community sources disagree, with at least one rendering the pattern
189
+ day-before-month. Settled empirically against real files: a Subnautica 2 session on 14 May
190
+ 2026 produced `Subnautica2-backup-2026.05.14-17.45.04.log` (local artifacts 2026-09-11), which
191
+ is unambiguous because 14 cannot be a month."
192
+ tags:
193
+ - logs
194
+ - rotation
195
+ - backup
196
+ - filename
197
+ - ue5
198
+ - generic
199
+ - triage
200
+ detail: One new file per launch, which means each run's log carries a fresh creation time —
201
+ friendlier to ModWright's offsetKeys-based incremental triage than a log truncated and
202
+ rewritten in place. The settings that control it, `bBackupLogFiles` and `LogFileBackupCount`,
203
+ are likewise community-sourced rather than Epic-documented.
@@ -0,0 +1,175 @@
1
+ game: subnautica2
2
+ topic: ue5.tooling
3
+ title: Unreal Engine 5 asset and packaging tooling — mappings, FModel, UAssetAPI, repak, retoc
4
+ facts:
5
+ - id: subnautica2.ue5.usmap-requires-a-running-game
6
+ claim: UE5 cooks properties unversioned, so a cooked asset carries no property names or types and
7
+ cannot be deserialized without a `.usmap` mappings file supplying the reflection schema. Every
8
+ route to a `.usmap` for a game that ships without one runs a dumper against the LIVE process.
9
+ status: community
10
+ source: "Dumpers: UE4SS (https://docs.ue4ss.com/dev/feature-overview/dumpers.html, `Ctrl + Numpad
11
+ 6`), Dumper-7, and UnrealMappingsDumper (\"A dumper that generates mappings (.usmap) files for
12
+ datamining Unreal Engine games\", https://github.com/TheNaeem/UnrealMappingsDumper). The
13
+ consuming requirement is stated by UAssetAPI (\"Reading capability for the unofficial `.usmap`
14
+ format to parse ambiguous and unversioned properties\", https://github.com/atenfyr/UAssetAPI)
15
+ and by FModel's Local Mapping File setting. All read 2026-09-11."
16
+ tags:
17
+ - usmap
18
+ - mappings
19
+ - unversioned
20
+ - assets
21
+ - blocker
22
+ - ue5
23
+ - generic
24
+ detail: "This is the hard dependency that decides what can be built for a UE5 game WITHOUT the game
25
+ installed: nothing at asset level. Log parsing, packaging-shape validators, install detection,
26
+ tool location and load-order parsing all work from documentation and filesystem shape; asset
27
+ conversion, a deep index and any asset-content validator do not, because they need mappings,
28
+ which need a running game. The newest mappings format version referenced in tooling is v4
29
+ (`ExplicitEnumValues`). A mappings file older than the installed game build is the standard
30
+ cause of garbage-looking property names."
31
+ - id: subnautica2.ue5.fmodel-is-a-gui
32
+ claim: FModel is "an archive explorer for Unreal Engine games that uses CUE4Parse as its core
33
+ parsing library" — a C#/.NET WPF desktop application with no documented CLI. Latest release is
34
+ "FModel Aug 2026" (tag `aug-2026`), published 2026-08-02.
35
+ status: community
36
+ source: https://github.com/4sval/FModel (README) and its releases, read 2026-09-11. Note fmodel.app
37
+ returns HTTP 403 to automated fetches, so everything here is from the repository, its wiki and
38
+ the releases feed.
39
+ tags:
40
+ - fmodel
41
+ - gui
42
+ - browsing
43
+ - cue4parse
44
+ - tooling
45
+ - ue5
46
+ - generic
47
+ detail: "Being a GUI is the operative fact for ModWright: `ToolSpec` in src/core/toolchain/specs.ts
48
+ exists for CLIs the server shells out to, so FModel belongs in a surface's `guidance` as the
49
+ human's browsing tool, the same way WolvenKit's GUI is not a spec while WolvenKit.CLI is. Two
50
+ settings matter to anyone using it: the mappings file goes in Settings → General → \"Local
51
+ Mapping File\", and the UE Version setting is described by FModel's own wiki as \"the most
52
+ important setting of all\" — a wrong value produces archive and package errors that look like
53
+ corruption. AES keys go under Directory → AES. It exports meshes as PSK/PSKX, glTF and
54
+ UEFormat, textures as PNG/TGA/WebP, plus raw data and JSON. The project moved from semver
55
+ (last was v4.4.4, 2024-10-20) to date-named releases."
56
+ - id: subnautica2.ue5.uassetapi-json-round-trip
57
+ claim: UAssetAPI provides "JSON export and import to a proprietary format that maintains binary
58
+ equality" — the Unreal analogue of WolvenKit's cr2w↔json round trip, with a stronger
59
+ guarantee. Engine support spans roughly UE 4.13 to 5.7, so UE 5.6 is covered. Latest release
60
+ v1.1.0, 2026-05-01.
61
+ status: community
62
+ source: https://github.com/atenfyr/UAssetAPI (README) and
63
+ https://github.com/atenfyr/UAssetGUI/releases/tag/v1.1.0, read 2026-09-11
64
+ tags:
65
+ - uassetapi
66
+ - uassetgui
67
+ - json
68
+ - roundtrip
69
+ - converter
70
+ - ue5
71
+ - generic
72
+ detail: "Binary equality is a stronger promise than ModWright's existing converters make, and it
73
+ fits core/text's round-trip verification model directly. The v1.1.0 notes add two things that
74
+ matter: UE 5.6 and 5.7 support, and \"support for opening and saving .utoc/.ucas containers
75
+ directly in UAssetGUI through built-in integration with retoc\" — so the GUI can now
76
+ round-trip IoStore containers without a separate retoc invocation. Also added `.usmap` v4
77
+ support. UAssetGUI is the hand-editing front end, \"A tool designed for low-level examination
78
+ and modification of Unreal Engine game assets by hand\", with a CLI alongside the GUI."
79
+ - id: subnautica2.ue5.no-node-path-for-ue-assets
80
+ claim: There is no Node or TypeScript path for reading and writing UE5 cooked assets. UAssetAPI is
81
+ .NET ("A low-level .NET library for reading and writing Unreal Engine game assets"), UAssetGUI
82
+ needs the .NET 10 SDK to build, CUE4Parse (FModel's engine) is also C#, and repak and retoc
83
+ are Rust. Any ModWright converter must shell out to an external binary.
84
+ status: community
85
+ source: https://github.com/atenfyr/UAssetAPI, https://github.com/atenfyr/UAssetGUI (build
86
+ requirements), https://github.com/4sval/FModel, https://github.com/trumank/repak,
87
+ https://github.com/trumank/retoc — all read 2026-09-11
88
+ tags:
89
+ - node
90
+ - dotnet
91
+ - rust
92
+ - converter
93
+ - architecture
94
+ - ue5
95
+ - generic
96
+ detail: "Not a problem architecturally: it is exactly how the two shipped surfaces already work,
97
+ shelling out to divine.exe and WolvenKit.CLI.exe through core/toolchain. The one genuinely new
98
+ wrinkle relative to those is that a UE converter takes a `.usmap` mappings file as a required
99
+ INPUT, so the registry entry needs a mappings path and a missing or stale mappings file must
100
+ be a first-class error rather than a silent misparse."
101
+ - id: subnautica2.ue5.repak-is-legacy-pak-only
102
+ claim: repak is a Rust library and CLI for legacy `.pak` files only — it has NO IoStore support. It
103
+ handles pak versions 2 through 11, i.e. UE 4.0 through UE 5.3. Latest release v0.2.3,
104
+ 2026-01-02.
105
+ status: community
106
+ source: https://github.com/trumank/repak (README, CLI subcommands and version table) and its
107
+ releases, read 2026-09-11
108
+ tags:
109
+ - repak
110
+ - pak
111
+ - rust
112
+ - packaging
113
+ - tooling
114
+ - ue5
115
+ - generic
116
+ - limitation
117
+ detail: Subcommands are `info`, `list`, `hash-list`, `unpack`, `pack` and `get`. It reads
118
+ Zlib/Gzip/Zstd but CANNOT write compressed paks, and can read but not write an encrypted index
119
+ (`-a/--aes-key`, base64 or hex). Its default mount point is `../../../`, which its README
120
+ explicitly contrasts with UnrealPak's default — convenient, since that is the correct value
121
+ for game content. On a UE 5.4+ IoStore game repak alone is insufficient and is only the
122
+ legacy-pak half of a repak+retoc pipeline. Its `list` output is the natural analogue of
123
+ Cyberpunk's resource listing for index building.
124
+ - id: subnautica2.ue5.retoc-to-zen-to-legacy
125
+ claim: 'retoc is the IoStore tool: "CLI tool for packing/unpacking Unreal Engine IoStore containers
126
+ (.utoc/.ucas) as well as converting between Zen assets and Legacy assets". `to-legacy`
127
+ converts Zen assets and shaders to a legacy `.pak`; `to-zen` converts the other way, which is
128
+ what produces something a UE 5.4+ IoStore game will actually mount. Latest release v0.1.5,
129
+ 2026-01-02.'
130
+ status: community
131
+ source: https://github.com/trumank/retoc (README, subcommand list) and its releases, read 2026-09-11
132
+ tags:
133
+ - retoc
134
+ - iostore
135
+ - utoc
136
+ - ucas
137
+ - zen
138
+ - packaging
139
+ - tooling
140
+ - ue5
141
+ - generic
142
+ detail: The other subcommands are `manifest`, `info`, `list`, `verify`, `unpack`, `unpack-raw`,
143
+ `pack-raw`, `get`, `dump-test`, `gen-script-objects` and `print-script-objects`.
144
+ `gen-script-objects` matters because a Zen container must resolve its imports against the
145
+ game's script-object reflection table. Flags include `--aes-key`, `--version` (target engine,
146
+ e.g. `UE5_4`), `--override-container-header-version` and `--override-toc-version`. UE 5.3 and
147
+ newer are fully supported; earlier versions can produce incomplete dependency data. The
148
+ working pipeline for a modern IoStore game is therefore `retoc to-legacy` → edit via
149
+ UAssetAPI's JSON round trip → `retoc to-zen`.
150
+ - id: subnautica2.ue5.unrealpak-cannot-do-iostore
151
+ claim: UnrealPak, which ships with the engine, produces only legacy `.pak` files and neither reads
152
+ nor writes `.utoc`/`.ucas`; IoStore containers come from the separate `IoStoreUtilities` path
153
+ during staging. On an IoStore-only game it is not the packaging tool.
154
+ status: community
155
+ source: Epic documents only the entry point, `PakFileUtilities::ExecuteUnrealPak` ("Application
156
+ entry point") at
157
+ https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Developer/PakFileUtilities,
158
+ and the `IoStoreUtilities` module separately at
159
+ https://dev.epicgames.com/documentation/unreal-engine/API/Developer/IoStoreUtilities. Read
160
+ 2026-09-11.
161
+ tags:
162
+ - unrealpak
163
+ - pak
164
+ - iostore
165
+ - packaging
166
+ - limitation
167
+ - ue5
168
+ - generic
169
+ detail: UnrealPak's flag list is NOT on Epic's documentation site; the commonly-cited transcription
170
+ of its `-help` output is from UE 4.22 and flags may have drifted. Response-file syntax is one
171
+ line per entry, `"<source path>" "<mounted path>" [-compress]`, invoked as `UnrealPak.exe
172
+ PakFile.pak -Create=ResponseFile.txt`. Do not write a ModWright ToolSpec `versionArgs` for it,
173
+ or for repak or retoc, on the strength of convention — src/core/toolchain/specs.ts's standing
174
+ rule is that a version flag is only recorded after it has been checked against the tool itself
175
+ or its own source.