Release v0.6.18: verify conversion results and log problems only

This commit is contained in:
2026-10-31 01:36:56 +02:00
parent 4eb9f6c671
commit 0d3b2acae9
18 changed files with 915 additions and 291 deletions
+28 -10
View File
@@ -282,27 +282,38 @@ the executable's directory is not writable. Each clipboard payload is an encrypt
only bounded previews/metadata stay in memory. Image data is loaded on demand and released when
the history popup is hidden. Settings **Write log** (`writeLog`, enabled by default) controls all
log writes. Disabling it also clears diagnostic context from memory; existing log files remain.
Successful operations stay in a memory buffer of at most 40 diagnostic events for 30 seconds.
Only failures flush this context to `kswitcher.log`; flushed
context is discarded. Ordinary application errors are also logged when logging is enabled.
Diagnostic stages stay in a memory buffer of at most 40 events for 30 seconds.
Only problem operations write a structured summary to `kswitcher.log`, with their preceding
context. Successful operations stay in that bounded memory buffer and are included only when
a subsequent problem flushes it; they do not create separate rows. Flushed context is discarded. Ordinary application
errors are also logged when logging is enabled. This works in normal Release builds.
Incident context contains tracked physical input, the expected word, copied text, conversion result,
and layout IDs, correlated by request ID even when verification fails. Text fields use quoted,
escaped UTF-16 (`\uXXXX` for non-ASCII and control characters) for exact reproduction, with
original length and a truncation flag; each field is limited to 512 UTF-16 code units.
original length and a truncation flag; context fields are limited to 512 UTF-16 code units.
Structured summaries retain up to 4096 UTF-16 code units per text field and mark truncation.
Manual conversion attempts in `kswitcher.log` have request IDs and explicit outcomes, including
busy, empty copy, verification mismatch, unchanged conversion, and cancelled paste. Requests
record the process, window, input version, and repeated attempts within ten seconds without new
input. Successful repeated commands do not flush the log; intentional layout cycling is normal.
An unchanged result containing no letters, or a direct command
to the detected current layout, is treated as expected. `paste-sent-unverified` means Windows
accepted the paste shortcut; it does not prove that the editor applied the replacement.
input. An unchanged manual conversion is recorded as a problem even when the detected source
and target layouts coincide. After a changed result is pasted, read-only Windows Accessibility
checks the focused editor without moving the caret, changing selection, or copying again.
The log distinguishes **Paste verified**, **Original text remained**, **Readback differs**, and
**Paste not verified**. Unsupported/protected controls, changed focus, and readback limits are
explicit verification reasons, never proof of success. Readback is bounded to 4096 characters;
provider-specific character units or delayed editor updates may prevent verification.
With logging disabled, this additional accessibility check is skipped.
The previous 256 KiB log is retained as `kswitcher.log.1` when the current log rotates.
Open **View log…** from Settings or the tray menu to read logs inside KSwitcher.
The viewer runs in the configurator process so log loading, painting and pointer interaction do not
block the resident keyboard/mouse hook thread. Clear requests are still serialized by the resident.
Choose the current or previous log and press **Refresh** to reload. The ListView shows Time,
Attempt, Event, and Details columns. Select rows and use **Copy selected** or Ctrl+C to copy
tab-separated entries; Ctrl+A selects all rows. Viewing saved logs also works when logging is disabled.
Program, Command, Source layout, Target layout, and Result. Click column headings to sort;
filter by program, command, or result, or enable **Only problems**. **Reset filters** restores all entries.
Select a row to inspect original, expected and read-back text, verification status and stages
in the panel below. **Copy selected** or Ctrl+C copies the selected rows with their details;
Ctrl+A selects all rows. Older unstructured log entries remain readable. Viewing saved logs
also works when logging is disabled.
**Clear log** clears only the selected current or previous file and refreshes the table.
Clearing the current log also discards buffered diagnostic context; new problems can still be logged.
@@ -454,6 +465,13 @@ against a staged build. It briefly opens real selection/editor windows without c
### Release channel rule
Every release must also update the published [Wiki](https://gitea.hrynco.com/hrynco/hrynco-kswitcher/wiki):
the latest version and relevant feature documentation in both English and Ukrainian.
Review all changes since the last documented release, update affected instructions,
shortcuts, settings and screenshots, and verify the published pages and links.
The release workflow is incomplete until this is done. Follow the mandatory
[Wiki release checklist](AGENTS.md#mandatory-wiki-updates-for-every-release).
Keep `v0.4.2` as the last legacy `vX.Y.Z` release. Publish full packages as
`release-vX.Y.Z` (stable, not prerelease), including `release-files.json`,
`KSwitcher-win-x64.zip` and `SHA256SUMS.txt`. Never publish a manifest package under a