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.
- package/.claude-plugin/marketplace.json +13 -17
- package/.claude-plugin/plugin.json +2 -2
- package/README.md +35 -12
- package/bin/lib/campaign.cjs +12 -8
- package/bin/lib/codebase-scan.cjs +86 -0
- package/bin/lib/config.cjs +129 -0
- package/bin/lib/deploy.cjs +36 -0
- package/bin/lib/deviation.cjs +1 -1
- package/bin/lib/drift-log.cjs +4 -4
- package/bin/lib/health.cjs +32 -31
- package/bin/lib/install-detect.cjs +62 -0
- package/bin/lib/legacy-folder.cjs +100 -0
- package/bin/lib/playwright-check.cjs +26 -0
- package/bin/lib/site-location.cjs +22 -0
- package/bin/lib/state.cjs +3 -3
- package/bin/lib/svg-render.cjs +42 -0
- package/bin/ttm-tools.cjs +136 -4
- package/gates/base-gates.md +8 -8
- package/gates/gate-evaluation.md +8 -8
- package/install.js +37 -3
- package/package.json +10 -6
- package/playbooks/aeo.md +218 -114
- package/playbooks/affiliate.md +225 -160
- package/playbooks/email.md +236 -174
- package/playbooks/events.md +303 -213
- package/playbooks/landing-pages.md +309 -0
- package/playbooks/linkedin.md +264 -142
- package/playbooks/manifesto.md +322 -0
- package/playbooks/paid-ads.md +240 -189
- package/playbooks/positioning.md +340 -0
- package/playbooks/pr-media.md +308 -168
- package/playbooks/pseo.md +426 -0
- package/playbooks/seo.md +251 -158
- package/playbooks/social.md +253 -182
- package/playbooks/youtube.md +286 -181
- package/references/brand-color-theory.md +48 -0
- package/references/codex-image-gen-research.md +58 -0
- package/references/context-loading.md +6 -6
- package/references/humanizer-patterns.md +433 -0
- package/references/inline-education-blurbs.md +461 -0
- package/references/landing-page-anatomy.md +65 -0
- package/references/landing-page-headline-examples.md +190 -0
- package/references/linkedin-post-patterns.md +174 -0
- package/references/logo-design-principles.md +55 -0
- package/references/meta-gate-evaluation.md +3 -3
- package/references/obra-superpowers-conventions.md +170 -0
- package/references/playbook-leaders.md +472 -0
- package/references/playwright-mcp-setup.md +164 -0
- package/references/positioning-check-report.md +2 -2
- package/references/pseo-page-anatomy.md +56 -0
- package/references/pseo-templates/alternative-anatomy.md +31 -0
- package/references/pseo-templates/alternative-content-playbook.md +32 -0
- package/references/pseo-templates/blog-anatomy.md +28 -0
- package/references/pseo-templates/blog-content-playbook.md +36 -0
- package/references/pseo-templates/comparison-anatomy.md +29 -0
- package/references/pseo-templates/comparison-content-playbook.md +35 -0
- package/references/pseo-templates/use-case-anatomy.md +28 -0
- package/references/pseo-templates/use-case-content-playbook.md +30 -0
- package/skills/ttm-101/SKILL.md +25 -0
- package/skills/ttm-aeo-check/SKILL.md +17 -12
- package/skills/ttm-affiliate-kit/SKILL.md +5 -0
- package/skills/ttm-archive/SKILL.md +5 -0
- package/skills/ttm-brand-refresh/SKILL.md +5 -0
- package/skills/ttm-brief/SKILL.md +5 -0
- package/skills/ttm-competitor-scan/SKILL.md +5 -0
- package/skills/ttm-deploy/SKILL.md +22 -0
- package/skills/ttm-discover/SKILL.md +17 -0
- package/skills/ttm-email-check/SKILL.md +17 -0
- package/skills/ttm-email-preflight/SKILL.md +17 -11
- package/skills/ttm-fix/SKILL.md +5 -0
- package/skills/ttm-health/SKILL.md +6 -1
- package/skills/ttm-humanize/SKILL.md +33 -0
- package/skills/ttm-icp-refresh/SKILL.md +5 -0
- package/skills/ttm-improve-skill/SKILL.md +18 -0
- package/skills/ttm-init/SKILL.md +10 -3
- package/skills/ttm-keyword-map/SKILL.md +17 -11
- package/skills/ttm-landing/SKILL.md +19 -0
- package/skills/ttm-learn/SKILL.md +5 -0
- package/skills/ttm-linkedin-post/SKILL.md +26 -0
- package/skills/ttm-measure/SKILL.md +5 -0
- package/skills/ttm-new-campaign/SKILL.md +5 -0
- package/skills/ttm-next/SKILL.md +5 -0
- package/skills/ttm-playwright-setup/SKILL.md +18 -0
- package/skills/ttm-positioning-check/SKILL.md +5 -0
- package/skills/ttm-positioning-shift/SKILL.md +5 -0
- package/skills/ttm-produce/SKILL.md +5 -0
- package/skills/ttm-pseo/SKILL.md +26 -0
- package/skills/ttm-repurpose/SKILL.md +5 -0
- package/skills/ttm-request-skill/SKILL.md +18 -0
- package/skills/ttm-research/SKILL.md +18 -6
- package/skills/ttm-resume/SKILL.md +5 -0
- package/skills/ttm-review/SKILL.md +5 -0
- package/skills/ttm-seo/SKILL.md +64 -0
- package/skills/ttm-seo-audit/SKILL.md +17 -12
- package/skills/ttm-ship/SKILL.md +5 -0
- package/skills/ttm-state/SKILL.md +5 -0
- package/skills/ttm-update/SKILL.md +152 -4
- package/skills/ttm-verify/SKILL.md +5 -0
- package/templates/agents-md.md +14 -4
- package/templates/campaign-research.md +6 -6
- package/templates/campaign-state.md +1 -1
- package/templates/claude-md.md +14 -4
- package/templates/linkedin-base-template.md +48 -0
- package/templates/next-step-footer.md +13 -0
- package/templates/production-manifest.json +4 -4
- package/templates/pseo/alternative-cms-schema.json +65 -0
- package/templates/pseo/blog-cms-schema.json +55 -0
- package/templates/pseo/comparison-cms-schema.json +56 -0
- package/templates/pseo/use-case-cms-schema.json +62 -0
- package/templates/reference-files/brand.md +51 -0
- package/templates/reference-files/product-dna.md +73 -0
- package/templates/site-scaffold/app/globals.css +2 -0
- package/templates/site-scaffold/app/layout.tsx +17 -0
- package/templates/site-scaffold/app/page.tsx +33 -0
- package/templates/site-scaffold/app/robots.ts +8 -0
- package/templates/site-scaffold/app/sitemap.ts +10 -0
- package/templates/site-scaffold/app/tokens.css +21 -0
- package/templates/site-scaffold/components/Comparison.tsx +14 -0
- package/templates/site-scaffold/components/Faq.tsx +14 -0
- package/templates/site-scaffold/components/Features.tsx +14 -0
- package/templates/site-scaffold/components/FinalCta.tsx +17 -0
- package/templates/site-scaffold/components/Footer.tsx +12 -0
- package/templates/site-scaffold/components/Hero.tsx +22 -0
- package/templates/site-scaffold/components/HowItWorks.tsx +14 -0
- package/templates/site-scaffold/components/PricingTeaser.tsx +14 -0
- package/templates/site-scaffold/components/Problem.tsx +14 -0
- package/templates/site-scaffold/components/SocialProof.tsx +14 -0
- package/templates/site-scaffold/components/Solution.tsx +14 -0
- package/templates/site-scaffold/components/Testimonials.tsx +14 -0
- package/templates/site-scaffold/components/UseCases.tsx +14 -0
- package/templates/site-scaffold/content/.gitkeep +0 -0
- package/templates/site-scaffold/lib/.gitkeep +0 -0
- package/templates/site-scaffold/next.config.mjs +10 -0
- package/templates/site-scaffold/package.json +25 -0
- package/templates/site-scaffold/postcss.config.mjs +3 -0
- package/templates/site-scaffold/public/llms.txt +9 -0
- package/templates/site-scaffold/tsconfig.json +21 -0
- package/templates/verification-report.md +1 -1
- package/workflows/channel/linkedin-post.md +178 -0
- package/workflows/discipline/affiliate-kit.md +65 -6
- package/workflows/discipline/{email-preflight.md → email-check.md} +39 -4
- package/workflows/discipline/repurpose.md +82 -31
- package/workflows/discipline/{aeo-check.md → seo/aeo.md} +13 -6
- package/workflows/discipline/{seo-audit.md → seo/audit.md} +13 -6
- package/workflows/discipline/{keyword-map.md → seo/keyword-map.md} +13 -6
- package/workflows/education/ttm-101.md +114 -0
- package/workflows/lifecycle/brief-positioning-check.md +1 -1
- package/workflows/lifecycle/brief.md +64 -28
- package/workflows/lifecycle/{research.md → discover.md} +61 -19
- package/workflows/lifecycle/fix.md +72 -37
- package/workflows/lifecycle/humanize.md +280 -0
- package/workflows/lifecycle/learn.md +72 -35
- package/workflows/lifecycle/measure.md +54 -18
- package/workflows/lifecycle/produce.md +88 -37
- package/workflows/lifecycle/review.md +71 -25
- package/workflows/lifecycle/ship.md +62 -18
- package/workflows/lifecycle/verify.md +72 -26
- package/workflows/reference-mgmt/brand-refresh.md +50 -13
- package/workflows/reference-mgmt/competitor-scan.md +51 -15
- package/workflows/reference-mgmt/icp-refresh.md +48 -12
- package/workflows/reference-mgmt/positioning-check.md +55 -20
- package/workflows/reference-mgmt/positioning-shift.md +53 -17
- package/workflows/setup/init-brand-colors.md +75 -0
- package/workflows/setup/init-logo.md +113 -0
- package/workflows/setup/init-product-dna.md +83 -0
- package/workflows/setup/init-questions.md +166 -30
- package/workflows/setup/init-validation.md +22 -0
- package/workflows/setup/init.md +144 -39
- package/workflows/setup/new-campaign.md +48 -12
- package/workflows/site/deploy.md +98 -0
- package/workflows/site/landing.md +156 -0
- package/workflows/site/pseo.md +96 -0
- package/workflows/site/quality-gates.md +88 -0
- package/workflows/utility/archive.md +45 -9
- package/workflows/utility/health.md +77 -3
- package/workflows/utility/improve-skill.md +233 -0
- package/workflows/utility/next.md +38 -2
- package/workflows/utility/playwright-setup.md +128 -0
- package/workflows/utility/request-skill.md +218 -0
- package/workflows/utility/resume.md +40 -3
- 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 `.
|
|
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
|
-
- `.
|
|
66
|
-
- `.
|
|
67
|
-
- `.
|
|
68
|
-
- `.
|
|
69
|
-
- `.
|
|
70
|
-
- `.
|
|
71
|
-
- `.
|
|
72
|
-
- `.
|
|
73
|
-
- `.
|
|
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
|
-
- `.
|
|
77
|
-
- `.
|
|
78
|
-
- `.
|
|
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
|
-
- `.
|
|
82
|
-
- `.
|
|
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 `.
|
|
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]` --> `.
|
|
211
|
-
- `[POSITIONING_PATH]` --> `.
|
|
212
|
-
- `[BRAND_PATH]` --> `.
|
|
213
|
-
- `[ICP_PATH]` --> `.
|
|
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]` --> `.
|
|
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 ".
|
|
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]` --> `.
|
|
257
|
-
- `[POSITIONING_PATH]` --> `.
|
|
258
|
-
- `[BRAND_PATH]` --> `.
|
|
259
|
-
- `[ICP_PATH]` --> `.
|
|
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]` --> `.
|
|
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]` --> `.
|
|
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 ".
|
|
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": ".
|
|
299
|
-
"positioning": ".
|
|
300
|
-
"brand": ".
|
|
301
|
-
"icp": ".
|
|
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 `.
|
|
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: .
|
|
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
|
-
- `.
|
|
382
|
-
- `.
|
|
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 `.
|
|
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
|
-
- `.
|
|
67
|
-
- `.
|
|
68
|
-
- `.
|
|
69
|
-
- `.
|
|
70
|
-
- `.
|
|
71
|
-
- `.
|
|
72
|
-
- `.
|
|
73
|
-
- `.
|
|
74
|
-
- `.
|
|
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
|
-
- `.
|
|
80
|
-
- `.
|
|
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=".
|
|
113
|
+
MANIFEST_PATH=".taketomarket/CAMPAIGNS/${SLUG}/MANIFEST.json"
|
|
85
114
|
```
|
|
86
115
|
|
|
87
|
-
Read `.
|
|
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 `.
|
|
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 `.
|
|
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: .
|
|
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: .
|
|
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 `.
|
|
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: .
|
|
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: .
|
|
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 `.
|
|
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 `.
|
|
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
|
-
- `.
|
|
431
|
-
- `.
|
|
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 `.
|
|
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
|
-
- `.
|
|
67
|
-
- `.
|
|
68
|
-
- `.
|
|
69
|
-
- `.
|
|
70
|
-
- `.
|
|
71
|
-
- `.
|
|
72
|
-
- `.
|
|
73
|
-
- `.
|
|
74
|
-
- `.
|
|
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
|
-
- `.
|
|
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
|
-
- `.
|
|
81
|
-
- `.
|
|
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=".
|
|
113
|
+
MANIFEST_PATH=".taketomarket/CAMPAIGNS/${SLUG}/MANIFEST.json"
|
|
86
114
|
```
|
|
87
115
|
|
|
88
|
-
Read `.
|
|
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 `.
|
|
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 `.
|
|
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
|
-
- `.
|
|
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
|