# Project Issues Log Enhancements and known issues discovered during execution and codebase analysis. ## Open Issues ### ~~ISS-001: MachineFingerprint null dereference on unusual hardware~~ ✅ CLOSED - **Closed:** 2026-05-18 (Phase 13, commit `4cd7715`) - **Fix applied:** `?.Value?.ToString() ?? string.Empty` on both WMI reads in `Licensing/MachineFingerprint.cs` --- ### ISS-002: Blocking async calls at CLI boundary - **Discovered:** Codebase analysis (2026-05-18) - **Type:** Refactoring / Reliability - **Description:** 56+ `.GetAwaiter().GetResult()` calls in `Program.cs` and machine classes block the thread pool. .NET 4.7.2 supports `async Task Main`. Risk of deadlock in certain SynchronizationContext scenarios. - **Files:** `Program.cs` (lines 90, 101, 122, 142, 166, 200, 221, 240, 262) - **Fix:** Refactor `Main` to `static async Task Main(string[] args)`, propagate `await` throughout - **Impact:** Medium — currently works, but fragile; blocks async benefits - **Effort:** Medium (1-2 hours) - **Suggested phase:** Future refactor phase --- ### ~~ISS-003: Silent exception handlers swallow failures~~ ✅ CLOSED - **Closed:** 2026-05-18 (Phase 15) - **Fix applied:** Event handler catches (`SetState`) → `_log.Warn(ex, "StateChanged handler threw")`; cleanup/Dispose catches annotated with `/* cleanup — intentionally swallowed */` --- ### ~~ISS-004: No structured logging framework~~ ✅ CLOSED - **Closed:** 2026-05-18 (Phase 15) - **Fix applied:** NLog 5.2.8 wired into all 5 production classes; rolling file target (daily, 7-day archive) + console target (Warn+); `_log.Error` in Program.cs error catch blocks --- ### ~~ISS-005: SHA256 crypto provider not disposed~~ ✅ CLOSED - **Closed:** 2026-05-18 (Phase 13, commit `4cd7715`) - **Fix applied:** `SHA256CryptoServiceProvider` wrapped in `using` block in `Licensing/LicenseValidator.cs` --- ### ~~ISS-006: LSV2 connect timeout doesn't abort hung task~~ ✅ CLOSED - **Closed:** 2026-05-18 (Phase 13, commit `4cd7715`) - **Fix applied:** `_tcp.Close()` called in timeout branch of `Connect()` in `Cnc/Heidenhain/Lsv2Client.cs` — aborts pending socket task --- ### ~~ISS-007: Integration tests use hardcoded IPs~~ ✅ CLOSED - **Closed:** 2026-05-18 (Phase 14) - **Fix applied:** `HardwareTestHelper.GetIpOrSkip(envVarName)` reads `HEIDENHAIN_IP` / `SIEMENS_IP` / `MITSUBISHI_IP`; `Assert.Ignore` fires when env var not set. Hardware tests `[Category("Hardware")]` skip in standard CI; stub-based tests unaffected. --- ### ISS-008: MachineFingerprint — full license flow unverified on real hardware - **Discovered:** STATE.md deferred issues (ongoing) - **Partial fix:** 2026-05-18 (Phase 14) — `LicenseFile` edge-case tests added; `Validate_EmptyFingerprint_ReturnsFalse` confirms validator is safe against empty input - **Remaining:** Full end-to-end (WMI fingerprint → sign → deploy → validate) requires real Windows machine run with `HEIDENHAIN_IP` etc. set - **Type:** Testing - **Files:** `Licensing/MachineFingerprint.cs`, `Licensing/LicenseFile.cs` - **Impact:** High — license flow unverified on hardware before customer delivery - **Effort:** Quick — scaffold is in place; just needs real hardware --- ### ISS-009: Heidenhain ReadActiveProgramAsync / SelectMainProgram not implemented - **Discovered:** STATE.md deferred issues (2026-05-13) - **Type:** Feature / Incomplete Implementation - **Description:** `HeidenhainMachine.ReadActiveProgramAsync()` and `SelectMainProgramAsync()` return hard-coded `CncResult.Fail("Not supported via basic LSV2")`. LSV2 may support these via additional commands not yet implemented. - **Files:** `Cnc/Heidenhain/HeidenhainMachine.cs` - **Impact:** Low — current use case requires explicit program path; feature unused - **Effort:** Substantial (requires LSV2 spec research + hardware testing) - **Suggested phase:** Heidenhain advanced features (future) --- ### ISS-010: Siemens ReadActiveProgramAsync / SelectMainProgram not implemented - **Discovered:** STATE.md deferred issues (2026-05-13) - **Type:** Feature / Incomplete Implementation - **Description:** Same as ISS-009 for Siemens. FTP protocol may not expose active program info natively. - **Files:** `Cnc/Siemens/SiemensMachine.cs` - **Impact:** Low — current use case requires explicit program path - **Effort:** Substantial (requires Sinumerik FTP extension research) - **Suggested phase:** Siemens advanced features (future) --- ### ISS-011: Obsolete crypto APIs (RSACryptoServiceProvider, SHA256CryptoServiceProvider) - **Discovered:** Codebase analysis (2026-05-18) - **Type:** Technical Debt - **Description:** Both classes marked obsolete in .NET 6+. Currently safe on .NET 4.7.2 (only warnings), but blocks future framework upgrade path. - **Files:** `Licensing/LicenseValidator.cs` - **Fix (when upgrading):** `RSA.Create()` + `rsa.VerifyData(data, sig, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1)` — eliminates both obsolete types - **Impact:** Low — no runtime impact on .NET 4.7.2 - **Effort:** Quick (when .NET version is upgraded) - **Suggested phase:** Future .NET upgrade phase --- ## Closed Issues | ID | Summary | Phase | Commit | |----|---------|-------|--------| | ISS-001 | MachineFingerprint null dereference on unusual hardware | 13 | `4cd7715` | | ISS-005 | SHA256 crypto provider not disposed | 13 | `4cd7715` | | ISS-006 | LSV2 connect timeout doesn't abort hung task | 13 | `4cd7715` | | ISS-007 | Integration tests use hardcoded IPs | 14 | `32f68c5` | | ISS-003 | Silent exception handlers swallow failures | 15 | (Phase 15 commit) | | ISS-004 | No structured logging framework | 15 | (Phase 15 commit) | --- *Last updated: 2026-05-18* *Sources: STATE.md deferred issues + CONCERNS.md codebase analysis*