コンテンツのライフサイクル

このページ

EmDash はエントリーの公開済みバージョンを、未公開の変更から分離して保持します。管理画面、 REST API、コマンドラインインターフェース(CLI)、Model Context Protocol(MCP)ツールは、同じライフサイクル ルールを使います。

エントリーは draft、scheduled、published のいずれかです。公開済みエントリーは下書きと将来の スケジュールも持てます。訪問者は、スケジュールされた下書きが公開されるまでライブリビジョンを受け取り続けます。 ゴミ箱はステータスとは別です。ゴミ箱に入れられたエントリーはライフサイクルメタデータを保持しますが、通常の コンテンツ読み取りからは除外されます。

状態遷移

次の表は、コンテンツの状態、リビジョンポインター、公開タイムスタンプの正規の契約です。 「変更なし」は、操作が保存されている値を維持することを意味します。

操作開始状態結果リビジョンへの影響publishedAtscheduledAt繰り返し呼び出し
変更を保存任意のアクティブなエントリーステータスは変わらないリビジョン対応コレクションでは、ライブリビジョンが公開されたまま下書きリビジョンを置き換える変更なし変更なし渡された _rev は古い保存を拒否する。省略すると REST 書き込みは無条件になる
公開下書き、スケジュール済み、または公開済み公開済み下書きリビジョンをライブに昇格し、下書きポインターをクリアする初回公開時に設定。以降の公開では、認可された呼び出し元が上書きしない限り保持クリアライブコンテンツと公開時刻は保持するが、新しい _rev を返す
期限到来時に公開スケジュール済み、またはスケジュール済み下書き付きの公開済み公開済み公開と同じ初回公開ではスケジュール時刻を使用。ライブコンテンツ上に新しい下書きを公開するときは既存値を保持クリア後続のスケジューラー実行は、スケジュールが既にクリアされたエントリーをスキップする
公開取り消し任意のアクティブなエントリー下書きライブポインターをクリア。既存の下書きを保持するか、ライブリビジョンから作成する保持クリアすでに単なる下書きのエントリーは変わらない
スケジュール下書き、スケジュール済み、または公開済み下書きはスケジュール済みになる。公開済みエントリーは公開済みのまま変更なし変更なし要求された将来の時刻に設定既存のスケジュールを置き換え、新しい _rev を返す
スケジュール解除スケジュール済み、またはスケジュール付きの公開済みスケジュール済みエントリーは下書きになる。公開済みエントリーは公開済みのまま変更なし変更なしクリアスケジュールのないエントリーは変わらない
下書きを破棄任意のアクティブなエントリーステータスは変わらない下書きポインターをクリア。ライブリビジョンは変更されない変更なし変更なし下書きのないエントリーは変わらない
ゴミ箱へ移動任意のアクティブなエントリーゴミ箱に入り、通常の読み取りから除外保持保持保持すでにゴミ箱にあるエントリーへのリクエストは not found を返す
ゴミ箱から復元ゴミ箱内下書きライブポインターをクリア。下書きポインターは保持保持クリアまだゴミ箱にあるエントリーが必要
完全に削除ゴミ箱内削除済みエントリーとそのリビジョンを削除削除削除繰り返しや取り消しはできない
リビジョンを復元任意のアクティブなエントリーステータスは変わらないリビジョン対応コレクションでは、選択したリビジョンのコピーで下書きを置き換える。ライブリビジョンは変更されない変更なし変更なし新しいリビジョンを作成し、新しい _rev を返す

リビジョン非対応のコレクションでは、保存と公開はライブ/下書きポインターではなくコンテンツ行を使います。 リビジョンの復元は、選択したフィールド値をその行に直接書き込みます。

リビジョン対応コレクションでリビジョンを復元しても公開はされません。復元した下書きを確認したあとで エントリーを公開してください。

権限と書き込み保護

権限は所有権に依存します。Author は自分が所有するエントリーに対して操作でき、Editor は任意のエントリーに対して同じ 操作を実行できます。完全削除には Admin が必要です。

公開時に publishedAt を設定するには、呼び出し元がそのエントリーを所有していても content:publish_any が必要です。

REST API は、示されている箇所で _rev をオプションの楽観的同時実行の前提条件として受け付けます。MCP ツールは 同じ操作でそれを必須とし、エージェントは変更前にエントリーを読む必要があります。古いトークンは CONFLICT を返します。エントリーロックで保護された管理画面と REST の書き込みは、認可されたリクエストがサポートされる ロック上書きを使わない限り ENTRY_LOCKED を返します。MCP の書き込みはエントリーロックに参加しません。

操作権限REST _revMCP _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 サーバーリファレンス を、イベントペイロードは フック リファレンス を参照してください。