myaidev-method 0.3.3 → 0.3.5

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 (132) hide show
  1. package/.claude-plugin/plugin.json +0 -1
  2. package/.env.example +5 -4
  3. package/CHANGELOG.md +2 -2
  4. package/CONTENT_CREATION_GUIDE.md +489 -3211
  5. package/DEVELOPER_USE_CASES.md +1 -1
  6. package/MODULAR_INSTALLATION.md +2 -2
  7. package/README.md +39 -33
  8. package/TECHNICAL_ARCHITECTURE.md +1 -1
  9. package/USER_GUIDE.md +242 -190
  10. package/agents/content-editor-agent.md +90 -0
  11. package/agents/content-planner-agent.md +97 -0
  12. package/agents/content-research-agent.md +62 -0
  13. package/agents/content-seo-agent.md +101 -0
  14. package/agents/content-writer-agent.md +69 -0
  15. package/agents/infographic-analyzer-agent.md +63 -0
  16. package/agents/infographic-designer-agent.md +72 -0
  17. package/bin/cli.js +777 -535
  18. package/{content-rules.example.md → content-rules-example.md} +2 -2
  19. package/dist/mcp/health-check.js +82 -68
  20. package/dist/mcp/mcp-config.json +8 -0
  21. package/dist/mcp/openstack-server.js +1746 -1262
  22. package/dist/server/.tsbuildinfo +1 -1
  23. package/extension.json +21 -4
  24. package/package.json +181 -184
  25. package/skills/company-config/SKILL.md +133 -0
  26. package/skills/configure/SKILL.md +1 -1
  27. package/skills/myai-configurator/SKILL.md +77 -0
  28. package/skills/myai-configurator/content-creation-configurator/SKILL.md +516 -0
  29. package/skills/myai-configurator/content-maintenance-configurator/SKILL.md +397 -0
  30. package/skills/myai-content-enrichment/SKILL.md +114 -0
  31. package/skills/myai-content-ideation/SKILL.md +288 -0
  32. package/skills/myai-content-ideation/evals/evals.json +182 -0
  33. package/skills/myai-content-production-coordinator/SKILL.md +946 -0
  34. package/skills/{content-rules-setup → myai-content-rules-setup}/SKILL.md +1 -1
  35. package/skills/{content-verifier → myai-content-verifier}/SKILL.md +1 -1
  36. package/skills/myai-content-writer/SKILL.md +333 -0
  37. package/skills/myai-content-writer/agents/editor-agent.md +138 -0
  38. package/skills/myai-content-writer/agents/planner-agent.md +121 -0
  39. package/skills/myai-content-writer/agents/research-agent.md +83 -0
  40. package/skills/myai-content-writer/agents/seo-agent.md +139 -0
  41. package/skills/myai-content-writer/agents/visual-planner-agent.md +110 -0
  42. package/skills/myai-content-writer/agents/writer-agent.md +85 -0
  43. package/skills/{infographic → myai-infographic}/SKILL.md +1 -1
  44. package/skills/myai-proprietary-content-verifier/SKILL.md +175 -0
  45. package/skills/myai-proprietary-content-verifier/evals/evals.json +36 -0
  46. package/skills/myai-skill-builder/SKILL.md +699 -0
  47. package/skills/myai-skill-builder/agents/analyzer-agent.md +137 -0
  48. package/skills/myai-skill-builder/agents/comparator-agent.md +77 -0
  49. package/skills/myai-skill-builder/agents/grader-agent.md +103 -0
  50. package/skills/myai-skill-builder/assets/eval_review.html +131 -0
  51. package/skills/myai-skill-builder/references/schemas.md +211 -0
  52. package/skills/myai-skill-builder/scripts/aggregate_benchmark.py +190 -0
  53. package/skills/myai-skill-builder/scripts/generate_review.py +381 -0
  54. package/skills/myai-skill-builder/scripts/package_skill.py +91 -0
  55. package/skills/myai-skill-builder/scripts/run_eval.py +105 -0
  56. package/skills/myai-skill-builder/scripts/run_loop.py +211 -0
  57. package/skills/myai-skill-builder/scripts/utils.py +123 -0
  58. package/skills/myai-visual-generator/SKILL.md +125 -0
  59. package/skills/myai-visual-generator/evals/evals.json +155 -0
  60. package/skills/myai-visual-generator/references/infographic-pipeline.md +73 -0
  61. package/skills/myai-visual-generator/references/research-visuals.md +57 -0
  62. package/skills/myai-visual-generator/references/services.md +89 -0
  63. package/skills/myai-visual-generator/scripts/visual-generation-utils.js +1272 -0
  64. package/skills/myaidev-analyze/agents/dependency-mapper-agent.md +236 -0
  65. package/skills/myaidev-analyze/agents/pattern-detector-agent.md +240 -0
  66. package/skills/myaidev-analyze/agents/structure-scanner-agent.md +171 -0
  67. package/skills/myaidev-analyze/agents/tech-profiler-agent.md +291 -0
  68. package/skills/myaidev-architect/agents/compliance-checker-agent.md +287 -0
  69. package/skills/myaidev-architect/agents/requirements-analyst-agent.md +194 -0
  70. package/skills/myaidev-architect/agents/system-designer-agent.md +315 -0
  71. package/skills/myaidev-coder/agents/implementer-agent.md +185 -0
  72. package/skills/myaidev-coder/agents/integration-agent.md +168 -0
  73. package/skills/myaidev-coder/agents/pattern-scanner-agent.md +161 -0
  74. package/skills/myaidev-coder/agents/self-reviewer-agent.md +168 -0
  75. package/skills/myaidev-debug/agents/fix-agent-debug.md +317 -0
  76. package/skills/myaidev-debug/agents/hypothesis-agent.md +226 -0
  77. package/skills/myaidev-debug/agents/investigator-agent.md +250 -0
  78. package/skills/myaidev-debug/agents/symptom-collector-agent.md +231 -0
  79. package/skills/myaidev-documenter/agents/code-reader-agent.md +172 -0
  80. package/skills/myaidev-documenter/agents/doc-validator-agent.md +174 -0
  81. package/skills/myaidev-documenter/agents/doc-writer-agent.md +379 -0
  82. package/skills/myaidev-figma/SKILL.md +212 -0
  83. package/skills/myaidev-figma/capture.js +133 -0
  84. package/skills/myaidev-figma/crawl.js +130 -0
  85. package/skills/myaidev-figma-configure/SKILL.md +130 -0
  86. package/skills/myaidev-migrate/agents/migration-planner-agent.md +237 -0
  87. package/skills/myaidev-migrate/agents/migration-writer-agent.md +248 -0
  88. package/skills/myaidev-migrate/agents/schema-analyzer-agent.md +190 -0
  89. package/skills/myaidev-performance/agents/benchmark-agent.md +281 -0
  90. package/skills/myaidev-performance/agents/optimizer-agent.md +277 -0
  91. package/skills/myaidev-performance/agents/profiler-agent.md +252 -0
  92. package/skills/myaidev-refactor/agents/refactor-executor-agent.md +221 -0
  93. package/skills/myaidev-refactor/agents/refactor-planner-agent.md +213 -0
  94. package/skills/myaidev-refactor/agents/regression-guard-agent.md +242 -0
  95. package/skills/myaidev-refactor/agents/smell-detector-agent.md +233 -0
  96. package/skills/myaidev-reviewer/agents/auto-fixer-agent.md +238 -0
  97. package/skills/myaidev-reviewer/agents/code-analyst-agent.md +220 -0
  98. package/skills/myaidev-reviewer/agents/security-scanner-agent.md +262 -0
  99. package/skills/myaidev-tester/agents/coverage-analyst-agent.md +163 -0
  100. package/skills/myaidev-tester/agents/tdd-driver-agent.md +242 -0
  101. package/skills/myaidev-tester/agents/test-runner-agent.md +176 -0
  102. package/skills/myaidev-tester/agents/test-strategist-agent.md +154 -0
  103. package/skills/myaidev-tester/agents/test-writer-agent.md +242 -0
  104. package/skills/myaidev-workflow/agents/analyzer-agent.md +317 -0
  105. package/skills/myaidev-workflow/agents/coordinator-agent.md +253 -0
  106. package/skills/openstack-manager/SKILL.md +1 -1
  107. package/skills/payloadcms-publisher/SKILL.md +141 -77
  108. package/skills/payloadcms-publisher/references/field-mapping.md +142 -0
  109. package/skills/payloadcms-publisher/references/lexical-format.md +97 -0
  110. package/skills/security-auditor/SKILL.md +1 -1
  111. package/src/cli/commands/addon.js +184 -123
  112. package/src/config/workflows.js +172 -228
  113. package/src/lib/ascii-banner.js +197 -182
  114. package/src/lib/{content-coordinator.js → content-production-coordinator.js} +649 -459
  115. package/src/lib/installation-detector.js +93 -59
  116. package/src/lib/payloadcms-utils.js +285 -510
  117. package/src/lib/update-manager.js +120 -61
  118. package/src/lib/workflow-installer.js +55 -0
  119. package/src/mcp/health-check.js +82 -68
  120. package/src/mcp/openstack-server.js +1746 -1262
  121. package/src/scripts/configure-visual-apis.js +224 -173
  122. package/src/scripts/configure-wordpress-mcp.js +96 -66
  123. package/src/scripts/init/install.js +109 -85
  124. package/src/scripts/init-project.js +138 -67
  125. package/src/scripts/utils/write-content.js +67 -52
  126. package/src/scripts/wordpress/publish-to-wordpress.js +128 -128
  127. package/src/templates/claude/CLAUDE.md +131 -0
  128. package/hooks/hooks.json +0 -26
  129. package/skills/content-coordinator/SKILL.md +0 -130
  130. package/skills/content-enrichment/SKILL.md +0 -80
  131. package/skills/content-writer/SKILL.md +0 -285
  132. package/skills/visual-generator/SKILL.md +0 -140
@@ -0,0 +1,288 @@
1
+ ---
2
+ name: myai-content-ideation
3
+ description: Researches a topic area, discovers strategic Themes, and creates ideation briefs and article plans. Internal agent — dispatched by content-writer and production-coordinator.
4
+ user-invocable: false
5
+ allowed-tools: [Read, Write, WebSearch, WebFetch, Glob, Bash]
6
+ ---
7
+
8
+ # Content Ideation + Planning
9
+
10
+ Given a topic (or a broad area), audience, and content type, discover **Themes**, research supporting material, and produce four outputs:
11
+
12
+ 1. `content-themes.json` - persistent file of discovered Themes (appended across runs)
13
+ 2. `.content-session/ideation.md` - per-session ideation brief for the next pipeline phase
14
+ 3. `.content-session/plan.md` - actionable article structure and keyword placement plan for the writer
15
+ 4. `content-queue/{jobDir}/` - content stubs (one per Theme) ready for the production coordinator
16
+
17
+ ## What Is a Theme?
18
+
19
+ A **Theme** is a strategic content grouping: a title, a description, and reference URLs that demonstrate the kind of content belonging to it. Themes ensure content variety, strategic coverage, and topical authority.
20
+
21
+ A Theme contains exactly four fields:
22
+
23
+ | Field | Type | Description |
24
+ |-------|------|-------------|
25
+ | `title` | string | Short, descriptive name for the editorial grouping |
26
+ | `description` | string | 1-3 sentences explaining the angle, why it matters, and who it is for |
27
+ | `strategy` | string | The ideation approach used to develop content under this Theme (see **Strategies** below) |
28
+ | `referenceUrls` | string[] | 2-5 URLs of existing published content (yours or competitors') that exemplify this Theme |
29
+
30
+ ### Strategies
31
+
32
+ A strategy is the ideation lens through which a Theme's content is approached. When discovering Themes, propose a strategy for each one. During interactive sessions, discuss strategy options with the user to find the best fit for the topic and audience.
33
+
34
+ | Strategy | When to use |
35
+ |----------|-------------|
36
+ | **Gap Analysis** | There is a clear gap in existing coverage — missing subtopics, unanswered questions, or underserved audiences that your content can fill |
37
+ | **Current Trends** | The topic intersects with recent developments, emerging technology, industry shifts, or timely events worth capitalizing on |
38
+ | **Related Subject** | The core topic connects to an adjacent domain; bridging the two creates unique cross-disciplinary value |
39
+ | **Hub and Spoke** | The Theme is broad enough to warrant a pillar piece with multiple supporting articles linking back to it for topical authority |
40
+ | **Unique Angle** | You have proprietary data, original research, contrarian takes, or first-hand experience that no competitor can replicate |
41
+ | **Venn Diagram** | Two or more distinct audiences or subject areas overlap; the content targets the intersection to capture a niche |
42
+
43
+ These are starting points — new strategies can emerge during ideation. If a Theme doesn't fit neatly into one, propose and name a new strategy with a short rationale.
44
+
45
+ Example:
46
+
47
+ ```json
48
+ {
49
+ "title": "Big Data on Bare Metal",
50
+ "description": "Articles exploring how big data workloads like OLAP, stream processing, and high-volume data collection benefit from dedicated bare metal infrastructure versus shared cloud environments.",
51
+ "strategy": "Gap Analysis",
52
+ "referenceUrls": [
53
+ "https://example.com/olap-databases-bare-metal-dedicated-servers",
54
+ "https://example.com/single-tenant-private-cloud-high-volume-data-collection",
55
+ "https://example.com/real-time-data-processing-apache-storm-flink"
56
+ ]
57
+ }
58
+ ```
59
+
60
+ Themes are **not** article outlines. They are a strategic grouping that multiple articles can be written under.
61
+
62
+ ## Process
63
+
64
+ 1. **Parse the Brief**: Extract topic, audience, and content type from the task prompt
65
+ 2. **Search**: Use `WebSearch` to find 5-10 authoritative, recent sources on the topic area (prioritize last 12 months)
66
+ 3. **Discover Themes**: Identify 2-4 distinct Themes by grouping findings into strategic angles; collect reference URLs for each Theme
67
+ 4. **Write Themes**: Save Themes. If the task prompt specifies a path (e.g. `.content-session/{slug}/themes.json`), write there — no merge, coordinator will merge after batch. Otherwise write to `content-themes.json` at project root; if it exists, read and merge (add new Themes, skip duplicates by title, update URLs for existing Themes)
68
+ 5. **Write Content Stubs**: For each Theme, generate a content stub markdown file and write it to `content-queue/{jobDir}/` (see Output 4 below)
69
+ 6. **Research Selected Theme**: Do deeper research on the most promising Theme (or user-specified one)
70
+ 7. **Write ideation brief**: Save per-session research to `.content-session/ideation.md`
71
+ 8. **Create article plan**: Use ideation findings to create a detailed structure in `.content-session/plan.md`
72
+
73
+ ## Output 1: Themes (content-themes.json or task-specified path)
74
+
75
+ Default path: `content-themes.json` at project root. In batch mode, the coordinator may specify `.content-session/{slug}/themes.json` to avoid race conditions.
76
+
77
+ ```json
78
+ {
79
+ "lastUpdated": "{YYYY-MM-DD}",
80
+ "themes": [
81
+ {
82
+ "title": "{Theme title}",
83
+ "description": "{1-3 sentence description of the angle and audience}",
84
+ "strategy": "{Gap Analysis | Current Trends | Related Subject | Hub and Spoke | Unique Angle | Venn Diagram | custom}",
85
+ "referenceUrls": [
86
+ "{url1}",
87
+ "{url2}",
88
+ "{url3}"
89
+ ]
90
+ }
91
+ ]
92
+ }
93
+ ```
94
+
95
+ ### Merge Rules (only when writing to content-themes.json)
96
+
97
+ When writing to `content-themes.json` and it already exists:
98
+ - Read the existing file first
99
+ - Add new Themes (no existing Theme has the same or very similar title)
100
+ - For existing Themes, append newly found reference URLs (no duplicates)
101
+ - Update `lastUpdated` to today's date
102
+ - Preserve all existing Themes; never remove them
103
+
104
+ ## Output 2: `.content-session/ideation.md`
105
+
106
+ Per-session ideation brief consumed by planner/writer phases:
107
+
108
+ ```markdown
109
+ # Ideation: {topic}
110
+
111
+ ## Selected Theme
112
+ **{Theme title}** - {Theme description}
113
+ **Strategy**: {strategy} — [1 sentence explaining why this strategy fits]
114
+
115
+ ## Key Facts & Statistics
116
+ - [Fact 1] - Source: [attribution + URL]
117
+ - [Fact 2] - Source: [attribution + URL]
118
+
119
+ ## Expert Perspectives
120
+ - [Expert/Org]: "[Quote or paraphrased insight]" - [Context]
121
+
122
+ ## Content Gaps
123
+ - [Gap 1] - Why it matters
124
+ - [Gap 2] - Why it matters
125
+
126
+ ## Current Landscape
127
+ [2-3 paragraph summary of what is currently known/published in this Theme area]
128
+
129
+ ## Trends & Recent Developments
130
+ - [Trend 1] - [Date/Timeframe]
131
+ - [Trend 2] - [Date/Timeframe]
132
+
133
+ ## Recommended Article
134
+ **{Title idea}** - [1-2 paragraph recommendation for the best article to write within this Theme, given audience, existing coverage, and available unique value. Explain the angle and why it is high-value.]
135
+
136
+ ## Sources
137
+ 1. [Title] - [URL] - [Relevance note]
138
+ 2. ...
139
+ ```
140
+
141
+ ## Output 4: Content Stubs (`content-queue/{jobDir}/`)
142
+
143
+ After discovering Themes, generate a content stub for each Theme. Stubs are markdown files with frontmatter that the content-production-coordinator consumes in batch mode.
144
+
145
+ ### Job Directory
146
+
147
+ Create a job directory inside `content-queue/` named with a date and sequential counter:
148
+
149
+ ```
150
+ content-queue/jobYYYYMMDD_NN/
151
+ ```
152
+
153
+ Where `NN` is a zero-padded sequential number starting at `01`. If `content-queue/` already contains a directory for today's date (e.g. `job20260223_01`), increment the counter (e.g. `job20260223_02`).
154
+
155
+ Example: `content-queue/job20260223_01/`
156
+
157
+ If the task prompt specifies a job directory path, use that instead.
158
+
159
+ ### Stub Files
160
+
161
+ Each stub is named with a URL-friendly slug derived from the Theme title:
162
+
163
+ ```
164
+ content-queue/job20260223_01/kubernetes_application_performance.md
165
+ content-queue/job20260223_01/big_data_on_bare_metal.md
166
+ ```
167
+
168
+ Slug rules: lowercase, replace spaces and hyphens with underscores, strip non-alphanumeric characters (except underscores), collapse multiple underscores.
169
+
170
+ ### Stub Format
171
+
172
+ Each stub contains frontmatter describing the content piece. The `strategy` field comes from the Theme (not "theme"). All other fields use values from the task prompt or sensible defaults:
173
+
174
+ ```markdown
175
+ ---
176
+ title: "{Theme title — used as the article topic}"
177
+ mode: new
178
+ content_type: blog-post
179
+ status: pending
180
+ priority: normal
181
+ tone: professional
182
+ word_count: 1500
183
+ audience: "{audience from task prompt}"
184
+ strategy: "{Theme strategy — e.g. Gap Analysis, Current Trends}"
185
+ keywords:
186
+ - "{primary keyword derived from Theme}"
187
+ - "{secondary keyword}"
188
+ references:
189
+ - "{referenceUrl1 from Theme}"
190
+ - "{referenceUrl2 from Theme}"
191
+ goals:
192
+ - "{1-sentence goal derived from Theme description}"
193
+ visuals: true
194
+ publish: wordpress
195
+ publish_status: draft
196
+ ---
197
+
198
+ ## Theme Context
199
+
200
+ {Theme description — 1-3 sentences explaining the angle, why it matters, and who it is for}
201
+
202
+ ## Reference Material
203
+
204
+ {Bullet list of reference URLs with brief annotation of what each covers}
205
+ ```
206
+
207
+ Field mapping from Theme to stub:
208
+
209
+ | Theme Field | Stub Field | Notes |
210
+ |-------------|------------|-------|
211
+ | `title` | `title` | Used as the article topic |
212
+ | `strategy` | `strategy` | Ideation strategy, NOT placed in a "theme" field |
213
+ | `referenceUrls` | `references` | Carried over as-is |
214
+ | `description` | Body: Theme Context | Placed in the markdown body, not frontmatter |
215
+
216
+ Override defaults with values from the task prompt when available (e.g. `audience`, `tone`, `word_count`, `content_type`, `publish`, `publish_status`).
217
+
218
+ ## Constraints
219
+
220
+ - Do not write the full article draft
221
+ - Keep Output 2 under 1000 words
222
+ - Every fact must include source attribution
223
+ - Include at least one contrarian or alternative viewpoint
224
+ - Identify at least 2 genuine content gaps
225
+ - Produce at least 2 Themes in `content-themes.json`, ideally 3-4
226
+ - Ensure Themes are meaningfully different from each other
227
+ - Reference URLs must be real, publicly accessible URLs found during research
228
+ - Every Theme must have a corresponding stub in the job directory
229
+
230
+ ## Output 3: `.content-session/plan.md`
231
+
232
+ After ideation, create the article plan using this template:
233
+
234
+ ```markdown
235
+ # Article Plan
236
+
237
+ ## Title Options
238
+ 1. **[Recommended Title]** <- Primary choice
239
+ 2. [Alternative 1]
240
+ 3. [Alternative 2]
241
+
242
+ ## Article Brief
243
+ - **Type**: {content_type}
244
+ - **Target Words**: {word_count}
245
+ - **Tone**: {tone}
246
+ - **Theme**: {Theme title}
247
+ - **Strategy**: {strategy}
248
+ - **Primary Keyword**: {keyword}
249
+ - **Secondary Keywords**: {keyword2, keyword3}
250
+
251
+ ## Structure
252
+
253
+ ### Introduction (~{X} words)
254
+ - **Hook Strategy**: [Specific hook approach]
255
+ - **Hook Content**: [The actual hook sentence/concept]
256
+ - **Bridge**: [How to connect hook to article topic]
257
+ - **Promise**: [What the reader will learn/gain]
258
+ - **Keywords**: Use primary keyword in first paragraph
259
+
260
+ ### {Section 1 Title} (~{X} words)
261
+ - **Key Points**:
262
+ - [Point 1 with research reference]
263
+ - [Point 2 with supporting data]
264
+ - [Point 3]
265
+ - **Keywords**: Use secondary keyword in heading or first paragraph
266
+ - **Evidence**: [Specific stat/quote from research to include]
267
+
268
+ [Continue for all sections...]
269
+
270
+ ### Conclusion (~{X} words)
271
+ - **Summary Approach**: [Recap key insights, do not repeat verbatim]
272
+ - **CTA**: [Specific call to action]
273
+ - **Next Steps**: [What the reader should do next]
274
+
275
+ ## Keyword Placement Map
276
+
277
+ | Keyword | Location | Context |
278
+ |---------|----------|---------|
279
+ | {primary} | Title, Intro para 1, H2-1, Conclusion | Natural integration |
280
+ | {secondary1} | H2-2, Body section 3 | Supporting context |
281
+ ```
282
+
283
+ ### Planning Constraints
284
+
285
+ - Word count allocations must sum to the target (+/-5%)
286
+ - Every section must have at least 2 key points
287
+ - Keywords cannot be forced; place only where natural
288
+ - Plan must clearly derive from the selected Theme and ideation findings
@@ -0,0 +1,182 @@
1
+ {
2
+ "skill_name": "myai-content-ideation",
3
+ "evals": [
4
+ {
5
+ "id": 0,
6
+ "name": "enterprise-saas",
7
+ "prompt": "Research the topic of AI-powered customer support automation for B2B SaaS companies. Audience: CTOs and VP Engineering at mid-market SaaS companies (100-500 employees). Content type: blog-post. Word count: 2000.",
8
+ "expected_output": "Themes JSON with 2-4 themes, ideation.md with research, plan.md with article structure, content stubs in content-queue/",
9
+ "files": [],
10
+ "assertions": [
11
+ {
12
+ "id": "themes-file-exists",
13
+ "text": "content-themes.json exists and is valid JSON",
14
+ "type": "file_check"
15
+ },
16
+ {
17
+ "id": "themes-count",
18
+ "text": "content-themes.json contains 2-4 themes",
19
+ "type": "content_check"
20
+ },
21
+ {
22
+ "id": "themes-have-required-fields",
23
+ "text": "Each theme has title, description, strategy, and referenceUrls fields",
24
+ "type": "content_check"
25
+ },
26
+ {
27
+ "id": "themes-valid-strategies",
28
+ "text": "Each theme strategy is one of: Gap Analysis, Current Trends, Related Subject, Hub and Spoke, Unique Angle, Venn Diagram, or a custom strategy with rationale",
29
+ "type": "content_check"
30
+ },
31
+ {
32
+ "id": "ideation-file-exists",
33
+ "text": ".content-session/ideation.md exists and follows the template structure",
34
+ "type": "file_check"
35
+ },
36
+ {
37
+ "id": "ideation-has-sources",
38
+ "text": "ideation.md contains at least 3 sourced facts with URLs",
39
+ "type": "content_check"
40
+ },
41
+ {
42
+ "id": "ideation-has-content-gaps",
43
+ "text": "ideation.md identifies at least 2 content gaps",
44
+ "type": "content_check"
45
+ },
46
+ {
47
+ "id": "plan-file-exists",
48
+ "text": ".content-session/plan.md exists and follows the plan template",
49
+ "type": "file_check"
50
+ },
51
+ {
52
+ "id": "plan-word-counts",
53
+ "text": "plan.md section word counts sum to approximately 2000 words (+/-5%)",
54
+ "type": "content_check"
55
+ },
56
+ {
57
+ "id": "stubs-created",
58
+ "text": "Content stubs exist in content-queue/ with one stub per theme",
59
+ "type": "file_check"
60
+ },
61
+ {
62
+ "id": "stubs-have-frontmatter",
63
+ "text": "Each content stub has valid YAML frontmatter with required fields (title, mode, content_type, status, strategy, audience, keywords, references)",
64
+ "type": "content_check"
65
+ }
66
+ ]
67
+ },
68
+ {
69
+ "id": 1,
70
+ "name": "edge-computing",
71
+ "prompt": "Research edge computing and WebAssembly for IoT applications. Audience: backend developers and DevOps engineers building IoT platforms. Content type: technical tutorial. Tone: conversational. Word count: 2500.",
72
+ "expected_output": "Themes JSON, ideation.md, plan.md with tutorial structure, content stubs reflecting technical tutorial type and conversational tone",
73
+ "files": [],
74
+ "assertions": [
75
+ {
76
+ "id": "themes-file-exists",
77
+ "text": "content-themes.json exists and is valid JSON",
78
+ "type": "file_check"
79
+ },
80
+ {
81
+ "id": "themes-count",
82
+ "text": "content-themes.json contains 2-4 themes",
83
+ "type": "content_check"
84
+ },
85
+ {
86
+ "id": "themes-distinct",
87
+ "text": "Themes are meaningfully different from each other (not just variations of the same angle)",
88
+ "type": "content_check"
89
+ },
90
+ {
91
+ "id": "ideation-file-exists",
92
+ "text": ".content-session/ideation.md exists with research findings",
93
+ "type": "file_check"
94
+ },
95
+ {
96
+ "id": "ideation-contrarian-viewpoint",
97
+ "text": "ideation.md includes at least one contrarian or alternative viewpoint",
98
+ "type": "content_check"
99
+ },
100
+ {
101
+ "id": "plan-content-type",
102
+ "text": "plan.md reflects technical tutorial content type (not generic blog post)",
103
+ "type": "content_check"
104
+ },
105
+ {
106
+ "id": "plan-tone",
107
+ "text": "plan.md specifies conversational tone",
108
+ "type": "content_check"
109
+ },
110
+ {
111
+ "id": "plan-word-count-target",
112
+ "text": "plan.md targets 2500 words total across sections",
113
+ "type": "content_check"
114
+ },
115
+ {
116
+ "id": "stubs-created",
117
+ "text": "Content stubs exist in content-queue/ with correct content_type and tone",
118
+ "type": "file_check"
119
+ },
120
+ {
121
+ "id": "reference-urls-real",
122
+ "text": "Theme referenceUrls are plausible real URLs (not example.com placeholders)",
123
+ "type": "content_check"
124
+ }
125
+ ]
126
+ },
127
+ {
128
+ "id": 2,
129
+ "name": "green-cloud",
130
+ "prompt": "Research sustainable cloud infrastructure and green computing practices. Audience: infrastructure architects and sustainability officers at enterprise companies. Content type: blog-post. Write themes to .content-session/green-cloud/themes.json. Job directory: content-queue/job20260311_01/",
131
+ "expected_output": "Themes written to custom path, ideation.md, plan.md, stubs in specified job directory",
132
+ "files": [],
133
+ "assertions": [
134
+ {
135
+ "id": "themes-custom-path",
136
+ "text": "Themes written to .content-session/green-cloud/themes.json (NOT content-themes.json)",
137
+ "type": "file_check"
138
+ },
139
+ {
140
+ "id": "themes-valid-json",
141
+ "text": "themes.json is valid JSON with lastUpdated and themes array",
142
+ "type": "content_check"
143
+ },
144
+ {
145
+ "id": "themes-count",
146
+ "text": "themes.json contains 2-4 themes",
147
+ "type": "content_check"
148
+ },
149
+ {
150
+ "id": "ideation-file-exists",
151
+ "text": ".content-session/ideation.md exists",
152
+ "type": "file_check"
153
+ },
154
+ {
155
+ "id": "plan-file-exists",
156
+ "text": ".content-session/plan.md exists",
157
+ "type": "file_check"
158
+ },
159
+ {
160
+ "id": "stubs-in-specified-dir",
161
+ "text": "Content stubs are in content-queue/job20260311_01/ (the specified job directory)",
162
+ "type": "file_check"
163
+ },
164
+ {
165
+ "id": "stubs-match-themes",
166
+ "text": "Number of stubs matches number of themes (one stub per theme)",
167
+ "type": "content_check"
168
+ },
169
+ {
170
+ "id": "no-root-themes-file",
171
+ "text": "No content-themes.json created at project root (should use custom path only)",
172
+ "type": "file_check"
173
+ },
174
+ {
175
+ "id": "stubs-audience-correct",
176
+ "text": "Stub frontmatter audience field references infrastructure architects and sustainability officers",
177
+ "type": "content_check"
178
+ }
179
+ ]
180
+ }
181
+ ]
182
+ }