Commit Graph

183 Commits

Author SHA1 Message Date
rshtirmer 3346d29563 Detect animation GIF output by magic bytes; add /retrodiffusion to README
The previous animate-mode extension check looked for "gif" in the style
name, but documented animation styles (walk-cycle, idle, attack) never
contain that substring, so GIF responses were always saved as .png and
wouldn't load. Sniff the base64 prefix instead.

Also drop unused `extname` import and add a `/retrodiffusion` row to the
README slash-commands table to match the new user-invocable skill.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 14:47:32 -04:00
Max Bridgland 64397ec290 Add retrodiffusion 2026-05-01 19:42:14 -04:00
Damon Pidhajecky f25b246b61 Add add-multiplayer skill + maze-tanks example (#20)
* Add add-multiplayer skill (PartyKit backend)

New user-invocable skill that adds real-time or turn-based multiplayer to
existing browser games via PartyKit (Cloudflare Durable Objects). Follows
the additive-edit pattern from scaffold-gateables and the integration-flow
pattern from monetize-game.

Single-player gameplay is preserved when the server is unreachable —
NetworkManager catches all connection errors and emits network:disconnected
without throwing.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Add maze-tanks example to dogfood the add-multiplayer skill

Built via the /make-game pipeline + /add-multiplayer end to end —
4-player Phaser tanks-in-a-maze with PartyKit realtime sync (20Hz),
shooter-authoritative bullets, broadcast deaths, and design-pixel
wire format that's PX-independent across clients with different
window sizes/DPRs. Live-players-only (no NPC bots).

Live deploy verified at maze-tanks-multiplayer.dpid.partykit.dev.

STEP*-DONE.md files capture ~14 actionable findings from running
both pipelines as a real user would. Notable ones: clerk auth flow
is broken in 2026 (use --provider github), wire format must be
PX-independent, local-human deaths must broadcast regardless of
killer, round-end consensus needs human-only counting.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Apply add-multiplayer skill fixes from maze-tanks dogfood findings

Addresses 9 of the 10 findings surfaced while building examples/maze-tanks.
The 10th (RECONNECT_*BACKOFF_MS naming) was a non-issue — the skill files
are internally consistent; the inconsistency was introduced by a per-game
override in the dogfood example.

Changes by file:

- SKILL.md: Step 6 now requires `--provider github` for partykit login
  (default `clerk` flow hangs on retired dashboard.partykit.io). New
  troubleshooting entries for the clerk hang and the welcome race.

- deploy.md: Step 2 rewritten around GitHub device-code OAuth. New
  troubleshooting entries for clerk hang, partykit npm-audit transitive
  vulns (don't `audit fix --force`), and parent .env inheritance by
  partykit dev.

- partykit-server.md: `compatibilityDate` bumped to 2026-01-15 with a
  policy note about keeping it within ~6 months. `src/types.ts` marked
  REQUIRED (the realtime/turn-based templates import from it).

- architecture.md: documents that the wire schema is open (games may add
  fields like `rotation`); requires positions broadcast in design pixels
  for PX-independence; constructor-ordering footgun for `gameState.multiplayer`
  reset(); detect Constants umbrella vs per-block export shape before
  patching.

- client-integration.md: `NetworkManager._connect` guards `import.meta`
  for non-Vite contexts; reset() block uses `if (this.multiplayer)`
  guard; new "Welcome-race gotcha" section with idempotent seed-then-
  subscribe pattern; comment in NetworkManager imports about adapting
  to umbrella vs per-block Constants.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Remove implementation logs; clean up README and package.json

The 6 STEP*-DONE.md files were build-session implementation logs from
the agentic pipeline that produced this example. Their useful findings
have already been folded into the skill docs (architecture.md,
client-integration.md, deploy.md, partykit-server.md, SKILL.md). The
maze layout, code changes, and bug fixes are all visible in the source
and git history.

- Delete STEP{1,1.5,2,3}-DONE.md, STEP-MULTIPLAYER-DONE.md, STEP-MP-GLUE-DONE.md
- Update README.md header tagline + remove the build-journal section
- Update package.json description

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Add maze-tanks to the examples list in CLAUDE.md

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Address coderabbit major findings on add-multiplayer

8 fixes for issues flagged in CodeRabbit's review pass:

1. server.ts: UTF-8 byte-length check via TextEncoder so multibyte
   chars don't slip past MAX_MESSAGE_BYTES (was using JS string .length).
   Also persist the server-stamped state in `peers` so late joiners
   see the same `ts` as everyone else.
2. NetworkManager.js: clear room-switch race by deferring the new
   connect to _onSocketClosed via `pendingRoomId`. Old behavior raced
   the previous socket's async close, misclassifying it as an error
   and triggering a duplicate reconnect on top of the new room.
3. NetworkManager.js: emit network:disconnected when client.connect()
   throws synchronously — the single-player fallback was relying on
   socket callbacks that never fire in that path.
4. MazeSystem.js: handle zero-distance overlap in resolveCircle().
   When dx == dy == 0, the previous code yielded NaN normals and
   left the entity embedded in the wall.
5. GameScene.js: extract the TANK_DIED / ROUND_ENDED HUD listeners to
   stable refs and unregister them on Phaser SHUTDOWN. Previous inline
   lambdas leaked across scene restarts.
6. Bullet.js: cross-client unique IDs (shooterId:timestamp:seq)
   instead of `b${seq++}` which collided across tabs.
7. RemotePlayerRegistry.js: validate playerId is a non-empty string
   before mutating the remotePlayers map (defends against malformed
   network messages, including __proto__-style attacks).
8. EventBus.js: add SPAWN_ASSIGNMENTS_CHANGED to the catalog (it was
   being emitted as a string literal, breaking the no-magic-events
   convention).

Skill docs updated to match (architecture.md PX scaling for remote
positions, client-integration.md room-switch handoff, partykit-server.md
TextEncoder pattern).

partykit.json compatibility date pinned to 2024-09-25 (a stable
PartyKit-published date; previous 2025-01-01 wasn't a real release).
tsconfig adds WebWorker lib so TextEncoder + console types resolve.

All changes verified via tsc + node --check.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: rshtirmer <rshtirmer@gmail.com>
2026-04-30 18:11:09 -04:00
Ryan Shtirmer a1d428d2c2 Merge pull request #19 from OpusGameLabs/feat/scaffold-gateables
Add scaffold-gateables skill + /make-game monetization intent
2026-04-27 16:02:41 -04:00
dpid 479d4c5586 Scaffold gateables at silver/gold only; bronze is the default
Bronze tier is the default experience everyone plays — no feature is
gated behind it. Previous proposal logic was creating bronze-tier
features (e.g. a "QoL screen-shake toggle") which is a no-op gate.

Updates principle 4, the tier vocabulary section, the example proposal
table, the Step 1.25 subagent prompt, and related copy across make-game
and the skill frontmatter to exclude bronze from feature scaffolding.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 16:13:31 -07:00
dpid f5d6c36693 Remove "unsure" monetization intent option
Drops option 5 from the Step 0 question. Ambiguous answers are re-asked
rather than silently defaulting to Play.fun — simpler branching, one
fewer code path to maintain.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 15:22:51 -07:00
dpid 81e903951b Add scaffold-gateables skill + /make-game monetization intent
Introduces /scaffold-gateables, a monetization-agnostic skill that adds
gateable features (skin picker, continue-after-death, bonus mode, QoL
toggles) to an existing game with a single isEntitled() capability seam.
Games stay fully playable with every gateable locked by default; any
paywall, subscription, or entitlement layer can flip them on later.

Wires it into /make-game as conditional Step 1.25, driven by a new
"monetization intent" question in Step 0 (none / Play.fun / sub.games /
both / unsure). This closes the gap where /subgames (subdotgames/skills,
separate repo) had nothing meaningful to gate on fresh pipeline output.

Also branches Step 4 "next up" messaging, Step 5, and Pipeline Complete
on the intent; converts task-number references to semantic names so
numbering shifts cleanly when Step 1.25 is included or skipped.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 15:05:46 -07:00
Ryan Shtirmer aa6850bacc Merge pull request #15 from OpusGameLabs/feat/worldlabs-spark-2
feat(worldlabs): update skill for Spark 2.0 renderer
2026-04-22 19:43:27 -04:00
Ryan Shtirmer ffea48cc88 Merge pull request #18 from OpusGameLabs/sub-games
Add sub.games as skill
2026-04-22 19:33:10 -04:00
Max Bridgland 5923f04557 Remove local .agent files 2026-04-22 17:59:35 -04:00
Ryan Shtirmer 07830b7b65 Merge pull request #17 from OpusGameLabs/feat/threejs-perf-skill
feat(threejs-perf): add Three.js performance reference skill
2026-04-22 17:51:38 -04:00
Max Bridgland 19c626397c Add sub.games skill as submodule 2026-04-22 17:50:43 -04:00
Max Bridgland adea468566 Add sub.games skill as subdmoule 2026-04-22 17:49:21 -04:00
rshtirmer 1b527a5b02 fix(threejs-perf): replace PR #10 cited numbers with 4.7 clean-room reproduction
Two parallel subagents re-benchmarked the instancing patterns from scratch
(temp dirs, fresh Three.js r183 install, headless Chromium via Playwright,
30 warmup + 180 sample frames, median of 3 runs).

Core claim reproduced: InstancedMesh wins by 1–2 orders of magnitude on
CPU-side metrics (draw calls, render CPU, update loop, build time).

Changes:
- Replace all cited numbers with measured values
- Drop Traversal p95 from headline metrics (hits noise floor in both
  variants with modern Three.js — not a meaningful before/after signal)
- Add Render CPU p95 as the headline timing metric (was not in PR #10)
- Add methodology note: SwiftShader in headless Chromium makes GPU-bound
  metrics (FPS, frame time) unreliable; CPU-side metrics are trustworthy
- Clarify static-world optimized case is "2 draw calls" (InstancedMesh +
  floor plane), not 1
- Note baseline ~19,365 (not 19,600) because individual meshes frustum-cull
  at the edges; InstancedMesh does not cull per-instance

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 17:49:02 -04:00
Ryan Shtirmer 8e4e4fb0dc Merge pull request #16 from OpusGameLabs/audit-fixes
Make usage around public API keys more clear, best security practices.
2026-04-22 17:20:56 -04:00
rshtirmer a0af1c3671 feat(threejs-perf): add Three.js performance reference skill
New reference skill covering InstancedMesh patterns for draw-call reduction,
with measured before/after numbers (19,600 → 1 draw calls for static scenes,
8,000 → 1 for moving entity fields).

- skills/threejs-perf/SKILL.md: core patterns + decision tree + measured results
- instancing-static.md: InstancedMesh for static repeated objects
- instancing-moving.md: flat state buffer + batched setMatrixAt writes
- templates/: 4 baseline vs optimized reference snippets

Also wires the new skill into threejs-game (companion pointer + draw-call
tip), make-game step 1 (loaded alongside threejs-game for 3D projects),
and CLAUDE.md (skill tree + reference-skill count + companion-files list).

Focused cherry-pick from #10 — drops the benchmark harness, custom
agent-skills standard, and validator (Anthropic's Skills format is now
canonical), plus the mini-world/bot-arena demos.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 17:20:21 -04:00
Max Bridgland 760c4c0ae1 Make usage around public API keys more clear, best security practices. 2026-04-21 19:55:45 -04:00
dpid cc72ffc647 fix(worldlabs): pin three to ^0.180.0 to match Spark 2.0 peer dep
Spark 2.0 declares `three@^0.180.0` as its peer. Three treats every 0.x
minor as potentially breaking, so the previous `three@^0.183.0` pin
caused ERESOLVE on `npm install` for both the worldlabs-arcade example
and any new game scaffolded from the threejs-3d template + /worldlabs.

- examples/worldlabs-arcade: three ^0.183.0 → ^0.180.0
- templates/threejs-3d: three ^0.183.0 → ^0.180.0
- skills/worldlabs/SKILL.md: document the three@^0.180.0 requirement
  alongside the @sparkjsdev/spark@^2.0.0 pin

Verified with a clean `npm install` in examples/worldlabs-arcade — no
peer warnings, no --legacy-peer-deps needed. Template uses only stable
pre-0.150 three APIs (Scene, WebGLRenderer, GLTFLoader, OrbitControls,
MeshoptDecoder, SkeletonUtils), so stepping back 3 minors has no
functional impact.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 16:51:22 -07:00
dpid 561bfd094e feat(worldlabs): update skill for Spark 2.0 renderer
Document SparkRenderer as the Three.js integration point for World Labs
Gaussian Splat scenes (was SplatMesh-only). Surface the 2.0 quality knobs
(sortRadial, enableLod, lodSplatScale, maxPixelRadius), switch the render
loop snippet to setAnimationLoop, use `await splat.initialized` as the load
completion idiom, and add troubleshooting for the 2.0-specific failure
modes (missing SparkRenderer = black scene, LOD pop, unlit GLB characters
via renderEnvMap). Re-aligns the skill docs with the reference
implementation in examples/worldlabs-arcade, which already uses the 2.0
API.

Also pins the example's @sparkjsdev/spark dependency from "latest" to
"^2.0.0" to prevent silent breakage on future majors.

Bumps skill metadata version 1.3.0 → 1.4.0.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 16:35:17 -07:00
rawmen0x fd515e9015 Update README.md
Added Star history widget
2026-04-13 14:35:55 -04:00
Ryan Shtirmer 54ba32c7cf Merge pull request #12 from OpusGameLabs/refactor/unify-site-consolidate-folders
Unify site build + consolidate folder structure
2026-03-23 19:58:04 -04:00
Ryan Shtirmer be690155f9 Merge pull request #11 from zzzhizhia/fix/remove-openclaw-from-manifest
fix(manifest): remove unrecognized openclaw key from plugin.json
2026-03-23 19:57:54 -04:00
Ryan Shtirmer a1bb1b6b1d Merge pull request #13 from OpusGameLabs/carles/game-insets
feat(safe-area): read Play.fun SDK inset CSS variables in templates and skills
2026-03-23 19:57:21 -04:00
carlesvallve f674d55a30 feat(safe-area): read Play.fun SDK inset CSS variables in templates and skills
Templates now read --ogp-safe-top-inset and --ogp-safe-bottom-inset CSS
variables set by the Play.fun SDK, so game UI stays visible on fullscreen
mobile Safari across all tab modes. Skills updated to document the pattern
for AI-generated games.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 15:29:12 +09:00
rshtirmer eaa818074e refactor: unify site build + consolidate folder structure
Reduce top-level directories from 19 to 14 and unify the two
disconnected site pages into a single build script.

Site unification:
- gallery/ → site/ (manifest.json, build.js, thumbnails/, telemetry/)
- New unified site/build.js generates both _site/index.html (landing)
  and _site/gallery/index.html (gallery) with shared CSS, nav, footer
- Landing page game cards are now data-driven from manifest (no drift)
- Optional benchmarks section renders when site/benchmarks.json exists
- npm run build:site produces the whole _site/

Directory consolidation:
- character-library/ + 3d-character-library/ → assets/characters/ + assets/3d-characters/
- evals/ → tests/ (trigger files, flows, README)
- docs/troubleshooting.md → TROUBLESHOOTING.md
- benchmarks/ deleted (empty)

All references updated across ~15 files (CLAUDE.md, skills, templates,
package.json, examples).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-13 17:14:22 -04:00
zzzhizhi af8205007b fix(manifest): remove unrecognized "openclaw" key from plugin.json
Claude Code's plugin validator uses strict schema validation and rejects
unknown top-level keys. The "openclaw" field causes installation to fail
with: Unrecognized key: "openclaw"
2026-03-13 18:20:28 +08:00
Ryan Shtirmer e8326069af Merge pull request #9 from OpusGameLabs/feat/api-key-intercept-hook
feat(security): intercept API keys via UserPromptSubmit hook
2026-03-12 19:30:44 -04:00
rshtirmer b4c92dd749 fix(intercept-hook): strip trailing punctuation, anchor grep patterns
- Strip trailing .,;:!) from captured key values so mid-sentence
  pastes like "MESHY_API_KEY=abc123." save correctly
- Anchor all .env grep checks with ^KEY=. to avoid matching comments
  or empty assignments

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-10 20:02:46 -04:00
rshtirmer 8bc2a0c024 fix(intercept-hook): address CodeRabbit review feedback
- Skip placeholder values (your-key-here, <key>, etc.) so example
  text from skill prompts is never saved as a real secret
- Auto-append .env to the target project's .gitignore when saving keys
- Make additionalContext provider-agnostic (remove hardcoded meshy ref)
- Use `set -a; . .env; set +a` instead of `source .env` so vars are
  exported to child processes (node, npx)
- Fix grep/cut command in game-deploy to anchor match and preserve
  keys containing = characters

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-10 19:54:25 -04:00
rshtirmer 66e591a2a4 feat(security): intercept API keys pasted in chat via UserPromptSubmit hook
API keys pasted in chat previously ended up in Claude's context window.
This adds a UserPromptSubmit hook that detects key patterns, saves them
to .env, and blocks the message so keys never reach the model.

- Add scripts/intercept-api-key.mjs (zero deps, explicit + bare key detection)
- Add hooks.UserPromptSubmit config to settings.json
- Add .env to .gitignore
- Update 6 skill prompts to use KEY=value paste format with .env check-first

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-10 17:38:44 -04:00
Ryan Shtirmer a6ed03b98e Merge pull request #8 from OpusGameLabs/skill-audit-sprint-3
audit(skills): Sprint 3 — descriptions, triggers, robustness, evals
2026-03-10 17:24:38 -04:00
rshtirmer 0dbf4a9e32 audit(plugin-grade): implement all 6 recommended actions from Anthropic guide grading
- Add argument-hint to 11 skills missing it (26/27 now covered, playdotfun submodule excluded)
- Standardize compatibility field placement to root level (game-qa, meshyai)
- Improve README positioning with outcome-focused opening
- Create trigger test suite (tests/trigger-tests.md) with 5-7 prompts per skill
- Add troubleshooting guide (docs/troubleshooting.md) covering all common issues
- Document reference/wrapper skill convention in CLAUDE.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-10 17:23:51 -04:00
rshtirmer 86a264dc3e feat(make-game): integrate 5 unused skills into pipeline
- Add game-architecture to Step 1 subagent skill load (delta capping, pooling, disposal)
- Add World Labs environment generation to 3D asset step (Gaussian Splats, SparkJS, Y-flip)
- Add Step 3.5: QA test suite via game-qa skill (Playwright gameplay/visual/perf tests)
- Add Step 5.5: code review via review-game skill (informational quality scores)
- Reference game-deploy skill in Step 4 for advanced deployment options
- Renumber pipeline tasks 7→8 to accommodate new QA step

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-10 17:09:40 -04:00
rshtirmer 6ca8315f2b audit(skills): Sprint 3 — descriptions, triggers, robustness, evals, examples
Comprehensive remediation against Anthropic's "Complete Guide to Building
Skills for Claude" (33 pages). Raises plugin score from ~8.48 to ~9.3/10.

Phase 1: Description quality + negative triggers
- Rewrite add-feature description (69→345 chars with triggers + metadata)
- Add metadata to phaser (last skill without it)
- Add "Do NOT use for..." negative triggers to 10 high-risk skills
- Fix < > in argument-hint for use-template, worldlabs (security restriction)

Phase 2: Performance Notes (anti-model-laziness, guide p26)
- Add ## Performance Notes to 8 user-facing action skills

Phase 3: Troubleshooting (Error/Cause/Fix, guide p12)
- Add ## Troubleshooting to 6 user-facing skills

Phase 4: license: MIT on all 26 first-party skills (guide p11)

Phase 5: Example Usage sections (guide p12 + p30 checklist)
- Add ## Example Usage to 13 user-facing slash commands

Phase 6: Evals expansion
- 4 new flow tests (deploy, improve, add-feature, 3D pipeline)
- Performance baseline template in evals/README.md
- Trigger test entries for 4 missing skills (add-feature, quick-game,
  record-promo, fetch-tweet)

Verification: 27/27 metadata, 27/27 license, 15 negative triggers,
15 Performance Notes, 12 Troubleshooting, 15 Example Usage, 7 flow tests,
100 trigger entries, 0 XML in frontmatter, all descriptions under 1024 chars,
all SKILL.md under 5000 words.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-10 16:54:43 -04:00
rshtirmer 74af895edc docs(CLAUDE.md): document companion file convention for skill progressive disclosure
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-10 14:32:41 -04:00
rshtirmer 81d58c151e refactor(make-game): extract companion files from SKILL.md
Split the 1247-line SKILL.md into focused companion files:
- verification-protocol.md: QA subagent, autofix logic, visual review
- step-details.md: Step 1-5 subagent prompt templates and infrastructure
- tweet-pipeline.md: Tweet fetching, parsing, celebrity detection

SKILL.md retains frontmatter, orchestration model, step sequence overview,
QA gate descriptions, deploy/monetize instructions, and pipeline completion.
Added Reference Files and Performance Notes sections.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-10 14:31:59 -04:00
rshtirmer b5998b1527 refactor(game-assets): extract companion files from SKILL.md
Split large SKILL.md into focused companion files to improve
readability and maintainability:
- character-pipeline.md: South Park system, expressions, bobblehead, 4-tier fallback
- pixel-renderer.md: renderPixelArt(), renderSpriteSheet(), palette definitions
- integration-patterns.md: entity replacement, animation, external assets, logos, memes

Added Performance Notes section and updated Reference Files listing.
Extracted sections replaced with one-line See references in SKILL.md.
YAML frontmatter, role intro, asset tiers, sprite design rules, process
steps, and checklist all retained in SKILL.md.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-10 14:26:51 -04:00
rshtirmer 6ce19a09ae refactor(meshyai): extract API, rigging, and verification into companion files
Split large SKILL.md into focused companion files for better maintainability:
- api-reference.md: endpoint specs, payloads, responses, task statuses
- rigging-pipeline.md: generate->rig->animate->integrate pipeline with code
- verification-patterns.md: orientation, scale, and floor alignment patterns

Added Performance Notes, Reference Files section, and Troubleshooting table.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-10 14:25:27 -04:00
rshtirmer 98877729ae refactor(phaser): move button pattern and responsive canvas code to companion files
Move the button pattern code block (~60 lines) from SKILL.md to
game-objects.md and the responsive canvas config code (~100 lines,
including entity sizing, HTML boilerplate, portrait-first patterns)
to project-setup.md. Replace with cross-references. Rename References
section to Reference Files and update companion descriptions.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-10 14:25:25 -04:00
rshtirmer c1bb8ea2ce refactor(game-qa): extract test patterns and gameplay invariants into companion files
Split large SKILL.md into focused companion files for better maintainability:
- test-patterns.md: custom fixture, boot/gameplay/scoring tests
- gameplay-invariants.md: all 7 core invariant patterns
Added Performance Notes section and updated Reference Files listing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-10 14:25:01 -04:00
rshtirmer 3bc2426673 docs(game-3d-assets): add troubleshooting section to SKILL.md
Add 5 common troubleshooting entries covering T-pose issues,
Sketchfab 403 errors, meshopt decoder errors, animation playback
problems, and OrbitControls camera jittering.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-10 14:24:52 -04:00
rshtirmer 4b228ce02b docs(worldlabs): add troubleshooting section to SKILL.md
Add 8 troubleshooting entries covering common issues: Y-flip, raycasting,
collider matrix updates, panorama doubling, generation timeouts, SparkJS
package name, media upload endpoint, and API auth header format.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-10 14:24:32 -04:00
rshtirmer f012a91177 docs(add-3d-assets): add troubleshooting section for common 3D asset issues
Covers T-pose from wrong clone method, Meshy AI prompt tips, rigging
failures, meshopt decoder errors, and model facing direction fixes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-10 14:24:27 -04:00
rshtirmer 71fcafbaa5 docs(game-deploy): add Troubleshooting section with 5 common deployment issues
Covers here.now rate limits, expired anonymous sites, GitHub Pages 404s,
blank pages from asset paths, and gh-pages push rejections.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-10 14:24:00 -04:00
rshtirmer dc0bc1f80e docs(monetize-game): add troubleshooting section to SKILL.md
Add 5 common troubleshooting entries covering auth callback issues,
game registration errors, SDK loading with ad blockers, savePoints
modal timing, and API key configuration.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-10 14:23:52 -04:00
rshtirmer aced7bdf90 feat(gigachad-sim): add v2 character models and promo scripts
Adds rigged GigaChad v2 GLB models (idle, walk, run) and helper scripts
for promo video capture and high-FPS conversion.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-10 14:09:27 -04:00
rshtirmer c8cec81b1c feat(worldlabs): add World Labs skill and generation script
Adds skill for generating 3D Gaussian Splat environments via World Labs API,
plus worldlabs-generate.mjs helper script. Updates .gitignore to exclude
.herenow/ deployment artifacts.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-10 14:09:21 -04:00
Ryan Shtirmer fcc4922dcb Merge pull request #7 from OpusGameLabs/feat/skill-best-practices
feat(skills): apply Anthropic skill best practices to all skills
2026-03-10 14:06:59 -04:00
rshtirmer 1bd5b21d83 fix: address CodeRabbit PR #7 feedback
- Menu.js: fix redundant ternary — properly convert hex constant to CSS color
- EventBus.js: spread-copy listener array before iterating to prevent
  mutation issues when listeners call off() during emit
- gigachad.meta.json: remove expired Meshy AI signed URLs, keep task IDs
  for re-generation
- qa-game SKILL.md: remove "accessibility" from description since no
  axe tests are generated

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-10 13:59:13 -04:00
rshtirmer 90269327a5 feat(worldlabs-arcade): 3D Gaussian Splat arcade walkthrough demo
World Labs SPZ environment with animated Soldier character (Three.js + SparkJS).
Fixes Y-flip, panorama doubling, character scaling, third-person camera, and
ground raycasting for navigable photorealistic arcade scene.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-09 17:31:10 -04:00