Eric
f133b44a12
[eric] ci: skip the heavy e2e build on docs-only pushes
2026-05-27 13:05:03 -07:00
Eric
74ffff4148
[eric] docs: add the secret rotation + history-purge runbook so the leaked creds can actually be killed
2026-05-27 13:05:03 -07:00
Eric
af16274934
[eric] ci: auto-verify both update feeds agree + resolve whenever a release is published
2026-05-27 13:02:36 -07:00
Eric
35280166f1
[eric] ci: drop the retired windows-2019 image, add an opt-in self-hosted win10 lane instead
2026-05-27 13:01:45 -07:00
Eric
b544a9264e
[eric] perf: strip type stubs + unix build leftovers from the bundled python so defender frisks fewer files
2026-05-27 13:00:15 -07:00
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