sparkles:wsi — Open issues
Only unresolved design or evidence questions live here. Accepted decisions belong in SPEC.md; delivery order belongs in PLAN.md.
Last reviewed: September 17, 2026
| ID | Question | Why it remains open | Decision point |
|---|---|---|---|
| WSI-O2 | Should X11 use one Xlib-created display shared with XCB for XIM, or a pure XCB connection plus a separately integrated XIM strategy? | The lifecycle/loop slice now owns one XCB connection and one OpPollAdd; XIM remains the practical desktop baseline, and adding a second independently pumped Xlib queue would violate that proven seam. | M4 X11 input slice |
| WSI-O4 | Which Wayland CSD renderer owns the bootstrap frame before Skia Graphite exists? | WSI must not draw, yet GNOME requires CSD before M7. A minimal protocol/hit-region harness can prove semantics without pretending to be the final renderer. | M3 Wayland first-pixel slice |
| WSI-O5 | Which native frame signals are sufficiently reliable to drive continuous animation on Win32 and AppKit? | DWM timing and display-link APIs report different lifecycle/occlusion semantics. The common event is decided; source selection needs measurement. | M2/M3 pacing spikes |
| WSI-O6 | How much of clipboard/DnD transfer belongs in WSI versus an Event Horizon stream helper? | Platform negotiation is WSI-owned, but large transfer backpressure should reuse the loop without turning WindowEvent into an I/O handle grab bag. | M5 design review |
| WSI-O7 | Does full in ui-app link all GUI backends simultaneously or expose mutually exclusive child configurations? | Simultaneous native/SDL/raylib symbols and platform closures may be too large for production while useful in Gallery and parity tests. | M8 configuration spike |
| WSI-O8 | Which native Windows host can certify per-monitor DPI, DWM, raw input, accessibility and IME behavior? | The hosted windows-latest test leg now runs the Win32 driver on a real User32/IOCP (the shared suite passes at the Wine counts), but that runner is a 96-DPI desktop with no IME on its layout, so the IMM32 preedit-phase evidence stays with Wine (the result-string commit is native now) and the rest still has no native certifier. | before marking Win32 F01–F17 verified |
Closed decisions
| Decision | Resolution |
|---|---|
| Package name | sparkles:wsi |
| Desktop backends | native Wayland, X11, Win32 and AppKit |
| Cross-platform WSI dependency | none in the native core |
| Loop ownership | one integrated Event Horizon loop |
| OS-owned loop attachment | runHostedOnce/tickHosted; User32 waits on an IOCP mirror event, while AppKit wraps the native kqueue descriptor in CFFileDescriptor |
| Win32 first IME | IMM32; TSF is deferred behind native Graphite and ui-app integration |
| Wayland decorations | request SSD; renderer-drawn CSD fallback; no libdecor hard dependency |
| Native renderer API | typed closed native-handle sum |
| SDL | explicit compatibility package/configuration only |
Event text storage (WSI-O3) | copy-on-write buffer, 16 bytes inline, 64 KiB bound, thread-confined: SPEC.md §4.5 ED8 |
Delivery under load (WSI-O9) | bounded queue, motion merged in place with a sample ring beside it, overflow counted and never fatal: SPEC.md §4.5 ED1–ED10, reasoning in event-delivery.md |