Saltar a contenido

PDF-010M - B2B PostgreSQL Real Read-Only Preflight

Fecha: 2026-06-23

Estado: PREFLIGHT REAL READ-ONLY / GO OPERATIVO / SIN DDL / SIN SQL WRITE / SIN RUNTIME

portal_visible = yes

Safe Point

  • HEAD esperado: 435bb76fcce32e04d060f5d9783f3bebe2fd945f.
  • origin/main esperado: 435bb76fcce32e04d060f5d9783f3bebe2fd945f.
  • Ultimo commit esperado: 435bb76 docs: add pdf-010l b2b ddl execution preflight.
  • Repo esperado: cambios pendientes de PDF-010M.
  • git diff --check: sin errores; solo warnings locales LF/CRLF en archivos documentales ya modificados.

Credenciales y Conexion

Credenciales seguras detectadas sin imprimir valores:

  • APV_DESTINATION_POSTGRES_HOST
  • APV_DESTINATION_POSTGRES_PORT
  • APV_DESTINATION_POSTGRES_DATABASE
  • APV_DESTINATION_POSTGRES_USER
  • APV_DESTINATION_POSTGRES_PASSWORD
  • APV_DESTINATION_POSTGRES_SSLMODE

El checker tambien acepta APV_DESTINATION_POSTGRES_DB y equivalentes PG*. Herramienta usada: Python con psycopg2. psql no estaba disponible en PATH, pero no fue necesario.

Resultado Preflight Read-Only

Resultado del checker: GO.

  • transaction_read_only: on
  • DB objetivo: gestion_de_negocios_core
  • usuario conectado: openclaw_writer
  • version PostgreSQL: PostgreSQL 15.15
  • ddl_executed=false
  • sql_write_executed=false
  • secrets_printed=false
  • dotenv_read=false en el checker; .env se cargo fuera del script solo en memoria de la sesion, sin imprimir valores y sin modificar el archivo.

Resultado Roles

Roles confirmados:

  • openclaw_bo_admin
  • openclaw_bo_writer
  • openclaw_bo_reader

Roles alias no presentes/no aplicables en este target:

  • business_observer_admin
  • business_observer_writer
  • business_observer_reader

Resultado Schema

  • business_observer: existe.

Resultado Objetos Existentes / No Existentes

Objetos B2B a confirmar por PDF-010K, todos ausentes antes de DDL:

  • business_observer.b2b_customer_mapping: no existe.
  • business_observer.b2b_product_price: no existe.
  • business_observer.b2b_pricing_decision_log: no existe.
  • business_observer.v_b2b_customer_effective_price: no existe.

Lectura operativa: ausencia esperada antes del gate DDL. No hay drift por objetos B2B preexistentes.

Resultado Permisos

Privilegios observados sobre schema:

  • openclaw_bo_admin: rol existe; USAGE=false; CREATE=false.
  • openclaw_bo_writer: rol existe; USAGE=false; CREATE=false.
  • openclaw_bo_reader: rol existe; USAGE=false; CREATE=false.
  • aliases business_observer_*: roles no presentes.

Privilegios sobre objetos B2B: sin filas, porque los objetos B2B todavia no existen.

Backup / Rollback Checklist

Backup logico candidate, sin secretos y no ejecutado:

powershell pg_dump --format=custom --file=<secure_backup_path> --schema=business_observer <database_name> # candidate gate posterior; no ejecutar en PDF-010M

Ubicacion segura sugerida:

text /opt/backups/openclaw/business-observer-prod/postgres/pre-pdf-010k-b2b-ddl/<UTC>/

Restore candidate, sin ejecutar:

powershell pg_restore --clean --if-exists --dbname=<database_name> <secure_backup_path> # candidate gate posterior; no ejecutar en PDF-010M

Rollback candidate:

  • infra/business-observer/production/b2b-pricing/PDF-010K/PDF-010K-B2B-PERSISTENCE-ROLLBACK-CANDIDATE.sql
  • no ejecutado en PDF-010M.
  • requiere backup valido, aprobacion explicita y gate separado.

GO / NO-GO

Estado de PDF-010M: GO.

El GO aplica solo al preflight real read-only. Ejecutar DDL, SQL write, creacion de tablas, grants, runtime WooCommerce, sync, scheduler, cron o pipelines sigue NO-GO hasta gate posterior separado.

Riesgos

  • El gate DDL posterior debe aplicar grants reales porque los objetos B2B aun no existen.
  • Ejecutar DDL sin backup logico validado complica rollback.
  • Los roles alias business_observer_* no existen en este target; si se requieren como compatibilidad, deben tratarse en el gate DDL posterior.

Proximo Paso

Abrir gate posterior separado para backup real pre-DDL y autorizacion explicita de ejecucion del DDL PDF-010K.

Cierre

No se ejecuto DDL, no se ejecuto SQL write, no se tocaron datos, no se toco WooCommerce API, no se modifico .env, no se imprimieron secretos, no se modifico runtime, no se ejecuto sync, scheduler, cron ni pipelines.