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.