SOURCE-003 Raw DDL Candidate Technical Review¶
Fecha local: 2026-06-15
Estado: REVISION TECNICA DOCUMENTAL / DDL RAW NO EJECUTADO
portal_visible = yes
Scope: tenant
tenant_id: alpuntodeventa
Owner: Gabi / Carlos Canu
Fuente de verdad:
docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-RAW-DDL-CANDIDATE-TECHNICAL-REVIEW.md
1. Objetivo¶
Revisar tecnicamente el paquete DDL RAW candidato de SOURCE-003 sin
ejecutarlo.
Archivos revisados:
SOURCE-003-RAW-DDL-CANDIDATE.mdsql/004_source_003_raw_ddl_candidate_preflight.sqlsql/004_source_003_raw_ddl_candidate_forward.sqlsql/004_source_003_raw_ddl_candidate_rollback.sqlsql/004_source_003_raw_ddl_candidate_post_checks.sqlSOURCE-003-RAW-LAYER-CONTRACT.mdSOURCE-003-IMPORTER-LOAD-RAW-PLAN.mdSOURCE-003-LOAD-RAW-TECHNICAL-REVIEW.md
Esta revision no ejecuto SQL, no uso psql, no toco PostgreSQL, no creo
tablas, no modifico Python, no ejecuto runner, no genero CSV, no toco
Docker, VPS, OpenClaw, NPM, push ni deploy.
2. Veredicto ejecutivo¶
text
APTO PARA EJECUCION LOCAL-DEV
NO APTO PARA PRODUCCION
NO APTO PARA IMPLEMENTAR LOAD-RAW TODAVIA
Lectura exacta:
APTO PARA EJECUCION LOCAL-DEVsignifica apto solo comoDDLcandidato para una futura tarea separada, con SAFE POINT nuevo, fingerprint DB, aprobacion humana explicita, ejecucion manual controlada y post-checks.NO APTO PARA PRODUCCIONporque no existe contrato productivo de entorno,RLS, particion/retencion, observabilidad, backup/restore productivo, dependenciascore/mart, operacion ni rollback por batch productivo.NO APTO PARA IMPLEMENTAR LOAD-RAW TODAVIAporque faltan precondiciones distintas de cero: elDDLno fue ejecutado ni validado en DB, no existe fingerprint de ejecucion aprobado, no existe staging fisico ni politica final de idempotencia para batch existente/inter-batch.
3. Hallazgos tecnicos¶
| Area | Resultado | Observacion |
|---|---|---|
| Tabla RAW candidata | OK |
business_observer.raw_source_003_sales_items separa correctamente la futura RAW de la tabla piloto. |
| Tabla piloto | OK |
business_observer.source_003_sales_items queda clasificada como PILOTO, no RAW final. |
| Metadata RAW obligatoria | OK |
Incluye tenant_id, source_system, source_object, source_query_version, source_row_hash, sync_batch_id, extracted_at, loaded_at y record_status. |
| Columnas prepared CSV | OK CON RIESGO |
El forward preserva las 83 columnas del prepared CSV y suma loaded_at, total fisico 84. Riesgo residual: divergencia futura header CSV vs DDL si no se congela manifest antes de carga. |
Clave tecnica id |
OK |
id uuid NOT NULL PRIMARY KEY; no se usa como identidad funcional. |
| Clave logica | OK |
UNIQUE (tenant_id, sync_batch_id, line_key) protege reintentos dentro del mismo batch. |
| Constraints | OK |
Cubre no vacios criticos, estado permitido, secuencia positiva, hora HHMMSS e identidad documental minima. |
| Indices | OK CON OBSERVACION |
Cubren batch, hash, fecha, cliente, vendedor, SKU, documento y estado. El indice tenant_id, sync_batch_id, line_key duplica en parte el indice creado por la constraint unique; no bloquea local-dev. |
| Ownership/grants | OK |
Owner openclaw_bo_admin, writer con SELECT/INSERT/UPDATE, reader con SELECT. |
PUBLIC sin privilegios |
OK |
Forward revoca schema y tabla; preflight/post-checks validan privilegios de schema/tabla. |
Writer sin DELETE |
OK |
DELETE, TRUNCATE, REFERENCES y TRIGGER quedan revocados para writer. |
| Preflight | OK |
Es solo lectura de catalogo, valida database esperada, schema, roles, tabla RAW ausente y PUBLIC sin privilegios sobre schema. |
| Forward | OK |
Crea tabla, constraints, indices, comments, owner y grants; no inserta datos. |
| Rollback | OK |
Aborta si la tabla existe y tiene filas; no usa TRUNCATE, no borra datos y no toca la tabla piloto. |
| Post-checks | OK |
Exigen tabla creada, owner, 84 columnas, constraints, indices, row_count exacto 0, grants y separacion del piloto. |
4. Riesgos detectados¶
Riesgos bloqueantes para produccion:
postgres-sandboxno puede interpretarse como produccion del Business Observer. La evidencia vigente solo permite leerlo como sandbox.- No hay contrato productivo de base, host, backup, restore, RLS, observabilidad, retencion, particion ni operacion diaria.
- No hay dependencias
core/martimplementadas ni reglas de reversa si la RAW se promociona a capas superiores.
Riesgos no bloqueantes para ejecucion local-dev controlada:
- La paridad CSV vs DDL depende de mantener congelado el header de
83columnas preparado. La RAW agregaloaded_at, por lo que cualquier futuroCOPYdebe mapear columnas explicitamente y no asumirSELECT *ni orden fisico completo. - La diferencia historica
82/83entre prepared validado y generated queda acotada aid; antes de cargar RAW debe quedar aceptada o revalidada la formula final deid. - La constraint unique protege
tenant_id + sync_batch_id + line_key, pero no impide que el mismoline_keyaparezca en batches distintos. Esto es correcto para RAW historizada, pero exige politica de promocion acore. tenant_id + sync_batch_id + source_row_hashesta documentada como clave de auditoria candidata, pero no se define como unique. Es aceptable para RAW local-dev, aunque debe decidirse antes de idempotencia productiva.- El indice explicito
tenant_id, sync_batch_id, line_keyes redundante con la unique constraint. No bloquea, pero puede revisarse si se busca menor costo fisico.
5. Precondiciones antes de ejecutar local-dev¶
Antes de cualquier ejecucion futura en openclaw_business_observer_dev:
- SAFE POINT nuevo con rama limpia, HEAD esperado y
origin/mainalineado. - Aprobacion humana explicita para ejecutar solo este paquete.
- Fingerprint DB esperado documentado y validado.
- Confirmar que el destino es
local-devo DB dedicada aprobada, nuncapostgres-sandboxcomo produccion. - Ejecutar primero preflight y exigir PASS antes de forward.
- Ejecutar post-checks despues del forward y exigir
row_count = 0. - Mantener bloqueado
load-rawaunque el DDL pase.
6. Conclusion¶
text
APTO PARA EJECUCION LOCAL-DEV
NO APTO PARA PRODUCCION
NO APTO PARA IMPLEMENTAR LOAD-RAW TODAVIA
El paquete DDL RAW candidato de SOURCE-003 es tecnicamente consistente
para una ejecucion local-dev futura y separada. La separacion con la tabla
piloto esta bien protegida, la metadata RAW obligatoria esta cubierta, las
claves y permisos son razonables, el rollback aborta ante filas y los
post-checks conservan row_count = 0.
Produccion y load-raw siguen bloqueados. La proxima tarea, si se aprueba,
debe ser una ejecucion local-dev del DDL bajo gate explicito, no una carga de
datos ni una implementacion del importer.