Why this matters
The Test Electron Framework job has been red on every PR that triggers it since PR #606 merged. The most recent green run on main is from 2026-05-08 — every dependabot bump or contributor change under src/gaia/electron/**, src/gaia/apps/*/webui/**, src/gaia/agents/emr/dashboard/electron/**, or tests/electron/** now lands on red CI, forcing every reviewer to manually decide "is this red mine?" before approving. That's exactly the wrong default for a CI signal.
Surfaced while reviewing #1194 (Electron 35→42 EMR bump). The same two failures also appear on #1195, #1196, and #1199 — i.e. unrelated to any of those PRs.
Failing assertions
1. test_electron_chat_app.js — .empty-chat* selectors no longer exist
tests/electron/test_electron_chat_app.js:1176-1179:
expect(chatCss).toContain('.empty-chat');
expect(chatCss).toContain('.empty-chat-title');
expect(chatCss).toContain('.empty-chat-chip');
grep -n "empty-chat" src/gaia/apps/webui/src/components/ChatView.css returns nothing. The classes were removed when #606 reworked the empty-state UX.
2. test_electron_chat_installer.js — MemoryDashboard.tsx is 159 KB, breaches 100 KB cap
tests/electron/test_electron_chat_installer.js:397:
expect(stats.size).toBeLessThan(100 * 1024);
src/gaia/apps/webui/src/components/MemoryDashboard.tsx is 159,276 bytes — about 1.55× over the rule. Added wholesale by #606.
Root cause
Both violations were introduced in the same commit: 74f637a4 — feat(memory): agent memory v2 — second brain with hybrid search, LLM extraction, and observability dashboard (#606). The PR introduced new empty-state UX plus a large new dashboard component but did not update the corresponding tests.
Why it went unnoticed for ~2 weeks
.github/workflows/test_electron.yml has a paths: filter — it only runs when the diff touches the listed directories. No main commit between 2026-05-08 and 2026-05-21 has touched any of those paths, so the workflow simply hasn't run on main. The dependabot batch #1194–#1199 was the first thing to re-trigger it, which is when the red surfaced.
This is a latent CI-gap class: when a path-filtered workflow is broken on main, every contributor pays a "is this red mine?" tax until someone fixes it.
Acceptance criteria
Test plan
Optional follow-up (separate issue if worth tracking)
Test Electron Runtime (example) and Test Electron Runtime (jira) jobs actually boot Electron under xvfb, but there's no equivalent for src/gaia/agents/emr/dashboard/electron/. That gap is why #1194 (a major-version Electron bump) had to be verified by hand on a Linux box — there's no CI runtime signal for that app. Adding the third runtime job would catch the next major Electron bump automatically.
Why this matters
The
Test Electron Frameworkjob has been red on every PR that triggers it since PR #606 merged. The most recent green run onmainis from 2026-05-08 — every dependabot bump or contributor change undersrc/gaia/electron/**,src/gaia/apps/*/webui/**,src/gaia/agents/emr/dashboard/electron/**, ortests/electron/**now lands on red CI, forcing every reviewer to manually decide "is this red mine?" before approving. That's exactly the wrong default for a CI signal.Surfaced while reviewing #1194 (Electron 35→42 EMR bump). The same two failures also appear on #1195, #1196, and #1199 — i.e. unrelated to any of those PRs.
Failing assertions
1.
test_electron_chat_app.js—.empty-chat*selectors no longer existtests/electron/test_electron_chat_app.js:1176-1179:grep -n "empty-chat" src/gaia/apps/webui/src/components/ChatView.cssreturns nothing. The classes were removed when #606 reworked the empty-state UX.2.
test_electron_chat_installer.js—MemoryDashboard.tsxis 159 KB, breaches 100 KB captests/electron/test_electron_chat_installer.js:397:src/gaia/apps/webui/src/components/MemoryDashboard.tsxis 159,276 bytes — about 1.55× over the rule. Added wholesale by #606.Root cause
Both violations were introduced in the same commit:
74f637a4—feat(memory): agent memory v2 — second brain with hybrid search, LLM extraction, and observability dashboard (#606). The PR introduced new empty-state UX plus a large new dashboard component but did not update the corresponding tests.Why it went unnoticed for ~2 weeks
.github/workflows/test_electron.ymlhas apaths:filter — it only runs when the diff touches the listed directories. Nomaincommit between 2026-05-08 and 2026-05-21 has touched any of those paths, so the workflow simply hasn't run onmain. The dependabot batch #1194–#1199 was the first thing to re-trigger it, which is when the red surfaced.This is a latent CI-gap class: when a path-filtered workflow is broken on
main, every contributor pays a "is this red mine?" tax until someone fixes it.Acceptance criteria
Test Electron Frameworkjob is green on a fresh PR that touches one of the path-filter paths (verify on chore(deps): bump electron from 35.7.5 to 42.2.0 in /src/gaia/agents/emr/dashboard/electron in the emr-dashboard-dependencies group #1194 or chore(deps): bump the example-app-dependencies group in /src/gaia/apps/example/webui with 5 updates #1195 after the fix lands).test_electron_chat_app.jsresolves the missing.empty-chat*assertion. Pick one:ChatView.css, chosen so the test still fails if someone removes the empty-state UX again.ChatView.css(only if their removal was unintentional in feat(memory): agent memory v2 — second brain with hybrid search, LLM extraction, and observability dashboard #606).test_electron_chat_installer.jsno longer fails onMemoryDashboard.tsx. Pick one:MemoryDashboard.tsxinto smaller files so the existing 100 KB rule holds.Test Electron Frameworkfailures introduced by the fix.Test plan
cd tests/electron && npm test -- test_electron_chat_app.js test_electron_chat_installer.js— both pass on the fix branch.Test Electron Frameworkon the fix PR; confirm green.Optional follow-up (separate issue if worth tracking)
Test Electron Runtime (example)andTest Electron Runtime (jira)jobs actually boot Electron under xvfb, but there's no equivalent forsrc/gaia/agents/emr/dashboard/electron/. That gap is why #1194 (a major-version Electron bump) had to be verified by hand on a Linux box — there's no CI runtime signal for that app. Adding the third runtime job would catch the next major Electron bump automatically.