From 1b53dfecb7e982c4e237146e4ea2d13cc83693be Mon Sep 17 00:00:00 2001 From: keida Date: Fri, 11 Sep 2026 13:06:08 +1200 Subject: [PATCH 1/2] docs: record v1.1.2 latest release --- README.md | 29 ++++++----- README.zh-CN.md | 29 ++++++----- docs/DEVELOPMENT.md | 4 +- docs/wpf-r1/ACCEPTANCE-SUMMARY.md | 22 ++++----- docs/wpf-r1/CANDIDATE-MANIFEST.json | 74 ++++++++++++++++------------- docs/wpf-r1/RELEASE-NOTES-R1.md | 33 +++++++------ docs/wpf-r1/TICKET-MAP.md | 6 +-- docs/wpf-r1/WPF-R1-FREEZE.md | 25 ++++++---- 8 files changed, 116 insertions(+), 106 deletions(-) diff --git a/README.md b/README.md index 8930eb8..18cd136 100644 --- a/README.md +++ b/README.md @@ -10,20 +10,18 @@ Quote Float is a native Windows WPF widget that keeps Codex Plus/Pro quota statu _Figure: actual WPF client-area renders with illustrative sample quota values; native DWM border/corners are not captured._ -The WPF R1 simplification is frozen and released. Its status is **Boss PASS, v1.1.0 RELEASED / LATEST**: the release is a Windows x64 framework-dependent package and requires the `.NET 8 Desktop Runtime`. +The WPF R1 simplification is frozen and released. Its status is **Boss PASS, v1.1.2 RELEASED / LATEST**: the release is a self-contained Windows x64 single-file application and does not require a separate .NET installation. ## Quick start -1. On Windows x64, install the official [.NET 8 Desktop Runtime](https://dotnet.microsoft.com/en-us/download/dotnet/8.0/runtime). -2. Download the [v1.1.0 Windows x64 ZIP](https://github.com/keida/codex-quota-float/releases/download/v1.1.0/QuoteFloat-WPF-R1-v1.1.0-win-x64.zip) and [SHA256SUMS.txt](https://github.com/keida/codex-quota-float/releases/download/v1.1.0/SHA256SUMS.txt). -3. Extract the ZIP. -4. Run `QuotaFloat.Wpf.exe`. -5. Optional: from the folder containing the downloaded ZIP and `SHA256SUMS.txt`, verify the ZIP with PowerShell: +1. Download the [v1.1.2 Windows x64 single-file EXE](https://github.com/keida/codex-quota-float/releases/download/v1.1.2/Quote-Float-v1.1.2-win-x64.exe) and [SHA256SUMS.txt](https://github.com/keida/codex-quota-float/releases/download/v1.1.2/SHA256SUMS.txt). +2. Run `Quote-Float-v1.1.2-win-x64.exe` directly. No separate .NET installation is required. +3. Optional: from the folder containing the downloaded EXE and `SHA256SUMS.txt`, verify the EXE with PowerShell: ```powershell - $line = Get-Content .\SHA256SUMS.txt | Where-Object { $_ -match 'QuoteFloat-WPF-R1-v1.1.0-win-x64\.zip$' } + $line = Get-Content .\SHA256SUMS.txt | Where-Object { $_ -match 'Quote-Float-v1.1.2-win-x64\.exe$' } $expected = ($line -split '\s+')[0] - $actual = (Get-FileHash .\QuoteFloat-WPF-R1-v1.1.0-win-x64.zip -Algorithm SHA256).Hash + $actual = (Get-FileHash .\Quote-Float-v1.1.2-win-x64.exe -Algorithm SHA256).Hash if ($actual -ne $expected) { throw 'Checksum mismatch' } "SHA-256 OK: $actual" ``` @@ -62,11 +60,12 @@ The verified baseline is Windows 100% / 96 DPI. These items remain explicitly `N ## Published release -- [v1.1.0 Release](https://github.com/keida/codex-quota-float/releases/tag/v1.1.0) -- [Download the Windows x64 ZIP](https://github.com/keida/codex-quota-float/releases/download/v1.1.0/QuoteFloat-WPF-R1-v1.1.0-win-x64.zip) -- [SHA256SUMS.txt](https://github.com/keida/codex-quota-float/releases/download/v1.1.0/SHA256SUMS.txt) -- EXE SHA-256: `322DC1F8ED39A6769CCC1102A6C5D2CABBF088CF2C93003399D50C942CDCE507` -- WPF DLL SHA-256: `E5F50F66903C29F45AEFF799B6738254A8D6CEC0D59A508103B89EC68D250976` -- ZIP SHA-256: `8B6D4AB34A39F9D466A499150968AEA4DDD344FAC1B33B5CDA1696AE5F40024D` +- [v1.1.2 Latest Release](https://github.com/keida/codex-quota-float/releases/tag/v1.1.2) +- [Download the Windows x64 single-file EXE](https://github.com/keida/codex-quota-float/releases/download/v1.1.2/Quote-Float-v1.1.2-win-x64.exe) +- [SHA256SUMS.txt](https://github.com/keida/codex-quota-float/releases/download/v1.1.2/SHA256SUMS.txt) +- EXE SHA-256: `2FFF59F1B79E232C7ADBA88C49D57332ECA19EE2BE4FCC9E60195B5898D9E9DF` +- SHA256SUMS.txt SHA-256: `3E278A81B55341D57F8635B68A681F126110688E575A313B8E287FA30E7A968A` +- Product: self-contained Windows x64 single-file application; no separate .NET installation is required. +- Tray menu labels follow the current ZH/EN language. -The V3 source scope has been merged, and the v1.1.0 tag and Latest Release are published. The historical v1.0.0 tag and Draft Release remain unchanged. +The V3 source scope and v1.1.2 tray localization fix are merged. v1.1.0 remains the prior published release; the v1.1.1 tag is unpublished and superseded. The historical v1.0.0 tag and Draft Release remain unchanged. diff --git a/README.zh-CN.md b/README.zh-CN.md index 64e7cd7..8993429 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -10,20 +10,18 @@ Quote Float 是一个原生 Windows WPF 浮窗,让 Codex Plus/Pro 的额度状 _图示:实际 WPF 客户区渲染,额度数值为示例;未捕获原生 DWM 边框/圆角。_ -Quote Float 的 WPF R1 简化版本已完成冻结并发布。当前状态是 **Boss PASS、v1.1.0 RELEASED / LATEST**:版本发布到 Windows x64 framework-dependent 包,并要求 `.NET 8 Desktop Runtime`。 +Quote Float 的 WPF R1 简化版本已完成冻结并发布。当前状态是 **Boss PASS、v1.1.2 RELEASED / LATEST**:版本是自包含的 Windows x64 单文件应用,无需单独安装 .NET。 ## 快速开始 -1. 在 Windows x64 上安装官方 [.NET 8 Desktop Runtime](https://dotnet.microsoft.com/en-us/download/dotnet/8.0/runtime)。 -2. 下载 [v1.1.0 Windows x64 ZIP](https://github.com/keida/codex-quota-float/releases/download/v1.1.0/QuoteFloat-WPF-R1-v1.1.0-win-x64.zip) 和 [SHA256SUMS.txt](https://github.com/keida/codex-quota-float/releases/download/v1.1.0/SHA256SUMS.txt)。 -3. 解压 ZIP。 -4. 运行 `QuotaFloat.Wpf.exe`。 -5. 可选:在下载的 ZIP 与 `SHA256SUMS.txt` 所在目录中,用 PowerShell 校验 ZIP: +1. 下载 [v1.1.2 Windows x64 单文件 EXE](https://github.com/keida/codex-quota-float/releases/download/v1.1.2/Quote-Float-v1.1.2-win-x64.exe) 和 [SHA256SUMS.txt](https://github.com/keida/codex-quota-float/releases/download/v1.1.2/SHA256SUMS.txt)。 +2. 直接运行 `Quote-Float-v1.1.2-win-x64.exe`,无需单独安装 .NET。 +3. 可选:在下载的 EXE 与 `SHA256SUMS.txt` 所在目录中,用 PowerShell 校验 EXE: ```powershell - $line = Get-Content .\SHA256SUMS.txt | Where-Object { $_ -match 'QuoteFloat-WPF-R1-v1.1.0-win-x64\.zip$' } + $line = Get-Content .\SHA256SUMS.txt | Where-Object { $_ -match 'Quote-Float-v1.1.2-win-x64\.exe$' } $expected = ($line -split '\s+')[0] - $actual = (Get-FileHash .\QuoteFloat-WPF-R1-v1.1.0-win-x64.zip -Algorithm SHA256).Hash + $actual = (Get-FileHash .\Quote-Float-v1.1.2-win-x64.exe -Algorithm SHA256).Hash if ($actual -ne $expected) { throw 'Checksum mismatch' } "SHA-256 OK: $actual" ``` @@ -62,11 +60,12 @@ WPF 工程位于 [`wpf/QuotaFloat.Wpf.csproj`](wpf/QuotaFloat.Wpf.csproj)。开 ## 已发布版本 -- [v1.1.0 Release](https://github.com/keida/codex-quota-float/releases/tag/v1.1.0) -- [下载 Windows x64 ZIP](https://github.com/keida/codex-quota-float/releases/download/v1.1.0/QuoteFloat-WPF-R1-v1.1.0-win-x64.zip) -- [SHA256SUMS.txt](https://github.com/keida/codex-quota-float/releases/download/v1.1.0/SHA256SUMS.txt) -- EXE SHA-256:`322DC1F8ED39A6769CCC1102A6C5D2CABBF088CF2C93003399D50C942CDCE507` -- WPF DLL SHA-256:`E5F50F66903C29F45AEFF799B6738254A8D6CEC0D59A508103B89EC68D250976` -- ZIP SHA-256:`8B6D4AB34A39F9D466A499150968AEA4DDD344FAC1B33B5CDA1696AE5F40024D` +- [v1.1.2 Latest Release](https://github.com/keida/codex-quota-float/releases/tag/v1.1.2) +- [下载 Windows x64 单文件 EXE](https://github.com/keida/codex-quota-float/releases/download/v1.1.2/Quote-Float-v1.1.2-win-x64.exe) +- [SHA256SUMS.txt](https://github.com/keida/codex-quota-float/releases/download/v1.1.2/SHA256SUMS.txt) +- EXE SHA-256:`2FFF59F1B79E232C7ADBA88C49D57332ECA19EE2BE4FCC9E60195B5898D9E9DF` +- SHA256SUMS.txt SHA-256:`3E278A81B55341D57F8635B68A681F126110688E575A313B8E287FA30E7A968A` +- 产品:自包含的 Windows x64 单文件应用,无需单独安装 .NET。 +- 托盘菜单跟随当前中英文语言设置。 -V3 源码范围已经完成合并,v1.1.0 tag 和 Latest Release 已发布。历史 v1.0.0 tag/Draft Release 保持不变。 +V3 源码范围和 v1.1.2 托盘本地化修复已经完成合并。v1.1.0 是之前的已发布版本;v1.1.1 tag 未发布且已被 v1.1.2 取代。历史 v1.0.0 tag/Draft Release 保持不变。 diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 7e2049b..0e06c19 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -18,7 +18,7 @@ The accepted WPF state owner is `WidgetWindowController`; visual changes are app Static inspection, compilation, deterministic tests, native smoke, and human interaction are separate evidence levels. The accepted freeze evidence is reused here; this documentation freeze performs no product build or test run. -The focused test evidence is `31 fixtures; 58 checks; activeRequests=1; refreshCalls=1; backoffCalls=3; privacy=normalized-values-only`. The accepted Release build had zero warnings and zero errors. Native evidence is limited to the Windows 100% / 96 DPI baseline and the candidate identity in [`CANDIDATE-MANIFEST.json`](wpf-r1/CANDIDATE-MANIFEST.json). +The focused test evidence is `36 fixtures; 71 checks; activeRequests=1; refreshCalls=1; backoffCalls=4; privacy=normalized-values-only`. The accepted Release build and WPF CI build had zero warnings and zero errors. Native evidence is limited to the Windows 100% / 96 DPI baseline, direct single-file startup, safe single-instance behavior, normal exit, and the candidate identity in [`CANDIDATE-MANIFEST.json`](wpf-r1/CANDIDATE-MANIFEST.json). The current tray menu follows the selected ZH/EN language in human interaction testing. Do not use real authentication or terminate user processes for deterministic tests. Do not record tokens, response bodies, cookies, account data, machine identifiers, PID/HWND values, or absolute personal paths in public artifacts. @@ -39,4 +39,4 @@ dotnet run --project wpf/tests/QuotaFloat.Wpf.Tests.csproj --configuration Relea 2. Isolated Codex close/absence/response/restart recovery: `NOT VERIFIED / OUT OF R1 ACCEPTANCE SCOPE`. 3. Native Windows 125% / 150% DPI runtime acceptance: `NOT VERIFIED / OUT OF R1 ACCEPTANCE SCOPE`. -Version 1.1.0 is published and is the latest release. For future publication, use the exact staging boundaries in [`PUBLICATION-ALLOWLIST-V3.md`](wpf-r1/PUBLICATION-ALLOWLIST-V3.md) and exclude credentials, machine-local state, generated output, release binaries, and unrelated historical or native changes from source commits. +Version 1.1.2 is published as the Latest Release and is a self-contained Windows x64 single-file application; no separate .NET installation is required. For future publication, use the exact staging boundaries in [`PUBLICATION-ALLOWLIST-V3.md`](wpf-r1/PUBLICATION-ALLOWLIST-V3.md) and exclude credentials, machine-local state, generated output, release binaries, and unrelated historical or native changes from source commits. diff --git a/docs/wpf-r1/ACCEPTANCE-SUMMARY.md b/docs/wpf-r1/ACCEPTANCE-SUMMARY.md index 87747aa..b18ed23 100644 --- a/docs/wpf-r1/ACCEPTANCE-SUMMARY.md +++ b/docs/wpf-r1/ACCEPTANCE-SUMMARY.md @@ -1,28 +1,26 @@ # WPF R1 Acceptance Summary -Status: **BOSS PASS** for the simplified release. v1.1.0: **RELEASED / LATEST**. +Status: **BOSS PASS** for the simplified release. v1.1.2: **RELEASED / LATEST**. ## Candidate identity -- Released executable SHA-256: `322DC1F8ED39A6769CCC1102A6C5D2CABBF088CF2C93003399D50C942CDCE507` -- Released WPF DLL SHA-256: `E5F50F66903C29F45AEFF799B6738254A8D6CEC0D59A508103B89EC68D250976` -- Released ZIP SHA-256: `8B6D4AB34A39F9D466A499150968AEA4DDD344FAC1B33B5CDA1696AE5F40024D` -- SHA256SUMS.txt SHA-256: `E1AB8016C66F417AE003109981115798B761500C6AE796107F618EC5F0985A96` -- Tag: `v1.1.0` at `fc8e2749e7661b19509ee0bb924f04d204779420`; published latest release: [Quote Float WPF R1 v1.1.0](https://github.com/keida/codex-quota-float/releases/tag/v1.1.0) -- Package: [Windows x64 framework-dependent ZIP](https://github.com/keida/codex-quota-float/releases/download/v1.1.0/QuoteFloat-WPF-R1-v1.1.0-win-x64.zip); requires `.NET 8 Desktop Runtime`. +- Released executable: [Quote-Float-v1.1.2-win-x64.exe](https://github.com/keida/codex-quota-float/releases/download/v1.1.2/Quote-Float-v1.1.2-win-x64.exe), 71,675,147 bytes, self-contained Windows x64 single-file; no separate .NET installation required. +- Released executable SHA-256: `2FFF59F1B79E232C7ADBA88C49D57332ECA19EE2BE4FCC9E60195B5898D9E9DF` +- SHA256SUMS.txt: [download](https://github.com/keida/codex-quota-float/releases/download/v1.1.2/SHA256SUMS.txt); SHA-256: `3E278A81B55341D57F8635B68A681F126110688E575A313B8E287FA30E7A968A` +- Tag: `v1.1.2` annotated object `b7cf6651a6f683d9e46ff0b2e7a51e26d4ab1877`, peeled to `8ea5e0c5d06c2141754af57ef9c9ab27edba04bc`; published latest release: [Quote Float WPF R1 v1.1.2](https://github.com/keida/codex-quota-float/releases/tag/v1.1.2) - Verified native baseline: Windows 100% / 96 DPI. - Source inventory and hashes: [`CANDIDATE-MANIFEST.json`](CANDIDATE-MANIFEST.json). ## Accepted evidence - Release build: PASS, zero warnings and zero errors. -- Focused deterministic tests: PASS, `31 fixtures; 58 checks; activeRequests=1; refreshCalls=1; backoffCalls=3; privacy=normalized-values-only`. -- Targeted native smoke: Plus Full `278 × 216`, Plus Orb `74 × 84`, Pro Full `278 × 156`, Pro Orb `74 × 62`; effective DPI 96; Topmost true; DWM corner contract observed; no non-zero region; clean exit and no residual process. +- Focused deterministic tests: PASS, `36 fixtures; 71 checks; activeRequests=1; refreshCalls=1; backoffCalls=4; privacy=normalized-values-only`. +- Targeted native smoke: Plus Full `278 × 216` and Pro Full `278 × 156` at effective DPI 96; direct/demo startup visible, safe single-instance behavior, clean exit, and no residual process. - Single-instance activation: second launch exited cleanly, one process remained, and the first window reapplied the current state. -- Human ownership smoke: border/corners/no clipping, Full-to-edge Orb, short hover, long hover temporary Full, pointer-leave restoration, and topmost against a normal competing window — PASS. -- Independent source/ownership review: PASS; only `ApplyState()` owns the relevant Topmost and DWM scheduling paths, and activation routes through state reapplication. +- Human interaction: prior WPF R1 border/corners, edge/hover/topmost behavior remained accepted; v1.1.2 ZH→EN→ZH tray menu localization audit — PASS. +- PR #12 WPF CI and GitGuardian checks — PASS. -The freeze task reused this accepted evidence; the published package was then rebuilt and smoke-tested from isolated clean tag worktrees. +The v1.1.2 package was published from the exact merged source commit above; release asset size, digest, and downloadability were independently verified after publication. v1.1.0 remains the prior published release, while v1.1.1 is an unpublished superseded tag. ## Contract result diff --git a/docs/wpf-r1/CANDIDATE-MANIFEST.json b/docs/wpf-r1/CANDIDATE-MANIFEST.json index 357fedd..724fb42 100644 --- a/docs/wpf-r1/CANDIDATE-MANIFEST.json +++ b/docs/wpf-r1/CANDIDATE-MANIFEST.json @@ -1,31 +1,31 @@ { "schema": "quote-float-wpf-r1-candidate-v3", - "status": "BOSS PASS; v1.1.0 RELEASED / LATEST", + "status": "BOSS PASS; v1.1.2 RELEASED / LATEST", "branch": "main", - "base_commit": "2db7775723201206a23a12752752368f0a9a25ec", - "prior_working_tree_base": "ce9cc923ded971d8aa051ab8d4b69dc065051c8b (identical tree; historical source baseline, not the simplified candidate commit)", - "source_snapshot_commit": "cb670afbea1391a175e6af1d9f58c4dc903d2988", - "candidate_state": "v1.1.0 released from the merged WPF source; PR #2 is merged into main at 2db7775723201206a23a12752752368f0a9a25ec; the v1.1.0 annotated tag peels to fc8e2749e7661b19509ee0bb924f04d204779420 and is the Latest Release; subsequent documentation-only Git SHA changes do not alter the artifacts; the historical v1.0.0 tag and Draft Release are not reused or modified", - "hash_basis": "source_inventory, config_inventory, and documentation_inventory SHA-256/byte counts use canonical Git blob bytes at their recorded commits; checkout EOL conversion is not the identity basis", + "base_commit": "8ea5e0c5d06c2141754af57ef9c9ab27edba04bc", + "source_snapshot_commit": "8ea5e0c5d06c2141754af57ef9c9ab27edba04bc", + "candidate_state": "v1.1.2 released from the merged WPF source at the canonical main commit; the v1.1.2 annotated tag is the Latest Release; v1.1.0 remains the prior published release; the v1.1.1 tag is unpublished and superseded; the historical v1.0.0 tag and Draft Release are not reused or modified", + "hash_basis": "source_inventory, config_inventory, and documentation_inventory SHA-256/byte counts use canonical Git blob bytes at the current main commit; checkout EOL conversion is not the identity basis", "comparison_base": "origin/main", - "comparison_base_sha": "2db7775723201206a23a12752752368f0a9a25ec", + "comparison_base_sha": "8ea5e0c5d06c2141754af57ef9c9ab27edba04bc", "verified_native_baseline": "Windows 100% / 96 DPI", "candidate_artifacts": { - "exe_sha256": "322DC1F8ED39A6769CCC1102A6C5D2CABBF088CF2C93003399D50C942CDCE507", - "wpf_dll_sha256": "E5F50F66903C29F45AEFF799B6738254A8D6CEC0D59A508103B89EC68D250976", - "zip_filename": "QuoteFloat-WPF-R1-v1.1.0-win-x64.zip", - "zip_sha256": "8B6D4AB34A39F9D466A499150968AEA4DDD344FAC1B33B5CDA1696AE5F40024D", - "sha256sums_sha256": "E1AB8016C66F417AE003109981115798B761500C6AE796107F618EC5F0985A96", - "framework": "Windows x64 framework-dependent; .NET 8 Desktop Runtime required" + "exe_filename": "Quote-Float-v1.1.2-win-x64.exe", + "exe_bytes": 71675147, + "exe_sha256": "2FFF59F1B79E232C7ADBA88C49D57332ECA19EE2BE4FCC9E60195B5898D9E9DF", + "sha256sums_filename": "SHA256SUMS.txt", + "sha256sums_sha256": "3E278A81B55341D57F8635B68A681F126110688E575A313B8E287FA30E7A968A", + "framework": "Windows x64 self-contained single-file; no separate .NET installation required", + "product_version": "1.1.2", + "file_version": "1.1.2.0" }, "accepted_evidence": { - "build": "Release build PASS in two distinct clean checkout paths; zero warnings; zero errors; EXE and DLL SHA-256 byte-identical", - "reproducible_artifacts": "PASS; checkout- and revision-independent clean-path artifacts; AssemblyVersion=1.1.0.0; FileVersion=1.1.0.0; InformationalVersion=1.1.0 with no SourceRevisionId; EnableSourceLink=false and no embedded raw.githubusercontent revision URL; later documentation-only Git SHA changes do not alter artifacts; semantic IL hash F3FE74405E9097C0A314AEAD9769B284D35746E542AE078BEFE5C30D3B38F4F0; WPF g.resources hash F3D6FD202A9543800A3695851807BDF45470047A80A2784868BC41B81484E72E; runtime types 125", - "focused_tests": "PASS; 31 fixtures; 58 checks; activeRequests=1; refreshCalls=1; backoffCalls=3; privacy=normalized-values-only", - "native_smoke": "PASS; Plus/Pro Full and Orb at 96 DPI with accepted geometry, DWM corner behavior, Topmost, clean exit, and zero residual process", - "single_instance": "PASS; second launch exits cleanly, one process remains, current state is reapplied", - "human_ownership": "PASS; Full border/corners, edge Orb, short hover, long hover temporary Full, pointer-leave restoration, and topmost competition", - "independent_review": "PASS; ApplyState ownership and activation/state routing rechecked read-only" + "build": "PASS; WPF Release build and PR #12 WPF CI completed with zero warnings and zero errors; GitGuardian PASS", + "focused_tests": "PASS; 36 fixtures; 71 checks; activeRequests=1; refreshCalls=1; backoffCalls=4; privacy=normalized-values-only", + "native_smoke": "PASS for the accepted R1 baseline; direct/demo startup visible, Plus Full 278 x 216 and Pro Full 278 x 156 at 96 DPI, clean exit, and zero residual process", + "single_instance": "PASS; second launch exits cleanly, one process remains, and current state is reapplied", + "human_interaction": "PASS; prior R1 border/corners, edge/hover/topmost behavior accepted; v1.1.2 ZH -> EN -> ZH tray localization audit passed", + "release_verification": "PASS; non-draft, non-prerelease Latest Release with exactly two uploaded assets; remote digests, sizes, and HTTP 200 downloads match the published candidate" }, "scope_contract": { "settings": "420 x 296 DIP non-modal window", @@ -37,7 +37,7 @@ "state_owner": "wpf/Windows/WidgetWindowController.cs" }, "source_inventory": [ - {"path":"wpf/app.manifest","sha256":"E47EEE48BD699F0E357570B556FAC5972BCAC866E61FDB54A72B53C2C651E27C","bytes":747}, + {"path":"wpf/app.manifest","sha256":"EEAD382C59A56FA7BAB0385742B75B830533AB399D1A6DC69B799D5C214B3722","bytes":747}, {"path":"wpf/App.xaml","sha256":"F9A3116A80EC5A0A0A2F9BC856ED5B070C94A99643BB75FB8C2C467A2D2196F9","bytes":281}, {"path":"wpf/App.xaml.cs","sha256":"C56EF21FF29DC0B36D477DAD7DBF5451B207FBE5EBBA79EE98BFAD379CE069AA","bytes":819}, {"path":"wpf/Diagnostics/EdgeDragDiagnostics.cs","sha256":"D695FB0450F44C6DADF04960395E2225A0243AB1A59EDAD3C1CE656B2C27B4F5","bytes":6992}, @@ -46,16 +46,16 @@ {"path":"wpf/Platform/WindowCornerContract.cs","sha256":"6FA1FD3726712375F698920B67FFBA2C1AA0160E3EDABCB2AABD313F0349B315","bytes":516}, {"path":"wpf/Platform/WindowPlacementService.cs","sha256":"6C1BAAC8EF8B30FC608B5C572FDC35C4998C9CB41496E7981A1A05480873380E","bytes":5401}, {"path":"wpf/Properties/AssemblyInfo.cs","sha256":"BE10F95593054E53FC4C46472B45D13CC3BE578AE9C93315D22C3C63AF8647F3","bytes":157}, - {"path":"wpf/QuotaFloat.Wpf.csproj","sha256":"E987219A463E773432EEC209382C8F386E9F319A701E1E668B170C24E530E2E3","bytes":1155}, + {"path":"wpf/QuotaFloat.Wpf.csproj","sha256":"C1C0E5674B827CA2FB50C7421758DF370BAC510CDE7FE20A1733A7087753EF51","bytes":1216}, {"path":"wpf/Resources/CivicWayfinding.xaml","sha256":"4CF1E9E98DBEA0BDC48E692EEA05888774ED7DFF1BC8F017D2DED8358478D0D5","bytes":1366}, - {"path":"wpf/Resources/UiText.cs","sha256":"9735942BB9DE97563DF08F4E81F917BCDFF8D49E875A5048311AAFBCA0CA5A8E","bytes":4242}, - {"path":"wpf/Services/CodexPresenceService.cs","sha256":"A85FB8C6A0E1CF62A550ED1A73B6982265B7DC15437FCC8248AA7A2A3AB3CC87","bytes":2949}, + {"path":"wpf/Resources/UiText.cs","sha256":"BD5ADDCE74284CBEFE325E64A749E35D14388381FDB19B2D18BFCF85040D9586","bytes":4455}, + {"path":"wpf/Services/CodexPresenceService.cs","sha256":"2D26DAA2FD082902023004847CF2E139A331FB189AA19BEE7C80E194CF1A8AFD","bytes":3172}, {"path":"wpf/Services/PreferenceStore.cs","sha256":"CCFE724ABFD24F1A1F398ABADAFC66190F1AF50AFE829DCFEFBBE6F3E26BA8D8","bytes":2874}, {"path":"wpf/Services/QuotaRefreshCoordinator.cs","sha256":"24D69EA29078CC0402CA834135065F02463C4DA68502669728EF171B60307F63","bytes":8677}, {"path":"wpf/Services/QuotaState.cs","sha256":"A4423B03165CFCE314072017C332BB844BEBC8B6AABFED7F1BDCB7B74C46D475","bytes":1660}, {"path":"wpf/Services/SingleInstanceService.cs","sha256":"2D35498AE271F024F4D606488FCCD42D3413E5AD6C602FE3FB8B971E840FB5E1","bytes":2821}, - {"path":"wpf/Services/TrayIconService.cs","sha256":"66391A624E7046DFDFCA0F8AFC8E2A7E60F1A00AF4BC30B16D9A1B803FB2461D","bytes":6494}, - {"path":"wpf/Services/WpfApplicationCoordinator.cs","sha256":"6CB9321B27BD709AA4136B4F2172D668691792A7DCA32683176E2F4DA29E3AA9","bytes":8896}, + {"path":"wpf/Services/TrayIconService.cs","sha256":"F4D701AFF8665FB8897D15D28B167B14AE908FD0C43E024A99C5954B25BE549E","bytes":7889}, + {"path":"wpf/Services/WpfApplicationCoordinator.cs","sha256":"1DCB55F36FD6A34F8AEE12FA59065389EC00D79A1630661B4C35ED2F54E040D7","bytes":10749}, {"path":"wpf/Shared/CodexLifecycle.cs","sha256":"8A8B60B5E8A47E553B1552CF93F5B74DEFBD0B1F153ED71200A2C0C9EEEE43E6","bytes":36930}, {"path":"wpf/Shared/QuotaClient.cs","sha256":"5123482D6B149AEA71A9FC05BD405EA62113AF65F36EE5DA6E42A6DE61F59CD2","bytes":6985}, {"path":"wpf/Shared/QuotaData.cs","sha256":"B179F2003AAF106CBD58FE46924EBFA70B59CEAFF310602FE2D46FF4664AA17F","bytes":9837}, @@ -63,10 +63,10 @@ {"path":"wpf/Skins/CivicWayfinding/CivicWayfindingSkin.cs","sha256":"806C058B70E3A577A31132B82E57006FB77A9404116F4DCE548C497A3BB38B52","bytes":341}, {"path":"wpf/Skins/IWidgetSkin.cs","sha256":"477993657DCC46B108CE02C5561AC59F62F0FD7DB39FBA72732712F637009357","bytes":156}, {"path":"wpf/Skins/WidgetSkinRegistry.cs","sha256":"FA5876975E3E527557DE41D4BD6E40890CCB475321229AE1CA50714132185686","bytes":201}, - {"path":"wpf/tests/Program.cs","sha256":"148868133D5FBCDA40E883AEC945DF1437DD1BA6F806244E908DF3B696F09188","bytes":23138}, + {"path":"wpf/tests/Program.cs","sha256":"72C52518728005B6F744AAC0C78639B18BAD69273AE4B606945327E3D4712449","bytes":26606}, {"path":"wpf/tests/QuotaFloat.Wpf.Tests.csproj","sha256":"6E3BC7CBC7E3FC2B45E4E3B4E4AE1CC475DD4EBB6B9AAF4733E6C2FC1B61E129","bytes":401}, {"path":"wpf/Windows/MainWindow.xaml","sha256":"1B1EC0307685350DC186A530D62A28C8081CC5C897C562841A62959D5127ED41","bytes":27936}, - {"path":"wpf/Windows/MainWindow.xaml.cs","sha256":"9CC22FB326A1BA820CB7F5DF7873B20CF61442B0BD8EA651197C4FC96079DAF3","bytes":27492}, + {"path":"wpf/Windows/MainWindow.xaml.cs","sha256":"33AA37BA0199919F07ED0DDA7BED49393EE9D00326129346509AB14ACE4FD184","bytes":27560}, {"path":"wpf/Windows/SettingsWindow.xaml","sha256":"F52CA04B201F61523A3065F151706D462CDD6DEC812D20C9A04BC0798DA81CDF","bytes":9380}, {"path":"wpf/Windows/SettingsWindow.xaml.cs","sha256":"801B5F91EEA7EB5C9777F8F36C88C9E0EC0D80DCAAE4F7E772AEBACDD79E10EC","bytes":7158}, {"path":"wpf/Windows/WidgetWindowController.cs","sha256":"F835E7A579B470A72DEBB44EC41927C381A375987A8546C1FDC24311F9B19FF9","bytes":2109} @@ -75,7 +75,7 @@ {"path":"docs/wpf-r1/SIMPLIFICATION-CONTRACT.md","sha256":"7E35DC131AC50EE8D752EC0EDD065466E63C5DC0FD0A53668C74F4EBE5A5D606","bytes":3276} ], "config_inventory": [ - {"path":".gitignore","sha256":"1B52A90BD6C3EF55728D4CFB4F22CD83654F5891C7EDEA9A6DBBCBB14E1C94EC","bytes":1658} + {"path":".gitignore","sha256":"1D5E07F9FB7B7D5237C250397B526FD5D09E93557CB91FB1E256FDA1E5006885","bytes":992} ], "deleted_obsolete_sources": ["wpf/Services/BillingLauncher.cs", "wpf/Windows/ProductScaleLayout.cs"], "limitations": [ @@ -89,10 +89,16 @@ "local_output_excluded": true, "native_dirty_tree_excluded": true, "external_mutation_performed": true, - "tag": "v1.1.0", - "tag_object": "055a9f1eb79cf9911671fe9bafd69eaea87ed98d", - "release_url": "https://github.com/keida/codex-quota-float/releases/tag/v1.1.0", - "published_at": "2026-09-10T00:14:34Z", - "latest": true + "tag": "v1.1.2", + "tag_object": "b7cf6651a6f683d9e46ff0b2e7a51e26d4ab1877", + "peeled_commit": "8ea5e0c5d06c2141754af57ef9c9ab27edba04bc", + "release_id": 386716403, + "release_url": "https://github.com/keida/codex-quota-float/releases/tag/v1.1.2", + "published_at": "2026-09-11T00:54:02Z", + "latest": true, + "assets": [ + {"name":"Quote-Float-v1.1.2-win-x64.exe","bytes":71675147,"sha256":"2FFF59F1B79E232C7ADBA88C49D57332ECA19EE2BE4FCC9E60195B5898D9E9DF"}, + {"name":"SHA256SUMS.txt","bytes":97,"sha256":"3E278A81B55341D57F8635B68A681F126110688E575A313B8E287FA30E7A968A"} + ] } } diff --git a/docs/wpf-r1/RELEASE-NOTES-R1.md b/docs/wpf-r1/RELEASE-NOTES-R1.md index dfc666f..7731dda 100644 --- a/docs/wpf-r1/RELEASE-NOTES-R1.md +++ b/docs/wpf-r1/RELEASE-NOTES-R1.md @@ -1,16 +1,19 @@ -# WPF R1 Release Notes — v1.1.0 +# WPF R1 Release Notes — v1.1.2 -Release state: **v1.1.0 released; Latest**. +Release state: **v1.1.2 released; Latest**. -The simplification source was merged by PR #2 into `main` at `2db7775723201206a23a12752752368f0a9a25ec`. v1.1.0 is tagged at `fc8e2749e7661b19509ee0bb924f04d204779420` and published as the Latest Release. The existing v1.0.0 tag and Draft Release remain historical and are not reused or modified. +The v1.1.2 source is merged into `main` by PR #12 at `8ea5e0c5d06c2141754af57ef9c9ab27edba04bc`. The annotated `v1.1.2` tag object is `b7cf6651a6f683d9e46ff0b2e7a51e26d4ab1877` and peels to that merge commit. v1.1.0 remains the prior published release; v1.1.1 is an unpublished superseded tag. The existing v1.0.0 tag and Draft Release remain historical and are not reused or modified. ## Included +- Self-contained Windows x64 single-file desktop entry; no separate .NET installation is required. - Native WPF Plus/Pro widget with accepted Full/Orb geometry and edge behavior. - Settings simplification: fixed `420 × 296 DIP` non-modal window with language and refresh interval choices; Done closes it. Saved/explanatory notes are not a sync/freshness setting or status. There is no Settings Refresh button; the sole manual Refresh action is in the Full footer. Auto Refresh is always on and may be shown as an explanatory note. - Minimal Refreshing behavior that retains accepted quota and does not invent data while Loading. - Unified `WidgetWindowController.ApplyState()` ownership for presentation, native geometry, DWM corners, and topmost state. - Tray recovery and single-instance activation with state reapplication. +- Cold-start visibility-grace reliability fix. +- Tray menu labels follow the current ZH/EN language and update with the selected language. ## Removed or superseded @@ -19,21 +22,21 @@ The simplification source was merged by PR #2 into `main` at `2db7775723201206a2 - Auto Refresh, Click-through, theme, Mini mode, display-mode, alert, and unrelated behavior selectors. - `wpf/Windows/ProductScaleLayout.cs` and other obsolete source paths listed in the candidate manifest. -## Evidence +## Evidence and artifact -The v1.1.0 release passed the Release build with zero warnings and errors in isolated clean tag worktrees; the EXE and WPF DLL were byte-identical: +- Release build and WPF CI: PASS, zero warnings and zero errors; GitGuardian: PASS. +- Deterministic suite: `36 fixtures; 71 checks; activeRequests=1; refreshCalls=1; backoffCalls=4; privacy=normalized-values-only`. +- Human ZH→EN→ZH tray localization audit: PASS; native baseline remains Windows 100% / 96 DPI. +- Single-file EXE: [Quote-Float-v1.1.2-win-x64.exe](https://github.com/keida/codex-quota-float/releases/download/v1.1.2/Quote-Float-v1.1.2-win-x64.exe), 71,675,147 bytes. +- EXE SHA-256: `2FFF59F1B79E232C7ADBA88C49D57332ECA19EE2BE4FCC9E60195B5898D9E9DF` +- [SHA256SUMS.txt](https://github.com/keida/codex-quota-float/releases/download/v1.1.2/SHA256SUMS.txt) SHA-256: `3E278A81B55341D57F8635B68A681F126110688E575A313B8E287FA30E7A968A` -- EXE SHA-256: `322DC1F8ED39A6769CCC1102A6C5D2CABBF088CF2C93003399D50C942CDCE507` -- WPF DLL SHA-256: `E5F50F66903C29F45AEFF799B6738254A8D6CEC0D59A508103B89EC68D250976` -- Assembly/File/Informational version: `1.1.0.0` / `1.1.0.0` / `1.1.0` -- Windows x64 framework-dependent package; `.NET 8 Desktop Runtime` required. -- ZIP SHA-256: `8B6D4AB34A39F9D466A499150968AEA4DDD344FAC1B33B5CDA1696AE5F40024D` -- `SHA256SUMS.txt` SHA-256: `E1AB8016C66F417AE003109981115798B761500C6AE796107F618EC5F0985A96` - -The release also passed the 31-fixture/58-check deterministic suite, targeted native 96 DPI smoke, isolated extracted-package runtime smoke, single-instance activation smoke, and human ownership smoke. See [`ACCEPTANCE-SUMMARY.md`](ACCEPTANCE-SUMMARY.md) and [`CANDIDATE-MANIFEST.json`](CANDIDATE-MANIFEST.json). +The published package and checksums are available from the [v1.1.2 Latest Release](https://github.com/keida/codex-quota-float/releases/tag/v1.1.2). See [`ACCEPTANCE-SUMMARY.md`](ACCEPTANCE-SUMMARY.md) and [`CANDIDATE-MANIFEST.json`](CANDIDATE-MANIFEST.json) for the acceptance record and current source inventory. ## Limitations -The verified baseline is Windows 100% / 96 DPI. Same-account Fresh/SignedOut/Fresh, isolated Codex close/absence/response/restart recovery, and native Windows 125% / 150% DPI runtime acceptance remain `NOT VERIFIED / OUT OF R1 ACCEPTANCE SCOPE`. +The verified baseline is Windows 100% / 96 DPI. The following remain `NOT VERIFIED / OUT OF R1 ACCEPTANCE SCOPE`: -The published package and checksums are available from the [v1.1.0 Latest Release](https://github.com/keida/codex-quota-float/releases/tag/v1.1.0). The historical v1.0.0 tag and Draft Release remain unchanged. +1. Same real Pro account `Fresh -> SignedOut -> Fresh`. +2. Isolated Codex close/absence/response/restart recovery. +3. Native Windows 125% / 150% DPI runtime acceptance. diff --git a/docs/wpf-r1/TICKET-MAP.md b/docs/wpf-r1/TICKET-MAP.md index 0d3b12a..316d0ff 100644 --- a/docs/wpf-r1/TICKET-MAP.md +++ b/docs/wpf-r1/TICKET-MAP.md @@ -1,6 +1,6 @@ # WPF R1 Ticket Map -Status: **simplification and final ownership fix accepted — Boss PASS**. Publication: **v1.1.0 RELEASED / LATEST**. +Status: **simplification and final ownership fix accepted — Boss PASS**. Publication: **v1.1.2 RELEASED / LATEST**. | Work item | Current status | | --- | --- | @@ -11,9 +11,9 @@ Status: **simplification and final ownership fix accepted — Boss PASS**. Publi | WPF-R1-SIMPLIFICATION | Settings/footer/state/corner simplification — BOSS PASS | | WPF-R1-SIMPLIFICATION-FINAL-FIX | ApplyState ownership correction — BOSS PASS | | WPF-R1-SIMPLIFICATION-FREEZE | Candidate docs, manifest and V3 allowlist — this packet | -| PUBLICATION | COMPLETE; v1.1.0 tag and Latest Release published | +| PUBLICATION | COMPLETE; v1.1.2 tag and Latest Release published | -The v1.0.0 tag and Draft Release are historical pre-simplification artifacts and remain unchanged. The simplified R1 publication is v1.1.0: [Latest Release](https://github.com/keida/codex-quota-float/releases/tag/v1.1.0). +The v1.0.0 tag and Draft Release are historical pre-simplification artifacts and remain unchanged. v1.1.0 is the prior published release, and v1.1.1 is an unpublished superseded tag. The current simplified R1 publication is v1.1.2: [Latest Release](https://github.com/keida/codex-quota-float/releases/tag/v1.1.2). R1 scope exclusions remain: diff --git a/docs/wpf-r1/WPF-R1-FREEZE.md b/docs/wpf-r1/WPF-R1-FREEZE.md index a5eebef..c88f859 100644 --- a/docs/wpf-r1/WPF-R1-FREEZE.md +++ b/docs/wpf-r1/WPF-R1-FREEZE.md @@ -1,20 +1,21 @@ # WPF R1 Freeze Record -Freeze result: **PASS; v1.1.0 RELEASED / LATEST**. +Freeze result: **PASS; v1.1.2 RELEASED / LATEST**. ## Frozen candidate -The accepted simplified WPF source was merged by PR #2 into `main` at `2db7775723201206a23a12752752368f0a9a25ec`. The complete versioned source snapshot is recorded at the source snapshot commit below, and later documentation-only updates preserve the artifact record. v1.1.0 is tagged at `fc8e2749e7661b19509ee0bb924f04d204779420` and published as the [Latest Release](https://github.com/keida/codex-quota-float/releases/tag/v1.1.0). The existing v1.0.0 tag and Draft Release remain historical and are not reused or modified. It is identified by: +The accepted WPF source was merged by PR #12 into `main` at `8ea5e0c5d06c2141754af57ef9c9ab27edba04bc`. The annotated `v1.1.2` tag object is `b7cf6651a6f683d9e46ff0b2e7a51e26d4ab1877` and peels to that merge commit. v1.1.0 remains the prior published release; v1.1.1 is an unpublished superseded tag. The existing v1.0.0 tag and Draft Release remain historical and are not reused or modified. -- Versioned clean-path EXE SHA-256 `322DC1F8ED39A6769CCC1102A6C5D2CABBF088CF2C93003399D50C942CDCE507` -- Versioned clean-path WPF DLL SHA-256 `E5F50F66903C29F45AEFF799B6738254A8D6CEC0D59A508103B89EC68D250976` -- Assembly/File/Informational version `1.1.0.0` / `1.1.0.0` / `1.1.0` +It is identified by: + +- Self-contained Windows x64 single-file EXE, 71,675,147 bytes, with no separate .NET installation required +- EXE SHA-256 `2FFF59F1B79E232C7ADBA88C49D57332ECA19EE2BE4FCC9E60195B5898D9E9DF` +- `SHA256SUMS.txt` SHA-256 `3E278A81B55341D57F8635B68A681F126110688E575A313B8E287FA30E7A968A` +- Assembly/Product/File version `1.1.2.0` / `1.1.2` / `1.1.2.0` - Windows 100% / 96 DPI native baseline - Current WPF source inventory in [`CANDIDATE-MANIFEST.json`](CANDIDATE-MANIFEST.json) -Complete versioned source snapshot SHA is `cb670afbea1391a175e6af1d9f58c4dc903d2988`. The branch base and immutable comparison base are canonical `origin/main` SHA `2db7775723201206a23a12752752368f0a9a25ec`. The v1.0.0 tag remains a historical pre-version-prep record, not the v1.1.0 candidate. The artifacts have no SourceRevisionId, SourceLink revision embedding is disabled, and later documentation-only Git SHA changes do not alter them. Semantic IL and WPF resource hashes remain unchanged. - -Boss accepted the simplification and final ApplyState ownership fix. The independent ownership recheck passed, and the v1.1.0 Release artifacts reproduce byte-for-byte across isolated clean tag worktrees without embedded SourceLink revision payload. Focused tests passed with 31 fixtures and 58 checks; extracted-package runtime smoke passed for Plus Full and Settings at 96 DPI with normal exit, tray cleanup, and zero residual process. The source simplification is merged, and v1.1.0 is published as Latest. The historical v1.0.0 tag and Draft Release remain untouched. +The source snapshot SHA, comparison base, and release identity are recorded in the current candidate manifest. Release build and WPF CI passed with zero warnings and zero errors; the deterministic suite passed with 36 fixtures and 71 checks. The v1.1.2 human ZH→EN→ZH tray localization audit passed, and the published asset digest and downloadability were verified after release. ## Frozen contract @@ -22,8 +23,12 @@ The active contract is [`SIMPLIFICATION-CONTRACT.md`](SIMPLIFICATION-CONTRACT.md ## Publication gate -Publication is COMPLETE for v1.1.0. [`PUBLICATION-ALLOWLIST-V3.md`](PUBLICATION-ALLOWLIST-V3.md) remains the exact historical source-publication scope; the v1.1.0 version metadata and release records were published separately, while release assets remain outside the repository source set. The allowlist excludes native dirty work, output evidence, binaries, credentials, runtime state, machine identifiers, and superseded material. The existing v1.0.0 tag and Draft Release are untouched. +Publication is COMPLETE for v1.1.2: [Latest Release](https://github.com/keida/codex-quota-float/releases/tag/v1.1.2). [`PUBLICATION-ALLOWLIST-V3.md`](PUBLICATION-ALLOWLIST-V3.md) remains the exact historical source-publication scope; release assets remain outside the repository source set. The allowlist excludes native dirty work, output evidence, binaries, credentials, runtime state, machine identifiers, and superseded material. The existing v1.0.0 tag and Draft Release are untouched. ## Unverified scope -Same real Pro account Fresh/SignedOut/Fresh, isolated Codex close/absence/response/restart recovery, and native 125% / 150% DPI remain `NOT VERIFIED / OUT OF R1 ACCEPTANCE SCOPE`. +The following remain `NOT VERIFIED / OUT OF R1 ACCEPTANCE SCOPE`: + +1. Same real Pro account Fresh/SignedOut/Fresh. +2. Isolated Codex close/absence/response/restart recovery. +3. Native Windows 125% / 150% DPI runtime acceptance. From f746913b3cd6db5154dff0931fc144aa41a75442 Mon Sep 17 00:00:00 2001 From: keida Date: Fri, 11 Sep 2026 13:11:29 +1200 Subject: [PATCH 2/2] docs: complete v1.1.2 source inventory --- docs/wpf-r1/CANDIDATE-MANIFEST.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/wpf-r1/CANDIDATE-MANIFEST.json b/docs/wpf-r1/CANDIDATE-MANIFEST.json index 724fb42..3353c1b 100644 --- a/docs/wpf-r1/CANDIDATE-MANIFEST.json +++ b/docs/wpf-r1/CANDIDATE-MANIFEST.json @@ -38,6 +38,8 @@ }, "source_inventory": [ {"path":"wpf/app.manifest","sha256":"EEAD382C59A56FA7BAB0385742B75B830533AB399D1A6DC69B799D5C214B3722","bytes":747}, + {"path":"wpf/Assets/QuoteFloat.ico","sha256":"5624B89C1326D7CD1D5867B14DB2E40EF74C8BFB21364CA4F0B8F2466E12DAA4","bytes":7766}, + {"path":"wpf/Assets/QuoteFloat.svg","sha256":"69E8A3650DD26E1E0CB2578304B70EEFB348F637D2072ECE86F311E679C13098","bytes":1069}, {"path":"wpf/App.xaml","sha256":"F9A3116A80EC5A0A0A2F9BC856ED5B070C94A99643BB75FB8C2C467A2D2196F9","bytes":281}, {"path":"wpf/App.xaml.cs","sha256":"C56EF21FF29DC0B36D477DAD7DBF5451B207FBE5EBBA79EE98BFAD379CE069AA","bytes":819}, {"path":"wpf/Diagnostics/EdgeDragDiagnostics.cs","sha256":"D695FB0450F44C6DADF04960395E2225A0243AB1A59EDAD3C1CE656B2C27B4F5","bytes":6992}, @@ -46,10 +48,12 @@ {"path":"wpf/Platform/WindowCornerContract.cs","sha256":"6FA1FD3726712375F698920B67FFBA2C1AA0160E3EDABCB2AABD313F0349B315","bytes":516}, {"path":"wpf/Platform/WindowPlacementService.cs","sha256":"6C1BAAC8EF8B30FC608B5C572FDC35C4998C9CB41496E7981A1A05480873380E","bytes":5401}, {"path":"wpf/Properties/AssemblyInfo.cs","sha256":"BE10F95593054E53FC4C46472B45D13CC3BE578AE9C93315D22C3C63AF8647F3","bytes":157}, + {"path":"wpf/Properties/PublishProfiles/WinX64SingleFile.pubxml","sha256":"3733704578D23F760779614FA54B2A2D51419AD26DEB81C7DBB670BDBFE40089","bytes":594}, {"path":"wpf/QuotaFloat.Wpf.csproj","sha256":"C1C0E5674B827CA2FB50C7421758DF370BAC510CDE7FE20A1733A7087753EF51","bytes":1216}, {"path":"wpf/Resources/CivicWayfinding.xaml","sha256":"4CF1E9E98DBEA0BDC48E692EEA05888774ED7DFF1BC8F017D2DED8358478D0D5","bytes":1366}, {"path":"wpf/Resources/UiText.cs","sha256":"BD5ADDCE74284CBEFE325E64A749E35D14388381FDB19B2D18BFCF85040D9586","bytes":4455}, {"path":"wpf/Services/CodexPresenceService.cs","sha256":"2D26DAA2FD082902023004847CF2E139A331FB189AA19BEE7C80E194CF1A8AFD","bytes":3172}, + {"path":"wpf/Services/LaunchOptions.cs","sha256":"D0D967DADBAF52727E66C594BB1B4C2473A30376EA0E7D5E7CA5B932721BF3D3","bytes":925}, {"path":"wpf/Services/PreferenceStore.cs","sha256":"CCFE724ABFD24F1A1F398ABADAFC66190F1AF50AFE829DCFEFBBE6F3E26BA8D8","bytes":2874}, {"path":"wpf/Services/QuotaRefreshCoordinator.cs","sha256":"24D69EA29078CC0402CA834135065F02463C4DA68502669728EF171B60307F63","bytes":8677}, {"path":"wpf/Services/QuotaState.cs","sha256":"A4423B03165CFCE314072017C332BB844BEBC8B6AABFED7F1BDCB7B74C46D475","bytes":1660},