PDF-012E - Outbox Worker Dry-Run Local Dev¶
Objetivo¶
PDF-012E crea y ejecuta en local/dev un worker dry-run que lee una
notification outbox READY_BLOCKED, evalua si podria enviarse, confirma que
esta bloqueada por defecto y registra una decision segura sin enviar email.
Precondiciones¶
- DB local/dev:
gestion_de_negocios_core. - Usuario:
openclaw_bo_admin. - Schema:
business_observer. - Tablas:
business_observer.ecommerce_customer_requests,business_observer.ecommerce_customer_request_audit,business_observer.ecommerce_notification_outboxybusiness_observer.ecommerce_notification_event_log. - Notification:
PDF-012D:BILLING_CUSTOMER_REQUEST:TEST001. - Estado:
READY_BLOCKED. - Recipient:
facturacion@ladirecta.com.ar. - Bloqueo:
send_blocked_by_default=true.
Worker dry-run¶
El worker corre solo como script local/dev:
execute_pdf_012e_outbox_worker_dry_run.py.
Evalua recipient permitido, idempotencia, rate-limit conceptual, status elegible y bloqueo por defecto. No queda worker real persistente ni scheduler.
Notification evaluada¶
idempotency_key=PDF-012D:BILLING_CUSTOMER_REQUEST:TEST001.notification_type=BILLING_CUSTOMER_REQUEST.recipient_email=facturacion@ladirecta.com.ar.status=READY_BLOCKED.send_blocked_by_default=true.
Decision¶
worker_mode=DRY_RUN.worker_decision=SEND_ELIGIBLE_BUT_BLOCKED.target_status=READY_BLOCKED.email_sent=false.smtp_send_commands_executed=false.
La decision se guarda en
business_observer.ecommerce_notification_event_log con
event_type=SEND_BLOCKED, event_status=BLOCKED y
event_payload_sanitized.semantic_event=WORKER_DRY_RUN_EVALUATED.
Idempotencia¶
El script se reejecuta para simular reintento. La decision no se duplica:
queda como maximo un evento activo por notification, source PDF-012E y
semantic_event=WORKER_DRY_RUN_EVALUATED.
Rate-limit y bloqueo¶
El gate confirma:
- recipient permitido;
send_blocked_by_default=true;- no envio si el status no es elegible;
- no envio si el recipient no es permitido;
- no envio si la decision dry-run ya existe.
SQL write local/dev exacto¶
SQL write autorizado y ejecutado:
INSERTidempotente enbusiness_observer.ecommerce_notification_event_log.
No se actualizo status de outbox. La notification sigue READY_BLOCKED.
Que NO se hizo¶
No se enviaron emails reales. No se ejecuto --confirm-send. No se ejecuto
MAIL FROM, RCPT TO ni DATA. No se conecto SMTP para envio. No se toco
WooCommerce API. No se escribio en SGC. No se usaron datos reales. No se
imprimieron secrets/passwords. No se toco VPS/prod con datos. No se activo
runtime, sync, scheduler, cron ni pipelines.
Proximo paso hacia produccion¶
El proximo gate recomendado es PDF-012F: envio real controlado desde outbox,
con autorizacion explicita, single-send, evidencia SMTP sanitizada,
idempotencia persistente y rollback operativo.