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
1886filas 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
84columnas 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.