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>
135 lines
6.4 KiB
Markdown
135 lines
6.4 KiB
Markdown
# 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<int> 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<int> 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
|
|
|
|
- **Discovered:** Codebase analysis (2026-05-18)
|
|
- **Type:** Reliability / Observability
|
|
- **Description:** 23 `try { ... } catch { }` blocks swallow exceptions silently. Disconnect/cleanup paths fail with no trace. Production issues become undiagnosable.
|
|
- **Files:** `Cnc/Fanuc/FanucMachine.cs`, `Cnc/Siemens/SiemensMachine.cs`, `Cnc/Heidenhain/HeidenhainMachine.cs`, `Cnc/Heidenhain/Lsv2Client.cs`
|
|
- **Fix:** At minimum `catch (Exception ex) { /* log or Debug.WriteLine */ }` — better with logging framework (ISS-004)
|
|
- **Impact:** High — hidden failures, connection leaks masked
|
|
- **Effort:** Quick-Medium (dependent on ISS-004)
|
|
- **Suggested phase:** Same phase as ISS-004
|
|
|
|
---
|
|
|
|
### ISS-004: No structured logging framework
|
|
|
|
- **Discovered:** Codebase analysis (2026-05-18)
|
|
- **Type:** Observability / Reliability
|
|
- **Description:** Entire codebase uses `Console.WriteLine` (98+ calls). No log levels, no timestamps, no file output. Production issues undiagnosable without attaching a terminal.
|
|
- **Files:** `Program.cs`, all machine implementations
|
|
- **Fix:** Add Serilog or NLog. Replace `Console.WriteLine` with leveled logging. Add request/response tracing for FOCAS/LSV2/FTP operations.
|
|
- **Impact:** Medium — works today, but operational burden grows with deployments
|
|
- **Effort:** Substantial (half day+)
|
|
- **Suggested phase:** v0.4 Operational Quality
|
|
|
|
---
|
|
|
|
### ~~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 | (pending commit) |
|
|
|
|
---
|
|
|
|
*Last updated: 2026-05-18*
|
|
*Sources: STATE.md deferred issues + CONCERNS.md codebase analysis*
|