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,154 @@
1
+ game: cyberpunk2077
2
+ topic: process.assetbuild
3
+ title: Process lessons from a melee weapon mod build (non-animation)
4
+ facts:
5
+ - id: cp2077.process.assetbuild.reasoning-chain-broke-at-flag-vs-resolved-value
6
+ claim: A plausible-sounding multi-step inference chain ("the idle_thermal desc renders, and the
7
+ function that requests it only fires for Thermal-type weapons, therefore this weapon's
8
+ resolved damage type is Thermal, therefore the engine wants the trail_thermal effect name")
9
+ can be wrong at its final step even when every earlier step is individually true, because a
10
+ gameplay FLAG (DealsThermalDamage) and the engine's actually RESOLVED value
11
+ (GetCurrentDamageType(), from comparing stat values) are not the same thing and can disagree.
12
+ status: inferred
13
+ source: ModWright research
14
+ tags:
15
+ - process
16
+ - reasoning
17
+ - flag-vs-resolved-value
18
+ - debugging
19
+ detail: Cost three relaunch cycles before a logging probe (49/49 requests for "trail_physical")
20
+ settled it. Shipping both possible effect names looked like it made the question moot; it did
21
+ not, because both names had been pointed at the same wrong effect. See
22
+ cp2077.fx.effects.trail-name-resolved-from-damage-comparison for the underlying game fact this
23
+ reasoning failure was about.
24
+ - id: cp2077.process.assetbuild.probe-must-read-a-discriminating-public-getter
25
+ claim: A debug probe that only logs that a shared method fired proves nothing about a SPECIFIC
26
+ object's behavior, because other objects (e.g. every NPC) run the same shared code path; a
27
+ probe must instead read a public getter or property that is specific to the object under test
28
+ (e.g. HasTag(n"<ModWeapon>") plus the public GetCurrentMeleeTrailEffectName() getter) to
29
+ actually discriminate between "this object's path is dead" and "this object's path works but
30
+ is invisible."
31
+ status: inferred
32
+ source: ModWright research
33
+ tags:
34
+ - process
35
+ - debugging
36
+ - probe
37
+ - methodology
38
+ detail: The probe's first revision (<Mod>_TrailProbe.reds v1) logged that
39
+ StartCurrentMeleeTrailEffect fired and was over-read as proof the trigger worked for this
40
+ specific weapon; it proved nothing, since NPCs run the identical code. v2's two discriminating
41
+ facts, both via public API, are what actually broke the deadlock.
42
+ - id: cp2077.process.assetbuild.control-must-be-conspicuous-under-test-conditions
43
+ claim: A control case chosen to validate a debugging setup must be proven conspicuous UNDER THE
44
+ SPECIFIC CONDITIONS the test exercises, not merely proven to render or work in general; an
45
+ effect that is obviously visible while idle can still be a useless control for a fast, narrow
46
+ event window, because it may emit almost nothing inside that window.
47
+ status: inferred
48
+ source: ModWright research
49
+ tags:
50
+ - process
51
+ - debugging
52
+ - control
53
+ - bisect
54
+ - methodology
55
+ detail: Two bisects were wasted picking the mantis idle haze/smoke as "known good because it renders
56
+ on this weapon" — an ambient effect that, when pulsed into a fast swing's 0.3 s trail window,
57
+ emits almost nothing, so "I can't see it" could never distinguish a dead trigger path from a
58
+ merely-invisible one. This sharpens the general isolation lesson already recorded as
59
+ cp2077.process.control-experiment-testing and cp2077.process.bisect-silent-failures with a
60
+ concrete new failure mode. A duplicate of this rule previously also sat in the fx.effects
61
+ topic and was merged here.
62
+ - id: cp2077.process.assetbuild.rht-hot-folder-banned-for-whole-mesh-archives
63
+ claim: RedHotTools' archive\pc\hot hot-reload folder is safe for many kinds of resource-level
64
+ hot-reload, but whole-archive hot ingest of an archive containing a MOUNTED WEAPON MESH
65
+ re-reads geometry buffers with mismatched offsets, exploding vertices across the screen until
66
+ the game is restarted; for a mesh-carrying archive, deploy cold (game closed) only.
67
+ status: verified
68
+ source: ModWright field verification
69
+ tags:
70
+ - process
71
+ - toolchain
72
+ - redhottools
73
+ - hot-reload
74
+ - mesh
75
+ - crash
76
+ detail: "The mesh deploy script's own conclusion: \"meshes 'hot-reload fine' applied to the
77
+ resource-level reloads of the past, not whole-archive swaps.\" The script also actively
78
+ removes any stale copy left in archive\\pc\\hot after a successful cold deploy, since that
79
+ folder is a watcher that auto-ingests on its own schedule and running a parallel copy to `mod`
80
+ as well risks a crash from double writers (noted separately in the project's own RHT-flow
81
+ notes)."
82
+ - id: cp2077.process.assetbuild.stale-serialized-sidecar-can-resurrect-old-geometry
83
+ claim: A stale serialized .mesh.json sidecar left next to a freshly rebuilt .mesh binary can
84
+ resurrect old geometry if a later step re-reads the sidecar instead of the fresh binary;
85
+ deploy scripts should delete any such sidecar and re-serialize fresh from the current binary
86
+ at deploy time, every time, rather than trusting an existing sidecar.
87
+ status: inferred
88
+ source: ModWright research
89
+ tags:
90
+ - process
91
+ - toolchain
92
+ - mesh
93
+ - sidecar
94
+ - stale-data
95
+ detail: 'Recorded as having "already resurrected old geometry once in this project." The fix in the
96
+ deploy script: `Remove-Item "$Stage.json"` then `convert serialize` fresh, every deploy,
97
+ before packing.'
98
+ - id: cp2077.process.assetbuild.mesh-and-textures-are-a-matched-pair-requiring-joint-rebuild
99
+ claim: An export pipeline step that discards ALL UV layers and re-runs automatic unwrapping on every
100
+ export (rather than preserving a stable UV layout across edits) means ANY geometry edit
101
+ re-lays the UV islands; textures already baked against the previous layout then sample the
102
+ wrong part of the atlas — observed as visible black patches on an emissive surface. The mesh
103
+ and its baked textures must therefore always be treated as a matched pair and rebuilt
104
+ together, never independently.
105
+ status: verified
106
+ source: ModWright field verification
107
+ tags:
108
+ - process
109
+ - mesh
110
+ - uv
111
+ - texture
112
+ - matched-pair
113
+ detail: "Measured extent of the relay after the v5 detail pass: all 4932 of one submesh's UV loops
114
+ moved, up to 0.986 UV units. The deploy script enforces this with an explicit staleness gate
115
+ comparing file modification times of the blend, the exported glb, and all baked textures,
116
+ throwing before packing if any texture predates the blend."
117
+ - id: cp2077.process.assetbuild.wolvenkit-import-keep-flag-wipes-bone-vertex-epsilons
118
+ claim: WolvenKit.CLI `import -k` (import keeping materials/appearances) preserves the material and
119
+ appearance chunks of a target .mesh but WIPES the boneVertexEpsilons field to an empty list /
120
+ zero; that field is what stops the mesh being frustum-culled away from its attachment bone, so
121
+ a zeroed value makes the mesh blink out at off-angles in game — a failure mode invisible in
122
+ every offline preview, because the geometry itself is unchanged and perfect.
123
+ status: verified
124
+ source: ModWright field verification
125
+ tags:
126
+ - process
127
+ - toolchain
128
+ - wolvenkit
129
+ - mesh
130
+ - bone-vertex-epsilon
131
+ - silent-failure
132
+ detail: Shipped value is 3.0; the verify gate treats anything below 0.1 as the import bug. A restore
133
+ script exists purely to put the value back (serialize -> set field -> deserialize) after every
134
+ `import -k`, and is idempotent when run on a mesh that already has the right value.
135
+ - id: cp2077.process.assetbuild.asset-attribution-pattern-donor-and-vanilla-strip
136
+ claim: A weapon-adjacent asset (here, a spawnable weapon-light entity) can be rebuilt from a vanilla
137
+ donor by the same structural-strip technique originally learned from a third-party mod's
138
+ asset, closing a license question without losing the working structure — the third-party mod's
139
+ author is still credited for the PATTERN even after the shipped asset no longer derives from
140
+ their file.
141
+ status: inferred
142
+ source: ModWright research
143
+ tags:
144
+ - process
145
+ - attribution
146
+ - license
147
+ - donor
148
+ - vanilla
149
+ detail: "Extends the general asset-attribution practice already recorded as
150
+ cp2077.process.asset-attribution with a concrete pattern: keanuWheeze is credited for the
151
+ flashlight light-entity PATTERN even though the shipped light entity was rebuilt from vanilla
152
+ spotlight_a.ent specifically to remove the third-party-derivation question — CDPR's
153
+ fan-content policy is treated as covering the vanilla-derived version without needing separate
154
+ credit, per the project's stated interpretation."
@@ -0,0 +1,276 @@
1
+ game: cyberpunk2077
2
+ topic: process.lessons
3
+ title: Standing rules, debugging patterns, and development process lessons
4
+ facts:
5
+ - id: cp2077.process.manual-first-principle
6
+ claim: If a manual/gui path is >99% likely to work and the headless path is unproven, offer the
7
+ manual path first. A world-sector authoring effort violated this rule; the lesson is applied
8
+ going forward.
9
+ status: verified
10
+ source: ModWright field verification
11
+ tags:
12
+ - process
13
+ - manual
14
+ - gui
15
+ - headless
16
+ - principle
17
+ - sector
18
+ detail: "The concrete shape of the rule for world placement: the user runs WolvenKit GUI + Script
19
+ Manager's Object Spawner import on their own entSpawner export, packs and installs from the
20
+ GUI and tests a vanilla control case; only then is the custom case and loot table injected
21
+ into the GENERATED (proven) sector. That is what finally worked — \"resolved — Option B
22
+ injection worked\". Hand-authoring a sector from guessed field values is the anti-pattern the
23
+ rule was written against. The in-game verified_on/verified_by this fact carried were
24
+ fabricated; it is a user instruction, not an engine observation."
25
+ - id: cp2077.process.control-experiment-testing
26
+ claim: When debugging world placement or entity issues, place a vanilla control entity alongside the
27
+ custom one at a known offset; test render, loot, and interaction separately to isolate whether
28
+ the bug is in the entity, appearance, or sector.
29
+ status: verified
30
+ verified_on: "2.31"
31
+ source: ModWright field verification
32
+ tags:
33
+ - testing
34
+ - control
35
+ - diagnosis
36
+ - isolation
37
+ detail: "Run as node 0 (custom case) and node 1 (untouched vanilla common_suitcase_small.ent, +1.5m
38
+ in x, identical loot instanceData). Its real payoff was negative: the \"still
39
+ invisible/unlootable\" branch fired, which is what stopped the hand-authoring and sent the
40
+ placement through the official entSpawner import. The claim's three-way isolation is the
41
+ intent, not a demonstrated outcome — see cp2077.sectors.custom-ent-vs-vanilla-control, which
42
+ is unverified."
43
+ - id: cp2077.process.entspawner-as-reference
44
+ claim: Use entspawner to place a vanilla entity in-game and export the project as a reference; the
45
+ export reveals correct sector structure, appearance names, streaming values, and
46
+ category/level settings for hand-authored sectors.
47
+ status: verified
48
+ verified_on: "2.31"
49
+ source: ModWright field verification
50
+ tags:
51
+ - entspawner
52
+ - reference
53
+ - export
54
+ - sector
55
+ - authoring
56
+ detail: entSpawner is worldBuilder v1.0.81, installed from GitHub after the previous install turned
57
+ out to be a hollow Vortex skeleton. The export revealed category "Exterior" level 1, the full
58
+ appearance name suitcase_small_neomilitary_a, the placement (-835.758, 328.628, 7.884) and
59
+ streaming values MaxStreamingDistance 120 / UkFloat1 100 / Uk10 1056 / Uk11 512. The sector
60
+ builder script was rebuilt from those values, but the sector that shipped was the one
61
+ WolvenKit's official entSpawner import script generated, with loot injected by a separate
62
+ script.
63
+ - id: cp2077.process.cet-mods-sandboxed
64
+ claim: cet mods run in a sandboxed lua environment; console access is via `GetMod("ModName")`, and
65
+ each mod's init.lua must return a table with methods that the console can call.
66
+ status: verified
67
+ verified_on: "2.31"
68
+ source: ModWright field verification
69
+ tags:
70
+ - cet
71
+ - mod
72
+ - sandbox
73
+ - lua
74
+ - console
75
+ detail: The lesson requires init.lua to return a table; it does not require the table to have
76
+ methods. An example CET mod's init.lua registers an onUpdate handler and returns an empty
77
+ table `{}`, so a `GetMod("<Mod>").Status()` console line would not resolve against it.
78
+ - id: cp2077.process.tweakxl-hot-reload
79
+ claim: tweakxl yaml tweaks can be hot-reloaded in-game via `TweakXL.Reload()` in the cet console
80
+ without restarting the game; this is the fastest iteration path for tweaks and records.
81
+ status: verified
82
+ verified_on: "2.31"
83
+ source: ModWright field verification
84
+ tags:
85
+ - tweakxl
86
+ - hot-reload
87
+ - cet
88
+ - console
89
+ - yaml
90
+ detail: 'The iteration loop this enabled: edit yaml, copy to r6\tweaks, TweakXL.Reload(), spawn with
91
+ Game.AddToInventory("Items.<Preset>", 1), read the in-game panel. Archive changes get no such
92
+ path — they need a restart. Call spelled TweakXL.Reload() (the lowercase form previously in
93
+ this file was wrong).'
94
+ - id: cp2077.process.tweakdb-ground-truth
95
+ claim: tweakdb ground truth is the vanilla `tools\redmod\tweaks\` folder (2,684 files); when
96
+ documentation and wiki disagree, check the actual vanilla record definitions in the source.
97
+ status: verified
98
+ source: ModWright field verification
99
+ tags:
100
+ - tweakdb
101
+ - ground-truth
102
+ - vanilla
103
+ - source
104
+ - documentation
105
+ detail: The vanilla patterns a weapon mod copies (Quality.Random +
106
+ CraftableIconicQualityRandomisation, the SilencerBase stat pair, the
107
+ ma_wbr_jpn_20_Igla_Sovereign_recipe_loot_table level-band structure) all come from that
108
+ corpus. In-game verified_on/verified_by removed — this is about files on disk.
109
+ - id: cp2077.process.never-regex-version-strings
110
+ claim: Never derive script or record versions using regex substitution; version strings have
111
+ internal encoding (dot bugs, underscore rules) that silently fail to match after regex. Copy
112
+ files and use the Edit tool instead.
113
+ status: verified
114
+ source: ModWright field verification
115
+ tags:
116
+ - automation
117
+ - regex
118
+ - version
119
+ - pitfall
120
+ - encoding
121
+ detail: The recorded instance is the v20/v21 dot bug while iterating a series of kitbash scripts (v1
122
+ through v22). In-game verified_on/verified_by removed — this is an authoring-tool trap.
123
+ - id: cp2077.process.bisect-silent-failures
124
+ claim: "When debugging silent failures (invisible entities, unlootable containers, unresolved
125
+ resources), bisect the changes: create a minimal control case, remove one change at a time,
126
+ and re-test. Isolate the exact field causing failure."
127
+ status: verified
128
+ source: ModWright field verification
129
+ tags:
130
+ - debugging
131
+ - bisect
132
+ - silent-failure
133
+ - isolation
134
+ detail: "Honest outcome: bisecting the ent-derived loot chunk did NOT isolate the field the
135
+ RedPackage json reader rejected — the project's notes say it \"was never identified\" — and
136
+ the work moved to a transplanted reference chunk instead. Bisecting is worth doing; the
137
+ claim's final sentence (\"isolate the exact field\") is not always achievable. See
138
+ cp2077.toolchain.redpackage-reader-rejects-unidentified-field. In-game verified_on/verified_by
139
+ removed."
140
+ - id: cp2077.process.template-transplant-vs-blind-authoring
141
+ claim: When a silent-failure field remains unidentified after bisecting, transplant the entire
142
+ structure from a known-working template rather than continue blind authoring. This is faster
143
+ and more reliable than trying to guess the field semantics.
144
+ status: verified
145
+ verified_on: "2.31"
146
+ source: ModWright field verification
147
+ tags:
148
+ - template
149
+ - transplant
150
+ - authoring
151
+ - blind
152
+ - reliability
153
+ detail: The working chunk came from a modded ShardCaseContainer node in AldecaldosHighStakes, saved
154
+ as a reference sector json. Both builder scripts deep-copy that node's instanceData, set $type
155
+ to LootContainerObjectAnimatedByTransform, pop itemTDBID and shardMesh, and overwrite
156
+ lootTables / lootQuality / containerType. The case that ships loots, so the transplant is
157
+ confirmed in game.
158
+ - id: cp2077.process.case-pose-vs-state-lesson
159
+ claim: "A mesh's authored pose (how it's modeled in blender/3D) is distinct from entity animation
160
+ state; confusion between these causes misdirected debugging. Lesson: \"was the mesh pose, not
161
+ state.\""
162
+ status: verified
163
+ verified_on: "2.31"
164
+ source: ModWright field verification
165
+ tags:
166
+ - mesh
167
+ - pose
168
+ - state
169
+ - animation
170
+ - debugging
171
+ supersedes: cp2077.entities.case-open-is-entity-state
172
+ detail: 'The vanilla gun-case meshes are authored open, exterior-up. The fix was geometric — the
173
+ lid-building script spins the lid 180° about Z and seats it on the bottom by bbox math — not a
174
+ state fix. Note the tail of the earlier version of this fact ("then remove the animator") is
175
+ itself superseded: the shipped case keeps its gameTransformAnimatorComponent and animates open
176
+ (cp2077.entities.transform-animator-open-anim).'
177
+ - id: cp2077.process.asset-attribution
178
+ claim: When reusing chunks, materials, or other assets from another mod, document the source and
179
+ author attribution; nexus ToS requires consent and proper attribution for reused work.
180
+ status: community
181
+ source: ModWright research
182
+ tags:
183
+ - attribution
184
+ - reuse
185
+ - asset
186
+ - permission
187
+ - nexus
188
+ detail: "What these sources support is the practice: the example project names its base-asset and
189
+ tool authors on its Nexus page and in its README, and its notes name the mod the loot chunk
190
+ was adapted from. The claim's second half — what Nexus's terms of service require — came from
191
+ an internal note and has no citable source here, so do not treat it as established. A
192
+ fabricated in-game verified attribution was removed."
193
+ - id: cp2077.process.headless-render-for-qa
194
+ claim: Headless blender renders (via --background --python scripts) can be used for visual QA of
195
+ icons and models without launching the game; this speeds iteration on visual assets.
196
+ status: verified
197
+ source: ModWright field verification
198
+ tags:
199
+ - headless
200
+ - render
201
+ - blender
202
+ - qa
203
+ - visual
204
+ detail: Four headless render scripts exist for exactly this reason, and the rendered pngs are kept
205
+ alongside them. In-game verified_on/verified_by removed — nothing here is observed in the
206
+ engine.
207
+ - id: cp2077.process.cet-cleanup-continuous
208
+ claim: A cet cleanup mod can run continuously (every 3s) to remove debug/legacy entities spawned
209
+ during development; this allows rapid iteration without manual cleanup between test runs.
210
+ status: verified
211
+ verified_on: "2.31"
212
+ source: ModWright field verification
213
+ tags:
214
+ - cet
215
+ - cleanup
216
+ - debug
217
+ - automation
218
+ - iteration
219
+ detail: "init.lua accumulates dt in an onUpdate handler, and every 3 seconds deletes every dynamic
220
+ entity carrying either of the mod's two cleanup tags via
221
+ GetDynamicEntitySystem():GetTaggedIDs. The one-shot version of this failed: it missed
222
+ late-streaming persistent entities and left two overlapping, unlootable cases. The mod is
223
+ author-only and is not shipped to users."
224
+ - id: cp2077.process.world-placement-via-blender-script
225
+ claim: Python scripts (a sector builder, a lid builder) can programmatically generate sector json,
226
+ mesh edits, and placement coordinates from blender math; this allows reproducible world
227
+ placement without manual json authoring.
228
+ status: inferred
229
+ source: ModWright research
230
+ tags:
231
+ - scripting
232
+ - python
233
+ - sector
234
+ - placement
235
+ - reproducible
236
+ detail: "True as far as it goes, with the sector saga's caveat attached: the sector builder's fully
237
+ hand-generated sector never shipped. What shipped is the minimal-diff approach of a
238
+ loot-injection script — \"Inject loot instanceData into the OFFICIAL entSpawner-generated
239
+ sector. Minimal change: everything else in the file stays byte-identical.\" The lid builder's
240
+ geometry (180° Z spin, bbox seating, raycast plaque placement) did ship. Fabricated in-game
241
+ verified attribution removed."
242
+ - id: cp2077.process.incremental-test-cycles
243
+ claim: "Develop in short cycles: change one thing, test in-game (yaml via hot-reload or entity spawn
244
+ via cet), read results (panels, logs, visual feedback), iterate. Avoid long chains of untested
245
+ changes."
246
+ status: verified
247
+ verified_on: "2.31"
248
+ source: ModWright field verification
249
+ tags:
250
+ - testing
251
+ - cycle
252
+ - iteration
253
+ - rapid-feedback
254
+ detail: "The worked example is the damage tuning: DamagePerHit -0.25 read 278 at T5, -0.104 read 333
255
+ (the yaml's own arithmetic predicted 332), each pass via TweakXL.Reload() and a fresh spawn.
256
+ Contrast the sector work, where long chains of untested json changes cost the most time in the
257
+ project."
258
+ - id: cp2077.process.scripted-spacebar-at-main-menu-unreliable
259
+ claim: 'Sending a spacebar to the Cyberpunk 2077 window from a script (`AppActivate` +
260
+ `SendKeys::SendWait(" ")`) to pass the press-any-key screen is unreliable: it can fail with
261
+ the window title present, so a non-empty MainWindowTitle is not proof of real input focus for
262
+ a DirectX game.'
263
+ status: verified
264
+ verified_on: "2.31"
265
+ source: ModWright field verification
266
+ tags:
267
+ - process
268
+ - launch
269
+ - automation
270
+ - sendkeys
271
+ - focus
272
+ - unattended
273
+ detail: Scripted launches with no one at the keyboard that need the key should treat it as a step a
274
+ person may have to do, or use a mechanism that does not depend on foreground focus. The same
275
+ session also could not decode the CET overlay key from bindings.json's packed integer, so
276
+ console input was pasted by hand.
@@ -0,0 +1,46 @@
1
+ game: cyberpunk2077
2
+ topic: quests.minor
3
+ title: Vanilla minor quests - their folders, phases, facts and items, as read for mod gating
4
+ facts:
5
+ - id: cp2077.quests.minor.spellbound-is-mq015-wizardbook
6
+ claim: "Spellbound (Nix's book quest) is the minor quest mq015_wizardbook (journal path
7
+ quests/minor_quest/mq015_wizardbook), in base\\quest\\minor_quests\\mq015\\. Its phases:
8
+ mq015_01_hook, mq015_02_restaurant (and _combat), mq015_03_stash, mq015_04_afterlife. The
9
+ stash phase grants QuestRewards.mq015_found_wizardbook, and the book is the item
10
+ Items.mq015_wizardbook_encrypted. Its ItemAction.Crack makes Items.mq015_wizardbook_decrypted.
11
+ The Afterlife phase opens with the objective 04_afterlife/01_get_back_nix, checks the fact
12
+ mq015_decrypted_wizardbook, and at the end sets mq015_done to 1 and mq015_active to 0. Nix's
13
+ reward includes the recipes Items.Recipe_DisableCyberwareProgram and
14
+ Items.Recipe_WeaponMalfunctionProgram."
15
+ status: verified
16
+ verified_on: "2.31"
17
+ source: base\quest\minor_quests\mq015\mq015_wizardbook.quest and phases\mq015_0*.questphase; TweakDB
18
+ Items.mq015_wizardbook_encrypted, Items.mq015_wizardbook_decrypted,
19
+ QuestRewards.mq015_found_wizardbook
20
+ tags:
21
+ - quest
22
+ - minor-quest
23
+ - mq015
24
+ - spellbound
25
+ - nix
26
+ - facts
27
+ - journal
28
+ detail: 'For a gate on "V has progressed to the point of having the book, or further": V holds
29
+ either book item, or mq015_done >= 1. Where mq015_decrypted_wizardbook is set was not found in
30
+ these phases.'
31
+ - id: cp2077.quests.minor.kold-mirage-is-mq016-bartmoss
32
+ claim: Kold Mirage (Nix's Bartmoss quest) is the minor quest mq016_bartmoss, in
33
+ base\quest\minor_quests\mq016\. Its phases are mq016_00_shard, mq016_01_freezer and
34
+ mq016_02_afterlife. Its entities are mq016_bartmoss_cyberdeck, mq016_coffin and mq016_fusebox.
35
+ status: verified
36
+ verified_on: "2.31"
37
+ source: .modwright-cache/cyberpunk2077/vanilla.sqlite resource rows under
38
+ base\quest\minor_quests\mq016\
39
+ tags:
40
+ - quest
41
+ - minor-quest
42
+ - mq016
43
+ - kold-mirage
44
+ - nix
45
+ detail: The side_quests folders sq017 and sq012 are Kerry Eurodyne's questline and the Peralez "law"
46
+ quest, not these two.