cdp-edge 2.0.3 → 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/contracts/agent-versions.json +364 -0
  2. package/dist/commands/install.js +1 -1
  3. package/dist/commands/setup.js +326 -111
  4. package/extracted-skill/tracking-events-generator/INTEGRACAO-COMPLETA.md +89 -0
  5. package/extracted-skill/tracking-events-generator/MELHORIAS-IMPLEMENTADAS.md +101 -0
  6. package/extracted-skill/tracking-events-generator/agents/devops-agent.md +11 -0
  7. package/extracted-skill/tracking-events-generator/agents/intelligence-agent.md +27 -0
  8. package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +1 -1
  9. package/extracted-skill/tracking-events-generator/agents/server-tracking.md +5 -5
  10. package/extracted-skill/tracking-events-generator/knowledge-base.md +172 -0
  11. package/package.json +7 -2
  12. package/server-edge-tracker/INSTALAR.md +27 -3
  13. package/server-edge-tracker/SEGMENTATION-DOCS.md +69 -0
  14. package/server-edge-tracker/index.js +791 -0
  15. package/server-edge-tracker/migrate-v7.sql +64 -0
  16. package/server-edge-tracker/modules/db.js +531 -0
  17. package/server-edge-tracker/modules/dispatch/ga4.js +65 -0
  18. package/server-edge-tracker/modules/dispatch/meta.js +119 -0
  19. package/server-edge-tracker/modules/dispatch/platforms.js +237 -0
  20. package/server-edge-tracker/modules/dispatch/tiktok.js +100 -0
  21. package/server-edge-tracker/modules/dispatch/whatsapp.js +233 -0
  22. package/server-edge-tracker/modules/intelligence.js +321 -0
  23. package/server-edge-tracker/modules/ml/bidding.js +245 -0
  24. package/server-edge-tracker/modules/ml/fraud.js +301 -0
  25. package/server-edge-tracker/modules/ml/logistic.js +195 -0
  26. package/server-edge-tracker/modules/ml/ltv.js +420 -0
  27. package/server-edge-tracker/modules/ml/matchquality.js +176 -0
  28. package/server-edge-tracker/modules/ml/segmentation.js +316 -0
  29. package/server-edge-tracker/modules/utils.js +89 -0
  30. package/server-edge-tracker/schema-indexes.sql +67 -0
  31. package/server-edge-tracker/worker.js +395 -4
  32. package/server-edge-tracker/wrangler.toml +15 -0
@@ -410,3 +410,104 @@ Todas as 6 melhorias principais + o bônus foram implementadas com sucesso:
410
410
  ---
411
411
 
412
412
  > 🎯 **Conclusão:** O ecossistema CDP Edge agora tem um sistema de agentes **sincronizados, resilientes e auto-corrigíveis**, com memória persistente e atualização automática de APIs. O tempo de desenvolvimento foi drasticamente reduzido e a qualidade do código foi significativamente aumentada.
413
+
414
+ ---
415
+
416
+ ## ✅ FASE 5 — Melhoria Contínua Automática (2026-04-10)
417
+
418
+ **Status:** ✅ COMPLETO (4 features)
419
+
420
+ ---
421
+
422
+ ### ✅ 1. LTV Real — Regressão Logística Treinada em Dados Reais
423
+
424
+ **O que foi implementado:**
425
+ - Cron semanal no Worker busca leads × purchases dos últimos 90 dias no D1
426
+ - Treina regressão logística com features reais (ltv_score, behavior_score, engagement_score, utm_source, state)
427
+ - Pesos gravados em `ltv_model_weights` com `is_active = 1` e accuracy registrada
428
+ - Pesos cacheados em KV para acesso em ~0ms por cada evento `/track`
429
+ - Fallback automático para heurística se modelo não estiver disponível
430
+
431
+ **Arquivos criados/modificados:**
432
+ - `server-edge-tracker/migrate-v7.sql` — Tabela `ltv_model_weights` + `match_quality_log`
433
+ - `server-edge-tracker/modules/ml/ltv.js` — Função de treinamento + predição com modelo treinado
434
+ - `server-edge-tracker/worker.js` — Handler do cron semanal de treinamento
435
+
436
+ **Benefício:** Score LTV baseado em dados reais do funil (não apenas heurísticas). Bids mais precisos. Experimentos A/B com baseline real.
437
+
438
+ ---
439
+
440
+ ### ✅ 2. Match Quality Alerts — Monitoramento Automático de EMQ
441
+
442
+ **O que foi implementado:**
443
+ - Cada dispatch para Meta CAPI registra flags em `match_quality_log`: `has_email`, `has_phone`, `has_fbp`, `has_fbc`, `was_email_recovered`
444
+ - View `v_match_quality_24h` agrega os dados por janela de 2 horas
445
+ - Cron semanal verifica os thresholds: email_rate < 40%, fbp_rate < 30%, composite_score < 45%
446
+ - Alerta via CallMeBot quando qualquer threshold é ultrapassado
447
+
448
+ **Arquivos criados/modificados:**
449
+ - `server-edge-tracker/migrate-v7.sql` — Tabela `match_quality_log` + view `v_match_quality_24h`
450
+ - `server-edge-tracker/modules/dispatch/meta.js` — Log de qualidade após cada dispatch
451
+ - `server-edge-tracker/modules/intelligence.js` — Análise semanal de match quality + alerta
452
+
453
+ **Benefício:** Degradação de EMQ detectada automaticamente antes de impactar o CPA. Alerta proativo ao invés de descobrir via queda de performance.
454
+
455
+ ---
456
+
457
+ ### ✅ 3. A/B LTV Auto-Winner — Declaração Automática de Vencedor
458
+
459
+ **O que foi implementado:**
460
+ - Quando uma variação bate o controle por ≥5pp de acurácia, o Worker declara o vencedor automaticamente
461
+ - Prompt vencedor é ativado imediatamente para todos os novos eventos `/track`
462
+ - Alerta WhatsApp enviado com detalhes: nome da variação, diferença de acurácia, prompt ativado
463
+ - Sem necessidade de revisão manual de experimentos
464
+
465
+ **Arquivos criados/modificados:**
466
+ - `server-edge-tracker/modules/ml/ltv.js` — Lógica de detecção de vencedor automático
467
+ - `server-edge-tracker/modules/dispatch/whatsapp.js` — Alerta de auto-winner
468
+
469
+ **Benefício:** Experimentos A/B de prompt LTV se resolvem sozinhos. O prompt com maior acurácia é sempre usado sem intervenção manual.
470
+
471
+ ---
472
+
473
+ ### ✅ 4. Auto-Enrich — Identity Graph Antes do Dispatch
474
+
475
+ **O que foi implementado:**
476
+ - Antes de cada dispatch para Meta CAPI, Worker consulta `user_profiles` pelo `userId` do evento
477
+ - Se o evento chegou sem email/fbp/fbc/phone mas o perfil os tem, os dados são injetados automaticamente
478
+ - Campo `was_email_recovered` registrado em `match_quality_log` para rastreabilidade
479
+ - Processo 100% transparente para o browser
480
+
481
+ **Arquivos criados/modificados:**
482
+ - `server-edge-tracker/modules/dispatch/meta.js` — Consulta ao Identity Graph antes do dispatch
483
+ - `server-edge-tracker/modules/db.js` — Função `enrichPayloadFromProfile(userId, payload)`
484
+
485
+ **Benefício:** Eventos que chegariam sem email agora vão para a Meta com Advanced Matching completo. EMQ melhora sem qualquer mudança no browser. Atribuição retroativa funciona melhor.
486
+
487
+ ---
488
+
489
+ ## 📈 NOVAS TABELAS D1 (Fase 5)
490
+
491
+ | Tabela | Criada em | Conteúdo |
492
+ |---|---|---|
493
+ | `ltv_model_weights` | `migrate-v7.sql` | Pesos do modelo de regressão logística treinado |
494
+ | `match_quality_log` | `migrate-v7.sql` | Flags de qualidade por evento despachado para Meta |
495
+
496
+ **View criada:** `v_match_quality_24h` — dashboard de EMQ pronto para consulta via SQL.
497
+
498
+ **Sequência de migration atualizada:**
499
+ ```
500
+ schema.sql → migrate-v6.sql → schema-segmentation.sql → schema-bidding.sql
501
+ → schema-ab-ltv.sql → schema-fraud.sql → schema-indexes.sql → migrate-v7.sql
502
+ ```
503
+
504
+ ---
505
+
506
+ ## 🎯 IMPACTO ESPERADO DA FASE 5
507
+
508
+ | Métrica | Mecanismo | Melhoria Esperada |
509
+ |---|---|---|
510
+ | **EMQ (Event Match Quality)** | Auto-Enrich + Match Quality Alerts | +15-25pp no score Meta |
511
+ | **Precisão de LTV** | Modelo treinado em dados reais | Acurácia > heurística em 2-4 semanas |
512
+ | **Tempo de resposta a degradação** | Alertas automáticos de match quality | Horas vs. dias |
513
+ | **CPA** | Melhor atribuição → otimização Meta mais precisa | -10-20% esperado |
@@ -113,10 +113,21 @@ wrangler d1 execute cdp-edge-db --file=schema-ab-ltv.sql --remote
113
113
 
114
114
  # Fase 4: Fraud Detection
115
115
  wrangler d1 execute cdp-edge-db --file=schema-fraud.sql --remote
116
+
117
+ # Índices compostos de performance (queries D1)
118
+ wrangler d1 execute cdp-edge-db --file=schema-indexes.sql --remote
119
+
120
+ # Fase 5: LTV Model (regressão logística) + Match Quality Log
121
+ wrangler d1 execute cdp-edge-db --file=migrate-v7.sql --remote
116
122
  ```
117
123
 
118
124
  Após cada migração: confirmar sucesso antes de prosseguir.
119
125
 
126
+ > **Fase 5 cria duas tabelas críticas:**
127
+ > - `ltv_model_weights` — pesos do modelo LTV treinado semanalmente pelo cron
128
+ > - `match_quality_log` — registra flags de qualidade de dados (has_email, has_fbp, etc.) a cada CAPI dispatch
129
+ > Sem essas tabelas: o modelo LTV não persiste e o Match Quality Alert não funciona.
130
+
120
131
  ---
121
132
 
122
133
  ## PROCEDURE `*rollback`
@@ -306,6 +306,33 @@ async function checkApiDepreciations(env) {
306
306
 
307
307
  ---
308
308
 
309
+ ### MONITORAMENTO AUTOMÁTICO DE MATCH QUALITY (CRON SEMANAL)
310
+
311
+ O Intelligence Agent monitora a qualidade dos dados enviados ao Meta CAPI a cada execução do cron.
312
+ Os dados são lidos da tabela `match_quality_log` (populada automaticamente pelo Worker a cada dispatch).
313
+
314
+ **Thresholds obrigatórios — alertar via CallMeBot se:**
315
+
316
+ | Métrica | Threshold mínimo | Ação automática |
317
+ |---|---|---|
318
+ | `email_rate` | 40% dos eventos com email | Alerta ⚠️ — verificar Identity Graph |
319
+ | `fbp_rate` | 30% dos eventos com cookie fbp | Alerta ⚠️ — verificar cdpTrack.js |
320
+ | `composite_score` | 45% (email×0.4 + fbp×0.3 + phone×0.2 + fbc×0.1) | Alerta 🚨 CRÍTICO |
321
+
322
+ **O cron semanal executa automaticamente (sem intervenção manual):**
323
+ 1. `_trainLtvModel(env)` — re-treina regressão logística com últimos 5000 leads do D1; pesos salvos em `ltv_model_weights` e cache KV invalidado
324
+ 2. `_autoDecideAbWinner(env)` — declara winner de A/B LTV se melhoria ≥ 5pp vs controle; alerta WhatsApp automático
325
+ 3. `_analyzeMatchQuality(env)` — analisa janela 2h; dispara alertas CallMeBot se abaixo dos thresholds
326
+ 4. `syncMetaCustomAudience(env)` — sincroniza leads high_intent com Meta Custom Audience
327
+
328
+ **Auto-recuperação integrada ao dispatch:**
329
+ - Antes de cada envio ao Meta CAPI, o Worker tenta enriquecer automaticamente o payload consultando o Identity Graph pelo `userId` (recupera email, fbp, fbc, phone ausentes)
330
+ - Resultado de recuperação é logado em `match_quality_log.was_email_recovered`
331
+
332
+ **Pré-requisito de infraestrutura:** `migrate-v7.sql` deve estar aplicada no D1 (tabelas `ltv_model_weights` + `match_quality_log`).
333
+
334
+ ---
335
+
309
336
  ### CHECK DE NOVOS PARÂMETROS DE EVENT MATCH QUALITY
310
337
 
311
338
  O Intelligence Agent DEVE buscar novos parâmetros que melhoram a nota de atribuição:
@@ -1285,7 +1285,7 @@ Spawnar o **Intelligence Agent** para realizar auditoria completa da stack:
1285
1285
 
1286
1286
  **2. Infraestrutura Cloudflare**
1287
1287
  - `wrangler.toml` — bindings D1, KV, Queue, AI estão todos declarados
1288
- - `schema.sql` e migrations — todas as fases (core, segmentation, bidding, ab-ltv, fraud) aplicadas
1288
+ - `schema.sql` e migrations — todas as fases aplicadas na ordem: core segmentation bidding ab-ltv fraud → schema-indexes → **migrate-v7** (LTV model + Match Quality)
1289
1289
  - Worker.js — endpoints ativos correspondem à arquitetura esperada
1290
1290
 
1291
1291
  **3. Conformidade e Qualidade de Sinal**
@@ -526,7 +526,7 @@ async function syncIdentity(DB, body) {
526
526
  const fp = body.fingerprint || null;
527
527
  if (!fp || !DB) return body;
528
528
 
529
- const existing = await DB.prepare(
529
+ const existing = await env.DB.prepare(
530
530
  'SELECT * FROM identity_graph WHERE fingerprint = ?'
531
531
  ).bind(fp).first();
532
532
 
@@ -541,7 +541,7 @@ async function syncIdentity(DB, body) {
541
541
  visit_count: (existing.visit_count || 1) + 1
542
542
  };
543
543
  } else {
544
- await DB.prepare(`
544
+ await env.DB.prepare(`
545
545
  INSERT OR IGNORE INTO identity_graph (fingerprint, fbp, fbc, ga_client_id, external_id, ttclid, first_utm)
546
546
  VALUES (?, ?, ?, ?, ?, ?, ?)
547
547
  `).bind(fp, body.fbp, body.fbc, body.ga_client_id, body.external_id, body.ttclid, JSON.stringify(body.utm || {})).run();
@@ -635,7 +635,7 @@ function buildCookieHeader(visitor, umbrellaDomain) {
635
635
  async function logBehavioralEvent(DB, body, visitor, engagementScore) {
636
636
  if (!DB) return;
637
637
 
638
- await DB.prepare(`
638
+ await env.DB.prepare(`
639
639
  INSERT OR REPLACE INTO behavioral_events (
640
640
  event_id, user_id, session_id,
641
641
  engagement_score, time_level, scroll_score, click_score, video_score, hover_score, intention_level,
@@ -972,7 +972,7 @@ CREATE INDEX IF NOT EXISTS idx_retry_scheduled ON retry_queue(scheduled_at, stat
972
972
  async function logEventSuccess(DB, platform, eventId) {
973
973
  if (!DB) return;
974
974
 
975
- await DB.prepare(`
975
+ await env.DB.prepare(`
976
976
  UPDATE events_log
977
977
  SET status = 'success',
978
978
  retry_count = 0,
@@ -988,7 +988,7 @@ async function logEventFailure(DB, platform, eventId, errorMessage, retryCount)
988
988
  const maxRetries = 3;
989
989
  const isFinalFailure = retryCount >= maxRetries;
990
990
 
991
- await DB.prepare(`
991
+ await env.DB.prepare(`
992
992
  UPDATE events_log
993
993
  SET status = ?,
994
994
  retry_count = ?,
@@ -2892,3 +2892,175 @@ async function sha256(data) {
2892
2892
  4. **SDK Site**: Inserir `cdpTrack.js` e `tracking.config.js` no site.
2893
2893
  5. **Event Mapping**: Configurar gatilhos de clique e formulário no site.
2894
2894
  6. **Webhooks**: Configurar o endpoint de webhook na plataforma de vendas (Ticto/Hotmart).
2895
+
2896
+ ---
2897
+
2898
+ ## 🤖 8. MELHORIA CONTÍNUA AUTOMÁTICA (FASE 5)
2899
+
2900
+ A Fase 5 fecha o ciclo de dados: cada evento coletado alimenta modelos e alertas que, automaticamente, melhoram a qualidade de atribuição na próxima semana — sem intervenção manual.
2901
+
2902
+ ---
2903
+
2904
+ ### 8.1 O Ciclo de Melhoria Contínua
2905
+
2906
+ ```
2907
+ Evento /track
2908
+
2909
+ ├─ match_quality_log (has_email, has_fbp, has_phone, has_fbc, was_email_recovered)
2910
+ │ │
2911
+ │ └─ Cron semanal analisa janela de 2h
2912
+ │ → email_rate < 40% → alerta CallMeBot
2913
+ │ → fbp_rate < 30% → alerta CallMeBot
2914
+ │ → composite_score < 45% → alerta CallMeBot
2915
+
2916
+ ├─ user_profiles (Identity Graph)
2917
+ │ │
2918
+ │ └─ Auto-Enrich: antes de cada dispatch Meta CAPI,
2919
+ │ Worker consulta user_profiles por userId
2920
+ │ → recupera email/fbp/fbc/phone ausentes
2921
+ │ → evento vai para Meta COM email → EMQ sobe
2922
+
2923
+ ├─ leads × purchases (D1)
2924
+ │ │
2925
+ │ └─ Cron semanal treina regressão logística
2926
+ │ → pesos gravados em ltv_model_weights (is_active=1)
2927
+ │ → cached em KV → próximo /track usa modelo treinado
2928
+ │ → fallback heurístico se modelo não disponível
2929
+
2930
+ └─ user_profiles (alta intenção) → Customer Match Export semanal
2931
+ → GET /export/customer-match → CSV para Google Ads
2932
+ → Meta Custom Audience auto-atualizada
2933
+ ```
2934
+
2935
+ ---
2936
+
2937
+ ### 8.2 Match Quality — Monitoramento Automático
2938
+
2939
+ Cada dispatch para a Meta CAPI registra na tabela `match_quality_log`:
2940
+
2941
+ | Campo | O que indica |
2942
+ |---|---|
2943
+ | `has_email` | Evento foi com email (principal fator de EMQ) |
2944
+ | `has_phone` | Evento foi com telefone |
2945
+ | `has_fbp` | Cookie _fbp presente (atribuição via pixel) |
2946
+ | `has_fbc` | Cookie _fbc presente (atribuição via clique em anúncio) |
2947
+ | `was_email_recovered` | Email recuperado via Identity Graph (Auto-Enrich) |
2948
+
2949
+ **Thresholds de alerta (cron semanal):**
2950
+
2951
+ | Métrica | Threshold de alerta | Impacto |
2952
+ |---|---|---|
2953
+ | `email_rate` | < 40% | Atribuição fraca — muitos eventos sem email |
2954
+ | `fbp_rate` | < 30% | Pixel sem rastrear adequadamente |
2955
+ | `composite_score` | < 45% | EMQ geral degradado |
2956
+
2957
+ A view `v_match_quality_24h` agrega os dados prontos para consulta instantânea:
2958
+
2959
+ ```sql
2960
+ SELECT * FROM v_match_quality_24h;
2961
+ -- Retorna: event_count, email_rate, phone_rate, fbp_rate, fbc_rate, composite_score
2962
+ ```
2963
+
2964
+ ---
2965
+
2966
+ ### 8.3 Identity Graph — Auto-Enrich Antes do Dispatch
2967
+
2968
+ Antes de cada dispatch para a Meta CAPI, o Worker consulta `user_profiles` usando o `userId` do evento. Se o evento chegou sem email ou sem fbp, mas o perfil do usuário tem esses dados de uma sessão anterior, eles são injetados automaticamente no payload.
2969
+
2970
+ **Resultado prático:**
2971
+ - Lead preencheu formulário na semana passada (email registrado no perfil)
2972
+ - Hoje clicou em anúncio e disparou `ViewContent` sem email
2973
+ - Worker recupera o email do perfil → evento vai para Meta COM email
2974
+ - Meta recebe o sinal com Advanced Matching completo → melhor atribuição
2975
+ - `was_email_recovered = 1` fica registrado em `match_quality_log`
2976
+
2977
+ Esse processo é transparente: o browser não precisa enviar nada a mais.
2978
+
2979
+ ---
2980
+
2981
+ ### 8.4 LTV Real — Modelo Treinado em Dados Reais
2982
+
2983
+ **Como funciona:**
2984
+
2985
+ 1. Cron semanal executa no Worker
2986
+ 2. Busca leads com `purchase = true/false` dos últimos 90 dias no D1
2987
+ 3. Treina regressão logística com as features disponíveis (ltv_score, behavior_score, engagement_score, utm_source, state)
2988
+ 4. Grava os pesos em `ltv_model_weights` com `is_active = 1`
2989
+ 5. Cacheia os pesos em KV para acesso em ~0ms
2990
+
2991
+ **Uso em runtime (cada `/track`):**
2992
+ - Worker verifica se há pesos ativos no KV
2993
+ - Se sim: usa o modelo treinado para prever LTV
2994
+ - Se não: fallback para heurística baseada em regras
2995
+ - Score 0-100 → classificação High/Medium/Low → valor estimado em BRL
2996
+
2997
+ **Tabela `ltv_model_weights`:**
2998
+
2999
+ | Campo | Descrição |
3000
+ |---|---|
3001
+ | `trained_at` | Timestamp do treinamento |
3002
+ | `is_active` | Apenas 1 registro ativo por vez |
3003
+ | `accuracy` | Acurácia do modelo no conjunto de teste (0-1) |
3004
+ | `weights_json` | Pesos serializados da regressão logística |
3005
+
3006
+ ---
3007
+
3008
+ ### 8.5 A/B LTV — Auto-Winner
3009
+
3010
+ Quando um experimento A/B de prompt LTV tem uma variação com acurácia ≥5pp acima do controle:
3011
+
3012
+ 1. O Worker declara o vencedor automaticamente via `POST /api/ltv/ab-test/winner`
3013
+ 2. O prompt vencedor é ativado para todos os novos eventos
3014
+ 3. Um alerta WhatsApp é enviado informando qual variação ganhou e a diferença de acurácia
3015
+
3016
+ Isso elimina a necessidade de revisão manual de experimentos.
3017
+
3018
+ ---
3019
+
3020
+ ### 8.6 Customer Match — Sync Semanal
3021
+
3022
+ O cron semanal também exporta os perfis com `intention_level = 'high'` via `GET /export/customer-match`.
3023
+
3024
+ - Formato CSV compatível com Google Customer Match
3025
+ - Emails e telefones hashados (SHA-256) conforme exigido pelo Google
3026
+ - Pode ser automatizado para upload direto via Google Ads API
3027
+
3028
+ ---
3029
+
3030
+ ### 8.7 Como Cada Tabela Alimenta o Desempenho
3031
+
3032
+ | Tabela | Alimenta | Resultado |
3033
+ |---|---|---|
3034
+ | `match_quality_log` | Alerta de degradação de EMQ | Fix proativo antes do CPA subir |
3035
+ | `user_profiles` | Auto-Enrich no dispatch | Mais eventos com email → EMQ sobe |
3036
+ | `ltv_model_weights` | Score LTV real no /track | Bids mais inteligentes via bid_recommendations |
3037
+ | `ml_segments` + `bid_recommendations` | Bid por segmento × plataforma | ROAS por cluster |
3038
+ | `fraud_signals` | Tráfego limpo | Melhor atribuição Meta/Google |
3039
+ | `ltv_ab_assignments` | Experimentos de prompt | Prompt com maior acurácia vence automaticamente |
3040
+
3041
+ ---
3042
+
3043
+ ### 8.8 Endpoints para Consultar os Dados
3044
+
3045
+ | Endpoint | O que retorna |
3046
+ |---|---|
3047
+ | `GET /api/fraud/stats` | Dashboard de fraude nas últimas 24h |
3048
+ | `GET /api/segmentation/list` | Segmentos ML ativos com métricas |
3049
+ | `GET /api/bidding/status` | Recomendações de bid por segmento × plataforma |
3050
+ | `GET /api/ltv/ab-test/results` | Acurácia por variação + vencedor recomendado |
3051
+ | `GET /export/customer-match` | Export de leads high-intent para Google Ads |
3052
+
3053
+ ---
3054
+
3055
+ ### 8.9 Sequência Completa de Migrations D1 (incluindo Fase 5)
3056
+
3057
+ ```bash
3058
+ wrangler d1 execute cdp-edge-db --file=schema.sql --remote
3059
+ wrangler d1 execute cdp-edge-db --file=migrate-v6.sql --remote
3060
+ wrangler d1 execute cdp-edge-db --file=schema-segmentation.sql --remote
3061
+ wrangler d1 execute cdp-edge-db --file=schema-bidding.sql --remote
3062
+ wrangler d1 execute cdp-edge-db --file=schema-ab-ltv.sql --remote
3063
+ wrangler d1 execute cdp-edge-db --file=schema-fraud.sql --remote
3064
+ wrangler d1 execute cdp-edge-db --file=schema-indexes.sql --remote # Índices compostos de performance
3065
+ wrangler d1 execute cdp-edge-db --file=migrate-v7.sql --remote # Fase 5: ltv_model_weights + match_quality_log
3066
+ ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cdp-edge",
3
- "version": "2.0.3",
3
+ "version": "2.0.5",
4
4
  "description": "CDP Edge - Quantum Tracking - Sistema multi-agente para tracking digital Cloudflare Native (Workers + D1)",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -28,7 +28,12 @@
28
28
  "test:unit:hash": "node tests/unit/hashing.test.js",
29
29
  "test:unit:dedup": "node tests/unit/deduplication.test.js",
30
30
  "test:unit:payload": "node tests/unit/payload-validation.test.js",
31
- "test:all": "npm run test:unit"
31
+ "test:all": "npm run test:unit",
32
+ "test:integration": "cd tests/integration && npx vitest run",
33
+ "agents:check": "node scripts/validate-agents.js",
34
+ "agents:sync": "node scripts/sync-agents.js",
35
+ "agents:sync:list": "node scripts/sync-agents.js --list",
36
+ "agents:sync:all": "node scripts/sync-agents.js --apply-all"
32
37
  },
33
38
  "keywords": [
34
39
  "pixel",
@@ -77,15 +77,39 @@ pelo ID que você copiou. Salve o arquivo.
77
77
 
78
78
  ## PASSO 5 — Criar as tabelas no banco
79
79
 
80
+ Execute os arquivos de schema na ordem abaixo. Cada arquivo usa `IF NOT EXISTS` e é idempotente — pode ser executado mais de uma vez sem risco.
81
+
80
82
  ```bash
81
- wrangler d1 execute cdp-edge-db --file=schema.sql
83
+ # Core: tabelas principais (leads, user_profiles, events_log, identity_graph)
84
+ wrangler d1 execute cdp-edge-db --file=schema.sql --remote
85
+
86
+ # Migrations históricas (retry_queue, escalation_log, intelligence_logs)
87
+ wrangler d1 execute cdp-edge-db --file=migrate-v6.sql --remote
88
+
89
+ # Fase 1 — ML Clustering (ml_segments, ml_segment_members, views de segmentação)
90
+ wrangler d1 execute cdp-edge-db --file=schema-segmentation.sql --remote
91
+
92
+ # Fase 2 — Bidding ML (bid_recommendations, view v_active_bid_recs)
93
+ wrangler d1 execute cdp-edge-db --file=schema-bidding.sql --remote
94
+
95
+ # Fase 3 — A/B LTV Testing (ltv_ab_tests, ltv_ab_variations, ltv_ab_assignments)
96
+ wrangler d1 execute cdp-edge-db --file=schema-ab-ltv.sql --remote
97
+
98
+ # Fase 4 — Fraud Detection (fraud_signals, fraud_alerts, view v_fraud_dashboard)
99
+ wrangler d1 execute cdp-edge-db --file=schema-fraud.sql --remote
100
+
101
+ # Índices compostos de performance para queries D1 (todas as fases)
102
+ wrangler d1 execute cdp-edge-db --file=schema-indexes.sql --remote
103
+
104
+ # Fase 5 — LTV Real + Match Quality (ltv_model_weights, match_quality_log, view v_match_quality_24h)
105
+ wrangler d1 execute cdp-edge-db --file=migrate-v7.sql --remote
82
106
  ```
83
107
 
84
- > Resultado esperado: "✅ Successfully executed SQL"
108
+ > Resultado esperado para cada arquivo: "✅ Successfully executed SQL"
85
109
 
86
110
  Verificar se as tabelas foram criadas:
87
111
  ```bash
88
- wrangler d1 execute cdp-edge-db --command="SELECT name FROM sqlite_master WHERE type='table';"
112
+ wrangler d1 execute cdp-edge-db --remote --command="SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;"
89
113
  ```
90
114
 
91
115
  ---
@@ -442,3 +442,72 @@ const segmentedCampaigns = [
442
442
 
443
443
  *API de Segmentação Dinâmica ML v1.0 — CDP Edge*
444
444
  *Data: 9 de Abril de 2026*
445
+
446
+ ---
447
+
448
+ ## Integração com LTV Real e Match Quality (Fase 5)
449
+
450
+ ### Como ml_segments alimenta o modelo LTV
451
+
452
+ Os segmentos gerados pelo clustering não são apenas para campanhas — eles são features do modelo LTV treinado semanalmente.
453
+
454
+ Quando o cron semanal treina a regressão logística em `ltv_model_weights`, ele inclui o `cluster_id` do lead como feature. Isso significa:
455
+
456
+ - Leads do "Segmento Alto Valor + Alto Engajamento (SP)" têm peso positivo maior no modelo
457
+ - O modelo aprende quais segmentos historicamente convertem mais
458
+ - O LTV Score de cada novo `/track` já leva em conta o segmento do usuário
459
+
460
+ **Fluxo de dados:**
461
+
462
+ ```
463
+ ml_segment_members (cluster_id por lead)
464
+
465
+ └─ JOIN com leads × purchases
466
+
467
+ └─ Treino semanal da regressão logística
468
+
469
+ └─ ltv_model_weights (is_active=1)
470
+
471
+ └─ Score LTV em cada /track
472
+ ```
473
+
474
+ ### Como bid_recommendations se conecta ao LTV treinado
475
+
476
+ O `ltv_model_weights` ativo gera scores mais precisos, que alimentam diretamente as recomendações de bid:
477
+
478
+ 1. LTV Score do segmento sobe (modelo mais preciso) → `avg_ltv` do segmento é recalculado
479
+ 2. Bidding Agent roda `POST /api/bidding/recommend` com o novo `avg_ltv`
480
+ 3. `bid_recommendations` é atualizado com bid recomendado para o segmento × plataforma
481
+ 4. Você aplica o bid sugerido em Meta/Google Ads
482
+
483
+ **Consulta útil — bid atual por segmento:**
484
+
485
+ ```bash
486
+ curl "https://seudominio.com/api/bidding/status"
487
+ # Retorna: bid recomendado atual por segmento × plataforma
488
+ ```
489
+
490
+ ### Como Match Quality afeta a qualidade dos segmentos
491
+
492
+ A tabela `match_quality_log` registra se cada evento que alimentou o D1 tinha email, fbp, etc. Eventos com `has_email = 0` têm Advanced Matching incompleto — a Meta pode não ter conseguido fazer o match com um usuário real.
493
+
494
+ Isso significa que `ml_segments` pode conter leads "fantasmas" (usuários que a Meta não reconheceu). Para garantir a qualidade dos segmentos:
495
+
496
+ 1. Monitore `v_match_quality_24h` para manter `email_rate > 40%`
497
+ 2. Se a taxa cair, o Auto-Enrich (Identity Graph) recupera emails de sessões anteriores automaticamente
498
+ 3. Leads com email recuperado (`was_email_recovered = 1`) são indistinguíveis dos outros no clustering — têm o mesmo peso
499
+
500
+ **Consulta de match quality:**
501
+
502
+ ```bash
503
+ curl "https://seudominio.com/api/fraud/stats"
504
+ # Inclui métricas de qualidade de sinal junto com dados de fraude
505
+ ```
506
+
507
+ ### Tabelas relacionadas (Fase 5)
508
+
509
+ | Tabela | Relação com segmentação |
510
+ |---|---|
511
+ | `ltv_model_weights` | Usa `cluster_id` como feature; melhora scores LTV por segmento |
512
+ | `match_quality_log` | Indica qualidade dos eventos que geraram os leads dos segmentos |
513
+ | `user_profiles` | Auto-Enrich recupera dados antes do dispatch → mais leads com email → melhor clustering |