{
  "schemaVersion": 1,
  "id": "P45-C06",
  "title": "Удаленный документ: пять путей чтения проверяют источник заново",
  "author": {
    "id": "P45",
    "name": "Константин Морозов"
  },
  "specialty": "Корпоративный поиск по документам",
  "projectStatus": "concept",
  "source": {
    "document": "catalogue_60_personas.md",
    "briefId": "P45-C06",
    "title": "Корпоративный архив",
    "kind": "editorial_concept",
    "data": "synthetic"
  },
  "context": "D17 удален, но его старый фрагмент остается в пяти производных записях: поиске, индексе, кэше, истории и ссылке. Каждый путь проверяет актуальное состояние исходного документа перед выдачей текста.",
  "decision": "Я связал производные записи с sourceId и проверяю первичный реестр на каждом чтении. Стенд сохраняет остаточные записи, чтобы отказ можно было проверить. Действующий D18 продолжает выдаваться на тех же пяти путях.",
  "constraint": "Локальный стенд проверяет правило повторной авторизации чтения. Он не доказывает физическое удаление из реального хранилища.",
  "steps": [
    "Создать два полных источника и остаточные записи на пяти путях.",
    "Проверять первичный источник до выдачи любого фрагмента.",
    "Выполнить удаление, прямую ссылку и замену текста в разных прогонах."
  ],
  "inspection": [
    "Поиск блокирует D17 и сохраняет D18 — проверено.",
    "Сохраненная история проверяет источник заново — проверено.",
    "Прямая ссылка не обходит удаление — проверено.",
    "Кэш не выдает старый текст после удаления D18 — проверено.",
    "Индекс читает новую редакцию вместо старой производной копии — проверено."
  ],
  "sample": {
    "headers": [
      "Запись",
      "Источник",
      "Путь",
      "Решение",
      "Текст"
    ],
    "rows": [
      [
        "OLD-0",
        "D17",
        "поиск",
        "Отказать",
        ""
      ],
      [
        "NEW-0",
        "D18",
        "поиск",
        "Выдать",
        "Действующая инструкция: сохраните архив проекта с номером версии. Приложите перечень измененных файлов. Перед передачей сверьте состав архива с этим перечнем."
      ]
    ]
  },
  "sampleNote": "Авторский контрольный набор; не клиентские документы и не результаты внешней модели.",
  "caseStudy": {
    "role": "Разработчик поиска по документам",
    "contribution": "Я связал удаление источника с пятью путями чтения и проверил каждый путь после изменения статуса.",
    "objective": "Поиск, индекс, кэш, история ответа и прямая ссылка перестают отдавать текст после удаления его первичного документа.",
    "problem": "D17 удален, но его старый фрагмент остается в пяти производных записях: поиске, индексе, кэше, истории и ссылке. Каждый путь проверяет актуальное состояние исходного документа перед выдачей текста.",
    "result": "Проверены все пять путей. D17 не выдается после удаления, хотя его производные записи сохранены в стенде. D18 остается доступен; после изменения первичного текста индекс показывает новую редакцию.",
    "deliverables": [
      "index.html",
      "source.json",
      "source.csv",
      "result.json",
      "result.csv",
      "engine.js",
      "checks.json",
      "style.css"
    ],
    "blocks": [
      {
        "type": "text",
        "title": "Удаление проверяется за пределами списка",
        "text": "У источника есть поиск, индекс, кэш, история и прямая ссылка. Я оставил отдельную попытку чтения для каждого пути. После удаления они повторно проверяют статус документа, поэтому сохранённая ссылка или прежняя запись в истории не превращаются в обход текущего ограничения."
      }
    ]
  },
  "deliverable": {
    "type": "app",
    "entry": "/catalogue/deliverables/p45-c06/index.html",
    "label": "Открыть работающий материал",
    "files": [
      {
        "path": "/catalogue/deliverables/p45-c06/index.html",
        "name": "index.html",
        "mimeType": "text/html"
      },
      {
        "path": "/catalogue/deliverables/p45-c06/source.json",
        "name": "source.json",
        "mimeType": "application/json"
      },
      {
        "path": "/catalogue/deliverables/p45-c06/source.csv",
        "name": "source.csv",
        "mimeType": "text/csv"
      },
      {
        "path": "/catalogue/deliverables/p45-c06/result.json",
        "name": "result.json",
        "mimeType": "application/json"
      },
      {
        "path": "/catalogue/deliverables/p45-c06/result.csv",
        "name": "result.csv",
        "mimeType": "text/csv"
      },
      {
        "path": "/catalogue/deliverables/p45-c06/engine.js",
        "name": "engine.js",
        "mimeType": "text/javascript"
      },
      {
        "path": "/catalogue/deliverables/p45-c06/verify.cjs",
        "name": "verify.cjs",
        "mimeType": "text/javascript"
      },
      {
        "path": "/catalogue/deliverables/p45-c06/checks.json",
        "name": "checks.json",
        "mimeType": "application/json"
      },
      {
        "path": "/catalogue/deliverables/p45-c06/style.css",
        "name": "style.css",
        "mimeType": "text/css"
      }
    ],
    "summary": "Проверены все пять путей. D17 не выдается после удаления, хотя его производные записи сохранены в стенде. D18 остается доступен; после изменения первичного текста индекс показывает новую редакцию."
  },
  "takeaway": "Проверены все пять путей. D17 не выдается после удаления, хотя его производные записи сохранены в стенде. D18 остается доступен; после изменения первичного текста индекс показывает новую редакцию.",
  "capabilities": [
    "completed_app"
  ],
  "externalConnections": []
}
