Game Design — Human-Readable GDD Renderer (workspace → docs/design/)
Render the design workspace (.unikit/gamedesign/) into a human-readable GDD under
docs/design/ — the export end of the module, the conceptual mirror of unikit-gd-recon:
where recon turns code → readable design facts, this turns design → a readable GDD.
Both are read-only at the edge.
This skill is a leaf renderer: it reads the GDD (the authored docs + the GD-IDS
registry), resolves the facts inline, and writes only into docs/design/. It has
no Skill tool — it renders, it never authors and never dispatches. The source of
truth stays the workspace; docs/design/ is a generated, throwaway view (re-render any
time).
Language Awareness — BLOCKING PRE-REQUISITE
BEFORE producing ANY output, silently read .unikit/system/LANGUAGE_RULES.md and apply
it (fall back to English if missing). The rendered chapters are prose for humans — write
them in the project's artifact language (gd-principles → "Language": GDD prose is ru by
default). IDs, keywords, canonical terms, and formulas stay English verbatim — they are
the registry's vocabulary, never translated. Do not announce the language setting.
Phase 0 — Bootstrap
Silently load — do not narrate:
.unikit/system/gamedesign/gd-principles.md (the core) — for the ID conventions
(so resolved facts print with correct ids), the facts-registry model, and the one-way
boundary (this renderer reads design, never code).
.unikit/gamedesign/GAME.md + GD-IDS.yaml — the render source. Schema
guard: GD-IDS.yaml MUST be version: 2; on version: 1 STOP with the upgrade
message (the pre-v2 layout renders differently — do not silently misrender).
- The per-artifact docs under
.unikit/gamedesign/: systems/SYS-*.md, flows/FLOW-*.md,
content-types/CT-*.md. Read each at render time for its prose; take numbers, ids,
status, and relationships from GD-IDS (the truth), not the doc body, when they differ.
No GDD yet — if GAME.md does not exist, there is nothing to render: STOP and route
to /unikit-gd-spec (author the master GDD) or /unikit-gd-recon (reconstruct one from
code first). Never invent content to fill a chapter.
One-way boundary: this skill reads only the design workspace — never .unikit/code/,
project source, or build artifacts. It is a render of the design, not of the code.
Pipeline — RESOLVE → RENDER → (optional) WEB
Step 1 — Ensure the output directory
Bash: mkdir -p docs/design
docs/design/ is this skill's owned subtree (the ownership split with unikit-docs,
which owns the non-design docs/*.md, is below). Never write a design chapter outside it.
Step 2 — Resolve the facts
Read GD-IDS.yaml once and build the resolution maps the chapters need: systems (by
category), flows (by mode), content_types (+ their content units), events,
resources / tracks / knobs, entities / formulas / terms, plus the depends_on
/ belongs_to / goals.targets edges. Resolve inline — a chapter prints the actual
name, number, status, and relationship, not a bare id with a "see the registry" pointer (a
reader of docs/design/ never opens GD-IDS). A deprecated entry is rendered struck or
under a "Deprecated" subhead, never silently dropped (the registry never deletes).
Step 3 — Render the chapters (Variant B — by axis)
Write these six Markdown chapters into docs/design/. Every chapter opens with a nav
header (links to the other chapters) and closes with a "См. также / See also" block
(artifact-language label) cross-linking the related chapters. Drafts are included, never
hidden: a not-started / skeleton artifact is rendered with a 🚧 draft banner so a
reader knows it is provisional — a half-finished GDD honestly shown beats a polished one
that silently omits the unfinished half.
| Chapter |
Renders |
index.md |
The cover: premise/theme, core fantasy, pillars + anti-pillars, loop stack, player needs (SDT), win/lose intent, monetization stance, non-goals, reference games — from GAME.md's authored sections. Plus a status overview (counts by doc_status) and a clickable TOC built from the ## System Map [gen] / ## Flow Map [gen] / ## Funnel [gen] / ## Content Map [gen] rows, each linking into the chapter below. |
systems.md |
All systems grouped by category (Core / Gameplay / Progression / Economy / UI / Narrative / Meta). Per system: name, tier, doc_status, implemented_version (if set), implements pillars, depends_on, and the fantasy + core-rules summary from its SYS-*.md. 🚧 on drafts. |
flows.md |
All flows grouped by wiring mode (linear / conditional / emergent). Per flow: the GOAL steps + their targets, pacing summary, depends_on systems, and the derived "realized" state (from the depended systems' implemented_version — never a written field). 🚧 on drafts. |
content.md |
All content types. Per type: the typed CT.fields schema (name : type, with ref<> links resolved to the target's name), the scale (bulk → count+spec; curated → the unit rows), and belongs_to system. 🚧 on drafts. |
economy.md |
The cross-boundary facts: resources (RES, by kind), tracks (TRACK), knobs (KNOB, with current/range), and formulas (FORM, with expression + range) — as tables. |
glossary.md |
The canonical vocabulary (terms: canonical → translation, forbidden aliases) and a master ID index (every PIL / SYS / FLOW / CT / CU / RES / TRACK / KNOB / ENT / FORM id → its name + owning doc), so any id seen anywhere resolves. |
Step 4 — --web (optional; default is Markdown-only)
The MVP is Markdown chapters; --web is opt-in. When --web is passed:
- Read the template at
{{skills_dir}}/unikit-docs/templates/html-template.html (a
non-.md asset, used verbatim — the same template unikit-docs renders its site with).
- Template missing or unreadable → skip HTML, keep the Markdown chapters, and emit
exactly:
WARN [--web] unikit-docs html-template not found; rendered Markdown only.
(/unikit-docs may not be installed — degrade gracefully, never fail).
- Template present → render each chapter to
docs/design/<chapter>.html using the
template, fix .md links to .html within docs/design/, and build a sidebar with
class="active" on the current page. The HTML lands inside docs/design/ (this
skill's owned subtree) — it never writes into unikit-docs's top-level docs-html/.
Step 5 — Report
List the chapters written (and the --web outcome). Note that docs/design/ is a
generated view — re-run after any authoring change to refresh it. Do not offer to edit
the GDD here (route authoring to the owner skills).
Next steps (do not auto-invoke):
- 🌐 Render the HTML site — /unikit-gd-docs --web
Ownership Boundaries
- Owns:
docs/design/** — the rendered design chapters (and their .html under
--web). Nothing else.
- Reads (read-only):
.unikit/gamedesign/ (GAME.md, GD-IDS.yaml, systems, flows,
content types), the gd-principles core, and unikit-docs's html-template (for --web).
- The
docs/ split with unikit-docs. unikit-docs owns the non-design
docs/*.md (top-level) + README.md + docs-html/; this skill owns docs/design/**.
The two never relink each other's pages: unikit-docs's --web glob is top-level
(docs/*.md) and does not descend into docs/design/. Keep this boundary — never write a
non-design page, never touch README.md or docs/*.md.
- Never: edit the GDD or
GD-IDS.yaml (read-only render); call any skill (no Skill
tool — it is a leaf); read the code workspace or project source; invent content to fill a
chapter; drop a draft or a deprecated entry to look more complete.
Quick Reference
/unikit-gd-docs → render docs/design/{index,systems,flows,content,economy,glossary}.md from the GDD
/unikit-gd-docs --web → the same, plus an HTML site from the unikit-docs template (MD-only + WARN if absent)
/unikit-gd-docs (no GDD) → STOP → route to /unikit-gd-spec (author) or /unikit-gd-recon (reconstruct from code)
1---2name: unikit-gd-docs3description: Render the GAME-DESIGN document (the GDD) into a human-readable form — read-only Markdown chapters under docs/design/ (index, systems, flows, content, economy, glossary), with facts resolved inline from GD-IDS.yaml and drafts flagged 🚧. Optional --web also renders an HTML site from the unikit-docs template (falls back to Markdown-only if the template is absent). Use to export or publish the design for people to read, e.g. "render the GDD", "export the game design to docs", "generate readable design docs", "publish the GDD", "make a design doc site". Read-only — it never edits the GDD or registry, only renders it. This renders the game DESIGN — for the project's CODE documentation (README, docs/*, modules, architecture) use /unikit-docs.4---56# Game Design — Human-Readable GDD Renderer (workspace → docs/design/)78Render the design workspace (`.unikit/gamedesign/`) into a **human-readable GDD** under9`docs/design/` — the export end of the module, the conceptual mirror of `unikit-gd-recon`:10where recon turns *code → readable design facts*, this turns *design → a readable GDD*.11Both are **read-only at the edge**.1213This skill is a **leaf renderer**: it **reads** the GDD (the authored docs + the `GD-IDS`14registry), **resolves the facts inline**, and **writes** only into `docs/design/`. It has15**no `Skill` tool** — it renders, it never authors and never dispatches. The source of16truth stays the workspace; `docs/design/` is a generated, throwaway view (re-render any17time).1819## Language Awareness — BLOCKING PRE-REQUISITE2021**BEFORE producing ANY output**, silently read `.unikit/system/LANGUAGE_RULES.md` and apply22it (fall back to English if missing). The rendered chapters are **prose for humans** — write23them in the project's artifact language (`gd-principles` → "Language": GDD prose is `ru` by24default). **IDs, keywords, canonical terms, and formulas stay English** verbatim — they are25the registry's vocabulary, never translated. Do not announce the language setting.2627## Phase 0 — Bootstrap2829Silently load — do not narrate:30311. **`.unikit/system/gamedesign/gd-principles.md`** (the core) — for the **ID conventions**32 (so resolved facts print with correct ids), the facts-registry model, and the one-way33 boundary (this renderer reads design, never code).342. **`.unikit/gamedesign/GAME.md`** + **`GD-IDS.yaml`** — the render source. **Schema35 guard:** `GD-IDS.yaml` MUST be `version: 2`; on `version: 1` **STOP** with the upgrade36 message (the pre-v2 layout renders differently — do not silently misrender).373. The per-artifact docs under `.unikit/gamedesign/`: `systems/SYS-*.md`, `flows/FLOW-*.md`,38 `content-types/CT-*.md`. Read each at render time for its prose; take **numbers, ids,39 status, and relationships from `GD-IDS` (the truth)**, not the doc body, when they differ.4041**No GDD yet** — if `GAME.md` does not exist, there is nothing to render: **STOP** and route42to `/unikit-gd-spec` (author the master GDD) or `/unikit-gd-recon` (reconstruct one from43code first). Never invent content to fill a chapter.4445**One-way boundary:** this skill reads only the design workspace — **never** `.unikit/code/`,46project source, or build artifacts. It is a render of the *design*, not of the code.4748## Pipeline — RESOLVE → RENDER → (optional) WEB4950### Step 1 — Ensure the output directory5152```53Bash: mkdir -p docs/design54```5556`docs/design/` is this skill's **owned subtree** (the ownership split with `unikit-docs`,57which owns the non-design `docs/*.md`, is below). Never write a design chapter outside it.5859### Step 2 — Resolve the facts6061Read `GD-IDS.yaml` once and build the resolution maps the chapters need: `systems` (by62`category`), `flows` (by `mode`), `content_types` (+ their `content` units), `events`,63`resources` / `tracks` / `knobs`, `entities` / `formulas` / `terms`, plus the `depends_on`64/ `belongs_to` / `goals.targets` edges. **Resolve inline** — a chapter prints the actual65name, number, status, and relationship, not a bare id with a "see the registry" pointer (a66reader of `docs/design/` never opens `GD-IDS`). A `deprecated` entry is rendered struck or67under a "Deprecated" subhead, never silently dropped (the registry never deletes).6869### Step 3 — Render the chapters (Variant B — by axis)7071Write these six Markdown chapters into `docs/design/`. Every chapter opens with a **nav72header** (links to the other chapters) and closes with a **"См. также / See also"** block73(artifact-language label) cross-linking the related chapters. **Drafts are included, never74hidden:** a `not-started` / `skeleton` artifact is rendered with a **🚧 draft banner** so a75reader knows it is provisional — a half-finished GDD honestly shown beats a polished one76that silently omits the unfinished half.7778| Chapter | Renders |79|---------|---------|80| `index.md` | The cover: premise/theme, core fantasy, pillars + anti-pillars, loop stack, player needs (SDT), win/lose intent, monetization stance, non-goals, reference games — from `GAME.md`'s authored sections. Plus a **status overview** (counts by `doc_status`) and a **clickable TOC** built from the `## System Map [gen]` / `## Flow Map [gen]` / `## Funnel [gen]` / `## Content Map [gen]` rows, each linking into the chapter below. |81| `systems.md` | **All** systems grouped by `category` (Core / Gameplay / Progression / Economy / UI / Narrative / Meta). Per system: name, tier, `doc_status`, `implemented_version` (if set), `implements` pillars, `depends_on`, and the fantasy + core-rules summary from its `SYS-*.md`. 🚧 on drafts. |82| `flows.md` | **All** flows grouped by wiring `mode` (linear / conditional / emergent). Per flow: the `GOAL` steps + their `targets`, pacing summary, `depends_on` systems, and the **derived "realized"** state (from the depended systems' `implemented_version` — never a written field). 🚧 on drafts. |83| `content.md` | **All** content types. Per type: the typed `CT.fields` schema (name : type, with `ref<>` links resolved to the target's name), the `scale` (`bulk` → count+spec; `curated` → the unit rows), and `belongs_to` system. 🚧 on drafts. |84| `economy.md` | The cross-boundary facts: `resources` (RES, by `kind`), `tracks` (TRACK), `knobs` (KNOB, with current/range), and `formulas` (FORM, with expression + range) — as tables. |85| `glossary.md` | The canonical vocabulary (`terms`: canonical → translation, forbidden aliases) and a **master ID index** (every PIL / SYS / FLOW / CT / CU / RES / TRACK / KNOB / ENT / FORM id → its name + owning doc), so any id seen anywhere resolves. |8687### Step 4 — `--web` (optional; default is Markdown-only)8889The MVP is Markdown chapters; **`--web` is opt-in**. When `--web` is passed:90911. Read the template at **`{{skills_dir}}/unikit-docs/templates/html-template.html`** (a92 non-`.md` asset, used verbatim — the same template `unikit-docs` renders its site with).932. **Template missing or unreadable** → skip HTML, keep the Markdown chapters, and emit94 exactly: `WARN [--web] unikit-docs html-template not found; rendered Markdown only.`95 (`/unikit-docs` may not be installed — degrade gracefully, never fail).963. Template present → render each chapter to `docs/design/<chapter>.html` using the97 template, fix `.md` links to `.html` **within `docs/design/`**, and build a sidebar with98 `class="active"` on the current page. The HTML lands **inside `docs/design/`** (this99 skill's owned subtree) — it never writes into `unikit-docs`'s top-level `docs-html/`.100101### Step 5 — Report102103List the chapters written (and the `--web` outcome). Note that `docs/design/` is a104generated view — re-run after any authoring change to refresh it. **Do not** offer to edit105the GDD here (route authoring to the owner skills).106107**Next steps** (do not auto-invoke):108109- 🌐 Render the HTML site — /unikit-gd-docs --web110111## Ownership Boundaries112113- **Owns:** `docs/design/**` — the rendered design chapters (and their `.html` under114 `--web`). Nothing else.115- **Reads (read-only):** `.unikit/gamedesign/` (`GAME.md`, `GD-IDS.yaml`, systems, flows,116 content types), the gd-principles core, and `unikit-docs`'s html-template (for `--web`).117- **The `docs/` split with `unikit-docs`.** `unikit-docs` owns the **non-design**118 `docs/*.md` (top-level) + `README.md` + `docs-html/`; this skill owns **`docs/design/**`**.119 The two never relink each other's pages: `unikit-docs`'s `--web` glob is top-level120 (`docs/*.md`) and does not descend into `docs/design/`. Keep this boundary — never write a121 non-design page, never touch `README.md` or `docs/*.md`.122- **Never:** edit the GDD or `GD-IDS.yaml` (read-only render); call any skill (no `Skill`123 tool — it is a leaf); read the code workspace or project source; invent content to fill a124 chapter; drop a draft or a `deprecated` entry to look more complete.125126## Quick Reference127128```129/unikit-gd-docs → render docs/design/{index,systems,flows,content,economy,glossary}.md from the GDD130/unikit-gd-docs --web → the same, plus an HTML site from the unikit-docs template (MD-only + WARN if absent)131/unikit-gd-docs (no GDD) → STOP → route to /unikit-gd-spec (author) or /unikit-gd-recon (reconstruct from code)132```