APB-DOCS-WORKFLOW
Paragraphs are not Content Moderation entities. Only the host node has moderation_state. APB versions exist as paragraph revisions pointed at by field_apb_pb_paragraphs (target_id + target_revision_id). That is the supported Drupal ERR model.
On the demo, Editorial workflow (Draft / In review / Published / Archived) is bound to Article and International page only. Basic page stays unmoderated so commercial and lab rebuilds cannot fall into Draft. Do not enable workflow on page or on this Documentation type.
What works
- The default node revision keeps published APB markup during a forward draft. Nested accordion items receive new revision ids on the draft without changing published item revisions. Adding or removing a parent in the draft does not change the published host field list.
- Revision revert restores APB paragraph revisions, including nested items and the absence of parents added later.
- Content Moderation owns the Published flag. Calling
setUnpublished()on a node whose state is published leaves it published. Archive is the unpublished transition. - Target placement, container settings, and
data-apb-*init are revision-safe insofar as they are fields on the paragraph revision the host points at.
What does not work (product bugs)
Three JSON routes load Paragraph::load($id) (the latest paragraph revision) with no revision parameter: /apb/overlay-content/item/{id}, /apb/links/overlay/{id}, /apb/profiles/modal/{id}. Combined with paragraph view access that does not follow host moderation, the live page can show published copy while GLightbox fetches draft copy.
Verified failures on APB 2.1.0 (demo lab, 109 pass / 6 fail):
- Anonymous overlay JSON on a never-published host returns 200 with draft copy.
- During a forward draft of a published article, overlay / links overlay / profile JSON return the draft revision, not the published one. The pending-rewrite fixture demonstrates this on a public URL.
- Archiving the host does not deny anonymous GET on overlay JSON.
The fix belongs in the component repositories: load the paragraph revision the current host field points at, and 403 when the host default revision is unpublished. Do not patch Composer-managed modules on the demo or docs sites.
Roles (demo desk)
Writer (apb_writer) can Send for review and cannot Publish or Archive. Reviewer (apb_reviewer) can send In review back to Draft and cannot Publish. Publisher (apb_publisher) has every Editorial transition. demo_editor keeps every transition for recordings. Writers have edit-own, so they cannot open each other’s unpublished work. Media, taxonomy terms, and Views output are not revisioned with the article.
Live lab: demo.apb.aero.net/articles.
Related limitations.