claude-plugin-wordpress-manager 2.13.0 → 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.
- package/CHANGELOG.md +43 -6
- package/agents/wp-accessibility-auditor.md +1 -1
- package/agents/wp-content-strategist.md +2 -2
- package/agents/wp-deployment-engineer.md +1 -1
- package/agents/wp-distribution-manager.md +1 -1
- package/agents/wp-monitoring-agent.md +1 -1
- package/agents/wp-performance-optimizer.md +1 -1
- package/agents/wp-security-auditor.md +1 -1
- package/agents/wp-site-manager.md +3 -3
- package/commands/wp-setup.md +2 -2
- package/docs/GUIDE.md +26 -26
- package/docs/VALIDATION.md +3 -3
- package/docs/guides/wp-ecommerce.md +4 -4
- package/docs/plans/2026-03-01-tier3-wcop-implementation.md +1 -1
- package/docs/plans/2026-03-01-tier4-5-implementation.md +1 -1
- package/docs/plans/2026-03-02-content-framework-architecture.md +33 -33
- package/docs/plans/2026-03-02-content-framework-strategic-reflections.md +1 -1
- package/docs/plans/2026-03-02-content-intelligence-phase2.md +13 -13
- package/docs/plans/2026-03-02-content-pipeline-phase1.md +10 -10
- package/docs/plans/2026-03-02-dashboard-kanban-design.md +761 -0
- package/docs/plans/2026-03-02-dashboard-kanban-implementation.md +598 -0
- package/docs/plans/2026-03-02-dashboard-strategy.md +363 -0
- package/docs/plans/2026-03-02-editorial-calendar-phase3.md +3 -3
- package/docs/validation/results.json +16 -16
- package/package.json +8 -4
- package/scripts/context-scanner.mjs +446 -0
- package/scripts/dashboard-renderer.mjs +553 -0
- package/scripts/run-validation.mjs +2 -2
- package/servers/wp-rest-bridge/build/server.js +1 -1
- package/skills/wp-analytics/references/signals-feed-schema.md +20 -20
- package/skills/wp-content/references/content-templates.md +1 -1
- package/skills/wp-content/references/seo-optimization.md +8 -8
- package/skills/wp-content-attribution/references/roi-calculation.md +1 -1
- package/skills/wp-content-attribution/references/utm-tracking-setup.md +5 -5
- package/skills/wp-content-generation/references/generation-workflow.md +2 -2
- package/skills/wp-content-pipeline/SKILL.md +7 -7
- package/skills/wp-content-pipeline/references/content-brief-schema.md +25 -25
- package/skills/wp-content-pipeline/references/site-config-schema.md +25 -25
- package/skills/wp-content-repurposing/references/auto-transform-pipeline.md +1 -1
- package/skills/wp-content-repurposing/references/email-newsletter.md +1 -1
- package/skills/wp-content-repurposing/references/platform-specs.md +2 -2
- package/skills/wp-content-repurposing/references/transform-templates.md +27 -27
- package/skills/wp-dashboard/SKILL.md +121 -0
- package/skills/wp-deploy/references/ssh-deploy.md +2 -2
- package/skills/wp-editorial-planner/references/editorial-schema.md +8 -8
- package/skills/wp-multilang-network/references/content-sync.md +3 -3
- package/skills/wp-multilang-network/references/network-architecture.md +1 -1
- package/skills/wp-multilang-network/references/seo-international.md +7 -7
- package/skills/wp-structured-data/references/schema-types.md +4 -4
- package/skills/wp-webhooks/references/payload-formats.md +3 -3
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
# Dashboard Operativi — Strategia e Architettura
|
|
2
|
+
|
|
3
|
+
**Data**: 2026-03-02
|
|
4
|
+
**Versione**: 1.0.0
|
|
5
|
+
**Stato**: Approvato (strategia)
|
|
6
|
+
**Prerequisito**: [Content Framework Architecture](2026-03-02-content-framework-architecture.md)
|
|
7
|
+
**Deriva da**: Brainstorming sessione 2026-03-02 (post Content Framework v2.13.0)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 1. Contesto e Motivazione
|
|
12
|
+
|
|
13
|
+
### 1.1 Stato Attuale
|
|
14
|
+
|
|
15
|
+
Con il Content Framework v2.13.0 il plugin gestisce un ciclo completo:
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
GenSignal (intelligence) → Editorial Calendar (planning) → Content Pipeline (execution) → WP Publish → Analytics → GenSignal (feedback loop)
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
I dati operativi vivono in file `.content-state/`:
|
|
22
|
+
|
|
23
|
+
| File | Contiene | Aggiornamento |
|
|
24
|
+
|------|----------|---------------|
|
|
25
|
+
| `{site}.config.md` | Brand voice, canali, cadenza, defaults | Raro (setup) |
|
|
26
|
+
| `YYYY-MM-editorial.state.md` | Piano editoriale con stati per riga | Ogni sessione operativa |
|
|
27
|
+
| `pipeline-active/*.brief.md` | Brief in lavorazione con frontmatter YAML | Durante pipeline |
|
|
28
|
+
| `signals-feed.md` | Metriche normalizzate + anomalie | Periodico (settimanale) |
|
|
29
|
+
|
|
30
|
+
**Problema**: questi file sono leggibili da Claude ma non *visualizzabili* dall'operatore umano. L'operatore deve leggere YAML e tabelle Markdown per capire "dove siamo" prima di decidere "cosa fare".
|
|
31
|
+
|
|
32
|
+
### 1.2 Bisogno Identificato
|
|
33
|
+
|
|
34
|
+
L'operatore umano ha bisogno di **vedere a bocce ferme** — cioè avere una rappresentazione visiva dello stato operativo prima di iniziare una sessione di lavoro. Questo contesto visivo permette:
|
|
35
|
+
|
|
36
|
+
- **Decisioni informate**: quale brief lavorare, quale post schedulare
|
|
37
|
+
- **Pattern recognition**: colli di bottiglia, gap nel calendario, anomalie
|
|
38
|
+
- **Comunicazione**: condividere lo stato con stakeholder non tecnici
|
|
39
|
+
|
|
40
|
+
### 1.3 Evoluzione del Pensiero
|
|
41
|
+
|
|
42
|
+
Nel documento [Strategic Reflections](2026-03-02-content-framework-strategic-reflections.md), sezione 6, "Dashboard React/HTML per stato" era elencato come **anti-pattern** con motivazione:
|
|
43
|
+
|
|
44
|
+
> "Appesantisce il plugin con frontend code"
|
|
45
|
+
|
|
46
|
+
Questa valutazione resta valida per un **dashboard-app** (SPA React, stato persistente, API backend). Tuttavia il brainstorming del 2026-03-02 ha identificato una forma diversa:
|
|
47
|
+
|
|
48
|
+
| Caratteristica | Dashboard-App (anti-pattern) | Dashboard-Report (approccio adottato) |
|
|
49
|
+
|---------------|------------------------------|---------------------------------------|
|
|
50
|
+
| Natura | Applicazione web interattiva | File HTML statico generato on-demand |
|
|
51
|
+
| Stato | Mantiene stato proprio | Legge stato da `.content-state/` |
|
|
52
|
+
| Aggiornamento | Real-time / polling | Ri-generato ad ogni invocazione |
|
|
53
|
+
| Dipendenze | Framework JS, API, build system | Zero (HTML + CSS inline) |
|
|
54
|
+
| Durata | Persistente | Effimero (usa e getta) |
|
|
55
|
+
| Complessità | Alta (manutenzione continua) | Bassa (template string) |
|
|
56
|
+
|
|
57
|
+
**Principio rivisto**: un **report HTML statico generato on-demand** non è un dashboard-app. È un **artefatto di visualizzazione effimero** — equivalente a un `console.log` evoluto aperto nel browser.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 2. Architettura: Approccio Ibrido
|
|
62
|
+
|
|
63
|
+
### 2.1 Due Livelli di Contesto
|
|
64
|
+
|
|
65
|
+
Il brainstorming ha converguto su un approccio a due livelli che serve bisogni diversi:
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
69
|
+
│ LIVELLO 1: VISIONE STRATEGICA │
|
|
70
|
+
│ │
|
|
71
|
+
│ Skill dedicata: wp-dashboard │
|
|
72
|
+
│ Output: HTML statico → browser │
|
|
73
|
+
│ Trigger: su richiesta dell'operatore │
|
|
74
|
+
│ Contenuto: vista completa, multi-dimensione │
|
|
75
|
+
│ Uso: prima di una sessione di planning/review │
|
|
76
|
+
│ │
|
|
77
|
+
│ "Mostrami dove siamo" │
|
|
78
|
+
└─────────────────────────────────────────────────────────────┘
|
|
79
|
+
|
|
80
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
81
|
+
│ LIVELLO 2: CONTESTO OPERATIVO │
|
|
82
|
+
│ │
|
|
83
|
+
│ Step 0 inline nelle content skill │
|
|
84
|
+
│ Output: testo terminale (3-5 righe) │
|
|
85
|
+
│ Trigger: automatico, ogni invocazione skill │
|
|
86
|
+
│ Contenuto: solo lo slice rilevante per la skill attiva │
|
|
87
|
+
│ Uso: prima di ogni operazione content │
|
|
88
|
+
│ │
|
|
89
|
+
│ "Ecco cosa sto per toccare" │
|
|
90
|
+
└─────────────────────────────────────────────────────────────┘
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### 2.2 Perché Due Livelli
|
|
94
|
+
|
|
95
|
+
| Criterio | Solo Livello 1 | Solo Livello 2 | Ibrido |
|
|
96
|
+
|----------|---------------|---------------|---------|
|
|
97
|
+
| Contesto prima di operare | Richiede azione esplicita | Automatico | Automatico |
|
|
98
|
+
| Visione d'insieme | Completa | Parziale (solo slice) | Completa su richiesta |
|
|
99
|
+
| Overhead per skill | Zero | Minimo (3-5 righe) | Minimo |
|
|
100
|
+
| Condivisibilità | HTML → browser → screenshot | Solo terminale | HTML per stakeholder |
|
|
101
|
+
| Scalabilità multi-sito | Dashboard multi-tab | Snippet per sito attivo | Entrambi |
|
|
102
|
+
|
|
103
|
+
### 2.3 Principio di Separazione
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
shared/context-scanner.mjs ← SCAN + AGGREGATE (modulo condiviso)
|
|
107
|
+
│
|
|
108
|
+
├── wp-dashboard/ ← RENDER → HTML (Livello 1)
|
|
109
|
+
│ Skill dedicata, template HTML, apre browser
|
|
110
|
+
│
|
|
111
|
+
└── step 0 nelle skill ← RENDER → terminal text (Livello 2)
|
|
112
|
+
Funzione importata, output compatto
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
La logica di **lettura e aggregazione** dei file `.content-state/` è scritta una volta sola. Solo il rendering cambia.
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## 3. Pattern: SCAN → AGGREGATE → RENDER
|
|
120
|
+
|
|
121
|
+
### 3.1 SCAN
|
|
122
|
+
|
|
123
|
+
Lettura dei file `.content-state/` con parsing del frontmatter YAML:
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
Input:
|
|
127
|
+
.content-state/
|
|
128
|
+
├── mysite.config.md → brand, canali, cadenza
|
|
129
|
+
├── 2026-03-editorial.state.md → piano editoriale corrente
|
|
130
|
+
├── pipeline-active/ → brief in lavorazione
|
|
131
|
+
│ └── BRF-2026-005.brief.md
|
|
132
|
+
├── pipeline-archive/ → brief completati
|
|
133
|
+
└── signals-feed.md → metriche + anomalie
|
|
134
|
+
|
|
135
|
+
Output: oggetto JavaScript con tutti i dati strutturati
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### 3.2 AGGREGATE
|
|
139
|
+
|
|
140
|
+
Calcolo di metriche derivate:
|
|
141
|
+
|
|
142
|
+
| Metrica | Formula | Sorgente |
|
|
143
|
+
|---------|---------|----------|
|
|
144
|
+
| Pipeline velocity | brief `ready` / brief totali | editorial.state.md |
|
|
145
|
+
| Calendar fill rate | slot assegnati / slot totali | editorial.state.md |
|
|
146
|
+
| Content health | media(seo_score, readability) per brief | pipeline-active/*.brief.md |
|
|
147
|
+
| Signal intensity | count(anomalie > threshold) | signals-feed.md |
|
|
148
|
+
| Channel coverage | canali attivi / canali configurati | {site}.config.md |
|
|
149
|
+
|
|
150
|
+
### 3.3 RENDER
|
|
151
|
+
|
|
152
|
+
Due renderer dallo stesso dataset aggregato:
|
|
153
|
+
|
|
154
|
+
**Renderer HTML (Livello 1)**:
|
|
155
|
+
- Kanban board con colonne stato (planned → draft → ready → scheduled → published)
|
|
156
|
+
- Card per ogni contenuto con titolo, data, canali, brief ID
|
|
157
|
+
- Barra laterale con metriche aggregate
|
|
158
|
+
- Sezione anomalie/segnali da signals-feed
|
|
159
|
+
- Self-contained: zero dipendenze esterne (CSS inline, no JS framework)
|
|
160
|
+
|
|
161
|
+
**Renderer Terminal (Livello 2)**:
|
|
162
|
+
- 3-5 righe di testo formattato
|
|
163
|
+
- Solo lo slice rilevante per la skill corrente
|
|
164
|
+
- Esempio per `wp-content-pipeline`:
|
|
165
|
+
```
|
|
166
|
+
── Editorial Context ──────────────────────
|
|
167
|
+
mysite.example.com | Mar 2026
|
|
168
|
+
Pipeline: 2 draft → 1 ready → 0 scheduled
|
|
169
|
+
Next deadline: Mar 18 — "Acqua premium..."
|
|
170
|
+
Briefs attivi: BRF-2026-005
|
|
171
|
+
───────────────────────────────────────────
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## 4. Tipi di Vista Dashboard
|
|
177
|
+
|
|
178
|
+
### 4.1 Roadmap delle Viste
|
|
179
|
+
|
|
180
|
+
| Priorità | Vista | Oggetto Primario | Dimensioni |
|
|
181
|
+
|----------|-------|------------------|------------|
|
|
182
|
+
| **P0** | Editorial Kanban | Content (brief/post) | stato × tempo |
|
|
183
|
+
| P1 | Signal Radar | Anomalie/pattern | intensità × tipo |
|
|
184
|
+
| P2 | Distribution Calendar | Canali social/email | canale × data |
|
|
185
|
+
| P3 | Site Health | Metriche tecniche | CWV, uptime, security |
|
|
186
|
+
|
|
187
|
+
**Scope iniziale**: solo P0 (Editorial Kanban). Gli altri seguono se il pattern funziona.
|
|
188
|
+
|
|
189
|
+
### 4.2 Pattern Replicabile
|
|
190
|
+
|
|
191
|
+
Ogni vista segue lo stesso contratto:
|
|
192
|
+
|
|
193
|
+
```javascript
|
|
194
|
+
// Interfaccia concettuale (non codice — guida per l'implementazione)
|
|
195
|
+
{
|
|
196
|
+
scan(contentStatePath, siteId) → rawData,
|
|
197
|
+
aggregate(rawData, viewType) → metrics,
|
|
198
|
+
renderHTML(metrics, template) → htmlString,
|
|
199
|
+
renderTerminal(metrics, sliceType) → terminalString
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Le dimensioni per cui il pattern si replica:
|
|
204
|
+
|
|
205
|
+
| Dimensione | Esempio | Impatto su SCAN |
|
|
206
|
+
|------------|---------|-----------------|
|
|
207
|
+
| **Per sito** | mysite, othersite | Filtro su `site_id` nei file `.content-state/` |
|
|
208
|
+
| **Per tipo tool** | content, analytics, social | Filtro su tipo di dato nel dataset |
|
|
209
|
+
| **Per obiettivo** | awareness, conversion, retention | Filtro su categorie/tag nel editorial plan |
|
|
210
|
+
| **Per timeframe** | settimana, mese, quarter | Filtro temporale su date nel calendar |
|
|
211
|
+
|
|
212
|
+
### 4.3 Index File (Ottimizzazione Futura)
|
|
213
|
+
|
|
214
|
+
A basso volume (1-2 siti, < 20 brief/mese) lo scan diretto dei file è sufficiente. Per scaling:
|
|
215
|
+
|
|
216
|
+
```yaml
|
|
217
|
+
# .content-state/index.yml (auto-generato, gitignored)
|
|
218
|
+
sites:
|
|
219
|
+
- id: mysite
|
|
220
|
+
config: mysite.config.md
|
|
221
|
+
calendar: 2026-03-editorial.state.md
|
|
222
|
+
active_briefs: 1
|
|
223
|
+
published_this_month: 2
|
|
224
|
+
signals_last_updated: "2026-03-01T09:00:00Z"
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
L'index è un **cache file**, non una sorgente primaria. Si rigenera leggendo i file MD.
|
|
228
|
+
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## 5. Vincoli Architetturali
|
|
232
|
+
|
|
233
|
+
### 5.1 Allineamento con Principi Esistenti
|
|
234
|
+
|
|
235
|
+
| Principio (da Strategic Reflections) | Applicazione Dashboard |
|
|
236
|
+
|--------------------------------------|----------------------|
|
|
237
|
+
| "Non creare sovrastrutture" | HTML statico, zero framework, zero stato proprio |
|
|
238
|
+
| "File MD come configuration layer" | Lo SCAN legge gli stessi file `.content-state/` |
|
|
239
|
+
| "Zero nuovi MCP tool TypeScript" | Il renderer è uno script Node.js standalone |
|
|
240
|
+
| "Claude = orchestratore naturale" | Claude invoca la skill, il renderer produce l'HTML |
|
|
241
|
+
| "Reversible" | Rimuovere = cancellare la skill + lo script |
|
|
242
|
+
|
|
243
|
+
### 5.2 Vincoli Tecnici
|
|
244
|
+
|
|
245
|
+
| Vincolo | Motivazione |
|
|
246
|
+
|---------|-------------|
|
|
247
|
+
| HTML self-contained | Nessuna dipendenza CDN, offline-first |
|
|
248
|
+
| CSS inline | Un solo file `.html` da aprire |
|
|
249
|
+
| Zero JavaScript interattivo | Report statico, non app |
|
|
250
|
+
| Dimensione < 50 KB | Rendering istantaneo |
|
|
251
|
+
| `open` command per launch | Cross-platform (Linux xdg-open, macOS open) |
|
|
252
|
+
|
|
253
|
+
### 5.3 Dove NON Andare
|
|
254
|
+
|
|
255
|
+
| Tentazione | Perché No |
|
|
256
|
+
|------------|-----------|
|
|
257
|
+
| Framework CSS (Tailwind, Bootstrap) | Over-engineering per un report statico |
|
|
258
|
+
| Chart.js / D3 | Complessità sproporzionata; se servono grafici, si valuta dopo |
|
|
259
|
+
| WebSocket per live update | Anti-pattern: il report si rigenera, non si aggiorna |
|
|
260
|
+
| Template engine (EJS, Handlebars) | Template literal ES6 è sufficiente |
|
|
261
|
+
| Multi-page HTML | Un file, una vista, un `open` |
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## 6. Roadmap Implementativa
|
|
266
|
+
|
|
267
|
+
### Fase A: Editorial Kanban Dashboard (wp-dashboard skill)
|
|
268
|
+
|
|
269
|
+
**Obiettivo**: Prima vista HTML funzionante con Kanban editoriale.
|
|
270
|
+
|
|
271
|
+
**Deliverable**:
|
|
272
|
+
- Skill `wp-dashboard/` con `SKILL.md`
|
|
273
|
+
- Script `scripts/dashboard-renderer.mjs` (SCAN + AGGREGATE + RENDER HTML)
|
|
274
|
+
- Template HTML inline nel renderer
|
|
275
|
+
- Comando `open` per aprire nel browser
|
|
276
|
+
|
|
277
|
+
**Documenti operativi derivati**:
|
|
278
|
+
- `docs/plans/2026-03-02-dashboard-kanban-design.md` — Design document
|
|
279
|
+
- `docs/plans/2026-03-02-dashboard-kanban-implementation.md` — Implementation plan
|
|
280
|
+
|
|
281
|
+
### Fase B: Context Snippet (Step 0 nelle Content Skill)
|
|
282
|
+
|
|
283
|
+
**Obiettivo**: Ogni content skill stampa 3-5 righe di contesto operativo.
|
|
284
|
+
|
|
285
|
+
**Deliverable**:
|
|
286
|
+
- Funzione `renderContextSnippet()` in `scripts/context-scanner.mjs`
|
|
287
|
+
- Integrazione in `wp-content-pipeline/SKILL.md` e `wp-editorial-planner/SKILL.md`
|
|
288
|
+
- Documentazione pattern per future skill
|
|
289
|
+
|
|
290
|
+
**Prerequisito**: Fase A completata (la logica SCAN+AGGREGATE è scritta lì, Fase B la riusa).
|
|
291
|
+
|
|
292
|
+
**Documenti operativi derivati**:
|
|
293
|
+
- `docs/plans/2026-03-02-context-snippet-design.md` — Design document
|
|
294
|
+
|
|
295
|
+
### Fase C: Viste Aggiuntive (se pattern validato)
|
|
296
|
+
|
|
297
|
+
**Trigger**: dopo 2+ settimane di uso reale del Kanban dashboard.
|
|
298
|
+
|
|
299
|
+
**Candidati**:
|
|
300
|
+
1. Signal Radar — se `signals-feed.md` viene usato regolarmente
|
|
301
|
+
2. Distribution Calendar — se multi-channel posting è attivo
|
|
302
|
+
3. Site Health — se monitoring è attivo
|
|
303
|
+
|
|
304
|
+
**Documenti operativi derivati**: uno per vista, solo se/quando necessario.
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
## 7. Criteri di Successo
|
|
309
|
+
|
|
310
|
+
| Criterio | Metrica | Fase |
|
|
311
|
+
|----------|---------|------|
|
|
312
|
+
| **Tempo di generazione** | < 2 secondi da invocazione a browser aperto | A |
|
|
313
|
+
| **Self-contained** | Un singolo file `.html`, zero dipendenze | A |
|
|
314
|
+
| **Leggibilità** | Operatore capisce lo stato in < 10 secondi | A |
|
|
315
|
+
| **Condivisibilità** | Screenshot del Kanban usabile in comunicazione | A |
|
|
316
|
+
| **Overhead skill** | Step 0 aggiunge < 500ms alla skill | B |
|
|
317
|
+
| **Zero manutenzione** | Nessun aggiornamento necessario se i file MD non cambiano schema | A, B |
|
|
318
|
+
| **WCOP preserved** | Score WCOP ≥ 9.2/10 dopo implementazione | A, B |
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## 8. Impatto sul Plugin
|
|
323
|
+
|
|
324
|
+
### 8.1 Nuovi File
|
|
325
|
+
|
|
326
|
+
| File | Tipo | Fase |
|
|
327
|
+
|------|------|------|
|
|
328
|
+
| `skills/wp-dashboard/SKILL.md` | Skill definition | A |
|
|
329
|
+
| `scripts/dashboard-renderer.mjs` | Node.js script | A |
|
|
330
|
+
| `scripts/context-scanner.mjs` | Shared module (SCAN + AGGREGATE) | A (usato da B) |
|
|
331
|
+
|
|
332
|
+
### 8.2 File Modificati
|
|
333
|
+
|
|
334
|
+
| File | Modifica | Fase |
|
|
335
|
+
|------|----------|------|
|
|
336
|
+
| `skills/wp-content-pipeline/SKILL.md` | Aggiunta step 0 context snippet | B |
|
|
337
|
+
| `skills/wp-editorial-planner/SKILL.md` | Aggiunta step 0 context snippet | B |
|
|
338
|
+
| `package.json` | Bump versione, aggiornamento descrizione | A |
|
|
339
|
+
| `.claude-plugin/plugin.json` | Bump versione, keyword `dashboard` | A |
|
|
340
|
+
| `CHANGELOG.md` | Entry per dashboard | A |
|
|
341
|
+
| `docs/GUIDE.md` | Skill count update | A |
|
|
342
|
+
|
|
343
|
+
### 8.3 Version Bump
|
|
344
|
+
|
|
345
|
+
- Dashboard Kanban (Fase A): `v2.13.0` → `v2.14.0` (minor — nuova capability)
|
|
346
|
+
- Context Snippet (Fase B): `v2.14.0` → `v2.14.1` (patch — enhancement interno)
|
|
347
|
+
|
|
348
|
+
---
|
|
349
|
+
|
|
350
|
+
## 9. Catena Documentale
|
|
351
|
+
|
|
352
|
+
```
|
|
353
|
+
docs/plans/2026-03-02-content-framework-strategic-reflections.md
|
|
354
|
+
└── docs/plans/2026-03-02-content-framework-architecture.md
|
|
355
|
+
└── docs/plans/2026-03-02-dashboard-strategy.md ← QUESTO DOCUMENTO
|
|
356
|
+
├── docs/plans/2026-03-02-dashboard-kanban-design.md (prossimo)
|
|
357
|
+
│ └── docs/plans/2026-03-02-dashboard-kanban-implementation.md
|
|
358
|
+
└── docs/plans/2026-03-02-context-snippet-design.md (dopo Fase A)
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
*Documento strategico per l'evoluzione del WordPress Manager Plugin con dashboard operativi. Deriva dal brainstorming post-Content Framework v2.13.0.*
|
|
@@ -97,7 +97,7 @@ planned → draft → ready → scheduled → published
|
|
|
97
97
|
- Previous months' calendars remain in `.content-state/` with `status: archived`
|
|
98
98
|
- Files are gitignored (site-specific instance data)
|
|
99
99
|
|
|
100
|
-
**I. Example calendar** — A complete, realistic example for
|
|
100
|
+
**I. Example calendar** — A complete, realistic example for mysite March 2026 with:
|
|
101
101
|
- Frontmatter: calendar_id CAL-2026-03, 8 posts target, 2 published, focus topics, 2 SEO targets
|
|
102
102
|
- 4 weekly tables with mixed statuses (published, ready, draft, planned)
|
|
103
103
|
- `[da assegnare]` entries for weeks 3-4
|
|
@@ -363,8 +363,8 @@ to pipeline briefs) → SCHEDULE (create WP future posts) → SYNC
|
|
|
363
363
|
|
|
364
364
|
Create `.content-state/2026-03-editorial.state.md` with the exact example from the architecture doc (section 3.2):
|
|
365
365
|
|
|
366
|
-
- Frontmatter: calendar_id CAL-2026-03, site_id
|
|
367
|
-
- 4 weekly tables with realistic
|
|
366
|
+
- Frontmatter: calendar_id CAL-2026-03, site_id mysite, period 2026-03-01..2026-03-31, 8 posts target, 2 published, focus topics, 2 SEO targets
|
|
367
|
+
- 4 weekly tables with realistic mysite content:
|
|
368
368
|
- Week 1: 2 published entries with brief IDs and post IDs
|
|
369
369
|
- Week 2: 1 ready + 1 draft entry with brief IDs
|
|
370
370
|
- Week 3: 2 planned entries with `[da assegnare]`
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"meta": {
|
|
3
3
|
"generated_at": "2026-03-01T21:15:22.960Z",
|
|
4
|
-
"active_site": "
|
|
4
|
+
"active_site": "mysite",
|
|
5
5
|
"total_tools_registered": 148,
|
|
6
6
|
"total_tools_on_server": 135,
|
|
7
7
|
"runner_version": "1.2.0"
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
},
|
|
13
13
|
"woocommerce": {
|
|
14
14
|
"configured": false,
|
|
15
|
-
"reason": "Error listing products: WooCommerce not configured for site \"
|
|
15
|
+
"reason": "Error listing products: WooCommerce not configured for site \"mysite\". Add wc_consumer_key and wc..."
|
|
16
16
|
},
|
|
17
17
|
"multisite": {
|
|
18
18
|
"configured": false,
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"status": "passed",
|
|
70
70
|
"tested_at": "2026-03-01T21:15:11.438Z",
|
|
71
71
|
"duration_ms": 388,
|
|
72
|
-
"response_preview": "[ { \"id\": 2348, \"date\": \"2025-08-27T13:44:38\", \"date_gmt\": \"2025-08-27T13:44:38\", \"guid\": { \"rendered\": \"https://
|
|
72
|
+
"response_preview": "[ { \"id\": 2348, \"date\": \"2025-08-27T13:44:38\", \"date_gmt\": \"2025-08-27T13:44:38\", \"guid\": { \"rendered\": \"https://mysite.example.com/mysite-la-piattaforma-che-trasforma-linnovaz...",
|
|
73
73
|
"error_message": null,
|
|
74
74
|
"skip_reason": null
|
|
75
75
|
},
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"status": "passed",
|
|
80
80
|
"tested_at": "2026-03-01T21:15:11.941Z",
|
|
81
81
|
"duration_ms": 402,
|
|
82
|
-
"response_preview": "{ \"id\": 2348, \"date\": \"2025-08-27T13:44:38\", \"date_gmt\": \"2025-08-27T13:44:38\", \"guid\": { \"rendered\": \"https://
|
|
82
|
+
"response_preview": "{ \"id\": 2348, \"date\": \"2025-08-27T13:44:38\", \"date_gmt\": \"2025-08-27T13:44:38\", \"guid\": { \"rendered\": \"https://mysite.example.com/mysite-la-piattaforma-che-trasforma-linnovazione-sostenibi...",
|
|
83
83
|
"error_message": null,
|
|
84
84
|
"skip_reason": null
|
|
85
85
|
},
|
|
@@ -129,7 +129,7 @@
|
|
|
129
129
|
"status": "passed",
|
|
130
130
|
"tested_at": "2026-03-01T21:15:13.014Z",
|
|
131
131
|
"duration_ms": 506,
|
|
132
|
-
"response_preview": "{ \"found\": true, \"content_type\": \"post\", \"content_id\": 2348, \"original_url\": \"/
|
|
132
|
+
"response_preview": "{ \"found\": true, \"content_type\": \"post\", \"content_id\": 2348, \"original_url\": \"/mysite-la-piattaforma-che-trasforma-linnovazione-sostenibile-europea/\", \"content\": { \"id\": 2348, \"d...",
|
|
133
133
|
"error_message": null,
|
|
134
134
|
"skip_reason": null
|
|
135
135
|
},
|
|
@@ -164,7 +164,7 @@
|
|
|
164
164
|
"status": "passed",
|
|
165
165
|
"tested_at": "2026-03-01T21:15:14.406Z",
|
|
166
166
|
"duration_ms": 376,
|
|
167
|
-
"response_preview": "[ { \"id\": 1, \"count\": 2, \"description\": \"\", \"link\": \"https://
|
|
167
|
+
"response_preview": "[ { \"id\": 1, \"count\": 2, \"description\": \"\", \"link\": \"https://mysite.example.com/category/uncategorized/\", \"name\": \"Uncategorized\", \"slug\": \"uncategorized\", \"taxonomy\": \"categ...",
|
|
168
168
|
"error_message": null,
|
|
169
169
|
"skip_reason": null
|
|
170
170
|
},
|
|
@@ -174,7 +174,7 @@
|
|
|
174
174
|
"status": "passed",
|
|
175
175
|
"tested_at": "2026-03-01T21:15:15.427Z",
|
|
176
176
|
"duration_ms": 920,
|
|
177
|
-
"response_preview": "{ \"id\": 1, \"count\": 2, \"description\": \"\", \"link\": \"https://
|
|
177
|
+
"response_preview": "{ \"id\": 1, \"count\": 2, \"description\": \"\", \"link\": \"https://mysite.example.com/category/uncategorized/\", \"name\": \"Uncategorized\", \"slug\": \"uncategorized\", \"taxonomy\": \"category\", \"parent\": ...",
|
|
178
178
|
"error_message": null,
|
|
179
179
|
"skip_reason": null
|
|
180
180
|
},
|
|
@@ -224,7 +224,7 @@
|
|
|
224
224
|
"status": "passed",
|
|
225
225
|
"tested_at": "2026-03-01T21:15:16.236Z",
|
|
226
226
|
"duration_ms": 708,
|
|
227
|
-
"response_preview": "{ \"content_id\": 2348, \"content_type\": \"post\", \"terms\": { \"category\": [ { \"id\": 1, \"count\": 2, \"description\": \"\", \"link\": \"https://
|
|
227
|
+
"response_preview": "{ \"content_id\": 2348, \"content_type\": \"post\", \"terms\": { \"category\": [ { \"id\": 1, \"count\": 2, \"description\": \"\", \"link\": \"https://mysite.example.com/categor...",
|
|
228
228
|
"error_message": null,
|
|
229
229
|
"skip_reason": null
|
|
230
230
|
}
|
|
@@ -294,7 +294,7 @@
|
|
|
294
294
|
"status": "passed",
|
|
295
295
|
"tested_at": "2026-03-01T21:15:17.142Z",
|
|
296
296
|
"duration_ms": 344,
|
|
297
|
-
"response_preview": "[ { \"id\": 2428, \"date\": \"2025-09-05T09:47:23\", \"date_gmt\": \"2025-09-05T09:47:23\", \"guid\": { \"rendered\": \"https://
|
|
297
|
+
"response_preview": "[ { \"id\": 2428, \"date\": \"2025-09-05T09:47:23\", \"date_gmt\": \"2025-09-05T09:47:23\", \"guid\": { \"rendered\": \"https://mysite.example.com/wp-content/uploads/2025/09/placeholder.png\" ...",
|
|
298
298
|
"error_message": null,
|
|
299
299
|
"skip_reason": null
|
|
300
300
|
},
|
|
@@ -304,7 +304,7 @@
|
|
|
304
304
|
"status": "passed",
|
|
305
305
|
"tested_at": "2026-03-01T21:15:17.670Z",
|
|
306
306
|
"duration_ms": 428,
|
|
307
|
-
"response_preview": "{ \"id\": 2428, \"date\": \"2025-09-05T09:47:23\", \"date_gmt\": \"2025-09-05T09:47:23\", \"guid\": { \"rendered\": \"https://
|
|
307
|
+
"response_preview": "{ \"id\": 2428, \"date\": \"2025-09-05T09:47:23\", \"date_gmt\": \"2025-09-05T09:47:23\", \"guid\": { \"rendered\": \"https://mysite.example.com/wp-content/uploads/2025/09/placeholder.png\" }, \"modified\":...",
|
|
308
308
|
"error_message": null,
|
|
309
309
|
"skip_reason": null
|
|
310
310
|
},
|
|
@@ -349,7 +349,7 @@
|
|
|
349
349
|
"status": "passed",
|
|
350
350
|
"tested_at": "2026-03-01T21:15:18.145Z",
|
|
351
351
|
"duration_ms": 373,
|
|
352
|
-
"response_preview": "[ { \"id\": 1, \"name\": \"
|
|
352
|
+
"response_preview": "[ { \"id\": 1, \"name\": \"admin@example.com\", \"url\": \"http://mysite.example.com\", \"description\": \"\", \"link\": \"https://mysite.example.com/author/admin/\", \"slug\": \"morreal...",
|
|
353
353
|
"error_message": null,
|
|
354
354
|
"skip_reason": null
|
|
355
355
|
},
|
|
@@ -359,7 +359,7 @@
|
|
|
359
359
|
"status": "passed",
|
|
360
360
|
"tested_at": "2026-03-01T21:15:18.654Z",
|
|
361
361
|
"duration_ms": 409,
|
|
362
|
-
"response_preview": "{ \"id\": 1, \"name\": \"
|
|
362
|
+
"response_preview": "{ \"id\": 1, \"name\": \"admin@example.com\", \"url\": \"http://mysite.example.com\", \"description\": \"\", \"link\": \"https://mysite.example.com/author/admin/\", \"slug\": \"admin\", ...",
|
|
363
363
|
"error_message": null,
|
|
364
364
|
"skip_reason": null
|
|
365
365
|
},
|
|
@@ -369,7 +369,7 @@
|
|
|
369
369
|
"status": "passed",
|
|
370
370
|
"tested_at": "2026-03-01T21:15:19.062Z",
|
|
371
371
|
"duration_ms": 307,
|
|
372
|
-
"response_preview": "{ \"id\": 1, \"name\": \"
|
|
372
|
+
"response_preview": "{ \"id\": 1, \"name\": \"admin@example.com\", \"url\": \"http://mysite.example.com\", \"description\": \"\", \"link\": \"https://mysite.example.com/author/admin/\", \"slug\": \"admin\", ...",
|
|
373
373
|
"error_message": null,
|
|
374
374
|
"skip_reason": null
|
|
375
375
|
},
|
|
@@ -479,7 +479,7 @@
|
|
|
479
479
|
"status": "passed",
|
|
480
480
|
"tested_at": "2026-03-01T21:15:20.547Z",
|
|
481
481
|
"duration_ms": 452,
|
|
482
|
-
"response_preview": "[ { \"id\": 2402, \"title\": \"test\", \"url\": \"https://
|
|
482
|
+
"response_preview": "[ { \"id\": 2402, \"title\": \"test\", \"url\": \"https://mysite.example.com/test/\", \"type\": \"post\", \"subtype\": \"page\", \"_links\": { \"self\": [ { \"embeddable\": true,...",
|
|
483
483
|
"error_message": null,
|
|
484
484
|
"skip_reason": null
|
|
485
485
|
}
|
|
@@ -529,7 +529,7 @@
|
|
|
529
529
|
"status": "passed",
|
|
530
530
|
"tested_at": "2026-03-01T21:15:22.755Z",
|
|
531
531
|
"duration_ms": 2,
|
|
532
|
-
"response_preview": "Configured sites: ●
|
|
532
|
+
"response_preview": "Configured sites: ● mysite othersite",
|
|
533
533
|
"error_message": null,
|
|
534
534
|
"skip_reason": null
|
|
535
535
|
},
|
|
@@ -539,7 +539,7 @@
|
|
|
539
539
|
"status": "passed",
|
|
540
540
|
"tested_at": "2026-03-01T21:15:22.856Z",
|
|
541
541
|
"duration_ms": 1,
|
|
542
|
-
"response_preview": "
|
|
542
|
+
"response_preview": "mysite",
|
|
543
543
|
"error_message": null,
|
|
544
544
|
"skip_reason": null
|
|
545
545
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-plugin-wordpress-manager",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "Unified WordPress management and development plugin for Claude Code. Orchestrates Hostinger MCP, WP REST API bridge (148 tools incl. 30 WooCommerce + 10 Multisite + 4 Webhooks + 7 Mailchimp + 5 Buffer + 6 SendGrid + 8 GSC + 6 GA4 + 4 Plausible + 4 CWV + 3 Slack + 4 Workflows + 5 LinkedIn + 5 Twitter + 3 Schema), and WordPress.com MCP with
|
|
3
|
+
"version": "2.14.0",
|
|
4
|
+
"description": "Unified WordPress management and development plugin for Claude Code. Orchestrates Hostinger MCP, WP REST API bridge (148 tools incl. 30 WooCommerce + 10 Multisite + 4 Webhooks + 7 Mailchimp + 5 Buffer + 6 SendGrid + 8 GSC + 6 GA4 + 4 Plausible + 4 CWV + 3 Slack + 4 Workflows + 5 LinkedIn + 5 Twitter + 3 Schema), and WordPress.com MCP with 46 skills, 12 agents, and security hooks. v2.14.0 adds Editorial Kanban Dashboard: self-contained HTML report generated from .content-state/ files.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "vinmor",
|
|
7
7
|
"email": "morreale.v@gmail.com"
|
|
@@ -70,7 +70,10 @@
|
|
|
70
70
|
"content-framework",
|
|
71
71
|
"content-pipeline",
|
|
72
72
|
"editorial-calendar",
|
|
73
|
-
"signals-intelligence"
|
|
73
|
+
"signals-intelligence",
|
|
74
|
+
"dashboard",
|
|
75
|
+
"kanban",
|
|
76
|
+
"editorial-dashboard"
|
|
74
77
|
],
|
|
75
78
|
"repository": {
|
|
76
79
|
"type": "git",
|
|
@@ -83,7 +86,8 @@
|
|
|
83
86
|
"scripts": {
|
|
84
87
|
"validate": "node scripts/run-validation.mjs",
|
|
85
88
|
"validate:module": "node scripts/run-validation.mjs --module",
|
|
86
|
-
"validate:all": "node scripts/run-validation.mjs --include-writes"
|
|
89
|
+
"validate:all": "node scripts/run-validation.mjs --include-writes",
|
|
90
|
+
"dashboard": "node scripts/dashboard-renderer.mjs"
|
|
87
91
|
},
|
|
88
92
|
"files": [
|
|
89
93
|
".claude-plugin/",
|