claude-plugin-wordpress-manager 2.12.2 → 2.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/.claude-plugin/plugin.json +8 -3
  2. package/CHANGELOG.md +94 -2
  3. package/agents/wp-accessibility-auditor.md +1 -1
  4. package/agents/wp-content-strategist.md +2 -2
  5. package/agents/wp-deployment-engineer.md +1 -1
  6. package/agents/wp-distribution-manager.md +1 -1
  7. package/agents/wp-monitoring-agent.md +1 -1
  8. package/agents/wp-performance-optimizer.md +1 -1
  9. package/agents/wp-security-auditor.md +1 -1
  10. package/agents/wp-site-manager.md +3 -3
  11. package/commands/wp-setup.md +2 -2
  12. package/docs/GUIDE.md +260 -21
  13. package/docs/VALIDATION.md +341 -0
  14. package/docs/guides/wp-ecommerce.md +4 -4
  15. package/docs/plans/2026-03-01-tier3-wcop-implementation.md +1 -1
  16. package/docs/plans/2026-03-01-tier4-5-implementation.md +1 -1
  17. package/docs/plans/2026-03-02-content-framework-architecture.md +612 -0
  18. package/docs/plans/2026-03-02-content-framework-strategic-reflections.md +228 -0
  19. package/docs/plans/2026-03-02-content-intelligence-phase2.md +560 -0
  20. package/docs/plans/2026-03-02-content-pipeline-phase1.md +456 -0
  21. package/docs/plans/2026-03-02-dashboard-kanban-design.md +761 -0
  22. package/docs/plans/2026-03-02-dashboard-kanban-implementation.md +598 -0
  23. package/docs/plans/2026-03-02-dashboard-strategy.md +363 -0
  24. package/docs/plans/2026-03-02-editorial-calendar-phase3.md +490 -0
  25. package/docs/validation/.gitkeep +0 -0
  26. package/docs/validation/dashboard.html +286 -0
  27. package/docs/validation/results.json +1705 -0
  28. package/package.json +16 -3
  29. package/scripts/context-scanner.mjs +446 -0
  30. package/scripts/dashboard-renderer.mjs +553 -0
  31. package/scripts/run-validation.mjs +1132 -0
  32. package/servers/wp-rest-bridge/build/server.js +17 -6
  33. package/servers/wp-rest-bridge/build/tools/index.js +0 -9
  34. package/servers/wp-rest-bridge/build/tools/plugin-repository.js +23 -31
  35. package/servers/wp-rest-bridge/build/tools/schema.js +10 -2
  36. package/servers/wp-rest-bridge/build/tools/unified-content.js +10 -2
  37. package/servers/wp-rest-bridge/build/wordpress.d.ts +0 -3
  38. package/servers/wp-rest-bridge/build/wordpress.js +16 -98
  39. package/servers/wp-rest-bridge/package.json +1 -0
  40. package/skills/wp-analytics/SKILL.md +153 -0
  41. package/skills/wp-analytics/references/signals-feed-schema.md +417 -0
  42. package/skills/wp-content/references/content-templates.md +1 -1
  43. package/skills/wp-content/references/seo-optimization.md +8 -8
  44. package/skills/wp-content-attribution/references/roi-calculation.md +1 -1
  45. package/skills/wp-content-attribution/references/utm-tracking-setup.md +5 -5
  46. package/skills/wp-content-generation/references/generation-workflow.md +2 -2
  47. package/skills/wp-content-pipeline/SKILL.md +461 -0
  48. package/skills/wp-content-pipeline/references/content-brief-schema.md +377 -0
  49. package/skills/wp-content-pipeline/references/site-config-schema.md +431 -0
  50. package/skills/wp-content-repurposing/references/auto-transform-pipeline.md +1 -1
  51. package/skills/wp-content-repurposing/references/email-newsletter.md +1 -1
  52. package/skills/wp-content-repurposing/references/platform-specs.md +2 -2
  53. package/skills/wp-content-repurposing/references/transform-templates.md +27 -27
  54. package/skills/wp-dashboard/SKILL.md +121 -0
  55. package/skills/wp-deploy/references/ssh-deploy.md +2 -2
  56. package/skills/wp-editorial-planner/SKILL.md +262 -0
  57. package/skills/wp-editorial-planner/references/editorial-schema.md +268 -0
  58. package/skills/wp-multilang-network/references/content-sync.md +3 -3
  59. package/skills/wp-multilang-network/references/network-architecture.md +1 -1
  60. package/skills/wp-multilang-network/references/seo-international.md +7 -7
  61. package/skills/wp-structured-data/references/schema-types.md +4 -4
  62. package/skills/wp-webhooks/references/payload-formats.md +3 -3
@@ -0,0 +1,377 @@
1
+ # Content Brief Schema
2
+
3
+ Schema reference for `.brief.md` files -- the exchange format between Gen\* skills and the `wp-content-pipeline` publishing skill.
4
+
5
+ Brief files live in `.content-state/pipeline-active/` while being processed, then move to `.content-state/pipeline-archive/` after publishing or archival.
6
+
7
+ ---
8
+
9
+ ## File Format
10
+
11
+ Each `.brief.md` file consists of:
12
+
13
+ 1. **YAML frontmatter** between `---` delimiters (structured metadata)
14
+ 2. **Markdown body** after the closing `---` (the actual content to publish)
15
+
16
+ ```
17
+ ---
18
+ brief_id: BRF-2026-001
19
+ status: draft
20
+ # ... other fields ...
21
+ ---
22
+
23
+ # Article Title
24
+
25
+ Body content in standard Markdown...
26
+ ```
27
+
28
+ ---
29
+
30
+ ## Frontmatter Fields
31
+
32
+ ### `brief_id`
33
+
34
+ | Property | Value |
35
+ |----------|-------|
36
+ | Type | `string` |
37
+ | Required | **Yes** |
38
+ | Format | `BRF-YYYY-NNN` |
39
+ | Example | `BRF-2026-014` |
40
+
41
+ Unique identifier for the brief. `YYYY` is the four-digit year, `NNN` is a zero-padded sequential number within that year. The pipeline auto-generates this when creating briefs; manual briefs must follow the same format.
42
+
43
+ ### `created`
44
+
45
+ | Property | Value |
46
+ |----------|-------|
47
+ | Type | `string` (ISO 8601) |
48
+ | Required | **No** (auto-generated) |
49
+ | Default | Current timestamp at brief creation |
50
+ | Example | `2026-03-02T10:30:00Z` |
51
+
52
+ Timestamp of brief creation. Auto-populated by the pipeline.
53
+
54
+ ### `status`
55
+
56
+ | Property | Value |
57
+ |----------|-------|
58
+ | Type | `enum` |
59
+ | Required | **Yes** |
60
+ | Values | `draft` \| `ready` \| `published` \| `archived` |
61
+ | Default | `draft` |
62
+
63
+ Current lifecycle status. See [Status Lifecycle](#status-lifecycle) for transitions.
64
+
65
+ ---
66
+
67
+ ### `source` block
68
+
69
+ Tracks the origin of the content brief.
70
+
71
+ ```yaml
72
+ source:
73
+ skill: gencorpcomm
74
+ domain: corporate-communications
75
+ session_id: sess_abc123
76
+ ```
77
+
78
+ | Field | Type | Required | Default | Description |
79
+ |-------|------|----------|---------|-------------|
80
+ | `skill` | `string` | **Yes** | -- | Gen\* skill that produced the brief. Values: `gencorpcomm`, `genmarketing`, `gensignal`, `genbrand`, `manual`. For manually created briefs, set to `manual` |
81
+ | `domain` | `string` | No | `general` | Content domain or department. Free-form but recommended values: `corporate-communications`, `marketing`, `product`, `engineering`, `support` |
82
+ | `session_id` | `string` | No | `null` | Claude Code session ID that generated the brief, for traceability |
83
+
84
+ ---
85
+
86
+ ### `target` block
87
+
88
+ Defines the WordPress destination and publishing parameters.
89
+
90
+ ```yaml
91
+ target:
92
+ site_id: mysite
93
+ content_type: post
94
+ status: draft
95
+ scheduled_date: 2026-03-15T09:00:00Z
96
+ categories:
97
+ - sustainability
98
+ - innovation
99
+ tags:
100
+ - premium-water
101
+ - zero-calorie
102
+ - sicily
103
+ ```
104
+
105
+ | Field | Type | Required | Default | Description |
106
+ |-------|------|----------|---------|-------------|
107
+ | `site_id` | `string` | **Yes** | -- | WordPress site identifier from `WP_SITES_CONFIG` environment variable JSON array |
108
+ | `content_type` | `string` | **Yes** | `post` | WordPress content type: `post`, `page`, or any registered custom post type (e.g., `product`, `recipe`) |
109
+ | `status` | `string` | No | `draft` | WordPress post status on publish: `draft`, `pending`, `publish`, `future`, `private` |
110
+ | `scheduled_date` | `string` (ISO 8601) | No | `null` | Schedule publication for a future date. Required when `status: future`. Ignored for other statuses |
111
+ | `categories` | `string[]` | No | `[]` | WordPress category slugs. Created automatically if they do not exist on the target site |
112
+ | `tags` | `string[]` | No | `[]` | WordPress tag slugs. Created automatically if they do not exist on the target site |
113
+
114
+ ---
115
+
116
+ ### `content` block
117
+
118
+ Core content metadata for the WordPress post.
119
+
120
+ ```yaml
121
+ content:
122
+ title: "Acqua Premium: La Rivoluzione Zero-Calorie dal Mediterraneo"
123
+ excerpt: "Scopri come il frutto mediterraneo regionale diventa la bevanda del futuro."
124
+ featured_image: /assets/images/premium-field-sicily.jpg
125
+ author: editorial-team
126
+ ```
127
+
128
+ | Field | Type | Required | Default | Description |
129
+ |-------|------|----------|---------|-------------|
130
+ | `title` | `string` | **Yes** | -- | Post title. Supports standard characters and Unicode |
131
+ | `excerpt` | `string` | No | Auto-generated from first 160 chars of body | Custom excerpt / meta description fallback |
132
+ | `featured_image` | `string` | No | `null` | Path or URL to the featured image. Relative paths resolve against site media library |
133
+ | `author` | `string` | No | Site default author | WordPress username or slug for post attribution |
134
+
135
+ ---
136
+
137
+ ### `distribution` block
138
+
139
+ Controls cross-channel distribution after WordPress publishing.
140
+
141
+ ```yaml
142
+ distribution:
143
+ channels:
144
+ - linkedin
145
+ - twitter
146
+ - mailchimp
147
+ adapt_format: true
148
+ schedule_offset_hours: 2
149
+ ```
150
+
151
+ | Field | Type | Required | Default | Description |
152
+ |-------|------|----------|---------|-------------|
153
+ | `channels` | `string[]` | No | `[]` | External distribution channels. Supported: `linkedin`, `twitter`, `buffer`, `mailchimp` |
154
+ | `adapt_format` | `boolean` | No | `true` | Adapt content format for each channel (e.g., shorten for Twitter, professional tone for LinkedIn) |
155
+ | `schedule_offset_hours` | `integer` | No | `0` | Hours to delay distribution after WordPress publication. `0` = immediate |
156
+
157
+ ---
158
+
159
+ ### `seo` block
160
+
161
+ Search engine optimization parameters. Used by the pipeline to validate content before publishing.
162
+
163
+ ```yaml
164
+ seo:
165
+ focus_keyword: acqua premium zero calorie
166
+ meta_description: "L'acqua premium regionale: zero calorie, ricca di antiossidanti. Scopri la bevanda naturale che sta conquistando l'Europa."
167
+ schema_type: Article
168
+ internal_links:
169
+ - /blog/benefici-fico-india
170
+ - /prodotti/light-blend
171
+ ```
172
+
173
+ | Field | Type | Required | Default | Description |
174
+ |-------|------|----------|---------|-------------|
175
+ | `focus_keyword` | `string` | No | `null` | Primary SEO keyword / keyphrase for the content |
176
+ | `meta_description` | `string` | No | Value of `content.excerpt` | Custom meta description (max 160 chars recommended) |
177
+ | `schema_type` | `string` | No | `Article` | JSON-LD schema type: `Article`, `BlogPosting`, `HowTo`, `FAQPage`, `Product`, `Recipe`, `NewsArticle` |
178
+ | `internal_links` | `string[]` | No | `[]` | Paths to internal pages that should be linked within the content body |
179
+
180
+ **Note:** the architecture draft defines `internal_links` as `auto | manual | none`. This schema uses explicit path lists instead — automatic link discovery is configured at the site level via `seo.auto_internal_links` in `{site_id}.config.md`.
181
+
182
+ ---
183
+
184
+ ### `gates` block
185
+
186
+ Quality gates that must pass before the brief transitions from `draft` to `ready`.
187
+
188
+ ```yaml
189
+ gates:
190
+ seo_score_min: 70
191
+ readability_min: 60
192
+ require_review: true
193
+ ```
194
+
195
+ | Field | Type | Required | Default | Description |
196
+ |-------|------|----------|---------|-------------|
197
+ | `seo_score_min` | `integer` (0-100) | No | `70` | Minimum SEO score (Yoast/RankMath scale). Brief cannot move to `ready` below this threshold |
198
+ | `readability_min` | `integer` (0-100) | No | `60` | Minimum readability score (Flesch-based). Brief cannot move to `ready` below this threshold |
199
+ | `require_review` | `boolean` | No | `false` | If `true`, a human must explicitly approve the brief before it transitions to `ready` |
200
+
201
+ ---
202
+
203
+ ## Status Lifecycle
204
+
205
+ Briefs progress through a linear lifecycle with defined transitions:
206
+
207
+ ```
208
+ draft --> ready --> published --> archived
209
+ | ^
210
+ +---------- (skip) ---------------+
211
+ ```
212
+
213
+ | Transition | Trigger | Conditions |
214
+ |------------|---------|------------|
215
+ | `draft` -> `ready` | Automated or manual | All `gates` pass; content body is non-empty; required frontmatter fields are present |
216
+ | `ready` -> `published` | Pipeline publish action | Target site is reachable; WordPress API responds; content created successfully |
217
+ | `published` -> `archived` | Manual or time-based | Content is live; distribution completed; brief moved to `pipeline-archive/` |
218
+ | `draft` -> `archived` | Manual | Brief abandoned or superseded; moved directly to archive |
219
+
220
+ **Notes:**
221
+ - Only `draft` briefs can be edited. Once `ready`, the brief is frozen.
222
+ - The `published` status is set automatically by the pipeline after successful WordPress API call.
223
+ - Archived briefs retain their frontmatter for audit trail and analytics.
224
+
225
+ ---
226
+
227
+ ## Validation Rules
228
+
229
+ ### Required Fields
230
+
231
+ These fields **must** be present for a brief to be valid:
232
+
233
+ | Field | Reason |
234
+ |-------|--------|
235
+ | `brief_id` | Unique identification and tracking |
236
+ | `status` | Lifecycle management |
237
+ | `source.skill` | Content provenance and traceability |
238
+ | `target.site_id` | WordPress destination routing |
239
+ | `target.content_type` | WordPress API endpoint selection |
240
+ | `content.title` | WordPress post title (cannot be empty) |
241
+
242
+ ### Optional Fields with Defaults
243
+
244
+ | Field | Default Value |
245
+ |-------|---------------|
246
+ | `created` | Auto-generated ISO 8601 timestamp |
247
+ | `source.domain` | `general` |
248
+ | `source.session_id` | `null` |
249
+ | `target.status` | `draft` |
250
+ | `target.scheduled_date` | `null` |
251
+ | `target.categories` | `[]` |
252
+ | `target.tags` | `[]` |
253
+ | `content.excerpt` | First 160 chars of body |
254
+ | `content.featured_image` | `null` |
255
+ | `content.author` | Site default author |
256
+ | `distribution.channels` | `[]` |
257
+ | `distribution.adapt_format` | `true` |
258
+ | `distribution.schedule_offset_hours` | `0` |
259
+ | `seo.focus_keyword` | `null` |
260
+ | `seo.meta_description` | Value of `content.excerpt` |
261
+ | `seo.schema_type` | `Article` |
262
+ | `seo.internal_links` | `[]` |
263
+ | `gates.seo_score_min` | `70` |
264
+ | `gates.readability_min` | `60` |
265
+ | `gates.require_review` | `false` |
266
+
267
+ ### Content Body
268
+
269
+ - Must be valid Markdown
270
+ - Must be non-empty for transition from `draft` to `ready`
271
+ - Supports standard Markdown features: headings, lists, links, images, code blocks, tables
272
+ - Internal links from `seo.internal_links` should appear naturally within the body
273
+
274
+ ---
275
+
276
+ ## Example Brief
277
+
278
+ A complete `.brief.md` for the mysite site:
279
+
280
+ ```markdown
281
+ ---
282
+ brief_id: BRF-2026-014
283
+ created: 2026-03-02T10:30:00Z
284
+ status: draft
285
+
286
+ source:
287
+ skill: gencorpcomm
288
+ domain: corporate-communications
289
+ session_id: sess_7f3a9b2c
290
+
291
+ target:
292
+ site_id: mysite
293
+ content_type: post
294
+ status: draft
295
+ scheduled_date: 2026-03-15T09:00:00Z
296
+ categories:
297
+ - sustainability
298
+ - innovation
299
+ tags:
300
+ - premium-water
301
+ - zero-calorie
302
+ - sicily
303
+ - sustainability
304
+
305
+ content:
306
+ title: "Acqua Premium: La Rivoluzione Zero-Calorie dal Mediterraneo"
307
+ excerpt: "Scopri come il frutto mediterraneo regionale diventa la bevanda del futuro: zero calorie, ricca di antiossidanti e 100% sostenibile."
308
+ featured_image: /wp-content/uploads/2026/03/premium-field-sicily.jpg
309
+ author: editorial-team
310
+
311
+ distribution:
312
+ channels:
313
+ - linkedin
314
+ - twitter
315
+ adapt_format: true
316
+ schedule_offset_hours: 2
317
+
318
+ seo:
319
+ focus_keyword: acqua premium zero calorie
320
+ meta_description: "L'acqua premium regionale: zero calorie, ricca di antiossidanti. Scopri la bevanda naturale che sta conquistando l'Europa."
321
+ schema_type: Article
322
+ internal_links:
323
+ - /blog/benefici-fico-india
324
+ - /prodotti/light-blend
325
+ - /chi-siamo/sostenibilita
326
+
327
+ gates:
328
+ seo_score_min: 75
329
+ readability_min: 65
330
+ require_review: true
331
+ ---
332
+
333
+ # Acqua Premium: La Rivoluzione Zero-Calorie dal Mediterraneo
334
+
335
+ Nel cuore del Mediterraneo, tra le terre arse dal sole dell'entroterra, cresce una pianta che sta cambiando il panorama delle bevande salutari: il **frutto mediterraneo** (*Mediterranean fruit*).
336
+
337
+ ## Una Tradizione Millenaria, Una Visione Moderna
338
+
339
+ Il frutto mediterraneo regionale non è solo un simbolo del paesaggio mediterraneo. Per secoli, le comunità locali hanno sfruttato le sue proprietà idratanti naturali. Oggi, grazie a un processo di estrazione innovativo, quell'acqua diventa una [bevanda zero-calorie](/prodotti/light-blend) che conserva tutti i benefici dell'originale.
340
+
341
+ ## Perché l'Acqua Premium?
342
+
343
+ I vantaggi rispetto alle alternative convenzionali sono significativi:
344
+
345
+ - **Zero calorie** senza dolcificanti artificiali
346
+ - **Antiossidanti naturali** (betalaine e polifenoli)
347
+ - **Elettroliti bilanciati** per un'idratazione superiore
348
+ - **Impronta idrica minima**: la pianta richiede l'85% di acqua in meno rispetto alle colture tradizionali
349
+
350
+ ## Sostenibilità al Centro
351
+
352
+ La nostra filiera è progettata per la [sostenibilità integrale](/chi-siamo/sostenibilita). Le piante crescono su terreni marginali, non competono con le colture alimentari e contribuiscono alla rigenerazione del suolo.
353
+
354
+ Ogni bottiglia di AcmeBrand rappresenta una scelta consapevole: per la salute, per il territorio, per il futuro.
355
+
356
+ ## Scopri di Più
357
+
358
+ Leggi i [benefici scientifici del frutto mediterraneo](/blog/benefici-fico-india) o prova la nostra gamma di prodotti, dal delicato **Light Blend** al ricco **Bold Blend**.
359
+ ```
360
+
361
+ ---
362
+
363
+ ## File Naming Convention
364
+
365
+ Brief files follow this naming pattern:
366
+
367
+ ```
368
+ {brief_id}.brief.md
369
+ ```
370
+
371
+ Examples:
372
+ - `BRF-2026-001.brief.md`
373
+ - `BRF-2026-014.brief.md`
374
+
375
+ Files are stored in:
376
+ - **Active**: `.content-state/pipeline-active/` (being processed)
377
+ - **Archived**: `.content-state/pipeline-archive/` (completed or abandoned)