claude-plugin-wordpress-manager 2.12.2 → 2.13.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 (29) hide show
  1. package/.claude-plugin/plugin.json +8 -3
  2. package/CHANGELOG.md +55 -0
  3. package/docs/GUIDE.md +240 -1
  4. package/docs/VALIDATION.md +341 -0
  5. package/docs/plans/2026-03-02-content-framework-architecture.md +612 -0
  6. package/docs/plans/2026-03-02-content-framework-strategic-reflections.md +228 -0
  7. package/docs/plans/2026-03-02-content-intelligence-phase2.md +560 -0
  8. package/docs/plans/2026-03-02-content-pipeline-phase1.md +456 -0
  9. package/docs/plans/2026-03-02-editorial-calendar-phase3.md +490 -0
  10. package/docs/validation/.gitkeep +0 -0
  11. package/docs/validation/dashboard.html +286 -0
  12. package/docs/validation/results.json +1705 -0
  13. package/package.json +12 -3
  14. package/scripts/run-validation.mjs +1132 -0
  15. package/servers/wp-rest-bridge/build/server.js +16 -5
  16. package/servers/wp-rest-bridge/build/tools/index.js +0 -9
  17. package/servers/wp-rest-bridge/build/tools/plugin-repository.js +23 -31
  18. package/servers/wp-rest-bridge/build/tools/schema.js +10 -2
  19. package/servers/wp-rest-bridge/build/tools/unified-content.js +10 -2
  20. package/servers/wp-rest-bridge/build/wordpress.d.ts +0 -3
  21. package/servers/wp-rest-bridge/build/wordpress.js +16 -98
  22. package/servers/wp-rest-bridge/package.json +1 -0
  23. package/skills/wp-analytics/SKILL.md +153 -0
  24. package/skills/wp-analytics/references/signals-feed-schema.md +417 -0
  25. package/skills/wp-content-pipeline/SKILL.md +461 -0
  26. package/skills/wp-content-pipeline/references/content-brief-schema.md +377 -0
  27. package/skills/wp-content-pipeline/references/site-config-schema.md +431 -0
  28. package/skills/wp-editorial-planner/SKILL.md +262 -0
  29. package/skills/wp-editorial-planner/references/editorial-schema.md +268 -0
@@ -0,0 +1,490 @@
1
+ # Editorial Calendar & Content Planner (Phase 3) — Implementation Plan
2
+
3
+ > **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
4
+
5
+ **Goal:** Enable strategic content planning over time with a monthly editorial calendar file that integrates with Phase 1 (content pipeline) and Phase 2 (signals intelligence) to convert planned entries into scheduled WordPress posts.
6
+
7
+ **Architecture:** A new `wp-editorial-planner` skill reads `.content-state/{YYYY-MM}-editorial.state.md` files and orchestrates a 4-step workflow: PLAN → BRIEF → SCHEDULE → SYNC. The calendar file uses Markdown tables (one per week) with YAML frontmatter for monthly goals and SEO targets. Calendar entries flow into `wp-content-pipeline` (Phase 1) as briefs and can be informed by `signals-feed.md` (Phase 2) for topic suggestions. Zero new TypeScript — all orchestration lives in skill prompts and MD schemas.
8
+
9
+ **Tech Stack:** Markdown + YAML frontmatter, Claude Code skill system, existing MCP tools (`create_content`, `list_content`, `buf_create_update`, `mc_create_campaign`)
10
+
11
+ **Reference Docs:**
12
+ - Architecture: `docs/plans/2026-03-02-content-framework-architecture.md` (Sections 3.1–3.4)
13
+ - Phase 1 skill: `skills/wp-content-pipeline/SKILL.md` (brief format, publishing workflow)
14
+ - Phase 1 schemas: `skills/wp-content-pipeline/references/content-brief-schema.md`, `skills/wp-content-pipeline/references/site-config-schema.md`
15
+ - Phase 2 schema: `skills/wp-analytics/references/signals-feed-schema.md` (anomalies → topic suggestions)
16
+ - Existing skill pattern: `skills/wp-analytics/SKILL.md` (for SKILL.md structure reference)
17
+
18
+ ---
19
+
20
+ ### Task 1: Create Editorial Calendar Schema Reference
21
+
22
+ **Files:**
23
+ - Create: `skills/wp-editorial-planner/references/editorial-schema.md`
24
+
25
+ **Step 1: Create the skill directory**
26
+
27
+ ```bash
28
+ mkdir -p skills/wp-editorial-planner/references
29
+ ```
30
+
31
+ **Step 2: Write the editorial calendar schema**
32
+
33
+ Create `skills/wp-editorial-planner/references/editorial-schema.md` with complete schema documentation. This file defines the YAML frontmatter and Markdown table structure for `{YYYY-MM}-editorial.state.md` files.
34
+
35
+ The schema must include these sections:
36
+
37
+ **A. Overview** — One paragraph: the editorial calendar is a monthly Markdown file with YAML frontmatter for goals/metadata and weekly Markdown tables for content planning. Each table row represents a content entry that progresses through statuses and bridges to Phase 1 briefs and Phase 2 signals.
38
+
39
+ **B. Frontmatter fields** with types, required/optional, and defaults:
40
+
41
+ | Field | Type | Required | Default | Description |
42
+ |-------|------|----------|---------|-------------|
43
+ | `calendar_id` | string | Yes | — | Format: `CAL-YYYY-MM` |
44
+ | `site_id` | string | Yes | — | Must match `.content-state/{site_id}.config.md` |
45
+ | `period` | string | Yes | — | Format: `YYYY-MM-DD..YYYY-MM-DD` (month boundaries) |
46
+ | `created` | ISO 8601 date | Yes | — | Date the calendar was first created |
47
+ | `last_updated` | ISO 8601 date | Yes | — | Auto-updated on each modification |
48
+ | `status` | enum | No | active | `active \| archived` |
49
+ | `goals.posts_target` | integer | Yes | — | Total posts planned for the month |
50
+ | `goals.posts_published` | integer | No | 0 | Counter updated by SYNC step |
51
+ | `goals.focus_topics` | string[] | No | [] | Topic clusters to prioritize |
52
+ | `goals.seo_targets` | object[] | No | [] | Each: `{keyword, target_position}` |
53
+
54
+ **C. Weekly table structure** — The body contains one `## Settimana N (date range)` section per week, each with a Markdown table:
55
+
56
+ | Column | Type | Description |
57
+ |--------|------|-------------|
58
+ | Data | date | Planned publication date (format: `Mon DD`) |
59
+ | Titolo | string | Content title, or `[da assegnare]` if not yet defined |
60
+ | Tipo | enum | `post \| page \| custom_type` |
61
+ | Status | enum | `planned \| draft \| ready \| scheduled \| published` |
62
+ | Brief ID | string | Reference to `.brief.md` file (format: `BRF-YYYY-NNN`), or `—` |
63
+ | Post ID | integer | WordPress post ID after creation, or `—` |
64
+ | Canali | string | Comma-separated distribution channels, or `—` |
65
+
66
+ **D. Entry status lifecycle:**
67
+
68
+ ```
69
+ planned → draft → ready → scheduled → published
70
+ ```
71
+
72
+ - `planned`: Slot reserved, title may be `[da assegnare]`
73
+ - `draft`: Title assigned, brief created in `pipeline-active/` with `status: draft`
74
+ - `ready`: Brief content finalized, `status: ready` in brief file
75
+ - `scheduled`: WordPress post created with `status: future` and scheduled date
76
+ - `published`: WordPress post is live (confirmed by SYNC step)
77
+
78
+ **E. Integration with Phase 1 (Content Pipeline):**
79
+ - Each calendar entry with a Brief ID references a file in `.content-state/pipeline-active/BRF-YYYY-NNN.brief.md`
80
+ - When BRIEF step creates a new brief, it uses the site config defaults from `.content-state/{site_id}.config.md`
81
+ - The brief's `target.scheduled_date` is set from the calendar entry's Data column
82
+ - The brief's `distribution.channels` is set from the calendar entry's Canali column
83
+ - When `wp-content-pipeline` archives a brief (status: published), the SYNC step updates the calendar entry accordingly
84
+
85
+ **F. Integration with Phase 2 (Signals Intelligence):**
86
+ - The PLAN step can read `.content-state/signals-feed.md` to suggest topics for `[da assegnare]` entries
87
+ - Anomalies from the signals feed with action "Investigate: content cluster opportunity" are prime candidates for planned entries
88
+ - The `goals.focus_topics` field can be informed by high-scoring signal patterns
89
+
90
+ **G. Notes section:**
91
+ - The body may end with a `# Note` section containing free-form editorial notes
92
+ - Common uses: newsletter aggregation rules, distribution timing preferences, topic dependencies on signals data
93
+
94
+ **H. File naming convention:**
95
+ - Format: `.content-state/{YYYY-MM}-editorial.state.md`
96
+ - One file per month per site (the `site_id` is in the frontmatter, not the filename)
97
+ - Previous months' calendars remain in `.content-state/` with `status: archived`
98
+ - Files are gitignored (site-specific instance data)
99
+
100
+ **I. Example calendar** — A complete, realistic example for opencactus March 2026 with:
101
+ - Frontmatter: calendar_id CAL-2026-03, 8 posts target, 2 published, focus topics, 2 SEO targets
102
+ - 4 weekly tables with mixed statuses (published, ready, draft, planned)
103
+ - `[da assegnare]` entries for weeks 3-4
104
+ - Notes section referencing signals-feed.md and newsletter/LinkedIn timing
105
+
106
+ Use the exact example from the architecture doc (section 3.2).
107
+
108
+ **J. Validation rules:**
109
+ - `calendar_id` must follow `CAL-YYYY-MM` format
110
+ - `site_id` must match an existing `.content-state/{site_id}.config.md`
111
+ - `period` must span exactly one calendar month
112
+ - Each table must have all 7 columns
113
+ - `Status` must be one of the 5 valid values
114
+ - `Brief ID` must follow `BRF-YYYY-NNN` format when present
115
+ - `Post ID` must be a positive integer when present
116
+ - `goals.posts_published` must not exceed `goals.posts_target`
117
+ - Entries with `status: scheduled` or `status: published` must have a Post ID
118
+
119
+ **Step 3: Verify file exists**
120
+
121
+ Run: `head -5 skills/wp-editorial-planner/references/editorial-schema.md`
122
+
123
+ Expected: `# Editorial Calendar Schema` header.
124
+
125
+ **Step 4: Commit**
126
+
127
+ ```bash
128
+ git add skills/wp-editorial-planner/
129
+ git commit -m "feat(editorial-calendar): add editorial calendar schema reference
130
+
131
+ Defines {YYYY-MM}-editorial.state.md structure with monthly goals,
132
+ weekly Markdown tables, 5-status lifecycle (planned → published),
133
+ and integration with Phase 1 briefs and Phase 2 signals feed."
134
+ ```
135
+
136
+ ---
137
+
138
+ ### Task 2: Create `wp-editorial-planner` SKILL.md
139
+
140
+ **Files:**
141
+ - Create: `skills/wp-editorial-planner/SKILL.md`
142
+
143
+ **Step 1: Write the skill definition**
144
+
145
+ Create `skills/wp-editorial-planner/SKILL.md` following the established pattern from `skills/wp-content-pipeline/SKILL.md` and `skills/wp-analytics/SKILL.md`.
146
+
147
+ **Header (frontmatter):**
148
+ ```yaml
149
+ ---
150
+ name: wp-editorial-planner
151
+ description: This skill should be used when the user asks to "create an editorial
152
+ plan", "update the calendar", "schedule posts", "plan content for March",
153
+ "convert calendar to briefs", "sync calendar with WordPress", "show editorial
154
+ status", or mentions planning content over time. Orchestrates monthly editorial
155
+ calendars that bridge signals intelligence to content publishing.
156
+ version: 1.0.0
157
+ ---
158
+ ```
159
+
160
+ **Sections to include:**
161
+
162
+ 1. **Overview** — One paragraph: the editorial planner manages monthly content calendars as `.state.md` files. It reads site config for cadence, optionally consumes signals feed for topic ideas, and produces briefs that flow into the content pipeline. Four-step workflow: PLAN → BRIEF → SCHEDULE → SYNC.
163
+
164
+ 2. **When to Use** — Bullet list:
165
+ - User wants to create a new monthly editorial plan
166
+ - User asks to update or view the current calendar
167
+ - User wants to convert planned entries into content briefs
168
+ - User asks to schedule ready briefs as WordPress future posts
169
+ - User wants to sync WordPress publish status back to the calendar
170
+ - User mentions "piano editoriale", "calendario", "schedula"
171
+
172
+ 3. **Workflow Overview:**
173
+ ```
174
+ PLAN → BRIEF → SCHEDULE → SYNC
175
+ ```
176
+
177
+ 4. **Step 1: PLAN — Create or update editorial calendar**
178
+
179
+ **When to run**: User asks to create a new plan or update existing one.
180
+
181
+ **Procedure:**
182
+ 1. Read `.content-state/{site_id}.config.md` for:
183
+ - `cadence.posts_per_week` → calculate `goals.posts_target` (posts_per_week × weeks in month)
184
+ - `cadence.preferred_days` → determine which days to assign entries
185
+ - `cadence.publish_time` → note for scheduling step
186
+ - `defaults.categories`, `defaults.content_type` → pre-fill entry Tipo
187
+ 2. Read `.content-state/signals-feed.md` if it exists:
188
+ - Extract anomalies with action containing "content cluster" or "Investigate"
189
+ - Suggest these as topics for `[da assegnare]` entries
190
+ - Present suggestions to user for approval
191
+ 3. Optionally: if user wants strategic planning, suggest invoking GenMarketing for content calendar strategy
192
+ 4. Generate or update `.content-state/{YYYY-MM}-editorial.state.md`:
193
+ - Create YAML frontmatter with calendar_id, site_id, period, goals
194
+ - Create weekly tables with one row per preferred_day
195
+ - Fill known titles, leave others as `[da assegnare]`
196
+ - Set all new entries as `status: planned`
197
+ 5. Present the calendar to user for review
198
+
199
+ **Safety rules:**
200
+ - ALWAYS show the generated calendar to user before writing
201
+ - If a calendar for the month already exists, show diff and ask before overwriting
202
+ - Preserve existing entries that have `status: draft` or higher (don't reset them to planned)
203
+
204
+ 5. **Step 2: BRIEF — Convert calendar entries to brief files**
205
+
206
+ **When to run**: User asks to "create briefs from calendar" or "convert planned entries to briefs".
207
+
208
+ **Procedure:**
209
+ 1. Read the current editorial calendar `.state.md`
210
+ 2. For each entry with `status: planned` AND a defined title (not `[da assegnare]`):
211
+ a. Generate a new `brief_id` as `BRF-YYYY-NNN` (sequential, check existing briefs)
212
+ b. Read `.content-state/{site_id}.config.md` for defaults
213
+ c. Create `.content-state/pipeline-active/{brief_id}.brief.md` with:
214
+ - `source.skill: wp-editorial-planner`
215
+ - `source.domain: editorial-calendar`
216
+ - `target.site_id`: from calendar
217
+ - `target.content_type`: from entry Tipo column
218
+ - `target.scheduled_date`: from entry Data column (convert to ISO 8601)
219
+ - `target.categories`: from site config defaults
220
+ - `distribution.channels`: from entry Canali column (parse comma-separated)
221
+ - `content.title`: from entry Titolo column
222
+ - `status: draft` (brief starts as draft, user fills content)
223
+ d. Update calendar entry: `status: planned → draft`, set Brief ID
224
+ 3. For entries with existing Brief ID (already has a brief): skip creation, just verify brief file exists
225
+ 4. Write updated calendar back to `.state.md`
226
+ 5. Report: "N brief creati in pipeline-active/. Compila il contenuto e imposta status: ready."
227
+
228
+ **Safety rules:**
229
+ - NEVER create briefs for entries with `[da assegnare]` title — report them as needing titles first
230
+ - NEVER overwrite existing brief files — if Brief ID already exists, skip and report
231
+ - Show summary of briefs to be created and ask user confirmation before writing
232
+
233
+ 6. **Step 3: SCHEDULE — Convert ready briefs to WordPress scheduled posts**
234
+
235
+ **When to run**: User asks to "schedule ready posts" or "schedula i post pronti".
236
+
237
+ **Procedure:**
238
+ 1. Read the current editorial calendar `.state.md`
239
+ 2. For each entry with `status: ready`:
240
+ a. Read the corresponding brief file from `pipeline-active/{brief_id}.brief.md`
241
+ b. Verify brief has `status: ready` (consistency check)
242
+ c. Create WordPress post:
243
+ ```
244
+ create_content:
245
+ content_type: {entry.Tipo}
246
+ title: {brief.content.title}
247
+ content: {brief body markdown}
248
+ excerpt: {brief.content.excerpt}
249
+ status: "future"
250
+ date: {entry.Data as ISO 8601 datetime with site config publish_time}
251
+ slug: {auto-generated from title}
252
+ ```
253
+ d. Assign taxonomy terms:
254
+ ```
255
+ assign_terms_to_content:
256
+ content_type: {entry.Tipo}
257
+ id: {post_id}
258
+ categories: {brief.target.categories}
259
+ tags: {brief.target.tags}
260
+ ```
261
+ e. Update calendar entry: `status: ready → scheduled`, set Post ID
262
+ f. Update brief: add `post_id` and `post_url` to frontmatter
263
+ 3. If entry has `distribution.channels` (from Canali column):
264
+ - Compute `scheduled_at` using the entry date + `config.cadence.publish_time` + `distribution.schedule_offset_hours`
265
+ - For Buffer: `buf_create_update` with `scheduled_at`
266
+ - For Mailchimp: note for manual campaign creation (not auto-scheduled)
267
+ 4. Write updated calendar back to `.state.md`
268
+ 5. Report: "N post schedulati su WordPress. Verranno pubblicati automaticamente alla data prevista."
269
+
270
+ **Safety rules:**
271
+ - ALWAYS create WP post as `status: future` (never directly `publish`)
272
+ - ALWAYS confirm with user before scheduling, showing the list of posts and dates
273
+ - If `create_content` fails → stop, report error, keep entry as `ready`
274
+ - Verify the scheduled date is in the future before calling `create_content`
275
+
276
+ 7. **Step 4: SYNC — Synchronize WordPress status back to calendar**
277
+
278
+ **When to run**: User asks to "sync calendar" or "aggiorna stato calendario".
279
+
280
+ **Procedure:**
281
+ 1. Read the current editorial calendar `.state.md`
282
+ 2. For each entry with a Post ID (status: scheduled or published):
283
+ a. Call `list_content` with content_type and filter by post ID:
284
+ ```
285
+ list_content:
286
+ content_type: {entry.Tipo}
287
+ search: {post_id}
288
+ per_page: 1
289
+ ```
290
+ b. Check the returned post status:
291
+ - If WP status = `publish` and calendar status = `scheduled` → update to `published`
292
+ - If WP status = `future` → keep as `scheduled`
293
+ - If WP status = `draft` → note: post was reverted, update calendar to `draft`
294
+ - If WP status = `trash` → note: post was deleted, report to user
295
+ 3. Recalculate `goals.posts_published` = count of entries with `status: published`
296
+ 4. Write updated calendar back to `.state.md`
297
+ 5. Report:
298
+ ```
299
+ Sync calendario {calendar_id}:
300
+ - Post pubblicati: {posts_published}/{posts_target}
301
+ - Post schedulati: {scheduled_count}
302
+ - Post in lavorazione: {draft_count + ready_count}
303
+ - Slot da assegnare: {planned_count}
304
+ ```
305
+
306
+ **Safety rules:**
307
+ - NEVER modify WordPress post status during sync — sync is read-only from WP
308
+ - If a post was deleted/trashed, report to user but don't remove the calendar entry (mark with a note)
309
+
310
+ 8. **Creating a Calendar Manually** — Quick procedure for users:
311
+ - Copy structure from schema reference example
312
+ - Fill in site_id, dates, and known titles
313
+ - Set `status: planned` for all entries
314
+ - Then run BRIEF step to generate brief files
315
+
316
+ 9. **Safety Rules Summary:**
317
+ - ALWAYS show calendar/briefs to user before writing
318
+ - ALWAYS create WP posts as `status: future` (never `publish` directly)
319
+ - NEVER overwrite existing briefs or calendar entries with higher status
320
+ - NEVER modify WP posts during SYNC (read-only)
321
+ - ALWAYS confirm before scheduling posts
322
+ - LOG all scheduling actions in the calendar
323
+
324
+ 10. **Reference Files:**
325
+ - `references/editorial-schema.md`
326
+ - `../wp-content-pipeline/references/content-brief-schema.md` (brief format)
327
+ - `../wp-content-pipeline/references/site-config-schema.md` (site defaults)
328
+ - `../wp-analytics/references/signals-feed-schema.md` (topic suggestions)
329
+
330
+ 11. **Related Skills:**
331
+ - `wp-content-pipeline` — publishes briefs created by the BRIEF step
332
+ - `wp-analytics` — generates signals feed consumed by the PLAN step
333
+ - `wp-content` — content creation and management (provides `create_content`, `list_content`)
334
+ - `wp-social-email` — distribution channel scheduling (Buffer, Mailchimp)
335
+ - `wp-content-repurposing` — multi-format adaptation for social distribution
336
+
337
+ **Step 2: Verify SKILL.md follows plugin conventions**
338
+
339
+ Run: `head -10 skills/wp-editorial-planner/SKILL.md`
340
+
341
+ Expected: YAML frontmatter with `name: wp-editorial-planner`.
342
+
343
+ **Step 3: Commit**
344
+
345
+ ```bash
346
+ git add skills/wp-editorial-planner/SKILL.md
347
+ git commit -m "feat(editorial-calendar): add wp-editorial-planner skill
348
+
349
+ Orchestrates monthly editorial calendars with 4-step workflow:
350
+ PLAN (create calendar from config + signals) → BRIEF (convert entries
351
+ to pipeline briefs) → SCHEDULE (create WP future posts) → SYNC
352
+ (bidirectional status update from WordPress)."
353
+ ```
354
+
355
+ ---
356
+
357
+ ### Task 3: Create Example Editorial Calendar Instance
358
+
359
+ **Files:**
360
+ - Create: `.content-state/2026-03-editorial.state.md`
361
+
362
+ **Step 1: Write a realistic test calendar**
363
+
364
+ Create `.content-state/2026-03-editorial.state.md` with the exact example from the architecture doc (section 3.2):
365
+
366
+ - Frontmatter: calendar_id CAL-2026-03, site_id opencactus, period 2026-03-01..2026-03-31, 8 posts target, 2 published, focus topics, 2 SEO targets
367
+ - 4 weekly tables with realistic opencactus content:
368
+ - Week 1: 2 published entries with brief IDs and post IDs
369
+ - Week 2: 1 ready + 1 draft entry with brief IDs
370
+ - Week 3: 2 planned entries with `[da assegnare]`
371
+ - Week 4: 2 planned entries with `[da assegnare]`
372
+ - Notes section: signals-feed reference for weeks 3-4, newsletter timing, LinkedIn timing
373
+
374
+ **Step 2: Verify calendar structure**
375
+
376
+ Run: `head -15 .content-state/2026-03-editorial.state.md`
377
+
378
+ Expected: YAML frontmatter with `calendar_id: "CAL-2026-03"` and `status: active`.
379
+
380
+ **Step 3: No commit** — this file is gitignored (instance data).
381
+
382
+ ---
383
+
384
+ ### Task 4: Update Architecture Doc Status
385
+
386
+ **Files:**
387
+ - Modify: `docs/plans/2026-03-02-content-framework-architecture.md`
388
+
389
+ **Step 1: Update status and checklist**
390
+
391
+ - Change `**Stato**: Fase 2 Implementata` to `**Stato**: Fase 3 Implementata`
392
+ - Check off Phase 3 acceptance criteria:
393
+ ```markdown
394
+ ### Fase 3: Editorial Calendar
395
+
396
+ - [x] `editorial.schema.md` definito con tabelle settimanali
397
+ - [x] `wp-editorial-planner` skill creata con 4 workflow steps
398
+ - [x] Conversione calendar entry → brief automatica
399
+ - [x] Scheduling WP post con status=future funzionante
400
+ - [ ] Sync bidirezionale: WP publish status → calendar update
401
+ ```
402
+
403
+ Note: "Sync bidirezionale" left unchecked — requires a live WP test with actual scheduled/published posts, same as previous phases' e2e tests.
404
+
405
+ **Step 2: Commit**
406
+
407
+ ```bash
408
+ git add docs/plans/2026-03-02-content-framework-architecture.md
409
+ git commit -m "docs: update architecture status — Phase 3 implemented
410
+
411
+ Editorial calendar schema, wp-editorial-planner skill with 4-step
412
+ workflow (PLAN → BRIEF → SCHEDULE → SYNC) in place. Live sync test
413
+ pending."
414
+ ```
415
+
416
+ ---
417
+
418
+ ### Task 5: Update GUIDE.md with Phase 3 Documentation
419
+
420
+ **Files:**
421
+ - Modify: `docs/GUIDE.md`
422
+
423
+ **Step 1: Read current Content Framework section**
424
+
425
+ Find the last subsection in the Content Framework section (should be 17.5 from Phase 2).
426
+
427
+ **Step 2: Add Editorial Calendar subsection**
428
+
429
+ After the Phase 2 subsection, add:
430
+
431
+ ```markdown
432
+ ### 17.6 Editorial Calendar (Phase 3)
433
+
434
+ **Skill**: `wp-editorial-planner`
435
+
436
+ The editorial planner manages monthly content calendars as `.state.md` files, bridging strategic planning to tactical execution.
437
+
438
+ **Workflow**: `PLAN → BRIEF → SCHEDULE → SYNC`
439
+
440
+ | Step | Action | Input | Output |
441
+ |------|--------|-------|--------|
442
+ | PLAN | Create monthly calendar | site config + signals feed | `{YYYY-MM}-editorial.state.md` |
443
+ | BRIEF | Convert entries to briefs | calendar entries | `pipeline-active/BRF-*.brief.md` |
444
+ | SCHEDULE | Create WP future posts | ready briefs | WordPress posts with `status: future` |
445
+ | SYNC | Update calendar from WP | WordPress post status | Updated calendar entries |
446
+
447
+ **Calendar structure**:
448
+ - One `.content-state/{YYYY-MM}-editorial.state.md` per month
449
+ - YAML frontmatter: monthly goals, posts target, focus topics, SEO targets
450
+ - Markdown tables: one per week with columns Data, Titolo, Tipo, Status, Brief ID, Post ID, Canali
451
+
452
+ **Entry lifecycle**: `planned → draft → ready → scheduled → published`
453
+
454
+ **Cross-phase integration**:
455
+ - Phase 2 signals → topic suggestions for `[da assegnare]` entries
456
+ - Calendar entries → Phase 1 briefs → WordPress publishing pipeline
457
+ ```
458
+
459
+ **Step 3: Commit**
460
+
461
+ ```bash
462
+ git add docs/GUIDE.md
463
+ git commit -m "docs: add Editorial Calendar (Phase 3) section to GUIDE.md
464
+
465
+ Documents the 4-step editorial planning workflow, calendar structure,
466
+ entry lifecycle, and cross-phase integration with signals and pipeline."
467
+ ```
468
+
469
+ ---
470
+
471
+ ## Summary
472
+
473
+ | Task | Deliverable | Type |
474
+ |------|-------------|------|
475
+ | 1 | `editorial-schema.md` | Schema reference |
476
+ | 2 | `wp-editorial-planner/SKILL.md` | Core skill (new) |
477
+ | 3 | `2026-03-editorial.state.md` | Test artifact (gitignored) |
478
+ | 4 | Architecture doc status update | Documentation |
479
+ | 5 | GUIDE.md Editorial Calendar section | Documentation |
480
+
481
+ **Total new files**: 2 tracked + 1 gitignored instance
482
+ **Total modified files**: 2 (architecture doc, GUIDE.md)
483
+ **New TypeScript**: 0
484
+
485
+ **Acceptance Criteria (from architecture doc):**
486
+ - [x] `editorial.schema.md` defined with weekly tables → Task 1
487
+ - [x] `wp-editorial-planner` skill with 4 workflow steps → Task 2
488
+ - [x] Calendar entry → brief automatic conversion → Task 2 (Step 2: BRIEF)
489
+ - [x] WP scheduling with status=future → Task 2 (Step 3: SCHEDULE)
490
+ - [ ] Bidirectional sync: WP publish status → calendar update → Manual test (post-implementation)
File without changes