@genex-ai/cli-demo 0.94.0-dev.251 → 0.95.0-dev.253

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -196,17 +196,26 @@ skip it during unrelated focused work.
196
196
 
197
197
  ### When the UI/HUD/menu lane is invoked
198
198
 
199
- The existing owning skills control the full pipeline. Do not simplify or
200
- bypass their FAL calls, credits, checkpoints, retries, Stage-1/Stage-2 prompts,
201
- extraction, masks, wiring, markers, nudges, or preflights.
202
-
203
- The Stage-1 mockup decides the HUD implementation and `DESIGN.md` records it:
204
- ornate/painterly/material chrome `HUD lane: sprites (…)`; flat geometry plus
205
- typography that CSS can reproduce screenshot-indistinguishably
206
- `HUD lane: CSS (…, one-line justification)`. Unsure sprites. The player's
207
- explicit lane request wins. Once invoked, follow `$genex-ai-hud` and
208
- `$genex-ai-menu` exactly, including `Menu video:` and every HUD pipeline state
209
- marker.
199
+ **Generated UI art is opt-in.** A restrained interface built in clean CSS is a
200
+ finished, legitimate HUD—not a placeholder. Reach for the sprite lane
201
+ (`$genex-ai-hud`) when the game's own style genuinely wants drawn
202
+ chrome—ornate, painterly, comic, hand-made—or when the player asks for HUD art;
203
+ stylized games are where chrome earns its place. The art direction comes from
204
+ the game's brief in words. Generating ONE element you decided the game needs—a
205
+ frame, a mask, an icon, a wordmark, a menu backdrop, a menu video—is a normal,
206
+ first-class use of these tools, never a half-run pipeline.
207
+
208
+ Judgment governs *whether* art is generated; it never loosens *how well* it is
209
+ done. When you do run a stage, run its quality steps in full: `$genex-ai-hud`
210
+ and `$genex-ai-menu` keep their Stage-1/Stage-2 prompts, FAL calls, credits,
211
+ checkpoints, retries, extraction, masks, wiring, `npx genex ui audit`, nudges,
212
+ and preflights exactly as written, hard refusals included. Choosing to generate
213
+ one element rather than a whole set is a scope decision, not a bypass.
214
+
215
+ While a sprite or menu-video pipeline is actually in flight, `DESIGN.md` holds
216
+ its state so a context compaction can resume it: `HUD lane:`, `Menu video:`,
217
+ and the HUD pipeline stage IDs and paths. A game whose interface never runs a
218
+ generation lane records nothing there.
210
219
 
211
220
  In both lanes, micro-text stays HTML text in the chosen font, and no generic
212
221
  rectangular plate appears behind bars, digits, or icons; a genuinely shaped
@@ -240,6 +249,12 @@ usefully independent pieces.
240
249
  a prose summary.
241
250
  - Do not create workers merely to write extra test suites or reports.
242
251
 
252
+ When the player asks for parallel work, repeated refinement passes, or a critic
253
+ reviewing your output, that request IS the instruction—wherever it reaches you,
254
+ including inside their answer to a question you asked. Adopt it as the working
255
+ mode immediately, starting with the work in front of you; never file it as a
256
+ later milestone or a final polish pass.
257
+
243
258
  For a substantial, judgeable result in whole coordinated mode, a **fresh
244
259
  critic may** inspect the actual game, rendered pixels, reference, or test
245
260
  result—not the builder's summary. It returns the single largest meaningful
@@ -264,11 +279,12 @@ head.” A genuinely non-person player (car, ship, RTS cursor, board) uses
264
279
 
265
280
  When this lane is relevant, put its row in the Assets table and enqueue it
266
281
  when its milestone starts—or in parallel when whole coordinated mode makes
267
- that useful. Its asset-specific concept review is its own beat; it never waits
268
- for or requires a UI concept. `npx genex controller character` installs the
269
- controller and fallback body; `loadPlayerCharacter` keeps the boot path stable,
270
- and `npx genex controller character --character <id>` switches the manifest
271
- when the generated body lands.
282
+ that useful. Its asset-specific concept review is its own beat—the one concept
283
+ step that survives, because the player is choosing a concrete thing they asked
284
+ for—and it never waits on another lane. `npx genex controller character`
285
+ installs the controller and fallback body; `loadPlayerCharacter` keeps the boot
286
+ path stable, and `npx genex controller character --character <id>` switches the
287
+ manifest when the generated body lands.
272
288
 
273
289
  The profile VRM avatar is the fallback: a temporary body while generation
274
290
  runs, or the stand-in when generation genuinely could not happen, recorded as
@@ -47,7 +47,9 @@ so it survives a long pause, context compaction, handoff, and remix.
47
47
  appear only when the request or existing project uses them.
48
48
  - Preserve every machine-readable marker an invoked pipeline owns, including
49
49
  `HUD lane:`, `Menu video:`, HUD stage IDs and paths, `Player character:`,
50
- asset generation IDs/URLs, and wiring state.
50
+ asset generation IDs/URLs, and wiring state. They exist so work already in
51
+ flight survives a compaction; a lane you never run leaves its markers unwritten
52
+ and owes no explanation for their absence.
51
53
  - A private reference attachment is a build input. Do not upload, publish, or
52
54
  commit it without the player's explicit permission.
53
55
 
@@ -108,8 +110,10 @@ defaults.)
108
110
 
109
111
  ## Screens & UI (only when the UI/HUD/menu lane is invoked)
110
112
  Screens: <only the requested/required states> · Style brief: <one line>
111
- HUD lane: <sprites (…) | CSS (…, one-line justification)>
112
- Menu video: <yes | declined (player's reason) | still fallback (reason)>
113
+ (The two lines below are bookkeeping for a generation lane actually running,
114
+ so a compaction can resume it. An interface built in CSS records neither.)
115
+ HUD lane: sprites (<which elements the sprite lane is producing>)
116
+ Menu video: <generation id/URL, or the still standing in while it renders>
113
117
 
114
118
  ## Assets — the generation plan AND budget (only when used)
115
119
  | Asset | Kind | Status | Wired? |
@@ -119,8 +123,8 @@ Menu video: <yes | declined (player's reason) | still fallback (reason)>
119
123
  | <asset> | <kind> | landed → <URL> | yes/no |
120
124
  Status flow: proposed → planned → generating (id) → landed (URL) → wired.
121
125
 
122
- **HUD pipeline state (sprites lane) — keep this current; it is how the
123
- pipeline survives a context compaction.**
126
+ **HUD pipeline state (only while the sprites lane is running) — keep this
127
+ current; it is how that pipeline survives a context compaction.**
124
128
  - Stage-1 mockup: <id → URL>
125
129
  - Stage-2 sheet: <id → URL>
126
130
  - Cleaned sheet: <id → URL>
@@ -56,9 +56,9 @@ copy demo architecture.
56
56
  | poster, sign, sprite, decal, reference sheet, or other 2D art | `$genex-ai-image` |
57
57
  | in-world motion art or another requested video | `$genex-ai-video` |
58
58
  | sound effect, one looping music bed, or a short spoken line | `$genex-ai-sfx`, `$genex-ai-music`, or `$genex-ai-voice` |
59
- | requested UI/HUD/menu/interface work, or the later UI milestone of a complete-game request | `$genex-threejs-game-ui` |
59
+ | requested UI/HUD/menu/interface work, a visible UI problem, or an interface you decided this game wants built with generated art | `$genex-threejs-game-ui` |
60
60
  | cinematic menu/title/pause/victory/defeat/lobby/credits video treatment | `$genex-ai-menu` |
61
- | cohesive art-directed HUD sprite set with matched frames, masks, and icons | `$genex-ai-hud` |
61
+ | drawn HUD chrome the game's style wants—one element or a matched set of frames, masks, and icons | `$genex-ai-hud` |
62
62
  | the game works but feels flat, floaty, or unresponsive: input response, camera, impacts, cooldowns, difficulty, fail/retry | `$genex-threejs-game-feel` |
63
63
  | realtime multiplayer: movement sync, shared ball/NPC, host-run scores/enemies, shots/emotes, persistence | `$genex-threejs-multiplayer` |
64
64
  | player identity, sign-in, guests, saves/progress, per-player state, shared persistent world, leaderboards—mandatory for every game | `$genex-threejs-embed-auth` |
@@ -150,13 +150,18 @@ landed (<local TypeScript path>) → wired`
150
150
 
151
151
  ### UI, HUD, menu, and FAL
152
152
 
153
- Enter this lane only for a direct UI/HUD/menu request, a relevant visible UI
154
- problem, or the later interface milestone of a complete-game request. Once
155
- invoked, `$genex-threejs-game-ui`, `$genex-ai-hud`, `$genex-ai-menu`,
153
+ Enter this lane for a direct UI/HUD/menu request, a relevant visible UI
154
+ problem, or an interface you decided this game's style wants built with
155
+ generated art. Generated UI art is opt-in: a restrained CSS interface is a
156
+ finished HUD, and generating one element—a frame, a mask, an icon, a wordmark,
157
+ a menu backdrop, a menu video—is a normal use of the lane. Once invoked,
158
+ `$genex-threejs-game-ui`, `$genex-ai-hud`, `$genex-ai-menu`,
156
159
  `$genex-ai-image`, and `$genex-ai-video` retain their existing Stage-1/Stage-2
157
160
  prompts, FAL calls, credits/checkpoints, retries, extraction, masks, wiring,
158
- markers, nudges, preflights, and approval behavior. Keep `HUD lane:`,
159
- `Menu video:`, and every HUD pipeline stage ID/path current in `DESIGN.md`.
161
+ markers, nudges, preflights, and approval behavior—the scope is your call, the
162
+ execution quality is theirs. While a sprite or menu-video pipeline is in
163
+ flight, keep `HUD lane:`, `Menu video:`, and every HUD pipeline stage ID/path
164
+ current in `DESIGN.md` so a compaction can resume it.
160
165
 
161
166
  The absence of generated HUD/menu/concept art alone never interrupts unrelated
162
167
  focused work.
@@ -192,6 +197,11 @@ sub-agents. One writer owns each disjoint file set; the director integrates
192
197
  shared boot, loop, and netcode files. Focused work skips fan-out unless the
193
198
  request itself has independently useful parts.
194
199
 
200
+ A player who asks for parallel work, repeated refinement passes, or a critic
201
+ reviewing the work has given the instruction—wherever it reaches you, including
202
+ inside an answer to a question you asked. It becomes the working mode right
203
+ then, on the work in front of you, not a milestone scheduled for later.
204
+
195
205
  For a substantial judgeable result, a fresh critic may inspect the real game,
196
206
  rendered pixels, supplied reference, or test output—not a builder summary. It
197
207
  returns the single largest meaningful gap; the builder may correct it and ask
@@ -52,10 +52,11 @@ npx genex video "waterfall mist drifting" --loop # a video clip (screen/bac
52
52
 
53
53
  Each has a focused skill with the exact loader code — `$genex-ai-model`,
54
54
  `$genex-ai-skybox`, `$genex-ai-sfx`, `$genex-ai-texture`, `$genex-ai-image`,
55
- `$genex-ai-video`. For generated game UI there are two workflow skills built
56
- on the same commands: `$genex-ai-menu` (a cinematic menu — looping video
57
- backdrop + DOM buttons) and `$genex-ai-hud` (a production HUD sprite set with
58
- masked fills).
55
+ `$genex-ai-video`. Two more workflow skills draw UI art on the same commands,
56
+ for games whose style wants it: `$genex-ai-menu` (a cinematic menu — looping
57
+ video backdrop + DOM buttons) and `$genex-ai-hud` (a HUD sprite set with
58
+ masked fills). A restrained interface in clean CSS is a finished UI too —
59
+ `$genex-threejs-game-ui` builds that one.
59
60
 
60
61
  ## Identity & saves (every game)
61
62
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: genex-threejs-game-ui
3
- description: Design the UI HUD interface of a Genex Three.js game — plan the full screen set up front (loader, menu, HUD, pause/win/lose, lobby) under one shared art direction, then build it as an animated DOM overlay. Use for every new game before writing UI code, and whenever the game needs on-screen text, meters, buttons, or menus, or the interface reads as a generic dashboard, covers the action, or shifts as numbers change.
3
+ description: Design the UI HUD interface of a Genex Three.js game — work out the screen set this game actually needs (loader, menu, HUD, pause/win/lose, lobby) under one shared art direction, then build it as an animated DOM overlay. Use whenever the game needs on-screen text, meters, buttons, menus, or screens, or when the interface reads as a generic dashboard, covers the action, or shifts as numbers change.
4
4
  ---
5
5
 
6
6
  # Genex Three.js Game UI
@@ -11,201 +11,110 @@ screens fade and stagger in, values tween, defeat feels different from victory.
11
11
  This skill is the UI director for the 2D layer of a vanilla Three.js game: the
12
12
  plan, the architecture, the states, motion, and readability rules.
13
13
 
14
- ## Plan the UI first before any UI code
14
+ ## Work out which screens this game needs
15
15
 
16
- Run this gate ONCE, right after the game concept is locked. It takes two
17
- minutes and prevents the two failure modes no later polish can fix: a screen
18
- set discovered piecemeal, and a menu styled in one world while the HUD lives
19
- in another.
16
+ Two minutes before the first UI file prevents the two failure modes no later
17
+ polish can fix: a screen set discovered piecemeal, and a menu styled in one
18
+ world while the HUD lives in another.
20
19
 
21
20
  **1. Screen inventory — derived from the game type, not discovered later:**
22
21
 
23
22
  | Screen | When it exists | Default tier |
24
23
  | --- | --- | --- |
25
24
  | Loader | always | 1 — branded (see loader spec below) |
26
- | Main menu | always — the decision defaults to YES for every game; a "no" needs a one-line game-type reason (e.g. an instant-restart arcade toy), and "it's only a draft" is never a reason | 2 — cinematic (`$genex-ai-menu`) |
25
+ | Main menu | most games; a few genuinely don't want one (an instant-restart arcade toy) but "it's only a draft" is never the reason | 1 — animated CSS title screen; 2 — cinematic (`$genex-ai-menu`) when the game's style wants it |
27
26
  | Pause | always — opens on the Escape key | 1 — menu backdrop under a dark overlay |
28
27
  | Fail / retry | always | 1 — a *graded* variant of the menu screen |
29
28
  | Win / next | always | 1 — graded variant, warm |
30
29
  | Settings | always — every game carries the Quality picker (Auto/Low/Medium/High, `$genex-threejs-adaptive-quality`), and any game with generated audio carries **Music + SFX volume sliders** (persisted, applied live; music default 0.30, sfx ~0.7 — `$genex-ai-music`; a paid track with no volume control is a failure mode), plus whatever else it has to set | 1 |
31
30
  | Lobby / waiting | multiplayer only | 1 over the menu backdrop |
32
- | HUD | always | 2generated sprite HUD (`$genex-ai-hud`), enqueued at this gate for EVERY game; plain CSS is the placeholder until the sprites land, never the final HUD |
31
+ | HUD | whenever the game shows state the player has to read | 1a restrained CSS HUD finished to the readability + motion rules below; 2 generated sprites (`$genex-ai-hud`) when the game's style wants drawn chrome |
33
32
 
34
33
  The lobby row is bound by `$genex-threejs-multiplayer`'s MANDATORY rule: the
35
34
  waiting overlay's visibility is re-read from `mm.matchmaking.status` every
36
35
  frame and closes the instant it flips to `playing` — verified in two browser
37
36
  windows. Plan the lobby as a styled screen (roster + count over the menu
38
- backdrop), not an afterthought `<div>`. When the menu decision is a reasoned
39
- "no", every "menu backdrop" row above (pause, fail, win, lobby) grades over
40
- the loader's key art instead.
37
+ backdrop), not an afterthought `<div>`. In a game that genuinely has no menu,
38
+ every "menu backdrop" row above (pause, fail, win, lobby) grades over the
39
+ loader's key art instead.
41
40
 
42
41
  The table lists screens; **elements are inventoried separately**. Walk the
43
42
  whole loop in your head — loader → menu → spawn → action → pickup → damage →
44
43
  death → retry → win — and write down EVERY on-screen element the player will
45
44
  ever see: the reticle and each of its states, aim/interact cues, toasts,
46
- damage numbers, kill feeds, timers, countdowns, pickup popups.
45
+ damage numbers, kill feeds, timers, countdowns, pickup popups. That written
46
+ list is the authority on WHAT exists: mechanics come from the agreed game,
47
+ never from a picture — a widget that shows up in generated art with no
48
+ backing mechanic is cut before anything wires it.
47
49
 
48
50
  **2. One shared style brief — for the WHOLE game, not just the UI.** Write it
49
51
  once — 4–5 named hues, materials, one display + one body font, mood — and
50
- store it as a comment block near the UI code. `$genex-ai-menu`,
51
- `$genex-ai-hud`, the loader, and every plain-CSS screen consume THIS brief
52
- verbatim and so does the scene: the visual-direction plan (the router's
53
- next gate) derives its lighting mood, fog, grading, and post-stack choices
54
- from the same block. Two style briefs in one game is a bug; a scene graded in
55
- one world under a UI styled in another is the same bug. The brief's font pair
52
+ store it as a comment block near the UI code. This brief, in WORDS, IS the
53
+ game's art direction: it comes out of the game's own concept and premise, and
54
+ everything downstream reads its palette, materials, and register from here.
55
+ For genre conventions worth borrowing placement, hierarchy, type treatment,
56
+ material language skim
57
+ [references/style-capsules.md](references/style-capsules.md).
58
+ `$genex-ai-menu`, `$genex-ai-hud`, the loader, and every plain-CSS screen
59
+ consume THIS brief verbatim — and so does the scene: the visual-direction
60
+ plan derives its lighting mood, fog, grading, and post-stack choices from the
61
+ same block. Two style briefs in one game is a bug; a scene graded in one
62
+ world under a UI styled in another is the same bug. The brief's font pair
56
63
  is LOADED for real — a Google Fonts `<link>` (or `@font-face`) in
57
64
  `index.html`, per `$genex-ai-menu`'s genre font table; a display font that
58
65
  ships as a system-stack fallback (`Arial Black`, `Impact`) is the same bug in
59
66
  type.
60
67
 
61
- **3. Make ONE concept mockup** the game concept
62
- and the HUD Stage-1 mockup are the SAME image, generated once (never a
63
- separate UI-free concept first): a single image of a PLAYABLE MOMENT of this
64
- game with its complete HUD composited over it, built with `$genex-ai-hud`'s
65
- Stage-1 prompt template. For genre conventions to borrow, skim
66
- [references/style-capsules.md](references/style-capsules.md). The scene half of the prompt comes from the game
67
- contract in TEXT, not from a prior image: what the player is DOING
68
- mid-action (the verb), what threatens them right now (enemy silhouettes),
69
- what they are chasing (the objective — a finish gate, a goal, a pickup),
70
- and how the space reads (route, scale) — plus the brief's palette,
71
- materials, and light. A beautiful empty vista with nothing to fight and
72
- nowhere to go is a FAILED concept; so is one that invents mechanics the
73
- game doesn't have (a lap counter in a game without laps). Generate it
74
- `--size 2560x1440 --quality high --no-wait`, enqueued FIRST of all art —
75
- ONE image, no candidate variants unless the user asks; its URL goes into
76
- the style-brief comment.
77
-
78
- **Describe the concept in words while it renders.** Lay it out in chat —
79
- the playable moment (the verb), what threatens the player, what they chase,
80
- how the space reads, and the brief's palette / materials / light /
81
- references — so the user is weighing a stated direction, not guessing at a
82
- picture.
83
-
84
- **The moment the mockup lands, the style chain fires — then the user sees
85
- the frame.** In this order, no waiting between the steps: decide the HUD
86
- lane as art director and record the `HUD lane:` line in DESIGN.md
87
- (`$genex-game-director` §5 owns the criteria), enqueue the style-dependent
88
- chain `--no-wait` — the HUD Stage-2 deconstruct (from the mockup), the menu
89
- still (`--edit`-anchored to it), and the logotype — and THEN show the frame:
90
- pick it up with `genex wait <id> --open` (or generate with `--open`) so it
91
- opens in the user's browser AND prints the link, and paste the URL as a
92
- clickable link — a URL is invisible in a terminal, and "do you like it?"
93
- with no picture in front of the user is the #1 way this checkpoint fails.
94
-
95
- **Ask keep-or-change with your question tool — as INFORMATION, never a
96
- gate.** The one that shows clickable options; a short numbered list in chat
97
- only where there is none. ONE question — "this is roughly how the game and
98
- its HUD will look — keep this direction, or change something?" — with
99
- concrete keep / change options. The chain is already running while they
100
- read it: silence means the concept stands; nothing except the menu VIDEO
101
- ever waits for the answer. The user still gets a real say — a "change" at
102
- any time loops the concept with their notes at image prices (below). The
103
- menu video (the one expensive item) fires at the FIRST of: the user's yes ·
104
- the next `genex preview` after the menu still landed · style work being the
105
- only work left — and never while a user objection is open
106
- (`$genex-ai-menu` owns the trigger). (The core asset set — hero model,
107
- ground texture, skybox, sfx — is prompted from the game IDEA, not the
108
- image, and mostly survives a style change: launch it up front with
109
- placeholders. Everything style-independent — scaffold, boot wiring, the
110
- core loop, the gameplay-LOGIC subagent modules — keeps moving at full speed
111
- in parallel throughout.)
112
-
113
- **Change reopens the loop, same shape.** If the user picks "change" — or
114
- comes back with notes immediately or an hour later — re-run Stage 1 (the
115
- concept mockup itself) with their exact notes, open + link the new frame,
116
- ask again the same structured way, and re-run the cheap chain from the new
117
- frame (image-priced — that is the design: the correction lane is cheap
118
- because the expensive item waited). Carry every note forward so each round
119
- compounds; if two rounds don't converge, offer 2–3 distinct directions
120
- (that's the one moment `--candidates` earns its place) instead of
121
- re-rolling blind. Each standing frame is the working style. When the style
122
- changes after downstream art already ran, re-anchor it: the menu still is
123
- re-edited (`--edit`) against the new mockup and its video re-run once from
124
- the new still (`$genex-ai-menu` — a user-driven style change re-opens its
125
- one-video rule), and the HUD deconstruct (Stage 2 onward, `$genex-ai-hud`)
126
- restarts from the new mockup. Style-neutral assets (most textures, sfx,
127
- models) usually survive — judge each in one line. The same "open it + paste
128
- the link" rule covers every image the user weighs in on — the menu still,
129
- the HUD mockup.
130
-
131
- **The concept anchors STYLE, not truth.** Palette, materials, light, and
132
- register come from the frame; CONTENT comes from the game contract. This
133
- matters MORE now that the concept carries a HUD: every widget in the mockup
134
- is a PROPOSAL, and a widget with no backing mechanic is cut before Stage 2 —
135
- mechanics come from the agreed game, never from the picture. Extra widgets
136
- the image invented are recorded in the plan message as "deferred from
137
- mockup" — never silently wired, never silently dropped. When
138
- the frame lands, diff it against the contract in one visible line — what
139
- does this game have that the frame doesn't show (enemies? arenas? the
140
- finish? the pickup)? Carry those requirements in words into every later
141
- prompt. Where the frame contradicts gameplay, gameplay wins — never inherit
142
- an invented mechanic, or the absence of a real one, from a picture.
143
-
144
- **4. Ask only when genuinely ambiguous.** If the concept pins the mood (a
145
- "gothic horror dungeon crawler" pins it), decide and state the plan in one
146
- line. Only when the art direction is truly open, ask ONE question
147
- with 2–3 concrete directions, each naming its palette + font pair — using
148
- your question tool when you have one; if you have none, a short numbered
149
- list in chat. Never ask about the screen
150
- inventory — it derives from the game type.
151
-
152
- **5. Style follows THIS game's concept.** The examples in every Genex skill
153
- are examples, not defaults. Do not default to neon/cyberpunk/synthwave — or
154
- any other single register — unless the concept calls for it.
155
-
156
- **6. Close the gate out loud — a fixed-format plan message.** Post this
157
- message in chat, translated to the user's language, filling every line —
158
- this exact structure, not a paraphrase (the scaffold's keep-it-short talk
159
- rule explicitly does not apply to this one message):
68
+ **3. Never stall the build on art.** Scaffold, boot wiring, the core loop,
69
+ and the gameplay-logic modules keep moving in parallel whatever the UI is
70
+ doing and the core asset set (hero model, ground texture, skybox, sfx) is
71
+ prompted from the game IDEA, so it can launch up front behind placeholders.
72
+ Nothing ready to build waits on an art answer: decide, say the decision in
73
+ one line, keep going.
160
74
 
161
- ```
162
- UI plan
163
- Screens: <list with tiers loader / menu / pause (Esc) / win/lose / …>
164
- Style: <4–5 named hues> · fonts <display> / <body> (from $genex-ai-menu's
165
- genre table, or a one-line reason)
166
- References: <2–3 AAA games one line on what's borrowed>
167
- • Menu: <archetype + button treatment, one-line reason from the brief>
168
- • HUD lane: <sprites (…) | CSS (…, one-line justification)> — recorded in DESIGN.md
169
- • Concept (HUD mockup): <generation id> — shown for keep / change
170
- (informational — the chain below is already queued; silence = it stands)
171
- • Queued on concept landing: HUD sheet (Stage 2) · menu still · logotype
172
- <or "skipped: reason">; menu VIDEO waits for: your yes / the next preview
173
- after the still lands / style work being all that's left <or "no menu: reason">
174
- • Building now (style-independent): <core loop · logic modules already moving>
175
- • Deferred from mockup: <widgets the image invented but the game lacks — or "none">
176
- ```
75
+ **4. Ask only when genuinely ambiguous.** If the game's premise pins the mood
76
+ (a "gothic horror dungeon crawler" pins it), decide and state it in one line.
77
+ Only when the art direction is truly open, ask ONE question with 2–3 concrete
78
+ directions, each naming its palette + font pair using your question tool
79
+ when you have one; if you have none, a short numbered list in chat. Never ask
80
+ about the screen inventoryit derives from the game type.
177
81
 
178
- A message missing any line means the gate did not run — go back and run it.
82
+ **5. Style follows THIS game.** The examples in every Genex skill are
83
+ examples, not defaults. Do not default to neon/cyberpunk/synthwave — or any
84
+ other single register — unless the game calls for it.
179
85
 
180
86
  ## The tier ladder
181
87
 
182
- - **Tier 1 — instant baseline, every game.** Everything in this skill: planned
183
- screens, shared brief, branded loader, animated CSS menu with keyboard
184
- navigation, phase transitions, UI sounds, vignette. Zero generations — the
185
- game is playable immediately.
186
- - **Tier 2 the production UI, generated, asyncmandatory, not an upsell.**
187
- The sprite HUD (`$genex-ai-hud`) for EVERY game, the cinematic menu
188
- video (`$genex-ai-menu`) whenever the menu decision is yes (the default for
189
- every game), and the generated **logotype** one `--transparent` wordmark
190
- in the brief's display register (`$genex-ai-menu`'s logotype step), default
191
- YES for every game with a menu; skipping it needs a one-line stated reason.
192
- Enqueue this chain the instant the concept mockup LANDS (`--no-wait`) —
193
- the keep/change answer never gates it; only the menu VIDEO waits, for its
194
- event triple (`$genex-ai-menu`)then
195
- keep building, pick results up with `npx genex wait <id>`, swap them in as
196
- they land. **Tier 2 must never block a playable v0 but the game is NOT
197
- DONE until its Tier-2 assets have landed and been wired in** (the only
198
- exit: the user explicitly declines them on their own initiative; never
199
- solicit the decline by presenting these as optional, slow, or costly).
200
- Run `npx genex wait` on every enqueued ID before any publish and before
201
- the final handoff of a session never park landed assets for "later".
202
- Shipping the placeholder CSS HUD as the final HUD is a failure, not a
203
- tier choice the ONE exception is a DESIGN.md-recorded `HUD lane: CSS`
204
- decision (`$genex-game-director` §5), where the CSS build, finished to
205
- its brief, IS the production HUD.
88
+ - **Tier 1 — the interface you build, zero generations.** Everything in this
89
+ skill: the planned screens, the shared brief, a branded loader, an animated
90
+ CSS menu with keyboard navigation, phase transitions, UI sounds, vignette.
91
+ Finished to this skill's readability, hierarchy, and motion rules, a
92
+ restrained CSS interface is a real, finished HUDnot a placeholder, not a
93
+ step toward something else. Plenty of games anything spare, modern,
94
+ systems-y, minimal are done here and better for it.
95
+ - **Tier 2 — generated UI art, async, when the style asks for it.** The sprite
96
+ HUD (`$genex-ai-hud`), the cinematic menu video (`$genex-ai-menu`), and the
97
+ generated **logotype** one `--transparent` wordmark in the brief's display
98
+ register (`$genex-ai-menu`'s logotype step). Reach for this lane when the
99
+ game's own style genuinely wants drawn chrome ornate, painterly, comic,
100
+ hand-madeor when the player asks for HUD art. It is
101
+ **element-addressable**: generating ONE thing you decided the game needs a
102
+ frame, a mask, an icon, a wordmark, a menu backdrop, a menu video is a
103
+ normal, complete use of it, never a half-run pipeline. Enqueue `--no-wait`,
104
+ keep building, pick results up with `npx genex wait <id>`, and swap them in
105
+ as they land; while something is in flight, its id lives in DESIGN.md so a
106
+ compaction can pick it back up. Tier 2 never blocks a playable v0 — and
107
+ never park what landed: run `npx genex wait` on every enqueued ID before any
108
+ publish and before the final handoff of a session. When you show the user a
109
+ generated image, open it and paste the link (`npx genex wait <id> --open`,
110
+ or generate with `--open`) a bare URL in a terminal is invisible, and "do
111
+ you like it?" with no picture in front of them is how that exchange fails.
112
+ Whatever you do generate gets its quality steps IN FULL — extraction, masks,
113
+ wiring, `npx genex ui audit`; judgment decides whether art is generated, it
114
+ never loosens how well it's done.
206
115
  - **Tier 3 — offer, don't build.** Video layers over the HUD, 9-slice panel
207
116
  sprites, animated menu sprites. Offer in one line
208
- after the player has seen Tier 1+2 working; build on request.
117
+ after the player has seen the interface working; build on request.
209
118
 
210
119
  ## Architecture: DOM overlay by default
211
120
 
@@ -357,12 +266,11 @@ black reads as a broken page. The branded version costs nothing:
357
266
 
358
267
  - **Background:** the menu's still frame — when the game has a cinematic menu,
359
268
  that image exists BEFORE the video does; show it dimmed
360
- (`filter: brightness(0.6)`) behind the progress. Menu-less game: one
361
- `npx genex image` key-art call in the house style, enqueued first thing.
362
- Until the image arrives, the flat darkest hue from the style brief a
363
- placeholder with the same status as the placeholder CSS HUD: a loader
364
- still without its key-art/menu-frame background at publish or session
365
- handoff is the same failure.
269
+ (`filter: brightness(0.6)`) behind the progress. Otherwise, something
270
+ composed from the brief: an `npx genex image` key-art call in the house
271
+ style, or a CSS backdrop built from the brief's hues (a gradient field, the
272
+ logotype, a sliver of the game's own shapes). Flat black with a percentage
273
+ over it is the thing to avoid.
366
274
  - **Progress:** a thin bar styled from the brief (its accent hue), driven by
367
275
  real asset counts — never an indeterminate spinner alone.
368
276
  - **Reveal:** when ready, fade the loader out (400–600 ms) into the menu or
@@ -494,43 +402,39 @@ timer in the game WILL drift apart). Buttons and menu keys emit the same
494
402
  intents the gameplay input path uses — a "Restart" button and the R key must
495
403
  run identical code.
496
404
 
497
- The generated layer is the default, not a reward: every game's HUD is built
498
- from a generated sprite set (`$genex-ai-hud`), and a cinematic menu (looping
499
- video backdrop behind the buttons, `$genex-ai-menu`) backs every game whose
500
- menu decision is yes. Both slot into this exact `#ui` + `data-phase`
501
- architecture and consume the shared style brief.
405
+ That holds whichever tier the interface is drawn in. When a game does take the
406
+ generated layer — a sprite HUD (`$genex-ai-hud`), a cinematic menu with a
407
+ looping video backdrop behind the buttons (`$genex-ai-menu`) it slots into
408
+ this exact `#ui` + `data-phase` architecture and consumes the shared style
409
+ brief. Generated chrome changes how a widget LOOKS; it never changes where the
410
+ widget gets its numbers.
502
411
 
503
412
  ## Failure modes to catch before the player does
504
413
 
505
- - No UI plan: screens invented one at a time, menu and HUD styled in two
506
- different worlds.
507
- - A separate UI-free concept frame generated before the HUD mockup — the
508
- concept IS the Stage-1 mockup, one generation; a second scene image for
509
- "the concept" is a wasted spend and a style-drift risk.
510
- - The concept/mockup fed to `genex video --frame` it has a HUD baked in;
511
- the UI-free menu still is the ONLY valid frame input (`$genex-ai-menu`).
512
- - HUD sprites never enqueued at the gate — the placeholder CSS shipped as the
513
- final HUD.
414
+ - No screen inventory: screens invented one at a time, menu and HUD styled in
415
+ two different worlds.
416
+ - A HUD-bearing image fed to `genex video --frame` a frame with UI baked
417
+ into it yields a menu backdrop with UI baked into it; the UI-free menu still
418
+ is the ONLY valid frame input (`$genex-ai-menu`).
419
+ - The build stalled waiting on artscaffold, core loop, and logic modules
420
+ keep moving in parallel while anything generated is in flight.
514
421
  - No pause screen, or a pause that isn't bound to Escape.
515
422
  - The OS arrow parked over the action for the whole session in a keyboard-driven
516
423
  game (the cursor is either a gameplay tool or locked away — see the cursor
517
424
  section).
518
425
  - A style brief whose fonts were never actually loaded (a system-stack display
519
426
  font at runtime).
520
- - A micro-element (reticle, cue, toast, damage number) left as default CSS
521
- while the panels got the art treatment.
427
+ - A micro-element (reticle, cue, toast, damage number) left at browser
428
+ defaults while the panels got the full treatment — one interface, one level
429
+ of finish.
522
430
  - A generic stat dashboard (rows of labels + numbers) instead of a designed
523
431
  HUD — pick the 2–3 numbers that matter and style them by hierarchy.
524
432
  - Hard-cut phase swaps, a menu whose elements just appear, numbers that
525
433
  teleport.
526
434
  - A silent menu; a bare "Loading…" over black.
527
- - The style chain parked behind the keep/change question the HUD Stage-2
528
- sheet, menu still, and logotype enqueue the moment the mockup LANDS, and
529
- silence means the concept stands; OR the menu VIDEO fired while a user
530
- objection was still open (its event triple is the only wait in the lane);
531
- OR the whole build stalled on the concept at all, when concept-INDEPENDENT
532
- work (scaffold, core loop, logic subagents) must keep moving in parallel
533
- throughout.
435
+ - Generated UI art enqueued and then left on the shelfa landed sprite sheet
436
+ that never got extracted, masked, and wired is worse than never running the
437
+ lane at all.
534
438
  - A CSS-cut corner (`clip-path`/`mask`) that shears its own content — clipped
535
439
  text or padding, a lost focus ring or glow, a jagged aliased edge, or a
536
440
  border/frame that stops at the cut instead of following it — the
@@ -107,7 +107,7 @@ their ONE established HUD use, the masked-fill progress reveal.
107
107
  canvas texture on PLATES (not full-screen).
108
108
  - A display face with calligraphic character; body stays clean for
109
109
  readability.
110
- - Palette lifted from the scene's own key art — sample it, don't invent a
111
- second palette.
110
+ - Palette lifted from the game's own world — sample the scene (or its key art,
111
+ where the game has some), don't invent a second palette.
112
112
  - Menu lean: **left rail** or **diegetic corner** over the painted vista;
113
113
  brushwork logotype; bare text with calligraphic display face.