Saltar a contenido

SOURCE-003 Promote Core Write Execution Technical Review

Fecha local: 2026-06-16

Estado: TECHNICAL REVIEW PASS / WRITE EXECUTION GATED / 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-WRITE-EXECUTION-TECHNICAL-REVIEW.md

1. Objetivo

Revisar tecnicamente el codigo preparado para escritura RAW -> CORE en:

powershell python scripts/source_003_importer.py promote-core python scripts/source_003_importer.py promote-core --execute

Esta revision no ejecuta confirmaciones completas, no escribe en CORE, no modifica RAW, no ejecuta INSERT, COPY, UPDATE ni DELETE real, no ejecuta rollback real, no genera CSV, no usa runner 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 3cf6a4d913cb6afb508fe90ad4de1d5f18247493
git rev-parse origin/main inicial 3cf6a4d913cb6afb508fe90ad4de1d5f18247493
ultimo commit inicial 3cf6a4d tools: implement source 003 promote core write execution
decision SAFE POINT PASS

3. Archivos revisados

Archivo Impacto de la revision
scripts/source_003_importer.py Verifica constantes, parser, gate promote-core, rama --execute, SQL transaccional preparado, controles de fingerprint y evidencia de seguridad.
docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PROMOTE-CORE-WRITE-IMPLEMENTATION-001.md Contrasta que la escritura real esta implementada, pero no ejecutada en la tarea de implementacion.
docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PROMOTE-CORE-WRITE-PATH-TECHNICAL-REVIEW.md Contrasta el review previo del write path preparado antes de la implementacion real.
docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PROMOTE-CORE-LOCAL-DEV-EXECUTION-GATE.md Contrasta requisitos de local-dev, fingerprint, transaccion, rollback/rebuild y post-checks.
docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-CORE-DDL-LOCAL-DEV-FORWARD-001.md Contrasta que CORE fue creada vacia con 66 columnas y row_count = 0.

4. Hallazgos

Check Observado Esperado Resultado
promote-core DRY_RUN DRY_RUN PASS
promote-core --execute BLOCKED, exit code real 3 BLOCKED PASS
promote-core --execute --confirm-local-dev BLOCKED, exit code real 3 BLOCKED por confirmaciones incompletas PASS
confirmaciones completas no ejecutadas no ejecutar en este review 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
write_path_enabled sin confirmaciones completas false false PASS
fingerprint obligatorio y aprobado en dry-run obligatorio PASS
postgres-sandbox no observado; bloqueado si aparece marcador prohibido PASS
no escritura accidental db_write=false, sql_write=false, data_written=false en dry-run y bloqueos parciales sin escritura PASS
no modificacion RAW sin DML contra RAW en comandos ejecutados RAW intacta PASS
rollback/transaccion documentados; rollback real no ejecutado documentados/no ejecutados PASS
post-check futuro CORE batch rows 1886 1886 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 sin --execute ejecuta validate-prepared y probes SELECT/read-only. La salida observada confirma:

json { "result": "DRY_RUN", "raw_batch_rows": 1886, "core_row_count": 0, "candidate_rows": 1886, "target_columns": 66, "duplicates_core": 0, "db_write": false, "sql_write": false, "data_written": false, "sync_enabled": false }

promote-core --execute y promote-core --execute --confirm-local-dev entran primero en validate_promote_core_execute_confirmations(args) y devuelven BLOCKED antes de cualquier contacto con DB:

json { "result": "BLOCKED", "db_touched": false, "db_write": false, "sql_executed": false, "sql_write": false, "data_written": false, "sync_enabled": false }

La ruta con confirmaciones completas no fue ejecutada. En codigo existe una ruta real build_promote_core_execute_script() que prepara una transaccion BEGIN/COMMIT con INSERT INTO business_observer.core_source_003_sales_items SELECT FROM business_observer.raw_source_003_sales_items. Esa ruta queda fuera del alcance de este review y solo debe ejecutarse en tarea separada con orden explicita.

6. Riesgos

  • Las confirmaciones completas habilitan escritura real en CORE; por eso no se probaron en este review.
  • El rollback productivo no esta habilitado; existe documentacion de rollback/rebuild, pero no ejecucion real aprobada.
  • La sync diaria sigue bloqueada: no hay ventana movil, drift controlado, observabilidad operativa ni aprobacion de produccion.
  • Produccion no queda cubierta por este gate local-dev.

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, exit code real 3
python scripts/source_003_importer.py promote-core --execute --confirm-local-dev PASS, BLOCKED, exit code real 3
git diff --check PASS
.venv-portal\Scripts\mkdocs.exe build --strict PASS

8. Conclusion

text APTO PARA EJECUTAR PROMOTE-CORE LOCAL-DEV EN TAREA SEPARADA NO APTO PARA PRODUCCION NO APTO PARA SYNC DIARIA

La base tecnica queda apta para una ejecucion local-dev separada y explicita porque el estado revisado conserva DRY_RUN por defecto, bloquea solicitudes --execute incompletas, valida RAW/CORE/fingerprint con probes read-only y mantiene data_written=false y sync_enabled=false durante este review.