Test #118: nome fuorviante e migrazione 022 non provata con righe #125
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
src/backend/tests/test_vision_execute.py:219 test_a_nan_quote_still_blocks_the_next_acquisition verifica solo pending_authorisation, non una seconda acquisizione (che non è bloccata: execute_task passa enforce_tolerance_gate=False, src/backend/services/vision_service.py:740). src/backend/tests/test_migrations.py:366 prova la 022 solo su DB vuoto: manca il caso con righe (conteggio e somma invariati, indici e FK uguali, riga NULL accettata dopo l'upgrade). Trovato dalla revisione Fable di #118-#121 (28/10).
ANALISI (Opus, passo 1) — correzioni della revisione Fable di #118-#121, un solo agente Sonnet.
RIF: gitea:Adriano/TieMeasureFlow#123 #124 #125 (+ #118 per le etichette). Worktree
C:/Users/Adriano/lavoro/TieMeasureFlow-rev118, ramolavoro/daitarn-tmf-rev118, base815d49d(=43ef220+ pannello operatore su<tmf-viewer>di #122). Frontend insrc/frontend/flask_app/.#123 — Registra riattivo sul frame già registrato
FILE:
static/js/vision_execute.js(versione815d49d).recordedBlob: null(commento// #123: ...): il frame salvato dall'ultimo Registra riuscito.record(): al successo (saved = true)this.recordedBlob = blob.canRecord:!!this.lastBlob && this.lastBlob !== this.recordedBlob && !this.saved && !this.registering.task-result-reset:saved = false;preview = !!this.result && this.lastBlob !== this.recordedBlob(il badge «Anteprima, non registrata» non compare sul frame già registrato); poi, con camera in modo impulsivo (hasCamera && !inLinea),this.grab()(nuovo frame come all'apertura della pagina,initfa lo stesso), altrimentithis.kick()come oggi.acquire→_emitRecorded).TEST: estendi
tests/js/test_vision_rows.jsotests/js/test_vision_zoom.js(finti come quelli esistenti): dopo record riuscito +task-result-reset→canRecordfalso epreviewfalso; un frame nuovo (lastBlobdiverso) →canRecordvero; in impulsivo il reset chiamagrabuna volta.tests/test_vision_rows_js.py,tests/test_vision_zoom_js.py,tests/test_template_js_syntax.pyverdi.#118 — etichetta NaN sull'immagine
FILE:
static/js/vision_overlay.jslabels()(~riga 252). Oggi una riga convaluenull/undefined/''/bool viene saltata. Nuovo: se l'ancoraggio esiste, l'etichetta c'è con testor.name + ' NaN ' + (r.unit || '')estatusdella riga (fail).Number(null)resta da evitare (è 0): il test di null va prima della conversione. Valori non finiti (NaN, Infinity da stringa) → stessa etichetta NaN.TEST:
tests/js/test_vision_overlay.js: il caso «value null → nessuna etichetta» diventa «value null → etichetta con 'NaN', status della riga»; riga senza ancoraggio → ancora nessuna etichetta.tests/test_vision_overlay_js.pyverde.#124 — deviazione NaN nelle esportazioni backend
FILE:
src/backend/api/routers/measurements.py(~362-366): deviazione"NaN"quandom.value is None, altrimenti come oggi (vuota sedeviationNone).src/backend/services/production_export_service.py(~163): stessa regola. Controllasrc/backend/services/report_service.py(~431): se c'è la deviazione, stessa regola.TEST: nel test CSV esistente di #118 (
src/backend/tests/test_nan_measurements.py) asserisci anche la deviazioneNaN; idem per l'export di produzione se ha già un test con NaN (altrimenti aggiungine uno breve sullo stile del file).#125 — test
src/backend/tests/test_vision_execute.py:219: rinomina intest_a_nan_quote_needs_supervisor_authorisation, docstring: la quota NaN è un fail come gli altri e chiede il capoturno (pending_authorisation), la prossima acquisizione non è bloccata. Aggiungi l'assert che prova l'ultima frase: una secondaPOST /api/vision/executesullo stesso task risponde 200 (il fixtureworker_saysè già lì).src/backend/tests/test_migrations.pyclasseTestMeasurementValueNullableMigration: nuovo testtest_022_keeps_rows: upgrade a021_task_acquisition, inserisci 3 righe inmeasurementscon sqlite3 (colonne NOT NULL senza default riempite come fa lo scriptC:/Users/Adriano/AppData/Local/Temp/claude/D--Sorgenti-AI-OS/e91af050-3fbb-422c-b846-0ae1addac919/scratchpad/mig_check.py, da leggere), upgrade head → stesso conteggio e somma divalue, stessi nomi di indici,pragma integrity_check= ok, una riga convalue NULLaccettata.NON TOCCARE:
templates/measure/task_execute.html,static/js/image_viewer.js,static/js/save_image.js,templates/maker/task_editor.html,static/js/dxf_recipe_wizard.js,scripts/, il blocco di tolleranza (pending_authorisation, decisione: la quota NaN resta un fail che chiede il capoturno).🔵 daitarn — preso in carico 2026-10-28T21:01:50Z
ramo:
lavoro/daitarn· capacità: build-windows, gpu🤖 goldrake — liberata nessun segno di daitarn da 6.1 h — 2026-10-29T03:08:05Z
Soluzione
Test rinominati (la quota NaN chiede il capoturno) e migrazione 022 provata su un DB con righe esistenti, che restano. Commit
17ea010(unionef44b578). Ramo lavoro/daitarn-tmf-dxfcal @5897a9e. Deploy su TMF-FIERA (DESKTOP-RABEHJJ) 29/10/2026 08:53 con dep118.ps1: 26 file, hash SHA256 uguali al manifesto, 4 porte su in 24 s, worker ok, frontend 200; backup in C:\Tielogic\backup\pre-118.