Inhaltslebenszyklus

Auf dieser Seite

EmDash hält die veröffentlichte Version eines Eintrags getrennt von unveröffentlichten Änderungen. Das Admin-Panel, die REST-API, die Befehlszeilenschnittstelle (CLI) und die Model-Context-Protocol-(MCP-)Tools verwenden dieselben Lebenszyklusregeln.

Ein Eintrag kann draft, scheduled oder published sein. Ein veröffentlichter Eintrag kann auch einen Entwurf und einen zukünftigen Zeitplan haben: Besucher erhalten weiterhin die Live-Revision, bis der geplante Entwurf veröffentlicht wird. Der Papierkorb ist vom Status getrennt. Ein gelöschter Eintrag behält seine Lebenszyklus-Metadaten, wird aber von gewöhnlichen Inhaltslesevorgängen ausgeschlossen.

Zustandsübergänge

Die folgende Tabelle ist der kanonische Vertrag für Inhaltszustand, Revisionszeiger und Veröffentlichungszeitstempel. „Keine Änderung“ bedeutet, dass die Operation den gespeicherten Wert beibehält.

AktionAusgangszustandErgebnisRevisionseffektpublishedAtscheduledAtWiederholter Aufruf
Änderungen speichernJeder aktive EintragStatus ändert sich nichtBei einer revisionsfähigen Collection ersetzt die Entwurfsrevision, während die Live-Revision öffentlich bleibtKeine ÄnderungKeine ÄnderungEin geliefertes _rev lehnt einen veralteten Speichervorgang ab; ohne es ist der REST-Schreibvorgang bedingungslos
VeröffentlichenEntwurf, geplant oder veröffentlichtVeröffentlichtBefördert die Entwurfsrevision zu live und löscht den EntwurfszeigerBeim ersten Veröffentlichen gesetzt; bei späteren Veröffentlichungen beibehalten, sofern ein autorisierter Aufrufer ihn nicht überschreibtGelöschtBehält den Live-Inhalt und die Veröffentlichungszeit bei, gibt aber ein neues _rev zurück
Bei Fälligkeit veröffentlichenGeplant, oder veröffentlicht mit geplantem EntwurfVeröffentlichtWie VeröffentlichenVerwendet die geplante Zeit beim ersten Veröffentlichen; behält den bestehenden Wert beim Veröffentlichen eines neuen Entwurfs über Live-InhaltGelöschtEin späterer Scheduler-Durchlauf überspringt einen Eintrag, dessen Zeitplan bereits gelöscht wurde
Veröffentlichung zurücknehmenJeder aktive EintragEntwurfLöscht den Live-Zeiger; behält den bestehenden Entwurf oder erstellt einen aus der Live-RevisionBeibehaltenGelöschtEin Eintrag, der bereits ein einfacher Entwurf ist, ändert sich nicht
PlanenEntwurf, geplant oder veröffentlichtEin Entwurf wird geplant; ein veröffentlichter Eintrag bleibt veröffentlichtKeine ÄnderungKeine ÄnderungAuf die angeforderte zukünftige Zeit gesetztErsetzt den bestehenden Zeitplan und gibt ein neues _rev zurück
Planung aufhebenGeplant, oder veröffentlicht mit ZeitplanEin geplanter Eintrag wird Entwurf; ein veröffentlichter Eintrag bleibt veröffentlichtKeine ÄnderungKeine ÄnderungGelöschtEin Eintrag ohne Zeitplan ändert sich nicht
Entwurf verwerfenJeder aktive EintragStatus ändert sich nichtLöscht den Entwurfszeiger; die Live-Revision bleibt unverändertKeine ÄnderungKeine ÄnderungEin Eintrag ohne Entwurf ändert sich nicht
In den Papierkorb verschiebenJeder aktive EintragIm Papierkorb und aus gewöhnlichen Lesevorgängen entferntBeibehaltenBeibehaltenBeibehaltenEine Anfrage für einen bereits im Papierkorb befindlichen Eintrag gibt nicht gefunden zurück
Aus dem Papierkorb wiederherstellenIm PapierkorbEntwurfLöscht den Live-Zeiger; behält jeden EntwurfszeigerBeibehaltenGelöschtErfordert einen Eintrag, der noch im Papierkorb ist
Dauerhaft löschenIm PapierkorbEntferntEntfernt den Eintrag und seine RevisionenEntferntEntferntKann nicht wiederholt oder rückgängig gemacht werden
Eine Revision wiederherstellenJeder aktive EintragStatus ändert sich nichtBei einer revisionsfähigen Collection ersetzt den Entwurf durch eine Kopie der ausgewählten Revision; die Live-Revision bleibt unverändertKeine ÄnderungKeine ÄnderungErstellt eine neue Revision und gibt ein neues _rev zurück

Bei einer Collection ohne Revisionsunterstützung verwenden Speichern und Veröffentlichen die Inhaltszeile statt Live- und Entwurfszeigern. Das Wiederherstellen einer Revision schreibt die ausgewählten Feldwerte direkt in diese Zeile.

Das Wiederherstellen einer Revision bei einer revisionsfähigen Collection veröffentlicht sie nicht. Veröffentlichen Sie den Eintrag nach Prüfung des wiederhergestellten Entwurfs.

Berechtigungen und Schreibschutz

Berechtigungen hängen vom Besitz ab. Ein Author kann auf einen eigenen Eintrag einwirken; ein Editor kann dieselbe Aktion auf jedem Eintrag ausführen. Dauerhaftes Löschen erfordert einen Admin.

Das Setzen von publishedAt beim Veröffentlichen erfordert content:publish_any, auch wenn der Aufrufer den Eintrag besitzt.

Die REST-API akzeptiert _rev als optionale optimistische-Concurrency-Voraussetzung, wo angegeben. MCP-Tools erfordern es für dieselben Operationen, sodass ein Agent den Eintrag vor dem Ändern lesen muss. Ein veraltetes Token gibt CONFLICT zurück. Admin- und REST-Schreibvorgänge, die durch eine Eintragssperre geschützt sind, geben ENTRY_LOCKED zurück, sofern eine autorisierte Anfrage die unterstützte Sperrüberschreibung nicht verwendet. MCP-Schreibvorgänge nehmen nicht an Eintragssperren teil.

AktionBerechtigungREST _revMCP _revAdmin- und REST-SperreHooks
Änderungen speicherncontent:edit_own oder content:edit_anyOptionalErforderlichErzwungencontent:beforeSave, content:afterSave
Veröffentlichencontent:publish_own oder content:publish_anyOptionalErforderlichErzwungencontent:beforePublish, content:afterPublish
Veröffentlichung zurücknehmencontent:publish_own oder content:publish_anyOptionalErforderlichErzwungencontent:beforeUnpublish, content:afterUnpublish
Planencontent:publish_own oder content:publish_anyOptionalErforderlichErzwungencontent:beforeSchedule, content:afterSchedule
Planung aufhebencontent:publish_own oder content:publish_anyNicht akzeptiertNicht akzeptiertErzwungencontent:afterUnschedule
Entwurf verwerfencontent:edit_own oder content:edit_anyOptionalErforderlichErzwungenKeine
In den Papierkorb verschiebencontent:delete_own oder content:delete_anyNicht akzeptiertNicht akzeptiertErzwungencontent:beforeDelete, content:afterDelete
Aus dem Papierkorb wiederherstellencontent:edit_own oder content:edit_anyNicht akzeptiertNicht akzeptiertNicht erzwungencontent:afterRestore
Dauerhaft löschencontent:delete_permanentNicht akzeptiertNicht akzeptiertNicht erzwungencontent:afterDelete
Eine Revision wiederherstellencontent:edit_own oder content:edit_anyNicht akzeptiertNicht akzeptiertNicht erzwungenKeine

Das Ereignis content:afterDelete setzt permanent auf false, wenn ein Eintrag in den Papierkorb verschoben wird, und auf true nach dauerhaftem Löschen. Erfolgreiche After-Hooks laufen nach der Zustandsänderung und können nach dem Senden der Antwort laufen. Ein Plugin kann Speichern, Veröffentlichen, Veröffentlichung zurücknehmen, Planen oder In-den-Papierkorb-Verschieben aus dem entsprechenden Before-Hook ablehnen.

Wenn die geplante Veröffentlichung fällig wird, verwendet sie die Publish-Hooks. Wenn ein content:beforePublish-Hook diesen geplanten Versuch ablehnt, löscht EmDash den Zeitplan und führt content:afterUnschedule aus.

Konflikte und Wiederholungen

Verwenden Sie das von jedem Lese- oder Schreibvorgang zurückgegebene _rev für die nächste geschützte Operation. EmDash lehnt ein veraltetes Token ab, anstatt eine gleichzeitige Änderung zu ersetzen. Lesen Sie den Eintrag erneut, prüfen Sie den neueren Zustand und entscheiden Sie dann, ob Sie es erneut versuchen.

Eine Fehlerantwort beweist nicht immer, dass sich kein Zustand geändert hat. Wenn eine Verbindung endet, bevor der Client eine Antwort erhält, lesen Sie den Eintrag, bevor Sie eine Lebenszyklusoperation erneut versuchen. Das verhindert auch, dass ein Wiederholungsversuch die Arbeit eines anderen Editors ersetzt.

Die Revisionswiederherstellung speichert den wiederhergestellten Inhalt und seine Audit-Revision zusammen. Wenn einer der Schreibvorgänge fehlschlägt, bewahrt EmDash den Inhalt und die Revisionshistorie von vor der Anfrage.

Siehe die REST-API-Referenz für HTTP-Anfrage- und -Antwortschemas, die MCP-Server-Referenz für Tool-Eingaben und die Hook- Referenz für Ereignisnutzlasten.