Saltar a contenido

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_requests
  • business_observer.ecommerce_customer_request_audit
  • business_observer.ecommerce_notification_outbox
  • business_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_requests
  • CREATE TABLE IF NOT EXISTS business_observer.ecommerce_customer_request_audit
  • CREATE TABLE IF NOT EXISTS business_observer.ecommerce_notification_outbox
  • CREATE TABLE IF NOT EXISTS business_observer.ecommerce_notification_event_log
  • CREATE INDEX IF NOT EXISTS para indices operativos de requests/outbox
  • ALTER TABLE ... OWNER TO openclaw_bo_prod_owner
  • ALTER TABLE ... ENABLE ROW LEVEL SECURITY
  • GRANT USAGE sobre schema a roles prod reader/reporting/writer
  • GRANT SELECT, GRANT SELECT, INSERT, GRANT SELECT, INSERT, UPDATE y GRANT ALL PRIVILEGES acotados a esos cuatro objetos

No hubo INSERT, UPDATE, DELETE, TRUNCATE, seeds ni datos reales.

Objetos creados

  • business_observer.ecommerce_customer_requests
  • business_observer.ecommerce_customer_request_audit
  • business_observer.ecommerce_notification_outbox
  • business_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 0 en 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_log
  • DROP TABLE IF EXISTS business_observer.ecommerce_notification_outbox
  • DROP TABLE IF EXISTS business_observer.ecommerce_customer_request_audit
  • DROP 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.