v3.14.2
Before you upgrade
Nothing changes unless a run is cancelled or interrupted. Conversion semantics stay
at 7, the plan schema at 6. The journal schema moves from 5 to 6 —
an additive Interrupted flag; EC never re-reads its own journals, so nothing rejects
an older one. Plans written by any 3.14.x release apply unchanged, and detection and
conversion behave exactly as they did in v3.14.1.
Why
An interrupted run could misreport what it actually did. The GUI's confirmation dialog
runs a "decide" pass before you click Convert, marking eligible files Converted so a
preview can show the plan. If you then cancelled the review, hit a stale plan, or the
plan couldn't be built — or cancelled the decide pass itself, before you're even asked
anything — that label was never corrected, and exporting the CSV afterward could report
untouched files as Converted. The command line had the same class of bug: an
interrupted -Apply or direct scan could call unreached files "unchanged" instead of
marking them NotAttempted, in both the console summary and the exported report.
Every one of those paths now marks the affected rows NotAttempted before returning.
Journal schema 6 adds an explicit Interrupted flag so a cancelled run's journal can no
longer be mistaken for a complete one. BL-31, BL-32, BL-33 record these.
Two smaller fixes ride along: the CSV export now names the encoding actually used for an
explicit-source conversion, rather than the encoding EC originally detected before you
overrode it; and an interrupted direct scan now returns exit code 3 instead of 4 when a
file it had already reached failed to convert — matching what an interrupted -Apply
already returned in the same situation.
What else is in this release, and why you will not notice it
A cancellation timeout could drop the last button-press refusal and misreport it as no
button found (EC-32) — this affects only the GUI smoke suite's own diagnosis of a
stuck run, not EncodingChecker.exe. A cancelled scan now saves its partial CSV instead
of discarding it, and a cancelled preflight leaves any existing plan untouched. A test
hook was added to the converter so a regression test can simulate storage corruption at
the exact point that matters, without a real disk fault.
Safety record
Audit record → · Release notes → · Defect ledger →
No four-corpus audit was run, and none is required. This release changes no detection
or conversion policy. What supports it is 826 unit tests (was 756), the ten-phase GUI
smoke suite, the detector parity check, and every added regression test mutation-checked
against the defect it targets: the fix reverted, the assertion confirmed to fail with the
exact behavior described, then the fix restored and the test confirmed passing again.
The published executables reproduce byte-for-byte from their tag. Both the
framework-dependent and self-contained executables inside the release archives match a
rebuild from a clean checkout of v3.14.2:
- Framework-dependent:
95599e5bb68e1e5009421f3fb841c1b6fd9dcfa9c21a83ccfb48bcd657c920c1 - Self-contained:
f2e2db06f6555c25e3bfff1b1007db8d9df7b18b19a021f0ffc017146f349e3e
To verify it yourself, rebuild with .NET 10.0.12. A framework-dependent single-file
executable embeds the apphost of the runtime it was built with, so a different patch
version produces different bytes for the same source:
git checkout v3.14.2
dotnet publish sources/EncodingChecker/EncodingChecker.csproj -p:PublishProfile=FolderProfile
Code signing did not run. The signing secrets are not configured, so the step was
skipped and the archives below are unsigned, as in every prior release.
No accessibility spot check is recorded for this release.
What's Changed
- Record v3.14.1, and a reproduction check that quietly stopped working by @amrali-eg in #93
- Record that v3.14.1 does reproduce from its tag by @amrali-eg in #94
- Make the GUI smoke gate prove what it claims by @amrali-eg in #95
- Make phase I's cancellation reliable, and cheap enough not to fight itself by @amrali-eg in #96
- Decide cancellation in one place, and keep the error that explains it by @amrali-eg in #97
- Wait for this action's report, not any run's by @amrali-eg in #98
- Read the status before pressing again, and report what EC actually said by @amrali-eg in #99
- One way to do each of the things the driver was doing several ways by @amrali-eg in #100
- Refuse a run that lost sight of EC, instead of blaming EC by @amrali-eg in #101
- Look for the review where it lives, not across the whole desktop by @amrali-eg in #102
- Harden GUI smoke-test evidence by @amrali-eg in #103
- Fix report provenance and cancellation journals by @amrali-eg in #104
- Distinguish unprocessed files from completed work after cancellation by @amrali-eg in #105
- Remove stale GUI smoke note; add forensic-review skill for both agents by @amrali-eg in #106
- Fix false-success CSV reporting on cancel, stale plan, and mid-decide cancellation by @amrali-eg in #107
- Add project instructions for Claude Code and Codex; log BL-33 by @amrali-eg in #108
- Ignore Claude Code's local settings file by @amrali-eg in #109
- Bump version to 3.14.2 and write release notes by @amrali-eg in #110
Full Changelog: v3.14.1...v3.14.2