Saltar a contenido

SOURCE-003 Build Mart First Persistence 001

Fecha local: 2026-06-18

Estado: PASS / FIRST REAL LOCAL-DEV PERSISTENCE COMMITTED / NO REHEARSAL

Scope: tenant

tenant_id: alpuntodeventa

Owner: Gabi / Carlos Canu

1. Autorizacion explicita recibida

Autorizacion explicita del usuario recibida en esta tarea:

text Autorizo la primera persistencia real MART local-dev de SOURCE-003.

Alcance autorizado:

  • ejecutar una sola vez la primera persistencia real local-dev de SOURCE-003 MART
  • usar exclusivamente el doble gate correcto
  • dejar evidencia documental del preflight, del comando ejecutado y del resultado del COMMIT

Fuera de alcance y preservado:

  • produccion
  • sync diaria
  • runner y scheduler
  • CSV
  • La Directa
  • runtime O4
  • VPS, Docker, NPM, Portainer
  • rollback manual
  • segunda persistencia
  • prueba de idempotencia
  • push o deploy

2. Safe point

Control Valor
workspace C:\APV\openclawai
rama main
git status -sb inicial ## main...origin/main
git rev-parse HEAD inicial 4ee4cb42ce0ab3b8c8c750ee4b324116153ef8b9
HEAD / origin esperado 4ee4cb42ce0ab3b8c8c750ee4b324116153ef8b9
ultimo commit observado docs: prepare source 003 mart persistence go nogo
decision SAFE POINT PASS

3. Fingerprint DB confirmado

Fingerprint aprobado observado antes y despues del COMMIT:

text ::1/128:5432|openclaw_business_observer_dev|postgres|PostgreSQL 15.15, compiled by Visual C++ build 1944, 64-bit

Controles:

  • DB objetivo confirmada: openclaw_business_observer_dev
  • schema confirmado: business_observer
  • postgres-sandbox: no observado
  • fingerprint exacto coincide con el importer

Nota operativa:

  • dos nombres de constraints largos de MART aparecen truncados por el limite nativo de identificadores de PostgreSQL, pero el total real de constraints en las cuatro tablas MART sigue siendo 43/43

4. Preflight obligatorio

4.1 Comandos ejecutados

Comando Resultado
git status -sb PASS
git rev-parse HEAD PASS
python -m py_compile scripts/source_003_importer.py PASS
python scripts/source_003_importer.py build-mart PASS; payload DRY_RUN

4.2 Controles DB read-only

Control Observado Resultado
fingerprint DB aprobado PASS
postgres-sandbox ausente PASS
RAW total rows 1886 PASS
RAW batch rows 1886 PASS
CORE total rows 1886 PASS
CORE batch rows 1886 PASS
MART daily/seller/customer/sku 0/0/0/0 PASS
estimates daily/seller/customer/sku 1/25/173/180 PASS
missing keys seller/customer/sku 0/0/0 PASS
constraints MART 43/43 PASS
indices MART requeridos 12/12 PASS
duplicados por grain daily/seller/customer/sku 0/0/0/0 PASS
filas preexistentes del batch en MART 0/0/0/0 PASS

4.3 Decision del preflight

text PREFLIGHT PASS RAW = 1886 CORE = 1886 MART = 0 / 0 / 0 / 0 ESTIMATES = 1 / 25 / 173 / 180

No hubo ningun bloqueo que impidiera ejecutar la primera persistencia real.

5. Comando ejecutado

Se ejecuto una sola vez el comando autorizado:

powershell python scripts/source_003_importer.py build-mart --execute --confirm-local-dev-write SOURCE003_MART_LOCAL_DEV_1886 --commit-local-dev-write SOURCE003_MART_LOCAL_DEV_COMMIT_1886

Restriccion respetada:

  • no se ejecuto una segunda persistencia

6. Resultado del commit real

Exit code:

text 0

Resultado estructurado principal:

  • result = PASS
  • execution_status = COMMITTED
  • transaction_committed = true
  • data_persisted = true
  • rollback_rehearsal = false
  • rollback_executed = false
  • sync_enabled = false
  • production = false

Gate observado:

  • --confirm-local-dev-write SOURCE003_MART_LOCAL_DEV_1886: PASS
  • --commit-local-dev-write SOURCE003_MART_LOCAL_DEV_COMMIT_1886: PASS

7. Rowcounts before / inside_tx / after

Fase RAW CORE MART daily MART seller MART customer MART sku
BEFORE 1886 1886 0 0 0 0
INSIDE_TX 1886 1886 1 25 173 180
AFTER_COMMIT 1886 1886 1 25 173 180

Inserciones observadas dentro de la transaccion:

  • daily_inserted_rows = 1
  • seller_inserted_rows = 25
  • customer_inserted_rows = 173
  • sku_inserted_rows = 180

8. Post-write obligatorio

Control Observado Resultado
exit code 0 PASS
transaction_committed true PASS
data_persisted true PASS
rollback_rehearsal false PASS
daily 1 PASS
seller 25 PASS
customer 173 PASS
sku 180 PASS
RAW sigue 1886 PASS
CORE sigue 1886 PASS
duplicados batch/grain en MART 0/0/0/0 PASS
filas fuera del batch autorizado en MART 0/0/0/0 PASS

9. Riesgos restantes

  • la idempotencia real del mismo batch sigue sin probarse y queda fuera de esta tarea
  • cualquier futura reejecucion del mismo batch debe seguir BLOCKED hasta una tarea separada y explicitamente autorizada
  • produccion sigue bloqueada
  • sync diaria sigue bloqueada
  • territory_key, CMV, costos y contribution_amount mantienen las advertencias semanticas previas del dominio

10. Rollback plan

Estado:

text CANDIDATE / NOT EXECUTED

Si alguna vez se autoriza un rollback puntual, el alcance permitido debe ser exclusivamente borrar el batch autorizado 1827f887-9499-4579-b4f3-234d54f41f7f en estas cuatro tablas:

  • business_observer.mart_source_003_sales_daily
  • business_observer.mart_source_003_sales_by_seller
  • business_observer.mart_source_003_sales_by_customer
  • business_observer.mart_source_003_sales_by_sku

Guardrails obligatorios para cualquier rollback futuro:

  • solo local-dev
  • solo fingerprint aprobado
  • solo el batch autorizado
  • sin tocar RAW
  • sin tocar CORE
  • sin truncates
  • sin borrado fuera de las cuatro tablas MART
  • con evidencia previa y posterior propia

11. Estado preservado fuera de alcance

Sigue bloqueado:

  • produccion
  • sync diaria
  • runner
  • scheduler
  • CSV
  • La Directa
  • runtime O4
  • VPS
  • Docker
  • NPM
  • Portainer
  • push
  • deploy

12. Conclusion

text SOURCE-003 FIRST REAL MART PERSISTENCE LOCAL-DEV PASS COMMAND EXECUTED ONCE COMMIT REAL = daily 1 / seller 25 / customer 173 / sku 180 AFTER = MART 1 / 25 / 173 / 180 RAW = 1886 CORE = 1886 transaction_committed = true data_persisted = true rollback_rehearsal = false