- Rename UI panel to "MCP Toolkit Guide" with a plainer description. - Apply taglines to README.md and package.json descriptions. - Gate pinned-bubble backdrop-filter on Windows to avoid gray rectangles. - Add packaging-contract assertions for pinned bubble and new description. - Add custom-familiar-name.test.ts covering normalizeFamiliarName. - Sync docs (FEATURES, README_OUR_CHANGES, FEATURES_OUR_CHANGES, PULL_REQUEST, FEATURE_REGISTRY, bug-squashing, rebrand plan, pr-chat-memory-mcp-toolkit).
8.6 KiB
Bug Squashing Week
This document tracks reported desktop bugs, root-cause findings, fix attempts, and community confirmation. Keep this updated before and after each release so we know what worked, what did not, and what still needs tester feedback.
Tracker format
Each bug should record:
- Report: user-visible symptom and affected version/platform.
- Status: investigating, fix planned, fixed-awaiting-confirmation, confirmed fixed, not fixed.
- Likely cause: current best explanation with confidence.
- Fix attempts: code changes or release versions that attempted to address it.
- Result: local verification plus community feedback.
- Next action: what to try next if still not confirmed.
Windows transparent familiar block and lost interaction
- GitHub issue: https://github.com/alvinunreal/familiaros/issues/18
- Platform: Windows
- Reported version(s):
2.0.5; also reproduced by reporter when building from source. - Status: first fix implemented locally; awaiting checks, release, and community confirmation.
Bug A: gray block behind the familiar
Report
The app opens normally on Windows, but the familiar is surrounded by a gray rectangular block instead of a transparent background.
Current rendering path
- Familiar windows are transparent frameless Electron
BrowserWindows. - Main options are in
apps/desktop/src/familiar-window.ts:transparent: trueframe: falsebackgroundColor: "#00000000"hasShadow: falseshow: false
- Familiar HTML/CSS sets transparent page background:
html, body { ... background: transparent; ... }
- The familiar shell currently uses CSS
filter: drop-shadow(...). - The speech/status bubble currently uses CSS
backdrop-filter: blur(...).
Likely cause
Windows/Electron transparent-window compositing is probably producing an opaque backing rectangle.
Most suspicious triggers:
- CSS
filter: drop-shadow(...)on.familiar-shellinside a transparent layered window. - CSS
backdrop-filter: blur(...)on.bubbleinside a transparent layered window. - Showing the transparent window before the first clean renderer paint.
Confidence: medium-high.
Electron has documented transparent-window limitations, and related reports exist for Windows transparent windows showing black/gray/invalid backgrounds, especially around GPU/compositor behavior and filter/backdrop-filter effects.
Useful references:
- Electron custom window styles / transparent window limitations: https://www.electronjs.org/docs/latest/tutorial/custom-window-styles
- Electron
BrowserWindowlifecycle /ready-to-show: https://www.electronjs.org/docs/latest/api/browser-window - Backdrop/filter transparent-window issue pattern: https://github.com/electron/electron/issues/26029
- Windows transparent background reports: https://github.com/electron/electron/issues/40515
- Windows transparency regression examples: https://github.com/electron/electron/issues/48592
Planned fix attempts
Try these in order:
- Gate/remove
backdrop-filteron Windows (including.bubble.is-pinned). - Gate/remove or simplify
.familiar-shelldrop-shadowon Windows. - Delay showing the familiar until first successful load/render (
ready-to-showor an explicit renderer-ready signal). - If still broken, test Windows-specific GPU/compositor mitigations. Do not start with global
app.disableHardwareAcceleration()unless the safer CSS/lifecycle fixes fail, because it may vary by machine and can regress other rendering.
Verification plan
Ask Windows testers to confirm:
- Built-in familiar has no gray/black rectangle.
- Installed/gallery familiars have no gray/black rectangle.
- Familiar bubbles do not create a gray/black rectangle when visible.
- Behavior after app restart is still correct.
Results log
| Date | Version/Build | Attempt | Local result | Community result | Notes |
|---|---|---|---|---|---|
| 2026-05-14 | unreleased | Gate Windows .familiar-shell drop-shadow and .bubble backdrop-filter to none |
Pending checks | Pending | First low-risk compositor mitigation; needs Windows tester confirmation. |
| 2026-06-17 | unreleased | Also gate .bubble.is-pinned backdrop-filter on Windows; add packaging contract assertion |
Implemented | Pending | Extends compositor mitigation to pinned plugin bubbles; tracked in check-packaging-contract.ts. |
Bug B: cannot move or right-click familiar after changing familiar
Report
On Windows, the familiar can initially be moved and right-clicked. After changing to another familiar, it cannot be moved or right-clicked anymore. Exiting and launching the app again restores interaction.
Current input path
- Default familiar window is reused instead of recreated.
- Familiar change calls
refreshDefaultPetContent(). refreshDefaultPetContent()reloads the existing familiar window content withloadFile(...).- Input handling uses Electron
setIgnoreMouseEvents(true, { forward: true })on Windows/macOS so transparent background clicks pass through. - The renderer preload sends hit-test and drag IPC based on
elementFromPoint(...).closest(".familiar-shell, .bubble"). - Current passthrough setup only runs once after the first load:
window.webContents.once("did-finish-load", () => setPassthrough(true));
Likely cause
The BrowserWindow keeps OS-level mouse passthrough state across loadFile(...) reloads, but our code only re-arms/reset it once. After familiar change, Windows can leave the window in ignored/pass-through mode or lose forwarded mouse events. Then mouse events do not reach the renderer, so drag and context-menu handling never start.
Confidence: high.
This matches Electron reports where setIgnoreMouseEvents(true, { forward: true }) forwarding breaks after reload/refresh or becomes stuck.
Useful references:
- Electron custom interactions / click-through windows: https://www.electronjs.org/docs/latest/tutorial/custom-window-interactions
- Electron
BrowserWindow#setIgnoreMouseEvents: https://www.electronjs.org/docs/latest/api/browser-window - Forwarding breaks after refresh pattern: https://github.com/electron/electron/issues/15376
- Modern click-through/reload stuck report: https://github.com/electron/electron/issues/49982
- Windows forwarding/hover instability: https://github.com/electron/electron/issues/30808
Planned fix attempts
Try these in order:
- Make passthrough reload-safe:
- Reset
setIgnoreMouseEvents(false)before every familiar content navigation/reload. - Clear any active drag state before navigation/reload.
- Re-apply passthrough after every load, not only the first load.
- Reset
- Add an explicit renderer-ready IPC from
familiar-preload.cjsafter mouse handlers are installed, then resync passthrough from main. - If Windows still fails, stop using full
loadFile(...)as the familiar-switch primitive:- update DOM/sprite data in-place, or
- recreate the familiar window on familiar change while preserving position and visibility.
Verification plan
Ask Windows testers to confirm:
- Familiar can be dragged immediately after launch.
- Familiar right-click menu opens immediately after launch.
- Change from built-in familiar to installed familiar, then drag and right-click still work.
- Change from installed familiar back to built-in familiar, then drag and right-click still work.
- Repeat familiar switching multiple times without restarting.
- Try while a bubble/status badge is visible.
Results log
| Date | Version/Build | Attempt | Local result | Community result | Notes |
|---|---|---|---|---|---|
| 2026-05-14 | unreleased | Reset passthrough before familiar content reload, re-arm after every load, and add renderer-ready IPC | Pending checks | Pending | Targets Electron setIgnoreMouseEvents(..., { forward: true }) reload/forwarding flake. |
Implementation notes for upcoming fix
Recommended first patch scope:
- Update familiar window passthrough lifecycle in
apps/desktop/src/familiar-window.ts. - Update
apps/desktop/familiar-preload.cjsif adding renderer-ready IPC. - Gate Windows-specific visual effects in
createPetWindowCss(...). - Add or update contract checks in
apps/desktop/src/check-packaging-contract.tsso future changes do not regress the Windows workaround.
Potential release note wording after implementation:
Fixed Windows familiar window transparency and interaction reliability when switching familiars. This release removes fragile transparent-window visual effects on Windows and reinitializes click-through/drag handling after familiar reloads. Please report whether gray familiar backgrounds or lost drag/right-click behavior still occur on your Windows machine.