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

+17 -16
View File
@@ -1,23 +1,24 @@
# Come leggere un .asm Creo per dedurne i componenti
Il file `.asm` di Pro/ENGINEER-Creo è un formato binario proprietario, non
documentato pubblicamente. Questo documento descrive l'euristica testuale usata da
`AssemblyComponentScanner.cs` (GUI, fase "Trova componenti referenziati"/"Verifica
completezza") e dagli script che risolvono l'albero componenti contro `cad_index.db`
(`ExtractCreoStrings.cs`, `BomViaDb.cs`): conta le occorrenze di stringhe candidate nel
testo binario, validata a mano confrontando l'output con l'albero reale mostrato da Creo.
Riassume cosa si è osservato e i suoi limiti, in particolare i falsi positivi che
un conteggio testuale non può escludere con certezza (riferimenti fantasma, componenti
soppressi con placement residuo — vedi sotto).
documentato pubblicamente. Questo documento descrive l'euristica testuale di
`AssemblyComponentScanner.cs`: conta le occorrenze di stringhe candidate nel testo binario,
validata a mano confrontando l'output con l'albero reale mostrato da Creo. Riassume cosa si
è osservato e i suoi limiti, in particolare i falsi positivi che un conteggio testuale non
può escludere con certezza (riferimenti fantasma, componenti soppressi con placement
residuo — vedi sotto).
Un reverse engineering successivo ha invece decodificato la **struttura a record** del
file (non solo pattern testuali): legge esattamente la sezione `members` di un assieme,
senza contare occorrenze né rischiare i falsi positivi descritti in questo documento.
Implementato in [`scripts/CreoBom.cs`](../scripts/CreoBom.cs), documentato in
[`formato-asm-record.md`](formato-asm-record.md). Resta però uno script di analisi
indipendente: legge solo `.asm` locali dato un percorso di ricerca esplicito (non
`cad_index.db`), e non è integrato in `AssemblyComponentScanner`/nella GUI, che
continuano a usare l'euristica descritta qui.
Un reverse engineering successivo ha decodificato la **struttura a record** del file (non
solo pattern testuali): legge esattamente la sezione `members` di un assieme, senza contare
occorrenze né rischiare i falsi positivi descritti in questo documento. Implementato in
`PrepStep/AsmRecordReader.cs`, documentato in [`formato-asm-record.md`](formato-asm-record.md).
È il metodo **preferito** in GUI (fase "Trova componenti referenziati"/"Verifica
completezza", `Form1.EstraiCodiciReferenziati`) e nello script `CreoBom.cs`:
`AssemblyComponentScanner` (l'euristica di questo documento) resta come **fallback**, usato
solo quando `AsmRecordReader` lancia `InvalidDataException` (file che non rispetta il
formato validato dal reverse engineering — copertura limitata agli 8 campioni disponibili al
momento), e come fonte di verità per gli script `ExtractCreoStrings.cs`/`BomViaDb.cs`, che
risolvono l'albero contro `cad_index.db` invece che tramite un percorso di ricerca locale.
## Struttura osservata