codymaster 4.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/CHANGELOG.md +50 -0
- package/README.md +285 -0
- package/adapters/antigravity.js +15 -0
- package/adapters/claude-code.js +17 -0
- package/adapters/cursor.js +16 -0
- package/commands/bootstrap.md +49 -0
- package/commands/build.md +48 -0
- package/commands/content.md +48 -0
- package/commands/continuity.md +60 -0
- package/commands/debug.md +51 -0
- package/commands/demo.md +96 -0
- package/commands/deploy.md +51 -0
- package/commands/plan.md +42 -0
- package/commands/review.md +55 -0
- package/commands/track.md +46 -0
- package/commands/ux.md +46 -0
- package/dist/agent-dispatch.js +161 -0
- package/dist/chains/builtin.js +85 -0
- package/dist/continuity.js +385 -0
- package/dist/dashboard.js +926 -0
- package/dist/data.js +122 -0
- package/dist/index.js +2434 -0
- package/dist/judge.js +252 -0
- package/dist/parallel-dispatch.js +359 -0
- package/dist/parallel-quality.js +172 -0
- package/dist/skill-chain.js +258 -0
- package/install.sh +513 -0
- package/package.json +79 -0
- package/skills/.content-factory-state.json +132 -0
- package/skills/.git 2/logs/refs/heads/main +1 -0
- package/skills/.git 2/logs/refs/remotes/origin/main +1 -0
- package/skills/.git 2/objects/02/fb0956734b5f8ba3f918b7defd04a89cfe0076 +0 -0
- package/skills/.git 2/objects/08/1e129d75dc6feac6c02037272e6bd1a04e3324 +0 -0
- package/skills/.git 2/objects/0c/5393416f3c5e01c9a655a802bff0dd52f76f0a +0 -0
- package/skills/.git 2/objects/10/0b9be46978a946a77188f68be725098a122001 +0 -0
- package/skills/.git 2/objects/10/cf041167fc9843610eb3d90259ef3396315fdc +0 -0
- package/skills/.git 2/objects/12/5e19538dd6e1338ffe74f6c4c165b00435bf48 +0 -0
- package/skills/.git 2/objects/16/a9b9d0088d5c1347628b45a2620b479d8ad57c +0 -0
- package/skills/.git 2/objects/17/8c2a9ef93c33ae4eec9d58e82321f9229843a1 +0 -0
- package/skills/.git 2/objects/25/397ae41d09104d763bdcac2695209d85cdea89 +0 -0
- package/skills/.git 2/objects/2f/a836b7947f2d458e1f639788bf4bb0983a3305 +0 -0
- package/skills/.git 2/objects/3a/baaaf0a1c0909c0828335791557125fba911e0 +0 -0
- package/skills/.git 2/objects/42/2924221b81f5ce3c4e4daac9a64a24f9b01f9a +0 -0
- package/skills/.git 2/objects/42/ec0ce707447dc11446a34c9995fb8533801731 +0 -0
- package/skills/.git 2/objects/46/e43ce92866d56ce74b1d750db307cfe6154a15 +0 -0
- package/skills/.git 2/objects/48/5e41b633c63f55b8277bcc59f44f67681f671a +0 -0
- package/skills/.git 2/objects/49/49c596a3a89fa240642acd95dd3258e261eb09 +0 -0
- package/skills/.git 2/objects/50/9d42d8412ef8eaf7f7e138476bac2e4d10ce60 +0 -0
- package/skills/.git 2/objects/55/0c8c389d981b463ef849aeb792d8be3ccb6ec8 +0 -0
- package/skills/.git 2/objects/5d/82d3b18410cdda3ace3677436f0cb599dbe2d2 +0 -0
- package/skills/.git 2/objects/60/0617c58e871a38b33bf29e282d132bb3c381ad +0 -0
- package/skills/.git 2/objects/6a/8369a99c687b7245c92ffaf0e0f0dab9014504 +0 -0
- package/skills/.git 2/objects/79/bea435d40ab531c1aaf6be0432c6a5b7aaed21 +0 -0
- package/skills/.git 2/objects/7e/5ebd79251c2f14e4aceb86c74b6b6daae6b500 +0 -0
- package/skills/.git 2/objects/81/98a822a60178d6d5023ddb3e222cddf048742e +0 -0
- package/skills/.git 2/objects/86/0a0e1943dfe53411d2e499a1f16f46a96ef758 +0 -0
- package/skills/.git 2/objects/86/971fb55fdc081fdbae52376f0f13e57a4e9b04 +0 -0
- package/skills/.git 2/objects/88/b89dd609a0a03f8d4fe8bfde20d5b8fc1d326d +0 -0
- package/skills/.git 2/objects/90/8737edb6b7809e32cc01590b4e08ba42a9d40d +0 -0
- package/skills/.git 2/objects/93/d5a8a9a7d4fb7f11491cb596a6880528725118 +0 -0
- package/skills/.git 2/objects/98/46a2ab81d0c3b3eb00ef88fc56989aa7e9f316 +0 -0
- package/skills/.git 2/objects/9b/d8dd1e49cf274eaf9c555f3ab39dce7af5715e +0 -0
- package/skills/.git 2/objects/a1/13329fb0cec96ae78b222d33a24c3b5bc7fa1f +0 -0
- package/skills/.git 2/objects/a9/e6effe626e8a3aea3a8fc3364b492191c6e7d0 +0 -0
- package/skills/.git 2/objects/ad/6de7e48d9782cca9353d1ff0aa1aab7fe1df85 +0 -0
- package/skills/.git 2/objects/af/54ae316f771ff692e299ffcd8bf2f06b413b59 +0 -0
- package/skills/.git 2/objects/b0/4cb8b0b00dad633e731c1472161419e738d674 +0 -0
- package/skills/.git 2/objects/b3/094abb0b9ed46419b269e4a4e36a459690e3b0 +0 -0
- package/skills/.git 2/objects/b9/435c5d4baac2cfc5c83009ddd27b46b60db5f1 +0 -0
- package/skills/.git 2/objects/ba/5da17dbaec5ec2dcfdfd126aead518d1171d5c +0 -0
- package/skills/.git 2/objects/c0/bf58703aa258ba5dd63083bebaec8f223d844c +0 -0
- package/skills/.git 2/objects/c4/701a34edf1fc1bad58ccc57bd03f9426acb59a +0 -0
- package/skills/.git 2/objects/c7/5ccce9a4e5cc74d9b3174550cf6d993ca43638 +0 -0
- package/skills/.git 2/objects/c7/710d59b5a35b0f1f0a0399386643a0bd94c929 +0 -0
- package/skills/.git 2/objects/d1/fe58237112e953e5fec52da22cf38e08be3df9 +5 -0
- package/skills/.git 2/objects/d2/2bbe9fd2f74c95bc5583e803f5e435f1e2cd86 +0 -0
- package/skills/.git 2/objects/d7/e72852ea2bff74581dbf247d400120086229f4 +0 -0
- package/skills/.git 2/objects/d8/d4c3b5553e4fd72807e1d4b49ef07d9ef3ac35 +0 -0
- package/skills/.git 2/objects/dc/75050c2876f6a02ae2a53a3c886f395b622977 +0 -0
- package/skills/.git 2/objects/ee/e8546f95acec500187c08a28a8b9ee02db0dec +0 -0
- package/skills/.git 2/objects/ef/263c059208b416c2146434f10cb2b9fabcba16 +0 -0
- package/skills/.git 2/objects/f3/ae597e84d9a59b88acd21c99bde2eaf686d785 +0 -0
- package/skills/.git 2/objects/f3/f6f5673c821d3d8e76fa267a9e882e7a5387ea +0 -0
- package/skills/.git 2/objects/f9/6e6d0ad02624dd11d5848594d056caef7a5e8b +0 -0
- package/skills/.git 2/objects/ff/278988fc1edf0db3abcf18de795f4cc0b4f3e1 +0 -0
- package/skills/.git 2/refs/heads/main +1 -0
- package/skills/.git 2/refs/remotes/origin/main +1 -0
- package/skills/.pytest_cache 2/v/cache/nodeids +76 -0
- package/skills/.pytest_cache 2/v/cache/stepwise +1 -0
- package/skills/_shared/helpers.md +123 -0
- package/skills/_shared/outputs-convention.md +24 -0
- package/skills/cm-ads-tracker/SKILL.md +109 -0
- package/skills/cm-ads-tracker/evals/evals.json +55 -0
- package/skills/cm-ads-tracker/references/gtm-architecture.md +321 -0
- package/skills/cm-ads-tracker/references/industry-events.md +294 -0
- package/skills/cm-ads-tracker/references/platforms-api.md +238 -0
- package/skills/cm-ads-tracker/templates/capi-payload.md +79 -0
- package/skills/cm-ads-tracker/templates/datalayer-push.js +104 -0
- package/skills/cm-ads-tracker/templates/gtm-variables.js +56 -0
- package/skills/cm-brainstorm-idea/SKILL.md +423 -0
- package/skills/cm-code-review/SKILL.md +151 -0
- package/skills/cm-content-factory/SKILL.md +416 -0
- package/skills/cm-continuity/SKILL.md +399 -0
- package/skills/cm-dashboard/SKILL.md +533 -0
- package/skills/cm-dashboard/ui/app.js +1270 -0
- package/skills/cm-dashboard/ui/index.html +206 -0
- package/skills/cm-dashboard/ui/style.css +440 -0
- package/skills/cm-debugging/SKILL.md +412 -0
- package/skills/cm-deep-search/SKILL.md +242 -0
- package/skills/cm-design-system/SKILL.md +97 -0
- package/skills/cm-design-system/resources/halo-modern.md +40 -0
- package/skills/cm-design-system/resources/lunaris-advanced.md +40 -0
- package/skills/cm-design-system/resources/nitro-enterprise.md +39 -0
- package/skills/cm-design-system/resources/shadcn-default.md +37 -0
- package/skills/cm-dockit/README.md +100 -0
- package/skills/cm-dockit/SKILL.md +302 -0
- package/skills/cm-dockit/index.html +443 -0
- package/skills/cm-dockit/package-lock.json +1850 -0
- package/skills/cm-dockit/package.json +14 -0
- package/skills/cm-dockit/prompts/analysis.md +34 -0
- package/skills/cm-dockit/prompts/api-reference.md +24 -0
- package/skills/cm-dockit/prompts/architecture.md +21 -0
- package/skills/cm-dockit/prompts/data-flow.md +20 -0
- package/skills/cm-dockit/prompts/database.md +21 -0
- package/skills/cm-dockit/prompts/deployment.md +22 -0
- package/skills/cm-dockit/prompts/flows.md +21 -0
- package/skills/cm-dockit/prompts/jtbd.md +20 -0
- package/skills/cm-dockit/prompts/personas.md +24 -0
- package/skills/cm-dockit/prompts/sop-modules.md +40 -0
- package/skills/cm-dockit/scripts/doc-gen.sh +121 -0
- package/skills/cm-dockit/scripts/dockit-dashboard.sh +142 -0
- package/skills/cm-dockit/scripts/dockit-runner.sh +607 -0
- package/skills/cm-dockit/scripts/dockit-task.sh +166 -0
- package/skills/cm-dockit/skills/analyze-codebase.md +174 -0
- package/skills/cm-dockit/skills/api-reference.md +237 -0
- package/skills/cm-dockit/skills/changelog-guide.md +195 -0
- package/skills/cm-dockit/skills/content-guidelines.md +190 -0
- package/skills/cm-dockit/skills/sop-guide.md +184 -0
- package/skills/cm-dockit/skills/tech-docs.md +287 -0
- package/skills/cm-dockit/templates/markdown/structure.md +60 -0
- package/skills/cm-dockit/templates/vitepress-premium/.vitepress/config.mts +110 -0
- package/skills/cm-dockit/templates/vitepress-premium/.vitepress/theme/custom.css +189 -0
- package/skills/cm-dockit/templates/vitepress-premium/.vitepress/theme/index.ts +4 -0
- package/skills/cm-dockit/templates/vitepress-premium/package.json +19 -0
- package/skills/cm-dockit/templates/vitepress-premium/tests/frontend.test.ts +45 -0
- package/skills/cm-dockit/tests/runner.test.ts +66 -0
- package/skills/cm-dockit/workflows/export-markdown.md +82 -0
- package/skills/cm-dockit/workflows/generate-docs.md +68 -0
- package/skills/cm-dockit/workflows/setup-vitepress.md +181 -0
- package/skills/cm-example/SKILL.md +26 -0
- package/skills/cm-execution/SKILL.md +268 -0
- package/skills/cm-git-worktrees/SKILL.md +164 -0
- package/skills/cm-how-it-work/SKILL.md +189 -0
- package/skills/cm-identity-guard/SKILL.md +412 -0
- package/skills/cm-jtbd/SKILL.md +98 -0
- package/skills/cm-planning/SKILL.md +130 -0
- package/skills/cm-project-bootstrap/SKILL.md +161 -0
- package/skills/cm-project-bootstrap/templates/AGENTS.md +42 -0
- package/skills/cm-project-bootstrap/templates/frontend-safety.test.js +51 -0
- package/skills/cm-project-bootstrap/templates/i18n-sync.test.js +38 -0
- package/skills/cm-project-bootstrap/templates/pr-template.md +12 -0
- package/skills/cm-project-bootstrap/templates/project-identity.json +29 -0
- package/skills/cm-project-bootstrap/templates/vitest.config.js +10 -0
- package/skills/cm-quality-gate/SKILL.md +218 -0
- package/skills/cm-readit/SKILL.md +289 -0
- package/skills/cm-readit/audio-player.md +206 -0
- package/skills/cm-readit/examples/blog-reader.js +352 -0
- package/skills/cm-readit/examples/voice-cro.js +390 -0
- package/skills/cm-readit/tts-engine.md +262 -0
- package/skills/cm-readit/ui-patterns.md +362 -0
- package/skills/cm-readit/voice-cro.md +223 -0
- package/skills/cm-safe-deploy/SKILL.md +120 -0
- package/skills/cm-safe-deploy/templates/deploy.sh +89 -0
- package/skills/cm-safe-i18n/SKILL.md +473 -0
- package/skills/cm-secret-shield/SKILL.md +580 -0
- package/skills/cm-skill-chain/SKILL.md +78 -0
- package/skills/cm-skill-index/SKILL.md +318 -0
- package/skills/cm-skill-mastery/SKILL.md +169 -0
- package/skills/cm-start/SKILL.md +65 -0
- package/skills/cm-status/SKILL.md +12 -0
- package/skills/cm-tdd/SKILL.md +370 -0
- package/skills/cm-terminal/SKILL.md +177 -0
- package/skills/cm-test-gate/SKILL.md +242 -0
- package/skills/cm-ui-preview/SKILL.md +291 -0
- package/skills/cm-ux-master/DESIGN_STANDARD_TEMPLATE.md +54 -0
- package/skills/cm-ux-master/SKILL.md +114 -0
- package/skills/cro-methodology/SKILL.md +98 -0
- package/skills/cro-methodology/references/COPYWRITING.md +178 -0
- package/skills/cro-methodology/references/OBJECTIONS.md +135 -0
- package/skills/cro-methodology/references/PERSUASION.md +158 -0
- package/skills/cro-methodology/references/RESEARCH.md +220 -0
- package/skills/cro-methodology/references/funnel-analysis.md +365 -0
- package/skills/cro-methodology/references/testing-methodology.md +330 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0",
|
|
3
|
+
"started_at": "2026-03-03T02:45:17.451741",
|
|
4
|
+
"updated_at": "2026-03-03T02:45:17.455271",
|
|
5
|
+
"status": "running",
|
|
6
|
+
"pipeline": {
|
|
7
|
+
"current_phase": "write",
|
|
8
|
+
"phases": {
|
|
9
|
+
"extract": {
|
|
10
|
+
"status": "done",
|
|
11
|
+
"progress": 1.0,
|
|
12
|
+
"started_at": null,
|
|
13
|
+
"finished_at": "2026-03-03T02:45:17.452336"
|
|
14
|
+
},
|
|
15
|
+
"plan": {
|
|
16
|
+
"status": "done",
|
|
17
|
+
"progress": 1.0,
|
|
18
|
+
"started_at": null,
|
|
19
|
+
"finished_at": "2026-03-03T02:45:17.452685"
|
|
20
|
+
},
|
|
21
|
+
"write": {
|
|
22
|
+
"status": "running",
|
|
23
|
+
"progress": 0.6,
|
|
24
|
+
"started_at": "2026-03-03T02:45:17.452944",
|
|
25
|
+
"finished_at": null
|
|
26
|
+
},
|
|
27
|
+
"audit": {
|
|
28
|
+
"status": "pending",
|
|
29
|
+
"progress": 0,
|
|
30
|
+
"started_at": null,
|
|
31
|
+
"finished_at": null
|
|
32
|
+
},
|
|
33
|
+
"seo": {
|
|
34
|
+
"status": "pending",
|
|
35
|
+
"progress": 0,
|
|
36
|
+
"started_at": null,
|
|
37
|
+
"finished_at": null
|
|
38
|
+
},
|
|
39
|
+
"publish": {
|
|
40
|
+
"status": "pending",
|
|
41
|
+
"progress": 0,
|
|
42
|
+
"started_at": null,
|
|
43
|
+
"finished_at": null
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"tasks": [
|
|
48
|
+
{
|
|
49
|
+
"id": "write-seo-tips",
|
|
50
|
+
"status": "running",
|
|
51
|
+
"created_at": "2026-03-03T02:45:17.453172",
|
|
52
|
+
"updated_at": "2026-03-03T02:45:17.453172",
|
|
53
|
+
"meta": {
|
|
54
|
+
"topic": "SEO Tips 2025"
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"id": "write-content-strategy",
|
|
59
|
+
"status": "done",
|
|
60
|
+
"created_at": "2026-03-03T02:45:17.453373",
|
|
61
|
+
"updated_at": "2026-03-03T02:45:17.453373",
|
|
62
|
+
"meta": {
|
|
63
|
+
"topic": "Content Strategy"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "write-ai-marketing",
|
|
68
|
+
"status": "queued",
|
|
69
|
+
"created_at": "2026-03-03T02:45:17.453562",
|
|
70
|
+
"updated_at": "2026-03-03T02:45:17.453562",
|
|
71
|
+
"meta": {
|
|
72
|
+
"topic": "AI Marketing"
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"id": "write-social-media",
|
|
77
|
+
"status": "failed",
|
|
78
|
+
"created_at": "2026-03-03T02:45:17.453769",
|
|
79
|
+
"updated_at": "2026-03-03T02:45:17.453769",
|
|
80
|
+
"meta": {
|
|
81
|
+
"topic": "Social Media"
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
],
|
|
85
|
+
"tokens": {
|
|
86
|
+
"total_input": 57000,
|
|
87
|
+
"total_output": 30000,
|
|
88
|
+
"total_cost_usd": 0.1759,
|
|
89
|
+
"budget_limit_usd": 5.0,
|
|
90
|
+
"providers": {
|
|
91
|
+
"gemini": {
|
|
92
|
+
"input": 45000,
|
|
93
|
+
"output": 22000,
|
|
94
|
+
"cost_usd": 0.0199,
|
|
95
|
+
"requests": 1
|
|
96
|
+
},
|
|
97
|
+
"claude-sonnet": {
|
|
98
|
+
"input": 12000,
|
|
99
|
+
"output": 8000,
|
|
100
|
+
"cost_usd": 0.156,
|
|
101
|
+
"requests": 1
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
"errors": [
|
|
106
|
+
{
|
|
107
|
+
"source": "write",
|
|
108
|
+
"message": "API rate limit exceeded on request #45",
|
|
109
|
+
"timestamp": "2026-03-03T02:45:17.455270"
|
|
110
|
+
}
|
|
111
|
+
],
|
|
112
|
+
"stats": {
|
|
113
|
+
"articles_total": 50,
|
|
114
|
+
"articles_written": 32,
|
|
115
|
+
"articles_passed_audit": 28,
|
|
116
|
+
"articles_failed": 2
|
|
117
|
+
},
|
|
118
|
+
"agents": [
|
|
119
|
+
{
|
|
120
|
+
"id": "gemini-cli-1",
|
|
121
|
+
"type": "gemini",
|
|
122
|
+
"registered_at": "2026-03-03T02:45:17.454842",
|
|
123
|
+
"last_seen": "2026-03-03T02:45:17.454842"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"id": "claude-1",
|
|
127
|
+
"type": "claude",
|
|
128
|
+
"registered_at": "2026-03-03T02:45:17.455059",
|
|
129
|
+
"last_seen": "2026-03-03T02:45:17.455059"
|
|
130
|
+
}
|
|
131
|
+
]
|
|
132
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0000000000000000000000000000000000000000 88b89dd609a0a03f8d4fe8bfde20d5b8fc1d326d Tody Le <todyle@192.168.1.126.non-exists.ptr.local> 1772335261 +0700 commit (initial): Initial commit
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0000000000000000000000000000000000000000 88b89dd609a0a03f8d4fe8bfde20d5b8fc1d326d Tody Le <todyle@192.168.1.126.non-exists.ptr.local> 1772335285 +0700 update by push
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
x�Wmk7���
|
|
2
|
+
�B>���$�/%&vkHK�]J)a�i�����Z��|���fwo��-N��og4zf�yە�+�������`�p������6��V)�W�|�)QީwGDM'~�v{- �X�'H�k[ ��
|
|
3
|
+
�3!o�dgt[[Ǯ@h�Ϸ:��l��̯�.�n
|
|
4
|
+
�,ԍ��r>���6J�zd�;+����.�Gp��J���Au$�nH� �DÕ���U�`5�Υ�kpR =�ZT�X ���z�er{��3����6�4�����m�B��A�yU�ʡJ�sݍO�ȈP�]�5��r0�V��b��-��ၽd�h���� �����!�ŀ�(����+k�M�x���U��!���dģ�c��6(Ϧd��]u���7���T���M`�O]�/�:"��`�x���#����o�E����5��.}8����J��o�Sަ�y��?�XY��{�Ap3������1�.=L��9?�8��0b�D|s�o��#���`�D�^?"p>;����6�nt�@�sd��i���r+8:(n8@co��o�����;V����M+D7�8�d~@g��ij�Y{���2�v�`���-<.\����O��U8]f�a��F�u[ͽ/�K���9�~����L0S>Z:��bnDs${��"��n�ր3�=.g�͍��LJǞu�ъ�Zi�>)s;i\� IF;�ZWҶ��M�_����0x-Pprzt�Ujs���N/����]o����
|
|
5
|
+
h�f�[ 2��&v�#Y.���zt8 d��;��:M�f ��4��,(��q�K�%$�l6�� E_.�I��NB0�38Kv����k�|���YZ%
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
88b89dd609a0a03f8d4fe8bfde20d5b8fc1d326d
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
88b89dd609a0a03f8d4fe8bfde20d5b8fc1d326d
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
[
|
|
2
|
+
"tests/test_agent_dispatcher.py::TestAgentDispatcher::test_claim_by_type",
|
|
3
|
+
"tests/test_agent_dispatcher.py::TestAgentDispatcher::test_claim_empty_queue_returns_none",
|
|
4
|
+
"tests/test_agent_dispatcher.py::TestAgentDispatcher::test_claim_next",
|
|
5
|
+
"tests/test_agent_dispatcher.py::TestAgentDispatcher::test_complete",
|
|
6
|
+
"tests/test_agent_dispatcher.py::TestAgentDispatcher::test_enqueue",
|
|
7
|
+
"tests/test_agent_dispatcher.py::TestAgentDispatcher::test_enqueue_batch",
|
|
8
|
+
"tests/test_agent_dispatcher.py::TestAgentDispatcher::test_fail_exceeds_max_retries",
|
|
9
|
+
"tests/test_agent_dispatcher.py::TestAgentDispatcher::test_fail_with_retry",
|
|
10
|
+
"tests/test_agent_dispatcher.py::TestAgentDispatcher::test_no_duplicate_enqueue",
|
|
11
|
+
"tests/test_agent_dispatcher.py::TestAgentDispatcher::test_priority_ordering",
|
|
12
|
+
"tests/test_agent_dispatcher.py::TestAgentDispatcher::test_queue_summary",
|
|
13
|
+
"tests/test_agent_dispatcher.py::TestAgentDispatcher::test_reset",
|
|
14
|
+
"tests/test_memory.py::TestMemoryEngineInit::test_creates_directory_structure",
|
|
15
|
+
"tests/test_memory.py::TestMemoryEngineInit::test_creates_semantic_files",
|
|
16
|
+
"tests/test_memory.py::TestMemoryEngineInit::test_creates_working_session",
|
|
17
|
+
"tests/test_memory.py::TestSessionLifecycle::test_start_session_creates_working_file",
|
|
18
|
+
"tests/test_memory.py::TestSessionLifecycle::test_start_session_returns_id",
|
|
19
|
+
"tests/test_memory.py::TestWritingContext::test_context_includes_added_patterns",
|
|
20
|
+
"tests/test_memory.py::TestWritingContext::test_empty_context_returns_structure",
|
|
21
|
+
"tests/test_memory.py::TestWritingPatterns::test_add_new_pattern",
|
|
22
|
+
"tests/test_memory.py::TestWritingPatterns::test_update_existing_pattern_increases_confidence",
|
|
23
|
+
"tests/test_pipeline.py::TestFireHooks::test_empty_hooks_returns_silently",
|
|
24
|
+
"tests/test_pipeline.py::TestFireHooks::test_no_hooks_returns_silently",
|
|
25
|
+
"tests/test_pipeline.py::TestFireHooks::test_nonexistent_hook_name_returns_silently",
|
|
26
|
+
"tests/test_pipeline.py::TestLoadConfig::test_load_missing_config_exits",
|
|
27
|
+
"tests/test_pipeline.py::TestLoadConfig::test_load_valid_config",
|
|
28
|
+
"tests/test_pipeline.py::TestValidateConfig::test_empty_config_fails",
|
|
29
|
+
"tests/test_pipeline.py::TestValidateConfig::test_missing_brand_name_fails",
|
|
30
|
+
"tests/test_pipeline.py::TestValidateConfig::test_missing_content_article_types_fails",
|
|
31
|
+
"tests/test_pipeline.py::TestValidateConfig::test_missing_niche_fails",
|
|
32
|
+
"tests/test_pipeline.py::TestValidateConfig::test_missing_output_content_dir_fails",
|
|
33
|
+
"tests/test_pipeline.py::TestValidateConfig::test_missing_sources_type_fails",
|
|
34
|
+
"tests/test_pipeline.py::TestValidateConfig::test_valid_config_passes",
|
|
35
|
+
"tests/test_research.py::TestGenerateQueries::test_queries_contain_niche",
|
|
36
|
+
"tests/test_research.py::TestGenerateQueries::test_queries_contain_topic",
|
|
37
|
+
"tests/test_research.py::TestGenerateQueries::test_returns_list",
|
|
38
|
+
"tests/test_research.py::TestResearchEngineInit::test_loads_config",
|
|
39
|
+
"tests/test_research.py::TestResearchEngineInit::test_sets_project_root",
|
|
40
|
+
"tests/test_state_manager.py::TestStateManager::test_add_error",
|
|
41
|
+
"tests/test_state_manager.py::TestStateManager::test_add_task",
|
|
42
|
+
"tests/test_state_manager.py::TestStateManager::test_budget_check",
|
|
43
|
+
"tests/test_state_manager.py::TestStateManager::test_default_state",
|
|
44
|
+
"tests/test_state_manager.py::TestStateManager::test_event_logging",
|
|
45
|
+
"tests/test_state_manager.py::TestStateManager::test_get_snapshot",
|
|
46
|
+
"tests/test_state_manager.py::TestStateManager::test_overall_status_completed",
|
|
47
|
+
"tests/test_state_manager.py::TestStateManager::test_overall_status_error",
|
|
48
|
+
"tests/test_state_manager.py::TestStateManager::test_phase_lifecycle",
|
|
49
|
+
"tests/test_state_manager.py::TestStateManager::test_reset",
|
|
50
|
+
"tests/test_state_manager.py::TestStateManager::test_save_and_load",
|
|
51
|
+
"tests/test_state_manager.py::TestStateManager::test_update_existing_task",
|
|
52
|
+
"tests/test_state_manager.py::TestStateManager::test_update_tokens",
|
|
53
|
+
"tests/test_token_manager.py::TestTokenManager::test_backoff_seconds",
|
|
54
|
+
"tests/test_token_manager.py::TestTokenManager::test_budget_exceeded",
|
|
55
|
+
"tests/test_token_manager.py::TestTokenManager::test_budget_status",
|
|
56
|
+
"tests/test_token_manager.py::TestTokenManager::test_budget_within",
|
|
57
|
+
"tests/test_token_manager.py::TestTokenManager::test_circuit_breaker_closed",
|
|
58
|
+
"tests/test_token_manager.py::TestTokenManager::test_circuit_breaker_opens",
|
|
59
|
+
"tests/test_token_manager.py::TestTokenManager::test_circuit_breaker_resets_on_success",
|
|
60
|
+
"tests/test_token_manager.py::TestTokenManager::test_estimate_cost_gemini",
|
|
61
|
+
"tests/test_token_manager.py::TestTokenManager::test_estimate_cost_unknown_provider",
|
|
62
|
+
"tests/test_token_manager.py::TestTokenManager::test_failure_tracking",
|
|
63
|
+
"tests/test_token_manager.py::TestTokenManager::test_multiple_providers",
|
|
64
|
+
"tests/test_token_manager.py::TestTokenManager::test_record_usage",
|
|
65
|
+
"tests/test_token_manager.py::TestTokenManager::test_reset",
|
|
66
|
+
"tests/test_wizard.py::TestGenerateConfig::test_config_from_template",
|
|
67
|
+
"tests/test_wizard.py::TestGenerateConfig::test_config_has_memory_section",
|
|
68
|
+
"tests/test_wizard.py::TestGenerateConfig::test_config_has_scoring_section",
|
|
69
|
+
"tests/test_wizard.py::TestGenerateConfig::test_generates_valid_config",
|
|
70
|
+
"tests/test_wizard.py::TestSlugify::test_already_slug",
|
|
71
|
+
"tests/test_wizard.py::TestSlugify::test_basic_slug",
|
|
72
|
+
"tests/test_wizard.py::TestSlugify::test_empty_string",
|
|
73
|
+
"tests/test_wizard.py::TestSlugify::test_leading_trailing_special",
|
|
74
|
+
"tests/test_wizard.py::TestSlugify::test_special_characters",
|
|
75
|
+
"tests/test_wizard.py::TestSlugify::test_unicode_text"
|
|
76
|
+
]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[]
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# CodyMaster Shared Helpers
|
|
2
|
+
|
|
3
|
+
> **DRY principle for skills.** Reference sections here instead of embedding in every skill.
|
|
4
|
+
> Usage: `Per helpers.md#Section-Name` — reduces ~150-200 tokens per skill.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## #Load-Working-Memory
|
|
9
|
+
|
|
10
|
+
Before executing any significant action, ALWAYS:
|
|
11
|
+
|
|
12
|
+
1. **Read** `.cm/CONTINUITY.md` → understand current state, Active Goal, Next Actions
|
|
13
|
+
2. **Run Memory Audit** — decay check + conflict detection + integrity scan (see `cm-continuity`)
|
|
14
|
+
3. **Scope-filter learnings** — if working on module X:
|
|
15
|
+
- Load from `.cm/learnings.json` ONLY where `scope == "global"` or `scope == "module:X"`
|
|
16
|
+
- **NEVER** load `status = "invalidated"` (proven wrong — skip entirely)
|
|
17
|
+
- **CAUTION** with `status = "corrected"` (was wrong, verify before applying)
|
|
18
|
+
- **TRUST** high `reinforceCount` + recent `lastRelevant`
|
|
19
|
+
- **VERIFY** `reinforceCount = 0` + old `lastRelevant` (low confidence)
|
|
20
|
+
- SKIP learnings for other modules (reduces noise + saves tokens)
|
|
21
|
+
4. **Check** "Next Actions" — pick up where you left off
|
|
22
|
+
|
|
23
|
+
> **Token savings:** Scope-filtered reading loads ~250 tokens instead of ~2,500.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## #Save-Decision
|
|
28
|
+
|
|
29
|
+
After making any significant architectural or product decision:
|
|
30
|
+
|
|
31
|
+
1. Write to `.cm/memory/decisions.json`:
|
|
32
|
+
- `id`: Auto-increment (D001, D002, ...)
|
|
33
|
+
- `decision`: What was decided
|
|
34
|
+
- `rationale`: Why this option won over alternatives
|
|
35
|
+
- `scope`: `module:{name}` or `global`
|
|
36
|
+
- `status`: `active`
|
|
37
|
+
- `date`: ISO date
|
|
38
|
+
2. Check for conflicts with existing decisions in same scope
|
|
39
|
+
- If conflict → set older decision `supersededBy` = new ID, `status` = `superseded`
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## #Update-Continuity
|
|
44
|
+
|
|
45
|
+
At the end of every work session or task completion:
|
|
46
|
+
|
|
47
|
+
1. Update `.cm/CONTINUITY.md`:
|
|
48
|
+
- Move completed work to "Just Completed"
|
|
49
|
+
- Update "Next Actions" with remaining items
|
|
50
|
+
- Update "Files Currently Being Modified"
|
|
51
|
+
- Set `currentPhase` and timestamp
|
|
52
|
+
2. Record any new learnings in `.cm/memory/learnings.json`
|
|
53
|
+
- If similar learning exists → reinforce (`reinforceCount++`) instead of creating duplicate
|
|
54
|
+
3. Record any new decisions via `#Save-Decision`
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## #Identity-Check
|
|
59
|
+
|
|
60
|
+
Before any `git push`, `deploy`, or database operation:
|
|
61
|
+
|
|
62
|
+
1. Read `.project-identity.json` for expected accounts
|
|
63
|
+
2. Verify current git config matches expected GitHub org
|
|
64
|
+
3. Verify Cloudflare account matches expected account ID
|
|
65
|
+
4. If mismatch → **STOP** and alert user
|
|
66
|
+
|
|
67
|
+
> See `cm-identity-guard` for full verification protocol.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## #Project-Level-Detection
|
|
72
|
+
|
|
73
|
+
Assess task complexity to determine the right workflow depth:
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
┌─────────┬───────────────────────┬────────────────────────────────────────┐
|
|
77
|
+
│ Level │ Criteria │ Workflow │
|
|
78
|
+
├─────────┼───────────────────────┼────────────────────────────────────────┤
|
|
79
|
+
│ L0 │ < 30 min, 1-2 files │ Code + Test only (skip planning) │
|
|
80
|
+
│ Micro │ Bug fix, tiny tweak │ Chain: tdd → quality-gate │
|
|
81
|
+
├─────────┼───────────────────────┼────────────────────────────────────────┤
|
|
82
|
+
│ L1 │ 1-3 tasks, 1 area │ Planning lite → Code → Deploy │
|
|
83
|
+
│ Small │ Small feature, config │ Chain: planning → tdd → quality-gate │
|
|
84
|
+
├─────────┼───────────────────────┼────────────────────────────────────────┤
|
|
85
|
+
│ L2 │ 4-10 tasks, multiple │ Full flow with analysis │
|
|
86
|
+
│ Medium │ areas, UI + backend │ Chain: brainstorm → planning → tdd → │
|
|
87
|
+
│ │ │ execution → quality-gate → safe-deploy │
|
|
88
|
+
├─────────┼───────────────────────┼────────────────────────────────────────┤
|
|
89
|
+
│ L3 │ 10+ tasks, cross- │ Full + PRD + Architecture + Sprint │
|
|
90
|
+
│ Large │ system, team impact │ Chain: brainstorm → planning (with │
|
|
91
|
+
│ │ │ FR/NFR) → sprint → execution → gate → │
|
|
92
|
+
│ │ │ deploy │
|
|
93
|
+
└─────────┴───────────────────────┴────────────────────────────────────────┘
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Detection heuristics:**
|
|
97
|
+
- Count estimated tasks from objective description
|
|
98
|
+
- Check number of files/modules likely affected
|
|
99
|
+
- Check if UI + API + DB changes needed (cross-layer = L2+)
|
|
100
|
+
- Check if multiple team members involved (L3)
|
|
101
|
+
|
|
102
|
+
**Output:** State the detected level and recommended chain to the user:
|
|
103
|
+
```
|
|
104
|
+
📊 Project Level: L1 (Small)
|
|
105
|
+
🔗 Recommended chain: planning → tdd → quality-gate
|
|
106
|
+
⏱️ Estimated time: 1-2 hours
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## #Outputs-Convention
|
|
112
|
+
|
|
113
|
+
All skill outputs should be saved in `.cm/outputs/` with this structure:
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
.cm/outputs/
|
|
117
|
+
├── brainstorms/ ← cm-brainstorm-idea output
|
|
118
|
+
├── plans/ ← cm-planning implementation plans
|
|
119
|
+
├── reviews/ ← cm-code-review output
|
|
120
|
+
└── deploys/ ← cm-safe-deploy logs and reports
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**Naming:** `{date}-{slug}.md` (e.g., `2026-03-23-user-auth-plan.md`)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# CodyMaster Output Convention
|
|
2
|
+
|
|
3
|
+
All skill outputs should be saved in `.cm/outputs/` for consistency.
|
|
4
|
+
|
|
5
|
+
## Structure
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
.cm/outputs/
|
|
9
|
+
├── brainstorms/ ← cm-brainstorm-idea output
|
|
10
|
+
├── plans/ ← cm-planning implementation plans
|
|
11
|
+
├── reviews/ ← cm-code-review output
|
|
12
|
+
└── deploys/ ← cm-safe-deploy logs and reports
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Naming
|
|
16
|
+
|
|
17
|
+
`{date}-{slug}.md` — e.g., `2026-03-23-user-auth-plan.md`
|
|
18
|
+
|
|
19
|
+
## Rules
|
|
20
|
+
|
|
21
|
+
- If `.cm/outputs/` doesn't exist, create it automatically
|
|
22
|
+
- Always use slug-case for filenames
|
|
23
|
+
- Brainstorm outputs go in `brainstorms/`, not project root
|
|
24
|
+
- Deploy logs go in `deploys/`, not terminal-only
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cm-ads-tracker
|
|
3
|
+
description: |
|
|
4
|
+
Expert CRO conversion tracking strategist. From a single chat message, generates a COMPLETE tracking setup: Facebook/Meta Pixel + CAPI, TikTok Pixel + Events API, Google Ads Enhanced Conversions, GTM container architecture, first-touch/last-touch attribution, and cross-channel deduplication.
|
|
5
|
+
|
|
6
|
+
AUTO-DETECTS industry and maps correct standard events per platform specs. Outputs a full implementation document developers can use immediately.
|
|
7
|
+
|
|
8
|
+
ALWAYS trigger for: pixel, tracking, GTM, Facebook pixel, Meta pixel, CAPI, TikTok pixel, Google Ads conversion, UTM, attribution, "setup tracking", "measure conversions", "measure ROAS".
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# CM Ads Tracker v2
|
|
12
|
+
|
|
13
|
+
You are the world's best conversion tracking architect. From a single chat message, produce a complete, platform-specific, attribution-aware tracking setup.
|
|
14
|
+
|
|
15
|
+
## Phase 1: Express Onboarding (5 Questions, One Message)
|
|
16
|
+
|
|
17
|
+
1. **Industry** — E-commerce? Lead gen? SaaS? Online courses? F&B? Travel?
|
|
18
|
+
2. **Ad platforms** — Facebook/Meta? TikTok? Google? Other?
|
|
19
|
+
3. **Tracking IDs** — FB Pixel ID, TikTok Pixel ID, Google Ads Conversion ID+Label, GTM Container ID, GA4 ID
|
|
20
|
+
4. **Website platform** — Shopify? WooCommerce? Custom? Next.js? Webflow?
|
|
21
|
+
5. **Primary conversions** — 2-3 most important actions (purchase, form, call, signup...)
|
|
22
|
+
|
|
23
|
+
## Phase 2: Industry Event Taxonomy
|
|
24
|
+
|
|
25
|
+
| Industry | Priority Events (highest → lowest) |
|
|
26
|
+
|----------|----------------------------------|
|
|
27
|
+
| E-commerce | Purchase > InitiateCheckout > AddToCart > ViewContent |
|
|
28
|
+
| Lead Gen | Lead/SubmitForm > Contact > ViewContent |
|
|
29
|
+
| Education | Purchase > CompleteRegistration > InitiateCheckout > ViewContent |
|
|
30
|
+
| SaaS/App | CompleteRegistration > Purchase > ViewContent (pricing) |
|
|
31
|
+
| F&B | Contact (reservation) > SubmitForm > ViewContent (menu) |
|
|
32
|
+
| Travel | Purchase > InitiateCheckout > Search > ViewContent |
|
|
33
|
+
|
|
34
|
+
See `references/industry-events.md` for full event library with parameters.
|
|
35
|
+
|
|
36
|
+
## Phase 3: GTM Architecture — DataLayer-First
|
|
37
|
+
|
|
38
|
+
**Principle:** Website → `dataLayer.push()` → GTM → broadcasts to ALL platforms simultaneously.
|
|
39
|
+
|
|
40
|
+
Developer writes ONE push per event. Adding a new platform = zero website code changes.
|
|
41
|
+
|
|
42
|
+
**Standard GTM Variables:** DL-event_id, DL-order_id, DL-order_value, DL-currency, DL-content_ids, DL-content_type, DL-email_hashed (SHA256), DL-phone_hashed (SHA256), FTC cookies (source/medium/campaign), URL params (utm_*, fbclid, ttclid, gclid).
|
|
43
|
+
|
|
44
|
+
See `references/gtm-architecture.md` for full container build specs.
|
|
45
|
+
|
|
46
|
+
## Phase 4: Platform Implementation
|
|
47
|
+
|
|
48
|
+
### Facebook/Meta (Pixel + CAPI)
|
|
49
|
+
Key events: Purchase, AddToCart, InitiateCheckout, ViewContent, Lead, CompleteRegistration, Search, Contact, Subscribe.
|
|
50
|
+
Enhanced Matching: SHA256(lowercase email), SHA256(digits-only phone). CAPI dedup via same event_id (48h window).
|
|
51
|
+
|
|
52
|
+
### TikTok (Pixel + Events API)
|
|
53
|
+
14 standard events. Note TikTok-specific names: `CompletePayment` (purchase), `ClickButton`, `PlaceAnOrder`. Pass contents array. Dedup via event_id.
|
|
54
|
+
|
|
55
|
+
### Google Ads (Enhanced Conversions)
|
|
56
|
+
Pass transaction_id, enable Enhanced Conversions (adds 15-25% recovery), pass hashed email/phone via user_data object.
|
|
57
|
+
|
|
58
|
+
## Phase 5: Attribution
|
|
59
|
+
|
|
60
|
+
**First-Touch:** GTM captures UTM/click IDs into `_ftc` cookie (90-day, write-once). Passes to all conversions.
|
|
61
|
+
**Last-Touch:** Platform native via click IDs (fbp/fbc, ttclid, gclid).
|
|
62
|
+
**Dedup:** Unique event_id per conversion → all platforms. Order ID as reference. GA4 as neutral source of truth. Check inflation rate: total platform conversions / actual orders.
|
|
63
|
+
|
|
64
|
+
## Phase 6: DataLayer Push Specs
|
|
65
|
+
|
|
66
|
+
Standard event names: `cro_purchase`, `cro_lead`, `cro_view_content`, `cro_add_to_cart`, `cro_initiate_checkout`, `cro_add_payment_info`, `cro_registration`, `cro_phone_call`, `cro_search`, `cro_click_button`.
|
|
67
|
+
|
|
68
|
+
Key fields: event, event_id (UUID), transaction_id, value (numeric!), currency, content_ids, content_type, email_hashed, phone_hashed.
|
|
69
|
+
|
|
70
|
+
## Phase 7: UTM Convention
|
|
71
|
+
|
|
72
|
+
Rules: always lowercase, hyphens not underscores. Format: `[product]-[audience]-[YYYYMM]`.
|
|
73
|
+
|
|
74
|
+
| Platform | utm_source | utm_medium |
|
|
75
|
+
|----------|-----------|-----------|
|
|
76
|
+
| Facebook | facebook | paid-social |
|
|
77
|
+
| TikTok | tiktok | paid-social |
|
|
78
|
+
| Google Search | google | paid-search |
|
|
79
|
+
| Google Shopping | google | paid-shopping |
|
|
80
|
+
| Google Display | google | paid-display |
|
|
81
|
+
|
|
82
|
+
## Implementation Checklist
|
|
83
|
+
|
|
84
|
+
1. **GTM Foundation** (2h): Install snippets, create variables, first-touch cookie tag
|
|
85
|
+
2. **Base Pixels** (1h): FB/TikTok/Google/GA4 base tags on All Pages
|
|
86
|
+
3. **DataLayer Pushes** (2-4h): Developer implements per conversion event
|
|
87
|
+
4. **Conversion Tags** (2h): Per event × per platform in GTM
|
|
88
|
+
5. **Enhanced Signals** (1-2h): Google Enhanced Conversions, Meta CAPI, TikTok Events API
|
|
89
|
+
6. **QA** (2h): Verify in platform managers, check dedup, confirm UTMs in GA4
|
|
90
|
+
|
|
91
|
+
## Common Anti-Patterns
|
|
92
|
+
|
|
93
|
+
- Pixel re-fires Purchase from base tag → Use GTM trigger exceptions
|
|
94
|
+
- Missing event_id → CAPI double-counts → Generate ONE UUID, send to both
|
|
95
|
+
- UTM lost on redirect → Capture into _ftc cookie on first page load
|
|
96
|
+
- value as string → breaks revenue → Always parseFloat()
|
|
97
|
+
- No hashed email/phone → CAPI match drops → Hash and pass on every conversion
|
|
98
|
+
|
|
99
|
+
## Template Files (load on-demand with view_file)
|
|
100
|
+
|
|
101
|
+
| Template | Use When |
|
|
102
|
+
|----------|----------|
|
|
103
|
+
| `templates/datalayer-push.js` | Phase 6: Providing exact dataLayer.push() code to developers |
|
|
104
|
+
| `templates/gtm-variables.js` | Phase 3: GTM variable config + first-touch cookie script |
|
|
105
|
+
| `templates/capi-payload.md` | Phase 4: Facebook CAPI and TikTok Events API payload specs |
|
|
106
|
+
|
|
107
|
+
## Output
|
|
108
|
+
|
|
109
|
+
Save as `tracking-strategy-[brand]-[YYYYMMDD].md`. Must be implementable without follow-up questions.
|