Eric
0d4dbd35df
[eric] ci: add a windows-2019 (win10-era kernel) runner to the e2e matrix so older windows is covered too
2026-05-27 12:51:46 -07:00
Eric
c8e781cc83
[eric] build: make the python lock universal so the mac build stops trying to install windows-only pywin32
2026-05-27 12:28:40 -07:00
Eric
e2f1e89cb8
[eric] build: import the notarize esm module lazily so electron-builder stops choking on every non-mac build
2026-05-27 12:28:40 -07:00
Eric
7dcb99cdec
[eric] ci: run the e2e matrix on eric/lock pushes so the real app boot is verified on win + mac
2026-05-27 12:02:51 -07:00
Eric
33d2797d8f
[eric] ci: drop the half-baked windows-artifact-smoke stub since e2e already smokes the real packaged app
2026-05-27 11:25:10 -07:00
Eric
6d2bf4d4db
[eric] ci: gitleaks-ignore the known historical secrets so our branch stops failing on leaks it didnt add
2026-05-27 11:03:43 -07:00
Eric
de599151f2
[eric] docs: move the release runbook, checklist + squirrel plan into docs/ so root stops feeling cluttered
2026-05-27 11:03:43 -07:00
Eric
bd09778e1a
[eric] build: commit the lockfiles npm ci needs + ignore the build-info stamp
2026-05-27 10:19:54 -07:00
Eric
0b72102adc
[eric] build: install python from the lock + slim the bundled stdlib
2026-05-27 10:19:54 -07:00
Eric
237738d928
[eric] build: pin uv + npm ci the builders + add an opt-in squirrel target
2026-05-27 10:19:54 -07:00
Eric
46c7059802
[eric] ui: show the build commit in settings about so a screenshot says what shipped
2026-05-27 10:19:54 -07:00
Eric
ac6ae7c7ce
[eric] diagnostics: time the boot + stamp the shipped commit into the log
2026-05-27 10:19:53 -07:00
Eric
1fc4ab9163
[eric] test: drive the real packaged app on mac + windows to catch breakage early
2026-05-27 10:19:53 -07:00
Eric
b7cb505561
[eric] docs: add the squirrel-vs-nsis race plan so we only swap if its faster
2026-05-27 10:19:53 -07:00
Eric
c957716e0c
[eric] ci: dont call anything latest until both update feeds agree + resolve
2026-05-27 10:19:53 -07:00
Eric
202c656b15
[eric] ci: build the mac app in the cloud so both platforms come from one commit
2026-05-27 10:19:53 -07:00
Eric
54a7cb96b4
[eric] ci: boot the packaged backend in ci + check its health and agent endpoints
2026-05-27 10:19:53 -07:00
Eric
6230d5685b
[eric] docs: add the release runbook so cutting a build isnt tribal knowledge
2026-05-27 10:19:53 -07:00
Eric
0d561fa49d
[eric] perf: stopwatch the boot + headcount every file we ship
2026-05-27 10:19:53 -07:00
Eric
6a0e437c8c
[eric] build: freeze python deps in a hashed lock so pip cant sneak one in
2026-05-27 10:19:52 -07:00
Eric
4f61b6cd49
[eric] ci: pin build node to 20.18.1 to match the runtime we ship
2026-05-27 10:19:52 -07:00
Eric
30914ae40c
[eric] build: pin electron-builder + deps to exact versions so the packager cant drift
2026-05-27 10:19:52 -07:00
Eric
9c1940077f
[eric] diagnostics: add backend.log, handle backend spawn failures, force utf-8 in executor sandbox
2026-05-26 20:25:31 -07:00
Eric
ca5d69301d
[eric] app builder: fix windows-built apps failing by always creating the workspace .env (the windows build dropped the .env.example it seeds from) and writing app files as utf-8 (windows cp1252 choked on arrows and chess pieces); stays on 1.1.69 to rebuild only the windows installer
v1.1.69
2026-05-26 17:40:51 -07:00
Eric
8c5b3bdf64
[eric] ui: fix the windows guide cursor jumping instead of gliding (it was being rebuilt from scratch every frame) and remove the new chat / history pills above the composer; bump 1.1.69
2026-05-26 15:41:13 -07:00
Eric
440a3e22f6
[eric] windows: fix "backend crashed" by making the app pick a port that is genuinely free so it stops colliding with another program already on port 8324; bump 1.1.68
v1.1.68
2026-05-26 14:17:12 -07:00
Eric and Claude Opus 4.7
45a97aa05f
[eric] windows: stop nsis upgrades hitting "cannot be closed" by reaping app builder children on quit and fixing the dead orphan-killer; bump 1.1.67
...
- root cause: window-all-closed called killBackend() (windows: taskkill /F) BEFORE before-quit could POST /shutdown-all, so the backend died before running stop_all(), orphaning the bundled vite node.exe; a running node.exe locks its own image at resources\node\x64\node.exe, so the next nsis upgrade cannot overwrite it and surfaces appCannotBeClosed via the file-lock retry path (extractAppPackage.nsh / installUtil.nsh), not the name-based app-running check
- windows-only because mac's killBackend sends SIGTERM, letting uvicorn run its lifespan shutdown -> stop_all(); only since 1.1.64 because app builder first spawned these children on windows in bf6d7a9 (before that they died with WinError 2)
- electron/main.js: drop the premature killBackend() in window-all-closed (will-quit still kills the backend, now AFTER the reap) and raise the pre-quit reap budget from 2s to 10s to cover stop_all's parallel taskkill (up to 5s) + 3s grace
- electron/build/installer-recovery.nsh: replace the customInit orphan-killer (wmic, removed from windows 11 24H2 so it silently no-oped) with a path-scoped powershell Stop-Process; backtick-delimited for valid nsis tokenization, verified the macro compiles with makensis + the bundled nsExec plugin
- mac unaffected: will-quit already kills the backend; the app reap just runs explicitly via /shutdown-all now instead of riding on SIGTERM timing; the .nsh path is windows-only
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-26 13:30:05 -07:00
Eric and Claude Opus 4.7
c0d0e012cc
[eric] outputs/quit: reap app builder child processes before killing the backend on windows so nsis upgrades stop hitting "cannot be closed"; bump 1.1.67
...
- root cause: window-all-closed called killBackend() (windows: taskkill /F) BEFORE before-quit could POST /shutdown-all, so the backend was dead before it could run stop_all(), orphaning the bundled vite node.exe; a running node.exe locks its own image at resources\node\x64\node.exe, so the next nsis upgrade cannot overwrite it and surfaces appCannotBeClosed via the file-lock retry path (extractAppPackage.nsh / installUtil.nsh), not the name-based app-running check
- windows-only because mac's killBackend sends SIGTERM, which lets uvicorn run its lifespan shutdown -> stop_all(); only since 1.1.64 because app builder first started spawning these children on windows in bf6d7a9 (before that they died with WinError 2)
- fix: drop the premature killBackend() in window-all-closed (will-quit still kills the backend, now AFTER the reap) and raise the pre-quit reap budget from 2s to 10s to cover stop_all's parallel taskkill (up to 5s) + 3s SIGTERM grace
- mac unaffected: will-quit already kills the backend; the app reap simply runs explicitly via /shutdown-all now instead of riding on SIGTERM timing
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
v1.1.67
2026-05-26 13:19:11 -07:00
Eric and Claude Opus 4.7
cf74ada3c2
[eric] auth: generate installation_id at backend startup so first-launch sign-in always has a non-empty install_id; bump 1.1.66
...
- installation_id was created lazily on the first analytics submission; 1.1.64 removed the workflows startup poller, which was the early backend ping that used to generate it, so on a clean install the sign-in window built its google/email oauth url with an empty install_id and the cloud rejected the start
- now generated in main.py at the same pre-bind moment as the auth token, so GET /api/settings carries it from the very first fetch (no dependency on analytics timing)
- idempotent uuid4 hex, only written when missing; lazy path kept as fallback; platform-agnostic so mac is unchanged except the id exists slightly earlier
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
v1.1.66
2026-05-26 12:25:31 -07:00
Eric
40b7c19b75
[eric] onboarding cursor: restore writePos-after-spring order so mac stays byte-identical (windows still eases via no-op controls + css transition); bump 1.1.65
v1.1.65
2026-05-26 11:17:01 -07:00
Eric
3509c08057
[eric] workflows: remove scheduled-tasks end-to-end (frontend pages+slice, backend app+routes, electron poller), keep dock chat; bump 1.1.64
v1.1.64
2026-05-26 11:12:29 -07:00
Eric
bf6d7a9235
[eric] app-builder: cross-platform workspace runtime so apps build and run on windows (resolve bash/python/npm, venv Scripts layout, bundled-node PATH, online npm retry)
2026-05-26 04:18:38 -07:00
Eric
9605454ebf
[eric] windows: onboarding cursor eases via cursorStore-driven css transition (snaps while tracking, eases on moveTo) to match the mac spring
2026-05-26 04:16:57 -07:00
Eric
529d350cae
[eric] windows 1.1.63: drop the textarea + file-input squirrel-era ablations, restore contentEditable @-mention UI and the attach
...
paperclip on windows, plus a cubic-bezier cursor transition
v1.1.63
2026-05-26 02:42:56 -07:00
Eric
da61377d8c
[eric] windows 1.1.62: cursor and popups follow target on windows via store-driven style.transform
v1.1.62
2026-05-26 02:10:56 -07:00
Eric
31a90502c7
[eric] windows 1.1.61: restore AgenticCursor render on Windows now that the framer-motion shim makes motion.div safe
v1.1.61
2026-05-26 01:42:05 -07:00
Eric
fc8c35e5e0
[eric] windows 1.1.60: revert installer to nsis to test if squirrel was the renderer-crash trigger
v1.1.60
2026-05-26 01:20:20 -07:00
Eric
bb2de72f6f
[eric] windows 1.1.59: production webpack and framer-motion shim
v1.1.59
2026-05-26 00:29:17 -07:00
Eric
7407e6cb37
[eric] windows 1.1.58: three fixes — (a) revert file-input restore: <input type="file"> is ALSO a Windows commit-phase crasher just like the contentEditable was, both must stay ablated, drag-and-drop still works; (b) nuclear-disable OnboardingRoot on Windows since the AgenticCursor visual ablation alone was insufficient (Onboarding panel/director/popups have additional Framer Motion + portal subtrees that segfault on commit) — user loses the guided tour on Windows but the rest of the app works; (c) remove iframe sandbox from BrowserCard so sites that need full-document access can render (Google specifically still appears grey because they run JavaScript anti-iframe detection that blanks document.body when window.top !== window.self, which header stripping cannot defeat; most non-Google sites should render fine now); Mac path untouched
v1.1.58
2026-05-25 23:47:14 -07:00
Eric
aff9ccf98a
[eric] windows 1.1.57: four fixes — (a) textarea Enter-to-send now actually clears the input (missed editor.innerHTML='' at ChatInput.tsx:181 in the post-send path); (b) textarea draft restore (useDraftLoad) routes through .value instead of innerHTML on Windows so a saved draft repopulates the input on remount; (c) restore the <input type="file"> + attach button on Windows since the original 1.1.54 crash root cause was the contentEditable TSF init not the file input — replacing contentEditable with textarea was the actual fix, file input was over-ablated; (d) relax CSP frame-src to allow http:/https: so BrowserCard iframe can render external sites; (e) gate AgenticCursor's portaled Framer Motion infinite-loop animation on Windows so onboarding panel commit no longer 0xC0000005 segfaults; Mac path untouched
v1.1.57
2026-05-25 23:22:06 -07:00
Eric
3903766e96
[eric] windows 1.1.57: (a) relax CSP frame-src to allow http: and https: so BrowserCard iframe can render external sites (our own app-level CSP was the second-layer blocker after the upstream XFO/CSP frame-ancestors we already strip in main.js — together they let the iframe load Google et al); (b) gate AgenticCursor's portaled Framer Motion infinite-loop scale + drop-shadow node on Windows so the onboarding panel commit phase no longer segfaults from that subtree (visual cursor disabled on Windows, imperative handle still works for AC runtime); Mac path untouched
2026-05-25 23:16:14 -07:00
Eric
0076909145
[eric] windows 1.1.56 hotfix: webRequest.onHeadersReceived filter uses 'subFrame' (Electron camelCase) not 'sub_frame' (Chrome extension snake_case) — wrong name threw "Invalid type sub_frame" synchronously during app.whenReady, became an unhandledRejection, prevented the app from booting on 1.1.55
v1.1.56
2026-05-25 22:51:34 -07:00
Eric
b73f508755
[eric] windows 1.1.55: (a) textarea-aware editor read/write/clear helpers so Enter-to-send works on Windows where EditorSurface uses textarea instead of contentEditable (handleSend was reading .textContent which is empty on textarea); (b) gate BrowserCard webview behind !Windows so dashboard hydration no longer segfaults from webview tag commit (iframe fallback is now usable for most sites since we also strip X-Frame-Options and CSP frame-ancestors on sub_frame loads via session.webRequest.onHeadersReceived, scoped to http/https types:sub_frame so OAuth popups and deep links keep their security headers); (c) gate onboarding video autoPlay on Windows so panel mount does not trigger the autoplay+animation crash; Mac path untouched everywhere
v1.1.55
2026-05-25 22:29:17 -07:00
Eric
518d0574dd
[eric] windows 1.1.54 ablate (fix): correctly platform-gate the file-input/attach-button ablation (1.1.53 mistakenly disabled them on both Mac and Windows because the file was already wrapped in {false && ...} from a prior diagnostic — Mac now renders the full attach UI again, Windows still skips it); textarea-instead-of-contentEditable already correctly platform-gated since 1.1.53
v1.1.54
2026-05-25 21:59:19 -07:00
Eric
d85d9c2c10
[eric] windows 1.1.52 ablate: swap contentEditable div for textarea + hide <input type="file"> on Windows so the commit-phase 0xC0000005 (Chromium 144 + Electron 40 native crashers) cannot mount; Mac path untouched so @-mention rich-UI and full attach button stay working there; UA-gated at module load via navigator.userAgent.includes('Windows') so zero runtime branch cost; if Windows chat opens without crash one of these was the trigger and we narrow in v1.1.53 by re-enabling each
v1.1.53
2026-05-25 21:53:04 -07:00
Eric
e2ea5e03cf
[eric] windows 1.1.51 diag: render logs on every ChatInputToolbar child (ModeControl, ModelPickerMenu, ThinkingLevelControl, ToolbarActions) so the next 0xC0000005 crash narrows from "ChatInputToolbar last" to the exact toolbar child that commits before the segfault
v1.1.51
2026-05-25 21:27:14 -07:00
Eric
06e7c54f57
[eric] windows 1.1.50 diag: render logs on every ChatInputView child (ChatInputToolbar, AttachmentChips, ChatInputOverlays, SendBlockBanner) so the next 0xC0000005 crash trace shows which sibling commits after EditorSurface — spellCheck=false on the contentEditable did not stop the crash so the trigger is either later in ChatInputView's child render order or in the JSX after EditorSurface's render log; bump for Squirrel fresh-fetch
v1.1.50
2026-05-25 21:04:46 -07:00
Eric
664faa1033
[eric] windows 1.1.49: spellCheck={false} on contentEditable div + ChatInputView and EditorSurface render logs + version bump so Squirrel actually fetches a fresh signed binary (force-retagging v1.1.44 was reusing the cached install on every iteration); tag v1.1.49
v1.1.49
2026-05-25 20:04:37 -07:00
Eric
83a042d662
[eric] windows: drop invalid autoCorrect + autoCapitalize attrs from contentEditable div in EditorSurface — diag logs pinpointed ChatInput as the last child rendered before every 0xC0000005 segfault, and these attributes are spec-defined for input/textarea only so React forwarded them onto a div where Chromium 144 + Windows IME / spellchecker engages a native code path that segfaults during commit; spellCheck stays for spelling underlines; retag v1.1.44
v1.1.44
2026-05-25 19:47:55 -07:00
Eric
294d1a91ed
[eric] diag: add targeted logs for each top crash-suspect (boot env snapshot for React-prod-mode + tree-shaking checks, wrapped lazy() loader with requested/loaded/failed logs for chunk-split race, [diag][ErrorBoundary] prefix on componentDidCatch so in-tree throws surface in stderr alongside window.onerror); retag v1.1.44
2026-05-25 19:26:40 -07:00