# 引き継ぎ概要 — 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を使ってください。

目的は、ポスターのタイトルを受け取り、後でローカルで確認することです。ここで検証する製品の約束は架空のもので、AIの出力から採った主張ではありません。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"}` を表示して、標準出力には何も出しません。次の一覧には元のタイトルが残ります。新しい `replacement-state` の一覧は `{"cards":[]}` で、維持した `receiver-state` には引き続きカードがあります。`receiver-state` の再初期化は `{"error":"EEXIST"}` を返して**終了コード2**で終了し、置き換えはしません。これら二つは想定した拒否であり、成功の終了ステータスではありません。コマンドを `&&` でつながないでください。再初期化が拒否された後の一覧にも、元のカードが表示されるはずです。五つのテストが成功します。そのうち一つは実際に外部の受け入れ記録をコピーして記入し、その後で元のパッケージを検証します。

CLIの各行は別のプロセスです。これにより、ファイルを維持した状態でのプロセス再起動を確認します。空の置き換え用ディレクトリは対照となるローカルの設定であり、**実際のデプロイ実験ではありません**。

## 受け入れと未解決の問い

上のコピーコマンドは、変更しない `RECEIVER.md` テンプレートを、展開したパッケージの外にある `../poster-desk-receiver.md` にコピーします。コピー先がすでにあれば上書きを拒否します。自分の出力とソースの読解から、**その外部コピー**に記入してください。納品されたテンプレートは変更せず、受け入れ記録は元のパッケージのマニフェストと別にします。コピーに記入したら、次を実行します。

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

元のパッケージは引き続き検証に成功するはずです。明示された範囲でP1とP3が一致し、P2を模擬として扱い、P4を未解決のまま残す場合にだけ、この引き継ぎを受け入れてください。不明点があることは、確認済みのローカルの観察結果を失敗扱いする理由ではありません。デプロイをまたぐ保持を約束しない理由です。

実際の環境でP4を解決するには、正確なデプロイとストレージの設定を入手し、利用が許可された機密性のないデータを使って、その環境の置き換え手順をまたいで既知のレコードが保持されるかを独立にテストします。ここにはその設定もテストもありません。また、同時書き込み、電源断、バックアップからの復元、実際の通知も評価していません。ソースは受領記録を準備する前にカードを書き込むため、受領処理が失敗してもカードが保存されている場合があります。エラーだけでは何も保存されなかったとは証明できません。
