CompareDxf: le ricette TMF scrivono pose_search=quarter #127

Open
opened 2026-11-06 10:32:41 +00:00 by Adriano · 4 comments
Owner

COSA: dopo gitea:Adriano/TieVision-Core#343, in src/vision/costruttori.py (_graph, dove si costruisce il CompareDxf), scrivere pose_search="quarter" nei values del CompareDxf; poi rigenerare le ricette TMF esistenti.
PERCHÉ: decisione di Adriano del 06/11/2026. In Core il default di pose_search resta "none", così le ricette esistenti non cambiano. TMF aggancia il pezzo con LocateBlob, che normalizza l'angolo in (-90, 90]: con il pezzo ruotato di 180° o ±120° il disegno finisce capovolto. Su PR165 sider_3_1 oggi i punti in banda sono 3,3%; con flip/quarter salgono a circa 96%.
CRITERIO DI FATTO:

  • una ricetta TMF nuova su un pezzo ruotato di 180° dà points_in_pct >= 95, uguale al pezzo dritto;
  • le ricette TMF già in uso sono rigenerate.
    DIPENDE DA: merge di Core#343 su main di Core e bump di Core in TMF. Specchiato fuori (decisione di Adriano).
COSA: dopo gitea:Adriano/TieVision-Core#343, in src/vision/costruttori.py (_graph, dove si costruisce il CompareDxf), scrivere pose_search="quarter" nei values del CompareDxf; poi rigenerare le ricette TMF esistenti. PERCHÉ: decisione di Adriano del 06/11/2026. In Core il default di pose_search resta "none", così le ricette esistenti non cambiano. TMF aggancia il pezzo con LocateBlob, che normalizza l'angolo in (-90, 90]: con il pezzo ruotato di 180° o ±120° il disegno finisce capovolto. Su PR165 sider_3_1 oggi i punti in banda sono 3,3%; con flip/quarter salgono a circa 96%. CRITERIO DI FATTO: - una ricetta TMF nuova su un pezzo ruotato di 180° dà points_in_pct >= 95, uguale al pezzo dritto; - le ricette TMF già in uso sono rigenerate. DIPENDE DA: merge di Core#343 su main di Core e bump di Core in TMF. Specchiato fuori (decisione di Adriano).
Adriano added the sviluppo label 2026-11-06 10:32:41 +00:00
Author
Owner

ANALISI (Opus 5.5, passo 1 di 3)
RIF: gitea:Adriano/TieMeasureFlow#127
COSA: il wizard DXF di TMF scrive pose_search="quarter" nel CompareDxf. Prima il submodule vendor/visionsuite passa da 2e73691 a TieVision-Core main ffb93b4: pose_search esiste solo da gitea:Adriano/TieVision-Core#343.
RAMO: lavoro/daitarn-tmf-127, da origin/V3.0.0 5738920; worktree C:/Users/Adriano/lavoro/TieMeasureFlow-127.
U1 — bump del submodule (regola in CLAUDE.md, sezione «Visione (V3.0.0)»):

  • base prima di toccare: uv run --python 3.13 --extra vision --extra vision-worker --extra dev pytest src/vision/tests src/vision_worker/tests -q -p no:cacheprovider su 5738920 con vendor a 2e73691; contare passed/failed/skipped.
  • git -C vendor/visionsuite fetch origin && git -C vendor/visionsuite checkout ffb93b4; se uv lock cambia, il lock si committa nello stesso commit.
  • CLAUDE.md:292 «Pin attuale: 2e73691» diventa «Pin attuale: ffb93b4».
  • stessa suite dopo il bump. Fra 2e73691 e ffb93b4 Core cambia di proposito: read_image a 16 bit (#336), entità aperte unite nel CompareDxf (#338, dxf_join_tol_mm), passo d'angolo del MatchPattern (#344), editor DXF di ATD (#304), overlay (#337, #339, #341). Un test che diventa rosso col bump si riporta con nome, valore atteso e valore ottenuto. Non si adattano le attese senza averle elencate nel rapporto.
    U2 — src/vision/costruttori.py:_graph (righe 73-87), una modifica:
  • nei values del CompareDxf si aggiunge "pose_search": "quarter", con commento #127 (decisione di Adriano del 06/11/2026; LocateBlob normalizza l'angolo in (-90, 90], quindi il pezzo a 180° o ±120° viene capovolto; lo specchiato resta fuori).
  • build_dxf_compare non cambia: il ciclo sugli anchor (#86) prova ogni anchor con il grafo che contiene già quarter.
    TEST:
  • src/vision/tests/test_costruttori.py, nuovo test_ricetta_dxf_su_pezzo_capovolto_di_180: sample.dxf è simmetrico a 180° (rettangolo con foro centrale), quindi non serve. Si scrive in tmp_path, con ezdxf, un DXF asimmetrico: rettangolo 200x100 mm più un foro di raggio 10 mm fuori centro (per esempio a x=+60 mm), e una scena che lo disegna come a_scene. La ricetta si costruisce sulla scena a 0°, poi si esegue run_graph sulla scena ruotata di 180°: points_in_pct >= 95 e |pct_180 - pct_0| <= 2. Lo stesso test, con pose_search tolto dal grafo (o "none"), deve dare un valore basso: si misura e si riporta, a prova che il test vede il capovolgimento.
  • test di _graph: values["pose_search"] == "quarter" quando anchor non è None.
  • prova reale fuori CI, riportata nel rapporto e non committata: PR165, foto D:/Sorgenti/AI-OS/data/tmp/menoncin-foto/raddr/sider_3_1.png, DXF D:/Sorgenti/AI-OS/data/tmp/menoncin-foto/dxf/PR165L25S235JR_profilo.dxf, px_per_mm 71.111; build_dxf_compare sulla foto dritta, poi run_graph sulla foto ruotata di 180° (cv2.rotate): atteso circa 96% contro circa 3% senza quarter (misure di TieVision-Core#343). Si riporta anche il tempo di build_dxf_compare prima e dopo U2.
  • suite della visione, come in U1, alla fine: 0 failed nuovi rispetto alla base.
    NON TOCCARE: chiudi_contorni (#103), _candidate_anchors (#86), i values del LocateBlob, src/vision_worker, src/backend, il codice dentro vendor/visionsuite (cambia solo il puntatore).
    FUORI DA QUESTO PASSO: rigenerare le ricette TMF già in uso. Lo decide Adriano, perché tocca i DB installati (demo sulla VPS e PC).
ANALISI (Opus 5.5, passo 1 di 3) RIF: gitea:Adriano/TieMeasureFlow#127 COSA: il wizard DXF di TMF scrive pose_search="quarter" nel CompareDxf. Prima il submodule vendor/visionsuite passa da 2e73691 a TieVision-Core main ffb93b4: pose_search esiste solo da gitea:Adriano/TieVision-Core#343. RAMO: lavoro/daitarn-tmf-127, da origin/V3.0.0 5738920; worktree C:/Users/Adriano/lavoro/TieMeasureFlow-127. U1 — bump del submodule (regola in CLAUDE.md, sezione «Visione (V3.0.0)»): - base prima di toccare: `uv run --python 3.13 --extra vision --extra vision-worker --extra dev pytest src/vision/tests src/vision_worker/tests -q -p no:cacheprovider` su 5738920 con vendor a 2e73691; contare passed/failed/skipped. - `git -C vendor/visionsuite fetch origin && git -C vendor/visionsuite checkout ffb93b4`; se `uv lock` cambia, il lock si committa nello stesso commit. - CLAUDE.md:292 «Pin attuale: 2e73691» diventa «Pin attuale: ffb93b4». - stessa suite dopo il bump. Fra 2e73691 e ffb93b4 Core cambia di proposito: read_image a 16 bit (#336), entità aperte unite nel CompareDxf (#338, dxf_join_tol_mm), passo d'angolo del MatchPattern (#344), editor DXF di ATD (#304), overlay (#337, #339, #341). Un test che diventa rosso col bump si riporta con nome, valore atteso e valore ottenuto. Non si adattano le attese senza averle elencate nel rapporto. U2 — src/vision/costruttori.py:_graph (righe 73-87), una modifica: - nei values del CompareDxf si aggiunge `"pose_search": "quarter"`, con commento #127 (decisione di Adriano del 06/11/2026; LocateBlob normalizza l'angolo in (-90, 90], quindi il pezzo a 180° o ±120° viene capovolto; lo specchiato resta fuori). - build_dxf_compare non cambia: il ciclo sugli anchor (#86) prova ogni anchor con il grafo che contiene già quarter. TEST: - src/vision/tests/test_costruttori.py, nuovo test_ricetta_dxf_su_pezzo_capovolto_di_180: sample.dxf è simmetrico a 180° (rettangolo con foro centrale), quindi non serve. Si scrive in tmp_path, con ezdxf, un DXF asimmetrico: rettangolo 200x100 mm più un foro di raggio 10 mm fuori centro (per esempio a x=+60 mm), e una scena che lo disegna come a_scene. La ricetta si costruisce sulla scena a 0°, poi si esegue run_graph sulla scena ruotata di 180°: points_in_pct >= 95 e |pct_180 - pct_0| <= 2. Lo stesso test, con pose_search tolto dal grafo (o "none"), deve dare un valore basso: si misura e si riporta, a prova che il test vede il capovolgimento. - test di _graph: values["pose_search"] == "quarter" quando anchor non è None. - prova reale fuori CI, riportata nel rapporto e non committata: PR165, foto D:/Sorgenti/AI-OS/data/tmp/menoncin-foto/raddr/sider_3_1.png, DXF D:/Sorgenti/AI-OS/data/tmp/menoncin-foto/dxf/PR165L25S235JR_profilo.dxf, px_per_mm 71.111; build_dxf_compare sulla foto dritta, poi run_graph sulla foto ruotata di 180° (cv2.rotate): atteso circa 96% contro circa 3% senza quarter (misure di TieVision-Core#343). Si riporta anche il tempo di build_dxf_compare prima e dopo U2. - suite della visione, come in U1, alla fine: 0 failed nuovi rispetto alla base. NON TOCCARE: chiudi_contorni (#103), _candidate_anchors (#86), i values del LocateBlob, src/vision_worker, src/backend, il codice dentro vendor/visionsuite (cambia solo il puntatore). FUORI DA QUESTO PASSO: rigenerare le ricette TMF già in uso. Lo decide Adriano, perché tocca i DB installati (demo sulla VPS e PC).
Adriano added the assegnata:daitarn label 2026-11-06 13:06:16 +00:00
Author
Owner

🔵 daitarn — preso in carico 2026-11-06T13:06:12Z
ramo: lavoro/daitarn · capacità: build-windows, gpu

🔵 daitarn — **preso in carico** 2026-11-06T13:06:12Z ramo: `lavoro/daitarn` · capacità: build-windows, gpu
Author
Owner

ESITO: bloccato
RIF: gitea:Adriano/TieMeasureFlow#127
COSA: codice fatto e su V3.0.0 1dd4b0a; resta il secondo criterio (ricette TMF in uso rigenerate), che spetta ad Adriano.
FILE: vendor/visionsuite — da 2e73691 a TieVision-Core 9eb6f4c (1425730 a ffb93b4, 1dd4b0a a 9eb6f4c, cambia solo vs-demo-api); CLAUDE.md:292 — «Pin attuale: 9eb6f4c»; uv.lock — zxing-cpp 3.1.1 (1425730)
FILE: src/vision/costruttori.py:83-85 — "pose_search": "quarter" nei values del CompareDxf (271ce73)
FILE: src/vision/tests/test_costruttori.py — test_ricetta_dxf_su_pezzo_capovolto_di_180, test_ricetta_dxf_senza_quarter_il_pezzo_a_180_e_capovolto, test_graph_scrive_pose_search_quarter_nel_compare_dxf (d8bca53, 1bd6c6b)
DEVIAZIONE: il pezzo di prova è a L (L_PROFILE_MM), non il rettangolo con foro fuori centro dell'analisi. Con il rettangolo, l'ICP di quarter si aggancia al contorno esterno, che è simmetrico, e si ferma al 67%. È un limite di Core#343 sui pezzi con il contorno esterno simmetrico: non è un difetto di TMF.
PROVA: VERIFICATO suite visione uv run --python 3.13 --extra vision --extra vision-worker --extra dev pytest src/vision/tests src/vision_worker/tests -q -p no:cacheprovider → base 60 passed; dopo il bump 60 passed; dopo U2 63 passed; con 9eb6f4c 63 passed in 12 s.
PROVA: VERIFICATO pezzo a L a 180°: senza quarter 2,84%, con quarter ≥95%.
PROVA: VERIFICATO PR165 sider_3_1, px_per_mm 71,111: con quarter dritto 100% e a 180° 100%. Build della ricetta 4,0 s contro 2,7 s.
MANCA: rigenerare le ricette DXF già in uso: DB della demo sulla VPS e dei PC cliente. Lo decide Adriano.
ATTESA: ok di Adriano per rigenerare le ricette in uso e fare il deploy di V3.0.0 1dd4b0a.

ESITO: bloccato RIF: gitea:Adriano/TieMeasureFlow#127 COSA: codice fatto e su V3.0.0 1dd4b0a; resta il secondo criterio (ricette TMF in uso rigenerate), che spetta ad Adriano. FILE: vendor/visionsuite — da 2e73691 a TieVision-Core 9eb6f4c (1425730 a ffb93b4, 1dd4b0a a 9eb6f4c, cambia solo vs-demo-api); CLAUDE.md:292 — «Pin attuale: 9eb6f4c»; uv.lock — zxing-cpp 3.1.1 (1425730) FILE: src/vision/costruttori.py:83-85 — "pose_search": "quarter" nei values del CompareDxf (271ce73) FILE: src/vision/tests/test_costruttori.py — test_ricetta_dxf_su_pezzo_capovolto_di_180, test_ricetta_dxf_senza_quarter_il_pezzo_a_180_e_capovolto, test_graph_scrive_pose_search_quarter_nel_compare_dxf (d8bca53, 1bd6c6b) DEVIAZIONE: il pezzo di prova è a L (L_PROFILE_MM), non il rettangolo con foro fuori centro dell'analisi. Con il rettangolo, l'ICP di quarter si aggancia al contorno esterno, che è simmetrico, e si ferma al 67%. È un limite di Core#343 sui pezzi con il contorno esterno simmetrico: non è un difetto di TMF. PROVA: VERIFICATO suite visione `uv run --python 3.13 --extra vision --extra vision-worker --extra dev pytest src/vision/tests src/vision_worker/tests -q -p no:cacheprovider` → base 60 passed; dopo il bump 60 passed; dopo U2 63 passed; con 9eb6f4c 63 passed in 12 s. PROVA: VERIFICATO pezzo a L a 180°: senza quarter 2,84%, con quarter ≥95%. PROVA: VERIFICATO PR165 sider_3_1, px_per_mm 71,111: con quarter dritto 100% e a 180° 100%. Build della ricetta 4,0 s contro 2,7 s. MANCA: rigenerare le ricette DXF già in uso: DB della demo sulla VPS e dei PC cliente. Lo decide Adriano. ATTESA: ok di Adriano per rigenerare le ricette in uso e fare il deploy di V3.0.0 1dd4b0a.
Adriano added attesa:adriano and removed assegnata:daitarn labels 2026-11-06 13:23:39 +00:00
Author
Owner

🔵 daitarn — rilasciata 2026-11-06T13:23:39Z

🔵 daitarn — **rilasciata** 2026-11-06T13:23:39Z
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Adriano/TieMeasureFlow#127