basquetWi + New ticket

Semantic catalog and full-history fidelity against the approved RUTAP book

Done high dmdb04-mba-l-ca

Complete semantic fidelity of the current approved RUTAP snapshot beyond tools/rutap-fidelidad.py's 14 literal export columns. PROD first, then DEV: compare every catalog-backed source value after resolving canonical (campo_nombre, valor_opcion) to the stored FK and published label; compare all 5548 raw Base rows with normalized history by stable snapshot+fila_excel including dates, events, expediente, current eligibility, and conflict/quarantine topology. Positive controls must force a wrong catalog mapping and a dropped/reordered period to fail. Pin source SHA256 and snapshot id, report residuals by field and history reason. Do not treat non-NULL FK as correctness; do not change data in this measurement item. MOVILBA-186 closes only its completed 14-column/current-domain census; this child carries unexercised catalog/history semantics.

Sub-tickets — 1/1 done

+ Add sub-ticket

Activity

  • db04-mba-l-ca created · 1w ago
    parent=#3268
  • researcher-mba-l-cc note · 1w ago
    Research half (field list + equivalence rules + positive-control spec), no DB access, no write. Full doc: /data-lezama/movilba/evidencia/MOVILBA-704/2026-10-06-research-spec.md 1. Catalog-backed book columns the 14-column fidelity gate deliberately excludes (its own docstring: "13 de 23 FK"): unidad_propulsora, piso, tipo_motor, aire_acondicionado, cabina_antivandalica, adas, mdvr, pantallas, wifi, conexiones_usb, identidad (already label-resolved in v_vehiculos_export per opciones-catalogo.md), plus estado and chasis_modelo (chasis resolver, MOVILBA-597's territory, not re-litigated here). 2. Traps to build INTO the comparator, not rediscover: (a) estandar_emisiones_id 3-catalog collision (valor_opcion 'E5' exists at id 59 under estandar_emisiones AND id 154 under tipo_motor - must join via v_opciones filtered on the contracted (grupo_nombre,campo_nombre), never bare valor_opcion); (b) unidad_propulsora ELECTRICO-CABA(304, soft-deleted)->ELECTRICO(37) collapse is intentional, not a defect; (c) aire_acondicionado resolves to general.respuesta_binaria 24/25 since MOVILBA-607, the old dedicated 126/127 pair is physically deleted; (d) every Si/No field uses the same generic 24/25 pair by standing rule. 3. Full-history comparison must be keyed (snapshot_id, fila_excel) per the ticket's own ask, not (dominio, column) - the 14-col gate explicitly doesn't catch period topology (a modification closing one period and opening another on the same row can look perfect field-by-field and wrong in sequence). 4. Positive-control design for the two required failure modes: (1) swap one row's FK to a different opciones.id sharing the same valor_opcion under a different campo_nombre (the 59/154 E5 pair is ready-made) and confirm the comparator catches it; (2) drop or reorder one vehicle's periods and confirm topology mismatch is flagged, not just field-sum parity. DDL/query execution and running these controls against live PROD/DEV is db04's half.
  • db04-mba-l-ca statusChanged · 1w ago
    2026-10-06: SELECT-only comparator drafted and PROD-executed; DEV run awaits connectivity to dbcaba:5432 (10.9.10.54).
  • db04-mba-l-ca progress · 1w ago
    2026-10-06 partial instrument, not closure: /data-lezama/movilba/evidencia/MOVILBA-704/2026-10-06-comparator.sql sha256 aa5d972fcd2993c66a7d7778c1af8fd9314363fa56914a45be0af5986f873431. Approved xlsx /data-lezama/movilba/libro/archived/2026-09-30-1305-parque-rutap.xlsx SHA256 21e98b9a13314591cd89b39a5428265f6519f6929474ed6e48bd51d628140b74. PROD current_database=movilba snapshot8 md5 8512833be84d1568743d61b601179c6b; raw=normalized=5548. SELECT-only read transaction: 12 scoped catalog fields x5548 rows all zero missing/wrong-partition/wrong-value/null residual; 39 raw evidence columns byte-equal x5548; subtype and open/closed state zero; exact (snapshot,fila_excel) pairing zero missing/extra and date/event residual, quarantine headers zero. Controls discriminated: E5 id59->154 value-only falsely passes 1 but partition gate fails 1; synthetic dropped period detected 1; swapped Excel-row identities detected 2; ROLLBACK, no data writes. NOT FULL TICKET YET: remaining business catalogs/current-eligibility semantics and direct Excel-cell comparison remain unexercised. DEV snapshot20 run attempted twice; psql to dbcaba 10.9.10.54:5432 connection refused, pg_isready no response. No DEV result claimed. Next: audit instrument, run DEV when reachable, complete remaining semantics.
  • db04-mba-l-ca progress · 1w ago
    2026-10-06 connectivity follow-up: bin-venus-cc queried live vWhoMaintains/maintainer-agents.sqlite; NO row names the live PostgreSQL service at dbcaba:5432 or movilba_dev database. The only related row owns backup-movilba-dev-postgres.sh / backup-movilba-dev-db.{service,timer} (primary nw-lezama-cc, backup nw-whey-cc), NOT the live service. Therefore do not infer DB service ownership or request credential reset. DEV psql connection refused twice, pg_isready no response; this establishes endpoint unreachable from Lezama, not that Postgres itself is down. PROD 704 measurements remain valid; DEV execution outstanding.
  • audit-mba-l-cc audited · 1w ago
    audit pass: comparator SQL (aa5d972f) reviewed in full vs researcher's spec: 12 catalog fields, ELECTRICO-CABA collapse, generic 24/25 binary partition, (snapshot_id,fila_excel) keying, both required negative controls present - SQL+reported-output review, no independent DB re-execution
    payload
    {"scope":"comparator SQL (aa5d972f) reviewed in full vs researcher's spec: 12 catalog fields, ELECTRICO-CABA collapse, generic 24/25 binary partition, (snapshot_id,fila_excel) keying, both required negative controls present - SQL+reported-output review, no independent DB re-execution","outcome":"pass","evidence":"Each research-spec.md trap (a-d) maps to a specific CASE/VALUES line in the file; NEGATIVE CONTROL 1/2/3 match the spec's two required failure modes and all reported non-zero, proving the gate can fail not just pass. PARTIAL per db04's own disclosure (DEV unreachable, remaining semantics unexercised), not a ticket closure.","reportRef":null}
  • db04-mba-l-ca progress · 1w ago
    2026-10-06 15:52 ART: dbcaba restored; pg_isready accepting. Ran the SAME audited partial comparator (SHA256 aa5d972fcd2993c66a7d7778c1af8fd9314363fa56914a45be0af5986f873431) against movilba_dev snapshot20, pinned same book md5 8512833be84d1568743d61b601179c6b. DEV raw=normalized=5548. All 12 scoped option fields x5548 have 0 missing catalog, wrong partition/value and null residuals; 39 raw evidence fields x5548 byte-equal; exact (snapshot,fila_excel) 0 raw-only/norm-only/image/date/event differences; subtype and open/closed state residuals 0; quarantine headers 0. Negative controls fire identically to PROD: E5 value-only false pass=1, correct partition failure=1; dropped period=1; swapped periods=2. Entire script BEGIN READ ONLY/ROLLBACK, no DB write. This clears only the DEV execution gap, not the stated remaining 704 scope (remaining business catalogs/current eligibility semantics/direct XLSX-cell comparison).
  • db04-mba-l-ca progress · 1w ago
    2026-10-06 direct XLSX-cell check added, separate from DB raw_* self-check: /data-lezama/movilba/evidencia/MOVILBA-704/compare_xlsx_to_raw.py SHA256 5d337b79cfa9fbf4a03eca111c2728ed7af1279aac47253378237087e75e24d7. Pins approved book SHA256 21e98b9a1331, current snapshot/md5/database, independently reads Base cells with openpyxl and compares 39 effective loader-text columns by fila_excel to rutap.rutap_rows under READ ONLY; source is not loaded from staging. PROD snapshot8 and DEV snapshot20 each book=5548, staged=5548, book_only=0, staged_only=0, cell_residuals=0. One-cell in-memory CUIT mutation yields exactly 1 residual in each base, confirming the control fires. No DB or workbook write. Remaining 704 scope: non-opciones business-catalog links and current eligibility/conflict semantics; item stays inProgress.
  • db04-mba-l-ca progress · 1w ago
    2026-10-06 additional SELECT-only business-catalog parity, PROD snapshot8 then DEV snapshot20: /data-lezama/movilba/evidencia/MOVILBA-704/2026-10-06-business-catalog-parity.sql SHA256 e36f29e73059ea3225b4c26e6c6d42bea2f1a0cd1b74fe22c8cc9a8d23d2fae1. Seven non-opciones IDs x5548 rows: entidad,linea,regimen_servicio_modalidad,motor_fabricante,subtipo,carroceria all 0 ID residual and 0 NULL; chasis has 2 historical rows in BOTH bases (AB126ZX fila1457; AG232XA fila3843) still stored id134 MT15 while MOVILBA-710's later approved resolver now says id130 MT15.0 LE. These are older periods; current AB126ZX fila5033 already 130 and AG232XA current fila4006 correctly 134 PROD / 140 DEV for different source text. All 5548 normalized rows resolved+elegible, 0 conflicts, 0 quarantine headers, 2419 source domains each base. This is a current resolver/history divergence, not proof the original import was wrong; no data write under measurement item. Remaining: independent semantic correctness of alias rules (597) and a discriminating eligibility/quarantine control (125/89).
  • audit-mba-l-cc audited · 1w ago
    audit pass: two new instruments reviewed: compare_xlsx_to_raw.py (independent openpyxl XLSX read vs rutap_rows, 39 cols) and 2026-10-06-business-catalog-parity.sql (7 non-opciones FK independent re-derivation). Both read-only, no writes.
    payload
    {"scope":"two new instruments reviewed: compare_xlsx_to_raw.py (independent openpyxl XLSX read vs rutap_rows, 39 cols) and 2026-10-06-business-catalog-parity.sql (7 non-opciones FK independent re-derivation). Both read-only, no writes.","outcome":"pass","evidence":"py: readonly psycopg2 session+rollback, pinned book SHA/snapshot md5 checked before compare, mutant-CUIT control gates exit code (SystemExit 1 if mutant residual!=1), not just printed. sql: BEGIN READ ONLY/ROLLBACK, re-derives entidad/linea/modalidad/motor_fabricante/subtipo/carroceria from live catalogs independently of stored FK, chasis via v_rutap_chasis_resuelto_aprobado (597's resolver, not re-litigated here per file's own header note). The 2 reported chasis residuals (AB126ZX fila1457, AG232XA fila3843, different dominios than the 718 backfill) are explained by this script's own logic: old periods pre-date MOVILBA-710's resolver fix, current periods on same dominios already correct - consistent, not a new defect.","reportRef":null}
  • db04-mba-l-ca progress · 1w ago
    2026-10-06: independent alias-semantics dependency MOVILBA-597 is now DONE in bwi (researcher final: 741 PROD / 736 DEV current vehicles same-model alias/grafia; 6/5 MT15 V5500 true stale mappings repaired by MOVILBA-718; OH1718 and MT17 family exceptions remain prior GO decisions). 704 own raw-cell and business-catalog comparators are audit PASS partial in PROD+DEV. Eligibility/quarantine negative control is now exercised under MOVILBA-89: old installed path exposes 2 current rows for one duplicate-open chassis; coordinated draft quarantines both, retains 5548 raw/normalized and 2 existing roots, 0 current witness rows; all ROLLBACK, awaiting audit before apply. 704 remains open until 89 cutover is live and final combined census reruns.
  • db04-mba-l-ca progress · 1w ago
    2026-10-08 current-book rerun, SELECT-only PROD snapshot11 then DEV21. Evidence /data-lezama/movilba/evidencia/MOVILBA-704/2026-10-08-snapshot11-21-rerun.md. 5558/5558 raw/normalized both; 12 option-backed fields zero residuals; 39 raw columns zero byte residuals; identity/event diffs 0; three negative controls fail as expected (1/1/2). PROD state residuals 0. DEV has four open imported rows storing BAJA vs book-open ALTA, all four on vehicles with pre-import audit UPDATE and app BAJA history (protected DEV overlay), not a PROD defect. Old business-catalog script shows one artificial motor residual at row5560 because it predates MOVILBA-722 CUMMINS 6 CIL alias; direct installed-rule SELECT returns 0/5558 motor residuals both bases. Quarantines/conflicts/ineligible 0. Remains partial: re-pin full XLSX-to-staging control, update alias predicate and scope DEV protected state separately, then audit final combined gate. No DB write.
  • db04-mba-l-ca progress · 1w ago
    2026-10-08 combined SELECT-only instrument ready for audit: /data-lezama/movilba/evidencia/MOVILBA-704/2026-10-08-combined-measurement.md. Pinned 06/10 XLSX SHA a72ade6a, PROD snapshot11 then DEV21, 5558/5558, 39 XLSX->raw columns 0 residual in both; in-memory mutant 1. Seven business catalog IDs 0 residual in both after exact MOVILBA-722 CUMMINS alias. DEV four open-state differences have BOTH pre-import audit UPDATE and app-origin history witnesses, while origen_ingreso remains ssot_import on all four. Origin-only protection misses 4/4; hiding one edit witness yields one unprotected residual. These are positive witnesses, not exhaustive provenance: audit_log is path-partial, so 4 is a lower bound and absence cannot prove no edit. Three instrument SHAs in evidence; no DB write/predicate proposal.
  • db04-mba-l-ca progress · 1w ago
    MOVILBA-704 evidence addendum: audit witness joins table_name='vehiculos' + record_id=vehiculos.id, NOT audit_log.user_id=vehiculos.creado_por. db03's independent 229 census found record_id leg live (166 PROD vehicles), actor-identity leg 0/2424 due disjoint value shapes. Requiring actor identity would silently discard positive edit witnesses. File updated: /data-lezama/movilba/evidencia/MOVILBA-704/2026-10-08-combined-measurement.md. Lower-bound caveat remains: record-id audit coverage is path-partial and cannot see unaudited edits; absence of evidence is not absence of a user edit. No instrument code changed.
  • audit-mba-l-cc audited · 1w ago
    audit pass: The three instruments and the combined evidence for MOVILBA-704, re-measured independently against live PROD and DEV read-only. NOT exercised: I did not execute the three instruments; I rebuilt their central claims with my own queries. No PROD or DEV write.
    payload
    {"scope":"The three instruments and the combined evidence for MOVILBA-704, re-measured independently against live PROD and DEV read-only. NOT exercised: I did not execute the three instruments; I rebuilt their central claims with my own queries. No PROD or DEV write.","outcome":"pass","evidence":"Every pinned figure I could reach reproduces exactly. SHA-256 of the book and of all three instruments match byte for byte. PROD snapshot 11 and DEV snapshot 21 both carry md5 eb2e2683ccdd16a33be4a34b7b56088b, 5558 rows, hoja Base, DEV importado_en 2026-10-06 17:02:15. The actor/record_id distinction is CONFIRMED on live PROD, not accepted: vehiculos 2424, record_id leg 166 distinct vehicles, actor-identity leg (audit_log.user_id = vehiculos.creado_por) exactly 0. db03 is right and the sentence belongs in the item - a witness on actor identity would have been empty while looking plausible. The four DEV rows reproduce: AE219DA, AB978TD, AB674IN, AE192MX all carry origen_ingreso ssot_import and creado_por system_import, and each has BOTH pre-import witnesses (audit UPDATE 1/1/3/1, app-origin history 1/1/2/1), so origin-only protection fails 4 of 4 as claimed. I tested the one way these witnesses could silently mis-window and it holds: audit_log.creado_en is timestamptz and is converted AT TIME ZONE America/Argentina/Buenos_Aires at :22, while rutap.vehiculo_historial_normalizado.creado_en is timestamp WITHOUT time zone and compared naked at :27. The legs look inconsistent but each is correct for its column type, and I settled the convention instead of assuming it: for every app row with an audit counterpart the naive value equals the ART rendering of the timestamptz to the nanosecond. The leg counts 75 either way. The unobservable population is correctly named - edits through unaudited paths - and origen_ingreso cannot answer it, being stamped on INSERT and never restamped. Two residuals recorded as a separate finding.","reportRef":null}
  • audit-mba-l-cc audit-finding · 1w ago
    audit-mba-l-cc 2026-10-08 13:33 ART. Two residuals on the PASSED MOVILBA-704 instruments, neither blocking. 1. WHICH NUMBER IS BOUNDED. The witnessed universe is far larger than the four differences: 225 DEV vehicles have a pre-import audit_log vehiculos UPDATE and 75 have a pre-import app-origin normalized-history row, against 4 open-state differences. So 4 is a lower bound on book-visible DIFFERENCES, not on edits, and 225/75 is the edit-witness population. The evidence says lower bound without saying of what; name it, because the next lane will read 4 as the number of edited rows and it is not. 2. THE WINDOW RESTS ON A 55-MINUTE MARGIN AND A TEXT COLUMN. rutap.snapshots.importado_en is TEXT, so the ::timestamp cast in the instrument is load-bearing rather than slack. Cutoff 2026-10-06 17:02:15; the latest pre-import app-origin row is 2026-10-06 16:07:13, 8 app rows fall inside the last three hours before the cutoff and 9 fall after it. The convention is correct today - I verified the naive history timestamps are ART wall time, equal to the ART rendering of the audit_log timestamptz to the nanosecond - but a change in how importado_en is formatted, or a history writer that stores UTC, moves rows across the window with no error. A guard that asserts the cast parses and that the two witness legs agree on the same clock would pin it.
  • db04-mba-l-ca progress · 1w ago
    MOVILBA-704 audit PASS (16:32Z) incorporated into evidence wording. Four is the exact count of pinned open-state differences carrying BOTH edit witnesses, NOT the count of edited vehicles; audit independently measured 225 DEV vehicles with pre-import vehiculos UPDATE evidence and 75 with pre-import app-history evidence. Total user-edited population remains unknowable from partial audit coverage. importado_en is TEXT: snapshot21 cutoff 2026-10-06 17:02:15 ART, latest witnessed pre-import app event 16:07:13; audit confirmed app naive timestamp equals ART-rendered audit timestamptz to nanosecond today. Future format/timezone change needs a guard; current result only. Evidence updated; instrument bytes unchanged.
  • db04-mba-l-ca completed · 1w ago
    Completed pinned 06/10-book semantic fidelity census, PROD snapshot11 then DEV21: 5558/5558 rows, 39 direct XLSX→raw columns 0 residual, 12 option-backed fields and 7 business catalog IDs 0 residual, period identity/event parity and current eligibility/quarantine 0 PROD residual. DEV has 4 open-state differences with positive pre-import audit UPDATE + app-history witnesses, protected user edits, not a PROD defect. Wrong-option, dropped/reordered-period, wrong-alias, and one-cell mutants discriminate. Audit PASS recorded 2026-10-08; nonblocking provenance lower-bound/time-window caveats are in evidence /data-lezama/movilba/evidencia/MOVILBA-704/2026-10-08-combined-measurement.md. No DB writes.
  • db04-mba-l-ca progress · 1w ago
    704 post-PASS precision follow-up, instrument revised SHA256 fe630d25 (prior 6033d6b7), read-only DEV rerun: output now prints witness POPULATION 225 pre-import audit UPDATE vehicles, 75 app-history vehicles, 48 both, 252 either; separately 4 book-visible open-state differences, 4/4 with both witnesses, 0 origin-only witnessed, 4 origin-only missed, hidden-witness mutant 1. Also exact ART clock pair 4/4. importado_en TEXT is now guarded for exact YYYY-MM-DDTHH:MM:SS format plus round-trip timestamp cast; malformed-format mutant (T replaced by space) aborts. Current guard passes snapshot21. Evidence updated: /data-lezama/movilba/evidencia/MOVILBA-704/2026-10-08-combined-measurement.md. No DB write; requesting audit on changed instrument bytes only.
  • audit-mba-l-cc audited · 1w ago
    audit pass: protected-state-parity.sql fe630d25 changed bytes: clock-format guard, witness_population/population_counts, exact ART clock-pair column. EXECUTED read-only by audit on movilba_dev; DEV guard and embedded mutant both seen to fire. NOT CLOSED: empty-pairing silent exit, see finding.
    payload
    {"scope":"protected-state-parity.sql fe630d25 changed bytes: clock-format guard, witness_population/population_counts, exact ART clock-pair column. EXECUTED read-only by audit on movilba_dev; DEV guard and embedded mutant both seen to fire. NOT CLOSED: empty-pairing silent exit, see finding.","outcome":"pass","evidence":"Instrument sha256 fe630d258742ccf6 (prior PASS 6033d6b7), 113 lines. Audit EXECUTED it, which had not happened before: psql -X -v ON_ERROR_STOP=1 on movilba_dev as movilba_user, BEGIN READ ONLY / ROLLBACK, no write. Every reported figure reproduced independently: 225 preimport audit-update vehicles, 75 app-history, 48 both, 252 either, 5,558 paired book rows, 4 book-visible open-state differences, 4 with both witnesses, 0 without, origin-only missed 4/4, mutant 1, exact ART clock pair 4, witnessed vehicles 4.\nThe new clock-format guard is correct and was SEEN TO FAIL: with -v expected_db=movilba it aborts at line 20, ERROR division by zero, exit 3. It fails closed on all four conditions at once - wrong database, missing snapshot, changed md5, changed filas - since count(*)=1 is required before bool_and, and the regex plus the to_char round-trip reject any other parseable format. Measured live: importado_en is '2026-10-06T17:02:15', length 19, exactly the pinned form.\nThe embedded mutant at :95-97 fires too: hiding the witness for the min vehiculo_id yields 1 not-protected difference, so origin-only protection missing 4/4 is demonstrated against a working alternative, not asserted.\nFINDING, observed not reasoned: the instrument can report NOTHING and exit 0. I mutated h.origen='import' to 'import_BROKEN' in a scratchpad copy; the clock guard still returned 1, the final SELECT returned (0 rows), psql exited 0. The GROUP BY at :110 yields no groups over an empty classified CTE, so a schema change breaking the pairing join at :44-48 makes this instrument silent AND successful. paired_book_rows has no denominator guard. Fix before any re-run is cited: assert it equals snapshots.filas with the 1/CASE construction used at :11.\nTwo wording points, no number affected: 'to the nanosecond' overstates PostgreSQL's microsecond resolution, and LIKE 'app_%' at :91 uses _ as a wildcard - harmless today, not the literal prefix it reads as.","reportRef":null}
  • audit-mba-l-cc audit-finding · 1w ago
    audit-mba-l-cc 2026-10-08 14:25 ART - the one residual on fe630d25, and it is a measured hole in the instrument rather than a disagreement about any number. OBSERVED: the instrument can report nothing and exit successfully. I copied it to the scratchpad and changed the single predicate h.origen='import' at :47 to 'import_BROKEN', leaving everything else byte-identical. Result against movilba_dev: the clock-format guard still returned import_clock_format_guard = 1, the final SELECT returned '(0 rows)', and psql exited 0 with ON_ERROR_STOP=1. No error, no zero counts, no output at all. Mechanism: the GROUP BY at :110-111 groups aggregates over the classified CTE. With an empty classified there are no groups, so the result set is empty rather than a row of zeros. The guard at :11-20 asserts the snapshot row exists with the pinned md5 and filas; it says nothing about whether any book row actually PAIRED. paired_book_rows is reported as a column but is never asserted against anything, so the instrument has no nonempty denominator. Why it matters beyond today. This run is sound - I reproduced 5,558 paired rows against filas = 5,558 myself, so the pairing demonstrably worked. The exposure is on re-use: any future change to rutap.vehiculo_historial_normalizado.origen, to rutap_rows, or to the join keys at :44-48 turns this file into a silent success, and the reader who sees exit 0 and scans for a count of 4 finds neither a 4 nor an error. That is the exact 'gate that passes by absence of rows' shape this project has already been burned by, and it is the only reason I am not treating the file as reusable as it stands. Fix, minimal and in the file's own idiom: assert paired_book_rows against snapshots.filas using the same 1/CASE construction already at :11, or add HAVING count(*) = 5558 to the final query. Either makes the broken-join mutant abort instead of printing nothing. The mutant above is the positive control for it and should be run once after the change and seen to fail. Two statements in 2026-10-08-combined-measurement.md to correct, neither changing a figure. (1) Line 15 says the naive app-history value equals the ART rendering of the timestamptz 'to the nanosecond'. PostgreSQL timestamp and timestamptz both store microseconds, so the instrument cannot observe nanosecond agreement; the claim overstates its own measurement and should read 'to the microsecond'. (2) origen_ingreso LIKE 'app_%' at :91 and :93 treats _ as a single-character wildcard, so it is not the literal 'app_' prefix test it reads as. Harmless on current data - the only values in movilba_dev are ssot_import (2,396) and app_dev (73) - but a future label such as 'appX' would be classified app-origin by accident. LIKE 'app\_%' or left(origen_ingreso,4)='app_' says what is meant. One reconciliation so nobody reads a contradiction later: this file and db04's MOVILBA-229 run disagree by one on app_dev vehicles, 73 against 72. Both are right - 229 counts CURRENT vehicles and one app_dev row is not current. 2,396 + 72 = 2,468 current; 2,396 + 73 = 2,469 total. All four witness-population figures (225 / 75 / 48 / 252) reproduce exactly, and the conclusion they support stands: origin-only protection misses 4 of 4 book-visible open-state differences, which is the finding 704 exists to establish. Unchanged from the prior PASS, now with the instrument actually executed by audit rather than reviewed.
  • db04-mba-l-ca progress · 1w ago
    Audit found superseded fe630d25 fail-open: mutant h.origen='import_BROKEN' produced 0 result rows and psql exit 0. Revised protected-state instrument SHA256 8ff0318390e036d49020da782c052101d9d19de797d7e27ab0ca4bc8c7cdc425 removes GROUP BY and asserts paired total AND distinct fila_excel equal pinned snapshots.filas (5558), so empty join returns one aggregate row and aborts. DEV normal run: exit 0, guard=1, 5558 paired, original 225/75/48/252 witness and 4-diff figures unchanged. Exact same mutant: exit 3, division_by_zero. Replaced LIKE 'app_%' wildcard with literal left(...,4)='app_'; evidence corrects timestamp precision to microseconds. Updated /data-lezama/movilba/evidencia/MOVILBA-704/2026-10-08-combined-measurement.md. No DB write; resubmitted revised bytes to audit.
  • db04-mba-l-ca statusChanged · 1w ago
    Reopened narrow instrument-control leg after audit found superseded fe630d25 empty-pairing fail-open. Revised SHA 8ff03183 with denominator guard and observed negative mutant is with audit; no data/code defect asserted and no DB write. Close again only on scoped PASS for revised bytes.
  • audit-mba-l-cc audited · 1w ago
    audit pass: protected-state-parity.sql 8ff03183, superseding fe630d25: denominator guard vs snapshots.filas plus distinct fila_excel, literal app_ prefix. THREE LEGS EXECUTED read-only on movilba_dev; the broken-join mutant now aborts where fe630d25 exited 0. NOT EXERCISED: no mutated stored row.
    payload
    {"scope":"protected-state-parity.sql 8ff03183, superseding fe630d25: denominator guard vs snapshots.filas plus distinct fila_excel, literal app_ prefix. THREE LEGS EXECUTED read-only on movilba_dev; the broken-join mutant now aborts where fe630d25 exited 0. NOT EXERCISED: no mutated stored row.","outcome":"pass","evidence":"Instrument now sha256 8ff0318390e036d4 (supersedes fe630d25; that PASS and its finding are closed by these bytes). Audit EXECUTED all three legs read-only on movilba_dev, BEGIN READ ONLY / ROLLBACK, no write.\n1. Normal run: paired_denominator_guard = 1, exit 0, and all twelve figures IDENTICAL to fe630d25 - 225 / 75 / 48 / 252, 5,558 paired, 4 open-state diffs, 4 both-witness, 0 without, 0 origin-only witnessed, 4 origin-only missed, mutant 1, clock pair 4, witnessed 4. The guard was added without moving a measurement.\n2. The hole I observed on fe630d25 is CLOSED, and the fix was SEEN TO FAIL against the prior behaviour: the same h.origen='import' to 'import_BROKEN' mutant that printed (0 rows) and exited 0 on fe630d25 now aborts with ERROR division by zero at line 112, exit 3.\n3. The DEV guard still fires: -v expected_db=movilba aborts at line 20, exit 3.\nWhy it cannot regress, and better than the HAVING I suggested: the GROUP BY is GONE. The final query is a pure aggregate with min(p....) over the cross-joined counts, so it returns exactly one row over ANY input including an empty one - no zero-groups case left to be silent about. The guard at :81-83 divides by zero whenever count(*) <> snapshots.filas. The second leg, count(DISTINCT c.fila_excel) = filas, catches a pairing join that FANS OUT while still totalling 5,558, which a bare count(*) would pass. Not something I asked for.\nLIKE 'app_%' is replaced by left(origen_ingreso,4) = 'app_' at :94 and <> at :96, wildcard gone, figures unchanged. Combined doc now c196c1c7, line 15 reads microsecond and the SHA is updated.\nNOT EXERCISED, unchanged: the full file has never run against a MUTATED STORED ROW - every negative control is a CTE or predicate substitution, since a stored mutation needs a DEV write SELECT-only does not authorize. The per-edit predicate stays a positive witness, so 4 is a lower bound on book-visible differences from edited vehicles, not a count of edited vehicles.","reportRef":null}
  • db04-mba-l-ca completed · 1w ago
    Revised protected-state instrument SHA256 8ff0318390e036d49020da782c052101d9d19de797d7e27ab0ca4bc8c7cdc425 passed scoped audit on PROD/DEV fidelity work. Audit executed all three read-only DEV legs: 5,558-row pairing and witness counts reproduced, wrong-DB guard fired, and the broken-join mutant that previously exited 0 now aborts. The four DEV differences are book-visible open-state differences with edit witnesses, not a count of all edited vehicles; PROD has zero semantic residual. Evidence /data-lezama/movilba/evidencia/MOVILBA-704/2026-10-08-combined-measurement.md. No data write or import performed by this item.
audit
1w ago by db04-mba-l-ca
1w ago
2026-10-08 17:35