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>
5.7 KiB
5.7 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.Emptyon both WMI reads inLicensing/MachineFingerprint.cs
ISS-002: Blocking async calls at CLI boundary
- Discovered: Codebase analysis (2026-05-18)
- Type: Refactoring / Reliability
- Description: 56+
.GetAwaiter().GetResult()calls inProgram.csand machine classes block the thread pool. .NET 4.7.2 supportsasync 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
Maintostatic async Task<int> Main(string[] args), propagateawaitthroughout - 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.Errorin Program.cs error catch blocks
ISS-005: SHA256 crypto provider not disposed ✅ CLOSED
- Closed: 2026-05-18 (Phase 13, commit
4cd7715) - Fix applied:
SHA256CryptoServiceProviderwrapped inusingblock inLicensing/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 ofConnect()inCnc/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)readsHEIDENHAIN_IP/SIEMENS_IP/MITSUBISHI_IP;Assert.Ignorefires 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) —
LicenseFileedge-case tests added;Validate_EmptyFingerprint_ReturnsFalseconfirms validator is safe against empty input - Remaining: Full end-to-end (WMI fingerprint → sign → deploy → validate) requires real Windows machine run with
HEIDENHAIN_IPetc. 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()andSelectMainProgramAsync()return hard-codedCncResult.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