#### Brief overview of PR changes/additions
- Adds a Windows-only migration that recovers stored passwords after
qtkeychain 0.17.0 changes the Windows Credential Manager naming scheme
(bare key -> "key@service"), re-storing them under the new name on first
read
- Fixes the existing old-format migration reads/cleanup, which relied on
the same pre-0.17 service-ignoring behaviour and would silently miss
under 0.17+
- Surfaces the linked qtkeychain version as a QTKEYCHAIN_LINKED_VERSION
compile definition (the library's own header macro is stale); it gates
the old-entry cleanup and is logged for diagnostics
- Adds CredentialManagerKeychainTest: Windows-only ctests that plant the
historical credential layouts in the real credential store (via
empty-service QKeychain jobs, which resolve to the bare TargetName on
every qtkeychain version) and verify round trip, bare-entry migration,
no resurrection of deleted passwords, old-format migration, and
colliding-format recovery
#### Motivation for adding to Mudlet
Once Windows builds pick up qtkeychain 0.17+ (e.g. via MSYS2), every
stored profile password would silently become unreadable and users would
have to re-enter them; this makes the transition seamless.
#### Other info (issues closed, discussion etc)
qtkeychain 0.17.0 breaking change:
https://github.com/frankosterfeld/qtkeychain/releases/tag/0.17.0. A read
with an empty service resolves to the bare key on every qtkeychain
version, so the migration layer works regardless of which version is
linked. On pre-0.17 builds it is normally dormant (the primary read
already looks up the bare key), though a transient read failure can
route into it as a harmless retry; deletion of the old entry only
happens when the linked qtkeychain is known to be 0.17+, so the
recovered credential can never be deleted on older versions. The new
keychain tests branch their expectations on QTKEYCHAIN_LINKED_VERSION:
on today's MSYS2 they verify the migration stays dormant, and they flip
to verifying the actual migration automatically once MSYS2 ships 0.17+.
They run on Windows PR CI via ctest and skip on other platforms or when
the credential store is unavailable.
**Test case:** CredentialManagerKeychainTest covers the scenarios
automatically on Windows CI. Manually: store a profile password,
restart, confirm auto-login still works (pre-0.17: migration is a
no-op). With a qtkeychain 0.17+ build: store a password using a pre-0.17
build, then run this build - the password should still load, and the
Credential Manager entry moves to the "key@service" name.
---------
Signed-off-by: Michael Conley <sousesider@gmail.com>