SOURCE-003 Promote Core Execute Gate Technical Review¶
Fecha local: 2026-06-15
Estado: TECHNICAL REVIEW PASS / EXECUTE GATE BLOCKED / SIN ESCRITURA CORE
portal_visible = yes
Scope: tenant
tenant_id: alpuntodeventa
Owner: Gabi / Carlos Canu
Fuente de verdad:
docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PROMOTE-CORE-EXECUTE-GATE-TECHNICAL-REVIEW.md
1. Objetivo¶
Revisar tecnicamente el gate implementado para:
powershell
python scripts/source_003_importer.py promote-core --execute
Esta revision no implementa escritura real, no ejecuta carga, no escribe en CORE, no modifica RAW, no ejecuta confirmaciones completas, no genera CSV, no ejecuta runner, no ejecuta rollback real y no toca VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy.
2. Safe point¶
| Control | Resultado |
|---|---|
| workspace | C:\APV\openclawai |
| rama | main |
git status --short --branch inicial |
## main...origin/main |
git rev-parse HEAD inicial |
dc606e262eccc389f30a3d11c719f28348f787eb |
git rev-parse origin/main inicial |
dc606e262eccc389f30a3d11c719f28348f787eb |
| ultimo commit inicial | dc606e2 tools: implement source 003 promote core execute gate |
| decision | SAFE POINT PASS |
3. Archivos revisados¶
| Archivo | Impacto de la revision |
|---|---|
scripts/source_003_importer.py |
Verifica constantes, parser, gate de confirmaciones, ruta promote-core, consultas read-only y ausencia de escritura CORE activa. |
docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PROMOTE-CORE-EXECUTE-GATE-IMPLEMENTATION-001.md |
Contrasta evidencia de implementacion del gate --execute. |
docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PROMOTE-CORE-LOCAL-DEV-EXECUTION-GATE.md |
Contrasta condiciones documentales para una futura ruta write local-dev. |
docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PROMOTE-CORE-SAFE-MODE-TECHNICAL-REVIEW.md |
Contrasta safe mode previo y precondiciones RAW/CORE. |
4. Hallazgos¶
| Check | Observado | Esperado | Resultado |
|---|---|---|---|
promote-core |
DRY_RUN |
DRY_RUN |
PASS |
promote-core --execute |
BLOCKED |
BLOCKED |
PASS |
| confirmaciones incompletas | BLOCKED con flags faltantes explicitos |
BLOCKED |
PASS |
ruta activa INSERT/COPY/UPDATE/DELETE en promote-core |
no existe | no existe | PASS |
| RAW source | business_observer.raw_source_003_sales_items |
RAW correcta | PASS |
| CORE target | business_observer.core_source_003_sales_items |
CORE correcta | 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 |
| fingerprint DB | requerido y aprobado en dry-run | obligatorio | PASS |
postgres-sandbox |
no observado; bloqueado por marcador si aparece | prohibido | PASS |
db_write |
false |
false |
PASS |
data_written |
false |
false |
PASS |
sync_enabled |
false |
false |
PASS |
Fingerprint DB observado en promote-core dry-run:
text
::1/128:5432|openclaw_business_observer_dev|postgres|PostgreSQL 15.15, compiled by Visual C++ build 1944, 64-bit
5. Evidencia tecnica¶
promote-core --execute entra primero en promote_core_safe_mode() y valida
validate_promote_core_execute_confirmations(args). La funcion siempre
retorna BLOCKED para --execute: si faltan confirmaciones, lista cada flag;
si todas coincidieran, agrega igualmente
promote-core --execute bloqueado: escritura CORE no implementada.
La rama --execute no llama a inspect_promote_core_db_read_only(), no llama a
run_psql_scalar(), no llama a run_psql_script() y no construye sentencia
SQL de escritura CORE. Su salida mantiene:
json
{
"db_touched": false,
"db_write": false,
"sql_executed": false,
"sql_write": false,
"data_written": false,
"sync_enabled": false
}
promote-core sin --execute ejecuta validate-prepared y consultas
SELECT read-only para fingerprint, tablas, conteos, columnas y duplicados. La
ruta observada queda como DRY_RUN, con DB tocada solo por lectura:
json
{
"result": "DRY_RUN",
"db_touched": true,
"db_write": false,
"sql_executed": true,
"sql_write": false,
"data_written": false,
"sync_enabled": false
}
La unica ruta activa con INSERT observada en el archivo corresponde a
load-raw, no a promote-core. No hay ruta activa de INSERT, COPY,
UPDATE ni DELETE para promover RAW a CORE.
6. Confirmaciones requeridas por el gate¶
El parser y el validador exigen para promote-core --execute:
powershell
--confirm-local-dev
--confirm-promote-core-local-dev
--confirm-target-database openclaw_business_observer_dev
--confirm-source-table business_observer.raw_source_003_sales_items
--confirm-target-table business_observer.core_source_003_sales_items
--confirm-batch 1827f887-9499-4579-b4f3-234d54f41f7f
--confirm-raw-row-count 1886
--confirm-core-empty
--confirm-core-initial-row-count 0
--confirm-candidate-rows 1886
--confirm-target-columns 66
--confirm-duplicates-core 0
--confirm-db-fingerprint "::1/128:5432|openclaw_business_observer_dev|postgres|PostgreSQL 15.15, compiled by Visual C++ build 1944, 64-bit"
No se ejecutaron confirmaciones completas en esta revision.
7. Validaciones ejecutadas¶
| Validacion | 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 promote-core |
PASS, DRY_RUN |
python scripts/source_003_importer.py promote-core --execute |
PASS, BLOCKED; el proceso devuelve codigo no cero esperado para bloqueo |
python scripts/source_003_importer.py promote-core --execute --confirm-local-dev |
PASS, BLOCKED; confirma bloqueo por confirmaciones incompletas |
Resultado clave de promote-core:
raw_batch_rows = 1886;core_row_count = 0;candidate_rows = 1886;target_columns = 66;duplicates_core = 0;db_write = false;data_written = false;sync_enabled = false.
Resultado clave de promote-core --execute:
result = BLOCKED;db_touched = false;db_write = false;sql_executed = false;sql_write = false;data_written = false;sync_enabled = false;confirmation_gate.status = BLOCKED;- errores claros del tipo
falta confirmacion explicita: --confirm-....
8. Riesgos y limites¶
promote-core --executeno implementa escritura CORE; solo disena y bloquea el gate de autorizacion.- Una futura ruta write local-dev requiere tarea separada para transformacion RAW -> CORE, idempotencia, transaccion, post-checks, rollback/rebuild y evidencia operativa.
- La revision valida ausencia de escritura en
promote-core; no revisa ni habilita la ruta write existente deload-raw. - Produccion sigue sin gate operativo, backup/restore, observabilidad, estrategia de rollback, controles de drift ni aprobacion de sync diaria.
9. Decision¶
text
APTO PARA DISEÑAR RUTA WRITE PROMOTE-CORE LOCAL-DEV
NO APTO PARA PRODUCCIÓN
NO APTO PARA SYNC DIARIA
El gate promote-core --execute queda tecnicamente validado como bloqueo
local-dev previo a una futura ruta write separada. No habilita carga CORE,
modificacion RAW, produccion, sync diaria, runner, rollback real, deploy ni
automatizacion operativa.