# Краткое описание передачи — poster-desk-lab/1.0.2

[Скачать полный учебный ZIP](https://yenpo.app/examples/poster-desk-handoff-1.0.2.zip) · SHA-256: `c39d19b210c05f4667cd74db4934459a079408d14c5e7678c24cd087e1df5185`

Это копия описания из ZIP для чтения. Пути исходников и скриптов ниже относятся к распакованному каталогу `poster-desk-lab`; для запуска команд и копирования шаблона приёмки используйте ZIP.

Цель: принимать названия плакатов для последующего локального просмотра. Это вымышленные продуктовые обещания для проверки, а не утверждения из ответа ИИ. Node.js 22+; установка, сеть и учётные данные не нужны. Распакуйте в новый каталог, перейдите в `poster-desk-lab` и выполняйте команды по отдельности. Храните описание с этим точным пакетом; проверьте манифест, прежде чем обращаться к номерам строк.

## Факты о возможностях

| ID  | Обещание и фактическое наблюдение                                                                                                                                                            | Классификация и границы                                                                                                                                      | Исходник в этой ревизии                                                                         |
| --- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------- |
| P1  | «Отправленную карточку можно просмотреть позже». Отдельный процесс Node выводит точные сохранённые ID и название из того же сохранённого каталога состояния.                                 | **реализовано** — локальное файловое хранение между последовательными процессами. Не устойчивость к сбоям, удалённая база или сохранность при развёртывании. | `src/store.mjs` строки 46–76; `src/cli.mjs` строки 12–17                                        |
| P2  | «Квитанция отправляется». Принятый результат содержит пример предпросмотра с `adapter: fixture`, `delivery: not-attempted`.                                                                  | **имитация** — существует только предпросмотр; отправка не предпринималась. Более широкое обещание «отправлено» для пакета опровергнуто.                     | `src/cli.mjs` строки 1–2, 15–17 выбирают `src/receipt.mjs` строки 3–7 и `fixtures/receipt.json` |
| P3  | «Повтор той же карточки не дублирует её». Последовательный повтор тех же ID и названия возвращает `created: false`; в списке остаётся одна карточка. Повтор ID с другим текстом отклоняется. | **реализовано** — точные последовательные повторы в сохранённом каталоге. Нет гарантий для конкуренции, прерванной записи или повторов внешних уведомлений.  | `src/store.mjs` строки 46–60                                                                    |
| P4  | «Отправленные карточки переживают замену развёртывания». Среда развёртывания и жизненный цикл каталога состояния не предоставлены. Сохранённый каталог удерживает карточку, новый пуст.      | **неизвестно** — два локальных результата не показывают, какое хранилище сохраняет развёртывание. Не превращайте P1 в P4.                                    | `src/store.mjs` строки 7–9, 22–38; конфигурации развёртывания в снимке нет                      |

«Реализовано» здесь означает только продемонстрированные границы. «Имитация» обозначает известный искусственный путь, а не непроверенный реальный сервис. «Неизвестно» отмечает утверждение без нужных доказательств о среде, а не заведомо отсутствующую возможность.

## Примите и воспроизведите

```sh
node --version
node scripts/verify-package.mjs
node scripts/copy-receiver.mjs
node src/cli.mjs init receiver-state
node src/cli.mjs submit receiver-state cloud-poster "Cloud shapes"
node src/cli.mjs list receiver-state
node src/cli.mjs submit receiver-state cloud-poster "Cloud shapes"
node src/cli.mjs list receiver-state
node src/cli.mjs submit receiver-state cloud-poster "Different title"
node src/cli.mjs list receiver-state
node src/cli.mjs init replacement-state
node src/cli.mjs list replacement-state
node src/cli.mjs list receiver-state
node src/cli.mjs init receiver-state
node src/cli.mjs list receiver-state
node --test tests/contract.test.mjs tests/receiver-copy.test.mjs
```

Ожидается: первая отправка содержит `accepted: true`, `created: true` и квитанцию-фикстуру с `delivery: not-attempted`. Первый список — `{"cards":[{"id":"cloud-poster","title":"Cloud shapes"}]}`. Точный повтор даёт `created: false` и не меняет список.

Команда с другим названием **завершается с кодом 2**, выводит `{"error":"card-id-conflict"}` в stderr и ничего в stdout. Следующий список всё ещё содержит исходное название. Новый `replacement-state` показывает `{"cards":[]}`; сохранённый `receiver-state` всё ещё содержит карточку. Повторная инициализация `receiver-state` **завершается с кодом 2** и `{"error":"EEXIST"}`, не заменяя его. Это два ожидаемых отказа, а не успешные коды завершения; не соединяйте команды через `&&`. Список после отклонённой инициализации должен снова показать исходную карточку. Пять тестов проходят; один действительно копирует и заполняет внешний протокол приёмки, затем проверяет исходный пакет.

Каждая строка CLI — отдельный процесс. Так проверяется перезапуск процесса с сохранёнными файлами. Пустой каталог замены — контрастная локальная конфигурация, **не реальный эксперимент развёртывания**.

## Приёмка и открытый вопрос

Команда копирования помещает неизменяемый шаблон `RECEIVER.md` в `../poster-desk-receiver.md`, вне распакованного пакета, и отказывается перезаписывать существующую копию. Заполните **эту внешнюю копию** по собственному выводу и прочитанным исходникам. Не меняйте поставленный шаблон; протокол приёмки отделён от исходного манифеста. Заполнив копию, выполните:

```sh
node scripts/verify-package.mjs
```

Исходный пакет должен по-прежнему проходить проверку. Принимайте передачу только если P1/P3 совпадают в заданных границах, P2 остаётся имитацией, а P4 — открытым вопросом. Неизвестность не повод объявлять проверенные локальные наблюдения неудачными; это повод не обещать сохранность при развёртывании.

Чтобы разрешить P4 для реальной среды, получите точную конфигурацию развёртывания и хранения и независимо проверьте известную запись через процедуру замены, используя разрешённые нечувствительные данные. Здесь такой конфигурации и теста нет. Отдельно не оценивались одновременная запись, потеря питания, восстановление резервной копии и реальные уведомления. Код записывает карточку до подготовки квитанции, поэтому сбой квитанции может оставить сохранённую карточку; одна ошибка не доказывает, что ничего не записано.
