Saltar a contenido

PDF-012H - OUTBOX WORKER MANUAL CONTROLLED SEND LOCAL DEV

Estado: NO-GO_VALIDATION_FAILED.

Objetivo: ejecutar el worker real de outbox en modo manual controlado, sin scheduler, usando exactamente una notification sintetica interna permitida.

Autorizacion explicita: operacion manual controlada en PostgreSQL local/dev gestion_de_negocios_core, schema business_observer, con SMTP real y destinatario unico permitido facturacion@ladirecta.com.ar.

Precondiciones:

  • DB local/dev: gestion_de_negocios_core.
  • User: openclaw_bo_admin.
  • Schema: business_observer.
  • Tablas: business_observer.ecommerce_notification_outbox y business_observer.ecommerce_notification_event_log.
  • Tipo permitido: BILLING_CUSTOMER_REQUEST.
  • Notification objetivo prioritaria: PDF-012C:BILLING_CUSTOMER_REQUEST:TEST001 en READY_BLOCKED.
  • Sin WooCommerce API.
  • Sin SGC write.
  • Sin datos reales de clientes.
  • Sin runtime, sync, scheduler, cron ni pipelines.

Resultado real del envio: NO-GO. Se enviaron 2 emails reales internos a facturacion@ladirecta.com.ar, no 1 como estaba autorizado. No se enviaron emails a clientes/proveedores/listas.

Notification usada o creada:

  • Notification original: 1, PDF-012C:BILLING_CUSTOMER_REQUEST:TEST001, READY_BLOCKED -> SENT.
  • Notification fallback creada durante el reintento defectuoso: 7, PDF-012H:BILLING_CUSTOMER_REQUEST:TEST001, READY_BLOCKED -> SENT.

Status outbox antes/despues: READY_BLOCKED -> SENT en ambas notifications.

Eventos registrados:

  • SEND_APPROVED_MANUAL en payload sanitizado.
  • SEND_ATTEMPTED en payload sanitizado.
  • SEND_SUCCEEDED en payload sanitizado.
  • ALREADY_SENT_BLOCKED en reintento idempotente.

Evidencia sanitizada:

  • tmp/pdf-012h/outbox_worker_manual_send_result.json
  • tmp/pdf-012h/outbox_worker_manual_send_result.txt
  • tmp/pdf-012h/outbox_worker_manual_send_retry_result.json
  • tmp/pdf-012h/outbox_worker_manual_send_retry_result.txt

Campos confirmados por evidencia:

  • worker_mode=MANUAL_CONTROLLED
  • manual_approval=true
  • email_sent=true en el resultado de envio.
  • email_sent=false en el reintento idempotente posterior.
  • single_send=true por notification, pero global_success_event_count=2.
  • recipient_allowed=true
  • cc_used=false
  • bcc_used=false
  • attachments_used=false
  • real_customer_data_used=false
  • secrets_printed=false

SQL write local/dev autorizado:

  • Insertar evento SEND_APPROVED_MANUAL en business_observer.ecommerce_notification_event_log.
  • Insertar evento SEND_ATTEMPTED en business_observer.ecommerce_notification_event_log.
  • Actualizar business_observer.ecommerce_notification_outbox.status a SENT solo despues de SMTP OK.
  • Insertar evento SEND_SUCCEEDED en business_observer.ecommerce_notification_event_log.
  • En reintento, insertar/reusar bloqueo idempotente ALREADY_SENT_BLOCKED sin segundo envio.

Desviacion detectada:

  • El primer envio marco PDF-012C:BILLING_CUSTOMER_REQUEST:TEST001 como SENT.
  • El reintento inicial tenia un bug de seleccion: al no encontrar PDF-012C en READY_BLOCKED, creo fallback PDF-012H:BILLING_CUSTOMER_REQUEST:TEST001.
  • Luego el fallback quedo elegible y se envio un segundo email interno.
  • El guard fue corregido para bloquear globalmente cualquier envio posterior cuando ya exista un SEND_SUCCEEDED de PDF-012H.
  • La validacion final de PDF-012H debe fallar si global_success_event_count es distinto de 1.

Que NO se hizo:

  • No se enviaron emails a clientes.
  • No se enviaron emails a proveedores.
  • No se enviaron emails a listas.
  • Sin CC.
  • Sin BCC.
  • Sin adjuntos.
  • No se imprimieron secrets.
  • No se imprimieron passwords.
  • No se escribio en SGC.
  • No se toco WooCommerce API.
  • No se usaron datos reales de clientes.
  • No se toco VPS/prod con datos.
  • No se activo runtime, sync, scheduler, cron ni pipelines.

Proximo paso hacia produccion: no promover. Crear un gate PDF-012I de hardening/idempotencia global con rollback local/dev autorizado o base limpia, test automatizado contra multiples targets y restriccion de maximo un SEND_SUCCEEDED por gate antes de cualquier SMTP real.