Saltar a contenido

SOURCE-003 Build Mart Execute Preflight 001

Fecha local: 2026-06-18

Estado: PASS / READ-ONLY PREFLIGHT / EXECUTE SIGUE BLOCKED

portal_visible = yes

Scope: tenant

tenant_id: alpuntodeventa

Owner: Gabi / Carlos Canu

1. Objetivo

Retomar SOURCE-003 y dejar auditado el siguiente paso previo a python scripts/source_003_importer.py build-mart --execute sin habilitar escrituras.

Alcance de esta tarea:

  • validar el estado SAFE POINT del repo
  • ejecutar validaciones del importer en modo permitido
  • auditar PostgreSQL local-dev solo con SELECT
  • confirmar filas RAW, CORE y MART
  • confirmar estimates actuales de build-mart
  • detectar constraints, indices y riesgos de duplicados por batch/grain antes de una escritura futura

Fuera de alcance:

  • INSERT, COPY, UPDATE, DELETE
  • build-mart --execute real con escritura
  • modificar RAW, CORE o MART
  • generar CSV
  • tocar La Directa, VPS WooCommerce, runtime O4, Docker, NPM, Portainer, push o deploy

2. Safe point

Control Valor
workspace C:\APV\openclawai
rama main
git status -sb inicial ## main...origin/main
git rev-parse HEAD inicial 8275d4fcd59befc97c253bb53d7877773e927596
HEAD / origin esperado 8275d4fcd59befc97c253bb53d7877773e927596
ultimo commit observado 8275d4f observability: close ladirecta phase 1 observability
decision SAFE POINT PASS

3. Validaciones del importer

Comando Resultado
python -m py_compile scripts/source_003_importer.py PASS
python scripts/source_003_importer.py --help PASS
python scripts/source_003_importer.py build-mart PASS; payload DRY_RUN
python scripts/source_003_importer.py build-mart --execute PASS; payload BLOCKED

Resumen runtime observado:

  • build-mart devuelve DRY_RUN
  • build-mart --execute devuelve BLOCKED
  • db_touched=true solo en DRY_RUN
  • db_write=false
  • sql_write=false
  • data_written=false
  • sync_enabled=false

4. Fingerprint DB y entorno auditado

Destino auditado con SELECT:

text database: openclaw_business_observer_dev schema: business_observer

Fingerprint confirmado:

text ::1/128:5432|openclaw_business_observer_dev|postgres|PostgreSQL 15.15, compiled by Visual C++ build 1944, 64-bit

Controles:

Control Observado Resultado
DB autorizada openclaw_business_observer_dev PASS
fingerprint aprobado coincide exacto con el importer PASS
postgres-sandbox no observado PASS
login impreso NO PASS
passwords/tokens impresos NO PASS

5. Estado runtime read-only

Tabla Row count Esperado Resultado
business_observer.raw_source_003_sales_items 1886 1886 PASS
business_observer.core_source_003_sales_items 1886 1886 PASS
business_observer.mart_source_003_sales_daily 0 0 PASS
business_observer.mart_source_003_sales_by_seller 0 0 PASS
business_observer.mart_source_003_sales_by_customer 0 0 PASS
business_observer.mart_source_003_sales_by_sku 0 0 PASS

Batch auditado:

text 1827f887-9499-4579-b4f3-234d54f41f7f

Controles adicionales:

  • CORE batches = 1
  • CORE batch rows = 1886
  • source_query_versions = 1
  • business_date_min = 2026-06-09
  • business_date_max = 2026-06-09

6. Estimates actuales de build-mart

MART target Estimate actual Esperado Resultado
mart_source_003_sales_daily 1 1 PASS
mart_source_003_sales_by_seller 25 25 PASS
mart_source_003_sales_by_customer 173 173 PASS
mart_source_003_sales_by_sku 180 180 PASS

Claves faltantes excluidas por el safe mode:

Control Observado Resultado
seller_missing 0 PASS
customer_missing 0 PASS
sku_missing 0 PASS

7. Constraints e indices MART relevantes

Constraints relevantes observados:

  • mart_source_003_sales_daily
  • PRIMARY KEY (id)
  • UNIQUE (tenant_id, sync_batch_id, source_query_version, business_date)
  • CHECK tenant_id = 'alpuntodeventa'
  • CHECK source_id = 'SOURCE-003'
  • CHECK btrim(source_query_version) <> ''
  • CHECK period_start <= period_end AND business_date BETWEEN period_start AND period_end
  • mart_source_003_sales_by_seller
  • PRIMARY KEY (id)
  • UNIQUE (tenant_id, sync_batch_id, source_query_version, period_key, seller_code)
  • CHECK btrim(seller_code) <> ''
  • CHECK quality_status IN ('candidate','approved','blocked')
  • mart_source_003_sales_by_customer
  • PRIMARY KEY (id)
  • UNIQUE (tenant_id, sync_batch_id, source_query_version, period_key, customer_code)
  • CHECK btrim(customer_code) <> ''
  • CHECK quality_status IN ('candidate','approved','blocked')
  • mart_source_003_sales_by_sku
  • PRIMARY KEY (id)
  • UNIQUE (tenant_id, sync_batch_id, source_query_version, period_key, sku)
  • CHECK btrim(sku) <> ''
  • CHECK quality_status IN ('candidate','approved','blocked')

Indices relevantes observados:

  • mart_source_003_sales_daily
  • mart_source_003_sales_daily_uk
  • mart_source_003_sales_daily_batch_idx
  • mart_source_003_sales_daily_build_idx
  • mart_source_003_sales_daily_period_idx
  • mart_source_003_sales_by_seller
  • mart_source_003_sales_by_seller_uk
  • mart_source_003_sales_by_seller_batch_idx
  • mart_source_003_sales_by_seller_period_idx
  • mart_source_003_sales_by_seller_code_idx
  • mart_source_003_sales_by_customer
  • mart_source_003_sales_by_customer_uk
  • mart_source_003_sales_by_customer_batch_idx
  • mart_source_003_sales_by_customer_period_idx
  • mart_source_003_sales_by_customer_code_idx
  • mart_source_003_sales_by_sku
  • mart_source_003_sales_by_sku_uk
  • mart_source_003_sales_by_sku_batch_idx
  • mart_source_003_sales_by_sku_period_idx
  • mart_source_003_sales_by_sku_code_idx

8. Riesgo de duplicados antes de escritura

Chequeos read-only ejecutados sobre el batch autorizado:

Control Observado Resultado
duplicate_daily_output_keys 0 PASS
duplicate_seller_output_keys 0 PASS
duplicate_customer_output_keys 0 PASS
duplicate_sku_output_keys 0 PASS
filas existentes en MART para el mismo batch 0 en las cuatro tablas PASS

Lectura operativa:

  • no hay conflicto actual por filas preexistentes del mismo batch en MART
  • no hay duplicados de salida contra el grain unico definido por las UNIQUE constraints actuales
  • la idempotencia real de build-mart --execute sigue sin implementarse en esta tarea porque el comando permanece BLOCKED

9. Riesgos vigentes para execute real

  • build-mart --execute sigue bloqueado por safe mode; no existe ruta de escritura habilitada en esta tarea
  • la futura ejecucion debe preservar el fingerprint aprobado y volver a validar ausencia de postgres-sandbox
  • la futura ejecucion debe abortar si alguna MART deja de estar en 0 filas para el batch/grain autorizado
  • la futura ejecucion debe mantener idempotencia explicita por batch y respetar las UNIQUE actuales
  • territory_key no debe interpretarse como vendedor responsable
  • CMV, costos y contribution_amount siguen con advertencia semantica para consumo productivo

10. Restricciones preservadas

No se ejecuto:

  • INSERT
  • COPY
  • UPDATE
  • DELETE
  • build-mart --execute real
  • cambios en RAW, CORE o MART
  • CSV
  • rollback
  • La Directa
  • VPS WooCommerce
  • runtime O4
  • Docker
  • NPM
  • Portainer
  • push
  • deploy

11. Conclusion

text SOURCE-003 BUILD-MART EXECUTE PREFLIGHT READ-ONLY PASS RAW = 1886 CORE = 1886 MART = 0 / 0 / 0 / 0 ESTIMATES = daily 1 / seller 25 / customer 173 / sku 180 BUILD-MART DEFAULT = DRY_RUN BUILD-MART --EXECUTE = BLOCKED

El sistema queda listo para una tarea separada de implementacion/control de escritura de build-mart --execute, pero esta evidencia no autoriza ejecutar escrituras ni modificar la DB.