Skip to content

fix(build): stamp AssemblyVersion/FileVersion 3.3.0.0#658

Merged
tylerkron merged 2 commits into
mainfrom
claude/goofy-goldwasser-815400
Jun 29, 2026
Merged

fix(build): stamp AssemblyVersion/FileVersion 3.3.0.0#658
tylerkron merged 2 commits into
mainfrom
claude/goofy-goldwasser-815400

Conversation

@tylerkron

Copy link
Copy Markdown
Contributor

What & why

Directory.Build.props hardcoded AssemblyVersion/FileVersion at 3.2.0.0 solution-wide. The 3.3.0 release bump (#657) updated only the csproj <Version> (→ informational 3.3.0+sha) and the WiX Product.wxs (→ MSI ProductVersion 3.3.0.0), but missed this file — so the shipped 3.3.0 build self-reported 3.2.0.0:

  • The app title bar reads "DAQiFi v3.2.0" on the 3.3.0 build (confirmed on the bench).
  • The exe FileVersion is 3.2.0.0.
  • Sentry tags every 3.3.0 crash as release: 3.2.0.0AppLogger sets options.Release = Assembly.GetName().Version, so the stale assembly version corrupts the release tag we rely on to monitor post-release issues (notably the firmware-flash telemetry).

Change

Bump AssemblyVersion/FileVersion to 3.3.0.0 to match the release. One line each.

After the fix, the built DAQiFi.dll reports:

AssemblyVersion = 3.3.0.0
FileVersion     = 3.3.0.0
ProductVersion  = 3.3.0+<sha>

The MSI ProductVersion (from Product.wxs) was already correct, so install/upgrade behavior is unchanged — this only corrects the exe's self-reported version + crash telemetry.

Note: the existing 3.3.0 draft release MSI predates this commit and still self-reports 3.2.0.0. After merging, re-generate the release so the MSI carries 3.3.0.0.

Verification

  • dotnet build -c Release — succeeds, assembly version confirmed 3.3.0.0.
  • Full unit suite (483 tests) and the FlaUI hardware UI suite were green on this code prior to the change; this change is build-metadata only.

Follow-up (optional, not in this PR)

Consider driving AssemblyVersion/FileVersion from the csproj <Version> (single source of truth) so future release bumps only touch one place.

🤖 Generated with Claude Code

Directory.Build.props pinned AssemblyVersion/FileVersion to 3.2.0.0
solution-wide. The 3.3.0 release bump (#657) updated only the csproj
<Version> and the WiX Product.wxs, so the shipped 3.3.0 exe self-reported
3.2.0.0: the title bar read "DAQiFi v3.2.0" and Sentry tagged every 3.3.0
crash as release 3.2.0.0 (the assembly version drives options.Release in
AppLogger). Bump the props to 3.3.0.0 so the exe, title bar, and crash
telemetry match the release. The MSI ProductVersion (Product.wxs) was
already correct, so install/upgrade behavior is unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@tylerkron tylerkron requested a review from a team as a code owner June 29, 2026 20:12
@qodo-code-review

Copy link
Copy Markdown
Contributor

PR Summary by Qodo

Fix build version stamping to report DAQiFi 3.3.0.0

🐞 Bug fix ⚙️ Configuration changes 🕐 Less than 10 minutes

Grey Divider

AI Description

• Update solution-wide AssemblyVersion/FileVersion to 3.3.0.0 for the 3.3.0 release
• Align app title bar, executable FileVersion, and Sentry release tagging with the shipped build
Diagram

graph TD
  A["Build (MSBuild/CI)"] --> B["Directory.Build.props"] --> C["Compile projects"] --> D["DAQiFi assembly"] --> E["AppLogger"] --> F{{"Sentry"}}
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Derive AssemblyVersion/FileVersion from csproj
  • ➕ Single source of truth for all version facets (informational + assembly/file)
  • ➕ Avoids missing future bumps in Directory.Build.props
  • ➖ May require additional MSBuild property parsing/splitting (e.g., stripping prerelease/build metadata)
  • ➖ Slightly more build logic to maintain across projects
2. Centralize versioning with a versioning tool (e.g., Nerdbank.GitVersioning/GitVersion)
  • ➕ Automates version stamping across AssemblyVersion/FileVersion/InformationalVersion
  • ➕ Reduces manual release bump errors
  • ➖ Adds dependency and onboarding cost
  • ➖ May require CI/release process adjustments
3. Keep manual stamping but add a release checklist/CI guard
  • ➕ Minimal build changes
  • ➕ Can prevent mismatches via validation (e.g., fail build if props version != expected tag/version)
  • ➖ Still relies on process/compliance
  • ➖ Doesn’t eliminate duplicated version sources

Recommendation: For the immediate goal (correct shipped 3.3.0 self-reporting and Sentry release tagging), this PR’s minimal bump is the right, lowest-risk fix. As follow-up, consider deriving AssemblyVersion/FileVersion from the same version source as packaging (or introducing a versioning tool) to prevent future mismatches; a CI guard is a lightweight intermediate step if full automation isn’t desired.

Files changed (1) +2 / -2

Other (1) +2 / -2
Directory.Build.propsBump AssemblyVersion/FileVersion to 3.3.0.0 +2/-2

Bump AssemblyVersion/FileVersion to 3.3.0.0

• Updates the solution-wide AssemblyVersion and FileVersion values from 3.2.0.0 to 3.3.0.0. This corrects the version metadata embedded in built binaries so runtime version display and telemetry (e.g., Sentry release tagging) match the 3.3.0 release.

Directory.Build.props

@qodo-code-review

qodo-code-review Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📜 Skill insights (0)

Context used
✅ Compliance rules (platform): 48 rules

Grey Divider


Informational

1. Stale manifest version ✓ Resolved 🐞 Bug ⚙ Maintainability
Description
Directory.Build.props now stamps AssemblyVersion/FileVersion as 3.3.0.0, but the embedded
application manifests still declare assemblyIdentity version 3.2.0.0. This leaves inconsistent
version metadata in release/debug builds for any tooling that reads the embedded manifest (even
though FileVersion/AssemblyVersion are now correct).
Code

Directory.Build.props[R3-4]

+    <AssemblyVersion>3.3.0.0</AssemblyVersion>
+    <FileVersion>3.3.0.0</FileVersion>
Relevance

⭐⭐⭐ High

Past version bumps explicitly updated app.manifest assemblyIdentity to match release version (PRs
#414, #503).

PR-#414
PR-#503
PR-#518

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The PR updates the solution-wide stamped assembly/file version to 3.3.0.0, but the manifests
embedded by the desktop app still declare 3.2.0.0 in their assemblyIdentity, creating inconsistent
version metadata for the same build.

Directory.Build.props[1-5]
Daqifi.Desktop/app.manifest[1-4]
Daqifi.Desktop/app.Debug.manifest[1-4]
Daqifi.Desktop/Daqifi.Desktop.csproj[17-21]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`Directory.Build.props` now stamps `AssemblyVersion`/`FileVersion` to `3.3.0.0`, but `Daqifi.Desktop` still embeds manifests whose `<assemblyIdentity version="..."/>` is `3.2.0.0`. This keeps some Windows-facing version metadata stale.

### Issue Context
`Daqifi.Desktop/Daqifi.Desktop.csproj` selects `app.Debug.manifest` for Debug and `app.manifest` for non-Debug configurations; both manifests currently hardcode `3.2.0.0`.

### Fix Focus Areas
- Daqifi.Desktop/app.manifest[1-4]
- Daqifi.Desktop/app.Debug.manifest[1-4]
- Daqifi.Desktop/Daqifi.Desktop.csproj[17-21]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Qodo Logo

The embedded Windows manifests (app.manifest, app.Debug.manifest) still
declared assemblyIdentity version 3.2.0.0, leaving the embedded manifest
metadata stale after the AssemblyVersion/FileVersion bump. Prior release
bumps (#414, #503) updated these manifests too; match that convention so
every version facet in the 3.3.0 build is consistent. The comctl32
dependentAssembly version (6.0.0.0) is unrelated and left unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@tylerkron

Copy link
Copy Markdown
Contributor Author

Re: Qodo "Stale manifest version" finding — ✅ Fixed in 6f90343.

Good catch, and correct: bumping only AssemblyVersion/FileVersion left the embedded Windows manifests (app.manifest, app.Debug.manifest) still declaring assemblyIdentity version="3.2.0.0", which is inconsistent with the shipped 3.3.0 build — and prior release bumps (#414, #503) did update these manifests, so this is the established convention.

Bumped both manifests' top-level assemblyIdentity to 3.3.0.0. The Microsoft.Windows.Common-Controls dependentAssembly version (6.0.0.0) is unrelated and intentionally left unchanged. Verified with a clean Release build.

On the summary-level follow-up suggestion (derive these from a single version source / add a CI guard): agreed it's the right long-term direction, but out of scope for this minimal release fix — leaving it as a tracked follow-up.

@github-actions

Copy link
Copy Markdown

📊 Code Coverage Report

Summary

Summary
Generated on: 6/29/2026 - 8:28:53 PM
Coverage date: 6/29/2026 - 8:27:25 PM - 6/29/2026 - 8:28:48 PM
Parser: MultiReport (5x Cobertura)
Assemblies: 3
Classes: 142
Files: 168
Line coverage: 43.6% (4271 of 9787)
Covered lines: 4271
Uncovered lines: 5516
Coverable lines: 9787
Total lines: 31625
Branch coverage: 30.3% (1047 of 3445)
Covered branches: 1047
Total branches: 3445
Method coverage: Feature is only available for sponsors

Coverage

DAQiFi - 43.6%
Name Line Branch
DAQiFi 43.6% 30.4%
Daqifi.Desktop.App 2.9% 0%
Daqifi.Desktop.Channel.AbstractChannel 66.1% 44.7%
Daqifi.Desktop.Channel.AnalogChannel 58.7% 12.5%
Daqifi.Desktop.Channel.Channel 11.5% 0%
Daqifi.Desktop.Channel.ChannelColorManager 100% 100%
Daqifi.Desktop.Channel.DataSample 91.6%
Daqifi.Desktop.Channel.DigitalChannel 65.2% 12.5%
Daqifi.Desktop.Commands.CompositeCommand 0% 0%
Daqifi.Desktop.Commands.HostCommands 0%
Daqifi.Desktop.Commands.WeakEventHandlerManager 0% 0%
Daqifi.Desktop.Configuration.FirewallConfiguration 90.6% 66.6%
Daqifi.Desktop.Configuration.WindowsFirewallWrapper 64% 68.4%
Daqifi.Desktop.ConnectionManager 41.8% 39.2%
Daqifi.Desktop.Converters.BoolAndToVisibilityConverter 0% 0%
Daqifi.Desktop.Converters.BoolToActiveStatusConverter 0% 0%
Daqifi.Desktop.Converters.BoolToConnectionStatusConverter 0% 0%
Daqifi.Desktop.Converters.BoolToStatusColorConverter 0% 0%
Daqifi.Desktop.Converters.BrushColorMatchConverter 0% 0%
Daqifi.Desktop.Converters.ConnectionTypeToColorConverter 0% 0%
Daqifi.Desktop.Converters.ConnectionTypeToUsbConverter 0% 0%
Daqifi.Desktop.Converters.InvertedBoolToVisibilityConverter 0% 0%
Daqifi.Desktop.Converters.ListToStringConverter 0% 0%
Daqifi.Desktop.Converters.NotNullToVisibilityConverter 0% 0%
Daqifi.Desktop.Converters.OxyColorToBrushConverter 0% 0%
Daqifi.Desktop.Device.AbstractStreamingDevice 61.8% 52.1%
Daqifi.Desktop.Device.DeviceMessage 92.8%
Daqifi.Desktop.Device.Firmware.BootloaderDiscoveredEventArgs 100% 50%
Daqifi.Desktop.Device.Firmware.BootloaderHoldDroppedEventArgs 100% 50%
Daqifi.Desktop.Device.Firmware.BootloaderHoldService 83.3% 82.6%
Daqifi.Desktop.Device.Firmware.BootloaderSessionStreamingDeviceAdapter 15.1% 8.3%
Daqifi.Desktop.Device.Firmware.BootloaderWatcher 89.7% 67.5%
Daqifi.Desktop.Device.Firmware.FirmwareUpdateCoordinator 64.1% 60.1%
Daqifi.Desktop.Device.Firmware.FirmwareUpdateServiceConfig 100%
Daqifi.Desktop.Device.Firmware.HeldBootloader 90% 50%
Daqifi.Desktop.Device.Firmware.HidBootloaderDiscovery 0% 0%
Daqifi.Desktop.Device.NativeMethods 100%
Daqifi.Desktop.Device.SerialDevice.SerialStreamingDevice 45.8% 35.7%
Daqifi.Desktop.Device.WiFiDevice.DaqifiStreamingDevice 44% 34.3%
Daqifi.Desktop.DialogService.DialogService 0% 0%
Daqifi.Desktop.DialogService.ServiceLocator 0% 0%
Daqifi.Desktop.DiskSpace.DiskSpaceCheckResult 100%
Daqifi.Desktop.DiskSpace.DiskSpaceEventArgs 100%
Daqifi.Desktop.DiskSpace.DiskSpaceMonitor 88.2% 86.6%
Daqifi.Desktop.DiskSpace.DiskSpaceMonitorCoordinator 100% 100%
Daqifi.Desktop.DiskSpace.DiskSpaceStartDecision 100%
Daqifi.Desktop.DuplicateDeviceCheckResult 100%
Daqifi.Desktop.Exporter.LoggingSessionSampleSource 98.7% 77.2%
Daqifi.Desktop.Exporter.OptimizedLoggingSessionExporter 56.9% 46.1%
Daqifi.Desktop.Helpers.BooleanConverter`1 0% 0%
Daqifi.Desktop.Helpers.BooleanToInverseBoolConverter 0% 0%
Daqifi.Desktop.Helpers.BooleanToVisibilityConverter 0%
Daqifi.Desktop.Helpers.EnumDescriptionConverter 100% 100%
Daqifi.Desktop.Helpers.IntToVisibilityConverter 0% 0%
Daqifi.Desktop.Helpers.MinMaxDownsampler 100% 96.4%
Daqifi.Desktop.Helpers.MyMultiValueConverter 0%
Daqifi.Desktop.Helpers.NaturalSortHelper 100% 100%
Daqifi.Desktop.Helpers.OxyPlotDarkTheme 100%
Daqifi.Desktop.Helpers.VersionHelper 98.2% 66.2%
Daqifi.Desktop.Logger.DatabaseLogger 0% 0%
Daqifi.Desktop.Logger.DatabaseMigrator 0% 0%
Daqifi.Desktop.Logger.DeviceLegendGroup 100% 100%
Daqifi.Desktop.Logger.InitialSessionLoad 100%
Daqifi.Desktop.Logger.LoggedSeriesLegendItem 94.1% 44.4%
Daqifi.Desktop.Logger.LoggingContext 100%
Daqifi.Desktop.Logger.LoggingContextDesignTimeFactory 0%
Daqifi.Desktop.Logger.LoggingManager 0% 0%
Daqifi.Desktop.Logger.LoggingSession 36.5% 10.8%
Daqifi.Desktop.Logger.MinimapPlotComponents 100%
Daqifi.Desktop.Logger.PlotLogger 14% 38.7%
Daqifi.Desktop.Logger.PlotModelFactory 99.4% 62.5%
Daqifi.Desktop.Logger.SessionChannelInfo 100%
Daqifi.Desktop.Logger.SessionDataRepository 97.9% 91.3%
Daqifi.Desktop.Logger.SessionDeviceMetadata 80%
Daqifi.Desktop.Logger.SessionSampleWriter 96% 91.3%
Daqifi.Desktop.Logger.SummaryLogger 0% 0%
Daqifi.Desktop.Logger.TimestampGapDetector 95% 83.3%
Daqifi.Desktop.Loggers.AppLoggerLoggerProvider 0% 0%
Daqifi.Desktop.Loggers.ImportOptions 66.6%
Daqifi.Desktop.Loggers.ImportProgress 0% 0%
Daqifi.Desktop.Loggers.ImportTimestampQuality 100% 100%
Daqifi.Desktop.Loggers.SdCardImportResult 100%
Daqifi.Desktop.Loggers.SdCardSessionImporter 49.7% 51%
Daqifi.Desktop.MainWindow 0% 0%
Daqifi.Desktop.Migrations.AddSamplesSessionTimeIndex 97.8%
Daqifi.Desktop.Migrations.AddSessionDeviceMetadata 98.6%
Daqifi.Desktop.Migrations.AddSessionSampleCount 98.1%
Daqifi.Desktop.Migrations.InitialSQLiteMigration 97.4%
Daqifi.Desktop.Migrations.LoggingContextModelSnapshot 0%
Daqifi.Desktop.Models.AddProfileModel 0%
Daqifi.Desktop.Models.DaqifiSettings 83.3% 100%
Daqifi.Desktop.Models.DebugDataCollection 6.6% 0%
Daqifi.Desktop.Models.DebugDataModel 0% 0%
Daqifi.Desktop.Models.FirmwareOption 61.5% 37.5%
Daqifi.Desktop.Models.Notifications 60%
Daqifi.Desktop.Models.SdCardFile 16.6% 0%
Daqifi.Desktop.Services.NoOpMessageBoxService 0%
Daqifi.Desktop.Services.WindowsPrincipalAdminChecker 0%
Daqifi.Desktop.Services.WpfMessageBoxService 0%
Daqifi.Desktop.UpdateVersion.VersionNotification 85.7% 54.1%
Daqifi.Desktop.View.ConnectionDialog 0% 0%
Daqifi.Desktop.View.DebugWindow 0% 0%
Daqifi.Desktop.View.DeviceLogsView 0% 0%
Daqifi.Desktop.View.DuplicateDeviceDialog 0% 0%
Daqifi.Desktop.View.ErrorDialog 0% 0%
Daqifi.Desktop.View.ExportDialog 0% 0%
Daqifi.Desktop.View.FirmwareDialog 0% 0%
Daqifi.Desktop.View.Flyouts.LiveGraphFlyout 0% 0%
Daqifi.Desktop.View.Flyouts.NotificationsFlyout 0% 0%
Daqifi.Desktop.View.Flyouts.SummaryFlyout 0% 0%
Daqifi.Desktop.View.MigrationStatusWindow 0% 0%
Daqifi.Desktop.View.MinimapInteractionController 0% 0%
Daqifi.Desktop.View.ProfilesPane 0% 0%
Daqifi.Desktop.View.Prototype.ChannelsPanePrototype 0% 0%
Daqifi.Desktop.View.Prototype.DevicesPanePrototype 0% 0%
Daqifi.Desktop.View.Prototype.LiveGraphPane 0% 0%
Daqifi.Desktop.View.Prototype.LoggedDataPanePrototype 0% 0%
Daqifi.Desktop.View.SuccessDialog 0% 0%
Daqifi.Desktop.ViewModels.ChannelsPaneViewModel 0% 0%
Daqifi.Desktop.ViewModels.ChannelTileViewModel 0% 0%
Daqifi.Desktop.ViewModels.ConfirmOverlayViewModel 100% 100%
Daqifi.Desktop.ViewModels.ConnectionDialogViewModel 38.1% 29.2%
Daqifi.Desktop.ViewModels.DaqifiViewModel 11% 5.9%
Daqifi.Desktop.ViewModels.DeviceLogsViewModel 50.4% 43.3%
Daqifi.Desktop.ViewModels.DevicesPaneViewModel 0% 0%
Daqifi.Desktop.ViewModels.DeviceTileViewModel 0% 0%
Daqifi.Desktop.ViewModels.DuplicateDeviceDialogViewModel 0%
Daqifi.Desktop.ViewModels.ErrorDialogViewModel 0%
Daqifi.Desktop.ViewModels.ExportDialogViewModel 59.4% 33.3%
Daqifi.Desktop.ViewModels.FirmwareDialogViewModel 59.5% 48.3%
Daqifi.Desktop.ViewModels.LoggingSessionListViewModel 95.6% 88.8%
Daqifi.Desktop.ViewModels.NewProfileChannelItem 0%
Daqifi.Desktop.ViewModels.NewProfileDeviceItem 0% 0%
Daqifi.Desktop.ViewModels.ProfilesPaneViewModel 0% 0%
Daqifi.Desktop.ViewModels.SettingsViewModel 0% 0%
Daqifi.Desktop.ViewModels.SuccessDialogViewModel 0%
Daqifi.Desktop.WindowViewModelMapping.IWindowViewModelMappingsContract 0%
Daqifi.Desktop.WindowViewModelMapping.WindowViewModelMappings 0%
Sentry.Generated.BuildPropertyInitializer 100%
Daqifi.Desktop.Common - 40.5%
Name Line Branch
Daqifi.Desktop.Common 40.5% 23.8%
Daqifi.Desktop.Common.AppDataPaths 84.2% 50%
Daqifi.Desktop.Common.Loggers.AppLogger 35.2% 21%
Daqifi.Desktop.Common.Loggers.NoOpLogger 0%
Daqifi.Desktop.IO - 100%
Name Line Branch
Daqifi.Desktop.IO 100% ****
Daqifi.Desktop.IO.Messages.MessageEventArgs`1 100%

Coverage report generated by ReportGeneratorView full report in build artifacts

@tylerkron tylerkron merged commit 7c573eb into main Jun 29, 2026
2 checks passed
@tylerkron tylerkron deleted the claude/goofy-goldwasser-815400 branch June 29, 2026 20:41
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.

2 participants