Add family_name and bracket-adjacent placement signals for .asm scanning

Two more real placement forms found by comparing against Creo BOM reports:

- A sub-assembly can be referenced only through a "family_name\0<code>\0"
  metadata field instead of a textual "Componente ID" placement or the
  doubled-NUL pattern (case 9284202452 inside 9284208188_D400.asm, which
  contains 9284202452_C01/_C02/_C03 - previously dropped entirely, along
  with its three children).
- A bare numeric code immediately followed by a family-table bracket
  (<code><GENERIC>, e.g. bearing instances like 2510060303<CUSCI_ACBB7>)
  is a real reference to that instance, even though only the generic file
  is indexed on disk. Previously the instance code silently vanished before
  ever reaching the DB lookup; now it survives placement filtering and ends
  up in the "scartati" (discarded) list instead, so it's traceable rather
  than invisible.

docs/formato-asm.md documents both, bringing the total to four recognized
placement forms.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
davideandClaude Sonnet 5 committed 2026-09-17 16:14:52 +02:00
1 parent a7e0df0247
commit e7b5d85f6b
3 files changed
+61 -17

No files matched your search

+23 -4
View File
@@ -73,7 +73,7 @@ non essendo un componente. A differenza del proprio codice, non è noto a
priori: dipende da dove/come il file è stato aperto o da chi lo referenzia,
quindi non si può escludere per confronto diretto come per il caso
precedente. La regola generale che discrimina questo caso: un componente
vero compare **sempre** anche dentro un vero placement, in una delle due
vero compare **sempre** anche dentro un vero placement, in una delle quattro
forme osservate nel binario:
- `Componente ID N (<codice>...)`/`Component id N (<codice>...)` (la stringa
@@ -82,13 +82,32 @@ forme osservate nel binario:
- il codice ripetuto due volte di seguito separato da un singolo byte NUL,
`<codice>\0<codice>\0` (osservato per componenti di family table non-UNI,
es. cuscinetti `CUSCI_...` - vedi sotto; il placement testuale
"Componente ID" non li copre, ma questa coppia doppia sì).
"Componente ID" non li copre, ma questa coppia doppia sì);
- il campo `family_name\0<codice>\0` (con `name` e `family_name` uguali,
entrambi pari al codice). Osservato una sola volta per file, su un
sotto-assieme referenziato come family table generica invece che con un
placement testuale esplicito - caso `9284202452` dentro
`9284208188_D400.asm`: il sotto-assieme (che contiene a sua volta
`9284202452_C01/_C02/_C03`) non ha nessun `Componente ID (...)` né coppia
NUL, solo questo campo `family_name`. Verificato su 5 file diversi
(`9284208188_D400/D600/D610/D620/D630.asm`): l'unica occorrenza di
`family_name\0<codice>\0` in ciascuno corrisponde sempre a un componente
reale confermato dalla BOM Creo, mai al riferimento fantasma verso l'alto;
- il codice seguito immediatamente da un bracket, `<codice><GENERICO>`
(senza NUL né spazio in mezzo) - l'istanza di una family table non-UNI
(es. `2510060303<CUSCI_ACBB7>`, un cuscinetto, confermato aprendo l'assieme
in Creo: descrizione "CUSC.OBL.SFERE 2COR 17X40"). Il codice dell'istanza
non è mai indicizzato a sé sulla share (solo il generico tra `<` e `>` lo
è - stesso meccanismo di UNI, vedi sotto), quindi anche riconosciuto come
placement reale finisce comunque negli "scartati" alla ricerca nel DB - ma
in modo tracciabile, invece di sparire in silenzio prima ancora di essere
cercato.
Un riferimento incidentale al nome di un altro assieme, anche se ripetuto più
volte, non compare mai in nessuna delle due forme. `scripts/ExtractCreoStrings.cs`
volte, non compare mai in nessuna delle quattro forme. `scripts/ExtractCreoStrings.cs`
e `AssemblyComponentScanner.cs` applicano questa regola ai codici "nudi" (senza
suffisso `_...` e senza bracket family table - vedi sotto perché limitata a
questi): un codice ripetuto ma mai trovato dentro un placement/coppia NUL
questi): un codice ripetuto ma mai trovato dentro uno dei quattro segnali
viene scartato. Questo NON copre i casi fantasma/soppressi sotto, che hanno un
placement sintatticamente identico a uno vero e restano quindi indistinguibili
a livello testuale.