taketomarket 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/.claude-plugin/plugin.json +10 -0
  2. package/LICENSE +21 -0
  3. package/README.md +419 -0
  4. package/agents/ttm-producer.md +53 -0
  5. package/bin/lib/campaign.cjs +553 -0
  6. package/bin/lib/commit.cjs +105 -0
  7. package/bin/lib/core.cjs +172 -0
  8. package/bin/lib/deviation.cjs +149 -0
  9. package/bin/lib/drift-log.cjs +219 -0
  10. package/bin/lib/health.cjs +438 -0
  11. package/bin/lib/slug.cjs +59 -0
  12. package/bin/lib/state.cjs +96 -0
  13. package/bin/ttm-tools.cjs +157 -0
  14. package/gates/base-gates.md +266 -0
  15. package/gates/discipline/.gitkeep +0 -0
  16. package/gates/gate-evaluation.md +341 -0
  17. package/gates/meta-gates.md +19 -0
  18. package/install.js +307 -0
  19. package/package.json +53 -0
  20. package/playbooks/.gitkeep +0 -0
  21. package/playbooks/aeo.md +223 -0
  22. package/playbooks/affiliate.md +272 -0
  23. package/playbooks/base.md +110 -0
  24. package/playbooks/email.md +306 -0
  25. package/playbooks/events.md +320 -0
  26. package/playbooks/linkedin.md +263 -0
  27. package/playbooks/paid-ads.md +318 -0
  28. package/playbooks/pr-media.md +296 -0
  29. package/playbooks/seo.md +284 -0
  30. package/playbooks/social.md +305 -0
  31. package/playbooks/youtube.md +325 -0
  32. package/references/context-loading.md +107 -0
  33. package/references/learnings-extraction.md +94 -0
  34. package/references/measurement-template.md +48 -0
  35. package/references/meta-gate-evaluation.md +169 -0
  36. package/references/positioning-check-report.md +197 -0
  37. package/references/review-checklist.md +78 -0
  38. package/references/ship-checklist-items.md +94 -0
  39. package/settings.json +4 -0
  40. package/skills/ttm-aeo-check/SKILL.md +20 -0
  41. package/skills/ttm-affiliate-kit/SKILL.md +19 -0
  42. package/skills/ttm-archive/SKILL.md +13 -0
  43. package/skills/ttm-brand-refresh/SKILL.md +19 -0
  44. package/skills/ttm-brief/SKILL.md +14 -0
  45. package/skills/ttm-competitor-scan/SKILL.md +19 -0
  46. package/skills/ttm-email-preflight/SKILL.md +19 -0
  47. package/skills/ttm-fix/SKILL.md +13 -0
  48. package/skills/ttm-health/SKILL.md +12 -0
  49. package/skills/ttm-icp-refresh/SKILL.md +19 -0
  50. package/skills/ttm-init/SKILL.md +12 -0
  51. package/skills/ttm-keyword-map/SKILL.md +19 -0
  52. package/skills/ttm-learn/SKILL.md +14 -0
  53. package/skills/ttm-measure/SKILL.md +14 -0
  54. package/skills/ttm-new-campaign/SKILL.md +13 -0
  55. package/skills/ttm-next/SKILL.md +12 -0
  56. package/skills/ttm-positioning-check/SKILL.md +19 -0
  57. package/skills/ttm-positioning-shift/SKILL.md +19 -0
  58. package/skills/ttm-produce/SKILL.md +14 -0
  59. package/skills/ttm-repurpose/SKILL.md +20 -0
  60. package/skills/ttm-research/SKILL.md +13 -0
  61. package/skills/ttm-resume/SKILL.md +13 -0
  62. package/skills/ttm-review/SKILL.md +13 -0
  63. package/skills/ttm-seo-audit/SKILL.md +20 -0
  64. package/skills/ttm-ship/SKILL.md +13 -0
  65. package/skills/ttm-state/SKILL.md +13 -0
  66. package/skills/ttm-verify/SKILL.md +14 -0
  67. package/templates/agents-md.md +65 -0
  68. package/templates/campaign-brief.md +74 -0
  69. package/templates/campaign-research.md +39 -0
  70. package/templates/campaign-state.md +40 -0
  71. package/templates/claude-md.md +65 -0
  72. package/templates/deviation-log.md +12 -0
  73. package/templates/drift-log.md +17 -0
  74. package/templates/fix-brief.md +59 -0
  75. package/templates/fix-log.md +22 -0
  76. package/templates/measurement-report.md +75 -0
  77. package/templates/migration-plan.md +24 -0
  78. package/templates/production-manifest.json +20 -0
  79. package/templates/reference-files/brand.md +45 -0
  80. package/templates/reference-files/calendar.md +30 -0
  81. package/templates/reference-files/channels.md +40 -0
  82. package/templates/reference-files/competitors.md +40 -0
  83. package/templates/reference-files/icp.md +50 -0
  84. package/templates/reference-files/learnings.md +40 -0
  85. package/templates/reference-files/metrics.md +42 -0
  86. package/templates/reference-files/positioning.md +38 -0
  87. package/templates/reference-files/state.md +27 -0
  88. package/templates/verification-report.md +59 -0
  89. package/workflows/discipline/.gitkeep +0 -0
  90. package/workflows/discipline/aeo-check.md +180 -0
  91. package/workflows/discipline/affiliate-kit.md +147 -0
  92. package/workflows/discipline/email-preflight.md +150 -0
  93. package/workflows/discipline/keyword-map.md +125 -0
  94. package/workflows/discipline/repurpose.md +329 -0
  95. package/workflows/discipline/seo-audit.md +169 -0
  96. package/workflows/lifecycle/.gitkeep +0 -0
  97. package/workflows/lifecycle/brief-positioning-check.md +90 -0
  98. package/workflows/lifecycle/brief.md +355 -0
  99. package/workflows/lifecycle/fix.md +495 -0
  100. package/workflows/lifecycle/learn.md +405 -0
  101. package/workflows/lifecycle/measure.md +379 -0
  102. package/workflows/lifecycle/produce.md +383 -0
  103. package/workflows/lifecycle/research.md +264 -0
  104. package/workflows/lifecycle/review.md +432 -0
  105. package/workflows/lifecycle/ship.md +521 -0
  106. package/workflows/lifecycle/verify.md +507 -0
  107. package/workflows/reference-mgmt/.gitkeep +0 -0
  108. package/workflows/reference-mgmt/brand-refresh.md +193 -0
  109. package/workflows/reference-mgmt/competitor-scan.md +228 -0
  110. package/workflows/reference-mgmt/icp-refresh.md +200 -0
  111. package/workflows/reference-mgmt/positioning-check.md +339 -0
  112. package/workflows/reference-mgmt/positioning-shift.md +368 -0
  113. package/workflows/setup/.gitkeep +0 -0
  114. package/workflows/setup/init-questions.md +225 -0
  115. package/workflows/setup/init-validation.md +155 -0
  116. package/workflows/setup/init.md +449 -0
  117. package/workflows/setup/new-campaign.md +134 -0
  118. package/workflows/utility/.gitkeep +0 -0
  119. package/workflows/utility/archive.md +334 -0
  120. package/workflows/utility/health.md +166 -0
  121. package/workflows/utility/next.md +187 -0
  122. package/workflows/utility/resume.md +249 -0
  123. package/workflows/utility/state.md +207 -0
@@ -0,0 +1,65 @@
1
+ # takeToMarket - Codex Instructions
2
+
3
+ ## Core Invariant
4
+
5
+ Every marketing asset ships with a verifiable outcome metric and passes through a positioning-invariant quality gate wall. No asset ships without both, ever.
6
+
7
+ ## Positioning as Invariant (positioning-as-invariant)
8
+
9
+ POSITIONING.md is the source of truth for all marketing content. It is:
10
+ - **Read-only during campaign execution** -- cannot be edited from within a campaign
11
+ - **Loaded into every phase context** -- compact summary in non-produce phases, full document in produce/verify
12
+ - **Enforced via quality gates** -- positioning drift gate is Tier 1 (blocking)
13
+
14
+ To change positioning, use `/ttm-positioning-shift` which requires:
15
+ 1. Explicit reasoning for the shift
16
+ 2. Migration plan for existing assets
17
+ 3. Deprecation schedule
18
+ 4. Human approval
19
+
20
+ ## Outcome Over Output
21
+
22
+ Every campaign brief must define:
23
+ - **Outcome metric**: What business result we expect (e.g., "20% increase in trial starts")
24
+ - **Output metric**: What we produce (e.g., "4 blog posts, 2 emails")
25
+
26
+ Outcome is reported first. Output without outcome is not a campaign.
27
+
28
+ ## Campaign Lifecycle
29
+
30
+ Campaigns follow a 9-phase lifecycle: Discover -> Brief -> Produce -> Verify -> Review -> Fix -> Ship -> Measure -> Learn
31
+
32
+ Each phase has a dedicated `/ttm-*` command. Phases cannot be skipped.
33
+
34
+ ## File Paths
35
+
36
+ - Marketing state: `.marketing/`
37
+ - Reference files: `.marketing/POSITIONING.md`, `.marketing/BRAND.md`, etc.
38
+ - Campaigns: `.marketing/CAMPAIGNS/<slug>/`
39
+ - Campaign state: `.marketing/CAMPAIGNS/<slug>/STATE.md`
40
+
41
+ ## Deterministic Operations
42
+
43
+ Always use `ttm-tools.cjs` for:
44
+ - Slug generation: `node ttm-tools.cjs slug "campaign name"`
45
+ - Timestamps: `node ttm-tools.cjs timestamp`
46
+ - State updates: `node ttm-tools.cjs state update <field> <value>`
47
+ - Health checks: `node ttm-tools.cjs health`
48
+
49
+ Never generate slugs or timestamps via AI -- they must be deterministic.
50
+
51
+ ## Quality Gate Wall
52
+
53
+ Assets pass through 10 base quality gates:
54
+ 1. Positioning drift (Tier 1 - blocking)
55
+ 2. Claim accuracy (Tier 1 - blocking)
56
+ 3. Voice drift
57
+ 4. Outcome alignment (Tier 1 - blocking)
58
+ 5. Funnel integrity
59
+ 6. UTM hygiene
60
+ 7. Compliance
61
+ 8. Competitor collision
62
+ 9. ICP fit
63
+ 10. Format correctness
64
+
65
+ Tier 1 gates are blocking. Tier 2 gates are advisory.
@@ -0,0 +1,74 @@
1
+ # Campaign Brief: [GENERATED BY /ttm-brief]
2
+
3
+ ## Campaign Name
4
+ [GENERATED BY /ttm-brief]
5
+
6
+ ## Goal
7
+ [GENERATED BY /ttm-brief -- One sentence describing the campaign's purpose]
8
+
9
+ ## Outcome Metric
10
+
11
+ **Metric:** [GENERATED BY /ttm-brief -- e.g., "Trial starts"]
12
+ **Target value:** [GENERATED BY /ttm-brief -- e.g., "20% increase from baseline"]
13
+ **Measurement window:** [GENERATED BY /ttm-brief -- e.g., "30 days post-launch"]
14
+ **Data source:** [GENERATED BY /ttm-brief -- e.g., "Analytics dashboard, pasted into /ttm-measure"]
15
+
16
+ ## Output Metric
17
+
18
+ **Assets to produce:** [GENERATED BY /ttm-brief -- e.g., "4 blog posts, 2 emails, 1 landing page"]
19
+ **Estimated production waves:** [GENERATED BY /ttm-brief -- e.g., "2 waves"]
20
+
21
+ ## ICP Segment
22
+
23
+ **Primary segment:** [GENERATED BY /ttm-brief -- from ICP.md]
24
+ **Specific sub-segment (if any):** [GENERATED BY /ttm-brief]
25
+
26
+ ## Positioning Anchor
27
+
28
+ **Key message:** [GENERATED BY /ttm-brief -- derived from POSITIONING.md]
29
+ **Primary differentiator:** [GENERATED BY /ttm-brief -- from POSITIONING.md]
30
+
31
+ ## Hook
32
+
33
+ [GENERATED BY /ttm-brief -- The opening angle or attention-capture strategy]
34
+
35
+ ## Proof Points
36
+
37
+ | Claim | Proof Point | Source |
38
+ |-------|-------------|--------|
39
+ | [GENERATED BY /ttm-brief] | [from POSITIONING.md proof library] | [source] |
40
+
41
+ ## Channel Mix
42
+
43
+ | Channel | Role | Asset Types | Cadence |
44
+ |---------|------|-------------|---------|
45
+ | [GENERATED BY /ttm-brief -- from CHANNELS.md] | [primary/support/amplification] | [types] | [frequency] |
46
+
47
+ ## Assets List
48
+
49
+ | # | Asset Type | Channel | Status |
50
+ |---|-----------|---------|--------|
51
+ | 1 | [GENERATED BY /ttm-brief] | [channel] | planned |
52
+
53
+ ## Success Criteria
54
+
55
+ - [GENERATED BY /ttm-brief -- Specific, measurable criteria for campaign success]
56
+
57
+ ## Failure Criteria
58
+
59
+ - [GENERATED BY /ttm-brief -- Conditions that indicate the campaign should be paused or killed]
60
+
61
+ ## Dependencies
62
+
63
+ - [GENERATED BY /ttm-brief -- What must be true before this campaign can launch]
64
+
65
+ ## Timeline
66
+
67
+ | Phase | Target Date | Notes |
68
+ |-------|------------|-------|
69
+ | Brief complete | [GENERATED BY /ttm-brief] | |
70
+ | Production start | [GENERATED BY /ttm-brief] | |
71
+ | Review complete | [GENERATED BY /ttm-brief] | |
72
+ | Ship date | [GENERATED BY /ttm-brief] | |
73
+ | Measurement start | [GENERATED BY /ttm-brief] | |
74
+ | Learn review | [GENERATED BY /ttm-brief] | |
@@ -0,0 +1,39 @@
1
+ # Research: [CAMPAIGN_NAME]
2
+
3
+ **Campaign:** [SLUG]
4
+ **Researched:** pending
5
+ **Method:** pending
6
+
7
+ ## Market Context
8
+
9
+ <!-- HIGH = verified source URL or cited data; MEDIUM = user-provided paste; LOW = AI inference -->
10
+
11
+ | Insight | Confidence | Source |
12
+ |---------|-----------|--------|
13
+ | [GENERATED BY /ttm-research] | HIGH/MEDIUM/LOW | [source or "user-provided"] |
14
+
15
+ ## Competitor Content Analysis
16
+
17
+ | Competitor | Content Type | Key Message | Gap/Opportunity |
18
+ |-----------|-------------|-------------|-----------------|
19
+ | [GENERATED BY /ttm-research] | [type] | [message] | [gap] |
20
+
21
+ ## Audience Insights
22
+
23
+ | Insight | Confidence | Source |
24
+ |---------|-----------|--------|
25
+ | [GENERATED BY /ttm-research] | HIGH/MEDIUM/LOW | [source] |
26
+
27
+ ## Ambient Narrative
28
+
29
+ [GENERATED BY /ttm-research -- What the market already believes about this topic]
30
+
31
+ ## Content Gaps
32
+
33
+ | Gap | Opportunity Size | Difficulty |
34
+ |-----|-----------------|------------|
35
+ | [GENERATED BY /ttm-research] | HIGH/MEDIUM/LOW | HIGH/MEDIUM/LOW |
36
+
37
+ ## Research Summary
38
+
39
+ [GENERATED BY /ttm-research -- 2-3 sentence summary for /ttm-brief to consume quickly]
@@ -0,0 +1,40 @@
1
+ <!-- DOCUMENTATION ONLY: This template documents the expected STATE.md shape.
2
+ The authoritative source that generates STATE.md is bin/lib/campaign.cjs
3
+ (cmdCampaignInit). Changes here do NOT affect generated output. -->
4
+ ---
5
+ campaign: [SLUG]
6
+ name: [CAMPAIGN_NAME]
7
+ created: [TIMESTAMP]
8
+ phase: created
9
+ last_updated: [TIMESTAMP]
10
+ phase.created: [TIMESTAMP]
11
+ phase.researched: null
12
+ phase.briefed: null
13
+ phase.produced: null
14
+ phase.verified: null
15
+ phase.reviewed: null
16
+ phase.fixed: null
17
+ phase.shipped: null
18
+ phase.measured: null
19
+ phase.learned: null
20
+ gate.positioning_check: null
21
+ gate.outcome_metric: null
22
+ gate.positioning_drift: null
23
+ gate.claim_accuracy: null
24
+ gate.voice_drift: null
25
+ gate.outcome_alignment: null
26
+ gate.funnel_integrity: null
27
+ gate.utm_hygiene: null
28
+ gate.compliance: null
29
+ gate.competitor_collision: null
30
+ gate.icp_fit: null
31
+ gate.format_correctness: null
32
+ verify.run_count: null
33
+ verify.last_run: null
34
+ verify.overall_result: null
35
+ ---
36
+
37
+ # Campaign: [CAMPAIGN_NAME]
38
+
39
+ Phase: created
40
+ Next step: Run `/ttm-research [SLUG]` to gather market intelligence.
@@ -0,0 +1,65 @@
1
+ # takeToMarket - Project Instructions
2
+
3
+ ## Core Invariant
4
+
5
+ Every marketing asset ships with a verifiable outcome metric and passes through a positioning-invariant quality gate wall. No asset ships without both, ever.
6
+
7
+ ## Positioning as Invariant (positioning-as-invariant)
8
+
9
+ POSITIONING.md is the source of truth for all marketing content. It is:
10
+ - **Read-only during campaign execution** -- cannot be edited from within a campaign
11
+ - **Loaded into every phase context** -- compact summary in non-produce phases, full document in produce/verify
12
+ - **Enforced via quality gates** -- positioning drift gate is Tier 1 (blocking)
13
+
14
+ To change positioning, use `/ttm-positioning-shift` which requires:
15
+ 1. Explicit reasoning for the shift
16
+ 2. Migration plan for existing assets
17
+ 3. Deprecation schedule
18
+ 4. Human approval
19
+
20
+ ## Outcome Over Output
21
+
22
+ Every campaign brief must define:
23
+ - **Outcome metric**: What business result we expect (e.g., "20% increase in trial starts")
24
+ - **Output metric**: What we produce (e.g., "4 blog posts, 2 emails")
25
+
26
+ Outcome is reported first. Output without outcome is not a campaign.
27
+
28
+ ## Campaign Lifecycle
29
+
30
+ Campaigns follow a 9-phase lifecycle: Discover -> Brief -> Produce -> Verify -> Review -> Fix -> Ship -> Measure -> Learn
31
+
32
+ Each phase has a dedicated `/ttm-*` command. Phases cannot be skipped.
33
+
34
+ ## File Paths
35
+
36
+ - Marketing state: `.marketing/`
37
+ - Reference files: `.marketing/POSITIONING.md`, `.marketing/BRAND.md`, etc.
38
+ - Campaigns: `.marketing/CAMPAIGNS/<slug>/`
39
+ - Campaign state: `.marketing/CAMPAIGNS/<slug>/STATE.md`
40
+
41
+ ## Deterministic Operations
42
+
43
+ Always use `ttm-tools.cjs` for:
44
+ - Slug generation: `node ttm-tools.cjs slug "campaign name"`
45
+ - Timestamps: `node ttm-tools.cjs timestamp`
46
+ - State updates: `node ttm-tools.cjs state update <field> <value>`
47
+ - Health checks: `node ttm-tools.cjs health`
48
+
49
+ Never generate slugs or timestamps via AI -- they must be deterministic.
50
+
51
+ ## Quality Gate Wall
52
+
53
+ Assets pass through 10 base quality gates:
54
+ 1. Positioning drift (Tier 1 - blocking)
55
+ 2. Claim accuracy (Tier 1 - blocking)
56
+ 3. Voice drift
57
+ 4. Outcome alignment (Tier 1 - blocking)
58
+ 5. Funnel integrity
59
+ 6. UTM hygiene
60
+ 7. Compliance
61
+ 8. Competitor collision
62
+ 9. ICP fit
63
+ 10. Format correctness
64
+
65
+ Tier 1 gates are blocking. Tier 2 gates are advisory.
@@ -0,0 +1,12 @@
1
+ # Deviation Log
2
+
3
+ **Campaign:** [SLUG]
4
+ **Created:** [ISO_TIMESTAMP]
5
+
6
+ This file is **append-only**. New entries are added at the bottom after the table. Never overwrite or reorder existing entries. Each `/ttm-verify` run that produces Accept+log or Correct actions appends entries here.
7
+
8
+ ## Deviations
9
+
10
+ | Timestamp | Gate | Tier | Result | Asset | Finding | Action | Justification | Verify Run |
11
+ |-----------|------|------|--------|-------|---------|--------|---------------|------------|
12
+ <!-- NEW ENTRIES BELOW THIS LINE -->
@@ -0,0 +1,17 @@
1
+ # Positioning Drift Log
2
+
3
+ **Created:** [ISO_TIMESTAMP]
4
+
5
+ This file is **append-only**. New entries are added at the bottom of the Audit Trail table. Never overwrite or reorder existing entries.
6
+
7
+ ## Audit Trail
8
+
9
+ | Date | Event | Source | Details | Assets Affected |
10
+ |------|-------|--------|---------|-----------------|
11
+ <!-- NEW ENTRIES BELOW THIS LINE -->
12
+
13
+ ## Deprecation Backlog
14
+
15
+ | Asset | Campaign | Old Positioning Element | Required Update | Deadline | Status |
16
+ |-------|----------|------------------------|-----------------|----------|--------|
17
+ <!-- DEPRECATION ENTRIES BELOW THIS LINE -->
@@ -0,0 +1,59 @@
1
+ ---
2
+ campaign: [SLUG]
3
+ asset: [ASSET_NAME]
4
+ attempt: [ATTEMPT_NUMBER]
5
+ root_cause: [ROOT_CAUSE_CATEGORY]
6
+ generated: [ISO_TIMESTAMP]
7
+ ---
8
+
9
+ # Fix Brief: [ASSET_NAME]
10
+
11
+ **Campaign:** [SLUG]
12
+ **Attempt:** [ATTEMPT_NUMBER] of 3
13
+ **Root Cause:** [ROOT_CAUSE_CATEGORY] -- [ROOT_CAUSE_EXPLANATION]
14
+
15
+ ## Original Brief Reference
16
+
17
+ Read the full campaign brief at: [BRIEF_PATH]
18
+
19
+ The original brief defines the campaign objective, outcome metric, ICP segment,
20
+ positioning anchor, and asset specifications. This fix brief ADDS constraints --
21
+ it does not replace the original brief.
22
+
23
+ ## What Failed (DO NOT repeat these issues)
24
+
25
+ [FAILURE_LIST]
26
+
27
+ Each entry below is a specific gate failure or review feedback item that must
28
+ be resolved in this fix attempt:
29
+
30
+ - Gate [GATE_NAME]: [FAILURE_DESCRIPTION]
31
+ - Review feedback: [STRUCTURED_FEEDBACK]
32
+
33
+ ## What Passed (PRESERVE these elements)
34
+
35
+ [PASSING_LIST]
36
+
37
+ Each entry below is a gate that passed. The re-produced asset MUST maintain
38
+ these passing elements. Treat these as hard constraints:
39
+
40
+ - Gate [GATE_NAME]: PASS -- [EVIDENCE_OF_PASSING]
41
+
42
+ ## Specific Corrections Required
43
+
44
+ [CORRECTIONS_LIST]
45
+
46
+ Targeted instructions derived from root cause analysis and review feedback:
47
+
48
+ 1. [CORRECTION_1]
49
+ 2. [CORRECTION_2]
50
+
51
+ ## Constraints
52
+
53
+ - Fix ONLY the identified issues -- do not rewrite sections that are working
54
+ - Preserve all passing gate elements (listed above)
55
+ - Follow all rules from the original brief
56
+ - Match the same asset type and channel format
57
+ - If the root cause is "positioning-drift", pay extra attention to POSITIONING.md alignment
58
+ - If the root cause is "weak-hook", rewrite the opening section while preserving the body
59
+ - If the root cause is "unverifiable-claim", replace with approved proof points from BRAND.md
@@ -0,0 +1,22 @@
1
+ ---
2
+ campaign: [SLUG]
3
+ created: [ISO_TIMESTAMP]
4
+ total_attempts: 0
5
+ ---
6
+
7
+ # Fix Log: [SLUG]
8
+
9
+ **Campaign:** [SLUG]
10
+ **Created:** [ISO_TIMESTAMP]
11
+
12
+ This file records every fix attempt for every asset in this campaign.
13
+ Append-only -- never delete or overwrite entries.
14
+
15
+ Used by:
16
+ - /ttm-fix to track attempt count and display history
17
+ - Escalation display when 3-attempt cap is reached
18
+ - /ttm-learn (Phase 9) for root-cause pattern extraction
19
+
20
+ ---
21
+
22
+ <!-- FIX ENTRIES BELOW THIS LINE -->
@@ -0,0 +1,75 @@
1
+ ---
2
+ campaign: ${SLUG}
3
+ measured_at: ${ISO_DATE}
4
+ analytics_source: ${ANALYTICS_SOURCE}
5
+ outcome_met: ${OUTCOME_MET}
6
+ outcome_delta: ${OUTCOME_DELTA}
7
+ attribution_default: time-decay
8
+ ---
9
+
10
+ # Measurement Report: ${CAMPAIGN_NAME}
11
+
12
+ **Campaign:** ${SLUG} | **Measured:** ${ISO_DATE} | **Source:** ${ANALYTICS_SOURCE}
13
+
14
+ ## Outcome Assessment
15
+
16
+ > Did we hit the target? **${OUTCOME_MET}**
17
+
18
+ | Metric | Type | Target | Actual | Delta | Status |
19
+ |--------|------|--------|--------|-------|--------|
20
+ | ${OUTCOME_METRIC_NAME} | outcome | ${OUTCOME_TARGET} | ${OUTCOME_ACTUAL} | ${OUTCOME_DELTA} | ${OUTCOME_STATUS} |
21
+ | ${OUTPUT_METRIC_1_NAME} | output | ${OUTPUT_METRIC_1_TARGET} | ${OUTPUT_METRIC_1_ACTUAL} | ${OUTPUT_METRIC_1_DELTA} | ${OUTPUT_METRIC_1_STATUS} |
22
+ | ${OUTPUT_METRIC_2_NAME} | output | ${OUTPUT_METRIC_2_TARGET} | ${OUTPUT_METRIC_2_ACTUAL} | ${OUTPUT_METRIC_2_DELTA} | ${OUTPUT_METRIC_2_STATUS} |
23
+
24
+ **Outcome metric is listed first.** Output metrics follow. The outcome is the business result (revenue, signups, pipeline). Outputs are intermediate indicators (impressions, clicks, opens).
25
+
26
+ ## Attribution Analysis (Time-Decay -- Default)
27
+
28
+ | Channel | Weight | Contribution % | Conversions | Revenue |
29
+ |---------|--------|-----------------|-------------|---------|
30
+ | ${CHANNEL_1} | ${WEIGHT_1} | ${CONTRIB_1} | ${CONV_1} | ${REV_1} |
31
+ | ${CHANNEL_2} | ${WEIGHT_2} | ${CONTRIB_2} | ${CONV_2} | ${REV_2} |
32
+ | ${CHANNEL_3} | ${WEIGHT_3} | ${CONTRIB_3} | ${CONV_3} | ${REV_3} |
33
+
34
+ > Time-decay attribution assigns higher weight to touches closer to conversion. Other models (last-touch, linear) available on request.
35
+
36
+ ## Channel Performance
37
+
38
+ ### ${CHANNEL_1}
39
+
40
+ | Metric | Value |
41
+ |--------|-------|
42
+ | Impressions | ${CH1_IMPRESSIONS} |
43
+ | Clicks | ${CH1_CLICKS} |
44
+ | CTR | ${CH1_CTR} |
45
+ | Conversions | ${CH1_CONVERSIONS} |
46
+ | Cost per conversion | ${CH1_CPC} |
47
+
48
+ <!-- Repeat channel performance block for each channel used in the campaign. -->
49
+
50
+ ## Signals for Learn Phase
51
+
52
+ - **Overperformance:** ${OVERPERFORMANCE_SIGNALS}
53
+ - **Underperformance:** ${UNDERPERFORMANCE_SIGNALS}
54
+ - **Unexpected patterns:** ${UNEXPECTED_PATTERNS}
55
+ - **Hypothesis validation:** ${HYPOTHESIS_RESULT}
56
+
57
+ These signals feed into `/ttm-learn` for root-cause analysis and reference file updates.
58
+
59
+ ## Raw Data
60
+
61
+ **Analytics source mode:** ${ANALYTICS_SOURCE}
62
+
63
+ **Collection method:** ${COLLECTION_METHOD}
64
+
65
+ ```
66
+ ${RAW_DATA}
67
+ ```
68
+
69
+ <!-- Raw pasted or collected analytics data preserved for audit trail.
70
+ This section is never modified after initial measurement. -->
71
+
72
+ ---
73
+
74
+ **Generated by:** `/ttm-measure ${SLUG}`
75
+ **Template:** `templates/measurement-report.md`
@@ -0,0 +1,24 @@
1
+ # Migration Plan: Positioning Shift
2
+
3
+ **Generated:** [ISO_TIMESTAMP]
4
+ **Shift Reasoning:** [REASONING]
5
+
6
+ ## Active Campaign Impact
7
+
8
+ | Campaign | Phase | Assets | Recommended Action | User Decision |
9
+ |----------|-------|--------|-------------------|---------------|
10
+ | [slug] | [phase] | [count] | [re-verify / re-produce / accept-as-is] | [pending] |
11
+
12
+ ## Per-Asset Recommendations
13
+
14
+ ### Campaign: [slug]
15
+
16
+ | Asset | Conflict Type | Recommendation | Notes |
17
+ |-------|--------------|----------------|-------|
18
+ | [asset file] | [differentiator / proof point / must-not-say] | [re-verify / re-produce / accept-as-is] | [specific conflict description] |
19
+
20
+ ## Deprecation Schedule (Shipped Assets)
21
+
22
+ | Asset | Campaign | Old Positioning Element | Required Update | Deadline |
23
+ |-------|----------|------------------------|-----------------|----------|
24
+ | [asset] | [campaign] | [element] | [update needed] | [date] |
@@ -0,0 +1,20 @@
1
+ {
2
+ "campaign": "[SLUG]",
3
+ "produced_at": "[ISO_TIMESTAMP]",
4
+ "context_loaded": {
5
+ "brief": ".marketing/CAMPAIGNS/[SLUG]/BRIEF.md",
6
+ "positioning": ".marketing/POSITIONING.md",
7
+ "brand": ".marketing/BRAND.md",
8
+ "icp": ".marketing/ICP.md"
9
+ },
10
+ "hero": {
11
+ "asset_id": 1,
12
+ "name": "01-[ASSET_TYPE]-[CHANNEL]",
13
+ "type": "[ASSET_TYPE]",
14
+ "channel": "[CHANNEL]",
15
+ "playbook": "[PLAYBOOK_PATH_OR_NONE]",
16
+ "file": "ASSETS/[HERO_FILENAME].md"
17
+ },
18
+ "derivatives": [],
19
+ "total_assets": 0
20
+ }
@@ -0,0 +1,45 @@
1
+ <!-- _SUMMARY: Tier 1 context (loaded universally, <200 words) -->
2
+ ## Summary
3
+ **Voice archetype:** [GENERATED BY /ttm-init]
4
+ **Tone range:** [GENERATED BY /ttm-init]
5
+ **Key banned words:** [GENERATED BY /ttm-init]
6
+ <!-- END_SUMMARY -->
7
+
8
+ ## Voice Archetype
9
+
10
+ [GENERATED BY /ttm-init -- Detailed voice archetype description with examples]
11
+
12
+ ### Voice Attributes
13
+ | Attribute | Description | Example |
14
+ |-----------|-------------|---------|
15
+ | [GENERATED BY /ttm-init] | [description] | [example] |
16
+
17
+ ## Tone per Context
18
+
19
+ | Context | Tone | Example |
20
+ |---------|------|---------|
21
+ | Blog post | [GENERATED BY /ttm-init] | [example] |
22
+ | Social media | [GENERATED BY /ttm-init] | [example] |
23
+ | Email | [GENERATED BY /ttm-init] | [example] |
24
+ | Landing page | [GENERATED BY /ttm-init] | [example] |
25
+ | Error/support | [GENERATED BY /ttm-init] | [example] |
26
+
27
+ ## Banned Words
28
+
29
+ | Word/Phrase | Reasoning |
30
+ |-------------|-----------|
31
+ | [GENERATED BY /ttm-init] | [GENERATED BY /ttm-init] |
32
+
33
+ ## Proof Points
34
+
35
+ | Claim | Source | Verified |
36
+ |-------|--------|----------|
37
+ | [GENERATED BY /ttm-init] | [source] | [date] |
38
+
39
+ ## Brand Examples
40
+
41
+ ### Good Examples
42
+ [GENERATED BY /ttm-init -- Examples of on-brand content]
43
+
44
+ ### Bad Examples
45
+ [GENERATED BY /ttm-init -- Examples of off-brand content with explanation]
@@ -0,0 +1,30 @@
1
+ <!-- _SUMMARY: Tier 1 context (loaded universally, <200 words) -->
2
+ ## Summary
3
+ **Current quarter theme:** [GENERATED BY /ttm-init]
4
+ **Next launch date:** [GENERATED BY /ttm-init]
5
+ **Cadence:** [GENERATED BY /ttm-init]
6
+ <!-- END_SUMMARY -->
7
+
8
+ ## Quarterly Themes
9
+
10
+ | Quarter | Theme | Key Initiative | Status |
11
+ |---------|-------|---------------|--------|
12
+ | [GENERATED BY /ttm-init] | [theme] | [initiative] | [planned/active/complete] |
13
+
14
+ ## Launch Calendar
15
+
16
+ | Date | Campaign | Channel | Owner | Status |
17
+ |------|----------|---------|-------|--------|
18
+ | [GENERATED BY /ttm-init] | [campaign name] | [channel] | [owner] | [planned/in-progress] |
19
+
20
+ ## Always-On Cadence
21
+
22
+ | Content Type | Frequency | Channel | Notes |
23
+ |-------------|-----------|---------|-------|
24
+ | [GENERATED BY /ttm-init] | [daily/weekly/biweekly/monthly] | [channel] | [notes] |
25
+
26
+ ## Blackout Dates
27
+
28
+ | Date Range | Reason |
29
+ |-----------|--------|
30
+ | [GENERATED BY /ttm-init] | [holiday/company event/industry event] |
@@ -0,0 +1,40 @@
1
+ <!-- _SUMMARY: Tier 1 context (loaded universally, <200 words) -->
2
+ ## Summary
3
+ **Active channels:** [GENERATED BY /ttm-init]
4
+ **Primary channel:** [GENERATED BY /ttm-init]
5
+ **Budget split:** [GENERATED BY /ttm-init]
6
+ <!-- END_SUMMARY -->
7
+
8
+ ## Active Channels
9
+
10
+ | Channel | Status | Baseline Metric | Cadence |
11
+ |---------|--------|-----------------|---------|
12
+ | [GENERATED BY /ttm-init] | active | [metric] | [frequency] |
13
+
14
+ ## Dormant Channels
15
+
16
+ | Channel | Reasoning | Revisit Date |
17
+ |---------|-----------|-------------|
18
+ | [GENERATED BY /ttm-init] | [why paused] | [when to reconsider] |
19
+
20
+ ## Banned Channels
21
+
22
+ | Channel | Reasoning |
23
+ |---------|-----------|
24
+ | [GENERATED BY /ttm-init] | [why banned] |
25
+
26
+ ## Budget Allocation
27
+
28
+ | Channel | % of Budget | Monthly Amount |
29
+ |---------|-------------|---------------|
30
+ | [GENERATED BY /ttm-init] | [%] | [amount] |
31
+
32
+ ## Channel-Specific Rules
33
+
34
+ ### [Channel Name]
35
+ [GENERATED BY /ttm-init -- Channel-specific formatting, tone, compliance rules]
36
+
37
+ - **Format:** [constraints]
38
+ - **Tone adjustment:** [how tone shifts for this channel]
39
+ - **Compliance:** [channel-specific requirements]
40
+ - **Best performing:** [what works on this channel]
@@ -0,0 +1,40 @@
1
+ <!-- _SUMMARY: Tier 1 context (loaded universally, <200 words) -->
2
+ ## Summary
3
+ **Top 3 competitors:** [GENERATED BY /ttm-init]
4
+ **Our positioning vs them:** [GENERATED BY /ttm-init]
5
+ <!-- END_SUMMARY -->
6
+
7
+ ## Direct Competitors
8
+
9
+ | Name | Positioning | Key Strength | Key Weakness |
10
+ |------|------------|-------------|-------------|
11
+ | [GENERATED BY /ttm-init] | [their positioning] | [strength] | [weakness] |
12
+
13
+ ## Positioning Map
14
+
15
+ [GENERATED BY /ttm-init -- 2x2 positioning map with axes relevant to your category]
16
+
17
+ ### Axes
18
+ - **X-axis:** [GENERATED BY /ttm-init]
19
+ - **Y-axis:** [GENERATED BY /ttm-init]
20
+
21
+ ### Positions
22
+ | Competitor | X Position | Y Position |
23
+ |-----------|-----------|-----------|
24
+ | [GENERATED BY /ttm-init] | [low/mid/high] | [low/mid/high] |
25
+
26
+ ## Share of Voice Baseline
27
+
28
+ | Competitor | Estimated SOV | Primary Channel | Notes |
29
+ |-----------|--------------|----------------|-------|
30
+ | [GENERATED BY /ttm-init] | [%] | [channel] | [notes] |
31
+
32
+ ## Competitor Content Analysis
33
+
34
+ ### [Competitor Name]
35
+ [GENERATED BY /ttm-init -- What content they publish, cadence, quality, gaps]
36
+
37
+ - **Content types:** [what they publish]
38
+ - **Cadence:** [how often]
39
+ - **Strengths:** [what they do well]
40
+ - **Gaps:** [opportunities for us]