@genex-ai/cli-demo 1.22.0-dev.605 → 1.24.0-dev.607

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@genex-ai/cli-demo",
3
- "version": "1.22.0-dev.605",
3
+ "version": "1.24.0-dev.607",
4
4
  "description": "Set up your project's agent workspace (.claude/.codex/.cursor in the game folder), authorize, create a game project, generate AI assets, and publish (genex CLI).",
5
5
  "type": "module",
6
6
  "bin": {
@@ -110,8 +110,14 @@ function modelBudgetFor(tier: QualityTier): number {
110
110
  * `model-animations-glb` bundle. Animation-only clip GLBs from the character
111
111
  * lane (`character-motion-*-glb`) are deliberately NOT here: the rung
112
112
  * pipeline would prune away the sampler data that IS the clip. */
113
+ // `rigged-character.glb` is the role the GUIDED character lane actually writes —
114
+ // reversed words and a dot extension, unlike every other entry here. Until
115
+ // 2026-09-07 neither this regex nor the server's rung writer knew it, so every
116
+ // generated character was fetched provider-raw (measured: 23.85 MB, and its
117
+ // texture failed to decode into a white body). The dot is safe: the rung URL is
118
+ // built by appending `@<width>`, so it lands as `rigged-character.glb@2048`.
113
119
  const MODEL_ROLE_RE =
114
- /^(model-glb|character-rigged(-a\d+)?-glb(-r\d+)?|model-segmented-glb|model-rigged-glb|model-animations-glb|model-anim-.+-glb)$/;
120
+ /^(model-glb|character-rigged(-a\d+)?-glb(-r\d+)?|rigged-character\.glb|model-segmented-glb|model-rigged-glb|model-animations-glb|model-anim-.+-glb)$/;
115
121
 
116
122
  /** Resolve the model URL a THIS-tier device should load. `ktx2: true` (from
117
123
  * createGltfLoader) upgrades to the GPU-compressed sibling. */
@@ -217,6 +217,19 @@ the same ladder through
217
217
  KTX2-capable games can also pass `ktx2Load` to `loadTextureWithFallback` so
218
218
  textures use their `.ktx2` variants.
219
219
 
220
+ **A texture that arrived through a `.ktx2` rung is NOT drawable.** Its `.image`
221
+ is `{ width, height, mipmaps }`, never an `HTMLImageElement` — so
222
+ `ctx.drawImage(tex.image, …)` throws *"The provided value is not of type
223
+ '(CSSImageValue or HTMLCanvasElement or …)'"*. MEASURED 2026-09-07: a village
224
+ build wrote its own `capTextures()` pass to cap every texture's long edge and
225
+ cast `tex.image as CanvasImageSource` to silence the type error. All ten of its
226
+ generated buildings and both villager bodies then failed to load behind a
227
+ swallowed warning — a fully generated, fully wired world that rendered EMPTY,
228
+ and scored 1/9 with the assets sitting in R2. **Do not hand-roll a texture
229
+ downscaler: the rungs ARE the downscaler**, and `@1024` already did it before
230
+ the bytes left our side. If you must touch pixels, skip the compressed ones
231
+ first — `if ((tex as THREE.CompressedTexture).isCompressedTexture) return;`.
232
+
220
233
  Every generated GLB ladders — `genex model` including its `segment` / `rig` /
221
234
  `animate` outputs, and generated characters. If `pickModel` hands a generated
222
235
  model URL back unchanged, this game's vendored kit predates that role: the