{
  "schema_version": "qazaqstan-space-cjm-scenarios-v1",
  "product_id": "qazaqstan-space",
  "release_id": "2026-07-26.29",
  "data_as_of": "2026-07-26T20:40:00Z",
  "route_count": 8,
  "boundary": "Public user-journey contract for navigation and validation. It describes how readers move through existing public evidence; it does not create new factual claims.",
  "scenarios": [
    {
      "id": "reader-fact-check",
      "audience": "reader",
      "title": "Проверить утверждение до первоисточника",
      "entry": "/graph",
      "outcome": "Читатель видит цепочку источник → утверждение → объект или сигнал и понимает границу вывода.",
      "steps": [
        {
          "label": "Открыть граф доказательств",
          "href": "/graph",
          "check": "страница содержит фрагмент графа и цепочки план/решение/факт"
        },
        {
          "label": "Перейти к утверждению",
          "href": "/claims/baiterek-test-launch-2026",
          "check": "claim page показывает дату, статус и источники"
        },
        {
          "label": "Сверить источник",
          "href": "/sources",
          "check": "77 источников доступны в реестре"
        },
        {
          "label": "Вернуться к объекту",
          "href": "/objects/baiterek",
          "check": "паспорт объекта связан с тем же claim id"
        }
      ],
      "success_signals": [
        "Страница утверждения имеет канонический адрес",
        "Строка источника показывает публичную границу использования",
        "Неизвестные адреса ведут на восстановительную 404"
      ],
      "fallback": {
        "href": "/register",
        "rule": "если URL не существует, восстановление ведёт к реестру, графу и данным"
      }
    },
    {
      "id": "sector-research",
      "audience": "researcher",
      "title": "Собрать отраслевой срез по объектам и программам",
      "entry": "/register",
      "outcome": "Исследователь получает объект, статус, источник, связанные claims и машинный JSON без ручного обхода сайта.",
      "steps": [
        {
          "label": "Найти объект в реестре",
          "href": "/register",
          "check": "31 объектов в публичном корпусе"
        },
        {
          "label": "Открыть программу",
          "href": "/programs",
          "check": "объекты сгруппированы по пусковому, связному, ДЗЗ и инженерному контуру"
        },
        {
          "label": "Скачать индекс данных",
          "href": "/data/v1/index.json",
          "check": "индекс содержит counts и ссылки на JSON-файлы"
        },
        {
          "label": "Проверить паспорт набора",
          "href": "/data/v1/dataset.json",
          "check": "ограничения и форматы опубликованы отдельно"
        }
      ],
      "success_signals": [
        "Фильтры сохраняют состояние в URL",
        "Счётчики JSON совпадают с публичными страницами",
        "Маршрут включён в sitemap"
      ],
      "fallback": {
        "href": "/data",
        "rule": "если пользователь не знает нужный файл, начинать с открытых данных"
      }
    },
    {
      "id": "editorial-briefing",
      "audience": "editor",
      "title": "Подготовить материал без потери источника",
      "entry": "/media",
      "outcome": "Редактор видит разбор, issue, источники, карточку для встраивания и правила цитирования.",
      "steps": [
        {
          "label": "Выбрать редакционный разбор",
          "href": "/media/rcsc-ground-contour-kazsat",
          "check": "story связан с source_ids и claim_ids"
        },
        {
          "label": "Открыть выпуск",
          "href": "/media/issues/2026-07",
          "check": "1 выпуск опубликован"
        },
        {
          "label": "Взять карточку",
          "href": "/cards",
          "check": "68 embed cards доступны для цитирования"
        },
        {
          "label": "Проверить метод",
          "href": "/editorial",
          "check": "редакционный процесс объясняет intake/review/publication"
        }
      ],
      "success_signals": [
        "Материал показывает первичные источники",
        "Карточка содержит iframe и markdown",
        "Выпуск сохраняет границу цитирования"
      ],
      "fallback": {
        "href": "/sources",
        "rule": "если материал спорный, первичным считается source register и claim page"
      }
    },
    {
      "id": "map-to-evidence",
      "audience": "analyst",
      "title": "Перейти от карты к доказательству",
      "entry": "/atlas",
      "outcome": "Пользователь не остаётся на визуальной точке: карта ведёт к паспорту, утверждению, источнику и ограничениям.",
      "steps": [
        {
          "label": "Открыть живой атлас",
          "href": "/atlas",
          "check": "QazGeo map shell loads with safe public objects"
        },
        {
          "label": "Проверить визуальную модель",
          "href": "/visuals",
          "check": "слои, сценарии и матрицы построены из corpus"
        },
        {
          "label": "Открыть объект",
          "href": "/objects/baiterek",
          "check": "паспорт показывает lifecycle и claims"
        },
        {
          "label": "Сверить границу карты",
          "href": "/method",
          "check": "метод объясняет безопасность географии и отсутствие телеметрии"
        }
      ],
      "success_signals": [
        "Атлас явно отделён от телеметрии",
        "Визуализации связаны с visualization-model.json",
        "Паспорт объекта показывает источники"
      ],
      "fallback": {
        "href": "/register",
        "rule": "если карта недоступна, реестр остаётся основным публичным входом"
      }
    },
    {
      "id": "known-gap-followup",
      "audience": "research-editor",
      "title": "Понять, чего ещё нельзя утверждать",
      "entry": "/gaps/kazsat-family-register",
      "outcome": "Открытый вопрос показывает проверенный контекст, недостающий документ и следующее редакционное действие.",
      "steps": [
        {
          "label": "Открыть пробел данных",
          "href": "/gaps/kazsat-family-register",
          "check": "страница содержит verified_context, missing_source и next_action"
        },
        {
          "label": "Проверить связанные записи",
          "href": "/gaps/kazsat-family-register#gap-linked-records-title",
          "check": "связанные объекты и утверждения опубликованы"
        },
        {
          "label": "Сверить источники контура",
          "href": "/gaps/kazsat-family-register#gap-sources-title",
          "check": "источники уже в корпусе не теряются"
        },
        {
          "label": "Открыть roadmap",
          "href": "/roadmap",
          "check": "план развития не скрывает редакционные ограничения"
        }
      ],
      "success_signals": [
        "Пробел данных связан с источниками",
        "Пробел данных связан с утверждениями",
        "Roadmap связывает backlog с открытыми вопросами"
      ],
      "fallback": {
        "href": "/data#known-gaps-title",
        "rule": "если конкретная gap page неизвестна, открыть реестр границ данных"
      }
    },
    {
      "id": "integration-handoff",
      "audience": "integrator",
      "title": "Забрать данные или карточку без ручного копирования",
      "entry": "/data",
      "outcome": "Интегратор видит индекс, контракт набора, карточки для встраивания и ограничения повторного использования.",
      "steps": [
        {
          "label": "Открыть публичные данные",
          "href": "/data",
          "check": "страница показывает файлы, counts и статус выпуска"
        },
        {
          "label": "Скачать индекс",
          "href": "/data/v1/index.json",
          "check": "индекс содержит прямые ссылки на entities, claims, sources, editorial и embed cards"
        },
        {
          "label": "Открыть карточки",
          "href": "/cards",
          "check": "карточки дают iframe, markdown и ссылку на исходный маршрут"
        },
        {
          "label": "Проверить инфраструктурный контракт",
          "href": "/data/v1/infrastructure-contract.json",
          "check": "QazStack, AV DS, QazGeo, QazLake и QazPipe описаны как контуры интеграции"
        }
      ],
      "success_signals": [
        "Индекс данных показывает счётчики",
        "Встраиваемая карточка содержит iframe",
        "Инфраструктурный контракт доступен для скачивания"
      ],
      "fallback": {
        "href": "/sources",
        "rule": "если внешний продукт цитирует факт, сверять первичный источник и claim page"
      }
    },
    {
      "id": "localized-reader",
      "audience": "localized-reader",
      "title": "Прочитать метод и реестр на казахском или английском",
      "entry": "/kk",
      "outcome": "Пользователь получает локализованное объяснение метода и реестра без создания отдельной версии фактов.",
      "steps": [
        {
          "label": "Открыть казахский вход",
          "href": "/kk",
          "check": "страница объясняет продукт на том же корпусе"
        },
        {
          "label": "Проверить казахский метод",
          "href": "/kk/method",
          "check": "границы источников и данных описаны на казахском"
        },
        {
          "label": "Сверить казахский реестр",
          "href": "/kk/register",
          "check": "локализованная страница ведёт к тем же объектам"
        },
        {
          "label": "Открыть английскую версию",
          "href": "/en/register",
          "check": "international reader can read register context in English"
        }
      ],
      "success_signals": [
        "Локализованные страницы имеют канонические маршруты",
        "Факты не разделяются по языковым версиям",
        "Реестр остаётся связанным с тем же корпусом"
      ],
      "fallback": {
        "href": "/method",
        "rule": "если локализация неполная, русская методология остаётся каноническим объяснением корпуса"
      }
    },
    {
      "id": "route-recovery",
      "audience": "recovery-user",
      "title": "Восстановить путь после неверной ссылки или пустой выдачи",
      "entry": "/journeys#journey-route-recovery",
      "outcome": "Пользователь не попадает в тупик: ошибка, пустой фильтр или недоступная карта ведут к рабочим маршрутам восстановления.",
      "steps": [
        {
          "label": "Проверить правило 404",
          "href": "/journeys#journey-route-recovery",
          "check": "проверочный URL /unknown-cjm-route должен предлагать реестр, атлас, медиа и данные"
        },
        {
          "label": "Открыть реестр",
          "href": "/register",
          "check": "поиск и фильтры можно сбросить без потери маршрута"
        },
        {
          "label": "Открыть атлас",
          "href": "/atlas",
          "check": "при деградации внешних слоёв остаются карточки и паспорта"
        },
        {
          "label": "Открыть маршруты",
          "href": "/journeys",
          "check": "пользователь может выбрать роль и запасной путь"
        }
      ],
      "success_signals": [
        "404 содержит маршруты восстановления",
        "Пустой реестр показывает сброс фильтров",
        "Деградация атласа не блокирует паспорта объектов"
      ],
      "fallback": {
        "href": "/journeys",
        "rule": "если пользователь не знает, куда идти, начинать с роли и проверяемого результата"
      }
    }
  ]
}
