Skip to content

Structure RAR conflict diagnostics in binary logs - #14601

Draft
baronfel wants to merge 3 commits into
baronfel-analyze-binlog-sizefrom
baronfel-structure-rar-conflicts
Draft

Structure RAR conflict diagnostics in binary logs#14601
baronfel wants to merge 3 commits into
baronfel-analyze-binlog-sizefrom
baronfel-structure-rar-conflicts

Conversation

@baronfel

@baronfel baronfel commented Jul 31, 2026

Copy link
Copy Markdown
Member

Stack dependency

This draft PR depends on draft PR #14599 and targets its baronfel-analyze-binlog-size branch. PR #14599 adds AssemblyResolutionSearchTraceEventArgs and binary-log format 28. Review and merge PR #14599 first. This PR advances the binary-log format to 29.

Motivation and size model

RAR emitted 2,126 conflict dependency-list messages in the analyzed 823.6 MiB binary log. The messages contained 992,063,604 characters, or approximately 946 MiB of uncompressed text.

The initial whole-log model projected compressed savings of 130–170 MiB. Its central estimate was approximately 150 MiB.

A category-specific model parsed all 2,126 messages without failures. The structured model contains 1,949 unique strings and 13,560,767 wire bytes. Optimal gzip reduced the category from 49,133,718 bytes to 1,281,821 bytes. This result is a 45.6 MiB, or 97.4 percent, reduction for the category. A production workload must measure the final whole-log reduction.

Changes

  • Add lazy structured events for low-importance conflict details and aggregated MSB3277 warnings.
  • Deduplicate identities, paths, item specifications, and invariant resource templates through the binary-log string table.
  • Preserve invariant-English text, event boundaries, warning behavior, escaped includes, diagnostic fields, and OutputUnresolvedAssemblyConflicts metadata.
  • Gate the event-type change behind ChangeWave 18.11. Disabling the wave restores legacy localized plain-text events.
  • Use invariant-English templates for culture-stable replay. Localized structured MSB3277 output is therefore English.
  • Advance the binary-log format to 29. Strict older readers reject format 29. Forward-compatible older readers skip the new records.
  • Support node packets, multi-node task-host transport, and out-of-process RAR transport.

Review changes

  • Preserve ProjectFile during replay for structured conflict events and the parent search-trace event.
  • Preserve the low-importance logger filter. Do not build dependency graphs when logging and output metadata do not need them.
  • Preallocate dependee and source-item lists from their source counts.
  • Use fixed-argument MessageFormatter overloads to prevent parameter-array allocations.
  • Preserve escaped unresolved-primary item text.
  • Add regression tests for lazy messages, filters, escaping, metadata, and ProjectFile.

At 250 dependees, formatter time decreased from 76.5 µs to 67.2 µs. Allocation decreased from 488,429 bytes to 480,197 bytes. For 93 dependees with 17 causes, preallocation decreased time from 13.49 µs to 6.37 µs. Allocation decreased from 61,768 bytes to 21,688 bytes.

Validation

  • The full Release build completed without warnings or errors.
  • Release tests passed 5,022 Engine tests, 1,035 Tasks tests, and 857 Framework tests.
  • Focused tests covered text equivalence, ChangeWave behavior, warning promotion, metadata, filters, escaping, lazy messages, serialization, and transport.
  • The bootstrap sample build and the MSBuild.dll --help smoke test passed.
  • The repository test harness stopped during coverage finalization after it wrote passing TRX reports. It did not report a test or product failure.

baronfel added 3 commits July 31, 2026 17:10
Replace enormous conflict dependency-list strings with lazy structured events whose repeated identities, paths, dependees, and item specs use the binary log string table. Preserve legacy rendering and warning behavior behind ChangeWave 18.11, and advance the binlog format to v29.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: aa22c3ca-3e39-4cf7-9fd7-666cc172d93d
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: aa22c3ca-3e39-4cf7-9fd7-666cc172d93d
Rewrite the ChangeWave entry, public XML documentation, implementation comments, and test descriptions with concise technical language. Clarify reader compatibility and lazy message behavior without changing product behavior.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: aa22c3ca-3e39-4cf7-9fd7-666cc172d93d
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant