{
  "schemaVersion": 1,
  "modelVersion": "1.1.0",
  "name": "Metkagram multilingual domain model",
  "description": "Language-independent Moves, language-specific Frames and explicitly reviewed cross-language Bridges derived without changing existing public pattern IDs.",
  "compatibility": "Pattern remains the public umbrella and stable compatibility identifier. Frame, Move and Bridge are normalized domain objects.",
  "invariants": [
    "A Move has no learning language.",
    "A Frame belongs to exactly one enabled learning language.",
    "A Bridge connects two existing Frames in different languages.",
    "No Bridge is published merely because two strings look similar; a reviewed mapping source is required.",
    "Translation locale, learning language, interface locale and annotation capability are independent.",
    "A learning language may publish reviewed Frame extensions before annotation or interface localization exists."
  ],
  "counts": {
    "patterns": 3530,
    "moves": 14,
    "frames": 7080,
    "extensionFrames": 20,
    "bridges": 70,
    "languagePilots": 1
  },
  "languages": {
    "schemaVersion": 1,
    "interfaceLocales": [
      "en",
      "ru"
    ],
    "learningLanguages": [
      "en",
      "de",
      "fr"
    ],
    "translationLocales": [
      "ru"
    ],
    "annotationLanguages": [
      "en",
      "de"
    ],
    "languages": {
      "en": {
        "code": "en",
        "slug": "english",
        "nativeName": "English",
        "direction": "ltr",
        "status": "stable",
        "roles": {
          "interface": true,
          "learning": true,
          "translation": false,
          "annotation": true
        }
      },
      "de": {
        "code": "de",
        "slug": "german",
        "nativeName": "Deutsch",
        "direction": "ltr",
        "status": "stable",
        "roles": {
          "interface": false,
          "learning": true,
          "translation": false,
          "annotation": true
        }
      },
      "fr": {
        "code": "fr",
        "slug": "french",
        "nativeName": "Français",
        "direction": "ltr",
        "status": "pilot",
        "roles": {
          "interface": false,
          "learning": true,
          "translation": false,
          "annotation": false
        }
      },
      "ru": {
        "code": "ru",
        "slug": "russian",
        "nativeName": "Русский",
        "direction": "ltr",
        "status": "stable",
        "roles": {
          "interface": true,
          "learning": false,
          "translation": true,
          "annotation": false
        }
      }
    }
  },
  "languagePilots": {
    "fr": {
      "status": "editorial_pilot",
      "frameCount": 20,
      "exampleCount": 60,
      "patternIds": [
        "CLF041",
        "CLF042",
        "CLF043",
        "CLF045",
        "CLF046",
        "CLF047",
        "CLF049",
        "CLF050",
        "CLF051",
        "CLF053",
        "CLF054",
        "CLF055",
        "CLF056",
        "CLF057",
        "CLF058",
        "CLF059",
        "CLF061",
        "CLF062",
        "CLF063",
        "CLF064"
      ],
      "sourceFiles": [
        "data/language-pilots/french-v1.json"
      ],
      "translationLocales": [
        "ru"
      ],
      "reviewedBridges": 0,
      "pages": {
        "en": "https://metkagram.github.io/en/practice/language/french/",
        "ru": "https://metkagram.github.io/ru/practice/language/french/"
      },
      "boundary": "Frame-only pilot. No annotation capability and no cross-language Bridge is implied by the existence of a French Frame."
    }
  },
  "datasets": {
    "moves": "https://metkagram.github.io/data/domain/moves.json",
    "frames": "https://metkagram.github.io/data/domain/frames.json",
    "bridges": "https://metkagram.github.io/data/domain/bridges.json",
    "patternIndex": "https://metkagram.github.io/data/domain/pattern-index.json",
    "languagePilots": "https://metkagram.github.io/data/domain/language-pilots.json"
  },
  "api": {
    "manifest": "https://metkagram.github.io/api/v1/domain-model.json",
    "moves": "https://metkagram.github.io/api/v1/moves.json",
    "frames": "https://metkagram.github.io/api/v1/frames.json",
    "bridges": "https://metkagram.github.io/api/v1/bridges.json",
    "languagePilots": "https://metkagram.github.io/api/v1/language-pilots.json"
  }
}
