Saltar a contenido

PDF-010P - B2B DDL Retry Candidate

Fecha: 2026-06-23

Estado: CANDIDATE LOCAL / SIN SQL WRITE / SIN EJECUCION DDL / SIN PUSH

A. Causa del NO-GO de PDF-010N

PDF-010N intento ejecutar el DDL candidate PDF-010K con ON_ERROR_STOP=1 y transaccion unica despues de un backup real. PostgreSQL rechazo el primer statement por permission denied for database gestion_de_negocios_core.

Resultado operativo:

  • no se crearon tablas B2B;
  • no se creo la vista B2B;
  • no se aplicaron grants;
  • no se aplico RLS;
  • no se ejecuto rollback candidate.

B. Hallazgos de PDF-010O

El preflight read-only PDF-010O confirmo:

  • DB gestion_de_negocios_core;
  • schema business_observer existente;
  • DB/schema propiedad de postgres;
  • usuario observado openclaw_writer sin CREATE sobre DB ni schema;
  • roles reales existentes: openclaw_bo_admin, openclaw_bo_writer, openclaw_bo_reader;
  • roles business_observer_* ausentes;
  • objetos B2B ausentes antes del retry.

C. Decision de roles

PDF-010P usa los roles reales:

  • openclaw_bo_admin;
  • openclaw_bo_writer;
  • openclaw_bo_reader.

No usa roles business_observer_* porque no existen en el target observado. Crear aliases nuevos agregaria una decision operativa innecesaria para este retry; la opcion simple y robusta es adaptar el DDL a la realidad actual.

D. Que cambio respecto de PDF-010K

  • Se elimina la dependencia de CREATE SCHEMA IF NOT EXISTS.
  • El schema business_observer se trata como preexistente.
  • Los grants cambian de business_observer_* a openclaw_bo_*.
  • Los objetos B2B se mantienen: business_observer.b2b_customer_mapping, business_observer.b2b_product_price, business_observer.b2b_pricing_decision_log y business_observer.v_b2b_customer_effective_price.
  • Se mantienen checks, constraints, RLS candidate e indices unique parciales.
  • El rollback queda alineado a los mismos roles y objetos.

E. Seguridad comercial

El candidate no expone costos, proveedor, margenes ni secretos a WooCommerce. La vista publica solo el precio efectivo B2B necesario para runtime controlado.

F. Que NO se ejecuto

No se ejecuto SQL write.

No se ejecuto DDL, no se crearon tablas, no se crearon roles, no se cambiaron permisos reales, no se tocaron datos, no se toco WooCommerce API, .env, secretos, runtime, sync, scheduler, cron ni pipelines.

G. GO/NO-GO para ejecucion posterior

Estado actual: NO-GO PARA EJECUCION.

Motivo: este documento solo prepara el paquete corregido. La ejecucion real requiere un gate separado.

Condiciones minimas de GO posterior:

  • safe point limpio;
  • backup nuevo pre-DDL;
  • revalidacion read-only de DB/schema/roles/objetos;
  • autorizacion explicita SQL write;
  • usuario ejecutor admin/owner aprobado;
  • plan de rollback confirmado.

H. Archivos del paquete

  • infra/business-observer/production/b2b-pricing/PDF-010P/PDF-010P-B2B-PERSISTENCE-DDL-RETRY-CANDIDATE.sql
  • infra/business-observer/production/b2b-pricing/PDF-010P/PDF-010P-B2B-PERSISTENCE-ROLLBACK-RETRY-CANDIDATE.sql
  • infra/business-observer/production/b2b-pricing/PDF-010P/validate_pdf_010p_ddl_retry_candidate.py
  • infra/business-observer/production/b2b-pricing/PDF-010P/README.md

I. Proximo paso recomendado

Abrir un gate nuevo con backup nuevo y ejecucion DDL corregida, solo con autorizacion explicita para SQL write.