@@ -7,23 +7,99 @@ signing costs. See [`docs/roadmap.md`](docs/roadmap.md) for what's on
77deck and [ ` docs/release-checklist.md ` ] ( docs/release-checklist.md ) for
88what each release has to clear.
99
10- ## 0.0.11-alpha.5 — (pending)
11-
12- Windows WebView2 fetch fix — root cause identified.
10+ ## 0.0.12-alpha.5 — 2026-05-17
11+
12+ - ** Windows ` WinError 206 ` fix on long chat sessions.** Fresh sessions
13+ worked but every message returned ` provider_failed ` after a few dozen
14+ turns; closing and reopening the chat resolved it until the new
15+ session grew again. Root cause: the Claude CLI provider was passing
16+ the system prompt (voice template, ~ 15 KB) and the full session
17+ buffer on the command line. Windows ` CreateProcess ` caps the entire
18+ command line at 32,767 chars — voice template + a moderate session
19+ buffer was already enough to cross it. The provider now writes the
20+ system prompt to a tempfile (` --system-prompt-file ` ) and pipes the
21+ conversation via stdin instead, keeping argv bounded regardless of
22+ session length. macOS and Linux are unaffected today (their argv
23+ limits are 256 KB–2 MB), but the same fix preempts the same trap
24+ there on extremely long sessions.
25+
26+ ## 0.0.12-alpha.4 — 2026-05-15
27+
28+ - ** UTF-8 encoding fix for Windows.** Added ` encoding="utf-8", errors="replace" `
29+ to all four ` subprocess.run ` calls in the Claude CLI provider. Windows defaults
30+ to cp1252 for ` text=True ` subprocess output, but Claude CLI emits UTF-8. Without
31+ this, accented characters in chat replies render as mojibake. Non-Windows
32+ platforms are unaffected (default encoding is already UTF-8).
33+
34+ ## 0.0.12-alpha.3 — 2026-05-15
35+
36+ - ** Revert tauri.localhost bridge URL.** The alpha.1 tauri.localhost change
37+ was a red herring. The real wizard hang was the Windows path mismatch
38+ (fixed in alpha.2). With the path fix in place, 127.0.0.1 works correctly.
39+ tauri.localhost introduced a new problem: Tauri's internal proxy intercepts
40+ CORS preflight requests carrying an Authorization header and strips the
41+ server's Access-Control-Allow-Headers, breaking all authenticated fetches
42+ on Windows.
43+
44+ ## 0.0.12-alpha.2 — 2026-05-14
45+
46+ - ** Windows path fix.** The Rust ` nellbrain_home() ` function was resolving
47+ to ` %APPDATA% ` (Roaming) while Python's ` platformdirs ` resolves to
48+ ` %LOCALAPPDATA%\hanamorix\companion-emergence ` . This caused the Tauri app
49+ to read bridge.json from the wrong directory on Windows — the file was
50+ written by Python under LocalAppData but Rust looked under Roaming.
51+ Root-caused by a Windows user who added devtools to surface the error.
52+ macOS and Linux are unaffected (both crates agree on the path there).
53+
54+ ## 0.0.12-alpha.1 — 2026-05-14
55+
56+ - ** Past-image gallery.** New Gallery tab in the left panel shows every
57+ image shared across all past conversations as a thumbnail grid. Click any
58+ thumbnail for a full-size lightbox (Escape or click backdrop to close).
59+ Thumbnails lazy-load and the grid shows up to 50 recent images.
60+
61+ - ** Auto-update support.** The app can now check for, download, and install
62+ updates from GitHub Releases. Find it in the Connection panel under the
63+ new "Updates" section. On macOS it downloads a DMG, on Windows an MSI,
64+ and on Linux an AppImage. Updates are cryptographically signed.
65+
66+ - ** Windows WebView2 fetch fix (tauri.localhost).** The bridge fetch URL now
67+ uses ` http://tauri.localhost ` instead of ` http://127.0.0.1 ` , matching the
68+ WebView page origin. On Chromium 148+ (WebView2 Runtime), the hostname
69+ mismatch could cause ` fetch() ` to hang even after CORS preflight passed.
70+ CSP updated to include ` tauri.localhost:* ` for both HTTP and WebSocket.
71+
72+ ## 0.0.11-alpha.5 — 2026-05-14
73+
74+ Windows WebView2 bridge fetch fix (root-cause fix for the alpha.4 symptom).
1375
1476- ** WebView2 origin mismatch fix.** The alpha.4 PNA fix correctly added
15- server-side ` Access-Control-Allow-Private-Network ` headers, but on Windows
16- the Tauri WebView2 was still blocking * all* bridge fetches before any bytes
17- left the browser. Root cause: Tauri 2 serves Windows frontends from
18- ` https://tauri.localhost ` (HTTPS → public address space) while the bridge
19- listens on ` http://127.0.0.1 ` (HTTP → private address space). Chromium's
20- Private Network Access enforcement blocks the fetch at the address-space
21- gate — the preflight never reaches the server, so server-side headers
22- don't help. Fix: ` useHttpsScheme: false ` in Tauri window config tells the
23- WebView2 to serve the frontend from ` http://tauri.localhost ` instead. Now
24- both page and bridge share the same address space → no PNA preflight
25- needed. CORS origins (` http://tauri.localhost ` ) and CSP (` 'self' ` ) already
26- supported HTTP scheme. No change to macOS (custom protocol) or dev mode.
77+ server-side ` Access-Control-Allow-Private-Network ` headers, but Windows
78+ users reported the app still showed ` Failed to fetch ` / ` Bridge unreachable `
79+ and ` bridge-*.log ` stayed at 0 bytes — no request from the WebView ever
80+ reached the server, not even a preflight. Server-side CSP and CORS headers
81+ were verified correct from PowerShell; the fetch was blocked inside the
82+ WebView2 before any bytes left. Root cause: Tauri 2 serves Windows/Linux
83+ frontends from ` https://tauri.localhost ` (HTTPS, public address space) while
84+ the bridge listens on ` http://127.0.0.1 ` (HTTP, private address space).
85+ Chromium's Private Network Access enforcement blocks the fetch at the
86+ address-space gate. Fix: ` useHttpsScheme: false ` in the Tauri window config
87+ switches to ` http://tauri.localhost ` . Page and bridge now share the same
88+ address space → no PNA preflight needed. CORS origins and CSP already
89+ supported the HTTP scheme. No change to macOS (custom ` tauri:// ` protocol)
90+ or dev mode (Vite). Reported and root-caused with help from a Windows user.
91+
92+ - ** Public sync filter-repo recovery.** The public sync's ` git filter-repo `
93+ step was dropping the v0.0.11 initiate merge, removing ` brain/initiate/ ` ,
94+ ` InitiateBanner.tsx ` , ` reply_to_audit_id ` , and related files from the public
95+ build. Added a post-filter-repo recovery step to ` .public-sync/sync-to-public.sh `
96+ that restores any files the merge simplification drops, with personal-marker
97+ filtering applied.
98+
99+ - ** Packaging.** CI run ` 25849769893 ` passed all four jobs: validate (Python
100+ tests, lint, frontend tests, frontend build, cargo check, cargo test, wheel
101+ smoke), windows-x86_64, macos-arm64, linux-x86_64. All 8 release assets
102+ published with SHA256SUMS. Privacy marker scan passes.
27103
28104## 0.0.11-alpha.4 — 2026-05-13
29105
0 commit comments