# Phase 16-02 — Fagor Fixup (Post-Review)

## Origine

Code review post-implementazione v0.6 Fagor Support ha identificato:

**Critical:**
1. `NcProgramValidator` case Fagor rifiuta `.` nel nome → default `ProgramExtension = ".nc"` contraddice regola validator
2. (Pre-existing, deferito) `Program.Invia` accoppia `FanucProgram` parsing a tutti i produttori

**Major:**
1. (Deferito) `ResolvePath` NRE su null folder
2. (Deferito) Validator riceve `path` se `program.Name` null
3. `CncMachineFactoryTests` manca case Fagor
4. Behavior change Heidenhain/Siemens (esenzione check generic) non lockato in test
5. Letterali `ñ` in `NcProgramValidator.cs` rischio codepage Windows non-UTF8

## Scope

Fix immediato per:
- Critical #1 — bug introdotto v0.6
- Major #3 — test mancante
- Major #4 — lock comportamento con test
- Major #5 — escape `ñ` → `ñ`

Deferiti a ISS:
- Critical #2 → ISS-013
- Major #1 → ISS-014
- Major #2 → ISS-016

## Tasks

1. Riscrittura case Fagor in `ValidateName`: split stem/extension, whitelist su stem
2. Escape `'ñ'` → `'ñ'` (codice + messaggio errore)
3. 4 nuovi test Fagor coverage estensioni
4. 6 nuovi test lock Siemens/Heidenhain
5. `Create_Fagor_ReturnsFagorMachine` in `CncMachineFactoryTests`
6. ISSUES.md updated con ISS-012..ISS-017

## Files modificati

- `Cnc/NcProgramValidator.cs`
- `NcProgramManager.Tests/Unit/NcProgramValidatorTests.cs`
- `NcProgramManager.Tests/Unit/CncMachineFactoryTests.cs`
- `.paul/ISSUES.md`
- `.paul/STATE.md`
- `.paul/ROADMAP.md`
- `.paul/paul.json`
- `.paul/phases/16-fagor-ftp/16-02-PLAN.md` (questo file)
- `.paul/phases/16-fagor-ftp/16-02-SUMMARY.md`

## Vincoli

- Nessuna modifica `.csproj` (file già listati in v0.6 16-01)
- Pattern Siemens preservato come reference (no cross-impact)
- Tests esistenti pre-refactor preservati o migrati esplicitamente
