nc_program_manager/.paul/phases/11-refactor/11-01-SUMMARY.md
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

86 lines
2.7 KiB
Markdown

---
phase: 11-refactor
plan: 01
subsystem: cli
tags: [arg-parsing, refactor, cleanup]
requires: []
provides:
- ArgParser static class — all CLI arg parsing isolated from Program.cs
- Program.cs with no static state, no inline regex
- AesCrypt.cs removed (dead code)
affects: [11-02-error-handling]
tech-stack:
added: []
patterns: ["ArgParser static method: string[] → InputArgs (pure function)"]
key-files:
created: [ArgParser.cs]
modified: [Program.cs, NcProgramManager.csproj]
key-decisions:
- "VediErrore: changed signature to accept bool debugMode parameter (no longer reads static field)"
- "Scarica/Invia: now accept InputArgs parameter explicitly"
patterns-established:
- "ArgParser.Parse(args) is the single entry point for all CLI parsing"
duration: ~15min
started: 2026-05-17T00:00:00Z
completed: 2026-05-17T00:00:00Z
---
# Phase 11 Plan 01: ArgParser extraction + AesCrypt removal
**Extracted all CLI arg parsing into `ArgParser.cs`; `Program.cs` no longer holds static state or inline regex; dead `AesCrypt.cs` deleted.**
## Performance
| Metric | Value |
|--------|-------|
| Duration | ~15min |
| Tasks | 3 completed |
| Files modified | 3 (+ 1 created, 1 deleted) |
## Acceptance Criteria Results
| Criterion | Status | Notes |
|-----------|--------|-------|
| AC-1: ArgParser extracted | Pass | `ArgParser.Parse(string[]) → InputArgs` — all parsing logic moved |
| AC-2: Program.cs simplified | Pass | No inline regex, no static `inputArgs` field; delegates to `ArgParser.Parse` |
| AC-3: AesCrypt deleted | Pass | File deleted; csproj entry replaced with `ArgParser.cs`; 0 refs in codebase |
## Files Created/Modified
| File | Change | Purpose |
|------|--------|---------|
| `ArgParser.cs` | Created | Static class, single `Parse(string[]) → InputArgs` method |
| `Program.cs` | Modified | `inputArgs` now local var in Main; `Scarica`/`Invia`/`VediErrore` accept `InputArgs` param |
| `NcProgramManager.csproj` | Modified | Replaced `AesCrypt.cs` compile entry with `ArgParser.cs` |
| `AesCrypt.cs` | Deleted | Dead code — no references anywhere in project |
## Decisions Made
| Decision | Rationale | Impact |
|----------|-----------|--------|
| `VediErrore` takes `bool debugMode` param | Removes last dependency on static state | Cleaner signature; no behaviour change |
| `Scarica`/`Invia` take explicit `InputArgs` param | Eliminates static field coupling | Methods now testable in isolation |
## Deviations from Plan
None — plan executed exactly as written.
## Next Phase Readiness
**Ready:**
- `Program.cs` clean entry point — easy to add error surfacing in 11-02
- `ArgParser` isolated — can be unit-tested independently
**Concerns:** None.
**Blockers:** None.
---
*Phase: 11-refactor, Plan: 01*
*Completed: 2026-05-17*