← all games
stealth-gpt-5-extra-high — FRICTION.md
# Friction log
## 2026-07-22 — Scaffold could not reach npm in the sandbox
- **Category:** test-infra gap
- **Trying to do:** Inspect and run `create-yage`, then install the scaffold dependencies.
- **What happened:** The first npm registry request failed with `ENOTFOUND registry.npmjs.org`, and earlier `npx create-yage --help` attempts waited without output. Running the same commands with approved network access succeeded.
## 2026-07-22 — Empty ability-step parameters reject timeline fields
- **Category:** API friction
- **Trying to do:** Define ability timeline steps that only need `from`/`to` or `at`, with no game-owned parameters.
- **What happened:** Typing the step parameters as `Record<string, never>` also rejected the add-on's own `from`, `to`, and `at` fields because the index signature applies to every key. The step needs an empty object type without a rejecting index signature.
## 2026-07-22 — Renderer configuration differs from Pixi initialization
- **Category:** docs ambiguity
- **Trying to do:** Request antialiasing and a device-pixel-ratio cap when constructing `RendererPlugin`.
- **What happened:** `RendererConfig` does not accept the familiar Pixi `antialias` or `resolution` fields. The scaffold guide did not list the supported renderer fields, so the compile pass was the first clear contract.
## 2026-07-22 — `LayerDef` is exported by the renderer package
- **Category:** API friction
- **Trying to do:** Type the scene's render layer list.
- **What happened:** `LayerDef` is not exported from `@yagejs/core`; the generated starter imports it from `@yagejs/renderer` even though `Scene` owns the layer property.
## 2026-07-22 — The sandbox blocked the local Vite listener
- **Category:** test-infra gap
- **Trying to do:** Start the game on `127.0.0.1:5199` for the browser verification pass.
- **What happened:** Vite failed with `listen EPERM: operation not permitted`. The same local server command needs approved execution outside the sandbox.
## 2026-07-22 — Browser requested an undeclared favicon
- **Category:** asset gap
- **Trying to do:** Load the game with a clean browser console and no file-backed assets.
- **What happened:** The page worked, but the browser requested `/favicon.ico` and logged a 404. An inline data-URL icon avoids both the missing path and an unnecessary shipped asset.
## 2026-07-22 — Movement and ability aim need different neutral-input rules
- **Category:** recipe gap
- **Trying to do:** Reuse one directional-input helper for player movement and dash aim.
- **What happened:** A neutral dash needs the last facing direction, while neutral movement must stay at zero. Sharing the facing fallback made the player walk automatically and accumulate catches at the entry. The browser runtime snapshot exposed the mismatch.
## 2026-07-22 — Documented browser wait syntax is rejected
- **Category:** docs ambiguity
- **Trying to do:** Hold the browser on the idle game for five seconds before reading another runtime snapshot.
- **What happened:** The installed Playwright CLI rejected the documented `run-code "await page.waitForTimeout(5000)"` example with `Unexpected identifier 'page'`. I used the elapsed time between normal browser commands and compared snapshots instead.
## 2026-07-22 — A fixed detection floor overpowered visibility modifiers
- **Category:** recipe gap
- **Trying to do:** Cross the first lit patrol lane during the cloak's short active window.
- **What happened:** The detection formula added a large fixed rate before light, shadow, and cloak modifiers. A guard could fully detect a cloaked player in the intended crossing window. Scaling acquisition by final visibility makes light and shadow the controlling mechanic.
## 2026-07-22 — The recommended scaffold included unused sample assets
- **Category:** asset gap
- **Trying to do:** Confirm that the final game only uses code-drawn visuals and procedural audio.
- **What happened:** The final file audit found platformer PNG and WAV samples under `public/assets/`, despite the task note that no assets ship with the scaffold. The game never referenced them, and I removed them from the delivered folder.
## 2026-07-22 — Graphics arcs inherit the current drawing cursor
- **Category:** API friction
- **Trying to do:** Draw short player windup and sneak arcs around the player.
- **What happened:** `GraphicsContext.arc()` continued the active path and drew a line from the previous drawing cursor to the arc's start. Each independent arc needs an explicit `moveTo()` at its first point.
## 2026-07-22 — Two patrol routes crossed furniture
- **Category:** recipe gap
- **Trying to do:** Let every guard complete a closed patrol route with circle-versus-wall collision.
- **What happened:** The archive route crossed a shelf, and the security route passed within the guard radius of a console. Both guards stopped at the collision boundary instead of reaching the next waypoint.
## 2026-07-22 — Inventory symbols did not explain item purpose or carrying cost
- **Category:** recipe gap
- **Trying to do:** Keep a minimal four-slot HUD while making tools and loot readable on first contact.
- **What happened:** Glyph-only slots hid the lockpick and noisemaker uses, and the HUD did not show that carried valuables increase footstep noise and reduce speed.
## 2026-07-22 — Capture preserved spent kit charges and cooldowns
- **Category:** recipe gap
- **Trying to do:** Make capture costly without making the next attempt worse than the first.
- **What happened:** Capture confiscated loot and reset position, but consumed noisemakers stayed consumed and ability cooldowns kept running. A retry needs the field kit and ability definitions restored while confiscated valuables remain lost.