← all games
action-adventure-sol-extra-high — FRICTION.md
# Friction log
## 2026-07-22 — create-yage package lookup stalled
- **Category:** test-infra gap
- **Trying to do:** Inspect the `create-yage` command before scaffolding the game.
- **What happened:** `npx create-yage@latest --help` produced no output for 60 seconds under the restricted network sandbox, so I stopped it and retried with network access.
## 2026-07-22 — force mode removed the live friction log
- **Category:** API friction
- **Trying to do:** Scaffold into the target after creating `FRICTION.md` at the moment the first issue occurred.
- **What happened:** The target had to exist to hold the log, so the scaffold needed `--force`. `create-yage` emptied the target before writing the template and removed `FRICTION.md`. I restored the log immediately after scaffolding.
## 2026-07-22 — recommended template targets a platformer
- **Category:** recipe gap
- **Trying to do:** Start the requested top-down action-adventure from the recommended scaffold.
- **What happened:** The generated example is a gravity-based platformer and includes generic sprite and sound assets. Its scene, physics settings, controls, and art do not fit this game, so only the project setup can be reused.
## 2026-07-22 — patch editor cannot remove scaffold binaries
- **Category:** test-infra gap
- **Trying to do:** Remove the unused PNG and WAV samples created by the recommended scaffold.
- **What happened:** The required patch editor rejects binary files as invalid UTF-8. The game does not reference the samples, so I left them untouched and removed every starter code path that used them.
## 2026-07-22 — small type signatures differed from familiar forms
- **Category:** API friction
- **Trying to do:** Compile the code-drawn effects, distance checks, and dialogue speaker definitions.
- **What happened:** YAGE's immutable vector method is `distance`, dialogue speaker colors are numeric, and particle number-range tuples are mutable. The first type check found each mismatch and pointed to every affected call site.
## 2026-07-22 — Playwright wrapper package lookup stalled
- **Category:** test-infra gap
- **Trying to do:** Start the required real-browser desktop and mobile verification with the bundled Playwright wrapper.
- **What happened:** The wrapper uses `npx` and produced no output for 60 seconds under restricted network access. I stopped the process and retried it with package download permission.
## 2026-07-22 — browser launch stalled inside the process sandbox
- **Category:** test-infra gap
- **Trying to do:** Open the running game in Chromium after the Playwright CLI became available.
- **What happened:** The sandboxed browser launch produced no output for 60 seconds. I stopped it and retried the same local-page launch outside the process sandbox.
## 2026-07-22 — browser requested an implicit favicon file
- **Category:** asset gap
- **Trying to do:** Verify a clean browser boot with no missing resources.
- **What happened:** Chromium requested `/favicon.ico` even though the game has no file-based assets. I added a code-defined SVG data URL as the page icon.
## 2026-07-22 — contact pressure overwhelmed the orchard puzzle
- **Category:** recipe gap
- **Trying to do:** Verify the first puzzle during a normal keyboard traversal.
- **What happened:** A steering-driven moper remained in contact long enough to faint the player twice while crossing the orchard. I lengthened the player's post-hit grace period and made a moper flee briefly after landing contact.
## 2026-07-22 — a menu confirm edge reached the world after close
- **Category:** recipe gap
- **Trying to do:** Use Moon Jam from the inventory panel while standing near an orchard sign.
- **What happened:** The inventory action closed the panel, then the shared `interact` edge reached world interaction later in the same frame and opened the sign dialogue. I added a one-frame focus handoff after any modal closes.
## 2026-07-22 — touch layout inspection exposed an array
- **Category:** docs ambiguity
- **Trying to do:** Tap a named virtual button from its debug layout during mobile verification.
- **What happened:** I treated the reported button collection as a keyed object, but the virtual-controls layout exposes an array of `{ id, layout }` records. I inspected the live shape and selected the button by `id`.
## 2026-07-22 — the first top-down pass had no shared depth or collision recipe
- **Category:** recipe gap
- **Trying to do:** Review the delivered world after player feedback about overlap, collision, and combat feel.
- **What happened:** Physical props were split between insertion-ordered layers, so signs always painted above characters, while `constrainPlayer` handled only world bounds and two gates. The game needs one Y-sorted actor layer plus reusable solid shapes before individual props and attacks can feel consistent.
## 2026-07-22 — the requested verification port was occupied
- **Category:** test-infra gap
- **Trying to do:** Start the revised game on the same local port used by the first browser pass.
- **What happened:** Port 5199 was still owned by another process, so Vite selected port 5200. Verification continued on the printed local URL.
## 2026-07-22 — the first telegraphed lunge ended before contact
- **Category:** recipe gap
- **Trying to do:** Verify that a stationary player takes damage after ignoring a soot sprite's warning ring.
- **What happened:** The wind-up was readable, but the 0.26-second steering lunge ended before the sprite crossed its starting distance to the player. I extended the active window and raised its speed and acceleration, then repeated the contact test.
## 2026-07-22 — two orchard enemies crowded the tuning route
- **Category:** recipe gap
- **Trying to do:** Play the three-note orchard puzzle while using Hearthburst for both combat and tuning.
- **What happened:** Two independently charging soot sprites could chain knockback across the narrow route and interrupt the puzzle more than the attack lesson justified. I kept one orchard sprite and one canal sprite, leaving room to read and counter each attack.
## 2026-07-22 — a browser assertion crossed execution contexts
- **Category:** test-infra gap
- **Trying to do:** Read the HUD objective after rushing through the charged mist.
- **What happened:** The movement and dash ran in the browser, but the final assertion read `document` from the Playwright command process rather than `page.evaluate`. I repeated the state read inside the page context.
## 2026-07-22 — a charged reed pushed the player back after the dash
- **Category:** recipe gap
- **Trying to do:** Comet Rush through a canal reed and continue toward the second reed.
- **What happened:** The reed ignored collision during the dash, then became solid on the next normal frame and resolved the player back to the near side. Reeds are thin plants, so I removed their solid body and kept their dash-contact trigger.
## 2026-07-22 — a boss charge could keep body-pushing after contact
- **Category:** recipe gap
- **Trying to do:** Stand inside the Moon Kettle's warning ring and verify one charge hit and one knockback.
- **What happened:** After the charge consumed its attack window, ordinary overlap separation could continue pushing the player for several frames. Boss and enemy charges now enter recoil whenever the attack window makes contact, even when invulnerability rejects damage, and ordinary separation is capped per frame.
## 2026-07-22 — screenshot paths resolve from the repository root
- **Category:** test-infra gap
- **Trying to do:** Capture the inventory panel while checking the boss-item confirmation.
- **What happened:** The Playwright helper resolved the game-relative `output/` path from the repository root and failed because that directory did not exist. I repeated the capture with an explicit repository-relative path.
## 2026-07-22 — mobile interaction rerun hit the automation limit
- **Category:** test-infra gap
- **Trying to do:** Repeat the touch-drag and virtual-button assertions in a fresh 844×390 mobile-emulated session after the revision.
- **What happened:** The page and title loaded, but the browser runner hit its environment usage limit before the first interaction command. I stopped the browser test rather than bypassing the guard; the earlier full touch pass still covers the unchanged virtual-control wiring.