nc_program_manager/field-test/CHECKLIST_CRITICITA.md
Trentin Davide 3fd3047584 docs(test): add Mitsubishi field-test kit (scripts + criticità checklist)
Windows batch harness + extensive IT README for on-site Mitsubishi CNC
testing. Covers connect/invia/scarica/validator/offset/param scenarios.
Documents C1-C8 criticità found in code review:
- path mapping mismatch (download /PRG/<int> vs upload relative <path>/<name>)
- Standardize leading \n may trip validator first-line gate
- hardcoded /PRG/ ProgramDirectory, no CLI override
- Int16 -path limit, ASCII-only FTP, plaintext credentials

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 09:03:10 +02:00

5.7 KiB

Checklist criticità — Mitsubishi field test

Punti deboli individuati leggendo il codice (non ancora verificati su HW reale). Sono le aree dove è più probabile trovare problemi sul controllo del cliente. Compila Esito/Note in campo.

Data test: __________ Controllo (modello): __________ IP: __________

Legenda gravità: 🔴 bloccante · 🟠 funzionale · 🟡 robustezza · sicurezza/info


C1 🔴 — Download indirizzabile solo come /PRG/<intero>

Program.Scarica chiama ReadProgramAsync(pathCNC.ToString()); pathCNC è Int16 (-path). ResolvePath (nome=null) costruisce /PRG/ + <intero>.

Conseguenza: non puoi scaricare programmi con nome non numerico (O1234, lettere) né numeri > 32767. Se sul CNC i programmi si chiamano O####, nessuno è scaricabile da CLI.

  • File: Program.cs:106, MitsubishiMachine.cs:203-206, ArgParser.cs:69-71
  • Verifica: dalla ricognizione FTP (§4 README), com'è il nome reale? Prova t02_scarica.bat con PROGNUM = un numero esistente.
  • Esito: ☐ OK ☐ KO — Note: ____________________

C2 🔴 — Upload va in path relativo <path>/<nome>, non /PRG/

Program.Invia chiama WriteProgramAsync(pathCNC.ToString(), prog). In ResolvePath con nome valorizzato, folder = "1" (default) diventa la directory → path FTP 1/O0001, relativo alla home FTP, non /PRG/O0001.

Il download (C1) invece legge da /PRG/. Upload e download usano cartelle diverse → il roundtrip da CLI non torna.

  • File: Program.cs:206, MitsubishiMachine.cs:208-210
  • Verifica: dopo t01_invia_valido.bat, controlla via FTP dove è finito il file (dir /, dir /PRG/, dir /1/). Esegui t07_roundtrip.bat.
  • Esito: ☐ va in /PRG/ ☐ va in <path>/ ☐ upload fallito — Dove: __________

C3 — Nessun flag per la cartella programmi

-path è un intero; non c'è modo di passare un path FTP completo per l'upload (ResolvePath usa folder come directory). La directory /PRG/ è solo il default di config, non raggiungibile in upload via CLI.

  • Verifica: legata a C2/C6. Annota se serve patch per accettare path testuale.
  • Esito/Note: ____________________

C4 🟠\n iniziale inserito da Standardize → possibile blocco validatore

FanucProgram.Standardize (FanucProgram.cs:147-153) inserisce un \n all'inizio del programma se non presente. Il validatore controlla che lines[0] (prima riga) sia O####: con il \n iniziale la prima riga diventa vuota → errore "First line must be O####" → upload bloccato -204.

Conseguenza: anche un file NC corretto (O0001_valid.nc) potrebbe essere rifiutato dal validatore quando passa per il flusso CLI Invia.

  • File: FanucProgram.cs:147-153, NcProgramValidator.cs:39-46
  • Verifica: t01_invia_valido.bat → esce 0 o -204? Guarda nel log il messaggio del validatore. Questo è il test più importante.
  • Esito: ☐ upload OK ☐ -204 first line — Messaggio: ____________________

C5 🟠 — File scaricato in formato wrapper, non NC grezzo

Scarica salva programma.ToString()

program:{
<contenuto>
}
tooloffsetdata:{
}
workzerooffset:{
}

Il file su disco non è NC puro: ha l'involucro program:{...} e blocchi offset vuoti. Va bene per re-import nello stesso tool, ma non è apribile direttamente come programma macchina.

  • File: Program.cs:158, FanucProgram.cs:185-190
  • Verifica: apri results\downloaded.txt dopo t02. Formato atteso wrapper.
  • Esito/Note: ____________________

C6 🔴ProgramDirectory hardcoded /PRG/

MitsubishiConnectionConfig.ProgramDirectory = "/PRG/", nessun override CLI. Il Connect fa LIST /PRG/: se il controllo del cliente usa una cartella diversa (o root diversa), Connect fallisce -201 anche con IP/credenziali corretti, e comunque non si può leggere/scrivere altrove.

  • File: MitsubishiConnectionConfig.cs:13, MitsubishiFtpClient.cs:23, MitsubishiMachine.cs:47
  • Verifica: dalla ricognizione FTP, la cartella reale è /PRG/? Se no → bloccante, serve patch per rendere la dir configurabile.
  • Esito: ☐ /PRG/ esiste ☐ dir diversa: __________

C7 🟡-azione mancante → NullReferenceException

ArgParser.cs:22-23: se -azione= assente, Find ritorna null e .Substring(8) solleva NRE. Gestita nel try di Main → esce -101 (non -102). Comportamento accettabile ma il messaggio è generico.

  • File: ArgParser.cs:22-23, Program.cs:18-29
  • Verifica: t06_parametri_mancanti.bat caso (a) → -101.
  • Esito: ☐ -101 come atteso — Note: ____________________

C8 — FTP in chiaro (credenziali sniffabili)

MitsubishiFtpClient.cs:58-68: ftp:// con NetworkCredential, nessun TLS. Trasferimento ASCII (UseBinary=false). Credenziali e programmi in chiaro sulla rete. Inoltre l'encoding ASCII corrompe caratteri non-ASCII (commenti accentati).

  • File: MitsubishiFtpClient.cs:42-48, 58-68
  • Verifica: confermare col cliente che la rete officina è isolata/affidabile. Provare un commento con carattere accentato (-commento=PROVAÀ) e vedere se arriva corrotto.
  • Esito/Note: ____________________

Riepilogo esiti

ID Gravità Tema Esito
C1 🔴 download solo /PRG/<intero>
C2 🔴 upload path relativo
C3 no flag cartella
C4 🟠 \n → blocco validatore
C5 🟠 file scaricato wrapper
C6 🔴 /PRG/ hardcoded
C7 🟡 NRE su -azione
C8 FTP chiaro / ASCII

Note generali / altri problemi riscontrati: