Saltar a contenido

SOURCE-003 Importer Load Raw Safe Mode 001

Fecha local: 2026-06-15

Estado: LOAD-RAW SAFE MODE IMPLEMENTADO / DRY-RUN PASS / SIN CARGA

portal_visible = yes

Scope: tenant

tenant_id: alpuntodeventa

Owner: Gabi / Carlos Canu

Fuente de verdad: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-IMPORTER-LOAD-RAW-SAFE-MODE-001.md

1. Objetivo

Implementar el comando seguro:

text python scripts/source_003_importer.py load-raw

El comando queda implementado como plan/dry-run por defecto. No carga datos, no ejecuta INSERT, COPY, UPDATE, DELETE, rollback, runner, generacion de CSV ni sync.

2. Safe point

Control Resultado
workspace C:\APV\openclawai
rama main
git status --short --branch inicial ## main...origin/main
git rev-parse HEAD inicial 20d4028dd46416331dd47fbcf9410f7262289004
git rev-parse origin/main inicial 20d4028dd46416331dd47fbcf9410f7262289004
ultimo commit observado docs: record source 003 raw ddl local dev forward
decision SAFE POINT PASS

3. Archivos modificados

Archivo Impacto
scripts/source_003_importer.py Agrega load-raw como dry-run seguro, valida prepared, fingerprint DB y tabla RAW con consultas read-only, y bloquea --execute.
docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PYTHON-IMPORTER-SKELETON-001.md Actualiza el estado del importer y documenta el comportamiento seguro de load-raw.
docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-IMPORTER-LOAD-RAW-SAFE-MODE-001.md Registra evidencia de implementacion y validacion.
mkdocs.yml Publica la evidencia nueva en la navegacion del portal.

No se modifico DDL, no se genero CSV nuevo y no se tocaron datos.

4. Comportamiento implementado

load-raw sin --execute:

  • ejecuta validate-prepared;
  • valida prepared CSV historico existente;
  • valida generated CSV existente;
  • valida batch esperado: 1827f887-9499-4579-b4f3-234d54f41f7f;
  • valida 1886 filas candidatas;
  • consulta DB local-dev solo con SELECT;
  • valida fingerprint DB aprobado;
  • valida tabla RAW: business_observer.raw_source_003_sales_items;
  • valida row_count RAW = 0;
  • valida 84 columnas destino RAW;
  • emite DRY_RUN;
  • preserva db_write=false, sql_write=false, data_written=false, sync_enabled=false.

load-raw --execute:

  • queda BLOCKED;
  • no toca DB;
  • no ejecuta SQL;
  • no llama al runner;
  • no carga datos.

5. Resultado load-raw

Comando:

powershell python scripts/source_003_importer.py load-raw

Resultado observado:

json { "command": "load-raw", "result": "DRY_RUN", "db_touched": true, "db_write": false, "sql_executed": true, "sql_write": false, "data_written": false, "sync_enabled": false, "sync_batch_id": "1827f887-9499-4579-b4f3-234d54f41f7f", "candidate_rows": 1886, "expected_destination_columns": 84, "target_database": "openclaw_business_observer_dev", "target_table": "business_observer.raw_source_003_sales_items" }

Detalle RAW validado:

Check Observado Esperado Resultado
fingerprint DB ::1/128:5432|openclaw_business_observer_dev|postgres|PostgreSQL 15.15, compiled by Visual C++ build 1944, 64-bit fingerprint aprobado PASS
database openclaw_business_observer_dev openclaw_business_observer_dev PASS
tabla RAW existe true true PASS
row_count RAW 0 0 PASS
columnas destino RAW 84 84 PASS

Nota: sql_executed=true corresponde exclusivamente a consultas SELECT read-only de fingerprint, catalogo y conteo. sql_write=false confirma que no se ejecuto SQL de escritura.

6. Resultado execute bloqueado

Comando:

powershell python scripts/source_003_importer.py load-raw --execute

Resultado observado:

json { "command": "load-raw", "result": "BLOCKED", "db_touched": false, "db_write": false, "sql_executed": false, "sql_write": false, "data_written": false, "sync_enabled": false }

Gate futuro requerido antes de cualquier escritura:

  • aprobacion humana explicita para escritura;
  • fingerprint DB confirmado por argumento;
  • batch confirmado por argumento;
  • target table confirmado por argumento;
  • hashes de CSV confirmados por argumento;
  • politica de idempotencia aprobada;
  • rollback por batch aprobado en tarea separada.

7. Bloqueos preservados

Siguen bloqueados:

  • INSERT;
  • COPY;
  • UPDATE;
  • DELETE;
  • rollback;
  • runner;
  • generacion de CSV nuevo;
  • modificacion de DDL;
  • carga de datos;
  • sync diaria;
  • postgres-sandbox;
  • VPS;
  • Docker;
  • OpenClaw;
  • NPM;
  • Portainer;
  • push;
  • deploy.

8. Validaciones ejecutadas

text python -m py_compile scripts/source_003_importer.py python scripts/source_003_importer.py --help python scripts/source_003_importer.py validate-prepared python scripts/source_003_importer.py load-raw python scripts/source_003_importer.py load-raw --execute python scripts/source_003_importer.py dry-run git diff --check .venv-portal\Scripts\mkdocs.exe build --strict

9. Decision

text LOAD-RAW SAFE MODE IMPLEMENTADO / DRY-RUN PASS / SIN CARGA

El importer SOURCE-003 queda con load-raw implementado como modo seguro. El dry-run valida artefactos, batch, fingerprint DB y tabla RAW vacia, pero no habilita escritura, carga real, runner, rollback ni sync.