Saltar a contenido

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 UPDATE ni DELETE sobre 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