EmDash はエントリーの公開済みバージョンを、未公開の変更から分離して保持します。管理画面、 REST API、コマンドラインインターフェース(CLI)、Model Context Protocol(MCP)ツールは、同じライフサイクル ルールを使います。
エントリーは draft、scheduled、published のいずれかです。公開済みエントリーは下書きと将来の
スケジュールも持てます。訪問者は、スケジュールされた下書きが公開されるまでライブリビジョンを受け取り続けます。
ゴミ箱はステータスとは別です。ゴミ箱に入れられたエントリーはライフサイクルメタデータを保持しますが、通常の
コンテンツ読み取りからは除外されます。
状態遷移
次の表は、コンテンツの状態、リビジョンポインター、公開タイムスタンプの正規の契約です。 「変更なし」は、操作が保存されている値を維持することを意味します。
| 操作 | 開始状態 | 結果 | リビジョンへの影響 | publishedAt | scheduledAt | 繰り返し呼び出し |
|---|---|---|---|---|---|---|
| 変更を保存 | 任意のアクティブなエントリー | ステータスは変わらない | リビジョン対応コレクションでは、ライブリビジョンが公開されたまま下書きリビジョンを置き換える | 変更なし | 変更なし | 渡された _rev は古い保存を拒否する。省略すると REST 書き込みは無条件になる |
| 公開 | 下書き、スケジュール済み、または公開済み | 公開済み | 下書きリビジョンをライブに昇格し、下書きポインターをクリアする | 初回公開時に設定。以降の公開では、認可された呼び出し元が上書きしない限り保持 | クリア | ライブコンテンツと公開時刻は保持するが、新しい _rev を返す |
| 期限到来時に公開 | スケジュール済み、またはスケジュール済み下書き付きの公開済み | 公開済み | 公開と同じ | 初回公開ではスケジュール時刻を使用。ライブコンテンツ上に新しい下書きを公開するときは既存値を保持 | クリア | 後続のスケジューラー実行は、スケジュールが既にクリアされたエントリーをスキップする |
| 公開取り消し | 任意のアクティブなエントリー | 下書き | ライブポインターをクリア。既存の下書きを保持するか、ライブリビジョンから作成する | 保持 | クリア | すでに単なる下書きのエントリーは変わらない |
| スケジュール | 下書き、スケジュール済み、または公開済み | 下書きはスケジュール済みになる。公開済みエントリーは公開済みのまま | 変更なし | 変更なし | 要求された将来の時刻に設定 | 既存のスケジュールを置き換え、新しい _rev を返す |
| スケジュール解除 | スケジュール済み、またはスケジュール付きの公開済み | スケジュール済みエントリーは下書きになる。公開済みエントリーは公開済みのまま | 変更なし | 変更なし | クリア | スケジュールのないエントリーは変わらない |
| 下書きを破棄 | 任意のアクティブなエントリー | ステータスは変わらない | 下書きポインターをクリア。ライブリビジョンは変更されない | 変更なし | 変更なし | 下書きのないエントリーは変わらない |
| ゴミ箱へ移動 | 任意のアクティブなエントリー | ゴミ箱に入り、通常の読み取りから除外 | 保持 | 保持 | 保持 | すでにゴミ箱にあるエントリーへのリクエストは not found を返す |
| ゴミ箱から復元 | ゴミ箱内 | 下書き | ライブポインターをクリア。下書きポインターは保持 | 保持 | クリア | まだゴミ箱にあるエントリーが必要 |
| 完全に削除 | ゴミ箱内 | 削除済み | エントリーとそのリビジョンを削除 | 削除 | 削除 | 繰り返しや取り消しはできない |
| リビジョンを復元 | 任意のアクティブなエントリー | ステータスは変わらない | リビジョン対応コレクションでは、選択したリビジョンのコピーで下書きを置き換える。ライブリビジョンは変更されない | 変更なし | 変更なし | 新しいリビジョンを作成し、新しい _rev を返す |
リビジョン非対応のコレクションでは、保存と公開はライブ/下書きポインターではなくコンテンツ行を使います。 リビジョンの復元は、選択したフィールド値をその行に直接書き込みます。
リビジョン対応コレクションでリビジョンを復元しても公開はされません。復元した下書きを確認したあとで エントリーを公開してください。
権限と書き込み保護
権限は所有権に依存します。Author は自分が所有するエントリーに対して操作でき、Editor は任意のエントリーに対して同じ 操作を実行できます。完全削除には Admin が必要です。
公開時に publishedAt を設定するには、呼び出し元がそのエントリーを所有していても
content:publish_any が必要です。
REST API は、示されている箇所で _rev をオプションの楽観的同時実行の前提条件として受け付けます。MCP ツールは
同じ操作でそれを必須とし、エージェントは変更前にエントリーを読む必要があります。古いトークンは
CONFLICT を返します。エントリーロックで保護された管理画面と REST の書き込みは、認可されたリクエストがサポートされる
ロック上書きを使わない限り ENTRY_LOCKED を返します。MCP の書き込みはエントリーロックに参加しません。
| 操作 | 権限 | REST _rev | MCP _rev | 管理画面と REST のロック | フック |
|---|---|---|---|---|---|
| 変更を保存 | content:edit_own または content:edit_any | 任意 | 必須 | 適用 | content:beforeSave、content:afterSave |
| 公開 | content:publish_own または content:publish_any | 任意 | 必須 | 適用 | content:beforePublish、content:afterPublish |
| 公開取り消し | content:publish_own または content:publish_any | 任意 | 必須 | 適用 | content:beforeUnpublish、content:afterUnpublish |
| スケジュール | content:publish_own または content:publish_any | 任意 | 必須 | 適用 | content:beforeSchedule、content:afterSchedule |
| スケジュール解除 | content:publish_own または content:publish_any | 受け付けない | 受け付けない | 適用 | content:afterUnschedule |
| 下書きを破棄 | content:edit_own または content:edit_any | 任意 | 必須 | 適用 | なし |
| ゴミ箱へ移動 | content:delete_own または content:delete_any | 受け付けない | 受け付けない | 適用 | content:beforeDelete、content:afterDelete |
| ゴミ箱から復元 | content:edit_own または content:edit_any | 受け付けない | 受け付けない | 非適用 | content:afterRestore |
| 完全に削除 | content:delete_permanent | 受け付けない | 受け付けない | 非適用 | content:afterDelete |
| リビジョンを復元 | content:edit_own または content:edit_any | 受け付けない | 受け付けない | 非適用 | なし |
content:afterDelete イベントは、エントリーがゴミ箱へ移るとき permanent を false に、完全削除のあと
true に設定します。成功した after フックは状態変更のあとに実行され、レスポンス送信後に実行されることも
あります。プラグインは、対応する before フックから保存、公開、公開取り消し、スケジュール、ゴミ箱への移動を
拒否できます。
スケジュール公開が期限に達すると、公開フックを使います。
content:beforePublish フックがそのスケジュール試行を拒否すると、EmDash はスケジュールをクリアし、
content:afterUnschedule を実行します。
競合と再試行
保護された次の操作には、各読み取りまたは書き込みが返す _rev を使ってください。EmDash は同時変更を
置き換える代わりに、古いトークンを拒否します。エントリーを再読み込みし、より新しい状態を確認してから、
再試行するかどうかを決めてください。
エラーレスポンスは、状態が一切変わっていないことを常に証明するわけではありません。クライアントがレスポンスを 受け取る前に接続が切れた場合は、ライフサイクル操作を再試行する前にエントリーを読んでください。これにより、 再試行が別の編集者の完了済み作業を置き換えることも防げます。
リビジョン復元は、復元されたコンテンツとその監査リビジョンをまとめてコミットします。どちらかの書き込みが 失敗すると、EmDash はリクエスト前のコンテンツとリビジョン履歴を保持します。
HTTP のリクエスト/レスポンススキーマは REST API リファレンス を、ツール入力は MCP サーバーリファレンス を、イベントペイロードは フック リファレンス を参照してください。