Aggiungi docs-as-code: indice Diátaxis, nuovi doc e controllo automatico
Nuovi doc: tutorial-primo-giro, risoluzione-problemi, sviluppo, rilascio, glossario e registro delle decisioni (docs/decisioni, 6 ADR). docs/README.md e' l'indice per categoria e la tabella delle fonti uniche; il README di root rimanda a sviluppo/rilascio invece di duplicarli. scripts/CheckDocs.cs verifica link e ancore, <Version> contro CHANGELOG, copertura di architettura.md e presenza di ogni doc nell'indice; .markdownlint-cli2.jsonc configura il lint Markdown. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
5fac2edf52
commit
ccfa00ff52
19 files changed
+557
-86
No files matched your search
@@ -0,0 +1,22 @@
|
||||
# 0001 — Indice dei file in un DB SQLite locale
|
||||
|
||||
**Stato:** accettata
|
||||
|
||||
## Contesto
|
||||
|
||||
La share `X:\` contiene centinaia di migliaia di file (ordine di ~200k righe indicizzate).
|
||||
Cercare un codice direttamente sul disco di rete a ogni distinta è lento: il costo è dominato
|
||||
dalla latenza di rete.
|
||||
|
||||
## Decisione
|
||||
|
||||
Scansionare la share una volta in un DB SQLite locale (`cad_index.db`) e interrogare quello.
|
||||
L'aggiornamento è incrementale (confronto su percorso, dimensione e data), la vista
|
||||
`files_ultima_versione` usa `ROW_NUMBER()` e non un self-join con `GROUP BY`.
|
||||
|
||||
## Conseguenze
|
||||
|
||||
- Le ricerche sono istantanee e non richiedono la share (la copia sì).
|
||||
- L'indice può essere vecchio: per questo la fase 2 ha "Verifica presenza".
|
||||
- Il DB è rigenerabile, quindi non è tracciato in git.
|
||||
- Schema e criteri di pareggio: [`../db-cad-index.md`](../db-cad-index.md).
|
||||
@@ -0,0 +1,18 @@
|
||||
# 0002 — UI WinForms costruita interamente in codice
|
||||
|
||||
**Stato:** accettata
|
||||
|
||||
## Contesto
|
||||
|
||||
L'app è un wizard a 5 fasi con stile condiviso (bottoni, card, barre) e stato comune tra fasi.
|
||||
|
||||
## Decisione
|
||||
|
||||
Nessun designer visuale: `Form1.BuildUi` e i `BuildFase*` costruiscono i controlli, `UiStile`
|
||||
centralizza lo stile. `Form1.Designer.cs` resta lo scheletro del template.
|
||||
|
||||
## Conseguenze
|
||||
|
||||
- Layout e stile modificabili e rivedibili come codice normale (diff leggibili).
|
||||
- Dimensioni con `AutoSize`+`Padding` invece di pixel fissi, per non tagliare il testo.
|
||||
- `Form1.cs` è grande (~1400 righe) perché contiene wizard e logica delle fasi.
|
||||
@@ -0,0 +1,29 @@
|
||||
# 0003 — Parser esatto dei `.asm` con fallback euristico
|
||||
|
||||
**Stato:** accettata
|
||||
|
||||
## Contesto
|
||||
|
||||
Il `.asm` Creo è un binario proprietario non documentato. La prima soluzione, un'euristica
|
||||
testuale (`AssemblyComponentScanner`), contava le occorrenze di stringhe candidate e produceva
|
||||
falsi positivi (riferimenti fantasma, componenti soppressi con placement residuo).
|
||||
|
||||
Inoltre la lista dei componenti della distinta **non coincide** con i file necessari a Creo per
|
||||
aprire l'assieme: ne servono di più (soppressi, riferimenti esterni). Se ne manca uno Creo
|
||||
risponde solo `[-4] Dati di input non completi`.
|
||||
|
||||
## Decisione
|
||||
|
||||
Per reverse engineering si è decodificata la struttura a record (`AsmRecordReader`), validata
|
||||
contro BOM esportate da Creo. È il metodo preferito. L'euristica resta come **fallback** quando
|
||||
il parser lancia `InvalidDataException`, perché la validazione copre solo un campione di file.
|
||||
La fase 4 tiene tre liste separate (distinta, soppressi, riferimenti esterni) con regole di
|
||||
ricorsione diverse.
|
||||
|
||||
## Conseguenze
|
||||
|
||||
- Estrazione esatta sui file che rispettano il formato; nessun falso positivo da conteggio.
|
||||
- Due implementazioni da mantenere, per ora; l'euristica serve anche a due script.
|
||||
- Ogni caso strano diventa un test minimale costruito byte per byte.
|
||||
- Dettagli: [`../formato-asm-record.md`](../formato-asm-record.md),
|
||||
[`../formato-asm.md`](../formato-asm.md).
|
||||
@@ -0,0 +1,27 @@
|
||||
# 0004 — Setup per-utente con DB nella cartella di installazione
|
||||
|
||||
**Stato:** accettata
|
||||
|
||||
## Contesto
|
||||
|
||||
Gli utenti non hanno diritti di amministratore. L'app scrive `cad_index.db` e, di default, la
|
||||
cartella di lavoro accanto all'eseguibile. In `C:\Program Files` non sarebbe scrivibile.
|
||||
|
||||
Prima il DB era scelto dall'utente e ricordato in `ultimo_db.txt`: si finiva con DB diversi tra
|
||||
postazioni e ricerche incoerenti.
|
||||
|
||||
## Decisione
|
||||
|
||||
- Setup Inno Setup 6 con `PrivilegesRequired=lowest`: installa in
|
||||
`%LOCALAPPDATA%\Programs\PrepStep`.
|
||||
- Il DB è sempre `cad_index.db` nella cartella di installazione; "Apri DB..." vale solo per la
|
||||
sessione e nulla viene ricordato.
|
||||
- `AppId` fisso per riconoscere gli aggiornamenti; se l'app è già installata il setup chiede se
|
||||
aggiornare o disinstallare.
|
||||
|
||||
## Conseguenze
|
||||
|
||||
- Nessun admin necessario; aggiornare non tocca DB e impostazioni.
|
||||
- La disinstallazione lascia DB, `raw/`, `step/`, CSV e `%AppData%\PrepStep\`.
|
||||
- In sviluppo il DB è nella cartella di build ([`../db-cad-index.md`](../db-cad-index.md)).
|
||||
- Procedura: [`../rilascio.md`](../rilascio.md).
|
||||
@@ -0,0 +1,22 @@
|
||||
# 0005 — Scegliere la copia di un componente dalla cartella dell'assieme
|
||||
|
||||
**Stato:** accettata
|
||||
|
||||
## Contesto
|
||||
|
||||
Per il 13% dei codici esiste più di una copia sulla share, con contenuto diverso e stessa
|
||||
versione. Il `.asm` non registra quale copia usa. Scegliere a caso, o per data, può mettere in
|
||||
`raw/` un modello diverso da quello atteso: Creo lo carica, i vincoli non si risolvono e
|
||||
l'assieme non si apre, con il solito `[-4]`.
|
||||
|
||||
## Decisione
|
||||
|
||||
`ScegliPerCartella` preferisce la copia nella stessa cartella dell'assieme che la referenzia
|
||||
(replica la regola di Creo) e solo in mancanza ripiega su versione più alta e data più recente.
|
||||
Nella vista `files_ultima_versione` il pareggio è deterministico (`data_modifica` e percorso
|
||||
nell'`ORDER BY`), ma serve solo a non sbagliare a caso.
|
||||
|
||||
## Conseguenze
|
||||
|
||||
- La fase 4 legge `files` (tutte le copie) e non la vista.
|
||||
- Dettaglio e casi reali: [`../formato-asm-record.md`](../formato-asm-record.md) §7.4.
|
||||
@@ -0,0 +1,21 @@
|
||||
# 0006 — Script standalone che referenziano il progetto principale
|
||||
|
||||
**Stato:** accettata
|
||||
|
||||
## Contesto
|
||||
|
||||
Servono strumenti da riga di comando (BOM, query, analisi di binari) senza duplicare la logica di
|
||||
lettura dei `.asm`.
|
||||
|
||||
## Decisione
|
||||
|
||||
Gli script in `scripts/` sono C# file-based apps (.NET 10) che referenziano
|
||||
`PrepStep/PrepStep.csproj` con `#:project`. La logica vive **solo** nel progetto principale: una
|
||||
sola fonte di verità per GUI e script.
|
||||
|
||||
## Conseguenze
|
||||
|
||||
- Si lanciano dalla root del repo; da dentro `PrepStep/` partirebbe la GUI.
|
||||
- Due famiglie non intercambiabili: euristica + DB (`ExtractCreoStrings`, `BomViaDb`) e parser
|
||||
esatto + cartelle locali (`CreoBom`). Vedi [`../architettura.md`](../architettura.md).
|
||||
- `CheckDocs.cs` segue lo stesso schema per i doc.
|
||||
@@ -0,0 +1,14 @@
|
||||
# Registro delle decisioni
|
||||
|
||||
Perché il programma è fatto così. Ogni voce spiega il contesto, la scelta e le conseguenze, così
|
||||
chi ci rimette mano non rifà il ragionamento da zero. Se cambia una scelta non si riscrive la
|
||||
vecchia voce: se ne aggiunge una nuova che la sostituisce.
|
||||
|
||||
| N. | Decisione | Stato |
|
||||
|---|---|---|
|
||||
| [0001](0001-indice-sqlite-locale.md) | Indice dei file in un DB SQLite locale | accettata |
|
||||
| [0002](0002-ui-winforms-in-codice.md) | UI WinForms costruita interamente in codice | accettata |
|
||||
| [0003](0003-parser-esatto-con-fallback.md) | Parser esatto dei `.asm` con fallback euristico | accettata |
|
||||
| [0004](0004-installazione-per-utente.md) | Setup per-utente con DB nella cartella di installazione | accettata |
|
||||
| [0005](0005-copia-nella-cartella-dell-assieme.md) | Scegliere la copia di un componente dalla cartella dell'assieme | accettata |
|
||||
| [0006](0006-script-che-riusano-il-progetto.md) | Script standalone che referenziano il progetto principale | accettata |
|
||||
Reference in new issue
Block a user