F053 — Config Load, Save, Atomic Write, And Migration

  • Root cause: The suite already exercised the migration path with real temp-directory files, but it did not explicitly prove the raw on-disk backup artifacts and temp-file cleanup strongly enough to close the refinement item.
  • Files changed: tests/main/configService.test.ts
  • What done: Tightened the real on-disk migration test so it now writes a legacy config.json, runs the migration chain against the real filesystem, verifies the upgraded config.json, checks that config.json.v1.bak preserves the original raw bytes, confirms config.json.v2.bak contains the intermediate migrated state, and asserts that config.json.tmp is not left behind.
  • Verification result: npm test -- tests/main/configService.test.ts tests/main/firstRunGate.test.ts tests/renderer/firstRunModal.test.tsx passed. Full verification also passed: npm run typecheck, npm run lint, npm test twice, and npm run build.

F083 — First-Run Accessibility Baseline

  • Root cause: Invalid-path coverage only proved mocked inline error rendering; it did not verify keyboard-driven invalid submit announcement semantics in the dialog or prove with real files that a rejected path leaves config.json untouched.
  • Files changed: src/renderer/features/first-run/FirstRunModal.tsx, tests/renderer/firstRunModal.test.tsx, tests/main/firstRunGate.test.ts
  • What done: Added explicit live-region semantics to the first-run inline error alert (role="alert", aria-live="assertive", aria-atomic="true"), updated the renderer test to submit the invalid path via keyboard and assert the alert/ARIA wiring, and added a real on-disk first-run gate test that uses an actual temp config.json plus the real ConfigService and filesystem probe to confirm an invalid missing-folder submit does not create or overwrite config data.
  • Verification result: npm test -- tests/main/configService.test.ts tests/main/firstRunGate.test.ts tests/renderer/firstRunModal.test.tsx passed. Full verification also passed: npm run typecheck, npm run lint, npm test twice, and npm run build.

IMPLEMENTATION_COMPLETE