Refinement Implementation — Cycle 4
Refinement Implementation — Cycle 4
Summary
This cycle hardens three remaining boundary issues: publish-time auto-stash now includes untracked files, ConfigService.save() now rejects unsupported keys instead of silently stripping them, and shell:openPath now validates path input before delegating to Electron. I added focused unit coverage for each change; direct Vitest execution is still blocked in this environment by spawn EPERM, but main-process TypeScript compilation succeeded.
Implementation Details
| Finding | Status | Files Changed | Notes |
|---|---|---|---|
| I1: Auto-stash omits untracked files before branch-switch publishes | Fixed | src/main/services/git/GitService.ts, tests/main/gitService.mocks.test.ts |
git stash now uses --include-untracked; added a regression test that asserts the exact simple-git argv. |
I2: ConfigService.save() still strips unknown keys and reports success |
Fixed | src/main/services/config/ConfigService.ts, tests/main/configService.test.ts |
Save-time validation now uses unknownKeyPolicy: 'reject'; added happy-path and unknown-key coverage. |
I3: shell:openPath accepts relative and malformed paths at the main-process boundary |
Fixed | src/main/ipc/handlers/utilityHandlers.ts, tests/main/utilityHandlers.test.ts |
Added absolute-path and control-character checks before calling Electron shell, with direct handler tests. |
Changes Summary
- Files modified: 4
- Files created: 2
- Findings addressed: 3 of 3
- Findings skipped: 0 (with reasons above)
IMPLEMENTATION_COMPLETE