Operate · Product guide

Review and deliver a CMS draft

Run the revision-aware workflow from draft generation through explicit approval and idempotent CMS draft delivery.

11 min readSource on GitHub ↗

Use the reviewable workflow

Generation is asynchronous. A successful request starts work and returns a job ID; it does not claim that a finished article is ready to deliver. Inspect the job, then read the post and the shared ReviewPacket before changing its state or destination.

Recommended sequence
generate_draft
  → get_job
  → review_post
  → explicit destination and user approval
  → push_to_cms_draft

Avoid overwriting a newer draft

update_draft and push_to_cms_draft require the current expected_updated_at value. A conflict writes nothing. This is intentional optimistic locking: reread the saved post, compare the current version, and only then prepare a new edit.

After create_draft, always call get_post before update_draft. Background SEO work may already have refreshed the version.

Resolve preflight before delivery

review_post uses the same service as the web review panel. It returns revision context, change summary, preflight checks, destination options, permissions, and warnings.

Revision, SEO, and destination failures block CMS draft delivery. Cover-image and publishing-metadata warnings do not. If a site has more than one target, select the destination explicitly.

  1. Read the current ReviewPacket.
  2. Fix the blocking revision, SEO, or destination state.
  3. Get explicit human approval for the current version.
  4. Select one destination and deliver the CMS draft.

Understand the delivery result

Repeating the same post, version, and destination is idempotent: it does not create a second external draft. A completed CMS draft remains a human review step in the destination CMS.