nc_program_manager/.paul/ISSUES.md
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

6.4 KiB

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