Skip to content

[windows] Embed DFNR model and set Store identity#3225

Merged
ten9876 merged 2 commits into
mainfrom
codex/store-dfnr-embedded-model
May 27, 2026
Merged

[windows] Embed DFNR model and set Store identity#3225
ten9876 merged 2 commits into
mainfrom
codex/store-dfnr-embedded-model

Conversation

@jensenpat
Copy link
Copy Markdown
Collaborator

Summary

This prepares the Windows Store MSIX package for submission while keeping DFNR enabled without shipping the DeepFilterNet model as a .tar.gz archive.

  • Embed the DeepFilterNet model resources at build time so Store packages can load DFNR data directly from Qt resources.
  • Update the Windows MSIX packaging script and CI workflow to exclude the loose DFNR model payload for Store builds.
  • Add checked-in Partner Center package identity defaults for the Store submission:
    • Identity.Name: AetherSDR.AetherSDR
    • Identity.Publisher: CN=E03F94A2-AEAB-46D2-8BF1-6419C305CC44
    • PublisherDisplayName: AetherSDR
  • Document the Store build flow, identity defaults, validation steps, and upload package behavior.

Implementation Notes

The DFNR loader now first tries the existing app-data model location, then falls back to a packaged resource path when the model is embedded. This lets normal development/test builds continue to use external model files while Store builds avoid archive payloads that WACK flags.

The workflow sources packaging/windows/store-identity.ps1 before creating the MSIX. The helper only fills missing environment variables, so CI repository variables or local shell variables can still override the identity when needed.

Validation

Built locally from a fresh Windows Store submission worktree using the MSVC environment and 8 build jobs.

  • cmake --build build\msvc-store-submit --target AetherSDR -j 8
  • windeployqt deploy\AetherSDR.exe --release --no-translations --no-system-d3d-compiler
  • packaging\windows\create-msix.ps1 -DeployDir deploy -PackageRoot AetherSDR-store-submission\msix-root -OutputDir AetherSDR-store-submission -CreateUpload -SkipSign -ExcludeDfnrModel
  • packaging\windows\check-dpi-awareness.ps1 -ExePath deploy\AetherSDR.exe
  • Windows App Certification Kit on the final MSIX

Final local validation results:

  • Manifest identity verified as AetherSDR.AetherSDR / CN=E03F94A2-AEAB-46D2-8BF1-6419C305CC44 / AetherSDR.
  • Final package contains deepfilter.dll and AetherSDR.exe, but no DeepFilterNet, .dfmodel, or .tar.gz payload.
  • WACK overall result: PASS.
  • WACK Archive files usage: PASS.
  • WACK DPIAwarenessValidation: PASS.
  • WACK optional Blocked executables: still reports findings from Qt/OpenGL/process API/static string matches, but overall WACK remains PASS.

The final local artifact for Partner Center submission is the generated .msixupload; it is intentionally unsigned with -SkipSign because Microsoft signs Store-distributed packages.

jensenpat and others added 2 commits May 27, 2026 11:28
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
@jensenpat jensenpat changed the title Windows Store MSIX: embed DFNR model and set Store identity [windows] embed DFNR model and set Store identity May 27, 2026
@jensenpat jensenpat changed the title [windows] embed DFNR model and set Store identity [windows] Embed DFNR model and set Store identity May 27, 2026
@jensenpat jensenpat marked this pull request as ready for review May 27, 2026 21:43
@jensenpat jensenpat requested review from a team as code owners May 27, 2026 21:43
@ten9876 ten9876 merged commit 44eaef7 into main May 27, 2026
6 checks passed
@ten9876 ten9876 deleted the codex/store-dfnr-embedded-model branch May 27, 2026 22:36
@ten9876
Copy link
Copy Markdown
Collaborator

ten9876 commented May 27, 2026

Claude here — merged, thanks @jensenpat. The embed-in-resource + extract-to-cache approach is more elegant than the fork-patch sketch I'd filed in #3217 — solves the same problem without maintaining a DeepFilter fork. SHA-256 sidecar invalidation is the right way to handle DeepFilter version bumps; nice touch.

The Store-cert quadfecta is now complete:

WACK finding Resolved by
Blocked executables #3206 (in-process ZIP)
Archive files usage #3205 + this PR (now with DFNR functional, not stripped)
DPIAwarenessValidation #3208 (PerMonitorV2 manifest + CI verifier)
Store identity values this PR (store-identity.ps1)

Closed #3217 with a pointer to this PR.

One tiny doc-cleanup observation noted in #3217's close — the "NULL for embedded default" comment in third_party/deepfilter/include/deep_filter.h:24 is now formally stale doc (the docstring implies behaviour that doesn't exist). Not blocking anything, just worth a one-line scrub if anyone's in that file.

73, Jeremy KK7GWY & Claude (AI dev partner)

jensenpat pushed a commit that referenced this pull request May 28, 2026
## Summary

`CMakeLists.txt:1062` passes `/MANIFESTINPUT:<path>` to the MSVC linker
but not the required `/MANIFEST:EMBED`. Per MSVC docs the former is only
valid alongside the latter. Older toolsets accepted the lone flag with a
warning; newer ones (VS 18.x / MSVC 14.50+) fail hard:

```
LINK : fatal error LNK1220: 'MANIFESTINPUT' requires '/MANIFEST:EMBED' specification
```

One-line fix (4 lines incl. comment): add `/MANIFEST:EMBED` to the
`target_link_options` call so the manifest is embedded inline (the
intended behaviour anyway).

## Why a separate PR

Split out of #3234 (the `mic_level` TCI handler) on reviewer request —
this is an unrelated build-system change and deserves independent review
against the Windows toolchain matrix.

## Context

- Hit on a fresh Windows build with **Visual Studio 18 Build Tools,
toolset 14.50.35717**, Windows SDK 10.0.26100.0.
- This branch is cut from `44eaef7c` (the #3225 "Embed DFNR model and
set Store identity" merge), so it sits on top of the latest
Windows/manifest changes — no conflict with #3225's Store-identity
handling (different part of the file).
- CI presumably uses an older MSVC, which is why this has been latent.

## Test plan

- [x] Windows local build (MSVC 14.50) links clean with the fix; fails
with LNK1220 without it
- [x] No effect on Linux/macOS — the change is inside the existing
`if(MSVC)` block
- [ ] CI Windows matrix (auto)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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