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.
- package/.claude-plugin/plugin.json +10 -0
- package/LICENSE +21 -0
- package/README.md +419 -0
- package/agents/ttm-producer.md +53 -0
- package/bin/lib/campaign.cjs +553 -0
- package/bin/lib/commit.cjs +105 -0
- package/bin/lib/core.cjs +172 -0
- package/bin/lib/deviation.cjs +149 -0
- package/bin/lib/drift-log.cjs +219 -0
- package/bin/lib/health.cjs +438 -0
- package/bin/lib/slug.cjs +59 -0
- package/bin/lib/state.cjs +96 -0
- package/bin/ttm-tools.cjs +157 -0
- package/gates/base-gates.md +266 -0
- package/gates/discipline/.gitkeep +0 -0
- package/gates/gate-evaluation.md +341 -0
- package/gates/meta-gates.md +19 -0
- package/install.js +307 -0
- package/package.json +53 -0
- package/playbooks/.gitkeep +0 -0
- package/playbooks/aeo.md +223 -0
- package/playbooks/affiliate.md +272 -0
- package/playbooks/base.md +110 -0
- package/playbooks/email.md +306 -0
- package/playbooks/events.md +320 -0
- package/playbooks/linkedin.md +263 -0
- package/playbooks/paid-ads.md +318 -0
- package/playbooks/pr-media.md +296 -0
- package/playbooks/seo.md +284 -0
- package/playbooks/social.md +305 -0
- package/playbooks/youtube.md +325 -0
- package/references/context-loading.md +107 -0
- package/references/learnings-extraction.md +94 -0
- package/references/measurement-template.md +48 -0
- package/references/meta-gate-evaluation.md +169 -0
- package/references/positioning-check-report.md +197 -0
- package/references/review-checklist.md +78 -0
- package/references/ship-checklist-items.md +94 -0
- package/settings.json +4 -0
- package/skills/ttm-aeo-check/SKILL.md +20 -0
- package/skills/ttm-affiliate-kit/SKILL.md +19 -0
- package/skills/ttm-archive/SKILL.md +13 -0
- package/skills/ttm-brand-refresh/SKILL.md +19 -0
- package/skills/ttm-brief/SKILL.md +14 -0
- package/skills/ttm-competitor-scan/SKILL.md +19 -0
- package/skills/ttm-email-preflight/SKILL.md +19 -0
- package/skills/ttm-fix/SKILL.md +13 -0
- package/skills/ttm-health/SKILL.md +12 -0
- package/skills/ttm-icp-refresh/SKILL.md +19 -0
- package/skills/ttm-init/SKILL.md +12 -0
- package/skills/ttm-keyword-map/SKILL.md +19 -0
- package/skills/ttm-learn/SKILL.md +14 -0
- package/skills/ttm-measure/SKILL.md +14 -0
- package/skills/ttm-new-campaign/SKILL.md +13 -0
- package/skills/ttm-next/SKILL.md +12 -0
- package/skills/ttm-positioning-check/SKILL.md +19 -0
- package/skills/ttm-positioning-shift/SKILL.md +19 -0
- package/skills/ttm-produce/SKILL.md +14 -0
- package/skills/ttm-repurpose/SKILL.md +20 -0
- package/skills/ttm-research/SKILL.md +13 -0
- package/skills/ttm-resume/SKILL.md +13 -0
- package/skills/ttm-review/SKILL.md +13 -0
- package/skills/ttm-seo-audit/SKILL.md +20 -0
- package/skills/ttm-ship/SKILL.md +13 -0
- package/skills/ttm-state/SKILL.md +13 -0
- package/skills/ttm-verify/SKILL.md +14 -0
- package/templates/agents-md.md +65 -0
- package/templates/campaign-brief.md +74 -0
- package/templates/campaign-research.md +39 -0
- package/templates/campaign-state.md +40 -0
- package/templates/claude-md.md +65 -0
- package/templates/deviation-log.md +12 -0
- package/templates/drift-log.md +17 -0
- package/templates/fix-brief.md +59 -0
- package/templates/fix-log.md +22 -0
- package/templates/measurement-report.md +75 -0
- package/templates/migration-plan.md +24 -0
- package/templates/production-manifest.json +20 -0
- package/templates/reference-files/brand.md +45 -0
- package/templates/reference-files/calendar.md +30 -0
- package/templates/reference-files/channels.md +40 -0
- package/templates/reference-files/competitors.md +40 -0
- package/templates/reference-files/icp.md +50 -0
- package/templates/reference-files/learnings.md +40 -0
- package/templates/reference-files/metrics.md +42 -0
- package/templates/reference-files/positioning.md +38 -0
- package/templates/reference-files/state.md +27 -0
- package/templates/verification-report.md +59 -0
- package/workflows/discipline/.gitkeep +0 -0
- package/workflows/discipline/aeo-check.md +180 -0
- package/workflows/discipline/affiliate-kit.md +147 -0
- package/workflows/discipline/email-preflight.md +150 -0
- package/workflows/discipline/keyword-map.md +125 -0
- package/workflows/discipline/repurpose.md +329 -0
- package/workflows/discipline/seo-audit.md +169 -0
- package/workflows/lifecycle/.gitkeep +0 -0
- package/workflows/lifecycle/brief-positioning-check.md +90 -0
- package/workflows/lifecycle/brief.md +355 -0
- package/workflows/lifecycle/fix.md +495 -0
- package/workflows/lifecycle/learn.md +405 -0
- package/workflows/lifecycle/measure.md +379 -0
- package/workflows/lifecycle/produce.md +383 -0
- package/workflows/lifecycle/research.md +264 -0
- package/workflows/lifecycle/review.md +432 -0
- package/workflows/lifecycle/ship.md +521 -0
- package/workflows/lifecycle/verify.md +507 -0
- package/workflows/reference-mgmt/.gitkeep +0 -0
- package/workflows/reference-mgmt/brand-refresh.md +193 -0
- package/workflows/reference-mgmt/competitor-scan.md +228 -0
- package/workflows/reference-mgmt/icp-refresh.md +200 -0
- package/workflows/reference-mgmt/positioning-check.md +339 -0
- package/workflows/reference-mgmt/positioning-shift.md +368 -0
- package/workflows/setup/.gitkeep +0 -0
- package/workflows/setup/init-questions.md +225 -0
- package/workflows/setup/init-validation.md +155 -0
- package/workflows/setup/init.md +449 -0
- package/workflows/setup/new-campaign.md +134 -0
- package/workflows/utility/.gitkeep +0 -0
- package/workflows/utility/archive.md +334 -0
- package/workflows/utility/health.md +166 -0
- package/workflows/utility/next.md +187 -0
- package/workflows/utility/resume.md +249 -0
- 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]
|