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,360 @@
1
+ game: cyberpunk2077
2
+ topic: anims.method
3
+ title: working method for diagnosing custom FPP melee animation defects
4
+ facts:
5
+ - id: cp2077.anims.method.find-which-layer-lies-before-touching-a-knob
6
+ claim: "When the game contradicts the authored data, find WHICH LAYER lies before touching any knob.
7
+ The pipeline has (at least) five places truth can diverge, each with its own ground-truth
8
+ tool, to be walked in order: what was authored (the build's own gates), what the engine
9
+ COMPOSES (serialize the animgraphs to answer state-to-clip questions directly), what
10
+ post-passes run (IK/constraints — the same serialized graphs, cross referenced against
11
+ tools\\redmod\\scripts to see which script raises a given weight source), what survives the
12
+ ENCODER (a per-bone authored-GLB vs shipped-.anims diff), and what the EYE actually weighs
13
+ (position and rotation, per frame, in the exact frame the engine draws, split along/across the
14
+ relevant axis) — because a number straddling a visibility threshold can produce \"perfect
15
+ here, broken there\" from identical underlying data."
16
+ status: inferred
17
+ source: ModWright research
18
+ tags:
19
+ - working-method
20
+ - layer-diagnosis
21
+ - ground-truth
22
+ - five-layers
23
+ detail: "The concrete case this method was written to generalize: the sway defect was chased for a
24
+ week by re-measuring the authoring layer before the encoder layer was checked directly and
25
+ turned out to be where the truth actually diverged."
26
+ - id: cp2077.anims.method.believe-the-eye-over-a-green-gate
27
+ claim: Believe the user's own visual report over a passing automated gate, then go find the layer
28
+ the existing gates do not model, rather than re-measuring the layers they already cover; a
29
+ gate only ever sees what its underlying model sees.
30
+ status: inferred
31
+ source: ModWright research
32
+ tags:
33
+ - working-method
34
+ - user-report
35
+ - gate-limitation
36
+ - trust-the-eye
37
+ detail: "\"The gate is green and the user says it is wrong. Believe the user\" (a project's own
38
+ notes) is the concrete phrasing this rule generalizes."
39
+ - id: cp2077.anims.method.validate-a-gate-against-known-good-and-known-bad
40
+ claim: Before trusting any new measurement or gate, validate it against BOTH a known-good build and
41
+ a known-bad build; a gate that has never been observed to fail is not yet a trustworthy gate.
42
+ status: inferred
43
+ source: ModWright research
44
+ tags:
45
+ - working-method
46
+ - gate-validation
47
+ - known-good
48
+ - known-bad
49
+ detail: "This re-calibration exercise directly found two real gate bugs: a gate that flagged
50
+ vanilla's own correct off-screen park as a failure, and a park-position gate blind to screen Y
51
+ that missed a hand resting at waist height."
52
+ - id: cp2077.anims.method.fix-at-the-source-not-downstream-compensation
53
+ claim: Making the underlying authored data immune to a defect (e.g. constant rotation channels that
54
+ the encoder cannot damage) beats every downstream compensation that tries to hide the same
55
+ defect (damping, twist cancellation, gain scheduling), because those compensations scale the
56
+ real signal and the defect's noise together and therefore trade roughly 1:1 rather than
57
+ actually fixing anything.
58
+ status: inferred
59
+ source: ModWright research
60
+ tags:
61
+ - working-method
62
+ - fix-at-source
63
+ - downstream-compensation
64
+ - encoder
65
+ detail: See cp2077.anims.authoring.sway-damp-gain-tuning-superseded and
66
+ cp2077.anims.encoder.sway-gunrot-const-fix-verified-in-game for the concrete before/after pair
67
+ this rule is drawn from.
68
+ - id: cp2077.anims.method.never-burn-a-launch-on-what-a-render-or-graph-can-answer
69
+ claim: Resolve everything answerable offline — a serialized animgraph, a script measurement, or a
70
+ rendered preview (contact sheet or GIF) — BEFORE spending a game launch to test it; the
71
+ project's own sway root-cause diagnosis and fix used zero launches end to end and needed
72
+ exactly one launch to confirm the result.
73
+ status: inferred
74
+ source: ModWright research
75
+ tags:
76
+ - working-method
77
+ - offline-first
78
+ - launch-cost
79
+ - preview-render
80
+ detail: Preview GIFs (rendered frames composited with PIL) are cited as letting the user reject
81
+ choreography before the single manual WolvenKit import click that a real launch requires.
82
+ - id: cp2077.anims.method.record-findings-and-correct-stale-comments-immediately
83
+ claim: Record a finding into the project's handoff documentation the moment it is proven, log
84
+ rollback identifiers (archive MD5 and .anims MD5) on every deploy, and correct stale comments
85
+ or claims IN PLACE rather than leaving them for a later reader to trip over — a single stale
86
+ comment ("block never sees these additives") nearly derailed a later graph reading before it
87
+ was found and retracted.
88
+ status: inferred
89
+ source: ModWright research
90
+ tags:
91
+ - working-method
92
+ - documentation
93
+ - stale-comment
94
+ - rollback-identifier
95
+ detail: See cp2077.anims.graph.block-never-sees-additives-old-belief for the specific retracted
96
+ claim this rule is drawn from.
97
+ - id: cp2077.anims.method.identify-builds-by-anims-md5-never-mtime
98
+ claim: Identify a build by the MD5 of the shipped .anims file, never by archive file modification
99
+ time; the WolvenKit pack step can write a byte-different archive from logically identical
100
+ content, so mtime alone cannot distinguish which content is actually deployed.
101
+ status: inferred
102
+ source: ModWright research
103
+ tags:
104
+ - working-method
105
+ - build-identification
106
+ - anims-md5
107
+ - archive-mtime
108
+ detail: "Concretely burned once: a rollback labeled as \"yesterday\" turned out to be byte-identical
109
+ to that day's own build rather than the intended prior state, because it had been
110
+ distinguished only by filename/mtime. MERGED from an equivalent process fact, which dates the
111
+ rule to 2026-08-21 and records that the same hash-over-mtime discipline is applied
112
+ independently in a cache deploy script (which hash-verifies both the rollback copy and the
113
+ final live-archive copy) and in a build script's deploy path — a project-wide convention
114
+ rather than a one-off fix. See cp2077.world.loot-container.deploy-verifies-with-md5-not-mtime
115
+ for the cache-specific instance."
116
+ - id: cp2077.anims.method.copy-live-archive-to-rollback-before-every-deploy
117
+ claim: Always copy the currently-live game archive into a rollback folder BEFORE deploying any new
118
+ build, every single time; skipping this once meant there was no byte-exact "yesterday" build
119
+ to diff against when a user reported moved hand positions, which materially slowed diagnosis.
120
+ status: inferred
121
+ source: ModWright research
122
+ tags:
123
+ - working-method
124
+ - rollback
125
+ - deploy-discipline
126
+ - archive-backup
127
+ detail: "\"A rebuild can reproduce any past state, but only if you know which knobs were set — an
128
+ archive is the cheaper record\" (a project's notes). MERGED from an equivalent process fact (a
129
+ mesh deploy script's \"ALWAYS KEEP A ROLLBACK\" comment, dated 2026-08-21), which records the
130
+ same rule arising independently on the mesh side after a deploy overwrote the live archive
131
+ with nothing kept."
132
+ - id: cp2077.anims.method.measure-in-the-frame-the-engine-actually-draws
133
+ claim: Measure a quantity in the exact reference frame the engine uses to draw it — gun space for
134
+ the FPP weapon's placement, the live per-frame camera basis for on-screen hand travel — never
135
+ in a convenient proxy frame such as a bone the mesh happens to be parented to in the authoring
136
+ tool, or a frame-0-fixed camera basis.
137
+ status: inferred
138
+ source: ModWright research
139
+ tags:
140
+ - working-method
141
+ - reference-frame
142
+ - gun-space
143
+ - camera-basis
144
+ detail: "Two concrete, separately discovered instances of the same mistake: sway slip measured for
145
+ weeks against the wrong bone (WeaponRight instead of gun space) reported the BETTER build as
146
+ worse; a candidate \"lunge\" clip's measured +0.81 to +0.95 m of hand travel collapsed to
147
+ +0.15/+0.17 m once measured in the live camera basis instead of a frame-0-fixed one, because
148
+ the camera itself was moving 0.836 m during the clip."
149
+ - id: cp2077.anims.method.rendered-images-outrank-scalar-metrics
150
+ claim: When a rendered image and a scalar gate disagree, trust the rendered image. Four separately
151
+ documented incidents on this project involved an aggregate or proxy scalar (a bounding-box
152
+ corner mistaken for a real mesh vertex, a min/max range unable to distinguish "left end down"
153
+ from "right end up", a metric that divided by the wrong axis) hiding exactly the thing it was
154
+ supposed to measure, caught only by looking at the actual rendered frame.
155
+ status: inferred
156
+ source: ModWright research
157
+ tags:
158
+ - working-method
159
+ - rendered-image
160
+ - scalar-metric
161
+ - instrument-bug
162
+ detail: "\"A reviewer should weight rendered images over any scalar here\" (a project's own notes),
163
+ stated as a direct consequence of the four documented instrument-lying incidents."
164
+ - id: cp2077.anims.method.clear-matrix-basis-before-reading-a-composed-pose
165
+ claim: In Blender, a bone that a given action does not key retains whatever matrix_basis was last
166
+ written by a PRIOR script or action; reading a composed pose (for example base pose combined
167
+ with an additive) without first resetting every bone to identity leaks the previous
168
+ measurement's pose into the next one, silently producing nonsense results (one documented case
169
+ produced an 11-meter bone span and an infinite value).
170
+ status: inferred
171
+ source: ModWright research
172
+ tags:
173
+ - working-method
174
+ - blender
175
+ - matrix-basis
176
+ - pose-leak
177
+ - gotcha
178
+ detail: "Standing fix: reset all bones to identity at the top of any pose-reading helper function
179
+ before evaluating a composed pose."
180
+ - id: cp2077.anims.method.evaluated-get-is-a-live-view-not-a-snapshot
181
+ claim: Blender's `object.evaluated_get(depsgraph)` returns a LIVE view onto the current depsgraph
182
+ state, not a snapshot; reading it after mutating the rig within the same function compares a
183
+ pose against its own already-mutated self. This made one drift-check gate structurally
184
+ incapable of ever failing — it printed 0.00000 m on a blend whose arms were actually 0.18 m
185
+ out of place.
186
+ status: inferred
187
+ source: ModWright research
188
+ tags:
189
+ - working-method
190
+ - blender
191
+ - evaluated-get
192
+ - live-view
193
+ - gate-defect
194
+ detail: The fix is to snapshot the source pose BY VALUE before touching anything in the rig; three
195
+ separate consequences of the live-view bug were found in one blend file (a pole-angle search
196
+ chasing a moving target, a second arm placed from the first arm's leftover state, and the
197
+ incapable-of-failing drift guard).
198
+ - id: cp2077.anims.method.trace-rotation-metric-has-a-resolution-floor
199
+ claim: The common bone-rotation-difference metric acos((tr(A^T B) - 1) / 2) has an approximate
200
+ 0.1485-degree resolution floor on a rig whose bone matrices carry a small non-unit scale
201
+ (measured 0.9993 to 1.0003 on this rig, which the formula assumes away); comparing a pose to a
202
+ re-sample of ITSELF returns 0.0000 mm position but about 0.1485 degrees rotation, so any
203
+ rotation reading at or below roughly 0.15 degrees in this tooling means "indistinguishable
204
+ from zero," not a small but real difference.
205
+ status: inferred
206
+ source: ModWright research
207
+ tags:
208
+ - working-method
209
+ - rotation-metric
210
+ - resolution-floor
211
+ - bone-scale
212
+ detail: "A related, separately fixed instrument bug: measuring the same rotation-difference metric
213
+ on RAW WORLD matrices inherits this ~2.4-2.5-degree floor, whereas measuring it on a
214
+ grip-space quantity (inv(weapon) @ hand) cancels the scale and reads cleanly — see
215
+ cp2077.anims.method.grip-space-metric-cancels-bone-scale."
216
+ - id: cp2077.anims.method.never-use-quaternion-rotation-difference-angle
217
+ claim: Never use Blender's `Quaternion.rotation_difference(...).angle` to compare two rotations for
218
+ similarity; due to quaternion double-cover it can report approximately 360 degrees for two
219
+ rotations that are actually identical (a sign-flipped representation of the same rotation).
220
+ status: inferred
221
+ source: ModWright research
222
+ tags:
223
+ - working-method
224
+ - blender
225
+ - quaternion
226
+ - rotation-difference
227
+ - gotcha
228
+ detail: Called out explicitly alongside the trace-formula resolution-floor caveat as a second,
229
+ independent way this project's rotation tooling can mislead if used carelessly.
230
+ - id: cp2077.anims.method.grip-space-metric-cancels-bone-scale
231
+ claim: Measuring a grip's fidelity via the grip-space quantity inv(weapon) @ hand cancels the rig's
232
+ small (approximately 0.999-1.0003) bone-matrix scale and reads a clean sub-degree number,
233
+ whereas the identical comparison performed on raw world matrices inherits the trace-formula's
234
+ roughly 2.4-2.5-degree resolution floor; prefer the grip-space form for any grip-fidelity
235
+ check.
236
+ status: inferred
237
+ source: ModWright research
238
+ tags:
239
+ - working-method
240
+ - grip-space-metric
241
+ - bone-scale
242
+ - resolution-floor
243
+ detail: With this fix applied, a family of clips that previously read a spurious ~2.4-degree
244
+ difference under raw-world-matrix comparison read exactly 0.0 mm / 0.0 degrees under the
245
+ grip-space metric.
246
+ - id: cp2077.anims.method.treat-engine-silence-as-a-signal
247
+ claim: "When authoring onto a bone or channel that no vanilla clip of the relevant TYPE ever touches
248
+ (for example torso rotation inside an FPP melee ambient-sway additive), treat that consistent
249
+ silence as the engine speaking, not as an oversight to fill in. Ignoring this once cost a full
250
+ game launch: a build that put the entire sway correction onto Spine3 measured a perfect result
251
+ in Blender and rendered completely motionless in game."
252
+ status: inferred
253
+ source: ModWright research
254
+ tags:
255
+ - working-method
256
+ - engine-silence
257
+ - torso-rotation
258
+ - spine3
259
+ - launch-cost
260
+ detail: See cp2077.anims.authoring.engine-limit-fpp-additive-ignores-spine-and-shoulders for the
261
+ full concrete case this rule is named for.
262
+ - id: cp2077.anims.method.additive-silence-rule-is-scoped-to-additives
263
+ claim: The "treat engine silence as a signal" rule is scoped specifically to ADDITIVE clips.
264
+ Full-body BASE attack clips (combo/heavy/final) are a different animDatabase node type
265
+ (convertToAdditive = 0) and the engine DOES let them move Spine and shoulder bones; vanilla
266
+ attack clips simply choose not to, which is confirmed evidence of a design convention, not
267
+ proof of a hard engine restriction — and this distinction was verified by reading the
268
+ serialized animgraph directly before ruling on it, rather than assuming the additive-only
269
+ silence finding transferred to base clips by default.
270
+ status: inferred
271
+ source: ModWright research
272
+ tags:
273
+ - working-method
274
+ - additive-scope
275
+ - base-clip
276
+ - torso
277
+ - design-convention
278
+ detail: This nuance exists specifically to prevent over-generalizing
279
+ cp2077.anims.method.treat-engine-silence-as-a-signal from the sway additive case to every
280
+ future silence observed in any clip type.
281
+ - id: cp2077.anims.method.one-parametric-attempt-then-hand-to-the-user
282
+ claim: After a parametric authoring approach has already failed once against a corrected, measured
283
+ specification, allow exactly ONE further parametric attempt; if the user rejects that attempt
284
+ too, switch to a user-hand-posed reference pose rather than continuing to tune parameters —
285
+ repeated parametric iteration against subjective adjective feedback ("half way", "back in
286
+ front") wastes iterations that a single hand-posed capture reliably resolves.
287
+ status: inferred
288
+ source: ModWright research
289
+ tags:
290
+ - working-method
291
+ - parametric-tuning
292
+ - hand-posed
293
+ - iteration-limit
294
+ detail: See cp2077.anims.authoring.one-hand-posed-frame-beat-five-parametric-iterations for the
295
+ concrete before/after this rule generalizes from.
296
+ - id: cp2077.anims.method.validate-screen-geometry-gates-against-vanilla-first
297
+ claim: Before trusting a new screen-space gate (in-frame fraction, aim-dot alignment, park screen
298
+ position) on a custom build, run it against the PRISTINE VANILLA clip occupying that same
299
+ state slot; two real gate bugs were found only this way — a gate that flagged vanilla's own
300
+ correct off-screen park as a failure, and a park-position gate that was blind to screen Y and
301
+ missed a hand resting at waist height.
302
+ status: inferred
303
+ source: ModWright research
304
+ tags:
305
+ - working-method
306
+ - screen-geometry-gate
307
+ - vanilla-calibration
308
+ - gate-bug
309
+ detail: This is the concrete application of
310
+ cp2077.anims.method.validate-a-gate-against-known-good-and-known-bad to screen-space rendering
311
+ gates specifically.
312
+ - id: cp2077.anims.method.instrument-the-game-dont-infer-from-screenshots
313
+ claim: When an in-game pose or transform is in question, read it directly with a lightweight in-game
314
+ logging probe (for example, logging a bone's position and axes in FPP-camera space at a fixed
315
+ cadence) rather than inferring it from screenshots; three separate game launches were spent
316
+ reading a weapon's pose off screenshots and getting the answer wrong each time, before this
317
+ rule was adopted.
318
+ status: inferred
319
+ source: ModWright research
320
+ tags:
321
+ - working-method
322
+ - runtime-probe
323
+ - screenshot-inference
324
+ - instrumentation
325
+ detail: The probe technique this rule refers to logs the weapon's origin and three axes in FPP
326
+ camera space via a direct transform call, at a fixed sample rate, over a fixed post-trigger
327
+ window.
328
+ - id: cp2077.anims.method.grep-anim-feature-source-in-redmod-scripts
329
+ claim: To find WHICH script raises a given animation feature's weight (for example, proving that
330
+ melee FPP arms are pure FK by finding who raises the ikLeftArm feature), grep
331
+ tools\redmod\scripts for the feature name directly rather than trying to infer the answer from
332
+ the animgraph's node structure alone.
333
+ status: inferred
334
+ source: ModWright research
335
+ tags:
336
+ - working-method
337
+ - anim-feature
338
+ - grep
339
+ - redmod-scripts
340
+ - ground-truth
341
+ detail: Concretely settled that ikLeftArm is raised only for climbing
342
+ (locomotionTransitions.script), confirming that the melee left-arm IK constraint node lives in
343
+ the Vault state and is inert in melee.
344
+ - id: cp2077.anims.method.gate-a-clip-against-the-specific-proven-impossible-approach
345
+ claim: Once an approach to a problem has been proven structurally impossible (for example, that no
346
+ single ambient-sway additive can serve every base pose without a base-dependent conjugation
347
+ once the shoulders above the arms are unreachable), encode a build-time GATE that asserts the
348
+ disproven approach was not silently reintroduced, rather than relying on it simply not being
349
+ re-attempted by memory.
350
+ status: inferred
351
+ source: ModWright research
352
+ tags:
353
+ - working-method
354
+ - proven-impossible
355
+ - regression-gate
356
+ - engine-limit
357
+ detail: 'Concrete example: the block-building script asserts that
358
+ Spine3/Spine2/Spine1/Spine/Hips/LeftShoulder/RightShoulder remain at identity on every touched
359
+ sway clip, specifically because the "sway survived" check alone (which Blender honors even on
360
+ Spine3) could not have caught a regression back into the disproven Spine3-carrier approach.'