Tinyverse collectibles lane — pack reveal, frozen islands, play-mode visits. Universe carousel is archived but code stays in repo.
63
75%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./.codex/skills/tinyworld-tinyverse-collectibles/SKILL.mdTwo app routes:
default_island.json). Generate-from-prompt stays. No pack economy, no
collectible reveal, no gold scoring on this path.card_reveal.html after login + allowlist check (no profile form, no avatar
picker, no WS.open() carousel). Island pulls use
scripts/island-viewer-sequential-generator.js once, then save an immutable
snapshot to the player's collection.The legacy universe carousel and MMO picker live in engine/world/46-worlds-universe.js.
Mark it archived: welcome Tinyverse no longer calls WS.open(), but the module
stays loaded in tiny-world-builder.html. Dev, tests, and deep links may still invoke
window.__tinyworldWorlds.open() / enterWorld().
Related modules stay loaded (not archived for deletion):
47-worlds-room.js, 48-worlds-harvest-hud.js — PartyKit room client when entering
a published world roomcreateRandomIslandWorldFromMenu, randomIslandPreviewGenerate — kept; Build menu
no longer calls random-island createisland-viewer.html — dev/standalone shell; not the collectible visit surfacecard_reveal.html)Do not load without auth. scripts/tinyverse-auth-gate.js blocks the page until
the user is signed in and /api/admin-users?action=tinyverse-access returns
allowed: true (same gate as welcome Tinyverse). Dark-launch allowlist lives in
netlify/functions/lib/tinyverse-access.mjs (default:
jason@bouncingfish.com, simongarthfarmer@gmail.com; extend via
TINYVERSE_ACCESS_EMAILS env). Non-allowlisted signed-in users see welcome
COMING SOON (is-soon on #welcome-tinyverse).
Canon Tinyverse entry. Loads:
scripts/island-viewer-sequential-generator.js — one-shot island pull per cardengine/world/26b-random-island-economy-profile.js — canonical Raw Yield economy (window.__buildIslandRawYieldEconomy) and Raw Yield-only generated island profile (window.__buildRandomIslandEconomyProfile). Pack cards, collection labels, island viewer, and builder reveal all recompute Raw Yield from world + seed; card labels read like Common - Raw Yield 169, never gold/day, and do not append archetype.scripts/world-preview.js — isometric preview painted on island card facesscripts/tinyverse-collectibles.js — preview GOLD, pack purchase, immutable snapshotsRelease preview (tonight): store hub → 3 free pack opens per signed-in email
(tinyworld:free-packs-opened.v1:<email>, limit FREE_PACK_LIMIT = 3) → 3D theater
→ 1 island per pack (no artifacts/stickers/bonus cards) → island auto-saved to
tinyworld:collectibles.v1 on open → flip/visit in play mode.
Hub (scripts/tinyverse-store-hub.js): free-opens counter, open pack CTA, inline
Your islands grid with Visit. Store button in theater returns to hub.
Builder chrome on card_reveal.html via scripts/tinyverse-chrome.js: wordmark
top-left, language picker bottom-left (styles/tiny-world.css + i18n), home +
logout top-right. Chrome stays visible on hub and auth gate; hides during the
dark pack theater.
Hub layout (scripts/tinyverse-store-hub.js): two-column on wide screens — main
pack/collection card left, Live opens activity rail right with simulated
player names + island pulls (preview placeholder until real multiplayer opens).
Catalog is a single island-pack SKU in scripts/tinyverse-store-catalog.js.
Generated-island card rarity/score/copy is Raw Yield only. Card-facing stats
and reveal resource rows omit zero values; the economy object can still retain
zero counts internally, but UI should not print empty resources. Do not put
archetype, best-use, Food/Materials/Commerce/Defense/Charm stats, potential,
or gold/day on card-facing records or reveal UI. Preview GOLD / artifact shop
are paused for this release.
Fish is a derived Raw Yield resource: every terrain: "water" cell rolls
seed + '|fish|' + x + ',' + z at 25%. Do not write Fish as a generated cell
kind or persist fish markers into v:4 saves.
Preview GOLD lives in tinyworld:tinyverse-gold.v1 (starts at 500). Server GOLD
can replace this later; do not delete the local path when wiring API spend.
Pack SFX reuse the repo sounds/ foley library via scripts/tinyverse-pack-audio.js
(same clips as engine/world/22-audio.js: whoosh burst, knock purchase, rustle flip,
ripple focus). Ambient loop picks a random music-horizon-*.mp3 after first gesture.
Respects builder mute/volume keys in tinyworld:audio:* localStorage when present.
Use the builder in play mode, not a separate viewer shell:
window.__tinyworldCollectible.enter({ id, world, profile });Boot: bootCollectibleHandoffFromQuery() in 30-ui-boot-wiring.js reads
?collectible=<id> plus sessionStorage tinyworld:collectible-pending, then
calls enter() after applyState is ready.
body.tinyverse-collectible)recomputeRandomIslandProfile in 30-ui-boot-wiring.js) before openNewWorldReveal(profile) so card stats match the rendered islandimportToBuildCopy(name) → new editable draft in My Worlds; never
write back to the collectible canonical snapshot46-worlds-universe.js or strip its script tag to "clean up"26-ai-generation.js, sequential generator) when hiding UI pathsisland-viewer.html as the primary player surfacef21f84b
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.