dtrentin
d95ead59af
chore(paul): create v0.4 Robustness milestone
...
Phases:
- 13: robustness-fixes (ISS-001, ISS-005, ISS-006)
- 14: test-hardening (ISS-007, ISS-008)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 22:55:07 +02:00
dtrentin
d4bb3419e8
docs(issues): create ISSUES.md from deferred items and codebase concerns
...
11 tracked issues from STATE.md deferred items + CONCERNS.md analysis:
- ISS-001: MachineFingerprint null dereference (High, Quick)
- ISS-002: Blocking async .GetAwaiter().GetResult() (Medium, Medium)
- ISS-003: Silent catch {} blocks (High, Quick-Medium)
- ISS-004: No structured logging framework (Medium, Substantial)
- ISS-005: SHA256 not disposed (Low, Quick)
- ISS-006: LSV2 connect timeout doesn't abort (Medium, Quick)
- ISS-007: Integration tests hardcoded IPs (Medium, Quick-Medium)
- ISS-008: MachineFingerprint untested on real hardware (High, Medium)
- ISS-009: Heidenhain ReadActiveProgram not implemented (Low, Substantial)
- ISS-010: Siemens ReadActiveProgram not implemented (Low, Substantial)
- ISS-011: Obsolete crypto APIs (Low, Quick when upgrading)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 22:52:35 +02:00
dtrentin
dabcf989d9
docs: map existing codebase
...
- STACK.md - Technologies and dependencies (.NET 4.7.2, NuGet, Costura.Fody)
- ARCHITECTURE.md - Layered CLI with ICncMachine factory pattern
- STRUCTURE.md - Directory layout and where to add new code
- CONVENTIONS.md - C# style, naming, result wrapper pattern
- TESTING.md - NUnit 3 + Moq, stubs, ignored FOCAS tests
- INTEGRATIONS.md - FOCAS, LSV2, FTP, RSA licensing
- CONCERNS.md - Blocking async, silent catch, no logging, Windows-only
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 22:48:20 +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
a5d73db69a
refactor(rename): FanucProgramManager → NcProgramManager
...
Phase 06 complete:
- Namespace renamed in 62 .cs files (namespace + using directives)
- AssemblyName + RootNamespace updated in csproj files
- FanucProgramManager.csproj → NcProgramManager.csproj
- FanucProgramManager.sln → NcProgramManager.sln
- FanucProgramManager.Tests/ → NcProgramManager.Tests/
- FANUCMachine.cs deleted (dead code, zero references)
Fanuc-prefixed class names kept (FanucMachine, FanucProgram,
IFanucMachine) — manufacturer identifiers, not project names.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-17 22:31:36 +02:00
dtrentin
9bb65c4748
docs(paul): unify phase 5 and close v0.1 milestone
...
Phase 5 (NC Validator) UNIFY complete.
v0.1 Multi-CN Release milestone closed — all 5 phases done.
- 05-01-SUMMARY.md: NcProgramValidator + 30+ tests documented
- ROADMAP.md: all phases marked complete, v0.2 scope drafted
- PROJECT.md: requirements evolved, tech stack updated to 4 manufacturers
- STATE.md: milestone 100%, loop closed, next action documented
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-17 22:19:50 +02:00
dtrentin
f3f895df82
Initial commit: migrate from FanucProgramManager
2026-05-17 22:10:30 +02:00