# games.atmosphere.define

> Published by [atmosphere.games](https://lexicon.garden/identity/did:plc:q2fua5gykeuir2hs2gkssygo)

## Description

A game definition: what it is, what a player needs to play it, and what records it uses.

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:q2fua5gykeuir2hs2gkssygo/games.atmosphere.define)
- [Documentation](https://lexicon.garden/lexicon/did:plc:q2fua5gykeuir2hs2gkssygo/games.atmosphere.define/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:q2fua5gykeuir2hs2gkssygo/games.atmosphere.define/examples)

## Definitions

### `games.atmosphere.define#all`

**Type**: `object`

Passes only when every rule passes.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `check` | `string` | Yes |  |
| `label` | `string` | No |  |
| `rules` | `array` | Yes |  |
| `acquire` | `string` (uri) | No |  |

### `games.atmosphere.define#any`

**Type**: `object`

Passes when at least one rule passes.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `check` | `string` | Yes |  |
| `label` | `string` | No |  |
| `rules` | `array` | Yes |  |
| `acquire` | `string` (uri) | No |  |

### `games.atmosphere.define#not`

**Type**: `object`

Passes only when the nested rule fails.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `rule` | `ref` → `#rule` | Yes |  |
| `check` | `string` | Yes |  |
| `label` | `string` | No |  |

### `games.atmosphere.define`

**Type**: `record`

One game definition per record, published in the developer's own repo. Keep the same rkey to update it in place.

**Key**: `any`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `url` | `string` (uri) | Yes | Where to play, download, or access the game. |
| `icon` | `blob` | No | Square icon. 256x256 recommended. |
| `name` | `string` | Yes | Display name. |
| `tags` | `array` | No | Freeform search tags. |
| `uses` | `array` | No | Other records this game reads or writes. Not required to play. |
| `cover` | `blob` | No | Card thumbnail image. 16:9 recommended. |
| `media` | `array` | No | Extra screenshots, banners, and key art. |
| `status` | `string` | No | Current availability. |
| `catalog` | `array` | No | Links to matching entries in other game catalogs. Purely supplementary. |
| `tagline` | `string` | No | One-line summary. |
| `category` | `string` | Yes | Type of experience. |
| `requires` | `array` | No | Hard gates. Every rule must pass before a player can use this game. |
| `trailers` | `array` | No | Video trailers or gameplay clips. |
| `createdAt` | `string` (datetime) | Yes |  |
| `developer` | `ref` → `#party` | No | The studio or person who made this. |
| `legacyIds` | `array` | No | Old IDs used for this same game by other catalogs or tools. |
| `publisher` | `string` (at-uri) | Yes | AT-URI of the repo that owns this record. Must match this record's own repo. |
| `updatedAt` | `string` (datetime) | No |  |
| `releasedAt` | `string` (datetime) | No | When this became available. |
| `description` | `string` | No | Full description. |
| `statNamespace` | `string` | No | Deprecated. Use uses[] instead. |

### `games.atmosphere.define#rule`

**Type**: `object`

One playability rule. 'check' selects the variant: record, field, matches, vouch, all, any, or not. A rule may include verify for an additional required proof. An unknown check must never pass.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `op` | `string` | No | Comparison operator. |
| `nsid` | `string` (nsid) | No | Collection to read. |
| `rkey` | `string` | No | Record key. Defaults to 'self'; 'any' scans the collection. |
| `rule` | `ref` → `#rule` | No | Nested rule for not. |
| `check` | `string` | Yes | Rule type. |
| `field` | `string` | No | Dot-path to test. |
| `label` | `string` | No | Why this is required. |
| `rules` | `array` | No | Nested rules for all/any. |
| `value` | `unknown` | No | Comparison value. |
| `verify` | `ref` → `#rule` | No | Additional proof that must also pass when this rule is used in requires[]. |
| `acquire` | `string` (uri) | No | Where to get this. |
| `filters` | `array` | No | Conditions for matches or vouch. |
| `authority` | `string` (did) | No | DID of the trusted issuer, for vouch. |

### `games.atmosphere.define#field`

**Type**: `object`

Passes if a field on the player's record meets a condition.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `op` | `string` | Yes | Comparison operator. |
| `nsid` | `string` (nsid) | Yes |  |
| `rkey` | `string` | No | Record key. Defaults to 'self'; 'any' scans the collection. |
| `check` | `string` | Yes |  |
| `field` | `string` | Yes | Dot-path to the property to test. |
| `label` | `string` | No |  |
| `value` | `unknown` | No | Comparison value. |
| `acquire` | `string` (uri) | No |  |

### `games.atmosphere.define#party`

**Type**: `object`

An entity associated with the experience, such as its developer.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `did` | `string` (did) | No | DID of this entity's account, if it has one. |
| `url` | `string` (uri) | No | Website. |
| `name` | `string` | Yes | Display name. |

### `games.atmosphere.define#video`

**Type**: `object`

A trailer or gameplay clip.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `url` | `string` (uri) | No | Direct URL, used when no platform/videoId is given. |
| `title` | `string` | Yes | Clip title. |
| `videoId` | `string` | No | Platform video id. |
| `platform` | `string` | No | Where the video lives. |
| `thumbnail` | `blob` | No | Still frame shown before playing. |

### `games.atmosphere.define#vouch`

**Type**: `object`

Passes if a trusted authority's repo holds a matching record. Use for grants, awards, or approvals one account issues about another.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `nsid` | `string` (nsid) | Yes | Collection to look for in the authority's repo. |
| `check` | `string` | Yes |  |
| `label` | `string` | No |  |
| `acquire` | `string` (uri) | No |  |
| `filters` | `array` | No | Conditions the record must meet. Use 'isPlayer' to require it name the signed-in player. |
| `authority` | `string` (did) | Yes | DID of the account that issues the record. |

### `games.atmosphere.define#filter`

**Type**: `object`

One field condition, used by matches and vouch. 'isPlayer' passes when the field names the signed-in player.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `op` | `string` | Yes | Comparison operator. |
| `field` | `string` | Yes | Dot-path to the field. |
| `value` | `unknown` | No | Comparison value. |

### `games.atmosphere.define#record`

**Type**: `object`

Passes if the player holds any record in this collection.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `nsid` | `string` (nsid) | Yes | Collection to check. |
| `check` | `string` | Yes |  |
| `label` | `string` | No | Why this is required. |
| `acquire` | `string` (uri) | No | Where to get this. |

### `games.atmosphere.define#matches`

**Type**: `object`

Passes if one record satisfies all filters.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `nsid` | `string` (nsid) | Yes |  |
| `check` | `string` | Yes |  |
| `label` | `string` | No |  |
| `acquire` | `string` (uri) | No |  |
| `filters` | `array` | Yes | All filters must match on the same record. |

### `games.atmosphere.define#mediaItem`

**Type**: `object`

One image in the media gallery.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `alt` | `string` | No | Accessibility caption. |
| `type` | `string` | No | Kind of image. |
| `image` | `blob` | Yes | The image blob. |
| `width` | `integer` | No | Pixel width, if known. |
| `height` | `integer` | No | Pixel height, if known. |

### `games.atmosphere.define#recordUse`

**Type**: `object`

An optional record this game reads or writes. Not required to play; see requires[] for hard gates.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `nsid` | `string` (nsid) | Yes | Collection to read. |
| `path` | `string` | No | Dot-path to the relevant value inside the record. |
| `rkey` | `string` | No | Record key. Defaults to 'self'; 'any' scans the collection. |
| `role` | `string` | Yes | What this record is used for. |
| `label` | `string` | No | Short label for this use. |
| `verify` | `ref` → `#rule` | No | Optional rule confirming this use is genuine. |
| `acquire` | `string` (uri) | No | Where to create or manage this record. |
| `filters` | `array` | No | Conditions to match, used with rkey 'any' or an authority. |
| `purpose` | `string` | No | Why this record matters. |
| `authority` | `string` (did) | No | DID of the repo holding this record, if not the player's own. |

### `games.atmosphere.define#catalogRef`

**Type**: `object`

A link to a matching entry in another game catalog. Purely supplementary; never affects eligibility.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `uri` | `string` (at-uri) | Yes | AT-URI of the external catalog record. |
| `name` | `string` | No | Display name of the referenced entry. |
| `borrow` | `array` | No | Which parts of the referenced record a portal may show alongside this one. |
| `source` | `string` | No | Short name of the catalog. |

## Raw Schema

```json
{
  "id": "games.atmosphere.define",
  "defs": {
    "all": {
      "type": "object",
      "required": [
        "check",
        "rules"
      ],
      "properties": {
        "check": {
          "type": "string",
          "const": "all"
        },
        "label": {
          "type": "string",
          "maxLength": 120
        },
        "rules": {
          "type": "array",
          "items": {
            "ref": "#rule",
            "type": "ref"
          },
          "maxLength": 16,
          "minLength": 1
        },
        "acquire": {
          "type": "string",
          "format": "uri"
        }
      },
      "description": "Passes only when every rule passes."
    },
    "any": {
      "type": "object",
      "required": [
        "check",
        "rules"
      ],
      "properties": {
        "check": {
          "type": "string",
          "const": "any"
        },
        "label": {
          "type": "string",
          "maxLength": 120
        },
        "rules": {
          "type": "array",
          "items": {
            "ref": "#rule",
            "type": "ref"
          },
          "maxLength": 16,
          "minLength": 1
        },
        "acquire": {
          "type": "string",
          "format": "uri"
        }
      },
      "description": "Passes when at least one rule passes."
    },
    "not": {
      "type": "object",
      "required": [
        "check",
        "rule"
      ],
      "properties": {
        "rule": {
          "ref": "#rule",
          "type": "ref"
        },
        "check": {
          "type": "string",
          "const": "not"
        },
        "label": {
          "type": "string",
          "maxLength": 120
        }
      },
      "description": "Passes only when the nested rule fails."
    },
    "main": {
      "key": "any",
      "type": "record",
      "record": {
        "type": "object",
        "required": [
          "name",
          "url",
          "publisher",
          "category",
          "createdAt"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Where to play, download, or access the game."
          },
          "icon": {
            "type": "blob",
            "accept": [
              "image/png",
              "image/webp"
            ],
            "maxSize": 512000,
            "description": "Square icon. 256x256 recommended."
          },
          "name": {
            "type": "string",
            "maxLength": 100,
            "description": "Display name."
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 32
            },
            "maxLength": 12,
            "description": "Freeform search tags."
          },
          "uses": {
            "type": "array",
            "items": {
              "ref": "#recordUse",
              "type": "ref"
            },
            "maxLength": 32,
            "description": "Other records this game reads or writes. Not required to play."
          },
          "cover": {
            "type": "blob",
            "accept": [
              "image/png",
              "image/jpeg",
              "image/webp"
            ],
            "maxSize": 4000000,
            "description": "Card thumbnail image. 16:9 recommended."
          },
          "media": {
            "type": "array",
            "items": {
              "ref": "#mediaItem",
              "type": "ref"
            },
            "maxLength": 24,
            "description": "Extra screenshots, banners, and key art."
          },
          "status": {
            "type": "string",
            "description": "Current availability.",
            "knownValues": [
              "live",
              "beta",
              "coming",
              "archived"
            ]
          },
          "catalog": {
            "type": "array",
            "items": {
              "ref": "#catalogRef",
              "type": "ref"
            },
            "maxLength": 8,
            "description": "Links to matching entries in other game catalogs. Purely supplementary."
          },
          "tagline": {
            "type": "string",
            "maxLength": 200,
            "description": "One-line summary."
          },
          "category": {
            "type": "string",
            "maxLength": 30,
            "description": "Type of experience.",
            "knownValues": [
              "browser",
              "download",
              "physical",
              "other"
            ]
          },
          "requires": {
            "type": "array",
            "items": {
              "ref": "#rule",
              "type": "ref"
            },
            "maxLength": 16,
            "description": "Hard gates. Every rule must pass before a player can use this game."
          },
          "trailers": {
            "type": "array",
            "items": {
              "ref": "#video",
              "type": "ref"
            },
            "maxLength": 8,
            "description": "Video trailers or gameplay clips."
          },
          "createdAt": {
            "type": "string",
            "format": "datetime"
          },
          "developer": {
            "ref": "#party",
            "type": "ref",
            "description": "The studio or person who made this."
          },
          "legacyIds": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 80
            },
            "maxLength": 12,
            "description": "Old IDs used for this same game by other catalogs or tools."
          },
          "publisher": {
            "type": "string",
            "format": "at-uri",
            "description": "AT-URI of the repo that owns this record. Must match this record's own repo."
          },
          "updatedAt": {
            "type": "string",
            "format": "datetime"
          },
          "releasedAt": {
            "type": "string",
            "format": "datetime",
            "description": "When this became available."
          },
          "description": {
            "type": "string",
            "maxLength": 2000,
            "description": "Full description."
          },
          "statNamespace": {
            "type": "string",
            "maxLength": 80,
            "description": "Deprecated. Use uses[] instead."
          }
        }
      },
      "description": "One game definition per record, published in the developer's own repo. Keep the same rkey to update it in place."
    },
    "rule": {
      "type": "object",
      "required": [
        "check"
      ],
      "properties": {
        "op": {
          "type": "string",
          "description": "Comparison operator.",
          "knownValues": [
            "exists",
            "notExists",
            "isPlayer",
            "eq",
            "neq",
            "gt",
            "gte",
            "lt",
            "lte"
          ]
        },
        "nsid": {
          "type": "string",
          "format": "nsid",
          "description": "Collection to read."
        },
        "rkey": {
          "type": "string",
          "maxLength": 50,
          "description": "Record key. Defaults to 'self'; 'any' scans the collection."
        },
        "rule": {
          "ref": "#rule",
          "type": "ref",
          "description": "Nested rule for not."
        },
        "check": {
          "type": "string",
          "description": "Rule type.",
          "knownValues": [
            "record",
            "field",
            "matches",
            "vouch",
            "all",
            "any",
            "not"
          ]
        },
        "field": {
          "type": "string",
          "maxLength": 200,
          "description": "Dot-path to test."
        },
        "label": {
          "type": "string",
          "maxLength": 120,
          "description": "Why this is required."
        },
        "rules": {
          "type": "array",
          "items": {
            "ref": "#rule",
            "type": "ref"
          },
          "maxLength": 16,
          "minLength": 1,
          "description": "Nested rules for all/any."
        },
        "value": {
          "type": "unknown",
          "description": "Comparison value."
        },
        "verify": {
          "ref": "#rule",
          "type": "ref",
          "description": "Additional proof that must also pass when this rule is used in requires[]."
        },
        "acquire": {
          "type": "string",
          "format": "uri",
          "description": "Where to get this."
        },
        "filters": {
          "type": "array",
          "items": {
            "ref": "#filter",
            "type": "ref"
          },
          "maxLength": 8,
          "minLength": 1,
          "description": "Conditions for matches or vouch."
        },
        "authority": {
          "type": "string",
          "format": "did",
          "description": "DID of the trusted issuer, for vouch."
        }
      },
      "description": "One playability rule. 'check' selects the variant: record, field, matches, vouch, all, any, or not. A rule may include verify for an additional required proof. An unknown check must never pass."
    },
    "field": {
      "type": "object",
      "required": [
        "check",
        "nsid",
        "field",
        "op"
      ],
      "properties": {
        "op": {
          "type": "string",
          "description": "Comparison operator.",
          "knownValues": [
            "exists",
            "notExists",
            "isPlayer",
            "eq",
            "neq",
            "gt",
            "gte",
            "lt",
            "lte"
          ]
        },
        "nsid": {
          "type": "string",
          "format": "nsid"
        },
        "rkey": {
          "type": "string",
          "maxLength": 50,
          "description": "Record key. Defaults to 'self'; 'any' scans the collection."
        },
        "check": {
          "type": "string",
          "const": "field"
        },
        "field": {
          "type": "string",
          "maxLength": 200,
          "description": "Dot-path to the property to test."
        },
        "label": {
          "type": "string",
          "maxLength": 120
        },
        "value": {
          "type": "unknown",
          "description": "Comparison value."
        },
        "acquire": {
          "type": "string",
          "format": "uri"
        }
      },
      "description": "Passes if a field on the player's record meets a condition."
    },
    "party": {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "did": {
          "type": "string",
          "format": "did",
          "description": "DID of this entity's account, if it has one."
        },
        "url": {
          "type": "string",
          "format": "uri",
          "description": "Website."
        },
        "name": {
          "type": "string",
          "maxLength": 100,
          "description": "Display name."
        }
      },
      "description": "An entity associated with the experience, such as its developer."
    },
    "video": {
      "type": "object",
      "required": [
        "title"
      ],
      "properties": {
        "url": {
          "type": "string",
          "format": "uri",
          "description": "Direct URL, used when no platform/videoId is given."
        },
        "title": {
          "type": "string",
          "maxLength": 120,
          "description": "Clip title."
        },
        "videoId": {
          "type": "string",
          "maxLength": 120,
          "description": "Platform video id."
        },
        "platform": {
          "type": "string",
          "description": "Where the video lives.",
          "knownValues": [
            "youtube",
            "vimeo",
            "twitch",
            "direct"
          ]
        },
        "thumbnail": {
          "type": "blob",
          "accept": [
            "image/png",
            "image/jpeg",
            "image/webp"
          ],
          "maxSize": 2000000,
          "description": "Still frame shown before playing."
        }
      },
      "description": "A trailer or gameplay clip."
    },
    "vouch": {
      "type": "object",
      "required": [
        "check",
        "authority",
        "nsid"
      ],
      "properties": {
        "nsid": {
          "type": "string",
          "format": "nsid",
          "description": "Collection to look for in the authority's repo."
        },
        "check": {
          "type": "string",
          "const": "vouch"
        },
        "label": {
          "type": "string",
          "maxLength": 120
        },
        "acquire": {
          "type": "string",
          "format": "uri"
        },
        "filters": {
          "type": "array",
          "items": {
            "ref": "#filter",
            "type": "ref"
          },
          "maxLength": 8,
          "description": "Conditions the record must meet. Use 'isPlayer' to require it name the signed-in player."
        },
        "authority": {
          "type": "string",
          "format": "did",
          "description": "DID of the account that issues the record."
        }
      },
      "description": "Passes if a trusted authority's repo holds a matching record. Use for grants, awards, or approvals one account issues about another."
    },
    "filter": {
      "type": "object",
      "required": [
        "field",
        "op"
      ],
      "properties": {
        "op": {
          "type": "string",
          "description": "Comparison operator.",
          "knownValues": [
            "exists",
            "notExists",
            "isPlayer",
            "eq",
            "neq",
            "gt",
            "gte",
            "lt",
            "lte"
          ]
        },
        "field": {
          "type": "string",
          "maxLength": 200,
          "description": "Dot-path to the field."
        },
        "value": {
          "type": "unknown",
          "description": "Comparison value."
        }
      },
      "description": "One field condition, used by matches and vouch. 'isPlayer' passes when the field names the signed-in player."
    },
    "record": {
      "type": "object",
      "required": [
        "check",
        "nsid"
      ],
      "properties": {
        "nsid": {
          "type": "string",
          "format": "nsid",
          "description": "Collection to check."
        },
        "check": {
          "type": "string",
          "const": "record"
        },
        "label": {
          "type": "string",
          "maxLength": 120,
          "description": "Why this is required."
        },
        "acquire": {
          "type": "string",
          "format": "uri",
          "description": "Where to get this."
        }
      },
      "description": "Passes if the player holds any record in this collection."
    },
    "matches": {
      "type": "object",
      "required": [
        "check",
        "nsid",
        "filters"
      ],
      "properties": {
        "nsid": {
          "type": "string",
          "format": "nsid"
        },
        "check": {
          "type": "string",
          "const": "matches"
        },
        "label": {
          "type": "string",
          "maxLength": 120
        },
        "acquire": {
          "type": "string",
          "format": "uri"
        },
        "filters": {
          "type": "array",
          "items": {
            "ref": "#filter",
            "type": "ref"
          },
          "maxLength": 8,
          "minLength": 1,
          "description": "All filters must match on the same record."
        }
      },
      "description": "Passes if one record satisfies all filters."
    },
    "mediaItem": {
      "type": "object",
      "required": [
        "image"
      ],
      "properties": {
        "alt": {
          "type": "string",
          "maxLength": 300,
          "description": "Accessibility caption."
        },
        "type": {
          "type": "string",
          "description": "Kind of image.",
          "knownValues": [
            "screenshot",
            "banner",
            "artwork",
            "poster",
            "background",
            "logo",
            "thumbnail"
          ]
        },
        "image": {
          "type": "blob",
          "accept": [
            "image/png",
            "image/jpeg",
            "image/webp",
            "image/gif"
          ],
          "maxSize": 8000000,
          "description": "The image blob."
        },
        "width": {
          "type": "integer",
          "description": "Pixel width, if known."
        },
        "height": {
          "type": "integer",
          "description": "Pixel height, if known."
        }
      },
      "description": "One image in the media gallery."
    },
    "recordUse": {
      "type": "object",
      "required": [
        "role",
        "nsid"
      ],
      "properties": {
        "nsid": {
          "type": "string",
          "format": "nsid",
          "description": "Collection to read."
        },
        "path": {
          "type": "string",
          "maxLength": 200,
          "description": "Dot-path to the relevant value inside the record."
        },
        "rkey": {
          "type": "string",
          "maxLength": 50,
          "description": "Record key. Defaults to 'self'; 'any' scans the collection."
        },
        "role": {
          "type": "string",
          "description": "What this record is used for.",
          "knownValues": [
            "character",
            "perk",
            "cosmetic",
            "interop",
            "stats",
            "activity",
            "leaderboard",
            "profile",
            "session",
            "inventory",
            "other"
          ]
        },
        "label": {
          "type": "string",
          "maxLength": 120,
          "description": "Short label for this use."
        },
        "verify": {
          "ref": "#rule",
          "type": "ref",
          "description": "Optional rule confirming this use is genuine."
        },
        "acquire": {
          "type": "string",
          "format": "uri",
          "description": "Where to create or manage this record."
        },
        "filters": {
          "type": "array",
          "items": {
            "ref": "#filter",
            "type": "ref"
          },
          "maxLength": 8,
          "description": "Conditions to match, used with rkey 'any' or an authority."
        },
        "purpose": {
          "type": "string",
          "maxLength": 300,
          "description": "Why this record matters."
        },
        "authority": {
          "type": "string",
          "format": "did",
          "description": "DID of the repo holding this record, if not the player's own."
        }
      },
      "description": "An optional record this game reads or writes. Not required to play; see requires[] for hard gates."
    },
    "catalogRef": {
      "type": "object",
      "required": [
        "uri"
      ],
      "properties": {
        "uri": {
          "type": "string",
          "format": "at-uri",
          "description": "AT-URI of the external catalog record."
        },
        "name": {
          "type": "string",
          "maxLength": 100,
          "description": "Display name of the referenced entry."
        },
        "borrow": {
          "type": "array",
          "items": {
            "type": "string",
            "knownValues": [
              "media",
              "trailers",
              "genres",
              "platforms",
              "releases",
              "ratings",
              "description",
              "summary"
            ]
          },
          "maxLength": 8,
          "description": "Which parts of the referenced record a portal may show alongside this one."
        },
        "source": {
          "type": "string",
          "maxLength": 60,
          "description": "Short name of the catalog."
        }
      },
      "description": "A link to a matching entry in another game catalog. Purely supplementary; never affects eligibility."
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1,
  "description": "A game definition: what it is, what a player needs to play it, and what records it uses."
}
```
