seo-publishlisted
Install: claude install-skill lcrvl2/seo-skills
# SEO Publish
Publication worker: takes a validated article file and posts it to the client's site. This is the ONLY skill allowed to make content public; everything upstream is drafts in the workdir.
---
## Preconditions (hard gate : refuse if any is missing)
1. **Client validation documented**: the kanban card (or the request) shows an explicit client approval of THIS article.
2. **QA verdict**: a Content-quality-evaluator scorecard with PASS (or CONDITIONAL + editor override documented).
3. **CMS credentials available** for this client.
If any is missing: do NOT publish; report exactly what is missing (and on a kanban card: `kanban_block` with the reason).
---
## CMS resolution
From `seo/clients/<slug>/client.json` → `cms` block:
```json
"cms": { "type": "wordpress" | "wix" | "none", "base_url": "...", "auth_ref": "env:CLIENT_<SLUG>_CMS_TOKEN" }
```
`auth_ref` is a reference to an environment variable, never a secret in clear text.
### type: wordpress
REST API `POST {base_url}/wp-json/wp/v2/posts` with an Application Password (Basic auth from the referenced env var).
- Payload: `title`, `slug`, `content` (markdown converted to HTML), `status: "draft"` first.
- Verify the draft renders (GET the preview), then update `status: "publish"`.
- Set meta description via the SEO plugin's REST field if exposed (Yoast/RankMath); otherwise report that meta must be set manually.
### type: wix
Wix Blog REST API (`https://www.wixapis.com/blog/v3/draft-posts`), auth via API