[
  {
    "name": "Game families · version 1",
    "description": "Version 1 of the system-to-family classification, derived from the core catalogue.",
    "version": "v1",
    "snapshotDate": "2026-10-18",
    "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-v1",
    "resources": [
      {
        "name": "v1",
        "path": "/downloads/classifications/game-families/v1.csv",
        "format": "csv",
        "title": "v1 Game family assignments",
        "bytes": 68974,
        "sha256": "41394941dc67ebe79fc0939564ba8a4ae9c6e1a3f61b03ae9cbc81b4f7433cbb",
        "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": "v1",
        "path": "/downloads/classifications/game-families/v1.json",
        "format": "json",
        "title": "v1 Original release manifest",
        "bytes": 2986,
        "sha256": "a5b5578fb40d0dc1b7e7dc2061140eaf6f2c30af6316fbe7c064dcd3391919a2"
      },
      {
        "name": "v1-rules",
        "path": "/downloads/classifications/game-families/v1-rules.json",
        "format": "json",
        "title": "v1 Frozen classification rules",
        "bytes": 4462,
        "sha256": "bfff1b617439a797d1d8ea595c0cb2275cdd99d887a6a00232ad01f19f90bf8d"
      }
    ],
    "methodology": "https://rpg-data-project.org/methodology/",
    "website": "https://rpg-data-project.org/classifications/game-families/v1/",
    "kind": "classification",
    "descriptor": "/downloads/catalogue/game-families-v1/datapackage.json"
  },
  {
    "name": "Game families & Discord · version 2",
    "description": "A combined release of the system-to-family mapping and researched public Discord server associations.",
    "version": "v2",
    "snapshotDate": "2026-10-18",
    "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-v2",
    "resources": [
      {
        "name": "v2",
        "path": "/downloads/classifications/game-families/v2.csv",
        "format": "csv",
        "title": "v2 Game family assignments",
        "bytes": 68974,
        "sha256": "1eff125118a1d4f5737f3eb3c4075168d118f1176a86a383ca9a2a2c6275b34b",
        "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": "v2",
        "path": "/downloads/classifications/game-families/v2.json",
        "format": "json",
        "title": "v2 Original release manifest",
        "bytes": 4726,
        "sha256": "869661504be1714c866a9b01f7b37c9805cb84156763982428148d79771f69fb"
      },
      {
        "name": "v2-rules",
        "path": "/downloads/classifications/game-families/v2-rules.json",
        "format": "json",
        "title": "v2 Frozen classification rules",
        "bytes": 6867,
        "sha256": "04823dcccf2c915c97f649b27955b64c486da4354a050fb7ce4f6302997f0dad"
      },
      {
        "name": "v2-discord-servers",
        "path": "/downloads/classifications/game-families/v2-discord-servers.csv",
        "format": "csv",
        "title": "v2 Discord servers",
        "bytes": 17399,
        "sha256": "7e1713e56f3f362cce6e12d156b6262ac3be0fa77b59526b1a0ebe4d1ccfe836",
        "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": "v2-discord-mappings",
        "path": "/downloads/classifications/game-families/v2-discord-mappings.csv",
        "format": "csv",
        "title": "v2 Discord mappings",
        "bytes": 37822,
        "sha256": "168c7d5db38e7029e82459627563e0114973667f8561979f58dfb31f54217bdf",
        "recordCount": 148,
        "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": [
            ""
          ]
        }
      }
    ],
    "methodology": "https://rpg-data-project.org/methodology/",
    "website": "https://rpg-data-project.org/classifications/game-families/v2/",
    "kind": "classification",
    "descriptor": "/downloads/catalogue/game-families-v2/datapackage.json"
  },
  {
    "name": "Game families, Discord & Reddit · version 3",
    "description": "Game families, public Discord servers and researched subreddits in one versioned classification.",
    "version": "v3",
    "snapshotDate": "2026-10-18",
    "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-v3",
    "resources": [
      {
        "name": "v3",
        "path": "/downloads/classifications/game-families/v3.csv",
        "format": "csv",
        "title": "v3 Game family assignments",
        "bytes": 68974,
        "sha256": "902ccf6636aa73aa42f8ea875ff23f1ee7ef96f8e3d9d66570c402e29240ff4e",
        "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": "v3",
        "path": "/downloads/classifications/game-families/v3.json",
        "format": "json",
        "title": "v3 Original release manifest",
        "bytes": 7069,
        "sha256": "68a8d8f2ba7223fa4fa36b829f77b7dea0b3c7eae7953aa124325a717f1d37ad"
      },
      {
        "name": "v3-rules",
        "path": "/downloads/classifications/game-families/v3-rules.json",
        "format": "json",
        "title": "v3 Frozen classification rules",
        "bytes": 9445,
        "sha256": "256248ca777cf2d492c161d49663efeab469e183bfc13a040e726137e2723c39"
      },
      {
        "name": "v3-discord-servers",
        "path": "/downloads/classifications/game-families/v3-discord-servers.csv",
        "format": "csv",
        "title": "v3 Discord servers",
        "bytes": 17399,
        "sha256": "aaf51453221a582c066d5db2559ac261032db45b387f98442cac1747666bdc64",
        "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": "v3-discord-mappings",
        "path": "/downloads/classifications/game-families/v3-discord-mappings.csv",
        "format": "csv",
        "title": "v3 Discord mappings",
        "bytes": 37822,
        "sha256": "ec3f395121b898ab57874bb5a27e38620fd34ae57c9c3358bed5be9547cc35ec",
        "recordCount": 148,
        "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": "v3-reddit-communities",
        "path": "/downloads/classifications/game-families/v3-reddit-communities.csv",
        "format": "csv",
        "title": "v3 Reddit communities",
        "bytes": 61925,
        "sha256": "1b04800a16a772c3b40f1cc8a5244a5163d2cd460a4e7dc1877caca9e9fb319c",
        "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": "v3-reddit-mappings",
        "path": "/downloads/classifications/game-families/v3-reddit-mappings.csv",
        "format": "csv",
        "title": "v3 Reddit mappings",
        "bytes": 58076,
        "sha256": "e0cf08d933180bcdbbef047fcebdd9ac82462558897ac4a9afd061e58851686f",
        "recordCount": 216,
        "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/v3/",
    "kind": "classification",
    "descriptor": "/downloads/catalogue/game-families-v3/datapackage.json"
  },
  {
    "name": "Community membership observations · October 2026",
    "description": "Dated Discord membership and Reddit subscriber observations, including the October 18 Reddit collection gaps. These are partial snapshots, not a monthly ranking.",
    "version": "2026-10",
    "snapshotDate": "2026-10-19",
    "license": "CC0-1.0",
    "provenance": {
      "note": "Dated source observations; screenshot references identify local evidence, which is not published. The October 18 Reddit collection contains gaps, not zero counts."
    },
    "namespace": "observations",
    "slug": "community-memberships-2026-10",
    "resources": [
      {
        "name": "reddit-memberships",
        "path": "/downloads/observations/2026-10-19/reddit-memberships.csv",
        "format": "csv",
        "title": "Reddit subscriber observations, 19 October 2026",
        "bytes": 22979,
        "sha256": "3dc521518f587094cd36d0573cc60a3b0ee2cea27716c7e24aeabeacd8f32b1d",
        "recordCount": 59,
        "schema": {
          "fields": [
            {
              "name": "classification_version",
              "type": "string",
              "description": "The same combined release, v3."
            },
            {
              "name": "platform",
              "type": "string",
              "description": "Platform."
            },
            {
              "name": "community_id",
              "type": "string",
              "description": "A registry ID in this same release."
            },
            {
              "name": "community_name",
              "type": "string",
              "description": "Community name."
            },
            {
              "name": "expected_platform_id",
              "type": "string",
              "description": "Expected platform id."
            },
            {
              "name": "audience_scope",
              "type": "string",
              "description": "game, family, multi_game or publisher; wider audiences remain shared."
            },
            {
              "name": "public_url",
              "type": "string",
              "description": "Public url."
            },
            {
              "name": "request_url",
              "type": "string",
              "description": "Request url."
            },
            {
              "name": "metric",
              "type": "string",
              "description": "Metric."
            },
            {
              "name": "returned_platform_id",
              "type": "string",
              "description": "Returned platform id."
            },
            {
              "name": "members",
              "type": "string",
              "description": "Observed nonnegative count; empty when collection failed or was not attempted."
            },
            {
              "name": "status",
              "type": "string",
              "description": "classified, standalone, or unclassified."
            },
            {
              "name": "requested_at",
              "type": "string",
              "description": "Start of the source request in UTC."
            },
            {
              "name": "captured_at",
              "type": "string",
              "description": "Actual capture time in UTC."
            },
            {
              "name": "extraction_method",
              "type": "string",
              "description": "Extraction method."
            },
            {
              "name": "screenshot_path",
              "type": "string",
              "description": "Relative reference to private local evidence; the image is not published."
            },
            {
              "name": "screenshot_sha256",
              "type": "string",
              "description": "SHA-256 of the private screenshot, retained for provenance."
            }
          ],
          "primaryKey": [
            "platform",
            "community_id"
          ],
          "missingValues": [
            ""
          ]
        }
      },
      {
        "name": "discord-memberships",
        "path": "/downloads/observations/2026-10-18/discord-memberships.csv",
        "format": "csv",
        "title": "Discord membership observations, 18 October 2026",
        "bytes": 20095,
        "sha256": "24bdc9657a956d4fc1599d9ec85b0a58b7143ec68668365745170ab18624af71",
        "recordCount": 44,
        "schema": {
          "fields": [
            {
              "name": "classification_version",
              "type": "string",
              "description": "The same combined release, v3."
            },
            {
              "name": "platform",
              "type": "string",
              "description": "Platform."
            },
            {
              "name": "community_id",
              "type": "string",
              "description": "A registry ID in this same release."
            },
            {
              "name": "community_name",
              "type": "string",
              "description": "Community name."
            },
            {
              "name": "expected_platform_id",
              "type": "string",
              "description": "Expected platform id."
            },
            {
              "name": "returned_platform_id",
              "type": "string",
              "description": "Returned platform id."
            },
            {
              "name": "returned_name",
              "type": "string",
              "description": "Returned name."
            },
            {
              "name": "audience_scope",
              "type": "string",
              "description": "game, family, multi_game or publisher; wider audiences remain shared."
            },
            {
              "name": "public_url",
              "type": "string",
              "description": "Public url."
            },
            {
              "name": "request_url",
              "type": "string",
              "description": "Request url."
            },
            {
              "name": "metric",
              "type": "string",
              "description": "Metric."
            },
            {
              "name": "members",
              "type": "string",
              "description": "Observed nonnegative count; empty when collection failed or was not attempted."
            },
            {
              "name": "status",
              "type": "string",
              "description": "classified, standalone, or unclassified."
            },
            {
              "name": "requested_at",
              "type": "string",
              "description": "Start of the source request in UTC."
            },
            {
              "name": "captured_at",
              "type": "string",
              "description": "Actual capture time in UTC."
            },
            {
              "name": "http_status",
              "type": "string",
              "description": "Http status."
            },
            {
              "name": "response_date",
              "type": "string",
              "description": "Response date."
            },
            {
              "name": "response_age_seconds",
              "type": "string",
              "description": "Response age seconds."
            },
            {
              "name": "attempt_count",
              "type": "string",
              "description": "Attempt count."
            },
            {
              "name": "evidence_id",
              "type": "string",
              "description": "Evidence id."
            },
            {
              "name": "notes",
              "type": "string",
              "description": "Scope limits or the systems supporting a subset association."
            }
          ],
          "primaryKey": [
            "platform",
            "community_id"
          ],
          "missingValues": [
            ""
          ]
        }
      },
      {
        "name": "reddit-memberships",
        "path": "/downloads/observations/2026-10-18/reddit-memberships.csv",
        "format": "csv",
        "title": "Reddit collection gaps, 18 October 2026",
        "bytes": 17391,
        "sha256": "caf1d9c645a4d4d96896e4dc8d28b92ce08347817b00dc14c3e4c1e9b02e322a",
        "recordCount": 59,
        "schema": {
          "fields": [
            {
              "name": "classification_version",
              "type": "string",
              "description": "The same combined release, v3."
            },
            {
              "name": "platform",
              "type": "string",
              "description": "Platform."
            },
            {
              "name": "community_id",
              "type": "string",
              "description": "A registry ID in this same release."
            },
            {
              "name": "community_name",
              "type": "string",
              "description": "Community name."
            },
            {
              "name": "expected_platform_id",
              "type": "string",
              "description": "Expected platform id."
            },
            {
              "name": "returned_platform_id",
              "type": "string",
              "description": "Returned platform id."
            },
            {
              "name": "returned_name",
              "type": "string",
              "description": "Returned name."
            },
            {
              "name": "audience_scope",
              "type": "string",
              "description": "game, family, multi_game or publisher; wider audiences remain shared."
            },
            {
              "name": "public_url",
              "type": "string",
              "description": "Public url."
            },
            {
              "name": "request_url",
              "type": "string",
              "description": "Request url."
            },
            {
              "name": "metric",
              "type": "string",
              "description": "Metric."
            },
            {
              "name": "members",
              "type": "string",
              "description": "Observed nonnegative count; empty when collection failed or was not attempted."
            },
            {
              "name": "status",
              "type": "string",
              "description": "classified, standalone, or unclassified."
            },
            {
              "name": "requested_at",
              "type": "string",
              "description": "Start of the source request in UTC."
            },
            {
              "name": "captured_at",
              "type": "string",
              "description": "Actual capture time in UTC."
            },
            {
              "name": "http_status",
              "type": "string",
              "description": "Http status."
            },
            {
              "name": "response_date",
              "type": "string",
              "description": "Response date."
            },
            {
              "name": "response_age_seconds",
              "type": "string",
              "description": "Response age seconds."
            },
            {
              "name": "attempt_count",
              "type": "string",
              "description": "Attempt count."
            },
            {
              "name": "evidence_id",
              "type": "string",
              "description": "Evidence id."
            },
            {
              "name": "notes",
              "type": "string",
              "description": "Scope limits or the systems supporting a subset association."
            }
          ],
          "primaryKey": [
            "platform",
            "community_id"
          ],
          "missingValues": [
            ""
          ]
        }
      }
    ],
    "methodology": "https://rpg-data-project.org/methodology/",
    "website": "https://rpg-data-project.org/raw-data/",
    "kind": "observation",
    "descriptor": "/downloads/catalogue/community-memberships-2026-10/datapackage.json"
  },
  {
    "name": "October 2026",
    "description": "First published snapshot: additive community memberships for tracked RPG systems and families.",
    "version": "r1",
    "publicationDate": "2026-10-28T07:55:58Z",
    "observationMonth": "2026-10",
    "classification": "v3",
    "methodologyVersion": "additive-system-memberships-v1",
    "sourceMappingVersion": "october-2026-v3-r1",
    "coverage": "62 tracked catalogue entries; 53 classified entries contribute to 25 families, nine unclassified entries are included only in system downloads. Eight other families have no observations in this cohort. Counts are from October 18 (Discord) and October 19 (Reddit), not month-end or monthly averages. Shared sources repeat once per associated system. Family totals cover tracked systems only.",
    "license": "CC0-1.0",
    "provenance": {
      "note": "Frozen release outputs. See the source register and calculation manifest."
    },
    "namespace": "rankings",
    "slug": "community-memberships-2026-10-r1",
    "resources": [
      {
        "name": "metrics",
        "path": "/downloads/releases/2026-10/r1/metrics.csv",
        "format": "csv",
        "title": "metrics.csv",
        "bytes": 4055,
        "sha256": "7cbdcc590c834d503d07bcde734cfa7787af4d10be3920aba9d95cd13b62a3ac",
        "recordCount": 99,
        "schema": {
          "fields": [
            {
              "name": "metric_id",
              "type": "string",
              "description": "Metric id."
            },
            {
              "name": "family_id",
              "type": "string",
              "description": "Pinned classification family identifier; empty for unassigned systems."
            },
            {
              "name": "status",
              "type": "string",
              "description": "Status."
            },
            {
              "name": "members",
              "type": "integer",
              "description": "Additive memberships for tracked systems, not unique people. Empty means missing."
            },
            {
              "name": "rank",
              "type": "integer",
              "description": "Competition rank within the metric; empty when not collected."
            },
            {
              "name": "change",
              "type": "integer",
              "description": "Absolute change for comparable observations; empty when unavailable."
            }
          ],
          "primaryKey": [
            "metric_id",
            "family_id"
          ],
          "missingValues": [
            ""
          ]
        }
      },
      {
        "name": "metrics",
        "path": "/downloads/releases/2026-10/r1/metrics.json",
        "format": "json",
        "title": "metrics.json",
        "bytes": 18120,
        "sha256": "785e79fc73902d1c5945040321fe1e17ddcca3770c83113dec5312930b7816bc"
      },
      {
        "name": "systems",
        "path": "/downloads/releases/2026-10/r1/systems.csv",
        "format": "csv",
        "title": "systems.csv",
        "bytes": 4465,
        "sha256": "2dd237f7a8b0122e3fc1292fc4bd50cedd6adb0c90e6064637a1051dae4573d4",
        "recordCount": 62,
        "schema": {
          "fields": [
            {
              "name": "system_id",
              "type": "string",
              "description": "Stable classification system-entry identifier."
            },
            {
              "name": "system_name",
              "type": "string",
              "description": "System name."
            },
            {
              "name": "family_id",
              "type": "string",
              "description": "Pinned classification family identifier; empty for unassigned systems."
            },
            {
              "name": "status",
              "type": "string",
              "description": "Status."
            },
            {
              "name": "discord_members",
              "type": "integer",
              "description": "Discord members."
            },
            {
              "name": "reddit_members",
              "type": "integer",
              "description": "Reddit members."
            },
            {
              "name": "combined_members",
              "type": "integer",
              "description": "Combined members."
            }
          ],
          "primaryKey": [
            "system_id"
          ],
          "missingValues": [
            ""
          ]
        }
      },
      {
        "name": "contributions",
        "path": "/downloads/releases/2026-10/r1/contributions.csv",
        "format": "csv",
        "title": "contributions.csv",
        "bytes": 12518,
        "sha256": "ba46a2be4252d6dac740657c16fdb1b947500d684381cf0092325c22b86ed315",
        "recordCount": 144,
        "schema": {
          "fields": [
            {
              "name": "system_id",
              "type": "string",
              "description": "Stable classification system-entry identifier."
            },
            {
              "name": "family_id",
              "type": "string",
              "description": "Pinned classification family identifier; empty for unassigned systems."
            },
            {
              "name": "platform",
              "type": "string",
              "description": "Source platform: discord or reddit."
            },
            {
              "name": "community_id",
              "type": "string",
              "description": "Stable source-community identifier."
            },
            {
              "name": "members",
              "type": "integer",
              "description": "Additive memberships for tracked systems, not unique people. Empty means missing."
            },
            {
              "name": "captured_at",
              "type": "string",
              "description": "Actual source capture timestamp in UTC."
            }
          ],
          "primaryKey": [
            "system_id",
            "platform",
            "community_id"
          ],
          "missingValues": [
            ""
          ]
        }
      },
      {
        "name": "sources",
        "path": "/downloads/releases/2026-10/r1/sources.json",
        "format": "json",
        "title": "sources.json",
        "bytes": 86451,
        "sha256": "109e99dfef9276073f5bf2991e6f25fad2ac28fd2e4e2e78a011e122b11185bd"
      },
      {
        "name": "methodology",
        "path": "/downloads/releases/2026-10/r1/methodology.txt",
        "format": "txt",
        "title": "methodology.txt",
        "bytes": 4882,
        "sha256": "7dccf153b7c5ff2db79dc142cf34e01f4373f0617dc73f5438665281157901de"
      },
      {
        "name": "calculation",
        "path": "/downloads/releases/2026-10/r1/calculation.json",
        "format": "json",
        "title": "calculation.json",
        "bytes": 2745,
        "sha256": "07ad1e7c266e7e1d50f5f2900f1966b37aede9d1efe4b171c43cadd1db1dd008"
      },
      {
        "name": "release",
        "path": "/downloads/releases/2026-10/r1/release.json",
        "format": "json",
        "title": "release.json",
        "bytes": 1004,
        "sha256": "b859198177d089767bd0f74729e9920645cbc1e0a127c9d0df891c75a6927173"
      }
    ],
    "methodology": "https://data.rpg-data-project.org/downloads/releases/2026-10/r1/methodology.txt",
    "website": "https://rpg-data-project.org/releases/2026-10/",
    "kind": "monthly",
    "descriptor": "/downloads/catalogue/community-memberships-2026-10-r1/datapackage.json"
  }
]
