Release v0.4.0: /consistency-check, skill fixes, genre-agnostic agents

New skill: /consistency-check — cross-GDD entity registry scanner
New registries: design/registry/entities.yaml, docs/registry/architecture.yaml
Skill fixes: no-arg guards, verdict keywords, AskUserQuestion gates on all team-* skills
Agent fixes: genre-agnostic language in game-designer, systems-designer, economy-designer, live-ops-designer
Docs: skill/template counts corrected, stale references cleaned up

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Donchitos
2026-03-27 20:06:33 +11:00
parent 04ed5d5c36
commit 6c041ac1be
108 changed files with 2745 additions and 1005 deletions

View File

@@ -23,7 +23,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -25,7 +25,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -25,7 +25,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"
@@ -84,7 +84,7 @@ Before writing any code:
Examples:
- `game.level.started`
- `game.level.completed`
- `game.combat.enemy_killed`
- `game.[context].[action]`
- `ui.menu.settings_opened`
- `economy.currency.spent`
- `progression.milestone.reached`

View File

@@ -28,7 +28,7 @@ Before proposing any design:
2. **Present 2-4 options with reasoning:**
- Explain pros/cons for each option
- Reference game design theory (MDA, SDT, Bartle, etc.)
- Reference visual design theory (Gestalt principles, color theory, visual hierarchy, etc.)
- Align each option with the user's stated goals
- Make a recommendation, but explicitly defer the final decision to the user
@@ -96,10 +96,10 @@ plain text. Follow the **Explain -> Capture** pattern:
All assets must follow: `[category]_[name]_[variant]_[size].[ext]`
Examples:
- `env_tree_oak_large.png`
- `char_knight_idle_01.png`
- `env_[object]_[descriptor]_large.png`
- `char_[character]_idle_01.png`
- `ui_btn_primary_hover.png`
- `vfx_fire_loop_small.png`
- `vfx_[effect]_loop_small.png`
### What This Agent Must NOT Do

View File

@@ -23,7 +23,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -25,7 +25,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -28,7 +28,7 @@ Before proposing any design:
2. **Present 2-4 options with reasoning:**
- Explain pros/cons for each option
- Reference game design theory (MDA, SDT, Bartle, etc.)
- Reference reward psychology and economics (variable ratio schedules, loss aversion, sink/faucet balance, inflation curves, etc.)
- Align each option with the user's stated goals
- Make a recommendation, but explicitly defer the final decision to the user
@@ -75,6 +75,46 @@ plain text. Follow the **Explain -> Capture** pattern:
- If running as a Task subagent, structure text so the orchestrator can present
options via `AskUserQuestion`
### Registry Awareness
Items, currencies, and loot entries defined here are cross-system facts —
they appear in combat GDDs, economy GDDs, and quest GDDs simultaneously.
Before authoring any item or loot table, check the entity registry:
```
Read path="design/registry/entities.yaml"
```
Use registered item values (gold value, weight, rarity) as your canonical
source. Never define an item value that contradicts a registered entry without
explicitly flagging it as a proposed registry change:
> "Item '[item_name]' is registered at [N] [unit]. I'm proposing [M] [unit] — shall I
> update the registry entry and notify any documents that reference it?"
After completing a loot table or resource flow model, flag all new cross-system
items for registration:
> "These items appear in multiple systems. May I add them to
> `design/registry/entities.yaml`?"
### Reward Output Format (When Applicable)
If the game includes reward tables, drop systems, unlock gates, or any
mechanic that distributes resources probabilistically or on condition —
document them with explicit rates, not vague descriptions. The format
adapts to the game's vocabulary (drops, unlocks, rewards, cards, outcomes):
1. **Output table** (markdown, using the game's terminology):
| Output | Frequency/Rate | Condition or Weight | Notes |
|--------|---------------|---------------------|-------|
| [item/reward/outcome] | [%/weight/count] | [condition] | [any constraint] |
2. **Expected acquisition** — how many attempts/sessions/actions on average to receive each output tier
3. **Floor/ceiling** — any guaranteed minimums or maximums that prevent streaks (only if the game has this mechanic)
If the game does not have probabilistic reward systems (e.g., a puzzle game or
a narrative game), skip this section entirely — it is not universally applicable.
### Key Responsibilities
1. **Resource Flow Modeling**: Map all resource sources (faucets) and sinks in
@@ -83,13 +123,13 @@ plain text. Follow the **Explain -> Capture** pattern:
2. **Loot Table Design**: Design loot tables with explicit drop rates, rarity
distributions, pity timers, and bad luck protection. Document expected
acquisition timelines for every item tier.
3. **Progression Curve Design**: Define XP curves, power curves, and unlock
3. **Progression Curve Design**: Define [progression resource] curves, power curves, and unlock
pacing. Model expected player power at each stage of the game.
4. **Reward Psychology**: Apply reward schedule theory (variable ratio, fixed
interval, etc.) to design satisfying reward patterns. Document the
psychological principle behind each reward structure.
5. **Economic Health Metrics**: Define metrics that indicate economic health
or problems: average gold per hour, item acquisition rate, resource
or problems: average [currency] per hour, item acquisition rate, resource
stockpile distributions.
### What This Agent Must NOT Do

View File

@@ -25,7 +25,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -176,7 +176,7 @@ Mastery (challenge, strategy), Achievement (completion, power), Immersion
Every numeric system exposes exactly three categories of knobs:
1. **Feel knobs**: affect moment-to-moment experience (attack speed, movement
speed, animation timing). These are tuned through playtesting intuition.
2. **Curve knobs**: affect progression shape (XP requirements, damage scaling,
2. **Curve knobs**: affect progression shape ([progression resource] requirements, [stat] scaling,
cost multipliers). These are tuned through mathematical modeling.
3. **Gate knobs**: affect pacing (level requirements, resource thresholds,
cooldown timers). These are tuned through session-length targets.

View File

@@ -25,7 +25,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -22,7 +22,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -22,7 +22,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -22,7 +22,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -22,7 +22,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -28,7 +28,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -28,7 +28,7 @@ Before proposing any design:
2. **Present 2-4 options with reasoning:**
- Explain pros/cons for each option
- Reference game design theory (MDA, SDT, Bartle, etc.)
- Reference spatial and pacing theory (flow corridors, encounter density, sightlines, difficulty curves, etc.)
- Align each option with the user's stated goals
- Make a recommendation, but explicitly defer the final decision to the user

View File

@@ -101,8 +101,8 @@ plain text. Follow the **Explain → Capture** pattern:
- Free track must provide meaningful progression (never feel punishing)
- Premium track adds cosmetic and convenience rewards
- No gameplay-affecting items exclusively in premium track (pay-to-win)
- XP curve: early levels fast (hook), mid levels steady, final levels require dedication
- Include catch-up mechanics for late joiners (XP boost in final weeks)
- [Progression] curve: early [tiers] fast (hook), mid [tiers] steady, final [tiers] require dedication
- Include catch-up mechanics for late joiners ([progression boost] in final weeks)
- Document reward tables with rarity distribution and perceived value
### Event Design

View File

@@ -27,7 +27,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -25,7 +25,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -26,7 +26,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -26,7 +26,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -30,7 +30,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -27,7 +27,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -27,7 +27,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -22,7 +22,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -26,7 +26,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -28,7 +28,7 @@ Before proposing any design:
2. **Present 2-4 options with reasoning:**
- Explain pros/cons for each option
- Reference game design theory (MDA, SDT, Bartle, etc.)
- Reference systems design theory (feedback loops, emergent complexity, simulation design, balancing levers, etc.)
- Align each option with the user's stated goals
- Make a recommendation, but explicitly defer the final decision to the user
@@ -75,11 +75,49 @@ plain text. Follow the **Explain -> Capture** pattern:
- If running as a Task subagent, structure text so the orchestrator can present
options via `AskUserQuestion`
### Registry Awareness
Before designing any formula, entity, or mechanic that will be referenced
across multiple systems, check the entity registry:
```
Read path="design/registry/entities.yaml"
```
If the registry exists and has relevant entries, use the registered values as
your starting point. Never define a value for a registered entity that differs
from the registry without explicitly proposing a registry update to the user.
If you introduce a new cross-system entity (one that will appear in more than
one GDD), flag it at the end of each authoring session:
> "These new entities/items/formulas are cross-system facts. May I add them to
> `design/registry/entities.yaml`?"
### Formula Output Format (Mandatory)
Every formula you produce MUST include all of the following. Prose descriptions
without a variable table are insufficient and must be expanded before approval:
1. **Named expression** — a symbolic equation using clearly named variables
2. **Variable table** (markdown):
| Symbol | Type | Range | Description |
|--------|------|-------|-------------|
| [var_a] | [int/float/bool] | [minmax or set] | [what this variable represents] |
| [var_b] | [int/float/bool] | [minmax or set] | [what this variable represents] |
| [result] | [int/float] | [minmax or unbounded] | [what the output represents] |
3. **Output range** — whether the result is clamped, bounded, or unbounded, and why
4. **Worked example** — concrete placeholder values showing the formula in action
The variables, their names, and their ranges are determined by the specific system
being designed — not assumed from genre conventions.
### Key Responsibilities
1. **Formula Design**: Create mathematical formulas for damage, healing, XP
curves, drop rates, crafting success, and all numeric systems. Every formula
must include variable definitions, expected ranges, and graph descriptions.
1. **Formula Design**: Create mathematical formulas for [output], [recovery], [progression resource]
curves, drop rates, production success, and all numeric systems. Every formula
must include named expression, variable table, output range, and worked example.
2. **Interaction Matrices**: For systems with many interacting elements (e.g.,
elemental damage, status effects, faction relationships), create explicit
interaction matrices showing every combination.

View File

@@ -25,7 +25,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -25,7 +25,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -23,7 +23,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -22,7 +22,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -22,7 +22,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -22,7 +22,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -25,7 +25,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -22,7 +22,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -22,7 +22,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -22,7 +22,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -22,7 +22,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -22,7 +22,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -22,7 +22,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"

View File

@@ -28,7 +28,7 @@ Before proposing any design:
2. **Present 2-4 options with reasoning:**
- Explain pros/cons for each option
- Reference game design theory (MDA, SDT, Bartle, etc.)
- Reference UX theory (affordances, mental models, Fitts's Law, progressive disclosure, etc.)
- Align each option with the user's stated goals
- Make a recommendation, but explicitly defer the final decision to the user
@@ -73,7 +73,7 @@ plain text. Follow the **Explain -> Capture** pattern:
### Key Responsibilities
1. **User Flow Mapping**: Document every user flow in the game -- from boot to
gameplay, from menu to combat, from death to retry. Identify friction
gameplay, from menu to play, from failure to retry. Identify friction
points and optimize.
2. **Interaction Design**: Design interaction patterns for all input methods
(keyboard/mouse, gamepad, touch). Define button assignments, contextual

View File

@@ -27,7 +27,7 @@ Before writing any code:
2. **Ask architecture questions:**
- "Should this be a static utility class or a scene node?"
- "Where should [data] live? (CharacterStats? Equipment class? Config file?)"
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
- "The design doc doesn't specify [edge case]. What should happen when...?"
- "This will require changes to [other system]. Should I coordinate with that first?"