---
phase: 10-readme-docs
plan: 01
type: execute
wave: 1
depends_on: []
files_modified:
- README.md
- ~/Documents/mine/c#/LicenseGenerator/README.md
autonomous: true
---
## Goal
Write Italian-language README for both repos: NcProgramManager (operator-facing — what it does, CLI args, license setup) and LicenseGenerator (vendor-facing — key pair generation, license issuance workflow).
## Purpose
Operators and integrators need setup and usage docs in Italian. The license workflow spans both tools, so each README must describe its role in the full chain.
## Output
- `README.md` in NcProgramManager repo root
- `README.md` in LicenseGenerator repo root (`~/Documents/mine/c#/LicenseGenerator/`)
## Project Context
@.paul/PROJECT.md
@.paul/STATE.md
## Source Files
@Licensing/LicenseValidator.cs
@Program.cs
@InputArgs.cs
## AC-1: NcProgramManager README covers all CLI args and license setup
```gherkin
Given an operator reading NcProgramManager/README.md
When they follow the instructions
Then they can place license.lic next to the EXE and run the tool with correct args for their CNC manufacturer
```
## AC-2: LicenseGenerator README covers full vendor license issuance workflow
```gherkin
Given a vendor reading LicenseGenerator/README.md
When they follow the instructions
Then they can run keygen once, get fingerprint from customer machine, sign and deliver license.lic
```
## AC-3: Both READMEs written in Italian
```gherkin
Given either README
When read by an Italian-speaking user
Then all prose, section headers, and instructions are in Italian (technical terms and CLI args remain in English)
```
Task 1: Write NcProgramManager README in Italian
README.md
Create `README.md` at NcProgramManager repo root. Italian prose throughout. Keep CLI args, file names, and code blocks in English.
**Sections:**
**# NcProgramManager**
One-paragraph description: software per trasferire programmi CNC da/verso controller (Fanuc FOCAS, Heidenhain LSV2, Siemens Sinumerik, Mitsubishi FTP). Console EXE Windows, funziona offline.
**## Requisiti**
- Windows (qualsiasi versione che supporti .NET 4.7.2)
- .NET Framework 4.7.2 installato
- File `license.lic` valido (rilasciato dal fornitore)
**## Licenza**
Explain: place `license.lic` in same folder as `NcProgramManager.exe`. Without it, software refuses to start. To obtain license: contact vendor with machine fingerprint (obtained via LicenseGenerator fingerprint command).
**## Utilizzo**
Show CLI arg table:
| Parametro | Valori | Descrizione |
| `-manufacturer=` | `fanuc` / `heidenhain` / `siemens` / `mitsubishi` | Tipo di controller (default: fanuc) |
| `-azione=` | `Scarica` / `Invia` / ... | Azione da eseguire |
| `-ip=` | indirizzo IP | IP del controller CNC |
| `-porta=` | numero porta | Porta di connessione |
| `-username=` | nome utente | Solo per Heidenhain/Siemens/Mitsubishi |
| `-password=` | password | Solo per Heidenhain/Siemens/Mitsubishi |
**## Esempi**
Show 2-3 concrete examples with real-looking args for Fanuc and Heidenhain.
**## Controller supportati**
Brief table: Fanuc (FOCAS, 32-bit DLL), Heidenhain (LSV2, porta 19000), Siemens Sinumerik (FTP, `/_N_MPF_DIR/`), Mitsubishi (FTP, porta 21, `/PRG/`).
**## Validazione programma NC**
One paragraph: before upload, NcProgramManager validates the NC program. Errors block the transfer. Warnings are logged but don't block.
Avoid: mentioning internal class names, test infrastructure, or implementation details.
`cat README.md` — file exists, has all sections, Italian prose, CLI table present.
`grep "\-manufacturer" README.md` → match found.
AC-1 and AC-3 satisfied: README covers CLI args, license setup, all in Italian.
Task 2: Write LicenseGenerator README in Italian
~/Documents/mine/c#/LicenseGenerator/README.md
Create `README.md` at LicenseGenerator repo root. Vendor-facing — assumes technical user. Italian prose. Keep commands and file names in English.
**Sections:**
**# LicenseGenerator**
One-paragraph description: strumento per il fornitore per generare coppie di chiavi RSA e firmare le licenze per NcProgramManager. Non va distribuito ai clienti.
**## Requisiti**
- `keygen` e `sign`: .NET 4.7.2 (Windows) o Mono 6+ (Linux/Mac)
- `fingerprint`: Windows obbligatorio (usa WMI)
**## Primo avvio — Generazione della coppia di chiavi**
Step-by-step:
1. Run `LicenseGenerator.exe keygen`
2. Saves `private.key.xml` in current dir — **mantenere segreto, non condividere mai**
3. Prints public key XML to stdout — copy and paste into `LicenseValidator.cs` (field `PublicKeyXml`) and recompile NcProgramManager
Warn clearly: if private.key.xml is lost, must generate a new key pair and re-ship NcProgramManager with new public key.
**## Workflow per emettere una licenza**
Numbered steps:
1. Il cliente esegue `LicenseGenerator.exe fingerprint` sulla macchina di destinazione (Windows) e invia il testo stampato al fornitore
2. Il fornitore esegue: `LicenseGenerator.exe sign -key=private.key.xml -fingerprint= -out=license.lic`
3. Il fornitore invia `license.lic` al cliente
4. Il cliente copia `license.lic` nella stessa cartella di `NcProgramManager.exe`
**## Comandi**
Table:
| Comando | Descrizione |
| `LicenseGenerator.exe keygen` | Genera coppia RSA 2048-bit. Salva `private.key.xml`, stampa chiave pubblica XML |
| `LicenseGenerator.exe fingerprint` | Legge l'impronta hardware della macchina (solo Windows) |
| `LicenseGenerator.exe sign -key= -fingerprint= [-out=]` | Firma l'impronta e scrive il file licenza |
**## Sicurezza**
Short section: `private.key.xml` must never be committed to git (already in .gitignore), never shared with customers, stored securely. Anyone with the private key can forge licenses.
Avoid: mentioning internal C# class names, RSA algorithm details, or test setup.
`cat ~/Documents/mine/c#/LicenseGenerator/README.md` — exists, has all sections.
`grep "fingerprint" ~/Documents/mine/c#/LicenseGenerator/README.md` → match found.
AC-2 and AC-3 satisfied: README covers keygen, fingerprint, sign workflow, all in Italian.
## DO NOT CHANGE
- Any `.cs` source files in either repo
- `.paul/` directory contents (except this plan's phase files)
- `NcProgramManager.sln`, `LicenseGenerator.sln`, any `.csproj`
## SCOPE LIMITS
- Italian prose only — no English prose outside of technical terms, CLI args, code blocks
- No code changes in either repo
- Do not add build instructions (not relevant for end users — binary is distributed)
Before declaring plan complete:
- [ ] `README.md` exists at NcProgramManager repo root
- [ ] `~/Documents/mine/c#/LicenseGenerator/README.md` exists
- [ ] Both files contain Italian prose
- [ ] NcProgramManager README has CLI arg table with all 6 args
- [ ] LicenseGenerator README has numbered license issuance workflow
- [ ] Both READMEs mention `license.lic`
- Both READMEs written and saved
- Italian throughout (technical terms/commands in English)
- Operator can follow NcProgramManager README to set up and run the tool
- Vendor can follow LicenseGenerator README to issue a license