taketomarket 2.2.0 → 2.3.1

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 (181) hide show
  1. package/.claude-plugin/marketplace.json +13 -17
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/README.md +35 -12
  4. package/bin/lib/campaign.cjs +12 -8
  5. package/bin/lib/codebase-scan.cjs +86 -0
  6. package/bin/lib/config.cjs +129 -0
  7. package/bin/lib/deploy.cjs +36 -0
  8. package/bin/lib/deviation.cjs +1 -1
  9. package/bin/lib/drift-log.cjs +4 -4
  10. package/bin/lib/health.cjs +32 -31
  11. package/bin/lib/install-detect.cjs +62 -0
  12. package/bin/lib/legacy-folder.cjs +100 -0
  13. package/bin/lib/playwright-check.cjs +26 -0
  14. package/bin/lib/site-location.cjs +22 -0
  15. package/bin/lib/state.cjs +3 -3
  16. package/bin/lib/svg-render.cjs +42 -0
  17. package/bin/ttm-tools.cjs +136 -4
  18. package/gates/base-gates.md +8 -8
  19. package/gates/gate-evaluation.md +8 -8
  20. package/install.js +37 -3
  21. package/package.json +10 -6
  22. package/playbooks/aeo.md +218 -114
  23. package/playbooks/affiliate.md +225 -160
  24. package/playbooks/email.md +236 -174
  25. package/playbooks/events.md +303 -213
  26. package/playbooks/landing-pages.md +309 -0
  27. package/playbooks/linkedin.md +264 -142
  28. package/playbooks/manifesto.md +322 -0
  29. package/playbooks/paid-ads.md +240 -189
  30. package/playbooks/positioning.md +340 -0
  31. package/playbooks/pr-media.md +308 -168
  32. package/playbooks/pseo.md +426 -0
  33. package/playbooks/seo.md +251 -158
  34. package/playbooks/social.md +253 -182
  35. package/playbooks/youtube.md +286 -181
  36. package/references/brand-color-theory.md +48 -0
  37. package/references/codex-image-gen-research.md +58 -0
  38. package/references/context-loading.md +6 -6
  39. package/references/humanizer-patterns.md +433 -0
  40. package/references/inline-education-blurbs.md +461 -0
  41. package/references/landing-page-anatomy.md +65 -0
  42. package/references/landing-page-headline-examples.md +190 -0
  43. package/references/linkedin-post-patterns.md +174 -0
  44. package/references/logo-design-principles.md +55 -0
  45. package/references/meta-gate-evaluation.md +3 -3
  46. package/references/obra-superpowers-conventions.md +170 -0
  47. package/references/playbook-leaders.md +472 -0
  48. package/references/playwright-mcp-setup.md +164 -0
  49. package/references/positioning-check-report.md +2 -2
  50. package/references/pseo-page-anatomy.md +56 -0
  51. package/references/pseo-templates/alternative-anatomy.md +31 -0
  52. package/references/pseo-templates/alternative-content-playbook.md +32 -0
  53. package/references/pseo-templates/blog-anatomy.md +28 -0
  54. package/references/pseo-templates/blog-content-playbook.md +36 -0
  55. package/references/pseo-templates/comparison-anatomy.md +29 -0
  56. package/references/pseo-templates/comparison-content-playbook.md +35 -0
  57. package/references/pseo-templates/use-case-anatomy.md +28 -0
  58. package/references/pseo-templates/use-case-content-playbook.md +30 -0
  59. package/skills/ttm-101/SKILL.md +25 -0
  60. package/skills/ttm-aeo-check/SKILL.md +17 -12
  61. package/skills/ttm-affiliate-kit/SKILL.md +5 -0
  62. package/skills/ttm-archive/SKILL.md +5 -0
  63. package/skills/ttm-brand-refresh/SKILL.md +5 -0
  64. package/skills/ttm-brief/SKILL.md +5 -0
  65. package/skills/ttm-competitor-scan/SKILL.md +5 -0
  66. package/skills/ttm-deploy/SKILL.md +22 -0
  67. package/skills/ttm-discover/SKILL.md +17 -0
  68. package/skills/ttm-email-check/SKILL.md +17 -0
  69. package/skills/ttm-email-preflight/SKILL.md +17 -11
  70. package/skills/ttm-fix/SKILL.md +5 -0
  71. package/skills/ttm-health/SKILL.md +6 -1
  72. package/skills/ttm-humanize/SKILL.md +33 -0
  73. package/skills/ttm-icp-refresh/SKILL.md +5 -0
  74. package/skills/ttm-improve-skill/SKILL.md +18 -0
  75. package/skills/ttm-init/SKILL.md +10 -3
  76. package/skills/ttm-keyword-map/SKILL.md +17 -11
  77. package/skills/ttm-landing/SKILL.md +19 -0
  78. package/skills/ttm-learn/SKILL.md +5 -0
  79. package/skills/ttm-linkedin-post/SKILL.md +26 -0
  80. package/skills/ttm-measure/SKILL.md +5 -0
  81. package/skills/ttm-new-campaign/SKILL.md +5 -0
  82. package/skills/ttm-next/SKILL.md +5 -0
  83. package/skills/ttm-playwright-setup/SKILL.md +18 -0
  84. package/skills/ttm-positioning-check/SKILL.md +5 -0
  85. package/skills/ttm-positioning-shift/SKILL.md +5 -0
  86. package/skills/ttm-produce/SKILL.md +5 -0
  87. package/skills/ttm-pseo/SKILL.md +26 -0
  88. package/skills/ttm-repurpose/SKILL.md +5 -0
  89. package/skills/ttm-request-skill/SKILL.md +18 -0
  90. package/skills/ttm-research/SKILL.md +18 -6
  91. package/skills/ttm-resume/SKILL.md +5 -0
  92. package/skills/ttm-review/SKILL.md +5 -0
  93. package/skills/ttm-seo/SKILL.md +64 -0
  94. package/skills/ttm-seo-audit/SKILL.md +17 -12
  95. package/skills/ttm-ship/SKILL.md +5 -0
  96. package/skills/ttm-state/SKILL.md +5 -0
  97. package/skills/ttm-update/SKILL.md +152 -4
  98. package/skills/ttm-verify/SKILL.md +5 -0
  99. package/templates/agents-md.md +14 -4
  100. package/templates/campaign-research.md +6 -6
  101. package/templates/campaign-state.md +1 -1
  102. package/templates/claude-md.md +14 -4
  103. package/templates/linkedin-base-template.md +48 -0
  104. package/templates/next-step-footer.md +13 -0
  105. package/templates/production-manifest.json +4 -4
  106. package/templates/pseo/alternative-cms-schema.json +65 -0
  107. package/templates/pseo/blog-cms-schema.json +55 -0
  108. package/templates/pseo/comparison-cms-schema.json +56 -0
  109. package/templates/pseo/use-case-cms-schema.json +62 -0
  110. package/templates/reference-files/brand.md +51 -0
  111. package/templates/reference-files/product-dna.md +73 -0
  112. package/templates/site-scaffold/app/globals.css +2 -0
  113. package/templates/site-scaffold/app/layout.tsx +17 -0
  114. package/templates/site-scaffold/app/page.tsx +33 -0
  115. package/templates/site-scaffold/app/robots.ts +8 -0
  116. package/templates/site-scaffold/app/sitemap.ts +10 -0
  117. package/templates/site-scaffold/app/tokens.css +21 -0
  118. package/templates/site-scaffold/components/Comparison.tsx +14 -0
  119. package/templates/site-scaffold/components/Faq.tsx +14 -0
  120. package/templates/site-scaffold/components/Features.tsx +14 -0
  121. package/templates/site-scaffold/components/FinalCta.tsx +17 -0
  122. package/templates/site-scaffold/components/Footer.tsx +12 -0
  123. package/templates/site-scaffold/components/Hero.tsx +22 -0
  124. package/templates/site-scaffold/components/HowItWorks.tsx +14 -0
  125. package/templates/site-scaffold/components/PricingTeaser.tsx +14 -0
  126. package/templates/site-scaffold/components/Problem.tsx +14 -0
  127. package/templates/site-scaffold/components/SocialProof.tsx +14 -0
  128. package/templates/site-scaffold/components/Solution.tsx +14 -0
  129. package/templates/site-scaffold/components/Testimonials.tsx +14 -0
  130. package/templates/site-scaffold/components/UseCases.tsx +14 -0
  131. package/templates/site-scaffold/content/.gitkeep +0 -0
  132. package/templates/site-scaffold/lib/.gitkeep +0 -0
  133. package/templates/site-scaffold/next.config.mjs +10 -0
  134. package/templates/site-scaffold/package.json +25 -0
  135. package/templates/site-scaffold/postcss.config.mjs +3 -0
  136. package/templates/site-scaffold/public/llms.txt +9 -0
  137. package/templates/site-scaffold/tsconfig.json +21 -0
  138. package/templates/verification-report.md +1 -1
  139. package/workflows/channel/linkedin-post.md +178 -0
  140. package/workflows/discipline/affiliate-kit.md +65 -6
  141. package/workflows/discipline/{email-preflight.md → email-check.md} +39 -4
  142. package/workflows/discipline/repurpose.md +82 -31
  143. package/workflows/discipline/{aeo-check.md → seo/aeo.md} +13 -6
  144. package/workflows/discipline/{seo-audit.md → seo/audit.md} +13 -6
  145. package/workflows/discipline/{keyword-map.md → seo/keyword-map.md} +13 -6
  146. package/workflows/education/ttm-101.md +114 -0
  147. package/workflows/lifecycle/brief-positioning-check.md +1 -1
  148. package/workflows/lifecycle/brief.md +64 -28
  149. package/workflows/lifecycle/{research.md → discover.md} +61 -19
  150. package/workflows/lifecycle/fix.md +72 -37
  151. package/workflows/lifecycle/humanize.md +280 -0
  152. package/workflows/lifecycle/learn.md +72 -35
  153. package/workflows/lifecycle/measure.md +54 -18
  154. package/workflows/lifecycle/produce.md +88 -37
  155. package/workflows/lifecycle/review.md +71 -25
  156. package/workflows/lifecycle/ship.md +62 -18
  157. package/workflows/lifecycle/verify.md +72 -26
  158. package/workflows/reference-mgmt/brand-refresh.md +50 -13
  159. package/workflows/reference-mgmt/competitor-scan.md +51 -15
  160. package/workflows/reference-mgmt/icp-refresh.md +48 -12
  161. package/workflows/reference-mgmt/positioning-check.md +55 -20
  162. package/workflows/reference-mgmt/positioning-shift.md +53 -17
  163. package/workflows/setup/init-brand-colors.md +75 -0
  164. package/workflows/setup/init-logo.md +113 -0
  165. package/workflows/setup/init-product-dna.md +83 -0
  166. package/workflows/setup/init-questions.md +166 -30
  167. package/workflows/setup/init-validation.md +22 -0
  168. package/workflows/setup/init.md +144 -39
  169. package/workflows/setup/new-campaign.md +48 -12
  170. package/workflows/site/deploy.md +98 -0
  171. package/workflows/site/landing.md +156 -0
  172. package/workflows/site/pseo.md +96 -0
  173. package/workflows/site/quality-gates.md +88 -0
  174. package/workflows/utility/archive.md +45 -9
  175. package/workflows/utility/health.md +77 -3
  176. package/workflows/utility/improve-skill.md +233 -0
  177. package/workflows/utility/next.md +38 -2
  178. package/workflows/utility/playwright-setup.md +128 -0
  179. package/workflows/utility/request-skill.md +218 -0
  180. package/workflows/utility/resume.md +40 -3
  181. package/workflows/utility/state.md +42 -7
@@ -1,3 +1,32 @@
1
+ ## Step 0: First-run inline education
2
+
3
+ Read `.taketomarket/CONFIG.md`. Parse `first_run_seen` (object) and `inline_education` (boolean, default true).
4
+
5
+ If `inline_education` is false: skip this step. Else if `first_run_seen.ttm-produce` is not `true`, print the explainer below verbatim, then mark this skill as seen:
6
+
7
+ ```bash
8
+ node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run mark ttm-produce
9
+ ```
10
+
11
+ Use this exact check (bash) to decide whether to print: `node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run check ttm-produce --raw` -- the JSON `seen` field is `true` once the explainer has run before.
12
+
13
+ ### Explainer for `/ttm-produce`
14
+
15
+ `/ttm-produce` is the production wave. It loads the brief, positioning, brand,
16
+ ICP, and playbook into a fresh 200K-token Task() subagent context, generates
17
+ the hero asset, then fans out parallel subagents for derivatives. Each producer
18
+ runs in isolation and writes to `MANIFEST.json` for the verify step to consume.
19
+
20
+ Why it matters: producing in the main conversation context means your generic
21
+ chat history pollutes the output. Fresh contexts + structured inputs are why
22
+ takeToMarket assets pass verification at a higher rate than free-form prompts.
23
+ This is also the only place where multiple assets are built in parallel --
24
+ sequential production is two-to-five times slower at the same quality.
25
+
26
+ (Canonical source: `references/inline-education-blurbs.md`. Embedded verbatim because workflows do not @-resolve files at runtime.)
27
+
28
+ ---
29
+
1
30
  <purpose>
2
31
  Production orchestration workflow for /ttm-produce. Generates content assets in
3
32
  fresh Task() subagent contexts loaded with brief + positioning (full) + brand (full) +
@@ -14,7 +43,7 @@ consumption (per D-11).
14
43
  <constraints>
15
44
  ## POSITIONING.md is READ-ONLY
16
45
 
17
- **Do NOT modify `.marketing/POSITIONING.md` during this workflow.**
46
+ **Do NOT modify `.taketomarket/POSITIONING.md` during this workflow.**
18
47
 
19
48
  POSITIONING.md is an architectural invariant. If you detect positioning drift:
20
49
  - In verify: use the Escalate option to launch /ttm-positioning-shift
@@ -62,24 +91,24 @@ SLUG=$(echo "$ARGUMENTS" | sed 's/--text//g' | xargs)
62
91
  ```
63
92
 
64
93
  Read Tier 1 summaries from all 9 reference files (lines 1 to `<!-- END_SUMMARY -->`):
65
- - `.marketing/POSITIONING.md`
66
- - `.marketing/BRAND.md`
67
- - `.marketing/ICP.md`
68
- - `.marketing/CHANNELS.md`
69
- - `.marketing/STATE.md` (frontmatter only)
70
- - `.marketing/CALENDAR.md`
71
- - `.marketing/COMPETITORS.md`
72
- - `.marketing/METRICS.md`
73
- - `.marketing/LEARNINGS.md`
94
+ - `.taketomarket/POSITIONING.md`
95
+ - `.taketomarket/BRAND.md`
96
+ - `.taketomarket/ICP.md`
97
+ - `.taketomarket/CHANNELS.md`
98
+ - `.taketomarket/STATE.md` (frontmatter only)
99
+ - `.taketomarket/CALENDAR.md`
100
+ - `.taketomarket/COMPETITORS.md`
101
+ - `.taketomarket/METRICS.md`
102
+ - `.taketomarket/LEARNINGS.md`
74
103
 
75
104
  Read Tier 2 (full content) for production context (per D-03):
76
- - `.marketing/POSITIONING.md`
77
- - `.marketing/BRAND.md`
78
- - `.marketing/ICP.md`
105
+ - `.taketomarket/POSITIONING.md`
106
+ - `.taketomarket/BRAND.md`
107
+ - `.taketomarket/ICP.md`
79
108
 
80
109
  Read campaign-specific files (always full-load per context-loading.md rule 4):
81
- - `.marketing/CAMPAIGNS/${SLUG}/STATE.md`
82
- - `.marketing/CAMPAIGNS/${SLUG}/BRIEF.md`
110
+ - `.taketomarket/CAMPAIGNS/${SLUG}/STATE.md`
111
+ - `.taketomarket/CAMPAIGNS/${SLUG}/BRIEF.md`
83
112
 
84
113
  ---
85
114
 
@@ -114,7 +143,7 @@ Read campaign state. Check the `phase` field:
114
143
  takeToMarket > PARSING BRIEF
115
144
  ```
116
145
 
117
- Read `.marketing/CAMPAIGNS/${SLUG}/BRIEF.md`.
146
+ Read `.taketomarket/CAMPAIGNS/${SLUG}/BRIEF.md`.
118
147
 
119
148
  Extract the assets list from the brief. The brief contains an "Assets List" section (created by /ttm-brief) structured as a Markdown table with columns: asset type, channel, and role.
120
149
 
@@ -207,12 +236,12 @@ Identify the hero asset (first entry in `ASSETS_LIST`).
207
236
  Read the agent prompt template from `${CLAUDE_PLUGIN_ROOT}/agents/ttm-producer.md`.
208
237
 
209
238
  Fill all placeholders with actual paths:
210
- - `[BRIEF_PATH]` --> `.marketing/CAMPAIGNS/${SLUG}/BRIEF.md`
211
- - `[POSITIONING_PATH]` --> `.marketing/POSITIONING.md`
212
- - `[BRAND_PATH]` --> `.marketing/BRAND.md`
213
- - `[ICP_PATH]` --> `.marketing/ICP.md`
239
+ - `[BRIEF_PATH]` --> `.taketomarket/CAMPAIGNS/${SLUG}/BRIEF.md`
240
+ - `[POSITIONING_PATH]` --> `.taketomarket/POSITIONING.md`
241
+ - `[BRAND_PATH]` --> `.taketomarket/BRAND.md`
242
+ - `[ICP_PATH]` --> `.taketomarket/ICP.md`
214
243
  - `[PLAYBOOK_PATH]` --> resolved playbook path from Step 4, or `"none"`
215
- - `[OUTPUT_PATH]` --> `.marketing/CAMPAIGNS/${SLUG}/ASSETS/01-${HERO_TYPE}-${HERO_CHANNEL}.md`
244
+ - `[OUTPUT_PATH]` --> `.taketomarket/CAMPAIGNS/${SLUG}/ASSETS/01-${HERO_TYPE}-${HERO_CHANNEL}.md`
216
245
  - `[ASSET_TYPE]` --> hero asset type from brief (e.g., "blog-post")
217
246
  - `[CHANNEL]` --> hero asset channel from brief (e.g., "organic-search")
218
247
  - `[HERO_PATH]` --> `none` (this IS the hero asset)
@@ -223,7 +252,7 @@ Call Task() with the populated prompt.
223
252
 
224
253
  After Task() returns, verify the hero file exists and has content:
225
254
  ```bash
226
- test -s ".marketing/CAMPAIGNS/${SLUG}/ASSETS/01-${HERO_TYPE}-${HERO_CHANNEL}.md"
255
+ test -s ".taketomarket/CAMPAIGNS/${SLUG}/ASSETS/01-${HERO_TYPE}-${HERO_CHANNEL}.md"
227
256
  ```
228
257
 
229
258
  If the file is empty or missing:
@@ -253,15 +282,15 @@ For each derivative asset in `ASSETS_LIST` (all entries after the hero):
253
282
  - etc.
254
283
 
255
284
  3. Fill all placeholders:
256
- - `[BRIEF_PATH]` --> `.marketing/CAMPAIGNS/${SLUG}/BRIEF.md`
257
- - `[POSITIONING_PATH]` --> `.marketing/POSITIONING.md`
258
- - `[BRAND_PATH]` --> `.marketing/BRAND.md`
259
- - `[ICP_PATH]` --> `.marketing/ICP.md`
285
+ - `[BRIEF_PATH]` --> `.taketomarket/CAMPAIGNS/${SLUG}/BRIEF.md`
286
+ - `[POSITIONING_PATH]` --> `.taketomarket/POSITIONING.md`
287
+ - `[BRAND_PATH]` --> `.taketomarket/BRAND.md`
288
+ - `[ICP_PATH]` --> `.taketomarket/ICP.md`
260
289
  - `[PLAYBOOK_PATH]` --> resolved playbook path from Step 4, or `"none"`
261
- - `[OUTPUT_PATH]` --> `.marketing/CAMPAIGNS/${SLUG}/ASSETS/${NN}-${TYPE}-${CHANNEL}.md`
290
+ - `[OUTPUT_PATH]` --> `.taketomarket/CAMPAIGNS/${SLUG}/ASSETS/${NN}-${TYPE}-${CHANNEL}.md`
262
291
  - `[ASSET_TYPE]` --> derivative asset type
263
292
  - `[CHANNEL]` --> derivative asset channel
264
- - `[HERO_PATH]` --> `.marketing/CAMPAIGNS/${SLUG}/ASSETS/${HERO_FILE}`
293
+ - `[HERO_PATH]` --> `.taketomarket/CAMPAIGNS/${SLUG}/ASSETS/${HERO_FILE}`
265
294
 
266
295
  4. Call Task() with the populated prompt.
267
296
 
@@ -269,7 +298,7 @@ All derivative Task() calls can run in parallel (per D-01 wave-parallel pattern)
269
298
 
270
299
  After ALL derivative Task() calls complete, verify each derivative file exists and has content:
271
300
  ```bash
272
- test -s ".marketing/CAMPAIGNS/${SLUG}/ASSETS/${NN}-${TYPE}-${CHANNEL}.md"
301
+ test -s ".taketomarket/CAMPAIGNS/${SLUG}/ASSETS/${NN}-${TYPE}-${CHANNEL}.md"
273
302
  ```
274
303
 
275
304
  For any derivative that failed (file empty or missing):
@@ -295,10 +324,10 @@ Fill with actual values:
295
324
  "campaign": "${SLUG}",
296
325
  "produced_at": "${ISO_TIMESTAMP}",
297
326
  "context_loaded": {
298
- "brief": ".marketing/CAMPAIGNS/${SLUG}/BRIEF.md",
299
- "positioning": ".marketing/POSITIONING.md",
300
- "brand": ".marketing/BRAND.md",
301
- "icp": ".marketing/ICP.md"
327
+ "brief": ".taketomarket/CAMPAIGNS/${SLUG}/BRIEF.md",
328
+ "positioning": ".taketomarket/POSITIONING.md",
329
+ "brand": ".taketomarket/BRAND.md",
330
+ "icp": ".taketomarket/ICP.md"
302
331
  },
303
332
  "hero": {
304
333
  "asset_id": 1,
@@ -331,7 +360,7 @@ TIMESTAMP=$(node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" timestamp --raw)
331
360
  Only include successfully produced assets (those that passed the `test -s` check) in the manifest.
332
361
  If any derivatives failed, `total_assets` reflects only the successful count.
333
362
 
334
- Write the completed manifest to `.marketing/CAMPAIGNS/${SLUG}/MANIFEST.json`.
363
+ Write the completed manifest to `.taketomarket/CAMPAIGNS/${SLUG}/MANIFEST.json`.
335
364
 
336
365
  The manifest is the ONLY bridge between produce and verify contexts (per D-11). Verify reads
337
366
  this file to discover which assets exist and what context was loaded during production.
@@ -357,7 +386,7 @@ takeToMarket > PRODUCTION COMPLETE
357
386
  Assets produced: ${TOTAL_SUCCESSFUL_ASSETS}
358
387
  Hero: 01-${HERO_TYPE}-${HERO_CHANNEL}.md
359
388
  Derivatives: [list of derivative filenames]
360
- Manifest: .marketing/CAMPAIGNS/${SLUG}/MANIFEST.json
389
+ Manifest: .taketomarket/CAMPAIGNS/${SLUG}/MANIFEST.json
361
390
 
362
391
  [If any derivatives failed:]
363
392
  WARNING: ${FAILED_COUNT} derivative(s) failed production. Check the manifest for details.
@@ -365,6 +394,20 @@ WARNING: ${FAILED_COUNT} derivative(s) failed production. Check the manifest for
365
394
  Next: Run /ttm-verify ${SLUG} to validate assets against quality gates
366
395
  ```
367
396
 
397
+ ---
398
+
399
+ ## Step 9: Final humanization (MANDATORY)
400
+
401
+ Every audience-facing asset MUST pass through `/ttm-humanize` before write.
402
+
403
+ For each draft asset produced in this phase:
404
+ 1. Invoke `/ttm-humanize <draft-path>` via the Skill tool.
405
+ 2. Wait for the rewritten version.
406
+ 3. Write the humanized output to the final asset destination.
407
+ 4. Do not write the un-humanized draft.
408
+
409
+ Internal state files (campaign briefs, manifests, STATE.md) are exempt.
410
+
368
411
  </process>
369
412
 
370
413
  <success_criteria>
@@ -375,9 +418,17 @@ Next: Run /ttm-verify ${SLUG} to validate assets against quality gates
375
418
  - [ ] Campaign STATE.md updated to phase=produced with timestamp
376
419
  - [ ] No playbook errors (graceful fallback for missing playbooks with warning)
377
420
  - [ ] Failed derivatives logged but do not abort the run
421
+ - [ ] Each audience-facing asset passed through /ttm-humanize before final write.
378
422
  </success_criteria>
379
423
 
380
424
  <output>
381
- - `.marketing/CAMPAIGNS/${SLUG}/ASSETS/*.md` (produced content files)
382
- - `.marketing/CAMPAIGNS/${SLUG}/MANIFEST.json` (production manifest for /ttm-verify)
425
+ - `.taketomarket/CAMPAIGNS/${SLUG}/ASSETS/*.md` (produced content files)
426
+ - `.taketomarket/CAMPAIGNS/${SLUG}/MANIFEST.json` (production manifest for /ttm-verify)
383
427
  </output>
428
+
429
+ ## What if this doesn't fit?
430
+
431
+ Looks like /ttm-produce can't do that yet.
432
+
433
+ - Want a new skill? /ttm-request-skill
434
+ - Existing skill needs work? /ttm-improve-skill
@@ -1,3 +1,32 @@
1
+ ## Step 0: First-run inline education
2
+
3
+ Read `.taketomarket/CONFIG.md`. Parse `first_run_seen` (object) and `inline_education` (boolean, default true).
4
+
5
+ If `inline_education` is false: skip this step. Else if `first_run_seen.ttm-review` is not `true`, print the explainer below verbatim, then mark this skill as seen:
6
+
7
+ ```bash
8
+ node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run mark ttm-review
9
+ ```
10
+
11
+ Use this exact check (bash) to decide whether to print: `node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run check ttm-review --raw` -- the JSON `seen` field is `true` once the explainer has run before.
12
+
13
+ ### Explainer for `/ttm-review`
14
+
15
+ `/ttm-review` is human-in-the-loop sign-off. After verify passes the
16
+ automated wall, review surfaces the asset with diff context and the gate
17
+ results so you can sanity-check tone, claims, and channel fit before it
18
+ ships. You can approve, reject with feedback, or escalate to a positioning
19
+ shift.
20
+
21
+ Why it matters: automated gates catch invariant violations but not subjective
22
+ calls about whether an asset is the right one for this moment. Review is the
23
+ human commit-message step: the system stops, surfaces context, and waits for
24
+ your decision rather than auto-shipping.
25
+
26
+ (Canonical source: `references/inline-education-blurbs.md`. Embedded verbatim because workflows do not @-resolve files at runtime.)
27
+
28
+ ---
29
+
1
30
  <purpose>
2
31
  Review workflow for /ttm-review. Presents verified assets with structured
3
32
  review checklist for human evaluation (LIFE-10). Collects per-asset outcomes
@@ -13,7 +42,7 @@ revision feedback on Revise (D-12). Auto-triggers /ttm-fix for revised assets (D
13
42
  <constraints>
14
43
  ## POSITIONING.md is READ-ONLY
15
44
 
16
- **Do NOT modify `.marketing/POSITIONING.md` during this workflow.**
45
+ **Do NOT modify `.taketomarket/POSITIONING.md` during this workflow.**
17
46
 
18
47
  POSITIONING.md is an architectural invariant. If you detect positioning drift:
19
48
  - In verify: use the Escalate option to launch /ttm-positioning-shift
@@ -63,33 +92,33 @@ SLUG=$(echo "$ARGUMENTS" | sed 's/--text//g' | xargs)
63
92
  If SLUG is empty, error: "Usage: /ttm-review [campaign-slug]. Provide a campaign slug." Exit.
64
93
 
65
94
  **Load Tier 1 summaries** from all 9 reference files (lines 1 to `<!-- END_SUMMARY -->`):
66
- - `.marketing/POSITIONING.md`
67
- - `.marketing/BRAND.md`
68
- - `.marketing/ICP.md`
69
- - `.marketing/CHANNELS.md`
70
- - `.marketing/STATE.md` (frontmatter only)
71
- - `.marketing/CALENDAR.md`
72
- - `.marketing/COMPETITORS.md`
73
- - `.marketing/METRICS.md`
74
- - `.marketing/LEARNINGS.md`
95
+ - `.taketomarket/POSITIONING.md`
96
+ - `.taketomarket/BRAND.md`
97
+ - `.taketomarket/ICP.md`
98
+ - `.taketomarket/CHANNELS.md`
99
+ - `.taketomarket/STATE.md` (frontmatter only)
100
+ - `.taketomarket/CALENDAR.md`
101
+ - `.taketomarket/COMPETITORS.md`
102
+ - `.taketomarket/METRICS.md`
103
+ - `.taketomarket/LEARNINGS.md`
75
104
 
76
105
  **Tier 2:** None for review (per context-loading.md matrix -- review is human-driven).
77
106
 
78
107
  **Load campaign-specific files** (always full-load per context-loading.md rule 4):
79
- - `.marketing/CAMPAIGNS/${SLUG}/STATE.md`
80
- - `.marketing/CAMPAIGNS/${SLUG}/BRIEF.md`
108
+ - `.taketomarket/CAMPAIGNS/${SLUG}/STATE.md`
109
+ - `.taketomarket/CAMPAIGNS/${SLUG}/BRIEF.md`
81
110
 
82
111
  **Load MANIFEST.json:**
83
112
  ```bash
84
- MANIFEST_PATH=".marketing/CAMPAIGNS/${SLUG}/MANIFEST.json"
113
+ MANIFEST_PATH=".taketomarket/CAMPAIGNS/${SLUG}/MANIFEST.json"
85
114
  ```
86
115
 
87
- Read `.marketing/CAMPAIGNS/${SLUG}/MANIFEST.json`. If the file does not exist, error:
116
+ Read `.taketomarket/CAMPAIGNS/${SLUG}/MANIFEST.json`. If the file does not exist, error:
88
117
  "No production manifest found for campaign '${SLUG}'. Run /ttm-produce first."
89
118
  Exit.
90
119
 
91
120
  **Load VERIFICATION.md:**
92
- Read `.marketing/CAMPAIGNS/${SLUG}/VERIFICATION.md`. If the file does not exist, error:
121
+ Read `.taketomarket/CAMPAIGNS/${SLUG}/VERIFICATION.md`. If the file does not exist, error:
93
122
  "No verification report found for campaign '${SLUG}'. Run /ttm-verify first."
94
123
  Exit.
95
124
 
@@ -150,7 +179,7 @@ GATE_RESULTS[asset_name] = {
150
179
  ```
151
180
 
152
181
  **Load content previews** from disk. For each asset:
153
- - Read the file from `.marketing/CAMPAIGNS/${SLUG}/${asset.file}`
182
+ - Read the file from `.taketomarket/CAMPAIGNS/${SLUG}/${asset.file}`
154
183
  - Extract the first ~500 characters for the hero, first ~300 characters for derivatives (D-04)
155
184
  - If an asset file is missing from disk, display warning and skip it
156
185
 
@@ -169,7 +198,7 @@ Display the hero asset in full detail:
169
198
 
170
199
  ```
171
200
  ## [HERO_ASSET_NAME]
172
- File: .marketing/CAMPAIGNS/${SLUG}/${HERO_FILE}
201
+ File: .taketomarket/CAMPAIGNS/${SLUG}/${HERO_FILE}
173
202
 
174
203
  ### Gate Summary
175
204
  | Gate | Result |
@@ -187,7 +216,7 @@ File: .marketing/CAMPAIGNS/${SLUG}/${HERO_FILE}
187
216
 
188
217
  ### Content Preview
189
218
  [First ~500 characters of the asset]
190
- [Full file: .marketing/CAMPAIGNS/${SLUG}/${HERO_FILE}]
219
+ [Full file: .taketomarket/CAMPAIGNS/${SLUG}/${HERO_FILE}]
191
220
  ```
192
221
 
193
222
  **Present the 4 mandatory review questions** from review-checklist.md. Use
@@ -251,7 +280,7 @@ Collect structured revision feedback per D-12 (see review-checklist.md):
251
280
 
252
281
  Set hero `review_status` = `"needs-fix"` in memory.
253
282
 
254
- Write the structured feedback to `.marketing/CAMPAIGNS/${SLUG}/REVIEW-FEEDBACK-${HERO_NAME}.md`:
283
+ Write the structured feedback to `.taketomarket/CAMPAIGNS/${SLUG}/REVIEW-FEEDBACK-${HERO_NAME}.md`:
255
284
  ```markdown
256
285
  # Review Feedback: [HERO_ASSET_NAME]
257
286
 
@@ -296,12 +325,12 @@ For each derivative asset:
296
325
  Show abbreviated gate summary (PASS count / WARN count / FAIL count -- not full table):
297
326
  ```
298
327
  ## [DERIVATIVE_NAME]
299
- File: .marketing/CAMPAIGNS/${SLUG}/${DERIVATIVE_FILE}
328
+ File: .taketomarket/CAMPAIGNS/${SLUG}/${DERIVATIVE_FILE}
300
329
  Gates: ${PASS_COUNT} PASS / ${WARN_COUNT} WARN / ${FAIL_COUNT} FAIL
301
330
 
302
331
  ### Content Preview
303
332
  [First ~300 characters of the asset]
304
- [Full file: .marketing/CAMPAIGNS/${SLUG}/${DERIVATIVE_FILE}]
333
+ [Full file: .taketomarket/CAMPAIGNS/${SLUG}/${DERIVATIVE_FILE}]
305
334
  ```
306
335
 
307
336
  ### Review Questions (Batch Mode)
@@ -317,7 +346,7 @@ Same 3 outcome options (Approve/Revise/Reject) per D-03.
317
346
  If **Approve**: Set derivative `review_status` = `"approved"` in memory.
318
347
 
319
348
  If **Revise**: Collect same structured revision feedback (failed items, severity,
320
- specific feedback). Write to `.marketing/CAMPAIGNS/${SLUG}/REVIEW-FEEDBACK-${DERIVATIVE_NAME}.md`.
349
+ specific feedback). Write to `.taketomarket/CAMPAIGNS/${SLUG}/REVIEW-FEEDBACK-${DERIVATIVE_NAME}.md`.
321
350
  Set derivative `review_status` = `"needs-fix"` in memory.
322
351
 
323
352
  If **Reject**: Collect rejection reason. Set derivative `review_status` = `"rejected"` in memory.
@@ -326,7 +355,7 @@ If **Reject**: Collect rejection reason. Set derivative `review_status` = `"reje
326
355
 
327
356
  ## Step 6: Update MANIFEST.json with Review Status (D-11, D-13)
328
357
 
329
- Read MANIFEST.json from `.marketing/CAMPAIGNS/${SLUG}/MANIFEST.json`.
358
+ Read MANIFEST.json from `.taketomarket/CAMPAIGNS/${SLUG}/MANIFEST.json`.
330
359
 
331
360
  Add `review_status` field to hero and each derivative:
332
361
  - `"approved"` for Approve outcomes
@@ -427,6 +456,23 @@ After fixes, approved + fixed assets can ship together via `/ttm-ship ${SLUG}`.
427
456
  </success_criteria>
428
457
 
429
458
  <output>
430
- - `.marketing/CAMPAIGNS/${SLUG}/MANIFEST.json` (updated with review_status per asset)
431
- - `.marketing/CAMPAIGNS/${SLUG}/REVIEW-FEEDBACK-*.md` (one per revised asset)
459
+ - `.taketomarket/CAMPAIGNS/${SLUG}/MANIFEST.json` (updated with review_status per asset)
460
+ - `.taketomarket/CAMPAIGNS/${SLUG}/REVIEW-FEEDBACK-*.md` (one per revised asset)
432
461
  </output>
462
+
463
+ ---
464
+
465
+ ## Step: Landing/pSEO quality gates (conditional)
466
+
467
+ If any asset under review is a landing-page or pSEO asset (detect by path under `landing_path` config):
468
+
469
+ Read and follow `${CLAUDE_PLUGIN_ROOT}/workflows/site/quality-gates.md`. Pass each gated asset through gates 1-6.
470
+
471
+ If any gate fails: report failure to user with gate output. Recommend `/ttm-fix`.
472
+
473
+ ## What if this doesn't fit?
474
+
475
+ Looks like /ttm-review can't do that yet.
476
+
477
+ - Want a new skill? /ttm-request-skill
478
+ - Existing skill needs work? /ttm-improve-skill
@@ -1,3 +1,31 @@
1
+ ## Step 0: First-run inline education
2
+
3
+ Read `.taketomarket/CONFIG.md`. Parse `first_run_seen` (object) and `inline_education` (boolean, default true).
4
+
5
+ If `inline_education` is false: skip this step. Else if `first_run_seen.ttm-ship` is not `true`, print the explainer below verbatim, then mark this skill as seen:
6
+
7
+ ```bash
8
+ node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run mark ttm-ship
9
+ ```
10
+
11
+ Use this exact check (bash) to decide whether to print: `node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run check ttm-ship --raw` -- the JSON `seen` field is `true` once the explainer has run before.
12
+
13
+ ### Explainer for `/ttm-ship`
14
+
15
+ `/ttm-ship` is the publish step. It packages the approved asset for its
16
+ target channel, writes the canonical version into the campaign's `shipped/`
17
+ directory, updates STATE.md to `shipped`, and records the outcome metric
18
+ hooks so `/ttm-measure` knows what to read later.
19
+
20
+ Why it matters: shipping in marketing is when a campaign becomes a measurable
21
+ unit. Without the structured ship step, you've got files in a folder and no
22
+ way to attribute results back to the brief. Treat this like `git tag` plus
23
+ deployment: the moment the asset goes live and starts producing data.
24
+
25
+ (Canonical source: `references/inline-education-blurbs.md`. Embedded verbatim because workflows do not @-resolve files at runtime.)
26
+
27
+ ---
28
+
1
29
  <purpose>
2
30
  Ship workflow for /ttm-ship. Generates a dynamic launch checklist per campaign
3
31
  based on channel mix and asset types (D-09). AI auto-checks verifiable items,
@@ -13,7 +41,7 @@ status allows staggered launches (D-11). Only ship-ready assets can ship.
13
41
  <constraints>
14
42
  ## POSITIONING.md is READ-ONLY
15
43
 
16
- **Do NOT modify `.marketing/POSITIONING.md` during this workflow.**
44
+ **Do NOT modify `.taketomarket/POSITIONING.md` during this workflow.**
17
45
 
18
46
  POSITIONING.md is an architectural invariant. If you detect positioning drift:
19
47
  - In verify: use the Escalate option to launch /ttm-positioning-shift
@@ -63,34 +91,34 @@ SLUG=$(echo "$ARGUMENTS" | sed 's/--text//g' | xargs)
63
91
  If SLUG is empty, error: "Usage: /ttm-ship [campaign-slug]. Provide a campaign slug." Exit.
64
92
 
65
93
  **Load Tier 1 summaries** from all 9 reference files (lines 1 to `<!-- END_SUMMARY -->`):
66
- - `.marketing/POSITIONING.md`
67
- - `.marketing/BRAND.md`
68
- - `.marketing/ICP.md`
69
- - `.marketing/CHANNELS.md`
70
- - `.marketing/STATE.md` (frontmatter only)
71
- - `.marketing/CALENDAR.md`
72
- - `.marketing/COMPETITORS.md`
73
- - `.marketing/METRICS.md`
74
- - `.marketing/LEARNINGS.md`
94
+ - `.taketomarket/POSITIONING.md`
95
+ - `.taketomarket/BRAND.md`
96
+ - `.taketomarket/ICP.md`
97
+ - `.taketomarket/CHANNELS.md`
98
+ - `.taketomarket/STATE.md` (frontmatter only)
99
+ - `.taketomarket/CALENDAR.md`
100
+ - `.taketomarket/COMPETITORS.md`
101
+ - `.taketomarket/METRICS.md`
102
+ - `.taketomarket/LEARNINGS.md`
75
103
 
76
104
  **Load Tier 2 (full content)** for ship checklist generation:
77
- - `.marketing/CHANNELS.md` (needed for UTM schema and channel-specific details)
105
+ - `.taketomarket/CHANNELS.md` (needed for UTM schema and channel-specific details)
78
106
 
79
107
  **Load campaign-specific files** (always full-load per context-loading.md rule 4):
80
- - `.marketing/CAMPAIGNS/${SLUG}/STATE.md`
81
- - `.marketing/CAMPAIGNS/${SLUG}/BRIEF.md`
108
+ - `.taketomarket/CAMPAIGNS/${SLUG}/STATE.md`
109
+ - `.taketomarket/CAMPAIGNS/${SLUG}/BRIEF.md`
82
110
 
83
111
  **Load MANIFEST.json:**
84
112
  ```bash
85
- MANIFEST_PATH=".marketing/CAMPAIGNS/${SLUG}/MANIFEST.json"
113
+ MANIFEST_PATH=".taketomarket/CAMPAIGNS/${SLUG}/MANIFEST.json"
86
114
  ```
87
115
 
88
- Read `.marketing/CAMPAIGNS/${SLUG}/MANIFEST.json`. If the file does not exist, error:
116
+ Read `.taketomarket/CAMPAIGNS/${SLUG}/MANIFEST.json`. If the file does not exist, error:
89
117
  "No production manifest found for campaign '${SLUG}'. Run /ttm-produce first."
90
118
  Exit.
91
119
 
92
120
  **Load VERIFICATION.md:**
93
- Read `.marketing/CAMPAIGNS/${SLUG}/VERIFICATION.md`. If the file does not exist, error:
121
+ Read `.taketomarket/CAMPAIGNS/${SLUG}/VERIFICATION.md`. If the file does not exist, error:
94
122
  "No verification report found for campaign '${SLUG}'. Run /ttm-verify first."
95
123
  Exit.
96
124
 
@@ -224,7 +252,7 @@ the ship-ready asset files and campaign data.
224
252
  Scan each ship-ready asset file for URLs containing `utm_` parameters.
225
253
  - Check format: `utm_source`, `utm_medium`, `utm_campaign` must all be present in each
226
254
  tracked URL.
227
- - Cross-reference against `.marketing/CHANNELS.md` UTM schema if available.
255
+ - Cross-reference against `.taketomarket/CHANNELS.md` UTM schema if available.
228
256
  - Result: PASS (valid UTMs found on all trackable links), WARN (no trackable links found
229
257
  in assets -- may be expected for some asset types), FAIL (malformed UTMs -- missing
230
258
  required parameters or inconsistent naming).
@@ -517,5 +545,21 @@ If SHIPPED_COUNT < 3, do not display anything.
517
545
  </success_criteria>
518
546
 
519
547
  <output>
520
- - `.marketing/CAMPAIGNS/${SLUG}/MANIFEST.json` (updated with ship_status and shipped_at per asset)
548
+ - `.taketomarket/CAMPAIGNS/${SLUG}/MANIFEST.json` (updated with ship_status and shipped_at per asset)
521
549
  </output>
550
+
551
+ ---
552
+
553
+ ## Step: Deploy landing/pSEO assets (conditional)
554
+
555
+ If any asset in this campaign is a landing-page or pSEO asset:
556
+ 1. Invoke `/ttm-deploy` via Skill tool.
557
+ 2. Confirm a deploy URL was produced.
558
+ 3. Confirm `/ttm-deploy` wrote `last_deploy_url` to `.taketomarket/CONFIG.md` (its Step 4). `CONFIG.md` is the single source of truth — read back by `/ttm-verify`. Do not duplicate into the campaign's STATE.md.
559
+
560
+ ## What if this doesn't fit?
561
+
562
+ Looks like /ttm-ship can't do that yet.
563
+
564
+ - Want a new skill? /ttm-request-skill
565
+ - Existing skill needs work? /ttm-improve-skill