Saltar a contenido

SOURCE-003 Importer Promote Core Safe Mode 001

Fecha local: 2026-06-15

Estado: PROMOTE-CORE 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-PROMOTE-CORE-SAFE-MODE-001.md

1. Objetivo

Implementar el comando seguro:

text python scripts/source_003_importer.py promote-core

El comando queda en DRY_RUN por defecto. Valida RAW y CORE en local-dev con consultas read-only, pero no ejecuta INSERT, COPY, UPDATE, DELETE, no llama runner, no genera CSV, no carga datos y no habilita 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 e1a7fdfb771a72c82bbdc85e4c1c1469eec8dab0
git rev-parse origin/main inicial e1a7fdfb771a72c82bbdc85e4c1c1469eec8dab0
ultimo commit observado docs: record source 003 core ddl local dev forward
decision SAFE POINT PASS

3. Archivos modificados

Archivo Impacto
scripts/source_003_importer.py Agrega promote-core como safe command, valida fingerprint DB, RAW source y CORE target con SELECT, y bloquea --execute.
docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PYTHON-IMPORTER-SKELETON-001.md Actualiza el estado y documenta el comportamiento seguro de promote-core.
docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-IMPORTER-PROMOTE-CORE-SAFE-MODE-001.md Registra evidencia de implementacion y validacion.
mkdocs.yml Publica la evidencia nueva en la navegacion del portal.
docs/PROJECT-STATE.md, docs/governance/ACTIVE-CONTEXT.md, docs/ROADMAP.md Actualizan estado resumido del frente.

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

4. Comportamiento implementado

promote-core sin --execute:

  • ejecuta validate-prepared;
  • valida fingerprint DB aprobado;
  • prohibe postgres-sandbox;
  • valida RAW source: business_observer.raw_source_003_sales_items;
  • valida CORE target: business_observer.core_source_003_sales_items;
  • valida batch: 1827f887-9499-4579-b4f3-234d54f41f7f;
  • valida RAW batch rows = 1886;
  • valida CORE row_count = 0;
  • valida candidate_rows = 1886;
  • valida target_columns = 66;
  • valida duplicates CORE = 0;
  • emite DRY_RUN;
  • preserva db_write=false, sql_write=false, data_written=false, sync_enabled=false.

promote-core --execute:

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

5. Resultado promote-core

Comando:

powershell python scripts/source_003_importer.py promote-core

Resultado observado:

json { "command": "promote-core", "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", "raw_batch_rows": 1886, "core_row_count": 0, "candidate_rows": 1886, "target_columns": 66, "duplicates_core": 0, "raw_source_table": "business_observer.raw_source_003_sales_items", "core_target_table": "business_observer.core_source_003_sales_items" }

Detalle DB 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
RAW source business_observer.raw_source_003_sales_items existe PASS
CORE target business_observer.core_source_003_sales_items existe PASS
RAW batch rows 1886 1886 PASS
CORE row_count 0 0 PASS
candidate_rows 1886 1886 PASS
target_columns 66 66 PASS
duplicates CORE 0 0 PASS
postgres-sandbox false prohibido 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 promote-core --execute

Resultado observado:

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

7. Bloqueos preservados

Siguen bloqueados:

  • INSERT;
  • COPY;
  • UPDATE;
  • DELETE;
  • runner;
  • generacion de CSV;
  • modificacion de RAW;
  • carga de datos en CORE;
  • 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 promote-core python scripts/source_003_importer.py promote-core --execute git diff --check .venv-portal\Scripts\mkdocs.exe build --strict

9. Decision

text PROMOTE-CORE SAFE MODE IMPLEMENTADO / DRY-RUN PASS / SIN CARGA

El importer SOURCE-003 queda con promote-core implementado como modo seguro. El dry-run valida artefactos, batch, fingerprint DB, RAW source y CORE target vacio, pero no habilita escritura, carga real, runner, CSV ni sync.