{
  "name": "Game families, Discord & Reddit · version 4",
  "description": "Merges Storyteller and Storytelling into one family while preserving systems and community evidence.",
  "version": "v4",
  "snapshotDate": "2026-10-28",
  "license": "CC0-1.0",
  "provenance": {
    "source": "data/core_books.csv",
    "sha256": "5876380a1bde6ad04b860c71414c9843bc8fc7e03cbcef2e65b92e76d3e69de3",
    "note": "Derived classification; the source research file is not a public download."
  },
  "namespace": "reference",
  "slug": "game-families-v4",
  "resources": [
    {
      "name": "v4",
      "path": "/downloads/classifications/game-families/v4.csv",
      "format": "csv",
      "title": "v4 Game family assignments",
      "bytes": 70720,
      "sha256": "b2a43cee48540a29611645115b07676cf73475ab3255b26e3644585a2803b708",
      "recordCount": 305,
      "schema": {
        "fields": [
          {
            "name": "classification_version",
            "type": "string",
            "description": "Identifier of the immutable classification release.",
            "constraints": {
              "required": true
            }
          },
          {
            "name": "system_id",
            "type": "string",
            "description": "Stable identifier for a source system entry. Preserve it across later versions and name changes.",
            "constraints": {
              "required": true
            }
          },
          {
            "name": "system_name",
            "type": "string",
            "description": "Exact system name from the core snapshot.",
            "constraints": {
              "required": true
            }
          },
          {
            "name": "family_id",
            "type": "string",
            "description": "Stable family identifier; empty for standalone and unclassified rows."
          },
          {
            "name": "family_name",
            "type": "string",
            "description": "Display name of the assigned family; empty when no assignment is made."
          },
          {
            "name": "status",
            "type": "string",
            "description": "classified, standalone, or unclassified.",
            "constraints": {
              "required": true,
              "enum": [
                "classified",
                "standalone",
                "unclassified"
              ]
            }
          },
          {
            "name": "reason",
            "type": "string",
            "description": "Machine-readable reason for the assignment or gap."
          },
          {
            "name": "source_family_labels",
            "type": "string",
            "description": "JSON array of the original catalogue labels across the system's records.",
            "format": "json-array"
          },
          {
            "name": "source_record_count",
            "type": "integer",
            "description": "Number of source book/edition records represented by the row.",
            "constraints": {
              "required": true
            }
          },
          {
            "name": "notes",
            "type": "string",
            "description": "Explanation of the grouping or missing assignment."
          }
        ],
        "primaryKey": [
          "system_id"
        ],
        "missingValues": [
          ""
        ]
      }
    },
    {
      "name": "v4",
      "path": "/downloads/classifications/game-families/v4.json",
      "format": "json",
      "title": "v4 Original release manifest",
      "bytes": 7374,
      "sha256": "e35793769e68b466568f95d2909208f4753052487055d28acfe0277d2df71d54"
    },
    {
      "name": "v4-rules",
      "path": "/downloads/classifications/game-families/v4-rules.json",
      "format": "json",
      "title": "v4 Frozen classification rules",
      "bytes": 10323,
      "sha256": "2af1f888d2532211c7ef8b808991c360645ef0aa5115de161127c0d138f01f33"
    },
    {
      "name": "v4-discord-servers",
      "path": "/downloads/classifications/game-families/v4-discord-servers.csv",
      "format": "csv",
      "title": "v4 Discord servers",
      "bytes": 17399,
      "sha256": "f284de36436e4965db87aea9a503af50d3c10384f827fafb77bc460c4b60a56f",
      "recordCount": 46,
      "schema": {
        "fields": [
          {
            "name": "classification_version",
            "type": "string",
            "description": "Identifier of the immutable classification release.",
            "constraints": {
              "required": true
            }
          },
          {
            "name": "server_id",
            "type": "string",
            "description": "Stable project identifier, discord- followed by the guild ID.",
            "constraints": {
              "required": true
            }
          },
          {
            "name": "discord_guild_id",
            "type": "string",
            "description": "Discord's server identifier, stored as text."
          },
          {
            "name": "server_name",
            "type": "string",
            "description": "Server name returned when the invite was checked."
          },
          {
            "name": "invite_url",
            "type": "string",
            "description": "Public invite; its token is not the server identity."
          },
          {
            "name": "member_count_url",
            "type": "string",
            "description": "Public invite lookup requesting approximate membership for a later check."
          },
          {
            "name": "source_url",
            "type": "string",
            "description": "Public page advertising the invite, or the server's public self-description."
          },
          {
            "name": "community_type",
            "type": "string",
            "description": "publisher, creator, or fan."
          },
          {
            "name": "audience_scope",
            "type": "string",
            "description": "game, family, publisher, or multi_game; describes the wider audience."
          },
          {
            "name": "checked_on",
            "type": "string",
            "description": "ISO date on which the invite identity and public evidence were checked."
          },
          {
            "name": "verification_status",
            "type": "string",
            "description": "invite_resolved; does not claim an internal-channel audit."
          },
          {
            "name": "notes",
            "type": "string",
            "description": "Scope, edition limits, and source qualifications."
          }
        ],
        "primaryKey": [
          "server_id"
        ],
        "missingValues": [
          ""
        ]
      }
    },
    {
      "name": "v4-discord-mappings",
      "path": "/downloads/classifications/game-families/v4-discord-mappings.csv",
      "format": "csv",
      "title": "v4 Discord mappings",
      "bytes": 38204,
      "sha256": "563b22465d37882ff75d52b2b60539d66e8c5dc434fe17d342cd2e6f0551d561",
      "recordCount": 147,
      "schema": {
        "fields": [
          {
            "name": "classification_version",
            "type": "string",
            "description": "Identifier of the immutable classification release.",
            "constraints": {
              "required": true
            }
          },
          {
            "name": "target_type",
            "type": "string",
            "description": "system or family; selects the ID namespace.",
            "constraints": {
              "required": true
            }
          },
          {
            "name": "target_id",
            "type": "string",
            "description": "A system or family ID from the same v2 release.",
            "constraints": {
              "required": true
            }
          },
          {
            "name": "server_id",
            "type": "string",
            "description": "Reference to one server registry record.",
            "constraints": {
              "required": true
            }
          },
          {
            "name": "scope",
            "type": "string",
            "description": "system for a direct system link; family_subset for its explicit family crosswalk; family for independently evidenced whole-family coverage."
          },
          {
            "name": "evidence_url",
            "type": "string",
            "description": "Evidence for the system's relevance. Family links use this evidence plus the bundled family CSV."
          },
          {
            "name": "checked_on",
            "type": "string",
            "description": "ISO date of the association review."
          },
          {
            "name": "notes",
            "type": "string",
            "description": "Scope explanation; family links list the member systems they cover."
          }
        ],
        "primaryKey": [
          "target_type",
          "target_id",
          "server_id"
        ],
        "missingValues": [
          ""
        ]
      }
    },
    {
      "name": "v4-reddit-communities",
      "path": "/downloads/classifications/game-families/v4-reddit-communities.csv",
      "format": "csv",
      "title": "v4 Reddit communities",
      "bytes": 61925,
      "sha256": "67288d45ca031c41c9a2e049161c68a39d36615cdd484dc3870f375ffe55fb14",
      "recordCount": 105,
      "schema": {
        "fields": [
          {
            "name": "classification_version",
            "type": "string",
            "description": "Identifier of the immutable classification release.",
            "constraints": {
              "required": true
            }
          },
          {
            "name": "community_id",
            "type": "string",
            "description": "Stable project ID: reddit- plus the lowercase subreddit name.",
            "constraints": {
              "required": true
            }
          },
          {
            "name": "reddit_fullname",
            "type": "string",
            "description": "Reddit's t5_… community identifier when retrieved; empty when unavailable."
          },
          {
            "name": "subreddit_name",
            "type": "string",
            "description": "Public handle without r/; compare names case-insensitively."
          },
          {
            "name": "community_title",
            "type": "string",
            "description": "Community title from reviewed public evidence."
          },
          {
            "name": "subreddit_url",
            "type": "string",
            "description": "Public https://www.reddit.com/r/<name>/ link."
          },
          {
            "name": "subscriber_count_url",
            "type": "string",
            "description": "Subreddit-about JSON endpoint for a later subscriber lookup."
          },
          {
            "name": "oauth_subscriber_count_url",
            "type": "string",
            "description": "Equivalent OAuth API resource; requires authorized access."
          },
          {
            "name": "subscriber_lookup_status",
            "type": "string",
            "description": "not_live_verified; no successful live subscriber lookup is claimed."
          },
          {
            "name": "source_url",
            "type": "string",
            "description": "Reviewed primary public evidence: community page, metadata or discussion."
          },
          {
            "name": "discovery_url",
            "type": "string",
            "description": "Discovery source, often the public r/rpg directory."
          },
          {
            "name": "audience_scope",
            "type": "string",
            "description": "game, family, multi_game or publisher; wider audiences remain shared."
          },
          {
            "name": "subreddit_type",
            "type": "string",
            "description": "public, publicly readable restricted, or not_recorded."
          },
          {
            "name": "checked_on",
            "type": "string",
            "description": "Evidence-review date, not a live count observation date."
          },
          {
            "name": "verification_status",
            "type": "string",
            "description": "public_page_reviewed or public_metadata_reviewed; cached evidence may be included."
          },
          {
            "name": "notes",
            "type": "string",
            "description": "Scope limits, edition details, evidence method and gaps."
          }
        ],
        "primaryKey": [
          "community_id"
        ],
        "missingValues": [
          ""
        ]
      }
    },
    {
      "name": "v4-reddit-mappings",
      "path": "/downloads/classifications/game-families/v4-reddit-mappings.csv",
      "format": "csv",
      "title": "v4 Reddit mappings",
      "bytes": 58827,
      "sha256": "3d3d9066cfc9924314ddc9f87cc67782e736efa6f8ef56fafb198bf125b21857",
      "recordCount": 215,
      "schema": {
        "fields": [
          {
            "name": "classification_version",
            "type": "string",
            "description": "Identifier of the immutable classification release.",
            "constraints": {
              "required": true
            }
          },
          {
            "name": "target_type",
            "type": "string",
            "description": "system or family.",
            "constraints": {
              "required": true
            }
          },
          {
            "name": "target_id",
            "type": "string",
            "description": "A system or family ID in this same release.",
            "constraints": {
              "required": true
            }
          },
          {
            "name": "community_id",
            "type": "string",
            "description": "A registry ID in this same release.",
            "constraints": {
              "required": true
            }
          },
          {
            "name": "scope",
            "type": "string",
            "description": "system, family_subset through named systems, or independently evidenced whole family."
          },
          {
            "name": "evidence_url",
            "type": "string",
            "description": "Public source supporting the association."
          },
          {
            "name": "checked_on",
            "type": "string",
            "description": "Evidence-review date."
          },
          {
            "name": "notes",
            "type": "string",
            "description": "Scope limits or the systems supporting a subset association."
          }
        ],
        "primaryKey": [
          "target_type",
          "target_id",
          "community_id"
        ],
        "missingValues": [
          ""
        ]
      }
    }
  ],
  "methodology": "https://rpg-data-project.org/methodology/",
  "website": "https://rpg-data-project.org/classifications/game-families/v4/",
  "kind": "classification",
  "descriptor": "/downloads/catalogue/game-families-v4/datapackage.json"
}
