e608977359
docs: add code review bug analysis report
...
Static analysis findings for nc_program_manager: 8 security criticals
(FTP plaintext, LSV2 cleartext, path traversal, license bypass),
4 functional bugs, 3 NRE risks, 3 resource leaks. See BUG_ANALYSIS.md
for prioritized fix list.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 21:53:03 +02:00
dtrentin
68c5a555f3
chore(paul): close v0.6 Fagor Support milestone, log ISS-012..017
...
PAUL bookkeeping per chiusura milestone v0.6 (Phase 16: 16-01 + 16-02):
- STATE.md — sezione v0.6 + Phase 16-01 + 16-02 fixup post-review.
- ROADMAP.md — Milestone v0.6 + Phase 16 (2 plans).
- paul.json — version 0.6.0, milestone Fagor Support, phase 16
fagor-ftp.
- phases/16-fagor-ftp/ — 16-01-PLAN.md + 16-01-SUMMARY.md (impl
iniziale), 16-02-PLAN.md + 16-02-SUMMARY.md (fix post-review).
- ISSUES.md — ISS-012..ISS-017 derivati da code review v0.6:
- ISS-012: Fagor ReadActiveProgramAsync/SelectMainProgram non impl
- ISS-013: Program.Invia accoppia FanucProgram a tutti i produttori
- ISS-014: ResolvePath null-folder NRE pattern (Siemens/Mitsubishi/Fagor)
- ISS-015: encoding source-file rischio codepage Windows non-UTF8
- ISS-016: WriteProgramAsync validator riceve path se Name null
- ISS-017: FagorFtpClient.Ping swallow senza log
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 20:27:44 +02:00
dtrentin
60ce1c9d57
feat(15-logging): NLog structured logging — all output through NLog (v0.5 complete)
...
Phase 15 complete (2 plans):
- 15-01: NLog 5.2.8 + nlog.config (rolling file daily/7d + console); logger fields in
FanucMachine, HeidenhainMachine, SiemensMachine, MitsubishiMachine, Lsv2Client, Program.cs;
SetState event handler catches → _log.Warn; cleanup catches annotated; ISS-003/ISS-004 closed
- 15-02: All Console.Write/WriteLine in Program.cs replaced with _log.Info (103 calls);
nlog.config console target layout=${message}, levels=Info only — Warn/Error file-only;
operator console output identical; every interaction now timestamped in log file
Milestone v0.5 Operational Quality complete.
Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-18 23:57:27 +02:00
dtrentin
32f68c5ed5
feat(14-test-hardening): env-var hardware test scaffolding + LicenseFile edge cases
...
Phase 14 complete — v0.4 Robustness milestone closed:
- HardwareTestHelper.GetIpOrSkip: Assert.Ignore when HEIDENHAIN/SIEMENS/MITSUBISHI_IP not set (ISS-007)
- Hardware_ConnectAsync_RealMachine [Category("Hardware")] added to all 3 integration test files
- LicenseFileTests: 4 tests covering empty, whitespace, valid base64, nonexistent path
- Validate_EmptyFingerprint_ReturnsFalse: confirms validator safe against empty input (ISS-008 scaffold)
- NcProgramManager.Tests.csproj: <Compile> entries for 2 new files
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 23:24:58 +02:00
dtrentin
f55d0b313b
docs(12-docs-cli): complete CLI reference in README — all 16 args + 12 error codes
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 22:37:58 +02:00
dtrentin
bd17ea46e5
feat(11-refactor): extract ArgParser, fix error handling, remove dead code
...
Phase 11 complete:
- ArgParser.cs: CLI parsing extracted from Program.cs (pure static method)
- Program.cs: no static state; Scarica/Invia take explicit InputArgs param
- Program.cs: try/finally with connected flag — fixes connection leak on exception
- Program.cs: PrintErrors helper surfaces CncResult.Errors on every failure
- AesCrypt.cs: deleted (dead code, zero references)
- NcProgramManager.csproj: AesCrypt.cs → ArgParser.cs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 00:01:32 +02:00
dtrentin
718c3ce8da
docs(10-readme-docs): Italian README for NcProgramManager
...
Operator-facing README covering CLI args, license setup, supported
controllers, and NC validation. PAUL phase 10 complete.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-17 23:46:50 +02:00
dtrentin
15644cfdf8
feat(09-license-generator): standalone LicenseGenerator tool + real RSA key pair
...
Phase 09 complete — v0.2 NcProgramManager milestone done:
- LicenseGenerator standalone console EXE (separate repo: license-generator.git)
- keygen: RSA 2048-bit key pair generation
- fingerprint: WMI machine fingerprint (Windows)
- sign: RSA-SHA256 sign fingerprint -> .lic file
- LicenseValidator.cs: PublicKeyXml PLACEHOLDER replaced with real vendor public key
- Offline license system now production-ready end-to-end
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-17 23:37:49 +02:00
dtrentin
3312a57757
feat(08-license-integration): wire RSA license check, remove -chiave arg
...
Replace AES checkLicense with MachineFingerprint+LicenseFile+LicenseValidator.
License.lic hardcoded next to EXE; -chiave= CLI arg and InputArgs.chiave removed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-17 23:10:05 +02:00
dtrentin
39a9566858
feat(07-license-core): RSA offline license core
...
Phase 07 complete:
- IMachineFingerprint + ILicenseValidator interfaces
- MachineFingerprint: WMI CPU ProcessorID + BaseBoard SerialNumber
- LicenseValidator: RSACryptoServiceProvider + SHA256, injectable public key
- LicenseFile.TryRead: out-param bool, no exceptions from file I/O
- 6 NUnit tests (valid/wrong-machine/tampered/empty/not-base64/missing-file)
- 118 tests total, 116 pass, 2 Fanuc FOCAS ignored (Windows DLL)
- Fix: missing 'using System' in CncMachineFactoryTests.cs
- Fix: Dockerfile.test updated for NcProgramManager rename
PublicKeyXml = PLACEHOLDER until Phase 09 generates real key pair.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-17 22:58:14 +02:00
dtrentin
f3f895df82
Initial commit: migrate from FanucProgramManager
2026-05-17 22:10:30 +02:00