{
  "schemaVersion": 1,
  "id": "P45-C04",
  "title": "Партнерская база: один запрос в двух изолированных комплектах",
  "author": {
    "id": "P45",
    "name": "Константин Морозов"
  },
  "specialty": "Корпоративный поиск по документам",
  "projectStatus": "concept",
  "source": {
    "document": "catalogue_60_personas.md",
    "briefId": "P45-C04",
    "title": "Партнерская база знаний",
    "kind": "editorial_concept",
    "data": "synthetic"
  },
  "context": "У партнеров различаются формат архива и способ именования проекта. Тема запроса одинакова, но документы не взаимозаменяемы.",
  "decision": "Фильтр партнера применяется до сравнения слов. Общий документ не имеет владельца-партнера; индивидуальный всегда привязан к A или B. Прямой ID чужого материала возвращает пустой результат без фрагмента.",
  "constraint": "Изоляция проверяется на публичных вымышленных комплектах документов; серверное хранение секретов не реализовано.",
  "steps": [
    "Написать законченные документы с версиями и областью применения.",
    "Отфильтровать источники до поиска по словам и прямым ID.",
    "Проверить неподходящий источник, отсутствие ответа и изменение состояния."
  ],
  "inspection": [
    "Партнер A получает COMMON и A-PACK — проверено.",
    "Тот же запрос B выбирает его комплект — проверено.",
    "Прямой ID чужого A-PACK не раскрывает текст B — проверено.",
    "Отзыв доступа закрывает весь комплект — проверено."
  ],
  "sample": {
    "headers": [
      "Источник",
      "Название",
      "Версия",
      "Текст",
      "Состояние"
    ],
    "rows": [
      [
        "COMMON",
        "Передача материалов: общая памятка",
        "1",
        "Передача материалов начинается с проверки списка файлов и версии задания. Не включайте личные данные, не относящиеся к проекту. В сопроводительной записке укажите состав архива и вопросы. Индивидуальный формат передачи берется из инструкции вашего партнера.",
        "Источник применим"
      ],
      [
        "A-PACK",
        "Передача материалов партнера A",
        "2",
        "Передача материалов для A выполняется одним ZIP-архивом. Имя: код проекта, дата, номер версии. В корне находятся README.txt и папки images/text. Повторная передача получает новый номер версии; прежний архив остается в истории проекта.",
        "Источник применим"
      ]
    ]
  },
  "sampleNote": "Полные авторские инструкции сохранены отдельными TXT и в source.json. Правила видимости исполняются локально на несекретном корпусе.",
  "caseStudy": {
    "role": "Разработчик поиска по документам",
    "contribution": "Я разделил документы партнёров A и B и проверил поиск и прямой доступ в каждом контексте.",
    "objective": "Партнер A получает свой порядок передачи материалов, партнер B — другой; общая памятка доступна обоим.",
    "problem": "У партнеров различаются формат архива и способ именования проекта. Тема запроса одинакова, но документы не взаимозаменяемы.",
    "result": "Одинаковый запрос дал два разных допустимых набора: COMMON+A-PACK и COMMON+B-PACK. Чужой прямой ID и отозванный доступ не вернули текст. Различие форматов видно в полных документах, а не только в названии партнера.",
    "deliverables": [
      "index.html",
      "source.json",
      "source.csv",
      "result.json",
      "result.csv",
      "engine.js",
      "checks.json",
      "style.css",
      "document-COMMON.txt",
      "document-A-PACK.txt",
      "document-B-PACK.txt",
      "document-A-OLD.txt"
    ],
    "blocks": [
      {
        "type": "text",
        "title": "Один архив для A, два для B",
        "text": "A-PACK требует один ZIP с README.txt и папками images/text, B-PACK — два архива и manifest.csv. Одинаковый запрос «передача материалов» поэтому должен давать разные инструкции в контекстах A и B. Общая памятка остаётся доступной обоим, а партнёрское правило проверяется до выдачи текста и при открытии по ID."
      }
    ]
  },
  "deliverable": {
    "type": "app",
    "entry": "/catalogue/deliverables/p45-c04/index.html",
    "label": "Открыть работающий материал",
    "files": [
      {
        "path": "/catalogue/deliverables/p45-c04/index.html",
        "name": "index.html",
        "mimeType": "text/html"
      },
      {
        "path": "/catalogue/deliverables/p45-c04/source.json",
        "name": "source.json",
        "mimeType": "application/json"
      },
      {
        "path": "/catalogue/deliverables/p45-c04/source.csv",
        "name": "source.csv",
        "mimeType": "text/csv"
      },
      {
        "path": "/catalogue/deliverables/p45-c04/result.json",
        "name": "result.json",
        "mimeType": "application/json"
      },
      {
        "path": "/catalogue/deliverables/p45-c04/result.csv",
        "name": "result.csv",
        "mimeType": "text/csv"
      },
      {
        "path": "/catalogue/deliverables/p45-c04/engine.js",
        "name": "engine.js",
        "mimeType": "text/javascript"
      },
      {
        "path": "/catalogue/deliverables/p45-c04/verify.cjs",
        "name": "verify.cjs",
        "mimeType": "text/javascript"
      },
      {
        "path": "/catalogue/deliverables/p45-c04/checks.json",
        "name": "checks.json",
        "mimeType": "application/json"
      },
      {
        "path": "/catalogue/deliverables/p45-c04/style.css",
        "name": "style.css",
        "mimeType": "text/css"
      },
      {
        "path": "/catalogue/deliverables/p45-c04/document-COMMON.txt",
        "name": "document-COMMON.txt",
        "mimeType": "text/plain"
      },
      {
        "path": "/catalogue/deliverables/p45-c04/document-A-PACK.txt",
        "name": "document-A-PACK.txt",
        "mimeType": "text/plain"
      },
      {
        "path": "/catalogue/deliverables/p45-c04/document-B-PACK.txt",
        "name": "document-B-PACK.txt",
        "mimeType": "text/plain"
      },
      {
        "path": "/catalogue/deliverables/p45-c04/document-A-OLD.txt",
        "name": "document-A-OLD.txt",
        "mimeType": "text/plain"
      }
    ],
    "summary": "Одинаковый запрос дал два разных допустимых набора: COMMON+A-PACK и COMMON+B-PACK. Чужой прямой ID и отозванный доступ не вернули текст. Различие форматов видно в полных документах, а не только в названии партнера."
  },
  "takeaway": "Одинаковый запрос дал два разных допустимых набора: COMMON+A-PACK и COMMON+B-PACK. Чужой прямой ID и отозванный доступ не вернули текст. Различие форматов видно в полных документах, а не только в названии партнера.",
  "capabilities": [
    "completed_app"
  ],
  "externalConnections": []
}
