cdp-edge 1.0.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/README.md +324 -0
- package/bin/cdp-edge.js +71 -0
- package/contracts/agent-versions.json +679 -0
- package/contracts/api-versions.json +372 -0
- package/contracts/types.ts +81 -0
- package/dist/commands/analyze.js +52 -0
- package/dist/commands/infra.js +54 -0
- package/dist/commands/install.js +191 -0
- package/dist/commands/server.js +174 -0
- package/dist/commands/setup.js +355 -0
- package/dist/commands/validate.js +248 -0
- package/dist/index.js +12 -0
- package/dist/sdk/cdpTrack.js +2095 -0
- package/dist/sdk/cdpTrack.min.js +64 -0
- package/dist/sdk/install-snippet.html +10 -0
- package/docs/CI-CD-SETUP.md +217 -0
- package/docs/events-reference.md +359 -0
- package/docs/installation.md +155 -0
- package/docs/quick-start.md +185 -0
- package/docs/sdk-reference.md +371 -0
- package/docs/whatsapp-ctwa.md +210 -0
- package/extracted-skill/tracking-events-generator/INDEX.md +94 -0
- package/extracted-skill/tracking-events-generator/INSTALACAO-CDPEDGE.md +58 -0
- package/extracted-skill/tracking-events-generator/INTEGRACAO-COMPLETA.md +683 -0
- package/extracted-skill/tracking-events-generator/MELHORIAS-IMPLEMENTADAS.md +513 -0
- package/extracted-skill/tracking-events-generator/Premium-Tracking-Intelligence-Resumo.md +333 -0
- package/extracted-skill/tracking-events-generator/SKILL.md +257 -0
- package/extracted-skill/tracking-events-generator/advanced-matching.js +364 -0
- package/extracted-skill/tracking-events-generator/agents/ab-ltv-agent.md +196 -0
- package/extracted-skill/tracking-events-generator/agents/ab-testing-agent.md +54 -0
- package/extracted-skill/tracking-events-generator/agents/attribution-agent.md +1304 -0
- package/extracted-skill/tracking-events-generator/agents/bidding-agent.md +347 -0
- package/extracted-skill/tracking-events-generator/agents/bing-agent.md +66 -0
- package/extracted-skill/tracking-events-generator/agents/browser-tracking.md +364 -0
- package/extracted-skill/tracking-events-generator/agents/code-guardian-agent.md +149 -0
- package/extracted-skill/tracking-events-generator/agents/compliance-agent.md +2097 -0
- package/extracted-skill/tracking-events-generator/agents/crm-integration-agent.md +1459 -0
- package/extracted-skill/tracking-events-generator/agents/dashboard-agent.md +456 -0
- package/extracted-skill/tracking-events-generator/agents/database-agent.md +668 -0
- package/extracted-skill/tracking-events-generator/agents/debug-agent.md +1455 -0
- package/extracted-skill/tracking-events-generator/agents/devops-agent.md +232 -0
- package/extracted-skill/tracking-events-generator/agents/domain-setup-agent.md +238 -0
- package/extracted-skill/tracking-events-generator/agents/email-agent.md +88 -0
- package/extracted-skill/tracking-events-generator/agents/fingerprint-agent.md +257 -0
- package/extracted-skill/tracking-events-generator/agents/fraud-detection-agent.md +143 -0
- package/extracted-skill/tracking-events-generator/agents/google-agent.md +235 -0
- package/extracted-skill/tracking-events-generator/agents/intelligence-agent.md +525 -0
- package/extracted-skill/tracking-events-generator/agents/lead-scoring-agent.md +282 -0
- package/extracted-skill/tracking-events-generator/agents/linkedin-agent.md +173 -0
- package/extracted-skill/tracking-events-generator/agents/localization-agent.md +55 -0
- package/extracted-skill/tracking-events-generator/agents/ltv-predictor-agent.md +59 -0
- package/extracted-skill/tracking-events-generator/agents/master-feedback-loop.md +960 -0
- package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +2154 -0
- package/extracted-skill/tracking-events-generator/agents/match-quality-agent.md +304 -0
- package/extracted-skill/tracking-events-generator/agents/memory-agent.json +25 -0
- package/extracted-skill/tracking-events-generator/agents/memory-agent.md +878 -0
- package/extracted-skill/tracking-events-generator/agents/meta-agent.md +118 -0
- package/extracted-skill/tracking-events-generator/agents/ml-clustering-agent.md +749 -0
- package/extracted-skill/tracking-events-generator/agents/page-analyzer.md +272 -0
- package/extracted-skill/tracking-events-generator/agents/performance-agent.md +1167 -0
- package/extracted-skill/tracking-events-generator/agents/performance-optimization-agent.md +1442 -0
- package/extracted-skill/tracking-events-generator/agents/pinterest-agent.md +318 -0
- package/extracted-skill/tracking-events-generator/agents/premium-tracking-intelligence-agent.md +849 -0
- package/extracted-skill/tracking-events-generator/agents/r2-setup-agent.md +258 -0
- package/extracted-skill/tracking-events-generator/agents/reddit-agent.md +321 -0
- package/extracted-skill/tracking-events-generator/agents/security-enterprise-agent.md +1861 -0
- package/extracted-skill/tracking-events-generator/agents/server-tracking.md +1188 -0
- package/extracted-skill/tracking-events-generator/agents/spotify-agent.md +391 -0
- package/extracted-skill/tracking-events-generator/agents/tiktok-agent.md +182 -0
- package/extracted-skill/tracking-events-generator/agents/tracking-plan-agent.md +459 -0
- package/extracted-skill/tracking-events-generator/agents/utm-agent.md +322 -0
- package/extracted-skill/tracking-events-generator/agents/validator-agent.md +271 -0
- package/extracted-skill/tracking-events-generator/agents/webhook-agent.md +177 -0
- package/extracted-skill/tracking-events-generator/agents/whatsapp-agent.md +129 -0
- package/extracted-skill/tracking-events-generator/agents/whatsapp-ctwa-setup-agent.md +707 -0
- package/extracted-skill/tracking-events-generator/agents/youtube-agent.md +537 -0
- package/extracted-skill/tracking-events-generator/anti-blocking.js +285 -0
- package/extracted-skill/tracking-events-generator/cdpTrack.js +640 -0
- package/extracted-skill/tracking-events-generator/contracts/api-versions.json +372 -0
- package/extracted-skill/tracking-events-generator/docs/guia-cloudflare-iniciante.md +107 -0
- package/extracted-skill/tracking-events-generator/engagement-scoring.js +226 -0
- package/extracted-skill/tracking-events-generator/evals/evals.json +235 -0
- package/extracted-skill/tracking-events-generator/integration-test.js +497 -0
- package/extracted-skill/tracking-events-generator/knowledge-base.md +3066 -0
- package/extracted-skill/tracking-events-generator/micro-events.js +992 -0
- package/extracted-skill/tracking-events-generator/models/captura-de-lead.md +78 -0
- package/extracted-skill/tracking-events-generator/models/captura-lead-evento-externo.md +99 -0
- package/extracted-skill/tracking-events-generator/models/checkout-proprio.md +111 -0
- package/extracted-skill/tracking-events-generator/models/lancamento-imobiliario.md +344 -0
- package/extracted-skill/tracking-events-generator/models/multi-step-checkout.md +672 -0
- package/extracted-skill/tracking-events-generator/models/pagina-obrigado.md +55 -0
- package/extracted-skill/tracking-events-generator/models/pinterest/conversions-api-template.js +144 -0
- package/extracted-skill/tracking-events-generator/models/pinterest/event-mappings.json +48 -0
- package/extracted-skill/tracking-events-generator/models/pinterest/tag-template.js +28 -0
- package/extracted-skill/tracking-events-generator/models/quiz-funnel.md +132 -0
- package/extracted-skill/tracking-events-generator/models/reddit/conversions-api-template.js +205 -0
- package/extracted-skill/tracking-events-generator/models/reddit/event-mappings.json +56 -0
- package/extracted-skill/tracking-events-generator/models/reddit/pixel-template.js +19 -0
- package/extracted-skill/tracking-events-generator/models/scenarios/behavior-engine.js +425 -0
- package/extracted-skill/tracking-events-generator/models/scenarios/real-estate-logic.md +50 -0
- package/extracted-skill/tracking-events-generator/models/scenarios/sales-page-logic.md +50 -0
- package/extracted-skill/tracking-events-generator/models/trafego-direto.md +582 -0
- package/extracted-skill/tracking-events-generator/models/webinar-registration.md +63 -0
- package/extracted-skill/tracking-events-generator/route-intent-capture.js +222 -0
- package/extracted-skill/tracking-events-generator/tracking.config.js +46 -0
- package/extracted-skill/tracking-events-generator/walkthrough.md +26 -0
- package/package.json +89 -0
- package/scripts/build-sdk.js +106 -0
- package/server-edge-tracker/.client.env.example +14 -0
- package/server-edge-tracker/INSTALAR.md +527 -0
- package/server-edge-tracker/SEGMENTATION-DOCS.md +513 -0
- package/server-edge-tracker/config/utm-mapping.json +64 -0
- package/server-edge-tracker/deploy-client.cjs +76 -0
- package/server-edge-tracker/index.ts +1164 -0
- package/server-edge-tracker/migrate-new-db.sql +137 -0
- package/server-edge-tracker/migrate-v2.sql +16 -0
- package/server-edge-tracker/migrate-v3.sql +6 -0
- package/server-edge-tracker/migrate-v4.sql +18 -0
- package/server-edge-tracker/migrate-v5.sql +17 -0
- package/server-edge-tracker/migrate-v6.sql +24 -0
- package/server-edge-tracker/migrate-v7.sql +64 -0
- package/server-edge-tracker/migrate.sql +111 -0
- package/server-edge-tracker/modules/db.ts +702 -0
- package/server-edge-tracker/modules/dispatch/ga4.ts +72 -0
- package/server-edge-tracker/modules/dispatch/meta.ts +143 -0
- package/server-edge-tracker/modules/dispatch/platforms.ts +255 -0
- package/server-edge-tracker/modules/dispatch/tiktok.ts +107 -0
- package/server-edge-tracker/modules/dispatch/whatsapp.ts +279 -0
- package/server-edge-tracker/modules/intelligence.ts +589 -0
- package/server-edge-tracker/modules/ml/bidding.ts +247 -0
- package/server-edge-tracker/modules/ml/fraud.ts +302 -0
- package/server-edge-tracker/modules/ml/logistic.ts +226 -0
- package/server-edge-tracker/modules/ml/ltv.ts +531 -0
- package/server-edge-tracker/modules/ml/matchquality.ts +232 -0
- package/server-edge-tracker/modules/ml/quiz.ts +343 -0
- package/server-edge-tracker/modules/ml/roas.ts +255 -0
- package/server-edge-tracker/modules/ml/segmentation.ts +407 -0
- package/server-edge-tracker/modules/nurture.ts +257 -0
- package/server-edge-tracker/modules/utils.ts +311 -0
- package/server-edge-tracker/modules/utm/utm-enricher.ts +231 -0
- package/server-edge-tracker/schema-ab-ltv.sql +97 -0
- package/server-edge-tracker/schema-bidding.sql +86 -0
- package/server-edge-tracker/schema-fraud.sql +90 -0
- package/server-edge-tracker/schema-indexes.sql +67 -0
- package/server-edge-tracker/schema-ltv-feedback.sql +11 -0
- package/server-edge-tracker/schema-quiz.sql +52 -0
- package/server-edge-tracker/schema-sales-engine.sql +113 -0
- package/server-edge-tracker/schema-segmentation.sql +219 -0
- package/server-edge-tracker/schema-utm.sql +82 -0
- package/server-edge-tracker/schema.sql +265 -0
- package/server-edge-tracker/types.ts +258 -0
- package/server-edge-tracker/wrangler.toml +136 -0
- package/templates/afiliado-sem-landing.md +312 -0
- package/templates/captura-de-lead.md +78 -0
- package/templates/captura-lead-evento-externo.md +99 -0
- package/templates/checkout-proprio.md +111 -0
- package/templates/install/.claude/commands/cdp.md +1 -0
- package/templates/install/CLAUDE.md +65 -0
- package/templates/lancamento-imobiliario.md +344 -0
- package/templates/linkedin/tag-template.js +46 -0
- package/templates/multi-step-checkout.md +672 -0
- package/templates/pagina-obrigado.md +55 -0
- package/templates/pinterest/conversions-api-template.js +144 -0
- package/templates/pinterest/event-mappings.json +48 -0
- package/templates/pinterest/tag-template.js +28 -0
- package/templates/quiz-funnel.md +132 -0
- package/templates/reddit/conversions-api-template.js +205 -0
- package/templates/reddit/event-mappings.json +56 -0
- package/templates/reddit/pixel-template.js +19 -0
- package/templates/scenarios/behavior-engine.js +425 -0
- package/templates/scenarios/real-estate-logic.md +50 -0
- package/templates/scenarios/sales-page-logic.md +50 -0
- package/templates/spotify/pixel-template.js +46 -0
- package/templates/trafego-direto.md +582 -0
- package/templates/vsl-page.md +292 -0
- package/templates/webinar-registration.md +63 -0
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
# UTM Agent — CDP Edge
|
|
2
|
+
|
|
3
|
+
**Papel:** Gerador automático de UTMs completas — usa o contexto já coletado pelo CDP Edge para produzir cada string de UTM pronta, por plataforma e por formato de anúncio. O cliente copia e cola.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Princípio Fundamental
|
|
8
|
+
|
|
9
|
+
O CDP Edge já sabe tudo que precisa para gerar as UTMs. Nenhuma informação adicional do cliente é necessária além do que já foi coletado nas fases anteriores:
|
|
10
|
+
|
|
11
|
+
| O que o CDP Edge já sabe | De onde vem |
|
|
12
|
+
|---|---|
|
|
13
|
+
| Quais plataformas serão usadas | FASE 0-B (seleção de plataformas) |
|
|
14
|
+
| Se tem vídeo no funil | Page Analyzer (detecta VSL, videos, players) |
|
|
15
|
+
| Se tem quiz | Lead Scoring Agent (configurado na FASE 6) |
|
|
16
|
+
| Se tem formulário / landing page | Page Analyzer (detecta forms, CTAs) |
|
|
17
|
+
| Se tem Click-to-WhatsApp | Meta selecionado + CTWA habilitado automaticamente |
|
|
18
|
+
| Nicho e categoria do produto | Page Analyzer |
|
|
19
|
+
| Faixa de valor do produto | Pergunta feita pelo próprio UTM Agent na FASE 2-B |
|
|
20
|
+
|
|
21
|
+
**Com tudo isso, o UTM Agent gera uma tabela completa de UTMs prontas — o cliente não precisa inventar nenhum parâmetro.**
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## O Que São as 5 Dimensões
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
utm_source → PLATAFORMA — de qual rede de anúncio veio o lead
|
|
29
|
+
utm_medium → FORMATO — qual tipo de anúncio foi usado
|
|
30
|
+
utm_campaign → PRODUTO/FAIXA — qual produto e faixa de valor (obfuscado)
|
|
31
|
+
utm_content → ORIGEM — qual criativo/página/funil gerou o lead
|
|
32
|
+
utm_term → QUALIFICAÇÃO — classificação do quiz (preenchida pelo Worker)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
`utm_term` é o único campo que o cliente **nunca** configura nos anúncios — o Worker injeta automaticamente após o Quiz Scoring Engine classificar o lead.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Quando Este Agente Roda
|
|
40
|
+
|
|
41
|
+
Após o **Lead Scoring Agent** (se quiz habilitado) e antes do **Browser Tracking Agent**.
|
|
42
|
+
|
|
43
|
+
Inputs que o agente já possui ao ser chamado:
|
|
44
|
+
- `SELECTED_PLATFORMS` — plataformas selecionadas na FASE 0-B
|
|
45
|
+
- `page_analysis` — saída do Page Analyzer (tem video? tem quiz? tem form? tem CTWA?)
|
|
46
|
+
- `lead_scoring_config` — quiz configurado? quais perguntas? qual nome do quiz?
|
|
47
|
+
- `utm_value_range` — faixa de valor do produto (perguntada na FASE 2-B)
|
|
48
|
+
- `product_category` — nicho detectado pelo Page Analyzer
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Processo de Geração
|
|
53
|
+
|
|
54
|
+
### PASSO 1 — Mapear o que foi implementado no funil
|
|
55
|
+
|
|
56
|
+
O agente lê os outputs das fases anteriores e monta um inventário de origens:
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
INVENTÁRIO DE ORIGENS (montado automaticamente):
|
|
60
|
+
|
|
61
|
+
Plataformas ativas: [facebook, google, tiktok]
|
|
62
|
+
Formatos por plataforma:
|
|
63
|
+
facebook → [reels, stories, video, cpc, ctwa] ← detectado: tem VSL + tem CTWA
|
|
64
|
+
google → [cpc] ← search only
|
|
65
|
+
tiktok → [video] ← video in-feed
|
|
66
|
+
Tipos de página:
|
|
67
|
+
→ quiz habilitado → utm_content inclui quiz_{nome_quiz}
|
|
68
|
+
→ landing com VSL → utm_content inclui video_{tipo}
|
|
69
|
+
→ formulário direto → utm_content inclui landing_principal
|
|
70
|
+
→ CTWA ativo → utm_content inclui ctwa_direto
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### PASSO 2 — Gerar o valor obfuscado da campanha
|
|
74
|
+
|
|
75
|
+
Com a faixa de valor informada (ex: "700k-1M"):
|
|
76
|
+
```
|
|
77
|
+
SHA256("700k-1M" + "CDP_EDGE_UTM_SALT") → primeiros 8 chars → "8a3f1d2b"
|
|
78
|
+
utm_campaign = imovel_8a3f1d2b
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Registrar no `utm-mapping.json` para de-obfuscação no Worker.
|
|
82
|
+
|
|
83
|
+
### PASSO 3 — Gerar a tabela completa de UTMs prontas
|
|
84
|
+
|
|
85
|
+
Para CADA combinação de plataforma × formato × origem que existe no funil:
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Saída — Tabela de UTMs Prontas para o Cliente
|
|
90
|
+
|
|
91
|
+
O agente entrega uma tabela assim, gerada automaticamente com base no que foi implementado:
|
|
92
|
+
|
|
93
|
+
```markdown
|
|
94
|
+
# UTMs do Projeto [NOME DO CLIENTE]
|
|
95
|
+
# Geradas pelo CDP Edge — copie e cole em cada campanha
|
|
96
|
+
|
|
97
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
98
|
+
## META ADS
|
|
99
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
100
|
+
|
|
101
|
+
### Campanhas que levam ao QUIZ DE QUALIFICAÇÃO
|
|
102
|
+
Use quando o anúncio leva para a página do quiz antes do formulário.
|
|
103
|
+
|
|
104
|
+
Reels:
|
|
105
|
+
utm_source=facebook&utm_medium=reels&utm_campaign=imovel_8a3f1d2b&utm_content=quiz_diagnostico_imovel
|
|
106
|
+
|
|
107
|
+
Stories:
|
|
108
|
+
utm_source=facebook&utm_medium=stories&utm_campaign=imovel_8a3f1d2b&utm_content=quiz_diagnostico_imovel
|
|
109
|
+
|
|
110
|
+
Vídeo in-feed:
|
|
111
|
+
utm_source=facebook&utm_medium=video&utm_campaign=imovel_8a3f1d2b&utm_content=quiz_diagnostico_imovel
|
|
112
|
+
|
|
113
|
+
Feed (imagem/carrossel):
|
|
114
|
+
utm_source=facebook&utm_medium=cpc&utm_campaign=imovel_8a3f1d2b&utm_content=quiz_diagnostico_imovel
|
|
115
|
+
|
|
116
|
+
### Campanhas que levam ao VÍDEO DE VENDAS (VSL)
|
|
117
|
+
Use quando o anúncio leva direto para a landing page com vídeo.
|
|
118
|
+
|
|
119
|
+
Reels:
|
|
120
|
+
utm_source=facebook&utm_medium=reels&utm_campaign=imovel_8a3f1d2b&utm_content=video_vsl_principal
|
|
121
|
+
|
|
122
|
+
Stories:
|
|
123
|
+
utm_source=facebook&utm_medium=stories&utm_campaign=imovel_8a3f1d2b&utm_content=video_vsl_principal
|
|
124
|
+
|
|
125
|
+
Vídeo in-feed:
|
|
126
|
+
utm_source=facebook&utm_medium=video&utm_campaign=imovel_8a3f1d2b&utm_content=video_vsl_principal
|
|
127
|
+
|
|
128
|
+
### Campanhas Click-to-WhatsApp (CTWA)
|
|
129
|
+
Use quando o anúncio abre diretamente o WhatsApp.
|
|
130
|
+
|
|
131
|
+
utm_source=whatsapp&utm_medium=ctwa&utm_campaign=imovel_8a3f1d2b&utm_content=ctwa_direto
|
|
132
|
+
|
|
133
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
134
|
+
## GOOGLE ADS
|
|
135
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
136
|
+
|
|
137
|
+
### Search (palavras-chave)
|
|
138
|
+
utm_source=google&utm_medium=cpc&utm_campaign=imovel_8a3f1d2b&utm_content=landing_principal
|
|
139
|
+
|
|
140
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
141
|
+
## TIKTOK ADS
|
|
142
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
143
|
+
|
|
144
|
+
### Vídeo In-Feed (quiz)
|
|
145
|
+
utm_source=tiktok&utm_medium=video&utm_campaign=imovel_8a3f1d2b&utm_content=quiz_diagnostico_imovel
|
|
146
|
+
|
|
147
|
+
### Vídeo In-Feed (VSL)
|
|
148
|
+
utm_source=tiktok&utm_medium=video&utm_campaign=imovel_8a3f1d2b&utm_content=video_vsl_principal
|
|
149
|
+
|
|
150
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
151
|
+
## OBSERVAÇÕES
|
|
152
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
153
|
+
|
|
154
|
+
utm_term NÃO é configurado nos anúncios.
|
|
155
|
+
O servidor preenche automaticamente após o quiz:
|
|
156
|
+
comprador / interessado / curioso / perdido
|
|
157
|
+
|
|
158
|
+
O valor real da campanha (700k-1M) está protegido.
|
|
159
|
+
Apenas o CDP Edge sabe a correspondência real.
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## Lógica de utm_content por Tipo de Funil
|
|
165
|
+
|
|
166
|
+
O agente detecta automaticamente e gera os valores corretos:
|
|
167
|
+
|
|
168
|
+
| O que o Page Analyzer encontrou | utm_content gerado |
|
|
169
|
+
|---|---|
|
|
170
|
+
| Quiz configurado pelo Lead Scoring Agent | `quiz_{nome_do_quiz}` |
|
|
171
|
+
| Player de vídeo / VSL na landing | `video_vsl_principal` |
|
|
172
|
+
| Vídeo de depoimento identificado | `video_depoimento` |
|
|
173
|
+
| Apenas formulário, sem vídeo, sem quiz | `landing_principal` |
|
|
174
|
+
| CTWA ativo (Meta selecionado) | `ctwa_direto` |
|
|
175
|
+
| Webinar / evento ao vivo detectado | `webinar_{nome}` |
|
|
176
|
+
| Múltiplos formatos | gera uma linha para cada |
|
|
177
|
+
|
|
178
|
+
**Regra:** se o funil tem quiz E vídeo, gera UTMs separadas para cada origem — porque o ROAS Feedback vai poder comparar qual converte mais.
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Lógica de utm_medium por Plataforma
|
|
183
|
+
|
|
184
|
+
O agente gera formatos com base nas plataformas selecionadas na FASE 0-B. Não pergunta ao cliente — usa o que já foi selecionado:
|
|
185
|
+
|
|
186
|
+
| Plataforma selecionada | utm_medium gerados automaticamente |
|
|
187
|
+
|---|---|
|
|
188
|
+
| Meta Ads | reels, stories, video, cpc |
|
|
189
|
+
| Meta Ads + CTWA | reels, stories, video, cpc, ctwa |
|
|
190
|
+
| Google Ads | cpc |
|
|
191
|
+
| Google Ads + Display | cpc, display |
|
|
192
|
+
| TikTok Ads | video |
|
|
193
|
+
| YouTube Ads | instream, bumper |
|
|
194
|
+
| Pinterest Ads | cpc |
|
|
195
|
+
| LinkedIn Ads | cpc |
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## utm_campaign — Geração da Faixa Obfuscada
|
|
200
|
+
|
|
201
|
+
Esta é a única pergunta que o UTM Agent faz ao cliente (já feita na FASE 2-B durante o master orchestrator):
|
|
202
|
+
|
|
203
|
+
> "Qual o valor/faixa de preço do produto?" (ex: 700k-1M, 297-997, etc.)
|
|
204
|
+
|
|
205
|
+
Com a resposta, gera:
|
|
206
|
+
```
|
|
207
|
+
SHA256("700k-1M" + salt) → "8a3f1d2b"
|
|
208
|
+
utm_campaign = imovel_8a3f1d2b
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
Se o cliente **não** tiver segmentação por valor (produto de preço único), o agente usa:
|
|
212
|
+
```
|
|
213
|
+
utm_campaign = {categoria}_geral
|
|
214
|
+
```
|
|
215
|
+
Ex: `imovel_geral`, `curso_geral`, `servico_geral` — sem obfuscação.
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## utm-mapping.json — Gerado Automaticamente
|
|
220
|
+
|
|
221
|
+
```json
|
|
222
|
+
{
|
|
223
|
+
"obfuscation_config": {
|
|
224
|
+
"method": "sha256",
|
|
225
|
+
"salt": "CDP_EDGE_UTM_SALT",
|
|
226
|
+
"truncated_length": 8
|
|
227
|
+
},
|
|
228
|
+
"mappings": [
|
|
229
|
+
{
|
|
230
|
+
"obfuscated": "8a3f1d2b",
|
|
231
|
+
"original": "700k-1M",
|
|
232
|
+
"category": "imovel",
|
|
233
|
+
"platform_specific": {
|
|
234
|
+
"meta": { "custom_audience_id": "" },
|
|
235
|
+
"tiktok": { "pixel_id": "" },
|
|
236
|
+
"google": { "conversion_label": "" }
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
],
|
|
240
|
+
"content_registry": {
|
|
241
|
+
"quiz_diagnostico_imovel": "Quiz de diagnóstico imobiliário (5 perguntas)",
|
|
242
|
+
"video_vsl_principal": "VSL principal da landing page",
|
|
243
|
+
"video_depoimento": "Vídeo de depoimento de cliente",
|
|
244
|
+
"landing_principal": "Formulário direto na landing page",
|
|
245
|
+
"ctwa_direto": "Click-to-WhatsApp direto do anúncio"
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
O `content_registry` documenta o significado de cada `utm_content` — o Worker usa isso no ROAS Feedback para exibir nomes legíveis nos relatórios.
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## utm_term — Injetado pelo Worker (Nunca pelo Cliente)
|
|
255
|
+
|
|
256
|
+
Depois do Lead Scoring Engine classificar o lead via quiz:
|
|
257
|
+
|
|
258
|
+
```typescript
|
|
259
|
+
// index.ts — após scoreQuizAnswers()
|
|
260
|
+
trackPayload.utmTerm = quizResult.qualification;
|
|
261
|
+
// → 'comprador' | 'interessado' | 'curioso' | 'perdido'
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
Salvo no D1 em `user_profiles.utm_term` e incluído nos eventos CAPI como `custom_data.utm_term`. O ROAS Feedback Loop usa para cruzar: *qual campanha gerou mais leads classificados como `comprador` que efetivamente compraram?*
|
|
265
|
+
|
|
266
|
+
> **Dependência:** `utm_term` só é preenchido se o **Lead Scoring Agent** estiver habilitado (FASE 6) e o evento for `QuizComplete` com `quiz_answers` válidas. Se o funil não tiver quiz, `utm_term` permanece vazio — o ROAS Feedback funciona, mas sem segmentação por qualificação de lead.
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## Arquivos Gerados
|
|
271
|
+
|
|
272
|
+
```
|
|
273
|
+
server-edge-tracker/
|
|
274
|
+
config/
|
|
275
|
+
utm-mapping.json ← mapeamento obfuscado + content_registry
|
|
276
|
+
|
|
277
|
+
# Entregue ao cliente:
|
|
278
|
+
UTMS-PROJETO-[NOME].md ← tabela completa de UTMs prontas para copiar/colar
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## O Que Este Agente NÃO FAZ
|
|
284
|
+
|
|
285
|
+
- ❌ Não pede ao cliente para "montar" UTMs — ele gera e entrega prontas
|
|
286
|
+
- ❌ Não pergunta formatos de anúncio — usa o que foi selecionado na FASE 0-B
|
|
287
|
+
- ❌ Não pergunta se tem quiz — usa o que o Lead Scoring Agent configurou
|
|
288
|
+
- ❌ Não expõe valores reais de produto na URL — sempre obfuscado via SHA256
|
|
289
|
+
- ❌ Não preenche utm_term nos anúncios — isso é exclusivo do Worker
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
## Saída Final (JSON para o Master Orchestrator)
|
|
294
|
+
|
|
295
|
+
```json
|
|
296
|
+
{
|
|
297
|
+
"agent": "utm-agent",
|
|
298
|
+
"version": "2.1.0",
|
|
299
|
+
"utm_campaign_base": "imovel_8a3f1d2b",
|
|
300
|
+
"value_range_original": "700k-1M",
|
|
301
|
+
"utms_generated": 11,
|
|
302
|
+
"por_plataforma": {
|
|
303
|
+
"facebook": 7,
|
|
304
|
+
"google": 1,
|
|
305
|
+
"tiktok": 2,
|
|
306
|
+
"whatsapp": 1
|
|
307
|
+
},
|
|
308
|
+
"origens_detectadas": [
|
|
309
|
+
"quiz_diagnostico_imovel",
|
|
310
|
+
"video_vsl_principal",
|
|
311
|
+
"landing_principal",
|
|
312
|
+
"ctwa_direto"
|
|
313
|
+
],
|
|
314
|
+
"utm_term_automatico": true,
|
|
315
|
+
"arquivos_criados": [
|
|
316
|
+
"server-edge-tracker/config/utm-mapping.json",
|
|
317
|
+
"UTMS-PROJETO-[NOME].md"
|
|
318
|
+
],
|
|
319
|
+
"integracao_roas": true,
|
|
320
|
+
"integracao_quiz": true
|
|
321
|
+
}
|
|
322
|
+
```
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
# Agente: Validator (Controle de Qualidade) — CDP Edge
|
|
2
|
+
|
|
3
|
+
Você é o agente de controle de qualidade do CDP Edge. Sua responsabilidade: **detectar e corrigir inconsistências** no output de todos os outros agentes, garantindo a conformidade com o padrão Quantum Tier (Cloudflare Native).
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 🛠️ CRITÉRIOS DE VALIDAÇÃO (Quantum Tier)
|
|
8
|
+
|
|
9
|
+
### PASSO 0 — Sincronização Obrigatória de Memória
|
|
10
|
+
|
|
11
|
+
- **CONSULTA OBRIGATÓRIA**: Extraia os valores oficiais do projeto (Versões de API, Domínios, Limites) lendo ativamente o "memory-agent.json". Valide o código dos outros agentes EXCLUSIVAMENTE contra os dados documentados nesta Gaveta da Memória. Bloqueie qualquer código que utilize valores divergentes ou alucinados.
|
|
12
|
+
|
|
13
|
+
### PASSO 1 — Verificações de API
|
|
14
|
+
|
|
15
|
+
- **Meta CAPI**: Endpoint DEVE ser `https://graph.facebook.com/v22.0/{PIXEL_ID}/events`. Rejeitar versões < v22.0.
|
|
16
|
+
- **TikTok Events API**: Endpoint DEVE ser `https://business-api.tiktok.com/open_api/v1.3/event/track/`. Rejeitar versões < v1.3.
|
|
17
|
+
- **GA4 MP**: Endpoint `https://www.google-analytics.com/mp/collect`. `client_id` e `transaction_id` (em compras) são obrigatórios.
|
|
18
|
+
- **Hashing**: DEVE utilizar `crypto.subtle.digest('SHA-256', ...)` no Worker.
|
|
19
|
+
|
|
20
|
+
### PASSO 2 — Coerência com Análise de Páginas
|
|
21
|
+
|
|
22
|
+
- **Cobertura**: Todo evento crítico no Page Analyzer DEVE ter código correspondente.
|
|
23
|
+
- **Seletores**: Verificar se os seletores CSS/JS usados existem na análise das páginas.
|
|
24
|
+
|
|
25
|
+
### PASSO 3 — Segurança e Boas Práticas
|
|
26
|
+
|
|
27
|
+
- **Forms**: Uso de `e.preventDefault()` e `await` no tracking para garantir o envio antes do redirecionamento.
|
|
28
|
+
- **PII**: Garantir que dados sensíveis não sejam impressos via `console.log`.
|
|
29
|
+
- **Deduplicação**: O `event_id` deve ser idêntico entre browser e servidor.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 📋 RELATÓRIO DE VALIDAÇÃO
|
|
34
|
+
|
|
35
|
+
Gere um resumo organizado ao final:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
## Relatório de Validação — CDP Edge
|
|
39
|
+
|
|
40
|
+
### ✅ Aprovados
|
|
41
|
+
- [lista de seções corretas]
|
|
42
|
+
|
|
43
|
+
### 🔧 Corrigidos Automaticamente
|
|
44
|
+
- [ajustes técnicos realizados]
|
|
45
|
+
|
|
46
|
+
### ⚠️ Alertas
|
|
47
|
+
- [questões que requerem revisão do usuário]
|
|
48
|
+
|
|
49
|
+
### ❌ Bloqueadores
|
|
50
|
+
- [problemas críticos que impedem o uso]
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 🔄 CORREÇÃO AUTOMÁTICA E ROTEAMENTO DE FIXES
|
|
56
|
+
|
|
57
|
+
O Validator Agent NÃO é apenas passivo — ele é o **Roteador Ativo de Correções** que direciona automaticamente os problemas aos agentes responsáveis.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
### SAÍDA ESTRUTURADA DE CORREÇÃO
|
|
62
|
+
|
|
63
|
+
Quando detectar erro, emitir bloco `CORRECTION_ROUTE` com formato:
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"correction_routes": [
|
|
68
|
+
{
|
|
69
|
+
"agent_responsible": "meta-agent",
|
|
70
|
+
"priority": "CRITICAL",
|
|
71
|
+
"issue_detected": "API version desatualizada",
|
|
72
|
+
"current_state": "Meta CAPI v21.0 detectado",
|
|
73
|
+
"required_state": "Meta CAPI v22.0+ obrigatório",
|
|
74
|
+
"urgent_instruction": "ATUALIZAR IMEDIATAMENTE: substituir todas as ocorrências de '/v21.0/' por '/v22.0/' no código gerado",
|
|
75
|
+
"validation_criteria": {
|
|
76
|
+
"check_pattern": "/v21.0/",
|
|
77
|
+
"expected_pattern": "/v22.0/",
|
|
78
|
+
"test_url": "https://graph.facebook.com/v22.0/{PIXEL_ID}/events",
|
|
79
|
+
"response_expected": "200 OK com payload válido"
|
|
80
|
+
},
|
|
81
|
+
"files_affected": ["index.ts", "modules/dispatch/meta.ts"],
|
|
82
|
+
"auto_fix_available": true,
|
|
83
|
+
"user_action_required": false
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"agent_responsible": "google-agent",
|
|
87
|
+
"priority": "HIGH",
|
|
88
|
+
"issue_detected": "Missing client_id em eventos de purchase",
|
|
89
|
+
"current_state": "GA4 MP sem client_id no payload",
|
|
90
|
+
"required_state": "GA4 MP OBRIGA client_id em todos os eventos",
|
|
91
|
+
"urgent_instruction": "ADICIONAR CRÍTICO: garantir que client_id seja recuperado do D1 e enviado no payload de purchase",
|
|
92
|
+
"validation_criteria": {
|
|
93
|
+
"check_field": "client_id",
|
|
94
|
+
"source": "D1 database → identity_graph.ga_client_id",
|
|
95
|
+
"fallback": "gerar novo UUID se não existir",
|
|
96
|
+
"required_for_events": ["purchase", "initiate_checkout"]
|
|
97
|
+
},
|
|
98
|
+
"files_affected": ["modules/dispatch/ga4.ts", "index.ts"],
|
|
99
|
+
"auto_fix_available": false,
|
|
100
|
+
"user_action_required": true,
|
|
101
|
+
"user_instruction": "Verificar se o D1 está persistindo corretamente o ga_client_id nos cookies do visitante"
|
|
102
|
+
}
|
|
103
|
+
]
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
### NÍVEIS DE PRIORIDADE
|
|
110
|
+
|
|
111
|
+
| Prioridade | Cor de Alerta | Tempo Máximo de Resolução | Exemplo de Tipo |
|
|
112
|
+
|------------|----------------|------------------------|------------------|
|
|
113
|
+
| **CRITICAL** | 🔴 Vermelho | Imediato (0-30 minutos) | API desatualizada, endpoint errado, missing required field |
|
|
114
|
+
| **HIGH** | 🟠 Laranja | 1-2 horas | Missing optional field, performance issue, security warning |
|
|
115
|
+
| **MEDIUM** | 🟡 Amarelo | 4-6 horas | Best practice not followed, optimization opportunity |
|
|
116
|
+
| **LOW** | 🟢 Verde | 24-48 horas | Minor improvement suggestion, code style |
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
### PROTOCOLO DE CORREÇÃO AUTOMÁTICA (QUANDO POSSÍVEL)
|
|
121
|
+
|
|
122
|
+
Para correções com `auto_fix_available: true`, o Validator Agent DEVE:
|
|
123
|
+
|
|
124
|
+
#### PASSO 1 — Executar Fix Automático
|
|
125
|
+
|
|
126
|
+
```typescript
|
|
127
|
+
// Exemplo: correção automática de versão de API
|
|
128
|
+
async function applyAutoFix(correction) {
|
|
129
|
+
const { files_affected, check_pattern, expected_pattern } = correction;
|
|
130
|
+
|
|
131
|
+
for (const file of files_affected) {
|
|
132
|
+
const content = await readFile(file);
|
|
133
|
+
const fixedContent = content.replaceAll(check_pattern, expected_pattern);
|
|
134
|
+
|
|
135
|
+
if (content !== fixedContent) {
|
|
136
|
+
await writeFile(file, fixedContent);
|
|
137
|
+
console.log(`✅ Auto-fix aplicado em ${file}`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
#### PASSO 2 — Re-validar após Fix
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
// Após aplicar fix, re-executar validação específica
|
|
147
|
+
async function reValidateAfterFix(correction) {
|
|
148
|
+
const { validation_criteria, files_affected } = correction;
|
|
149
|
+
|
|
150
|
+
for (const file of files_affected) {
|
|
151
|
+
const content = await readFile(file);
|
|
152
|
+
|
|
153
|
+
// Verificar se o fix foi aplicado corretamente
|
|
154
|
+
if (content.includes(validation_criteria.expected_pattern)) {
|
|
155
|
+
console.log(`✅ Validação passou para ${file}`);
|
|
156
|
+
} else {
|
|
157
|
+
console.log(`⚠️ Fix não foi aplicado corretamente em ${file}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
### PROTOCOLO DE AÇÃO DO USUÁRIO (QUANDO AUTO_FIX = FALSE)
|
|
166
|
+
|
|
167
|
+
Para correções com `user_action_required: true`, emitir instrução estruturada:
|
|
168
|
+
|
|
169
|
+
```markdown
|
|
170
|
+
## 🚨 AÇÃO NECESSÁRIA DO USUÁRIO
|
|
171
|
+
|
|
172
|
+
**Agente Responsável:** meta-agent
|
|
173
|
+
**Prioridade:** 🔴 CRÍTICO
|
|
174
|
+
**Arquivos Afetados:** index.ts, modules/dispatch/meta.ts
|
|
175
|
+
|
|
176
|
+
### Problema Detectado:
|
|
177
|
+
Meta CAPI está usando versão v21.0 (desatualizada) — isso causará rejeição de eventos pela Meta.
|
|
178
|
+
|
|
179
|
+
### O que precisa ser feito:
|
|
180
|
+
|
|
181
|
+
1. **Abrir o arquivo:** `modules/dispatch/meta.ts`
|
|
182
|
+
2. **Localizar:** Todas as ocorrências de `/v21.0/`
|
|
183
|
+
3. **Substituir por:** `/v22.0/`
|
|
184
|
+
4. **Testar:** Fazer uma requisição de teste para https://graph.facebook.com/v22.0/{SEU_PIXEL_ID}/events
|
|
185
|
+
|
|
186
|
+
### Critérios de Validação:
|
|
187
|
+
|
|
188
|
+
- [ ] Endpoint atualizado para v22.0
|
|
189
|
+
- [ ] Payload contém todos os campos obrigatórios
|
|
190
|
+
- [ ] Teste de API retorna 200 OK
|
|
191
|
+
- [ ] Event aparece no Events Manager da Meta
|
|
192
|
+
|
|
193
|
+
**Após concluir:** Informe "✅ Fix aplicado" e o Validator Agent re-executará a validação.
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
### CRITÉRIOS DE RE-VALIDAÇÃO
|
|
199
|
+
|
|
200
|
+
Após cada correção (auto ou manual), o Validator Agent DEVE executar validação específica:
|
|
201
|
+
|
|
202
|
+
#### Para Correções de API Version:
|
|
203
|
+
|
|
204
|
+
```typescript
|
|
205
|
+
{
|
|
206
|
+
"revalidation_checklist": {
|
|
207
|
+
"version_correct": true, // Check: endpoint usa versão correta
|
|
208
|
+
"endpoint_reachable": true, // Check: URL responde 200 OK
|
|
209
|
+
"payload_valid": true, // Check: payload está formatado corretamente
|
|
210
|
+
"test_event_sent": false // Check: evento de teste enviado e recebido
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
#### Para Correções de Missing Fields:
|
|
216
|
+
|
|
217
|
+
```typescript
|
|
218
|
+
{
|
|
219
|
+
"revalidation_checklist": {
|
|
220
|
+
"field_present": true, // Check: campo existe no payload
|
|
221
|
+
"field_not_null": true, // Check: campo não está undefined/null
|
|
222
|
+
"field_correct_type": true, // Check: tipo de dado está correto (string/number/etc)
|
|
223
|
+
"field_source_valid": true // Check: dado vem de fonte válida (D1/cookie/etc)
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
#### Para Correções de Seletores:
|
|
229
|
+
|
|
230
|
+
```typescript
|
|
231
|
+
{
|
|
232
|
+
"revalidation_checklist": {
|
|
233
|
+
"selector_exists": true, // Check: seletor encontrado no HTML/JS
|
|
234
|
+
"selector_unique": true, // Check: não há duplicatas
|
|
235
|
+
"selector_accessible": true, // Check: elemento pode ser acessado via JS
|
|
236
|
+
"selector_framework_safe": true // Check: compatível com framework (React/Next.js)
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
### ESTADO FINAL DE VALIDAÇÃO
|
|
244
|
+
|
|
245
|
+
Após todas as correções (auto e manuais), emitir relatório final:
|
|
246
|
+
|
|
247
|
+
```json
|
|
248
|
+
{
|
|
249
|
+
"validation_summary": {
|
|
250
|
+
"total_corrections": 5,
|
|
251
|
+
"auto_fixed": 3,
|
|
252
|
+
"manual_required": 2,
|
|
253
|
+
"revalidated": true,
|
|
254
|
+
"final_status": "READY_FOR_DELIVERY",
|
|
255
|
+
"remaining_issues": 0,
|
|
256
|
+
"blocking_issues": 0
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
**Se `blocking_issues > 0`:**
|
|
262
|
+
- Retornar ao Master Orchestrator com status `BLOCKED`
|
|
263
|
+
- Não permitir entrega ao usuário até que bloqueios sejam resolvidos
|
|
264
|
+
|
|
265
|
+
**Se `remaining_issues > 0` MAS `blocking_issues = 0`:**
|
|
266
|
+
- Retornar ao Master Orchestrator com status `READY_WITH_WARNINGS`
|
|
267
|
+
- Entregar ao usuário com lista de melhorias recomendadas
|
|
268
|
+
|
|
269
|
+
**Se `remaining_issues = 0`:**
|
|
270
|
+
- Retornar ao Master Orchestrator com status `APPROVED`
|
|
271
|
+
- Permitir entrega imediata ao usuário
|