Normalizza il suffisso #AF di ConfigName; documenta il limite sulle family table di assiemi

Test end-to-end su un albero reale (9284218024b.asm, confrontato con la sua
BOM Creo di riferimento tramite scripts/CreoBom.cs) oltre gli 8 campioni usati
per il reverse engineering iniziale.

Trovato: i componenti creati da un pattern/array feature hanno un ConfigName
con suffisso "<codice>#AF<n>" (n = indice nel pattern), non un'istanza di
family table vera - la BOM di Creo lo ignora e unisce le occorrenze duplicate.
AsmRecordReader ora rimuove questo suffisso prima di usare il nome istanza.

Trovato ma non risolto: un intero ASSIEME (non solo le parti normalizzate)
puo' avere una family table, risolta da Creo con un meccanismo diverso da
ConfigName (non decodificato). AsmRecordReader non lo rileva e non lancia
eccezione in questo caso: il fallback automatico di Form1 non scatta, e il
risultato puo' essere silenziosamente incompleto. Documentato come limite
noto in formato-asm-record.md e in CLAUDE.md - nessun fix applicato finche'
il meccanismo non e' meglio compreso.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
davideandClaude Sonnet 5 committed 2026-09-21 16:27:15 +02:00
1 parent cce377a091
commit 28a72c80b2
4 files changed
+70 -3

No files matched your search

+19
View File
@@ -68,6 +68,25 @@ public class AsmRecordReaderTests
Assert.Equal("UNI6592", membri[0].Generico);
}
[Fact]
public void Rimuove_il_suffisso_array_feature_dal_nome_istanza()
{
// Regressione: caso reale 9244250136.asm -> ConfigName con suffisso "#AF<n>" per
// componenti creati da un pattern/array feature (id 45 e id 78, entrambi variante
// "_C03" con suffisso diverso "#AF0"/"#AF1"): non un'istanza di family table vera,
// la BOM di Creo mostra il codice pulito e unisce le occorrenze duplicate.
byte[] dati = Asm(2, Bytes(
Membro(45, 2, "9244250136_C03"),
Membro(78, 2, "9244250136_C03")),
extra: Bytes(
ConfigName("9244250136_C03#AF0", idMembro: 45),
ConfigName("9244250136_C03#AF1", idMembro: 78)));
var membri = AsmRecordReader.LeggiMembri(dati);
Assert.All(membri, m => Assert.Equal("9244250136_C03", m.Nome));
}
[Fact]
public void Componente_senza_ConfigName_non_e_toccato_da_istanze_di_altri_membri()
{