SOURCE-003 Promote Core Local Dev Execution 001¶
Fecha local: 2026-06-16
Estado: PROMOTE-CORE LOCAL-DEV EJECUTADO / PASS / CORE CARGADA
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-LOCAL-DEV-EXECUTION-001.md
1. Objetivo¶
Ejecutar la promocion real local-dev:
powershell
python scripts/source_003_importer.py promote-core --execute
Alcance autorizado: RAW -> CORE para SOURCE-003, exclusivamente en
openclaw_business_observer_dev, batch
1827f887-9499-4579-b4f3-234d54f41f7f.
2. Safe point¶
| Control | Resultado |
|---|---|
| workspace | C:\APV\openclawai |
| rama | main |
git status -sb inicial |
## main...origin/main |
git rev-parse HEAD inicial |
120a8c7ba4eea6f30204e3416e89a52f26463974 |
| ultimo commit inicial | docs: review source 003 promote core write execution |
| decision | SAFE POINT PASS |
3. Archivos modificados¶
| Archivo | Impacto |
|---|---|
scripts/source_003_importer.py |
Corrige la validacion de confirmaciones para aceptar 0 como valor explicito valido en flags numericos de conteo y corrige el exit code de promote-core para que result=PASS devuelva OK. No cambia SQL, query autoridad, batch, RAW ni CORE. |
docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PROMOTE-CORE-LOCAL-DEV-EXECUTION-001.md |
Registra evidencia de la promocion real local-dev. |
mkdocs.yml |
Publica esta evidencia en el portal documental. |
README.md, docs/PROJECT-STATE.md, docs/governance/ACTIVE-CONTEXT.md, docs/tenants/alpuntodeventa/business-observer/PROJECT-STATE.md |
Actualizan el estado resumido del frente. |
4. Validaciones previas¶
| Comando | Resultado |
|---|---|
python -m py_compile scripts/source_003_importer.py |
PASS |
python scripts/source_003_importer.py validate-prepared |
PASS, rows=1886, columns=83, data_written=false, sync_enabled=false |
python scripts/source_003_importer.py promote-core |
DRY_RUN, raw_batch_rows=1886, core_row_count=0, candidate_rows=1886, target_columns=66, duplicates_core=0, fingerprint aprobado |
python scripts/source_003_importer.py promote-core --execute |
BLOCKED, confirmaciones faltantes, db_touched=false, db_write=false, data_written=false |
5. Confirmaciones usadas¶
Flags reales obtenidos desde promote-core --help, salida del importer y
documentacion publicada del gate:
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"
Nota operativa: el primer intento con confirmaciones completas quedo
BLOCKED porque el gate trataba 0 como confirmacion faltante para
--confirm-core-initial-row-count y --confirm-duplicates-core. Se corrigio
solo esa validacion de presencia. No hubo escritura en ese intento.
6. Ejecucion real¶
Comando ejecutado sin secretos:
powershell
python scripts/source_003_importer.py promote-core --execute --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 "<fingerprint local-dev aprobado>"
Resultado JSON observado:
| Campo | Valor |
|---|---|
result |
PASS |
confirmation_gate.status |
PASS |
db_write |
true |
sql_write |
true |
data_written |
true |
inserted_rows |
1886 |
core_batch_rows |
1886 |
core_total_rows |
1886 |
duplicates_core |
0 |
empty_line_key_rows |
0 |
empty_source_row_hash_rows |
0 |
transaction_committed |
true |
rollback_executed |
false |
production |
false |
sync_enabled |
false |
Observacion: el proceso devolvio exit code 1 aunque la salida JSON final
informo result=PASS y transaction_committed=true. Los post-checks
SELECT-only confirmaron el estado final. Despues de la ejecucion se corrigio
la rama promote-core del main para que result=PASS devuelva exit OK,
sin reejecutar escritura real porque CORE ya estaba cargada y la idempotencia
debia quedar BLOCKED.
7. Post-checks finales¶
Consulta SELECT-only final:
| Check | Resultado |
|---|---|
| DB | openclaw_business_observer_dev |
| RAW total rows | 1886 |
| RAW batch rows | 1886 |
| CORE total rows | 1886 |
| CORE batch rows | 1886 |
| CORE tenant_ids | ["alpuntodeventa"] |
| CORE batch_ids | ["1827f887-9499-4579-b4f3-234d54f41f7f"] |
duplicates CORE por tenant_id + line_key |
0 |
duplicates CORE por tenant_id + sync_batch_id + line_key |
0 |
CORE line_key vacio |
0 |
CORE source_row_hash vacio |
0 |
CORE promoted_at nulo |
0 |
CORE raw_loaded_at nulo |
0 |
RAW loaded_at nulo |
0 |
| production | false |
| sync_enabled | false |
8. Idempotencia¶
Se reintento promote-core --execute con el mismo batch y las mismas
confirmaciones.
Resultado:
| Campo | Valor |
|---|---|
result |
BLOCKED |
| causa | CORE row_count 1886 != 0 |
db_write |
false |
sql_write |
false |
data_written |
false |
rollback_executed |
true |
| CORE final | 1886 |
Conclusion: el reintento no duplico registros y preservo CORE en 1886
filas.
9. Bloqueos preservados¶
- No se uso produccion.
- No se habilito sync diaria.
- No se uso
postgres-sandbox. - No se uso VPS, Docker, OpenClaw, NPM ni Portainer.
- No se genero CSV.
- No se uso runner externo.
- No se modifico query autoridad.
- No se ejecuto
UPDATEniDELETEsobre RAW. - No se toco MART.
- No hubo push ni deploy.
- No se imprimieron secretos.
10. Validaciones finales¶
text
git diff --check -> PASS
.venv-portal\Scripts\mkdocs.exe build --strict -> PASS
11. Decision¶
text
SOURCE-003 PROMOTE-CORE LOCAL-DEV EJECUTADO
RAW -> CORE PASS
CORE FINAL = 1886 FILAS
NO APTO PARA PRODUCCION
NO APTO PARA SYNC DIARIA