SOURCE-003 Promote Core Safe Mode Technical Review¶
Fecha local: 2026-06-15
Estado: TECHNICAL REVIEW PASS / SAFE MODE VALIDADO / SIN ESCRITURA
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-SAFE-MODE-TECHNICAL-REVIEW.md
1. Objetivo¶
Revisar tecnicamente el safe mode de:
powershell
python scripts/source_003_importer.py promote-core
antes de preparar una ruta real RAW -> CORE en local-dev.
Esta revision no escribe en CORE, no modifica RAW, no ejecuta confirmaciones
de promote-core --execute, no carga datos, no modifica Python, no genera CSV,
no ejecuta 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 |
71a9995b50705d74a26c53e8408beec8454f1ec5 |
git rev-parse origin/main inicial |
71a9995b50705d74a26c53e8408beec8454f1ec5 |
| ultimo commit inicial | 71a9995 tools: add source 003 promote core safe mode |
| decision | SAFE POINT PASS |
3. Archivos revisados¶
| Archivo | Impacto de la revision |
|---|---|
scripts/source_003_importer.py |
Verifica comportamiento real de promote-core, guards de DB, fingerprint, RAW/CORE y bloqueo de escritura. |
docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-IMPORTER-PROMOTE-CORE-SAFE-MODE-001.md |
Contrasta evidencia de implementacion safe mode y resultados esperados. |
docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-IMPORTER-PROMOTE-CORE-PLAN.md |
Contrasta plan documental RAW -> CORE y precondiciones. |
docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-CORE-DDL-LOCAL-DEV-FORWARD-001.md |
Confirma CORE target creada vacia en local-dev con 66 columnas. |
docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-LOAD-RAW-LOCAL-DEV-POST-EXECUTION-REVIEW.md |
Confirma RAW local-dev con batch autorizado de 1886 filas. |
4. Hallazgos¶
| Check | Observado | Esperado | Resultado |
|---|---|---|---|
promote-core |
DRY_RUN |
DRY_RUN |
PASS |
promote-core --execute |
BLOCKED |
BLOCKED |
PASS |
| RAW source | business_observer.raw_source_003_sales_items |
tabla RAW correcta | PASS |
| CORE target | business_observer.core_source_003_sales_items |
tabla 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 | aprobado y obligatorio | obligatorio | PASS |
| postgres-sandbox | no observado | prohibido | PASS |
db_write |
false |
false |
PASS |
data_written |
false |
false |
PASS |
sync_enabled |
false |
false |
PASS |
INSERT/COPY/UPDATE/DELETE activo en promote-core |
no activo | no activo | PASS |
Fingerprint DB observado:
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 ejecuta validate-prepared y luego consultas SELECT read-only
para fingerprint, catalogo, conteos RAW/CORE, columnas CORE y duplicados CORE.
No construye ni ejecuta sentencias de escritura en esta ruta.
Puntos relevantes del codigo:
inspect_promote_core_db_read_only()usaSELECT json_build_object(...)para fingerprint y checks de tablas.promote_core_safe_mode()bloquea inmediatamente--execute.promote_core_safe_mode()agrega errores claros si falla DB read-only, fingerprint, RAW table, RAW batch rows, CORE table, CORE row_count, candidate_rows, target_columns o duplicates CORE.postgres_sandbox_markers()bloquea el uso depostgres-sandboxsi aparece en variables relevantes del entorno local.
Resultado resumido de python scripts/source_003_importer.py promote-core:
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,
"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"
}
Resultado resumido de python scripts/source_003_importer.py promote-core --execute:
json
{
"command": "promote-core",
"result": "BLOCKED",
"db_touched": false,
"db_write": false,
"sql_executed": false,
"sql_write": false,
"data_written": false,
"sync_enabled": false,
"problems": [
"promote-core --execute bloqueado: safe mode sin escrituras"
]
}
6. Riesgos y limites¶
promote-coretodavia no implementa escritura realRAW -> CORE; solo valida precondiciones.- La ruta write futura requiere diseno separado de transformaciones, idempotencia por batch, estrategia de update/unchanged/blocked, rollback o rebuild CORE y validaciones post-escritura.
- La salida
DRY_RUNtoca DB solo para lecturasSELECT; no es apta para produccion ni sync diaria. - El codigo contiene una ruta write para
load-raw, ya existente y separada. Esta revision valida quepromote-coreno active esa ruta ni invoque runner.
7. Errores claros ante precondiciones faltantes¶
El comando reporta problemas explicitos para:
- DB read-only no disponible;
- fingerprint DB no aprobado;
- uso de
postgres-sandbox; validate-preparedfuera dePASS;- database observada distinta de
openclaw_business_observer_dev; - tabla RAW ausente;
RAW batch rowsdistinto de1886;- tabla CORE ausente;
CORE row_countdistinto de0;candidate_rowsdistinto de1886;target_columnsdistinto de66;duplicates COREdistinto de0;promote-core --executesolicitado.
8. 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 3 esperado |
git diff --check |
PASS |
.venv-portal\Scripts\mkdocs.exe build --strict |
PASS |
9. Conclusion¶
text
APTO PARA DISEÑAR RUTA WRITE PROMOTE-CORE LOCAL-DEV
NO APTO PARA PRODUCCIÓN
NO APTO PARA SYNC DIARIA
El safe mode de promote-core queda tecnicamente validado para avanzar al
diseno de una futura ruta write local-dev separada, con nuevos gates de
autorizacion. No habilita escritura en CORE, modificacion de RAW, produccion ni
sync diaria.