Integra il parser esatto del .asm nella GUI (fase 4 e 5)

AsmRecordReader (spostato da scripts/CreoBom.cs nel progetto principale,
unica fonte di verita' condivisa con lo script via #:project) sostituisce
AssemblyComponentScanner in Form1.RisolviAlberoComponenti (fase "Trova
componenti referenziati") e AssiemeCompleto (fase "Verifica completezza"):
legge esattamente la sezione "members" del binario invece di contare
occorrenze testuali, eliminando i falsi positivi/negativi noti dell'euristica
(riferimenti fantasma, placement senza suffisso, ecc.).

Se un file non rispetta il formato validato (InvalidDataException, coperto
solo dagli 8 campioni usati per il reverse engineering) Form1 ripiega
sull'euristica di AssemblyComponentScanner, che resta quindi come fallback
e come fonte di verita' per gli script BomViaDb.cs/ExtractCreoStrings.cs.

Aggiunti test per AsmRecordReader (fixture binarie costruite a mano: lettura
membri, risoluzione ConfigName, conteggio disallineato, sezione assente).
Aggiornata la documentazione (CLAUDE.md, docs/architettura.md,
docs/formato-asm.md, docs/formato-asm-record.md) di conseguenza.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
davideandClaude Sonnet 5 committed 2026-09-21 16:14:00 +02:00
1 parent 60dfd26e8b
commit cce377a091
8 files changed
+363 -163

No files matched your search

+18 -12
View File
@@ -59,13 +59,16 @@ designer visuale):
3. **Crea cartella raw** — `TrovaPercorsiCad` + `CopiaFileTrovati` (parallela, vedi
`docs/copia-raw-parallela.md`) copiano in `raw/` i file CAD dei componenti del CSV trovati
nell'indice.
4. **Trova componenti referenziati** — `AssemblyComponentScanner` legge euristicamente i
`.asm` in `raw/` per risolvere ricorsivamente sotto-assiemi/parti (`RisolviAlberoComponenti`),
copiandoli anch'essi in `raw/`. Euristica e falsi positivi noti in `docs/formato-asm.md`.
4. **Trova componenti referenziati** — legge i `.asm` in `raw/` per risolvere ricorsivamente
sotto-assiemi/parti (`RisolviAlberoComponenti`), copiandoli anch'essi in `raw/`. Usa
`AsmRecordReader` (parser esatto dei record binari, `docs/formato-asm-record.md`) e ripiega
su `AssemblyComponentScanner` (euristica testuale, `docs/formato-asm.md`) solo se il file
non rispetta il formato validato (`InvalidDataException`).
5. **Verifica completezza** — mostra i `.asm` della distinta già in `raw/`, trascinabili su
Creo per l'esportazione STEP (Distributed Batch, manuale, fuori dall'app); "Verifica
completezza assiemi" controlla ricorsivamente sull'indice (non su `raw/`) se tutti i
sotto-componenti di ogni assieme sono presenti.
completezza assiemi" controlla ricorsivamente sull'indice (non su `raw/`, stessa
`AsmRecordReader`/fallback della fase 4) se tutti i sotto-componenti di ogni assieme sono
presenti.
## Script standalone (`scripts/`)
@@ -74,10 +77,13 @@ lanciati dalla root del repo — **non** da dentro `PrepStep/`, che ha un `.cspr
`dotnet run` lì avvia la GUI vera invece dello script). Elenco e dettaglio di ciascuno in
`docs/architettura.md`.
Il pattern da preservare: `ExtractCreoStrings.cs`/`BomViaDb.cs` referenziano
`PrepStep/PrepStep.csproj` via `#:project` invece di duplicare l'euristica di
estrazione/placement, che vive **solo** in `PrepStep/AssemblyComponentScanner.cs` — un'unica
fonte di verità condivisa da GUI e script (vedi `docs/formato-asm.md` per l'euristica e i
falsi positivi noti). `CreoBom.cs` è l'eccezione deliberata: legge la struttura a record del
binario invece di contare occorrenze testuali (`docs/formato-asm-record.md`), non passa da
`AssemblyComponentScanner`/`cad_index.db` e non la sostituisce nella GUI.
Il pattern da preservare: gli script referenziano `PrepStep/PrepStep.csproj` via `#:project`
invece di duplicare la logica di lettura dei `.asm`, che vive **solo** nel progetto
principale — un'unica fonte di verità condivisa da GUI e script. Due famiglie distinte, non
intercambiabili:
- `ExtractCreoStrings.cs`/`BomViaDb.cs` usano `AssemblyComponentScanner` (euristica testuale,
`docs/formato-asm.md`) e risolvono i sottoassiemi contro `cad_index.db`.
- `CreoBom.cs` usa `AsmRecordReader` (parser esatto dei record binari,
`docs/formato-asm-record.md`, condiviso con la GUI in fase 4/5) e risolve i sottoassiemi
cercandoli in cartelle locali (`-p`), non contro `cad_index.db`.