PDF-003 Staging DDL Preflight Read-Only¶
Fecha local: 2026-06-19
Estado: PREFLIGHT READ-ONLY COMPLETADO / NO-GO PARA PDF-004 / CERO CAMBIOS
portal_visible = yes
Scope: tenant
tenant_id: alpuntodeventa
Owner: Gabi / Carlos Canu
Fuente de verdad:
docs/tenants/alpuntodeventa/business-observer/production/PDF-003-STAGING-DDL-PREFLIGHT-READONLY.md
1. Objetivo¶
Ejecutar un preflight estrictamente read-only para determinar si el DDL
candidato de PDF-002 esta listo para una futura ejecucion en staging-vps.
Esta etapa no ejecuto DDL, no creo DB, no creo roles, no creo schema, no
creo tablas, no aplico grants, no escribio datos y no expuso secretos.
2. Safe point¶
| Control | Valor |
|---|---|
| workspace | C:\APV\openclawai |
| rama observada | main |
git status -sb inicial |
## main...origin/main |
HEAD/origin observado |
7838b1061b4c9f290a501eb6924b94507d2339d2 |
| ultimo commit observado | docs: prepare business observer staging ddl candidate |
git diff --check inicial |
PASS |
| decision | SAFE POINT PASS / READ-ONLY ONLY |
3. Acceso read-only usado¶
Acceso seguro observado y utilizado:
ssh -o BatchMode=yes openclaw-vps- inspeccion read-only de Docker y runtime
- consultas de catalogo via:
docker exec openclaw-postgres-sandbox psql -X -U openclaw_admin -d openclaw_sandbox
Reglas preservadas:
- no se imprimieron passwords ni secretos;
- no se editaron archivos del VPS;
- no se creo ni modifico ningun objeto PostgreSQL;
- las consultas SQL se ejecutaron con
SET default_transaction_read_only = on.
4. Contexto remoto observado¶
Identidad remota confirmada:
- host SSH:
srv977009 - usuario SSH:
root - tipo de acceso: alias
openclaw-vpsya documentado en el repo
Topologia PostgreSQL visible en runtime:
- contenedor PostgreSQL observable:
openclaw-postgres-sandbox - imagen:
postgres:16-alpine - estado:
Up ... (healthy) - red observable:
IP interna
172.24.0.3 PortBindings:{}
Conclusion de topologia:
- el unico PostgreSQL visible y accesible en esta auditoria es
openclaw-postgres-sandbox; - no hay evidencia de una instancia PostgreSQL separada y ya promovida como
stagingdelBusiness Observer; - el entorno observable sigue siendo
candidate-only / sandbox-visible.
5. Fingerprint observado¶
Fingerprint observable consolidado:
text
srv977009|openclaw-postgres-sandbox|172.24.0.3:5432|no-host-port-binding|openclaw_sandbox|openclaw_admin|PostgreSQL 16.14
Notas:
- la conexion observada fue por socket interno del contenedor;
- el endpoint no esta publicado al host;
- el fingerprint esperado por
PDF-002para una futurastagingno pudo validarse porque la DB target aun no existe.
6. Estado actual de DB, roles y schema¶
Databases objetivo¶
| Check | Resultado |
|---|---|
openclaw_business_observer_staging existe |
NO |
openclaw_business_observer_prod existe |
NO |
| DBs visibles del cluster observado | openclaw_sandbox, postgres, template0, template1 |
Schema objetivo¶
| Check | Resultado |
|---|---|
schema business_observer en openclaw_business_observer_staging |
N/A, la DB staging no existe |
schema business_observer en openclaw_sandbox |
NO |
Roles objetivo¶
| Rol | Existe |
|---|---|
openclaw_bo_staging_owner |
NO |
openclaw_bo_staging_writer |
NO |
openclaw_bo_staging_reader |
NO |
openclaw_bo_staging_reporting_ro |
NO |
Conflictos de naming¶
| Check | Resultado |
|---|---|
DBs con patron openclaw%business%observer% |
NINGUNA |
roles con patron openclaw%bo%staging% o openclaw%business%observer% |
NINGUNO |
7. Permisos observados¶
Permisos actuales relevantes¶
Observado en el cluster visible:
- no existen los roles objetivo, por lo tanto no existen grants reales para ellos;
- no existe la DB target, por lo tanto no existen grants reales sobre
openclaw_business_observer_staging; - no existe el schema target
business_observeren el cluster observado.
PUBLIC¶
Hallazgos read-only en el cluster visible:
| Objeto observable | Privilegios PUBLIC |
|---|---|
DB openclaw_sandbox |
CONNECT, TEMPORARY |
DB postgres |
CONNECT, TEMPORARY |
DB template0 |
CONNECT |
DB template1 |
CONNECT |
schema public de openclaw_sandbox |
USAGE |
Decision:
- para el objetivo de
PDF-002, esto no cumple la politica esperada dePUBLIC = none on target db/schema; - como la DB staging todavia no existe, el hallazgo se clasifica como
riesgo de defaults peligrosos si se ejecuta PDF-004 sin remediacion previa.
8. Extensiones observadas¶
Estado observado en el cluster visible:
| Check | Resultado |
|---|---|
| extensiones instaladas | plpgsql 1.0 |
pgcrypto disponible |
SI |
pgcrypto instalada |
NO |
uuid-ossp disponible |
SI |
uuid-ossp instalada |
NO |
Decision:
PDF-002no requiere extensiones;- no hay bloqueo por extensiones para el candidate documental;
- no existe aun una DB staging donde confirmar estado final de extensiones del target real.
9. Backups y restore drill¶
Estado documental observado:
- la politica de
backups + restore drillesta exigida enPRODUCTION-DATA-FOUNDATION-INTAKE-001.md; PDF-002exige backup previo y restore plan asociado antes dePDF-004;- no se encontro todavia un runbook/versionado especifico de
backup/restorepara la futura DBopenclaw_business_observer_staging; - no se encontro evidencia cerrada de restore drill especifico para esta futura DB de staging.
Decision:
backup/restorepara la etapaBusiness Observer staging-vpssigueAUSENTE / NO CERRADO;- este punto por si solo bloquea llamar
stagingal entorno operativo.
10. Readiness para PDF-004¶
Checklist minimo contra PDF-002:
| Gate | Estado |
|---|---|
| host remoto observable | PASS |
| PostgreSQL observable | PASS |
| fingerprint de target staging real | FAIL |
DB openclaw_business_observer_staging existente y validable |
FAIL |
DB openclaw_business_observer_prod separada |
PASS por ausencia, pero no desplegada |
schema business_observer target validable |
FAIL |
| roles staging reales validables | FAIL |
PUBLIC sin privilegios peligrosos en target |
FAIL / N-A target absent / defaults visibles no conformes |
| conflictos de naming | PASS |
extensiones requeridas para PDF-002 |
PASS, ninguna requerida |
| backup previo + restore plan/versionado especifico | FAIL |
entorno apto para llamarse staging |
FAIL |
11. Riesgos¶
- riesgo alto de ejecutar
PDF-004sobre un sandbox visible en vez de una DB staging formal; - riesgo de heredar privilegios por defecto de
PUBLICsi la futura DB/schema se crean sin endurecimiento previo o post-checks estrictos; - riesgo de confundir
sandboxconstagingpor compartir el mismo VPS; - riesgo de ejecutar DDL sin runbook especifico de backup/restore para la futura DB;
- riesgo de llamar
staginga un entorno que aun no tiene DB target, roles ni schema reales.
12. Dictamen¶
text
PDF-003 RESULT = PASS AS READ-ONLY PREFLIGHT
PDF-004 RESULT = NO-GO
CURRENT ENVIRONMENT = CANDIDATE-ONLY / SANDBOX-VISIBLE
STAGING DB = NOT PRESENT
STAGING ROLES = NOT PRESENT
TARGET SCHEMA = NOT PRESENT
ZERO CHANGES CONFIRMED
13. Checklist minimo antes de cualquier PDF-004¶
- confirmar y documentar si la futura
stagingva a vivir en este mismo VPS o en otra instancia PostgreSQL separada; - publicar el fingerprint esperado exacto del target real de
staging; - confirmar backup previo especifico de la futura DB target;
- publicar runbook/versionado de restore para esa futura DB;
- definir y validar endurecimiento de
PUBLICpara DB y schema target; - confirmar que el endpoint elegido no es
postgres-sandbox; - reejecutar un nuevo preflight read-only contra la DB target real ya creada o ya provisionada como staging.
14. Confirmacion de cero cambios¶
Confirmacion final:
DDL:NO EJECUTADOCREATE/ALTER/GRANT/REVOKE/DROP:NO EJECUTADOINSERT/UPDATE/DELETE/COPY/TRUNCATE:NO EJECUTADODocker/NPM/Portainer/runtime:NO MODIFICADOLa Directa / SGC / O4:NO TOCADO- resultado persistente remoto:
SIN CAMBIOS