[1.1.52] - 2026-10-30
Fixed
- W001 no longer treats a command whose name merely begins with
rem(for exampleremote.exe) as a comment, so a script that ends on such a command is flagged for a missing exit code. Every checker now shares one comment test that accepts onlyREM,@REM, a loneREMand::, in any letter case. Several checkers previously missed@REM, a bareREM, or an upper-caseREM - The FOR-block scan behind the loop-scoped performance rules ignores parentheses inside quotes and after a caret, and its cache is reset at the start of every lint pass
- Several rules took seconds to minutes on long pathological lines because of nested wildcards in their regular expressions (the
%a%and>echocommand-injection patterns, FOR /F quoting in E047, the SEC009 and SEC022 to SEC024 patterns and others). They now run in linear time and return the same findings - P010 flags DIR only when its output is piped or redirected to standard output and
/Bis absent, as the rule describes. It previously fired on any DIR line and suggested a/Fswitch that DIR does not have - S008 accepts a comment directly above a block, W025 accepts
command || exit /bon the same line, and W033 no longer reports a quoted CALL target that carries an extension - The SARIF log reports
executionSuccessful: falsewhen a file could not be linted - Standard output falls back to UTF-8 on consoles whose code page cannot encode the report, and the
--max-line-lengthusage message is printed when the value is rejected uninstall_blinter.cmdremoves only the exact Blinter entry from the user PATH. A directory name that merely contained the bin path, or a path with square brackets, was previously mishandledscripts/verify.pystops with a clear message when it runs on a non-CPython interpreter, because mypy does not support PyPy- The lint-time scaling tests re-measure a failing comparison before reporting it, so a single scheduler stall on a shared runner (seen on
macos-15-intel) no longer fails the build, while a real super-linear slowdown still fails every attempt. The build-script tests no longer share the generated_build_version.pyfile, which made them fail intermittently when run in parallel
Changed
- A manual run of the release workflow now needs the
confirm_releaseinput when the version tag already exists, and it only replaces release assets when the tag points at the commit being built. The PyPI upload skips files that already exist, so a confirmed re-publish does not fail there. Release notes are extracted for the exact version being published - The
dependency-graphjob no longer blocks the release version check - The MegaLinter install pin is 1.1.52
- The documentation describes the exit codes,
--follow-calls,--fail-on,min_severityand the SARIF semantics, and the packageDocumentationURL points at the project docs
Added
- A negative corpus case for 120 rules that had none.
scripts/spec/audit_ssot.pynow fails when a rule has no case listing it inmust_not, and the reference-matrix counts amust_notassertion as covering a construct. The corpus holds 417 cases