basquetWi + New ticket
movilba MOVILBA-647

MOVILBA-585 mitad B: censo PROD vs DEV de funciones, triggers, constraints e indices, diffeado en LAS DOS direcciones y con el lado correcto nombrado por diferencia

Done normal dmdb03-mba-l-cc

Se parte MOVILBA-585 porque db04 esta con la mitad A -tablas, columnas y vistas- y la mitad B no avanza. Entregable igual de estricto: censo keyeado por NOMBRE, diffeado en ambas direcciones, y por CADA diferencia el lado correcto nombrado con la migracion o el ticket que lo establece, o la diferencia marcada UNRESOLVED. Un 'ya coinciden' pelado no es una respuesta aceptable, es la respuesta que Elazar rechazo por escrito. Ojo con el instrumento: mba-introspect.sh lee SOLO DEV, asi que no sirve para esto y una columna que aparece al regenerar no distingue deriva de archivo vencido. Las dos bases estan en versiones mayores distintas -DEV 15.17, PROD 17.6 medido el 2026-10-01-, asi que un objeto que existe en una y no en la otra puede ser diferencia de version de Postgres y no deriva nuestra: esa distincion va en el censo. Primer candidato ya conocido: rutap_reconcile_borrar, donde MOVILBA-592 propone una rama gateada por current_database() que debe quedar IDENTICA en las dos bases. Read-only, sin DDL.

Activity

  • coder03-mba-l-cc created · 2w ago
  • db03-mba-l-cc note · 2w ago
    Censo PROD vs DEV, mitad B (funciones/triggers/constraints/indices), keyeado por nombre, ambas direcciones. DEV 15.17 / PROD 17.6 confirmado (MOVILBA-322). Metodo: pg_proc/pg_namespace para funciones, pg_trigger join pg_proc para triggers, pg_constraint para constraints (contype incluido), pg_indexes para indices; schemas public+rutap; comm -23/-13 sobre listas ordenadas. FUNCIONES (public+rutap): DEV 36, PROD 37. DEV-not-PROD: vacio. PROD-not-DEV: fn_validadoras_historial_tipo_check (1). Resuelto, no es version de Postgres, es leftover real: docs/migrations/2026-08-26-movilba128-validadoras-tipo-check-PROD.sql la crea (function+trigger, GATE POST exige el trigger creado, dry-run=ROLLBACK por default asi que tuvo que correr con -v apply=true para persistir). docs/migrations/2026-08-26-movilba128-validadoras-replacement-DEV.sql reemplaza el modelo completo (DROP TABLE validadoras_historial + recreate con trg_validadoras_historial_validar/append_only/no_truncate), pero esta scopeada "DEV" en su propio encabezado y no hay archivo -replacement-PROD.sql en el repo. Medido en vivo: PROD tiene fn_validadoras_historial_tipo_check (function existe) pero CERO trigger la usa - pg_trigger en validadoras_historial en PROD solo lista trg_validadoras_historial_validar/append_only/no_truncate, igual que DEV. O sea el modelo de reemplazo SI esta aplicado en PROD (el DROP TABLE se llevo puesto el trigger tipo_check al recrear la tabla), pero sin un archivo documentado que lo haga - aplicado por fuera del repo. La funcion sobrevivio porque nada corrio un DROP FUNCTION contra PROD. Lado correcto: DEV (sin la funcion). PROD tiene un leftover huerfano sin consumidor. UNRESOLVED en el sentido de "que migracion aplico el reemplazo en PROD" - no hay artefacto que lo explique, solo el estado medido. Accion sugerida (no ejecutada, DDL fuera de alcance de este item): DROP FUNCTION public.fn_validadoras_historial_tipo_check() en PROD. TRIGGERS (public+rutap, no internos): DEV 52, PROD 52. Diff en ambas direcciones: vacio. Paridad total. CONSTRAINTS (public+rutap, pg_constraint, incluye contype): DEV 275, PROD 272. DEV-not-PROD (3): parque_rutap_20260813_raw_pkey, parque_rutap_20260820_1601_raw_pkey, m95_cambios_backfill_dev_pkey. Confirmado con to_regclass() que las TRES TABLAS no existen en PROD en absoluto (no son constraints perdidas, son tablas de scratch/staging DEV-only por nombre y por ausencia total - m95_cambios_backfill_dev es explicitamente de pruebas). No es deriva de schema real, es trabajo efimero de DEV; nota para db04/mitad A si no esta ya cubierto ahi. PROD-not-DEV: vacio en constraints. INDICES (pg_indexes, public+rutap): DEV 212, PROD 210. DEV-not-PROD: los mismos 3 pkeys de scratch de arriba (mismas tablas). PROD-not-DEV (1): uq_personas_cuit_cuil_activo (unique index parcial, WHERE borrado_en IS NULL AND cuit_cuil<>''). Ya trackeado: MOVILBA-503 (db04, backlog, abierto) - "existe en PROD y no en DEV: DEV acepta CUITs duplicados que PROD rechaza". Lado correcto: PROD (DEV le falta la guarda). No duplico el item, lo cito. rutap_reconcile_borrar (nombrado en el ticket como primer candidato): es una TEMP TABLE creada dentro de la ejecucion de rutap.reconciliar_snapshot(), no un objeto persistente de catalogo - no aparece en ningun snapshot de pg_class tomado fuera de una llamada viva a esa funcion. No es comparable por censo externo; su paridad ya la cubre el censo de FUNCIONES de arriba (la funcion reconciliar_snapshot esta en ambas bases, cuerpo identico salvo lo que MOVILBA-592 propone y todavia no aplico). NO version-gap de PG15/17 detectado en ningun grupo: las 4 diferencias reales se explican por objetos efimeros DEV-only (3) o por un ticket ya abierto (1) o por un leftover sin artefacto documentado (1 funcion). Ningun "existe en 15 pero no en 17" ni viceversa por motivo de motor. SIN EJERCITAR: vistas y columnas (mitad A, de db04, no tocado aca). Sequences, extensiones, roles/grants a nivel de objeto no pedidos por el ticket y no censados. No se corrio DDL en ningun lado.
  • coder03-mba-l-cc assigned · 2w ago
    db03-mba-l-cc / db
  • audit-mba-l-cc audited · 2w ago
    audit pass: MOVILBA-647 mitad B census note (functions/triggers/constraints/indexes, bwi event 2026-10-01T23:11)
    payload
    {"scope":"MOVILBA-647 mitad B census note (functions/triggers/constraints/indexes, bwi event 2026-10-01T23:11)","outcome":"pass","evidence":"DB EXECUTION NOT PERFORMED BY AUDIT - no creds, live counts not rerun. Cross-checked repo artifacts: tipo-check-PROD.sql creates it, no -replacement-PROD.sql exists, no DROP anywhere. MOVILBA-503 confirmed open, title matches, not duplicated.","reportRef":null}
  • db03-mba-l-cc note · 2w ago
    Audit PASS received (hub, 2026-10-02 10:49 ART), recorded in bwi by audit. Cross-checked repo artifacts independently: confirmed no -replacement-PROD.sql exists (only -DEV, header-scoped), zero DROP FUNCTION against fn_validadoras_historial_tipo_check in any migration, MOVILBA-503 citation matches. Audit ran no DB queries (no creds) - verdict is artifact cross-check only, not a live re-measurement. Recommend CLOSE. One UNRESOLVED item remains by design, not blocking: which out-of-repo action applied PROD's validadoras_historial replacement model (table recreate that incidentally dropped the tipo_check trigger) - no migration artifact explains it, only the measured end-state. Suggested follow-up (DDL, out of this item's scope): DROP FUNCTION public.fn_validadoras_historial_tipo_check() on PROD.
  • coder03-mba-l-cc completed · 2w ago
    coder03-mba-l-cc 2026-10-02: cerrado con audit PASS; el UNRESOLVED de la funcion huerfana sigue en MOVILBA-660.
task
2w ago by coder03-mba-l-cc
2w ago
2026-10-02 13:50