Game Design — Per-System GDD (Authoring & Revision)
Own one system's design document at
.unikit/gamedesign/systems/SYS-<slug>.md — eleven sections (A–K) plus any
domain section-packs. This skill owns the system zone (gd-principles → Zone
Ownership): the full lifecycle of a SYSTEM.md lives here — create the
skeleton, fill its placeholders, and revise approved content (Tuning /
Tweak / Rework) under the delta discipline. There is no separate editor skill.
It never creates the master spec or the map, and never edits GAME.md content —
that is unikit-gd-spec; player-action flows are unikit-gd-flow's.
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 the language setting.
Phase 0 — Bootstrap
Silently load — do not narrate:
.unikit/system/gamedesign/gd-principles.md (the core) — the collaborative
protocol, the facts registry / ID conventions, and the language rules. Plus, from
the same gamedesign/ folder, the shards this skill needs: gd-authoring.md
(the section-cycle authoring contract + the delta discipline — the
mandatory Version +1 → changelog → registry-check → recommend-verify tail),
gd-lifecycle.md (the lifecycle & status spine), and gd-provenance.md
(the import provenance markers). This skill applies that contract; it does not
restate the mechanics. If missing, warn (unikit-ai update) and fall back to the
protocol as summarized in this file.
.unikit/gamedesign/GAME.md — pillars, loops, non-goals the system must
serve (its roster is in ## System Map [gen]). If it does not exist, stop —
there is no master spec yet. Read .unikit/gamedesign/concepts/INDEX.md (if it
exists) to route precisely: a drafted/approved concept present → recommend
/unikit-gd-spec (build the master spec from it); no concept — or no
concepts/INDEX.md (or no concepts/ dir) at all → recommend
/unikit-gd-brainstorm first, then /unikit-gd-spec.
.unikit/gamedesign/GD-IDS.yaml — find the target system's entry under
systems. If there is no entry, the system is not on the map: offer to add
it via /unikit-gd-spec (add-system — graft this one system onto the map, not
a remap), or pick an existing not-started system. Do not author an off-map
system.
.unikit/memory/gamedesign/RULES_INDEX.md — load the core domain
rules for this system's behavioural domain, on demand by Load When, plus
any studio library rule on the same topic. Read the domain from the system's
name and Overview (the behaviour it drives), not from the coarse GD-IDS
category. When the behaviour is unambiguous, attach the matching domain
automatically (its section-pack rides along — auto-attached with a veto, see item 6
and Phase 4); when it is ambiguous or the category is coarse (Gameplay / Meta),
settle it with one plain AskUserQuestion — framed as an outcome, no codes — rather
than guessing. A system may match more than one domain; they combine:
| Domain |
Core rules to load |
Section-pack |
| combat / mechanics |
balance, frameworks |
combat |
| ai-behavior |
balance, frameworks |
ai-behavior |
| economy / loot |
economy, balance |
economy |
| progression / unlock |
progression, balance |
progression |
| level / content |
level-design |
levels |
| narrative / dialogue |
narrative |
narrative |
| ui / onboarding |
ux-onboarding |
ux |
| liveops / events |
liveops, economy |
liveops |
| persistence |
progression |
persistence |
| monetization |
monetization-ethics, economy |
monetization |
| meta / other |
frameworks, core-loops |
— |
Every system also touches accessibility (section J) — load accessibility
when authoring J. 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.
{{skills_dir}}/{{self_name}}/references/section-packs.md — the catalog of
domain section-packs. On an unambiguous domain the matching pack is
auto-attached — announced to the user in one outcome-language phrase (what it
adds for the player / the design, never the word "pack" or a code) that they can
veto; on an ambiguous domain a single plain Yes/No decides it. Never a mandatory
pass after section K, never surfaced as registry jargon. Load the pack named in the
table above (when one applies).
Schema guard (clean break — no automatic migration). GD-IDS.yaml 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 and now renders the roster into GAME.md (## System Map [gen]);
there is no automatic migration. Tell the user to bump GD-IDS.yaml to
version: 2 and fold the legacy system-index rows into GAME.md's
## System Map [gen] before re-running.
One-way boundary: never read .unikit/code/, project source, or build
artifacts. The only external read is SOURCE.md during an import (Phase 1).
Phase 1 — Context
Gather the facts the system must stay consistent with (read-only):
- Known facts from
GD-IDS.yaml — pillars (implements targets), entities,
formulas, and terms already locked by other systems. These are constraints, not
suggestions.
- Neighbor GDDs — for each system this one depends on (from the GD-IDS
depends_on, rendered in GAME.md ## System Map), read its header and sections
D (Formulas) and F (Dependencies) to match data interfaces.
- Recent
unikit-gd-verify reports for this system, if any
(.unikit/gamedesign/reviews/).
- Import source — if
GD-IDS/GAME mention an import, or a
researches/import-*/SOURCE.md covers this system, read it: section
content is extracted from it, not regenerated. Mark provenance per
gd-provenance → Provenance: place <!-- provenance: extracted from SOURCE.md -->
under each section lifted from the source and <!-- provenance: generated -->
under each section inferred to complete the skeleton; untagged sections are
normal authored content. Import folders created before dateless naming are named
YYYY-MM-DD_import-<slug>, and no folder was renamed, so the two formats coexist
permanently. The legacy glob researches/*import-*/SOURCE.md subsumes the
current one — a leading * matches zero characters — so one pattern would find
both eras; both are named here for legibility, not necessity, because the coexistence
is a fact a reader should not have to infer from glob semantics. Zero matches is not
a failure: a project with no import is the normal case and the branch stays silent.
- Explore research (internal design lens) — if this system was grafted from an
unikit-gd-explore brief, discover the research deterministically (survives a
/clear): read the system's GD-IDS research: pointer (authoritative), falling
back to the researches/INDEX.md entry whose Target: is this SYS-<slug>. Read
that research's RESEARCH_BRIEF.md → ## New Feature Plan block and use its
section seeds as the starting drafts — a seeded section is drafted
silently in Generation (Phase 4) and confirmed in the group review (Phase 5); a
seed is a draft, not an approved write. For
a revision (Edit), the matching block is ## Improvement Plan — its
ready-to-apply delta lines (<Section>: <old> → <new>), expected scale, touched
facts, and any RF-<date>-n it closes pre-fill the change set (the user still
approves every edit). These explore-seeded drafts are untagged normal authored
content — do not mark them extracted / generated (those markers are for
imports only; this is the generalization of import-reading stated canonically
in gd-provenance → Provenance, which this skill applies rather than restates).
Phase 2 — Resolve Mode + Depth (no flags)
Check .unikit/gamedesign/systems/SYS-<slug>.md and read the intent in the prompt:
- Does not exist → Create: build the skeleton (Phase 3), then author from
section A.
- Exists and the prompt describes a change to approved content (a value,
rule, or structure: "raise damage", "tune the economy", "rework the status
system", "nerf X", "change this rule") → Edit: classify the scale and apply
the delta (Revision below). Approved text is changed only through this path.
- Exists with
[To be designed] placeholders and the intent is to continue /
fill (or no change is described) → Fill: resume from the remaining placeholders.
Approved text is never overwritten — only placeholders are filled. Skip the
skeleton sub-step (Phase 3.1); still fork-scan and run Phases 4–5 over the
placeholders.
- Exists, complete, no change described → detailing is done; nothing to author.
Offer review / verify (Phase 6) and stop.
If the system name is ambiguous (matches several entries, or none) →
AskUserQuestion listing candidates. Never guess the target. Print the candidates to the screen as plain
markdown first — the question mechanism carries the options and nothing else.
Depth gate (Create / Fill only). Once the mode is Create or Fill, present one
depth picker — the named tiers core/standard/full, each with what it adds, not bare
letters:
AskUserQuestion: How deep should this pass go?
Options:
1. core (recommended) — the floor that gets the doc to a solid, usable base: Overview,
Player Fantasy, Detailed Design, Formulas, Acceptance Criteria.
2. standard — core + Edge Cases, Dependencies, Tuning Knobs, Telemetry, Accessibility.
3. full — every section + the relevant domain pack(s).
The picked tier is the ephemeral scope of this pass — NOT stored (gd-authoring /
gd-lifecycle); the lasting fact is the inferred status at Phase 6. The matching
section-pack for the system's domain (Phase 0 table) is auto-attached when the
domain is unambiguous — announced in one outcome-language phrase you can veto; an
ambiguous domain gets a single plain Yes/No in the Phase 4 decision round. Edit mode
skips the depth gate entirely (it lies flat on the Revision flow).
Load the Mode Body
With the mode resolved (Phase 2) and the depth picked (Create / Fill only), load the
matching body on demand and follow it — do not keep both bodies in context. Each
returns to Phase 6 (Final) below.
| Mode |
Reference body |
| Create / Fill |
{{skills_dir}}/{{self_name}}/references/mode-author.md — the Decision-First section-cycle: the A–K section map + core-set, Phase 3 (Skeleton + Fork-Scan), Phase 4 (Decision Interview + Generation), Phase 5 (Group Review). |
| Edit |
{{skills_dir}}/{{self_name}}/references/mode-revise.md — classify the scale (Tuning / Tweak / Rework / Structural-redirect), apply the change, then the mandatory delta tail. |
Phase 6 — Final: Registry & State + Handoff
Registry & State (Create / Fill)
After the sections are authored and accepted:
Scan the GDD for registry candidates — entities, formulas, and constants
referenced in two or more places (within this doc or cross-system). Internal
single-use values stay in the GDD.
Present a NEW / KNOWN summary and get approval to write GD-IDS.yaml
(entities, formulas, plus the systems entry's doc_status / version).
Existing values are never changed silently; every fact carries its source.
Status (inferred — gd-lifecycle). Set the system's status in the two places
that must agree — the SYSTEM.md header > Status: token (inside the combined
header line, not a separate bold line) and the GD-IDS.yaml doc_status:
detailed once the whole core-set (A/B/C/D/H) is authored.
- held at
skeleton while any core section carries <!-- deferred --> (the
soft floor guard; the WARN in Phase 4) — the status does not rise to
detailed.
- when the core is complete but ≥1 non-core section is deferred, the status is
detailed and the ## System Map [gen] renders it detailed · partial (n/m)
(inferred from the markers, never a stored field).
Set version: 1 in GD-IDS.yaml (and the header), write the initial changelog
block to section K (#### v1 — <date> — initial design with the
AC: + AC-<slug>-1 … N (new) line) — the single current block (K1).
The ## System Map [gen] renders this system's status/version (incl. the · partial
suffix) read-only from GD-IDS; it is not this skill's surface — it is owned by
unikit-gd-spec (B1) and re-renders on its next touch. unikit-gd-verify is read-only —
it prints the System Map freshness, it does not re-render it (gd-lifecycle →
Lifecycle & Status). Recommending verify (below) surfaces the staleness.
Handoff
Recommend the next steps (do not auto-invoke):
- ✅ Verify consistency & impact — /unikit-gd-verify SYS-
- 🔍 Qualitative review (fresh session) — /unikit-gd-review systems/SYS-.md
- 🧩 Detail the next system — /unikit-gd-system
A review is most independent in a fresh session (the reviewer should not have
authored the doc). unikit-gd-verify is read-only — it checks the doc against the
registry and prints dependent impact + the ## System Map [gen] freshness (the map
re-renders on the next unikit-gd-spec touch).
Final: Compact Report
The terminal plaque (TIER A — gd-principles → Language): lead with the name; the
SYS- / AC- ids ride along as parenthetical copy-paste tags; render the lifecycle
status as a plain phrase, never the raw enum.
System: <name> (SYS-<slug>)
Mode: <create | fill | edit (tuning|tweak|rework)> · Depth: <core | standard | full> (create/fill)
Doc: .unikit/gamedesign/systems/SYS-<slug>.md — <ready | ready, a couple of optional blocks left | skeleton, main blocks not filled yet>, vN
Sections authored/edited: <the named list> [deferred: <names carrying <!-- deferred --> > | none]
Registry: +<E> entities, +<F> formulas, +<T> terms (GD-IDS.yaml)
Acceptance criteria: AC-<slug>-1 … AC-<slug>-N [AC delta on an edit: +<n> / changed <n> / removed <n>]
No summary document, no report file.
Ownership Boundaries
- Owns: the full lifecycle of
systems/SYS-<slug>.md — creating the
skeleton, filling placeholders, and revising approved content (Tuning / Tweak
/ Rework, with the version bump + changelog; the status stays detailed); the system's
GD-IDS.yaml facts (entities, formulas, terms) and its doc_status /
version.
- Not this skill:
GAME.md content or structure / the system map →
unikit-gd-spec; player-action flows → unikit-gd-flow; quality verdicts →
unikit-gd-review; consistency & impact → unikit-gd-verify (read-only — it prints,
it does not re-render); the ## System Map [gen] render → unikit-gd-spec.
- Never: write, fill, or edit without approval; overwrite approved text outside
the delta discipline; skip the version bump or changelog on an edit (unrecorded
delta); change a
GD-IDS.yaml value silently; delete or renumber an ID; touch
structure or GAME.md; read the code workspace or project source.
Quick Reference
/unikit-gd-system SYS-combat → create skeleton + author A–K (if no doc yet)
/unikit-gd-system combat → resolve to the SYS-slug; same flow
/unikit-gd-system SYS-combat → resume filling placeholders (partial doc)
/unikit-gd-system SYS-combat "raise grunt damage 10%" → Tuning: edit G/C, one approval
/unikit-gd-system combat "small fix to the parry rule" → Tweak: targeted edit
/unikit-gd-system SYS-combat "rework the status system" → Rework: section-cycle old-vs-new
1---2name: unikit-gd-system3description: >-4 Author and own ONE system's design document (the A–K SYSTEM GDD) at5 .unikit/gamedesign/systems/SYS-<slug>.md — the depth layer of the GDD, single-system6 scope. Create the skeleton and walk the collaborative section-cycle to write its7 parameters, rules, formulas, and acceptance criteria ("detail the combat system",8 "write the GDD for the inventory system", "fill in the rest of this system doc",9 "spec out the parameters of X"), AND revise it after approval under the delta discipline10 ("raise the damage by 10%", "tune the economy", "rework the status system", "nerf11 X", "change this rule") — a number change is Tuning, a small rule a Tweak, restructuring12 a Rework; each bumps the version and logs the delta. To add a NEW system or13 restructure the system map use /unikit-gd-spec; to edit GAME.md content use /unikit-gd-spec;14 the moment an edit also touches a second system, a content type, a flow, or GAME.md (two15 or more zones) use /unikit-gd-apply; to invent a brand-new game concept use16 /unikit-gd-brainstorm.17argument-hint: "<system name | SYS-slug> [\"<what to change>\"] (mode inferred from doc state + intent; no flags)"18allowed-tools:19 - Read20 - Write21 - Edit22 - Glob23 - Grep24 - Bash(ls *)25 - Bash(find *)26 - Bash(wc *)27 - Bash(date *)28 - AskUserQuestion29disable-model-invocation: false30user-invocable: true31metadata:32 author: unikit33 version: "1.0"34 category: game-design35---3637# Game Design — Per-System GDD (Authoring & Revision)3839Own **one system's design document** at40`.unikit/gamedesign/systems/SYS-<slug>.md` — eleven sections (A–K) plus any41domain section-packs. This skill owns the **system zone** (`gd-principles` → Zone42Ownership): the **full lifecycle** of a `SYSTEM.md` lives here — **create** the43skeleton, **fill** its placeholders, and **revise** approved content (Tuning /44Tweak / Rework) under the delta discipline. There is no separate editor skill.4546It never creates the master spec or the map, and never edits `GAME.md` content —47that is `unikit-gd-spec`; player-action flows are `unikit-gd-flow`'s.4849## Language Awareness — BLOCKING PRE-REQUISITE5051**BEFORE producing ANY output**, silently read `.unikit/system/LANGUAGE_RULES.md`52and apply it to all output and artifacts (fall back to English if it is missing) —53including the rule to **translate concepts, not transliterate jargon**.54`gd-principles` → "Language" adds the game-design specifics: which IDs and stored55field values stay English. Do not announce the language setting.5657## Phase 0 — Bootstrap5859Silently load — do not narrate:60611. **`.unikit/system/gamedesign/gd-principles.md`** (the core) — the collaborative62 protocol, the facts registry / ID conventions, and the language rules. Plus, from63 the same `gamedesign/` folder, the shards this skill needs: **`gd-authoring.md`**64 (the **section-cycle authoring contract** + the **delta discipline** — the65 mandatory Version +1 → changelog → registry-check → recommend-verify tail),66 **`gd-lifecycle.md`** (the lifecycle & status spine), and **`gd-provenance.md`**67 (the import provenance markers). This skill **applies** that contract; it does not68 restate the mechanics. If missing, warn (`unikit-ai update`) and fall back to the69 protocol as summarized in this file.702. **`.unikit/gamedesign/GAME.md`** — pillars, loops, non-goals the system must71 serve (its roster is in `## System Map [gen]`). If it does not exist, **stop** —72 there is no master spec yet. Read `.unikit/gamedesign/concepts/INDEX.md` (if it73 exists) to route precisely: a `drafted`/`approved` concept present → recommend74 `/unikit-gd-spec` (build the master spec from it); no concept — or no75 `concepts/INDEX.md` (or no `concepts/` dir) at all → recommend76 `/unikit-gd-brainstorm` first, then `/unikit-gd-spec`.773. **`.unikit/gamedesign/GD-IDS.yaml`** — find the target system's entry under78 `systems`. If there is **no entry**, the system is not on the map: offer to add79 it via `/unikit-gd-spec` (**add-system** — graft this one system onto the map, not80 a remap), or pick an existing `not-started` system. Do not author an off-map81 system.824. **`.unikit/memory/gamedesign/RULES_INDEX.md`** — load the **core** domain83 rules for this system's **behavioural domain**, on demand by `Load When`, plus84 any studio `library` rule on the same topic. Read the domain from the system's85 name and Overview (the behaviour it drives), **not** from the coarse GD-IDS86 `category`. When the behaviour is **unambiguous**, attach the matching domain87 automatically (its section-pack rides along — auto-attached with a veto, see item 688 and Phase 4); when it is **ambiguous** or the category is coarse (Gameplay / Meta),89 settle it with one plain `AskUserQuestion` — framed as an outcome, no codes — rather90 than guessing. A system may match more than one domain; they combine:9192 | Domain | Core rules to load | Section-pack |93 |--------|--------------------|--------------|94 | combat / mechanics | `balance`, `frameworks` | combat |95 | ai-behavior | `balance`, `frameworks` | ai-behavior |96 | economy / loot | `economy`, `balance` | economy |97 | progression / unlock | `progression`, `balance` | progression |98 | level / content | `level-design` | levels |99 | narrative / dialogue | `narrative` | narrative |100 | ui / onboarding | `ux-onboarding` | ux |101 | liveops / events | `liveops`, `economy` | liveops |102 | persistence | `progression` | persistence |103 | monetization | `monetization-ethics`, `economy` | monetization |104 | meta / other | `frameworks`, `core-loops` | — |105106 Every system also touches **accessibility** (section J) — load `accessibility`107 when authoring J. Obey the index's **Rule-Loading Discipline**: load by `Load When`,108 load a reference only from its parent rule's `> **References**:`, and **never glob the109 memory tree** (`.unikit/memory/gamedesign/**`) to discover rules.1105. **`.unikit/RULES.md`** (if present) — project overrides, highest priority.1116. **`{{skills_dir}}/{{self_name}}/references/section-packs.md`** — the catalog of112 domain section-packs. On an **unambiguous** domain the matching pack is113 **auto-attached** — announced to the user in one outcome-language phrase (what it114 adds for the player / the design, never the word "pack" or a code) that they can115 veto; on an **ambiguous** domain a single plain Yes/No decides it. Never a mandatory116 pass after section K, never surfaced as registry jargon. Load the pack named in the117 table above (when one applies).1187. **Schema guard (clean break — no automatic migration).** `GD-IDS.yaml` MUST be119 `version: 2`. If it is still `version: 1`, **STOP** and report: the design120 workspace is on the pre-v2 layout — v2 dropped the standalone markdown121 system-index and now renders the roster into `GAME.md` (`## System Map [gen]`);122 there is no automatic migration. Tell the user to bump `GD-IDS.yaml` to123 `version: 2` and fold the legacy system-index rows into GAME.md's124 `## System Map [gen]` before re-running.125126**One-way boundary:** never read `.unikit/code/`, project source, or build127artifacts. The only external read is `SOURCE.md` during an import (Phase 1).128129## Phase 1 — Context130131Gather the facts the system must stay consistent with (read-only):132133- **Known facts** from `GD-IDS.yaml` — pillars (`implements` targets), entities,134 formulas, and terms already locked by other systems. These are constraints, not135 suggestions.136- **Neighbor GDDs** — for each system this one depends on (from the GD-IDS137 `depends_on`, rendered in GAME.md `## System Map`), read its header and sections138 **D (Formulas)** and **F (Dependencies)** to match data interfaces.139- **Recent `unikit-gd-verify` reports** for this system, if any140 (`.unikit/gamedesign/reviews/`).141- **Import source** — if `GD-IDS`/GAME mention an import, or a142 `researches/import-*/SOURCE.md` covers this system, read it: section143 content is **extracted** from it, not regenerated. Mark provenance per144 `gd-provenance` → Provenance: place `<!-- provenance: extracted from SOURCE.md -->`145 under each section lifted from the source and `<!-- provenance: generated -->`146 under each section inferred to complete the skeleton; untagged sections are147 normal authored content. Import folders created before dateless naming are named148 `YYYY-MM-DD_import-<slug>`, and no folder was renamed, so the two formats coexist149 permanently. The legacy glob `researches/*import-*/SOURCE.md` **subsumes** the150 current one — a leading `*` matches zero characters — so one pattern would find151 both eras; both are named here for legibility, not necessity, because the coexistence152 is a fact a reader should not have to infer from glob semantics. Zero matches is not153 a failure: a project with no import is the normal case and the branch stays silent.154- **Explore research (internal design lens)** — if this system was grafted from an155 `unikit-gd-explore` brief, discover the research **deterministically** (survives a156 `/clear`): read the system's `GD-IDS` `research:` pointer (authoritative), falling157 back to the `researches/INDEX.md` entry whose `Target:` is this `SYS-<slug>`. Read158 that research's `RESEARCH_BRIEF.md` → **`## New Feature Plan`** block and use its159 **section seeds** as the *starting drafts* — a **seeded** section is **drafted160 silently** in Generation (Phase 4) and confirmed in the group review (Phase 5); a161 seed is a draft, not an approved write. For162 a **revision** (Edit), the matching block is **`## Improvement Plan`** — its163 ready-to-apply delta lines (`<Section>: <old> → <new>`), expected scale, touched164 facts, and any `RF-<date>-n` it closes pre-fill the change set (the user still165 approves every edit). These explore-seeded drafts are **untagged normal authored166 content** — do **not** mark them `extracted` / `generated` (those markers are for167 **imports** only; this is the generalization of import-reading stated canonically168 in `gd-provenance` → Provenance, which this skill applies rather than restates).169170## Phase 2 — Resolve Mode + Depth (no flags)171172Check `.unikit/gamedesign/systems/SYS-<slug>.md` and read the intent in the prompt:1731741. **Does not exist** → **Create**: build the skeleton (Phase 3), then author from175 section A.1762. **Exists** and the prompt describes a **change to approved content** (a value,177 rule, or structure: "raise damage", "tune the economy", "rework the status178 system", "nerf X", "change this rule") → **Edit**: classify the scale and apply179 the delta (Revision below). Approved text is changed **only** through this path.1803. **Exists with `[To be designed]` placeholders** and the intent is to continue /181 fill (or no change is described) → **Fill**: resume from the remaining placeholders.182 Approved text is **never overwritten** — only placeholders are filled. Skip the183 skeleton sub-step (Phase 3.1); still fork-scan and run Phases 4–5 over the184 placeholders.1854. **Exists, complete, no change described** → detailing is done; nothing to author.186 Offer review / verify (Phase 6) and stop.187188If the system name is ambiguous (matches several entries, or none) →189`AskUserQuestion` listing candidates. Never guess the target. Print the candidates to the screen as plain190markdown first — the question mechanism carries the options and nothing else.191192**Depth gate (Create / Fill only).** Once the mode is Create or Fill, present **one**193depth picker — the named tiers `core/standard/full`, each with what it adds, not bare194letters:195196```197AskUserQuestion: How deep should this pass go?198Options:1991. core (recommended) — the floor that gets the doc to a solid, usable base: Overview,200 Player Fantasy, Detailed Design, Formulas, Acceptance Criteria.2012. standard — core + Edge Cases, Dependencies, Tuning Knobs, Telemetry, Accessibility.2023. full — every section + the relevant domain pack(s).203```204205The picked tier is the **ephemeral scope of this pass — NOT stored** (`gd-authoring` /206`gd-lifecycle`); the lasting fact is the inferred status at Phase 6. The matching207**section-pack** for the system's domain (Phase 0 table) is **auto-attached when the208domain is unambiguous** — announced in one outcome-language phrase you can veto; an209ambiguous domain gets a single plain Yes/No in the Phase 4 decision round. **Edit** mode210skips the depth gate entirely (it lies flat on the Revision flow).211212---213214## Load the Mode Body215216With the mode resolved (Phase 2) and the depth picked (Create / Fill only), load the217matching body on demand and follow it — do **not** keep both bodies in context. Each218returns to **Phase 6** (Final) below.219220| Mode | Reference body |221|------|----------------|222| **Create / Fill** | `{{skills_dir}}/{{self_name}}/references/mode-author.md` — the Decision-First section-cycle: the A–K section map + core-set, Phase 3 (Skeleton + Fork-Scan), Phase 4 (Decision Interview + Generation), Phase 5 (Group Review). |223| **Edit** | `{{skills_dir}}/{{self_name}}/references/mode-revise.md` — classify the scale (Tuning / Tweak / Rework / Structural-redirect), apply the change, then the mandatory delta tail. |224225---226227## Phase 6 — Final: Registry & State + Handoff228229### Registry & State (Create / Fill)230231After the sections are authored and accepted:2322331. **Scan the GDD** for registry candidates — entities, formulas, and constants234 referenced in **two or more places** (within this doc or cross-system). Internal235 single-use values stay in the GDD.2362. Present a **NEW / KNOWN** summary and get approval to write `GD-IDS.yaml`237 (`entities`, `formulas`, plus the `systems` entry's `doc_status` / `version`).238 Existing values are never changed silently; every fact carries its `source`.2393. **Status (inferred — `gd-lifecycle`).** Set the system's status in the **two places240 that must agree** — the `SYSTEM.md` header `> Status:` token (inside the combined241 header line, not a separate bold line) and the `GD-IDS.yaml` `doc_status`:242 - `detailed` once the whole **core-set (A/B/C/D/H)** is authored.243 - **held at `skeleton`** while any **core** section carries `<!-- deferred -->` (the244 soft floor guard; the WARN in Phase 4) — the status does **not** rise to245 `detailed`.246 - when the core is complete but ≥1 **non-core** section is deferred, the status is247 `detailed` and the `## System Map [gen]` renders it `detailed · partial (n/m)`248 (inferred from the markers, never a stored field).249250 Set `version: 1` in `GD-IDS.yaml` (and the header), write the initial changelog251 block to section K (`#### v1 — <date> — initial design` with the252 `AC: + AC-<slug>-1 … N (new)` line) — the single current block (K1).253254The `## System Map [gen]` renders this system's status/version (incl. the `· partial`255suffix) **read-only** from `GD-IDS`; it is **not** this skill's surface — it is owned by256`unikit-gd-spec` (B1) and re-renders on its next touch. `unikit-gd-verify` is read-only —257it **prints** the System Map freshness, it does not re-render it (`gd-lifecycle` →258Lifecycle & Status). Recommending verify (below) surfaces the staleness.259260### Handoff261262Recommend the next steps (do not auto-invoke):263264- ✅ Verify consistency & impact — /unikit-gd-verify SYS-<slug>265- 🔍 Qualitative review (fresh session) — /unikit-gd-review systems/SYS-<slug>.md266- 🧩 Detail the next system — /unikit-gd-system <SYS-slug>267268A review is most independent in a **fresh session** (the reviewer should not have269authored the doc). `unikit-gd-verify` is read-only — it checks the doc against the270registry and **prints** dependent impact + the `## System Map [gen]` freshness (the map271re-renders on the next `unikit-gd-spec` touch).272273## Final: Compact Report274275The terminal plaque (TIER A — `gd-principles` → Language): lead with the **name**; the276`SYS-` / `AC-` ids ride along as parenthetical copy-paste tags; render the lifecycle277status as a **plain phrase**, never the raw enum.278279```280System: <name> (SYS-<slug>)281Mode: <create | fill | edit (tuning|tweak|rework)> · Depth: <core | standard | full> (create/fill)282Doc: .unikit/gamedesign/systems/SYS-<slug>.md — <ready | ready, a couple of optional blocks left | skeleton, main blocks not filled yet>, vN283Sections authored/edited: <the named list> [deferred: <names carrying <!-- deferred --> > | none]284Registry: +<E> entities, +<F> formulas, +<T> terms (GD-IDS.yaml)285Acceptance criteria: AC-<slug>-1 … AC-<slug>-N [AC delta on an edit: +<n> / changed <n> / removed <n>]286```287288No summary document, no report file.289290## Ownership Boundaries291292- **Owns:** the **full lifecycle** of `systems/SYS-<slug>.md` — creating the293 skeleton, filling placeholders, **and revising approved content** (Tuning / Tweak294 / Rework, with the version bump + changelog; the status stays `detailed`); the system's295 `GD-IDS.yaml` facts (`entities`, `formulas`, `terms`) and its `doc_status` /296 `version`.297- **Not this skill:** `GAME.md` content **or** structure / the system map →298 `unikit-gd-spec`; player-action flows → `unikit-gd-flow`; quality verdicts →299 `unikit-gd-review`; consistency & impact → `unikit-gd-verify` (read-only — it prints,300 it does not re-render); the `## System Map [gen]` render → `unikit-gd-spec`.301- **Never:** write, fill, or edit without approval; overwrite approved text outside302 the delta discipline; skip the version bump or changelog on an edit (unrecorded303 delta); change a `GD-IDS.yaml` value silently; delete or renumber an ID; touch304 structure or `GAME.md`; read the code workspace or project source.305306## Quick Reference307308```309/unikit-gd-system SYS-combat → create skeleton + author A–K (if no doc yet)310/unikit-gd-system combat → resolve to the SYS-slug; same flow311/unikit-gd-system SYS-combat → resume filling placeholders (partial doc)312/unikit-gd-system SYS-combat "raise grunt damage 10%" → Tuning: edit G/C, one approval313/unikit-gd-system combat "small fix to the parry rule" → Tweak: targeted edit314/unikit-gd-system SYS-combat "rework the status system" → Rework: section-cycle old-vs-new315```