{
  "schemaVersion": 1,
  "id": "P48-C04",
  "title": "Черновики редактора: матрица доступа и передача в команду",
  "author": {
    "id": "P48",
    "name": "Антон Лазарев"
  },
  "specialty": "ИИ в закрытом контуре",
  "projectStatus": "concept",
  "source": {
    "document": "catalogue_60_personas.md",
    "briefId": "P48-C04",
    "title": "Помощник редактора",
    "kind": "editorial_concept",
    "data": "synthetic"
  },
  "context": "УАнны есть личный текст и общий материал команды A. Борис состоит в A, Вера — в B. Попытка чужого пользователя расшарить личный документ должна завершиться отказом.",
  "decision": "Я сделал переход personal → team отдельной операцией с проверкой владельца. После нее пересчитывается матрица для трех пользователей. Отзыв возвращает документ в личный режим и закрывает прежнюю общую ссылку.",
  "constraint": "Все тексты публичные учебные. Это проверка переходов политики, а не защищенное хранилище редакции.",
  "steps": [
    "Задать трех пользователей и три полных документа.",
    "Применить передачу или отзыв с проверкой владельца.",
    "Пересчитать матрицу из девяти пар и проверить чужое действие."
  ],
  "inspection": [
    "Личный DRAFT1 доступен только anna — проверено.",
    "Владелец открывает DRAFT1 команде A, но не B — проверено.",
    "Борис не может открыть чужой личный документ — проверено.",
    "Отзыв владельца закрывает прежний командный доступ — проверено."
  ],
  "sample": {
    "headers": [
      "Пользователь",
      "Документ",
      "Режим",
      "Доступ"
    ],
    "rows": [
      [
        "anna",
        "DRAFT1",
        "personal",
        "Разрешен"
      ],
      [
        "anna",
        "TEAM1",
        "team",
        "Разрешен"
      ],
      [
        "anna",
        "TEAM2",
        "team",
        "Закрыт"
      ],
      [
        "boris",
        "DRAFT1",
        "personal",
        "Закрыт"
      ],
      [
        "boris",
        "TEAM1",
        "team",
        "Разрешен"
      ],
      [
        "boris",
        "TEAM2",
        "team",
        "Закрыт"
      ],
      [
        "vera",
        "DRAFT1",
        "personal",
        "Закрыт"
      ],
      [
        "vera",
        "TEAM1",
        "team",
        "Закрыт"
      ],
      [
        "vera",
        "TEAM2",
        "team",
        "Разрешен"
      ]
    ]
  },
  "sampleNote": "Авторский контрольный набор; не клиентские документы и не результаты внешней модели.",
  "caseStudy": {
    "role": "Инженер локальной обработки данных",
    "contribution": "Я подготовил матрицу личных и командных черновиков и исполнил девять проверок доступа.",
    "objective": "Личный черновик открывается автору; передача в команду меняет доступ только при действии владельца.",
    "problem": "УАнны есть личный текст и общий материал команды A. Борис состоит в A, Вера — в B. Попытка чужого пользователя расшарить личный документ должна завершиться отказом.",
    "result": "Исходная матрица открывает DRAFT1 только Анне. Ее передача разрешает чтение Борису из A, но не Вере из B. Чужая попытка изменения отклоняется; отзыв вновь закрывает доступ Бориса.",
    "deliverables": [
      "index.html",
      "source.json",
      "source.csv",
      "result.json",
      "result.csv",
      "engine.js",
      "checks.json",
      "style.css"
    ],
    "blocks": [
      {
        "type": "text",
        "title": "DRAFT1 и TEAM1 принадлежат одной Анне по-разному",
        "text": "Анна видит свой личный DRAFT1 и командный TEAM1, но режим personal не открывает DRAFT1 всем участникам A. TEAM2 относится к B и проверяется отдельно. Матрица из девяти сочетаний удерживает владельца, команду и режим доступа как разные условия, хотя документы открываются одним интерфейсом."
      }
    ]
  },
  "deliverable": {
    "type": "app",
    "entry": "/catalogue/deliverables/p48-c04/index.html",
    "label": "Открыть работающий материал",
    "files": [
      {
        "path": "/catalogue/deliverables/p48-c04/index.html",
        "name": "index.html",
        "mimeType": "text/html"
      },
      {
        "path": "/catalogue/deliverables/p48-c04/source.json",
        "name": "source.json",
        "mimeType": "application/json"
      },
      {
        "path": "/catalogue/deliverables/p48-c04/source.csv",
        "name": "source.csv",
        "mimeType": "text/csv"
      },
      {
        "path": "/catalogue/deliverables/p48-c04/result.json",
        "name": "result.json",
        "mimeType": "application/json"
      },
      {
        "path": "/catalogue/deliverables/p48-c04/result.csv",
        "name": "result.csv",
        "mimeType": "text/csv"
      },
      {
        "path": "/catalogue/deliverables/p48-c04/engine.js",
        "name": "engine.js",
        "mimeType": "text/javascript"
      },
      {
        "path": "/catalogue/deliverables/p48-c04/verify.cjs",
        "name": "verify.cjs",
        "mimeType": "text/javascript"
      },
      {
        "path": "/catalogue/deliverables/p48-c04/checks.json",
        "name": "checks.json",
        "mimeType": "application/json"
      },
      {
        "path": "/catalogue/deliverables/p48-c04/style.css",
        "name": "style.css",
        "mimeType": "text/css"
      }
    ],
    "summary": "Исходная матрица открывает DRAFT1 только Анне. Ее передача разрешает чтение Борису из A, но не Вере из B. Чужая попытка изменения отклоняется; отзыв вновь закрывает доступ Бориса."
  },
  "takeaway": "Исходная матрица открывает DRAFT1 только Анне. Ее передача разрешает чтение Борису из A, но не Вере из B. Чужая попытка изменения отклоняется; отзыв вновь закрывает доступ Бориса.",
  "capabilities": [
    "completed_app"
  ],
  "externalConnections": []
}
