Improve IL comparison normalization and auditability - #256
Draft
Widthdom wants to merge 8 commits into
Draft
Conversation
Widthdom
force-pushed
the
feature/robust-il-comparison
branch
from
August 14, 2026 15:09
66c2338 to
ec85bd6
Compare
Widthdom
force-pushed
the
feature/robust-il-comparison
branch
from
August 14, 2026 15:38
ec85bd6 to
1a61565
Compare
Widthdom
force-pushed
the
feature/robust-il-comparison
branch
from
August 14, 2026 16:14
1a61565 to
846b092
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
ilspycmdtype-library timestamp blobsShouldIgnoreMVIDand always normalize MVIDs as built-in build-variant IL data*_IL.txtfiles can still produce an IL matchWhy
Disassembler output contains build-dependent values that can create false differences. MVIDs have the same build-variant nature as RVA, code-size, and type-library timestamp values, so keeping a separate opt-out made comparison behavior inconsistent. In addition, treating an entire class as one opaque block made method-order-only changes appear different, while the configured IL transformations were not sufficiently auditable.
The JavaScript audit gate also began rejecting locked vulnerable versions of
brace-expansionandjs-yaml. The package overrides retain each existing major version while selecting its patched release.Impact
This includes a deliberate breaking configuration/API change:
ShouldIgnoreMVIDhas been removed. MVID lines are no longer deleted conditionally; their build-dependent value is always replaced by the built-in stable MVID marker. Consumers that referenced the property in code must remove that reference. Existing configuration files should also remove the obsolete setting.Built-in normalization now handles the observed output formats from
dotnet-ildasm0.12.2 andilspycmd9.1.0.7988. The multilineilspycmdtimestamp attribute is collapsed to one stable marker while malformed or unterminated blobs remain comparable as raw IL. Class member order no longer affects comparison, but method-body changes and bodies moved between different methods remain differences.Configured normalization and ignore rules record bounded per-file application summaries. With IL text output enabled, counts are collected during the existing materialization pass. Without IL text output, a separate non-retaining audit pass adds CPU work while preserving the streaming comparison memory profile apart from bounded summaries.
Validation