PDF-010L - B2B DDL Execution Preflight¶
Estado: PREFLIGHT / SIN SQL WRITE / SIN EJECUCION DDL / SIN RUNTIME
Safe Point¶
PDF-010Kpublicado enorigin/main.- Commit publicado:
b93538b0e06afb6d951b4a419cbb087581001cdc. - Knowledge Portal desplegado y validado con HTTP
200. - Repo local limpio antes de iniciar
PDF-010L.
DDL Candidate Source¶
- DDL candidate:
infra/business-observer/production/b2b-pricing/PDF-010K/PDF-010K-B2B-PERSISTENCE-DDL-CANDIDATE.sql - Rollback candidate:
infra/business-observer/production/b2b-pricing/PDF-010K/PDF-010K-B2B-PERSISTENCE-ROLLBACK-CANDIDATE.sql - Ambos archivos son candidate. No ejecutar sin gate posterior y autorizacion explicita.
Preflight Read-Only¶
El preflight read-only debe confirmar, sin imprimir secretos:
- DB objetivo mediante
SELECT current_database(). - Schema
business_observer. - Roles esperados por
PDF-010K:business_observer_admin,business_observer_writer,business_observer_reader. - Aliases solicitados para compatibilidad del gate:
openclaw_bo_admin,openclaw_bo_writer,openclaw_bo_reader. - Ausencia o presencia controlada de objetos candidate:
business_observer.b2b_customer_mapping,business_observer.b2b_product_price,business_observer.b2b_pricing_decision_log,business_observer.v_b2b_customer_effective_price. - Permisos minimos esperados para reader/writer/admin sobre tablas y vista.
- Que no se imprimen passwords, DSN, tokens,
.envni connection strings.
Comando local seguro para validar solo la construccion estatica de consultas read-only:
powershell
python infra/business-observer/production/b2b-pricing/PDF-010L/check_b2b_ddl_preflight_read_only.py
Para revisar las consultas candidate sin conectarse a PostgreSQL:
powershell
python infra/business-observer/production/b2b-pricing/PDF-010L/check_b2b_ddl_preflight_read_only.py --print-sql
Backup / Restore Checklist¶
- Backup logico candidate antes del DDL:
pg_dumpen formato custom, ejecutado solo en gate posterior con credenciales disponibles por canal seguro. - Comando candidate sin secretos:
powershell
pg_dump --format=custom --file=<secure_backup_path> --schema=business_observer <database_name> # candidate gate posterior; no ejecutar en PDF-010L
- Ubicacion segura sugerida:
/opt/backups/openclaw/business-observer-prod/postgres/pre-pdf-010l-ddl/<UTC>/. - No ejecutar backup si requiere credenciales no disponibles o si obliga a imprimir secretos.
- Restore plan candidate sin ejecucion:
powershell
pg_restore --clean --if-exists --dbname=<database_name> <secure_backup_path> # candidate gate posterior; no ejecutar en PDF-010L
- El restore debe ensayarse o revisarse en un entorno autorizado antes de cualquier rollback real.
Rollback Plan¶
- Rollback candidate revisado:
PDF-010K-B2B-PERSISTENCE-ROLLBACK-CANDIDATE.sql. - Riesgos: perdida de tablas/vista B2B si ya contienen datos, invalidacion de dependencias futuras, necesidad de restaurar desde backup si hay drift.
- No ejecutar rollback en
PDF-010L. - El rollback solo se ejecutara con autorizacion explicita y evidencia de backup disponible.
Execution Safety Gate¶
- El DDL solo se ejecutara en un gate posterior con autorizacion explicita.
- Comando exacto candidate para ese gate posterior:
powershell
psql --set=ON_ERROR_STOP=1 --file=infra/business-observer/production/b2b-pricing/PDF-010K/PDF-010K-B2B-PERSISTENCE-DDL-CANDIDATE.sql <database_name> # candidate gate posterior; no ejecutar en PDF-010L
- El comando anterior es candidate. No ejecutarlo durante
PDF-010L. - Criterio operativo: si cualquier check queda incierto, el estado es NO-GO.
GO Criteria¶
- Repo limpio.
- Backup confirmado y ubicado en path seguro.
- Roles confirmados.
- Schema
business_observerconfirmado. - Validador
PDF-010KPASS. - Preflight read-only PASS.
mkdocs build --strictPASS.- Sin secretos impresos.
NO-GO Criteria¶
- Roles faltantes o inconsistentes.
- Schema faltante.
- Tablas candidate ya existen con drift.
- Backup no disponible.
- Rollback no validado.
- Secretos expuestos.
- Repo sucio.
- Cualquier necesidad de SQL write durante preflight.
Restricciones¶
PDF-010L mantiene no SQL write, no DDL execution, no WooCommerce API, no
.env, no secretos, no runtime WooCommerce, no sync, no scheduler, no cron y
no pipelines.