Skip to content

[FEATURE] Process: install design skills by default, require an art-direction artifact, make the visual scorecard the completion bar, add a feel gate, run the game gates #1690

Description

@Noisemaker111

Problem: the process lets a generic game pass. Verified on main: packages/jgengine/src/skills.ts minimal set (now fixed in #1695); game-design/SKILL.md:14 and level-design/SKILL.md:14 say "not a mandatory step"; the visual scorecard lives at .claude/skills/jgengine-ui/references/visual-scorecard.md and nothing cites it; scripts/check-game-shape.ts:31-34, check-game-front-end.ts:9-12, check-content-gate.ts all exit clean when Games/ is missing (always true in engine CI); the scaffold in packages/jgengine/src/templates/gameFiles.ts (lines ~1104-1129 scene, ~1206-1219 models, ~1266-1276 world) ships the same rogue, two crates, three trees on an infinite plane.

Done: task 0 (default skills include game-design and jgengine-ui) landed in #1695.

Tasks, one PR each, in order:

  1. Remove the opt-out from the design skills. Edit .claude/skills/game-design/SKILL.md and .claude/skills/level-design/SKILL.md: delete the "not a mandatory step" sentence; state that for a greenfield build the greenfield contract in game-design/references/application-playbook.md (promise, pillars, anti-pillars, core decision, falsifier) is required output before code, and that audits may read only the audit sections. Run bun run check-skills. Docs only; [skip changelog] in the commit message.

  2. Move the visual scorecard under verify and cite it. git mv .claude/skills/jgengine-ui/references/visual-scorecard.md .claude/skills/jgengine-verify/references/visual-scorecard.md; fix every link (grep -rn visual-scorecard .claude apps packages); add one paragraph to jgengine-verify/SKILL.md (evidence section) and one line to workflow/SKILL.md saying a PR touching a rendered surface includes the ten-category scorecard table. Run bun run check-skills, bun run check-doc-symbols. Docs only.

  3. Art-direction artifact and gate. In packages/jgengine/src/templates/gameFiles.ts add src/art-direction.md to the scaffold with these sections, each starting with the placeholder line TODO: fill in: Reference images (3 links), World palette (5 hex values with roles), Material language, Lighting mood, Silhouette rules, UI typography, Chosen look (cinematic | flat). Add scripts/check-art-direction.ts: for each game dir under Games/* and the cwd when run inside a created game, fail if the file is missing or any TODO: fill in remains; print the offending section. Register it in scripts/run-stages.ts next to check-game-front-end, add a "check-art-direction" script to root package.json, and call it from jgengine doctor (packages/jgengine/src/doctor.ts). Add .claude/skills/jgengine/SKILL.md step 1 output: "write src/art-direction.md before any code". Tests: a fixture with placeholders fails, a filled one passes (scripts/check-art-direction.test.ts, mirror check-game-front-end's test style). CHANGELOG under Added.

  4. Break the identical scaffold. In gameFiles.ts, make the starter scene, player model id, and ground read from an object the create command fills from three new flags (--player <asset id>, --ground flat|terrain, --scene empty|starter), defaulting to empty scene and terrain ground so no two games start identical; keep --scene starter for the old content. Update packages/jgengine/src/create.ts arg parsing and its tests. CHANGELOG under Changed (CLI line).

  5. Feel gate. scripts/check-game-feel.ts over Games/*/src (and cwd for a created game): fail a game that declares input with a fire/attack/interact action but has zero audio.play/ctx.game.audio calls, or has combat features with no hitReaction/impactPresets/cameraShake reference, or sets camera with no targetSmoothing/smoothing field. Ratchet against scripts/game-feel-baseline.json exactly like scripts/check-game-front-end.ts and its baseline (copy that structure). Register in run-stages.ts and root package.json. Tests with two fixture dirs.

  6. Perf targets in the verify skill. In jgengine-verify/SKILL.md perf rung, add a table: flat look 16.6 ms frame / 300 draw calls / 500k triangles; cinematic look 16.6 ms / 600 / 1.5M; and require a debug_snapshot before/after pair in PRs that add world content. Docs only.

  7. Make the game gates run in CI. In .github/workflows/*.yml add a job that runs bun run games:clone (uses scripts/ensure-games.ts; needs a token secret with read access to Noisemaker111/JGengine-games, name it GAMES_CLONE_TOKEN and read it in ensure-games.ts when present) and then bun run check-game-shape, check-game-front-end, check-content-gate, check-art-direction, check-game-feel. Remove the "no Games/ → exit 0" branches from those scripts when CI=true so a missing clone fails loudly. If the secret cannot be added, document that in the PR and keep the local-only behavior.

Acceptance: tasks 1 to 7 merged. Closes #1690 on task 7.

Rules: wait for bun run agent:bootstrap --check; branch claude/<slug> off origin/main; claim comment first; one task per PR with Refs #1690; bun run gen after export changes; CHANGELOG bullet for packages/*/src changes; run check-types and test for touched packages plus check-stateful-ratchet, check-doc-symbols, check-orphan-ratchet; merge origin/main before pushing; squash auto-merge; fix CI on the same branch.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions