Game Design — Master Spec & System Map
Author the whole-game truth and the map of every system. This skill owns the
spec / map zone in .unikit/gamedesign/ (gd-principles → Zone Ownership):
GAME.md — the one-page master GDD. This skill owns both halves: the
authored one-pager (premise, pillars, loop stack, win/lose intent, monetization
stance, non-goals) and the generated [gen] maps at the bottom (## System Map [gen] / ## Flow Map [gen] / ## Funnel [gen]), which are mechanical read-only
re-renders of GD-IDS.yaml. Both content edits to its sections and structure
edits (which systems exist, remap) live here — there is no separate editor skill.
GD-IDS.yaml — the machine-truth registry of pillars, systems, flows, and facts,
and the interface the code side reads (unikit-plan / unikit-verify /
unikit-explore).
Optionally it produces PITCH.md. Per-system detail (systems/<slug>.md) is
not this skill's job — that is unikit-gd-system; player-action flows
(flows/<slug>.md) are unikit-gd-flow's; content types
(content-types/CT-<slug>.md) are unikit-gd-content's. This skill remains the
single writer of the system roster: a flow's GOAL → SYS or a content type's
belongs_to that needs a missing system routes back here for add-system.
Language Awareness — BLOCKING PRE-REQUISITE
BEFORE producing ANY output, silently read .unikit/system/LANGUAGE_RULES.md
and apply it to all output and artifacts (fall back to English if it is missing) —
including the rule to translate concepts, not transliterate jargon.
gd-principles → "Language" adds the game-design specifics: which IDs and stored
field values stay English. Do not announce or mention the language setting.
Bootstrap — Working Contract & Domain Knowledge (MANDATORY)
Before any authoring, silently load — do NOT narrate the loading:
.unikit/system/gamedesign/gd-principles.md — the cross-skill core: the
zone-ownership model and routing rule, the collaborative protocol
(Question → Options → Decision → Draft → Approval, Explain → Capture), the
one-way design→code boundary, the facts-registry / ID conventions, the language
rules, and the anti-patterns. Plus, from the same gamedesign/ folder, the
shards this skill needs: gd-authoring.md (the section-cycle authoring
contract + the delta discipline, incl. the GAME.md carve-out this skill
implements) and gd-lifecycle.md (the lifecycle & status spine).
This skill never re-specifies those mechanics — it applies them.
If the core file is missing, warn the user that gd-principles is not installed
(unikit-ai update) and continue with the protocol summarized above as a fallback.
.unikit/memory/gamedesign/RULES_INDEX.md — the domain knowledge index.
Load the core rules relevant to master-spec work on demand by their
Load When column — most often frameworks (MDA, SDT/PENS, Flow),
player-motivation (Quantic Foundry), core-loops, and monetization-ethics
(for the Monetization Stance). Re-read at skill start; never rely on a prior
conversation's cache. Obey the index's Rule-Loading Discipline: load by
Load When, load a reference only from its parent rule's > **References**:, and
never glob the memory tree (.unikit/memory/gamedesign/**) to discover rules.
.unikit/RULES.md (if present) — project overrides, highest priority.
.unikit/DESCRIPTION.md and .unikit/ROADMAP.md (optional) — project
constraints and milestones; routing context only.
- Schema guard (clean break — no automatic migration). When
GD-IDS.yaml
already exists it MUST be version: 2. If it is still version: 1, STOP and
report: the design workspace is on the pre-v2 layout — v2 dropped the standalone
markdown system-index that v1 kept beside the registry and now renders the maps
read-only into GAME.md (## System Map [gen] / ## Flow Map [gen] / ## Funnel [gen]); there is no automatic migration. Tell the user to bump GD-IDS.yaml to
version: 2, fold any rows from the legacy system-index into GAME.md's
## System Map [gen], and delete that legacy index file before re-running. Create
mode (no GD-IDS.yaml yet) skips this check.
One-way boundary: this skill never reads .unikit/code/, project source, or
build artifacts. Importing a GDD reads only the document the user points at.
Input
$ARGUMENTS — a single positional value, free-form, in any language. It may be a
file path or URL to an existing GDD, or a description / intent. There
are no flags: the mode is inferred (see Step 0). Ambiguity is always resolved
by asking — never by guessing.
Workflow
Step 0: Resolve Mode (no flags)
Mode is a function of the artifact state on disk and the intent in the
prompt (gd-principles "never guess" rule). Resolve in this order:
The argument is a file path or URL (contains /, ends in .md/.markdown,
exists on disk, or starts with http) → Import mode. Confirm the target
with the user if the path is uncertain.
The prompt asks for a pitch ("pitch", "питч", "one-pager to sell it") →
Pitch mode.
The prompt asks to rebuild / re-derive the system map ("remap", "rebuild
the map", "пересобери карту", "re-decompose systems") and GAME.md exists
→ Remap mode.
The prompt asks to add one system ("add a/new system", "let's add a crafting
system", "add this to the GDD", "добавь систему", or it names a system absent
from the roster) and GAME.md exists → Add-System mode. This is
distinct from Remap: Remap re-derives the whole map, Add-System grafts one
named system onto the existing map and never touches the authored one-pager.
(It is the route the internal design lens hands a new mechanic to — see
references/mode-add-system.md.)
The prompt asks to change GAME.md content ("change/rework/tune a pillar, the
fantasy, a loop, the monetization stance, an anti-pillar, win/lose intent…") and
GAME.md exists → Edit mode. This is the content-edit zone the spec owns
(absorbed under zone-ownership: there is no separate improve skill). Editing
GAME.md's authored sections is Edit; re-deriving the roster is Remap/Add-System.
GAME.md does not exist (check .unikit/gamedesign/GAME.md) and no import
path → Create mode.
GAME.md exists and the intent is none of the above → ambiguous. Ask:
AskUserQuestion: GAME.md already exists. What do you want to do?
Options:
1. Edit GAME.md content — change a pillar / fantasy / loop / stance
2. Rebuild the system map — re-derive the roster from GAME.md
3. Add one system to the map
4. Create a pitch (PITCH.md)
5. Import a different GDD — give me the path/URL
Announce the resolved mode in one line, then proceed to Step 2 (load the matching mode body).
Step 1: Ensure the Workspace
Create .unikit/gamedesign/ (and systems/, flows/, concepts/, researches/,
reviews/ as needed) if missing. Get today's date in YYYY-MM-DD (date +%F).
If GD-IDS.yaml does not yet exist, you will create it from the canonical structure
described below (the version: 2 registry); never overwrite an existing registry
value silently.
Step 2: Load the Mode Body
With the mode resolved (Step 0) and the workspace ensured (Step 1), load the matching
mode body on demand and follow it — do not keep all six mode bodies in context:
| Mode |
Reference body |
| Create |
{{skills_dir}}/{{self_name}}/references/mode-create.md (also holds Phase A + Phase B, reused below) |
| Import |
{{skills_dir}}/{{self_name}}/references/mode-import.md |
| Edit |
{{skills_dir}}/{{self_name}}/references/mode-edit.md |
| Remap |
{{skills_dir}}/{{self_name}}/references/mode-remap.md |
| Add-System |
{{skills_dir}}/{{self_name}}/references/mode-add-system.md |
| Pitch |
{{skills_dir}}/{{self_name}}/references/mode-pitch.md |
Import / Remap / Add-System reuse Phase A / Phase B from mode-create.md — load
that reference too when a body points to it. The shared Regen-on-Write contract
(below) and the Final report (below) stay here; every mode body returns to them.
Genre Profile — Create Seed
In Create mode (and only Create — a fresh GAME.md from a concept/dialogue),
this skill resolves and seeds a genre profile. The user never types a genres
command — the spec drives the CLI (the skill-runs-CLI precedent: /unikit Step 9.2
rules install). Full mechanics live in references/mode-create.md → Resolve the
genre profile (seed); in brief:
- Resolve (best-fit). Read the descriptive
genre: hint from the seed
CONCEPT.md (a human intent, not a catalog id). Open the catalog with
unikit-ai genres list (its output is authoritative — there is NO genre→id map
in this skill), and semantically best-fit the hint to a profile by
name / aliases / summary (e.g. «симулятор ломбарда» → tycoon). The hint
may deliberately not equal any id.
- Install + record. Run
unikit-ai genres install <id> (idempotent — driven by
this skill, not the user), then write the resolved id into the GAME.md header
> **genre_profile**: <id> (distinct from the descriptive genre: intent in
CONCEPT). Read the installed profile JSON
(.unikit/system/gamedesign/genres/<id>.json).
- Seed interview. Seeds (
seed_systems / seed_content_types /
seed_entities / seed_resources) are proposals, never auto-written — run a
subtractive multi-select + add questions, with per-CT scale. confidence is the
pre-fill knob (high → pre-check more, low → ask more). Kept seeds apply through the
existing owner paths: systems → Phase B / spec Add-System; content → route to
/unikit-gd-content add-CT; RES/TRACK/KNOB → their zone-owner.
- Universal baseline. No
genre: hint, no concept, or no profile fits
closely → author WITHOUT a profile (treat as confidence: low — ask more,
assume less), leave genre_profile: empty, install nothing.
The profile is read-only. Every divergence (a dropped seed, an added field, a
custom CT) lands in GD-IDS — the project's custom configuration is GD-IDS (import
from the profile + augment at spec), NEVER an edit to the profile JSON. The genre
layer dissolves into the registry, so verify stays genre-blind and only
unikit-gd-review reads the profile (its completeness lens).
Regen-on-Write — ## System Map [gen]
GAME.md's ## System Map [gen] block is a mechanical re-render of GD-IDS.yaml
systems (the RULES_INDEX model) — never hand-authored. unikit-gd-spec is its
primary writer: after any write that changes the roster or a system's registry
metadata (Create Phase B, Add-System, Remap, and a roster-affecting Edit), re-render
the block as the last step:
- Read
GD-IDS.yaml systems.
- Group by
category (omit empty categories); within a group sort by tier
(MVP → Vertical Slice → Alpha → Full Vision) then design order.
- One row per system:
ID | System | Tier | Status | Ver | Depends | Doc.
Status mirrors doc_status, overridden by deprecated (from the
status field) and by the code-set implemented (display-only — design never
authors it; gd-lifecycle → Lifecycle & Status). Append the · partial (n/m)
suffix when the system's SYSTEM.md carries ≥1 <!-- deferred --> (the
canonical render format from gd-lifecycle — the same suffix
unikit-gd-verify emits, so spec's regen-on-write never drops · partial before
the next verify).
Ver is — until skeleton.
Doc is systems/SYS-<slug>.md.
- Replace only the content between
<!-- gen:system-map --> and
<!-- /gen:system-map -->; never touch the authored one-pager above it. Full
map (one row per system); collapse to a single grouped table only as an escape
hatch for very large rosters (150+).
The ## Flow Map [gen] / ## Funnel [gen] blocks (rendered by unikit-gd-flow, the
Flow axis) and the ## Content Map [gen] block (rendered by unikit-gd-content, the
Content axis) are out of this skill's scope — leave their template scaffold
untouched; this skill renders only ## System Map [gen]. unikit-gd-verify
independently re-renders a stale [gen] block when its freshness check trips
(gd-lifecycle → Lifecycle & Status) — the render is deterministic, so all writers
always agree.
Final: Compact Report & Next Steps
After artifacts are written, show a compact report (TIER A — gd-principles →
Language: names lead, ids are parenthetical copy-paste tags, status is a plain phrase;
no summary document, no report file):
Mode: <create | import | edit | remap | add-system | pitch>
Workspace: .unikit/gamedesign/
Written:
- GAME.md (vN — <still a draft | approved>) — incl. ## System Map [gen] re-rendered
- GD-IDS.yaml (<P> pillars, <N> systems)
- [SOURCE.md / PITCH.md when applicable]
System map: <N> systems — <M> MVP, … ; design order: <name> (SYS-<slug>), <name> (SYS-<slug>), …
Then recommend the next step (do not auto-invoke):
- 🧩 Detail the first MVP system — /unikit-gd-system
- 🔍 Review the master spec (fresh session) — /unikit-gd-review
Ownership Boundaries
- Owns: all of
GAME.md — the authored one-pager (its content edits under
the GAME.md carve-out and its structure: which systems exist, remap) and
its generated ## System Map [gen] block (the primary regenerator). Owns the system
roster (Create + Import Phase B, Add-System, Remap) and GD-IDS.yaml
pillars + systems; optional PITCH.md; import SOURCE.md. Owns the GD-IDS
research: pointer (written in Add-System when seeded from an explore brief) —
unikit-gd-explore never writes it. Owns the genre-profile resolve (Create
seed): best-fit the CONCEPT genre: hint to a profile, drive unikit-ai genres install <id>, and write the resolved > **genre_profile**: id into GAME.md (the
user never types a genres command; the profile is read-only — divergence → GD-IDS).
- Not this skill: per-system GDDs (
systems/<slug>.md) → unikit-gd-system;
player-action flows (flows/<slug>.md) and the ## Flow Map [gen] / ## Funnel [gen] renders → unikit-gd-flow; content types (content-types/CT-<slug>.md) and
the ## Content Map [gen] render → unikit-gd-content (a content type registers
itself — there is no add-content here); ideation / concepts →
unikit-gd-brainstorm; research briefs → unikit-gd-explore.
- Never: write without explicit approval; change a
GD-IDS.yaml value
silently; delete or renumber an ID; read the code workspace or project source.
Quick Reference
/unikit-gd-spec <description> → create GAME.md (one-pager + maps) + GD-IDS.yaml
/unikit-gd-spec ./path/to/GDD.md → import an existing GDD (extract, keep SOURCE.md)
/unikit-gd-spec https://… → import from a URL
/unikit-gd-spec change PIL-2's design test → edit GAME.md content (GAME.md carve-out)
/unikit-gd-spec remap the systems → re-derive the map (GAME.md must exist)
/unikit-gd-spec add a crafting system → add-system: graft one system onto the map → seam to detail
/unikit-gd-spec pitch this game → produce PITCH.md
1---2name: unikit-gd-spec3description: Create and own the master game design document (GAME.md — the authored one-pager plus the generated [gen] system/flow maps) and the GD-IDS.yaml facts registry — the top-level, big-picture layer of the GDD and the machine interface the code side reads. Use it to write the master spec from a concept or dialogue, import an existing GDD (a file path or URL), edit GAME.md content ("change a pillar", "rework the monetization stance", "tweak the loop stack"), pitch the game ("pitch" → PITCH.md), re-decompose the systems ("remap"), and — importantly — to add a new system to the design map ("let's add a new system", "add a crafting system to the game design", "add this to the GDD"). This is the structural, map-level layer plus GAME.md content edits. To write or fill in the detailed parameters of one existing system, use /unikit-gd-system; to apply one edit spanning several zones at once use /unikit-gd-apply; to invent a brand-new game concept use /unikit-gd-brainstorm.4---56# Game Design — Master Spec & System Map78Author the **whole-game truth** and the **map of every system**. This skill owns the9**spec / map zone** in `.unikit/gamedesign/` (`gd-principles` → Zone Ownership):1011- **`GAME.md`** — the one-page master GDD. This skill owns **both halves**: the12 **authored one-pager** (premise, pillars, loop stack, win/lose intent, monetization13 stance, non-goals) and the **generated `[gen]` maps** at the bottom (`## System Map14 [gen]` / `## Flow Map [gen]` / `## Funnel [gen]`), which are mechanical read-only15 re-renders of `GD-IDS.yaml`. Both **content edits** to its sections and **structure**16 edits (which systems exist, remap) live here — there is no separate editor skill.17- **`GD-IDS.yaml`** — the machine-truth registry of pillars, systems, flows, and facts,18 **and the interface the code side reads** (`unikit-plan` / `unikit-verify` /19 `unikit-explore`).2021Optionally it produces **`PITCH.md`**. Per-system detail (`systems/<slug>.md`) is22**not** this skill's job — that is `unikit-gd-system`; player-action flows23(`flows/<slug>.md`) are `unikit-gd-flow`'s; content types24(`content-types/CT-<slug>.md`) are `unikit-gd-content`'s. This skill remains the25**single writer of the system roster**: a flow's `GOAL → SYS` or a content type's26`belongs_to` that needs a missing system routes back here for add-system.2728## Language Awareness — BLOCKING PRE-REQUISITE2930**BEFORE producing ANY output**, silently read `.unikit/system/LANGUAGE_RULES.md`31and apply it to all output and artifacts (fall back to English if it is missing) —32including the rule to **translate concepts, not transliterate jargon**.33`gd-principles` → "Language" adds the game-design specifics: which IDs and stored34field values stay English. Do not announce or mention the language setting.3536## Bootstrap — Working Contract & Domain Knowledge (MANDATORY)3738Before any authoring, silently load — do NOT narrate the loading:39401. **`.unikit/system/gamedesign/gd-principles.md`** — the cross-skill core: the41 zone-ownership model and routing rule, the collaborative protocol42 (Question → Options → Decision → Draft → Approval, Explain → Capture), the43 one-way design→code boundary, the facts-registry / ID conventions, the language44 rules, and the anti-patterns. Plus, from the same `gamedesign/` folder, the45 shards this skill needs: **`gd-authoring.md`** (the section-cycle authoring46 contract + the delta discipline, incl. the **GAME.md carve-out** this skill47 implements) and **`gd-lifecycle.md`** (the lifecycle & status spine).48 **This skill never re-specifies those mechanics — it applies them.**49 If the core file is missing, warn the user that `gd-principles` is not installed50 (`unikit-ai update`) and continue with the protocol summarized above as a fallback.512. **`.unikit/memory/gamedesign/RULES_INDEX.md`** — the domain knowledge index.52 Load the core rules relevant to master-spec work **on demand** by their53 `Load When` column — most often `frameworks` (MDA, SDT/PENS, Flow),54 `player-motivation` (Quantic Foundry), `core-loops`, and `monetization-ethics`55 (for the Monetization Stance). Re-read at skill start; never rely on a prior56 conversation's cache. Obey the index's **Rule-Loading Discipline**: load by57 `Load When`, load a reference only from its parent rule's `> **References**:`, and58 **never glob the memory tree** (`.unikit/memory/gamedesign/**`) to discover rules.593. **`.unikit/RULES.md`** (if present) — project overrides, highest priority.604. **`.unikit/DESCRIPTION.md`** and **`.unikit/ROADMAP.md`** (optional) — project61 constraints and milestones; routing context only.625. **Schema guard (clean break — no automatic migration).** When `GD-IDS.yaml`63 already exists it MUST be `version: 2`. If it is still `version: 1`, **STOP** and64 report: the design workspace is on the pre-v2 layout — v2 dropped the standalone65 markdown system-index that v1 kept beside the registry and now renders the maps66 read-only into `GAME.md` (`## System Map [gen]` / `## Flow Map [gen]` / `## Funnel67 [gen]`); there is no automatic migration. Tell the user to bump `GD-IDS.yaml` to68 `version: 2`, fold any rows from the legacy system-index into GAME.md's69 `## System Map [gen]`, and delete that legacy index file before re-running. Create70 mode (no `GD-IDS.yaml` yet) skips this check.7172**One-way boundary:** this skill never reads `.unikit/code/`, project source, or73build artifacts. Importing a GDD reads only the document the user points at.7475## Input7677`$ARGUMENTS` — a single positional value, free-form, in any language. It may be a78**file path** or **URL** to an existing GDD, or a **description / intent**. There79are **no flags**: the mode is inferred (see Step 0). Ambiguity is always resolved80by asking — never by guessing.8182## Workflow8384### Step 0: Resolve Mode (no flags)8586Mode is a function of the **artifact state on disk** and the **intent in the87prompt** (`gd-principles` "never guess" rule). Resolve in this order:88891. **The argument is a file path or URL** (contains `/`, ends in `.md`/`.markdown`,90 exists on disk, or starts with `http`) → **Import** mode. Confirm the target91 with the user if the path is uncertain.922. The prompt asks for a **pitch** ("pitch", "питч", "one-pager to sell it") →93 **Pitch** mode.943. The prompt asks to **rebuild / re-derive the system map** ("remap", "rebuild95 the map", "пересобери карту", "re-decompose systems") **and `GAME.md` exists**96 → **Remap** mode.974. The prompt asks to **add one system** ("add a/new system", "let's add a crafting98 system", "add this to the GDD", "добавь систему", or it names a system **absent99 from the roster**) **and `GAME.md` exists** → **Add-System** mode. This is100 distinct from Remap: Remap re-derives the **whole** map, Add-System grafts **one**101 named system onto the existing map and **never touches the authored one-pager**.102 (It is the route the internal design lens hands a new mechanic to — see103 `references/mode-add-system.md`.)1045. The prompt asks to **change GAME.md content** ("change/rework/tune a pillar, the105 fantasy, a loop, the monetization stance, an anti-pillar, win/lose intent…") **and106 `GAME.md` exists** → **Edit** mode. This is the content-edit zone the spec owns107 (absorbed under zone-ownership: there is no separate `improve` skill). Editing108 GAME.md's *authored* sections is Edit; re-deriving the *roster* is Remap/Add-System.1096. **`GAME.md` does not exist** (check `.unikit/gamedesign/GAME.md`) and no import110 path → **Create** mode.1117. **`GAME.md` exists** and the intent is none of the above → **ambiguous**. Ask:112113 ```114 AskUserQuestion: GAME.md already exists. What do you want to do?115116 Options:117 1. Edit GAME.md content — change a pillar / fantasy / loop / stance118 2. Rebuild the system map — re-derive the roster from GAME.md119 3. Add one system to the map120 4. Create a pitch (PITCH.md)121 5. Import a different GDD — give me the path/URL122 ```123124Announce the resolved mode in one line, then proceed to Step 2 (load the matching mode body).125126### Step 1: Ensure the Workspace127128Create `.unikit/gamedesign/` (and `systems/`, `flows/`, `concepts/`, `researches/`,129`reviews/` as needed) if missing. Get today's date in `YYYY-MM-DD` (`date +%F`).130If `GD-IDS.yaml` does not yet exist, you will create it from the canonical structure131described below (the `version: 2` registry); never overwrite an existing registry132value silently.133134### Step 2: Load the Mode Body135136With the mode resolved (Step 0) and the workspace ensured (Step 1), load the matching137mode body on demand and follow it — do **not** keep all six mode bodies in context:138139| Mode | Reference body |140|------|----------------|141| **Create** | `{{skills_dir}}/{{self_name}}/references/mode-create.md` (also holds Phase A + Phase B, reused below) |142| **Import** | `{{skills_dir}}/{{self_name}}/references/mode-import.md` |143| **Edit** | `{{skills_dir}}/{{self_name}}/references/mode-edit.md` |144| **Remap** | `{{skills_dir}}/{{self_name}}/references/mode-remap.md` |145| **Add-System** | `{{skills_dir}}/{{self_name}}/references/mode-add-system.md` |146| **Pitch** | `{{skills_dir}}/{{self_name}}/references/mode-pitch.md` |147148Import / Remap / Add-System reuse **Phase A / Phase B** from `mode-create.md` — load149that reference too when a body points to it. The shared **Regen-on-Write** contract150(below) and the **Final report** (below) stay here; every mode body returns to them.151152---153154## Genre Profile — Create Seed155156In **Create** mode (and only Create — a fresh `GAME.md` from a concept/dialogue),157this skill **resolves and seeds a genre profile**. The user never types a `genres`158command — the spec drives the CLI (the skill-runs-CLI precedent: `/unikit` Step 9.2159`rules install`). Full mechanics live in `references/mode-create.md` → **Resolve the160genre profile (seed)**; in brief:1611621. **Resolve (best-fit).** Read the descriptive `genre:` hint from the seed163 `CONCEPT.md` (a human intent, not a catalog id). Open the catalog with164 `unikit-ai genres list` (its output is authoritative — there is NO genre→id map165 in this skill), and **semantically best-fit** the hint to a profile by166 `name` / `aliases` / `summary` (e.g. «симулятор ломбарда» → `tycoon`). The hint167 may deliberately not equal any id.1682. **Install + record.** Run `unikit-ai genres install <id>` (idempotent — driven by169 this skill, not the user), then write the resolved id into the GAME.md header170 `> **genre_profile**: <id>` (distinct from the descriptive `genre:` intent in171 CONCEPT). Read the installed profile JSON172 (`.unikit/system/gamedesign/genres/<id>.json`).1733. **Seed interview.** Seeds (`seed_systems` / `seed_content_types` /174 `seed_entities` / `seed_resources`) are **proposals**, never auto-written — run a175 subtractive multi-select + add questions, with per-CT `scale`. `confidence` is the176 pre-fill knob (high → pre-check more, low → ask more). Kept seeds apply through the177 existing owner paths: systems → Phase B / spec Add-System; content → **route to178 `/unikit-gd-content` add-CT**; RES/TRACK/KNOB → their zone-owner.1794. **Universal baseline.** No `genre:` hint, no concept, or **no profile fits180 closely** → author WITHOUT a profile (treat as `confidence: low` — ask more,181 assume less), leave `genre_profile:` empty, install nothing.182183**The profile is read-only.** Every divergence (a dropped seed, an added field, a184custom CT) lands in **GD-IDS** — the project's custom configuration is GD-IDS (import185from the profile + augment at spec), NEVER an edit to the profile JSON. The genre186layer dissolves into the registry, so **verify stays genre-blind** and only187`unikit-gd-review` reads the profile (its completeness lens).188189---190191## Regen-on-Write — `## System Map [gen]`192193`GAME.md`'s `## System Map [gen]` block is a **mechanical re-render** of `GD-IDS.yaml`194`systems` (the `RULES_INDEX` model) — never hand-authored. `unikit-gd-spec` is its195primary writer: after **any** write that changes the roster or a system's registry196metadata (Create Phase B, Add-System, Remap, and a roster-affecting Edit), re-render197the block as the **last step**:1981991. Read `GD-IDS.yaml` `systems`.2002. Group by `category` (omit empty categories); within a group sort by `tier`201 (MVP → Vertical Slice → Alpha → Full Vision) then design order.2023. One row per system: `ID | System | Tier | Status | Ver | Depends | Doc`.203 - `Status` mirrors `doc_status`, **overridden** by `deprecated` (from the204 `status` field) and by the code-set `implemented` (display-only — design never205 authors it; `gd-lifecycle` → Lifecycle & Status). Append the **`· partial (n/m)`206 suffix** when the system's `SYSTEM.md` carries ≥1 `<!-- deferred -->` (the207 canonical render format from `gd-lifecycle` — the **same** suffix208 `unikit-gd-verify` emits, so spec's regen-on-write never drops `· partial` before209 the next verify).210 - `Ver` is `—` until `skeleton`.211 - `Doc` is `systems/SYS-<slug>.md`.2124. Replace **only** the content between `<!-- gen:system-map -->` and213 `<!-- /gen:system-map -->`; never touch the authored one-pager above it. Full214 map (one row per system); collapse to a single grouped table only as an escape215 hatch for very large rosters (150+).216217The `## Flow Map [gen]` / `## Funnel [gen]` blocks (rendered by `unikit-gd-flow`, the218Flow axis) and the `## Content Map [gen]` block (rendered by `unikit-gd-content`, the219Content axis) are **out of this skill's scope** — leave their template scaffold220untouched; this skill renders only `## System Map [gen]`. `unikit-gd-verify`221independently re-renders a stale `[gen]` block when its freshness check trips222(`gd-lifecycle` → Lifecycle & Status) — the render is deterministic, so all writers223always agree.224225---226227## Final: Compact Report & Next Steps228229After artifacts are written, show a compact report (TIER A — `gd-principles` →230Language: names lead, ids are parenthetical copy-paste tags, status is a plain phrase;231no summary document, no report file):232233```234Mode: <create | import | edit | remap | add-system | pitch>235Workspace: .unikit/gamedesign/236Written:237- GAME.md (vN — <still a draft | approved>) — incl. ## System Map [gen] re-rendered238- GD-IDS.yaml (<P> pillars, <N> systems)239- [SOURCE.md / PITCH.md when applicable]240241System map: <N> systems — <M> MVP, … ; design order: <name> (SYS-<slug>), <name> (SYS-<slug>), …242```243244Then recommend the next step (do not auto-invoke):245246- 🧩 Detail the first MVP system — /unikit-gd-system <SYS-slug>247- 🔍 Review the master spec (fresh session) — /unikit-gd-review248249## Ownership Boundaries250251- **Owns:** all of `GAME.md` — the **authored one-pager** (its **content edits** under252 the GAME.md carve-out **and** its **structure**: which systems exist, remap) **and**253 its generated `## System Map [gen]` block (the primary regenerator). Owns the system254 roster (Create + Import Phase B, Add-System, Remap) and `GD-IDS.yaml`255 pillars + systems; optional `PITCH.md`; import `SOURCE.md`. Owns the `GD-IDS`256 `research:` pointer (written in Add-System when seeded from an explore brief) —257 `unikit-gd-explore` never writes it. Owns the **genre-profile resolve** (Create258 seed): best-fit the CONCEPT `genre:` hint to a profile, drive `unikit-ai genres259 install <id>`, and write the resolved `> **genre_profile**:` id into GAME.md (the260 user never types a `genres` command; the profile is read-only — divergence → GD-IDS).261- **Not this skill:** per-system GDDs (`systems/<slug>.md`) → `unikit-gd-system`;262 player-action flows (`flows/<slug>.md`) and the `## Flow Map [gen]` / `## Funnel263 [gen]` renders → `unikit-gd-flow`; content types (`content-types/CT-<slug>.md`) and264 the `## Content Map [gen]` render → `unikit-gd-content` (a content type registers265 itself — there is no add-content here); ideation / concepts →266 `unikit-gd-brainstorm`; research briefs → `unikit-gd-explore`.267- **Never:** write without explicit approval; change a `GD-IDS.yaml` value268 silently; delete or renumber an ID; read the code workspace or project source.269270## Quick Reference271272```273/unikit-gd-spec <description> → create GAME.md (one-pager + maps) + GD-IDS.yaml274/unikit-gd-spec ./path/to/GDD.md → import an existing GDD (extract, keep SOURCE.md)275/unikit-gd-spec https://… → import from a URL276/unikit-gd-spec change PIL-2's design test → edit GAME.md content (GAME.md carve-out)277/unikit-gd-spec remap the systems → re-derive the map (GAME.md must exist)278/unikit-gd-spec add a crafting system → add-system: graft one system onto the map → seam to detail279/unikit-gd-spec pitch this game → produce PITCH.md280```