Saltar a contenido

PDF-008I-F - SOURCE-002 Derived Snapshot Date Hotfix

Fecha: 2026-06-21

Estado: HOTFIX DOCUMENTAL-TECNICO / DERIVED SNAPSHOT DATE CORREGIDO / SIN EJECUCION

portal_visible = yes

Scope: tenant

tenant_id: alpuntodeventa

Owner: Gabi / Carlos Canu

1. Contexto

PDF-008I-E quedo AMARILLO CONTROLADO / NO-GO durante el retry de rehearsal SOURCE-002 Productos.

Evidencia recibida para este hotfix:

Control Resultado
backup pre-rehearsal retry /opt/backups/openclaw/business-observer-prod/postgres/pre-source-002-reload-rehearsal-retry/20260621T121531Z/openclaw-bo-prod-postgres-pre-source-002-reload-rehearsal-retry-20260621T121531Z.dump
backup SHA256 retry 1fbf53e797ac47d441d583872f802630a152f86150f70941a7ac8c631d0fb176
SOURCE-002 final RAW/CORE/catalog/inventory current/inventory daily/economic 314/314/314/314/314/314, mart alerts 100
SOURCE-003 final RAW/CORE/MART 1886/1886/1/25/173/180

RAW retry paso con COPY 314 y upsert 314. CORE retry paso con CORE 314. El script derived aborto antes de COMMIT, por lo que la transaccion se revirtio. No se ejecuto MART, rollback ni operaciones WooCommerce.

2. Causa Del NO-GO

El script derived oficial:

infra/business-observer/production/postgres/products/PDF-008H/004-source-002-products-official-load-catalog-inventory-economic.candidate.sql

usaba la fecha hardcodeada 2026-06-20 para inventory_source_002_daily_snapshot.

La produccion ya tenia snapshot diario productivo en 2026-06-21. Dentro de la transaccion, el post-check conto snapshots por batch sin filtrar fecha y vio snapshot_rows=628, por lo que aborto correctamente.

3. Decision De Diseno

Para rehearsal controlado, la fecha de snapshot de inventario debe ser explicita, validada y trazable.

Decision:

  • agregar variable obligatoria pdf008h_inventory_snapshot_date;
  • exigir formato YYYY-MM-DD;
  • usar esa fecha al insertar o actualizar inventory_source_002_daily_snapshot;
  • validar 314 filas por tenant_id + sync_batch_id + snapshot_date;
  • no usar conteos globales de snapshots diarios como criterio de fallo;
  • preservar historico diario y no borrar snapshots de otras fechas sin gate separado.

4. Hotfix Aplicado

Archivo modificado:

  • infra/business-observer/production/postgres/products/PDF-008H/004-source-002-products-official-load-catalog-inventory-economic.candidate.sql

Cambios:

  • elimina la fecha hardcodeada 2026-06-20 en daily snapshot;
  • agrega pdf008h_inventory_snapshot_date;
  • aborta si la variable falta o no cumple YYYY-MM-DD;
  • usa :'pdf008h_inventory_snapshot_date'::date como snapshot_date;
  • mantiene idempotencia con ON CONFLICT (tenant_id, sku, snapshot_date) DO UPDATE;
  • cambia el post-check interno para contar daily snapshot por fecha explicita y batch.

5. Post-Checks Ajustados

Archivo modificado:

  • infra/business-observer/production/postgres/products/PDF-008H/006-source-002-products-official-load-post-checks.candidate.sql

Cambios:

  • agrega pdf008h_inventory_snapshot_date;
  • aborta si la variable falta o no cumple YYYY-MM-DD;
  • valida daily snapshot por tenant_id + sync_batch_id + snapshot_date;
  • evita que un historico diario con mas de una fecha falle por conteo global.

Se preservan validaciones:

  • RAW 314;
  • SKUs unicos 314;
  • CORE 314;
  • catalog 314;
  • inventory current 314;
  • inventory daily snapshot 314 para la fecha explicita;
  • economic 314;
  • mart alerts 100;
  • stock > 0 212;
  • stock = 0 100;
  • con precio/costo 312;
  • sin precio/costo 2 usando regla NULL OR 0;
  • SOURCE-003 intacto 1886/1886/1/25/173/180;
  • PUBLIC grants 0;
  • abort si target es staging o sandbox.

6. Scripts Modificados

Paquete:

  • infra/business-observer/production/postgres/products/PDF-008H/

Scripts:

  • 004-source-002-products-official-load-catalog-inventory-economic.candidate.sql
  • 006-source-002-products-official-load-post-checks.candidate.sql

No se tocaron otros scripts porque el ajuste necesario para este NO-GO estaba en la generacion y validacion de inventory_source_002_daily_snapshot.

7. GO / NO-GO Futuro

GO futuro solo si existe un gate separado con:

  • safe point nuevo;
  • autorizacion explicita para retry de rehearsal;
  • pdf008h_inventory_snapshot_date informado;
  • backup pre-rehearsal validado y pasado por variables explicitas;
  • JSONL /tmp/pdf008f-source002-products.jsonl con SHA256 confirmado;
  • RAW, CORE, derivadas, MART y post-checks ejecutados en orden;
  • WooCommerce, sync, scheduler, cron y pipelines en NO-GO.

NO-GO si:

  • falta pdf008h_inventory_snapshot_date;
  • la fecha no tiene formato YYYY-MM-DD;
  • el target no es produccion dedicada;
  • aparece staging o sandbox;
  • el batch o los hashes no coinciden;
  • daily snapshot para la fecha explicita no concilia 314;
  • se pretende borrar historico diario sin autorizacion separada;
  • se pretende activar WooCommerce, sync, scheduler, cron o pipelines.

8. Restricciones Respetadas

Durante este hotfix:

  • no se ejecuto SQL;
  • no se ejecuto carga;
  • no se ejecuto COPY;
  • no se ejecuto INSERT/UPDATE/DELETE/TRUNCATE;
  • no se ejecuto DML;
  • no se toco PostgreSQL produccion con writes;
  • no se toco PostgreSQL staging;
  • no se uso sandbox;
  • no se toco WooCommerce;
  • no se llamo API WooCommerce;
  • no se ejecuto sync;
  • no se ejecuto scheduler;
  • no se ejecuto cron;
  • no se ejecutaron pipelines;
  • no se creo snapshot nuevo;
  • no se creo backup nuevo;
  • no se creo dump nuevo;
  • no se versionaron JSONL, CSV ni snapshots temporales;
  • no se leyeron secretos;
  • no se imprimieron passwords ni connection strings reales;
  • no se modifico OpenClaw, NPM, Portainer ni Docker.

9. Estado De Recarga

El rehearsal posterior a este hotfix todavia no fue ejecutado.

WooCommerce, sync, scheduler, cron y pipelines siguen NO-GO.

10. Proximo Gate Recomendado

PDF-008I-G SOURCE-002 products controlled reload rehearsal retry

Alcance recomendado:

  • safe point nuevo;
  • pasar pdf008h_inventory_snapshot_date explicitamente;
  • ejecutar solo con autorizacion separada;
  • documentar evidencia completa de RAW, CORE, derivadas, MART y post-checks;
  • mantener WooCommerce, sync, scheduler, cron y pipelines en NO-GO.

11. Estado Final

Estado final: VERDE DOCUMENTAL-TECNICO / HOTFIX PUBLICABLE.

La recarga sigue NO-GO hasta un gate separado.