QA Gate and WordPress Review
QA is not duplicated in SCS. WordPress is the review surface; SCS reads the
review state through WP-CLI and enforces it before a page can move to
Scheduled, Published, or Tracking.
What already exists on opshell.dev
Verified on the pilot site:
- ACF Pro
6.8.10is active. group_opshell_technical_reviewonpoststoresopshell_technical_reviewer(user) andopshell_review_date(date).- The theme displays “Reviewed By …” in the byline.
- The SEO Architecture group stores
content_type(hub,pillar,cluster,supporting),hub_parent,pillar_parent,cluster_parent,primary_keyword, andsemantic_tags. - The author profile group on users stores expertise, credentials, and
reviewed_on.
That review group is attribution, not a gate: it records who reviewed and when, but not what was checked or whether it passed.
The portable review gate
The pilot adds wpstrategist-review-gate, a small plugin that registers
group_wpw_review_gate on posts and pages:
| Field | Type | Values |
|---|---|---|
wpw_review_status | Select | not_reviewed, in_review, changes_requested, approved |
wpw_reviewer | User | WordPress user |
wpw_review_date | Date | Stored as Ymd |
wpw_review_scope | Checkbox | factual, technical, editorial, ymyl, legal, accessibility |
wpw_review_checklist | Checkbox | accuracy, sources, originality, internal_links, metadata, schema, media, disclosure |
wpw_review_notes | Textarea | Reviewer notes |
The plugin also syncs wpw_reviewer and wpw_review_date to the legacy
opshell_technical_reviewer / opshell_review_date fields when they exist, so
the byline keeps working.
The field names are deliberately generic (wpw_*) so the same plugin can be
installed on other sites. The existing opshell fields remain untouched.
SCS commands
scs wp draft --workspace bs --pid FS-0001 # create/update a draft
scs qa open --workspace bs --pid FS-0001 # print the WP edit URL
scs qa pull --workspace bs --pid FS-0001 # read ACF review state
scs qa check --workspace bs --pid FS-0001 # fail unless approved
scs qa check --workspace bs --pid FS-0001 --advance # set status Scheduled on pass
scs wp publish now --workspace bs --pid FS-0001 # publish live after approval
scs wp publish 2026/12/31 --workspace bs --pid FS-0001 # schedule after approval
qa pull writes a snapshot to publishing.csv:
qa_status, qa_reviewer, qa_date, qa_scope, qa_notes. The snapshot is for
terminal reporting; WordPress remains authoritative.
Gate rules
scs qa check requires:
wpw_review_status = approved- a reviewer
- a review date
- checklist items:
accuracy,sources,originality,internal_links,metadata ymylinwpw_review_scopewhen the brief saysYMYL review required: yes
If the review fields are missing, the status is not_configured and the check
fails closed. SCS will not treat “reviewer + date” as an automatic approval.
Status mapping
| SCS keyword status | WordPress | Meaning |
|---|---|---|
Writing / Editing | draft | Draft being written |
QA | draft | Draft created, review pending |
Scheduled | draft / scheduled | Review approved, ready for scheduling |
Published | publish | Live |
Tracking | publish | GSC data being collected |
scs publish creates or updates a draft. A live post is never converted back to
draft. The state transition to publish requires an approved QA snapshot.
Two status vocabularies
WordPress and SCS use different words for the same states. Do not compare them directly.
WordPress wpw_review_status | SCS publishing.qa_status | Meaning |
|---|---|---|
not_reviewed | pending | Draft created, nobody has reviewed it |
in_review | in_review | Review started |
changes_requested | changes_requested | Reviewer wants changes |
approved | approved | Gate passed |
| — (fields missing) | not_configured | Review plugin or fields absent; fails closed |
scs qa pull writes the SCS snapshot. WordPress remains authoritative.
For YMYL finance/health content, require a named reviewer with relevant
credentials and set the ymyl scope. A generic editor review is not enough.