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.