PDF-012M - Prod DDL promotion¶
Fecha: 2026-06-25
Objetivo¶
Crear en VPS/prod los cuatro objetos requests/outbox ausentes detectados por PDF-012L, sin activar envios, runtime, scheduler, WooCommerce ni SGC.
Safe point¶
- HEAD base publicado de PDF-012L:
7ce6997f99c9004c94fc75ffe22ae29352d3734f. - Rama local/origin/VPS alineada antes de PDF-012M.
- Knowledge Portal PDF-012L desplegado y validado por HTTP
200.
Resultado PDF-012L¶
PDF-012L dejo OBJECT_DRIFT_DETECTED / NO-GO: local/dev tenia los cuatro
objetos requeridos y VPS/prod tenia schema business_observer, owner
openclaw_bo_prod_owner, roles y secrets esperados, pero no tenia:
business_observer.ecommerce_customer_requestsbusiness_observer.ecommerce_customer_request_auditbusiness_observer.ecommerce_notification_outboxbusiness_observer.ecommerce_notification_event_log
Snapshot y backup¶
No se pudo verificar snapshot de proveedor desde Codex, por eso queda
PENDING_SNAPSHOT_NOT_PROVIDER_VERIFIABLE.
La estrategia de rollback aceptada para este gate fue:
- backup PostgreSQL schema-only remoto en
/opt/openclawai/backups/PDF-012M/; - rollback candidate acotado a los cuatro objetos creados;
- DDL en transaccion unica con
ON_ERROR_STOP=1.
La evidencia exacta de path, tamano y timestamp queda en:
tmp/pdf-012m/prod_ddl_promotion.json.
DDL ejecutado¶
Archivo candidate:
infra/business-observer/production/b2b-pricing/PDF-012M/PDF-012M-PROD-DDL-CANDIDATE.sql.
SQL write/DDL VPS/prod ejecutado:
CREATE TABLE IF NOT EXISTS business_observer.ecommerce_customer_requestsCREATE TABLE IF NOT EXISTS business_observer.ecommerce_customer_request_auditCREATE TABLE IF NOT EXISTS business_observer.ecommerce_notification_outboxCREATE TABLE IF NOT EXISTS business_observer.ecommerce_notification_event_logCREATE INDEX IF NOT EXISTSpara indices operativos de requests/outboxALTER TABLE ... OWNER TO openclaw_bo_prod_ownerALTER TABLE ... ENABLE ROW LEVEL SECURITYGRANT USAGEsobre schema a roles prod reader/reporting/writerGRANT SELECT,GRANT SELECT, INSERT,GRANT SELECT, INSERT, UPDATEyGRANT ALL PRIVILEGESacotados a esos cuatro objetos
No hubo INSERT, UPDATE, DELETE, TRUNCATE, seeds ni datos reales.
Objetos creados¶
business_observer.ecommerce_customer_requestsbusiness_observer.ecommerce_customer_request_auditbusiness_observer.ecommerce_notification_outboxbusiness_observer.ecommerce_notification_event_log
Post-checks¶
El post-check read-only valida:
- DB
openclaw_business_observer_prod; - user
openclaw_bo_prod_owner; - cuatro objetos presentes;
- owner esperado;
- RLS habilitado;
- constraints e indices esperados;
- grants a roles prod;
- conteos exactos
0en las cuatro tablas.
Que no se hizo¶
no se enviaron emails reales, no se conecto SMTP para envio, no se imprimieron secrets/passwords/connection strings, no se inserto datos reales, no se escribio en SGC, no se toco WooCommerce API y no se activo worker, runtime, sync, scheduler, cron ni pipelines.
Riesgos¶
- Snapshot de proveedor no verificable desde esta sesion; queda documentado como pendiente externo.
- El rollback candidate elimina los cuatro objetos vacios creados por PDF-012M; requiere autorizacion separada antes de ejecutarse.
- El worker y scheduler siguen bloqueados hasta un gate posterior.
Rollback candidate¶
Archivo:
infra/business-observer/production/b2b-pricing/PDF-012M/PDF-012M-PROD-DDL-ROLLBACK-CANDIDATE.sql.
Alcance del rollback candidate:
DROP TABLE IF EXISTS business_observer.ecommerce_notification_event_logDROP TABLE IF EXISTS business_observer.ecommerce_notification_outboxDROP TABLE IF EXISTS business_observer.ecommerce_customer_request_auditDROP TABLE IF EXISTS business_observer.ecommerce_customer_requests
Proximo paso¶
Publicar PDF-012M y desplegar el Knowledge Portal solo con autorizacion posterior. Despues, abrir un gate separado para validacion de runtime productivo sin scheduler y sin envio real automatico.