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
314filas portenant_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-20en daily snapshot; - agrega
pdf008h_inventory_snapshot_date; - aborta si la variable falta o no cumple
YYYY-MM-DD; - usa
:'pdf008h_inventory_snapshot_date'::datecomosnapshot_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
314para la fecha explicita; - economic
314; - mart alerts
100; - stock
> 0212; - stock
= 0100; - con precio/costo
312; - sin precio/costo
2usando reglaNULL OR 0; SOURCE-003intacto1886/1886/1/25/173/180;PUBLICgrants0;- 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.sql006-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_dateinformado;- backup pre-rehearsal validado y pasado por variables explicitas;
- JSONL
/tmp/pdf008f-source002-products.jsonlcon 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_dateexplicitamente; - 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.