← all games
match-3-sol-medium — FRICTION.md
# Friction log
## 2026-07-27 — Match-3 scaffold mismatch
- **Trying to do:** Start the requested match-3 project with `create-yage` and the required abilities and inventory addons.
- **What happened:** The recommended scaffold is a keyboard-first platformer and its feature flags do not include either addon. The seed must be replaced, and the two packages must be added by hand.
- **Category:** recipe gap
## 2026-07-27 — Procedural audio has no synthesis surface
- **Trying to do:** Create the requested procedural selection, swap, match, cascade, power-up, blocker, music, and result sounds through `@yagejs/audio`.
- **What happened:** The audio package plays declared sound assets but does not expose oscillator, envelope, or procedural-buffer primitives. The game still installs the YAGE audio plugin for engine audio lifecycle, while a small Web Audio voice layer generates the no-asset soundtrack and effects.
- **Category:** missing primitive
## 2026-07-27 — Dependency install stalled without output
- **Trying to do:** Install the generated project's npm dependencies so the required production build could run.
- **What happened:** Two `npm install` attempts made no progress and printed no diagnostics; the second was stopped after one minute. I switched to an offline install/local-package fallback instead of leaving an unbounded installer running.
- **Category:** test-infra gap
## 2026-07-27 — Shared dependency tree blocked Vite's config cache
- **Trying to do:** Reuse the sibling YAGE repository's complete local dependency tree after the registry install stalled.
- **What happened:** The shared tree is readable but outside this workspace's writable roots. Vite's default config loader tried to write `.vite-temp` inside that tree and failed with `EPERM`. Using Vite's `--configLoader runner` keeps temporary config output out of the shared dependency directory and allows builds and development runs.
- **Category:** test-infra gap
## 2026-07-27 — Playwright CLI wrapper stalled
- **Trying to do:** Follow the prescribed Playwright CLI workflow for mobile and desktop browser verification.
- **What happened:** The wrapper's `npx --package @playwright/cli` path stalled with no output, matching the registry behavior seen during install. The sibling YAGE workspace already has Playwright and its browsers installed, so verification continued with that local runtime.
- **Category:** test-infra gap
## 2026-07-27 — Headless audio cannot be judged by ear
- **Trying to do:** Verify the distinct procedural cues and ambience during automated play.
- **What happened:** The browser suite exercised every cue path without runtime errors, but its headless, muted Chromium process cannot provide an audible quality check. The sound mix still needs a short human listening pass on a real browser/device.
- **Category:** test-infra gap
## 2026-07-27 — Required YAGE grounding was not discoverable
- **Trying to do:** Follow the repository's required workflow before planning and implementing the game.
- **What happened:** The YAGE game-development skill was mentioned only in the root `CLAUDE.md` and lived under `.claude/skills/`. Codex did not list it as an available skill, and no root `AGENTS.md` required agents to read it. I noticed the reference but did not open the skill, so its project-layout rules and required `GAME.md` handoff did not guide the implementation.
- **Category:** AGENTS.md ambiguity
## 2026-07-27 — No general game-architecture recipe
- **Trying to do:** Structure a multi-screen match-3 game with clear scene, component, communication, and directory boundaries.
- **What happened:** The YAGE game-development skill routed to RPG and shooter design references but had no general architecture reference. The implementation optimized for one-pass completion and accumulated input, gameplay flow, rendering, persistence, audio, navigation, and test access in one 855-line component. The skill also did not force a choice between feature-first and layer-first organization.
- **Category:** recipe gap
## 2026-07-28 — UI package was not routed from interface requirements
- **Trying to do:** Choose the YAGE engine surface for the HUD, menus, buttons, progress bars, and pause overlay.
- **What happened:** The default scaffold installed `@yagejs/renderer` but not `@yagejs/ui`. `create-yage` adds the UI package only when the caller already knows to pass `--features ui`; its interactive flow does not ask about optional features. The generated `AGENTS.md` and the match-3 guidance also did not map HUD, menu, and modal requirements to `@yagejs/ui`, so the implementation extended `GraphicsComponent` and `TextComponent` by hand. Once inspected, the UI documentation contained the required layout, button, input, and anchoring primitives, so the failure was package discovery rather than a missing API.
- **Category:** recipe gap