TASK 48 slice 2: the app packs as a Microsoft Store MSIX

The manifest the Store route needs, and a real package built from it.

Packaging/Package.appxmanifest is a full-trust packagedClassicApp: EntryPoint
Windows.FullTrustApplication, uap10:TrustLevel=mediumIL,
uap10:RuntimeBehavior=packagedClassicApp, the rescap runFullTrust capability, and
webcam + microphone DeviceCapabilities. That combination is what lets the packaged
app launch the bundled ffmpeg as a child process and write to the user's profile;
an appContainer package would virtualise the recordings folder instead. x64 only,
en-US only (policy 10.7).

Packaging/Assets/ carries the four tiles the packer requires, generated from the
app's own Assets/llamacasty-logo.jpg by scripts/make-store-logos.py - listing art
and app art cannot drift.

scripts/package-msix.sh publishes Release win-x64 self-contained into
artifacts/msix-stage (a RID-less publish would copy every RID's ONNX native),
stages the manifest as AppxManifest.xml + Assets, and runs the Windows SDK's
makeappx. MSIX_PFX/MSIX_PFX_PASSWORD sign a package for a local test install; the
Store signs submissions. artifacts/ is gitignored.

First real package: artifacts/LlamaCasty.msix, 159 MB, 509 files, 'Package
creation succeeded'.

Schema traps found by packing (makeappx reports one error at a time):
Square310x310Logo and Wide310x150Logo are NOT uap:VisualElements attributes - they
live on uap:DefaultTile.

Guard: StorePackagingTests.The_package_manifest_declares_full_trust_camera_and_
microphone - identity/architecture, the full-trust application element, the three
capabilities, no appContainer VALUE (not the file text: the manifest's own comment
says the word), en-US only, and every referenced logo present.

Full suite 438/438, 0 warnings. Cold-start smoke test after the Velopack removal:
MainWindow loaded, no exceptions.
This commit is contained in:
2026-10-22 09:05:50 -07:00
parent 20cfadca0c
commit daac7689fd
16 changed files with 412 additions and 26 deletions
+15 -4
View File
@@ -77,6 +77,17 @@
unchanged; the seams are two `internal` properties). Guard:
`ytLive.Tests/AppLogRotationTests.cs`. Slices 2 (temp alert-clip cleanup) and 3 (low-disk
guard before recording) are still open.
- **TASK 48 slice 2 — the app PACKS as a Store MSIX (shipped 2026-10-22).** `Packaging/Package.appxmanifest`
(full trust: `Windows.FullTrustApplication` + `uap10:TrustLevel=mediumIL` +
`uap10:RuntimeBehavior=packagedClassicApp` + `rescap runFullTrust`, plus webcam/microphone
`DeviceCapability`s, x64, en-US only) + `Packaging/Assets/` (four logo tiles generated from the
app's own artwork by `scripts/make-store-logos.py`) + `scripts/package-msix.sh` (publish
`Release -r win-x64 --self-contained` → stage → `makeappx pack`, optional `MSIX_PFX` signing).
**First real package built: `artifacts/LlamaCasty.msix`, 159 MB, 509 files, `Package creation
succeeded`** (`artifacts/` is gitignored). Guard:
`StorePackagingTests.The_package_manifest_declares_full_trust_camera_and_microphone`.
⚠️ Before submission the manifest's `Identity/@Publisher` and `PublisherDisplayName` must be
set to the exact values Partner Center shows — a mismatch is a rejection.
- **TASK 48 slice 3 — the self-updater is gone (shipped 2026-10-22).** The Store route (creator
ruling 2026-09-27) means the Store updates the app, so the Velopack package + bootstrap were
**deleted** (`ytLive.csproj`, `App.xaml.cs`) — a compliance action, not cleanup: the updater
@@ -280,10 +291,10 @@ Zombie entities deleted from the registry: `script.leak_strobe`, `script.doorbel
Galaxy `cef.log` at 2.7 GB is NOT ours.)
## Tests
- Last full run: **437/437 passed, 0 warnings** (2026-10-22 — after TASK 48 slice 3's
`StorePackagingTests`; the run before was 436/436 after TASK 55 slice 1's
`AppLogRotationTests`, and the one before that 435/435 after TASK 63). The one failure seen
earlier in the
- Last full run: **438/438 passed, 0 warnings** (2026-10-22 — after TASK 48 slice 2's
manifest guard; the run before was 437/437 after slice 3's `StorePackagingTests`, then
436/436 after TASK 55 slice 1's `AppLogRotationTests` and 435/435 after TASK 63). The one
failure seen earlier in the
session was `LayerReorderPersistenceTests.RealMouseDrag_OnTheLayerList_PersistsTheReorder`,
which **passes in isolation** (re-run: 3/3) — the known real-mouse flake, not a regression.
- Known flaky-by-environment (all pass in isolation): `AudioPipelineTests.Mix_HonorsProviderGains…`,